{
  "log": {
    "version": "1.2",
    "creator": {
      "name": "WebInspector",
      "version": "537.36"
    },
    "pages": [
      {
        "startedDateTime": "2026-08-20T09:09:09.311Z",
        "id": "page_1",
        "title": "https://ekat.festool.de/login/app",
        "pageTimings": {
          "onContentLoad": 728.3430000534281,
          "onLoad": 799.4490000419319
        }
      }
    ],
    "entries": [
      {
        "_initiator": {
          "type": "other"
        },
        "_priority": "VeryHigh",
        "_resourceType": "document",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/login/app",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": ":authority",
              "value": "ekat.festool.de"
            },
            {
              "name": ":method",
              "value": "GET"
            },
            {
              "name": ":path",
              "value": "/login/app"
            },
            {
              "name": ":scheme",
              "value": "https"
            },
            {
              "name": "accept",
              "value": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7"
            },
            {
              "name": "accept-encoding",
              "value": "gzip, deflate, br, zstd"
            },
            {
              "name": "accept-language",
              "value": "en-GB,en-US;q=0.9,en;q=0.8"
            },
            {
              "name": "priority",
              "value": "u=0, i"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            },
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "sec-fetch-dest",
              "value": "document"
            },
            {
              "name": "sec-fetch-mode",
              "value": "navigate"
            },
            {
              "name": "sec-fetch-site",
              "value": "none"
            },
            {
              "name": "sec-fetch-user",
              "value": "?1"
            },
            {
              "name": "upgrade-insecure-requests",
              "value": "1"
            },
            {
              "name": "user-agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            }
          ],
          "queryString": [],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 302,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "cache-control",
              "value": "no-cache,no-store,must-revalidate,post-check=0,pre-check=0"
            },
            {
              "name": "content-length",
              "value": "0"
            },
            {
              "name": "content-type",
              "value": "text/html;charset=UTF-8"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 09:09:49 GMT"
            },
            {
              "name": "expires",
              "value": "Thu, 01 Jan 1970 00:00:00 GMT"
            },
            {
              "name": "location",
              "value": "https://ekat.festool.de/login/app?__bk_&__windowid=IRW3104379&__rid=FOE1787216989423#2VFB2144C915D47DFAD66CC73CEC1F7E17E1D29351DB45EA618EEFB7B1BB136D42B8044FCE28E6056D"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "pragma",
              "value": "no-cache"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "x-robots-tag",
              "value": "noindex"
            }
          ],
          "cookies": [],
          "content": {
            "size": 0,
            "mimeType": "text/html"
          },
          "redirectURL": "https://ekat.festool.de/login/app?__bk_&__windowid=IRW3104379&__rid=FOE1787216989423#2VFB2144C915D47DFAD66CC73CEC1F7E17E1D29351DB45EA618EEFB7B1BB136D42B8044FCE28E6056D",
          "headersSize": -1,
          "bodySize": -1,
          "_transferSize": 437,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:09.304Z",
        "time": 174.68900000896303,
        "timings": {
          "blocked": 8.510999918706716,
          "dns": 0.015000000000000124,
          "ssl": 48.51199999999999,
          "connect": 87.243,
          "send": 0.33200000000000784,
          "wait": 77.05899997281283,
          "receive": 1.529000117443502,
          "_blocked_queueing": 6.486999918706715,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_connectionId": "1726423",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "other"
        },
        "_priority": "VeryHigh",
        "_resourceType": "document",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/login/app?__bk_&__windowid=IRW3104379&__rid=FOE1787216989423",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": ":authority",
              "value": "ekat.festool.de"
            },
            {
              "name": ":method",
              "value": "GET"
            },
            {
              "name": ":path",
              "value": "/login/app?__bk_&__windowid=IRW3104379&__rid=FOE1787216989423"
            },
            {
              "name": ":scheme",
              "value": "https"
            },
            {
              "name": "accept",
              "value": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7"
            },
            {
              "name": "accept-encoding",
              "value": "gzip, deflate, br, zstd"
            },
            {
              "name": "accept-language",
              "value": "en-GB,en-US;q=0.9,en;q=0.8"
            },
            {
              "name": "priority",
              "value": "u=0, i"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            },
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "sec-fetch-dest",
              "value": "document"
            },
            {
              "name": "sec-fetch-mode",
              "value": "navigate"
            },
            {
              "name": "sec-fetch-site",
              "value": "none"
            },
            {
              "name": "sec-fetch-user",
              "value": "?1"
            },
            {
              "name": "upgrade-insecure-requests",
              "value": "1"
            },
            {
              "name": "user-agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            }
          ],
          "queryString": [
            {
              "name": "__bk_",
              "value": ""
            },
            {
              "name": "__windowid",
              "value": "IRW3104379"
            },
            {
              "name": "__rid",
              "value": "FOE1787216989423"
            }
          ],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "cache-control",
              "value": "no-cache,no-store,must-revalidate,post-check=0,pre-check=0"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "content-length",
              "value": "4666"
            },
            {
              "name": "content-type",
              "value": "text/html;charset=UTF-8"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 09:09:49 GMT"
            },
            {
              "name": "expires",
              "value": "Thu, 01 Jan 1970 00:00:00 GMT"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "pragma",
              "value": "no-cache"
            },
            {
              "name": "x-frame-options",
              "value": "deny"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "x-robots-tag",
              "value": "noindex"
            }
          ],
          "cookies": [],
          "content": {
            "size": 29051,
            "mimeType": "text/html",
            "text": "<!DOCTYPE html>\n<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"><meta name=\"creator\" content=\"Application: &#39;Shop&#39;, Version: &#39;7.26.1.5&#39;, Date: &#39;29.06.2026&#39;, Copyright: &#39;Quanos Solutions GmbH 1999-2026&#39;\"><meta name=\"date\" content=\"Thu Aug 20 11:09:49 CEST 2026\"><meta http-equiv=\"Pragma\" content=\"no-cache\"><meta http-equiv=\"Expires\" content=\"Mon, 06 Jan 1990 00:00:01 GMT\"><meta name=\"format-detection\" content=\"telephone=no\"><link rel=\"manifest\" href=\"manifest_Festool_en_GB.json\"><link rel=\"apple-touch-icon\" sizes=\"114x114\" href=\"WEB-RES/RESOURCES/themes/Festool/ios-144x144.png\"><link rel=\"shortcut icon\" href=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.b_defaultimages_material_WebAppFavIcon_16px_normal.png\"><link rel=\"stylesheet\" type=\"text/css\" href=\"WEB-RES/css/style_Festool.css_shop_7.26.1.5.css\"><script type=\"text/javascript\" src=\"WEB-RES/js/clipboard.js_shop_7.26.1.5.js\"></script><script type=\"text/javascript\" src=\"WEB-RES/js/mdc.textfield.js_shop_7.26.1.5.js\"></script><script type=\"text/javascript\" src=\"WEB-RES/js/inputmask.js_shop_7.26.1.5.js\"></script><script type=\"text/javascript\" src=\"WEB-RES/js/base.js_shop_7.26.1.5.js\"></script><script type=\"text/javascript\" src=\"WEB-RES/js/plugin.js_shop_7.26.1.5.js\"></script><script type=\"text/javascript\" src=\"WEB-RES/js/html5-qrcode.min.js_shop_7.26.1.5.js\"></script><script type=\"text/javascript\" src=\"WEB-RES/js/cropper.js_shop_7.26.1.5.js\"></script><script type=\"text/javascript\" src=\"WEB-RES/js/components.js_shop_7.26.1.5.js\"></script><script type=\"text/javascript\">/*SHOP_CAT_UPDATE*/    if (dwUtilsIsDefined(window.SHOP_CAT_UPDATE_INTERVAL)) {\n        clearInterval(window.SHOP_CAT_UPDATE_INTERVAL);\n    }\n    window.SHOP_CAT_UPDATE_INTERVAL = setInterval(function() {\n        try {\n            if (!framework_isActive) {\n                return;\n            }\n            dwUtilsLoadUrlInInvisibleTarget('https:\\/\\/ekat.festool.de\\/ekat\\/WEB-API\\/ping', \"GET\", '', null, false, false, '', null, 'debug', 'UPDATE_SESSION_TIMER');\n        } catch (exception){}\n    }, 180000);\n</script><script type=\"text/javascript\" src=\"WEB-RES/js/html2pdf.bundle.min.js_shop_7.26.1.5.js\"></script><script type=\"text/javascript\">var currentlyOpenedContextMenuPopup;var currentlyOpenedComboboxPopup;</script><title>Quanos SIS.one Shop</title><script type=\"text/javascript\">function init() {dwFrameworkInitFramework('Kunde-FT_com-en',false,false,false,false,false,true,false,false,false,true,0,true,'none',true,true,false,true, false,false,'chrome','151.0.0.0', true,'<!DOCTYPE html>',false, [\"USER_LOGIN\"], false,true);dwResizeRegistryGetInstance().addControl('OER3104379','OER3104379','QUP3104379');dwHelperScrollToStoredPosition('OQS3104702');dwUtilsLoadUrlInTarget('https://ekat.festool.de/ekat/app?forcerestart=true&shopurl=https%3A%2F%2Fekat.festool.de%2Flogin%2Fapp&updateSessionTimerUrl=https%3A%2F%2Fekat.festool.de%2Flogin%2FWEB-API%2FupdateSessionTimer&basket=false&qss_shop=true&extId=IQW3104379&basket=false&currency=EUR&currencyKey=DE&docuLang=EN&filter_F_Typ1=on&filter_F_Zugriffsrechte=on&filterValues_F_Typ1=DE&filterValues_F_Zugriffsrechte=Endkunde&k_vari_top=festoolroot&locale=en_GB&partLang=EN&rowsPerPage=100&variant=extern&verticalLayout=1&viewerType=9&startasiacslave=https%3A%2F%2Fekat.festool.de%2Flogin&slaveid=https___ekat.festool.de_ekat_app&mastersessionid=A05035CB3B4359F9871749B06D302026', 'shopMain', 'POST');dwResizeRegistryGetInstance().addControl('OQS3104702','OQS3104702','GAE3104381');dwResizeRegistryGetInstance().addControl('KME3104697','KME3104697','COG3104697');dwResizeRegistryGetInstance().addControl('IRW3104379','IRW3104379','');dwFrameworkInitWindow('IRW3104379');dwDialogStoreDialogTranslations('error', 'An error occured', 'A communication error occurred. Would you like to try again?', 'Details', 'Copy to clipboard', 'Reload', null);dwDialogStoreDialogTranslations('lostConnection', 'Connection to server interrupted', 'A communication error occurred. Would you like to try again?', 'Details', 'Copy to clipboard', 'Reload', null);dwDialogStoreDialogTranslations('invalidSession', 'Invalid or expired session', 'Your running session is no longer valid.<br><br>This can have one of the following reasons:<br>* The session is expired.<br>* The browser has sent an outdated request.<br>* The server was restarted.<br><br>Please click \\\"Reload\\\".', 'Details', 'Copy to clipboard', 'Reload', null);dwDialogStoreDialogTranslations('message', null, null, null, null, 'Close', null);dwFrameworkInitFrameworkFinished();}function dwRelayout() {}function dwRelayoutCleanup() {var invalidIdxs = dwFrameworkCheckIds(\"\");dwFrameworkCleanupDeprecatedMethods(\"dwRelayout\", DWFRAMEWORK_CLEANUP_RELAYOUT_FUNCTION_NAME, DWFRAMEWORK_CLEANUP_RELAYOUT_INNER_FUNCTION_NAME, invalidIdxs);}</script></head><body style=\"margin:0px;height:100%;overflow:hidden\" id=\"body\" tabWindowId=\"GHD1787216989504\" oncontextmenu=\"try {dwFwPreEv(event,false,this);dwFrameworkPreventContextMenu(event);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this); ;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onkeyup=\"try {dwFwPreEv(event,false,this); ;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this); ;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmousedown=\"try {dwFwPreEv(event,false,this); ;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onkeydown=\"try {dwFwPreEv(event,false,this);dwFrameworkPreventBackspaceHistoryBack(event);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onresize=\"try {dwFwPreEv(event,false,this);if (!dwFrameworkInitFinished) {return;} dwFrameworkOnResize();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onload=\"try {dwFwPreEv(event,false,this);init();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div style=\"width:100%;margin:0px;position:relative;height:100%\" id=\"dwmainwrapper\"><form style=\"width:100%;height:100%\" action=\"app\" id=\"IRW3104379_form\" method=\"post\" autocomplete=\"off\" onsubmit=\"try {dwFwPreEv(event,false,this);if (!dwFrameworkOnSubmit(event)) {return false;} dwUtilsDisableInput();setTimeout(dwUtilsShowWaitCursor, 1000);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><input name=\"__windowid\" value=\"IRW3104379\" type=\"hidden\"><input name=\"__rid\" value=\"NLD1787216989503\" type=\"hidden\"><div class=\"guiwindow\" id=\"IRW3104379\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"><div style=\"padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:none;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"HYU3104379\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"position:relative;display:block\"><div style=\"max-height:-1px; overflow: hidden\"></div></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"BJO3104379\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-top:0;right:0;top:0px;left:0px;bottom:0;height:100%\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;right:0px;text-align:left;height:64px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-32px;right:0;height:64px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:#191e2b;padding-top:0px;margin:auto;top:0;color:#ffffff;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"QUP3104379\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"><div style=\"background-color:transparent;padding-top:8px;top:0;left:0;bottom:0;padding-left:8px;display:none;padding-bottom:0px;right:0;padding-right:8px\" class=\"guipanel\" id=\"OER3104379\"><div style=\"right:8px;top:8px;left:8px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-left:0px;top:50%;left:50%;bottom:0;width:0px;margin-top:0px;right:0;height:0px\" class=\"guilayoutgridbag_centered\"></div></div></div></div><div style=\"top:0px;width:292px;bottom:0px\" class=\"guilayoutborder_west\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"WHF3104784\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-left:-146px;top:50%;left:50%;bottom:0;width:292px;margin-top:-28px;right:0;height:56px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:140px;text-align:left;height:56px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:4px;top:50%;left:0;width:132px;margin-top:-28px;margin-bottom:0px;margin-right:4px;height:56px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;cursor:pointer;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel cursor_pointer\" id=\"CPJ3105943\" onmouseleave=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseLeave(event, &#39;CPJ3105943&#39;, &#39;CPJ3105943&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseenter=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseEnter(event, &#39;CPJ3105943&#39;, &#39;CPJ3105943&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnClick(event, &#39;CPJ3105943&#39;, &#39;CPJ3105943&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-left:-66px;top:50%;left:50%;bottom:0;width:132px;margin-top:-28px;right:0;height:56px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:132px;text-align:center;height:32px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-16px;top:50%;left:50%;width:32px;margin-top:-16px;margin-bottom:0px;margin-right:5px;height:32px\" class=\"guilayoutgridbag_container_padded\"><div style=\"padding-top:0px;margin:auto;padding-left:0px;width:32px;padding-bottom:0px;height:32px;padding-right:0px\" class=\"guiimage\" id=\"JQG4806433\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=ba_image_85D689790F96B1A5E7BA4CF36E8E4AF0\" alt=\"\" id=\"JQG4806433_img\"></div></div></div><div style=\"background-color:transparent;top:32px;left:0px;vertical-align:middle;width:132px;text-align:center;height:24px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-60px;top:50%;left:49.999%;width:121px;margin-top:-8px;margin-bottom:0px;margin-right:5px;height:20px\" class=\"guilayoutgridbag_container_padded\"><div style=\"padding-top:0px;margin:auto;padding-left:0px;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel\" id=\"PCF4806433\">Catalogue of parts</div></div></div></div></div></div></div></div><div style=\"background-color:transparent;top:0px;left:140px;vertical-align:middle;width:152px;text-align:left;height:56px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:4px;top:50%;left:0;width:144px;margin-top:-28px;margin-bottom:0px;margin-right:4px;height:56px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;cursor:pointer;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel cursor_pointer\" id=\"SVO3105943\" onmouseleave=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseLeave(event, &#39;SVO3105943&#39;, &#39;SVO3105943&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseenter=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseEnter(event, &#39;SVO3105943&#39;, &#39;SVO3105943&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnClick(event, &#39;SVO3105943&#39;, &#39;SVO3105943&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-left:-72px;top:50%;left:50%;bottom:0;width:144px;margin-top:-28px;right:0;height:56px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:144px;text-align:center;height:32px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-16px;top:50%;left:50%;width:32px;margin-top:-16px;margin-bottom:0px;margin-right:5px;height:32px\" class=\"guilayoutgridbag_container_padded\"><div style=\"padding-top:0px;margin:auto;padding-left:0px;width:32px;padding-bottom:0px;height:32px;padding-right:0px\" class=\"guiimage\" id=\"JNS4806430\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=ba_image_4A442C18BB9667967DFB206DCF66322C\" alt=\"\" id=\"JNS4806430_img\"></div></div></div><div style=\"background-color:transparent;top:32px;left:0px;vertical-align:middle;width:144px;text-align:center;height:24px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-67px;top:50%;left:50%;width:134px;margin-top:-8px;margin-bottom:0px;margin-right:5px;height:20px\" class=\"guilayoutgridbag_container_padded\"><div style=\"padding-top:0px;margin:auto;padding-left:0px;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel\" id=\"AVU4806430\">Service-Mediacenter</div></div></div></div></div></div></div></div><div style=\"background-color:transparent;top:0px;left:292px;vertical-align:middle;width:0px;text-align:left;height:56px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:4px;top:50%;left:0;width:0px;margin-top:0px;margin-bottom:0px;margin-right:4px;height:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;cursor:pointer;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:none;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel cursor_pointer\" id=\"SJC3104713\" onmouseleave=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseLeave(event, &#39;SJC3104713&#39;, &#39;SJC3104713&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseenter=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseEnter(event, &#39;SJC3104713&#39;, &#39;SJC3104713&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnClick(event, &#39;SJC3104713&#39;, &#39;SJC3104713&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-left:-38px;top:50%;left:50%;bottom:0;width:76px;margin-top:-28px;right:0;height:56px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:76px;text-align:center;height:32px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-16px;top:50%;left:50%;width:32px;margin-top:-16px;margin-bottom:0px;margin-right:5px;height:32px\" class=\"guilayoutgridbag_container_padded\"><div style=\"padding-top:0px;margin:auto;padding-left:0px;width:32px;padding-bottom:0px;height:32px;padding-right:0px\" class=\"guiimage\" id=\"RJE4806433\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=bi_image_class_image_de.docware.framework.modules.gui.design.b_defaultimages_material_Catalogue_32px_normal.png_grayedOut_0B02CBCFF1642DE1C50343CC9A91644C\" alt=\"\" id=\"RJE4806433_img\"></div></div></div><div style=\"background-color:transparent;top:32px;left:0px;vertical-align:middle;width:76px;text-align:center;height:24px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-33px;top:50%;left:50%;width:66px;margin-top:-8px;margin-bottom:0px;margin-right:5px;height:20px\" class=\"guilayoutgridbag_container_padded\"><div style=\"padding-top:0px;margin:auto;padding-left:0px;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel\" id=\"IMN4806433\">Catalogue</div></div></div></div></div></div></div></div></div></div></div></div><div style=\"right:70px;top:0px;left:292px;bottom:0px\" class=\"guilayoutborder_center\"></div><div style=\"top:0px;width:70px;bottom:0px\" class=\"guilayoutborder_east\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"IBI3104381\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-left:-35px;top:50%;left:50%;bottom:0;width:70px;margin-top:-32px;right:0;height:64px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:70px;text-align:left;height:64px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:7px;top:50%;left:0;margin-top:-28px;right:0;margin-bottom:4px;margin-right:7px;height:56px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;cursor:pointer;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel cursor_pointer\" id=\"XDM3105943\" onmouseleave=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseLeave(event, &#39;XDM3105943&#39;, &#39;XDM3105943&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseenter=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseEnter(event, &#39;XDM3105943&#39;, &#39;XDM3105943&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnClick(event, &#39;XDM3105943&#39;, &#39;XDM3105943&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-left:-28px;top:50%;left:50%;bottom:0;width:56px;margin-top:-28px;right:0;height:56px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:56px;text-align:center;height:32px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-16px;top:50%;left:50%;width:32px;margin-top:-16px;margin-bottom:0px;margin-right:5px;height:32px\" class=\"guilayoutgridbag_container_padded\"><div style=\"padding-top:0px;margin:auto;padding-left:0px;width:32px;padding-bottom:0px;height:32px;padding-right:0px\" class=\"guiimage\" id=\"TKL4806433\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=ba_image_3BF40FA40647BDB9724ACB6BA862FB64\" alt=\"\" id=\"TKL4806433_img\"></div></div></div><div style=\"background-color:transparent;top:32px;left:0px;vertical-align:middle;width:56px;text-align:center;height:24px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-22px;top:50%;left:49.999%;width:45px;margin-top:-8px;margin-bottom:0px;margin-right:5px;height:20px\" class=\"guilayoutgridbag_container_padded\"><div style=\"padding-top:0px;margin:auto;padding-left:0px;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel\" id=\"GKI4806433\">Search</div></div></div></div></div></div></div></div></div></div></div></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div></div><div style=\"background-color:transparent;top:64px;left:0px;vertical-align:middle;right:0px;text-align:left;height:5px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:49.999%;left:0;margin-top:-2px;right:0;height:5px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:#536877;padding-top:0px;margin:auto;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;min-height:5px;right:0;padding-right:0px;min-width:5px\" class=\"guipanel\" id=\"EUN3104379\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div></div><div style=\"background-color:transparent;top:69px;left:0px;bottom:0px;vertical-align:middle;right:0px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:0;left:0;bottom:0;margin-top:0px;right:0;margin-bottom:0px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"padding-top:0px;margin:auto;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;min-height:10px;right:0;padding-right:0px;min-width:10px\" class=\"guipanel\" id=\"GAE3104381\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><input name=\"OQS3104702_scrollTop\" value=\"0\" type=\"hidden\" id=\"OQS3104702_scrollTop\"><input name=\"OQS3104702_scrollLeft\" value=\"0\" type=\"hidden\" id=\"OQS3104702_scrollLeft\"><div id=\"OQS3104702_rootGuiScrollPane\" class=\"guiscrollpane_root\"><div style=\"padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guiscrollpane\" scrollbarWidth=\"15\" id=\"OQS3104702\" horizontalScrollEnabled=\"true\" verticalScrollEnabled=\"true\" onscroll=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxScrollpaneScrolled(event, &#39;OQS3104702&#39;, &#39;OQS3104702&#39;, &#39;&#39;, true, true);dwFrameworkPreventDefaultBehaviour(event);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onresize=\"try {dwFwPreEv(event,false,this);dwHelperScrollPaneValueChanged(&#39;OQS3104702&#39;);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div style=\"border:0;padding-top:0px;padding-left:0px;width:0px;padding-bottom:0px;min-height:100%;padding-right:0px;min-width:100%;height:0px\" class=\"guipanel\" id=\"JSH3104702\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-top:0;right:0;top:0px;left:0px;bottom:0;height:100%\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;right:0px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:0;left:0;bottom:0;margin-top:0px;right:0;margin-bottom:0px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"padding-top:0px;margin:auto;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"NUX3104702\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><iframe style=\"border:none;padding-top:0px;padding-left:0px;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" src=\"about:blank\" name=\"shopMain\" class=\"guiviewerhtml\" id=\"NTE3104784\"></iframe></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div></div></div></div></div></div></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div></div></div></div></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"><div style=\"padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"FPX3104381\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"background-color:#efefef;padding-top:0px;top:0;left:0;bottom:0;padding-left:4px;display:none;padding-bottom:0px;border-width:0px;min-height:24px;right:0;padding-right:4px\" class=\"guipanel\" id=\"COG3104697\"><div style=\"right:4px;top:0px;left:4px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-top:0px;right:0;top:50%;left:0px;bottom:0;height:0px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;right:0px;text-align:left;height:0px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:0px;right:0;height:0px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"KME3104697\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:0px;top:0;left:0;height:0px\" class=\"guilayoutgridbag_centered\"></div></div></div></div></div></div></div></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div></div><img src=\"WEB-RES/resource/resource?id=bi_image_framework_transparent_56ABE4CBC175363DA0810882244B34FF\" alt=\"\" id=\"invisibleTargetForBackgroundActivity\" width=\"0px\" height=\"0px\"></div><input type=\"hidden\" name=\"id__submit_eventHandlerComponentId\" id=\"IRW3104379_id__submit_eventHandlerComponentId\" value=\"\"><input type=\"hidden\" name=\"id__submit_action\" id=\"IRW3104379_id__submit_action\" value=\"\"><input type=\"hidden\" name=\"id__submit_receiverId\" id=\"IRW3104379_id__submit_receiverId\" value=\"\"><input type=\"hidden\" name=\"__ID_activatingControl\" id=\"IRW3104379___ID_activatingControl\" value=\"\"><input type=\"hidden\" name=\"__ID_actualActivatingControl\" id=\"IRW3104379___ID_actualActivatingControl\" value=\"\"><input type=\"hidden\" name=\"strgKeyPressed\" id=\"IRW3104379_strgKeyPressed\" value=\"false\"><input type=\"hidden\" name=\"__POINT_controlPosition\" id=\"IRW3104379___POINT_controlPosition\" value=\"-1:-1\"><input type=\"hidden\" name=\"hotkey\" id=\"IRW3104379_hotkey\" value=\"\"><input type=\"hidden\" name=\"hotkeyType\" id=\"IRW3104379_hotkeyType\" value=\"\"><input type=\"hidden\" name=\"focusComponent\" id=\"IRW3104379_focusComponent\" value=\"\"></form></div><div id=\"lostConnectionBanner\" class=\"banner_window\"><div class=\"guiwindow_child_overlay\"></div><div style=\"font-size:14px;padding:0 8px;line-height:45px;font-weight:600;text-align:center;height:45px\" class=\"banner\"><span class=\"load-animation\"><div style=\"animation-duration:1.4s;animation-timing-function:ease-in-out;background-color:#cca023;animation-delay:-0.32s;animation-fill-mode:both;-webkit-animation-delay:-0.32s;animation-iteration-count:infinite;animation-direction:normal;animation-name:load-animation\"></div><div style=\"animation-duration:1.4s;animation-timing-function:ease-in-out;background-color:#cca023;animation-delay:-0.16s;animation-fill-mode:both;-webkit-animation-delay:-0.16s;animation-iteration-count:infinite;animation-direction:normal;animation-name:load-animation\"></div><div style=\"animation-duration:1.4s;animation-timing-function:ease-in-out;background-color:#cca023;animation-fill-mode:both;animation-iteration-count:infinite;animation-direction:normal;animation-name:load-animation\"></div></span>Loading...<span style=\"font-weight:600\" id=\"lostConnectionBannerTimer\"></span></div></div></body></html>"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": -1,
          "_transferSize": 4756,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:09.479Z",
        "time": 58.13499994110316,
        "timings": {
          "blocked": 2.9469999667182565,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0.3610000000000002,
          "wait": 53.4999999980852,
          "receive": 1.3269999762997031,
          "_blocked_queueing": 0.4389999667182565,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_connectionId": "1726423",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "parser",
          "url": "https://ekat.festool.de/login/app?__bk_&__windowid=IRW3104379&__rid=FOE1787216989423",
          "lineNumber": 1
        },
        "_priority": "VeryHigh",
        "_resourceType": "stylesheet",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/login/WEB-RES/css/style_Festool.css_shop_7.26.1.5.css",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": ":authority",
              "value": "ekat.festool.de"
            },
            {
              "name": ":method",
              "value": "GET"
            },
            {
              "name": ":path",
              "value": "/login/WEB-RES/css/style_Festool.css_shop_7.26.1.5.css"
            },
            {
              "name": ":scheme",
              "value": "https"
            },
            {
              "name": "accept",
              "value": "text/css,*/*;q=0.1"
            },
            {
              "name": "accept-encoding",
              "value": "gzip, deflate, br, zstd"
            },
            {
              "name": "accept-language",
              "value": "en-GB,en-US;q=0.9,en;q=0.8"
            },
            {
              "name": "if-modified-since",
              "value": "Wed, 31 Dec 1969 23:59:59 GMT"
            },
            {
              "name": "if-none-match",
              "value": "W/\"107848-1787216828356\""
            },
            {
              "name": "priority",
              "value": "u=0"
            },
            {
              "name": "referer",
              "value": "https://ekat.festool.de/login/app?__bk_&__windowid=IRW3104379&__rid=FOE1787216989423"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            },
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "sec-fetch-dest",
              "value": "style"
            },
            {
              "name": "sec-fetch-mode",
              "value": "no-cors"
            },
            {
              "name": "sec-fetch-site",
              "value": "same-origin"
            },
            {
              "name": "user-agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            }
          ],
          "queryString": [],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "cache-control",
              "value": "public"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "content-length",
              "value": "14629"
            },
            {
              "name": "content-type",
              "value": "text/css"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 09:09:49 GMT"
            },
            {
              "name": "etag",
              "value": "W/\"107848-1787216989665\""
            },
            {
              "name": "expires",
              "value": "Thu, 20 Aug 2026 09:11:49 GMT"
            },
            {
              "name": "last-modified",
              "value": "Wed, 31 Dec 1969 23:59:59 GMT"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "pragma",
              "value": "cache"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "x-robots-tag",
              "value": "noindex"
            }
          ],
          "cookies": [],
          "content": {
            "size": 107848,
            "mimeType": "text/css",
            "text": "html,body{height:100%;width:100%;background-color:#ffffff;color:#000000;}html,table,tbody,tr,td,th,a,div,span,p,input,button,form,textarea,select,img,fieldset,legend{font-size:14px;font-style:normal;font-weight:normal;line-height:15px;cursor:default;}table,tbody,tr,td,th,a,div,span,p,input,button,form,textarea,select,img,fieldset,legend{box-sizing:border-box;-webkit-box-sizing:border-box;-webkit-tap-highlight-color:rgba(0, 0, 0, 0);user-select:none;-webkit-user-select:none;touch-action:pan-y;}body,table,tbody,tr,td,th,a,div,span,p,input,button,form,textarea,select,img,fieldset,legend{font-family:Open Sans,Segoe UI,Verdana,Tahoma,Arial,sans-serif,Arial Unicode MS,Helvetica,Lucida Grande,Geneva,Sans-Serif;margin:0;padding:0;border:0px solid transparent;}textarea{resize:none;}a{text-decoration:none;color:#000000;}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;margin:0;}*:focus{outline:none;}iframe{display:block;}.cursor_default * {cursor:default;}.cursor_crosshair * {cursor:crosshair;}.cursor_text * {cursor:text;}.cursor_wait * {cursor:wait;}.cursor_sw-resize * {cursor:sw-resize;}.cursor_se-resize * {cursor:se-resize;}.cursor_nw-resize * {cursor:nw-resize;}.cursor_ne-resize * {cursor:ne-resize;}.cursor_n-resize * {cursor:n-resize;}.cursor_s-resize * {cursor:s-resize;}.cursor_w-resize * {cursor:w-resize;}.cursor_e-resize * {cursor:e-resize;}.cursor_pointer * {cursor:pointer;}.cursor_move * {cursor:move;}\n@font-face {\n  font-family:'Open Sans';\n  src:\n    url('../../WEB-RES/custom/designs/Festool/fonts/OpenSans-Regular.eot');\n  src:\n    url('../../WEB-RES/custom/designs/Festool/fonts/OpenSans-Regular.eot?#iefix') format('embedded-opentype'),\n    url('../../WEB-RES/custom/designs/Festool/fonts/OpenSans-Regular.ttf') format('truetype');\n  font-style:normal;\n  font-weight:normal;\n}\n@font-face {\n  font-family:'Open Sans';\n  src:\n    url('../../WEB-RES/custom/designs/Festool/fonts/OpenSans-Bold.eot');\n  src:\n    url('../../WEB-RES/custom/designs/Festool/fonts/OpenSans-Bold.eot?#iefix') format('embedded-opentype'),\n    url('../../WEB-RES/custom/designs/Festool/fonts/OpenSans-Bold.ttf') format('truetype');\n  font-style:normal;\n  font-weight:bold;\n}\n@font-face {\n  font-family:'Open Sans';\n  src:\n    url('../../WEB-RES/custom/designs/Festool/fonts/OpenSans-Italic.eot');\n  src:\n    url('../../WEB-RES/custom/designs/Festool/fonts/OpenSans-Italic.eot?#iefix') format('embedded-opentype'),\n    url('../../WEB-RES/custom/designs/Festool/fonts/OpenSans-Italic.ttf') format('truetype');\n  font-style:italic;\n  font-weight:normal;\n}\n@font-face {\n  font-family:'Open Sans';\n  src:\n    url('../../WEB-RES/custom/designs/Festool/fonts/OpenSans-BoldItalic.eot');\n  src:\n    url('../../WEB-RES/custom/designs/Festool/fonts/OpenSans-BoldItalic.eot?#iefix') format('embedded-opentype'),\n    url('../../WEB-RES/custom/designs/Festool/fonts/OpenSans-BoldItalic.ttf') format('truetype');\n  font-style:italic;\n  font-weight:bold;\n}\n@font-face {\n  font-family:'Open Sans';\n  src:\n    url('../../WEB-RES/custom/designs/Festool/fonts/OpenSans-Semibold.eot');\n  src:\n    url('../../WEB-RES/custom/designs/Festool/fonts/OpenSans-Semibold.eot?#iefix') format('embedded-opentype'),\n    url('../../WEB-RES/custom/designs/Festool/fonts/OpenSans-SemiBold.ttf') format('truetype');\n  font-style:normal;\n  font-weight:600;\n}\n@font-face {\n  font-family:'Open Sans';\n  src:\n    url('../../WEB-RES/custom/designs/Festool/fonts/OpenSans-SemiboldItalic.eot');\n  src:\n    url('../../WEB-RES/custom/designs/Festool/fonts/OpenSans-SemiboldItalic.eot?#iefix') format('embedded-opentype'),\n    url('../../WEB-RES/custom/designs/Festool/fonts/OpenSans-SemiboldItalic.ttf') format('truetype');\n  font-style:italic;\n  font-weight:600;\n}\n\n\n\n@keyframes anim_opacity100 {  0% {  opacity: 0;  }  100% {  opacity: 1;  } }\n\n@keyframes anim_opacity40 {  0% {  opacity: 0;  }  100% {  opacity: 0.4;  } }\n\n@keyframes anim_opacity30 {  0% {  opacity: 0;  }  100% {  opacity: 0.3;  } }\n\n@keyframes anim_opacity20 {  0% {  opacity: 0;  }  100% {  opacity: 0.2;  } }\n.highlightOnHover:hover{filter:brightness(1.1);}.highlightOnHover > img:hover{filter:contrast(50%);}.brightenAndRemoveShadowOnClick:active{filter:brightness(0.9) !important;box-shadow:none !important;}.brightenAndRemoveShadowAtInnerImageOnClick > img:active{filter:brightness(0.9) !important;box-shadow:none !important;}.brightenOnHoverForGrayComponents:hover{filter:brightness(1.05);}.brightenOnHoverForGrayComponents > img:hover{filter:contrast(50%);}.decreaseContrastForIconsOnHover:hover{filter:contrast(50%);}.removeShadowForIconsOnClick:active{filter:drop-shadow(0px 0px 1px rgba(0,0,0,.5));}.decreaseContrastForPartlistIconsOnHover:hover{filter:contrast(0.40);}.incraseContrastForPartlistIconsOnClick:active{filter:contrast(0.9);}.guibutton_enabled{white-space:pre;text-align:center;vertical-align:middle;background-repeat:repeat-x;border:1px solid #e1e1e1;background-color:#e1e1e1;color:#000000;}.guibutton_enabled:hover{border:2px solid #a5acb2;}.guibutton_enabled:focus{border:3px double #a5acb2;}.guibutton_disabled{white-space:pre;text-align:center;vertical-align:middle;background-repeat:repeat-x;border:1px solid #cccccc;background-color:#cccccc;color:#838383;}.guibutton_horizontalalignment_disabled{padding:3.5px !important;}.guibutton_horizontalalignment{padding:3.5px !important;}.guibutton_horizontalalignment:hover{padding:2.5px !important;}.guibutton_horizontalalignment:focus{padding:1.5px !important;}.guibutton_linkenabled{cursor:pointer;border:0;white-space:pre;text-align:left;vertical-align:middle;color:#000000;background-color:transparent;}.guibutton_linkenabled:hover{cursor:pointer;text-decoration:underline;color:#000000;}.guibutton_linkdisabled{cursor:default;border:0;white-space:pre;text-align:left;vertical-align:middle;color:#838383;background-color:transparent;}.guibutton_icon{border:0;vertical-align:middle;}.rbutton_border_right{background-color:#00519e;width:2px;height:100%;position:absolute;top:0;right:0;border-radius:2px;}.rbutton_border_left{background-color:#00519e;width:2px;height:100%;position:absolute;top:0;left:0;border-radius:2px;}.rbutton_border_bottom{background-color:#00519e;width:100%;height:2px;position:absolute;left:0;bottom:0;border-radius:2px;}.rbutton_border_top{background-color:#00519e;width:100%;height:2px;position:absolute;top:0;left:0;border-radius:2px;}.guicanvas{position:absolute;top:0;left:0;}.guicanvas_text, .guicanvas_text_rotated{position:absolute;white-space:nowrap;}.guicanvas_text_rotated{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);transform:rotate(90deg);transform-origin:left bottom;-webkit-transform-origin:left bottom;}.guicheckbox{}.guicheckbox_textspan{font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;line-height:inherit;}.guicheckbox_input{vertical-align:middle;}.guicombobox{border:1px solid #a5acb2;background-color:#ffffff;}.guicustomcombobox{border:1px solid #a5acb2;background-color:#ffffff;color:#000000;text-align:left;position:relative;}.guicustomcomboboxinputcontainer{position:absolute;top:0;left:0;bottom:0;font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;line-height:inherit;}.guicustomcomboboxinput{width:100%;cursor:default;padding-top:2px;padding-right:2px;padding-left:2px;padding-bottom:2px;background-color:transparent;color:inherit;height:100%;user-select:text;-webkit-user-select:text;autocapitalize:off;autocorrect:off;font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;line-height:inherit;}.guicustomcomboboximagecontainer{position:absolute;top:0;right:0;bottom:0;text-align:center;background-repeat:repeat-x;}.guicustomcomboboxicon{width:100%;height:100%;background-repeat:no-repeat;background-position:50% 50%;}.guicustomcomboboxpopup{border:1px solid #a5acb2;position:absolute;white-space:pre;cursor:default;overflow-x:hidden;overflow-y:auto;filter:progid:DXImageTransform.Microsoft.Shadow(color='#777777', Direction=135, Strength=4);box-shadow:2px 2px 2px #777777;-webkit-box-shadow:2px 2px 2px #777777;}.guicustomcomboboxentryselected{background-color:#00519e;color:#ffffff;font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;line-height:inherit;}.guicustomlistfocus{position:absolute;width:1px;height:0px;top:-2px;}.guicustomlistentry{padding-top:2px;padding-bottom:2px;padding-left:2px;padding-right:2px;}.guicomboboxdisabled{background-color:#ffffff;color:#787878;border-color:#888888;}.guiimage{overflow:hidden;}.gui-image-stack-wrapper{margin:2px;width:fit-content;height:fit-content;}.gui-image-stack{margin:20px auto;position:relative;}.gui-image-stack div{position:absolute;padding:4px;display:flex;}.gui-image-stack div:last-child{position:relative;}.gui-image-stack div{border-width:1px;border-color:silver;border-style:solid;background-color:white;border-radius:2px;}.gui-image-stack .not-active img{visibility:hidden;}.gui-image-stack-spread.active div:nth-child(3){transform:translate(-2px,2px);}.gui-image-stack-spread.active div:first-child{transform:translate(2px,-2px);}.guilabel{vertical-align:middle;white-space:pre;}.guitooltip{position:absolute;display:none;padding:3px;border:1px solid #767676;z-index:99999;white-space:nowrap;background-color:#ffffff;color:#575757;filter:progid:DXImageTransform.Microsoft.Shadow(color='#777777', Direction=135, Strength=4);box-shadow:2px 2px 2px #777777;-webkit-box-shadow:2px 2px 2px #777777;}.guilist{border:1px solid #a5acb2;background-color:#ffffff;color:#000000;overflow:auto;}.guilist option:checked{background:#00519e linear-gradient(0deg, #00519e 0%, #00519e 100%);color:#ffffff !important;}.guicustomlist{border:1px solid #a5acb2;background-color:#ffffff;color:#000000;overflow:hidden;}.guipanel{position:absolute;background-color:#ffffff;background-repeat:repeat;}.guipanel_fieldset{overflow:hidden;position:absolute;top:2px;left:2px;bottom:2px;right:2px;border:1px solid #bfb8bf;}.guipanel_fieldsetinnerdiv{position:absolute;}.guipanel_legend{white-space:pre;overflow:hidden;color:#000000;}@media print{.guipanel{overflow:visible !important;}}.guiprogressbar{position:absolute;text-align:center;border:1px solid #bebebe;background-color:#ffffff;}.guiprogressbar_bar{overflow:hidden;position:absolute;top:0;left:0;height:100%;background-color:#00519e;background-repeat:repeat-x;background-image:url(\"../../WEB-RES/resource/resource?id=bi_image_gradient_10x100_-16756322_-16756322_-16756322_-16756322_4_14_EA2A1038FD6C704828720ADD8558FC40\");}.guiprogressbar_textonbar{height:100%;color:#ffffff;background-color:transparent;}.guiprogressbar_textonrest{height:100%;width:100%;color:#000000;background-color:transparent;}.guiradiobutton{}.guiradiobutton_input{vertical-align:middle;}.guiscrollpane{background-color:#ffffff;position:absolute;overflow:auto;-webkit-overflow-scrolling:touch;touch-action:pan-x pan-y;text-align:left;vertical-align:middle;}.guiscrollpane_root{position:relative;width:100%;height:100%;}.modern_scrollpane_design_thin{scrollbar-width:thin;scrollbar-color:#ccc transparent;}.modern_scrollpane_design_thin::-webkit-scrollbar-track{background-color:transparent;width:4px;}.modern_scrollpane_design_thin::-webkit-scrollbar-thumb{background-color:#ccc;border:1px solid transparent;background-clip:content-box;border-radius:3px;}.modern_scrollpane_design_thin::-webkit-scrollbar{width:6px;height:6px;background-color:transparent;}.guiseparator_h{background-color:#c9ccd8;border-bottom:1px solid #c9ccd8;height:2px;}.guiseparator_v{background-color:#c9ccd8;border-right:1px solid #c9ccd8;width:2px;}.guiseparator_h_dashed{background-color:transparent;border-bottom:2px dashed #c9ccd8;height:2px;}.guiseparator_v_dashed{background-color:transparent;border-right:2px dashed #c9ccd8;width:2px;}.guisplitpane{position:absolute;top:0;left:0;right:0;bottom:0;}.guisplitpane_border_horizontal{border-top:0;border-left:1px solid #eef1f8;border-bottom:0;border-right:1px solid #eef1f8;background-color:#eef1f8;position:absolute;}.guisplitpane_border_vertical{border-top:1px solid #eef1f8;border-left:0;border-bottom:1px solid #eef1f8;border-right:0;background-color:#eef1f8;position:absolute;}.guisplitpane_divider_content_container{position:absolute;}.guisplitpane_circle{position:absolute;background-color:#a5acb2;}.guisplitpane_container_left{position:absolute;overflow:hidden;top:0;left:0;bottom:0;}.guisplitpane_container_right{position:absolute;overflow:hidden;top:0;right:0;bottom:0;}.guisplitpane_container_top{position:absolute;overflow:hidden;top:0;left:0;right:0;}.guisplitpane_container_bottom{position:absolute;overflow:hidden;left:0;right:0;bottom:0;}.guitabbedpane{}.guitabbedpane_tabactive{background-repeat:repeat-x;background-image:url(\"../../WEB-RES/resource/resource?id=bi_image_gradient_1x100_-1_none_none_-1_20_6C67CDC1D8B845FA5BC89C4729E98B91\");border-left:1px solid #d9d9d9;border-top:2px solid #d9d9d9;border-right:1px solid #d9d9d9;padding-bottom:1px;color:#000000;height:20px;background-color:#ffffff;}.guitabbedpane_tabinactive{background-repeat:repeat-x;background-image:url(\"../../WEB-RES/resource/resource?id=bi_image_gradient_1x100_-986896_none_none_-986896_20_77FC057D52C9B9FAA4B97BBF84D070AC\");border-left:1px solid #d9d9d9;border-top:1px solid #d9d9d9;border-right:1px solid #d9d9d9;color:#000000;height:20px;background-color:#f0f0f0;border-bottom:1px solid #d9d9d9;}.guitabbedpane_tabspace{height:20px;border-bottom:1px solid #d9d9d9;}.guitabbedpane_tabinactive:hover{border-top:2px solid #d9d9d9;padding-bottom:1px;}.guitabbedpane_tabdisabled{background-repeat:repeat-x;background-image:url(\"../../WEB-RES/resource/resource?id=bi_image_gradient_1x100_-2367775_none_none_-2367775_20_96AD79C88ECFEF1BE1541B68BF852C0B\");border-left:1px solid #d9d9d9;border-top:1px solid #d9d9d9;border-right:1px solid #d9d9d9;color:#7d7d7d;height:20px;background-color:#dbdee1;border-bottom:1px solid #d9d9d9;}.guitabbedpane_tabactive a{color:#000000;}.guitabbedpane_tabactive a:hover{color:#000000;}.guitabbedpane_tabinactive a{color:#000000;}.guitabbedpane_tabinactive a:hover{color:#000000;}.guitabbedpane_tabdisabled a{color:#7d7d7d;}.guitabbedpane_tabdisabled a:hover{color:#7d7d7d;}.guitabbedpane_content_container{border-left:1px solid #d9d9d9;border-bottom:1px solid #d9d9d9;border-right:1px solid #d9d9d9;position:absolute;left:0;right:0;}.guitabbedpaneentry{}.guitextarea{border:1px solid #a5acb2;display:block;cursor:text;padding:2px 2px 2px 2px;background-color:#ffffff;color:#000000;overflow:hidden;user-select:text;-webkit-user-select:text;autocapitalize:off;autocorrect:off;}.guitextarea_disabled{border:1px solid #a5acb2;display:block;cursor:text;padding:2px 2px 2px 2px;background-color:#ffffff;color:#a5acb2;overflow:hidden;}.guitextarea::selection{background-color:#3399ff;color:#ffffff;}.guitextarea::-moz-selection{background-color:#3399ff;color:#ffffff;}.guitextarea::-webkit-selection{background-color:#3399ff;color:#ffffff;}.guitextarea::-moz-placeholder{color:rgba(174,174,153,0.6823529411764706);}.guitextarea::-webkit-input-placeholder{color:rgba(174,174,153,0.6823529411764706);}.guitextarea:-ms-input-placeholder{color:rgba(174,174,153,0.6823529411764706);}.guitextfield{border:1px solid #a5acb2;cursor:text;padding-top:2px;padding-bottom:2px;padding-right:2px;padding-left:2px;background-color:#ffffff;color:#000000;-webkit-appearance:none;border-radius:0;user-select:text;-webkit-user-select:text;autocapitalize:off;autocorrect:off;}.guitextfield_disabled{border:1px solid #a5acb2;cursor:text;padding-top:2px;padding-bottom:2px;padding-right:2px;padding-left:2px;background-color:#ffffff;-webkit-appearance:none;border-radius:0;color:#a5acb2;}.guitextfield::selection{background-color:#3399ff;color:#ffffff;}.guitextfield::-moz-selection{background-color:#3399ff;color:#ffffff;}.guitextfield::-webkit-selection{background-color:#3399ff;color:#ffffff;}.guitextfield::-moz-placeholder{color:rgba(174,174,153,0.6823529411764706);}.guitextfield::-webkit-input-placeholder{color:rgba(174,174,153,0.6823529411764706);}.guitextfield:-ms-input-placeholder{color:rgba(174,174,153,0.6823529411764706);}.guitogglebutton_up{white-space:pre;}.guitogglebutton_down{border:2px solid #1f57a7;white-space:pre;}.guiwindow{background-color:#ffffff;position:absolute;width:100%;height:100%;z-index:0;}.guiwindow_child_overlay{position:absolute;top:0;left:0;width:100%;height:100%;background-color:#000000;filter:alpha(opacity=40.0);opacity:0.4;}.guiwindow_child_container{position:absolute;border:2px solid #1883d7;top:50%;left:50%;filter:progid:DXImageTransform.Microsoft.Shadow(color='rgba(0,0,0,0.30)', Direction=135, Strength=20);box-shadow:0px 19px 38px 0px rgba(0,0,0,0.30);-webkit-box-shadow:0px 19px 38px 0px rgba(0,0,0,0.30);}.guiwindow_child_title{vertical-align:middle;position:absolute;top:0;left:0;right:46px;height:23px;font-weight:bold;padding:4px;font-size:14px;line-height:15px;white-space:pre;overflow:hidden;background-image:url(\"../../WEB-RES/resource/resource?id=bi_image_gradient_1x100_-1_none_none_-1_20_6C67CDC1D8B845FA5BC89C4729E98B91\");background-repeat:repeat-x;color:#000000;background-color:#ffffff;cursor:move;}.guiwindow_child_title_button{position:absolute;top:0;width:23px;height:23px;background-image:url(\"../../WEB-RES/resource/resource?id=bi_image_gradient_1x100_-1_none_none_-1_20_6C67CDC1D8B845FA5BC89C4729E98B91\");background-repeat:repeat-x;background-color:#ffffff;}.guiwindow_child_title_maximize_img{position:absolute;top:3px;right:3px;background-image:url(\"../../WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_imgDesignWebWindowMaximizeIcon.png\");background-repeat:no-repeat;}.guiwindow_child_title_maximize_img:hover{background-image:url(\"../../WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_imgDesignWebWindowMaximizeHoverIcon.png\");}.guiwindow_child_title_restore_img{position:absolute;top:3px;right:3px;background-image:url(\"../../WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_imgDesignWebWindowRestoreIcon.png\");background-repeat:no-repeat;}.guiwindow_child_title_restore_img:hover{background-image:url(\"../../WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_imgDesignWebWindowRestoreHoverIcon.png\");}.guiwindow_child_title_x_img{position:absolute;top:3px;right:3px;background-image:url(\"../../WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_web_window_close.png\");background-repeat:no-repeat;}.guiwindow_child_title_x_img:hover{background-image:url(\"../../WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_web_window_close_hover.png\");}.guiwindow_child_content{position:absolute;left:0;right:0;bottom:0;background-color:#ffffff;}.banner_window{display:none;position:absolute;z-index:100000;top:0;bottom:0;left:0;right:0;}.banner{position:absolute;top:4px;left:4px;right:4px;background-color:#fff7df;color:#cca023;filter:progid:DXImageTransform.Microsoft.Shadow(color='rgba(0,0,0,0.24)', Direction=135, Strength=0);box-shadow:0 2px 2px rgba(0,0,0,0.24);-webkit-box-shadow:0 2px 2px rgba(0,0,0,0.24);}\n@keyframes load-animation {\n  0% {\n    transform: scale(0);\n  }\n  40% {\n    transform: scale(1.0);\n  }\n  80% {\n    transform: scale(0);\n  }\n  100% {\n    transform: scale(0);\n  }\n}\n\n\n@-webkit-keyframes load-animation {\n  0% {\n    -webkit-transform: scale(0);\n  }\n  40% {\n    -webkit-transform: scale(1.0);\n  }\n  80% {\n    -webkit-transform: scale(0);\n  }\n  100% {\n    -webkit-transform: scale(0);\n  }\n}\n\n.load-animation{padding:4px 8px;}.load-animation > div{width:8px;height:8px;border-radius:100%;display:inline-block;}.guimenubar{background-color:#ffffff;background-repeat:repeat-x;background-image:url(\"../../WEB-RES/resource/resource?id=bi_image_gradient_1x100_-1_none_none_-1_20_6C67CDC1D8B845FA5BC89C4729E98B91\");}.guimenupopup{position:absolute;border:1px solid #8c8c8c;background-color:#ffffff;color:#000000;padding:2px !important;filter:progid:DXImageTransform.Microsoft.Shadow(color='#777777', Direction=135, Strength=4);box-shadow:2px 2px 2px #777777;-webkit-box-shadow:2px 2px 2px #777777;}.guimenuitem{border:1px solid transparent;background-color:#ffffff;color:#000000;white-space:pre;}.guimenuitem > td{padding-top:4px;padding-bottom:3px;}.guimenuitem:hover, .guimenuitem-hovered{background-color:#c4e3ff;color:#000000;border:1px solid #e5e5e5;}.guimenuitem-disabled, .guimenuitem-disabled:hover{background-color:#ffffff;color:#bac7d2;border:1px solid #8c8c8c;}.guimenuitem-textcolumn{background-color:transparent;padding-left:2px;padding-right:2px;font-size:inherit;line-height:inherit;}.guispinner{background-color:#ffffff;border:1px solid #a5acb2;position:relative;}.guispinner_disabled{background-color:#ffffff;color:#a5acb2;}.guispinnerinput{background-color:transparent;color:inherit;border:0;text-align:right;width:100%;height:100%;user-select:text;-webkit-user-select:text;autocapitalize:off;autocorrect:off;}.guispinnerinputcontainer{border:0;position:absolute;top:0;left:0;bottom:0;}.guispinnerbuttoncontainer{background-repeat:repeat-x;border:0;position:absolute;right:0;}.guispinnerbutton{background-repeat:no-repeat;background-position:50% 50%;border:1px solid #ffffff;position:absolute;top:0;right:0;bottom:0;left:0;}.guitable{position:relative;border-collapse:collapse;border:1px solid #f4f4f4;color:#000000;background-color:transparent;overflow:hidden;}.guitable_content_table{border:1px solid #f4f4f4;border-collapse:collapse;}.guitable_row{}.guitable_row:nth-child(odd){background-color:#ffffff;}.guitable_row:nth-child(even){background-color:#f0f0f0;}.guitable_row_selected{white-space:pre;border:1px solid #c4e3ff;background-color:#c4e3ff !important;color:#000000 !important;}.guitable_headertable{border-collapse:collapse;}.guitable_header{border:1px solid #c9ccd8;border-collapse:collapse;font-weight:normal;background-color:#ffffff;background-image:url(\"../../WEB-RES/resource/resource?id=bi_image_gradient_1x100_-1_none_none_-1_20_6C67CDC1D8B845FA5BC89C4729E98B91\");background-repeat:repeat-x;color:#000000;overflow:hidden;white-space:pre;text-overflow:ellipsis;}.guitable_header_sorticon_div{background-color:#ffffff;background-image:url(\"../../WEB-RES/resource/resource?id=bi_image_gradient_1x100_-1_none_none_-1_20_6C67CDC1D8B845FA5BC89C4729E98B91\");background-repeat:repeat-x;position:absolute;top:0;right:0;bottom:1px;padding-left:3px;padding-right:3px;vertical-align:middle;}.guitable_header_sorticon{text-align:center;position:relative;}.guitable_fixed_content_div{overflow-x:hidden;overflow-y:auto;scrollbar-width:none;width:100%;}.guitable_fixed_content_div::-webkit-scrollbar{display:none;}.guitable_content{border:1px solid #f4f4f4;border-collapse:collapse;font-weight:normal;overflow:hidden;white-space:pre;text-overflow:ellipsis;}.guitable_scrollable_content_div{background-color:transparent;overflow:auto;position:absolute;}.guitable_scrollable_content_div_with_fixed_columns{background-color:transparent;overflow:auto;position:relative;scrollbar-width:none;}.guitable_scrollable_content_div_with_fixed_columns::-webkit-scrollbar{display:none;}.guitable_resizeheaderleft{position:absolute;height:100%;width:6px;left:0;top:0;cursor:col-resize;overflow:visible;}.guitable_resizeheaderright{position:absolute;height:100%;width:6px;margin-left:-5px;left:100%;top:0;cursor:col-resize;overflow:visible;}.guitree{background-color:#ffffff;color:#000000;}.guitree_active{white-space:pre;border:1px solid #c4e3ff;background-color:#c4e3ff;color:#000000;}.guitree_active a{color:#000000;}.guitree_active:hover{text-decoration:underline;}.guitree_inactive{white-space:pre;background-color:#ffffff;color:#000000;border:1px solid #ffffff;}.guitree_inactive a{color:#000000;}.guitree_inactive:hover{text-decoration:underline;color:#000000;}.guitreenode{padding-top:1px;}.guitreetablenode{}.guitreetablenode:hover{text-decoration:underline;}.guitreenodeimage{display:block;vertical-align:top;}.guiviewer3d_canvas{height:100%;width:100%;border:0;}.guiviewer3d_imagepanel :focus{outline-style:none;}.guiviewer3d_treeview{overflow:auto;white-space:nowrap;}.guiviewer3d_treeview .items{margin-left:12px;}.guiviewer3d_treeview .group-c .items{margin-left:12px;display:none;}.guiviewer3d_treeview .icon, .guiviewer3d_treeview .open, .guiviewer3d_treeview .node, .guiviewer3d_treeview .mesh, .guiviewer3d_treeview .vis, .guiviewer3d_treeview .hdn, .guiviewer3d_treeview .markup, .guiviewer3d_treeview .camera{background-image:url(\"../../WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_webglviewer_treeicons.png\");height:16px;width:16px;float:left;margin-top:1px;margin-left:4px;display:block;}.guiviewer3d_treeview .open, .guiviewer3d_treeview .vis, .guiviewer3d_treeview .hdn{margin-left:0;}.guiviewer3d_treeview .icon{background-position:-128px, 0px;}.guiviewer3d_treeview .open{background-position:-16px, 0px;}.guiviewer3d_treeview .open:hover{background-position:-48px, 0px;}.guiviewer3d_treeview .mesh{background-position:-160px, 0px;}.guiviewer3d_treeview .markup{background-position:-256px, 0px;}.guiviewer3d_treeview .camera{background-position:-192px, 0px;}.guiviewer3d_treeview .vis{background-position:-80px, 0px;}.guiviewer3d_treeview .hdn{background-position:-64px, 0px;}.guiviewer3d_treeview .group-c .open{background-position:0px, 0px;}.guiviewer3d_treeview .group-c .open:hover{background-position:-32px, 0px;}.guiviewer3d_treeview .group-c .open{background-position:0px, 0px;}.guiviewer3d_treeview .group-c .open:hover{background-position:-32px, 0px;}.guiviewer3d_treeview .item, .guiviewer3d_treeview .gitem{height:18px;cursor:pointer;display:block;}.guiviewer3d_treeview .normal, .guiviewer3d_treeview .selected{height:18px;cursor:pointer;display:inline-block;}.guiviewer3d_treeview .normal:hover{background-color:#E5F3FB;}.guiviewer3d_treeview .selected{background-color:#007ACC;}.guiviewer3d_treeview .item{margin-left:16px;}.guiviewer3d_treeview .label{height:18px;padding-left:4px;padding-right:4px;padding-top:0px;padding-bottom:0px;line-height:126%;cursor:pointer;display:inline-block;}.guiviewer3d_treeview .item:hover .label, .guiviewer3d_treeview .gitem:hover .label{background-color:#E5F3FB;}.guiviewer3d_treeview .selected .label, .guiviewer3d_treeview .selected:hover .label{background-color:#007ACC !important;color:#FFFFFF;}.guiviewer3d_swingoverlay, .guiviewer3d_erroroverlay{position:absolute;top:0;bottom:0;left:0;right:0;background-color:#ffffff;}.guiviewer3d_erroroverlay{text-align:center;font-size:14px;font-weight:bold;z-index:1000;}.guiviewer3d_treecontainer{position:absolute;top:8px;bottom:8px;width:190px;display:none;}.guiviewer3d_left_sidebar{position:absolute;top:8px;bottom:8px;width:32px;}.guiviewer3d_right_sidebar{position:absolute;top:8px;width:32px;}.guiviewer3d_views_toolbar{position:absolute;display:none;top:8px;height:32px;}.guiviewer3d_measure_toolbar, .guiviewer3d_clipplane_toolbar, .guiviewer3d_environment_toolbar, .guiviewer3d_pmi_toolbar{position:absolute;height:32px;}.guiviewer3d_pancontainer{position:absolute;height:170px;width:190px;top:8px;}.guiviewer3d_toolbar{position:absolute;top:8px;height:32px;}.guiviewer3d_undoredo_toolbar{position:absolute;margin-left:auto;margin-right:auto;left:0;right:0;top:8px;height:32px;}.guiviewer3d_animation_toolbar{position:absolute;margin-left:auto;margin-right:auto;left:0;right:0;bottom:8px;height:32px;}.guiviewer3d_left_sidebar_overlay, .guiviewer3d_right_sidebar_overlay, .guiviewer3d_views_toolbar_overlay, .guiviewer3d_toolbar_overlay, .guiviewer3d_treecontainer_overlay, .guiviewer3d_pancontainer_overlay, .guiviewer3d_undoredo_overlay, .guiviewer3d_animation_overlay, .guiviewer3d_measure_toolbar_overlay, .guiviewer3d_clipplane_toolbar_overlay, .guiviewer3d_environment_toolbar_overlay, .guiviewer3d_pmi_toolbar_overlay{position:absolute;border-width:1px;border-style:solid;border-color:rgba(0,81,158,0.4);background-color:#ffffff;height:100%;width:100%;filter:alpha(opacity=70.0);opacity:0.7;}.guiviewer3d_left_sidebar_buttons, .guiviewer3d_right_sidebar_buttons, .guiviewer3d_views_toolbar_buttons, .guiviewer3d_toolbar_buttons, .guiviewer3d_treeview, .guiviewer3d_undoredo_buttons, .guiviewer3d_animation_buttons, .guiviewer3d_measure_toolbar_buttons, guiviewer3d_clipplane_toolbar_buttons, .guiviewer3d_environment_toolbar_buttons, .guiviewer3d_pmi_toolbar_buttons{position:absolute;height:100%;width:100%;}.guiviewer3d_button{position:absolute;background:transparent;width:24px;height:24px;}.guiviewer3d_buttonimage{position:relative;margin-left:0;padding-top:0;}.guiviewer3d{position:absolute;top:0;left:0;right:0;bottom:0;}.guiviewer3d_imagepanel{position:absolute;top:0;left:0;right:0;bottom:0;}.guiviewer3d_panimagepanel{position:absolute;top:0;left:0;width:190px;height:170px;}.guiviewer3d_infopanel{position:absolute;color:#000000;background-color:#ffffe1;top:0;left:0;right:0;}.guiviewer3d_progresspanel{box-shadow:0 0 1em black;border-radius:100%;position:absolute;top:50%;margin-top:-50px;left:50%;margin-left:-50px;width:100px;height:100px;}.guiviewer3d_progresspanel > div > svg > circle{stroke-dashoffset:314.1592653589793;stroke:#00519e;stroke-width:3px;}.guiviewer3d_progresspanel > div{position:absolute;text-align:center;vertical-align:middle;width:100px;height:100px;top:0;}.guiviewer3d_progresspanel > div > div{display:inline-block;font-size:26px;color:#00519e;line-height:100px;}.guiviewer3d_hotspot_selection_toolbar{position:absolute;margin-left:auto;margin-right:auto;left:0;right:0;bottom:8px;height:32px;}.guiviewer3d_hotspot_selection_overlay{position:absolute;border-width:1px;border-style:solid;border-color:rgba(0,81,158,0.4);background-color:#ffffff;height:100%;width:100%;filter:alpha(opacity=70.0);opacity:0.7;}.guiviewer3d_hotspot_selection_buttons{position:absolute;height:100%;width:100%;z-index:1;}.guiviewer3d_label{position:absolute;background:transparent;text-align:center;padding-top:4px;width:44px;height:24px;}.guiviewerexternal{}.guiviewerhtml{}.guiviewerimage{position:absolute;width:100%;height:100%;}.guiviewerimage_image{position:absolute;width:100%;height:100%;}.guiviewerimage_overview{position:absolute;z-index:100;left:0;top:0;width:44px;height:170px;}.guiviewerimage_button{position:absolute;background:transparent;width:23px;height:23px;}.guiviewerimage_buttonimage{position:relative;margin-left:0;padding-top:0;}.guiviewerimage_slider{position:absolute;background-color:#ffffff;width:142px;height:24px;}.guiviewerimage_nav_previous{position:absolute;top:0;bottom:0;left:0;z-index:25;}.guiviewerimage_nav_next{position:absolute;top:0;bottom:0;right:0;z-index:25;}.guiviewermedia{}.guiviewerpdf{}.transparentLayer{top:0;width:100%;height:100%;position:absolute;}.guipdfpageimage{display:block;margin-left:auto;margin-right:auto;margin-top:0px;margin-bottom:4px;border:1px solid #777777;padding:4px;filter:progid:DXImageTransform.Microsoft.Shadow(color='#777777', Direction=135, Strength=4);box-shadow:2px 2px 2px #777777;-webkit-box-shadow:2px 2px 2px #777777;}.guidropzone{vertical-align:middle;text-align:center;padding:4px;position:absolute;top:0;bottom:0;left:0;right:0;font-size:13px;font-weight:bold;background-color:#ffffff;color:#b3b3b3;border-color:#b3b3b3;border-width:2px;border-style:dashed;border-radius:15px;}.guidropzone_entered{background-color:#ffe178;color:#bb921e;border-color:#bb921e;}.guidropzone_invalid{background-color:#ff9696;color:#000000;}.guilayoutabsolute{width:100%;height:100%;background-color:transparent;overflow:hidden;position:relative;}.guilayoutborder{position:absolute;overflow:hidden;background-color:transparent;}.guilayoutborder_north{position:absolute;top:0;left:0;right:0;background-color:transparent;}.guilayoutborder_east{position:absolute;right:0;background-color:transparent;}.guilayoutborder_center{position:absolute;background-color:transparent;}.guilayoutborder_west{position:absolute;left:0;background-color:transparent;}.guilayoutborder_south{position:absolute;left:0;right:0;bottom:0;background-color:transparent;}@media print{.guilayoutborder{overflow:visible !important;}}@media print{.guilayoutborder_north{overflow:visible !important;bottom:auto !important;}}@media print{.guilayoutborder_east{overflow:visible !important;}}@media print{.guilayoutborder_center{overflow:visible !important;}}@media print{.guilayoutborder_west{overflow:visible !important;}}@media print{.guilayoutborder_south{overflow:visible !important;}}.guilayoutflow{position:absolute;overflow:hidden;background-color:transparent;}.guilayoutflow_center{position:absolute;top:0;left:50%;right:0;bottom:0;background-color:transparent;}.guilayoutflow_left{position:absolute;top:0;left:0;right:0;bottom:0;background-color:transparent;}.guilayoutflow_container{position:absolute;background-color:transparent;}.guilayoutgridbag{position:absolute;text-align:center;overflow:hidden;background-color:transparent;}.guilayoutgridbag_centered{position:absolute;background-color:transparent;}.guilayoutgridbag_container{position:absolute;background-color:transparent;}.guilayoutgridbag_container_padded{text-align:left;position:absolute;background-color:transparent;}@media print{.guilayoutgridbag{overflow:visible !important;}}@media print{.guilayoutgridbag_centered{overflow:visible !important;}}@media print{.guilayoutgridbag_container_padded{overflow:visible !important;}}.dw-hamburger{padding:8px 4px;transition-property:opacity, filter;transition-duration:0.15s;transition-timing-function:linear;font:inherit;color:inherit;text-transform:none;background-color:transparent;border:0;margin:0;overflow:visible;}.dw-hamburger-box{width:40px;height:26px;margin-top:4px;display:inline-block;position:relative;}.dw-hamburger-small-box{width:20px;margin-left:12px;}.dw-hamburger-inner{display:block;top:50%;margin-left:5px;}.dw-hamburger-inner, .dw-hamburger-inner:before, .dw-hamburger-inner:after{width:30px;height:4px;background-color:#7f7f7f;border-radius:4px;position:absolute;transition-property:transform;transition-duration:0.15s;transition-timing-function:ease;}.dw-hamburger-lighting-bright, .dw-hamburger-lighting-bright:before, .dw-hamburger-lighting-bright:after{background-color:#ffffff;}.dw-hamburger:hover .dw-hamburger-inner, .dw-hamburger:hover .dw-hamburger-inner:before, .dw-hamburger:hover .dw-hamburger-inner:after{background-color:#ffffff;}.dw-hamburger:hover .dw-hamburger-inner.dw-hamburger-lighting-bright, .dw-hamburger:hover .dw-hamburger-inner.dw-hamburger-lighting-bright:before, .dw-hamburger:hover .dw-hamburger-inner.dw-hamburger-lighting-bright:after{background-color:#ffffff;}.dw-hamburger-small-inner, .dw-hamburger-small-inner:before, .dw-hamburger-small-inner:after{width:5px;}.dw-hamburger-inner:before, .dw-hamburger-inner:after{content:\"\";display:block;}.dw-hamburger-inner:before{top:-10px;}.dw-hamburger-inner:after{bottom:-10px;}.dw-hamburger--squeeze .dw-hamburger-inner{transition-duration:0.075s;transition-timing-function:cubic-bezier(0.55, 0.055, 0.675, 0.19);}.dw-hamburger--squeeze .dw-hamburger-inner:before{transition:top 0.075s 0.12s ease, opacity 0.075s ease;;}.dw-hamburger--squeeze .dw-hamburger-inner:after{transition:bottom 0.075s 0.12s ease, transform 0.075s cubic-bezier(0.55, 0.055, 0.675, 0.19);}.dw-hamburger--squeeze.dw-hamburger-is-active .dw-hamburger-inner{transform:rotate(45deg);transition-delay:0.12s;transition-timing-function:cubic-bezier(0.215, 0.61, 0.355, 1);}.dw-hamburger--squeeze.dw-hamburger-is-active .dw-hamburger-inner:before{top:0;opacity:0;transition:top 0.075s ease, opacity 0.075s 0.12s ease;}.dw-hamburger--squeeze.dw-hamburger-is-active .dw-hamburger-inner:after{bottom:0;transform:rotate(-90deg);transition:bottom 0.075s ease, transform 0.075s 0.12s cubic-bezier(0.215, 0.61, 0.355, 1);}.dw-toggle-switch{position:relative;display:inline-block;width:32px;height:20px;}.dw-toggle-switch-background{display:none;}.dw-toggle-switch-slider{position:absolute;top:0;left:0;right:0;bottom:0;background-color:#dddddd;-webkit-transition:0.4s;transition:0.4s;}.dw-toggle-switch-slider:before{position:absolute;content:\"\";height:16px;width:16px;left:1px;bottom:2px;background-color:#ffffff;-webkit-transition:0.4s;transition:0.4s;}.dw-toggle-switch-checked > .dw-toggle-switch-slider{background-color:#46b82e;}.dw-toggle-switch-disabled > .dw-toggle-switch-slider{background-color:#f6f6f6;}.dw-toggle-switch-background:focus + .dw-toggle-switch-slider{box-shadow:0 0 1px #00519E;}.dw-toggle-switch-checked > .dw-toggle-switch-slider:before{-webkit-transform:translateX(14px);-ms-transform:translateX(14px);transform:translateX(14px);}.dw-toggle-switch-slider.dw-round{border-radius:20px;}.dw-toggle-switch-slider.dw-round:before{border-radius:50%;}.mdc-floating-label{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-subtitle1-font-family,var(--mdc-typography-font-family,Roboto,sans-serif));font-size:var(--mdc-typography-subtitle1-font-size,1rem);font-weight:var(--mdc-typography-subtitle1-font-weight,400);letter-spacing:var(--mdc-typography-subtitle1-letter-spacing,0.009375em);-webkit-text-decoration:var(--mdc-typography-subtitle1-text-decoration,inherit);text-decoration:var(--mdc-typography-subtitle1-text-decoration,inherit);text-transform:var(--mdc-typography-subtitle1-text-transform,inherit);position:absolute;left:0;-webkit-transform-origin:left top;transform-origin:left top;line-height:1.15rem;text-align:left;text-overflow:ellipsis;white-space:nowrap;cursor:text;overflow:hidden;will-change:transform;transition:transform 150ms cubic-bezier(0.4,0,0.2,1),color 150ms cubic-bezier(0.4,0,0.2,1),-webkit-transform 150ms cubic-bezier(0.4,0,0.2,1);}[dir=rtl] .mdc-floating-label,.mdc-floating-label[dir=rtl]{right:0;left:auto;-webkit-transform-origin:right top;transform-origin:right top;text-align:right;}.mdc-floating-label--float-above{cursor:auto;}.mdc-floating-label--required::after{margin-left:1px;margin-right:0px;content:\"*\";}[dir=rtl] .mdc-floating-label--required::after,.mdc-floating-label--required[dir=rtl]::after{margin-left:0;margin-right:1px;}.mdc-floating-label--float-above{-webkit-transform:translateY(-106%) scale(0.75);transform:translateY(-106%) scale(0.75);}.mdc-floating-label--shake{-webkit-animation:mdc-floating-label-shake-float-above-standard 250ms 1;animation:mdc-floating-label-shake-float-above-standard 250ms 1;}.mdc-line-ripple::before,.mdc-line-ripple::after{position:absolute;bottom:0;left:0;width:100%;border-bottom-style:solid;content:\"\";}.mdc-line-ripple::before{border-bottom-width:1px;z-index:1;}.mdc-line-ripple::after{-webkit-transform:scaleX(0);transform:scaleX(0);border-bottom-width:2px;opacity:0;z-index:2;}.mdc-line-ripple::after{transition:transform 180ms cubic-bezier(0.4,0,0.2,1),opacity 180ms cubic-bezier(0.4,0,0.2,1),-webkit-transform 180ms cubic-bezier(0.4,0,0.2,1);}.mdc-line-ripple--active::after{-webkit-transform:scaleX(1);transform:scaleX(1);opacity:1;}.mdc-line-ripple--deactivating::after{opacity:0;}.mdc-notched-outline{display:flex;position:absolute;top:0;right:0;left:0;box-sizing:border-box;width:100%;max-width:100%;height:100%;text-align:left;pointer-events:none;}[dir=rtl] .mdc-notched-outline,.mdc-notched-outline[dir=rtl]{text-align:right;}.mdc-notched-outline__leading,.mdc-notched-outline__notch,.mdc-notched-outline__trailing{box-sizing:border-box;height:100%;border-top:1px solid;border-bottom:1px solid;pointer-events:none;}.mdc-notched-outline__leading{border-left:1px solid;border-right:none;width:12px;}[dir=rtl] .mdc-notched-outline__leading,.mdc-notched-outline__leading[dir=rtl]{border-left:none;border-right:1px solid;}.mdc-notched-outline__trailing{border-left:none;border-right:1px solid;flex-grow:1;}[dir=rtl] .mdc-notched-outline__trailing,.mdc-notched-outline__trailing[dir=rtl]{border-left:1px solid;border-right:none;}.mdc-notched-outline__notch{flex:0 0 auto;width:auto;max-width:calc(100% - 12px*2);}.mdc-notched-outline .mdc-floating-label{display:inline-block;position:relative;max-width:100%;}.mdc-notched-outline .mdc-floating-label--float-above{text-overflow:clip;}.mdc-notched-outline--upgraded .mdc-floating-label--float-above{max-width:calc(100%/0.75);}.mdc-notched-outline--notched .mdc-notched-outline__notch{padding-left:0;padding-right:8px;border-top:none;}[dir=rtl] .mdc-notched-outline--notched .mdc-notched-outline__notch,.mdc-notched-outline--notched .mdc-notched-outline__notch[dir=rtl]{padding-left:8px;padding-right:0;}.mdc-notched-outline--no-label .mdc-notched-outline__notch{padding:0;}.mdc-text-field--filled{--mdc-ripple-fg-size:0;--mdc-ripple-left:0;--mdc-ripple-top:0;--mdc-ripple-fg-scale:1;--mdc-ripple-fg-translate-end:0;--mdc-ripple-fg-translate-start:0;-webkit-tap-highlight-color:rgba(0,0,0,0);}.mdc-text-field--filled .mdc-text-field__ripple::before,.mdc-text-field--filled .mdc-text-field__ripple::after{position:absolute;border-radius:50%;opacity:0;pointer-events:none;content:\"\";}.mdc-text-field--filled .mdc-text-field__ripple::before{transition:opacity 15ms linear,background-color 15ms linear;z-index:1;}.mdc-text-field--filled.mdc-ripple-upgraded .mdc-text-field__ripple::before{-webkit-transform:scale(var(--mdc-ripple-fg-scale,1));transform:scale(var(--mdc-ripple-fg-scale,1));}.mdc-text-field--filled.mdc-ripple-upgraded .mdc-text-field__ripple::after{top:0;left:0;-webkit-transform:scale(0);transform:scale(0);-webkit-transform-origin:center center;transform-origin:center center;}.mdc-text-field--filled.mdc-ripple-upgraded--unbounded .mdc-text-field__ripple::after{top:var(--mdc-ripple-top,0);left:var(--mdc-ripple-left,0);}.mdc-text-field--filled.mdc-ripple-upgraded--foreground-activation .mdc-text-field__ripple::after{-webkit-animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards;animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards;}.mdc-text-field--filled.mdc-ripple-upgraded--foreground-deactivation .mdc-text-field__ripple::after{-webkit-animation:mdc-ripple-fg-opacity-out 150ms;animation:mdc-ripple-fg-opacity-out 150ms;-webkit-transform:translate(var(--mdc-ripple-fg-translate-end,0)) scale(var(--mdc-ripple-fg-scale,1));transform:translate(var(--mdc-ripple-fg-translate-end,0)) scale(var(--mdc-ripple-fg-scale,1));}.mdc-text-field--filled .mdc-text-field__ripple::before,.mdc-text-field--filled .mdc-text-field__ripple::after{top:calc(50% - 100%);left:calc(50% - 100%);width:200%;height:200%;}.mdc-text-field--filled.mdc-ripple-upgraded .mdc-text-field__ripple::after{width:var(--mdc-ripple-fg-size,100%);height:var(--mdc-ripple-fg-size,100%);}.mdc-text-field__ripple{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;}.mdc-text-field{border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0;padding:0 16px;display:inline-flex;align-items:baseline;position:relative;box-sizing:border-box;overflow:hidden;will-change:opacity,transform,color;}.mdc-text-field:not(.mdc-text-field--disabled) .mdc-floating-label{color:rgba(22,22,255,0.6);}.mdc-text-field:not(.mdc-text-field--disabled) .mdc-text-field__input{color:rgba(122,0,0,0.87);}.mdc-text-field .mdc-text-field__input{caret-color:var(--mdc-theme-primary,#6200ee);}.mdc-text-field:not(.mdc-text-field--disabled)+.mdc-text-field-helper-line .mdc-text-field-helper-text{color:rgba(0,0,0,0.6);}.mdc-text-field:not(.mdc-text-field--disabled) .mdc-text-field-character-counter,.mdc-text-field:not(.mdc-text-field--disabled)+.mdc-text-field-helper-line .mdc-text-field-character-counter{color:rgba(0,0,0,0.6);}.mdc-text-field:not(.mdc-text-field--disabled) .mdc-text-field__icon--leading{color:rgba(0,0,0,0.54);}.mdc-text-field:not(.mdc-text-field--disabled) .mdc-text-field__icon--trailing{color:rgba(0,0,0,0.54);}.mdc-text-field:not(.mdc-text-field--disabled) .mdc-text-field__affix--prefix{color:rgba(0,0,0,0.6);}.mdc-text-field:not(.mdc-text-field--disabled) .mdc-text-field__affix--suffix{color:rgba(0,0,0,0.6);}.mdc-text-field .mdc-floating-label{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);pointer-events:none;}.mdc-text-field.mdc-text-field--with-leading-icon{padding-left:0;padding-right:16px;}[dir=rtl] .mdc-text-field.mdc-text-field--with-leading-icon,.mdc-text-field.mdc-text-field--with-leading-icon[dir=rtl]{padding-left:16px;padding-right:0;}.mdc-text-field.mdc-text-field--with-trailing-icon{padding-left:16px;padding-right:0;}[dir=rtl] .mdc-text-field.mdc-text-field--with-trailing-icon,.mdc-text-field.mdc-text-field--with-trailing-icon[dir=rtl]{padding-left:0;padding-right:16px;}.mdc-text-field.mdc-text-field--with-leading-icon.mdc-text-field--with-trailing-icon{padding-left:0;padding-right:0;}[dir=rtl] .mdc-text-field.mdc-text-field--with-leading-icon.mdc-text-field--with-trailing-icon,.mdc-text-field.mdc-text-field--with-leading-icon.mdc-text-field--with-trailing-icon[dir=rtl]{padding-left:0;padding-right:0;}.mdc-text-field__input{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-subtitle1-font-family,var(--mdc-typography-font-family,Roboto,sans-serif));font-size:var(--mdc-typography-subtitle1-font-size,1rem);font-weight:var(--mdc-typography-subtitle1-font-weight,400);letter-spacing:var(--mdc-typography-subtitle1-letter-spacing,0.009375em);-webkit-text-decoration:var(--mdc-typography-subtitle1-text-decoration,inherit);text-decoration:var(--mdc-typography-subtitle1-text-decoration,inherit);text-transform:var(--mdc-typography-subtitle1-text-transform,inherit);height:28px;transition:opacity 150ms cubic-bezier(0.4,0,0.2,1);width:100%;min-width:0;border:none;border-radius:0;background:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:0;}.mdc-text-field__input::-ms-clear{display:none;}.mdc-text-field__input:focus{outline:none;}.mdc-text-field__input:invalid{box-shadow:none;}.mdc-text-field__input:-webkit-autofill{z-index:auto;}.mdc-text-field__affix{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-subtitle1-font-family,var(--mdc-typography-font-family,Roboto,sans-serif));font-size:var(--mdc-typography-subtitle1-font-size,1rem);font-weight:var(--mdc-typography-subtitle1-font-weight,400);letter-spacing:var(--mdc-typography-subtitle1-letter-spacing,0.009375em);-webkit-text-decoration:var(--mdc-typography-subtitle1-text-decoration,inherit);text-decoration:var(--mdc-typography-subtitle1-text-decoration,inherit);text-transform:var(--mdc-typography-subtitle1-text-transform,inherit);height:28px;transition:opacity 150ms cubic-bezier(0.4,0,0.2,1);opacity:0;white-space:nowrap;}.mdc-text-field--label-floating .mdc-text-field__affix,.mdc-text-field--no-label .mdc-text-field__affix{opacity:1;}.mdc-text-field__affix--prefix{padding-left:0;padding-right:2px;}[dir=rtl] .mdc-text-field__affix--prefix,.mdc-text-field__affix--prefix[dir=rtl]{padding-left:2px;padding-right:0;}.mdc-text-field--end-aligned .mdc-text-field__affix--prefix{padding-left:0;padding-right:12px;}[dir=rtl] .mdc-text-field--end-aligned .mdc-text-field__affix--prefix,.mdc-text-field--end-aligned .mdc-text-field__affix--prefix[dir=rtl]{padding-left:12px;padding-right:0;}.mdc-text-field__affix--suffix{padding-left:12px;padding-right:0;}[dir=rtl] .mdc-text-field__affix--suffix,.mdc-text-field__affix--suffix[dir=rtl]{padding-left:0;padding-right:12px;}.mdc-text-field--end-aligned .mdc-text-field__affix--suffix{padding-left:2px;padding-right:0;}[dir=rtl] .mdc-text-field--end-aligned .mdc-text-field__affix--suffix,.mdc-text-field--end-aligned .mdc-text-field__affix--suffix[dir=rtl]{padding-left:0;padding-right:2px;}.mdc-text-field__input:-webkit-autofill+.mdc-floating-label{-webkit-transform:translateY(-50%) scale(0.75);transform:translateY(-50%) scale(0.75);cursor:auto;}.mdc-text-field--filled{height:56px;}.mdc-text-field--filled .mdc-text-field__ripple::before,.mdc-text-field--filled .mdc-text-field__ripple::after{background-color:rgba(0,0,0,0.87);}.mdc-text-field--filled:hover .mdc-text-field__ripple::before{opacity:0.04;}.mdc-text-field--filled.mdc-ripple-upgraded--background-focused .mdc-text-field__ripple::before,.mdc-text-field--filled:not(.mdc-ripple-upgraded):focus .mdc-text-field__ripple::before{transition-duration:75ms;opacity:0.12;}.mdc-text-field--filled::before{display:inline-block;width:0;height:40px;content:\"\";vertical-align:0;}.mdc-text-field--filled:not(.mdc-text-field--disabled){background-color:whitesmoke;}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-line-ripple::before{border-bottom-color:rgba(0,0,0,0.42);}.mdc-text-field--filled:not(.mdc-text-field--disabled):hover .mdc-line-ripple::before{border-bottom-color:rgba(0,0,0,0.87);}.mdc-text-field--filled .mdc-line-ripple::after{border-bottom-color:var(--mdc-theme-primary,#6200ee);}.mdc-text-field--filled .mdc-floating-label{left:16px;right:initial;}[dir=rtl] .mdc-text-field--filled .mdc-floating-label,.mdc-text-field--filled .mdc-floating-label[dir=rtl]{left:initial;right:16px;}.mdc-text-field--filled .mdc-floating-label--float-above{-webkit-transform:translateY(-106%) scale(0.75);transform:translateY(-106%) scale(0.75);}.mdc-text-field--filled.mdc-text-field--no-label .mdc-text-field__input{height:100%;}.mdc-text-field--filled.mdc-text-field--no-label .mdc-floating-label{display:none;}.mdc-text-field--filled.mdc-text-field--no-label::before{display:none;}.mdc-text-field--outlined{height:56px;overflow:visible;}.mdc-text-field--outlined .mdc-floating-label--float-above{-webkit-transform:translateY(-37.25px) scale(1);transform:translateY(-37.25px) scale(1);}.mdc-text-field--outlined .mdc-floating-label--float-above{font-size:0.75rem;}.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{-webkit-transform:translateY(-34.75px) scale(0.75);transform:translateY(-34.75px) scale(0.75);}.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{font-size:1rem;}.mdc-text-field--outlined .mdc-floating-label--shake{-webkit-animation:mdc-floating-label-shake-float-above-text-field-outlined 250ms 1;animation:mdc-floating-label-shake-float-above-text-field-outlined 250ms 1;}.mdc-text-field--outlined .mdc-text-field__input{height:100%;}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-notched-outline__leading,.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-notched-outline__notch,.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-notched-outline__trailing{border-color:rgba(122,255,200,0.38);}.mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__leading,.mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__notch,.mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__trailing{border-color:rgba(122,255,200,0.87);}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__leading,.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__notch,.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__trailing{border-color:var(--mdc-theme-primary,#6200ee);}.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__leading{border-top-left-radius:4px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:4px;}[dir=rtl] .mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__leading,.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__leading[dir=rtl]{border-top-left-radius:0;border-top-right-radius:4px;border-bottom-right-radius:4px;border-bottom-left-radius:0;}.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__trailing{border-top-left-radius:0;border-top-right-radius:4px;border-bottom-right-radius:4px;border-bottom-left-radius:0;}[dir=rtl] .mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__trailing,.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__trailing[dir=rtl]{border-top-left-radius:4px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:4px;}.mdc-text-field--outlined .mdc-notched-outline--notched .mdc-notched-outline__notch{padding-top:1px;}.mdc-text-field--outlined .mdc-text-field__ripple::before,.mdc-text-field--outlined .mdc-text-field__ripple::after{content:none;}.mdc-text-field--outlined .mdc-floating-label{left:4px;right:initial;}[dir=rtl] .mdc-text-field--outlined .mdc-floating-label,.mdc-text-field--outlined .mdc-floating-label[dir=rtl]{left:initial;right:4px;}.mdc-text-field--outlined .mdc-text-field__input{display:flex;border:none;background-color:transparent;}.mdc-text-field--textarea{flex-direction:column;align-items:center;width:auto;height:auto;padding:0;transition:none;}.mdc-text-field--textarea .mdc-floating-label{top:19px;}.mdc-text-field--textarea .mdc-floating-label:not(.mdc-floating-label--float-above){-webkit-transform:none;transform:none;}.mdc-text-field--textarea .mdc-text-field__input{flex-grow:1;height:auto;min-height:1.5rem;overflow-x:hidden;overflow-y:auto;box-sizing:border-box;resize:none;padding:0 16px;line-height:1.5rem;}.mdc-text-field--textarea.mdc-text-field--filled::before{display:none;}.mdc-text-field--textarea.mdc-text-field--filled .mdc-floating-label--float-above{-webkit-transform:translateY(-10.25px) scale(0.75);transform:translateY(-10.25px) scale(0.75);}.mdc-text-field--textarea.mdc-text-field--filled .mdc-floating-label--shake{-webkit-animation:mdc-floating-label-shake-float-above-textarea-filled 250ms 1;animation:mdc-floating-label-shake-float-above-textarea-filled 250ms 1;}.mdc-text-field--textarea.mdc-text-field--filled .mdc-text-field__input{margin-top:23px;margin-bottom:9px;}.mdc-text-field--textarea.mdc-text-field--filled.mdc-text-field--no-label .mdc-text-field__input{margin-top:16px;margin-bottom:16px;}.mdc-text-field--textarea.mdc-text-field--outlined .mdc-notched-outline--notched .mdc-notched-outline__notch{padding-top:0;}.mdc-text-field--textarea.mdc-text-field--outlined .mdc-floating-label--float-above{-webkit-transform:translateY(-27.25px) scale(1);transform:translateY(-27.25px) scale(1);}.mdc-text-field--textarea.mdc-text-field--outlined .mdc-floating-label--float-above{font-size:0.75rem;}.mdc-text-field--textarea.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--textarea.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{-webkit-transform:translateY(-24.75px) scale(0.75);transform:translateY(-24.75px) scale(0.75);}.mdc-text-field--textarea.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--textarea.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{font-size:1rem;}.mdc-text-field--textarea.mdc-text-field--outlined .mdc-floating-label--shake{-webkit-animation:mdc-floating-label-shake-float-above-textarea-outlined 250ms 1;animation:mdc-floating-label-shake-float-above-textarea-outlined 250ms 1;}.mdc-text-field--textarea.mdc-text-field--outlined .mdc-text-field__input{margin-top:16px;margin-bottom:16px;}.mdc-text-field--textarea.mdc-text-field--outlined .mdc-floating-label{top:18px;}.mdc-text-field--textarea.mdc-text-field--with-internal-counter .mdc-text-field__input{margin-bottom:2px;}.mdc-text-field--textarea.mdc-text-field--with-internal-counter .mdc-text-field-character-counter{align-self:flex-end;padding:0 16px;}.mdc-text-field--textarea.mdc-text-field--with-internal-counter .mdc-text-field-character-counter::after{display:inline-block;width:0;height:16px;content:\"\";vertical-align:-16px;}.mdc-text-field--textarea.mdc-text-field--with-internal-counter .mdc-text-field-character-counter::before{display:none;}.mdc-text-field__resizer{align-self:stretch;display:inline-flex;flex-direction:column;flex-grow:1;max-height:100%;max-width:100%;min-height:56px;min-width:-webkit-fill-available;overflow:hidden;resize:both;}.mdc-text-field--filled .mdc-text-field__resizer{-webkit-transform:translateY(-1px);transform:translateY(-1px);}.mdc-text-field--filled .mdc-text-field__resizer .mdc-text-field__input,.mdc-text-field--filled .mdc-text-field__resizer .mdc-text-field-character-counter{-webkit-transform:translateY(1px);transform:translateY(1px);}.mdc-text-field--outlined .mdc-text-field__resizer{-webkit-transform:translateX(-1px) translateY(-1px);transform:translateX(-1px) translateY(-1px);}[dir=rtl] .mdc-text-field--outlined .mdc-text-field__resizer,.mdc-text-field--outlined .mdc-text-field__resizer[dir=rtl]{-webkit-transform:translateX(1px) translateY(-1px);transform:translateX(1px) translateY(-1px);}.mdc-text-field--outlined .mdc-text-field__resizer .mdc-text-field__input,.mdc-text-field--outlined .mdc-text-field__resizer .mdc-text-field-character-counter{-webkit-transform:translateX(1px) translateY(1px);transform:translateX(1px) translateY(1px);}[dir=rtl] .mdc-text-field--outlined .mdc-text-field__resizer .mdc-text-field__input,.mdc-text-field--outlined .mdc-text-field__resizer .mdc-text-field__input[dir=rtl],[dir=rtl] .mdc-text-field--outlined .mdc-text-field__resizer .mdc-text-field-character-counter,.mdc-text-field--outlined .mdc-text-field__resizer .mdc-text-field-character-counter[dir=rtl]{-webkit-transform:translateX(-1px) translateY(1px);transform:translateX(-1px) translateY(1px);}.mdc-text-field--fullwidth{padding:0;width:100%;}.mdc-text-field--fullwidth:not(.mdc-text-field--disabled) .mdc-line-ripple::before{border-bottom-color:rgba(0,0,0,0.42);}.mdc-text-field--fullwidth.mdc-text-field--disabled .mdc-line-ripple::before{border-bottom-color:rgba(0,0,0,0.42);}.mdc-text-field--fullwidth:not(.mdc-text-field--textarea){display:flex;}.mdc-text-field--fullwidth:not(.mdc-text-field--textarea) .mdc-text-field__input{height:100%;}.mdc-text-field--fullwidth:not(.mdc-text-field--textarea) .mdc-floating-label{display:none;}.mdc-text-field--fullwidth:not(.mdc-text-field--textarea)::before{display:none;}.mdc-text-field--fullwidth:not(.mdc-text-field--textarea) .mdc-text-field__ripple::before,.mdc-text-field--fullwidth:not(.mdc-text-field--textarea) .mdc-text-field__ripple::after{content:none;}.mdc-text-field--fullwidth:not(.mdc-text-field--textarea):not(.mdc-text-field--disabled){background-color:transparent;}.mdc-text-field--fullwidth.mdc-text-field--textarea .mdc-text-field__resizer{resize:vertical;}.mdc-text-field--with-leading-icon.mdc-text-field--filled .mdc-floating-label{max-width:calc(100% - 48px);left:48px;right:initial;}[dir=rtl] .mdc-text-field--with-leading-icon.mdc-text-field--filled .mdc-floating-label,.mdc-text-field--with-leading-icon.mdc-text-field--filled .mdc-floating-label[dir=rtl]{left:initial;right:48px;}.mdc-text-field--with-leading-icon.mdc-text-field--filled .mdc-floating-label--float-above{max-width:calc(100%/0.75 - 64px/0.75);}.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label{left:36px;right:initial;}[dir=rtl] .mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label,.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label[dir=rtl]{left:initial;right:36px;}.mdc-text-field--with-leading-icon.mdc-text-field--outlined :not(.mdc-notched-outline--notched) .mdc-notched-outline__notch{max-width:calc(100% - 60px);}.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label--float-above{-webkit-transform:translateY(-37.25px) translateX(-32px) scale(1);transform:translateY(-37.25px) translateX(-32px) scale(1);}[dir=rtl] .mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label--float-above,.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label--float-above[dir=rtl]{-webkit-transform:translateY(-37.25px) translateX(32px) scale(1);transform:translateY(-37.25px) translateX(32px) scale(1);}.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label--float-above{font-size:0.75rem;}.mdc-text-field--with-leading-icon.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{-webkit-transform:translateY(-34.75px) translateX(-32px) scale(0.75);transform:translateY(-34.75px) translateX(-32px) scale(0.75);}[dir=rtl] .mdc-text-field--with-leading-icon.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--with-leading-icon.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above[dir=rtl],[dir=rtl] .mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above[dir=rtl]{-webkit-transform:translateY(-34.75px) translateX(32px) scale(0.75);transform:translateY(-34.75px) translateX(32px) scale(0.75);}.mdc-text-field--with-leading-icon.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{font-size:1rem;}.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label--shake{-webkit-animation:mdc-floating-label-shake-float-above-text-field-outlined-leading-icon 250ms 1;animation:mdc-floating-label-shake-float-above-text-field-outlined-leading-icon 250ms 1;}[dir=rtl] .mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label--shake,.mdc-text-field--with-leading-icon.mdc-text-field--outlined[dir=rtl] .mdc-floating-label--shake{-webkit-animation:mdc-floating-label-shake-float-above-text-field-outlined-leading-icon 250ms 1;animation:mdc-floating-label-shake-float-above-text-field-outlined-leading-icon 250ms 1;}.mdc-text-field--with-trailing-icon.mdc-text-field--filled .mdc-floating-label{max-width:calc(100% - 64px);}.mdc-text-field--with-trailing-icon.mdc-text-field--filled .mdc-floating-label--float-above{max-width:calc(100%/0.75 - 64px/0.75);}.mdc-text-field--with-trailing-icon.mdc-text-field--outlined :not(.mdc-notched-outline--notched) .mdc-notched-outline__notch{max-width:calc(100% - 60px);}.mdc-text-field--with-leading-icon.mdc-text-field--with-trailing-icon.mdc-text-field--filled .mdc-floating-label{max-width:calc(100% - 96px);}.mdc-text-field--with-leading-icon.mdc-text-field--with-trailing-icon.mdc-text-field--filled .mdc-floating-label--float-above{max-width:calc(100%/0.75 - 96px/0.75);}.mdc-text-field-helper-line{display:flex;justify-content:space-between;box-sizing:border-box;}.mdc-text-field+.mdc-text-field-helper-line{padding-right:16px;padding-left:16px;}.mdc-form-field>.mdc-text-field+label{align-self:flex-start;}.mdc-text-field--focused:not(.mdc-text-field--disabled) .mdc-floating-label{color:rgba(255,0,0,0.87);}.mdc-text-field--focused .mdc-notched-outline__leading,.mdc-text-field--focused .mdc-notched-outline__notch,.mdc-text-field--focused .mdc-notched-outline__trailing{border-width:2px;}.mdc-text-field--focused+.mdc-text-field-helper-line .mdc-text-field-helper-text:not(.mdc-text-field-helper-text--validation-msg){opacity:1;}.mdc-text-field--focused.mdc-text-field--outlined .mdc-notched-outline--notched .mdc-notched-outline__notch{padding-top:2px;}.mdc-text-field--focused.mdc-text-field--outlined.mdc-text-field--textarea .mdc-notched-outline--notched .mdc-notched-outline__notch{padding-top:0;}.mdc-text-field--invalid:not(.mdc-text-field--disabled):hover .mdc-line-ripple::before{border-bottom-color:var(--mdc-theme-error,#b00020);}.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-line-ripple::after{border-bottom-color:var(--mdc-theme-error,#b00020);}.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-floating-label{color:var(--mdc-theme-error,#b00020);}.mdc-text-field--invalid:not(.mdc-text-field--disabled).mdc-text-field--invalid+.mdc-text-field-helper-line .mdc-text-field-helper-text--validation-msg{color:var(--mdc-theme-error,#b00020);}.mdc-text-field--invalid .mdc-text-field__input{caret-color:var(--mdc-theme-error,#b00020);}.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-text-field__icon--trailing{color:var(--mdc-theme-error,#b00020);}.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-line-ripple::before{border-bottom-color:var(--mdc-theme-error,#b00020);}.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-notched-outline__leading,.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-notched-outline__notch,.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-notched-outline__trailing{border-color:var(--mdc-theme-error,#b00020);}.mdc-text-field--invalid:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__leading,.mdc-text-field--invalid:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__notch,.mdc-text-field--invalid:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__trailing{border-color:var(--mdc-theme-error,#b00020);}.mdc-text-field--invalid:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__leading,.mdc-text-field--invalid:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__notch,.mdc-text-field--invalid:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__trailing{border-color:var(--mdc-theme-error,#b00020);}.mdc-text-field--invalid+.mdc-text-field-helper-line .mdc-text-field-helper-text--validation-msg{opacity:1;}.mdc-text-field--disabled{pointer-events:none;}.mdc-text-field--disabled .mdc-text-field__input{color:rgba(0,0,0,0.38);}.mdc-text-field--disabled .mdc-floating-label{color:rgba(0,0,0,0.38);}.mdc-text-field--disabled+.mdc-text-field-helper-line .mdc-text-field-helper-text{color:rgba(0,0,0,0.38);}.mdc-text-field--disabled .mdc-text-field-character-counter,.mdc-text-field--disabled+.mdc-text-field-helper-line .mdc-text-field-character-counter{color:rgba(0,0,0,0.38);}.mdc-text-field--disabled .mdc-text-field__icon--leading{color:rgba(0,0,0,0.3);}.mdc-text-field--disabled .mdc-text-field__icon--trailing{color:rgba(0,0,0,0.3);}.mdc-text-field--disabled .mdc-text-field__affix--prefix{color:rgba(0,0,0,0.38);}.mdc-text-field--disabled .mdc-text-field__affix--suffix{color:rgba(0,0,0,0.38);}.mdc-text-field--disabled .mdc-line-ripple::before{border-bottom-color:rgba(0,0,0,0.06);}.mdc-text-field--disabled .mdc-notched-outline__leading,.mdc-text-field--disabled .mdc-notched-outline__notch,.mdc-text-field--disabled .mdc-notched-outline__trailing{border-color:rgba(0,0,0,0.06);}.mdc-text-field--disabled .mdc-floating-label{cursor:default;}.mdc-text-field--disabled.mdc-text-field--filled{background-color:#fafafa;}.mdc-text-field--disabled.mdc-text-field--filled .mdc-text-field__ripple{display:none;}.mdc-text-field--disabled .mdc-text-field__input{pointer-events:auto;}.mdc-text-field--end-aligned .mdc-text-field__input{text-align:right;}[dir=rtl] .mdc-text-field--end-aligned .mdc-text-field__input,.mdc-text-field--end-aligned .mdc-text-field__input[dir=rtl]{text-align:left;}[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__input,[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__affix,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__input,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__affix{direction:ltr;}[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__affix--prefix,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__affix--prefix{padding-left:0;padding-right:2px;}[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__affix--suffix,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__affix--suffix{padding-left:12px;padding-right:0;}[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__icon--leading,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__icon--leading{order:1;}[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__affix--suffix,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__affix--suffix{order:2;}[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__input,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__input{order:3;}[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__affix--prefix,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__affix--prefix{order:4;}[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__icon--trailing,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__icon--trailing{order:5;}[dir=rtl] .mdc-text-field--ltr-text.mdc-text-field--end-aligned .mdc-text-field__input,.mdc-text-field--ltr-text.mdc-text-field--end-aligned[dir=rtl] .mdc-text-field__input{text-align:right;}[dir=rtl] .mdc-text-field--ltr-text.mdc-text-field--end-aligned .mdc-text-field__affix--prefix,.mdc-text-field--ltr-text.mdc-text-field--end-aligned[dir=rtl] .mdc-text-field__affix--prefix{padding-right:12px;}[dir=rtl] .mdc-text-field--ltr-text.mdc-text-field--end-aligned .mdc-text-field__affix--suffix,.mdc-text-field--ltr-text.mdc-text-field--end-aligned[dir=rtl] .mdc-text-field__affix--suffix{padding-left:2px;}.mdc-text-field-helper-text{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-caption-font-family,var(--mdc-typography-font-family,Roboto,sans-serif));font-size:var(--mdc-typography-caption-font-size,0.75rem);font-weight:var(--mdc-typography-caption-font-weight,400);letter-spacing:var(--mdc-typography-caption-letter-spacing,0.0333333333em);-webkit-text-decoration:var(--mdc-typography-caption-text-decoration,inherit);text-decoration:var(--mdc-typography-caption-text-decoration,inherit);text-transform:var(--mdc-typography-caption-text-transform,inherit);display:block;margin-top:0;line-height:normal;margin:0;opacity:0;will-change:opacity;transition:opacity 150ms cubic-bezier(0.4,0,0.2,1);}.mdc-text-field-helper-text::before{display:inline-block;width:0;height:16px;content:\"\";vertical-align:0;}.mdc-text-field-helper-text--persistent{transition:none;opacity:1;will-change:initial;}.mdc-text-field-character-counter{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-caption-font-family,var(--mdc-typography-font-family,Roboto,sans-serif));font-size:var(--mdc-typography-caption-font-size,0.75rem);font-weight:var(--mdc-typography-caption-font-weight,400);letter-spacing:var(--mdc-typography-caption-letter-spacing,0.0333333333em);-webkit-text-decoration:var(--mdc-typography-caption-text-decoration,inherit);text-decoration:var(--mdc-typography-caption-text-decoration,inherit);text-transform:var(--mdc-typography-caption-text-transform,inherit);display:block;margin-top:0;line-height:normal;margin-left:auto;margin-right:0;padding-left:16px;padding-right:0;white-space:nowrap;}.mdc-text-field-character-counter::before{display:inline-block;width:0;height:16px;content:\"\";vertical-align:0;}[dir=rtl] .mdc-text-field-character-counter,.mdc-text-field-character-counter[dir=rtl]{margin-left:0;margin-right:auto;}[dir=rtl] .mdc-text-field-character-counter,.mdc-text-field-character-counter[dir=rtl]{padding-left:0;padding-right:16px;}.mdc-text-field__icon{align-self:center;cursor:pointer;}.mdc-text-field__icon:not([tabindex]),.mdc-text-field__icon[tabindex=\"-1\"]{cursor:default;pointer-events:none;}.mdc-text-field__icon svg{display:block;}.mdc-text-field__icon--leading{margin-left:16px;margin-right:8px;}[dir=rtl] .mdc-text-field__icon--leading,.mdc-text-field__icon--leading[dir=rtl]{margin-left:8px;margin-right:16px;}.mdc-text-field__icon--trailing{margin-left:12px;margin-right:12px;}[dir=rtl] .mdc-text-field__icon--trailing,.mdc-text-field__icon--trailing[dir=rtl]{margin-left:12px;margin-right:12px;}\n@keyframes mdc-floating-label-shake-float-above-standard {\n  0% {\n    -webkit-transform: translateX(calc(0 - 0%)) translateY(-106%) scale(0.75);\n    transform: translateX(calc(0 - 0%)) translateY(-106%) scale(0.75);\n  }\n  33% {\n    -webkit-animation-timing-function: cubic-bezier(0.5,0,0.701732,0.495819);\n    animation-timing-function: cubic-bezier(0.5,0,0.701732,0.495819);\n    -webkit-transform: translateX(calc(4% - 0%)) translateY(-106%) scale(0.75);\n    transform: translateX(calc(4% - 0%)) translateY(-106%) scale(0.75);\n  }\n  66% {\n    -webkit-animation-timing-function: cubic-bezier(0.302435,0.381352,0.55,0.956352);\n    animation-timing-function: cubic-bezier(0.302435,0.381352,0.55,0.956352);\n    -webkit-transform: translateX(calc(-4% - 0%)) translateY(-106%) scale(0.75);\n    transform: translateX(calc(-4% - 0%)) translateY(-106%) scale(0.75);\n  }\n  100% {\n    -webkit-transform: translateX(calc(0 - 0%)) translateY(-106%) scale(0.75);\n    transform: translateX(calc(0 - 0%)) translateY(-106%) scale(0.75);\n  }\n}\n\n\n@-webkit-keyframes mdc-floating-label-shake-float-above-standard {\n  0% {\n    -webkit--webkit-transform: translateX(calc(0 - 0%)) translateY(-106%) scale(0.75);\n    -webkit-transform: translateX(calc(0 - 0%)) translateY(-106%) scale(0.75);\n  }\n  33% {\n    -webkit--webkit-animation-timing-function: cubic-bezier(0.5,0,0.701732,0.495819);\n    -webkit-animation-timing-function: cubic-bezier(0.5,0,0.701732,0.495819);\n    -webkit--webkit-transform: translateX(calc(4% - 0%)) translateY(-106%) scale(0.75);\n    -webkit-transform: translateX(calc(4% - 0%)) translateY(-106%) scale(0.75);\n  }\n  66% {\n    -webkit--webkit-animation-timing-function: cubic-bezier(0.302435,0.381352,0.55,0.956352);\n    -webkit-animation-timing-function: cubic-bezier(0.302435,0.381352,0.55,0.956352);\n    -webkit--webkit-transform: translateX(calc(-4% - 0%)) translateY(-106%) scale(0.75);\n    -webkit-transform: translateX(calc(-4% - 0%)) translateY(-106%) scale(0.75);\n  }\n  100% {\n    -webkit--webkit-transform: translateX(calc(0 - 0%)) translateY(-106%) scale(0.75);\n    -webkit-transform: translateX(calc(0 - 0%)) translateY(-106%) scale(0.75);\n  }\n}\n\n\n@keyframes mdc-ripple-fg-radius-in {\n  from {\n    -webkit-animation-timing-function: cubic-bezier(0.4,0,0.2,1);\n    animation-timing-function: cubic-bezier(0.4,0,0.2,1);\n    -webkit-transform: translate(var(--mdc-ripple-fg-translate-start,0)) scale(1);\n    transform: translate(var(--mdc-ripple-fg-translate-start,0)) scale(1);\n  }\n  to {\n    -webkit-transform: translate(var(--mdc-ripple-fg-translate-end,0)) scale(var(--mdc-ripple-fg-scale,1));\n    transform: translate(var(--mdc-ripple-fg-translate-end,0)) scale(var(--mdc-ripple-fg-scale,1));\n  }\n}\n\n\n@-webkit-keyframes mdc-ripple-fg-radius-in {\n  from {\n    -webkit--webkit-animation-timing-function: cubic-bezier(0.4,0,0.2,1);\n    -webkit-animation-timing-function: cubic-bezier(0.4,0,0.2,1);\n    -webkit--webkit-transform: translate(var(--mdc-ripple-fg-translate-start,0)) scale(1);\n    -webkit-transform: translate(var(--mdc-ripple-fg-translate-start,0)) scale(1);\n  }\n  to {\n    -webkit--webkit-transform: translate(var(--mdc-ripple-fg-translate-end,0)) scale(var(--mdc-ripple-fg-scale,1));\n    -webkit-transform: translate(var(--mdc-ripple-fg-translate-end,0)) scale(var(--mdc-ripple-fg-scale,1));\n  }\n}\n\n\n@keyframes mdc-ripple-fg-opacity-in {\n  from {\n    -webkit-animation-timing-function: linear;\n    animation-timing-function: linear;\n    opacity: 0;\n  }\n  to {\n    opacity: var(--mdc-ripple-fg-opacity,0);\n  }\n}\n\n\n@-webkit-keyframes mdc-ripple-fg-opacity-in {\n  from {\n    -webkit--webkit-animation-timing-function: linear;\n    -webkit-animation-timing-function: linear;\n    -webkit-opacity: 0;\n  }\n  to {\n    -webkit-opacity: var(--mdc-ripple-fg-opacity,0);\n  }\n}\n\n\n@keyframes mdc-ripple-fg-opacity-out {\n  from {\n    -webkit-animation-timing-function: linear;\n    animation-timing-function: linear;\n    opacity: var(--mdc-ripple-fg-opacity,0);\n  }\n  to {\n    opacity: 0;\n  }\n}\n\n\n@-webkit-keyframes mdc-ripple-fg-opacity-out {\n  from {\n    -webkit--webkit-animation-timing-function: linear;\n    -webkit-animation-timing-function: linear;\n    -webkit-opacity: var(--mdc-ripple-fg-opacity,0);\n  }\n  to {\n    -webkit-opacity: 0;\n  }\n}\n\n\n@keyframes mdc-floating-label-shake-float-above-text-field-outlined {\n  0% {\n    -webkit-transform: translateX(calc(0 - 0%)) translateY(-34.75px) scale(0.75);\n    transform: translateX(calc(0 - 0%)) translateY(-34.75px) scale(0.75);\n  }\n  33% {\n    -webkit-animation-timing-function: cubic-bezier(0.5,0,0.701732,0.495819);\n    animation-timing-function: cubic-bezier(0.5,0,0.701732,0.495819);\n    -webkit-transform: translateX(calc(4% - 0%)) translateY(-34.75px) scale(0.75);\n    transform: translateX(calc(4% - 0%)) translateY(-34.75px) scale(0.75);\n  }\n  66% {\n    -webkit-animation-timing-function: cubic-bezier(0.302435,0.381352,0.55,0.956352);\n    animation-timing-function: cubic-bezier(0.302435,0.381352,0.55,0.956352);\n    -webkit-transform: translateX(calc(-4% - 0%)) translateY(-34.75px) scale(0.75);\n    transform: translateX(calc(-4% - 0%)) translateY(-34.75px) scale(0.75);\n  }\n  100% {\n    -webkit-transform: translateX(calc(0 - 0%)) translateY(-34.75px) scale(0.75);\n    transform: translateX(calc(0 - 0%)) translateY(-34.75px) scale(0.75);\n  }\n}\n\n\n@-webkit-keyframes mdc-floating-label-shake-float-above-text-field-outlined {\n  0% {\n    -webkit--webkit-transform: translateX(calc(0 - 0%)) translateY(-34.75px) scale(0.75);\n    -webkit-transform: translateX(calc(0 - 0%)) translateY(-34.75px) scale(0.75);\n  }\n  33% {\n    -webkit--webkit-animation-timing-function: cubic-bezier(0.5,0,0.701732,0.495819);\n    -webkit-animation-timing-function: cubic-bezier(0.5,0,0.701732,0.495819);\n    -webkit--webkit-transform: translateX(calc(4% - 0%)) translateY(-34.75px) scale(0.75);\n    -webkit-transform: translateX(calc(4% - 0%)) translateY(-34.75px) scale(0.75);\n  }\n  66% {\n    -webkit--webkit-animation-timing-function: cubic-bezier(0.302435,0.381352,0.55,0.956352);\n    -webkit-animation-timing-function: cubic-bezier(0.302435,0.381352,0.55,0.956352);\n    -webkit--webkit-transform: translateX(calc(-4% - 0%)) translateY(-34.75px) scale(0.75);\n    -webkit-transform: translateX(calc(-4% - 0%)) translateY(-34.75px) scale(0.75);\n  }\n  100% {\n    -webkit--webkit-transform: translateX(calc(0 - 0%)) translateY(-34.75px) scale(0.75);\n    -webkit-transform: translateX(calc(0 - 0%)) translateY(-34.75px) scale(0.75);\n  }\n}\n\n\n@keyframes mdc-floating-label-shake-float-above-textarea-filled {\n  0% {\n    -webkit-transform: translateX(calc(0 - 0%)) translateY(-10.25px) scale(0.75);\n    transform: translateX(calc(0 - 0%)) translateY(-10.25px) scale(0.75);\n  }\n  33% {\n    -webkit-animation-timing-function: cubic-bezier(0.5,0,0.701732,0.495819);\n    animation-timing-function: cubic-bezier(0.5,0,0.701732,0.495819);\n    -webkit-transform: translateX(calc(4% - 0%)) translateY(-10.25px) scale(0.75);\n    transform: translateX(calc(4% - 0%)) translateY(-10.25px) scale(0.75);\n  }\n  66% {\n    -webkit-animation-timing-function: cubic-bezier(0.302435,0.381352,0.55,0.956352);\n    animation-timing-function: cubic-bezier(0.302435,0.381352,0.55,0.956352);\n    -webkit-transform: translateX(calc(-4% - 0%)) translateY(-10.25px) scale(0.75);\n    transform: translateX(calc(-4% - 0%)) translateY(-10.25px) scale(0.75);\n  }\n  100% {\n    -webkit-transform: translateX(calc(0 - 0%)) translateY(-10.25px) scale(0.75);\n    transform: translateX(calc(0 - 0%)) translateY(-10.25px) scale(0.75);\n  }\n}\n\n\n@-webkit-keyframes mdc-floating-label-shake-float-above-textarea-filled {\n  0% {\n    -webkit--webkit-transform: translateX(calc(0 - 0%)) translateY(-10.25px) scale(0.75);\n    -webkit-transform: translateX(calc(0 - 0%)) translateY(-10.25px) scale(0.75);\n  }\n  33% {\n    -webkit--webkit-animation-timing-function: cubic-bezier(0.5,0,0.701732,0.495819);\n    -webkit-animation-timing-function: cubic-bezier(0.5,0,0.701732,0.495819);\n    -webkit--webkit-transform: translateX(calc(4% - 0%)) translateY(-10.25px) scale(0.75);\n    -webkit-transform: translateX(calc(4% - 0%)) translateY(-10.25px) scale(0.75);\n  }\n  66% {\n    -webkit--webkit-animation-timing-function: cubic-bezier(0.302435,0.381352,0.55,0.956352);\n    -webkit-animation-timing-function: cubic-bezier(0.302435,0.381352,0.55,0.956352);\n    -webkit--webkit-transform: translateX(calc(-4% - 0%)) translateY(-10.25px) scale(0.75);\n    -webkit-transform: translateX(calc(-4% - 0%)) translateY(-10.25px) scale(0.75);\n  }\n  100% {\n    -webkit--webkit-transform: translateX(calc(0 - 0%)) translateY(-10.25px) scale(0.75);\n    -webkit-transform: translateX(calc(0 - 0%)) translateY(-10.25px) scale(0.75);\n  }\n}\n\n\n@keyframes mdc-floating-label-shake-float-above-textarea-outlined {\n  0% {\n    -webkit-transform: translateX(calc(0 - 0%)) translateY(-24.75px) scale(0.75);\n    transform: translateX(calc(0 - 0%)) translateY(-24.75px) scale(0.75);\n  }\n  33% {\n    -webkit-animation-timing-function: cubic-bezier(0.5,0,0.701732,0.495819);\n    animation-timing-function: cubic-bezier(0.5,0,0.701732,0.495819);\n    -webkit-transform: translateX(calc(4% - 0%)) translateY(-24.75px) scale(0.75);\n    transform: translateX(calc(4% - 0%)) translateY(-24.75px) scale(0.75);\n  }\n  66% {\n    -webkit-animation-timing-function: cubic-bezier(0.302435,0.381352,0.55,0.956352);\n    animation-timing-function: cubic-bezier(0.302435,0.381352,0.55,0.956352);\n    -webkit-transform: translateX(calc(-4% - 0%)) translateY(-24.75px) scale(0.75);\n    transform: translateX(calc(-4% - 0%)) translateY(-24.75px) scale(0.75);\n  }\n  100% {\n    -webkit-transform: translateX(calc(0 - 0%)) translateY(-24.75px) scale(0.75);\n    transform: translateX(calc(0 - 0%)) translateY(-24.75px) scale(0.75);\n  }\n}\n\n\n@-webkit-keyframes mdc-floating-label-shake-float-above-textarea-outlined {\n  0% {\n    -webkit--webkit-transform: translateX(calc(0 - 0%)) translateY(-24.75px) scale(0.75);\n    -webkit-transform: translateX(calc(0 - 0%)) translateY(-24.75px) scale(0.75);\n  }\n  33% {\n    -webkit--webkit-animation-timing-function: cubic-bezier(0.5,0,0.701732,0.495819);\n    -webkit-animation-timing-function: cubic-bezier(0.5,0,0.701732,0.495819);\n    -webkit--webkit-transform: translateX(calc(4% - 0%)) translateY(-24.75px) scale(0.75);\n    -webkit-transform: translateX(calc(4% - 0%)) translateY(-24.75px) scale(0.75);\n  }\n  66% {\n    -webkit--webkit-animation-timing-function: cubic-bezier(0.302435,0.381352,0.55,0.956352);\n    -webkit-animation-timing-function: cubic-bezier(0.302435,0.381352,0.55,0.956352);\n    -webkit--webkit-transform: translateX(calc(-4% - 0%)) translateY(-24.75px) scale(0.75);\n    -webkit-transform: translateX(calc(-4% - 0%)) translateY(-24.75px) scale(0.75);\n  }\n  100% {\n    -webkit--webkit-transform: translateX(calc(0 - 0%)) translateY(-24.75px) scale(0.75);\n    -webkit-transform: translateX(calc(0 - 0%)) translateY(-24.75px) scale(0.75);\n  }\n}\n\n\n@keyframes mdc-floating-label-shake-float-above-text-field-outlined-leading-icon {\n  0% {\n    -webkit-transform: translateX(calc(0 - 32px)) translateY(-34.75px) scale(0.75);\n    transform: translateX(calc(0 - 32px)) translateY(-34.75px) scale(0.75);\n  }\n  33% {\n    -webkit-animation-timing-function: cubic-bezier(0.5,0,0.701732,0.495819);\n    animation-timing-function: cubic-bezier(0.5,0,0.701732,0.495819);\n    -webkit-transform: translateX(calc(4% - 32px)) translateY(-34.75px) scale(0.75);\n    transform: translateX(calc(4% - 32px)) translateY(-34.75px) scale(0.75);\n  }\n  66% {\n    -webkit-animation-timing-function: cubic-bezier(0.302435,0.381352,0.55,0.956352);\n    animation-timing-function: cubic-bezier(0.302435,0.381352,0.55,0.956352);\n    -webkit-transform: translateX(calc(-4% - 32px)) translateY(-34.75px) scale(0.75);\n    transform: translateX(calc(-4% - 32px)) translateY(-34.75px) scale(0.75);\n  }\n  100% {\n    -webkit-transform: translateX(calc(0 - 32px)) translateY(-34.75px) scale(0.75);\n    transform: translateX(calc(0 - 32px)) translateY(-34.75px) scale(0.75);\n  }\n}\n\n\n@-webkit-keyframes mdc-floating-label-shake-float-above-text-field-outlined-leading-icon {\n  0% {\n    -webkit--webkit-transform: translateX(calc(0 - 32px)) translateY(-34.75px) scale(0.75);\n    -webkit-transform: translateX(calc(0 - 32px)) translateY(-34.75px) scale(0.75);\n  }\n  33% {\n    -webkit--webkit-animation-timing-function: cubic-bezier(0.5,0,0.701732,0.495819);\n    -webkit-animation-timing-function: cubic-bezier(0.5,0,0.701732,0.495819);\n    -webkit--webkit-transform: translateX(calc(4% - 32px)) translateY(-34.75px) scale(0.75);\n    -webkit-transform: translateX(calc(4% - 32px)) translateY(-34.75px) scale(0.75);\n  }\n  66% {\n    -webkit--webkit-animation-timing-function: cubic-bezier(0.302435,0.381352,0.55,0.956352);\n    -webkit-animation-timing-function: cubic-bezier(0.302435,0.381352,0.55,0.956352);\n    -webkit--webkit-transform: translateX(calc(-4% - 32px)) translateY(-34.75px) scale(0.75);\n    -webkit-transform: translateX(calc(-4% - 32px)) translateY(-34.75px) scale(0.75);\n  }\n  100% {\n    -webkit--webkit-transform: translateX(calc(0 - 32px)) translateY(-34.75px) scale(0.75);\n    -webkit-transform: translateX(calc(0 - 32px)) translateY(-34.75px) scale(0.75);\n  }\n}\n\n\n@keyframes mdc-floating-label-shake-float-above-text-field-outlined-leading-icon-rtl {\n  0% {\n    -webkit-transform: translateX(calc(0 - -32px)) translateY(-34.75px) scale(0.75);\n    transform: translateX(calc(0 - -32px)) translateY(-34.75px) scale(0.75);\n  }\n  33% {\n    -webkit-animation-timing-function: cubic-bezier(0.5,0,0.701732,0.495819);\n    animation-timing-function: cubic-bezier(0.5,0,0.701732,0.495819);\n    -webkit-transform: translateX(calc(4% - -32px)) translateY(-34.75px) scale(0.75);\n    transform: translateX(calc(4% - -32px)) translateY(-34.75px) scale(0.75);\n  }\n  66% {\n    -webkit-animation-timing-function: cubic-bezier(0.302435,0.381352,0.55,0.956352);\n    animation-timing-function: cubic-bezier(0.302435,0.381352,0.55,0.956352);\n    -webkit-transform: translateX(calc(-4% - -32px)) translateY(-34.75px) scale(0.75);\n    transform: translateX(calc(-4% - -32px)) translateY(-34.75px) scale(0.75);\n  }\n  100% {\n    -webkit-transform: translateX(calc(0 - -32px)) translateY(-34.75px) scale(0.75);\n    transform: translateX(calc(0 - -32px)) translateY(-34.75px) scale(0.75);\n  }\n}\n\n\n@-webkit-keyframes mdc-floating-label-shake-float-above-text-field-outlined-leading-icon-rtl {\n  0% {\n    -webkit--webkit-transform: translateX(calc(0 - -32px)) translateY(-34.75px) scale(0.75);\n    -webkit-transform: translateX(calc(0 - -32px)) translateY(-34.75px) scale(0.75);\n  }\n  33% {\n    -webkit--webkit-animation-timing-function: cubic-bezier(0.5,0,0.701732,0.495819);\n    -webkit-animation-timing-function: cubic-bezier(0.5,0,0.701732,0.495819);\n    -webkit--webkit-transform: translateX(calc(4% - -32px)) translateY(-34.75px) scale(0.75);\n    -webkit-transform: translateX(calc(4% - -32px)) translateY(-34.75px) scale(0.75);\n  }\n  66% {\n    -webkit--webkit-animation-timing-function: cubic-bezier(0.302435,0.381352,0.55,0.956352);\n    -webkit-animation-timing-function: cubic-bezier(0.302435,0.381352,0.55,0.956352);\n    -webkit--webkit-transform: translateX(calc(-4% - -32px)) translateY(-34.75px) scale(0.75);\n    -webkit-transform: translateX(calc(-4% - -32px)) translateY(-34.75px) scale(0.75);\n  }\n  100% {\n    -webkit--webkit-transform: translateX(calc(0 - -32px)) translateY(-34.75px) scale(0.75);\n    -webkit-transform: translateX(calc(0 - -32px)) translateY(-34.75px) scale(0.75);\n  }\n}\n\n.mdc-text-field:not(.mdc-text-field--disabled) .mdc-text-field__input::-webkit-input-placeholder{color:rgba(0,0,0,0.54);}.mdc-text-field:not(.mdc-text-field--disabled) .mdc-text-field__input:-ms-input-placeholder{color:rgba(0,0,0,0.54);}.mdc-text-field:not(.mdc-text-field--disabled) .mdc-text-field__input::-ms-input-placeholder{color:rgba(0,0,0,0.54);}.mdc-text-field:not(.mdc-text-field--disabled) .mdc-text-field__input::placeholder{color:rgba(0,0,0,0.54);}.mdc-text-field:not(.mdc-text-field--disabled) .mdc-text-field__input:-ms-input-placeholder{color:rgba(0,0,0,0.54);}.mdc-text-field__input::-webkit-input-placeholder{transition:opacity 67ms cubic-bezier(0.4,0,0.2,1);opacity:0;}.mdc-text-field__input:-ms-input-placeholder{transition:opacity 67ms cubic-bezier(0.4,0,0.2,1);opacity:0;}.mdc-text-field__input::-ms-input-placeholder{transition:opacity 67ms cubic-bezier(0.4,0,0.2,1);opacity:0;}.mdc-text-field__input::placeholder{transition:opacity 67ms cubic-bezier(0.4,0,0.2,1);opacity:0;}.mdc-text-field__input:-ms-input-placeholder{transition:opacity 67ms cubic-bezier(0.4,0,0.2,1);opacity:0;}.mdc-text-field--fullwidth .mdc-text-field__input::-webkit-input-placeholder,.mdc-text-field--no-label .mdc-text-field__input::-webkit-input-placeholder,.mdc-text-field--focused .mdc-text-field__input::-webkit-input-placeholder{transition-delay:40ms;transition-duration:110ms;opacity:1;}.mdc-text-field--fullwidth .mdc-text-field__input:-ms-input-placeholder,.mdc-text-field--no-label .mdc-text-field__input:-ms-input-placeholder,.mdc-text-field--focused .mdc-text-field__input:-ms-input-placeholder{transition-delay:40ms;transition-duration:110ms;opacity:1;}.mdc-text-field--fullwidth .mdc-text-field__input::-ms-input-placeholder,.mdc-text-field--no-label .mdc-text-field__input::-ms-input-placeholder,.mdc-text-field--focused .mdc-text-field__input::-ms-input-placeholder{transition-delay:40ms;transition-duration:110ms;opacity:1;}.mdc-text-field--fullwidth .mdc-text-field__input::placeholder,.mdc-text-field--no-label .mdc-text-field__input::placeholder,.mdc-text-field--focused .mdc-text-field__input::placeholder{transition-delay:40ms;transition-duration:110ms;opacity:1;}.mdc-text-field--fullwidth .mdc-text-field__input:-ms-input-placeholder,.mdc-text-field--no-label .mdc-text-field__input:-ms-input-placeholder,.mdc-text-field--focused .mdc-text-field__input:-ms-input-placeholder{transition-delay:40ms;transition-duration:110ms;opacity:1;}.mdc-text-field--disabled .mdc-text-field__input::-webkit-input-placeholder{color:rgba(0,0,0,0.38);}.mdc-text-field--disabled .mdc-text-field__input:-ms-input-placeholder{color:rgba(0,0,0,0.38);}.mdc-text-field--disabled .mdc-text-field__input::-ms-input-placeholder{color:rgba(0,0,0,0.38);}.mdc-text-field--disabled .mdc-text-field__input::placeholder{color:rgba(0,0,0,0.38);}.mdc-text-field--disabled .mdc-text-field__input:-ms-input-placeholder{color:rgba(0,0,0,0.38);}.mdc-text-field:not(.mdc-text-field--disabled):not(.mdc-text-field--invalid) .mdc-floating-label:not(.mdc-text-field--invalid){color:rgba(174,174,153,0.6823529411764706);}.mdc-text-field--focused:not(.mdc-text-field--disabled):not(.mdc-text-field--invalid) .mdc-floating-label:not(.mdc-text-field--invalid){color:rgba(174,174,153,0.6823529411764706);}.mdc-text-field:not(.mdc-text-field--disabled):not(.mdc-text-field--invalid) .mdc-text-field__input:not(.mdc-text-field--invalid){color:#000000;}.mdc-text-field__input:not(.mdc-text-field--disabled){user-select:text;-webkit-user-select:text;autocapitalize:off;autocorrect:off;}.mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--invalid) .mdc-notched-outline__leading:not(.mdc-text-field--invalid),.mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--invalid) .mdc-notched-outline__notch:not(.mdc-text-field--invalid),.mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--invalid) .mdc-notched-outline__trailing:not(.mdc-text-field--invalid){border-color:#a5acb2;}.mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--invalid):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__leading:not(.mdc-text-field--invalid),.mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--invalid):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__notch:not(.mdc-text-field--invalid),.mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--invalid):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__trailing:not(.mdc-text-field--invalid){border-color:#a5acb2;}.mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--invalid).mdc-text-field--focused:not(.mdc-text-field--invalid) .mdc-notched-outline__leading:not(.mdc-text-field--invalid),.mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--invalid).mdc-text-field--focused:not(.mdc-text-field--invalid) .mdc-notched-outline__notch:not(.mdc-text-field--invalid),.mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--invalid).mdc-text-field--focused:not(.mdc-text-field--invalid) .mdc-notched-outline__trailing:not(.mdc-text-field--invalid){border-color:#a5acb2;}.rcheckbox{display:block;position:relative;margin-bottom:12px;cursor:pointer;-webkit-user-select:none;user-select:none;}.rcheckbox--disabled{color:#787878;}.rcheckbox input{position:absolute;opacity:0;height:0;width:0;}.checkmark{position:absolute;cursor:inherit;top:2px;left:3px;height:21px;width:21px;border-width:1px;border-radius:2px;background-color:#ffffff;}.rcheckbox:not(.rcheckbox--disabled) .checkmark{border:1px solid #7f7f7f;}.rcheckbox:not(.rcheckbox--disabled) input:checked ~ .checkmark{background-color:#7f7f7f;}.rcheckbox.rcheckbox--disabled input:checked ~ .checkmark{background-color:#787878;}.rcheckbox.rcheckbox--disabled input:not(:checked) ~ .checkmark{border-color:#787878;}.rcheckbox:not(.rcheckbox--disabled):hover input:not(:checked) ~ .checkmark{background-color:#dddddd;}.checkmark:after{content:\"\";position:absolute;display:none;}.rcheckbox input:checked ~ .checkmark:after{display:block;}.rcheckbox .checkmark:after{left:6px;top:3px;width:4px;height:8px;border-style:solid;border-color:#ffffff;border-width:0 2px 2px 0;-webkit-transform:rotate(45deg);transform:rotate(45deg);}.rcheckbox_text{cursor:inherit;padding-left:30px;display:inline-block;padding-top:3px;}.cropper-container{direction:ltr;font-size:0;line-height:0;position:relative;-ms-touch-action:none;touch-action:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;}.cropper-container img{backface-visibility:hidden;display:block;height:100%;image-orientation:0deg;max-height:none;max-width:none;min-height:0;min-width:0;width:100%;}.cropper-wrap-box,.cropper-canvas,.cropper-drag-box,.cropper-crop-box,.cropper-modal{bottom:0;left:0;position:absolute;right:0;top:0;}.cropper-wrap-box,.cropper-canvas{overflow:hidden;}.cropper-drag-box{background-color:#fff;opacity:0;}.cropper-modal{background-color:#000;opacity:0.5;}.cropper-view-box{display:block;height:100%;outline:1px solid #39f;outline-color:rgba(51,153,255,0.75);overflow:hidden;width:100%;}.cropper-dashed{border:0 dashed #eee;display:block;opacity:0.5;position:absolute;}.cropper-dashed.dashed-h{border-bottom-width:1px;border-top-width:1px;height:calc(100%/3);left:0;top:calc(100%/3);width:100%;}.cropper-dashed.dashed-v{border-left-width:1px;border-right-width:1px;height:100%;left:calc(100%/3);top:0;width:calc(100%/3);}.cropper-center{display:block;height:0;left:50%;opacity:0.75;position:absolute;top:50%;width:0;}.cropper-center::before,.cropper-center::after{background-color:#eee;content:' ';display:block;position:absolute;}.cropper-center::before{height:1px;left:-3px;top:0;width:7px;}.cropper-center::after{height:7px;left:0;top:-3px;width:1px;}.cropper-face,.cropper-line,.cropper-point{display:block;height:100%;opacity:0.1;position:absolute;width:100%;}.cropper-face{background-color:#fff;left:0;top:0;}.cropper-line{background-color:#39f;}.cropper-line.line-e{cursor:ew-resize;right:-3px;top:0;width:5px;}.cropper-line.line-n{cursor:ns-resize;height:5px;left:0;top:-3px;}.cropper-line.line-w{cursor:ew-resize;left:-3px;top:0;width:5px;}.cropper-line.line-s{bottom:-3px;cursor:ns-resize;height:5px;left:0;}.cropper-point{background-color:#39f;height:5px;opacity:0.75;width:5px;}.cropper-point.point-e{cursor:ew-resize;margin-top:-3px;right:-3px;top:50%;}.cropper-point.point-n{cursor:ns-resize;left:50%;margin-left:-3px;top:-3px;}.cropper-point.point-w{cursor:ew-resize;left:-3px;margin-top:-3px;top:50%;}.cropper-point.point-s{bottom:-3px;cursor:s-resize;left:50%;margin-left:-3px;}.cropper-point.point-ne{cursor:nesw-resize;right:-3px;top:-3px;}.cropper-point.point-nw{cursor:nwse-resize;left:-3px;top:-3px;}.cropper-point.point-sw{bottom:-3px;cursor:nesw-resize;left:-3px;}.cropper-point.point-se{bottom:-3px;cursor:nwse-resize;height:20px;opacity:1;right:-3px;width:20px;}.cropper-point.point-se::before{background-color:#39f;bottom:-50%;content:' ';display:block;height:200%;opacity:0;position:absolute;right:-50%;width:200%;}.cropper-invisible{opacity:0;}.cropper-bg{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAAA3NCSVQICAjb4U/gAAAABlBMVEXMzMz////TjRV2AAAACXBIWXMAAArrAAAK6wGCiw1aAAAAHHRFWHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1M26LyyjAAAABFJREFUCJlj+M/AgBVhF/0PAH6/D/HkDxOGAAAAAElFTkSuQmCC);}.cropper-hide{display:block;height:0;position:absolute;width:0;}.cropper-hidden{display:none;}.cropper-move{cursor:move;}.cropper-crop{cursor:crosshair;}.cropper-disabled .cropper-drag-box,.cropper-disabled .cropper-face,.cropper-disabled .cropper-line,.cropper-disabled .cropper-point{cursor:not-allowed;}.pnlm-container{margin:0;padding:0;overflow:hidden;position:relative;cursor:default;width:100%;height:100%;font-family:Helvetica,\"Nimbus Sans L\",\"Liberation Sans\",Arial,sans-serif;background:#f4f4f4 url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2267%22%20height%3D%22100%22%20viewBox%3D%220%200%2067%20100%22%3E%0A%3Cpath%20stroke%3D%22%23ccc%22%20fill%3D%22none%22%20d%3D%22M33.5%2C50%2C0%2C63%2C33.5%2C75%2C67%2C63%2C33.5%2C50m-33.5-50%2C67%2C25m-0.5%2C0%2C0%2C75m-66.5-75%2C67-25m-33.5%2C75%2C0%2C25m0-100%2C0%2C50%22%2F%3E%0A%3C%2Fsvg%3E%0A) repeat;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-o-user-select:none;-ms-user-select:none;user-select:none;outline:0;line-height:1.4;contain:content;}.pnlm-container *{box-sizing:content-box;}.pnlm-ui{position:absolute;width:100%;height:100%;z-index:1;}.pnlm-grab{cursor:url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20height%3D%2226%22%20width%3D%2226%22%3E%0A%3Cpath%20stroke%3D%22%23000%22%20stroke-width%3D%221px%22%20fill%3D%22%23fff%22%20d%3D%22m15.3%2020.5s6.38-6.73%204.64-8.24-3.47%201.01-3.47%201.01%203.61-5.72%201.41-6.49c-2.2-0.769-3.33%204.36-3.33%204.36s0.873-5.76-1.06-5.76-1.58%205.39-1.58%205.39-0.574-4.59-2.18-4.12c-1.61%200.468-0.572%205.51-0.572%205.51s-1.58-4.89-2.93-3.79c-1.35%201.11%200.258%205.25%200.572%206.62%200.836%202.43%202.03%202.94%202.17%205.55%22%2F%3E%0A%3C%2Fsvg%3E%0A) 12 8,default;}.pnlm-grabbing{cursor:url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20height%3D%2226%22%20width%3D%2226%22%3E%0A%3Cpath%20stroke%3D%22%23000%22%20stroke-width%3D%221px%22%20fill%3D%22%23fff%22%20d%3D%22m15.3%2020.5s5.07-5.29%203.77-6.74c-1.31-1.45-2.53%200.14-2.53%200.14s2.74-3.29%200.535-4.06c-2.2-0.769-2.52%201.3-2.52%201.3s0.81-2.13-1.12-2.13-1.52%201.77-1.52%201.77-0.261-1.59-1.87-1.12c-1.61%200.468-0.874%202.17-0.874%202.17s-0.651-1.55-2-0.445c-1.35%201.11-0.68%202.25-0.365%203.62%200.836%202.43%202.03%202.94%202.17%205.55%22%2F%3E%0A%3C%2Fsvg%3E%0A) 12 8,default;}.pnlm-sprite{background-image:url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2226%22%20height%3D%22208%22%3E%0A%3Ccircle%20fill-opacity%3D%22.78%22%20cy%3D%22117%22%20cx%3D%2213%22%20r%3D%2211%22%20fill%3D%22%23fff%22%2F%3E%0A%3Ccircle%20fill-opacity%3D%22.78%22%20cy%3D%22143%22%20cx%3D%2213%22%20r%3D%2211%22%20fill%3D%22%23fff%22%2F%3E%0A%3Ccircle%20cy%3D%22169%22%20cx%3D%2213%22%20r%3D%227%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%2F%3E%0A%3Ccircle%20cy%3D%22195%22%20cx%3D%2213%22%20r%3D%227%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%2F%3E%0A%3Ccircle%20cx%3D%2213%22%20cy%3D%22195%22%20r%3D%222.5%22%2F%3E%0A%3Cpath%20d%3D%22m5%2083v6h2v-4h4v-2zm10%200v2h4v4h2v-6zm-5%205v6h6v-6zm-5%205v6h6v-2h-4v-4zm14%200v4h-4v2h6v-6z%22%2F%3E%0A%3Cpath%20d%3D%22m13%20110a7%207%200%200%200%20-7%207%207%207%200%200%200%207%207%207%207%200%200%200%207%20-7%207%207%200%200%200%20-7%20-7zm-1%203h2v2h-2zm0%203h2v5h-2z%22%2F%3E%0A%3Cpath%20d%3D%22m5%2057v6h2v-4h4v-2zm10%200v2h4v4h2v-6zm-10%2010v6h6v-2h-4v-4zm14%200v4h-4v2h6v-6z%22%2F%3E%0A%3Cpath%20d%3D%22m17%2038v2h-8v-2z%22%2F%3E%0A%3Cpath%20d%3D%22m12%209v3h-3v2h3v3h2v-3h3v-2h-3v-3z%22%2F%3E%0A%3Cpath%20d%3D%22m13%20136-6.125%206.125h4.375v7.875h3.5v-7.875h4.375z%22%2F%3E%0A%3Cpath%20d%3D%22m10.428%20173.33v-5.77l5-2.89v5.77zm1-1.73%203-1.73-3.001-1.74z%22%2F%3E%0A%3C%2Fsvg%3E%0A);}.pnlm-container:-moz-full-screen{height:100%;width:100%;position:static;}.pnlm-container:-webkit-full-screen{height:100%;width:100%;position:static;}.pnlm-container:-ms-fullscreen{height:100%;width:100%;position:static;}.pnlm-container:fullscreen{height:100%;width:100%;position:static;}.pnlm-render-container{cursor:inherit;position:absolute;height:100%;width:100%;}.pnlm-controls{margin-top:4px;background-color:#fff;border:1px solid #999;border-color:rgba(0,0,0,0.4);border-radius:3px;cursor:pointer;z-index:2;-webkit-transform:translateZ(9999px);transform:translateZ(9999px);}.pnlm-control:hover{background-color:#f8f8f8;}.pnlm-controls-container{position:absolute;top:0;left:4px;z-index:1;}.pnlm-zoom-controls{width:26px;height:52px;}.pnlm-zoom-in{width:100%;height:50%;position:absolute;top:0;border-radius:3px 3px 0 0;}.pnlm-zoom-out{width:100%;height:50%;position:absolute;bottom:0;background-position:0 -26px;border-top:1px solid #ddd;border-top-color:rgba(0,0,0,0.10);border-radius:0 0 3px 3px;}.pnlm-fullscreen-toggle-button,.pnlm-orientation-button,.pnlm-hot-spot-debug-indicator{width:26px;height:26px;}.pnlm-hot-spot-debug-indicator{position:absolute;top:50%;left:50%;width:26px;height:26px;margin:-13px 0 0 -13px;background-color:rgba(255,255,255,0.5);border-radius:13px;display:none;}.pnlm-orientation-button-inactive{background-position:0 -156px;}.pnlm-orientation-button-active{background-position:0 -182px;}.pnlm-fullscreen-toggle-button-inactive{background-position:0 -52px;}.pnlm-fullscreen-toggle-button-active{background-position:0 -78px;}.pnlm-panorama-info{position:absolute;bottom:4px;background-color:rgba(0,0,0,0.7);border-radius:0 3px 3px 0;padding-right:10px;color:#fff;text-align:left;display:none;z-index:2;-webkit-transform:translateZ(9999px);transform:translateZ(9999px);}.pnlm-title-box{position:relative;font-size:20px;display:table;padding-left:5px;margin-bottom:3px;}.pnlm-author-box{position:relative;font-size:12px;display:table;padding-left:5px;}.pnlm-load-box{position:absolute;top:50%;left:50%;width:200px;height:150px;margin:-75px 0 0 -100px;background-color:rgba(0,0,0,0.7);border-radius:3px;text-align:center;font-size:20px;display:none;color:#fff;}.pnlm-load-box p{margin:20px 0;}.pnlm-lbox{position:absolute;top:50%;left:50%;width:20px;height:20px;margin:-10px 0 0 -10px;display:none;}.pnlm-loading{animation-duration:1.5s;-webkit-animation-duration:1.5s;animation-name:pnlm-mv;-webkit-animation-name:pnlm-mv;animation-iteration-count:infinite;-webkit-animation-iteration-count:infinite;animation-timing-function:linear;-webkit-animation-timing-function:linear;height:10px;width:10px;background-color:#fff;position:relative;}.pnlm-load-button{position:absolute;top:50%;left:50%;width:200px;height:100px;margin:-50px 0 0 -100px;background-color:rgba(0,0,0,.7);border-radius:3px;text-align:center;font-size:20px;display:table;color:#fff;cursor:pointer;}.pnlm-load-button:hover{background-color:rgba(0,0,0,.8);}.pnlm-load-button p{display:table-cell;vertical-align:middle;}.pnlm-info-box{font-size:15px;position:absolute;top:50%;left:50%;width:200px;height:150px;margin:-75px 0 0 -100px;background-color:#000;border-radius:3px;display:table;text-align:center;color:#fff;table-layout:fixed;}.pnlm-info-box a,.pnlm-author-box a{color:#fff;word-wrap:break-word;overflow-wrap:break-word;}.pnlm-info-box p{display:table-cell;vertical-align:middle;padding:0 5px 0 5px;}.pnlm-error-msg{display:none;}.pnlm-about-msg{font-size:11px;line-height:11px;color:#fff;padding:5px 8px 5px 8px;background:rgba(0,0,0,0.7);border-radius:3px;position:absolute;top:50px;left:50px;display:none;opacity:0;-moz-transition:opacity .3s ease-in-out;-webkit-transition:opacity .3s ease-in-out;-o-transition:opacity .3s ease-in-out;-ms-transition:opacity .3s ease-in-out;transition:opacity .3s ease-in-out;z-index:1;}.pnlm-about-msg a:link,.pnlm-about-msg a:visited{color:#fff;}.pnlm-about-msg a:hover,.pnlm-about-msg a:active{color:#eee;}.pnlm-hotspot-base{position:absolute;visibility:hidden;cursor:default;vertical-align:middle;top:0;z-index:1;}.pnlm-hotspot{height:26px;width:26px;border-radius:13px;}.pnlm-hotspot:hover{background-color:rgba(255,255,255,0.2);}.pnlm-hotspot.pnlm-info{background-position:0 -104px;}.pnlm-hotspot.pnlm-scene{background-position:0 -130px;}div.pnlm-tooltip span{visibility:hidden;position:absolute;border-radius:3px;background-color:rgba(0,0,0,0.7);color:#fff;text-align:center;max-width:200px;padding:5px 10px;margin-left:-220px;cursor:default;}div.pnlm-tooltip:hover span{visibility:visible;}div.pnlm-tooltip:hover span:after{content:'';position:absolute;width:0;height:0;border-width:10px;border-style:solid;border-color:rgba(0,0,0,0.7) transparent transparent transparent;bottom:-20px;left:-10px;margin:0 50%;}.pnlm-compass{position:absolute;width:50px;height:50px;right:4px;bottom:4px;border-radius:25px;background-image:url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20height%3D%2250%22%20width%3D%2250%22%3E%0A%3Cpath%20d%3D%22m24.5078%206-3.2578%2018h7.5l-3.25781-18h-0.984376zm-3.2578%2020%203.2578%2018h0.9844l3.2578-18h-7.5zm1.19531%200.9941h5.10938l-2.5547%2014.1075-2.5547-14.1075z%22%2F%3E%0A%3C%2Fsvg%3E%0A);cursor:default;display:none;}.pnlm-world{position:absolute;left:50%;top:50%;}.pnlm-face{position:absolute;-webkit-transform-origin:0 0;transform-origin:0 0;}.pnlm-dragfix,.pnlm-preview-img{position:absolute;height:100%;width:100%;cursor:inherit;}.pnlm-preview-img{background-size:cover;background-position:center;}.pnlm-lbar{width:150px;margin:0 auto;border:#fff 1px solid;height:6px;}.pnlm-lbar-fill{background:#fff;height:100%;width:0;}.pnlm-lmsg{font-size:12px;}.pnlm-fade-img{position:absolute;top:0;left:0;}.pnlm-pointer{cursor:pointer;}\n@keyframes pnlm-mv {\n  from {\n    left: 0;\n    top: 0;\n  }\n  25% {\n    left: 10px;\n    top: 0;\n  }\n  50% {\n    left: 10px;\n    top: 10px;\n  }\n  75% {\n    left: 0;\n    top: 10px;\n  }\n  to {\n    left: 0;\n    top: 0;\n  }\n}\n\n\n@-webkit-keyframes pnlm-mv {\n  from {\n    -webkit-left: 0;\n    -webkit-top: 0;\n  }\n  25% {\n    -webkit-left: 10px;\n    -webkit-top: 0;\n  }\n  50% {\n    -webkit-left: 10px;\n    -webkit-top: 10px;\n  }\n  75% {\n    -webkit-left: 0;\n    -webkit-top: 10px;\n  }\n  to {\n    -webkit-left: 0;\n    -webkit-top: 0;\n  }\n}\n\n.hotspot360rect{height:20px;width:20px;}.hotspot360rect:hover span{display:inline;}.hotspot360rect:hover{z-index:10;}.pnlm-dragfix,.pnlm-preview-img{position:absolute;height:100%;width:100%;cursor:inherit;}"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": -1,
          "_transferSize": 14728,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:09.558Z",
        "time": 209.91800003685057,
        "timings": {
          "blocked": 24.583000036336482,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 2.0039999999999996,
          "wait": 178.96699994923173,
          "receive": 4.364000051282346,
          "_blocked_queueing": 13.841000036336482,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_connectionId": "1726423",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "parser",
          "url": "https://ekat.festool.de/login/app?__bk_&__windowid=IRW3104379&__rid=FOE1787216989423",
          "lineNumber": 1
        },
        "_priority": "High",
        "_resourceType": "script",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/login/WEB-RES/js/clipboard.js_shop_7.26.1.5.js",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": ":authority",
              "value": "ekat.festool.de"
            },
            {
              "name": ":method",
              "value": "GET"
            },
            {
              "name": ":path",
              "value": "/login/WEB-RES/js/clipboard.js_shop_7.26.1.5.js"
            },
            {
              "name": ":scheme",
              "value": "https"
            },
            {
              "name": "accept",
              "value": "*/*"
            },
            {
              "name": "accept-encoding",
              "value": "gzip, deflate, br, zstd"
            },
            {
              "name": "accept-language",
              "value": "en-GB,en-US;q=0.9,en;q=0.8"
            },
            {
              "name": "if-modified-since",
              "value": "Thu, 20 Aug 2026 07:47:25 GMT"
            },
            {
              "name": "if-none-match",
              "value": "W/\"47250-1787216828298\""
            },
            {
              "name": "priority",
              "value": "u=1"
            },
            {
              "name": "referer",
              "value": "https://ekat.festool.de/login/app?__bk_&__windowid=IRW3104379&__rid=FOE1787216989423"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            },
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "sec-fetch-dest",
              "value": "script"
            },
            {
              "name": "sec-fetch-mode",
              "value": "no-cors"
            },
            {
              "name": "sec-fetch-site",
              "value": "same-origin"
            },
            {
              "name": "user-agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            }
          ],
          "queryString": [],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "cache-control",
              "value": "public"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "content-length",
              "value": "6568"
            },
            {
              "name": "content-type",
              "value": "text/javascript"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 09:09:49 GMT"
            },
            {
              "name": "etag",
              "value": "W/\"47250-1787216989640\""
            },
            {
              "name": "expires",
              "value": "Thu, 20 Aug 2026 09:11:49 GMT"
            },
            {
              "name": "last-modified",
              "value": "Thu, 20 Aug 2026 07:47:25 GMT"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "pragma",
              "value": "cache"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "x-robots-tag",
              "value": "noindex"
            }
          ],
          "cookies": [],
          "content": {
            "size": 47250,
            "mimeType": "text/javascript",
            "text": "/*!\r\n * clipboard.js v2.0.0\r\n * https://zenorocha.github.io/clipboard.js\r\n * \r\n * Licensed MIT © Zeno Rocha\r\n */\r\n(function webpackUniversalModuleDefinition(root, factory) {\r\n    if (typeof exports === 'object' && typeof module === 'object') {\r\n        module.exports = factory();\r\n    } else if (typeof define === 'function' && define.amd) {\r\n        define([], factory);\r\n    } else if (typeof exports === 'object') {\r\n        exports[\"ClipboardJS\"] = factory();\r\n    } else {\r\n        root[\"ClipboardJS\"] = factory();\r\n    }\r\n})(this, function() {\r\n    return /******/ (function(modules) { // webpackBootstrap\r\n        /******/ \t// The module cache\r\n        /******/\r\n        var installedModules = {};\r\n        /******/\r\n        /******/ \t// The require function\r\n        /******/\r\n        function __webpack_require__(moduleId) {\r\n            /******/\r\n            /******/ \t\t// Check if module is in cache\r\n            /******/\r\n            if (installedModules[moduleId]) {\r\n                /******/\r\n                return installedModules[moduleId].exports;\r\n                /******/\r\n            }\r\n            /******/ \t\t// Create a new module (and put it into the cache)\r\n            /******/\r\n            var module = installedModules[moduleId] = {\r\n                /******/            i: moduleId,\r\n                /******/            l: false,\r\n                /******/            exports: {}\r\n                /******/\r\n            };\r\n            /******/\r\n            /******/ \t\t// Execute the module function\r\n            /******/\r\n            modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\r\n            /******/\r\n            /******/ \t\t// Flag the module as loaded\r\n            /******/\r\n            module.l = true;\r\n            /******/\r\n            /******/ \t\t// Return the exports of the module\r\n            /******/\r\n            return module.exports;\r\n            /******/\r\n        }\r\n\r\n        /******/\r\n        /******/\r\n        /******/ \t// expose the modules object (__webpack_modules__)\r\n        /******/\r\n        __webpack_require__.m = modules;\r\n        /******/\r\n        /******/ \t// expose the module cache\r\n        /******/\r\n        __webpack_require__.c = installedModules;\r\n        /******/\r\n        /******/ \t// identity function for calling harmony imports with the correct context\r\n        /******/\r\n        __webpack_require__.i = function(value) {\r\n            return value;\r\n        };\r\n        /******/\r\n        /******/ \t// define getter function for harmony exports\r\n        /******/\r\n        __webpack_require__.d = function(exports, name, getter) {\r\n            /******/\r\n            if (!__webpack_require__.o(exports, name)) {\r\n                /******/\r\n                Object.defineProperty(exports, name, {\r\n                    /******/                configurable: false,\r\n                    /******/                enumerable: true,\r\n                    /******/                get: getter\r\n                    /******/\r\n                });\r\n                /******/\r\n            }\r\n            /******/\r\n        };\r\n        /******/\r\n        /******/ \t// getDefaultExport function for compatibility with non-harmony modules\r\n        /******/\r\n        __webpack_require__.n = function(module) {\r\n            /******/\r\n            var getter = module && module.__esModule ?\r\n                    /******/            function getDefault() {\r\n                        return module['default'];\r\n                    } :\r\n                    /******/            function getModuleExports() {\r\n                        return module;\r\n                    };\r\n            /******/\r\n            __webpack_require__.d(getter, 'a', getter);\r\n            /******/\r\n            return getter;\r\n            /******/\r\n        };\r\n        /******/\r\n        /******/ \t// Object.prototype.hasOwnProperty.call\r\n        /******/\r\n        __webpack_require__.o = function(object, property) {\r\n            return Object.prototype.hasOwnProperty.call(object, property);\r\n        };\r\n        /******/\r\n        /******/ \t// __webpack_public_path__\r\n        /******/\r\n        __webpack_require__.p = \"\";\r\n        /******/\r\n        /******/ \t// Load entry module and return exports\r\n        /******/\r\n        return __webpack_require__(__webpack_require__.s = 3);\r\n        /******/\r\n    })\r\n            /************************************************************************/\r\n            /******/ ([\r\n                          /* 0 */\r\n                          /***/ (function(module, exports, __webpack_require__) {\r\n\r\n                    var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;\r\n                    (function(global, factory) {\r\n                        if (true) {\r\n                            !(__WEBPACK_AMD_DEFINE_ARRAY__ = [module, __webpack_require__(7)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\r\n                                    __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\r\n                                                                     (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\r\n                            __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\r\n                        } else if (typeof exports !== \"undefined\") {\r\n                            factory(module, require('select'));\r\n                        } else {\r\n                            var mod = {\r\n                                exports: {}\r\n                            };\r\n                            factory(mod, global.select);\r\n                            global.clipboardAction = mod.exports;\r\n                        }\r\n                    })(this, function(module, _select) {\r\n                        'use strict';\r\n\r\n                        var _select2 = _interopRequireDefault(_select);\r\n\r\n                        function _interopRequireDefault(obj) {\r\n                            return obj && obj.__esModule ? obj : {\r\n                                default: obj\r\n                            };\r\n                        }\r\n\r\n                        var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function(obj) {\r\n                            return typeof obj;\r\n                        } : function(obj) {\r\n                            return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\r\n                        };\r\n\r\n                        function _classCallCheck(instance, Constructor) {\r\n                            if (!(instance instanceof Constructor)) {\r\n                                throw new TypeError(\"Cannot call a class as a function\");\r\n                            }\r\n                        }\r\n\r\n                        var _createClass = function() {\r\n                            function defineProperties(target, props) {\r\n                                for (var i = 0; i < props.length; i++) {\r\n                                    var descriptor = props[i];\r\n                                    descriptor.enumerable = descriptor.enumerable || false;\r\n                                    descriptor.configurable = true;\r\n                                    if (\"value\" in descriptor) {\r\n                                        descriptor.writable = true;\r\n                                    }\r\n                                    Object.defineProperty(target, descriptor.key, descriptor);\r\n                                }\r\n                            }\r\n\r\n                            return function(Constructor, protoProps, staticProps) {\r\n                                if (protoProps) {\r\n                                    defineProperties(Constructor.prototype, protoProps);\r\n                                }\r\n                                if (staticProps) {\r\n                                    defineProperties(Constructor, staticProps);\r\n                                }\r\n                                return Constructor;\r\n                            };\r\n                        }();\r\n\r\n                        var ClipboardAction = function() {\r\n                            /**\r\n                             * @param {Object} options\r\n                             */\r\n                            function ClipboardAction(options) {\r\n                                _classCallCheck(this, ClipboardAction);\r\n\r\n                                this.resolveOptions(options);\r\n                                this.initSelection();\r\n                            }\r\n\r\n                            /**\r\n                             * Defines base properties passed from constructor.\r\n                             * @param {Object} options\r\n                             */\r\n\r\n\r\n                            _createClass(ClipboardAction, [{\r\n                                key: 'resolveOptions',\r\n                                value: function resolveOptions() {\r\n                                    var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\r\n\r\n                                    this.action = options.action;\r\n                                    this.container = options.container;\r\n                                    this.emitter = options.emitter;\r\n                                    this.target = options.target;\r\n                                    this.text = options.text;\r\n                                    this.trigger = options.trigger;\r\n\r\n                                    this.selectedText = '';\r\n                                }\r\n                            }, {\r\n                                key: 'initSelection',\r\n                                value: function initSelection() {\r\n                                    if (this.text) {\r\n                                        this.selectFake();\r\n                                    } else if (this.target) {\r\n                                        this.selectTarget();\r\n                                    }\r\n                                }\r\n                            }, {\r\n                                key: 'selectFake',\r\n                                value: function selectFake() {\r\n                                    var _this = this;\r\n\r\n                                    var isRTL = document.documentElement.getAttribute('dir') == 'rtl';\r\n\r\n                                    this.removeFake();\r\n\r\n                                    this.fakeHandlerCallback = function() {\r\n                                        return _this.removeFake();\r\n                                    };\r\n                                    this.fakeHandler = this.container.addEventListener('click', this.fakeHandlerCallback) || true;\r\n\r\n                                    this.fakeElem = document.createElement('textarea');\r\n                                    // Prevent zooming on iOS\r\n                                    this.fakeElem.style.fontSize = '12pt';\r\n                                    // Reset box model\r\n                                    this.fakeElem.style.border = '0';\r\n                                    this.fakeElem.style.padding = '0';\r\n                                    this.fakeElem.style.margin = '0';\r\n                                    // Move element out of screen horizontally\r\n                                    this.fakeElem.style.position = 'absolute';\r\n                                    this.fakeElem.style[isRTL ? 'right' : 'left'] = '-9999px';\r\n                                    // Move element to the same position vertically\r\n                                    var yPosition = window.pageYOffset || document.documentElement.scrollTop;\r\n                                    this.fakeElem.style.top = yPosition + 'px';\r\n\r\n                                    this.fakeElem.setAttribute('readonly', '');\r\n                                    this.fakeElem.value = this.text;\r\n\r\n                                    this.container.appendChild(this.fakeElem);\r\n\r\n                                    this.selectedText = (0, _select2.default)(this.fakeElem);\r\n                                    this.copyText();\r\n                                }\r\n                            }, {\r\n                                key: 'removeFake',\r\n                                value: function removeFake() {\r\n                                    if (this.fakeHandler) {\r\n                                        this.container.removeEventListener('click', this.fakeHandlerCallback);\r\n                                        this.fakeHandler = null;\r\n                                        this.fakeHandlerCallback = null;\r\n                                    }\r\n\r\n                                    if (this.fakeElem) {\r\n                                        this.container.removeChild(this.fakeElem);\r\n                                        this.fakeElem = null;\r\n                                    }\r\n                                }\r\n                            }, {\r\n                                key: 'selectTarget',\r\n                                value: function selectTarget() {\r\n                                    this.selectedText = (0, _select2.default)(this.target);\r\n                                    this.copyText();\r\n                                }\r\n                            }, {\r\n                                key: 'copyText',\r\n                                value: function copyText() {\r\n                                    var succeeded = void 0;\r\n\r\n                                    try {\r\n                                        succeeded = document.execCommand(this.action);\r\n                                    } catch (err) {\r\n                                        succeeded = false;\r\n                                    }\r\n\r\n                                    this.handleResult(succeeded);\r\n                                }\r\n                            }, {\r\n                                key: 'handleResult',\r\n                                value: function handleResult(succeeded) {\r\n                                    this.emitter.emit(succeeded ? 'success' : 'error', {\r\n                                        action: this.action,\r\n                                        text: this.selectedText,\r\n                                        trigger: this.trigger,\r\n                                        clearSelection: this.clearSelection.bind(this)\r\n                                    });\r\n                                }\r\n                            }, {\r\n                                key: 'clearSelection',\r\n                                value: function clearSelection() {\r\n                                    if (this.trigger) {\r\n                                        this.trigger.focus();\r\n                                    }\r\n\r\n                                    window.getSelection().removeAllRanges();\r\n                                }\r\n                            }, {\r\n                                key: 'destroy',\r\n                                value: function destroy() {\r\n                                    this.removeFake();\r\n                                }\r\n                            }, {\r\n                                key: 'action',\r\n                                set: function set() {\r\n                                    var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'copy';\r\n\r\n                                    this._action = action;\r\n\r\n                                    if (this._action !== 'copy' && this._action !== 'cut') {\r\n                                        throw new Error('Invalid \"action\" value, use either \"copy\" or \"cut\"');\r\n                                    }\r\n                                },\r\n                                get: function get() {\r\n                                    return this._action;\r\n                                }\r\n                            }, {\r\n                                key: 'target',\r\n                                set: function set(target) {\r\n                                    if (target !== undefined) {\r\n                                        if (target && (typeof target === 'undefined' ? 'undefined' : _typeof(target)) === 'object' && target.nodeType === 1) {\r\n                                            if (this.action === 'copy' && target.hasAttribute('disabled')) {\r\n                                                throw new Error('Invalid \"target\" attribute. Please use \"readonly\" instead of \"disabled\" attribute');\r\n                                            }\r\n\r\n                                            if (this.action === 'cut' && (target.hasAttribute('readonly') || target.hasAttribute('disabled'))) {\r\n                                                throw new Error('Invalid \"target\" attribute. You can\\'t cut text from elements with \"readonly\" or \"disabled\" attributes');\r\n                                            }\r\n\r\n                                            this._target = target;\r\n                                        } else {\r\n                                            throw new Error('Invalid \"target\" value, use a valid Element');\r\n                                        }\r\n                                    }\r\n                                },\r\n                                get: function get() {\r\n                                    return this._target;\r\n                                }\r\n                            }]);\r\n\r\n                            return ClipboardAction;\r\n                        }();\r\n\r\n                        module.exports = ClipboardAction;\r\n                    });\r\n\r\n                    /***/\r\n                }),\r\n                          /* 1 */\r\n                          /***/ (function(module, exports, __webpack_require__) {\r\n\r\n                    var is = __webpack_require__(6);\r\n                    var delegate = __webpack_require__(5);\r\n\r\n                    /**\r\n                     * Validates all params and calls the right\r\n                     * listener function based on its target type.\r\n                     *\r\n                     * @param {String|HTMLElement|HTMLCollection|NodeList} target\r\n                     * @param {String} type\r\n                     * @param {Function} callback\r\n                     * @return {Object}\r\n                     */\r\n                    function listen(target, type, callback) {\r\n                        if (!target && !type && !callback) {\r\n                            throw new Error('Missing required arguments');\r\n                        }\r\n\r\n                        if (!is.string(type)) {\r\n                            throw new TypeError('Second argument must be a String');\r\n                        }\r\n\r\n                        if (!is.fn(callback)) {\r\n                            throw new TypeError('Third argument must be a Function');\r\n                        }\r\n\r\n                        if (is.node(target)) {\r\n                            return listenNode(target, type, callback);\r\n                        } else if (is.nodeList(target)) {\r\n                            return listenNodeList(target, type, callback);\r\n                        } else if (is.string(target)) {\r\n                            return listenSelector(target, type, callback);\r\n                        } else {\r\n                            throw new TypeError('First argument must be a String, HTMLElement, HTMLCollection, or NodeList');\r\n                        }\r\n                    }\r\n\r\n                    /**\r\n                     * Adds an event listener to a HTML element\r\n                     * and returns a remove listener function.\r\n                     *\r\n                     * @param {HTMLElement} node\r\n                     * @param {String} type\r\n                     * @param {Function} callback\r\n                     * @return {Object}\r\n                     */\r\n                    function listenNode(node, type, callback) {\r\n                        node.addEventListener(type, callback);\r\n\r\n                        return {\r\n                            destroy: function() {\r\n                                node.removeEventListener(type, callback);\r\n                            }\r\n                        }\r\n                    }\r\n\r\n                    /**\r\n                     * Add an event listener to a list of HTML elements\r\n                     * and returns a remove listener function.\r\n                     *\r\n                     * @param {NodeList|HTMLCollection} nodeList\r\n                     * @param {String} type\r\n                     * @param {Function} callback\r\n                     * @return {Object}\r\n                     */\r\n                    function listenNodeList(nodeList, type, callback) {\r\n                        Array.prototype.forEach.call(nodeList, function(node) {\r\n                            node.addEventListener(type, callback);\r\n                        });\r\n\r\n                        return {\r\n                            destroy: function() {\r\n                                Array.prototype.forEach.call(nodeList, function(node) {\r\n                                    node.removeEventListener(type, callback);\r\n                                });\r\n                            }\r\n                        }\r\n                    }\r\n\r\n                    /**\r\n                     * Add an event listener to a selector\r\n                     * and returns a remove listener function.\r\n                     *\r\n                     * @param {String} selector\r\n                     * @param {String} type\r\n                     * @param {Function} callback\r\n                     * @return {Object}\r\n                     */\r\n                    function listenSelector(selector, type, callback) {\r\n                        return delegate(document.body, selector, type, callback);\r\n                    }\r\n\r\n                    module.exports = listen;\r\n\r\n\r\n                    /***/\r\n                }),\r\n                          /* 2 */\r\n                          /***/ (function(module, exports) {\r\n\r\n                    function E() {\r\n                        // Keep this empty so it's easier to inherit from\r\n                        // (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3)\r\n                    }\r\n\r\n                    E.prototype = {\r\n                        on: function(name, callback, ctx) {\r\n                            var e = this.e || (this.e = {});\r\n\r\n                            (e[name] || (e[name] = [])).push({\r\n                                                                 fn: callback,\r\n                                                                 ctx: ctx\r\n                                                             });\r\n\r\n                            return this;\r\n                        },\r\n\r\n                        once: function(name, callback, ctx) {\r\n                            var self = this;\r\n\r\n                            function listener() {\r\n                                self.off(name, listener);\r\n                                callback.apply(ctx, arguments);\r\n                            };\r\n\r\n                            listener._ = callback\r\n                            return this.on(name, listener, ctx);\r\n                        },\r\n\r\n                        emit: function(name) {\r\n                            var data = [].slice.call(arguments, 1);\r\n                            var evtArr = ((this.e || (this.e = {}))[name] || []).slice();\r\n                            var i = 0;\r\n                            var len = evtArr.length;\r\n\r\n                            for (i; i < len; i++) {\r\n                                evtArr[i].fn.apply(evtArr[i].ctx, data);\r\n                            }\r\n\r\n                            return this;\r\n                        },\r\n\r\n                        off: function(name, callback) {\r\n                            var e = this.e || (this.e = {});\r\n                            var evts = e[name];\r\n                            var liveEvents = [];\r\n\r\n                            if (evts && callback) {\r\n                                for (var i = 0, len = evts.length; i < len; i++) {\r\n                                    if (evts[i].fn !== callback && evts[i].fn._ !== callback) {\r\n                                        liveEvents.push(evts[i]);\r\n                                    }\r\n                                }\r\n                            }\r\n\r\n                            // Remove event from queue to prevent memory leak\r\n                            // Suggested by https://github.com/lazd\r\n                            // Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910\r\n\r\n                            (liveEvents.length)\r\n                            ? e[name] = liveEvents\r\n                            : delete e[name];\r\n\r\n                            return this;\r\n                        }\r\n                    };\r\n\r\n                    module.exports = E;\r\n\r\n\r\n                    /***/\r\n                }),\r\n                          /* 3 */\r\n                          /***/ (function(module, exports, __webpack_require__) {\r\n\r\n                    var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;\r\n                    (function(global, factory) {\r\n                        if (true) {\r\n                            !(__WEBPACK_AMD_DEFINE_ARRAY__ = [module, __webpack_require__(0), __webpack_require__(2), __webpack_require__(1)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\r\n                                    __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\r\n                                                                     (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\r\n                            __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\r\n                        } else if (typeof exports !== \"undefined\") {\r\n                            factory(module, require('./clipboard-action'), require('tiny-emitter'), require('good-listener'));\r\n                        } else {\r\n                            var mod = {\r\n                                exports: {}\r\n                            };\r\n                            factory(mod, global.clipboardAction, global.tinyEmitter, global.goodListener);\r\n                            global.clipboard = mod.exports;\r\n                        }\r\n                    })(this, function(module, _clipboardAction, _tinyEmitter, _goodListener) {\r\n                        'use strict';\r\n\r\n                        var _clipboardAction2 = _interopRequireDefault(_clipboardAction);\r\n\r\n                        var _tinyEmitter2 = _interopRequireDefault(_tinyEmitter);\r\n\r\n                        var _goodListener2 = _interopRequireDefault(_goodListener);\r\n\r\n                        function _interopRequireDefault(obj) {\r\n                            return obj && obj.__esModule ? obj : {\r\n                                default: obj\r\n                            };\r\n                        }\r\n\r\n                        var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function(obj) {\r\n                            return typeof obj;\r\n                        } : function(obj) {\r\n                            return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\r\n                        };\r\n\r\n                        function _classCallCheck(instance, Constructor) {\r\n                            if (!(instance instanceof Constructor)) {\r\n                                throw new TypeError(\"Cannot call a class as a function\");\r\n                            }\r\n                        }\r\n\r\n                        var _createClass = function() {\r\n                            function defineProperties(target, props) {\r\n                                for (var i = 0; i < props.length; i++) {\r\n                                    var descriptor = props[i];\r\n                                    descriptor.enumerable = descriptor.enumerable || false;\r\n                                    descriptor.configurable = true;\r\n                                    if (\"value\" in descriptor) {\r\n                                        descriptor.writable = true;\r\n                                    }\r\n                                    Object.defineProperty(target, descriptor.key, descriptor);\r\n                                }\r\n                            }\r\n\r\n                            return function(Constructor, protoProps, staticProps) {\r\n                                if (protoProps) {\r\n                                    defineProperties(Constructor.prototype, protoProps);\r\n                                }\r\n                                if (staticProps) {\r\n                                    defineProperties(Constructor, staticProps);\r\n                                }\r\n                                return Constructor;\r\n                            };\r\n                        }();\r\n\r\n                        function _possibleConstructorReturn(self, call) {\r\n                            if (!self) {\r\n                                throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\r\n                            }\r\n\r\n                            return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\r\n                        }\r\n\r\n                        function _inherits(subClass, superClass) {\r\n                            if (typeof superClass !== \"function\" && superClass !== null) {\r\n                                throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\r\n                            }\r\n\r\n                            subClass.prototype = Object.create(superClass && superClass.prototype, {\r\n                                constructor: {\r\n                                    value: subClass,\r\n                                    enumerable: false,\r\n                                    writable: true,\r\n                                    configurable: true\r\n                                }\r\n                            });\r\n                            if (superClass) {\r\n                                Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\r\n                            }\r\n                        }\r\n\r\n                        var Clipboard = function(_Emitter) {\r\n                            _inherits(Clipboard, _Emitter);\r\n\r\n                            /**\r\n                             * @param {String|HTMLElement|HTMLCollection|NodeList} trigger\r\n                             * @param {Object} options\r\n                             */\r\n                            function Clipboard(trigger, options) {\r\n                                _classCallCheck(this, Clipboard);\r\n\r\n                                var _this = _possibleConstructorReturn(this, (Clipboard.__proto__ || Object.getPrototypeOf(Clipboard)).call(this));\r\n\r\n                                _this.resolveOptions(options);\r\n                                _this.listenClick(trigger);\r\n                                return _this;\r\n                            }\r\n\r\n                            /**\r\n                             * Defines if attributes would be resolved using internal setter functions\r\n                             * or custom functions that were passed in the constructor.\r\n                             * @param {Object} options\r\n                             */\r\n\r\n\r\n                            _createClass(Clipboard, [{\r\n                                key: 'resolveOptions',\r\n                                value: function resolveOptions() {\r\n                                    var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\r\n\r\n                                    this.action = typeof options.action === 'function' ? options.action : this.defaultAction;\r\n                                    this.target = typeof options.target === 'function' ? options.target : this.defaultTarget;\r\n                                    this.text = typeof options.text === 'function' ? options.text : this.defaultText;\r\n                                    this.container = _typeof(options.container) === 'object' ? options.container : document.body;\r\n                                }\r\n                            }, {\r\n                                key: 'listenClick',\r\n                                value: function listenClick(trigger) {\r\n                                    var _this2 = this;\r\n\r\n                                    this.listener = (0, _goodListener2.default)(trigger, 'click', function(e) {\r\n                                        return _this2.onClick(e);\r\n                                    });\r\n                                }\r\n                            }, {\r\n                                key: 'onClick',\r\n                                value: function onClick(e) {\r\n                                    var trigger = e.delegateTarget || e.currentTarget;\r\n\r\n                                    if (this.clipboardAction) {\r\n                                        this.clipboardAction = null;\r\n                                    }\r\n\r\n                                    this.clipboardAction = new _clipboardAction2.default({\r\n                                                                                             action: this.action(trigger),\r\n                                                                                             target: this.target(trigger),\r\n                                                                                             text: this.text(trigger),\r\n                                                                                             container: this.container,\r\n                                                                                             trigger: trigger,\r\n                                                                                             emitter: this\r\n                                                                                         });\r\n                                }\r\n                            }, {\r\n                                key: 'defaultAction',\r\n                                value: function defaultAction(trigger) {\r\n                                    return getAttributeValue('action', trigger);\r\n                                }\r\n                            }, {\r\n                                key: 'defaultTarget',\r\n                                value: function defaultTarget(trigger) {\r\n                                    var selector = getAttributeValue('target', trigger);\r\n\r\n                                    if (selector) {\r\n                                        return document.querySelector(selector);\r\n                                    }\r\n                                }\r\n                            }, {\r\n                                key: 'defaultText',\r\n                                value: function defaultText(trigger) {\r\n                                    return getAttributeValue('text', trigger);\r\n                                }\r\n                            }, {\r\n                                key: 'destroy',\r\n                                value: function destroy() {\r\n                                    this.listener.destroy();\r\n\r\n                                    if (this.clipboardAction) {\r\n                                        this.clipboardAction.destroy();\r\n                                        this.clipboardAction = null;\r\n                                    }\r\n                                }\r\n                            }], [{\r\n                                key: 'isSupported',\r\n                                value: function isSupported() {\r\n                                    var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['copy', 'cut'];\r\n\r\n                                    var actions = typeof action === 'string' ? [action] : action;\r\n                                    var support = !!document.queryCommandSupported;\r\n\r\n                                    actions.forEach(function(action) {\r\n                                        support = support && !!document.queryCommandSupported(action);\r\n                                    });\r\n\r\n                                    return support;\r\n                                }\r\n                            }]);\r\n\r\n                            return Clipboard;\r\n                        }(_tinyEmitter2.default);\r\n\r\n                        /**\r\n                         * Helper function to retrieve attribute value.\r\n                         * @param {String} suffix\r\n                         * @param {Element} element\r\n                         */\r\n                        function getAttributeValue(suffix, element) {\r\n                            var attribute = 'data-clipboard-' + suffix;\r\n\r\n                            if (!element.hasAttribute(attribute)) {\r\n                                return;\r\n                            }\r\n\r\n                            return element.getAttribute(attribute);\r\n                        }\r\n\r\n                        module.exports = Clipboard;\r\n                    });\r\n\r\n                    /***/\r\n                }),\r\n                          /* 4 */\r\n                          /***/ (function(module, exports) {\r\n\r\n                    var DOCUMENT_NODE_TYPE = 9;\r\n\r\n                    /**\r\n                     * A polyfill for Element.matches()\r\n                     */\r\n                    if (typeof Element !== 'undefined' && !Element.prototype.matches) {\r\n                        var proto = Element.prototype;\r\n\r\n                        proto.matches = proto.matchesSelector ||\r\n                                        proto.mozMatchesSelector ||\r\n                                        proto.msMatchesSelector ||\r\n                                        proto.oMatchesSelector ||\r\n                                        proto.webkitMatchesSelector;\r\n                    }\r\n\r\n                    /**\r\n                     * Finds the closest parent that matches a selector.\r\n                     *\r\n                     * @param {Element} element\r\n                     * @param {String} selector\r\n                     * @return {Function}\r\n                     */\r\n                    function closest(element, selector) {\r\n                        while (element && element.nodeType !== DOCUMENT_NODE_TYPE) {\r\n                            if (typeof element.matches === 'function' &&\r\n                                element.matches(selector)) {\r\n                                return element;\r\n                            }\r\n                            element = element.parentNode;\r\n                        }\r\n                    }\r\n\r\n                    module.exports = closest;\r\n\r\n\r\n                    /***/\r\n                }),\r\n                          /* 5 */\r\n                          /***/ (function(module, exports, __webpack_require__) {\r\n\r\n                    var closest = __webpack_require__(4);\r\n\r\n                    /**\r\n                     * Delegates event to a selector.\r\n                     *\r\n                     * @param {Element} element\r\n                     * @param {String} selector\r\n                     * @param {String} type\r\n                     * @param {Function} callback\r\n                     * @param {Boolean} useCapture\r\n                     * @return {Object}\r\n                     */\r\n                    function _delegate(element, selector, type, callback, useCapture) {\r\n                        var listenerFn = listener.apply(this, arguments);\r\n\r\n                        element.addEventListener(type, listenerFn, useCapture);\r\n\r\n                        return {\r\n                            destroy: function() {\r\n                                element.removeEventListener(type, listenerFn, useCapture);\r\n                            }\r\n                        }\r\n                    }\r\n\r\n                    /**\r\n                     * Delegates event to a selector.\r\n                     *\r\n                     * @param {Element|String|Array} [elements]\r\n                     * @param {String} selector\r\n                     * @param {String} type\r\n                     * @param {Function} callback\r\n                     * @param {Boolean} useCapture\r\n                     * @return {Object}\r\n                     */\r\n                    function delegate(elements, selector, type, callback, useCapture) {\r\n                        // Handle the regular Element usage\r\n                        if (typeof elements.addEventListener === 'function') {\r\n                            return _delegate.apply(null, arguments);\r\n                        }\r\n\r\n                        // Handle Element-less usage, it defaults to global delegation\r\n                        if (typeof type === 'function') {\r\n                            // Use `document` as the first parameter, then apply arguments\r\n                            // This is a short way to .unshift `arguments` without running into deoptimizations\r\n                            return _delegate.bind(null, document).apply(null, arguments);\r\n                        }\r\n\r\n                        // Handle Selector-based usage\r\n                        if (typeof elements === 'string') {\r\n                            elements = document.querySelectorAll(elements);\r\n                        }\r\n\r\n                        // Handle Array-like based usage\r\n                        return Array.prototype.map.call(elements, function(element) {\r\n                            return _delegate(element, selector, type, callback, useCapture);\r\n                        });\r\n                    }\r\n\r\n                    /**\r\n                     * Finds closest match and invokes callback.\r\n                     *\r\n                     * @param {Element} element\r\n                     * @param {String} selector\r\n                     * @param {String} type\r\n                     * @param {Function} callback\r\n                     * @return {Function}\r\n                     */\r\n                    function listener(element, selector, type, callback) {\r\n                        return function(e) {\r\n                            e.delegateTarget = closest(e.target, selector);\r\n\r\n                            if (e.delegateTarget) {\r\n                                callback.call(element, e);\r\n                            }\r\n                        }\r\n                    }\r\n\r\n                    module.exports = delegate;\r\n\r\n\r\n                    /***/\r\n                }),\r\n                          /* 6 */\r\n                          /***/ (function(module, exports) {\r\n\r\n                    /**\r\n                     * Check if argument is a HTML element.\r\n                     *\r\n                     * @param {Object} value\r\n                     * @return {Boolean}\r\n                     */\r\n                    exports.node = function(value) {\r\n                        return value !== undefined\r\n                               && value instanceof HTMLElement\r\n                               && value.nodeType === 1;\r\n                    };\r\n\r\n                    /**\r\n                     * Check if argument is a list of HTML elements.\r\n                     *\r\n                     * @param {Object} value\r\n                     * @return {Boolean}\r\n                     */\r\n                    exports.nodeList = function(value) {\r\n                        var type = Object.prototype.toString.call(value);\r\n\r\n                        return value !== undefined\r\n                               && (type === '[object NodeList]' || type === '[object HTMLCollection]')\r\n                               && ('length' in value)\r\n                               && (value.length === 0 || exports.node(value[0]));\r\n                    };\r\n\r\n                    /**\r\n                     * Check if argument is a string.\r\n                     *\r\n                     * @param {Object} value\r\n                     * @return {Boolean}\r\n                     */\r\n                    exports.string = function(value) {\r\n                        return typeof value === 'string'\r\n                               || value instanceof String;\r\n                    };\r\n\r\n                    /**\r\n                     * Check if argument is a function.\r\n                     *\r\n                     * @param {Object} value\r\n                     * @return {Boolean}\r\n                     */\r\n                    exports.fn = function(value) {\r\n                        var type = Object.prototype.toString.call(value);\r\n\r\n                        return type === '[object Function]';\r\n                    };\r\n\r\n\r\n                    /***/\r\n                }),\r\n                          /* 7 */\r\n                          /***/ (function(module, exports) {\r\n\r\n                    function select(element) {\r\n                        var selectedText;\r\n\r\n                        if (element.nodeName === 'SELECT') {\r\n                            element.focus();\r\n\r\n                            selectedText = element.value;\r\n                        } else if (element.nodeName === 'INPUT' || element.nodeName === 'TEXTAREA') {\r\n                            var isReadOnly = element.hasAttribute('readonly');\r\n\r\n                            if (!isReadOnly) {\r\n                                element.setAttribute('readonly', '');\r\n                            }\r\n\r\n                            element.select();\r\n                            element.setSelectionRange(0, element.value.length);\r\n\r\n                            if (!isReadOnly) {\r\n                                element.removeAttribute('readonly');\r\n                            }\r\n\r\n                            selectedText = element.value;\r\n                        } else {\r\n                            if (element.hasAttribute('contenteditable')) {\r\n                                element.focus();\r\n                            }\r\n\r\n                            var selection = window.getSelection();\r\n                            var range = document.createRange();\r\n\r\n                            range.selectNodeContents(element);\r\n                            selection.removeAllRanges();\r\n                            selection.addRange(range);\r\n\r\n                            selectedText = selection.toString();\r\n                        }\r\n\r\n                        return selectedText;\r\n                    }\r\n\r\n                    module.exports = select;\r\n\r\n\r\n                    /***/\r\n                })\r\n                          /******/]);\r\n});\n"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": -1,
          "_transferSize": 6658,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:09.558Z",
        "time": 208.70600000489503,
        "timings": {
          "blocked": 25.279999951668085,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 1.654,
          "wait": 178.07200005210936,
          "receive": 3.700000001117587,
          "_blocked_queueing": 20.403999951668084,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_connectionId": "1726423",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "parser",
          "url": "https://ekat.festool.de/login/app?__bk_&__windowid=IRW3104379&__rid=FOE1787216989423",
          "lineNumber": 1
        },
        "_priority": "High",
        "_resourceType": "script",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/login/WEB-RES/js/mdc.textfield.js_shop_7.26.1.5.js",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": ":authority",
              "value": "ekat.festool.de"
            },
            {
              "name": ":method",
              "value": "GET"
            },
            {
              "name": ":path",
              "value": "/login/WEB-RES/js/mdc.textfield.js_shop_7.26.1.5.js"
            },
            {
              "name": ":scheme",
              "value": "https"
            },
            {
              "name": "accept",
              "value": "*/*"
            },
            {
              "name": "accept-encoding",
              "value": "gzip, deflate, br, zstd"
            },
            {
              "name": "accept-language",
              "value": "en-GB,en-US;q=0.9,en;q=0.8"
            },
            {
              "name": "if-modified-since",
              "value": "Thu, 20 Aug 2026 07:47:25 GMT"
            },
            {
              "name": "if-none-match",
              "value": "W/\"293308-1787216828298\""
            },
            {
              "name": "priority",
              "value": "u=1"
            },
            {
              "name": "referer",
              "value": "https://ekat.festool.de/login/app?__bk_&__windowid=IRW3104379&__rid=FOE1787216989423"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            },
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "sec-fetch-dest",
              "value": "script"
            },
            {
              "name": "sec-fetch-mode",
              "value": "no-cors"
            },
            {
              "name": "sec-fetch-site",
              "value": "same-origin"
            },
            {
              "name": "user-agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            }
          ],
          "queryString": [],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "cache-control",
              "value": "public"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "content-length",
              "value": "30236"
            },
            {
              "name": "content-type",
              "value": "text/javascript"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 09:09:49 GMT"
            },
            {
              "name": "etag",
              "value": "W/\"293308-1787216989608\""
            },
            {
              "name": "expires",
              "value": "Thu, 20 Aug 2026 09:11:49 GMT"
            },
            {
              "name": "last-modified",
              "value": "Thu, 20 Aug 2026 07:47:25 GMT"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "pragma",
              "value": "cache"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "x-robots-tag",
              "value": "noindex"
            }
          ],
          "cookies": [],
          "content": {
            "size": 293308,
            "mimeType": "text/javascript",
            "text": "/**\r\n * @license\r\n * Copyright Google LLC All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://github.com/material-components/material-components-web/blob/master/LICENSE\r\n */\r\n(function webpackUniversalModuleDefinition(root, factory) {\r\n    if (typeof exports === 'object' && typeof module === 'object') {\r\n        module.exports = factory();\r\n    } else if (typeof define === 'function' && define.amd) {\r\n        define([], factory);\r\n    } else if (typeof exports === 'object') {\r\n        exports[\"textfield\"] = factory();\r\n    } else {\r\n        root[\"mdc\"] = root[\"mdc\"] || {}, root[\"mdc\"][\"textfield\"] = factory();\r\n    }\r\n})(this, function() {\r\n    return /******/ (function(modules) { // webpackBootstrap\r\n        /******/ \t// The module cache\r\n        /******/\r\n        var installedModules = {};\r\n        /******/\r\n        /******/ \t// The require function\r\n        /******/\r\n        function __webpack_require__(moduleId) {\r\n            /******/\r\n            /******/ \t\t// Check if module is in cache\r\n            /******/\r\n            if (installedModules[moduleId]) {\r\n                /******/\r\n                return installedModules[moduleId].exports;\r\n                /******/\r\n            }\r\n            /******/ \t\t// Create a new module (and put it into the cache)\r\n            /******/\r\n            var module = installedModules[moduleId] = {\r\n                /******/            i: moduleId,\r\n                /******/            l: false,\r\n                /******/            exports: {}\r\n                /******/\r\n            };\r\n            /******/\r\n            /******/ \t\t// Execute the module function\r\n            /******/\r\n            modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\r\n            /******/\r\n            /******/ \t\t// Flag the module as loaded\r\n            /******/\r\n            module.l = true;\r\n            /******/\r\n            /******/ \t\t// Return the exports of the module\r\n            /******/\r\n            return module.exports;\r\n            /******/\r\n        }\r\n\r\n        /******/\r\n        /******/\r\n        /******/ \t// expose the modules object (__webpack_modules__)\r\n        /******/\r\n        __webpack_require__.m = modules;\r\n        /******/\r\n        /******/ \t// expose the module cache\r\n        /******/\r\n        __webpack_require__.c = installedModules;\r\n        /******/\r\n        /******/ \t// define getter function for harmony exports\r\n        /******/\r\n        __webpack_require__.d = function(exports, name, getter) {\r\n            /******/\r\n            if (!__webpack_require__.o(exports, name)) {\r\n                /******/\r\n                Object.defineProperty(exports, name, {enumerable: true, get: getter});\r\n                /******/\r\n            }\r\n            /******/\r\n        };\r\n        /******/\r\n        /******/ \t// define __esModule on exports\r\n        /******/\r\n        __webpack_require__.r = function(exports) {\r\n            /******/\r\n            if (typeof Symbol !== 'undefined' && Symbol.toStringTag) {\r\n                /******/\r\n                Object.defineProperty(exports, Symbol.toStringTag, {value: 'Module'});\r\n                /******/\r\n            }\r\n            /******/\r\n            Object.defineProperty(exports, '__esModule', {value: true});\r\n            /******/\r\n        };\r\n        /******/\r\n        /******/ \t// create a fake namespace object\r\n        /******/ \t// mode & 1: value is a module id, require it\r\n        /******/ \t// mode & 2: merge all properties of value into the ns\r\n        /******/ \t// mode & 4: return value when already ns object\r\n        /******/ \t// mode & 8|1: behave like require\r\n        /******/\r\n        __webpack_require__.t = function(value, mode) {\r\n            /******/\r\n            if (mode & 1) {\r\n                value = __webpack_require__(value);\r\n            }\r\n            /******/\r\n            if (mode & 8) {\r\n                return value;\r\n            }\r\n            /******/\r\n            if ((mode & 4) && typeof value === 'object' && value && value.__esModule) {\r\n                return value;\r\n            }\r\n            /******/\r\n            var ns = Object.create(null);\r\n            /******/\r\n            __webpack_require__.r(ns);\r\n            /******/\r\n            Object.defineProperty(ns, 'default', {enumerable: true, value: value});\r\n            /******/\r\n            if (mode & 2 && typeof value != 'string') {\r\n                for (var key in value) {\r\n                    __webpack_require__.d(ns, key, function(key) {\r\n                        return value[key];\r\n                    }.bind(null, key));\r\n                }\r\n            }\r\n            /******/\r\n            return ns;\r\n            /******/\r\n        };\r\n        /******/\r\n        /******/ \t// getDefaultExport function for compatibility with non-harmony modules\r\n        /******/\r\n        __webpack_require__.n = function(module) {\r\n            /******/\r\n            var getter = module && module.__esModule ?\r\n                    /******/            function getDefault() {\r\n                        return module['default'];\r\n                    } :\r\n                    /******/            function getModuleExports() {\r\n                        return module;\r\n                    };\r\n            /******/\r\n            __webpack_require__.d(getter, 'a', getter);\r\n            /******/\r\n            return getter;\r\n            /******/\r\n        };\r\n        /******/\r\n        /******/ \t// Object.prototype.hasOwnProperty.call\r\n        /******/\r\n        __webpack_require__.o = function(object, property) {\r\n            return Object.prototype.hasOwnProperty.call(object, property);\r\n        };\r\n        /******/\r\n        /******/ \t// __webpack_public_path__\r\n        /******/\r\n        __webpack_require__.p = \"\";\r\n        /******/\r\n        /******/\r\n        /******/ \t// Load entry module and return exports\r\n        /******/\r\n        return __webpack_require__(__webpack_require__.s = \"./packages/mdc-textfield/index.ts\");\r\n        /******/\r\n    })\r\n            /************************************************************************/\r\n            /******/ ({\r\n\r\n                          /***/ \"./packages/mdc-base/component.ts\":\r\n                /*!****************************************!*\\\r\n  !*** ./packages/mdc-base/component.ts ***!\r\n  \\****************************************/\r\n                /*! no static exports found */\r\n                /***/ (function(module, exports, __webpack_require__) {\r\n\r\n                    \"use strict\";\r\n\r\n                    /**\r\n                     * @license\r\n                     * Copyright 2016 Google Inc.\r\n                     *\r\n                     * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n                     * of this software and associated documentation files (the \"Software\"), to deal\r\n                     * in the Software without restriction, including without limitation the rights\r\n                     * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n                     * copies of the Software, and to permit persons to whom the Software is\r\n                     * furnished to do so, subject to the following conditions:\r\n                     *\r\n                     * The above copyright notice and this permission notice shall be included in\r\n                     * all copies or substantial portions of the Software.\r\n                     *\r\n                     * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n                     * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n                     * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n                     * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n                     * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n                     * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n                     * THE SOFTWARE.\r\n                     */\r\n\r\n                    var __read = this && this.__read || function(o, n) {\r\n                        var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n                        if (!m) {\r\n                            return o;\r\n                        }\r\n                        var i = m.call(o),\r\n                                r,\r\n                                ar = [],\r\n                                e;\r\n                        try {\r\n                            while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {\r\n                                ar.push(r.value);\r\n                            }\r\n                        } catch (error) {\r\n                            e = {error: error};\r\n                        } finally {\r\n                            try {\r\n                                if (r && !r.done && (m = i[\"return\"])) {\r\n                                    m.call(i);\r\n                                }\r\n                            } finally {\r\n                                if (e) {\r\n                                    throw e.error;\r\n                                }\r\n                            }\r\n                        }\r\n                        return ar;\r\n                    };\r\n                    var __spread = this && this.__spread || function() {\r\n                        for (var ar = [], i = 0; i < arguments.length; i++) {\r\n                            ar = ar.concat(__read(arguments[i]));\r\n                        }\r\n                        return ar;\r\n                    };\r\n                    Object.defineProperty(exports, \"__esModule\", {value: true});\r\n                    var foundation_1 = __webpack_require__(/*! ./foundation */ \"./packages/mdc-base/foundation.ts\");\r\n                    var MDCComponent = /** @class */function() {\r\n                        function MDCComponent(root, foundation) {\r\n                            var args = [];\r\n                            for (var _i = 2; _i < arguments.length; _i++) {\r\n                                args[_i - 2] = arguments[_i];\r\n                            }\r\n                            this.root = root;\r\n                            this.initialize.apply(this, __spread(args));\r\n                            // Note that we initialize foundation here and not within the constructor's default param so that\r\n                            // this.root_ is defined and can be used within the foundation class.\r\n                            this.foundation = foundation === undefined ? this.getDefaultFoundation() : foundation;\r\n                            this.foundation.init();\r\n                            this.initialSyncWithDOM();\r\n                        }\r\n\r\n                        MDCComponent.attachTo = function(root) {\r\n                            // Subclasses which extend MDCBase should provide an attachTo() method that takes a root element and\r\n                            // returns an instantiated component with its root set to that element. Also note that in the cases of\r\n                            // subclasses, an explicit foundation class will not have to be passed in; it will simply be initialized\r\n                            // from getDefaultFoundation().\r\n                            return new MDCComponent(root, new foundation_1.MDCFoundation({}));\r\n                        };\r\n                        /* istanbul ignore next: method param only exists for typing purposes; it does not need to be unit tested */\r\n                        MDCComponent.prototype.initialize = function() {\r\n                            var _args = [];\r\n                            for (var _i = 0; _i < arguments.length; _i++) {\r\n                                _args[_i] = arguments[_i];\r\n                            }\r\n                            // Subclasses can override this to do any additional setup work that would be considered part of a\r\n                            // \"constructor\". Essentially, it is a hook into the parent constructor before the foundation is\r\n                            // initialized. Any additional arguments besides root and foundation will be passed in here.\r\n                        };\r\n                        MDCComponent.prototype.getDefaultFoundation = function() {\r\n                            // Subclasses must override this method to return a properly configured foundation class for the\r\n                            // component.\r\n                            throw new Error('Subclasses must override getDefaultFoundation to return a properly configured ' + 'foundation class');\r\n                        };\r\n                        MDCComponent.prototype.initialSyncWithDOM = function() {\r\n                            // Subclasses should override this method if they need to perform work to synchronize with a host DOM\r\n                            // object. An example of this would be a form control wrapper that needs to synchronize its internal state\r\n                            // to some property or attribute of the host DOM. Please note: this is *not* the place to perform DOM\r\n                            // reads/writes that would cause layout / paint, as this is called synchronously from within the constructor.\r\n                        };\r\n                        MDCComponent.prototype.destroy = function() {\r\n                            // Subclasses may implement this method to release any resources / deregister any listeners they have\r\n                            // attached. An example of this might be deregistering a resize event from the window object.\r\n                            this.foundation.destroy();\r\n                        };\r\n                        MDCComponent.prototype.listen = function(evtType, handler, options) {\r\n                            this.root.addEventListener(evtType, handler, options);\r\n                        };\r\n                        MDCComponent.prototype.unlisten = function(evtType, handler, options) {\r\n                            this.root.removeEventListener(evtType, handler, options);\r\n                        };\r\n                        /**\r\n                         * Fires a cross-browser-compatible custom event from the component root of the given type, with the given data.\r\n                         */\r\n                        MDCComponent.prototype.emit = function(evtType, evtData, shouldBubble) {\r\n                            if (shouldBubble === void 0) {\r\n                                shouldBubble = false;\r\n                            }\r\n                            var evt;\r\n                            if (typeof CustomEvent === 'function') {\r\n                                evt = new CustomEvent(evtType, {\r\n                                    bubbles: shouldBubble,\r\n                                    detail: evtData\r\n                                });\r\n                            } else {\r\n                                evt = document.createEvent('CustomEvent');\r\n                                evt.initCustomEvent(evtType, shouldBubble, false, evtData);\r\n                            }\r\n                            this.root.dispatchEvent(evt);\r\n                        };\r\n                        return MDCComponent;\r\n                    }();\r\n                    exports.MDCComponent = MDCComponent;\r\n// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier.\r\n                    exports.default = MDCComponent;\r\n\r\n                    /***/\r\n                }),\r\n\r\n                          /***/ \"./packages/mdc-base/foundation.ts\":\r\n                /*!*****************************************!*\\\r\n  !*** ./packages/mdc-base/foundation.ts ***!\r\n  \\*****************************************/\r\n                /*! no static exports found */\r\n                /***/ (function(module, exports, __webpack_require__) {\r\n\r\n                    \"use strict\";\r\n\r\n                    /**\r\n                     * @license\r\n                     * Copyright 2016 Google Inc.\r\n                     *\r\n                     * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n                     * of this software and associated documentation files (the \"Software\"), to deal\r\n                     * in the Software without restriction, including without limitation the rights\r\n                     * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n                     * copies of the Software, and to permit persons to whom the Software is\r\n                     * furnished to do so, subject to the following conditions:\r\n                     *\r\n                     * The above copyright notice and this permission notice shall be included in\r\n                     * all copies or substantial portions of the Software.\r\n                     *\r\n                     * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n                     * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n                     * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n                     * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n                     * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n                     * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n                     * THE SOFTWARE.\r\n                     */\r\n\r\n                    Object.defineProperty(exports, \"__esModule\", {value: true});\r\n                    var MDCFoundation = /** @class */function() {\r\n                        function MDCFoundation(adapter) {\r\n                            if (adapter === void 0) {\r\n                                adapter = {};\r\n                            }\r\n                            this.adapter = adapter;\r\n                        }\r\n\r\n                        Object.defineProperty(MDCFoundation, \"cssClasses\", {\r\n                            get: function get() {\r\n                                // Classes extending MDCFoundation should implement this method to return an object which exports every\r\n                                // CSS class the foundation class needs as a property. e.g. {ACTIVE: 'mdc-component--active'}\r\n                                return {};\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCFoundation, \"strings\", {\r\n                            get: function get() {\r\n                                // Classes extending MDCFoundation should implement this method to return an object which exports all\r\n                                // semantic strings as constants. e.g. {ARIA_ROLE: 'tablist'}\r\n                                return {};\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCFoundation, \"numbers\", {\r\n                            get: function get() {\r\n                                // Classes extending MDCFoundation should implement this method to return an object which exports all\r\n                                // of its semantic numbers as constants. e.g. {ANIMATION_DELAY_MS: 350}\r\n                                return {};\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCFoundation, \"defaultAdapter\", {\r\n                            get: function get() {\r\n                                // Classes extending MDCFoundation may choose to implement this getter in order to provide a convenient\r\n                                // way of viewing the necessary methods of an adapter. In the future, this could also be used for adapter\r\n                                // validation.\r\n                                return {};\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        MDCFoundation.prototype.init = function() {\r\n                            // Subclasses should override this method to perform initialization routines (registering events, etc.)\r\n                        };\r\n                        MDCFoundation.prototype.destroy = function() {\r\n                            // Subclasses should override this method to perform de-initialization routines (de-registering events, etc.)\r\n                        };\r\n                        return MDCFoundation;\r\n                    }();\r\n                    exports.MDCFoundation = MDCFoundation;\r\n// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier.\r\n                    exports.default = MDCFoundation;\r\n\r\n                    /***/\r\n                }),\r\n\r\n                          /***/ \"./packages/mdc-dom/events.ts\":\r\n                /*!************************************!*\\\r\n  !*** ./packages/mdc-dom/events.ts ***!\r\n  \\************************************/\r\n                /*! no static exports found */\r\n                /***/ (function(module, exports, __webpack_require__) {\r\n\r\n                    \"use strict\";\r\n\r\n                    /**\r\n                     * @license\r\n                     * Copyright 2019 Google Inc.\r\n                     *\r\n                     * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n                     * of this software and associated documentation files (the \"Software\"), to deal\r\n                     * in the Software without restriction, including without limitation the rights\r\n                     * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n                     * copies of the Software, and to permit persons to whom the Software is\r\n                     * furnished to do so, subject to the following conditions:\r\n                     *\r\n                     * The above copyright notice and this permission notice shall be included in\r\n                     * all copies or substantial portions of the Software.\r\n                     *\r\n                     * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n                     * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n                     * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n                     * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n                     * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n                     * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n                     * THE SOFTWARE.\r\n                     */\r\n\r\n                    Object.defineProperty(exports, \"__esModule\", {value: true});\r\n\r\n                    /**\r\n                     * Determine whether the current browser supports passive event listeners, and\r\n                     * if so, use them.\r\n                     */\r\n                    function applyPassive(globalObj) {\r\n                        if (globalObj === void 0) {\r\n                            globalObj = window;\r\n                        }\r\n                        return supportsPassiveOption(globalObj) ? {passive: true} : false;\r\n                    }\r\n\r\n                    exports.applyPassive = applyPassive;\r\n\r\n                    function supportsPassiveOption(globalObj) {\r\n                        if (globalObj === void 0) {\r\n                            globalObj = window;\r\n                        }\r\n                        // See\r\n                        // https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener\r\n                        var passiveSupported = false;\r\n                        try {\r\n                            var options = {\r\n                                // This function will be called when the browser\r\n                                // attempts to access the passive property.\r\n                                get passive() {\r\n                                    passiveSupported = true;\r\n                                    return false;\r\n                                }\r\n                            };\r\n                            var handler = function handler() {\r\n                            };\r\n                            globalObj.document.addEventListener('test', handler, options);\r\n                            globalObj.document.removeEventListener('test', handler, options);\r\n                        } catch (err) {\r\n                            passiveSupported = false;\r\n                        }\r\n                        return passiveSupported;\r\n                    }\r\n\r\n                    /***/\r\n                }),\r\n\r\n                          /***/ \"./packages/mdc-dom/ponyfill.ts\":\r\n                /*!**************************************!*\\\r\n  !*** ./packages/mdc-dom/ponyfill.ts ***!\r\n  \\**************************************/\r\n                /*! no static exports found */\r\n                /***/ (function(module, exports, __webpack_require__) {\r\n\r\n                    \"use strict\";\r\n\r\n                    /**\r\n                     * @license\r\n                     * Copyright 2018 Google Inc.\r\n                     *\r\n                     * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n                     * of this software and associated documentation files (the \"Software\"), to deal\r\n                     * in the Software without restriction, including without limitation the rights\r\n                     * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n                     * copies of the Software, and to permit persons to whom the Software is\r\n                     * furnished to do so, subject to the following conditions:\r\n                     *\r\n                     * The above copyright notice and this permission notice shall be included in\r\n                     * all copies or substantial portions of the Software.\r\n                     *\r\n                     * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n                     * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n                     * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n                     * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n                     * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n                     * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n                     * THE SOFTWARE.\r\n                     */\r\n\r\n                    Object.defineProperty(exports, \"__esModule\", {value: true});\r\n\r\n                    /**\r\n                     * @fileoverview A \"ponyfill\" is a polyfill that doesn't modify the global prototype chain.\r\n                     * This makes ponyfills safer than traditional polyfills, especially for libraries like MDC.\r\n                     */\r\n                    function closest(element, selector) {\r\n                        if (element.closest) {\r\n                            return element.closest(selector);\r\n                        }\r\n                        var el = element;\r\n                        while (el) {\r\n                            if (matches(el, selector)) {\r\n                                return el;\r\n                            }\r\n                            el = el.parentElement;\r\n                        }\r\n                        return null;\r\n                    }\r\n\r\n                    exports.closest = closest;\r\n\r\n                    function matches(element, selector) {\r\n                        var nativeMatches = element.matches || element.webkitMatchesSelector || element.msMatchesSelector;\r\n                        return nativeMatches.call(element, selector);\r\n                    }\r\n\r\n                    exports.matches = matches;\r\n\r\n                    /**\r\n                     * Used to compute the estimated scroll width of elements. When an element is\r\n                     * hidden due to display: none; being applied to a parent element, the width is\r\n                     * returned as 0. However, the element will have a true width once no longer\r\n                     * inside a display: none context. This method computes an estimated width when\r\n                     * the element is hidden or returns the true width when the element is visble.\r\n                     * @param {Element} element the element whose width to estimate\r\n                     */\r\n                    function estimateScrollWidth(element) {\r\n                        // Check the offsetParent. If the element inherits display: none from any\r\n                        // parent, the offsetParent property will be null (see\r\n                        // https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetParent).\r\n                        // This check ensures we only clone the node when necessary.\r\n                        var htmlEl = element;\r\n                        if (htmlEl.offsetParent !== null) {\r\n                            return htmlEl.scrollWidth;\r\n                        }\r\n                        var clone = htmlEl.cloneNode(true);\r\n                        clone.style.setProperty('position', 'absolute');\r\n                        clone.style.setProperty('transform', 'translate(-9999px, -9999px)');\r\n                        document.documentElement.appendChild(clone);\r\n                        var scrollWidth = clone.scrollWidth;\r\n                        document.documentElement.removeChild(clone);\r\n                        return scrollWidth;\r\n                    }\r\n\r\n                    exports.estimateScrollWidth = estimateScrollWidth;\r\n\r\n                    /***/\r\n                }),\r\n\r\n                          /***/ \"./packages/mdc-floating-label/component.ts\":\r\n                /*!**************************************************!*\\\r\n  !*** ./packages/mdc-floating-label/component.ts ***!\r\n  \\**************************************************/\r\n                /*! no static exports found */\r\n                /***/ (function(module, exports, __webpack_require__) {\r\n\r\n                    \"use strict\";\r\n\r\n                    /**\r\n                     * @license\r\n                     * Copyright 2016 Google Inc.\r\n                     *\r\n                     * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n                     * of this software and associated documentation files (the \"Software\"), to deal\r\n                     * in the Software without restriction, including without limitation the rights\r\n                     * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n                     * copies of the Software, and to permit persons to whom the Software is\r\n                     * furnished to do so, subject to the following conditions:\r\n                     *\r\n                     * The above copyright notice and this permission notice shall be included in\r\n                     * all copies or substantial portions of the Software.\r\n                     *\r\n                     * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n                     * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n                     * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n                     * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n                     * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n                     * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n                     * THE SOFTWARE.\r\n                     */\r\n\r\n                    var __extends = this && this.__extends || function() {\r\n                        var _extendStatics = function extendStatics(d, b) {\r\n                            _extendStatics = Object.setPrototypeOf || {__proto__: []} instanceof Array && function(d, b) {\r\n                                d.__proto__ = b;\r\n                            } || function(d, b) {\r\n                                for (var p in b) {\r\n                                    if (b.hasOwnProperty(p)) {\r\n                                        d[p] = b[p];\r\n                                    }\r\n                                }\r\n                            };\r\n                            return _extendStatics(d, b);\r\n                        };\r\n                        return function(d, b) {\r\n                            _extendStatics(d, b);\r\n\r\n                            function __() {\r\n                                this.constructor = d;\r\n                            }\r\n\r\n                            d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n                        };\r\n                    }();\r\n                    Object.defineProperty(exports, \"__esModule\", {value: true});\r\n                    var component_1 = __webpack_require__(/*! @material/base/component */ \"./packages/mdc-base/component.ts\");\r\n                    var ponyfill_1 = __webpack_require__(/*! @material/dom/ponyfill */ \"./packages/mdc-dom/ponyfill.ts\");\r\n                    var foundation_1 = __webpack_require__(/*! ./foundation */ \"./packages/mdc-floating-label/foundation.ts\");\r\n                    var MDCFloatingLabel = /** @class */function(_super) {\r\n                        __extends(MDCFloatingLabel, _super);\r\n\r\n                        function MDCFloatingLabel() {\r\n                            return _super !== null && _super.apply(this, arguments) || this;\r\n                        }\r\n\r\n                        MDCFloatingLabel.attachTo = function(root) {\r\n                            return new MDCFloatingLabel(root);\r\n                        };\r\n                        /**\r\n                         * Styles the label to produce the label shake for errors.\r\n                         * @param shouldShake If true, shakes the label by adding a CSS class; otherwise, stops shaking by removing the class.\r\n                         */\r\n                        MDCFloatingLabel.prototype.shake = function(shouldShake) {\r\n                            this.foundation.shake(shouldShake);\r\n                        };\r\n                        /**\r\n                         * Styles the label to float/dock.\r\n                         * @param shouldFloat If true, floats the label by adding a CSS class; otherwise, docks it by removing the class.\r\n                         */\r\n                        MDCFloatingLabel.prototype.float = function(shouldFloat) {\r\n                            this.foundation.float(shouldFloat);\r\n                        };\r\n                        /**\r\n                         * Styles the label as required.\r\n                         * @param isRequired If true, adds an asterisk to the label, indicating that it is required.\r\n                         */\r\n                        MDCFloatingLabel.prototype.setRequired = function(isRequired) {\r\n                            this.foundation.setRequired(isRequired);\r\n                        };\r\n                        MDCFloatingLabel.prototype.getWidth = function() {\r\n                            return this.foundation.getWidth();\r\n                        };\r\n                        MDCFloatingLabel.prototype.getDefaultFoundation = function() {\r\n                            var _this = this;\r\n                            // DO NOT INLINE this variable. For backward compatibility, foundations take a Partial<MDCFooAdapter>.\r\n                            // To ensure we don't accidentally omit any methods, we need a separate, strongly typed adapter variable.\r\n                            // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface.\r\n                            var adapter = {\r\n                                addClass: function addClass(className) {\r\n                                    return _this.root.classList.add(className);\r\n                                },\r\n                                removeClass: function removeClass(className) {\r\n                                    return _this.root.classList.remove(className);\r\n                                },\r\n                                getWidth: function getWidth() {\r\n                                    return ponyfill_1.estimateScrollWidth(_this.root);\r\n                                },\r\n                                registerInteractionHandler: function registerInteractionHandler(evtType, handler) {\r\n                                    return _this.listen(evtType, handler);\r\n                                },\r\n                                deregisterInteractionHandler: function deregisterInteractionHandler(evtType, handler) {\r\n                                    return _this.unlisten(evtType, handler);\r\n                                }\r\n                            };\r\n                            // tslint:enable:object-literal-sort-keys\r\n                            return new foundation_1.MDCFloatingLabelFoundation(adapter);\r\n                        };\r\n                        return MDCFloatingLabel;\r\n                    }(component_1.MDCComponent);\r\n                    exports.MDCFloatingLabel = MDCFloatingLabel;\r\n\r\n                    /***/\r\n                }),\r\n\r\n                          /***/ \"./packages/mdc-floating-label/constants.ts\":\r\n                /*!**************************************************!*\\\r\n  !*** ./packages/mdc-floating-label/constants.ts ***!\r\n  \\**************************************************/\r\n                /*! no static exports found */\r\n                /***/ (function(module, exports, __webpack_require__) {\r\n\r\n                    \"use strict\";\r\n\r\n                    /**\r\n                     * @license\r\n                     * Copyright 2016 Google Inc.\r\n                     *\r\n                     * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n                     * of this software and associated documentation files (the \"Software\"), to deal\r\n                     * in the Software without restriction, including without limitation the rights\r\n                     * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n                     * copies of the Software, and to permit persons to whom the Software is\r\n                     * furnished to do so, subject to the following conditions:\r\n                     *\r\n                     * The above copyright notice and this permission notice shall be included in\r\n                     * all copies or substantial portions of the Software.\r\n                     *\r\n                     * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n                     * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n                     * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n                     * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n                     * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n                     * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n                     * THE SOFTWARE.\r\n                     */\r\n\r\n                    Object.defineProperty(exports, \"__esModule\", {value: true});\r\n                    exports.cssClasses = {\r\n                        LABEL_FLOAT_ABOVE: 'mdc-floating-label--float-above',\r\n                        LABEL_REQUIRED: 'mdc-floating-label--required',\r\n                        LABEL_SHAKE: 'mdc-floating-label--shake',\r\n                        ROOT: 'mdc-floating-label'\r\n                    };\r\n\r\n                    /***/\r\n                }),\r\n\r\n                          /***/ \"./packages/mdc-floating-label/foundation.ts\":\r\n                /*!***************************************************!*\\\r\n  !*** ./packages/mdc-floating-label/foundation.ts ***!\r\n  \\***************************************************/\r\n                /*! no static exports found */\r\n                /***/ (function(module, exports, __webpack_require__) {\r\n\r\n                    \"use strict\";\r\n\r\n                    /**\r\n                     * @license\r\n                     * Copyright 2016 Google Inc.\r\n                     *\r\n                     * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n                     * of this software and associated documentation files (the \"Software\"), to deal\r\n                     * in the Software without restriction, including without limitation the rights\r\n                     * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n                     * copies of the Software, and to permit persons to whom the Software is\r\n                     * furnished to do so, subject to the following conditions:\r\n                     *\r\n                     * The above copyright notice and this permission notice shall be included in\r\n                     * all copies or substantial portions of the Software.\r\n                     *\r\n                     * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n                     * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n                     * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n                     * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n                     * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n                     * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n                     * THE SOFTWARE.\r\n                     */\r\n\r\n                    var __extends = this && this.__extends || function() {\r\n                        var _extendStatics = function extendStatics(d, b) {\r\n                            _extendStatics = Object.setPrototypeOf || {__proto__: []} instanceof Array && function(d, b) {\r\n                                d.__proto__ = b;\r\n                            } || function(d, b) {\r\n                                for (var p in b) {\r\n                                    if (b.hasOwnProperty(p)) {\r\n                                        d[p] = b[p];\r\n                                    }\r\n                                }\r\n                            };\r\n                            return _extendStatics(d, b);\r\n                        };\r\n                        return function(d, b) {\r\n                            _extendStatics(d, b);\r\n\r\n                            function __() {\r\n                                this.constructor = d;\r\n                            }\r\n\r\n                            d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n                        };\r\n                    }();\r\n                    var __assign = this && this.__assign || function() {\r\n                        __assign = Object.assign || function(t) {\r\n                            for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n                                s = arguments[i];\r\n                                for (var p in s) {\r\n                                    if (Object.prototype.hasOwnProperty.call(s, p)) {\r\n                                        t[p] = s[p];\r\n                                    }\r\n                                }\r\n                            }\r\n                            return t;\r\n                        };\r\n                        return __assign.apply(this, arguments);\r\n                    };\r\n                    Object.defineProperty(exports, \"__esModule\", {value: true});\r\n                    var foundation_1 = __webpack_require__(/*! @material/base/foundation */ \"./packages/mdc-base/foundation.ts\");\r\n                    var constants_1 = __webpack_require__(/*! ./constants */ \"./packages/mdc-floating-label/constants.ts\");\r\n                    var MDCFloatingLabelFoundation = /** @class */function(_super) {\r\n                        __extends(MDCFloatingLabelFoundation, _super);\r\n\r\n                        function MDCFloatingLabelFoundation(adapter) {\r\n                            var _this = _super.call(this, __assign(__assign({}, MDCFloatingLabelFoundation.defaultAdapter), adapter)) || this;\r\n                            _this.shakeAnimationEndHandler_ = function() {\r\n                                return _this.handleShakeAnimationEnd_();\r\n                            };\r\n                            return _this;\r\n                        }\r\n\r\n                        Object.defineProperty(MDCFloatingLabelFoundation, \"cssClasses\", {\r\n                            get: function get() {\r\n                                return constants_1.cssClasses;\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCFloatingLabelFoundation, \"defaultAdapter\", {\r\n                            /**\r\n                             * See {@link MDCFloatingLabelAdapter} for typing information on parameters and return types.\r\n                             */\r\n                            get: function get() {\r\n                                // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface.\r\n                                return {\r\n                                    addClass: function addClass() {\r\n                                        return undefined;\r\n                                    },\r\n                                    removeClass: function removeClass() {\r\n                                        return undefined;\r\n                                    },\r\n                                    getWidth: function getWidth() {\r\n                                        return 0;\r\n                                    },\r\n                                    registerInteractionHandler: function registerInteractionHandler() {\r\n                                        return undefined;\r\n                                    },\r\n                                    deregisterInteractionHandler: function deregisterInteractionHandler() {\r\n                                        return undefined;\r\n                                    }\r\n                                };\r\n                                // tslint:enable:object-literal-sort-keys\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        MDCFloatingLabelFoundation.prototype.init = function() {\r\n                            this.adapter.registerInteractionHandler('animationend', this.shakeAnimationEndHandler_);\r\n                        };\r\n                        MDCFloatingLabelFoundation.prototype.destroy = function() {\r\n                            this.adapter.deregisterInteractionHandler('animationend', this.shakeAnimationEndHandler_);\r\n                        };\r\n                        /**\r\n                         * Returns the width of the label element.\r\n                         */\r\n                        MDCFloatingLabelFoundation.prototype.getWidth = function() {\r\n                            return this.adapter.getWidth();\r\n                        };\r\n                        /**\r\n                         * Styles the label to produce a shake animation to indicate an error.\r\n                         * @param shouldShake If true, adds the shake CSS class; otherwise, removes shake class.\r\n                         */\r\n                        MDCFloatingLabelFoundation.prototype.shake = function(shouldShake) {\r\n                            var LABEL_SHAKE = MDCFloatingLabelFoundation.cssClasses.LABEL_SHAKE;\r\n                            if (shouldShake) {\r\n                                this.adapter.addClass(LABEL_SHAKE);\r\n                            } else {\r\n                                this.adapter.removeClass(LABEL_SHAKE);\r\n                            }\r\n                        };\r\n                        /**\r\n                         * Styles the label to float or dock.\r\n                         * @param shouldFloat If true, adds the float CSS class; otherwise, removes float and shake classes to dock the label.\r\n                         */\r\n                        MDCFloatingLabelFoundation.prototype.float = function(shouldFloat) {\r\n                            var _a = MDCFloatingLabelFoundation.cssClasses,\r\n                                    LABEL_FLOAT_ABOVE = _a.LABEL_FLOAT_ABOVE,\r\n                                    LABEL_SHAKE = _a.LABEL_SHAKE;\r\n                            if (shouldFloat) {\r\n                                this.adapter.addClass(LABEL_FLOAT_ABOVE);\r\n                            } else {\r\n                                this.adapter.removeClass(LABEL_FLOAT_ABOVE);\r\n                                this.adapter.removeClass(LABEL_SHAKE);\r\n                            }\r\n                        };\r\n                        /**\r\n                         * Styles the label as required.\r\n                         * @param isRequired If true, adds an asterisk to the label, indicating that it is required.\r\n                         */\r\n                        MDCFloatingLabelFoundation.prototype.setRequired = function(isRequired) {\r\n                            var LABEL_REQUIRED = MDCFloatingLabelFoundation.cssClasses.LABEL_REQUIRED;\r\n                            if (isRequired) {\r\n                                this.adapter.addClass(LABEL_REQUIRED);\r\n                            } else {\r\n                                this.adapter.removeClass(LABEL_REQUIRED);\r\n                            }\r\n                        };\r\n                        MDCFloatingLabelFoundation.prototype.handleShakeAnimationEnd_ = function() {\r\n                            var LABEL_SHAKE = MDCFloatingLabelFoundation.cssClasses.LABEL_SHAKE;\r\n                            this.adapter.removeClass(LABEL_SHAKE);\r\n                        };\r\n                        return MDCFloatingLabelFoundation;\r\n                    }(foundation_1.MDCFoundation);\r\n                    exports.MDCFloatingLabelFoundation = MDCFloatingLabelFoundation;\r\n// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier.\r\n                    exports.default = MDCFloatingLabelFoundation;\r\n\r\n                    /***/\r\n                }),\r\n\r\n                          /***/ \"./packages/mdc-line-ripple/component.ts\":\r\n                /*!***********************************************!*\\\r\n  !*** ./packages/mdc-line-ripple/component.ts ***!\r\n  \\***********************************************/\r\n                /*! no static exports found */\r\n                /***/ (function(module, exports, __webpack_require__) {\r\n\r\n                    \"use strict\";\r\n\r\n                    /**\r\n                     * @license\r\n                     * Copyright 2018 Google Inc.\r\n                     *\r\n                     * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n                     * of this software and associated documentation files (the \"Software\"), to deal\r\n                     * in the Software without restriction, including without limitation the rights\r\n                     * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n                     * copies of the Software, and to permit persons to whom the Software is\r\n                     * furnished to do so, subject to the following conditions:\r\n                     *\r\n                     * The above copyright notice and this permission notice shall be included in\r\n                     * all copies or substantial portions of the Software.\r\n                     *\r\n                     * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n                     * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n                     * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n                     * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n                     * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n                     * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n                     * THE SOFTWARE.\r\n                     */\r\n\r\n                    var __extends = this && this.__extends || function() {\r\n                        var _extendStatics = function extendStatics(d, b) {\r\n                            _extendStatics = Object.setPrototypeOf || {__proto__: []} instanceof Array && function(d, b) {\r\n                                d.__proto__ = b;\r\n                            } || function(d, b) {\r\n                                for (var p in b) {\r\n                                    if (b.hasOwnProperty(p)) {\r\n                                        d[p] = b[p];\r\n                                    }\r\n                                }\r\n                            };\r\n                            return _extendStatics(d, b);\r\n                        };\r\n                        return function(d, b) {\r\n                            _extendStatics(d, b);\r\n\r\n                            function __() {\r\n                                this.constructor = d;\r\n                            }\r\n\r\n                            d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n                        };\r\n                    }();\r\n                    Object.defineProperty(exports, \"__esModule\", {value: true});\r\n                    var component_1 = __webpack_require__(/*! @material/base/component */ \"./packages/mdc-base/component.ts\");\r\n                    var foundation_1 = __webpack_require__(/*! ./foundation */ \"./packages/mdc-line-ripple/foundation.ts\");\r\n                    var MDCLineRipple = /** @class */function(_super) {\r\n                        __extends(MDCLineRipple, _super);\r\n\r\n                        function MDCLineRipple() {\r\n                            return _super !== null && _super.apply(this, arguments) || this;\r\n                        }\r\n\r\n                        MDCLineRipple.attachTo = function(root) {\r\n                            return new MDCLineRipple(root);\r\n                        };\r\n                        /**\r\n                         * Activates the line ripple\r\n                         */\r\n                        MDCLineRipple.prototype.activate = function() {\r\n                            this.foundation.activate();\r\n                        };\r\n                        /**\r\n                         * Deactivates the line ripple\r\n                         */\r\n                        MDCLineRipple.prototype.deactivate = function() {\r\n                            this.foundation.deactivate();\r\n                        };\r\n                        /**\r\n                         * Sets the transform origin given a user's click location.\r\n                         * The `rippleCenter` is the x-coordinate of the middle of the ripple.\r\n                         */\r\n                        MDCLineRipple.prototype.setRippleCenter = function(xCoordinate) {\r\n                            this.foundation.setRippleCenter(xCoordinate);\r\n                        };\r\n                        MDCLineRipple.prototype.getDefaultFoundation = function() {\r\n                            var _this = this;\r\n                            // DO NOT INLINE this variable. For backward compatibility, foundations take a Partial<MDCFooAdapter>.\r\n                            // To ensure we don't accidentally omit any methods, we need a separate, strongly typed adapter variable.\r\n                            // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface.\r\n                            var adapter = {\r\n                                addClass: function addClass(className) {\r\n                                    return _this.root.classList.add(className);\r\n                                },\r\n                                removeClass: function removeClass(className) {\r\n                                    return _this.root.classList.remove(className);\r\n                                },\r\n                                hasClass: function hasClass(className) {\r\n                                    return _this.root.classList.contains(className);\r\n                                },\r\n                                setStyle: function setStyle(propertyName, value) {\r\n                                    return _this.root.style.setProperty(propertyName, value);\r\n                                },\r\n                                registerEventHandler: function registerEventHandler(evtType, handler) {\r\n                                    return _this.listen(evtType, handler);\r\n                                },\r\n                                deregisterEventHandler: function deregisterEventHandler(evtType, handler) {\r\n                                    return _this.unlisten(evtType, handler);\r\n                                }\r\n                            };\r\n                            // tslint:enable:object-literal-sort-keys\r\n                            return new foundation_1.MDCLineRippleFoundation(adapter);\r\n                        };\r\n                        return MDCLineRipple;\r\n                    }(component_1.MDCComponent);\r\n                    exports.MDCLineRipple = MDCLineRipple;\r\n\r\n                    /***/\r\n                }),\r\n\r\n                          /***/ \"./packages/mdc-line-ripple/constants.ts\":\r\n                /*!***********************************************!*\\\r\n  !*** ./packages/mdc-line-ripple/constants.ts ***!\r\n  \\***********************************************/\r\n                /*! no static exports found */\r\n                /***/ (function(module, exports, __webpack_require__) {\r\n\r\n                    \"use strict\";\r\n\r\n                    /**\r\n                     * @license\r\n                     * Copyright 2018 Google Inc.\r\n                     *\r\n                     * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n                     * of this software and associated documentation files (the \"Software\"), to deal\r\n                     * in the Software without restriction, including without limitation the rights\r\n                     * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n                     * copies of the Software, and to permit persons to whom the Software is\r\n                     * furnished to do so, subject to the following conditions:\r\n                     *\r\n                     * The above copyright notice and this permission notice shall be included in\r\n                     * all copies or substantial portions of the Software.\r\n                     *\r\n                     * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n                     * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n                     * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n                     * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n                     * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n                     * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n                     * THE SOFTWARE.\r\n                     */\r\n\r\n                    Object.defineProperty(exports, \"__esModule\", {value: true});\r\n                    var cssClasses = {\r\n                        LINE_RIPPLE_ACTIVE: 'mdc-line-ripple--active',\r\n                        LINE_RIPPLE_DEACTIVATING: 'mdc-line-ripple--deactivating'\r\n                    };\r\n                    exports.cssClasses = cssClasses;\r\n\r\n                    /***/\r\n                }),\r\n\r\n                          /***/ \"./packages/mdc-line-ripple/foundation.ts\":\r\n                /*!************************************************!*\\\r\n  !*** ./packages/mdc-line-ripple/foundation.ts ***!\r\n  \\************************************************/\r\n                /*! no static exports found */\r\n                /***/ (function(module, exports, __webpack_require__) {\r\n\r\n                    \"use strict\";\r\n\r\n                    /**\r\n                     * @license\r\n                     * Copyright 2018 Google Inc.\r\n                     *\r\n                     * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n                     * of this software and associated documentation files (the \"Software\"), to deal\r\n                     * in the Software without restriction, including without limitation the rights\r\n                     * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n                     * copies of the Software, and to permit persons to whom the Software is\r\n                     * furnished to do so, subject to the following conditions:\r\n                     *\r\n                     * The above copyright notice and this permission notice shall be included in\r\n                     * all copies or substantial portions of the Software.\r\n                     *\r\n                     * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n                     * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n                     * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n                     * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n                     * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n                     * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n                     * THE SOFTWARE.\r\n                     */\r\n\r\n                    var __extends = this && this.__extends || function() {\r\n                        var _extendStatics = function extendStatics(d, b) {\r\n                            _extendStatics = Object.setPrototypeOf || {__proto__: []} instanceof Array && function(d, b) {\r\n                                d.__proto__ = b;\r\n                            } || function(d, b) {\r\n                                for (var p in b) {\r\n                                    if (b.hasOwnProperty(p)) {\r\n                                        d[p] = b[p];\r\n                                    }\r\n                                }\r\n                            };\r\n                            return _extendStatics(d, b);\r\n                        };\r\n                        return function(d, b) {\r\n                            _extendStatics(d, b);\r\n\r\n                            function __() {\r\n                                this.constructor = d;\r\n                            }\r\n\r\n                            d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n                        };\r\n                    }();\r\n                    var __assign = this && this.__assign || function() {\r\n                        __assign = Object.assign || function(t) {\r\n                            for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n                                s = arguments[i];\r\n                                for (var p in s) {\r\n                                    if (Object.prototype.hasOwnProperty.call(s, p)) {\r\n                                        t[p] = s[p];\r\n                                    }\r\n                                }\r\n                            }\r\n                            return t;\r\n                        };\r\n                        return __assign.apply(this, arguments);\r\n                    };\r\n                    Object.defineProperty(exports, \"__esModule\", {value: true});\r\n                    var foundation_1 = __webpack_require__(/*! @material/base/foundation */ \"./packages/mdc-base/foundation.ts\");\r\n                    var constants_1 = __webpack_require__(/*! ./constants */ \"./packages/mdc-line-ripple/constants.ts\");\r\n                    var MDCLineRippleFoundation = /** @class */function(_super) {\r\n                        __extends(MDCLineRippleFoundation, _super);\r\n\r\n                        function MDCLineRippleFoundation(adapter) {\r\n                            var _this = _super.call(this, __assign(__assign({}, MDCLineRippleFoundation.defaultAdapter), adapter)) || this;\r\n                            _this.transitionEndHandler_ = function(evt) {\r\n                                return _this.handleTransitionEnd(evt);\r\n                            };\r\n                            return _this;\r\n                        }\r\n\r\n                        Object.defineProperty(MDCLineRippleFoundation, \"cssClasses\", {\r\n                            get: function get() {\r\n                                return constants_1.cssClasses;\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCLineRippleFoundation, \"defaultAdapter\", {\r\n                            /**\r\n                             * See {@link MDCLineRippleAdapter} for typing information on parameters and return types.\r\n                             */\r\n                            get: function get() {\r\n                                // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface.\r\n                                return {\r\n                                    addClass: function addClass() {\r\n                                        return undefined;\r\n                                    },\r\n                                    removeClass: function removeClass() {\r\n                                        return undefined;\r\n                                    },\r\n                                    hasClass: function hasClass() {\r\n                                        return false;\r\n                                    },\r\n                                    setStyle: function setStyle() {\r\n                                        return undefined;\r\n                                    },\r\n                                    registerEventHandler: function registerEventHandler() {\r\n                                        return undefined;\r\n                                    },\r\n                                    deregisterEventHandler: function deregisterEventHandler() {\r\n                                        return undefined;\r\n                                    }\r\n                                };\r\n                                // tslint:enable:object-literal-sort-keys\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        MDCLineRippleFoundation.prototype.init = function() {\r\n                            this.adapter.registerEventHandler('transitionend', this.transitionEndHandler_);\r\n                        };\r\n                        MDCLineRippleFoundation.prototype.destroy = function() {\r\n                            this.adapter.deregisterEventHandler('transitionend', this.transitionEndHandler_);\r\n                        };\r\n                        MDCLineRippleFoundation.prototype.activate = function() {\r\n                            this.adapter.removeClass(constants_1.cssClasses.LINE_RIPPLE_DEACTIVATING);\r\n                            this.adapter.addClass(constants_1.cssClasses.LINE_RIPPLE_ACTIVE);\r\n                        };\r\n                        MDCLineRippleFoundation.prototype.setRippleCenter = function(xCoordinate) {\r\n                            this.adapter.setStyle('transform-origin', xCoordinate + \"px center\");\r\n                        };\r\n                        MDCLineRippleFoundation.prototype.deactivate = function() {\r\n                            this.adapter.addClass(constants_1.cssClasses.LINE_RIPPLE_DEACTIVATING);\r\n                        };\r\n                        MDCLineRippleFoundation.prototype.handleTransitionEnd = function(evt) {\r\n                            // Wait for the line ripple to be either transparent or opaque\r\n                            // before emitting the animation end event\r\n                            var isDeactivating = this.adapter.hasClass(constants_1.cssClasses.LINE_RIPPLE_DEACTIVATING);\r\n                            if (evt.propertyName === 'opacity') {\r\n                                if (isDeactivating) {\r\n                                    this.adapter.removeClass(constants_1.cssClasses.LINE_RIPPLE_ACTIVE);\r\n                                    this.adapter.removeClass(constants_1.cssClasses.LINE_RIPPLE_DEACTIVATING);\r\n                                }\r\n                            }\r\n                        };\r\n                        return MDCLineRippleFoundation;\r\n                    }(foundation_1.MDCFoundation);\r\n                    exports.MDCLineRippleFoundation = MDCLineRippleFoundation;\r\n// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier.\r\n                    exports.default = MDCLineRippleFoundation;\r\n\r\n                    /***/\r\n                }),\r\n\r\n                          /***/ \"./packages/mdc-notched-outline/component.ts\":\r\n                /*!***************************************************!*\\\r\n  !*** ./packages/mdc-notched-outline/component.ts ***!\r\n  \\***************************************************/\r\n                /*! no static exports found */\r\n                /***/ (function(module, exports, __webpack_require__) {\r\n\r\n                    \"use strict\";\r\n\r\n                    /**\r\n                     * @license\r\n                     * Copyright 2017 Google Inc.\r\n                     *\r\n                     * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n                     * of this software and associated documentation files (the \"Software\"), to deal\r\n                     * in the Software without restriction, including without limitation the rights\r\n                     * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n                     * copies of the Software, and to permit persons to whom the Software is\r\n                     * furnished to do so, subject to the following conditions:\r\n                     *\r\n                     * The above copyright notice and this permission notice shall be included in\r\n                     * all copies or substantial portions of the Software.\r\n                     *\r\n                     * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n                     * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n                     * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n                     * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n                     * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n                     * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n                     * THE SOFTWARE.\r\n                     */\r\n\r\n                    var __extends = this && this.__extends || function() {\r\n                        var _extendStatics = function extendStatics(d, b) {\r\n                            _extendStatics = Object.setPrototypeOf || {__proto__: []} instanceof Array && function(d, b) {\r\n                                d.__proto__ = b;\r\n                            } || function(d, b) {\r\n                                for (var p in b) {\r\n                                    if (b.hasOwnProperty(p)) {\r\n                                        d[p] = b[p];\r\n                                    }\r\n                                }\r\n                            };\r\n                            return _extendStatics(d, b);\r\n                        };\r\n                        return function(d, b) {\r\n                            _extendStatics(d, b);\r\n\r\n                            function __() {\r\n                                this.constructor = d;\r\n                            }\r\n\r\n                            d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n                        };\r\n                    }();\r\n                    Object.defineProperty(exports, \"__esModule\", {value: true});\r\n                    var component_1 = __webpack_require__(/*! @material/base/component */ \"./packages/mdc-base/component.ts\");\r\n                    var foundation_1 = __webpack_require__(/*! @material/floating-label/foundation */ \"./packages/mdc-floating-label/foundation.ts\");\r\n                    var constants_1 = __webpack_require__(/*! ./constants */ \"./packages/mdc-notched-outline/constants.ts\");\r\n                    var foundation_2 = __webpack_require__(/*! ./foundation */ \"./packages/mdc-notched-outline/foundation.ts\");\r\n                    var MDCNotchedOutline = /** @class */function(_super) {\r\n                        __extends(MDCNotchedOutline, _super);\r\n\r\n                        function MDCNotchedOutline() {\r\n                            return _super !== null && _super.apply(this, arguments) || this;\r\n                        }\r\n\r\n                        MDCNotchedOutline.attachTo = function(root) {\r\n                            return new MDCNotchedOutline(root);\r\n                        };\r\n                        MDCNotchedOutline.prototype.initialSyncWithDOM = function() {\r\n                            this.notchElement_ = this.root.querySelector(constants_1.strings.NOTCH_ELEMENT_SELECTOR);\r\n                            var label = this.root.querySelector('.' + foundation_1.MDCFloatingLabelFoundation.cssClasses.ROOT);\r\n                            if (label) {\r\n                                label.style.transitionDuration = '0s';\r\n                                this.root.classList.add(constants_1.cssClasses.OUTLINE_UPGRADED);\r\n                                requestAnimationFrame(function() {\r\n                                    label.style.transitionDuration = '';\r\n                                });\r\n                            } else {\r\n                                this.root.classList.add(constants_1.cssClasses.NO_LABEL);\r\n                            }\r\n                        };\r\n                        /**\r\n                         * Updates classes and styles to open the notch to the specified width.\r\n                         * @param notchWidth The notch width in the outline.\r\n                         */\r\n                        MDCNotchedOutline.prototype.notch = function(notchWidth) {\r\n                            this.foundation.notch(notchWidth);\r\n                        };\r\n                        /**\r\n                         * Updates classes and styles to close the notch.\r\n                         */\r\n                        MDCNotchedOutline.prototype.closeNotch = function() {\r\n                            this.foundation.closeNotch();\r\n                        };\r\n                        MDCNotchedOutline.prototype.getDefaultFoundation = function() {\r\n                            var _this = this;\r\n                            // DO NOT INLINE this variable. For backward compatibility, foundations take a Partial<MDCFooAdapter>.\r\n                            // To ensure we don't accidentally omit any methods, we need a separate, strongly typed adapter variable.\r\n                            // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface.\r\n                            var adapter = {\r\n                                addClass: function addClass(className) {\r\n                                    return _this.root.classList.add(className);\r\n                                },\r\n                                removeClass: function removeClass(className) {\r\n                                    return _this.root.classList.remove(className);\r\n                                },\r\n                                setNotchWidthProperty: function setNotchWidthProperty(width) {\r\n                                    return _this.notchElement_.style.setProperty('width', width + 'px');\r\n                                },\r\n                                removeNotchWidthProperty: function removeNotchWidthProperty() {\r\n                                    return _this.notchElement_.style.removeProperty('width');\r\n                                }\r\n                            };\r\n                            // tslint:enable:object-literal-sort-keys\r\n                            return new foundation_2.MDCNotchedOutlineFoundation(adapter);\r\n                        };\r\n                        return MDCNotchedOutline;\r\n                    }(component_1.MDCComponent);\r\n                    exports.MDCNotchedOutline = MDCNotchedOutline;\r\n\r\n                    /***/\r\n                }),\r\n\r\n                          /***/ \"./packages/mdc-notched-outline/constants.ts\":\r\n                /*!***************************************************!*\\\r\n  !*** ./packages/mdc-notched-outline/constants.ts ***!\r\n  \\***************************************************/\r\n                /*! no static exports found */\r\n                /***/ (function(module, exports, __webpack_require__) {\r\n\r\n                    \"use strict\";\r\n\r\n                    /**\r\n                     * @license\r\n                     * Copyright 2018 Google Inc.\r\n                     *\r\n                     * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n                     * of this software and associated documentation files (the \"Software\"), to deal\r\n                     * in the Software without restriction, including without limitation the rights\r\n                     * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n                     * copies of the Software, and to permit persons to whom the Software is\r\n                     * furnished to do so, subject to the following conditions:\r\n                     *\r\n                     * The above copyright notice and this permission notice shall be included in\r\n                     * all copies or substantial portions of the Software.\r\n                     *\r\n                     * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n                     * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n                     * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n                     * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n                     * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n                     * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n                     * THE SOFTWARE.\r\n                     */\r\n\r\n                    Object.defineProperty(exports, \"__esModule\", {value: true});\r\n                    var strings = {\r\n                        NOTCH_ELEMENT_SELECTOR: '.mdc-notched-outline__notch'\r\n                    };\r\n                    exports.strings = strings;\r\n                    var numbers = {\r\n                        // This should stay in sync with $mdc-notched-outline-padding * 2.\r\n                        NOTCH_ELEMENT_PADDING: 8\r\n                    };\r\n                    exports.numbers = numbers;\r\n                    var cssClasses = {\r\n                        NO_LABEL: 'mdc-notched-outline--no-label',\r\n                        OUTLINE_NOTCHED: 'mdc-notched-outline--notched',\r\n                        OUTLINE_UPGRADED: 'mdc-notched-outline--upgraded'\r\n                    };\r\n                    exports.cssClasses = cssClasses;\r\n\r\n                    /***/\r\n                }),\r\n\r\n                          /***/ \"./packages/mdc-notched-outline/foundation.ts\":\r\n                /*!****************************************************!*\\\r\n  !*** ./packages/mdc-notched-outline/foundation.ts ***!\r\n  \\****************************************************/\r\n                /*! no static exports found */\r\n                /***/ (function(module, exports, __webpack_require__) {\r\n\r\n                    \"use strict\";\r\n\r\n                    /**\r\n                     * @license\r\n                     * Copyright 2017 Google Inc.\r\n                     *\r\n                     * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n                     * of this software and associated documentation files (the \"Software\"), to deal\r\n                     * in the Software without restriction, including without limitation the rights\r\n                     * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n                     * copies of the Software, and to permit persons to whom the Software is\r\n                     * furnished to do so, subject to the following conditions:\r\n                     *\r\n                     * The above copyright notice and this permission notice shall be included in\r\n                     * all copies or substantial portions of the Software.\r\n                     *\r\n                     * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n                     * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n                     * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n                     * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n                     * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n                     * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n                     * THE SOFTWARE.\r\n                     */\r\n\r\n                    var __extends = this && this.__extends || function() {\r\n                        var _extendStatics = function extendStatics(d, b) {\r\n                            _extendStatics = Object.setPrototypeOf || {__proto__: []} instanceof Array && function(d, b) {\r\n                                d.__proto__ = b;\r\n                            } || function(d, b) {\r\n                                for (var p in b) {\r\n                                    if (b.hasOwnProperty(p)) {\r\n                                        d[p] = b[p];\r\n                                    }\r\n                                }\r\n                            };\r\n                            return _extendStatics(d, b);\r\n                        };\r\n                        return function(d, b) {\r\n                            _extendStatics(d, b);\r\n\r\n                            function __() {\r\n                                this.constructor = d;\r\n                            }\r\n\r\n                            d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n                        };\r\n                    }();\r\n                    var __assign = this && this.__assign || function() {\r\n                        __assign = Object.assign || function(t) {\r\n                            for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n                                s = arguments[i];\r\n                                for (var p in s) {\r\n                                    if (Object.prototype.hasOwnProperty.call(s, p)) {\r\n                                        t[p] = s[p];\r\n                                    }\r\n                                }\r\n                            }\r\n                            return t;\r\n                        };\r\n                        return __assign.apply(this, arguments);\r\n                    };\r\n                    Object.defineProperty(exports, \"__esModule\", {value: true});\r\n                    var foundation_1 = __webpack_require__(/*! @material/base/foundation */ \"./packages/mdc-base/foundation.ts\");\r\n                    var constants_1 = __webpack_require__(/*! ./constants */ \"./packages/mdc-notched-outline/constants.ts\");\r\n                    var MDCNotchedOutlineFoundation = /** @class */function(_super) {\r\n                        __extends(MDCNotchedOutlineFoundation, _super);\r\n\r\n                        function MDCNotchedOutlineFoundation(adapter) {\r\n                            return _super.call(this, __assign(__assign({}, MDCNotchedOutlineFoundation.defaultAdapter), adapter)) || this;\r\n                        }\r\n\r\n                        Object.defineProperty(MDCNotchedOutlineFoundation, \"strings\", {\r\n                            get: function get() {\r\n                                return constants_1.strings;\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCNotchedOutlineFoundation, \"cssClasses\", {\r\n                            get: function get() {\r\n                                return constants_1.cssClasses;\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCNotchedOutlineFoundation, \"numbers\", {\r\n                            get: function get() {\r\n                                return constants_1.numbers;\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCNotchedOutlineFoundation, \"defaultAdapter\", {\r\n                            /**\r\n                             * See {@link MDCNotchedOutlineAdapter} for typing information on parameters and return types.\r\n                             */\r\n                            get: function get() {\r\n                                // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface.\r\n                                return {\r\n                                    addClass: function addClass() {\r\n                                        return undefined;\r\n                                    },\r\n                                    removeClass: function removeClass() {\r\n                                        return undefined;\r\n                                    },\r\n                                    setNotchWidthProperty: function setNotchWidthProperty() {\r\n                                        return undefined;\r\n                                    },\r\n                                    removeNotchWidthProperty: function removeNotchWidthProperty() {\r\n                                        return undefined;\r\n                                    }\r\n                                };\r\n                                // tslint:enable:object-literal-sort-keys\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        /**\r\n                         * Adds the outline notched selector and updates the notch width calculated based off of notchWidth.\r\n                         */\r\n                        MDCNotchedOutlineFoundation.prototype.notch = function(notchWidth) {\r\n                            var OUTLINE_NOTCHED = MDCNotchedOutlineFoundation.cssClasses.OUTLINE_NOTCHED;\r\n                            if (notchWidth > 0) {\r\n                                notchWidth += constants_1.numbers.NOTCH_ELEMENT_PADDING; // Add padding from left/right.\r\n                            }\r\n                            this.adapter.setNotchWidthProperty(notchWidth);\r\n                            this.adapter.addClass(OUTLINE_NOTCHED);\r\n                        };\r\n                        /**\r\n                         * Removes notched outline selector to close the notch in the outline.\r\n                         */\r\n                        MDCNotchedOutlineFoundation.prototype.closeNotch = function() {\r\n                            var OUTLINE_NOTCHED = MDCNotchedOutlineFoundation.cssClasses.OUTLINE_NOTCHED;\r\n                            this.adapter.removeClass(OUTLINE_NOTCHED);\r\n                            this.adapter.removeNotchWidthProperty();\r\n                        };\r\n                        return MDCNotchedOutlineFoundation;\r\n                    }(foundation_1.MDCFoundation);\r\n                    exports.MDCNotchedOutlineFoundation = MDCNotchedOutlineFoundation;\r\n// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier.\r\n                    exports.default = MDCNotchedOutlineFoundation;\r\n\r\n                    /***/\r\n                }),\r\n\r\n                          /***/ \"./packages/mdc-ripple/component.ts\":\r\n                /*!******************************************!*\\\r\n  !*** ./packages/mdc-ripple/component.ts ***!\r\n  \\******************************************/\r\n                /*! no static exports found */\r\n                /***/ (function(module, exports, __webpack_require__) {\r\n\r\n                    \"use strict\";\r\n\r\n                    /**\r\n                     * @license\r\n                     * Copyright 2016 Google Inc.\r\n                     *\r\n                     * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n                     * of this software and associated documentation files (the \"Software\"), to deal\r\n                     * in the Software without restriction, including without limitation the rights\r\n                     * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n                     * copies of the Software, and to permit persons to whom the Software is\r\n                     * furnished to do so, subject to the following conditions:\r\n                     *\r\n                     * The above copyright notice and this permission notice shall be included in\r\n                     * all copies or substantial portions of the Software.\r\n                     *\r\n                     * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n                     * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n                     * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n                     * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n                     * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n                     * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n                     * THE SOFTWARE.\r\n                     */\r\n\r\n                    var __extends = this && this.__extends || function() {\r\n                        var _extendStatics = function extendStatics(d, b) {\r\n                            _extendStatics = Object.setPrototypeOf || {__proto__: []} instanceof Array && function(d, b) {\r\n                                d.__proto__ = b;\r\n                            } || function(d, b) {\r\n                                for (var p in b) {\r\n                                    if (b.hasOwnProperty(p)) {\r\n                                        d[p] = b[p];\r\n                                    }\r\n                                }\r\n                            };\r\n                            return _extendStatics(d, b);\r\n                        };\r\n                        return function(d, b) {\r\n                            _extendStatics(d, b);\r\n\r\n                            function __() {\r\n                                this.constructor = d;\r\n                            }\r\n\r\n                            d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n                        };\r\n                    }();\r\n                    var __importStar = this && this.__importStar || function(mod) {\r\n                        if (mod && mod.__esModule) {\r\n                            return mod;\r\n                        }\r\n                        var result = {};\r\n                        if (mod != null) {\r\n                            for (var k in mod) {\r\n                                if (Object.hasOwnProperty.call(mod, k)) {\r\n                                    result[k] = mod[k];\r\n                                }\r\n                            }\r\n                        }\r\n                        result[\"default\"] = mod;\r\n                        return result;\r\n                    };\r\n                    Object.defineProperty(exports, \"__esModule\", {value: true});\r\n                    var component_1 = __webpack_require__(/*! @material/base/component */ \"./packages/mdc-base/component.ts\");\r\n                    var events_1 = __webpack_require__(/*! @material/dom/events */ \"./packages/mdc-dom/events.ts\");\r\n                    var ponyfill_1 = __webpack_require__(/*! @material/dom/ponyfill */ \"./packages/mdc-dom/ponyfill.ts\");\r\n                    var foundation_1 = __webpack_require__(/*! ./foundation */ \"./packages/mdc-ripple/foundation.ts\");\r\n                    var util = __importStar(__webpack_require__(/*! ./util */ \"./packages/mdc-ripple/util.ts\"));\r\n                    var MDCRipple = /** @class */function(_super) {\r\n                        __extends(MDCRipple, _super);\r\n\r\n                        function MDCRipple() {\r\n                            var _this = _super !== null && _super.apply(this, arguments) || this;\r\n                            _this.disabled = false;\r\n                            return _this;\r\n                        }\r\n\r\n                        MDCRipple.attachTo = function(root, opts) {\r\n                            if (opts === void 0) {\r\n                                opts = {isUnbounded: undefined};\r\n                            }\r\n                            var ripple = new MDCRipple(root);\r\n                            // Only override unbounded behavior if option is explicitly specified\r\n                            if (opts.isUnbounded !== undefined) {\r\n                                ripple.unbounded = opts.isUnbounded;\r\n                            }\r\n                            return ripple;\r\n                        };\r\n                        MDCRipple.createAdapter = function(instance) {\r\n                            return {\r\n                                addClass: function addClass(className) {\r\n                                    return instance.root.classList.add(className);\r\n                                },\r\n                                browserSupportsCssVars: function browserSupportsCssVars() {\r\n                                    return util.supportsCssVariables(window);\r\n                                },\r\n                                computeBoundingRect: function computeBoundingRect() {\r\n                                    return instance.root.getBoundingClientRect();\r\n                                },\r\n                                containsEventTarget: function containsEventTarget(target) {\r\n                                    return instance.root.contains(target);\r\n                                },\r\n                                deregisterDocumentInteractionHandler: function deregisterDocumentInteractionHandler(evtType, handler) {\r\n                                    return document.documentElement.removeEventListener(evtType, handler, events_1.applyPassive());\r\n                                },\r\n                                deregisterInteractionHandler: function deregisterInteractionHandler(evtType, handler) {\r\n                                    return instance.root.removeEventListener(evtType, handler, events_1.applyPassive());\r\n                                },\r\n                                deregisterResizeHandler: function deregisterResizeHandler(handler) {\r\n                                    return window.removeEventListener('resize', handler);\r\n                                },\r\n                                getWindowPageOffset: function getWindowPageOffset() {\r\n                                    return {x: window.pageXOffset, y: window.pageYOffset};\r\n                                },\r\n                                isSurfaceActive: function isSurfaceActive() {\r\n                                    return ponyfill_1.matches(instance.root, ':active');\r\n                                },\r\n                                isSurfaceDisabled: function isSurfaceDisabled() {\r\n                                    return Boolean(instance.disabled);\r\n                                },\r\n                                isUnbounded: function isUnbounded() {\r\n                                    return Boolean(instance.unbounded);\r\n                                },\r\n                                registerDocumentInteractionHandler: function registerDocumentInteractionHandler(evtType, handler) {\r\n                                    return document.documentElement.addEventListener(evtType, handler, events_1.applyPassive());\r\n                                },\r\n                                registerInteractionHandler: function registerInteractionHandler(evtType, handler) {\r\n                                    return instance.root.addEventListener(evtType, handler, events_1.applyPassive());\r\n                                },\r\n                                registerResizeHandler: function registerResizeHandler(handler) {\r\n                                    return window.addEventListener('resize', handler);\r\n                                },\r\n                                removeClass: function removeClass(className) {\r\n                                    return instance.root.classList.remove(className);\r\n                                },\r\n                                updateCssVariable: function updateCssVariable(varName, value) {\r\n                                    return instance.root.style.setProperty(varName, value);\r\n                                }\r\n                            };\r\n                        };\r\n                        Object.defineProperty(MDCRipple.prototype, \"unbounded\", {\r\n                            get: function get() {\r\n                                return Boolean(this.unbounded_);\r\n                            },\r\n                            set: function set(unbounded) {\r\n                                this.unbounded_ = Boolean(unbounded);\r\n                                this.setUnbounded_();\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        MDCRipple.prototype.activate = function() {\r\n                            this.foundation.activate();\r\n                        };\r\n                        MDCRipple.prototype.deactivate = function() {\r\n                            this.foundation.deactivate();\r\n                        };\r\n                        MDCRipple.prototype.layout = function() {\r\n                            this.foundation.layout();\r\n                        };\r\n                        MDCRipple.prototype.getDefaultFoundation = function() {\r\n                            return new foundation_1.MDCRippleFoundation(MDCRipple.createAdapter(this));\r\n                        };\r\n                        MDCRipple.prototype.initialSyncWithDOM = function() {\r\n                            var root = this.root;\r\n                            this.unbounded = 'mdcRippleIsUnbounded' in root.dataset;\r\n                        };\r\n                        /**\r\n                         * Closure Compiler throws an access control error when directly accessing a\r\n                         * protected or private property inside a getter/setter, like unbounded above.\r\n                         * By accessing the protected property inside a method, we solve that problem.\r\n                         * That's why this function exists.\r\n                         */\r\n                        MDCRipple.prototype.setUnbounded_ = function() {\r\n                            this.foundation.setUnbounded(Boolean(this.unbounded_));\r\n                        };\r\n                        return MDCRipple;\r\n                    }(component_1.MDCComponent);\r\n                    exports.MDCRipple = MDCRipple;\r\n\r\n                    /***/\r\n                }),\r\n\r\n                          /***/ \"./packages/mdc-ripple/constants.ts\":\r\n                /*!******************************************!*\\\r\n  !*** ./packages/mdc-ripple/constants.ts ***!\r\n  \\******************************************/\r\n                /*! no static exports found */\r\n                /***/ (function(module, exports, __webpack_require__) {\r\n\r\n                    \"use strict\";\r\n\r\n                    /**\r\n                     * @license\r\n                     * Copyright 2016 Google Inc.\r\n                     *\r\n                     * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n                     * of this software and associated documentation files (the \"Software\"), to deal\r\n                     * in the Software without restriction, including without limitation the rights\r\n                     * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n                     * copies of the Software, and to permit persons to whom the Software is\r\n                     * furnished to do so, subject to the following conditions:\r\n                     *\r\n                     * The above copyright notice and this permission notice shall be included in\r\n                     * all copies or substantial portions of the Software.\r\n                     *\r\n                     * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n                     * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n                     * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n                     * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n                     * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n                     * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n                     * THE SOFTWARE.\r\n                     */\r\n\r\n                    Object.defineProperty(exports, \"__esModule\", {value: true});\r\n                    exports.cssClasses = {\r\n                        // Ripple is a special case where the \"root\" component is really a \"mixin\" of sorts,\r\n                        // given that it's an 'upgrade' to an existing component. That being said it is the root\r\n                        // CSS class that all other CSS classes derive from.\r\n                        BG_FOCUSED: 'mdc-ripple-upgraded--background-focused',\r\n                        FG_ACTIVATION: 'mdc-ripple-upgraded--foreground-activation',\r\n                        FG_DEACTIVATION: 'mdc-ripple-upgraded--foreground-deactivation',\r\n                        ROOT: 'mdc-ripple-upgraded',\r\n                        UNBOUNDED: 'mdc-ripple-upgraded--unbounded'\r\n                    };\r\n                    exports.strings = {\r\n                        VAR_FG_SCALE: '--mdc-ripple-fg-scale',\r\n                        VAR_FG_SIZE: '--mdc-ripple-fg-size',\r\n                        VAR_FG_TRANSLATE_END: '--mdc-ripple-fg-translate-end',\r\n                        VAR_FG_TRANSLATE_START: '--mdc-ripple-fg-translate-start',\r\n                        VAR_LEFT: '--mdc-ripple-left',\r\n                        VAR_TOP: '--mdc-ripple-top'\r\n                    };\r\n                    exports.numbers = {\r\n                        DEACTIVATION_TIMEOUT_MS: 225,\r\n                        FG_DEACTIVATION_MS: 150,\r\n                        INITIAL_ORIGIN_SCALE: 0.6,\r\n                        PADDING: 10,\r\n                        TAP_DELAY_MS: 300\r\n                    };\r\n\r\n                    /***/\r\n                }),\r\n\r\n                          /***/ \"./packages/mdc-ripple/foundation.ts\":\r\n                /*!*******************************************!*\\\r\n  !*** ./packages/mdc-ripple/foundation.ts ***!\r\n  \\*******************************************/\r\n                /*! no static exports found */\r\n                /***/ (function(module, exports, __webpack_require__) {\r\n\r\n                    \"use strict\";\r\n\r\n                    /**\r\n                     * @license\r\n                     * Copyright 2016 Google Inc.\r\n                     *\r\n                     * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n                     * of this software and associated documentation files (the \"Software\"), to deal\r\n                     * in the Software without restriction, including without limitation the rights\r\n                     * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n                     * copies of the Software, and to permit persons to whom the Software is\r\n                     * furnished to do so, subject to the following conditions:\r\n                     *\r\n                     * The above copyright notice and this permission notice shall be included in\r\n                     * all copies or substantial portions of the Software.\r\n                     *\r\n                     * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n                     * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n                     * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n                     * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n                     * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n                     * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n                     * THE SOFTWARE.\r\n                     */\r\n\r\n                    var __extends = this && this.__extends || function() {\r\n                        var _extendStatics = function extendStatics(d, b) {\r\n                            _extendStatics = Object.setPrototypeOf || {__proto__: []} instanceof Array && function(d, b) {\r\n                                d.__proto__ = b;\r\n                            } || function(d, b) {\r\n                                for (var p in b) {\r\n                                    if (b.hasOwnProperty(p)) {\r\n                                        d[p] = b[p];\r\n                                    }\r\n                                }\r\n                            };\r\n                            return _extendStatics(d, b);\r\n                        };\r\n                        return function(d, b) {\r\n                            _extendStatics(d, b);\r\n\r\n                            function __() {\r\n                                this.constructor = d;\r\n                            }\r\n\r\n                            d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n                        };\r\n                    }();\r\n                    var __assign = this && this.__assign || function() {\r\n                        __assign = Object.assign || function(t) {\r\n                            for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n                                s = arguments[i];\r\n                                for (var p in s) {\r\n                                    if (Object.prototype.hasOwnProperty.call(s, p)) {\r\n                                        t[p] = s[p];\r\n                                    }\r\n                                }\r\n                            }\r\n                            return t;\r\n                        };\r\n                        return __assign.apply(this, arguments);\r\n                    };\r\n                    Object.defineProperty(exports, \"__esModule\", {value: true});\r\n                    var foundation_1 = __webpack_require__(/*! @material/base/foundation */ \"./packages/mdc-base/foundation.ts\");\r\n                    var constants_1 = __webpack_require__(/*! ./constants */ \"./packages/mdc-ripple/constants.ts\");\r\n                    var util_1 = __webpack_require__(/*! ./util */ \"./packages/mdc-ripple/util.ts\");\r\n// Activation events registered on the root element of each instance for activation\r\n                    var ACTIVATION_EVENT_TYPES = ['touchstart', 'pointerdown', 'mousedown', 'keydown'];\r\n// Deactivation events registered on documentElement when a pointer-related down event occurs\r\n                    var POINTER_DEACTIVATION_EVENT_TYPES = ['touchend', 'pointerup', 'mouseup', 'contextmenu'];\r\n// simultaneous nested activations\r\n                    var activatedTargets = [];\r\n                    var MDCRippleFoundation = /** @class */function(_super) {\r\n                        __extends(MDCRippleFoundation, _super);\r\n\r\n                        function MDCRippleFoundation(adapter) {\r\n                            var _this = _super.call(this, __assign(__assign({}, MDCRippleFoundation.defaultAdapter), adapter)) || this;\r\n                            _this.activationAnimationHasEnded_ = false;\r\n                            _this.activationTimer_ = 0;\r\n                            _this.fgDeactivationRemovalTimer_ = 0;\r\n                            _this.fgScale_ = '0';\r\n                            _this.frame_ = {width: 0, height: 0};\r\n                            _this.initialSize_ = 0;\r\n                            _this.layoutFrame_ = 0;\r\n                            _this.maxRadius_ = 0;\r\n                            _this.unboundedCoords_ = {left: 0, top: 0};\r\n                            _this.activationState_ = _this.defaultActivationState_();\r\n                            _this.activationTimerCallback_ = function() {\r\n                                _this.activationAnimationHasEnded_ = true;\r\n                                _this.runDeactivationUXLogicIfReady_();\r\n                            };\r\n                            _this.activateHandler_ = function(e) {\r\n                                return _this.activate_(e);\r\n                            };\r\n                            _this.deactivateHandler_ = function() {\r\n                                return _this.deactivate_();\r\n                            };\r\n                            _this.focusHandler_ = function() {\r\n                                return _this.handleFocus();\r\n                            };\r\n                            _this.blurHandler_ = function() {\r\n                                return _this.handleBlur();\r\n                            };\r\n                            _this.resizeHandler_ = function() {\r\n                                return _this.layout();\r\n                            };\r\n                            return _this;\r\n                        }\r\n\r\n                        Object.defineProperty(MDCRippleFoundation, \"cssClasses\", {\r\n                            get: function get() {\r\n                                return constants_1.cssClasses;\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCRippleFoundation, \"strings\", {\r\n                            get: function get() {\r\n                                return constants_1.strings;\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCRippleFoundation, \"numbers\", {\r\n                            get: function get() {\r\n                                return constants_1.numbers;\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCRippleFoundation, \"defaultAdapter\", {\r\n                            get: function get() {\r\n                                return {\r\n                                    addClass: function addClass() {\r\n                                        return undefined;\r\n                                    },\r\n                                    browserSupportsCssVars: function browserSupportsCssVars() {\r\n                                        return true;\r\n                                    },\r\n                                    computeBoundingRect: function computeBoundingRect() {\r\n                                        return {top: 0, right: 0, bottom: 0, left: 0, width: 0, height: 0};\r\n                                    },\r\n                                    containsEventTarget: function containsEventTarget() {\r\n                                        return true;\r\n                                    },\r\n                                    deregisterDocumentInteractionHandler: function deregisterDocumentInteractionHandler() {\r\n                                        return undefined;\r\n                                    },\r\n                                    deregisterInteractionHandler: function deregisterInteractionHandler() {\r\n                                        return undefined;\r\n                                    },\r\n                                    deregisterResizeHandler: function deregisterResizeHandler() {\r\n                                        return undefined;\r\n                                    },\r\n                                    getWindowPageOffset: function getWindowPageOffset() {\r\n                                        return {x: 0, y: 0};\r\n                                    },\r\n                                    isSurfaceActive: function isSurfaceActive() {\r\n                                        return true;\r\n                                    },\r\n                                    isSurfaceDisabled: function isSurfaceDisabled() {\r\n                                        return true;\r\n                                    },\r\n                                    isUnbounded: function isUnbounded() {\r\n                                        return true;\r\n                                    },\r\n                                    registerDocumentInteractionHandler: function registerDocumentInteractionHandler() {\r\n                                        return undefined;\r\n                                    },\r\n                                    registerInteractionHandler: function registerInteractionHandler() {\r\n                                        return undefined;\r\n                                    },\r\n                                    registerResizeHandler: function registerResizeHandler() {\r\n                                        return undefined;\r\n                                    },\r\n                                    removeClass: function removeClass() {\r\n                                        return undefined;\r\n                                    },\r\n                                    updateCssVariable: function updateCssVariable() {\r\n                                        return undefined;\r\n                                    }\r\n                                };\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        MDCRippleFoundation.prototype.init = function() {\r\n                            var _this = this;\r\n                            var supportsPressRipple = this.supportsPressRipple_();\r\n                            this.registerRootHandlers_(supportsPressRipple);\r\n                            if (supportsPressRipple) {\r\n                                var _a = MDCRippleFoundation.cssClasses,\r\n                                        ROOT_1 = _a.ROOT,\r\n                                        UNBOUNDED_1 = _a.UNBOUNDED;\r\n                                requestAnimationFrame(function() {\r\n                                    _this.adapter.addClass(ROOT_1);\r\n                                    if (_this.adapter.isUnbounded()) {\r\n                                        _this.adapter.addClass(UNBOUNDED_1);\r\n                                        // Unbounded ripples need layout logic applied immediately to set coordinates for both shade and ripple\r\n                                        _this.layoutInternal_();\r\n                                    }\r\n                                });\r\n                            }\r\n                        };\r\n                        MDCRippleFoundation.prototype.destroy = function() {\r\n                            var _this = this;\r\n                            if (this.supportsPressRipple_()) {\r\n                                if (this.activationTimer_) {\r\n                                    clearTimeout(this.activationTimer_);\r\n                                    this.activationTimer_ = 0;\r\n                                    this.adapter.removeClass(MDCRippleFoundation.cssClasses.FG_ACTIVATION);\r\n                                }\r\n                                if (this.fgDeactivationRemovalTimer_) {\r\n                                    clearTimeout(this.fgDeactivationRemovalTimer_);\r\n                                    this.fgDeactivationRemovalTimer_ = 0;\r\n                                    this.adapter.removeClass(MDCRippleFoundation.cssClasses.FG_DEACTIVATION);\r\n                                }\r\n                                var _a = MDCRippleFoundation.cssClasses,\r\n                                        ROOT_2 = _a.ROOT,\r\n                                        UNBOUNDED_2 = _a.UNBOUNDED;\r\n                                requestAnimationFrame(function() {\r\n                                    _this.adapter.removeClass(ROOT_2);\r\n                                    _this.adapter.removeClass(UNBOUNDED_2);\r\n                                    _this.removeCssVars_();\r\n                                });\r\n                            }\r\n                            this.deregisterRootHandlers_();\r\n                            this.deregisterDeactivationHandlers_();\r\n                        };\r\n                        /**\r\n                         * @param evt Optional event containing position information.\r\n                         */\r\n                        MDCRippleFoundation.prototype.activate = function(evt) {\r\n                            this.activate_(evt);\r\n                        };\r\n                        MDCRippleFoundation.prototype.deactivate = function() {\r\n                            this.deactivate_();\r\n                        };\r\n                        MDCRippleFoundation.prototype.layout = function() {\r\n                            var _this = this;\r\n                            if (this.layoutFrame_) {\r\n                                cancelAnimationFrame(this.layoutFrame_);\r\n                            }\r\n                            this.layoutFrame_ = requestAnimationFrame(function() {\r\n                                _this.layoutInternal_();\r\n                                _this.layoutFrame_ = 0;\r\n                            });\r\n                        };\r\n                        MDCRippleFoundation.prototype.setUnbounded = function(unbounded) {\r\n                            var UNBOUNDED = MDCRippleFoundation.cssClasses.UNBOUNDED;\r\n                            if (unbounded) {\r\n                                this.adapter.addClass(UNBOUNDED);\r\n                            } else {\r\n                                this.adapter.removeClass(UNBOUNDED);\r\n                            }\r\n                        };\r\n                        MDCRippleFoundation.prototype.handleFocus = function() {\r\n                            var _this = this;\r\n                            requestAnimationFrame(function() {\r\n                                return _this.adapter.addClass(MDCRippleFoundation.cssClasses.BG_FOCUSED);\r\n                            });\r\n                        };\r\n                        MDCRippleFoundation.prototype.handleBlur = function() {\r\n                            var _this = this;\r\n                            requestAnimationFrame(function() {\r\n                                return _this.adapter.removeClass(MDCRippleFoundation.cssClasses.BG_FOCUSED);\r\n                            });\r\n                        };\r\n                        /**\r\n                         * We compute this property so that we are not querying information about the client\r\n                         * until the point in time where the foundation requests it. This prevents scenarios where\r\n                         * client-side feature-detection may happen too early, such as when components are rendered on the server\r\n                         * and then initialized at mount time on the client.\r\n                         */\r\n                        MDCRippleFoundation.prototype.supportsPressRipple_ = function() {\r\n                            return this.adapter.browserSupportsCssVars();\r\n                        };\r\n                        MDCRippleFoundation.prototype.defaultActivationState_ = function() {\r\n                            return {\r\n                                activationEvent: undefined,\r\n                                hasDeactivationUXRun: false,\r\n                                isActivated: false,\r\n                                isProgrammatic: false,\r\n                                wasActivatedByPointer: false,\r\n                                wasElementMadeActive: false\r\n                            };\r\n                        };\r\n                        /**\r\n                         * supportsPressRipple Passed from init to save a redundant function call\r\n                         */\r\n                        MDCRippleFoundation.prototype.registerRootHandlers_ = function(supportsPressRipple) {\r\n                            var _this = this;\r\n                            if (supportsPressRipple) {\r\n                                ACTIVATION_EVENT_TYPES.forEach(function(evtType) {\r\n                                    _this.adapter.registerInteractionHandler(evtType, _this.activateHandler_);\r\n                                });\r\n                                if (this.adapter.isUnbounded()) {\r\n                                    this.adapter.registerResizeHandler(this.resizeHandler_);\r\n                                }\r\n                            }\r\n                            this.adapter.registerInteractionHandler('focus', this.focusHandler_);\r\n                            this.adapter.registerInteractionHandler('blur', this.blurHandler_);\r\n                        };\r\n                        MDCRippleFoundation.prototype.registerDeactivationHandlers_ = function(evt) {\r\n                            var _this = this;\r\n                            if (evt.type === 'keydown') {\r\n                                this.adapter.registerInteractionHandler('keyup', this.deactivateHandler_);\r\n                            } else {\r\n                                POINTER_DEACTIVATION_EVENT_TYPES.forEach(function(evtType) {\r\n                                    _this.adapter.registerDocumentInteractionHandler(evtType, _this.deactivateHandler_);\r\n                                });\r\n                            }\r\n                        };\r\n                        MDCRippleFoundation.prototype.deregisterRootHandlers_ = function() {\r\n                            var _this = this;\r\n                            ACTIVATION_EVENT_TYPES.forEach(function(evtType) {\r\n                                _this.adapter.deregisterInteractionHandler(evtType, _this.activateHandler_);\r\n                            });\r\n                            this.adapter.deregisterInteractionHandler('focus', this.focusHandler_);\r\n                            this.adapter.deregisterInteractionHandler('blur', this.blurHandler_);\r\n                            if (this.adapter.isUnbounded()) {\r\n                                this.adapter.deregisterResizeHandler(this.resizeHandler_);\r\n                            }\r\n                        };\r\n                        MDCRippleFoundation.prototype.deregisterDeactivationHandlers_ = function() {\r\n                            var _this = this;\r\n                            this.adapter.deregisterInteractionHandler('keyup', this.deactivateHandler_);\r\n                            POINTER_DEACTIVATION_EVENT_TYPES.forEach(function(evtType) {\r\n                                _this.adapter.deregisterDocumentInteractionHandler(evtType, _this.deactivateHandler_);\r\n                            });\r\n                        };\r\n                        MDCRippleFoundation.prototype.removeCssVars_ = function() {\r\n                            var _this = this;\r\n                            var rippleStrings = MDCRippleFoundation.strings;\r\n                            var keys = Object.keys(rippleStrings);\r\n                            keys.forEach(function(key) {\r\n                                if (key.indexOf('VAR_') === 0) {\r\n                                    _this.adapter.updateCssVariable(rippleStrings[key], null);\r\n                                }\r\n                            });\r\n                        };\r\n                        MDCRippleFoundation.prototype.activate_ = function(evt) {\r\n                            var _this = this;\r\n                            if (this.adapter.isSurfaceDisabled()) {\r\n                                return;\r\n                            }\r\n                            var activationState = this.activationState_;\r\n                            if (activationState.isActivated) {\r\n                                return;\r\n                            }\r\n                            // Avoid reacting to follow-on events fired by touch device after an already-processed user interaction\r\n                            var previousActivationEvent = this.previousActivationEvent_;\r\n                            var isSameInteraction = previousActivationEvent && evt !== undefined && previousActivationEvent.type !== evt.type;\r\n                            if (isSameInteraction) {\r\n                                return;\r\n                            }\r\n                            activationState.isActivated = true;\r\n                            activationState.isProgrammatic = evt === undefined;\r\n                            activationState.activationEvent = evt;\r\n                            activationState.wasActivatedByPointer = activationState.isProgrammatic ? false : evt !== undefined && (evt.type === 'mousedown' || evt.type === 'touchstart' || evt.type === 'pointerdown');\r\n                            var hasActivatedChild = evt !== undefined && activatedTargets.length > 0 && activatedTargets.some(function(target) {\r\n                                return _this.adapter.containsEventTarget(target);\r\n                            });\r\n                            if (hasActivatedChild) {\r\n                                // Immediately reset activation state, while preserving logic that prevents touch follow-on events\r\n                                this.resetActivationState_();\r\n                                return;\r\n                            }\r\n                            if (evt !== undefined) {\r\n                                activatedTargets.push(evt.target);\r\n                                this.registerDeactivationHandlers_(evt);\r\n                            }\r\n                            activationState.wasElementMadeActive = this.checkElementMadeActive_(evt);\r\n                            if (activationState.wasElementMadeActive) {\r\n                                this.animateActivation_();\r\n                            }\r\n                            requestAnimationFrame(function() {\r\n                                // Reset array on next frame after the current event has had a chance to bubble to prevent ancestor ripples\r\n                                activatedTargets = [];\r\n                                if (!activationState.wasElementMadeActive && evt !== undefined && (evt.key === ' ' || evt.keyCode === 32)) {\r\n                                    // If space was pressed, try again within an rAF call to detect :active, because different UAs report\r\n                                    // active states inconsistently when they're called within event handling code:\r\n                                    // - https://bugs.chromium.org/p/chromium/issues/detail?id=635971\r\n                                    // - https://bugzilla.mozilla.org/show_bug.cgi?id=1293741\r\n                                    // We try first outside rAF to support Edge, which does not exhibit this problem, but will crash if a CSS\r\n                                    // variable is set within a rAF callback for a submit button interaction (#2241).\r\n                                    activationState.wasElementMadeActive = _this.checkElementMadeActive_(evt);\r\n                                    if (activationState.wasElementMadeActive) {\r\n                                        _this.animateActivation_();\r\n                                    }\r\n                                }\r\n                                if (!activationState.wasElementMadeActive) {\r\n                                    // Reset activation state immediately if element was not made active.\r\n                                    _this.activationState_ = _this.defaultActivationState_();\r\n                                }\r\n                            });\r\n                        };\r\n                        MDCRippleFoundation.prototype.checkElementMadeActive_ = function(evt) {\r\n                            return evt !== undefined && evt.type === 'keydown' ? this.adapter.isSurfaceActive() : true;\r\n                        };\r\n                        MDCRippleFoundation.prototype.animateActivation_ = function() {\r\n                            var _this = this;\r\n                            var _a = MDCRippleFoundation.strings,\r\n                                    VAR_FG_TRANSLATE_START = _a.VAR_FG_TRANSLATE_START,\r\n                                    VAR_FG_TRANSLATE_END = _a.VAR_FG_TRANSLATE_END;\r\n                            var _b = MDCRippleFoundation.cssClasses,\r\n                                    FG_DEACTIVATION = _b.FG_DEACTIVATION,\r\n                                    FG_ACTIVATION = _b.FG_ACTIVATION;\r\n                            var DEACTIVATION_TIMEOUT_MS = MDCRippleFoundation.numbers.DEACTIVATION_TIMEOUT_MS;\r\n                            this.layoutInternal_();\r\n                            var translateStart = '';\r\n                            var translateEnd = '';\r\n                            if (!this.adapter.isUnbounded()) {\r\n                                var _c = this.getFgTranslationCoordinates_(),\r\n                                        startPoint = _c.startPoint,\r\n                                        endPoint = _c.endPoint;\r\n                                translateStart = startPoint.x + \"px, \" + startPoint.y + \"px\";\r\n                                translateEnd = endPoint.x + \"px, \" + endPoint.y + \"px\";\r\n                            }\r\n                            this.adapter.updateCssVariable(VAR_FG_TRANSLATE_START, translateStart);\r\n                            this.adapter.updateCssVariable(VAR_FG_TRANSLATE_END, translateEnd);\r\n                            // Cancel any ongoing activation/deactivation animations\r\n                            clearTimeout(this.activationTimer_);\r\n                            clearTimeout(this.fgDeactivationRemovalTimer_);\r\n                            this.rmBoundedActivationClasses_();\r\n                            this.adapter.removeClass(FG_DEACTIVATION);\r\n                            // Force layout in order to re-trigger the animation.\r\n                            this.adapter.computeBoundingRect();\r\n                            this.adapter.addClass(FG_ACTIVATION);\r\n                            this.activationTimer_ = setTimeout(function() {\r\n                                return _this.activationTimerCallback_();\r\n                            }, DEACTIVATION_TIMEOUT_MS);\r\n                        };\r\n                        MDCRippleFoundation.prototype.getFgTranslationCoordinates_ = function() {\r\n                            var _a = this.activationState_,\r\n                                    activationEvent = _a.activationEvent,\r\n                                    wasActivatedByPointer = _a.wasActivatedByPointer;\r\n                            var startPoint;\r\n                            if (wasActivatedByPointer) {\r\n                                startPoint = util_1.getNormalizedEventCoords(activationEvent, this.adapter.getWindowPageOffset(), this.adapter.computeBoundingRect());\r\n                            } else {\r\n                                startPoint = {\r\n                                    x: this.frame_.width / 2,\r\n                                    y: this.frame_.height / 2\r\n                                };\r\n                            }\r\n                            // Center the element around the start point.\r\n                            startPoint = {\r\n                                x: startPoint.x - this.initialSize_ / 2,\r\n                                y: startPoint.y - this.initialSize_ / 2\r\n                            };\r\n                            var endPoint = {\r\n                                x: this.frame_.width / 2 - this.initialSize_ / 2,\r\n                                y: this.frame_.height / 2 - this.initialSize_ / 2\r\n                            };\r\n                            return {startPoint: startPoint, endPoint: endPoint};\r\n                        };\r\n                        MDCRippleFoundation.prototype.runDeactivationUXLogicIfReady_ = function() {\r\n                            var _this = this;\r\n                            // This method is called both when a pointing device is released, and when the activation animation ends.\r\n                            // The deactivation animation should only run after both of those occur.\r\n                            var FG_DEACTIVATION = MDCRippleFoundation.cssClasses.FG_DEACTIVATION;\r\n                            var _a = this.activationState_,\r\n                                    hasDeactivationUXRun = _a.hasDeactivationUXRun,\r\n                                    isActivated = _a.isActivated;\r\n                            var activationHasEnded = hasDeactivationUXRun || !isActivated;\r\n                            if (activationHasEnded && this.activationAnimationHasEnded_) {\r\n                                this.rmBoundedActivationClasses_();\r\n                                this.adapter.addClass(FG_DEACTIVATION);\r\n                                this.fgDeactivationRemovalTimer_ = setTimeout(function() {\r\n                                    _this.adapter.removeClass(FG_DEACTIVATION);\r\n                                }, constants_1.numbers.FG_DEACTIVATION_MS);\r\n                            }\r\n                        };\r\n                        MDCRippleFoundation.prototype.rmBoundedActivationClasses_ = function() {\r\n                            var FG_ACTIVATION = MDCRippleFoundation.cssClasses.FG_ACTIVATION;\r\n                            this.adapter.removeClass(FG_ACTIVATION);\r\n                            this.activationAnimationHasEnded_ = false;\r\n                            this.adapter.computeBoundingRect();\r\n                        };\r\n                        MDCRippleFoundation.prototype.resetActivationState_ = function() {\r\n                            var _this = this;\r\n                            this.previousActivationEvent_ = this.activationState_.activationEvent;\r\n                            this.activationState_ = this.defaultActivationState_();\r\n                            // Touch devices may fire additional events for the same interaction within a short time.\r\n                            // Store the previous event until it's safe to assume that subsequent events are for new interactions.\r\n                            setTimeout(function() {\r\n                                return _this.previousActivationEvent_ = undefined;\r\n                            }, MDCRippleFoundation.numbers.TAP_DELAY_MS);\r\n                        };\r\n                        MDCRippleFoundation.prototype.deactivate_ = function() {\r\n                            var _this = this;\r\n                            var activationState = this.activationState_;\r\n                            // This can happen in scenarios such as when you have a keyup event that blurs the element.\r\n                            if (!activationState.isActivated) {\r\n                                return;\r\n                            }\r\n                            var state = __assign({}, activationState);\r\n                            if (activationState.isProgrammatic) {\r\n                                requestAnimationFrame(function() {\r\n                                    return _this.animateDeactivation_(state);\r\n                                });\r\n                                this.resetActivationState_();\r\n                            } else {\r\n                                this.deregisterDeactivationHandlers_();\r\n                                requestAnimationFrame(function() {\r\n                                    _this.activationState_.hasDeactivationUXRun = true;\r\n                                    _this.animateDeactivation_(state);\r\n                                    _this.resetActivationState_();\r\n                                });\r\n                            }\r\n                        };\r\n                        MDCRippleFoundation.prototype.animateDeactivation_ = function(_a) {\r\n                            var wasActivatedByPointer = _a.wasActivatedByPointer,\r\n                                    wasElementMadeActive = _a.wasElementMadeActive;\r\n                            if (wasActivatedByPointer || wasElementMadeActive) {\r\n                                this.runDeactivationUXLogicIfReady_();\r\n                            }\r\n                        };\r\n                        MDCRippleFoundation.prototype.layoutInternal_ = function() {\r\n                            var _this = this;\r\n                            this.frame_ = this.adapter.computeBoundingRect();\r\n                            var maxDim = Math.max(this.frame_.height, this.frame_.width);\r\n                            // Surface diameter is treated differently for unbounded vs. bounded ripples.\r\n                            // Unbounded ripple diameter is calculated smaller since the surface is expected to already be padded appropriately\r\n                            // to extend the hitbox, and the ripple is expected to meet the edges of the padded hitbox (which is typically\r\n                            // square). Bounded ripples, on the other hand, are fully expected to expand beyond the surface's longest diameter\r\n                            // (calculated based on the diagonal plus a constant padding), and are clipped at the surface's border via\r\n                            // `overflow: hidden`.\r\n                            var getBoundedRadius = function getBoundedRadius() {\r\n                                var hypotenuse = Math.sqrt(Math.pow(_this.frame_.width, 2) + Math.pow(_this.frame_.height, 2));\r\n                                return hypotenuse + MDCRippleFoundation.numbers.PADDING;\r\n                            };\r\n                            this.maxRadius_ = this.adapter.isUnbounded() ? maxDim : getBoundedRadius();\r\n                            // Ripple is sized as a fraction of the largest dimension of the surface, then scales up using a CSS scale transform\r\n                            var initialSize = Math.floor(maxDim * MDCRippleFoundation.numbers.INITIAL_ORIGIN_SCALE);\r\n                            // Unbounded ripple size should always be even number to equally center align.\r\n                            if (this.adapter.isUnbounded() && initialSize % 2 !== 0) {\r\n                                this.initialSize_ = initialSize - 1;\r\n                            } else {\r\n                                this.initialSize_ = initialSize;\r\n                            }\r\n                            this.fgScale_ = \"\" + this.maxRadius_ / this.initialSize_;\r\n                            this.updateLayoutCssVars_();\r\n                        };\r\n                        MDCRippleFoundation.prototype.updateLayoutCssVars_ = function() {\r\n                            var _a = MDCRippleFoundation.strings,\r\n                                    VAR_FG_SIZE = _a.VAR_FG_SIZE,\r\n                                    VAR_LEFT = _a.VAR_LEFT,\r\n                                    VAR_TOP = _a.VAR_TOP,\r\n                                    VAR_FG_SCALE = _a.VAR_FG_SCALE;\r\n                            this.adapter.updateCssVariable(VAR_FG_SIZE, this.initialSize_ + \"px\");\r\n                            this.adapter.updateCssVariable(VAR_FG_SCALE, this.fgScale_);\r\n                            if (this.adapter.isUnbounded()) {\r\n                                this.unboundedCoords_ = {\r\n                                    left: Math.round(this.frame_.width / 2 - this.initialSize_ / 2),\r\n                                    top: Math.round(this.frame_.height / 2 - this.initialSize_ / 2)\r\n                                };\r\n                                this.adapter.updateCssVariable(VAR_LEFT, this.unboundedCoords_.left + \"px\");\r\n                                this.adapter.updateCssVariable(VAR_TOP, this.unboundedCoords_.top + \"px\");\r\n                            }\r\n                        };\r\n                        return MDCRippleFoundation;\r\n                    }(foundation_1.MDCFoundation);\r\n                    exports.MDCRippleFoundation = MDCRippleFoundation;\r\n// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier.\r\n                    exports.default = MDCRippleFoundation;\r\n\r\n                    /***/\r\n                }),\r\n\r\n                          /***/ \"./packages/mdc-ripple/util.ts\":\r\n                /*!*************************************!*\\\r\n  !*** ./packages/mdc-ripple/util.ts ***!\r\n  \\*************************************/\r\n                /*! no static exports found */\r\n                /***/ (function(module, exports, __webpack_require__) {\r\n\r\n                    \"use strict\";\r\n\r\n\r\n                    Object.defineProperty(exports, \"__esModule\", {value: true});\r\n                    /**\r\n                     * Stores result from supportsCssVariables to avoid redundant processing to\r\n                     * detect CSS custom variable support.\r\n                     */\r\n                    var supportsCssVariables_;\r\n\r\n                    function supportsCssVariables(windowObj, forceRefresh) {\r\n                        if (forceRefresh === void 0) {\r\n                            forceRefresh = false;\r\n                        }\r\n                        var CSS = windowObj.CSS;\r\n                        var supportsCssVars = supportsCssVariables_;\r\n                        if (typeof supportsCssVariables_ === 'boolean' && !forceRefresh) {\r\n                            return supportsCssVariables_;\r\n                        }\r\n                        var supportsFunctionPresent = CSS && typeof CSS.supports === 'function';\r\n                        if (!supportsFunctionPresent) {\r\n                            return false;\r\n                        }\r\n                        var explicitlySupportsCssVars = CSS.supports('--css-vars', 'yes');\r\n                        // See: https://bugs.webkit.org/show_bug.cgi?id=154669\r\n                        // See: README section on Safari\r\n                        var weAreFeatureDetectingSafari10plus = CSS.supports('(--css-vars: yes)') && CSS.supports('color', '#00000000');\r\n                        supportsCssVars = explicitlySupportsCssVars || weAreFeatureDetectingSafari10plus;\r\n                        if (!forceRefresh) {\r\n                            supportsCssVariables_ = supportsCssVars;\r\n                        }\r\n                        return supportsCssVars;\r\n                    }\r\n\r\n                    exports.supportsCssVariables = supportsCssVariables;\r\n\r\n                    function getNormalizedEventCoords(evt, pageOffset, clientRect) {\r\n                        if (!evt) {\r\n                            return {x: 0, y: 0};\r\n                        }\r\n                        var x = pageOffset.x,\r\n                                y = pageOffset.y;\r\n                        var documentX = x + clientRect.left;\r\n                        var documentY = y + clientRect.top;\r\n                        var normalizedX;\r\n                        var normalizedY;\r\n                        // Determine touch point relative to the ripple container.\r\n                        if (evt.type === 'touchstart') {\r\n                            var touchEvent = evt;\r\n                            normalizedX = touchEvent.changedTouches[0].pageX - documentX;\r\n                            normalizedY = touchEvent.changedTouches[0].pageY - documentY;\r\n                        } else {\r\n                            var mouseEvent = evt;\r\n                            normalizedX = mouseEvent.pageX - documentX;\r\n                            normalizedY = mouseEvent.pageY - documentY;\r\n                        }\r\n                        return {x: normalizedX, y: normalizedY};\r\n                    }\r\n\r\n                    exports.getNormalizedEventCoords = getNormalizedEventCoords;\r\n\r\n                    /***/\r\n                }),\r\n\r\n                          /***/ \"./packages/mdc-textfield/character-counter/component.ts\":\r\n                /*!***************************************************************!*\\\r\n  !*** ./packages/mdc-textfield/character-counter/component.ts ***!\r\n  \\***************************************************************/\r\n                /*! no static exports found */\r\n                /***/ (function(module, exports, __webpack_require__) {\r\n\r\n                    \"use strict\";\r\n\r\n                    /**\r\n                     * @license\r\n                     * Copyright 2019 Google Inc.\r\n                     *\r\n                     * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n                     * of this software and associated documentation files (the \"Software\"), to deal\r\n                     * in the Software without restriction, including without limitation the rights\r\n                     * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n                     * copies of the Software, and to permit persons to whom the Software is\r\n                     * furnished to do so, subject to the following conditions:\r\n                     *\r\n                     * The above copyright notice and this permission notice shall be included in\r\n                     * all copies or substantial portions of the Software.\r\n                     *\r\n                     * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n                     * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n                     * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n                     * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n                     * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n                     * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n                     * THE SOFTWARE.\r\n                     */\r\n\r\n                    var __extends = this && this.__extends || function() {\r\n                        var _extendStatics = function extendStatics(d, b) {\r\n                            _extendStatics = Object.setPrototypeOf || {__proto__: []} instanceof Array && function(d, b) {\r\n                                d.__proto__ = b;\r\n                            } || function(d, b) {\r\n                                for (var p in b) {\r\n                                    if (b.hasOwnProperty(p)) {\r\n                                        d[p] = b[p];\r\n                                    }\r\n                                }\r\n                            };\r\n                            return _extendStatics(d, b);\r\n                        };\r\n                        return function(d, b) {\r\n                            _extendStatics(d, b);\r\n\r\n                            function __() {\r\n                                this.constructor = d;\r\n                            }\r\n\r\n                            d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n                        };\r\n                    }();\r\n                    Object.defineProperty(exports, \"__esModule\", {value: true});\r\n                    var component_1 = __webpack_require__(/*! @material/base/component */ \"./packages/mdc-base/component.ts\");\r\n                    var foundation_1 = __webpack_require__(/*! ./foundation */ \"./packages/mdc-textfield/character-counter/foundation.ts\");\r\n                    var MDCTextFieldCharacterCounter = /** @class */function(_super) {\r\n                        __extends(MDCTextFieldCharacterCounter, _super);\r\n\r\n                        function MDCTextFieldCharacterCounter() {\r\n                            return _super !== null && _super.apply(this, arguments) || this;\r\n                        }\r\n\r\n                        MDCTextFieldCharacterCounter.attachTo = function(root) {\r\n                            return new MDCTextFieldCharacterCounter(root);\r\n                        };\r\n                        Object.defineProperty(MDCTextFieldCharacterCounter.prototype, \"foundationForTextField\", {\r\n                            // Provided for access by MDCTextField component\r\n                            get: function get() {\r\n                                return this.foundation;\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        MDCTextFieldCharacterCounter.prototype.getDefaultFoundation = function() {\r\n                            var _this = this;\r\n                            // DO NOT INLINE this variable. For backward compatibility, foundations take a Partial<MDCFooAdapter>.\r\n                            // To ensure we don't accidentally omit any methods, we need a separate, strongly typed adapter variable.\r\n                            var adapter = {\r\n                                setContent: function setContent(content) {\r\n                                    _this.root.textContent = content;\r\n                                }\r\n                            };\r\n                            return new foundation_1.MDCTextFieldCharacterCounterFoundation(adapter);\r\n                        };\r\n                        return MDCTextFieldCharacterCounter;\r\n                    }(component_1.MDCComponent);\r\n                    exports.MDCTextFieldCharacterCounter = MDCTextFieldCharacterCounter;\r\n\r\n                    /***/\r\n                }),\r\n\r\n                          /***/ \"./packages/mdc-textfield/character-counter/constants.ts\":\r\n                /*!***************************************************************!*\\\r\n  !*** ./packages/mdc-textfield/character-counter/constants.ts ***!\r\n  \\***************************************************************/\r\n                /*! no static exports found */\r\n                /***/ (function(module, exports, __webpack_require__) {\r\n\r\n                    \"use strict\";\r\n\r\n                    /**\r\n                     * @license\r\n                     * Copyright 2019 Google Inc.\r\n                     *\r\n                     * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n                     * of this software and associated documentation files (the \"Software\"), to deal\r\n                     * in the Software without restriction, including without limitation the rights\r\n                     * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n                     * copies of the Software, and to permit persons to whom the Software is\r\n                     * furnished to do so, subject to the following conditions:\r\n                     *\r\n                     * The above copyright notice and this permission notice shall be included in\r\n                     * all copies or substantial portions of the Software.\r\n                     *\r\n                     * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n                     * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n                     * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n                     * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n                     * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n                     * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n                     * THE SOFTWARE.\r\n                     */\r\n\r\n                    Object.defineProperty(exports, \"__esModule\", {value: true});\r\n                    var cssClasses = {\r\n                        ROOT: 'mdc-text-field-character-counter'\r\n                    };\r\n                    exports.cssClasses = cssClasses;\r\n                    var strings = {\r\n                        ROOT_SELECTOR: \".\" + cssClasses.ROOT\r\n                    };\r\n                    exports.strings = strings;\r\n\r\n                    /***/\r\n                }),\r\n\r\n                          /***/ \"./packages/mdc-textfield/character-counter/foundation.ts\":\r\n                /*!****************************************************************!*\\\r\n  !*** ./packages/mdc-textfield/character-counter/foundation.ts ***!\r\n  \\****************************************************************/\r\n                /*! no static exports found */\r\n                /***/ (function(module, exports, __webpack_require__) {\r\n\r\n                    \"use strict\";\r\n\r\n                    /**\r\n                     * @license\r\n                     * Copyright 2019 Google Inc.\r\n                     *\r\n                     * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n                     * of this software and associated documentation files (the \"Software\"), to deal\r\n                     * in the Software without restriction, including without limitation the rights\r\n                     * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n                     * copies of the Software, and to permit persons to whom the Software is\r\n                     * furnished to do so, subject to the following conditions:\r\n                     *\r\n                     * The above copyright notice and this permission notice shall be included in\r\n                     * all copies or substantial portions of the Software.\r\n                     *\r\n                     * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n                     * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n                     * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n                     * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n                     * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n                     * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n                     * THE SOFTWARE.\r\n                     */\r\n\r\n                    var __extends = this && this.__extends || function() {\r\n                        var _extendStatics = function extendStatics(d, b) {\r\n                            _extendStatics = Object.setPrototypeOf || {__proto__: []} instanceof Array && function(d, b) {\r\n                                d.__proto__ = b;\r\n                            } || function(d, b) {\r\n                                for (var p in b) {\r\n                                    if (b.hasOwnProperty(p)) {\r\n                                        d[p] = b[p];\r\n                                    }\r\n                                }\r\n                            };\r\n                            return _extendStatics(d, b);\r\n                        };\r\n                        return function(d, b) {\r\n                            _extendStatics(d, b);\r\n\r\n                            function __() {\r\n                                this.constructor = d;\r\n                            }\r\n\r\n                            d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n                        };\r\n                    }();\r\n                    var __assign = this && this.__assign || function() {\r\n                        __assign = Object.assign || function(t) {\r\n                            for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n                                s = arguments[i];\r\n                                for (var p in s) {\r\n                                    if (Object.prototype.hasOwnProperty.call(s, p)) {\r\n                                        t[p] = s[p];\r\n                                    }\r\n                                }\r\n                            }\r\n                            return t;\r\n                        };\r\n                        return __assign.apply(this, arguments);\r\n                    };\r\n                    Object.defineProperty(exports, \"__esModule\", {value: true});\r\n                    var foundation_1 = __webpack_require__(/*! @material/base/foundation */ \"./packages/mdc-base/foundation.ts\");\r\n                    var constants_1 = __webpack_require__(/*! ./constants */ \"./packages/mdc-textfield/character-counter/constants.ts\");\r\n                    var MDCTextFieldCharacterCounterFoundation = /** @class */function(_super) {\r\n                        __extends(MDCTextFieldCharacterCounterFoundation, _super);\r\n\r\n                        function MDCTextFieldCharacterCounterFoundation(adapter) {\r\n                            return _super.call(this, __assign(__assign({}, MDCTextFieldCharacterCounterFoundation.defaultAdapter), adapter)) || this;\r\n                        }\r\n\r\n                        Object.defineProperty(MDCTextFieldCharacterCounterFoundation, \"cssClasses\", {\r\n                            get: function get() {\r\n                                return constants_1.cssClasses;\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCTextFieldCharacterCounterFoundation, \"strings\", {\r\n                            get: function get() {\r\n                                return constants_1.strings;\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCTextFieldCharacterCounterFoundation, \"defaultAdapter\", {\r\n                            /**\r\n                             * See {@link MDCTextFieldCharacterCounterAdapter} for typing information on parameters and return types.\r\n                             */\r\n                            get: function get() {\r\n                                return {\r\n                                    setContent: function setContent() {\r\n                                        return undefined;\r\n                                    }\r\n                                };\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        MDCTextFieldCharacterCounterFoundation.prototype.setCounterValue = function(currentLength, maxLength) {\r\n                            currentLength = Math.min(currentLength, maxLength);\r\n                            this.adapter.setContent(currentLength + \" / \" + maxLength);\r\n                        };\r\n                        return MDCTextFieldCharacterCounterFoundation;\r\n                    }(foundation_1.MDCFoundation);\r\n                    exports.MDCTextFieldCharacterCounterFoundation = MDCTextFieldCharacterCounterFoundation;\r\n// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier.\r\n                    exports.default = MDCTextFieldCharacterCounterFoundation;\r\n\r\n                    /***/\r\n                }),\r\n\r\n                          /***/ \"./packages/mdc-textfield/character-counter/index.ts\":\r\n                /*!***********************************************************!*\\\r\n  !*** ./packages/mdc-textfield/character-counter/index.ts ***!\r\n  \\***********************************************************/\r\n                /*! no static exports found */\r\n                /***/ (function(module, exports, __webpack_require__) {\r\n\r\n                    \"use strict\";\r\n\r\n                    /**\r\n                     * @license\r\n                     * Copyright 2019 Google Inc.\r\n                     *\r\n                     * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n                     * of this software and associated documentation files (the \"Software\"), to deal\r\n                     * in the Software without restriction, including without limitation the rights\r\n                     * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n                     * copies of the Software, and to permit persons to whom the Software is\r\n                     * furnished to do so, subject to the following conditions:\r\n                     *\r\n                     * The above copyright notice and this permission notice shall be included in\r\n                     * all copies or substantial portions of the Software.\r\n                     *\r\n                     * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n                     * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n                     * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n                     * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n                     * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n                     * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n                     * THE SOFTWARE.\r\n                     */\r\n\r\n                    function __export(m) {\r\n                        for (var p in m) {\r\n                            if (!exports.hasOwnProperty(p)) {\r\n                                exports[p] = m[p];\r\n                            }\r\n                        }\r\n                    }\r\n\r\n                    Object.defineProperty(exports, \"__esModule\", {value: true});\r\n                    __export(__webpack_require__(/*! ./component */ \"./packages/mdc-textfield/character-counter/component.ts\"));\r\n                    __export(__webpack_require__(/*! ./foundation */ \"./packages/mdc-textfield/character-counter/foundation.ts\"));\r\n                    var constants_1 = __webpack_require__(/*! ./constants */ \"./packages/mdc-textfield/character-counter/constants.ts\");\r\n                    exports.characterCountCssClasses = constants_1.cssClasses;\r\n                    exports.characterCountStrings = constants_1.strings;\r\n\r\n                    /***/\r\n                }),\r\n\r\n                          /***/ \"./packages/mdc-textfield/component.ts\":\r\n                /*!*********************************************!*\\\r\n  !*** ./packages/mdc-textfield/component.ts ***!\r\n  \\*********************************************/\r\n                /*! no static exports found */\r\n                /***/ (function(module, exports, __webpack_require__) {\r\n\r\n                    \"use strict\";\r\n\r\n                    /**\r\n                     * @license\r\n                     * Copyright 2016 Google Inc.\r\n                     *\r\n                     * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n                     * of this software and associated documentation files (the \"Software\"), to deal\r\n                     * in the Software without restriction, including without limitation the rights\r\n                     * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n                     * copies of the Software, and to permit persons to whom the Software is\r\n                     * furnished to do so, subject to the following conditions:\r\n                     *\r\n                     * The above copyright notice and this permission notice shall be included in\r\n                     * all copies or substantial portions of the Software.\r\n                     *\r\n                     * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n                     * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n                     * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n                     * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n                     * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n                     * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n                     * THE SOFTWARE.\r\n                     */\r\n\r\n                    var __extends = this && this.__extends || function() {\r\n                        var _extendStatics = function extendStatics(d, b) {\r\n                            _extendStatics = Object.setPrototypeOf || {__proto__: []} instanceof Array && function(d, b) {\r\n                                d.__proto__ = b;\r\n                            } || function(d, b) {\r\n                                for (var p in b) {\r\n                                    if (b.hasOwnProperty(p)) {\r\n                                        d[p] = b[p];\r\n                                    }\r\n                                }\r\n                            };\r\n                            return _extendStatics(d, b);\r\n                        };\r\n                        return function(d, b) {\r\n                            _extendStatics(d, b);\r\n\r\n                            function __() {\r\n                                this.constructor = d;\r\n                            }\r\n\r\n                            d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n                        };\r\n                    }();\r\n                    var __assign = this && this.__assign || function() {\r\n                        __assign = Object.assign || function(t) {\r\n                            for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n                                s = arguments[i];\r\n                                for (var p in s) {\r\n                                    if (Object.prototype.hasOwnProperty.call(s, p)) {\r\n                                        t[p] = s[p];\r\n                                    }\r\n                                }\r\n                            }\r\n                            return t;\r\n                        };\r\n                        return __assign.apply(this, arguments);\r\n                    };\r\n                    var __importStar = this && this.__importStar || function(mod) {\r\n                        if (mod && mod.__esModule) {\r\n                            return mod;\r\n                        }\r\n                        var result = {};\r\n                        if (mod != null) {\r\n                            for (var k in mod) {\r\n                                if (Object.hasOwnProperty.call(mod, k)) {\r\n                                    result[k] = mod[k];\r\n                                }\r\n                            }\r\n                        }\r\n                        result[\"default\"] = mod;\r\n                        return result;\r\n                    };\r\n                    Object.defineProperty(exports, \"__esModule\", {value: true});\r\n                    var component_1 = __webpack_require__(/*! @material/base/component */ \"./packages/mdc-base/component.ts\");\r\n                    var events_1 = __webpack_require__(/*! @material/dom/events */ \"./packages/mdc-dom/events.ts\");\r\n                    var ponyfill = __importStar(__webpack_require__(/*! @material/dom/ponyfill */ \"./packages/mdc-dom/ponyfill.ts\"));\r\n                    var component_2 = __webpack_require__(/*! @material/floating-label/component */ \"./packages/mdc-floating-label/component.ts\");\r\n                    var component_3 = __webpack_require__(/*! @material/line-ripple/component */ \"./packages/mdc-line-ripple/component.ts\");\r\n                    var component_4 = __webpack_require__(/*! @material/notched-outline/component */ \"./packages/mdc-notched-outline/component.ts\");\r\n                    var component_5 = __webpack_require__(/*! @material/ripple/component */ \"./packages/mdc-ripple/component.ts\");\r\n                    var foundation_1 = __webpack_require__(/*! @material/ripple/foundation */ \"./packages/mdc-ripple/foundation.ts\");\r\n                    var component_6 = __webpack_require__(/*! ./character-counter/component */ \"./packages/mdc-textfield/character-counter/component.ts\");\r\n                    var foundation_2 = __webpack_require__(/*! ./character-counter/foundation */ \"./packages/mdc-textfield/character-counter/foundation.ts\");\r\n                    var constants_1 = __webpack_require__(/*! ./constants */ \"./packages/mdc-textfield/constants.ts\");\r\n                    var foundation_3 = __webpack_require__(/*! ./foundation */ \"./packages/mdc-textfield/foundation.ts\");\r\n                    var component_7 = __webpack_require__(/*! ./helper-text/component */ \"./packages/mdc-textfield/helper-text/component.ts\");\r\n                    var foundation_4 = __webpack_require__(/*! ./helper-text/foundation */ \"./packages/mdc-textfield/helper-text/foundation.ts\");\r\n                    var component_8 = __webpack_require__(/*! ./icon/component */ \"./packages/mdc-textfield/icon/component.ts\");\r\n                    var MDCTextField = /** @class */function(_super) {\r\n                        __extends(MDCTextField, _super);\r\n\r\n                        function MDCTextField() {\r\n                            return _super !== null && _super.apply(this, arguments) || this;\r\n                        }\r\n\r\n                        MDCTextField.attachTo = function(root) {\r\n                            return new MDCTextField(root);\r\n                        };\r\n                        MDCTextField.prototype.initialize = function(rippleFactory, lineRippleFactory, helperTextFactory, characterCounterFactory, iconFactory, labelFactory, outlineFactory) {\r\n                            if (rippleFactory === void 0) {\r\n                                rippleFactory = function rippleFactory(el, foundation) {\r\n                                    return new component_5.MDCRipple(el, foundation);\r\n                                };\r\n                            }\r\n                            if (lineRippleFactory === void 0) {\r\n                                lineRippleFactory = function lineRippleFactory(el) {\r\n                                    return new component_3.MDCLineRipple(el);\r\n                                };\r\n                            }\r\n                            if (helperTextFactory === void 0) {\r\n                                helperTextFactory = function helperTextFactory(el) {\r\n                                    return new component_7.MDCTextFieldHelperText(el);\r\n                                };\r\n                            }\r\n                            if (characterCounterFactory === void 0) {\r\n                                characterCounterFactory = function characterCounterFactory(el) {\r\n                                    return new component_6.MDCTextFieldCharacterCounter(el);\r\n                                };\r\n                            }\r\n                            if (iconFactory === void 0) {\r\n                                iconFactory = function iconFactory(el) {\r\n                                    return new component_8.MDCTextFieldIcon(el);\r\n                                };\r\n                            }\r\n                            if (labelFactory === void 0) {\r\n                                labelFactory = function labelFactory(el) {\r\n                                    return new component_2.MDCFloatingLabel(el);\r\n                                };\r\n                            }\r\n                            if (outlineFactory === void 0) {\r\n                                outlineFactory = function outlineFactory(el) {\r\n                                    return new component_4.MDCNotchedOutline(el);\r\n                                };\r\n                            }\r\n                            this.input_ = this.root.querySelector(constants_1.strings.INPUT_SELECTOR);\r\n                            var labelElement = this.root.querySelector(constants_1.strings.LABEL_SELECTOR);\r\n                            this.label_ = labelElement ? labelFactory(labelElement) : null;\r\n                            var lineRippleElement = this.root.querySelector(constants_1.strings.LINE_RIPPLE_SELECTOR);\r\n                            this.lineRipple_ = lineRippleElement ? lineRippleFactory(lineRippleElement) : null;\r\n                            var outlineElement = this.root.querySelector(constants_1.strings.OUTLINE_SELECTOR);\r\n                            this.outline_ = outlineElement ? outlineFactory(outlineElement) : null;\r\n                            // Helper text\r\n                            var helperTextStrings = foundation_4.MDCTextFieldHelperTextFoundation.strings;\r\n                            var nextElementSibling = this.root.nextElementSibling;\r\n                            var hasHelperLine = nextElementSibling && nextElementSibling.classList.contains(constants_1.cssClasses.HELPER_LINE);\r\n                            var helperTextEl = hasHelperLine && nextElementSibling && nextElementSibling.querySelector(helperTextStrings.ROOT_SELECTOR);\r\n                            this.helperText_ = helperTextEl ? helperTextFactory(helperTextEl) : null;\r\n                            // Character counter\r\n                            var characterCounterStrings = foundation_2.MDCTextFieldCharacterCounterFoundation.strings;\r\n                            var characterCounterEl = this.root.querySelector(characterCounterStrings.ROOT_SELECTOR);\r\n                            // If character counter is not found in root element search in sibling element.\r\n                            if (!characterCounterEl && hasHelperLine && nextElementSibling) {\r\n                                characterCounterEl = nextElementSibling.querySelector(characterCounterStrings.ROOT_SELECTOR);\r\n                            }\r\n                            this.characterCounter_ = characterCounterEl ? characterCounterFactory(characterCounterEl) : null;\r\n                            // Leading icon\r\n                            var leadingIconEl = this.root.querySelector(constants_1.strings.LEADING_ICON_SELECTOR);\r\n                            this.leadingIcon_ = leadingIconEl ? iconFactory(leadingIconEl) : null;\r\n                            // Trailing icon\r\n                            var trailingIconEl = this.root.querySelector(constants_1.strings.TRAILING_ICON_SELECTOR);\r\n                            this.trailingIcon_ = trailingIconEl ? iconFactory(trailingIconEl) : null;\r\n                            // Prefix and Suffix\r\n                            this.prefix_ = this.root.querySelector(constants_1.strings.PREFIX_SELECTOR);\r\n                            this.suffix_ = this.root.querySelector(constants_1.strings.SUFFIX_SELECTOR);\r\n                            this.ripple = this.createRipple_(rippleFactory);\r\n                        };\r\n                        MDCTextField.prototype.destroy = function() {\r\n                            if (this.ripple) {\r\n                                this.ripple.destroy();\r\n                            }\r\n                            if (this.lineRipple_) {\r\n                                this.lineRipple_.destroy();\r\n                            }\r\n                            if (this.helperText_) {\r\n                                this.helperText_.destroy();\r\n                            }\r\n                            if (this.characterCounter_) {\r\n                                this.characterCounter_.destroy();\r\n                            }\r\n                            if (this.leadingIcon_) {\r\n                                this.leadingIcon_.destroy();\r\n                            }\r\n                            if (this.trailingIcon_) {\r\n                                this.trailingIcon_.destroy();\r\n                            }\r\n                            if (this.label_) {\r\n                                this.label_.destroy();\r\n                            }\r\n                            if (this.outline_) {\r\n                                this.outline_.destroy();\r\n                            }\r\n                            _super.prototype.destroy.call(this);\r\n                        };\r\n                        /**\r\n                         * Initializes the Text Field's internal state based on the environment's\r\n                         * state.\r\n                         */\r\n                        MDCTextField.prototype.initialSyncWithDOM = function() {\r\n                            this.disabled = this.input_.disabled;\r\n                        };\r\n                        Object.defineProperty(MDCTextField.prototype, \"value\", {\r\n                            get: function get() {\r\n                                return this.foundation.getValue();\r\n                            },\r\n                            /**\r\n                             * @param value The value to set on the input.\r\n                             */\r\n                            set: function set(value) {\r\n                                this.foundation.setValue(value);\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCTextField.prototype, \"disabled\", {\r\n                            get: function get() {\r\n                                return this.foundation.isDisabled();\r\n                            },\r\n                            /**\r\n                             * @param disabled Sets the Text Field disabled or enabled.\r\n                             */\r\n                            set: function set(disabled) {\r\n                                this.foundation.setDisabled(disabled);\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCTextField.prototype, \"valid\", {\r\n                            get: function get() {\r\n                                return this.foundation.isValid();\r\n                            },\r\n                            /**\r\n                             * @param valid Sets the Text Field valid or invalid.\r\n                             */\r\n                            set: function set(valid) {\r\n                                this.foundation.setValid(valid);\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCTextField.prototype, \"required\", {\r\n                            get: function get() {\r\n                                return this.input_.required;\r\n                            },\r\n                            /**\r\n                             * @param required Sets the Text Field to required.\r\n                             */\r\n                            set: function set(required) {\r\n                                this.input_.required = required;\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCTextField.prototype, \"pattern\", {\r\n                            get: function get() {\r\n                                return this.input_.pattern;\r\n                            },\r\n                            /**\r\n                             * @param pattern Sets the input element's validation pattern.\r\n                             */\r\n                            set: function set(pattern) {\r\n                                this.input_.pattern = pattern;\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCTextField.prototype, \"minLength\", {\r\n                            get: function get() {\r\n                                return this.input_.minLength;\r\n                            },\r\n                            /**\r\n                             * @param minLength Sets the input element's minLength.\r\n                             */\r\n                            set: function set(minLength) {\r\n                                this.input_.minLength = minLength;\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCTextField.prototype, \"maxLength\", {\r\n                            get: function get() {\r\n                                return this.input_.maxLength;\r\n                            },\r\n                            /**\r\n                             * @param maxLength Sets the input element's maxLength.\r\n                             */\r\n                            set: function set(maxLength) {\r\n                                // Chrome throws exception if maxLength is set to a value less than zero\r\n                                if (maxLength < 0) {\r\n                                    this.input_.removeAttribute('maxLength');\r\n                                } else {\r\n                                    this.input_.maxLength = maxLength;\r\n                                }\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCTextField.prototype, \"min\", {\r\n                            get: function get() {\r\n                                return this.input_.min;\r\n                            },\r\n                            /**\r\n                             * @param min Sets the input element's min.\r\n                             */\r\n                            set: function set(min) {\r\n                                this.input_.min = min;\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCTextField.prototype, \"max\", {\r\n                            get: function get() {\r\n                                return this.input_.max;\r\n                            },\r\n                            /**\r\n                             * @param max Sets the input element's max.\r\n                             */\r\n                            set: function set(max) {\r\n                                this.input_.max = max;\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCTextField.prototype, \"step\", {\r\n                            get: function get() {\r\n                                return this.input_.step;\r\n                            },\r\n                            /**\r\n                             * @param step Sets the input element's step.\r\n                             */\r\n                            set: function set(step) {\r\n                                this.input_.step = step;\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCTextField.prototype, \"helperTextContent\", {\r\n                            /**\r\n                             * Sets the helper text element content.\r\n                             */\r\n                            set: function set(content) {\r\n                                this.foundation.setHelperTextContent(content);\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCTextField.prototype, \"leadingIconAriaLabel\", {\r\n                            /**\r\n                             * Sets the aria label of the leading icon.\r\n                             */\r\n                            set: function set(label) {\r\n                                this.foundation.setLeadingIconAriaLabel(label);\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCTextField.prototype, \"leadingIconContent\", {\r\n                            /**\r\n                             * Sets the text content of the leading icon.\r\n                             */\r\n                            set: function set(content) {\r\n                                this.foundation.setLeadingIconContent(content);\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCTextField.prototype, \"trailingIconAriaLabel\", {\r\n                            /**\r\n                             * Sets the aria label of the trailing icon.\r\n                             */\r\n                            set: function set(label) {\r\n                                this.foundation.setTrailingIconAriaLabel(label);\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCTextField.prototype, \"trailingIconContent\", {\r\n                            /**\r\n                             * Sets the text content of the trailing icon.\r\n                             */\r\n                            set: function set(content) {\r\n                                this.foundation.setTrailingIconContent(content);\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCTextField.prototype, \"useNativeValidation\", {\r\n                            /**\r\n                             * Enables or disables the use of native validation. Use this for custom validation.\r\n                             * @param useNativeValidation Set this to false to ignore native input validation.\r\n                             */\r\n                            set: function set(useNativeValidation) {\r\n                                this.foundation.setUseNativeValidation(useNativeValidation);\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCTextField.prototype, \"prefixText\", {\r\n                            /**\r\n                             * Gets the text content of the prefix, or null if it does not exist.\r\n                             */\r\n                            get: function get() {\r\n                                return this.prefix_ ? this.prefix_.textContent : null;\r\n                            },\r\n                            /**\r\n                             * Sets the text content of the prefix, if it exists.\r\n                             */\r\n                            set: function set(prefixText) {\r\n                                if (this.prefix_) {\r\n                                    this.prefix_.textContent = prefixText;\r\n                                }\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCTextField.prototype, \"suffixText\", {\r\n                            /**\r\n                             * Gets the text content of the suffix, or null if it does not exist.\r\n                             */\r\n                            get: function get() {\r\n                                return this.suffix_ ? this.suffix_.textContent : null;\r\n                            },\r\n                            /**\r\n                             * Sets the text content of the suffix, if it exists.\r\n                             */\r\n                            set: function set(suffixText) {\r\n                                if (this.suffix_) {\r\n                                    this.suffix_.textContent = suffixText;\r\n                                }\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        /**\r\n                         * Focuses the input element.\r\n                         */\r\n                        MDCTextField.prototype.focus = function() {\r\n                            this.input_.focus();\r\n                        };\r\n                        /**\r\n                         * Recomputes the outline SVG path for the outline element.\r\n                         */\r\n                        MDCTextField.prototype.layout = function() {\r\n                            var openNotch = this.foundation.shouldFloat;\r\n                            this.foundation.notchOutline(openNotch);\r\n                        };\r\n                        MDCTextField.prototype.getDefaultFoundation = function() {\r\n                            // DO NOT INLINE this variable. For backward compatibility, foundations take a Partial<MDCFooAdapter>.\r\n                            // To ensure we don't accidentally omit any methods, we need a separate, strongly typed adapter variable.\r\n                            // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface.\r\n                            var adapter = __assign(__assign(__assign(__assign(__assign({}, this.getRootAdapterMethods_()), this.getInputAdapterMethods_()), this.getLabelAdapterMethods_()), this.getLineRippleAdapterMethods_()), this.getOutlineAdapterMethods_());\r\n                            // tslint:enable:object-literal-sort-keys\r\n                            return new foundation_3.MDCTextFieldFoundation(adapter, this.getFoundationMap_());\r\n                        };\r\n                        MDCTextField.prototype.getRootAdapterMethods_ = function() {\r\n                            var _this = this;\r\n                            // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface.\r\n                            return {\r\n                                addClass: function addClass(className) {\r\n                                    return _this.root.classList.add(className);\r\n                                },\r\n                                removeClass: function removeClass(className) {\r\n                                    return _this.root.classList.remove(className);\r\n                                },\r\n                                hasClass: function hasClass(className) {\r\n                                    return _this.root.classList.contains(className);\r\n                                },\r\n                                registerTextFieldInteractionHandler: function registerTextFieldInteractionHandler(evtType, handler) {\r\n                                    return _this.listen(evtType, handler);\r\n                                },\r\n                                deregisterTextFieldInteractionHandler: function deregisterTextFieldInteractionHandler(evtType, handler) {\r\n                                    return _this.unlisten(evtType, handler);\r\n                                },\r\n                                registerValidationAttributeChangeHandler: function registerValidationAttributeChangeHandler(handler) {\r\n                                    var getAttributesList = function getAttributesList(mutationsList) {\r\n                                        return mutationsList.map(function(mutation) {\r\n                                            return mutation.attributeName;\r\n                                        }).filter(function(attributeName) {\r\n                                            return attributeName;\r\n                                        });\r\n                                    };\r\n                                    var observer = new MutationObserver(function(mutationsList) {\r\n                                        return handler(getAttributesList(mutationsList));\r\n                                    });\r\n                                    var config = {attributes: true};\r\n                                    observer.observe(_this.input_, config);\r\n                                    return observer;\r\n                                },\r\n                                deregisterValidationAttributeChangeHandler: function deregisterValidationAttributeChangeHandler(observer) {\r\n                                    return observer.disconnect();\r\n                                }\r\n                            };\r\n                            // tslint:enable:object-literal-sort-keys\r\n                        };\r\n                        MDCTextField.prototype.getInputAdapterMethods_ = function() {\r\n                            var _this = this;\r\n                            // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface.\r\n                            return {\r\n                                getNativeInput: function getNativeInput() {\r\n                                    return _this.input_;\r\n                                },\r\n                                isFocused: function isFocused() {\r\n                                    return document.activeElement === _this.input_;\r\n                                },\r\n                                registerInputInteractionHandler: function registerInputInteractionHandler(evtType, handler) {\r\n                                    return _this.input_.addEventListener(evtType, handler, events_1.applyPassive());\r\n                                },\r\n                                deregisterInputInteractionHandler: function deregisterInputInteractionHandler(evtType, handler) {\r\n                                    return _this.input_.removeEventListener(evtType, handler, events_1.applyPassive());\r\n                                }\r\n                            };\r\n                            // tslint:enable:object-literal-sort-keys\r\n                        };\r\n                        MDCTextField.prototype.getLabelAdapterMethods_ = function() {\r\n                            var _this = this;\r\n                            return {\r\n                                floatLabel: function floatLabel(shouldFloat) {\r\n                                    return _this.label_ && _this.label_.float(shouldFloat);\r\n                                },\r\n                                getLabelWidth: function getLabelWidth() {\r\n                                    return _this.label_ ? _this.label_.getWidth() : 0;\r\n                                },\r\n                                hasLabel: function hasLabel() {\r\n                                    return Boolean(_this.label_);\r\n                                },\r\n                                shakeLabel: function shakeLabel(shouldShake) {\r\n                                    return _this.label_ && _this.label_.shake(shouldShake);\r\n                                },\r\n                                setLabelRequired: function setLabelRequired(isRequired) {\r\n                                    return _this.label_ && _this.label_.setRequired(isRequired);\r\n                                }\r\n                            };\r\n                        };\r\n                        MDCTextField.prototype.getLineRippleAdapterMethods_ = function() {\r\n                            var _this = this;\r\n                            return {\r\n                                activateLineRipple: function activateLineRipple() {\r\n                                    if (_this.lineRipple_) {\r\n                                        _this.lineRipple_.activate();\r\n                                    }\r\n                                },\r\n                                deactivateLineRipple: function deactivateLineRipple() {\r\n                                    if (_this.lineRipple_) {\r\n                                        _this.lineRipple_.deactivate();\r\n                                    }\r\n                                },\r\n                                setLineRippleTransformOrigin: function setLineRippleTransformOrigin(normalizedX) {\r\n                                    if (_this.lineRipple_) {\r\n                                        _this.lineRipple_.setRippleCenter(normalizedX);\r\n                                    }\r\n                                }\r\n                            };\r\n                        };\r\n                        MDCTextField.prototype.getOutlineAdapterMethods_ = function() {\r\n                            var _this = this;\r\n                            return {\r\n                                closeOutline: function closeOutline() {\r\n                                    return _this.outline_ && _this.outline_.closeNotch();\r\n                                },\r\n                                hasOutline: function hasOutline() {\r\n                                    return Boolean(_this.outline_);\r\n                                },\r\n                                notchOutline: function notchOutline(labelWidth) {\r\n                                    return _this.outline_ && _this.outline_.notch(labelWidth);\r\n                                }\r\n                            };\r\n                        };\r\n                        /**\r\n                         * @return A map of all subcomponents to subfoundations.\r\n                         */\r\n                        MDCTextField.prototype.getFoundationMap_ = function() {\r\n                            return {\r\n                                characterCounter: this.characterCounter_ ? this.characterCounter_.foundationForTextField : undefined,\r\n                                helperText: this.helperText_ ? this.helperText_.foundationForTextField : undefined,\r\n                                leadingIcon: this.leadingIcon_ ? this.leadingIcon_.foundationForTextField : undefined,\r\n                                trailingIcon: this.trailingIcon_ ? this.trailingIcon_.foundationForTextField : undefined\r\n                            };\r\n                        };\r\n                        MDCTextField.prototype.createRipple_ = function(rippleFactory) {\r\n                            var _this = this;\r\n                            var isTextArea = this.root.classList.contains(constants_1.cssClasses.TEXTAREA);\r\n                            var isOutlined = this.root.classList.contains(constants_1.cssClasses.OUTLINED);\r\n                            if (isTextArea || isOutlined) {\r\n                                return null;\r\n                            }\r\n                            // DO NOT INLINE this variable. For backward compatibility, foundations take a Partial<MDCFooAdapter>.\r\n                            // To ensure we don't accidentally omit any methods, we need a separate, strongly typed adapter variable.\r\n                            // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface.\r\n                            var adapter = __assign(__assign({}, component_5.MDCRipple.createAdapter(this)), {\r\n                                isSurfaceActive: function isSurfaceActive() {\r\n                                    return ponyfill.matches(_this.input_, ':active');\r\n                                },\r\n                                registerInteractionHandler: function registerInteractionHandler(evtType, handler) {\r\n                                    return _this.input_.addEventListener(evtType, handler, events_1.applyPassive());\r\n                                },\r\n                                deregisterInteractionHandler: function deregisterInteractionHandler(evtType, handler) {\r\n                                    return _this.input_.removeEventListener(evtType, handler, events_1.applyPassive());\r\n                                }\r\n                            });\r\n                            // tslint:enable:object-literal-sort-keys\r\n                            return rippleFactory(this.root, new foundation_1.MDCRippleFoundation(adapter));\r\n                        };\r\n                        return MDCTextField;\r\n                    }(component_1.MDCComponent);\r\n                    exports.MDCTextField = MDCTextField;\r\n\r\n                    /***/\r\n                }),\r\n\r\n                          /***/ \"./packages/mdc-textfield/constants.ts\":\r\n                /*!*********************************************!*\\\r\n  !*** ./packages/mdc-textfield/constants.ts ***!\r\n  \\*********************************************/\r\n                /*! no static exports found */\r\n                /***/ (function(module, exports, __webpack_require__) {\r\n\r\n                    \"use strict\";\r\n\r\n                    /**\r\n                     * @license\r\n                     * Copyright 2016 Google Inc.\r\n                     *\r\n                     * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n                     * of this software and associated documentation files (the \"Software\"), to deal\r\n                     * in the Software without restriction, including without limitation the rights\r\n                     * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n                     * copies of the Software, and to permit persons to whom the Software is\r\n                     * furnished to do so, subject to the following conditions:\r\n                     *\r\n                     * The above copyright notice and this permission notice shall be included in\r\n                     * all copies or substantial portions of the Software.\r\n                     *\r\n                     * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n                     * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n                     * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n                     * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n                     * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n                     * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n                     * THE SOFTWARE.\r\n                     */\r\n\r\n                    Object.defineProperty(exports, \"__esModule\", {value: true});\r\n                    var strings = {\r\n                        ARIA_CONTROLS: 'aria-controls',\r\n                        INPUT_SELECTOR: '.mdc-text-field__input',\r\n                        LABEL_SELECTOR: '.mdc-floating-label',\r\n                        LEADING_ICON_SELECTOR: '.mdc-text-field__icon--leading',\r\n                        LINE_RIPPLE_SELECTOR: '.mdc-line-ripple',\r\n                        OUTLINE_SELECTOR: '.mdc-notched-outline',\r\n                        PREFIX_SELECTOR: '.mdc-text-field__affix--prefix',\r\n                        SUFFIX_SELECTOR: '.mdc-text-field__affix--suffix',\r\n                        TRAILING_ICON_SELECTOR: '.mdc-text-field__icon--trailing'\r\n                    };\r\n                    exports.strings = strings;\r\n                    var cssClasses = {\r\n                        DISABLED: 'mdc-text-field--disabled',\r\n                        FOCUSED: 'mdc-text-field--focused',\r\n                        FULLWIDTH: 'mdc-text-field--fullwidth',\r\n                        HELPER_LINE: 'mdc-text-field-helper-line',\r\n                        INVALID: 'mdc-text-field--invalid',\r\n                        LABEL_FLOATING: 'mdc-text-field--label-floating',\r\n                        NO_LABEL: 'mdc-text-field--no-label',\r\n                        OUTLINED: 'mdc-text-field--outlined',\r\n                        ROOT: 'mdc-text-field',\r\n                        TEXTAREA: 'mdc-text-field--textarea',\r\n                        WITH_LEADING_ICON: 'mdc-text-field--with-leading-icon',\r\n                        WITH_TRAILING_ICON: 'mdc-text-field--with-trailing-icon'\r\n                    };\r\n                    exports.cssClasses = cssClasses;\r\n                    var numbers = {\r\n                        LABEL_SCALE: 0.75\r\n                    };\r\n                    exports.numbers = numbers;\r\n                    /**\r\n                     * Whitelist based off of https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/HTML5/Constraint_validation\r\n                     * under the \"Validation-related attributes\" section.\r\n                     */\r\n                    var VALIDATION_ATTR_WHITELIST = ['pattern', 'min', 'max', 'required', 'step', 'minlength', 'maxlength'];\r\n                    exports.VALIDATION_ATTR_WHITELIST = VALIDATION_ATTR_WHITELIST;\r\n                    /**\r\n                     * Label should always float for these types as they show some UI even if value is empty.\r\n                     */\r\n                    var ALWAYS_FLOAT_TYPES = ['color', 'date', 'datetime-local', 'month', 'range', 'time', 'week'];\r\n                    exports.ALWAYS_FLOAT_TYPES = ALWAYS_FLOAT_TYPES;\r\n\r\n                    /***/\r\n                }),\r\n\r\n                          /***/ \"./packages/mdc-textfield/foundation.ts\":\r\n                /*!**********************************************!*\\\r\n  !*** ./packages/mdc-textfield/foundation.ts ***!\r\n  \\**********************************************/\r\n                /*! no static exports found */\r\n                /***/ (function(module, exports, __webpack_require__) {\r\n\r\n                    \"use strict\";\r\n\r\n                    /**\r\n                     * @license\r\n                     * Copyright 2016 Google Inc.\r\n                     *\r\n                     * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n                     * of this software and associated documentation files (the \"Software\"), to deal\r\n                     * in the Software without restriction, including without limitation the rights\r\n                     * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n                     * copies of the Software, and to permit persons to whom the Software is\r\n                     * furnished to do so, subject to the following conditions:\r\n                     *\r\n                     * The above copyright notice and this permission notice shall be included in\r\n                     * all copies or substantial portions of the Software.\r\n                     *\r\n                     * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n                     * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n                     * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n                     * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n                     * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n                     * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n                     * THE SOFTWARE.\r\n                     */\r\n\r\n                    var __extends = this && this.__extends || function() {\r\n                        var _extendStatics = function extendStatics(d, b) {\r\n                            _extendStatics = Object.setPrototypeOf || {__proto__: []} instanceof Array && function(d, b) {\r\n                                d.__proto__ = b;\r\n                            } || function(d, b) {\r\n                                for (var p in b) {\r\n                                    if (b.hasOwnProperty(p)) {\r\n                                        d[p] = b[p];\r\n                                    }\r\n                                }\r\n                            };\r\n                            return _extendStatics(d, b);\r\n                        };\r\n                        return function(d, b) {\r\n                            _extendStatics(d, b);\r\n\r\n                            function __() {\r\n                                this.constructor = d;\r\n                            }\r\n\r\n                            d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n                        };\r\n                    }();\r\n                    var __assign = this && this.__assign || function() {\r\n                        __assign = Object.assign || function(t) {\r\n                            for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n                                s = arguments[i];\r\n                                for (var p in s) {\r\n                                    if (Object.prototype.hasOwnProperty.call(s, p)) {\r\n                                        t[p] = s[p];\r\n                                    }\r\n                                }\r\n                            }\r\n                            return t;\r\n                        };\r\n                        return __assign.apply(this, arguments);\r\n                    };\r\n                    Object.defineProperty(exports, \"__esModule\", {value: true});\r\n                    var foundation_1 = __webpack_require__(/*! @material/base/foundation */ \"./packages/mdc-base/foundation.ts\");\r\n                    var constants_1 = __webpack_require__(/*! ./constants */ \"./packages/mdc-textfield/constants.ts\");\r\n                    var POINTERDOWN_EVENTS = ['mousedown', 'touchstart'];\r\n                    var INTERACTION_EVENTS = ['click', 'keydown'];\r\n                    var MDCTextFieldFoundation = /** @class */function(_super) {\r\n                        __extends(MDCTextFieldFoundation, _super);\r\n\r\n                        /**\r\n                         * @param adapter\r\n                         * @param foundationMap Map from subcomponent names to their subfoundations.\r\n                         */\r\n                        function MDCTextFieldFoundation(adapter, foundationMap) {\r\n                            if (foundationMap === void 0) {\r\n                                foundationMap = {};\r\n                            }\r\n                            var _this = _super.call(this, __assign(__assign({}, MDCTextFieldFoundation.defaultAdapter), adapter)) || this;\r\n                            _this.isFocused_ = false;\r\n                            _this.receivedUserInput_ = false;\r\n                            _this.isValid_ = true;\r\n                            _this.useNativeValidation_ = true;\r\n                            _this.helperText_ = foundationMap.helperText;\r\n                            _this.characterCounter_ = foundationMap.characterCounter;\r\n                            _this.leadingIcon_ = foundationMap.leadingIcon;\r\n                            _this.trailingIcon_ = foundationMap.trailingIcon;\r\n                            _this.inputFocusHandler_ = function() {\r\n                                return _this.activateFocus();\r\n                            };\r\n                            _this.inputBlurHandler_ = function() {\r\n                                return _this.deactivateFocus();\r\n                            };\r\n                            _this.inputInputHandler_ = function() {\r\n                                return _this.handleInput();\r\n                            };\r\n                            _this.setPointerXOffset_ = function(evt) {\r\n                                return _this.setTransformOrigin(evt);\r\n                            };\r\n                            _this.textFieldInteractionHandler_ = function() {\r\n                                return _this.handleTextFieldInteraction();\r\n                            };\r\n                            _this.validationAttributeChangeHandler_ = function(attributesList) {\r\n                                return _this.handleValidationAttributeChange(attributesList);\r\n                            };\r\n                            return _this;\r\n                        }\r\n\r\n                        Object.defineProperty(MDCTextFieldFoundation, \"cssClasses\", {\r\n                            get: function get() {\r\n                                return constants_1.cssClasses;\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCTextFieldFoundation, \"strings\", {\r\n                            get: function get() {\r\n                                return constants_1.strings;\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCTextFieldFoundation, \"numbers\", {\r\n                            get: function get() {\r\n                                return constants_1.numbers;\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCTextFieldFoundation.prototype, \"shouldAlwaysFloat_\", {\r\n                            get: function get() {\r\n                                var type = this.getNativeInput_().type;\r\n                                return constants_1.ALWAYS_FLOAT_TYPES.indexOf(type) >= 0;\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCTextFieldFoundation.prototype, \"shouldFloat\", {\r\n                            get: function get() {\r\n                                return this.shouldAlwaysFloat_ || this.isFocused_ || !!this.getValue() || this.isBadInput_();\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCTextFieldFoundation.prototype, \"shouldShake\", {\r\n                            get: function get() {\r\n                                return !this.isFocused_ && !this.isValid() && !!this.getValue();\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCTextFieldFoundation, \"defaultAdapter\", {\r\n                            /**\r\n                             * See {@link MDCTextFieldAdapter} for typing information on parameters and return types.\r\n                             */\r\n                            get: function get() {\r\n                                // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface.\r\n                                return {\r\n                                    addClass: function addClass() {\r\n                                        return undefined;\r\n                                    },\r\n                                    removeClass: function removeClass() {\r\n                                        return undefined;\r\n                                    },\r\n                                    hasClass: function hasClass() {\r\n                                        return true;\r\n                                    },\r\n                                    registerTextFieldInteractionHandler: function registerTextFieldInteractionHandler() {\r\n                                        return undefined;\r\n                                    },\r\n                                    deregisterTextFieldInteractionHandler: function deregisterTextFieldInteractionHandler() {\r\n                                        return undefined;\r\n                                    },\r\n                                    registerInputInteractionHandler: function registerInputInteractionHandler() {\r\n                                        return undefined;\r\n                                    },\r\n                                    deregisterInputInteractionHandler: function deregisterInputInteractionHandler() {\r\n                                        return undefined;\r\n                                    },\r\n                                    registerValidationAttributeChangeHandler: function registerValidationAttributeChangeHandler() {\r\n                                        return new MutationObserver(function() {\r\n                                            return undefined;\r\n                                        });\r\n                                    },\r\n                                    deregisterValidationAttributeChangeHandler: function deregisterValidationAttributeChangeHandler() {\r\n                                        return undefined;\r\n                                    },\r\n                                    getNativeInput: function getNativeInput() {\r\n                                        return null;\r\n                                    },\r\n                                    isFocused: function isFocused() {\r\n                                        return false;\r\n                                    },\r\n                                    activateLineRipple: function activateLineRipple() {\r\n                                        return undefined;\r\n                                    },\r\n                                    deactivateLineRipple: function deactivateLineRipple() {\r\n                                        return undefined;\r\n                                    },\r\n                                    setLineRippleTransformOrigin: function setLineRippleTransformOrigin() {\r\n                                        return undefined;\r\n                                    },\r\n                                    shakeLabel: function shakeLabel() {\r\n                                        return undefined;\r\n                                    },\r\n                                    floatLabel: function floatLabel() {\r\n                                        return undefined;\r\n                                    },\r\n                                    setLabelRequired: function setLabelRequired() {\r\n                                        return undefined;\r\n                                    },\r\n                                    hasLabel: function hasLabel() {\r\n                                        return false;\r\n                                    },\r\n                                    getLabelWidth: function getLabelWidth() {\r\n                                        return 0;\r\n                                    },\r\n                                    hasOutline: function hasOutline() {\r\n                                        return false;\r\n                                    },\r\n                                    notchOutline: function notchOutline() {\r\n                                        return undefined;\r\n                                    },\r\n                                    closeOutline: function closeOutline() {\r\n                                        return undefined;\r\n                                    }\r\n                                };\r\n                                // tslint:enable:object-literal-sort-keys\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        MDCTextFieldFoundation.prototype.init = function() {\r\n                            var _this = this;\r\n                            if (this.adapter.hasLabel() && this.getNativeInput_().required) {\r\n                                this.adapter.setLabelRequired(true);\r\n                            }\r\n                            if (this.adapter.isFocused()) {\r\n                                this.inputFocusHandler_();\r\n                            } else if (this.adapter.hasLabel() && this.shouldFloat) {\r\n                                this.notchOutline(true);\r\n                                this.adapter.floatLabel(true);\r\n                                this.styleFloating_(true);\r\n                            }\r\n                            this.adapter.registerInputInteractionHandler('focus', this.inputFocusHandler_);\r\n                            this.adapter.registerInputInteractionHandler('blur', this.inputBlurHandler_);\r\n                            this.adapter.registerInputInteractionHandler('input', this.inputInputHandler_);\r\n                            POINTERDOWN_EVENTS.forEach(function(evtType) {\r\n                                _this.adapter.registerInputInteractionHandler(evtType, _this.setPointerXOffset_);\r\n                            });\r\n                            INTERACTION_EVENTS.forEach(function(evtType) {\r\n                                _this.adapter.registerTextFieldInteractionHandler(evtType, _this.textFieldInteractionHandler_);\r\n                            });\r\n                            this.validationObserver_ = this.adapter.registerValidationAttributeChangeHandler(this.validationAttributeChangeHandler_);\r\n                            this.setCharacterCounter_(this.getValue().length);\r\n                        };\r\n                        MDCTextFieldFoundation.prototype.destroy = function() {\r\n                            var _this = this;\r\n                            this.adapter.deregisterInputInteractionHandler('focus', this.inputFocusHandler_);\r\n                            this.adapter.deregisterInputInteractionHandler('blur', this.inputBlurHandler_);\r\n                            this.adapter.deregisterInputInteractionHandler('input', this.inputInputHandler_);\r\n                            POINTERDOWN_EVENTS.forEach(function(evtType) {\r\n                                _this.adapter.deregisterInputInteractionHandler(evtType, _this.setPointerXOffset_);\r\n                            });\r\n                            INTERACTION_EVENTS.forEach(function(evtType) {\r\n                                _this.adapter.deregisterTextFieldInteractionHandler(evtType, _this.textFieldInteractionHandler_);\r\n                            });\r\n                            this.adapter.deregisterValidationAttributeChangeHandler(this.validationObserver_);\r\n                        };\r\n                        /**\r\n                         * Handles user interactions with the Text Field.\r\n                         */\r\n                        MDCTextFieldFoundation.prototype.handleTextFieldInteraction = function() {\r\n                            var nativeInput = this.adapter.getNativeInput();\r\n                            if (nativeInput && nativeInput.disabled) {\r\n                                return;\r\n                            }\r\n                            this.receivedUserInput_ = true;\r\n                        };\r\n                        /**\r\n                         * Handles validation attribute changes\r\n                         */\r\n                        MDCTextFieldFoundation.prototype.handleValidationAttributeChange = function(attributesList) {\r\n                            var _this = this;\r\n                            attributesList.some(function(attributeName) {\r\n                                if (constants_1.VALIDATION_ATTR_WHITELIST.indexOf(attributeName) > -1) {\r\n                                    _this.styleValidity_(true);\r\n                                    _this.adapter.setLabelRequired(_this.getNativeInput_().required);\r\n                                    return true;\r\n                                }\r\n                                return false;\r\n                            });\r\n                            if (attributesList.indexOf('maxlength') > -1) {\r\n                                this.setCharacterCounter_(this.getValue().length);\r\n                            }\r\n                        };\r\n                        /**\r\n                         * Opens/closes the notched outline.\r\n                         */\r\n                        MDCTextFieldFoundation.prototype.notchOutline = function(openNotch) {\r\n                            if (!this.adapter.hasOutline()) {\r\n                                return;\r\n                            }\r\n                            if (openNotch) {\r\n                                var labelWidth = this.adapter.getLabelWidth() * constants_1.numbers.LABEL_SCALE;\r\n                                this.adapter.notchOutline(labelWidth);\r\n                            } else {\r\n                                this.adapter.closeOutline();\r\n                            }\r\n                        };\r\n                        /**\r\n                         * Activates the text field focus state.\r\n                         */\r\n                        MDCTextFieldFoundation.prototype.activateFocus = function() {\r\n                            this.isFocused_ = true;\r\n                            this.styleFocused_(this.isFocused_);\r\n                            this.adapter.activateLineRipple();\r\n                            if (this.adapter.hasLabel()) {\r\n                                this.notchOutline(this.shouldFloat);\r\n                                this.adapter.floatLabel(this.shouldFloat);\r\n                                this.styleFloating_(this.shouldFloat);\r\n                                this.adapter.shakeLabel(this.shouldShake);\r\n                            }\r\n                            if (this.helperText_) {\r\n                                this.helperText_.showToScreenReader();\r\n                            }\r\n                        };\r\n                        /**\r\n                         * Sets the line ripple's transform origin, so that the line ripple activate\r\n                         * animation will animate out from the user's click location.\r\n                         */\r\n                        MDCTextFieldFoundation.prototype.setTransformOrigin = function(evt) {\r\n                            if (this.isDisabled() || this.adapter.hasOutline()) {\r\n                                return;\r\n                            }\r\n                            var touches = evt.touches;\r\n                            var targetEvent = touches ? touches[0] : evt;\r\n                            var targetClientRect = targetEvent.target.getBoundingClientRect();\r\n                            var normalizedX = targetEvent.clientX - targetClientRect.left;\r\n                            this.adapter.setLineRippleTransformOrigin(normalizedX);\r\n                        };\r\n                        /**\r\n                         * Handles input change of text input and text area.\r\n                         */\r\n                        MDCTextFieldFoundation.prototype.handleInput = function() {\r\n                            this.autoCompleteFocus();\r\n                            this.setCharacterCounter_(this.getValue().length);\r\n                        };\r\n                        /**\r\n                         * Activates the Text Field's focus state in cases when the input value\r\n                         * changes without user input (e.g. programmatically).\r\n                         */\r\n                        MDCTextFieldFoundation.prototype.autoCompleteFocus = function() {\r\n                            if (!this.receivedUserInput_) {\r\n                                this.activateFocus();\r\n                            }\r\n                        };\r\n                        /**\r\n                         * Deactivates the Text Field's focus state.\r\n                         */\r\n                        MDCTextFieldFoundation.prototype.deactivateFocus = function() {\r\n                            this.isFocused_ = false;\r\n                            this.adapter.deactivateLineRipple();\r\n                            var isValid = this.isValid();\r\n                            this.styleValidity_(isValid);\r\n                            this.styleFocused_(this.isFocused_);\r\n                            if (this.adapter.hasLabel()) {\r\n                                this.notchOutline(this.shouldFloat);\r\n                                this.adapter.floatLabel(this.shouldFloat);\r\n                                this.styleFloating_(this.shouldFloat);\r\n                                this.adapter.shakeLabel(this.shouldShake);\r\n                            }\r\n                            if (!this.shouldFloat) {\r\n                                this.receivedUserInput_ = false;\r\n                            }\r\n                        };\r\n                        MDCTextFieldFoundation.prototype.getValue = function() {\r\n                            return this.getNativeInput_().value;\r\n                        };\r\n                        /**\r\n                         * @param value The value to set on the input Element.\r\n                         */\r\n                        MDCTextFieldFoundation.prototype.setValue = function(value) {\r\n                            // Prevent Safari from moving the caret to the end of the input when the value has not changed.\r\n                            if (this.getValue() !== value) {\r\n                                this.getNativeInput_().value = value;\r\n                            }\r\n                            this.setCharacterCounter_(value.length);\r\n                            var isValid = this.isValid();\r\n                            this.styleValidity_(isValid);\r\n                            if (this.adapter.hasLabel()) {\r\n                                this.notchOutline(this.shouldFloat);\r\n                                this.adapter.floatLabel(this.shouldFloat);\r\n                                this.styleFloating_(this.shouldFloat);\r\n                                this.adapter.shakeLabel(this.shouldShake);\r\n                            }\r\n                        };\r\n                        /**\r\n                         * @return The custom validity state, if set; otherwise, the result of a native validity check.\r\n                         */\r\n                        MDCTextFieldFoundation.prototype.isValid = function() {\r\n                            return this.useNativeValidation_ ? this.isNativeInputValid_() : this.isValid_;\r\n                        };\r\n                        /**\r\n                         * @param isValid Sets the custom validity state of the Text Field.\r\n                         */\r\n                        MDCTextFieldFoundation.prototype.setValid = function(isValid) {\r\n                            this.isValid_ = isValid;\r\n                            this.styleValidity_(isValid);\r\n                            var shouldShake = !isValid && !this.isFocused_ && !!this.getValue();\r\n                            if (this.adapter.hasLabel()) {\r\n                                this.adapter.shakeLabel(shouldShake);\r\n                            }\r\n                        };\r\n                        /**\r\n                         * Enables or disables the use of native validation. Use this for custom validation.\r\n                         * @param useNativeValidation Set this to false to ignore native input validation.\r\n                         */\r\n                        MDCTextFieldFoundation.prototype.setUseNativeValidation = function(useNativeValidation) {\r\n                            this.useNativeValidation_ = useNativeValidation;\r\n                        };\r\n                        MDCTextFieldFoundation.prototype.isDisabled = function() {\r\n                            return this.getNativeInput_().disabled;\r\n                        };\r\n                        /**\r\n                         * @param disabled Sets the text-field disabled or enabled.\r\n                         */\r\n                        MDCTextFieldFoundation.prototype.setDisabled = function(disabled) {\r\n                            this.getNativeInput_().disabled = disabled;\r\n                            this.styleDisabled_(disabled);\r\n                        };\r\n                        /**\r\n                         * @param content Sets the content of the helper text.\r\n                         */\r\n                        MDCTextFieldFoundation.prototype.setHelperTextContent = function(content) {\r\n                            if (this.helperText_) {\r\n                                this.helperText_.setContent(content);\r\n                            }\r\n                        };\r\n                        /**\r\n                         * Sets the aria label of the leading icon.\r\n                         */\r\n                        MDCTextFieldFoundation.prototype.setLeadingIconAriaLabel = function(label) {\r\n                            if (this.leadingIcon_) {\r\n                                this.leadingIcon_.setAriaLabel(label);\r\n                            }\r\n                        };\r\n                        /**\r\n                         * Sets the text content of the leading icon.\r\n                         */\r\n                        MDCTextFieldFoundation.prototype.setLeadingIconContent = function(content) {\r\n                            if (this.leadingIcon_) {\r\n                                this.leadingIcon_.setContent(content);\r\n                            }\r\n                        };\r\n                        /**\r\n                         * Sets the aria label of the trailing icon.\r\n                         */\r\n                        MDCTextFieldFoundation.prototype.setTrailingIconAriaLabel = function(label) {\r\n                            if (this.trailingIcon_) {\r\n                                this.trailingIcon_.setAriaLabel(label);\r\n                            }\r\n                        };\r\n                        /**\r\n                         * Sets the text content of the trailing icon.\r\n                         */\r\n                        MDCTextFieldFoundation.prototype.setTrailingIconContent = function(content) {\r\n                            if (this.trailingIcon_) {\r\n                                this.trailingIcon_.setContent(content);\r\n                            }\r\n                        };\r\n                        /**\r\n                         * Sets character counter values that shows characters used and the total character limit.\r\n                         */\r\n                        MDCTextFieldFoundation.prototype.setCharacterCounter_ = function(currentLength) {\r\n                            if (!this.characterCounter_) {\r\n                                return;\r\n                            }\r\n                            var maxLength = this.getNativeInput_().maxLength;\r\n                            if (maxLength === -1) {\r\n                                throw new Error('MDCTextFieldFoundation: Expected maxlength html property on text input or textarea.');\r\n                            }\r\n                            this.characterCounter_.setCounterValue(currentLength, maxLength);\r\n                        };\r\n                        /**\r\n                         * @return True if the Text Field input fails in converting the user-supplied value.\r\n                         */\r\n                        MDCTextFieldFoundation.prototype.isBadInput_ = function() {\r\n                            // The badInput property is not supported in IE 11 ?.\r\n                            return this.getNativeInput_().validity.badInput || false;\r\n                        };\r\n                        /**\r\n                         * @return The result of native validity checking (ValidityState.valid).\r\n                         */\r\n                        MDCTextFieldFoundation.prototype.isNativeInputValid_ = function() {\r\n                            return this.getNativeInput_().validity.valid;\r\n                        };\r\n                        /**\r\n                         * Styles the component based on the validity state.\r\n                         */\r\n                        MDCTextFieldFoundation.prototype.styleValidity_ = function(isValid) {\r\n                            var INVALID = MDCTextFieldFoundation.cssClasses.INVALID;\r\n                            if (isValid) {\r\n                                this.adapter.removeClass(INVALID);\r\n                            } else {\r\n                                this.adapter.addClass(INVALID);\r\n                            }\r\n                            if (this.helperText_) {\r\n                                this.helperText_.setValidity(isValid);\r\n                            }\r\n                        };\r\n                        /**\r\n                         * Styles the component based on the focused state.\r\n                         */\r\n                        MDCTextFieldFoundation.prototype.styleFocused_ = function(isFocused) {\r\n                            var FOCUSED = MDCTextFieldFoundation.cssClasses.FOCUSED;\r\n                            if (isFocused) {\r\n                                this.adapter.addClass(FOCUSED);\r\n                            } else {\r\n                                this.adapter.removeClass(FOCUSED);\r\n                            }\r\n                        };\r\n                        /**\r\n                         * Styles the component based on the disabled state.\r\n                         */\r\n                        MDCTextFieldFoundation.prototype.styleDisabled_ = function(isDisabled) {\r\n                            var _a = MDCTextFieldFoundation.cssClasses,\r\n                                    DISABLED = _a.DISABLED,\r\n                                    INVALID = _a.INVALID;\r\n                            if (isDisabled) {\r\n                                this.adapter.addClass(DISABLED);\r\n                                this.adapter.removeClass(INVALID);\r\n                            } else {\r\n                                this.adapter.removeClass(DISABLED);\r\n                            }\r\n                            if (this.leadingIcon_) {\r\n                                this.leadingIcon_.setDisabled(isDisabled);\r\n                            }\r\n                            if (this.trailingIcon_) {\r\n                                this.trailingIcon_.setDisabled(isDisabled);\r\n                            }\r\n                        };\r\n                        /**\r\n                         * Styles the component based on the label floating state.\r\n                         */\r\n                        MDCTextFieldFoundation.prototype.styleFloating_ = function(isFloating) {\r\n                            var LABEL_FLOATING = MDCTextFieldFoundation.cssClasses.LABEL_FLOATING;\r\n                            if (isFloating) {\r\n                                this.adapter.addClass(LABEL_FLOATING);\r\n                            } else {\r\n                                this.adapter.removeClass(LABEL_FLOATING);\r\n                            }\r\n                        };\r\n                        /**\r\n                         * @return The native text input element from the host environment, or an object with the same shape for unit tests.\r\n                         */\r\n                        MDCTextFieldFoundation.prototype.getNativeInput_ = function() {\r\n                            // this.adapter may be undefined in foundation unit tests. This happens when testdouble is creating a mock object\r\n                            // and invokes the shouldShake/shouldFloat getters (which in turn call getValue(), which calls this method) before\r\n                            // init() has been called from the MDCTextField constructor. To work around that issue, we return a dummy object.\r\n                            var nativeInput = this.adapter ? this.adapter.getNativeInput() : null;\r\n                            return nativeInput || {\r\n                                disabled: false,\r\n                                maxLength: -1,\r\n                                required: false,\r\n                                type: 'input',\r\n                                validity: {\r\n                                    badInput: false,\r\n                                    valid: true\r\n                                },\r\n                                value: ''\r\n                            };\r\n                        };\r\n                        return MDCTextFieldFoundation;\r\n                    }(foundation_1.MDCFoundation);\r\n                    exports.MDCTextFieldFoundation = MDCTextFieldFoundation;\r\n// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier.\r\n                    exports.default = MDCTextFieldFoundation;\r\n\r\n                    /***/\r\n                }),\r\n\r\n                          /***/ \"./packages/mdc-textfield/helper-text/component.ts\":\r\n                /*!*********************************************************!*\\\r\n  !*** ./packages/mdc-textfield/helper-text/component.ts ***!\r\n  \\*********************************************************/\r\n                /*! no static exports found */\r\n                /***/ (function(module, exports, __webpack_require__) {\r\n\r\n                    \"use strict\";\r\n\r\n                    /**\r\n                     * @license\r\n                     * Copyright 2017 Google Inc.\r\n                     *\r\n                     * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n                     * of this software and associated documentation files (the \"Software\"), to deal\r\n                     * in the Software without restriction, including without limitation the rights\r\n                     * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n                     * copies of the Software, and to permit persons to whom the Software is\r\n                     * furnished to do so, subject to the following conditions:\r\n                     *\r\n                     * The above copyright notice and this permission notice shall be included in\r\n                     * all copies or substantial portions of the Software.\r\n                     *\r\n                     * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n                     * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n                     * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n                     * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n                     * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n                     * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n                     * THE SOFTWARE.\r\n                     */\r\n\r\n                    var __extends = this && this.__extends || function() {\r\n                        var _extendStatics = function extendStatics(d, b) {\r\n                            _extendStatics = Object.setPrototypeOf || {__proto__: []} instanceof Array && function(d, b) {\r\n                                d.__proto__ = b;\r\n                            } || function(d, b) {\r\n                                for (var p in b) {\r\n                                    if (b.hasOwnProperty(p)) {\r\n                                        d[p] = b[p];\r\n                                    }\r\n                                }\r\n                            };\r\n                            return _extendStatics(d, b);\r\n                        };\r\n                        return function(d, b) {\r\n                            _extendStatics(d, b);\r\n\r\n                            function __() {\r\n                                this.constructor = d;\r\n                            }\r\n\r\n                            d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n                        };\r\n                    }();\r\n                    Object.defineProperty(exports, \"__esModule\", {value: true});\r\n                    var component_1 = __webpack_require__(/*! @material/base/component */ \"./packages/mdc-base/component.ts\");\r\n                    var foundation_1 = __webpack_require__(/*! ./foundation */ \"./packages/mdc-textfield/helper-text/foundation.ts\");\r\n                    var MDCTextFieldHelperText = /** @class */function(_super) {\r\n                        __extends(MDCTextFieldHelperText, _super);\r\n\r\n                        function MDCTextFieldHelperText() {\r\n                            return _super !== null && _super.apply(this, arguments) || this;\r\n                        }\r\n\r\n                        MDCTextFieldHelperText.attachTo = function(root) {\r\n                            return new MDCTextFieldHelperText(root);\r\n                        };\r\n                        Object.defineProperty(MDCTextFieldHelperText.prototype, \"foundationForTextField\", {\r\n                            // Provided for access by MDCTextField component\r\n                            get: function get() {\r\n                                return this.foundation;\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        MDCTextFieldHelperText.prototype.getDefaultFoundation = function() {\r\n                            var _this = this;\r\n                            // DO NOT INLINE this variable. For backward compatibility, foundations take a Partial<MDCFooAdapter>.\r\n                            // To ensure we don't accidentally omit any methods, we need a separate, strongly typed adapter variable.\r\n                            // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface.\r\n                            var adapter = {\r\n                                addClass: function addClass(className) {\r\n                                    return _this.root.classList.add(className);\r\n                                },\r\n                                removeClass: function removeClass(className) {\r\n                                    return _this.root.classList.remove(className);\r\n                                },\r\n                                hasClass: function hasClass(className) {\r\n                                    return _this.root.classList.contains(className);\r\n                                },\r\n                                setAttr: function setAttr(attr, value) {\r\n                                    return _this.root.setAttribute(attr, value);\r\n                                },\r\n                                removeAttr: function removeAttr(attr) {\r\n                                    return _this.root.removeAttribute(attr);\r\n                                },\r\n                                setContent: function setContent(content) {\r\n                                    _this.root.textContent = content;\r\n                                }\r\n                            };\r\n                            // tslint:enable:object-literal-sort-keys\r\n                            return new foundation_1.MDCTextFieldHelperTextFoundation(adapter);\r\n                        };\r\n                        return MDCTextFieldHelperText;\r\n                    }(component_1.MDCComponent);\r\n                    exports.MDCTextFieldHelperText = MDCTextFieldHelperText;\r\n\r\n                    /***/\r\n                }),\r\n\r\n                          /***/ \"./packages/mdc-textfield/helper-text/constants.ts\":\r\n                /*!*********************************************************!*\\\r\n  !*** ./packages/mdc-textfield/helper-text/constants.ts ***!\r\n  \\*********************************************************/\r\n                /*! no static exports found */\r\n                /***/ (function(module, exports, __webpack_require__) {\r\n\r\n                    \"use strict\";\r\n\r\n                    /**\r\n                     * @license\r\n                     * Copyright 2016 Google Inc.\r\n                     *\r\n                     * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n                     * of this software and associated documentation files (the \"Software\"), to deal\r\n                     * in the Software without restriction, including without limitation the rights\r\n                     * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n                     * copies of the Software, and to permit persons to whom the Software is\r\n                     * furnished to do so, subject to the following conditions:\r\n                     *\r\n                     * The above copyright notice and this permission notice shall be included in\r\n                     * all copies or substantial portions of the Software.\r\n                     *\r\n                     * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n                     * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n                     * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n                     * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n                     * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n                     * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n                     * THE SOFTWARE.\r\n                     */\r\n\r\n                    Object.defineProperty(exports, \"__esModule\", {value: true});\r\n                    var cssClasses = {\r\n                        HELPER_TEXT_PERSISTENT: 'mdc-text-field-helper-text--persistent',\r\n                        HELPER_TEXT_VALIDATION_MSG: 'mdc-text-field-helper-text--validation-msg',\r\n                        ROOT: 'mdc-text-field-helper-text'\r\n                    };\r\n                    exports.cssClasses = cssClasses;\r\n                    var strings = {\r\n                        ARIA_HIDDEN: 'aria-hidden',\r\n                        ROLE: 'role',\r\n                        ROOT_SELECTOR: \".\" + cssClasses.ROOT\r\n                    };\r\n                    exports.strings = strings;\r\n\r\n                    /***/\r\n                }),\r\n\r\n                          /***/ \"./packages/mdc-textfield/helper-text/foundation.ts\":\r\n                /*!**********************************************************!*\\\r\n  !*** ./packages/mdc-textfield/helper-text/foundation.ts ***!\r\n  \\**********************************************************/\r\n                /*! no static exports found */\r\n                /***/ (function(module, exports, __webpack_require__) {\r\n\r\n                    \"use strict\";\r\n\r\n                    /**\r\n                     * @license\r\n                     * Copyright 2017 Google Inc.\r\n                     *\r\n                     * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n                     * of this software and associated documentation files (the \"Software\"), to deal\r\n                     * in the Software without restriction, including without limitation the rights\r\n                     * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n                     * copies of the Software, and to permit persons to whom the Software is\r\n                     * furnished to do so, subject to the following conditions:\r\n                     *\r\n                     * The above copyright notice and this permission notice shall be included in\r\n                     * all copies or substantial portions of the Software.\r\n                     *\r\n                     * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n                     * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n                     * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n                     * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n                     * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n                     * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n                     * THE SOFTWARE.\r\n                     */\r\n\r\n                    var __extends = this && this.__extends || function() {\r\n                        var _extendStatics = function extendStatics(d, b) {\r\n                            _extendStatics = Object.setPrototypeOf || {__proto__: []} instanceof Array && function(d, b) {\r\n                                d.__proto__ = b;\r\n                            } || function(d, b) {\r\n                                for (var p in b) {\r\n                                    if (b.hasOwnProperty(p)) {\r\n                                        d[p] = b[p];\r\n                                    }\r\n                                }\r\n                            };\r\n                            return _extendStatics(d, b);\r\n                        };\r\n                        return function(d, b) {\r\n                            _extendStatics(d, b);\r\n\r\n                            function __() {\r\n                                this.constructor = d;\r\n                            }\r\n\r\n                            d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n                        };\r\n                    }();\r\n                    var __assign = this && this.__assign || function() {\r\n                        __assign = Object.assign || function(t) {\r\n                            for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n                                s = arguments[i];\r\n                                for (var p in s) {\r\n                                    if (Object.prototype.hasOwnProperty.call(s, p)) {\r\n                                        t[p] = s[p];\r\n                                    }\r\n                                }\r\n                            }\r\n                            return t;\r\n                        };\r\n                        return __assign.apply(this, arguments);\r\n                    };\r\n                    Object.defineProperty(exports, \"__esModule\", {value: true});\r\n                    var foundation_1 = __webpack_require__(/*! @material/base/foundation */ \"./packages/mdc-base/foundation.ts\");\r\n                    var constants_1 = __webpack_require__(/*! ./constants */ \"./packages/mdc-textfield/helper-text/constants.ts\");\r\n                    var MDCTextFieldHelperTextFoundation = /** @class */function(_super) {\r\n                        __extends(MDCTextFieldHelperTextFoundation, _super);\r\n\r\n                        function MDCTextFieldHelperTextFoundation(adapter) {\r\n                            return _super.call(this, __assign(__assign({}, MDCTextFieldHelperTextFoundation.defaultAdapter), adapter)) || this;\r\n                        }\r\n\r\n                        Object.defineProperty(MDCTextFieldHelperTextFoundation, \"cssClasses\", {\r\n                            get: function get() {\r\n                                return constants_1.cssClasses;\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCTextFieldHelperTextFoundation, \"strings\", {\r\n                            get: function get() {\r\n                                return constants_1.strings;\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCTextFieldHelperTextFoundation, \"defaultAdapter\", {\r\n                            /**\r\n                             * See {@link MDCTextFieldHelperTextAdapter} for typing information on parameters and return types.\r\n                             */\r\n                            get: function get() {\r\n                                // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface.\r\n                                return {\r\n                                    addClass: function addClass() {\r\n                                        return undefined;\r\n                                    },\r\n                                    removeClass: function removeClass() {\r\n                                        return undefined;\r\n                                    },\r\n                                    hasClass: function hasClass() {\r\n                                        return false;\r\n                                    },\r\n                                    setAttr: function setAttr() {\r\n                                        return undefined;\r\n                                    },\r\n                                    removeAttr: function removeAttr() {\r\n                                        return undefined;\r\n                                    },\r\n                                    setContent: function setContent() {\r\n                                        return undefined;\r\n                                    }\r\n                                };\r\n                                // tslint:enable:object-literal-sort-keys\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        /**\r\n                         * Sets the content of the helper text field.\r\n                         */\r\n                        MDCTextFieldHelperTextFoundation.prototype.setContent = function(content) {\r\n                            this.adapter.setContent(content);\r\n                        };\r\n                        /**\r\n                         * @param isPersistent Sets the persistency of the helper text.\r\n                         */\r\n                        MDCTextFieldHelperTextFoundation.prototype.setPersistent = function(isPersistent) {\r\n                            if (isPersistent) {\r\n                                this.adapter.addClass(constants_1.cssClasses.HELPER_TEXT_PERSISTENT);\r\n                            } else {\r\n                                this.adapter.removeClass(constants_1.cssClasses.HELPER_TEXT_PERSISTENT);\r\n                            }\r\n                        };\r\n                        /**\r\n                         * @param isValidation True to make the helper text act as an error validation message.\r\n                         */\r\n                        MDCTextFieldHelperTextFoundation.prototype.setValidation = function(isValidation) {\r\n                            if (isValidation) {\r\n                                this.adapter.addClass(constants_1.cssClasses.HELPER_TEXT_VALIDATION_MSG);\r\n                            } else {\r\n                                this.adapter.removeClass(constants_1.cssClasses.HELPER_TEXT_VALIDATION_MSG);\r\n                            }\r\n                        };\r\n                        /**\r\n                         * Makes the helper text visible to the screen reader.\r\n                         */\r\n                        MDCTextFieldHelperTextFoundation.prototype.showToScreenReader = function() {\r\n                            this.adapter.removeAttr(constants_1.strings.ARIA_HIDDEN);\r\n                        };\r\n                        /**\r\n                         * Sets the validity of the helper text based on the input validity.\r\n                         */\r\n                        MDCTextFieldHelperTextFoundation.prototype.setValidity = function(inputIsValid) {\r\n                            var helperTextIsPersistent = this.adapter.hasClass(constants_1.cssClasses.HELPER_TEXT_PERSISTENT);\r\n                            var helperTextIsValidationMsg = this.adapter.hasClass(constants_1.cssClasses.HELPER_TEXT_VALIDATION_MSG);\r\n                            var validationMsgNeedsDisplay = helperTextIsValidationMsg && !inputIsValid;\r\n                            if (validationMsgNeedsDisplay) {\r\n                                this.adapter.setAttr(constants_1.strings.ROLE, 'alert');\r\n                            } else {\r\n                                this.adapter.removeAttr(constants_1.strings.ROLE);\r\n                            }\r\n                            if (!helperTextIsPersistent && !validationMsgNeedsDisplay) {\r\n                                this.hide_();\r\n                            }\r\n                        };\r\n                        /**\r\n                         * Hides the help text from screen readers.\r\n                         */\r\n                        MDCTextFieldHelperTextFoundation.prototype.hide_ = function() {\r\n                            this.adapter.setAttr(constants_1.strings.ARIA_HIDDEN, 'true');\r\n                        };\r\n                        return MDCTextFieldHelperTextFoundation;\r\n                    }(foundation_1.MDCFoundation);\r\n                    exports.MDCTextFieldHelperTextFoundation = MDCTextFieldHelperTextFoundation;\r\n// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier.\r\n                    exports.default = MDCTextFieldHelperTextFoundation;\r\n\r\n                    /***/\r\n                }),\r\n\r\n                          /***/ \"./packages/mdc-textfield/helper-text/index.ts\":\r\n                /*!*****************************************************!*\\\r\n  !*** ./packages/mdc-textfield/helper-text/index.ts ***!\r\n  \\*****************************************************/\r\n                /*! no static exports found */\r\n                /***/ (function(module, exports, __webpack_require__) {\r\n\r\n                    \"use strict\";\r\n\r\n                    /**\r\n                     * @license\r\n                     * Copyright 2019 Google Inc.\r\n                     *\r\n                     * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n                     * of this software and associated documentation files (the \"Software\"), to deal\r\n                     * in the Software without restriction, including without limitation the rights\r\n                     * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n                     * copies of the Software, and to permit persons to whom the Software is\r\n                     * furnished to do so, subject to the following conditions:\r\n                     *\r\n                     * The above copyright notice and this permission notice shall be included in\r\n                     * all copies or substantial portions of the Software.\r\n                     *\r\n                     * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n                     * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n                     * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n                     * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n                     * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n                     * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n                     * THE SOFTWARE.\r\n                     */\r\n\r\n                    function __export(m) {\r\n                        for (var p in m) {\r\n                            if (!exports.hasOwnProperty(p)) {\r\n                                exports[p] = m[p];\r\n                            }\r\n                        }\r\n                    }\r\n\r\n                    Object.defineProperty(exports, \"__esModule\", {value: true});\r\n                    __export(__webpack_require__(/*! ./component */ \"./packages/mdc-textfield/helper-text/component.ts\"));\r\n                    __export(__webpack_require__(/*! ./foundation */ \"./packages/mdc-textfield/helper-text/foundation.ts\"));\r\n                    var constants_1 = __webpack_require__(/*! ./constants */ \"./packages/mdc-textfield/helper-text/constants.ts\");\r\n                    exports.helperTextCssClasses = constants_1.cssClasses;\r\n                    exports.helperTextStrings = constants_1.strings;\r\n\r\n                    /***/\r\n                }),\r\n\r\n                          /***/ \"./packages/mdc-textfield/icon/component.ts\":\r\n                /*!**************************************************!*\\\r\n  !*** ./packages/mdc-textfield/icon/component.ts ***!\r\n  \\**************************************************/\r\n                /*! no static exports found */\r\n                /***/ (function(module, exports, __webpack_require__) {\r\n\r\n                    \"use strict\";\r\n\r\n                    /**\r\n                     * @license\r\n                     * Copyright 2017 Google Inc.\r\n                     *\r\n                     * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n                     * of this software and associated documentation files (the \"Software\"), to deal\r\n                     * in the Software without restriction, including without limitation the rights\r\n                     * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n                     * copies of the Software, and to permit persons to whom the Software is\r\n                     * furnished to do so, subject to the following conditions:\r\n                     *\r\n                     * The above copyright notice and this permission notice shall be included in\r\n                     * all copies or substantial portions of the Software.\r\n                     *\r\n                     * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n                     * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n                     * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n                     * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n                     * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n                     * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n                     * THE SOFTWARE.\r\n                     */\r\n\r\n                    var __extends = this && this.__extends || function() {\r\n                        var _extendStatics = function extendStatics(d, b) {\r\n                            _extendStatics = Object.setPrototypeOf || {__proto__: []} instanceof Array && function(d, b) {\r\n                                d.__proto__ = b;\r\n                            } || function(d, b) {\r\n                                for (var p in b) {\r\n                                    if (b.hasOwnProperty(p)) {\r\n                                        d[p] = b[p];\r\n                                    }\r\n                                }\r\n                            };\r\n                            return _extendStatics(d, b);\r\n                        };\r\n                        return function(d, b) {\r\n                            _extendStatics(d, b);\r\n\r\n                            function __() {\r\n                                this.constructor = d;\r\n                            }\r\n\r\n                            d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n                        };\r\n                    }();\r\n                    Object.defineProperty(exports, \"__esModule\", {value: true});\r\n                    var component_1 = __webpack_require__(/*! @material/base/component */ \"./packages/mdc-base/component.ts\");\r\n                    var foundation_1 = __webpack_require__(/*! ./foundation */ \"./packages/mdc-textfield/icon/foundation.ts\");\r\n                    var MDCTextFieldIcon = /** @class */function(_super) {\r\n                        __extends(MDCTextFieldIcon, _super);\r\n\r\n                        function MDCTextFieldIcon() {\r\n                            return _super !== null && _super.apply(this, arguments) || this;\r\n                        }\r\n\r\n                        MDCTextFieldIcon.attachTo = function(root) {\r\n                            return new MDCTextFieldIcon(root);\r\n                        };\r\n                        Object.defineProperty(MDCTextFieldIcon.prototype, \"foundationForTextField\", {\r\n                            // Provided for access by MDCTextField component\r\n                            get: function get() {\r\n                                return this.foundation;\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        MDCTextFieldIcon.prototype.getDefaultFoundation = function() {\r\n                            var _this = this;\r\n                            // DO NOT INLINE this variable. For backward compatibility, foundations take a Partial<MDCFooAdapter>.\r\n                            // To ensure we don't accidentally omit any methods, we need a separate, strongly typed adapter variable.\r\n                            // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface.\r\n                            var adapter = {\r\n                                getAttr: function getAttr(attr) {\r\n                                    return _this.root.getAttribute(attr);\r\n                                },\r\n                                setAttr: function setAttr(attr, value) {\r\n                                    return _this.root.setAttribute(attr, value);\r\n                                },\r\n                                removeAttr: function removeAttr(attr) {\r\n                                    return _this.root.removeAttribute(attr);\r\n                                },\r\n                                setContent: function setContent(content) {\r\n                                    _this.root.textContent = content;\r\n                                },\r\n                                registerInteractionHandler: function registerInteractionHandler(evtType, handler) {\r\n                                    return _this.listen(evtType, handler);\r\n                                },\r\n                                deregisterInteractionHandler: function deregisterInteractionHandler(evtType, handler) {\r\n                                    return _this.unlisten(evtType, handler);\r\n                                },\r\n                                notifyIconAction: function notifyIconAction() {\r\n                                    return _this.emit(foundation_1.MDCTextFieldIconFoundation.strings.ICON_EVENT, {} /* evtData */, true /* shouldBubble */);\r\n                                }\r\n                            };\r\n                            // tslint:enable:object-literal-sort-keys\r\n                            return new foundation_1.MDCTextFieldIconFoundation(adapter);\r\n                        };\r\n                        return MDCTextFieldIcon;\r\n                    }(component_1.MDCComponent);\r\n                    exports.MDCTextFieldIcon = MDCTextFieldIcon;\r\n\r\n                    /***/\r\n                }),\r\n\r\n                          /***/ \"./packages/mdc-textfield/icon/constants.ts\":\r\n                /*!**************************************************!*\\\r\n  !*** ./packages/mdc-textfield/icon/constants.ts ***!\r\n  \\**************************************************/\r\n                /*! no static exports found */\r\n                /***/ (function(module, exports, __webpack_require__) {\r\n\r\n                    \"use strict\";\r\n\r\n                    /**\r\n                     * @license\r\n                     * Copyright 2016 Google Inc.\r\n                     *\r\n                     * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n                     * of this software and associated documentation files (the \"Software\"), to deal\r\n                     * in the Software without restriction, including without limitation the rights\r\n                     * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n                     * copies of the Software, and to permit persons to whom the Software is\r\n                     * furnished to do so, subject to the following conditions:\r\n                     *\r\n                     * The above copyright notice and this permission notice shall be included in\r\n                     * all copies or substantial portions of the Software.\r\n                     *\r\n                     * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n                     * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n                     * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n                     * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n                     * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n                     * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n                     * THE SOFTWARE.\r\n                     */\r\n\r\n                    Object.defineProperty(exports, \"__esModule\", {value: true});\r\n                    var strings = {\r\n                        ICON_EVENT: 'MDCTextField:icon',\r\n                        ICON_ROLE: 'button'\r\n                    };\r\n                    exports.strings = strings;\r\n                    var cssClasses = {\r\n                        ROOT: 'mdc-text-field__icon'\r\n                    };\r\n                    exports.cssClasses = cssClasses;\r\n\r\n                    /***/\r\n                }),\r\n\r\n                          /***/ \"./packages/mdc-textfield/icon/foundation.ts\":\r\n                /*!***************************************************!*\\\r\n  !*** ./packages/mdc-textfield/icon/foundation.ts ***!\r\n  \\***************************************************/\r\n                /*! no static exports found */\r\n                /***/ (function(module, exports, __webpack_require__) {\r\n\r\n                    \"use strict\";\r\n\r\n                    /**\r\n                     * @license\r\n                     * Copyright 2017 Google Inc.\r\n                     *\r\n                     * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n                     * of this software and associated documentation files (the \"Software\"), to deal\r\n                     * in the Software without restriction, including without limitation the rights\r\n                     * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n                     * copies of the Software, and to permit persons to whom the Software is\r\n                     * furnished to do so, subject to the following conditions:\r\n                     *\r\n                     * The above copyright notice and this permission notice shall be included in\r\n                     * all copies or substantial portions of the Software.\r\n                     *\r\n                     * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n                     * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n                     * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n                     * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n                     * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n                     * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n                     * THE SOFTWARE.\r\n                     */\r\n\r\n                    var __extends = this && this.__extends || function() {\r\n                        var _extendStatics = function extendStatics(d, b) {\r\n                            _extendStatics = Object.setPrototypeOf || {__proto__: []} instanceof Array && function(d, b) {\r\n                                d.__proto__ = b;\r\n                            } || function(d, b) {\r\n                                for (var p in b) {\r\n                                    if (b.hasOwnProperty(p)) {\r\n                                        d[p] = b[p];\r\n                                    }\r\n                                }\r\n                            };\r\n                            return _extendStatics(d, b);\r\n                        };\r\n                        return function(d, b) {\r\n                            _extendStatics(d, b);\r\n\r\n                            function __() {\r\n                                this.constructor = d;\r\n                            }\r\n\r\n                            d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n                        };\r\n                    }();\r\n                    var __assign = this && this.__assign || function() {\r\n                        __assign = Object.assign || function(t) {\r\n                            for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n                                s = arguments[i];\r\n                                for (var p in s) {\r\n                                    if (Object.prototype.hasOwnProperty.call(s, p)) {\r\n                                        t[p] = s[p];\r\n                                    }\r\n                                }\r\n                            }\r\n                            return t;\r\n                        };\r\n                        return __assign.apply(this, arguments);\r\n                    };\r\n                    Object.defineProperty(exports, \"__esModule\", {value: true});\r\n                    var foundation_1 = __webpack_require__(/*! @material/base/foundation */ \"./packages/mdc-base/foundation.ts\");\r\n                    var constants_1 = __webpack_require__(/*! ./constants */ \"./packages/mdc-textfield/icon/constants.ts\");\r\n                    var INTERACTION_EVENTS = ['click', 'keydown'];\r\n                    var MDCTextFieldIconFoundation = /** @class */function(_super) {\r\n                        __extends(MDCTextFieldIconFoundation, _super);\r\n\r\n                        function MDCTextFieldIconFoundation(adapter) {\r\n                            var _this = _super.call(this, __assign(__assign({}, MDCTextFieldIconFoundation.defaultAdapter), adapter)) || this;\r\n                            _this.savedTabIndex_ = null;\r\n                            _this.interactionHandler_ = function(evt) {\r\n                                return _this.handleInteraction(evt);\r\n                            };\r\n                            return _this;\r\n                        }\r\n\r\n                        Object.defineProperty(MDCTextFieldIconFoundation, \"strings\", {\r\n                            get: function get() {\r\n                                return constants_1.strings;\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCTextFieldIconFoundation, \"cssClasses\", {\r\n                            get: function get() {\r\n                                return constants_1.cssClasses;\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCTextFieldIconFoundation, \"defaultAdapter\", {\r\n                            /**\r\n                             * See {@link MDCTextFieldIconAdapter} for typing information on parameters and return types.\r\n                             */\r\n                            get: function get() {\r\n                                // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface.\r\n                                return {\r\n                                    getAttr: function getAttr() {\r\n                                        return null;\r\n                                    },\r\n                                    setAttr: function setAttr() {\r\n                                        return undefined;\r\n                                    },\r\n                                    removeAttr: function removeAttr() {\r\n                                        return undefined;\r\n                                    },\r\n                                    setContent: function setContent() {\r\n                                        return undefined;\r\n                                    },\r\n                                    registerInteractionHandler: function registerInteractionHandler() {\r\n                                        return undefined;\r\n                                    },\r\n                                    deregisterInteractionHandler: function deregisterInteractionHandler() {\r\n                                        return undefined;\r\n                                    },\r\n                                    notifyIconAction: function notifyIconAction() {\r\n                                        return undefined;\r\n                                    }\r\n                                };\r\n                                // tslint:enable:object-literal-sort-keys\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        MDCTextFieldIconFoundation.prototype.init = function() {\r\n                            var _this = this;\r\n                            this.savedTabIndex_ = this.adapter.getAttr('tabindex');\r\n                            INTERACTION_EVENTS.forEach(function(evtType) {\r\n                                _this.adapter.registerInteractionHandler(evtType, _this.interactionHandler_);\r\n                            });\r\n                        };\r\n                        MDCTextFieldIconFoundation.prototype.destroy = function() {\r\n                            var _this = this;\r\n                            INTERACTION_EVENTS.forEach(function(evtType) {\r\n                                _this.adapter.deregisterInteractionHandler(evtType, _this.interactionHandler_);\r\n                            });\r\n                        };\r\n                        MDCTextFieldIconFoundation.prototype.setDisabled = function(disabled) {\r\n                            if (!this.savedTabIndex_) {\r\n                                return;\r\n                            }\r\n                            if (disabled) {\r\n                                this.adapter.setAttr('tabindex', '-1');\r\n                                this.adapter.removeAttr('role');\r\n                            } else {\r\n                                this.adapter.setAttr('tabindex', this.savedTabIndex_);\r\n                                this.adapter.setAttr('role', constants_1.strings.ICON_ROLE);\r\n                            }\r\n                        };\r\n                        MDCTextFieldIconFoundation.prototype.setAriaLabel = function(label) {\r\n                            this.adapter.setAttr('aria-label', label);\r\n                        };\r\n                        MDCTextFieldIconFoundation.prototype.setContent = function(content) {\r\n                            this.adapter.setContent(content);\r\n                        };\r\n                        MDCTextFieldIconFoundation.prototype.handleInteraction = function(evt) {\r\n                            var isEnterKey = evt.key === 'Enter' || evt.keyCode === 13;\r\n                            if (evt.type === 'click' || isEnterKey) {\r\n                                evt.preventDefault(); // stop click from causing host label to focus\r\n                                // input\r\n                                this.adapter.notifyIconAction();\r\n                            }\r\n                        };\r\n                        return MDCTextFieldIconFoundation;\r\n                    }(foundation_1.MDCFoundation);\r\n                    exports.MDCTextFieldIconFoundation = MDCTextFieldIconFoundation;\r\n// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier.\r\n                    exports.default = MDCTextFieldIconFoundation;\r\n\r\n                    /***/\r\n                }),\r\n\r\n                          /***/ \"./packages/mdc-textfield/icon/index.ts\":\r\n                /*!**********************************************!*\\\r\n  !*** ./packages/mdc-textfield/icon/index.ts ***!\r\n  \\**********************************************/\r\n                /*! no static exports found */\r\n                /***/ (function(module, exports, __webpack_require__) {\r\n\r\n                    \"use strict\";\r\n\r\n                    /**\r\n                     * @license\r\n                     * Copyright 2019 Google Inc.\r\n                     *\r\n                     * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n                     * of this software and associated documentation files (the \"Software\"), to deal\r\n                     * in the Software without restriction, including without limitation the rights\r\n                     * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n                     * copies of the Software, and to permit persons to whom the Software is\r\n                     * furnished to do so, subject to the following conditions:\r\n                     *\r\n                     * The above copyright notice and this permission notice shall be included in\r\n                     * all copies or substantial portions of the Software.\r\n                     *\r\n                     * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n                     * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n                     * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n                     * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n                     * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n                     * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n                     * THE SOFTWARE.\r\n                     */\r\n\r\n                    function __export(m) {\r\n                        for (var p in m) {\r\n                            if (!exports.hasOwnProperty(p)) {\r\n                                exports[p] = m[p];\r\n                            }\r\n                        }\r\n                    }\r\n\r\n                    Object.defineProperty(exports, \"__esModule\", {value: true});\r\n                    __export(__webpack_require__(/*! ./component */ \"./packages/mdc-textfield/icon/component.ts\"));\r\n                    __export(__webpack_require__(/*! ./foundation */ \"./packages/mdc-textfield/icon/foundation.ts\"));\r\n                    var constants_1 = __webpack_require__(/*! ./constants */ \"./packages/mdc-textfield/icon/constants.ts\");\r\n                    exports.iconCssClasses = constants_1.cssClasses;\r\n                    exports.iconStrings = constants_1.strings;\r\n\r\n                    /***/\r\n                }),\r\n\r\n                          /***/ \"./packages/mdc-textfield/index.ts\":\r\n                /*!*****************************************!*\\\r\n  !*** ./packages/mdc-textfield/index.ts ***!\r\n  \\*****************************************/\r\n                /*! no static exports found */\r\n                /***/ (function(module, exports, __webpack_require__) {\r\n\r\n                    \"use strict\";\r\n\r\n                    /**\r\n                     * @license\r\n                     * Copyright 2019 Google Inc.\r\n                     *\r\n                     * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n                     * of this software and associated documentation files (the \"Software\"), to deal\r\n                     * in the Software without restriction, including without limitation the rights\r\n                     * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n                     * copies of the Software, and to permit persons to whom the Software is\r\n                     * furnished to do so, subject to the following conditions:\r\n                     *\r\n                     * The above copyright notice and this permission notice shall be included in\r\n                     * all copies or substantial portions of the Software.\r\n                     *\r\n                     * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n                     * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n                     * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n                     * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n                     * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n                     * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n                     * THE SOFTWARE.\r\n                     */\r\n\r\n                    function __export(m) {\r\n                        for (var p in m) {\r\n                            if (!exports.hasOwnProperty(p)) {\r\n                                exports[p] = m[p];\r\n                            }\r\n                        }\r\n                    }\r\n\r\n                    Object.defineProperty(exports, \"__esModule\", {value: true});\r\n                    __export(__webpack_require__(/*! ./component */ \"./packages/mdc-textfield/component.ts\"));\r\n                    __export(__webpack_require__(/*! ./constants */ \"./packages/mdc-textfield/constants.ts\"));\r\n                    __export(__webpack_require__(/*! ./foundation */ \"./packages/mdc-textfield/foundation.ts\"));\r\n                    __export(__webpack_require__(/*! ./character-counter/index */ \"./packages/mdc-textfield/character-counter/index.ts\"));\r\n                    __export(__webpack_require__(/*! ./helper-text/index */ \"./packages/mdc-textfield/helper-text/index.ts\"));\r\n                    __export(__webpack_require__(/*! ./icon/index */ \"./packages/mdc-textfield/icon/index.ts\"));\r\n\r\n                    /***/\r\n                })\r\n\r\n                          /******/\r\n                      });\r\n});\r\n//# sourceMappingURL_not_in_use=mdc.textfield.js.map\n"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": -1,
          "_transferSize": 30337,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:09.558Z",
        "time": 168.0900000501424,
        "timings": {
          "blocked": 25.403000050500033,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 1.4020000000000001,
          "wait": 106.59499999923258,
          "receive": 34.69000000040978,
          "_blocked_queueing": 20.524000050500035,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_connectionId": "1726423",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "parser",
          "url": "https://ekat.festool.de/login/app?__bk_&__windowid=IRW3104379&__rid=FOE1787216989423",
          "lineNumber": 1
        },
        "_priority": "High",
        "_resourceType": "script",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/login/WEB-RES/js/inputmask.js_shop_7.26.1.5.js",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": ":authority",
              "value": "ekat.festool.de"
            },
            {
              "name": ":method",
              "value": "GET"
            },
            {
              "name": ":path",
              "value": "/login/WEB-RES/js/inputmask.js_shop_7.26.1.5.js"
            },
            {
              "name": ":scheme",
              "value": "https"
            },
            {
              "name": "accept",
              "value": "*/*"
            },
            {
              "name": "accept-encoding",
              "value": "gzip, deflate, br, zstd"
            },
            {
              "name": "accept-language",
              "value": "en-GB,en-US;q=0.9,en;q=0.8"
            },
            {
              "name": "if-modified-since",
              "value": "Thu, 20 Aug 2026 07:47:25 GMT"
            },
            {
              "name": "if-none-match",
              "value": "W/\"231439-1787216828298\""
            },
            {
              "name": "priority",
              "value": "u=1"
            },
            {
              "name": "referer",
              "value": "https://ekat.festool.de/login/app?__bk_&__windowid=IRW3104379&__rid=FOE1787216989423"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            },
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "sec-fetch-dest",
              "value": "script"
            },
            {
              "name": "sec-fetch-mode",
              "value": "no-cors"
            },
            {
              "name": "sec-fetch-site",
              "value": "same-origin"
            },
            {
              "name": "user-agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            }
          ],
          "queryString": [],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "cache-control",
              "value": "public"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "content-length",
              "value": "38025"
            },
            {
              "name": "content-type",
              "value": "text/javascript"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 09:09:49 GMT"
            },
            {
              "name": "etag",
              "value": "W/\"231439-1787216989610\""
            },
            {
              "name": "expires",
              "value": "Thu, 20 Aug 2026 09:11:49 GMT"
            },
            {
              "name": "last-modified",
              "value": "Thu, 20 Aug 2026 07:47:25 GMT"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "pragma",
              "value": "cache"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "x-robots-tag",
              "value": "noindex"
            }
          ],
          "cookies": [],
          "content": {
            "size": 231439,
            "mimeType": "text/javascript",
            "text": "/*!\r\n * dist/inputmask\r\n * https://github.com/RobinHerbots/Inputmask\r\n * Copyright (c) 2010 - 2020 Robin Herbots\r\n * Licensed under the MIT license\r\n * Version: 5.0.3\r\n */\r\n!function webpackUniversalModuleDefinition(root, factory) {\r\n    if (\"object\" == typeof exports && \"object\" == typeof module) {\r\n        module.exports = factory();\r\n    } else if (\"function\" == typeof define && define.amd) {\r\n        define([], factory);\r\n    } else {\r\n        var a = factory();\r\n        for (var i in a) {\r\n            (\"object\" == typeof exports ? exports : root)[i] = a[i];\r\n        }\r\n    }\r\n}(window, function() {\r\n    return modules = [function(module) {\r\n        module.exports = JSON.parse('{\"BACKSPACE\":8,\"BACKSPACE_SAFARI\":127,\"DELETE\":46,\"DOWN\":40,\"END\":35,\"ENTER\":13,\"ESCAPE\":27,\"HOME\":36,\"INSERT\":45,\"LEFT\":37,\"PAGE_DOWN\":34,\"PAGE_UP\":33,\"RIGHT\":39,\"SPACE\":32,\"TAB\":9,\"UP\":38,\"X\":88,\"CONTROL\":17}');\r\n    }, function(module, exports, __webpack_require__) {\r\n        \"use strict\";\r\n\r\n        function _typeof(obj) {\r\n            return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function _typeof(obj) {\r\n                return typeof obj;\r\n            } : function _typeof(obj) {\r\n                return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\r\n            }, _typeof(obj);\r\n        }\r\n\r\n        var $ = __webpack_require__(2), window = __webpack_require__(3), document = window.document,\r\n                generateMaskSet = __webpack_require__(4).generateMaskSet,\r\n                analyseMask = __webpack_require__(4).analyseMask, maskScope = __webpack_require__(7);\r\n\r\n        function Inputmask(alias, options, internal) {\r\n            if (!(this instanceof Inputmask)) {\r\n                return new Inputmask(alias, options, internal);\r\n            }\r\n            this.el = void 0, this.events = {}, this.maskset = void 0, this.refreshValue = !1,\r\n            !0 !== internal && ($.isPlainObject(alias) ? options = alias : (options = options || {},\r\n            alias && (options.alias = alias)), this.opts = $.extend(!0, {}, this.defaults, options),\r\n                    this.noMasksCache = options && void 0 !== options.definitions, this.userOptions = options || {},\r\n                    resolveAlias(this.opts.alias, options, this.opts), this.isRTL = this.opts.numericInput);\r\n        }\r\n\r\n        function resolveAlias(aliasStr, options, opts) {\r\n            var aliasDefinition = Inputmask.prototype.aliases[aliasStr];\r\n            return aliasDefinition ? (aliasDefinition.alias && resolveAlias(aliasDefinition.alias, void 0, opts),\r\n                    $.extend(!0, opts, aliasDefinition), $.extend(!0, opts, options), !0) : (null === opts.mask && (opts.mask = aliasStr),\r\n                    !1);\r\n        }\r\n\r\n        function importAttributeOptions(npt, opts, userOptions, dataAttribute) {\r\n            function importOption(option, optionData) {\r\n                optionData = void 0 !== optionData ? optionData : npt.getAttribute(dataAttribute + \"-\" + option),\r\n                null !== optionData && (\"string\" == typeof optionData && (0 === option.indexOf(\"on\") ? optionData = window[optionData] : \"false\" === optionData ? optionData = !1 : \"true\" === optionData && (optionData = !0)),\r\n                        userOptions[option] = optionData);\r\n            }\r\n\r\n            if (!0 === opts.importDataAttributes) {\r\n                var attrOptions = npt.getAttribute(dataAttribute), option, dataoptions, optionData, p;\r\n                if (attrOptions && \"\" !== attrOptions && (attrOptions = attrOptions.replace(/'/g, '\"'),\r\n                        dataoptions = JSON.parse(\"{\" + attrOptions + \"}\")), dataoptions) {\r\n                    for (p in optionData = void 0,\r\n                            dataoptions) {\r\n                        if (\"alias\" === p.toLowerCase()) {\r\n                            optionData = dataoptions[p];\r\n                            break;\r\n                        }\r\n                    }\r\n                }\r\n                for (option in importOption(\"alias\", optionData), userOptions.alias && resolveAlias(userOptions.alias, userOptions, opts),\r\n                        opts) {\r\n                    if (dataoptions) {\r\n                        for (p in optionData = void 0, dataoptions) {\r\n                            if (p.toLowerCase() === option.toLowerCase()) {\r\n                                optionData = dataoptions[p];\r\n                                break;\r\n                            }\r\n                        }\r\n                    }\r\n                    importOption(option, optionData);\r\n                }\r\n            }\r\n            return $.extend(!0, opts, userOptions), \"rtl\" !== npt.dir && !opts.rightAlign || (npt.style.textAlign = \"right\"),\r\n            \"rtl\" !== npt.dir && !opts.numericInput || (npt.dir = \"ltr\", npt.removeAttribute(\"dir\"),\r\n                    opts.isRTL = !0), Object.keys(userOptions).length;\r\n        }\r\n\r\n        Inputmask.prototype = {\r\n            dataAttribute: \"data-inputmask\",\r\n            defaults: {\r\n                _maxTestPos: 500,\r\n                placeholder: \"_\",\r\n                optionalmarker: [\"[\", \"]\"],\r\n                quantifiermarker: [\"{\", \"}\"],\r\n                groupmarker: [\"(\", \")\"],\r\n                alternatormarker: \"|\",\r\n                escapeChar: \"\\\\\",\r\n                mask: null,\r\n                regex: null,\r\n                oncomplete: $.noop,\r\n                onincomplete: $.noop,\r\n                oncleared: $.noop,\r\n                repeat: 0,\r\n                greedy: !1,\r\n                autoUnmask: !1,\r\n                removeMaskOnSubmit: !1,\r\n                clearMaskOnLostFocus: !0,\r\n                insertMode: !0,\r\n                insertModeVisual: !0,\r\n                clearIncomplete: !1,\r\n                alias: null,\r\n                onKeyDown: $.noop,\r\n                onBeforeMask: null,\r\n                onBeforePaste: function onBeforePaste(pastedValue, opts) {\r\n                    return $.isFunction(opts.onBeforeMask) ? opts.onBeforeMask.call(this, pastedValue, opts) : pastedValue;\r\n                },\r\n                onBeforeWrite: null,\r\n                onUnMask: null,\r\n                showMaskOnFocus: !0,\r\n                showMaskOnHover: !0,\r\n                onKeyValidation: $.noop,\r\n                skipOptionalPartCharacter: \" \",\r\n                numericInput: !1,\r\n                rightAlign: !1,\r\n                undoOnEscape: !0,\r\n                radixPoint: \"\",\r\n                _radixDance: !1,\r\n                groupSeparator: \"\",\r\n                keepStatic: null,\r\n                positionCaretOnTab: !0,\r\n                tabThrough: !1,\r\n                supportsInputType: [\"text\", \"tel\", \"url\", \"password\", \"search\"],\r\n                ignorables: [8, 9, 19, 27, 33, 34, 35, 36, 37, 38, 39, 40, 45, 46, 93, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 0, 229],\r\n                isComplete: null,\r\n                preValidation: null,\r\n                postValidation: null,\r\n                staticDefinitionSymbol: void 0,\r\n                jitMasking: !1,\r\n                nullable: !0,\r\n                inputEventOnly: !1,\r\n                noValuePatching: !1,\r\n                positionCaretOnClick: \"lvp\",\r\n                casing: null,\r\n                inputmode: \"text\",\r\n                importDataAttributes: !0,\r\n                shiftPositions: !0\r\n            },\r\n            definitions: {\r\n                9: {\r\n                    validator: \"[0-9\\uff11-\\uff19]\",\r\n                    definitionSymbol: \"*\"\r\n                },\r\n                a: {\r\n                    validator: \"[A-Za-z\\u0410-\\u044f\\u0401\\u0451\\xc0-\\xff\\xb5]\",\r\n                    definitionSymbol: \"*\"\r\n                },\r\n                \"*\": {\r\n                    validator: \"[0-9\\uff11-\\uff19A-Za-z\\u0410-\\u044f\\u0401\\u0451\\xc0-\\xff\\xb5]\"\r\n                }\r\n            },\r\n            aliases: {},\r\n            masksCache: {},\r\n            mask: function mask(elems) {\r\n                var that = this;\r\n                return \"string\" == typeof elems && (elems = document.getElementById(elems) || document.querySelectorAll(elems)),\r\n                        elems = elems.nodeName ? [elems] : elems, $.each(elems, function(ndx, el) {\r\n                    var scopedOpts = $.extend(!0, {}, that.opts);\r\n                    if (importAttributeOptions(el, scopedOpts, $.extend(!0, {}, that.userOptions), that.dataAttribute)) {\r\n                        var maskset = generateMaskSet(scopedOpts, that.noMasksCache);\r\n                        void 0 !== maskset && (void 0 !== el.inputmask && (el.inputmask.opts.autoUnmask = !0,\r\n                                el.inputmask.remove()), el.inputmask = new Inputmask(void 0, void 0, !0), el.inputmask.opts = scopedOpts,\r\n                                el.inputmask.noMasksCache = that.noMasksCache, el.inputmask.userOptions = $.extend(!0, {}, that.userOptions),\r\n                                el.inputmask.isRTL = scopedOpts.isRTL || scopedOpts.numericInput, el.inputmask.el = el,\r\n                                el.inputmask.maskset = maskset, $.data(el, \"_inputmask_opts\", scopedOpts), maskScope.call(el.inputmask, {\r\n                            action: \"mask\"\r\n                        }));\r\n                    }\r\n                }), elems && elems[0] && elems[0].inputmask || this;\r\n            },\r\n            option: function option(options, noremask) {\r\n                return \"string\" == typeof options ? this.opts[options] : \"object\" === _typeof(options) ? ($.extend(this.userOptions, options),\r\n                this.el && !0 !== noremask && this.mask(this.el), this) : void 0;\r\n            },\r\n            unmaskedvalue: function unmaskedvalue(value) {\r\n                return this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache),\r\n                        maskScope.call(this, {\r\n                            action: \"unmaskedvalue\",\r\n                            value: value\r\n                        });\r\n            },\r\n            remove: function remove() {\r\n                return maskScope.call(this, {\r\n                    action: \"remove\"\r\n                });\r\n            },\r\n            getemptymask: function getemptymask() {\r\n                return this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache),\r\n                        maskScope.call(this, {\r\n                            action: \"getemptymask\"\r\n                        });\r\n            },\r\n            hasMaskedValue: function hasMaskedValue() {\r\n                return !this.opts.autoUnmask;\r\n            },\r\n            isComplete: function isComplete() {\r\n                return this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache),\r\n                        maskScope.call(this, {\r\n                            action: \"isComplete\"\r\n                        });\r\n            },\r\n            getmetadata: function getmetadata() {\r\n                return this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache),\r\n                        maskScope.call(this, {\r\n                            action: \"getmetadata\"\r\n                        });\r\n            },\r\n            isValid: function isValid(value) {\r\n                return this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache),\r\n                        maskScope.call(this, {\r\n                            action: \"isValid\",\r\n                            value: value\r\n                        });\r\n            },\r\n            format: function format(value, metadata) {\r\n                return this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache),\r\n                        maskScope.call(this, {\r\n                            action: \"format\",\r\n                            value: value,\r\n                            metadata: metadata\r\n                        });\r\n            },\r\n            setValue: function setValue(value) {\r\n                this.el && $(this.el).trigger(\"setvalue\", [value]);\r\n            },\r\n            analyseMask: analyseMask\r\n        }, Inputmask.extendDefaults = function(options) {\r\n            $.extend(!0, Inputmask.prototype.defaults, options);\r\n        }, Inputmask.extendDefinitions = function(definition) {\r\n            $.extend(!0, Inputmask.prototype.definitions, definition);\r\n        }, Inputmask.extendAliases = function(alias) {\r\n            $.extend(!0, Inputmask.prototype.aliases, alias);\r\n        }, Inputmask.format = function(value, options, metadata) {\r\n            return Inputmask(options).format(value, metadata);\r\n        }, Inputmask.unmask = function(value, options) {\r\n            return Inputmask(options).unmaskedvalue(value);\r\n        }, Inputmask.isValid = function(value, options) {\r\n            return Inputmask(options).isValid(value);\r\n        }, Inputmask.remove = function(elems) {\r\n            \"string\" == typeof elems && (elems = document.getElementById(elems) || document.querySelectorAll(elems)),\r\n                    elems = elems.nodeName ? [elems] : elems, $.each(elems, function(ndx, el) {\r\n                el.inputmask && el.inputmask.remove();\r\n            });\r\n        }, Inputmask.setValue = function(elems, value) {\r\n            \"string\" == typeof elems && (elems = document.getElementById(elems) || document.querySelectorAll(elems)),\r\n                    elems = elems.nodeName ? [elems] : elems, $.each(elems, function(ndx, el) {\r\n                el.inputmask ? el.inputmask.setValue(value) : $(el).trigger(\"setvalue\", [value]);\r\n            });\r\n        };\r\n        var escapeRegexRegex = new RegExp(\"(\\\\\" + [\"/\", \".\", \"*\", \"+\", \"?\", \"|\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", \"\\\\\", \"$\", \"^\"].join(\"|\\\\\") + \")\", \"gim\");\r\n        Inputmask.escapeRegex = function(str) {\r\n            return str.replace(escapeRegexRegex, \"\\\\$1\");\r\n        }, Inputmask.dependencyLib = $, window.Inputmask = Inputmask, module.exports = Inputmask;\r\n    }, function(module, exports, __webpack_require__) {\r\n        \"use strict\";\r\n\r\n        function _typeof(obj) {\r\n            return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function _typeof(obj) {\r\n                return typeof obj;\r\n            } : function _typeof(obj) {\r\n                return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\r\n            }, _typeof(obj);\r\n        }\r\n\r\n        var window = __webpack_require__(3), document = window.document;\r\n\r\n        function indexOf(list, elem) {\r\n            for (var i = 0, len = list.length; i < len; i++) {\r\n                if (list[i] === elem) {\r\n                    return i;\r\n                }\r\n            }\r\n            return -1;\r\n        }\r\n\r\n        function isWindow(obj) {\r\n            return null != obj && obj === obj.window;\r\n        }\r\n\r\n        function isArraylike(obj) {\r\n            var length = \"length\" in obj && obj.length, ltype = _typeof(obj);\r\n            return \"function\" !== ltype && !isWindow(obj) && (!(1 !== obj.nodeType || !length) || (\"array\" === ltype || 0 === length || \"number\" == typeof length && 0 < length && length - 1 in obj));\r\n        }\r\n\r\n        function isValidElement(elem) {\r\n            return elem instanceof Element;\r\n        }\r\n\r\n        function DependencyLib(elem) {\r\n            return elem instanceof DependencyLib ? elem : this instanceof DependencyLib ? void (null != elem && elem !== window && (this[0] = elem.nodeName ? elem : void 0 !== elem[0] && elem[0].nodeName ? elem[0] : document.querySelector(elem),\r\n                                                                                                void 0 !== this[0] && null !== this[0] && (this[0].eventRegistry = this[0].eventRegistry || {}))) : new DependencyLib(elem);\r\n        }\r\n\r\n        DependencyLib.prototype = {\r\n            on: function on(events, handler) {\r\n                function addEvent(ev, namespace) {\r\n                    elem.addEventListener ? elem.addEventListener(ev, handler, !1) : elem.attachEvent && elem.attachEvent(\"on\" + ev, handler),\r\n                            eventRegistry[ev] = eventRegistry[ev] || {}, eventRegistry[ev][namespace] = eventRegistry[ev][namespace] || [],\r\n                            eventRegistry[ev][namespace].push(handler);\r\n                }\r\n\r\n                if (isValidElement(this[0])) {\r\n                    for (var eventRegistry = this[0].eventRegistry, elem = this[0], _events = events.split(\" \"), endx = 0; endx < _events.length; endx++) {\r\n                        var nsEvent = _events[endx].split(\".\"), ev = nsEvent[0], namespace = nsEvent[1] || \"global\";\r\n                        addEvent(ev, namespace);\r\n                    }\r\n                }\r\n                return this;\r\n            },\r\n            off: function off(events, handler) {\r\n                var eventRegistry, elem;\r\n\r\n                function removeEvent(ev, namespace, handler) {\r\n                    if (ev in eventRegistry == !0) {\r\n                        if (elem.removeEventListener ? elem.removeEventListener(ev, handler, !1) : elem.detachEvent && elem.detachEvent(\"on\" + ev, handler),\r\n                        \"global\" === namespace) {\r\n                            for (var nmsp in eventRegistry[ev]) {\r\n                                eventRegistry[ev][nmsp].splice(eventRegistry[ev][nmsp].indexOf(handler), 1);\r\n                            }\r\n                        } else {\r\n                            eventRegistry[ev][namespace].splice(eventRegistry[ev][namespace].indexOf(handler), 1);\r\n                        }\r\n                    }\r\n                }\r\n\r\n                function resolveNamespace(ev, namespace) {\r\n                    var evts = [], hndx, hndL;\r\n                    if (0 < ev.length) {\r\n                        if (void 0 === handler) {\r\n                            for (hndx = 0, hndL = eventRegistry[ev][namespace].length; hndx < hndL; hndx++) {\r\n                                evts.push({\r\n                                              ev: ev,\r\n                                              namespace: namespace && 0 < namespace.length ? namespace : \"global\",\r\n                                              handler: eventRegistry[ev][namespace][hndx]\r\n                                          });\r\n                            }\r\n                        } else {\r\n                            evts.push({\r\n                                          ev: ev,\r\n                                          namespace: namespace && 0 < namespace.length ? namespace : \"global\",\r\n                                          handler: handler\r\n                                      });\r\n                        }\r\n                    } else if (0 < namespace.length) {\r\n                        for (var evNdx in eventRegistry) {\r\n                            for (var nmsp in eventRegistry[evNdx]) {\r\n                                if (nmsp === namespace) {\r\n                                    if (void 0 === handler) {\r\n                                        for (hndx = 0,\r\n                                                     hndL = eventRegistry[evNdx][nmsp].length; hndx < hndL; hndx++) {\r\n                                            evts.push({\r\n                                                          ev: evNdx,\r\n                                                          namespace: nmsp,\r\n                                                          handler: eventRegistry[evNdx][nmsp][hndx]\r\n                                                      });\r\n                                        }\r\n                                    } else {\r\n                                        evts.push({\r\n                                                      ev: evNdx,\r\n                                                      namespace: nmsp,\r\n                                                      handler: handler\r\n                                                  });\r\n                                    }\r\n                                }\r\n                            }\r\n                        }\r\n                    }\r\n                    return evts;\r\n                }\r\n\r\n                if (isValidElement(this[0])) {\r\n                    eventRegistry = this[0].eventRegistry, elem = this[0];\r\n                    for (var _events = events.split(\" \"), endx = 0; endx < _events.length; endx++) {\r\n                        for (var nsEvent = _events[endx].split(\".\"), offEvents = resolveNamespace(nsEvent[0], nsEvent[1]), i = 0, offEventsL = offEvents.length; i < offEventsL; i++) {\r\n                            removeEvent(offEvents[i].ev, offEvents[i].namespace, offEvents[i].handler);\r\n                        }\r\n                    }\r\n                }\r\n                return this;\r\n            },\r\n            trigger: function trigger(events, argument_1) {\r\n                if (isValidElement(this[0])) {\r\n                    for (var eventRegistry = this[0].eventRegistry, elem = this[0], _events = \"string\" == typeof events ? events.split(\" \") : [events.type], endx = 0; endx < _events.length; endx++) {\r\n                        var nsEvent = _events[endx].split(\".\"), ev = nsEvent[0], namespace = nsEvent[1] || \"global\";\r\n                        if (void 0 !== document && \"global\" === namespace) {\r\n                            var evnt, i, params = {\r\n                                bubbles: !0,\r\n                                cancelable: !0,\r\n                                detail: argument_1\r\n                            };\r\n                            if (document.createEvent) {\r\n                                try {\r\n                                    evnt = new CustomEvent(ev, params);\r\n                                } catch (e) {\r\n                                    evnt = document.createEvent(\"CustomEvent\"), evnt.initCustomEvent(ev, params.bubbles, params.cancelable, params.detail);\r\n                                }\r\n                                events.type && DependencyLib.extend(evnt, events), elem.dispatchEvent(evnt);\r\n                            } else {\r\n                                evnt = document.createEventObject(), evnt.eventType = ev, evnt.detail = argument_1,\r\n                                events.type && DependencyLib.extend(evnt, events), elem.fireEvent(\"on\" + evnt.eventType, evnt);\r\n                            }\r\n                        } else if (void 0 !== eventRegistry[ev]) {\r\n                            if (events = events.type ? events : DependencyLib.Event(events),\r\n                                    events.detail = arguments.slice(1), \"global\" === namespace) {\r\n                                for (var nmsp in eventRegistry[ev]) {\r\n                                    for (i = 0; i < eventRegistry[ev][nmsp].length; i++) {\r\n                                        eventRegistry[ev][nmsp][i].apply(elem, arguments);\r\n                                    }\r\n                                }\r\n                            } else {\r\n                                for (i = 0; i < eventRegistry[ev][namespace].length; i++) {\r\n                                    eventRegistry[ev][namespace][i].apply(elem, arguments);\r\n                                }\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n                return this;\r\n            }\r\n        }, DependencyLib.isFunction = function(obj) {\r\n            return \"function\" == typeof obj;\r\n        }, DependencyLib.noop = function() {\r\n        }, DependencyLib.isArray = Array.isArray, DependencyLib.inArray = function(elem, arr, i) {\r\n            return null == arr ? -1 : indexOf(arr, elem, i);\r\n        }, DependencyLib.valHooks = void 0, DependencyLib.isPlainObject = function(obj) {\r\n            return \"object\" === _typeof(obj) && !obj.nodeType && !isWindow(obj) && !(obj.constructor && !Object.hasOwnProperty.call(obj.constructor.prototype, \"isPrototypeOf\"));\r\n        }, DependencyLib.extend = function() {\r\n            var options, name, src, copy, copyIsArray, clone, target = arguments[0] || {}, i = 1,\r\n                    length = arguments.length, deep = !1;\r\n            for (\"boolean\" == typeof target && (deep = target, target = arguments[i] || {},\r\n                    i++), \"object\" === _typeof(target) || DependencyLib.isFunction(target) || (target = {}),\r\n                 i === length && (target = this, i--); i < length; i++) {\r\n                if (null != (options = arguments[i])) {\r\n                    for (name in options) {\r\n                        src = target[name],\r\n                                copy = options[name], target !== copy && (deep && copy && (DependencyLib.isPlainObject(copy) || (copyIsArray = DependencyLib.isArray(copy))) ? (clone = copyIsArray ? (copyIsArray = !1,\r\n                                                      src && DependencyLib.isArray(src) ? src : []) : src && DependencyLib.isPlainObject(src) ? src : {},\r\n                                target[name] = DependencyLib.extend(deep, clone, copy)) : void 0 !== copy && (target[name] = copy));\r\n                    }\r\n                }\r\n            }\r\n            return target;\r\n        }, DependencyLib.each = function(obj, callback) {\r\n            var value, i = 0;\r\n            if (isArraylike(obj)) {\r\n                for (var length = obj.length; i < length && (value = callback.call(obj[i], i, obj[i]),\r\n                !1 !== value); i++) {\r\n                    ;\r\n                }\r\n            } else {\r\n                for (i in obj) {\r\n                    if (value = callback.call(obj[i], i, obj[i]),\r\n                    !1 === value) {\r\n                        break;\r\n                    }\r\n                }\r\n            }\r\n            return obj;\r\n        }, DependencyLib.data = function(owner, key, value) {\r\n            if (void 0 === value) {\r\n                return owner.__data ? owner.__data[key] : null;\r\n            }\r\n            owner.__data = owner.__data || {}, owner.__data[key] = value;\r\n        }, \"function\" == typeof window.CustomEvent ? DependencyLib.Event = window.CustomEvent : (DependencyLib.Event = function(event, params) {\r\n            params = params || {\r\n                bubbles: !1,\r\n                cancelable: !1,\r\n                detail: void 0\r\n            };\r\n            var evt = document.createEvent(\"CustomEvent\");\r\n            return evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail),\r\n                    evt;\r\n        }, DependencyLib.Event.prototype = window.Event.prototype), module.exports = DependencyLib;\r\n    }, function(module, exports, __webpack_require__) {\r\n        \"use strict\";\r\n        var __WEBPACK_AMD_DEFINE_RESULT__;\r\n\r\n        function _typeof(obj) {\r\n            return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function _typeof(obj) {\r\n                return typeof obj;\r\n            } : function _typeof(obj) {\r\n                return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\r\n            }, _typeof(obj);\r\n        }\r\n\r\n        __WEBPACK_AMD_DEFINE_RESULT__ = function() {\r\n            return \"undefined\" != typeof window ? window : new (eval(\"require('jsdom').JSDOM\"))(\"\").window;\r\n        }.call(exports, __webpack_require__, exports, module), void 0 === __WEBPACK_AMD_DEFINE_RESULT__ || (module.exports = __WEBPACK_AMD_DEFINE_RESULT__);\r\n    }, function(module, exports, __webpack_require__) {\r\n        \"use strict\";\r\n        var $ = __webpack_require__(2);\r\n\r\n        function generateMaskSet(opts, nocache) {\r\n            var ms;\r\n\r\n            function generateMask(mask, metadata, opts) {\r\n                var regexMask = !1, masksetDefinition, maskdefKey;\r\n                if (null !== mask && \"\" !== mask || (regexMask = null !== opts.regex, mask = regexMask ? (mask = opts.regex,\r\n                        mask.replace(/^(\\^)(.*)(\\$)$/, \"$2\")) : (regexMask = !0, \".*\")), 1 === mask.length && !1 === opts.greedy && 0 !== opts.repeat && (opts.placeholder = \"\"),\r\n                0 < opts.repeat || \"*\" === opts.repeat || \"+\" === opts.repeat) {\r\n                    var repeatStart = \"*\" === opts.repeat ? 0 : \"+\" === opts.repeat ? 1 : opts.repeat;\r\n                    mask = opts.groupmarker[0] + mask + opts.groupmarker[1] + opts.quantifiermarker[0] + repeatStart + \",\" + opts.repeat + opts.quantifiermarker[1];\r\n                }\r\n                return maskdefKey = regexMask ? \"regex_\" + opts.regex : opts.numericInput ? mask.split(\"\").reverse().join(\"\") : mask,\r\n                !1 !== opts.keepStatic && (maskdefKey = \"ks_\" + maskdefKey), void 0 === Inputmask.prototype.masksCache[maskdefKey] || !0 === nocache ? (masksetDefinition = {\r\n                    mask: mask,\r\n                    maskToken: Inputmask.prototype.analyseMask(mask, regexMask, opts),\r\n                    validPositions: {},\r\n                    _buffer: void 0,\r\n                    buffer: void 0,\r\n                    tests: {},\r\n                    excludes: {},\r\n                    metadata: metadata,\r\n                    maskLength: void 0,\r\n                    jitOffset: {}\r\n                }, !0 !== nocache && (Inputmask.prototype.masksCache[maskdefKey] = masksetDefinition,\r\n                        masksetDefinition = $.extend(!0, {}, Inputmask.prototype.masksCache[maskdefKey]))) : masksetDefinition = $.extend(!0, {}, Inputmask.prototype.masksCache[maskdefKey]),\r\n                        masksetDefinition;\r\n            }\r\n\r\n            if ($.isFunction(opts.mask) && (opts.mask = opts.mask(opts)), $.isArray(opts.mask)) {\r\n                if (1 < opts.mask.length) {\r\n                    null === opts.keepStatic && (opts.keepStatic = !0);\r\n                    var altMask = opts.groupmarker[0];\r\n                    return $.each(opts.isRTL ? opts.mask.reverse() : opts.mask, function(ndx, msk) {\r\n                        1 < altMask.length && (altMask += opts.groupmarker[1] + opts.alternatormarker + opts.groupmarker[0]),\r\n                                void 0 === msk.mask || $.isFunction(msk.mask) ? altMask += msk : altMask += msk.mask;\r\n                    }), altMask += opts.groupmarker[1], generateMask(altMask, opts.mask, opts);\r\n                }\r\n                opts.mask = opts.mask.pop();\r\n            }\r\n            return null === opts.keepStatic && (opts.keepStatic = !1), ms = opts.mask && void 0 !== opts.mask.mask && !$.isFunction(opts.mask.mask) ? generateMask(opts.mask.mask, opts.mask, opts) : generateMask(opts.mask, opts.mask, opts),\r\n                    ms;\r\n        }\r\n\r\n        function analyseMask(mask, regexMask, opts) {\r\n            var tokenizer = /(?:[?*+]|\\{[0-9+*]+(?:,[0-9+*]*)?(?:\\|[0-9+*]*)?\\})|[^.?*+^${[]()|\\\\]+|./g,\r\n                    regexTokenizer = /\\[\\^?]?(?:[^\\\\\\]]+|\\\\[\\S\\s]?)*]?|\\\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9][0-9]*|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|c[A-Za-z]|[\\S\\s]?)|\\((?:\\?[:=!]?)?|(?:[?*+]|\\{[0-9]+(?:,[0-9]*)?\\})\\??|[^.?*+^${[()|\\\\]+|./g,\r\n                    escaped = !1, currentToken = new MaskToken(), match, m, openenings = [], maskTokens = [],\r\n                    openingToken, currentOpeningToken, alternator, lastMatch, closeRegexGroup = !1;\r\n\r\n            function MaskToken(isGroup, isOptional, isQuantifier, isAlternator) {\r\n                this.matches = [], this.openGroup = isGroup || !1, this.alternatorGroup = !1, this.isGroup = isGroup || !1,\r\n                        this.isOptional = isOptional || !1, this.isQuantifier = isQuantifier || !1, this.isAlternator = isAlternator || !1,\r\n                        this.quantifier = {\r\n                            min: 1,\r\n                            max: 1\r\n                        };\r\n            }\r\n\r\n            function insertTestDefinition(mtoken, element, position) {\r\n                position = void 0 !== position ? position : mtoken.matches.length;\r\n                var prevMatch = mtoken.matches[position - 1];\r\n                if (regexMask) {\r\n                    0 === element.indexOf(\"[\") || escaped && /\\\\d|\\\\s|\\\\w]/i.test(element) || \".\" === element ? mtoken.matches.splice(position++, 0, {\r\n                        fn: new RegExp(element, opts.casing ? \"i\" : \"\"),\r\n                        static: !1,\r\n                        optionality: !1,\r\n                        newBlockMarker: void 0 === prevMatch ? \"master\" : prevMatch.def !== element,\r\n                        casing: null,\r\n                        def: element,\r\n                        placeholder: void 0,\r\n                        nativeDef: element\r\n                    }) : (escaped && (element = element[element.length - 1]), $.each(element.split(\"\"), function(ndx, lmnt) {\r\n                        prevMatch = mtoken.matches[position - 1], mtoken.matches.splice(position++, 0, {\r\n                            fn: /[a-z]/i.test(opts.staticDefinitionSymbol || lmnt) ? new RegExp(\"[\" + (opts.staticDefinitionSymbol || lmnt) + \"]\", opts.casing ? \"i\" : \"\") : null,\r\n                            static: !0,\r\n                            optionality: !1,\r\n                            newBlockMarker: void 0 === prevMatch ? \"master\" : prevMatch.def !== lmnt && !0 !== prevMatch.static,\r\n                            casing: null,\r\n                            def: opts.staticDefinitionSymbol || lmnt,\r\n                            placeholder: void 0 !== opts.staticDefinitionSymbol ? lmnt : void 0,\r\n                            nativeDef: (escaped ? \"'\" : \"\") + lmnt\r\n                        });\r\n                    })), escaped = !1;\r\n                } else {\r\n                    var maskdef = (opts.definitions ? opts.definitions[element] : void 0) || Inputmask.prototype.definitions[element];\r\n                    maskdef && !escaped ? mtoken.matches.splice(position++, 0, {\r\n                        fn: maskdef.validator ? \"string\" == typeof maskdef.validator ? new RegExp(maskdef.validator, opts.casing ? \"i\" : \"\") : new function() {\r\n                            this.test = maskdef.validator;\r\n                        }() : new RegExp(\".\"),\r\n                        static: maskdef.static || !1,\r\n                        optionality: !1,\r\n                        newBlockMarker: void 0 === prevMatch ? \"master\" : prevMatch.def !== (maskdef.definitionSymbol || element),\r\n                        casing: maskdef.casing,\r\n                        def: maskdef.definitionSymbol || element,\r\n                        placeholder: maskdef.placeholder,\r\n                        nativeDef: element,\r\n                        generated: maskdef.generated\r\n                    }) : (mtoken.matches.splice(position++, 0, {\r\n                        fn: /[a-z]/i.test(opts.staticDefinitionSymbol || element) ? new RegExp(\"[\" + (opts.staticDefinitionSymbol || element) + \"]\", opts.casing ? \"i\" : \"\") : null,\r\n                        static: !0,\r\n                        optionality: !1,\r\n                        newBlockMarker: void 0 === prevMatch ? \"master\" : prevMatch.def !== element && !0 !== prevMatch.static,\r\n                        casing: null,\r\n                        def: opts.staticDefinitionSymbol || element,\r\n                        placeholder: void 0 !== opts.staticDefinitionSymbol ? element : void 0,\r\n                        nativeDef: (escaped ? \"'\" : \"\") + element\r\n                    }), escaped = !1);\r\n                }\r\n            }\r\n\r\n            function verifyGroupMarker(maskToken) {\r\n                maskToken && maskToken.matches && $.each(maskToken.matches, function(ndx, token) {\r\n                    var nextToken = maskToken.matches[ndx + 1];\r\n                    (void 0 === nextToken || void 0 === nextToken.matches || !1 === nextToken.isQuantifier) && token && token.isGroup && (token.isGroup = !1,\r\n                    regexMask || (insertTestDefinition(token, opts.groupmarker[0], 0), !0 !== token.openGroup && insertTestDefinition(token, opts.groupmarker[1]))),\r\n                            verifyGroupMarker(token);\r\n                });\r\n            }\r\n\r\n            function defaultCase() {\r\n                if (0 < openenings.length) {\r\n                    if (currentOpeningToken = openenings[openenings.length - 1], insertTestDefinition(currentOpeningToken, m),\r\n                            currentOpeningToken.isAlternator) {\r\n                        alternator = openenings.pop();\r\n                        for (var mndx = 0; mndx < alternator.matches.length; mndx++) {\r\n                            alternator.matches[mndx].isGroup && (alternator.matches[mndx].isGroup = !1);\r\n                        }\r\n                        0 < openenings.length ? (currentOpeningToken = openenings[openenings.length - 1],\r\n                                currentOpeningToken.matches.push(alternator)) : currentToken.matches.push(alternator);\r\n                    }\r\n                } else {\r\n                    insertTestDefinition(currentToken, m);\r\n                }\r\n            }\r\n\r\n            function reverseTokens(maskToken) {\r\n                function reverseStatic(st) {\r\n                    return st === opts.optionalmarker[0] ? st = opts.optionalmarker[1] : st === opts.optionalmarker[1] ? st = opts.optionalmarker[0] : st === opts.groupmarker[0] ? st = opts.groupmarker[1] : st === opts.groupmarker[1] && (st = opts.groupmarker[0]),\r\n                            st;\r\n                }\r\n\r\n                for (var match in maskToken.matches = maskToken.matches.reverse(), maskToken.matches) {\r\n                    if (Object.prototype.hasOwnProperty.call(maskToken.matches, match)) {\r\n                        var intMatch = parseInt(match);\r\n                        if (maskToken.matches[match].isQuantifier && maskToken.matches[intMatch + 1] && maskToken.matches[intMatch + 1].isGroup) {\r\n                            var qt = maskToken.matches[match];\r\n                            maskToken.matches.splice(match, 1), maskToken.matches.splice(intMatch + 1, 0, qt);\r\n                        }\r\n                        void 0 !== maskToken.matches[match].matches ? maskToken.matches[match] = reverseTokens(maskToken.matches[match]) : maskToken.matches[match] = reverseStatic(maskToken.matches[match]);\r\n                    }\r\n                }\r\n                return maskToken;\r\n            }\r\n\r\n            function groupify(matches) {\r\n                var groupToken = new MaskToken(!0);\r\n                return groupToken.openGroup = !1, groupToken.matches = matches, groupToken;\r\n            }\r\n\r\n            function closeGroup() {\r\n                if (openingToken = openenings.pop(), openingToken.openGroup = !1, void 0 !== openingToken) {\r\n                    if (0 < openenings.length) {\r\n                        if (currentOpeningToken = openenings[openenings.length - 1], currentOpeningToken.matches.push(openingToken),\r\n                                currentOpeningToken.isAlternator) {\r\n                            alternator = openenings.pop();\r\n                            for (var mndx = 0; mndx < alternator.matches.length; mndx++) {\r\n                                alternator.matches[mndx].isGroup = !1,\r\n                                        alternator.matches[mndx].alternatorGroup = !1;\r\n                            }\r\n                            0 < openenings.length ? (currentOpeningToken = openenings[openenings.length - 1],\r\n                                    currentOpeningToken.matches.push(alternator)) : currentToken.matches.push(alternator);\r\n                        }\r\n                    } else {\r\n                        currentToken.matches.push(openingToken);\r\n                    }\r\n                } else {\r\n                    defaultCase();\r\n                }\r\n            }\r\n\r\n            function groupQuantifier(matches) {\r\n                var lastMatch = matches.pop();\r\n                return lastMatch.isQuantifier && (lastMatch = groupify([matches.pop(), lastMatch])),\r\n                        lastMatch;\r\n            }\r\n\r\n            for (regexMask && (opts.optionalmarker[0] = void 0, opts.optionalmarker[1] = void 0); match = regexMask ? regexTokenizer.exec(mask) : tokenizer.exec(mask);) {\r\n                if (m = match[0], regexMask) {\r\n                    switch (m.charAt(0)) {\r\n                        case \"?\":\r\n                            m = \"{0,1}\";\r\n                            break;\r\n\r\n                        case \"+\":\r\n                        case \"*\":\r\n                            m = \"{\" + m + \"}\";\r\n                            break;\r\n\r\n                        case \"|\":\r\n                            if (0 === openenings.length) {\r\n                                var altRegexGroup = groupify(currentToken.matches);\r\n                                altRegexGroup.openGroup = !0, openenings.push(altRegexGroup), currentToken.matches = [],\r\n                                        closeRegexGroup = !0;\r\n                            }\r\n                            break;\r\n                    }\r\n                }\r\n                if (escaped) {\r\n                    defaultCase();\r\n                } else {\r\n                    switch (m.charAt(0)) {\r\n                        case \"(?=\":\r\n                            break;\r\n\r\n                        case \"(?!\":\r\n                            break;\r\n\r\n                        case \"(?<=\":\r\n                            break;\r\n\r\n                        case \"(?<!\":\r\n                            break;\r\n\r\n                        case opts.escapeChar:\r\n                            escaped = !0, regexMask && defaultCase();\r\n                            break;\r\n\r\n                        case opts.optionalmarker[1]:\r\n                        case opts.groupmarker[1]:\r\n                            closeGroup();\r\n                            break;\r\n\r\n                        case opts.optionalmarker[0]:\r\n                            openenings.push(new MaskToken(!1, !0));\r\n                            break;\r\n\r\n                        case opts.groupmarker[0]:\r\n                            openenings.push(new MaskToken(!0));\r\n                            break;\r\n\r\n                        case opts.quantifiermarker[0]:\r\n                            var quantifier = new MaskToken(!1, !1, !0);\r\n                            m = m.replace(/[{}]/g, \"\");\r\n                            var mqj = m.split(\"|\"), mq = mqj[0].split(\",\"),\r\n                                    mq0 = isNaN(mq[0]) ? mq[0] : parseInt(mq[0]),\r\n                                    mq1 = 1 === mq.length ? mq0 : isNaN(mq[1]) ? mq[1] : parseInt(mq[1]);\r\n                            \"*\" !== mq0 && \"+\" !== mq0 || (mq0 = \"*\" === mq1 ? 0 : 1), quantifier.quantifier = {\r\n                                min: mq0,\r\n                                max: mq1,\r\n                                jit: mqj[1]\r\n                            };\r\n                            var matches = 0 < openenings.length ? openenings[openenings.length - 1].matches : currentToken.matches;\r\n                            if (match = matches.pop(), match.isAlternator) {\r\n                                matches.push(match), matches = match.matches;\r\n                                var groupToken = new MaskToken(!0), tmpMatch = matches.pop();\r\n                                matches.push(groupToken), matches = groupToken.matches, match = tmpMatch;\r\n                            }\r\n                            match.isGroup || (match = groupify([match])), matches.push(match), matches.push(quantifier);\r\n                            break;\r\n\r\n                        case opts.alternatormarker:\r\n                            if (0 < openenings.length) {\r\n                                currentOpeningToken = openenings[openenings.length - 1];\r\n                                var subToken = currentOpeningToken.matches[currentOpeningToken.matches.length - 1];\r\n                                lastMatch = currentOpeningToken.openGroup && (void 0 === subToken.matches || !1 === subToken.isGroup && !1 === subToken.isAlternator) ? openenings.pop() : groupQuantifier(currentOpeningToken.matches);\r\n                            } else {\r\n                                lastMatch = groupQuantifier(currentToken.matches);\r\n                            }\r\n                            if (lastMatch.isAlternator) {\r\n                                openenings.push(lastMatch);\r\n                            } else if (lastMatch.alternatorGroup ? (alternator = openenings.pop(),\r\n                                    lastMatch.alternatorGroup = !1) : alternator = new MaskToken(!1, !1, !1, !0), alternator.matches.push(lastMatch),\r\n                                    openenings.push(alternator), lastMatch.openGroup) {\r\n                                lastMatch.openGroup = !1;\r\n                                var alternatorGroup = new MaskToken(!0);\r\n                                alternatorGroup.alternatorGroup = !0, openenings.push(alternatorGroup);\r\n                            }\r\n                            break;\r\n\r\n                        default:\r\n                            defaultCase();\r\n                    }\r\n                }\r\n            }\r\n            for (closeRegexGroup && closeGroup(); 0 < openenings.length;) {\r\n                openingToken = openenings.pop(),\r\n                        currentToken.matches.push(openingToken);\r\n            }\r\n            return 0 < currentToken.matches.length && (verifyGroupMarker(currentToken), maskTokens.push(currentToken)),\r\n            (opts.numericInput || opts.isRTL) && reverseTokens(maskTokens[0]), maskTokens;\r\n        }\r\n\r\n        module.exports = {\r\n            generateMaskSet: generateMaskSet,\r\n            analyseMask: analyseMask\r\n        };\r\n    }, function(module, exports, __webpack_require__) {\r\n        \"use strict\";\r\n        __webpack_require__(6), __webpack_require__(8), __webpack_require__(9), __webpack_require__(10),\r\n                module.exports = __webpack_require__(1);\r\n    }, function(module, exports, __webpack_require__) {\r\n        \"use strict\";\r\n        var Inputmask = __webpack_require__(1);\r\n        Inputmask.extendDefinitions({\r\n                                        A: {\r\n                                            validator: \"[A-Za-z\\u0410-\\u044f\\u0401\\u0451\\xc0-\\xff\\xb5]\",\r\n                                            casing: \"upper\"\r\n                                        },\r\n                                        \"&\": {\r\n                                            validator: \"[0-9A-Za-z\\u0410-\\u044f\\u0401\\u0451\\xc0-\\xff\\xb5]\",\r\n                                            casing: \"upper\"\r\n                                        },\r\n                                        \"#\": {\r\n                                            validator: \"[0-9A-Fa-f]\",\r\n                                            casing: \"upper\"\r\n                                        }\r\n                                    });\r\n        var ipValidatorRegex = new RegExp(\"25[0-5]|2[0-4][0-9]|[01][0-9][0-9]\");\r\n\r\n        function ipValidator(chrs, maskset, pos, strict, opts) {\r\n            return chrs = -1 < pos - 1 && \".\" !== maskset.buffer[pos - 1] ? (chrs = maskset.buffer[pos - 1] + chrs,\r\n                    -1 < pos - 2 && \".\" !== maskset.buffer[pos - 2] ? maskset.buffer[pos - 2] + chrs : \"0\" + chrs) : \"00\" + chrs,\r\n                    ipValidatorRegex.test(chrs);\r\n        }\r\n\r\n        Inputmask.extendAliases({\r\n                                    cssunit: {\r\n                                        regex: \"[+-]?[0-9]+\\\\.?([0-9]+)?(px|em|rem|ex|%|in|cm|mm|pt|pc)\"\r\n                                    },\r\n                                    url: {\r\n                                        regex: \"(https?|ftp)//.*\",\r\n                                        autoUnmask: !1\r\n                                    },\r\n                                    ip: {\r\n                                        mask: \"i[i[i]].j[j[j]].k[k[k]].l[l[l]]\",\r\n                                        definitions: {\r\n                                            i: {\r\n                                                validator: ipValidator\r\n                                            },\r\n                                            j: {\r\n                                                validator: ipValidator\r\n                                            },\r\n                                            k: {\r\n                                                validator: ipValidator\r\n                                            },\r\n                                            l: {\r\n                                                validator: ipValidator\r\n                                            }\r\n                                        },\r\n                                        onUnMask: function onUnMask(maskedValue, unmaskedValue, opts) {\r\n                                            return maskedValue;\r\n                                        },\r\n                                        inputmode: \"numeric\"\r\n                                    },\r\n                                    email: {\r\n                                        mask: \"*{1,64}[.*{1,64}][.*{1,64}][.*{1,63}]@-{1,63}.-{1,63}[.-{1,63}][.-{1,63}]\",\r\n                                        greedy: !1,\r\n                                        casing: \"lower\",\r\n                                        onBeforePaste: function onBeforePaste(pastedValue, opts) {\r\n                                            return pastedValue = pastedValue.toLowerCase(), pastedValue.replace(\"mailto:\", \"\");\r\n                                        },\r\n                                        definitions: {\r\n                                            \"*\": {\r\n                                                validator: \"[0-9\\uff11-\\uff19A-Za-z\\u0410-\\u044f\\u0401\\u0451\\xc0-\\xff\\xb5!#$%&'*+/=?^_`{|}~-]\"\r\n                                            },\r\n                                            \"-\": {\r\n                                                validator: \"[0-9A-Za-z-]\"\r\n                                            }\r\n                                        },\r\n                                        onUnMask: function onUnMask(maskedValue, unmaskedValue, opts) {\r\n                                            return maskedValue;\r\n                                        },\r\n                                        inputmode: \"email\"\r\n                                    },\r\n                                    mac: {\r\n                                        mask: \"##:##:##:##:##:##\"\r\n                                    },\r\n                                    vin: {\r\n                                        mask: \"V{13}9{4}\",\r\n                                        definitions: {\r\n                                            V: {\r\n                                                validator: \"[A-HJ-NPR-Za-hj-npr-z\\\\d]\",\r\n                                                casing: \"upper\"\r\n                                            }\r\n                                        },\r\n                                        clearIncomplete: !0,\r\n                                        autoUnmask: !0\r\n                                    },\r\n                                    ssn: {\r\n                                        mask: \"999-99-9999\",\r\n                                        postValidation: function postValidation(buffer, pos, c, currentResult, opts, maskset, strict) {\r\n                                            return /^(?!219-09-9999|078-05-1120)(?!666|000|9.{2}).{3}-(?!00).{2}-(?!0{4}).{4}$/.test(buffer.join(\"\"));\r\n                                        }\r\n                                    }\r\n                                }), module.exports = Inputmask;\r\n    }, function(module, exports, __webpack_require__) {\r\n        \"use strict\";\r\n\r\n        function _typeof(obj) {\r\n            return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function _typeof(obj) {\r\n                return typeof obj;\r\n            } : function _typeof(obj) {\r\n                return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\r\n            }, _typeof(obj);\r\n        }\r\n\r\n        var $ = __webpack_require__(2), window = __webpack_require__(3), document = window.document,\r\n                ua = window.navigator && window.navigator.userAgent || \"\",\r\n                ie = 0 < ua.indexOf(\"MSIE \") || 0 < ua.indexOf(\"Trident/\"), mobile = \"ontouchstart\" in window,\r\n                iemobile = /iemobile/i.test(ua), iphone = /iphone/i.test(ua) && !iemobile,\r\n                keyCode = __webpack_require__(0);\r\n        module.exports = function maskScope(actionObj, maskset, opts) {\r\n            maskset = maskset || this.maskset, opts = opts || this.opts;\r\n            var inputmask = this, el = this.el, isRTL = this.isRTL || (this.isRTL = opts.numericInput), undoValue, $el,\r\n                    skipKeyPressEvent = !1, skipInputEvent = !1, validationEvent = !1, ignorable = !1, maxLength,\r\n                    mouseEnter = !1, originalPlaceholder = void 0;\r\n\r\n            function getMaskTemplate(baseOnInput, minimalPos, includeMode, noJit, clearOptionalTail) {\r\n                var greedy = opts.greedy;\r\n                clearOptionalTail && (opts.greedy = !1), minimalPos = minimalPos || 0;\r\n                var maskTemplate = [], ndxIntlzr, pos = 0, test, testPos, jitRenderStatic;\r\n                do {\r\n                    if (!0 === baseOnInput && maskset.validPositions[pos]) {\r\n                        testPos = clearOptionalTail && !0 === maskset.validPositions[pos].match.optionality && void 0 === maskset.validPositions[pos + 1] && (!0 === maskset.validPositions[pos].generatedInput || maskset.validPositions[pos].input == opts.skipOptionalPartCharacter && 0 < pos) ? determineTestTemplate(pos, getTests(pos, ndxIntlzr, pos - 1)) : maskset.validPositions[pos],\r\n                                test = testPos.match, ndxIntlzr = testPos.locator.slice(), maskTemplate.push(!0 === includeMode ? testPos.input : !1 === includeMode ? test.nativeDef : getPlaceholder(pos, test));\r\n                    } else {\r\n                        testPos = getTestTemplate(pos, ndxIntlzr, pos - 1), test = testPos.match, ndxIntlzr = testPos.locator.slice();\r\n                        var jitMasking = !0 !== noJit && (!1 !== opts.jitMasking ? opts.jitMasking : test.jit);\r\n                        jitRenderStatic = jitRenderStatic && test.static && test.def !== opts.groupSeparator && null === test.fn || maskset.validPositions[pos - 1] && test.static && test.def !== opts.groupSeparator && null === test.fn,\r\n                                jitRenderStatic || !1 === jitMasking || void 0 === jitMasking || \"number\" == typeof jitMasking && isFinite(jitMasking) && pos < jitMasking ? maskTemplate.push(!1 === includeMode ? test.nativeDef : getPlaceholder(pos, test)) : jitRenderStatic = !1;\r\n                    }\r\n                    pos++;\r\n                } while ((void 0 === maxLength || pos < maxLength) && (!0 !== test.static || \"\" !== test.def) || pos < minimalPos);\r\n                return \"\" === maskTemplate[maskTemplate.length - 1] && maskTemplate.pop(), !1 === includeMode && void 0 !== maskset.maskLength || (maskset.maskLength = pos - 1),\r\n                        opts.greedy = greedy, maskTemplate;\r\n            }\r\n\r\n            function resetMaskSet(soft) {\r\n                maskset.buffer = void 0, !0 !== soft && (maskset.validPositions = {}, maskset.p = 0);\r\n            }\r\n\r\n            function getLastValidPosition(closestTo, strict, validPositions) {\r\n                var before = -1, after = -1, valids = validPositions || maskset.validPositions;\r\n                for (var posNdx in void 0 === closestTo && (closestTo = -1), valids) {\r\n                    var psNdx = parseInt(posNdx);\r\n                    valids[psNdx] && (strict || !0 !== valids[psNdx].generatedInput) && (psNdx <= closestTo && (before = psNdx),\r\n                    closestTo <= psNdx && (after = psNdx));\r\n                }\r\n                return -1 === before || before == closestTo ? after : -1 == after ? before : closestTo - before < after - closestTo ? before : after;\r\n            }\r\n\r\n            function getDecisionTaker(tst) {\r\n                var decisionTaker = tst.locator[tst.alternation];\r\n                return \"string\" == typeof decisionTaker && 0 < decisionTaker.length && (decisionTaker = decisionTaker.split(\",\")[0]),\r\n                        void 0 !== decisionTaker ? decisionTaker.toString() : \"\";\r\n            }\r\n\r\n            function getLocator(tst, align) {\r\n                var locator = (null != tst.alternation ? tst.mloc[getDecisionTaker(tst)] : tst.locator).join(\"\");\r\n                if (\"\" !== locator) {\r\n                    for (; locator.length < align;) {\r\n                        locator += \"0\";\r\n                    }\r\n                }\r\n                return locator;\r\n            }\r\n\r\n            function determineTestTemplate(pos, tests) {\r\n                pos = 0 < pos ? pos - 1 : 0;\r\n                for (var altTest = getTest(pos), targetLocator = getLocator(altTest), tstLocator, closest, bestMatch, ndx = 0; ndx < tests.length; ndx++) {\r\n                    var tst = tests[ndx];\r\n                    tstLocator = getLocator(tst, targetLocator.length);\r\n                    var distance = Math.abs(tstLocator - targetLocator);\r\n                    (void 0 === closest || \"\" !== tstLocator && distance < closest || bestMatch && !opts.greedy && bestMatch.match.optionality && \"master\" === bestMatch.match.newBlockMarker && (!tst.match.optionality || !tst.match.newBlockMarker) || bestMatch && bestMatch.match.optionalQuantifier && !tst.match.optionalQuantifier) && (closest = distance,\r\n                            bestMatch = tst);\r\n                }\r\n                return bestMatch;\r\n            }\r\n\r\n            function getTestTemplate(pos, ndxIntlzr, tstPs) {\r\n                return maskset.validPositions[pos] || determineTestTemplate(pos, getTests(pos, ndxIntlzr ? ndxIntlzr.slice() : ndxIntlzr, tstPs));\r\n            }\r\n\r\n            function getTest(pos, tests) {\r\n                return maskset.validPositions[pos] ? maskset.validPositions[pos] : (tests || getTests(pos))[0];\r\n            }\r\n\r\n            function positionCanMatchDefinition(pos, testDefinition, opts) {\r\n                for (var valid = !1, tests = getTests(pos), tndx = 0; tndx < tests.length; tndx++) {\r\n                    if (tests[tndx].match && (!(tests[tndx].match.nativeDef !== testDefinition.match[opts.shiftPositions ? \"def\" : \"nativeDef\"] || opts.shiftPositions && testDefinition.match.static) || tests[tndx].match.nativeDef === testDefinition.match.nativeDef)) {\r\n                        valid = !0;\r\n                        break;\r\n                    }\r\n                    if (tests[tndx].match && tests[tndx].match.def === testDefinition.match.nativeDef) {\r\n                        valid = void 0;\r\n                        break;\r\n                    }\r\n                }\r\n                return !1 === valid && void 0 !== maskset.jitOffset[pos] && (valid = positionCanMatchDefinition(pos + maskset.jitOffset[pos], testDefinition, opts)),\r\n                        valid;\r\n            }\r\n\r\n            function getTests(pos, ndxIntlzr, tstPs) {\r\n                var maskTokens = maskset.maskToken, testPos = ndxIntlzr ? tstPs : 0,\r\n                        ndxInitializer = ndxIntlzr ? ndxIntlzr.slice() : [0], matches = [], insertStop = !1,\r\n                        latestMatch, cacheDependency = ndxIntlzr ? ndxIntlzr.join(\"\") : \"\";\r\n\r\n                function resolveTestFromToken(maskToken, ndxInitializer, loopNdx, quantifierRecurse) {\r\n                    function handleMatch(match, loopNdx, quantifierRecurse) {\r\n                        function isFirstMatch(latestMatch, tokenGroup) {\r\n                            var firstMatch = 0 === $.inArray(latestMatch, tokenGroup.matches);\r\n                            return firstMatch || $.each(tokenGroup.matches, function(ndx, match) {\r\n                                if (!0 === match.isQuantifier ? firstMatch = isFirstMatch(latestMatch, tokenGroup.matches[ndx - 1]) : Object.prototype.hasOwnProperty.call(match, \"matches\") && (firstMatch = isFirstMatch(latestMatch, match)),\r\n                                        firstMatch) {\r\n                                    return !1;\r\n                                }\r\n                            }), firstMatch;\r\n                        }\r\n\r\n                        function resolveNdxInitializer(pos, alternateNdx, targetAlternation) {\r\n                            var bestMatch, indexPos;\r\n                            if ((maskset.tests[pos] || maskset.validPositions[pos]) && $.each(maskset.tests[pos] || [maskset.validPositions[pos]], function(ndx, lmnt) {\r\n                                if (lmnt.mloc[alternateNdx]) {\r\n                                    return bestMatch = lmnt, !1;\r\n                                }\r\n                                var alternation = void 0 !== targetAlternation ? targetAlternation : lmnt.alternation,\r\n                                        ndxPos = void 0 !== lmnt.locator[alternation] ? lmnt.locator[alternation].toString().indexOf(alternateNdx) : -1;\r\n                                (void 0 === indexPos || ndxPos < indexPos) && -1 !== ndxPos && (bestMatch = lmnt,\r\n                                        indexPos = ndxPos);\r\n                            }), bestMatch) {\r\n                                var bestMatchAltIndex = bestMatch.locator[bestMatch.alternation],\r\n                                        locator = bestMatch.mloc[alternateNdx] || bestMatch.mloc[bestMatchAltIndex] || bestMatch.locator;\r\n                                return locator.slice((void 0 !== targetAlternation ? targetAlternation : bestMatch.alternation) + 1);\r\n                            }\r\n                            return void 0 !== targetAlternation ? resolveNdxInitializer(pos, alternateNdx) : void 0;\r\n                        }\r\n\r\n                        function isSubsetOf(source, target) {\r\n                            function expand(pattern) {\r\n                                for (var expanded = [], start = -1, end, i = 0, l = pattern.length; i < l; i++) {\r\n                                    if (\"-\" === pattern.charAt(i)) {\r\n                                        for (end = pattern.charCodeAt(i + 1); ++start < end;) {\r\n                                            expanded.push(String.fromCharCode(start));\r\n                                        }\r\n                                    } else {\r\n                                        start = pattern.charCodeAt(i),\r\n                                                expanded.push(pattern.charAt(i));\r\n                                    }\r\n                                }\r\n                                return expanded.join(\"\");\r\n                            }\r\n\r\n                            return source.match.def === target.match.nativeDef || !(!(opts.regex || source.match.fn instanceof RegExp && target.match.fn instanceof RegExp) || !0 === source.match.static || !0 === target.match.static) && -1 !== expand(target.match.fn.toString().replace(/[[\\]/]/g, \"\")).indexOf(expand(source.match.fn.toString().replace(/[[\\]/]/g, \"\")));\r\n                        }\r\n\r\n                        function staticCanMatchDefinition(source, target) {\r\n                            return !0 === source.match.static && !0 !== target.match.static && target.match.fn.test(source.match.def, maskset, pos, !1, opts, !1);\r\n                        }\r\n\r\n                        function setMergeLocators(targetMatch, altMatch) {\r\n                            var alternationNdx = targetMatch.alternation,\r\n                                    shouldMerge = void 0 === altMatch || alternationNdx === altMatch.alternation && -1 === targetMatch.locator[alternationNdx].toString().indexOf(altMatch.locator[alternationNdx]);\r\n                            if (!shouldMerge && alternationNdx > altMatch.alternation) {\r\n                                for (var i = altMatch.alternation; i < alternationNdx; i++) {\r\n                                    if (targetMatch.locator[i] !== altMatch.locator[i]) {\r\n                                        alternationNdx = i, shouldMerge = !0;\r\n                                        break;\r\n                                    }\r\n                                }\r\n                            }\r\n                            if (shouldMerge) {\r\n                                targetMatch.mloc = targetMatch.mloc || {};\r\n                                var locNdx = targetMatch.locator[alternationNdx];\r\n                                if (void 0 !== locNdx) {\r\n                                    if (\"string\" == typeof locNdx && (locNdx = locNdx.split(\",\")[0]), void 0 === targetMatch.mloc[locNdx] && (targetMatch.mloc[locNdx] = targetMatch.locator.slice()),\r\n                                    void 0 !== altMatch) {\r\n                                        for (var ndx in altMatch.mloc) {\r\n                                            \"string\" == typeof ndx && (ndx = ndx.split(\",\")[0]),\r\n                                            void 0 === targetMatch.mloc[ndx] && (targetMatch.mloc[ndx] = altMatch.mloc[ndx]);\r\n                                        }\r\n                                        targetMatch.locator[alternationNdx] = Object.keys(targetMatch.mloc).join(\",\");\r\n                                    }\r\n                                    return !0;\r\n                                }\r\n                                targetMatch.alternation = void 0;\r\n                            }\r\n                            return !1;\r\n                        }\r\n\r\n                        function isSameLevel(targetMatch, altMatch) {\r\n                            if (targetMatch.locator.length !== altMatch.locator.length) {\r\n                                return !1;\r\n                            }\r\n                            for (var locNdx = targetMatch.alternation + 1; locNdx < targetMatch.locator.length; locNdx++) {\r\n                                if (targetMatch.locator[locNdx] !== altMatch.locator[locNdx]) {\r\n                                    return !1;\r\n                                }\r\n                            }\r\n                            return !0;\r\n                        }\r\n\r\n                        if (testPos > opts._maxTestPos && void 0 !== quantifierRecurse) {\r\n                            throw \"Inputmask: There is probably an error in your mask definition or in the code. Create an issue on github with an example of the mask you are using. \" + maskset.mask;\r\n                        }\r\n                        if (testPos === pos && void 0 === match.matches) {\r\n                            return matches.push({\r\n                                                    match: match,\r\n                                                    locator: loopNdx.reverse(),\r\n                                                    cd: cacheDependency,\r\n                                                    mloc: {}\r\n                                                }), !0;\r\n                        }\r\n                        if (void 0 !== match.matches) {\r\n                            if (match.isGroup && quantifierRecurse !== match) {\r\n                                if (match = handleMatch(maskToken.matches[$.inArray(match, maskToken.matches) + 1], loopNdx, quantifierRecurse),\r\n                                        match) {\r\n                                    return !0;\r\n                                }\r\n                            } else if (match.isOptional) {\r\n                                var optionalToken = match, mtchsNdx = matches.length;\r\n                                if (match = resolveTestFromToken(match, ndxInitializer, loopNdx, quantifierRecurse),\r\n                                        match) {\r\n                                    if ($.each(matches, function(ndx, mtch) {\r\n                                        mtchsNdx <= ndx && (mtch.match.optionality = !0);\r\n                                    }), latestMatch = matches[matches.length - 1].match, void 0 !== quantifierRecurse || !isFirstMatch(latestMatch, optionalToken)) {\r\n                                        return !0;\r\n                                    }\r\n                                    insertStop = !0, testPos = pos;\r\n                                }\r\n                            } else if (match.isAlternator) {\r\n                                var alternateToken = match, malternateMatches = [], maltMatches,\r\n                                        currentMatches = matches.slice(), loopNdxCnt = loopNdx.length,\r\n                                        altIndex = 0 < ndxInitializer.length ? ndxInitializer.shift() : -1;\r\n                                if (-1 === altIndex || \"string\" == typeof altIndex) {\r\n                                    var currentPos = testPos, ndxInitializerClone = ndxInitializer.slice(),\r\n                                            altIndexArr = [], amndx;\r\n                                    if (\"string\" == typeof altIndex) {\r\n                                        altIndexArr = altIndex.split(\",\");\r\n                                    } else {\r\n                                        for (amndx = 0; amndx < alternateToken.matches.length; amndx++) {\r\n                                            altIndexArr.push(amndx.toString());\r\n                                        }\r\n                                    }\r\n                                    if (void 0 !== maskset.excludes[pos]) {\r\n                                        for (var altIndexArrClone = altIndexArr.slice(), i = 0, exl = maskset.excludes[pos].length; i < exl; i++) {\r\n                                            var excludeSet = maskset.excludes[pos][i].toString().split(\":\");\r\n                                            loopNdx.length == excludeSet[1] && altIndexArr.splice(altIndexArr.indexOf(excludeSet[0]), 1);\r\n                                        }\r\n                                        0 === altIndexArr.length && (delete maskset.excludes[pos], altIndexArr = altIndexArrClone);\r\n                                    }\r\n                                    (!0 === opts.keepStatic || isFinite(parseInt(opts.keepStatic)) && currentPos >= opts.keepStatic) && (altIndexArr = altIndexArr.slice(0, 1));\r\n                                    for (var unMatchedAlternation = !1, ndx = 0; ndx < altIndexArr.length; ndx++) {\r\n                                        amndx = parseInt(altIndexArr[ndx]), matches = [], ndxInitializer = \"string\" == typeof altIndex && resolveNdxInitializer(testPos, amndx, loopNdxCnt) || ndxInitializerClone.slice(),\r\n                                                alternateToken.matches[amndx] && handleMatch(alternateToken.matches[amndx], [amndx].concat(loopNdx), quantifierRecurse) ? match = !0 : 0 === ndx && (unMatchedAlternation = !0),\r\n                                                maltMatches = matches.slice(), testPos = currentPos, matches = [];\r\n                                        for (var ndx1 = 0; ndx1 < maltMatches.length; ndx1++) {\r\n                                            var altMatch = maltMatches[ndx1], dropMatch = !1;\r\n                                            altMatch.match.jit = altMatch.match.jit || unMatchedAlternation, altMatch.alternation = altMatch.alternation || loopNdxCnt,\r\n                                                    setMergeLocators(altMatch);\r\n                                            for (var ndx2 = 0; ndx2 < malternateMatches.length; ndx2++) {\r\n                                                var altMatch2 = malternateMatches[ndx2];\r\n                                                if (\"string\" != typeof altIndex || void 0 !== altMatch.alternation && -1 !== $.inArray(altMatch.locator[altMatch.alternation].toString(), altIndexArr)) {\r\n                                                    if (altMatch.match.nativeDef === altMatch2.match.nativeDef) {\r\n                                                        dropMatch = !0, setMergeLocators(altMatch2, altMatch);\r\n                                                        break;\r\n                                                    }\r\n                                                    if (isSubsetOf(altMatch, altMatch2)) {\r\n                                                        setMergeLocators(altMatch, altMatch2) && (dropMatch = !0, malternateMatches.splice(malternateMatches.indexOf(altMatch2), 0, altMatch));\r\n                                                        break;\r\n                                                    }\r\n                                                    if (isSubsetOf(altMatch2, altMatch)) {\r\n                                                        setMergeLocators(altMatch2, altMatch);\r\n                                                        break;\r\n                                                    }\r\n                                                    if (staticCanMatchDefinition(altMatch, altMatch2)) {\r\n                                                        isSameLevel(altMatch, altMatch2) || void 0 !== el.inputmask.userOptions.keepStatic ? setMergeLocators(altMatch, altMatch2) && (dropMatch = !0,\r\n                                                                malternateMatches.splice(malternateMatches.indexOf(altMatch2), 0, altMatch)) : opts.keepStatic = !0;\r\n                                                        break;\r\n                                                    }\r\n                                                }\r\n                                            }\r\n                                            dropMatch || malternateMatches.push(altMatch);\r\n                                        }\r\n                                    }\r\n                                    matches = currentMatches.concat(malternateMatches), testPos = pos, insertStop = 0 < matches.length,\r\n                                            match = 0 < malternateMatches.length, ndxInitializer = ndxInitializerClone.slice();\r\n                                } else {\r\n                                    match = handleMatch(alternateToken.matches[altIndex] || maskToken.matches[altIndex], [altIndex].concat(loopNdx), quantifierRecurse);\r\n                                }\r\n                                if (match) {\r\n                                    return !0;\r\n                                }\r\n                            } else if (match.isQuantifier && quantifierRecurse !== maskToken.matches[$.inArray(match, maskToken.matches) - 1]) {\r\n                                for (var qt = match, qndx = 0 < ndxInitializer.length ? ndxInitializer.shift() : 0; qndx < (isNaN(qt.quantifier.max) ? qndx + 1 : qt.quantifier.max) && testPos <= pos; qndx++) {\r\n                                    var tokenGroup = maskToken.matches[$.inArray(qt, maskToken.matches) - 1];\r\n                                    if (match = handleMatch(tokenGroup, [qndx].concat(loopNdx), tokenGroup), match) {\r\n                                        if (latestMatch = matches[matches.length - 1].match, latestMatch.optionalQuantifier = qndx >= qt.quantifier.min,\r\n                                                latestMatch.jit = (qndx || 1) * tokenGroup.matches.indexOf(latestMatch) >= qt.quantifier.jit,\r\n                                        latestMatch.optionalQuantifier && isFirstMatch(latestMatch, tokenGroup)) {\r\n                                            insertStop = !0, testPos = pos;\r\n                                            break;\r\n                                        }\r\n                                        return latestMatch.jit && (maskset.jitOffset[pos] = tokenGroup.matches.length - tokenGroup.matches.indexOf(latestMatch)),\r\n                                                !0;\r\n                                    }\r\n                                }\r\n                            } else if (match = resolveTestFromToken(match, ndxInitializer, loopNdx, quantifierRecurse),\r\n                                    match) {\r\n                                return !0;\r\n                            }\r\n                        } else {\r\n                            testPos++;\r\n                        }\r\n                    }\r\n\r\n                    for (var tndx = 0 < ndxInitializer.length ? ndxInitializer.shift() : 0; tndx < maskToken.matches.length; tndx++) {\r\n                        if (!0 !== maskToken.matches[tndx].isQuantifier) {\r\n                            var match = handleMatch(maskToken.matches[tndx], [tndx].concat(loopNdx), quantifierRecurse);\r\n                            if (match && testPos === pos) {\r\n                                return match;\r\n                            }\r\n                            if (pos < testPos) {\r\n                                break;\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n\r\n                function mergeLocators(pos, tests) {\r\n                    var locator = [];\r\n                    return $.isArray(tests) || (tests = [tests]), 0 < tests.length && (void 0 === tests[0].alternation || !0 === opts.keepStatic ? (locator = determineTestTemplate(pos, tests.slice()).locator.slice(),\r\n                                                                  0 === locator.length && (locator = tests[0].locator.slice())) : $.each(tests, function(ndx, tst) {\r\n                        if (\"\" !== tst.def) {\r\n                            if (0 === locator.length) {\r\n                                locator = tst.locator.slice();\r\n                            } else {\r\n                                for (var i = 0; i < locator.length; i++) {\r\n                                    tst.locator[i] && -1 === locator[i].toString().indexOf(tst.locator[i]) && (locator[i] += \",\" + tst.locator[i]);\r\n                                }\r\n                            }\r\n                        }\r\n                    })), locator;\r\n                }\r\n\r\n                if (-1 < pos && (void 0 === maxLength || pos < maxLength)) {\r\n                    if (void 0 === ndxIntlzr) {\r\n                        for (var previousPos = pos - 1, test; void 0 === (test = maskset.validPositions[previousPos] || maskset.tests[previousPos]) && -1 < previousPos;) {\r\n                            previousPos--;\r\n                        }\r\n                        void 0 !== test && -1 < previousPos && (ndxInitializer = mergeLocators(previousPos, test),\r\n                                cacheDependency = ndxInitializer.join(\"\"), testPos = previousPos);\r\n                    }\r\n                    if (maskset.tests[pos] && maskset.tests[pos][0].cd === cacheDependency) {\r\n                        return maskset.tests[pos];\r\n                    }\r\n                    for (var mtndx = ndxInitializer.shift(); mtndx < maskTokens.length; mtndx++) {\r\n                        var match = resolveTestFromToken(maskTokens[mtndx], ndxInitializer, [mtndx]);\r\n                        if (match && testPos === pos || pos < testPos) {\r\n                            break;\r\n                        }\r\n                    }\r\n                }\r\n                return 0 !== matches.length && !insertStop || matches.push({\r\n                                                                               match: {\r\n                                                                                   fn: null,\r\n                                                                                   static: !0,\r\n                                                                                   optionality: !1,\r\n                                                                                   casing: null,\r\n                                                                                   def: \"\",\r\n                                                                                   placeholder: \"\"\r\n                                                                               },\r\n                                                                               locator: [],\r\n                                                                               mloc: {},\r\n                                                                               cd: cacheDependency\r\n                                                                           }), void 0 !== ndxIntlzr && maskset.tests[pos] ? $.extend(!0, [], matches) : (maskset.tests[pos] = $.extend(!0, [], matches),\r\n                        maskset.tests[pos]);\r\n            }\r\n\r\n            function getBufferTemplate() {\r\n                return void 0 === maskset._buffer && (maskset._buffer = getMaskTemplate(!1, 1),\r\n                       void 0 === maskset.buffer && (maskset.buffer = maskset._buffer.slice())), maskset._buffer;\r\n            }\r\n\r\n            function getBuffer(noCache) {\r\n                return void 0 !== maskset.buffer && !0 !== noCache || (maskset.buffer = getMaskTemplate(!0, getLastValidPosition(), !0),\r\n                void 0 === maskset._buffer && (maskset._buffer = maskset.buffer.slice())), maskset.buffer;\r\n            }\r\n\r\n            function refreshFromBuffer(start, end, buffer) {\r\n                var i, p, skipOptionalPartCharacter = opts.skipOptionalPartCharacter,\r\n                        bffr = isRTL ? buffer.slice().reverse() : buffer;\r\n                if (opts.skipOptionalPartCharacter = \"\", !0 === start) {\r\n                    resetMaskSet(), maskset.tests = {},\r\n                            start = 0, end = buffer.length, p = determineNewCaretPosition({\r\n                                                                                              begin: 0,\r\n                                                                                              end: 0\r\n                                                                                          }, !1).begin;\r\n                } else {\r\n                    for (i = start; i < end; i++) {\r\n                        delete maskset.validPositions[i];\r\n                    }\r\n                    p = start;\r\n                }\r\n                var keypress = new $.Event(\"keypress\");\r\n                for (i = start; i < end; i++) {\r\n                    keypress.which = bffr[i].toString().charCodeAt(0), ignorable = !1;\r\n                    var valResult = EventHandlers.keypressEvent.call(el, keypress, !0, !1, !1, p);\r\n                    !1 !== valResult && (p = valResult.forwardPosition);\r\n                }\r\n                opts.skipOptionalPartCharacter = skipOptionalPartCharacter;\r\n            }\r\n\r\n            function casing(elem, test, pos) {\r\n                switch (opts.casing || test.casing) {\r\n                    case \"upper\":\r\n                        elem = elem.toUpperCase();\r\n                        break;\r\n\r\n                    case \"lower\":\r\n                        elem = elem.toLowerCase();\r\n                        break;\r\n\r\n                    case \"title\":\r\n                        var posBefore = maskset.validPositions[pos - 1];\r\n                        elem = 0 === pos || posBefore && posBefore.input === String.fromCharCode(keyCode.SPACE) ? elem.toUpperCase() : elem.toLowerCase();\r\n                        break;\r\n\r\n                    default:\r\n                        if ($.isFunction(opts.casing)) {\r\n                            var args = Array.prototype.slice.call(arguments);\r\n                            args.push(maskset.validPositions), elem = opts.casing.apply(this, args);\r\n                        }\r\n                }\r\n                return elem;\r\n            }\r\n\r\n            function checkAlternationMatch(altArr1, altArr2, na) {\r\n                for (var altArrC = opts.greedy ? altArr2 : altArr2.slice(0, 1), isMatch = !1, naArr = void 0 !== na ? na.split(\",\") : [], naNdx, i = 0; i < naArr.length; i++) {\r\n                    -1 !== (naNdx = altArr1.indexOf(naArr[i])) && altArr1.splice(naNdx, 1);\r\n                }\r\n                for (var alndx = 0; alndx < altArr1.length; alndx++) {\r\n                    if (-1 !== $.inArray(altArr1[alndx], altArrC)) {\r\n                        isMatch = !0;\r\n                        break;\r\n                    }\r\n                }\r\n                return isMatch;\r\n            }\r\n\r\n            function alternate(maskPos, c, strict, fromIsValid, rAltPos, selection) {\r\n                var validPsClone = $.extend(!0, {}, maskset.validPositions), tstClone = $.extend(!0, {}, maskset.tests),\r\n                        lastAlt, alternation, isValidRslt = !1, returnRslt = !1, altPos, prevAltPos, i, validPos,\r\n                        decisionPos, lAltPos = void 0 !== rAltPos ? rAltPos : getLastValidPosition(), nextPos, input,\r\n                        begin, end;\r\n                if (selection && (begin = selection.begin, end = selection.end, selection.begin > selection.end && (begin = selection.end,\r\n                        end = selection.begin)), -1 === lAltPos && void 0 === rAltPos) {\r\n                    lastAlt = 0, prevAltPos = getTest(lastAlt),\r\n                            alternation = prevAltPos.alternation;\r\n                } else {\r\n                    for (; 0 <= lAltPos; lAltPos--) {\r\n                        if (altPos = maskset.validPositions[lAltPos],\r\n                        altPos && void 0 !== altPos.alternation) {\r\n                            if (prevAltPos && prevAltPos.locator[altPos.alternation] !== altPos.locator[altPos.alternation]) {\r\n                                break;\r\n                            }\r\n                            lastAlt = lAltPos, alternation = maskset.validPositions[lastAlt].alternation, prevAltPos = altPos;\r\n                        }\r\n                    }\r\n                }\r\n                if (void 0 !== alternation) {\r\n                    decisionPos = parseInt(lastAlt), maskset.excludes[decisionPos] = maskset.excludes[decisionPos] || [],\r\n                    !0 !== maskPos && maskset.excludes[decisionPos].push(getDecisionTaker(prevAltPos) + \":\" + prevAltPos.alternation);\r\n                    var validInputs = [], resultPos = -1;\r\n                    for (i = decisionPos; i < getLastValidPosition(void 0, !0) + 1; i++) {\r\n                        -1 === resultPos && maskPos <= i && void 0 !== c && (validInputs.push(c),\r\n                                resultPos = validInputs.length - 1), validPos = maskset.validPositions[i], validPos && !0 !== validPos.generatedInput && (void 0 === selection || i < begin || end <= i) && validInputs.push(validPos.input),\r\n                                delete maskset.validPositions[i];\r\n                    }\r\n                    for (-1 === resultPos && void 0 !== c && (validInputs.push(c), resultPos = validInputs.length - 1); void 0 !== maskset.excludes[decisionPos] && maskset.excludes[decisionPos].length < 10;) {\r\n                        for (maskset.tests = {}, resetMaskSet(!0), isValidRslt = !0, i = 0; i < validInputs.length && (nextPos = isValidRslt.caret || getLastValidPosition(void 0, !0) + 1,\r\n                                input = validInputs[i], isValidRslt = isValid(nextPos, input, !1, fromIsValid, !0)); i++) {\r\n                            i === resultPos && (returnRslt = isValidRslt),\r\n                            1 == maskPos && isValidRslt && (returnRslt = {\r\n                                caretPos: i\r\n                            });\r\n                        }\r\n                        if (isValidRslt) {\r\n                            break;\r\n                        }\r\n                        if (resetMaskSet(), prevAltPos = getTest(decisionPos), maskset.validPositions = $.extend(!0, {}, validPsClone),\r\n                                maskset.tests = $.extend(!0, {}, tstClone), !maskset.excludes[decisionPos]) {\r\n                            returnRslt = alternate(maskPos, c, strict, fromIsValid, decisionPos - 1, selection);\r\n                            break;\r\n                        }\r\n                        var decisionTaker = getDecisionTaker(prevAltPos);\r\n                        if (-1 !== maskset.excludes[decisionPos].indexOf(decisionTaker + \":\" + prevAltPos.alternation)) {\r\n                            returnRslt = alternate(maskPos, c, strict, fromIsValid, decisionPos - 1, selection);\r\n                            break;\r\n                        }\r\n                        for (maskset.excludes[decisionPos].push(decisionTaker + \":\" + prevAltPos.alternation),\r\n                                     i = decisionPos; i < getLastValidPosition(void 0, !0) + 1; i++) {\r\n                            delete maskset.validPositions[i];\r\n                        }\r\n                    }\r\n                }\r\n                return returnRslt && !1 === opts.keepStatic || delete maskset.excludes[decisionPos],\r\n                        returnRslt;\r\n            }\r\n\r\n            function isValid(pos, c, strict, fromIsValid, fromAlternate, validateOnly) {\r\n                function isSelection(posObj) {\r\n                    return isRTL ? 1 < posObj.begin - posObj.end || posObj.begin - posObj.end == 1 : 1 < posObj.end - posObj.begin || posObj.end - posObj.begin == 1;\r\n                }\r\n\r\n                strict = !0 === strict;\r\n                var maskPos = pos;\r\n\r\n                function processCommandObject(commandObj) {\r\n                    if (void 0 !== commandObj) {\r\n                        if (void 0 !== commandObj.remove && ($.isArray(commandObj.remove) || (commandObj.remove = [commandObj.remove]),\r\n                                $.each(commandObj.remove.sort(function(a, b) {\r\n                                    return b.pos - a.pos;\r\n                                }), function(ndx, lmnt) {\r\n                                    revalidateMask({\r\n                                                       begin: lmnt,\r\n                                                       end: lmnt + 1\r\n                                                   });\r\n                                }), commandObj.remove = void 0), void 0 !== commandObj.insert && ($.isArray(commandObj.insert) || (commandObj.insert = [commandObj.insert]),\r\n                                $.each(commandObj.insert.sort(function(a, b) {\r\n                                    return a.pos - b.pos;\r\n                                }), function(ndx, lmnt) {\r\n                                    \"\" !== lmnt.c && isValid(lmnt.pos, lmnt.c, void 0 === lmnt.strict || lmnt.strict, void 0 !== lmnt.fromIsValid ? lmnt.fromIsValid : fromIsValid);\r\n                                }), commandObj.insert = void 0), commandObj.refreshFromBuffer && commandObj.buffer) {\r\n                            var refresh = commandObj.refreshFromBuffer;\r\n                            refreshFromBuffer(!0 === refresh ? refresh : refresh.start, refresh.end, commandObj.buffer),\r\n                                    commandObj.refreshFromBuffer = void 0;\r\n                        }\r\n                        void 0 !== commandObj.rewritePosition && (maskPos = commandObj.rewritePosition,\r\n                                commandObj = !0);\r\n                    }\r\n                    return commandObj;\r\n                }\r\n\r\n                function _isValid(position, c, strict) {\r\n                    var rslt = !1;\r\n                    return $.each(getTests(position), function(ndx, tst) {\r\n                        var test = tst.match;\r\n                        if (getBuffer(!0), rslt = null != test.fn ? test.fn.test(c, maskset, position, strict, opts, isSelection(pos)) : (c === test.def || c === opts.skipOptionalPartCharacter) && \"\" !== test.def && {\r\n                            c: getPlaceholder(position, test, !0) || test.def,\r\n                            pos: position\r\n                        }, !1 !== rslt) {\r\n                            var elem = void 0 !== rslt.c ? rslt.c : c, validatedPos = position;\r\n                            return elem = elem === opts.skipOptionalPartCharacter && !0 === test.static ? getPlaceholder(position, test, !0) || test.def : elem,\r\n                                    rslt = processCommandObject(rslt), !0 !== rslt && void 0 !== rslt.pos && rslt.pos !== position && (validatedPos = rslt.pos),\r\n                                    !0 !== rslt && void 0 === rslt.pos && void 0 === rslt.c ? !1 : (!1 === revalidateMask(pos, $.extend({}, tst, {\r\n                                        input: casing(elem, test, validatedPos)\r\n                                    }), fromIsValid, validatedPos) && (rslt = !1), !1);\r\n                        }\r\n                    }), rslt;\r\n                }\r\n\r\n                void 0 !== pos.begin && (maskPos = isRTL ? pos.end : pos.begin);\r\n                var result = !0, positionsClone = $.extend(!0, {}, maskset.validPositions);\r\n                if (!1 === opts.keepStatic && void 0 !== maskset.excludes[maskPos] && !0 !== fromAlternate && !0 !== fromIsValid) {\r\n                    for (var i = maskPos; i < (isRTL ? pos.begin : pos.end); i++) {\r\n                        void 0 !== maskset.excludes[i] && (maskset.excludes[i] = void 0,\r\n                                delete maskset.tests[i]);\r\n                    }\r\n                }\r\n                if ($.isFunction(opts.preValidation) && !0 !== fromIsValid && !0 !== validateOnly && (result = opts.preValidation.call(el, getBuffer(), maskPos, c, isSelection(pos), opts, maskset, pos, strict || fromAlternate),\r\n                        result = processCommandObject(result)), !0 === result) {\r\n                    if (void 0 === maxLength || maskPos < maxLength) {\r\n                        if (result = _isValid(maskPos, c, strict), (!strict || !0 === fromIsValid) && !1 === result && !0 !== validateOnly) {\r\n                            var currentPosValid = maskset.validPositions[maskPos];\r\n                            if (!currentPosValid || !0 !== currentPosValid.match.static || currentPosValid.match.def !== c && c !== opts.skipOptionalPartCharacter) {\r\n                                if (opts.insertMode || void 0 === maskset.validPositions[seekNext(maskPos)] || pos.end > maskPos) {\r\n                                    var skip = !1;\r\n                                    if (maskset.jitOffset[maskPos] && void 0 === maskset.validPositions[seekNext(maskPos)] && (result = isValid(maskPos + maskset.jitOffset[maskPos], c, !0),\r\n                                        !1 !== result && (!0 !== fromAlternate && (result.caret = maskPos), skip = !0)),\r\n                                    pos.end > maskPos && (maskset.validPositions[maskPos] = void 0), !skip && !isMask(maskPos, opts.keepStatic)) {\r\n                                        for (var nPos = maskPos + 1, snPos = seekNext(maskPos); nPos <= snPos; nPos++) {\r\n                                            if (result = _isValid(nPos, c, strict),\r\n                                            !1 !== result) {\r\n                                                result = trackbackPositions(maskPos, void 0 !== result.pos ? result.pos : nPos) || result,\r\n                                                        maskPos = nPos;\r\n                                                break;\r\n                                            }\r\n                                        }\r\n                                    }\r\n                                }\r\n                            } else {\r\n                                result = {\r\n                                    caret: seekNext(maskPos)\r\n                                };\r\n                            }\r\n                        }\r\n                    } else {\r\n                        result = !1;\r\n                    }\r\n                    !1 !== result || !opts.keepStatic || !isComplete(getBuffer()) && 0 !== maskPos || strict || !0 === fromAlternate ? isSelection(pos) && maskset.tests[maskPos] && 1 < maskset.tests[maskPos].length && opts.keepStatic && !strict && !0 !== fromAlternate && (result = alternate(!0)) : result = alternate(maskPos, c, strict, fromIsValid, void 0, pos),\r\n                    !0 === result && (result = {\r\n                        pos: maskPos\r\n                    });\r\n                }\r\n                if ($.isFunction(opts.postValidation) && !0 !== fromIsValid && !0 !== validateOnly) {\r\n                    var postResult = opts.postValidation.call(el, getBuffer(!0), void 0 !== pos.begin ? isRTL ? pos.end : pos.begin : pos, c, result, opts, maskset, strict);\r\n                    void 0 !== postResult && (result = !0 === postResult ? result : postResult);\r\n                }\r\n                result && void 0 === result.pos && (result.pos = maskPos), !1 === result || !0 === validateOnly ? (resetMaskSet(!0),\r\n                        maskset.validPositions = $.extend(!0, {}, positionsClone)) : trackbackPositions(void 0, maskPos, !0);\r\n                var endResult = processCommandObject(result);\r\n                return endResult;\r\n            }\r\n\r\n            function trackbackPositions(originalPos, newPos, fillOnly) {\r\n                if (void 0 === originalPos) {\r\n                    for (originalPos = newPos - 1; 0 < originalPos && !maskset.validPositions[originalPos]; originalPos--) {\r\n                        ;\r\n                    }\r\n                }\r\n                for (var ps = originalPos; ps < newPos; ps++) {\r\n                    if (void 0 === maskset.validPositions[ps] && !isMask(ps, !0)) {\r\n                        var vp = 0 == ps ? getTest(ps) : maskset.validPositions[ps - 1];\r\n                        if (vp) {\r\n                            var tests = getTests(ps).slice();\r\n                            \"\" === tests[tests.length - 1].match.def && tests.pop();\r\n                            var bestMatch = determineTestTemplate(ps, tests), np;\r\n                            if (bestMatch && (!0 !== bestMatch.match.jit || \"master\" === bestMatch.match.newBlockMarker && (np = maskset.validPositions[ps + 1]) && !0 === np.match.optionalQuantifier) && (bestMatch = $.extend({}, bestMatch, {\r\n                                input: getPlaceholder(ps, bestMatch.match, !0) || bestMatch.match.def\r\n                            }), bestMatch.generatedInput = !0, revalidateMask(ps, bestMatch, !0), !0 !== fillOnly)) {\r\n                                var cvpInput = maskset.validPositions[newPos].input;\r\n                                return maskset.validPositions[newPos] = void 0, isValid(newPos, cvpInput, !0, !0);\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n\r\n            function revalidateMask(pos, validTest, fromIsValid, validatedPos) {\r\n                function IsEnclosedStatic(pos, valids, selection) {\r\n                    var posMatch = valids[pos];\r\n                    if (void 0 === posMatch || !0 !== posMatch.match.static || !0 === posMatch.match.optionality || void 0 !== valids[0] && void 0 !== valids[0].alternation) {\r\n                        return !1;\r\n                    }\r\n                    var prevMatch = selection.begin <= pos - 1 ? valids[pos - 1] && !0 === valids[pos - 1].match.static && valids[pos - 1] : valids[pos - 1],\r\n                            nextMatch = selection.end > pos + 1 ? valids[pos + 1] && !0 === valids[pos + 1].match.static && valids[pos + 1] : valids[pos + 1];\r\n                    return prevMatch && nextMatch;\r\n                }\r\n\r\n                var offset = 0, begin = void 0 !== pos.begin ? pos.begin : pos,\r\n                        end = void 0 !== pos.end ? pos.end : pos;\r\n                if (pos.begin > pos.end && (begin = pos.end, end = pos.begin), validatedPos = void 0 !== validatedPos ? validatedPos : begin,\r\n                begin !== end || opts.insertMode && void 0 !== maskset.validPositions[validatedPos] && void 0 === fromIsValid || void 0 === validTest) {\r\n                    var positionsClone = $.extend(!0, {}, maskset.validPositions),\r\n                            lvp = getLastValidPosition(void 0, !0), i;\r\n                    for (maskset.p = begin, i = lvp; begin <= i; i--) {\r\n                        delete maskset.validPositions[i],\r\n                        void 0 === validTest && delete maskset.tests[i + 1];\r\n                    }\r\n                    var valid = !0, j = validatedPos, posMatch = j, t, canMatch;\r\n                    for (validTest && (maskset.validPositions[validatedPos] = $.extend(!0, {}, validTest),\r\n                            posMatch++, j++), i = validTest ? end : end - 1; i <= lvp; i++) {\r\n                        if (void 0 !== (t = positionsClone[i]) && !0 !== t.generatedInput && (end <= i || begin <= i && IsEnclosedStatic(i, positionsClone, {\r\n                            begin: begin,\r\n                            end: end\r\n                        }))) {\r\n                            for (; \"\" !== getTest(posMatch).match.def;) {\r\n                                if (!1 !== (canMatch = positionCanMatchDefinition(posMatch, t, opts)) || \"+\" === t.match.def) {\r\n                                    \"+\" === t.match.def && getBuffer(!0);\r\n                                    var result = isValid(posMatch, t.input, \"+\" !== t.match.def, \"+\" !== t.match.def);\r\n                                    if (valid = !1 !== result, j = (result.pos || posMatch) + 1, !valid && canMatch) {\r\n                                        break;\r\n                                    }\r\n                                } else {\r\n                                    valid = !1;\r\n                                }\r\n                                if (valid) {\r\n                                    void 0 === validTest && t.match.static && i === pos.begin && offset++;\r\n                                    break;\r\n                                }\r\n                                if (!valid && posMatch > maskset.maskLength) {\r\n                                    break;\r\n                                }\r\n                                posMatch++;\r\n                            }\r\n                            \"\" == getTest(posMatch).match.def && (valid = !1), posMatch = j;\r\n                        }\r\n                        if (!valid) {\r\n                            break;\r\n                        }\r\n                    }\r\n                    if (!valid) {\r\n                        return maskset.validPositions = $.extend(!0, {}, positionsClone), resetMaskSet(!0),\r\n                                !1;\r\n                    }\r\n                } else {\r\n                    validTest && getTest(validatedPos).match.cd === validTest.match.cd && (maskset.validPositions[validatedPos] = $.extend(!0, {}, validTest));\r\n                }\r\n                return resetMaskSet(!0), offset;\r\n            }\r\n\r\n            function isMask(pos, strict, fuzzy) {\r\n                var test = getTestTemplate(pos).match;\r\n                if (\"\" === test.def && (test = getTest(pos).match), !0 !== test.static) {\r\n                    return test.fn;\r\n                }\r\n                if (!0 === fuzzy && void 0 !== maskset.validPositions[pos] && !0 !== maskset.validPositions[pos].generatedInput) {\r\n                    return !0;\r\n                }\r\n                if (!0 !== strict && -1 < pos) {\r\n                    if (fuzzy) {\r\n                        var tests = getTests(pos);\r\n                        return tests.length > 1 + (\"\" === tests[tests.length - 1].match.def ? 1 : 0);\r\n                    }\r\n                    var testTemplate = determineTestTemplate(pos, getTests(pos)),\r\n                            testPlaceHolder = getPlaceholder(pos, testTemplate.match);\r\n                    return testTemplate.match.def !== testPlaceHolder;\r\n                }\r\n                return !1;\r\n            }\r\n\r\n            function seekNext(pos, newBlock, fuzzy) {\r\n                void 0 === fuzzy && (fuzzy = !0);\r\n                for (var position = pos + 1; \"\" !== getTest(position).match.def && (!0 === newBlock && (!0 !== getTest(position).match.newBlockMarker || !isMask(position, void 0, !0)) || !0 !== newBlock && !isMask(position, void 0, fuzzy));) {\r\n                    position++;\r\n                }\r\n                return position;\r\n            }\r\n\r\n            function seekPrevious(pos, newBlock) {\r\n                var position = pos, tests;\r\n                if (position <= 0) {\r\n                    return 0;\r\n                }\r\n                for (; 0 < --position && (!0 === newBlock && !0 !== getTest(position).match.newBlockMarker || !0 !== newBlock && !isMask(position, void 0, !0) && (tests = getTests(position),\r\n                                          tests.length < 2 || 2 === tests.length && \"\" === tests[1].match.def));) {\r\n                    ;\r\n                }\r\n                return position;\r\n            }\r\n\r\n            function writeBuffer(input, buffer, caretPos, event, triggerEvents) {\r\n                if (event && $.isFunction(opts.onBeforeWrite)) {\r\n                    var result = opts.onBeforeWrite.call(inputmask, event, buffer, caretPos, opts);\r\n                    if (result) {\r\n                        if (result.refreshFromBuffer) {\r\n                            var refresh = result.refreshFromBuffer;\r\n                            refreshFromBuffer(!0 === refresh ? refresh : refresh.start, refresh.end, result.buffer || buffer),\r\n                                    buffer = getBuffer(!0);\r\n                        }\r\n                        void 0 !== caretPos && (caretPos = void 0 !== result.caret ? result.caret : caretPos);\r\n                    }\r\n                }\r\n                if (void 0 !== input && (input.inputmask._valueSet(buffer.join(\"\")), void 0 === caretPos || void 0 !== event && \"blur\" === event.type || caret(input, caretPos, void 0, void 0, void 0 !== event && \"keydown\" === event.type && (event.keyCode === keyCode.DELETE || event.keyCode === keyCode.BACKSPACE)),\r\n                !0 === triggerEvents)) {\r\n                    var $input = $(input), nptVal = input.inputmask._valueGet();\r\n                    skipInputEvent = !0, $input.trigger(\"input\"), setTimeout(function() {\r\n                        nptVal === getBufferTemplate().join(\"\") ? $input.trigger(\"cleared\") : !0 === isComplete(buffer) && $input.trigger(\"complete\");\r\n                    }, 0);\r\n                }\r\n            }\r\n\r\n            function getPlaceholder(pos, test, returnPL) {\r\n                if (test = test || getTest(pos).match, void 0 !== test.placeholder || !0 === returnPL) {\r\n                    return $.isFunction(test.placeholder) ? test.placeholder(opts) : test.placeholder;\r\n                }\r\n                if (!0 !== test.static) {\r\n                    return opts.placeholder.charAt(pos % opts.placeholder.length);\r\n                }\r\n                if (-1 < pos && void 0 === maskset.validPositions[pos]) {\r\n                    var tests = getTests(pos), staticAlternations = [], prevTest;\r\n                    if (tests.length > 1 + (\"\" === tests[tests.length - 1].match.def ? 1 : 0)) {\r\n                        for (var i = 0; i < tests.length; i++) {\r\n                            if (\"\" !== tests[i].match.def && !0 !== tests[i].match.optionality && !0 !== tests[i].match.optionalQuantifier && (!0 === tests[i].match.static || void 0 === prevTest || !1 !== tests[i].match.fn.test(prevTest.match.def, maskset, pos, !0, opts)) && (staticAlternations.push(tests[i]),\r\n                                !0 === tests[i].match.static && (prevTest = tests[i]), 1 < staticAlternations.length && /[0-9a-bA-Z]/.test(staticAlternations[0].match.def))) {\r\n                                return opts.placeholder.charAt(pos % opts.placeholder.length);\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n                return test.def;\r\n            }\r\n\r\n            function HandleNativePlaceholder(npt, value) {\r\n                if (ie) {\r\n                    if (npt.inputmask._valueGet() !== value && (npt.placeholder !== value || \"\" === npt.placeholder)) {\r\n                        var buffer = getBuffer().slice(), nptValue = npt.inputmask._valueGet();\r\n                        if (nptValue !== value) {\r\n                            var lvp = getLastValidPosition();\r\n                            -1 === lvp && nptValue === getBufferTemplate().join(\"\") ? buffer = [] : -1 !== lvp && clearOptionalTail(buffer),\r\n                                    writeBuffer(npt, buffer);\r\n                        }\r\n                    }\r\n                } else {\r\n                    npt.placeholder !== value && (npt.placeholder = value, \"\" === npt.placeholder && npt.removeAttribute(\"placeholder\"));\r\n                }\r\n            }\r\n\r\n            function determineNewCaretPosition(selectedCaret, tabbed) {\r\n                function doRadixFocus(clickPos) {\r\n                    if (\"\" !== opts.radixPoint && 0 !== opts.digits) {\r\n                        var vps = maskset.validPositions;\r\n                        if (void 0 === vps[clickPos] || vps[clickPos].input === getPlaceholder(clickPos)) {\r\n                            if (clickPos < seekNext(-1)) {\r\n                                return !0;\r\n                            }\r\n                            var radixPos = $.inArray(opts.radixPoint, getBuffer());\r\n                            if (-1 !== radixPos) {\r\n                                for (var vp in vps) {\r\n                                    if (vps[vp] && radixPos < vp && vps[vp].input !== getPlaceholder(vp)) {\r\n                                        return !1;\r\n                                    }\r\n                                }\r\n                                return !0;\r\n                            }\r\n                        }\r\n                    }\r\n                    return !1;\r\n                }\r\n\r\n                if (tabbed && (isRTL ? selectedCaret.end = selectedCaret.begin : selectedCaret.begin = selectedCaret.end),\r\n                selectedCaret.begin === selectedCaret.end) {\r\n                    switch (opts.positionCaretOnClick) {\r\n                        case \"none\":\r\n                            break;\r\n\r\n                        case \"select\":\r\n                            selectedCaret = {\r\n                                begin: 0,\r\n                                end: getBuffer().length\r\n                            };\r\n                            break;\r\n\r\n                        case \"ignore\":\r\n                            selectedCaret.end = selectedCaret.begin = seekNext(getLastValidPosition());\r\n                            break;\r\n\r\n                        case \"radixFocus\":\r\n                            if (doRadixFocus(selectedCaret.begin)) {\r\n                                var radixPos = getBuffer().join(\"\").indexOf(opts.radixPoint);\r\n                                selectedCaret.end = selectedCaret.begin = opts.numericInput ? seekNext(radixPos) : radixPos;\r\n                                break;\r\n                            }\r\n\r\n                        default:\r\n                            var clickPosition = selectedCaret.begin,\r\n                                    lvclickPosition = getLastValidPosition(clickPosition, !0),\r\n                                    lastPosition = seekNext(-1 !== lvclickPosition || isMask(0) ? lvclickPosition : 0);\r\n                            if (clickPosition < lastPosition) {\r\n                                selectedCaret.end = selectedCaret.begin = isMask(clickPosition, !0) || isMask(clickPosition - 1, !0) ? clickPosition : seekNext(clickPosition);\r\n                            } else {\r\n                                var lvp = maskset.validPositions[lvclickPosition],\r\n                                        tt = getTestTemplate(lastPosition, lvp ? lvp.match.locator : void 0, lvp),\r\n                                        placeholder = getPlaceholder(lastPosition, tt.match);\r\n                                if (\"\" !== placeholder && getBuffer()[lastPosition] !== placeholder && !0 !== tt.match.optionalQuantifier && !0 !== tt.match.newBlockMarker || !isMask(lastPosition, opts.keepStatic) && tt.match.def === placeholder) {\r\n                                    var newPos = seekNext(lastPosition);\r\n                                    (newPos <= clickPosition || clickPosition === lastPosition) && (lastPosition = newPos);\r\n                                }\r\n                                selectedCaret.end = selectedCaret.begin = lastPosition;\r\n                            }\r\n                    }\r\n                    return selectedCaret;\r\n                }\r\n            }\r\n\r\n            var EventRuler = {\r\n                on: function on(input, eventName, eventHandler) {\r\n                    var ev = function ev(e) {\r\n                        e.originalEvent && (e = e.originalEvent || e, arguments[0] = e);\r\n                        var that = this, args;\r\n                        if (void 0 === that.inputmask && \"FORM\" !== this.nodeName) {\r\n                            var imOpts = $.data(that, \"_inputmask_opts\");\r\n                            imOpts ? new Inputmask(imOpts).mask(that) : EventRuler.off(that);\r\n                        } else {\r\n                            if (\"setvalue\" === e.type || \"FORM\" === this.nodeName || !(that.disabled || that.readOnly && !(\"keydown\" === e.type && e.ctrlKey && 67 === e.keyCode || !1 === opts.tabThrough && e.keyCode === keyCode.TAB))) {\r\n                                switch (e.type) {\r\n                                    case \"input\":\r\n                                        if (!0 === skipInputEvent || e.inputType && \"insertCompositionText\" === e.inputType) {\r\n                                            return skipInputEvent = !1,\r\n                                                    e.preventDefault();\r\n                                        }\r\n                                        break;\r\n\r\n                                    case \"keydown\":\r\n                                        skipKeyPressEvent = !1, skipInputEvent = !1;\r\n                                        break;\r\n\r\n                                    case \"keypress\":\r\n                                        if (!0 === skipKeyPressEvent) {\r\n                                            return e.preventDefault();\r\n                                        }\r\n                                        skipKeyPressEvent = !0;\r\n                                        break;\r\n\r\n                                    case \"click\":\r\n                                    case \"focus\":\r\n                                        return validationEvent ? (validationEvent = !1, input.blur(), HandleNativePlaceholder(input, (isRTL ? getBufferTemplate().slice().reverse() : getBufferTemplate()).join(\"\")),\r\n                                                setTimeout(function() {\r\n                                                    input.focus();\r\n                                                }, 3e3)) : (args = arguments, setTimeout(function() {\r\n                                            input.inputmask && eventHandler.apply(that, args);\r\n                                        }, 0)), !1;\r\n                                }\r\n                                var returnVal = eventHandler.apply(that, arguments);\r\n                                return !1 === returnVal && (e.preventDefault(), e.stopPropagation()), returnVal;\r\n                            }\r\n                            e.preventDefault();\r\n                        }\r\n                    };\r\n                    input.inputmask.events[eventName] = input.inputmask.events[eventName] || [], input.inputmask.events[eventName].push(ev),\r\n                            -1 !== $.inArray(eventName, [\"submit\", \"reset\"]) ? null !== input.form && $(input.form).on(eventName, ev) : $(input).on(eventName, ev);\r\n                },\r\n                off: function off(input, event) {\r\n                    var events;\r\n                    input.inputmask && input.inputmask.events && (event ? (events = [], events[event] = input.inputmask.events[event]) : events = input.inputmask.events,\r\n                            $.each(events, function(eventName, evArr) {\r\n                                for (; 0 < evArr.length;) {\r\n                                    var ev = evArr.pop();\r\n                                    -1 !== $.inArray(eventName, [\"submit\", \"reset\"]) ? null !== input.form && $(input.form).off(eventName, ev) : $(input).off(eventName, ev);\r\n                                }\r\n                                delete input.inputmask.events[eventName];\r\n                            }));\r\n                }\r\n            }, EventHandlers = {\r\n                keydownEvent: function keydownEvent(e) {\r\n                    var input = this, $input = $(input), k = e.keyCode, pos = caret(input),\r\n                            kdResult = opts.onKeyDown.call(this, e, getBuffer(), pos, opts);\r\n                    if (void 0 !== kdResult) {\r\n                        return kdResult;\r\n                    }\r\n                    if (k === keyCode.BACKSPACE || k === keyCode.DELETE || iphone && k === keyCode.BACKSPACE_SAFARI || e.ctrlKey && k === keyCode.X && !(\"oncut\" in input)) {\r\n                        e.preventDefault(),\r\n                                handleRemove(input, k, pos), writeBuffer(input, getBuffer(!0), maskset.p, e, input.inputmask._valueGet() !== getBuffer().join(\"\"));\r\n                    } else if (k === keyCode.END || k === keyCode.PAGE_DOWN) {\r\n                        e.preventDefault();\r\n                        var caretPos = seekNext(getLastValidPosition());\r\n                        caret(input, e.shiftKey ? pos.begin : caretPos, caretPos, !0);\r\n                    } else {\r\n                        k === keyCode.HOME && !e.shiftKey || k === keyCode.PAGE_UP ? (e.preventDefault(),\r\n                                caret(input, 0, e.shiftKey ? pos.begin : 0, !0)) : (opts.undoOnEscape && k === keyCode.ESCAPE || 90 === k && e.ctrlKey) && !0 !== e.altKey ? (checkVal(input, !0, !1, undoValue.split(\"\")),\r\n                                $input.trigger(\"click\")) : !0 === opts.tabThrough && k === keyCode.TAB ? (!0 === e.shiftKey ? (!0 === getTest(pos.begin).match.static && (pos.begin = seekNext(pos.begin)),\r\n                                pos.end = seekPrevious(pos.begin, !0), pos.begin = seekPrevious(pos.end, !0)) : (pos.begin = seekNext(pos.begin, !0),\r\n                                pos.end = seekNext(pos.begin, !0), pos.end < maskset.maskLength && pos.end--), pos.begin < maskset.maskLength && (e.preventDefault(),\r\n                                caret(input, pos.begin, pos.end))) : e.shiftKey || opts.insertModeVisual && !1 === opts.insertMode && (k === keyCode.RIGHT ? setTimeout(function() {\r\n                            var caretPos = caret(input);\r\n                            caret(input, caretPos.begin);\r\n                        }, 0) : k === keyCode.LEFT && setTimeout(function() {\r\n                            var caretPos_begin = translatePosition(input.inputmask.caretPos.begin),\r\n                                    caretPos_end = translatePosition(input.inputmask.caretPos.end);\r\n                            caret(input, isRTL ? caretPos_begin + (caretPos_begin === maskset.maskLength ? 0 : 1) : caretPos_begin - (0 === caretPos_begin ? 0 : 1));\r\n                        }, 0));\r\n                    }\r\n                    ignorable = -1 !== $.inArray(k, opts.ignorables);\r\n                },\r\n                keypressEvent: function keypressEvent(e, checkval, writeOut, strict, ndx) {\r\n                    var input = this, $input = $(input), k = e.which || e.charCode || e.keyCode;\r\n                    if (!(!0 === checkval || e.ctrlKey && e.altKey) && (e.ctrlKey || e.metaKey || ignorable)) {\r\n                        return k === keyCode.ENTER && undoValue !== getBuffer().join(\"\") && (undoValue = getBuffer().join(\"\"),\r\n                                setTimeout(function() {\r\n                                    $input.trigger(\"change\");\r\n                                }, 0)), skipInputEvent = !0, !0;\r\n                    }\r\n                    if (k) {\r\n                        44 !== k && 46 !== k || 3 !== e.location || \"\" === opts.radixPoint || (k = opts.radixPoint.charCodeAt(0));\r\n                        var pos = checkval ? {\r\n                            begin: ndx,\r\n                            end: ndx\r\n                        } : caret(input), forwardPosition, c = String.fromCharCode(k);\r\n                        maskset.writeOutBuffer = !0;\r\n                        var valResult = isValid(pos, c, strict);\r\n                        if (!1 !== valResult && (resetMaskSet(!0), forwardPosition = void 0 !== valResult.caret ? valResult.caret : seekNext(valResult.pos.begin ? valResult.pos.begin : valResult.pos),\r\n                                maskset.p = forwardPosition), forwardPosition = opts.numericInput && void 0 === valResult.caret ? seekPrevious(forwardPosition) : forwardPosition,\r\n                        !1 !== writeOut && (setTimeout(function() {\r\n                            opts.onKeyValidation.call(input, k, valResult);\r\n                        }, 0), maskset.writeOutBuffer && !1 !== valResult)) {\r\n                            var buffer = getBuffer();\r\n                            writeBuffer(input, buffer, forwardPosition, e, !0 !== checkval);\r\n                        }\r\n                        if (e.preventDefault(), checkval) {\r\n                            return !1 !== valResult && (valResult.forwardPosition = forwardPosition),\r\n                                    valResult;\r\n                        }\r\n                    }\r\n                },\r\n                pasteEvent: function pasteEvent(e) {\r\n                    var input = this, inputValue = this.inputmask._valueGet(!0), caretPos = caret(this), tempValue;\r\n                    isRTL && (tempValue = caretPos.end, caretPos.end = caretPos.begin, caretPos.begin = tempValue);\r\n                    var valueBeforeCaret = inputValue.substr(0, caretPos.begin),\r\n                            valueAfterCaret = inputValue.substr(caretPos.end, inputValue.length);\r\n                    if (valueBeforeCaret == (isRTL ? getBufferTemplate().slice().reverse() : getBufferTemplate()).slice(0, caretPos.begin).join(\"\") && (valueBeforeCaret = \"\"),\r\n                    valueAfterCaret == (isRTL ? getBufferTemplate().slice().reverse() : getBufferTemplate()).slice(caretPos.end).join(\"\") && (valueAfterCaret = \"\"),\r\n                    window.clipboardData && window.clipboardData.getData) {\r\n                        inputValue = valueBeforeCaret + window.clipboardData.getData(\"Text\") + valueAfterCaret;\r\n                    } else {\r\n                        if (!e.clipboardData || !e.clipboardData.getData) {\r\n                            return !0;\r\n                        }\r\n                        inputValue = valueBeforeCaret + e.clipboardData.getData(\"text/plain\") + valueAfterCaret;\r\n                    }\r\n                    var pasteValue = inputValue;\r\n                    if ($.isFunction(opts.onBeforePaste)) {\r\n                        if (pasteValue = opts.onBeforePaste.call(inputmask, inputValue, opts), !1 === pasteValue) {\r\n                            return e.preventDefault();\r\n                        }\r\n                        pasteValue = pasteValue || inputValue;\r\n                    }\r\n                    return checkVal(this, !1, !1, pasteValue.toString().split(\"\")), writeBuffer(this, getBuffer(), seekNext(getLastValidPosition()), e, undoValue !== getBuffer().join(\"\")),\r\n                            e.preventDefault();\r\n                },\r\n                inputFallBackEvent: function inputFallBackEvent(e) {\r\n                    function ieMobileHandler(input, inputValue, caretPos) {\r\n                        if (iemobile) {\r\n                            var inputChar = inputValue.replace(getBuffer().join(\"\"), \"\");\r\n                            if (1 === inputChar.length) {\r\n                                var iv = inputValue.split(\"\");\r\n                                iv.splice(caretPos.begin, 0, inputChar), inputValue = iv.join(\"\");\r\n                            }\r\n                        }\r\n                        return inputValue;\r\n                    }\r\n\r\n                    function analyseChanges(inputValue, buffer, caretPos) {\r\n                        for (var frontPart = inputValue.substr(0, caretPos.begin).split(\"\"), backPart = inputValue.substr(caretPos.begin).split(\"\"), frontBufferPart = buffer.substr(0, caretPos.begin).split(\"\"), backBufferPart = buffer.substr(caretPos.begin).split(\"\"), fpl = frontPart.length >= frontBufferPart.length ? frontPart.length : frontBufferPart.length, bpl = backPart.length >= backBufferPart.length ? backPart.length : backBufferPart.length, bl, i, action = \"\", data = [], marker = \"~\", placeholder; frontPart.length < fpl;) {\r\n                            frontPart.push(\"~\");\r\n                        }\r\n                        for (; frontBufferPart.length < fpl;) {\r\n                            frontBufferPart.push(\"~\");\r\n                        }\r\n                        for (; backPart.length < bpl;) {\r\n                            backPart.unshift(\"~\");\r\n                        }\r\n                        for (; backBufferPart.length < bpl;) {\r\n                            backBufferPart.unshift(\"~\");\r\n                        }\r\n                        var newBuffer = frontPart.concat(backPart), oldBuffer = frontBufferPart.concat(backBufferPart);\r\n                        for (i = 0, bl = newBuffer.length; i < bl; i++) {\r\n                            switch (placeholder = getPlaceholder(translatePosition(i)),\r\n                                    action) {\r\n                                case \"insertText\":\r\n                                    oldBuffer[i - 1] === newBuffer[i] && caretPos.begin == newBuffer.length - 1 && data.push(newBuffer[i]),\r\n                                            i = bl;\r\n                                    break;\r\n\r\n                                case \"insertReplacementText\":\r\n                                    \"~\" === newBuffer[i] ? caretPos.end++ : i = bl;\r\n                                    break;\r\n\r\n                                case \"deleteContentBackward\":\r\n                                    \"~\" === newBuffer[i] ? caretPos.end++ : i = bl;\r\n                                    break;\r\n\r\n                                default:\r\n                                    newBuffer[i] !== oldBuffer[i] && (\"~\" !== newBuffer[i + 1] && newBuffer[i + 1] !== placeholder && void 0 !== newBuffer[i + 1] || (oldBuffer[i] !== placeholder || \"~\" !== oldBuffer[i + 1]) && \"~\" !== oldBuffer[i] ? \"~\" === oldBuffer[i + 1] && oldBuffer[i] === newBuffer[i + 1] ? (action = \"insertText\",\r\n                                            data.push(newBuffer[i]), caretPos.begin--, caretPos.end--) : newBuffer[i] !== placeholder && \"~\" !== newBuffer[i] && (\"~\" === newBuffer[i + 1] || oldBuffer[i] !== newBuffer[i] && oldBuffer[i + 1] === newBuffer[i + 1]) ? (action = \"insertReplacementText\",\r\n                                            data.push(newBuffer[i]), caretPos.begin--) : \"~\" === newBuffer[i] ? (action = \"deleteContentBackward\",\r\n                                    !isMask(translatePosition(i), !0) && oldBuffer[i] !== opts.radixPoint || caretPos.end++) : i = bl : (action = \"insertText\",\r\n                                            data.push(newBuffer[i]), caretPos.begin--, caretPos.end--));\r\n                                    break;\r\n                            }\r\n                        }\r\n                        return {\r\n                            action: action,\r\n                            data: data,\r\n                            caret: caretPos\r\n                        };\r\n                    }\r\n\r\n                    var input = this, inputValue = input.inputmask._valueGet(!0),\r\n                            buffer = (isRTL ? getBuffer().slice().reverse() : getBuffer()).join(\"\"),\r\n                            caretPos = caret(input, void 0, void 0, !0);\r\n                    if (buffer !== inputValue) {\r\n                        inputValue = ieMobileHandler(input, inputValue, caretPos);\r\n                        var changes = analyseChanges(inputValue, buffer, caretPos);\r\n                        switch ((input.inputmask.shadowRoot || document).activeElement !== input && input.focus(),\r\n                                writeBuffer(input, getBuffer()), caret(input, caretPos.begin, caretPos.end, !0),\r\n                                changes.action) {\r\n                            case \"insertText\":\r\n                            case \"insertReplacementText\":\r\n                                $.each(changes.data, function(ndx, entry) {\r\n                                    var keypress = new $.Event(\"keypress\");\r\n                                    keypress.which = entry.charCodeAt(0), ignorable = !1, EventHandlers.keypressEvent.call(input, keypress);\r\n                                }), setTimeout(function() {\r\n                                    $el.trigger(\"keyup\");\r\n                                }, 0);\r\n                                break;\r\n\r\n                            case \"deleteContentBackward\":\r\n                                var keydown = new $.Event(\"keydown\");\r\n                                keydown.keyCode = keyCode.BACKSPACE, EventHandlers.keydownEvent.call(input, keydown);\r\n                                break;\r\n\r\n                            default:\r\n                                applyInputValue(input, inputValue);\r\n                                break;\r\n                        }\r\n                        e.preventDefault();\r\n                    }\r\n                },\r\n                compositionendEvent: function compositionendEvent(e) {\r\n                    $el.trigger(\"input\");\r\n                },\r\n                setValueEvent: function setValueEvent(e, argument_1, argument_2) {\r\n                    var input = this, value = e && e.detail ? e.detail[0] : argument_1;\r\n                    void 0 === value && (value = this.inputmask._valueGet(!0)), applyInputValue(this, value),\r\n                    (e.detail && void 0 !== e.detail[1] || void 0 !== argument_2) && caret(this, e.detail ? e.detail[1] : argument_2);\r\n                },\r\n                focusEvent: function focusEvent(e) {\r\n                    var input = this, nptValue = this.inputmask._valueGet();\r\n                    opts.showMaskOnFocus && nptValue !== getBuffer().join(\"\") && writeBuffer(this, getBuffer(), seekNext(getLastValidPosition())),\r\n                    !0 !== opts.positionCaretOnTab || !1 !== mouseEnter || isComplete(getBuffer()) && -1 !== getLastValidPosition() || EventHandlers.clickEvent.apply(this, [e, !0]),\r\n                            undoValue = getBuffer().join(\"\");\r\n                },\r\n                invalidEvent: function invalidEvent(e) {\r\n                    validationEvent = !0;\r\n                },\r\n                mouseleaveEvent: function mouseleaveEvent() {\r\n                    var input = this;\r\n                    mouseEnter = !1, opts.clearMaskOnLostFocus && (this.inputmask.shadowRoot || document).activeElement !== this && HandleNativePlaceholder(this, originalPlaceholder);\r\n                },\r\n                clickEvent: function clickEvent(e, tabbed) {\r\n                    var input = this;\r\n                    if ((this.inputmask.shadowRoot || document).activeElement === this) {\r\n                        var newCaretPosition = determineNewCaretPosition(caret(this), tabbed);\r\n                        void 0 !== newCaretPosition && caret(this, newCaretPosition);\r\n                    }\r\n                },\r\n                cutEvent: function cutEvent(e) {\r\n                    var input = this, pos = caret(this), clipboardData = window.clipboardData || e.clipboardData,\r\n                            clipData = isRTL ? getBuffer().slice(pos.end, pos.begin) : getBuffer().slice(pos.begin, pos.end);\r\n                    clipboardData.setData(\"text\", isRTL ? clipData.reverse().join(\"\") : clipData.join(\"\")),\r\n                    document.execCommand && document.execCommand(\"copy\"), handleRemove(this, keyCode.DELETE, pos),\r\n                            writeBuffer(this, getBuffer(), maskset.p, e, undoValue !== getBuffer().join(\"\"));\r\n                },\r\n                blurEvent: function blurEvent(e) {\r\n                    var $input = $(this), input = this;\r\n                    if (this.inputmask) {\r\n                        HandleNativePlaceholder(this, originalPlaceholder);\r\n                        var nptValue = this.inputmask._valueGet(), buffer = getBuffer().slice();\r\n                        \"\" !== nptValue && (opts.clearMaskOnLostFocus && (-1 === getLastValidPosition() && nptValue === getBufferTemplate().join(\"\") ? buffer = [] : clearOptionalTail(buffer)),\r\n                        !1 === isComplete(buffer) && (setTimeout(function() {\r\n                            $input.trigger(\"incomplete\");\r\n                        }, 0), opts.clearIncomplete && (resetMaskSet(), buffer = opts.clearMaskOnLostFocus ? [] : getBufferTemplate().slice())),\r\n                                writeBuffer(this, buffer, void 0, e)), undoValue !== getBuffer().join(\"\") && (undoValue = getBuffer().join(\"\"),\r\n                                $input.trigger(\"change\"));\r\n                    }\r\n                },\r\n                mouseenterEvent: function mouseenterEvent() {\r\n                    var input = this;\r\n                    mouseEnter = !0, (this.inputmask.shadowRoot || document).activeElement !== this && (null == originalPlaceholder && this.placeholder !== originalPlaceholder && (originalPlaceholder = this.placeholder),\r\n                                     opts.showMaskOnHover && HandleNativePlaceholder(this, (isRTL ? getBufferTemplate().slice().reverse() : getBufferTemplate()).join(\"\")));\r\n                },\r\n                submitEvent: function submitEvent() {\r\n                    undoValue !== getBuffer().join(\"\") && $el.trigger(\"change\"), opts.clearMaskOnLostFocus && -1 === getLastValidPosition() && el.inputmask._valueGet && el.inputmask._valueGet() === getBufferTemplate().join(\"\") && el.inputmask._valueSet(\"\"),\r\n                    opts.clearIncomplete && !1 === isComplete(getBuffer()) && el.inputmask._valueSet(\"\"),\r\n                    opts.removeMaskOnSubmit && (el.inputmask._valueSet(el.inputmask.unmaskedvalue(), !0),\r\n                            setTimeout(function() {\r\n                                writeBuffer(el, getBuffer());\r\n                            }, 0));\r\n                },\r\n                resetEvent: function resetEvent() {\r\n                    el.inputmask.refreshValue = !0, setTimeout(function() {\r\n                        applyInputValue(el, el.inputmask._valueGet(!0));\r\n                    }, 0);\r\n                }\r\n            }, valueBuffer;\r\n\r\n            function checkVal(input, writeOut, strict, nptvl, initiatingEvent) {\r\n                var inputmask = this || input.inputmask, inputValue = nptvl.slice(), charCodes = \"\", initialNdx = -1,\r\n                        result = void 0;\r\n\r\n                function isTemplateMatch(ndx, charCodes) {\r\n                    for (var targetTemplate = getMaskTemplate(!0, 0).slice(ndx, seekNext(ndx)).join(\"\").replace(/'/g, \"\"), charCodeNdx = targetTemplate.indexOf(charCodes); 0 < charCodeNdx && \" \" === targetTemplate[charCodeNdx - 1];) {\r\n                        charCodeNdx--;\r\n                    }\r\n                    var match = 0 === charCodeNdx && !isMask(ndx) && (getTest(ndx).match.nativeDef === charCodes.charAt(0) || !0 === getTest(ndx).match.static && getTest(ndx).match.nativeDef === \"'\" + charCodes.charAt(0) || \" \" === getTest(ndx).match.nativeDef && (getTest(ndx + 1).match.nativeDef === charCodes.charAt(0) || !0 === getTest(ndx + 1).match.static && getTest(ndx + 1).match.nativeDef === \"'\" + charCodes.charAt(0)));\r\n                    if (!match && 0 < charCodeNdx && !isMask(ndx, !1, !0)) {\r\n                        var nextPos = seekNext(ndx);\r\n                        inputmask.caretPos.begin < nextPos && (inputmask.caretPos = {\r\n                            begin: nextPos\r\n                        });\r\n                    }\r\n                    return match;\r\n                }\r\n\r\n                resetMaskSet(), maskset.tests = {}, initialNdx = opts.radixPoint ? determineNewCaretPosition({\r\n                                                                                                                 begin: 0,\r\n                                                                                                                 end: 0\r\n                                                                                                             }).begin : 0, maskset.p = initialNdx, inputmask.caretPos = {\r\n                    begin: initialNdx\r\n                };\r\n                var staticMatches = [], prevCaretPos = inputmask.caretPos;\r\n                if ($.each(inputValue, function(ndx, charCode) {\r\n                    if (void 0 !== charCode) {\r\n                        if (void 0 === maskset.validPositions[ndx] && inputValue[ndx] === getPlaceholder(ndx) && isMask(ndx, !0) && !1 === isValid(ndx, inputValue[ndx], !0, void 0, void 0, !0)) {\r\n                            maskset.p++;\r\n                            if ((charCode === inputmask.opts.placeholder) && (inputmask.opts.partialSearchMask === !0)) {\r\n                                inputmask.caretPos = {\r\n                                    begin: ndx + 1,\r\n                                    end: ndx + 1\r\n                                };\r\n                            }\r\n                        } else {\r\n                            var keypress = new $.Event(\"_checkval\");\r\n                            keypress.which = charCode.toString().charCodeAt(0), charCodes += charCode;\r\n                            var lvp = getLastValidPosition(void 0, !0);\r\n                            isTemplateMatch(initialNdx, charCodes) ? result = EventHandlers.keypressEvent.call(input, keypress, !0, !1, strict, lvp + 1) : (result = EventHandlers.keypressEvent.call(input, keypress, !0, !1, strict, inputmask.caretPos.begin),\r\n                            result && (initialNdx = inputmask.caretPos.begin + 1, charCodes = \"\")), result ? (void 0 !== result.pos && maskset.validPositions[result.pos] && !0 === maskset.validPositions[result.pos].match.static && void 0 === maskset.validPositions[result.pos].alternation && (staticMatches.push(result.pos),\r\n                            isRTL || (result.forwardPosition = result.pos + 1)), writeBuffer(void 0, getBuffer(), result.forwardPosition, keypress, !1),\r\n                                    inputmask.caretPos = {\r\n                                        begin: result.forwardPosition,\r\n                                        end: result.forwardPosition\r\n                                    }, prevCaretPos = inputmask.caretPos) : inputmask.caretPos = prevCaretPos;\r\n                        }\r\n                    }\r\n                }), 0 < staticMatches.length) {\r\n                    var sndx, validPos, nextValid = seekNext(-1, void 0, !1);\r\n                    if (!isComplete(getBuffer()) && staticMatches.length <= nextValid || isComplete(getBuffer()) && 0 < staticMatches.length && staticMatches.length !== nextValid && 0 === staticMatches[0]) {\r\n                        for (var nextSndx = nextValid; void 0 !== (sndx = staticMatches.shift());) {\r\n                            var keypress = new $.Event(\"_checkval\");\r\n                            if (validPos = maskset.validPositions[sndx], validPos.generatedInput = !0, keypress.which = validPos.input.charCodeAt(0),\r\n                                    result = EventHandlers.keypressEvent.call(input, keypress, !0, !1, strict, nextSndx),\r\n                            result && void 0 !== result.pos && result.pos !== sndx && maskset.validPositions[result.pos] && !0 === maskset.validPositions[result.pos].match.static) {\r\n                                staticMatches.push(result.pos);\r\n                            } else if (!result) {\r\n                                break;\r\n                            }\r\n                            nextSndx++;\r\n                        }\r\n                    } else {\r\n                        for (; sndx = staticMatches.pop();) {\r\n                            validPos = maskset.validPositions[sndx],\r\n                            validPos && (validPos.generatedInput = !0);\r\n                        }\r\n                    }\r\n                }\r\n                if (writeOut) {\r\n                    for (var vndx in writeBuffer(input, getBuffer(), result ? result.forwardPosition : void 0, initiatingEvent || new $.Event(\"checkval\"), initiatingEvent && \"input\" === initiatingEvent.type),\r\n                            maskset.validPositions) {\r\n                        !0 !== maskset.validPositions[vndx].match.generated && delete maskset.validPositions[vndx].generatedInput;\r\n                    }\r\n                }\r\n            }\r\n\r\n            function unmaskedvalue(input) {\r\n                if (input) {\r\n                    if (void 0 === input.inputmask) {\r\n                        return input.value;\r\n                    }\r\n                    input.inputmask && input.inputmask.refreshValue && applyInputValue(input, input.inputmask._valueGet(!0));\r\n                }\r\n                var umValue = [], vps = maskset.validPositions;\r\n                for (var pndx in vps) {\r\n                    vps[pndx] && vps[pndx].match && (1 != vps[pndx].match.static || !0 !== vps[pndx].generatedInput) && umValue.push(vps[pndx].input);\r\n                }\r\n                var unmaskedValue = 0 === umValue.length ? \"\" : (isRTL ? umValue.reverse() : umValue).join(\"\");\r\n                if ($.isFunction(opts.onUnMask)) {\r\n                    var bufferValue = (isRTL ? getBuffer().slice().reverse() : getBuffer()).join(\"\");\r\n                    unmaskedValue = opts.onUnMask.call(inputmask, bufferValue, unmaskedValue, opts);\r\n                }\r\n                return unmaskedValue;\r\n            }\r\n\r\n            function translatePosition(pos) {\r\n                return !isRTL || \"number\" != typeof pos || opts.greedy && \"\" === opts.placeholder || !el || (pos = el.inputmask._valueGet().length - pos),\r\n                        pos;\r\n            }\r\n\r\n            function caret(input, begin, end, notranslate, isDelete) {\r\n                var range;\r\n                if (void 0 === begin) {\r\n                    return \"selectionStart\" in input && \"selectionEnd\" in input ? (begin = input.selectionStart,\r\n                            end = input.selectionEnd) : window.getSelection ? (range = window.getSelection().getRangeAt(0),\r\n                    range.commonAncestorContainer.parentNode !== input && range.commonAncestorContainer !== input || (begin = range.startOffset,\r\n                            end = range.endOffset)) : document.selection && document.selection.createRange && (range = document.selection.createRange(),\r\n                            begin = 0 - range.duplicate().moveStart(\"character\", -input.inputmask._valueGet().length),\r\n                            end = begin + range.text.length), {\r\n                        begin: notranslate ? begin : translatePosition(begin),\r\n                        end: notranslate ? end : translatePosition(end)\r\n                    };\r\n                }\r\n                if ($.isArray(begin) && (end = isRTL ? begin[0] : begin[1], begin = isRTL ? begin[1] : begin[0]),\r\n                void 0 !== begin.begin && (end = isRTL ? begin.begin : begin.end, begin = isRTL ? begin.end : begin.begin),\r\n                \"number\" == typeof begin) {\r\n                    begin = notranslate ? begin : translatePosition(begin), end = notranslate ? end : translatePosition(end),\r\n                            end = \"number\" == typeof end ? end : begin;\r\n                    var scrollCalc = parseInt(((input.ownerDocument.defaultView || window).getComputedStyle ? (input.ownerDocument.defaultView || window).getComputedStyle(input, null) : input.currentStyle).fontSize) * end;\r\n                    if (input.scrollLeft = scrollCalc > input.scrollWidth ? scrollCalc : 0, input.inputmask.caretPos = {\r\n                        begin: begin,\r\n                        end: end\r\n                    }, opts.insertModeVisual && !1 === opts.insertMode && begin === end && (isDelete || end++),\r\n                    input === (input.inputmask.shadowRoot || document).activeElement) {\r\n                        if (\"setSelectionRange\" in input) {\r\n                            input.setSelectionRange(begin, end);\r\n                        } else if (window.getSelection) {\r\n                            if (range = document.createRange(), void 0 === input.firstChild || null === input.firstChild) {\r\n                                var textNode = document.createTextNode(\"\");\r\n                                input.appendChild(textNode);\r\n                            }\r\n                            range.setStart(input.firstChild, begin < input.inputmask._valueGet().length ? begin : input.inputmask._valueGet().length),\r\n                                    range.setEnd(input.firstChild, end < input.inputmask._valueGet().length ? end : input.inputmask._valueGet().length),\r\n                                    range.collapse(!0);\r\n                            var sel = window.getSelection();\r\n                            sel.removeAllRanges(), sel.addRange(range);\r\n                        } else {\r\n                            input.createTextRange && (range = input.createTextRange(), range.collapse(!0),\r\n                                    range.moveEnd(\"character\", end), range.moveStart(\"character\", begin), range.select());\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n\r\n            function determineLastRequiredPosition(returnDefinition) {\r\n                var buffer = getMaskTemplate(!0, getLastValidPosition(), !0, !0), bl = buffer.length, pos,\r\n                        lvp = getLastValidPosition(), positions = {}, lvTest = maskset.validPositions[lvp],\r\n                        ndxIntlzr = void 0 !== lvTest ? lvTest.locator.slice() : void 0, testPos;\r\n                for (pos = lvp + 1; pos < buffer.length; pos++) {\r\n                    testPos = getTestTemplate(pos, ndxIntlzr, pos - 1),\r\n                            ndxIntlzr = testPos.locator.slice(), positions[pos] = $.extend(!0, {}, testPos);\r\n                }\r\n                var lvTestAlt = lvTest && void 0 !== lvTest.alternation ? lvTest.locator[lvTest.alternation] : void 0;\r\n                for (pos = bl - 1; lvp < pos && (testPos = positions[pos], (testPos.match.optionality || testPos.match.optionalQuantifier && testPos.match.newBlockMarker || lvTestAlt && (lvTestAlt !== positions[pos].locator[lvTest.alternation] && 1 != testPos.match.static || !0 === testPos.match.static && testPos.locator[lvTest.alternation] && checkAlternationMatch(testPos.locator[lvTest.alternation].toString().split(\",\"), lvTestAlt.toString().split(\",\")) && \"\" !== getTests(pos)[0].def)) && buffer[pos] === getPlaceholder(pos, testPos.match)); pos--) {\r\n                    bl--;\r\n                }\r\n                return returnDefinition ? {\r\n                    l: bl,\r\n                    def: positions[bl] ? positions[bl].match : void 0\r\n                } : bl;\r\n            }\r\n\r\n            function clearOptionalTail(buffer) {\r\n                buffer.length = 0;\r\n                for (var template = getMaskTemplate(!0, 0, !0, void 0, !0), lmnt; void 0 !== (lmnt = template.shift());) {\r\n                    buffer.push(lmnt);\r\n                }\r\n                return buffer;\r\n            }\r\n\r\n            function isComplete(buffer) {\r\n                if ($.isFunction(opts.isComplete)) {\r\n                    return opts.isComplete(buffer, opts);\r\n                }\r\n                if (\"*\" !== opts.repeat) {\r\n                    var complete = !1, lrp = determineLastRequiredPosition(!0), aml = seekPrevious(lrp.l);\r\n                    if (void 0 === lrp.def || lrp.def.newBlockMarker || lrp.def.optionality || lrp.def.optionalQuantifier) {\r\n                        complete = !0;\r\n                        for (var i = 0; i <= aml; i++) {\r\n                            var test = getTestTemplate(i).match;\r\n                            if (!0 !== test.static && void 0 === maskset.validPositions[i] && !0 !== test.optionality && !0 !== test.optionalQuantifier || !0 === test.static && buffer[i] !== getPlaceholder(i, test)) {\r\n                                complete = !1;\r\n                                break;\r\n                            }\r\n                        }\r\n                    }\r\n                    return complete;\r\n                }\r\n            }\r\n\r\n            function handleRemove(input, k, pos, strict, fromIsValid) {\r\n                if ((opts.numericInput || isRTL) && (k === keyCode.BACKSPACE ? k = keyCode.DELETE : k === keyCode.DELETE && (k = keyCode.BACKSPACE),\r\n                        isRTL)) {\r\n                    var pend = pos.end;\r\n                    pos.end = pos.begin, pos.begin = pend;\r\n                }\r\n                var lvp = getLastValidPosition(void 0, !0), offset;\r\n                if (pos.end >= getBuffer().length && lvp >= pos.end && (pos.end = lvp + 1), k === keyCode.BACKSPACE ? pos.end - pos.begin < 1 && (pos.begin = seekPrevious(pos.begin)) : k === keyCode.DELETE && pos.begin === pos.end && (pos.end = isMask(pos.end, !0, !0) ? pos.end + 1 : seekNext(pos.end) + 1),\r\n                !1 !== (offset = revalidateMask(pos))) {\r\n                    if (!0 !== strict && !1 !== opts.keepStatic || null !== opts.regex && -1 !== getTest(pos.begin).match.def.indexOf(\"|\")) {\r\n                        var result = alternate(!0);\r\n                        if (result) {\r\n                            var newPos = void 0 !== result.caret ? result.caret : result.pos ? seekNext(result.pos.begin ? result.pos.begin : result.pos) : getLastValidPosition(-1, !0);\r\n                            (k !== keyCode.DELETE || pos.begin > newPos) && pos.begin;\r\n                        }\r\n                    }\r\n                    !0 !== strict && (maskset.p = k === keyCode.DELETE ? pos.begin + offset : pos.begin);\r\n                }\r\n            }\r\n\r\n            function applyInputValue(input, value) {\r\n                input.inputmask.refreshValue = !1, $.isFunction(opts.onBeforeMask) && (value = opts.onBeforeMask.call(inputmask, value, opts) || value),\r\n                        value = value.toString().split(\"\"), checkVal(input, !0, !1, value), undoValue = getBuffer().join(\"\"),\r\n                (opts.clearMaskOnLostFocus || opts.clearIncomplete) && input.inputmask._valueGet() === getBufferTemplate().join(\"\") && -1 === getLastValidPosition() && input.inputmask._valueSet(\"\");\r\n            }\r\n\r\n            function mask(elem) {\r\n                function isElementTypeSupported(input, opts) {\r\n                    function patchValueProperty(npt) {\r\n                        var valueGet, valueSet;\r\n\r\n                        function patchValhook(type) {\r\n                            if ($.valHooks && (void 0 === $.valHooks[type] || !0 !== $.valHooks[type].inputmaskpatch)) {\r\n                                var valhookGet = $.valHooks[type] && $.valHooks[type].get ? $.valHooks[type].get : function(elem) {\r\n                                            return elem.value;\r\n                                        },\r\n                                        valhookSet = $.valHooks[type] && $.valHooks[type].set ? $.valHooks[type].set : function(elem, value) {\r\n                                            return elem.value = value, elem;\r\n                                        };\r\n                                $.valHooks[type] = {\r\n                                    get: function get(elem) {\r\n                                        if (elem.inputmask) {\r\n                                            if (elem.inputmask.opts.autoUnmask) {\r\n                                                return elem.inputmask.unmaskedvalue();\r\n                                            }\r\n                                            var result = valhookGet(elem);\r\n                                            return -1 !== getLastValidPosition(void 0, void 0, elem.inputmask.maskset.validPositions) || !0 !== opts.nullable ? result : \"\";\r\n                                        }\r\n                                        return valhookGet(elem);\r\n                                    },\r\n                                    set: function set(elem, value) {\r\n                                        var result = valhookSet(elem, value);\r\n                                        return elem.inputmask && applyInputValue(elem, value), result;\r\n                                    },\r\n                                    inputmaskpatch: !0\r\n                                };\r\n                            }\r\n                        }\r\n\r\n                        function getter() {\r\n                            return this.inputmask ? this.inputmask.opts.autoUnmask ? this.inputmask.unmaskedvalue() : -1 !== getLastValidPosition() || !0 !== opts.nullable ? (this.inputmask.shadowRoot || document.activeElement) === this && opts.clearMaskOnLostFocus ? (isRTL ? clearOptionalTail(getBuffer().slice()).reverse() : clearOptionalTail(getBuffer().slice())).join(\"\") : valueGet.call(this) : \"\" : valueGet.call(this);\r\n                        }\r\n\r\n                        function setter(value) {\r\n                            valueSet.call(this, value), this.inputmask && applyInputValue(this, value);\r\n                        }\r\n\r\n                        function installNativeValueSetFallback(npt) {\r\n                            EventRuler.on(npt, \"mouseenter\", function() {\r\n                                var input = this, value = this.inputmask._valueGet(!0);\r\n                                value !== (isRTL ? getBuffer().reverse() : getBuffer()).join(\"\") && applyInputValue(this, value);\r\n                            });\r\n                        }\r\n\r\n                        if (!npt.inputmask.__valueGet) {\r\n                            if (!0 !== opts.noValuePatching) {\r\n                                if (Object.getOwnPropertyDescriptor) {\r\n                                    \"function\" != typeof Object.getPrototypeOf && (Object.getPrototypeOf = \"object\" === _typeof(\"test\".__proto__) ? function(object) {\r\n                                        return object.__proto__;\r\n                                    } : function(object) {\r\n                                        return object.constructor.prototype;\r\n                                    });\r\n                                    var valueProperty = Object.getPrototypeOf ? Object.getOwnPropertyDescriptor(Object.getPrototypeOf(npt), \"value\") : void 0;\r\n                                    valueProperty && valueProperty.get && valueProperty.set ? (valueGet = valueProperty.get,\r\n                                            valueSet = valueProperty.set, Object.defineProperty(npt, \"value\", {\r\n                                        get: getter,\r\n                                        set: setter,\r\n                                        configurable: !0\r\n                                    })) : \"input\" !== npt.tagName.toLowerCase() && (valueGet = function valueGet() {\r\n                                        return this.textContent;\r\n                                    }, valueSet = function valueSet(value) {\r\n                                        this.textContent = value;\r\n                                    }, Object.defineProperty(npt, \"value\", {\r\n                                        get: getter,\r\n                                        set: setter,\r\n                                        configurable: !0\r\n                                    }));\r\n                                } else {\r\n                                    document.__lookupGetter__ && npt.__lookupGetter__(\"value\") && (valueGet = npt.__lookupGetter__(\"value\"),\r\n                                            valueSet = npt.__lookupSetter__(\"value\"), npt.__defineGetter__(\"value\", getter),\r\n                                            npt.__defineSetter__(\"value\", setter));\r\n                                }\r\n                                npt.inputmask.__valueGet = valueGet, npt.inputmask.__valueSet = valueSet;\r\n                            }\r\n                            npt.inputmask._valueGet = function(overruleRTL) {\r\n                                return isRTL && !0 !== overruleRTL ? valueGet.call(this.el).split(\"\").reverse().join(\"\") : valueGet.call(this.el);\r\n                            }, npt.inputmask._valueSet = function(value, overruleRTL) {\r\n                                valueSet.call(this.el, null == value ? \"\" : !0 !== overruleRTL && isRTL ? value.split(\"\").reverse().join(\"\") : value);\r\n                            }, void 0 === valueGet && (valueGet = function valueGet() {\r\n                                return this.value;\r\n                            }, valueSet = function valueSet(value) {\r\n                                this.value = value;\r\n                            }, patchValhook(npt.type), installNativeValueSetFallback(npt));\r\n                        }\r\n                    }\r\n\r\n                    \"textarea\" !== input.tagName.toLowerCase() && opts.ignorables.push(keyCode.ENTER);\r\n                    var elementType = input.getAttribute(\"type\"),\r\n                            isSupported = \"input\" === input.tagName.toLowerCase() && -1 !== $.inArray(elementType, opts.supportsInputType) || input.isContentEditable || \"textarea\" === input.tagName.toLowerCase();\r\n                    if (!isSupported) {\r\n                        if (\"input\" === input.tagName.toLowerCase()) {\r\n                            var el = document.createElement(\"input\");\r\n                            el.setAttribute(\"type\", elementType), isSupported = \"text\" === el.type, el = null;\r\n                        } else {\r\n                            isSupported = \"partial\";\r\n                        }\r\n                    }\r\n                    return !1 !== isSupported ? patchValueProperty(input) : input.inputmask = void 0,\r\n                            isSupported;\r\n                }\r\n\r\n                EventRuler.off(elem);\r\n                var isSupported = isElementTypeSupported(elem, opts);\r\n                if (!1 !== isSupported) {\r\n                    el = elem, $el = $(el), originalPlaceholder = el.placeholder, maxLength = void 0 !== el ? el.maxLength : void 0,\r\n                    -1 === maxLength && (maxLength = void 0), \"inputMode\" in el && null === el.getAttribute(\"inputmode\") && (el.inputMode = opts.inputmode,\r\n                            el.setAttribute(\"inputmode\", opts.inputmode)), !0 === isSupported && (opts.showMaskOnFocus = opts.showMaskOnFocus && -1 === [\"cc-number\", \"cc-exp\"].indexOf(el.autocomplete),\r\n                                                                           iphone && (opts.insertModeVisual = !1), EventRuler.on(el, \"submit\", EventHandlers.submitEvent),\r\n                            EventRuler.on(el, \"reset\", EventHandlers.resetEvent), EventRuler.on(el, \"blur\", EventHandlers.blurEvent),\r\n                            EventRuler.on(el, \"focus\", EventHandlers.focusEvent), EventRuler.on(el, \"invalid\", EventHandlers.invalidEvent),\r\n                            EventRuler.on(el, \"click\", EventHandlers.clickEvent), EventRuler.on(el, \"mouseleave\", EventHandlers.mouseleaveEvent),\r\n                            EventRuler.on(el, \"mouseenter\", EventHandlers.mouseenterEvent), EventRuler.on(el, \"paste\", EventHandlers.pasteEvent),\r\n                            EventRuler.on(el, \"cut\", EventHandlers.cutEvent), EventRuler.on(el, \"complete\", opts.oncomplete),\r\n                            EventRuler.on(el, \"incomplete\", opts.onincomplete), EventRuler.on(el, \"cleared\", opts.oncleared),\r\n                            mobile || !0 === opts.inputEventOnly ? el.removeAttribute(\"maxLength\") : (EventRuler.on(el, \"keydown\", EventHandlers.keydownEvent),\r\n                                    EventRuler.on(el, \"keypress\", EventHandlers.keypressEvent)), EventRuler.on(el, \"input\", EventHandlers.inputFallBackEvent),\r\n                            EventRuler.on(el, \"compositionend\", EventHandlers.compositionendEvent)), EventRuler.on(el, \"setvalue\", EventHandlers.setValueEvent),\r\n                            undoValue = getBufferTemplate().join(\"\");\r\n                    var activeElement = (el.inputmask.shadowRoot || document).activeElement;\r\n                    if (\"\" !== el.inputmask._valueGet(!0) || !1 === opts.clearMaskOnLostFocus || activeElement === el) {\r\n                        applyInputValue(el, el.inputmask._valueGet(!0), opts);\r\n                        var buffer = getBuffer().slice();\r\n                        !1 === isComplete(buffer) && opts.clearIncomplete && resetMaskSet(), opts.clearMaskOnLostFocus && activeElement !== el && (-1 === getLastValidPosition() ? buffer = [] : clearOptionalTail(buffer)),\r\n                        (!1 === opts.clearMaskOnLostFocus || opts.showMaskOnFocus && activeElement === el || \"\" !== el.inputmask._valueGet(!0)) && writeBuffer(el, buffer),\r\n                        activeElement === el && caret(el, seekNext(getLastValidPosition()));\r\n                    }\r\n                }\r\n            }\r\n\r\n            if (void 0 !== actionObj) {\r\n                switch (actionObj.action) {\r\n                    case \"isComplete\":\r\n                        return el = actionObj.el, isComplete(getBuffer());\r\n\r\n                    case \"unmaskedvalue\":\r\n                        return void 0 !== el && void 0 === actionObj.value || (valueBuffer = actionObj.value,\r\n                                valueBuffer = ($.isFunction(opts.onBeforeMask) && opts.onBeforeMask.call(inputmask, valueBuffer, opts) || valueBuffer).split(\"\"),\r\n                                checkVal.call(this, void 0, !1, !1, valueBuffer), $.isFunction(opts.onBeforeWrite) && opts.onBeforeWrite.call(inputmask, void 0, getBuffer(), 0, opts)),\r\n                                unmaskedvalue(el);\r\n\r\n                    case \"mask\":\r\n                        mask(el);\r\n                        break;\r\n\r\n                    case \"format\":\r\n                        return valueBuffer = ($.isFunction(opts.onBeforeMask) && opts.onBeforeMask.call(inputmask, actionObj.value, opts) || actionObj.value).split(\"\"),\r\n                                checkVal.call(this, void 0, !0, !1, valueBuffer), actionObj.metadata ? {\r\n                            value: isRTL ? getBuffer().slice().reverse().join(\"\") : getBuffer().join(\"\"),\r\n                            metadata: maskScope.call(this, {\r\n                                action: \"getmetadata\"\r\n                            }, maskset, opts)\r\n                        } : isRTL ? getBuffer().slice().reverse().join(\"\") : getBuffer().join(\"\");\r\n\r\n                    case \"isValid\":\r\n                        actionObj.value ? (valueBuffer = ($.isFunction(opts.onBeforeMask) && opts.onBeforeMask.call(inputmask, actionObj.value, opts) || actionObj.value).split(\"\"),\r\n                                checkVal.call(this, void 0, !0, !1, valueBuffer)) : actionObj.value = isRTL ? getBuffer().slice().reverse().join(\"\") : getBuffer().join(\"\");\r\n                        for (var buffer = getBuffer(), rl = determineLastRequiredPosition(), lmib = buffer.length - 1; rl < lmib && !isMask(lmib); lmib--) {\r\n                            ;\r\n                        }\r\n                        return buffer.splice(rl, lmib + 1 - rl), isComplete(buffer) && actionObj.value === (isRTL ? getBuffer().slice().reverse().join(\"\") : getBuffer().join(\"\"));\r\n\r\n                    case \"getemptymask\":\r\n                        return getBufferTemplate().join(\"\");\r\n\r\n                    case \"remove\":\r\n                        if (el && el.inputmask) {\r\n                            $.data(el, \"_inputmask_opts\", null), $el = $(el);\r\n                            var cv = opts.autoUnmask ? unmaskedvalue(el) : el.inputmask._valueGet(opts.autoUnmask),\r\n                                    valueProperty;\r\n                            cv !== getBufferTemplate().join(\"\") ? el.inputmask._valueSet(cv, opts.autoUnmask) : el.inputmask._valueSet(\"\"),\r\n                                    EventRuler.off(el), Object.getOwnPropertyDescriptor && Object.getPrototypeOf ? (valueProperty = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(el), \"value\"),\r\n                            valueProperty && el.inputmask.__valueGet && Object.defineProperty(el, \"value\", {\r\n                                get: el.inputmask.__valueGet,\r\n                                set: el.inputmask.__valueSet,\r\n                                configurable: !0\r\n                            })) : document.__lookupGetter__ && el.__lookupGetter__(\"value\") && el.inputmask.__valueGet && (el.__defineGetter__(\"value\", el.inputmask.__valueGet),\r\n                                    el.__defineSetter__(\"value\", el.inputmask.__valueSet)), el.inputmask = void 0;\r\n                        }\r\n                        return el;\r\n\r\n                    case \"getmetadata\":\r\n                        if ($.isArray(maskset.metadata)) {\r\n                            var maskTarget = getMaskTemplate(!0, 0, !1).join(\"\");\r\n                            return $.each(maskset.metadata, function(ndx, mtdt) {\r\n                                if (mtdt.mask === maskTarget) {\r\n                                    return maskTarget = mtdt, !1;\r\n                                }\r\n                            }), maskTarget;\r\n                        }\r\n                        return maskset.metadata;\r\n                }\r\n            }\r\n        };\r\n    }, function(module, exports, __webpack_require__) {\r\n        \"use strict\";\r\n\r\n        function _typeof(obj) {\r\n            return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function _typeof(obj) {\r\n                return typeof obj;\r\n            } : function _typeof(obj) {\r\n                return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\r\n            }, _typeof(obj);\r\n        }\r\n\r\n        var Inputmask = __webpack_require__(1), $ = Inputmask.dependencyLib, keyCode = __webpack_require__(0),\r\n                formatCode = {\r\n                    d: [\"[1-9]|[12][0-9]|3[01]\", Date.prototype.setDate, \"day\", Date.prototype.getDate],\r\n                    dd: [\"0[1-9]|[12][0-9]|3[01]\", Date.prototype.setDate, \"day\", function() {\r\n                        return pad(Date.prototype.getDate.call(this), 2);\r\n                    }],\r\n                    ddd: [\"\"],\r\n                    dddd: [\"\"],\r\n                    m: [\"[1-9]|1[012]\", Date.prototype.setMonth, \"month\", function() {\r\n                        return Date.prototype.getMonth.call(this) + 1;\r\n                    }],\r\n                    mm: [\"0[1-9]|1[012]\", Date.prototype.setMonth, \"month\", function() {\r\n                        return pad(Date.prototype.getMonth.call(this) + 1, 2);\r\n                    }],\r\n                    mmm: [\"\"],\r\n                    mmmm: [\"\"],\r\n                    yy: [\"[0-9]{2}\", Date.prototype.setFullYear, \"year\", function() {\r\n                        return pad(Date.prototype.getFullYear.call(this), 2);\r\n                    }],\r\n                    yyyy: [\"[0-9]{4}\", Date.prototype.setFullYear, \"year\", function() {\r\n                        return pad(Date.prototype.getFullYear.call(this), 4);\r\n                    }],\r\n                    h: [\"[1-9]|1[0-2]\", Date.prototype.setHours, \"hours\", Date.prototype.getHours],\r\n                    hh: [\"0[1-9]|1[0-2]\", Date.prototype.setHours, \"hours\", function() {\r\n                        return pad(Date.prototype.getHours.call(this), 2);\r\n                    }],\r\n                    hx: [function(x) {\r\n                        return \"[0-9]{\".concat(x, \"}\");\r\n                    }, Date.prototype.setHours, \"hours\", function(x) {\r\n                        return Date.prototype.getHours;\r\n                    }],\r\n                    H: [\"1?[0-9]|2[0-3]\", Date.prototype.setHours, \"hours\", Date.prototype.getHours],\r\n                    HH: [\"0[0-9]|1[0-9]|2[0-3]\", Date.prototype.setHours, \"hours\", function() {\r\n                        return pad(Date.prototype.getHours.call(this), 2);\r\n                    }],\r\n                    Hx: [function(x) {\r\n                        return \"[0-9]{\".concat(x, \"}\");\r\n                    }, Date.prototype.setHours, \"hours\", function(x) {\r\n                        return function() {\r\n                            return pad(Date.prototype.getHours.call(this), x);\r\n                        };\r\n                    }],\r\n                    M: [\"[1-5]?[0-9]\", Date.prototype.setMinutes, \"minutes\", Date.prototype.getMinutes],\r\n                    MM: [\"0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]\", Date.prototype.setMinutes, \"minutes\", function() {\r\n                        return pad(Date.prototype.getMinutes.call(this), 2);\r\n                    }],\r\n                    s: [\"[1-5]?[0-9]\", Date.prototype.setSeconds, \"seconds\", Date.prototype.getSeconds],\r\n                    ss: [\"0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]\", Date.prototype.setSeconds, \"seconds\", function() {\r\n                        return pad(Date.prototype.getSeconds.call(this), 2);\r\n                    }],\r\n                    l: [\"[0-9]{3}\", Date.prototype.setMilliseconds, \"milliseconds\", function() {\r\n                        return pad(Date.prototype.getMilliseconds.call(this), 3);\r\n                    }],\r\n                    L: [\"[0-9]{2}\", Date.prototype.setMilliseconds, \"milliseconds\", function() {\r\n                        return pad(Date.prototype.getMilliseconds.call(this), 2);\r\n                    }],\r\n                    t: [\"[ap]\"],\r\n                    tt: [\"[ap]m\"],\r\n                    T: [\"[AP]\"],\r\n                    TT: [\"[AP]M\"],\r\n                    Z: [\"\"],\r\n                    o: [\"\"],\r\n                    S: [\"\"]\r\n                }, formatAlias = {\r\n                    isoDate: \"yyyy-mm-dd\",\r\n                    isoTime: \"HH:MM:ss\",\r\n                    isoDateTime: \"yyyy-mm-dd'T'HH:MM:ss\",\r\n                    isoUtcDateTime: \"UTC:yyyy-mm-dd'T'HH:MM:ss'Z'\"\r\n                };\r\n\r\n        function formatcode(match) {\r\n            var dynMatches = new RegExp(\"\\\\d+$\").exec(match[0]);\r\n            if (dynMatches && void 0 !== dynMatches[0]) {\r\n                var fcode = formatCode[match[0][0] + \"x\"].slice(\"\");\r\n                return fcode[0] = fcode[0](dynMatches[0]), fcode[3] = fcode[3](dynMatches[0]), fcode;\r\n            }\r\n            if (formatCode[match[0]]) {\r\n                return formatCode[match[0]];\r\n            }\r\n        }\r\n\r\n        function getTokenizer(opts) {\r\n            if (!opts.tokenizer) {\r\n                var tokens = [], dyntokens = [];\r\n                for (var ndx in formatCode) {\r\n                    if (/\\.*x$/.test(ndx)) {\r\n                        var dynToken = ndx[0] + \"\\\\d+\";\r\n                        -1 === dyntokens.indexOf(dynToken) && dyntokens.push(dynToken);\r\n                    } else {\r\n                        -1 === tokens.indexOf(ndx[0]) && tokens.push(ndx[0]);\r\n                    }\r\n                }\r\n                opts.tokenizer = \"(\" + (0 < dyntokens.length ? dyntokens.join(\"|\") + \"|\" : \"\") + tokens.join(\"+|\") + \")+?|.\",\r\n                        opts.tokenizer = new RegExp(opts.tokenizer, \"g\");\r\n            }\r\n            return opts.tokenizer;\r\n        }\r\n\r\n        function isValidDate(dateParts, currentResult) {\r\n            return (!isFinite(dateParts.rawday) || \"29\" == dateParts.day && !isFinite(dateParts.rawyear) || new Date(dateParts.date.getFullYear(), isFinite(dateParts.rawmonth) ? dateParts.month : dateParts.date.getMonth() + 1, 0).getDate() >= dateParts.day) && currentResult;\r\n        }\r\n\r\n        function isDateInRange(dateParts, opts) {\r\n            var result = !0;\r\n            if (opts.min) {\r\n                if (dateParts.rawyear) {\r\n                    var rawYear = dateParts.rawyear.replace(/[^0-9]/g, \"\"),\r\n                            minYear = opts.min.year.substr(0, rawYear.length);\r\n                    result = minYear <= rawYear;\r\n                }\r\n                dateParts.year === dateParts.rawyear && opts.min.date.getTime() == opts.min.date.getTime() && (result = opts.min.date.getTime() <= dateParts.date.getTime());\r\n            }\r\n            return result && opts.max && opts.max.date.getTime() == opts.max.date.getTime() && (result = opts.max.date.getTime() >= dateParts.date.getTime()),\r\n                    result;\r\n        }\r\n\r\n        function parse(format, dateObjValue, opts, raw) {\r\n            var mask = \"\", match, fcode;\r\n            for (getTokenizer(opts).lastIndex = 0; match = getTokenizer(opts).exec(format);) {\r\n                if (void 0 === dateObjValue) {\r\n                    if (fcode = formatcode(match)) {\r\n                        mask += \"(\" + fcode[0] + \")\";\r\n                    } else {\r\n                        switch (match[0]) {\r\n                            case \"[\":\r\n                                mask += \"(\";\r\n                                break;\r\n\r\n                            case \"]\":\r\n                                mask += \")?\";\r\n                                break;\r\n\r\n                            default:\r\n                                mask += Inputmask.escapeRegex(match[0]);\r\n                        }\r\n                    }\r\n                } else if (fcode = formatcode(match)) {\r\n                    if (!0 !== raw && fcode[3]) {\r\n                        var getFn = fcode[3];\r\n                        mask += getFn.call(dateObjValue.date);\r\n                    } else {\r\n                        fcode[2] ? mask += dateObjValue[\"raw\" + fcode[2]] : mask += match[0];\r\n                    }\r\n                } else {\r\n                    mask += match[0];\r\n                }\r\n            }\r\n            return mask;\r\n        }\r\n\r\n        function pad(val, len) {\r\n            for (val = String(val), len = len || 2; val.length < len;) {\r\n                val = \"0\" + val;\r\n            }\r\n            return val;\r\n        }\r\n\r\n        function analyseMask(maskString, format, opts) {\r\n            var dateObj = {\r\n                date: new Date(1, 0, 1)\r\n            }, targetProp, mask = maskString, match, dateOperation;\r\n\r\n            function extendProperty(value) {\r\n                var correctedValue = value.replace(/[^0-9]/g, \"0\");\r\n                return correctedValue;\r\n            }\r\n\r\n            function setValue(dateObj, value, opts) {\r\n                dateObj[targetProp] = extendProperty(value), dateObj[\"raw\" + targetProp] = value,\r\n                void 0 !== dateOperation && dateOperation.call(dateObj.date, \"month\" == targetProp ? parseInt(dateObj[targetProp]) - 1 : dateObj[targetProp]);\r\n            }\r\n\r\n            if (\"string\" == typeof mask) {\r\n                for (getTokenizer(opts).lastIndex = 0; match = getTokenizer(opts).exec(format);) {\r\n                    var value = mask.slice(0, match[0].length);\r\n                    formatCode.hasOwnProperty(match[0]) && (targetProp = formatCode[match[0]][2], dateOperation = formatCode[match[0]][1],\r\n                            setValue(dateObj, value, opts)), mask = mask.slice(value.length);\r\n                }\r\n                return dateObj;\r\n            }\r\n            if (mask && \"object\" === _typeof(mask) && mask.hasOwnProperty(\"date\")) {\r\n                return mask;\r\n            }\r\n        }\r\n\r\n        function importDate(dateObj, opts) {\r\n            var match, date = \"\";\r\n            for (getTokenizer(opts).lastIndex = 0; match = getTokenizer(opts).exec(opts.inputFormat);) {\r\n                \"d\" === match[0].charAt(0) ? date += pad(dateObj.getDate(), match[0].length) : \"m\" === match[0].charAt(0) ? date += pad(dateObj.getMonth() + 1, match[0].length) : \"yyyy\" === match[0] ? date += dateObj.getFullYear().toString() : \"y\" === match[0].charAt(0) && (date += pad(dateObj.getYear(), match[0].length));\r\n            }\r\n            return date;\r\n        }\r\n\r\n        function getTokenMatch(pos, opts) {\r\n            var calcPos = 0, targetMatch, match, matchLength = 0;\r\n            for (getTokenizer(opts).lastIndex = 0; match = getTokenizer(opts).exec(opts.inputFormat);) {\r\n                var dynMatches = new RegExp(\"\\\\d+$\").exec(match[0]);\r\n                if (matchLength = dynMatches ? parseInt(dynMatches[0]) : match[0].length, calcPos += matchLength,\r\n                pos <= calcPos) {\r\n                    targetMatch = match, match = getTokenizer(opts).exec(opts.inputFormat);\r\n                    break;\r\n                }\r\n            }\r\n            return {\r\n                targetMatchIndex: calcPos - matchLength,\r\n                nextMatch: match,\r\n                targetMatch: targetMatch\r\n            };\r\n        }\r\n\r\n        Inputmask.extendAliases({\r\n                                    datetime: {\r\n                                        mask: function mask(opts) {\r\n                                            return opts.numericInput = !1, formatCode.S = opts.i18n.ordinalSuffix.join(\"|\"),\r\n                                                    opts.inputFormat = formatAlias[opts.inputFormat] || opts.inputFormat, opts.displayFormat = formatAlias[opts.displayFormat] || opts.displayFormat || opts.inputFormat,\r\n                                                    opts.outputFormat = formatAlias[opts.outputFormat] || opts.outputFormat || opts.inputFormat,\r\n                                                    opts.placeholder = \"\" !== opts.placeholder ? opts.placeholder : opts.inputFormat.replace(/[[\\]]/, \"\"),\r\n                                                    opts.regex = parse(opts.inputFormat, void 0, opts), opts.min = analyseMask(opts.min, opts.inputFormat, opts),\r\n                                                    opts.max = analyseMask(opts.max, opts.inputFormat, opts), null;\r\n                                        },\r\n                                        placeholder: \"\",\r\n                                        inputFormat: \"isoDateTime\",\r\n                                        displayFormat: void 0,\r\n                                        outputFormat: void 0,\r\n                                        min: null,\r\n                                        max: null,\r\n                                        skipOptionalPartCharacter: \"\",\r\n                                        i18n: {\r\n                                            dayNames: [\"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\", \"Sun\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\", \"Sunday\"],\r\n                                            monthNames: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\", \"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\r\n                                            ordinalSuffix: [\"st\", \"nd\", \"rd\", \"th\"]\r\n                                        },\r\n                                        preValidation: function preValidation(buffer, pos, c, isSelection, opts, maskset, caretPos, strict) {\r\n                                            if (strict) {\r\n                                                return !0;\r\n                                            }\r\n                                            if (isNaN(c) && buffer[pos] !== c) {\r\n                                                var tokenMatch = getTokenMatch(pos, opts);\r\n                                                if (tokenMatch.nextMatch && tokenMatch.nextMatch[0] === c && 1 < tokenMatch.targetMatch[0].length) {\r\n                                                    var validator = formatCode[tokenMatch.targetMatch[0]][0];\r\n                                                    if (new RegExp(validator).test(\"0\" + buffer[pos - 1])) {\r\n                                                        return buffer[pos] = buffer[pos - 1],\r\n                                                                buffer[pos - 1] = \"0\", {\r\n                                                            fuzzy: !0,\r\n                                                            buffer: buffer,\r\n                                                            refreshFromBuffer: {\r\n                                                                start: pos - 1,\r\n                                                                end: pos + 1\r\n                                                            },\r\n                                                            pos: pos + 1\r\n                                                        };\r\n                                                    }\r\n                                                }\r\n                                            }\r\n                                            return !0;\r\n                                        },\r\n                                        postValidation: function postValidation(buffer, pos, c, currentResult, opts, maskset, strict) {\r\n                                            if (strict) {\r\n                                                return !0;\r\n                                            }\r\n                                            var tokenMatch, validator;\r\n                                            if (!1 === currentResult) {\r\n                                                return tokenMatch = getTokenMatch(pos + 1, opts), tokenMatch.targetMatch && tokenMatch.targetMatchIndex === pos && 1 < tokenMatch.targetMatch[0].length && void 0 !== formatCode[tokenMatch.targetMatch[0]] && (validator = formatCode[tokenMatch.targetMatch[0]][0],\r\n                                                        new RegExp(validator).test(\"0\" + c)) ? {\r\n                                                    insert: [{\r\n                                                        pos: pos,\r\n                                                        c: \"0\"\r\n                                                    }, {\r\n                                                        pos: pos + 1,\r\n                                                        c: c\r\n                                                    }],\r\n                                                    pos: pos + 1\r\n                                                } : currentResult;\r\n                                            }\r\n                                            if (currentResult.fuzzy && (buffer = currentResult.buffer, pos = currentResult.pos),\r\n                                                    tokenMatch = getTokenMatch(pos, opts), tokenMatch.targetMatch && tokenMatch.targetMatch[0] && void 0 !== formatCode[tokenMatch.targetMatch[0]]) {\r\n                                                validator = formatCode[tokenMatch.targetMatch[0]][0];\r\n                                                var part = buffer.slice(tokenMatch.targetMatchIndex, tokenMatch.targetMatchIndex + tokenMatch.targetMatch[0].length);\r\n                                                !1 === new RegExp(validator).test(part.join(\"\")) && 2 === tokenMatch.targetMatch[0].length && maskset.validPositions[tokenMatch.targetMatchIndex] && maskset.validPositions[tokenMatch.targetMatchIndex + 1] && (maskset.validPositions[tokenMatch.targetMatchIndex + 1].input = \"0\");\r\n                                            }\r\n                                            var result = currentResult,\r\n                                                    dateParts = analyseMask(buffer.join(\"\"), opts.inputFormat, opts);\r\n                                            return result && dateParts.date.getTime() == dateParts.date.getTime() && (result = isValidDate(dateParts, result),\r\n                                                    result = result && isDateInRange(dateParts, opts)), pos && result && currentResult.pos !== pos ? {\r\n                                                buffer: parse(opts.inputFormat, dateParts, opts).split(\"\"),\r\n                                                refreshFromBuffer: {\r\n                                                    start: pos,\r\n                                                    end: currentResult.pos\r\n                                                }\r\n                                            } : result;\r\n                                        },\r\n                                        onKeyDown: function onKeyDown(e, buffer, caretPos, opts) {\r\n                                            var input = this;\r\n                                            e.ctrlKey && e.keyCode === keyCode.RIGHT && (this.inputmask._valueSet(importDate(new Date(), opts)),\r\n                                                    $(this).trigger(\"setvalue\"));\r\n                                        },\r\n                                        onUnMask: function onUnMask(maskedValue, unmaskedValue, opts) {\r\n                                            return unmaskedValue ? parse(opts.outputFormat, analyseMask(maskedValue, opts.inputFormat, opts), opts, !0) : unmaskedValue;\r\n                                        },\r\n                                        casing: function casing(elem, test, pos, validPositions) {\r\n                                            return 0 == test.nativeDef.indexOf(\"[ap]\") ? elem.toLowerCase() : 0 == test.nativeDef.indexOf(\"[AP]\") ? elem.toUpperCase() : elem;\r\n                                        },\r\n                                        onBeforeMask: function onBeforeMask(initialValue, opts) {\r\n                                            return \"[object Date]\" === Object.prototype.toString.call(initialValue) && (initialValue = importDate(initialValue, opts)),\r\n                                                    initialValue;\r\n                                        },\r\n                                        insertMode: !1,\r\n                                        shiftPositions: !1,\r\n                                        keepStatic: !1,\r\n                                        inputmode: \"numeric\"\r\n                                    }\r\n                                }), module.exports = Inputmask;\r\n    }, function(module, exports, __webpack_require__) {\r\n        \"use strict\";\r\n        var Inputmask = __webpack_require__(1), $ = Inputmask.dependencyLib, keyCode = __webpack_require__(0);\r\n\r\n        function autoEscape(txt, opts) {\r\n            for (var escapedTxt = \"\", i = 0; i < txt.length; i++) {\r\n                Inputmask.prototype.definitions[txt.charAt(i)] || opts.definitions[txt.charAt(i)] || opts.optionalmarker[0] === txt.charAt(i) || opts.optionalmarker[1] === txt.charAt(i) || opts.quantifiermarker[0] === txt.charAt(i) || opts.quantifiermarker[1] === txt.charAt(i) || opts.groupmarker[0] === txt.charAt(i) || opts.groupmarker[1] === txt.charAt(i) || opts.alternatormarker === txt.charAt(i) ? escapedTxt += \"\\\\\" + txt.charAt(i) : escapedTxt += txt.charAt(i);\r\n            }\r\n            return escapedTxt;\r\n        }\r\n\r\n        function alignDigits(buffer, digits, opts, force) {\r\n            if (0 < buffer.length && 0 < digits && (!opts.digitsOptional || force)) {\r\n                var radixPosition = $.inArray(opts.radixPoint, buffer);\r\n                -1 === radixPosition && (buffer.push(opts.radixPoint), radixPosition = buffer.length - 1);\r\n                for (var i = 1; i <= digits; i++) {\r\n                    isFinite(buffer[radixPosition + i]) || (buffer[radixPosition + i] = \"0\");\r\n                }\r\n            }\r\n            return buffer;\r\n        }\r\n\r\n        function findValidator(symbol, maskset) {\r\n            var posNdx = 0;\r\n            if (\"+\" === symbol) {\r\n                for (posNdx in maskset.validPositions) {\r\n                    ;\r\n                }\r\n                posNdx = parseInt(posNdx);\r\n            }\r\n            for (var tstNdx in maskset.tests) {\r\n                if (tstNdx = parseInt(tstNdx), posNdx <= tstNdx) {\r\n                    for (var ndx = 0, ndxl = maskset.tests[tstNdx].length; ndx < ndxl; ndx++) {\r\n                        if ((void 0 === maskset.validPositions[tstNdx] || \"-\" === symbol) && maskset.tests[tstNdx][ndx].match.def === symbol) {\r\n                            return tstNdx + (void 0 !== maskset.validPositions[tstNdx] && \"-\" !== symbol ? 1 : 0);\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n            return posNdx;\r\n        }\r\n\r\n        function findValid(symbol, maskset) {\r\n            var ret = -1;\r\n            return $.each(maskset.validPositions, function(ndx, tst) {\r\n                if (tst && tst.match.def === symbol) {\r\n                    return ret = parseInt(ndx), !1;\r\n                }\r\n            }), ret;\r\n        }\r\n\r\n        function parseMinMaxOptions(opts) {\r\n            void 0 === opts.parseMinMaxOptions && (null !== opts.min && (opts.min = opts.min.toString().replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), \"g\"), \"\"),\r\n            \",\" === opts.radixPoint && (opts.min = opts.min.replace(opts.radixPoint, \".\")),\r\n                    opts.min = isFinite(opts.min) ? parseFloat(opts.min) : NaN, isNaN(opts.min) && (opts.min = Number.MIN_VALUE)),\r\n            null !== opts.max && (opts.max = opts.max.toString().replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), \"g\"), \"\"),\r\n            \",\" === opts.radixPoint && (opts.max = opts.max.replace(opts.radixPoint, \".\")),\r\n                    opts.max = isFinite(opts.max) ? parseFloat(opts.max) : NaN, isNaN(opts.max) && (opts.max = Number.MAX_VALUE)),\r\n                    opts.parseMinMaxOptions = \"done\");\r\n        }\r\n\r\n        function genMask(opts) {\r\n            opts.repeat = 0, opts.groupSeparator === opts.radixPoint && opts.digits && \"0\" !== opts.digits && (\".\" === opts.radixPoint ? opts.groupSeparator = \",\" : \",\" === opts.radixPoint ? opts.groupSeparator = \".\" : opts.groupSeparator = \"\"),\r\n            \" \" === opts.groupSeparator && (opts.skipOptionalPartCharacter = void 0), 1 < opts.placeholder.length && (opts.placeholder = opts.placeholder.charAt(0)),\r\n            \"radixFocus\" === opts.positionCaretOnClick && \"\" === opts.placeholder && (opts.positionCaretOnClick = \"lvp\");\r\n            var decimalDef = \"0\", radixPointDef = opts.radixPoint;\r\n            !0 === opts.numericInput && void 0 === opts.__financeInput ? (decimalDef = \"1\",\r\n                    opts.positionCaretOnClick = \"radixFocus\" === opts.positionCaretOnClick ? \"lvp\" : opts.positionCaretOnClick,\r\n                    opts.digitsOptional = !1, isNaN(opts.digits) && (opts.digits = 2), opts._radixDance = !1,\r\n                    radixPointDef = \",\" === opts.radixPoint ? \"?\" : \"!\", \"\" !== opts.radixPoint && void 0 === opts.definitions[radixPointDef] && (opts.definitions[radixPointDef] = {},\r\n                    opts.definitions[radixPointDef].validator = \"[\" + opts.radixPoint + \"]\", opts.definitions[radixPointDef].placeholder = opts.radixPoint,\r\n                    opts.definitions[radixPointDef].static = !0, opts.definitions[radixPointDef].generated = !0)) : (opts.__financeInput = !1,\r\n                    opts.numericInput = !0);\r\n            var mask = \"[+]\", altMask;\r\n            if (mask += autoEscape(opts.prefix, opts), \"\" !== opts.groupSeparator ? (void 0 === opts.definitions[opts.groupSeparator] && (opts.definitions[opts.groupSeparator] = {},\r\n                    opts.definitions[opts.groupSeparator].validator = \"[\" + opts.groupSeparator + \"]\",\r\n                    opts.definitions[opts.groupSeparator].placeholder = opts.groupSeparator, opts.definitions[opts.groupSeparator].static = !0,\r\n                    opts.definitions[opts.groupSeparator].generated = !0), mask += opts._mask(opts)) : mask += \"9{+}\",\r\n            void 0 !== opts.digits && 0 !== opts.digits) {\r\n                var dq = opts.digits.toString().split(\",\");\r\n                isFinite(dq[0]) && dq[1] && isFinite(dq[1]) ? mask += radixPointDef + decimalDef + \"{\" + opts.digits + \"}\" : (isNaN(opts.digits) || 0 < parseInt(opts.digits)) && (opts.digitsOptional ? (altMask = mask + radixPointDef + decimalDef + \"{0,\" + opts.digits + \"}\",\r\n                        opts.keepStatic = !0) : mask += radixPointDef + decimalDef + \"{\" + opts.digits + \"}\");\r\n            }\r\n            return mask += autoEscape(opts.suffix, opts), mask += \"[-]\", altMask && (mask = [altMask + autoEscape(opts.suffix, opts) + \"[-]\", mask]),\r\n                    opts.greedy = !1, parseMinMaxOptions(opts), mask;\r\n        }\r\n\r\n        function hanndleRadixDance(pos, c, radixPos, maskset, opts) {\r\n            return opts._radixDance && opts.numericInput && c !== opts.negationSymbol.back && pos <= radixPos && (0 < radixPos || c == opts.radixPoint) && (void 0 === maskset.validPositions[pos - 1] || maskset.validPositions[pos - 1].input !== opts.negationSymbol.back) && (pos -= 1),\r\n                    pos;\r\n        }\r\n\r\n        function decimalValidator(chrs, maskset, pos, strict, opts) {\r\n            var radixPos = maskset.buffer ? maskset.buffer.indexOf(opts.radixPoint) : -1,\r\n                    result = -1 !== radixPos && new RegExp(\"[0-9\\uff11-\\uff19]\").test(chrs);\r\n            return opts._radixDance && result && null == maskset.validPositions[radixPos] ? {\r\n                insert: {\r\n                    pos: radixPos === pos ? radixPos + 1 : radixPos,\r\n                    c: opts.radixPoint\r\n                },\r\n                pos: pos\r\n            } : result;\r\n        }\r\n\r\n        function checkForLeadingZeroes(buffer, opts) {\r\n            var numberMatches = new RegExp(\"(^\" + (\"\" !== opts.negationSymbol.front ? Inputmask.escapeRegex(opts.negationSymbol.front) + \"?\" : \"\") + Inputmask.escapeRegex(opts.prefix) + \")(.*)(\" + Inputmask.escapeRegex(opts.suffix) + (\"\" != opts.negationSymbol.back ? Inputmask.escapeRegex(opts.negationSymbol.back) + \"?\" : \"\") + \"$)\").exec(buffer.slice().reverse().join(\"\")),\r\n                    number = numberMatches ? numberMatches[2] : \"\", leadingzeroes = !1;\r\n            return number && (number = number.split(opts.radixPoint.charAt(0))[0], leadingzeroes = new RegExp(\"^[0\" + opts.groupSeparator + \"]*\").exec(number)),\r\n            !(!leadingzeroes || !(1 < leadingzeroes[0].length || 0 < leadingzeroes[0].length && leadingzeroes[0].length < number.length)) && leadingzeroes;\r\n        }\r\n\r\n        Inputmask.extendAliases({\r\n                                    numeric: {\r\n                                        mask: genMask,\r\n                                        _mask: function _mask(opts) {\r\n                                            return \"(\" + opts.groupSeparator + \"999){+|1}\";\r\n                                        },\r\n                                        digits: \"*\",\r\n                                        digitsOptional: !0,\r\n                                        enforceDigitsOnBlur: !1,\r\n                                        radixPoint: \".\",\r\n                                        positionCaretOnClick: \"radixFocus\",\r\n                                        _radixDance: !0,\r\n                                        groupSeparator: \"\",\r\n                                        allowMinus: !0,\r\n                                        negationSymbol: {\r\n                                            front: \"-\",\r\n                                            back: \"\"\r\n                                        },\r\n                                        prefix: \"\",\r\n                                        suffix: \"\",\r\n                                        min: null,\r\n                                        max: null,\r\n                                        step: 1,\r\n                                        unmaskAsNumber: !1,\r\n                                        roundingFN: Math.round,\r\n                                        inputmode: \"numeric\",\r\n                                        shortcuts: {\r\n                                            k: \"000\",\r\n                                            m: \"000000\"\r\n                                        },\r\n                                        placeholder: \"0\",\r\n                                        greedy: !1,\r\n                                        rightAlign: !0,\r\n                                        insertMode: !0,\r\n                                        autoUnmask: !1,\r\n                                        skipOptionalPartCharacter: \"\",\r\n                                        definitions: {\r\n                                            0: {\r\n                                                validator: decimalValidator\r\n                                            },\r\n                                            1: {\r\n                                                validator: decimalValidator,\r\n                                                definitionSymbol: \"9\"\r\n                                            },\r\n                                            \"+\": {\r\n                                                validator: function validator(chrs, maskset, pos, strict, opts) {\r\n                                                    return opts.allowMinus && (\"-\" === chrs || chrs === opts.negationSymbol.front);\r\n                                                }\r\n                                            },\r\n                                            \"-\": {\r\n                                                validator: function validator(chrs, maskset, pos, strict, opts) {\r\n                                                    return opts.allowMinus && chrs === opts.negationSymbol.back;\r\n                                                }\r\n                                            }\r\n                                        },\r\n                                        preValidation: function preValidation(buffer, pos, c, isSelection, opts, maskset, caretPos, strict) {\r\n                                            if (!1 !== opts.__financeInput && c === opts.radixPoint) {\r\n                                                return !1;\r\n                                            }\r\n                                            var pattern;\r\n                                            if (pattern = opts.shortcuts && opts.shortcuts[c]) {\r\n                                                if (1 < pattern.length) {\r\n                                                    for (var inserts = [], i = 0; i < pattern.length; i++) {\r\n                                                        inserts.push({\r\n                                                                         pos: pos + i,\r\n                                                                         c: pattern[i],\r\n                                                                         strict: !1\r\n                                                                     });\r\n                                                    }\r\n                                                }\r\n                                                return {\r\n                                                    insert: inserts\r\n                                                };\r\n                                            }\r\n                                            var radixPos = $.inArray(opts.radixPoint, buffer), initPos = pos;\r\n                                            if (pos = hanndleRadixDance(pos, c, radixPos, maskset, opts), \"-\" === c || c === opts.negationSymbol.front) {\r\n                                                if (!0 !== opts.allowMinus) {\r\n                                                    return !1;\r\n                                                }\r\n                                                var isNegative = !1, front = findValid(\"+\", maskset),\r\n                                                        back = findValid(\"-\", maskset);\r\n                                                return -1 !== front && (isNegative = [front, back]), !1 !== isNegative ? {\r\n                                                    remove: isNegative,\r\n                                                    caret: initPos\r\n                                                } : {\r\n                                                    insert: [{\r\n                                                        pos: findValidator(\"+\", maskset),\r\n                                                        c: opts.negationSymbol.front,\r\n                                                        fromIsValid: !0\r\n                                                    }, {\r\n                                                        pos: findValidator(\"-\", maskset),\r\n                                                        c: opts.negationSymbol.back,\r\n                                                        fromIsValid: void 0\r\n                                                    }],\r\n                                                    caret: initPos + opts.negationSymbol.back.length\r\n                                                };\r\n                                            }\r\n                                            if (strict) {\r\n                                                return !0;\r\n                                            }\r\n                                            if (-1 !== radixPos && !0 === opts._radixDance && !1 === isSelection && c === opts.radixPoint && void 0 !== opts.digits && (isNaN(opts.digits) || 0 < parseInt(opts.digits)) && radixPos !== pos) {\r\n                                                return {\r\n                                                    caret: opts._radixDance && pos === radixPos - 1 ? radixPos + 1 : radixPos\r\n                                                };\r\n                                            }\r\n                                            if (!1 === opts.__financeInput) {\r\n                                                if (isSelection) {\r\n                                                    if (opts.digitsOptional) {\r\n                                                        return {\r\n                                                            rewritePosition: caretPos.end\r\n                                                        };\r\n                                                    }\r\n                                                    if (!opts.digitsOptional) {\r\n                                                        if (caretPos.begin > radixPos && caretPos.end <= radixPos) {\r\n                                                            return c === opts.radixPoint ? {\r\n                                                                insert: {\r\n                                                                    pos: radixPos + 1,\r\n                                                                    c: \"0\",\r\n                                                                    fromIsValid: !0\r\n                                                                },\r\n                                                                rewritePosition: radixPos\r\n                                                            } : {\r\n                                                                rewritePosition: radixPos + 1\r\n                                                            };\r\n                                                        }\r\n                                                        if (caretPos.begin < radixPos) {\r\n                                                            return {\r\n                                                                rewritePosition: caretPos.begin - 1\r\n                                                            };\r\n                                                        }\r\n                                                    }\r\n                                                } else if (!opts.showMaskOnHover && !opts.showMaskOnFocus && !opts.digitsOptional && 0 < opts.digits && \"\" === this.inputmask.__valueGet.call(this)) {\r\n                                                    return {\r\n                                                        rewritePosition: radixPos\r\n                                                    };\r\n                                                }\r\n                                            }\r\n                                            return {\r\n                                                rewritePosition: pos\r\n                                            };\r\n                                        },\r\n                                        postValidation: function postValidation(buffer, pos, c, currentResult, opts, maskset, strict) {\r\n                                            if (!1 === currentResult) {\r\n                                                return currentResult;\r\n                                            }\r\n                                            if (strict) {\r\n                                                return !0;\r\n                                            }\r\n                                            if (null !== opts.min || null !== opts.max) {\r\n                                                var unmasked = opts.onUnMask(buffer.slice().reverse().join(\"\"), void 0, $.extend({}, opts, {\r\n                                                    unmaskAsNumber: !0\r\n                                                }));\r\n                                                if (null !== opts.min && unmasked < opts.min && (unmasked.toString().length >= opts.min.toString().length || unmasked < 0)) {\r\n                                                    return !1;\r\n                                                }\r\n                                                if (null !== opts.max && unmasked > opts.max) {\r\n                                                    return !1;\r\n                                                }\r\n                                            }\r\n                                            return currentResult;\r\n                                        },\r\n                                        onUnMask: function onUnMask(maskedValue, unmaskedValue, opts) {\r\n                                            if (\"\" === unmaskedValue && !0 === opts.nullable) {\r\n                                                return unmaskedValue;\r\n                                            }\r\n                                            var processValue = maskedValue.replace(opts.prefix, \"\");\r\n                                            return processValue = processValue.replace(opts.suffix, \"\"), processValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), \"g\"), \"\"),\r\n                                            \"\" !== opts.placeholder.charAt(0) && (processValue = processValue.replace(new RegExp(opts.placeholder.charAt(0), \"g\"), \"0\")),\r\n                                                    opts.unmaskAsNumber ? (\"\" !== opts.radixPoint && -1 !== processValue.indexOf(opts.radixPoint) && (processValue = processValue.replace(Inputmask.escapeRegex.call(this, opts.radixPoint), \".\")),\r\n                                                            processValue = processValue.replace(new RegExp(\"^\" + Inputmask.escapeRegex(opts.negationSymbol.front)), \"-\"),\r\n                                                            processValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.negationSymbol.back) + \"$\"), \"\"),\r\n                                                            Number(processValue)) : processValue;\r\n                                        },\r\n                                        isComplete: function isComplete(buffer, opts) {\r\n                                            var maskedValue = (opts.numericInput ? buffer.slice().reverse() : buffer).join(\"\");\r\n                                            return maskedValue = maskedValue.replace(new RegExp(\"^\" + Inputmask.escapeRegex(opts.negationSymbol.front)), \"-\"),\r\n                                                    maskedValue = maskedValue.replace(new RegExp(Inputmask.escapeRegex(opts.negationSymbol.back) + \"$\"), \"\"),\r\n                                                    maskedValue = maskedValue.replace(opts.prefix, \"\"), maskedValue = maskedValue.replace(opts.suffix, \"\"),\r\n                                                    maskedValue = maskedValue.replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator) + \"([0-9]{3})\", \"g\"), \"$1\"),\r\n                                            \",\" === opts.radixPoint && (maskedValue = maskedValue.replace(Inputmask.escapeRegex(opts.radixPoint), \".\")),\r\n                                                    isFinite(maskedValue);\r\n                                        },\r\n                                        onBeforeMask: function onBeforeMask(initialValue, opts) {\r\n                                            var radixPoint = opts.radixPoint || \",\";\r\n                                            isFinite(opts.digits) && (opts.digits = parseInt(opts.digits)), \"number\" != typeof initialValue && \"number\" !== opts.inputType || \"\" === radixPoint || (initialValue = initialValue.toString().replace(\".\", radixPoint));\r\n                                            var valueParts = initialValue.split(radixPoint),\r\n                                                    integerPart = valueParts[0].replace(/[^\\-0-9]/g, \"\"),\r\n                                                    decimalPart = 1 < valueParts.length ? valueParts[1].replace(/[^0-9]/g, \"\") : \"\",\r\n                                                    forceDigits = 1 < valueParts.length;\r\n                                            initialValue = integerPart + (\"\" !== decimalPart ? radixPoint + decimalPart : decimalPart);\r\n                                            var digits = 0;\r\n                                            if (\"\" !== radixPoint && (digits = opts.digitsOptional ? opts.digits < decimalPart.length ? opts.digits : decimalPart.length : opts.digits,\r\n                                            \"\" !== decimalPart || !opts.digitsOptional)) {\r\n                                                var digitsFactor = Math.pow(10, digits || 1);\r\n                                                initialValue = initialValue.replace(Inputmask.escapeRegex(radixPoint), \".\"), isNaN(parseFloat(initialValue)) || (initialValue = (opts.roundingFN(parseFloat(initialValue) * digitsFactor) / digitsFactor).toFixed(digits)),\r\n                                                        initialValue = initialValue.toString().replace(\".\", radixPoint);\r\n                                            }\r\n                                            if (0 === opts.digits && -1 !== initialValue.indexOf(radixPoint) && (initialValue = initialValue.substring(0, initialValue.indexOf(radixPoint))),\r\n                                            null !== opts.min || null !== opts.max) {\r\n                                                var numberValue = initialValue.toString().replace(radixPoint, \".\");\r\n                                                null !== opts.min && numberValue < opts.min ? initialValue = opts.min.toString().replace(\".\", radixPoint) : null !== opts.max && numberValue > opts.max && (initialValue = opts.max.toString().replace(\".\", radixPoint));\r\n                                            }\r\n                                            return alignDigits(initialValue.toString().split(\"\"), digits, opts, forceDigits).join(\"\");\r\n                                        },\r\n                                        onBeforeWrite: function onBeforeWrite(e, buffer, caretPos, opts) {\r\n                                            function stripBuffer(buffer, stripRadix) {\r\n                                                if (!1 !== opts.__financeInput || stripRadix) {\r\n                                                    var position = $.inArray(opts.radixPoint, buffer);\r\n                                                    -1 !== position && buffer.splice(position, 1);\r\n                                                }\r\n                                                if (\"\" !== opts.groupSeparator) {\r\n                                                    for (; -1 !== (position = buffer.indexOf(opts.groupSeparator));) {\r\n                                                        buffer.splice(position, 1);\r\n                                                    }\r\n                                                }\r\n                                                return buffer;\r\n                                            }\r\n\r\n                                            var result, leadingzeroes = checkForLeadingZeroes(buffer, opts);\r\n                                            if (leadingzeroes) {\r\n                                                var buf = buffer.slice().reverse(),\r\n                                                        caretNdx = buf.join(\"\").indexOf(leadingzeroes[0]);\r\n                                                buf.splice(caretNdx, leadingzeroes[0].length);\r\n                                                var newCaretPos = buf.length - caretNdx;\r\n                                                stripBuffer(buf), result = {\r\n                                                    refreshFromBuffer: !0,\r\n                                                    buffer: buf.reverse(),\r\n                                                    caret: caretPos < newCaretPos ? caretPos : newCaretPos\r\n                                                };\r\n                                            }\r\n                                            if (e) {\r\n                                                switch (e.type) {\r\n                                                    case \"blur\":\r\n                                                    case \"checkval\":\r\n                                                        if (null !== opts.min) {\r\n                                                            var unmasked = opts.onUnMask(buffer.slice().reverse().join(\"\"), void 0, $.extend({}, opts, {\r\n                                                                unmaskAsNumber: !0\r\n                                                            }));\r\n                                                            if (null !== opts.min && unmasked < opts.min) {\r\n                                                                return {\r\n                                                                    refreshFromBuffer: !0,\r\n                                                                    buffer: alignDigits(opts.min.toString().replace(\".\", opts.radixPoint).split(\"\"), opts.digits, opts).reverse()\r\n                                                                };\r\n                                                            }\r\n                                                        }\r\n                                                        if (buffer[buffer.length - 1] === opts.negationSymbol.front) {\r\n                                                            var nmbrMtchs = new RegExp(\"(^\" + (\"\" != opts.negationSymbol.front ? Inputmask.escapeRegex(opts.negationSymbol.front) + \"?\" : \"\") + Inputmask.escapeRegex(opts.prefix) + \")(.*)(\" + Inputmask.escapeRegex(opts.suffix) + (\"\" != opts.negationSymbol.back ? Inputmask.escapeRegex(opts.negationSymbol.back) + \"?\" : \"\") + \"$)\").exec(stripBuffer(buffer.slice(), !0).reverse().join(\"\")),\r\n                                                                    number = nmbrMtchs ? nmbrMtchs[2] : \"\";\r\n                                                            0 == number && (result = {\r\n                                                                refreshFromBuffer: !0,\r\n                                                                buffer: [0]\r\n                                                            });\r\n                                                        } else {\r\n                                                            \"\" !== opts.radixPoint && buffer[0] === opts.radixPoint && (result && result.buffer ? result.buffer.shift() : (buffer.shift(),\r\n                                                                    result = {\r\n                                                                        refreshFromBuffer: !0,\r\n                                                                        buffer: stripBuffer(buffer)\r\n                                                                    }));\r\n                                                        }\r\n                                                        if (opts.enforceDigitsOnBlur) {\r\n                                                            result = result || {};\r\n                                                            var bffr = result && result.buffer || buffer.slice().reverse();\r\n                                                            result.refreshFromBuffer = !0, result.buffer = alignDigits(bffr, opts.digits, opts, !0).reverse();\r\n                                                        }\r\n                                                }\r\n                                            }\r\n                                            return result;\r\n                                        },\r\n                                        onKeyDown: function onKeyDown(e, buffer, caretPos, opts) {\r\n                                            var $input = $(this), bffr;\r\n                                            if (e.ctrlKey) {\r\n                                                switch (e.keyCode) {\r\n                                                    case keyCode.UP:\r\n                                                        return this.inputmask.__valueSet.call(this, parseFloat(this.inputmask.unmaskedvalue()) + parseInt(opts.step)),\r\n                                                                $input.trigger(\"setvalue\"), !1;\r\n\r\n                                                    case keyCode.DOWN:\r\n                                                        return this.inputmask.__valueSet.call(this, parseFloat(this.inputmask.unmaskedvalue()) - parseInt(opts.step)),\r\n                                                                $input.trigger(\"setvalue\"), !1;\r\n                                                }\r\n                                            }\r\n                                            if (!e.shiftKey && (e.keyCode === keyCode.DELETE || e.keyCode === keyCode.BACKSPACE || e.keyCode === keyCode.BACKSPACE_SAFARI) && caretPos.begin !== buffer.length) {\r\n                                                if (buffer[e.keyCode === keyCode.DELETE ? caretPos.begin - 1 : caretPos.end] === opts.negationSymbol.front) {\r\n                                                    return bffr = buffer.slice().reverse(),\r\n                                                    \"\" !== opts.negationSymbol.front && bffr.shift(), \"\" !== opts.negationSymbol.back && bffr.pop(),\r\n                                                            $input.trigger(\"setvalue\", [bffr.join(\"\"), caretPos.begin]), !1;\r\n                                                }\r\n                                                if (!0 === opts._radixDance) {\r\n                                                    var radixPos = $.inArray(opts.radixPoint, buffer);\r\n                                                    if (opts.digitsOptional) {\r\n                                                        if (0 === radixPos) {\r\n                                                            return bffr = buffer.slice().reverse(), bffr.pop(), $input.trigger(\"setvalue\", [bffr.join(\"\"), caretPos.begin >= bffr.length ? bffr.length : caretPos.begin]),\r\n                                                                    !1;\r\n                                                        }\r\n                                                    } else if (-1 !== radixPos && (caretPos.begin < radixPos || caretPos.end < radixPos || e.keyCode === keyCode.DELETE && caretPos.begin === radixPos)) {\r\n                                                        return caretPos.begin !== caretPos.end || e.keyCode !== keyCode.BACKSPACE && e.keyCode !== keyCode.BACKSPACE_SAFARI || caretPos.begin++,\r\n                                                                bffr = buffer.slice().reverse(), bffr.splice(bffr.length - caretPos.begin, caretPos.begin - caretPos.end + 1),\r\n                                                                bffr = alignDigits(bffr, opts.digits, opts).join(\"\"), $input.trigger(\"setvalue\", [bffr, caretPos.begin >= bffr.length ? radixPos + 1 : caretPos.begin]),\r\n                                                                !1;\r\n                                                    }\r\n                                                }\r\n                                            }\r\n                                        }\r\n                                    },\r\n                                    currency: {\r\n                                        prefix: \"\",\r\n                                        groupSeparator: \",\",\r\n                                        alias: \"numeric\",\r\n                                        digits: 2,\r\n                                        digitsOptional: !1\r\n                                    },\r\n                                    decimal: {\r\n                                        alias: \"numeric\"\r\n                                    },\r\n                                    integer: {\r\n                                        alias: \"numeric\",\r\n                                        digits: 0\r\n                                    },\r\n                                    percentage: {\r\n                                        alias: \"numeric\",\r\n                                        min: 0,\r\n                                        max: 100,\r\n                                        suffix: \" %\",\r\n                                        digits: 0,\r\n                                        allowMinus: !1\r\n                                    },\r\n                                    indianns: {\r\n                                        alias: \"numeric\",\r\n                                        _mask: function _mask(opts) {\r\n                                            return \"(\" + opts.groupSeparator + \"99){*|1}(\" + opts.groupSeparator + \"999){1|1}\";\r\n                                        },\r\n                                        groupSeparator: \",\",\r\n                                        radixPoint: \".\",\r\n                                        placeholder: \"0\",\r\n                                        digits: 2,\r\n                                        digitsOptional: !1\r\n                                    }\r\n                                }), module.exports = Inputmask;\r\n    }, function(module, exports, __webpack_require__) {\r\n        \"use strict\";\r\n        var _inputmask = _interopRequireDefault(__webpack_require__(1));\r\n\r\n        function _typeof(obj) {\r\n            return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function _typeof(obj) {\r\n                return typeof obj;\r\n            } : function _typeof(obj) {\r\n                return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\r\n            }, _typeof(obj);\r\n        }\r\n\r\n        function _classCallCheck(instance, Constructor) {\r\n            if (!(instance instanceof Constructor)) {\r\n                throw new TypeError(\"Cannot call a class as a function\");\r\n            }\r\n        }\r\n\r\n        function _possibleConstructorReturn(self, call) {\r\n            return !call || \"object\" !== _typeof(call) && \"function\" != typeof call ? _assertThisInitialized(self) : call;\r\n        }\r\n\r\n        function _assertThisInitialized(self) {\r\n            if (void 0 === self) {\r\n                throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\r\n            }\r\n            return self;\r\n        }\r\n\r\n        function _inherits(subClass, superClass) {\r\n            if (\"function\" != typeof superClass && null !== superClass) {\r\n                throw new TypeError(\"Super expression must either be null or a function\");\r\n            }\r\n            subClass.prototype = Object.create(superClass && superClass.prototype, {\r\n                constructor: {\r\n                    value: subClass,\r\n                    writable: !0,\r\n                    configurable: !0\r\n                }\r\n            }), superClass && _setPrototypeOf(subClass, superClass);\r\n        }\r\n\r\n        function _wrapNativeSuper(Class) {\r\n            var _cache = \"function\" == typeof Map ? new Map() : void 0;\r\n            return _wrapNativeSuper = function _wrapNativeSuper(Class) {\r\n                if (null === Class || !_isNativeFunction(Class)) {\r\n                    return Class;\r\n                }\r\n                if (\"function\" != typeof Class) {\r\n                    throw new TypeError(\"Super expression must either be null or a function\");\r\n                }\r\n                if (\"undefined\" != typeof _cache) {\r\n                    if (_cache.has(Class)) {\r\n                        return _cache.get(Class);\r\n                    }\r\n                    _cache.set(Class, Wrapper);\r\n                }\r\n\r\n                function Wrapper() {\r\n                    return _construct(Class, arguments, _getPrototypeOf(this).constructor);\r\n                }\r\n\r\n                return Wrapper.prototype = Object.create(Class.prototype, {\r\n                    constructor: {\r\n                        value: Wrapper,\r\n                        enumerable: !1,\r\n                        writable: !0,\r\n                        configurable: !0\r\n                    }\r\n                }), _setPrototypeOf(Wrapper, Class);\r\n            }, _wrapNativeSuper(Class);\r\n        }\r\n\r\n        function isNativeReflectConstruct() {\r\n            if (\"undefined\" == typeof Reflect || !Reflect.construct) {\r\n                return !1;\r\n            }\r\n            if (Reflect.construct.sham) {\r\n                return !1;\r\n            }\r\n            if (\"function\" == typeof Proxy) {\r\n                return !0;\r\n            }\r\n            try {\r\n                return Date.prototype.toString.call(Reflect.construct(Date, [], function() {\r\n                })),\r\n                        !0;\r\n            } catch (e) {\r\n                return !1;\r\n            }\r\n        }\r\n\r\n        function _construct(Parent, args, Class) {\r\n            return _construct = isNativeReflectConstruct() ? Reflect.construct : function _construct(Parent, args, Class) {\r\n                var a = [null];\r\n                a.push.apply(a, args);\r\n                var Constructor = Function.bind.apply(Parent, a), instance = new Constructor();\r\n                return Class && _setPrototypeOf(instance, Class.prototype), instance;\r\n            }, _construct.apply(null, arguments);\r\n        }\r\n\r\n        function _isNativeFunction(fn) {\r\n            return -1 !== Function.toString.call(fn).indexOf(\"[native code]\");\r\n        }\r\n\r\n        function _setPrototypeOf(o, p) {\r\n            return _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\r\n                return o.__proto__ = p, o;\r\n            }, _setPrototypeOf(o, p);\r\n        }\r\n\r\n        function _getPrototypeOf(o) {\r\n            return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\r\n                return o.__proto__ || Object.getPrototypeOf(o);\r\n            }, _getPrototypeOf(o);\r\n        }\r\n\r\n        function _interopRequireDefault(obj) {\r\n            return obj && obj.__esModule ? obj : {\r\n                default: obj\r\n            };\r\n        }\r\n\r\n        if (document.head.createShadowRoot || document.head.attachShadow) {\r\n            var InputmaskElement = function(_HTMLElement) {\r\n                function InputmaskElement() {\r\n                    var _this;\r\n                    _classCallCheck(this, InputmaskElement), _this = _possibleConstructorReturn(this, _getPrototypeOf(InputmaskElement).call(this));\r\n                    var attributeNames = _this.getAttributeNames(), shadow = _this.attachShadow({\r\n                                                                                                    mode: \"closed\"\r\n                                                                                                }),\r\n                            input = document.createElement(\"input\");\r\n                    for (var attr in input.type = \"text\", shadow.appendChild(input), attributeNames) {\r\n                        Object.prototype.hasOwnProperty.call(attributeNames, attr) && input.setAttribute(\"data-inputmask-\" + attributeNames[attr], _this.getAttribute(attributeNames[attr]));\r\n                    }\r\n                    return new _inputmask.default().mask(input), input.inputmask.shadowRoot = shadow,\r\n                            _this;\r\n                }\r\n\r\n                return _inherits(InputmaskElement, _HTMLElement), InputmaskElement;\r\n            }(_wrapNativeSuper(HTMLElement));\r\n            customElements.define(\"input-mask\", InputmaskElement);\r\n        }\r\n    }], installedModules = {}, __webpack_require__.m = modules, __webpack_require__.c = installedModules,\r\n            __webpack_require__.d = function(exports, name, getter) {\r\n                __webpack_require__.o(exports, name) || Object.defineProperty(exports, name, {\r\n                    enumerable: !0,\r\n                    get: getter\r\n                });\r\n            }, __webpack_require__.r = function(exports) {\r\n        \"undefined\" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(exports, Symbol.toStringTag, {\r\n            value: \"Module\"\r\n        }), Object.defineProperty(exports, \"__esModule\", {\r\n            value: !0\r\n        });\r\n    }, __webpack_require__.t = function(value, mode) {\r\n        if (1 & mode && (value = __webpack_require__(value)), 8 & mode) {\r\n            return value;\r\n        }\r\n        if (4 & mode && \"object\" == typeof value && value && value.__esModule) {\r\n            return value;\r\n        }\r\n        var ns = Object.create(null);\r\n        if (__webpack_require__.r(ns), Object.defineProperty(ns, \"default\", {\r\n            enumerable: !0,\r\n            value: value\r\n        }), 2 & mode && \"string\" != typeof value) {\r\n            for (var key in value) {\r\n                __webpack_require__.d(ns, key, function(key) {\r\n                    return value[key];\r\n                }.bind(null, key));\r\n            }\r\n        }\r\n        return ns;\r\n    }, __webpack_require__.n = function(module) {\r\n        var getter = module && module.__esModule ? function getDefault() {\r\n            return module.default;\r\n        } : function getModuleExports() {\r\n            return module;\r\n        };\r\n        return __webpack_require__.d(getter, \"a\", getter), getter;\r\n    }, __webpack_require__.o = function(object, property) {\r\n        return Object.prototype.hasOwnProperty.call(object, property);\r\n    }, __webpack_require__.p = \"\", __webpack_require__(__webpack_require__.s = 5);\r\n\r\n    function __webpack_require__(moduleId) {\r\n        if (installedModules[moduleId]) {\r\n            return installedModules[moduleId].exports;\r\n        }\r\n        var module = installedModules[moduleId] = {\r\n            i: moduleId,\r\n            l: !1,\r\n            exports: {}\r\n        };\r\n        return modules[moduleId].call(module.exports, module, module.exports, __webpack_require__),\r\n                module.l = !0, module.exports;\r\n    }\r\n\r\n    var modules, installedModules;\r\n});\n"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": -1,
          "_transferSize": 38135,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:09.558Z",
        "time": 203.34200002253056,
        "timings": {
          "blocked": 25.48700003731251,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 1.221,
          "wait": 145.89700004974753,
          "receive": 30.73699993547052,
          "_blocked_queueing": 20.614000037312508,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_connectionId": "1726423",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "parser",
          "url": "https://ekat.festool.de/login/app?__bk_&__windowid=IRW3104379&__rid=FOE1787216989423",
          "lineNumber": 1
        },
        "_priority": "High",
        "_resourceType": "script",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/login/WEB-RES/js/base.js_shop_7.26.1.5.js",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": ":authority",
              "value": "ekat.festool.de"
            },
            {
              "name": ":method",
              "value": "GET"
            },
            {
              "name": ":path",
              "value": "/login/WEB-RES/js/base.js_shop_7.26.1.5.js"
            },
            {
              "name": ":scheme",
              "value": "https"
            },
            {
              "name": "accept",
              "value": "*/*"
            },
            {
              "name": "accept-encoding",
              "value": "gzip, deflate, br, zstd"
            },
            {
              "name": "accept-language",
              "value": "en-GB,en-US;q=0.9,en;q=0.8"
            },
            {
              "name": "if-modified-since",
              "value": "Thu, 20 Aug 2026 07:47:25 GMT"
            },
            {
              "name": "if-none-match",
              "value": "W/\"1174762-1787216828300\""
            },
            {
              "name": "priority",
              "value": "u=1"
            },
            {
              "name": "referer",
              "value": "https://ekat.festool.de/login/app?__bk_&__windowid=IRW3104379&__rid=FOE1787216989423"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            },
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "sec-fetch-dest",
              "value": "script"
            },
            {
              "name": "sec-fetch-mode",
              "value": "no-cors"
            },
            {
              "name": "sec-fetch-site",
              "value": "same-origin"
            },
            {
              "name": "user-agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            }
          ],
          "queryString": [],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "cache-control",
              "value": "public"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "content-length",
              "value": "252633"
            },
            {
              "name": "content-type",
              "value": "text/javascript"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 09:09:49 GMT"
            },
            {
              "name": "etag",
              "value": "W/\"1174762-1787216989641\""
            },
            {
              "name": "expires",
              "value": "Thu, 20 Aug 2026 09:11:49 GMT"
            },
            {
              "name": "last-modified",
              "value": "Thu, 20 Aug 2026 07:47:25 GMT"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "pragma",
              "value": "cache"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "x-robots-tag",
              "value": "noindex"
            }
          ],
          "cookies": [],
          "content": {
            "size": 1174762,
            "mimeType": "text/javascript",
            "text": "/*\r\n * Copyright (c) 2025 Quanos Solutions GmbH\r\n */\r\nvar DWUTILS_NODE_TYPE = {\r\n    ELEMENT: 1, ATTRIBUTE: 2, TEXT: 3,\r\n    CDATA: 4, ENTITY_REFERENCE: 5, ENTITY_NODE: 6,\r\n    PROCESSING_INSTRUCTION: 7, COMMENT: 8, DOCUMENT: 9, DOCUMENT_TYPE: 10, DOCUMENT_FRAGMENT: 11\r\n};\r\nvar DWUTILS_READY_STATE = {UNSENT: 0, OPENED: 1, HEADERS_RECEIVED: 2, LOADING: 3, DONE: 4};\r\nvar DWUTILS_NAVIGATION_PATH_DIVIDER = \"|\";\r\nvar DWUTILS_DOUBLE_CLICK_TIME = 250; // Zeit in ms, die für Ausführen des Doppelclicks zur Verfügung stehen\r\n\r\nvar DWUTILS_FUNCTION_TIMEOUT_REGISTRY = new Object();\r\n\r\nvar DWUTILS_FADE_OPACITY_START = 30; // Damit man nicht \"aus dem nichts\" kommt, sondern schon vorher ein bisschen was sieht\r\nvar DWUTILS_FADE_OPACITY_INCREMENT = 10; // Wieviel pro Step die Opacity erhöht werden soll\r\nvar DWUTILS_FADE_STEP_CONTROL_MS = 15; // wieviel ms gewartet werden soll zwischen den Fade Steps\r\nvar DWUTILS_FADE_STEP_WINDOW_MS = 10; // wieviel ms gewartet werden soll zwischen den Fade Steps\r\nvar DWUTILS_XML_ESCAPE_MAP = {\"&\": \"&amp;\", \"'\": \"&apos;\", \"\\\"\": \"&quot;\", \">\": \"&gt;\", \"<\": \"&lt;\"};\r\n\r\nvar DWTOUCH_TOUCH_EMULATION_ENABLED = false; // Damit wir touch.js nicht überall brauchen\r\n\r\nvar DWUTILS_WAIT_CURSOR_COMP_ID = \"dwUtilsShowWaitCursorOverlay\";\r\n\r\n//Sessiontimeout Countdown Timer vars\r\nvar DWUTILS_COUNTDOWN_TIME;\r\nvar DWUTILS_COUNTDOWN_CONTROL_ID;\r\nvar DWUTILS_COUNTDOWN_INTERVAL;\r\n\r\n// Obligatorische Verkürzung\r\nfunction $() {\r\n    return document.getElementById(arguments[0]);\r\n}\r\n\r\nfunction $iframe(iframe, id) {\r\n    if (!iframe || !id) {\r\n        return null;\r\n    }\r\n    try {\r\n        var iframeDocument = iframe.contentWindow || iframe.contentDocument;\r\n        if (iframeDocument.document) {\r\n            iframeDocument = iframeDocument.document;\r\n        }\r\n        if (iframeDocument) {\r\n            return iframeDocument.getElementById(id);\r\n        }\r\n    } catch (exception) {\r\n        // etwaige  Fehler wie \"permission denied\" schlucken... in diesem Fall kann das Element nicht gefunden werden\r\n        // -> NULL\r\n    }\r\n    return null;\r\n}\r\n\r\nif (!String.prototype.replaceAt) {\r\n    String.prototype.replaceAt = function(index, character) {\r\n        return this.substr(0, index) + character + this.substr(index + character.length);\r\n    }\r\n}\r\n\r\nif (!Array.prototype.indexOf) {\r\n// Source: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf\r\n// Production steps of ECMA-262, Edition 5, 15.4.4.14 / Reference: http://es5.github.io/#x15.4.4.14.\r\n    Array.prototype.indexOf = function(searchElement, fromIndex) {\r\n        var k;\r\n        // 1. Let array be the result of calling ToObject passing\r\n        //    the this value as the argument.\r\n        if (this == null) {\r\n            throw new TypeError('\"this\" is null or not defined');\r\n        }\r\n        var array = new Object(this);\r\n        // 2. Let lenValue be the result of calling the Get\r\n        //    internal method of array with the argument \"length\".\r\n        // 3. Let len be ToUint32(lenValue).\r\n        var len = array.length >>> 0;\r\n        // 4. If len is 0, return -1.\r\n        if (len === 0) {\r\n            return -1;\r\n        }\r\n        // 5. If argument fromIndex was passed let n be\r\n        //    ToInteger(fromIndex); else let n be 0.\r\n        var n = +fromIndex || 0;\r\n        if (Math.abs(n) === Infinity) {\r\n            n = 0;\r\n        }\r\n        // 6. If n >= len, return -1.\r\n        if (n >= len) {\r\n            return -1;\r\n        }\r\n        // 7. If n >= 0, then Let k be n.\r\n        // 8. Else, n<0, Let k be len - abs(n).\r\n        //    If k is less than 0, then let k be 0.\r\n        k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);\r\n        // 9. Repeat, while k < len\r\n        while (k < len) {\r\n            // a. Let Pk be ToString(k).\r\n            //   This is implicit for LHS operands of the in operator\r\n            // b. Let kPresent be the result of calling the\r\n            //    HasProperty internal method of array with argument Pk.\r\n            //   This step can be combined with c\r\n            // c. If kPresent is true, then\r\n            //    i.  Let elementK be the result of calling the Get\r\n            //        internal method of array with the argument ToString(k).\r\n            //   ii.  Let same be the result of applying the\r\n            //        Strict Equality Comparison Algorithm to\r\n            //        searchElement and elementK.\r\n            //  iii.  If same is true, return k.\r\n            if (k in array && array[k] === searchElement) {\r\n                return k;\r\n            }\r\n            k++;\r\n        }\r\n        return -1;\r\n    };\r\n}\r\n\r\nif (typeof (Object.create) != 'function') {\r\n    Object.create = (function(undefined) {\r\n        var Temp = function() {\r\n        };\r\n        return function(prototype, propertiesObject) {\r\n            if (prototype !== Object(prototype) && (prototype !== null)) {\r\n                throw TypeError('Argument must be an object, or null');\r\n            }\r\n            Temp.prototype = prototype || {};\r\n            if (propertiesObject !== undefined) {\r\n                Object.defineProperties(Temp.prototype, propertiesObject);\r\n            }\r\n            var result = new Temp();\r\n            Temp.prototype = null;\r\n            // to imitate the case of Object.create(null)\r\n            if (prototype === null) {\r\n                result.__proto__ = null;\r\n            }\r\n            return result;\r\n        };\r\n    })();\r\n}\r\n\r\n/**\r\n * Hilfsmethode. Dient zum Entfernen der Funktionsdeklaration und / oder default Framework Methoden (z.B. dwFrameworkPreEvent)\r\n *\r\n * @param attribute\r\n */\r\nfunction dwUtilsStripFromFunction(attribute, stripFunctionDeclaration, stripDefaultFrameworkMethods) {\r\n    var methods = attribute + \"\";\r\n    if (stripFunctionDeclaration) {\r\n        methods = dwUtilsStripFunctionDeclaration(methods);\r\n    }\r\n    if (stripDefaultFrameworkMethods) {\r\n        methods = dwUtilsStripDefaultFrameworkMethods(methods);\r\n    }\r\n    return methods;\r\n}\r\n\r\nfunction dwUtilsStripFunctionDeclaration(attribute) {\r\n    var methods = attribute + \"\";\r\n    var functionTerm = \"function\";\r\n    var functionTermIdx = -1;\r\n    functionTermIdx = methods.indexOf(functionTerm, functionTermIdx);\r\n    if (functionTermIdx == -1) {\r\n        return methods;\r\n    }\r\n    var methodsStartIdx = methods.indexOf(\"{\", functionTermIdx);\r\n    if (methods.charCodeAt(methodsStartIdx + 1) == 10) {\r\n        methodsStartIdx += 1; // Zeichen nach dem Beginn der Funktions-Deklaration ist ein Breakline\r\n    }\r\n    var methodsEndIdx = methods.lastIndexOf(\"}\");\r\n    if (methods.charCodeAt(methodsEndIdx - 1) == 10) {\r\n        methodsEndIdx -= 1; // Zeichen vor dem Ende der Funktions-Deklaration ist ein Breakline\r\n    }\r\n    methods = attribute.substring(methodsStartIdx + 1, methodsEndIdx);\r\n    return methods;\r\n}\r\n\r\nfunction dwUtilsStripDefaultFrameworkMethods(attribute) {\r\n    var methods = attribute + \"\";\r\n    var windowEventMethodBegin = \"if (window.event)\";\r\n    var preEventMethodBegin = \"dwFwPreEv\";\r\n    var postEventMethodBegin = \"dwFwPostEv\";\r\n    var genericMethodEnd = \";\";\r\n    methods = dwUtilsStripSubstringFromString(methods, windowEventMethodBegin, genericMethodEnd);\r\n    methods = dwUtilsStripSubstringFromString(methods, preEventMethodBegin, genericMethodEnd);\r\n    methods = dwUtilsStripSubstringFromString(methods, postEventMethodBegin, \"(event)\");\r\n    return methods;\r\n}\r\n\r\nfunction dwUtilsStripSubstringFromString(str, methodBegin, methodEnd) {\r\n    var resultString = str;\r\n    var methodStartIdx = str.indexOf(methodBegin);\r\n    if (methodStartIdx > -1) {\r\n        var methodEndIdx = str.indexOf(methodEnd, methodStartIdx);\r\n        var removedString = str.substring(methodStartIdx, methodEndIdx + methodEnd.length);\r\n        // z.B. if (window.event) {event = window.event;}\r\n        if ((removedString.indexOf(\"{\") > -1) && (removedString.indexOf(\"}\") == -1)) {\r\n            methodEndIdx = str.indexOf(\"}\", methodEndIdx);\r\n        }\r\n        resultString = str.substring(0, methodStartIdx) + str.substring(methodEndIdx + methodEnd.length);\r\n        return dwUtilsStripSubstringFromString(resultString, methodBegin, methodEnd);\r\n    }\r\n    return resultString;\r\n}\r\n\r\nfunction dwUtilsTrim(str) {\r\n    return str.replace(/^\\s+|\\s+$/g, '');\r\n}\r\n\r\nfunction dwUtilsReplaceCharacter(string, character, newcharacter) {\r\n    var charmap = new Object();\r\n    charmap[character] = newcharacter;\r\n    return dwUtilsReplaceCharacters(string, charmap);\r\n}\r\n\r\nfunction dwUtilsReplaceCharacters(string, charmap) {\r\n    var result = \"\";\r\n    for (var i = 0; i < string.length; i++) {\r\n        var c = string.charAt(i);\r\n        var mappedChar = charmap[c];\r\n        if (dwUtilsIsDefined(mappedChar)) {\r\n            result += mappedChar;\r\n        } else {\r\n            result += c;\r\n        }\r\n    }\r\n    return result;\r\n}\r\n\r\nfunction dwUtilsIsDefined(value) {\r\n    return (typeof (value) != \"undefined\") && (value != null);\r\n}\r\n\r\nfunction dwUtilsIsEmpty(aString) {\r\n    if (dwUtilsIsDefined(aString)) {\r\n        if (aString === '') {\r\n            return true;\r\n        } else {\r\n            return false;\r\n        }\r\n    } else {\r\n        return true;\r\n    }\r\n}\r\n\r\n/**\r\n * Hilsfmethode, liefert zurück, ob der Text im Array ist\r\n *\r\n * @param array\r\n * @param text\r\n */\r\nfunction dwUtilsIsInArray(array, text) {\r\n    return (dwUtilsGetIndexOfEntry(array, text) != -1);\r\n}\r\n\r\nfunction dwUtilsToArray(collection) {\r\n    var array = [];\r\n    for (var i = 0; i < collection.length; i++) {\r\n        array.push(collection[i]);\r\n    }\r\n    return array;\r\n}\r\n\r\nfunction dwUtilsGetIndexOfEntry(collection, entry) {\r\n    var size = collection.length;\r\n    for (var i = 0; i < size; i++) {\r\n        if (collection[i] == entry) {\r\n            return i;\r\n        }\r\n    }\r\n    return -1;\r\n}\r\n\r\n// comparatorFunction kann null sein, wenn Standardvergleich obj1==obj2 gewünscht\r\nfunction dwUtilsIsArrayEqual(array1, array2, doExactCompare, comparatorFunction) {\r\n    comparatorFunction = comparatorFunction || function(obj1, obj2) {\r\n        return obj1 == obj2\r\n    };\r\n    if (array1 == array2) {\r\n        return true;\r\n    }\r\n    if (array1.length != array2.length) {\r\n        return false;\r\n    }\r\n    if (!doExactCompare) {\r\n        // Shallow Clone ... (Referenzen werden nicht geklont)\r\n        // Notwendig weil die Sortierung des originalen Array nicht geändert werden soll\r\n        array1 = array1.slice(0);\r\n        array2 = array2.slice(0);\r\n        array1.sort();\r\n        array2.sort();\r\n    }\r\n    for (var i = 0; i < array1.length; i++) {\r\n        var entryInArray1 = array1[i];\r\n        var entryInArray2 = array2[i];\r\n        if (!comparatorFunction(entryInArray1, entryInArray2)) {\r\n            return false;\r\n        }\r\n    }\r\n    return true;\r\n}\r\n\r\n/**\r\n * Liefert eine Liste mit allen gefundenen DOM Nodes zurück (oder nur den ersten), die eine bestimmte Regel erfüllen\r\n * DOM wird von Node zu Root-Node durchlaufen.\r\n * @param rootNode\r\n * @param node\r\n * @param comparatorFunction\r\n * @param onlyFirstHit\r\n * @return {Array}\r\n */\r\nfunction dwUtilsFindMatchingNodes(rootNode, node, comparatorFunction, onlyFirstHit) {\r\n    var result = new Array();\r\n\r\n    do {\r\n        if (node == null) {\r\n            break;\r\n        }\r\n        if (comparatorFunction(rootNode, node)) {\r\n            result.push(node);\r\n            if (onlyFirstHit) {\r\n                break;\r\n            }\r\n        }\r\n        if (node == rootNode) {\r\n            break;\r\n        }\r\n    } while (node = node.parentNode);\r\n    return result;\r\n}\r\n\r\nfunction dwUtilsRemoveFromArrayByText(array, text) {\r\n    var result = new Array();\r\n    for (var i = 0; i < array.length; i++) {\r\n        if (array[i] != text) {\r\n            result.push(array[i]);\r\n        }\r\n    }\r\n    return result;\r\n}\r\n\r\nfunction dwUtilsRemoveFromArrayByIndex(array, index) {\r\n    array.splice(index, 1);\r\n    return array;\r\n}\r\n\r\n/**\r\n * Liefert einen Teilausschnitt des Arrays zurück (neuer Array)\r\n * @param array\r\n * @param startIndex : int inklusive\r\n * @param endIndex : int exklusive (oder -1 / undefined falls bis zum Ende)\r\n * @return {*}\r\n */\r\nfunction dwUtilsCreateSubArray(array, startIndex, endIndex) {\r\n    if (!startIndex || (startIndex < 0)) {\r\n        startIndex = 0;\r\n    }\r\n    if (!endIndex || (endIndex == -1) || endIndex > array.length) {\r\n        endIndex = array.length;\r\n    }\r\n\r\n    if ((startIndex == 0) && (endIndex == array.length)) {\r\n        return array;\r\n    }\r\n    var result = new Array();\r\n    for (var i = startIndex; i < endIndex; i++) {\r\n        result.push(array[i]);\r\n    }\r\n    return result;\r\n}\r\n\r\n/**\r\n * Hilfsmethode die den Text unescaped (innerHTML)\r\n * Funktioniert nicht bei allen HTML Elementen (Ausnahmen ggf. <table> relevante Elemente)\r\n *\r\n * @param htmlEscapedText\r\n */\r\nfunction dwUtilsUnescapeHTML(htmlEscapedText) {\r\n    if (htmlEscapedText == \"\") { // Bei Leerstring wird kein Knoten im fakeParent angelegt (auch kein Textknoten)\r\n        return \"\";\r\n    }\r\n    var fakeParent = document.createElement(\"div\");\r\n    fakeParent.innerHTML = htmlEscapedText;\r\n    return fakeParent.firstChild.nodeValue;\r\n}\r\n\r\n/**\r\n * Liefert das aktive Element im DOM. Besser als document.activeElement, da hierüber auch\r\n * das aktive Element ermittelt werden kann, wenn es sich in einem iFrame befindet. Ansonsten\r\n * würde man über document.activeElement nur das iFrame aber nicht das wirklich aktive Element\r\n * zurück erhalten\r\n * @param document\r\n * @returns {Element|boolean}\r\n */\r\nfunction getActiveElement(document) {\r\n    try {\r\n        document = document || window.document;\r\n\r\n        // Check if the active element is in the main web or iframe\r\n        if (document.body === document.activeElement\r\n            || document.activeElement.tagName.toLowerCase() == 'iframe') {\r\n            // Get iframes\r\n            var iframes = document.getElementsByTagName('iframe');\r\n            for (var i = 0; i < iframes.length; i++) {\r\n                var focused = getActiveElement(iframes[i].contentWindow.document); // Recall\r\n                if (focused !== false) {\r\n                    return focused; // The focused\r\n                }\r\n            }\r\n        } else {\r\n            return document.activeElement;\r\n        }\r\n    } catch (e) {\r\n        console.log('cannot find focused element: ' + e);\r\n    }\r\n\r\n    return false;\r\n}\r\n\r\n/**\r\n * Prüft, ob das übergebene Element ein Eingabefeld ist.\r\n * Auch TextAreas zählen als Eingabefelder.\r\n *\r\n * @param element\r\n * @returns {boolean}\r\n */\r\nfunction dwUtilsIsInputTextBox(element) {\r\n    if (!element) {\r\n        return false;\r\n    }\r\n    if (element.tagName == null) {\r\n        // Kein TagName, ist beim Dokument so -> Dann ist das sicher kein Eingabefeld\r\n        return false;\r\n    }\r\n    var tagName = element.tagName.toLowerCase();\r\n    if (tagName === 'textarea') {\r\n        return true;\r\n    }\r\n    if (tagName !== 'input') {\r\n        return false;\r\n    }\r\n    var type = element.getAttribute('type');\r\n    if (type == null) {     // könnte z.B. ein Element vom pdf-js sein\r\n        return false;\r\n    }\r\n    type = type.toLowerCase();\r\n    // if any of these input types is not supported by a browser, it will behave as input type text.\r\n    var inputTypes = ['text', 'password', 'number', 'email', 'tel', 'url', 'search', 'date', 'datetime', 'datetime-local', 'time', 'month', 'week'];\r\n\r\n    return inputTypes.indexOf(type) >= 0;\r\n}\r\n\r\n/*\r\n * Debugfunktion, oeffnet aktuellen DOM in neuem Fenster\r\n */\r\nfunction dwUtilsDebugDOM(doc) {\r\n    var frame = open();\r\n    var writeDocument = frame.document;\r\n    writeDocument.write('<html><head></head><body><table><tr><td nowrap>');\r\n    dwUtilsDebugDOMRec(writeDocument, \"\", doc);\r\n    writeDocument.write('</td></tr></table></body></html>');\r\n    return frame;\r\n}\r\n\r\nfunction dwUtilsDebugWriteHtml(html) {\r\n    var text = html.replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\");\r\n    dwUtilsDebugWrite(text);\r\n}\r\n\r\n/*\r\n * Rekursiv\r\n * Wird von svg_misc_debugOpenSVGInFrame aufgerufen\r\n *\r\n */\r\nfunction dwUtilsDebugDOMRec(writeDocument, prefix, node) {\r\n    var children = node.childNodes;\r\n    writeDocument.write(prefix + node + \",&nbsp;name: \" + node.nodeName + \",&nbsp;value: \" + node.nodeValue + \",&nbsp;data: \" + node.data);\r\n    if (node.nodeType == 1) {\r\n        for (var i = 0; i < node.attributes.length; i++) {\r\n            if (node.attributes.item(i).nodeValue != null) {\r\n                writeDocument.write(\", \" + node.attributes.item(i).nodeName + \"=\\\"\" + node.attributes.item(i).nodeValue + \"\\\"\");\r\n            }\r\n        }\r\n    }\r\n    writeDocument.write('<br>');\r\n    for (var i = 0; i < children.length; i++) {\r\n        dwUtilsDebugDOMRec(writeDocument, prefix + \"&nbsp;&nbsp;&nbsp;&nbsp;\", children.item(i));\r\n    }\r\n}\r\n\r\n/*\r\n * Schreibt einen Text in ein Debug Fenster\r\n */\r\nfunction dwUtilsDebugWrite(text) {\r\n    if (text == null) {\r\n        return;\r\n    }\r\n    try {\r\n        debugdoc.write(text + \"<br>\");\r\n    } catch (exception) {\r\n        var frame = window.open();\r\n        debugdoc = frame.document;\r\n        debugdoc.write(text + \"<br>\");\r\n    }\r\n}\r\n\r\n/**\r\n * Stellt bei einem KeyEvent fest, ob die verwendete Taste die Leertaste oder Entertaste war.\r\n * (Also eine der Tasten, die bei einem Knopf zu einem submit führen würden.)\r\n * @param event\r\n */\r\nfunction dwUtilsKeyIsSpaceOrEnter(event) {\r\n    if (!event) {\r\n        event = window.event;\r\n    }\r\n    var key = event.keyCode || event.which;\r\n    if ((key == 13) || (key == 32)) {\r\n        return true;\r\n    }\r\n    return false;\r\n}\r\n\r\nfunction dwUtilsIsEnter(event) {\r\n    event = dwFrameworkGetEvent(event);\r\n    var key = event.keyCode;\r\n    if (key == 13) {\r\n        return true;\r\n    }\r\n    return false;\r\n}\r\n\r\n/**\r\n * Erweiterung der Stringbefehle\r\n * @param string1 : string Text\r\n * @param string2 : string Zeichenkette zur Prüfung ob der Text damit beginnt\r\n * @param ignoreCase : boolean ignoriere Groß-/Kleinschreibung bei der Abprüfung\r\n */\r\nfunction dwUtilsStringStartsWith(string1, string2, ignoreCase) {\r\n    if ((string1 == null) || (typeof string1 == \"undefined\")) {\r\n        return false; // Objekt nicht bestimmt. Zugriff kann Fehler verursachen\r\n    }\r\n    if ((string2 == null) || (typeof string2 == \"undefined\")) {\r\n        return false; // Objekt nicht bestimmt. Zugriff kann Fehler verursachen\r\n    }\r\n    if (string2.length > string1.length) {\r\n        return false; // Vergleichsstring ist länger, und damit kein gültiger Substring\r\n    }\r\n\r\n    if (ignoreCase) {\r\n        string1 = string1.toLowerCase();\r\n        string2 = string2.toLowerCase();\r\n    }\r\n    for (var i = 0; i < string2.length; i++) {\r\n        if (string1.charAt(i) != string2.charAt(i)) {\r\n            return false;\r\n        }\r\n    }\r\n    return true;\r\n}\r\n\r\n/**\r\n * Erweiterung der Stringbefehle\r\n * @param string1 : string Text\r\n * @param string2 : string Zeichenkette zur Prüfung ob der Text damit ended\r\n * @param ignoreCase : boolean ignoriere Groß-/Kleinschreibung bei der Abprüfung\r\n */\r\nfunction dwUtilsStringEndsWith(string1, string2, ignoreCase) {\r\n    if ((string1 == null) || (typeof string1 == \"undefined\")) {\r\n        return false; // Objekt nicht bestimmt. Zugriff kann Fehler verursachen\r\n    }\r\n    if ((string2 == null) || (typeof string2 == \"undefined\")) {\r\n        return false; // Objekt nicht bestimmt. Zugriff kann Fehler verursachen\r\n    }\r\n    if (string2.length > string1.length) {\r\n        return false; // Vergleichsstring ist länger, und damit kein gültiger Substring\r\n    }\r\n    if (ignoreCase) {\r\n        string1 = string1.toLowerCase();\r\n        string2 = string2.toLowerCase();\r\n    }\r\n    for (var i = (string2.length - 1), j = (string1.length - 1); i >= 0; i--, j--) {\r\n//        alert(\"This (\" + string1.charAt(j) + \"), compareTo(\" + string2.charAt(i) + \") for indices i=\" + i + \" and j=\" + j + \"\\n\" + \"CharCode(This)=\" + string1.charCodeAt(j) + \"\\nCharCode(compareTo)=\" + string2.charCodeAt(i));\r\n        if (string1.charAt(j) != string2.charAt(i)) {\r\n            return false;\r\n        }\r\n    }\r\n    return true;\r\n}\r\n\r\nfunction dwUtilsStringContains(string, value) {\r\n    return string.indexOf(value) != -1;\r\n}\r\n\r\nfunction dwUtilsStringAfter(string, value) {\r\n    var index = string.indexOf(value);\r\n    if (index == -1) {\r\n        return \"\";\r\n    } else {\r\n        return string.substring(index + value.length);\r\n    }\r\n}\r\n\r\nfunction dwUtilsStringBefore(string, value) {\r\n    var index = string.indexOf(value);\r\n    if (index == -1) {\r\n        return \"\";\r\n    } else {\r\n        return string.substring(0, index);\r\n    }\r\n}\r\n\r\nString.prototype.stringBetween = function(startStr, endStr) {\r\n    var startIdx = this.indexOf(startStr);\r\n    if (startIdx == -1) {\r\n        return \"\";\r\n    }  // String kommt nicht vor\r\n    var endIdx = this.lastIndexOf(endStr);\r\n    if ((endIdx == -1) || (endIdx == startIdx)) {\r\n        endIdx = this.length;\r\n    }\r\n    return this.substring(startIdx + 1, endIdx);\r\n}\r\n\r\n/**\r\n * Erweitert einen Navigationspfad\r\n * @param navPath leer oder pipe separierte Index-Werte\r\n * @param childIndices variable Anzahl an Index und/oder pipe-separierten Index-Werten\r\n */\r\nfunction dwUtilsAppendNavigationPath(navPath, concatNavPath) {\r\n    if (navPath == \"\") {\r\n        return concatNavPath;\r\n    } else {\r\n        if (navPath.charAt(navPath.length - 1) == '|') {\r\n            return navPath + concatNavPath;\r\n        } else {\r\n            return navPath + '|' + concatNavPath;\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * Liefert einen bool Wert für die String-Repräsentation (case insensitive) zurück.\r\n * \"true\" -> true\r\n * \"false\" -> false\r\n * null || undefined -> false\r\n * sonst -> false\r\n * @param value\r\n */\r\nfunction dwUtilsToBoolean(value) {\r\n    if (value == null || value == undefined) {\r\n        return false;\r\n    }\r\n    if (value.toLowerCase() == \"true\") {\r\n        return true;\r\n    }\r\n    if (value.toLowerCase() == \"false\") {\r\n        return false;\r\n    }\r\n    return false;\r\n}\r\n\r\n/**\r\n * Objekt zum Kapseln der X und Y Koordinaten (z.B. mouse position)\r\n * @param x\r\n * @param y\r\n */\r\nfunction DWPoint(x, y) {\r\n    this.x = x;\r\n    this.y = y;\r\n    this.toString = function() {\r\n        return \"x=\" + this.x + \" / y=\" + this.y;\r\n    }\r\n}\r\n\r\nDWPoint.prototype.toRectangle = function() {\r\n    return new DWRectangle(this.x, this.y, this.x, this.y);\r\n};\r\n\r\n/**\r\n * Object zum Kapseln der Bounding Box des Objektes\r\n * @param x1\r\n * @param y1\r\n * @param x2\r\n * @param y2\r\n * @constructor\r\n */\r\nfunction DWRectangle(x1, y1, x2, y2) {\r\n    this.x1 = x1;\r\n    this.y1 = y1;\r\n    this.x2 = x2;\r\n    this.y2 = y2;\r\n    this.width = this.x2 - this.x1;\r\n    this.height = this.y2 - this.y1;\r\n}\r\n\r\nDWRectangle.prototype.toString = function() {\r\n    return \"[x1:\" + this.x1 + \",y1:\" + this.y1 + \",x2:\" + this.x2 + \",y2:\" + this.y2 + \"]\";\r\n};\r\n\r\n/**\r\n * Wrapper für die Methode getBoundingClientRect\r\n * Grund: In IE8 liefert das TextRectangle Ergebnis kein 'height' und 'width' Attribut mit\r\n * @param control\r\n * @return {DWRectangle}\r\n */\r\nfunction dwUtilsBoundingClientRectAsDwRectangle(control) {\r\n    var x1 = 0;\r\n    var y1 = 0;\r\n    var x2 = 0;\r\n    var y2 = 0;\r\n    if (control && control.getBoundingClientRect) {\r\n        var rect = control.getBoundingClientRect();\r\n        x1 = Math.round(rect.left);\r\n        y1 = Math.round(rect.top);\r\n        x2 = Math.round(rect.right);\r\n        y2 = Math.round(rect.bottom);\r\n    }\r\n    return new DWRectangle(x1, y1, x2, y2);\r\n}\r\n\r\n/**\r\n * Liefert die aktuellen Maus-Koordinaten zurück\r\n * @param event\r\n */\r\nfunction dwUtilsGetCurrentMousePositionPerEvent(event) {\r\n    if (event == null) { // kann beim IE8 z.B. bei MouseOver passieren\r\n        return new DWPoint(0, 0);\r\n    }\r\n\r\n    var x;\r\n    var y;\r\n    if (event.pageX && event.pageY) {\r\n        x = event.pageX - window.pageXOffset;\r\n        y = event.pageY - window.pageYOffset;\r\n    } else if (event.clientX && event.clientY) {\r\n        x = event.clientX;\r\n        y = event.clientY;\r\n    }\r\n    return new DWPoint(x, y);\r\n}\r\n\r\n/**\r\n * Liefert die relativen Maus-Koordinaten eines Events zur oberen linken Ecke des Html-Elements.\r\n */\r\nfunction dwUtilsGetRelMouseCoords(event, currentElement) {\r\n    var totalOffsetX = 0;\r\n    var totalOffsetY = 0;\r\n\r\n    do {\r\n        totalOffsetX += currentElement.offsetLeft - currentElement.scrollLeft;\r\n        totalOffsetY += currentElement.offsetTop - currentElement.scrollTop;\r\n        currentElement = currentElement.offsetParent;\r\n    }\r\n    while (currentElement != null);\r\n    var point = dwUtilsGetCurrentMousePositionPerEvent(event);\r\n    if (DW_PAGE_SCALE == undefined) {\r\n        var canvasX = point.x - totalOffsetX;\r\n        var canvasY = point.y - totalOffsetY;\r\n    } else {\r\n        var canvasX = point.x / DW_PAGE_SCALE - totalOffsetX;\r\n        var canvasY = point.y / DW_PAGE_SCALE - totalOffsetY;\r\n    }\r\n\r\n    return new DWPoint(canvasX, canvasY);\r\n}\r\n\r\n/**\r\n * Liefert offsetTop (y) und offsetLeft (x) vom Control zum topMostNode. Ist topMostNode nicht gesetzt,\r\n * wird die offset-Bestimmung bis zum Body (viewport) durchgeführt\r\n * @param node : node aktueller Knoten\r\n * @param topMostNode : node_or_null Knoten bis zu dem die offset-Bestimmung durchgeführt werden soll\r\n */\r\nfunction dwUtilsGetCoords(node, topMostNode) {\r\n    // laut Christian OK: um unschöne AJAX-Exceptions in Release-Versionen zu vermeiden, sauber auf node == null reagieren,\r\n    // da aufgrund von Race Conditions in Verbindung mit Timeouts es anscheinend ab und zu passiert, dass null für node übergeben wird\r\n    if ((node == null) && !framework_isDevelopment) {\r\n        return new DWPoint(0, 0);\r\n    }\r\n\r\n    var iterNode = node;\r\n    var offsetTop = 0;\r\n    var offsetLeft = 0;\r\n    if (topMostNode != null) {\r\n        // es gibt viele Ausnahmen die bei der Ermittlung zu berücksichtigen sind\r\n        // Manuelle Berechnung wird nur durchgeführt, wenn topMostNode nicht der Body ist\r\n        while ((iterNode != topMostNode) && iterNode && (iterNode.offsetParent != null)) {\r\n            offsetLeft += iterNode.offsetLeft;\r\n            offsetTop += iterNode.offsetTop;\r\n            var isPositionedAbsolute = dwUtilsGetStyle(node, \"position\") == \"absolute\";\r\n            if (isPositionedAbsolute && !framework_offsetSupport.isBorderIncludedInOffset && !(framework_offsetSupport.isBorderIncludedInTableOffset &&\r\n                ((iterNode.tagName.toLowerCase() == \"table\") || (iterNode.tag.toLowerCase() == \"td\")))) {\r\n                // bei positionierten Elementen wird die Border nicht immer in den offset einberechnet\r\n                var borderTopWidth = parseInt(dwUtilsGetStyle(iterNode, \"borderTopWidth\"));\r\n                if (isNaN(borderTopWidth)) {\r\n                    borderTopWidth = 0;\r\n                }\r\n                var borderLeftWidth = parseInt(dwUtilsGetStyle(iterNode, \"borderLeftWidth\"));\r\n                if (isNaN(borderLeftWidth)) {\r\n                    borderLeftWidth = 0;\r\n                }\r\n                offsetTop += borderTopWidth;\r\n                offsetLeft += borderLeftWidth;\r\n            }\r\n\r\n            iterNode = iterNode.offsetParent;\r\n        }\r\n    } else {\r\n        // siehe https://developer.mozilla.org/en/DOM/element.getBoundingClientRect\r\n        var bounds = dwUtilsBoundingClientRectAsDwRectangle(node);\r\n        offsetLeft = bounds.x1;\r\n        offsetTop = bounds.y1;\r\n        var scrolledContainers = dwUtilsGetScrolledContainers(node);\r\n        for (var i = 0; i < scrolledContainers.length; i++) {\r\n            var scrolledContainer = scrolledContainers[0];\r\n            offsetTop += scrolledContainer.scrollTop;\r\n            offsetLeft += scrolledContainer.scrollLeft;\r\n        }\r\n\r\n    }\r\n    return new DWPoint(offsetLeft, offsetTop);\r\n}\r\n\r\n/**\r\n * Liefert die Koordinaten\r\n * @param node\r\n * @param relativeToViewport true - liefert die Koordinaten relativ zum Viewport zurück (sichtbarer Browser-Ausschnitt)\r\n *                           false - liefert die Koordinaten absolut zurück (unter Berücksichtigung des Scrollings von umschliessenden Scrollpanes)\r\n */\r\nfunction dwUtilsGetLocationOnWindow(node, relativeToViewport, asIntegerPoint) {\r\n    var locationOnWindow = dwUtilsGetCoords(node, null);\r\n    if (!relativeToViewport) {\r\n        return locationOnWindow;\r\n    }\r\n    var iterNode = node;\r\n    var scrollLeft = 0;\r\n    var scrollTop = 0;\r\n    while ((iterNode != null) && (iterNode.offsetParent != null)) {\r\n        scrollLeft += iterNode.scrollLeft;\r\n        scrollTop += iterNode.scrollTop;\r\n        iterNode = iterNode.offsetParent;\r\n    }\r\n    /*\r\n     * Über die while-Schleife wurden zwar alle ScrollElemente gefunden, die sich im body befinden.\r\n     * Das html-Rootelement kann aber auch gescrollt sein (Einblenden von Tastatur => Bereich wird nach oben geschoben\r\n     * und ist damit scrollbar). Dieser ScrollTop- und ScrollLeft-Wert wurde leider in dwUtilsGetCoords und da in\r\n     * dwUtilsBoundingClientRectAsDwRectangle mit einberechnet, weil control.getBoundingClientRect die Koordinaten mit\r\n     * Scrolling enthält... Und deswegen müssen wir es hier wieder abziehen\r\n     */\r\n    scrollTop -= parseInt(document.documentElement.scrollTop);\r\n    scrollLeft -= parseInt(document.documentElement.scrollLeft);\r\n    var x = (locationOnWindow.x - scrollLeft);\r\n    var y = (locationOnWindow.y - scrollTop);\r\n    if (asIntegerPoint) {\r\n        x = parseInt(x);\r\n        y = parseInt(y);\r\n    }\r\n    return new DWPoint(x, y);\r\n}\r\n\r\nfunction dwUtilsIsIntersecting(rect1, rect2, excludeBorder) {\r\n    var isOverLappingHorizontally = ((rect1.x1 > rect2.x1) && (rect1.x1 < rect2.x2) ||\r\n                                     (rect1.x2 > rect2.x1) && (rect1.x2 < rect2.x2));\r\n    var isOverLappingVertically = ((rect1.y1 > rect2.y1) && (rect1.y1 < rect2.y2) ||\r\n                                   (rect1.y2 > rect2.y1) && (rect1.y2 < rect2.y2));\r\n    if (excludeBorder) {\r\n        return (isOverLappingHorizontally && isOverLappingVertically);\r\n    }\r\n\r\n    var isOverLappingHorizontallyIncludingBounds = ((rect1.x1 >= rect2.x1) && (rect1.x1 <= rect2.x2) ||\r\n                                                    (rect1.x2 >= rect2.x1) && (rect1.x2 <= rect2.x2));\r\n    var isOverLappingVerticallyIncludingBounds = ((rect1.y1 >= rect2.y1) && (rect1.y1 <= rect2.y2) ||\r\n                                                  (rect1.y2 >= rect2.y1) && (rect1.y2 <= rect2.y2));\r\n    return (isOverLappingHorizontallyIncludingBounds || isOverLappingVerticallyIncludingBounds);\r\n}\r\n\r\nfunction dwUtilsGetScrollbarWidth(scrolledElement) {\r\n    if (scrolledElement == null) {\r\n        return 0;\r\n    }\r\n    var outerWidth = scrolledElement.offsetWidth;\r\n    var outerHeight = scrolledElement.offsetHeight;\r\n    var innerWidth = scrolledElement.clientWidth;\r\n    var innerHeight = scrolledElement.clientHeight;\r\n    if (!innerWidth) { // Breite = 0, wenn kein Content im Element ist, auch wenn width explizit gesetzt wurde (width wirkt sich nur auf offset aus)\r\n        innerWidth = parseInt(scrolledElement.style.width);\r\n        if (isNaN(innerWidth)) {\r\n            innerWidth = 0;\r\n        }\r\n    }\r\n    if (!innerHeight) { // Höhe = 0, wenn kein Content im Element ist, auch wenn height explizit gesetzt wurde (width wirkt sich nur auf offset aus)\r\n        innerHeight = parseInt(scrolledElement.style.height);\r\n        if (isNaN(innerHeight)) {\r\n            innerHeight = 0;\r\n        }\r\n    }\r\n    var borderWidth = parseInt(dwUtilsGetStyle(scrolledElement, \"borderWidth\"));\r\n    if (isNaN(borderWidth)) {\r\n        borderWidth = 0;\r\n    }\r\n    var scrollbarWidth = outerWidth - innerWidth - (borderWidth * 2);\r\n    var scrollbarHeight = outerHeight - innerHeight - (borderWidth * 2);\r\n    if (scrollbarWidth > 5) { // Vertikale Scrollbar sichtbar\r\n        return scrollbarWidth;\r\n    }\r\n    if (scrollbarHeight > 5) { // Horizontale Scrollbar sichtbar\r\n        return scrollbarHeight;\r\n    }\r\n    return 0;\r\n}\r\n\r\nfunction dwUtilsHasVerticalOverflow(element) {\r\n    if (element == null) {\r\n        return false;\r\n    }\r\n\r\n    return (element.scrollHeight > element.clientHeight);\r\n}\r\n\r\nfunction dwUtilsHasHorizontalOverflow(element) {\r\n    if (element == null) {\r\n        return false;\r\n    }\r\n    return (element.scrollWidth > element.clientWidth);\r\n}\r\n\r\nfunction dwUtilsGetFirstParentScrolledElement(node) {\r\n    var iterNode = node;\r\n    while (iterNode != null) {\r\n        if ((iterNode.scrollLeft != 0) || (iterNode.scrollTop != 0)) {\r\n            return iterNode;\r\n        }\r\n        iterNode = iterNode.offsetParent;\r\n    }\r\n    return null;\r\n}\r\n\r\nfunction dwUtilsGetScrolledContainers(node) {\r\n    var iterNode = node;\r\n    var scrollContainers = new Array();\r\n    while (iterNode != null) {\r\n        if ((iterNode.scrollLeft != 0) || (iterNode.scrollTop != 0)) {\r\n            scrollContainers.push(iterNode);\r\n        }\r\n        iterNode = iterNode.offsetParent;\r\n    }\r\n    return scrollContainers;\r\n}\r\n\r\nfunction dwUtilsGetParentScrollPanes(node) {\r\n    var iterNode = node;\r\n    var scrollPanes = new Array();\r\n    while (iterNode != null) {\r\n        if ((iterNode.className) && (iterNode.className.indexOf(\"guiscrollpane\") > -1)) {\r\n            scrollPanes.push(iterNode);\r\n        }\r\n        iterNode = iterNode.offsetParent;\r\n    }\r\n    return scrollPanes;\r\n}\r\n\r\nfunction dwUtilsRepositionAbsolutePositionedControl(control, mousePoint, positionDeltaX, positionDeltaY) {\r\n    dwUtilsRepositionAbsolutePositionedControlInWindow(null, control, mousePoint, positionDeltaX, positionDeltaY);\r\n}\r\n\r\n/**\r\n * Positioniert das Control neu - unter Berücksichtigung der aktuellen Maus-Koordinaten, der Größe des Controls und\r\n * dem verfügbaren Platz\r\n *\r\n * Diese Methode positioniert das Control in Beziehung zu den absoluten Bildschirmkoordinaten.\r\n * Daher muss das Control das Style-Attribut \"position:absolute\" gesetzt haben.\r\n *\r\n * Nähere Informationen zur Positionierung von Elementen können auf http://de.selfhtml.org/css/eigenschaften/positionierung.htm\r\n * nachgelesen werden.\r\n *\r\n * @param parentWindow Fenster, relativ zu dem das Control dargestellt wird\r\n * @param control\r\n * @param mousePoint\r\n */\r\nfunction dwUtilsRepositionAbsolutePositionedControlInWindow(parentWindow, control, mousePoint, positionDeltaX, positionDeltaY) {\r\n    var possibleDisplayX = mousePoint.x + positionDeltaX;\r\n    var possibleDisplayY = mousePoint.y + positionDeltaY;\r\n    var width;\r\n    var height;\r\n\r\n    // Bestimmung der Fenster-Größe (Hauptfenster)\r\n    if (document.all) {\r\n        width = document.body.clientWidth;\r\n        height = document.body.clientHeight;\r\n    } else {\r\n        width = window.innerWidth;\r\n        height = window.innerHeight;\r\n    }\r\n\r\n//    console.log(\"x: \" + possibleDisplayX + \" control width: \" + width);\r\n\r\n    // wenn es rechts oder unten herauslaufen wuerde dann einpassen\r\n    if (possibleDisplayX + control.offsetWidth > (width - 16)) {\r\n        possibleDisplayX = mousePoint.x - 16 - control.offsetWidth;\r\n//        console.log(\"dwUtilsRepositionAbsolutePositionedControlInWindow: moving left\");\r\n    }\r\n    if (possibleDisplayY + control.offsetHeight > (height - 16)) {\r\n        possibleDisplayY = mousePoint.y - 16 - control.offsetHeight;\r\n//        console.log(\"dwUtilsRepositionAbsolutePositionedControlInWindow: moving up\");\r\n    }\r\n\r\n    // wenn es aber nun oben oder links herauslaufen wuerde dann einpassen nach oben bzw. links\r\n    if (possibleDisplayX < 0) {\r\n        possibleDisplayX = 0;\r\n    }\r\n    if (possibleDisplayY < 0) {\r\n        possibleDisplayY = 0;\r\n    }\r\n\r\n    // Konvertierung zu Bildschirmkoordinaten\r\n    if (parentWindow != null) {\r\n        var windowLoc = dwUtilsGetLocationOnWindow(parentWindow, false, false);\r\n        possibleDisplayX -= windowLoc.x;\r\n        possibleDisplayY -= windowLoc.y;\r\n    } else if (document.all) {\r\n        possibleDisplayX += document.body.scrollLeft;\r\n        possibleDisplayY += document.body.scrollTop;\r\n    } else {\r\n        possibleDisplayX += window.pageXOffset;\r\n        possibleDisplayY += window.pageYOffset;\r\n    }\r\n\r\n    // Wg. Chrome nur setzen wenn geändert, sonst gibts einen Reflow\r\n    var newValueLeft = possibleDisplayX + \"px\";\r\n    var newValueTop = possibleDisplayY + \"px\";\r\n    var newStyles = \"\";\r\n    if (newValueLeft != control.style.left) {\r\n        newStyles += \";left:\" + newValueLeft;\r\n    }\r\n    if (newValueTop != control.style.top) {\r\n        newStyles += \";top:\" + newValueTop;\r\n    }\r\n    dwDomSetStylesViaAttribute(control, newStyles);\r\n}\r\n\r\n/**\r\n * Repositioniert das Popup Fenster und richtet es bei Platzmangel am oberen Rand neu aus (ansonsten zentriert)\r\n * @param uniqueId\r\n */\r\nfunction dwUtilsRepositionChildWindow(uniqueId) {\r\n    var overlay = $(uniqueId + \"_layerdiv\");\r\n    var popup = $(uniqueId + \"_contentdiv\");\r\n    var body = $(\"body\");\r\n    if (!(body && popup && overlay)) {\r\n        return; // Objekte nicht initialisiert ... sollte nie vorkommen\r\n    }\r\n\r\n    // Das Fenster wurde manuell verschoben -> nicht repositionieren\r\n    var windowMoved = (typeof (popup.moved) != \"undefined\") && popup.moved;\r\n\r\n    var mainWrapper = $(\"dwmainwrapper\");\r\n\r\n    if (!windowMoved) {\r\n        var screenWidth = mainWrapper.offsetWidth;\r\n        var popupWidth = dwUtilsGetWidth(popup);\r\n        if (screenWidth <= popupWidth) {\r\n            popup.style.left = \"0px\";\r\n            popup.style.marginLeft = \"0px\";\r\n        } else {\r\n            popup.style.left = \"50%\";\r\n            popup.style.marginLeft = (-popupWidth / 2) + \"px\";\r\n        }\r\n    }\r\n\r\n    var screenHeight = mainWrapper.offsetHeight;\r\n    var popupHeight = dwUtilsGetHeight(popup);\r\n    if (screenHeight <= popupHeight) {\r\n        if (!windowMoved) {\r\n            popup.style.top = \"0px\";\r\n            popup.style.marginTop = \"0px\";\r\n        }\r\n        overlay.style.height = popupHeight + \"px\";\r\n    } else {\r\n        if (!windowMoved) {\r\n            popup.style.top = \"50%\";\r\n            popup.style.marginTop = (-popupHeight / 2) + \"px\";\r\n        }\r\n        overlay.style.height = \"100%\";\r\n    }\r\n}\r\n\r\nfunction dwUtilsDebugElapsedTime(timeStart, timeEnd) {\r\n    if (typeof (timeStart) == \"object\") {\r\n        timeStart = timeStart.getTime();\r\n    }\r\n    if (typeof (timeEnd) == \"object\") {\r\n        timeEnd = timeEnd.getTime();\r\n    }\r\n    var caller = dwUtilsDebugElapsedTime.caller + \"\";\r\n    caller = caller.substring(0, caller.indexOf(\"{\"));\r\n    dwUtilsDebugWrite(caller + \": \" + (timeEnd - timeStart) + \" ms\");\r\n}\r\n\r\n/**\r\n * Erstellt den Navigationspfad zwischen zwei HTML Elementen\r\n * Die Reihenfolge der Pfad-Indizes kann durch den Parameter direction beeinflusst werden\r\n *\r\n * @param fromObj\r\n * @param toObj\r\n * @param direction  Pfad ausgehend vom fromObj oder toObj\r\n */\r\nfunction dwUtilsGetNavigationPath(fromObj, toObj, direction) {\r\n    if (fromObj == null) {\r\n        return null;\r\n    }\r\n    if (toObj == fromObj) {\r\n        return \"\";\r\n    }  // wir befinden uns bereits auf dem gesuchten Element\r\n    var parent = fromObj.parentNode;\r\n    if ((parent == null) || (parent == fromObj)) { // Eine theoretische Rekursion unterbrechen\r\n        return null;\r\n    }  // Abbruchkriterium nicht erfüllt. fromObj entspricht dem body-Element\r\n    var selfIndex = dwDomGetIndexOfElementEntry(fromObj);\r\n    // Es wird immer ein valider selfIndex gefunden, da das eigene Element in der DOM Struktur eingebettet ist\r\n    if (toObj == parent) {\r\n        return selfIndex; // Abbruchkriterium erfüllt\r\n    } else {\r\n        // Aufbau des Pfades in Abhängigkeit der gewünschten Richtung\r\n        var subPath = dwUtilsGetNavigationPath(parent, toObj, direction);\r\n        if (subPath == null) {\r\n            return null; // Navigationspfad nicht gefunden\r\n        }\r\n        if (direction == DWDOM_NAVIGATION_PATH_DIRECTION.TOP_DOWN) {\r\n            return selfIndex + DWUTILS_NAVIGATION_PATH_DIVIDER + subPath;\r\n        } else {\r\n            return subPath + DWUTILS_NAVIGATION_PATH_DIVIDER + selfIndex;\r\n        }\r\n    }\r\n}\r\n\r\nfunction dwUtilsInitArray(size, defaultValue) {\r\n    size = parseInt(size);  // Wenn Javascript size als String interpretiert, wird der String-Wert in den Array übernommen\r\n    // und nicht die Größe definiert\r\n    var arr = new Array(size);\r\n    for (var i = 0; i < size; i++) {\r\n        arr[i] = defaultValue;\r\n    }\r\n    return arr;\r\n}\r\n\r\n/**\r\n * Liefert den angewendeten Stylewert für das entsprechende Attribut\r\n *\r\n * Das Style-Attribut muss als CSS angegeben werden, z.B. \"font-size\"\r\n *\r\n * Angelehnt an http://robertnyman.com/2006/04/24/get-the-rendered-style-of-an-element/\r\n * @param element : nodeObject Knoten, für den der Stylewert ermittelt werden soll\r\n * @param styleAttrib : string CSS-Attribut (z.B. fint-size).\r\n */\r\nfunction dwUtilsGetStyle(element, cssStyleName) {\r\n    var style = \"\";\r\n    if (document.defaultView && document.defaultView.getComputedStyle) {\r\n        style = document.defaultView.getComputedStyle(element, null).getPropertyValue(cssStyleName);\r\n    } else if (element.currentStyle) {\r\n        cssStyleName = cssStyleName.replace(/\\-(\\w)/g, function(strMatch, p1) {\r\n            return p1.toUpperCase();\r\n        });\r\n        style = element.currentStyle[cssStyleName];\r\n    } else if (dwFrameworkShowDevelopmentMessages()) {\r\n        alert(\"dwUtilsGetStyle not possible for this browser!\");\r\n    }\r\n    return style;\r\n}\r\n\r\nfunction dwUtilsGetFontSize(element) {\r\n    var fontSize = parseInt(dwUtilsGetStyle(element, \"font-size\"));\r\n    if (isNaN(fontSize)) {\r\n        fontSize = 11;\r\n    }\r\n    return fontSize;\r\n}\r\n\r\nfunction dwUtilsGetLineHeight(element) {\r\n    var lineHeight = parseInt(dwUtilsGetStyle(element, \"line-height\"));\r\n    if (isNaN(lineHeight)) {\r\n        lineHeight = 13;\r\n    }\r\n    return lineHeight;\r\n}\r\n\r\nfunction dwUtilsGetViewportHeight() {\r\n    var body = $(\"body\");\r\n    // Attribut innerXXX berücksichtigt die Breite der Scrollbar (eingerechnet sofern vorhanden)\r\n    var height = (window.innerHeight || document.documentElement.scrollHeight || (body ? body.offsetHeight : 0)); // IE8 unterstützt kein innerHeight\r\n    return height;\r\n}\r\n\r\nfunction dwUtilsGetViewportWidth() {\r\n    var body = $(\"body\");\r\n    // Attribut innerXXX berücksichtigt die Breite der Scrollbar (eingerechnet sofern vorhanden)\r\n    var width = (window.innerWidth || document.documentElement.scrollWidth || (body ? body.offsetWidth : 0)); // IE8 unterstützt kein innerWidth\r\n    return width;\r\n}\r\n\r\n/**\r\n * Liefert die Größe des Elements, komplett mit Margin/Borders/Padding\r\n *\r\n * @param element\r\n * @param withBorders\r\n */\r\nfunction dwUtilsGetHeight(element) {\r\n    return (element.offsetHeight) ? parseInt(element.offsetHeight) : 0;\r\n}\r\n\r\n/**\r\n * Liefert die Höhe des Elements, ohne Margin/Borders/Padding\r\n * @param element\r\n */\r\nfunction dwUtilsGetContentHeight(element) {\r\n    if (element.clientHeight) {\r\n        return parseInt(element.clientHeight);\r\n    } else {\r\n        // Fallback #1: Höhe und dann umliegende Werte (margin, border, padding) abziehen...\r\n        var height = dwUtilsGetHeight(element);\r\n        if (height) { // definiert und > 0\r\n            var paddingTop = parseInt(dwUtilsGetStyle(element, \"padding-top\") || dwUtilsGetStyle(element, \"padding\") || 0);\r\n            var paddingBottom = parseInt(dwUtilsGetStyle(element, \"padding-bottom\") || dwUtilsGetStyle(element, \"padding\") || 0);\r\n            var marginTop = parseInt(dwUtilsGetStyle(element, \"margin-top\") || dwUtilsGetStyle(element, \"margin\") || 0);\r\n            var marginBottom = parseInt(dwUtilsGetStyle(element, \"margin-bottom\") || dwUtilsGetStyle(element, \"margin\") || 0);\r\n            var borderTop = parseInt(dwUtilsGetStyle(element, \"border-top\") || dwUtilsGetStyle(element, \"border-top-width\") ||\r\n                                     dwUtilsGetStyle(element, \"border\") || 0);\r\n            var borderBottom = parseInt(dwUtilsGetStyle(element, \"border-bottom\") || dwUtilsGetStyle(element, \"border-bottom-width\") ||\r\n                                        dwUtilsGetStyle(element, \"border\") || 0);\r\n            height = height - (paddingTop + paddingBottom + marginTop + marginBottom + borderTop + borderBottom);\r\n            return (height > 0) ? height : 0;\r\n        } else {\r\n            // Fallback #2\r\n            return 0;\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * Liefert die Größe des Elements, komplett mit Margin/Borders/Padding\r\n *\r\n * @param element\r\n * @param withBorders\r\n */\r\nfunction dwUtilsGetWidth(element) {\r\n    return (element.offsetWidth) ? parseInt(element.offsetWidth) : 0;\r\n}\r\n\r\n/**\r\n * Liefert die Breite des Elements, ohne Margin/Borders/Padding\r\n * @param element\r\n */\r\nfunction dwUtilsGetContentWidth(element) {\r\n    if (element.clientWidth) {\r\n        return parseInt(element.clientWidth);\r\n    } else {\r\n        // Fallback #1: Breite und dann umliegende Werte (margin, border, padding) abziehen...\r\n        var width = dwUtilsGetWidth(element);\r\n        if (width) { // definiert und > 0\r\n            var paddingLeft = parseInt(dwUtilsGetStyle(element, \"padding-left\") || dwUtilsGetStyle(element, \"padding\") || 0);\r\n            var paddingRight = parseInt(dwUtilsGetStyle(element, \"padding-right\") || dwUtilsGetStyle(element, \"padding\") || 0);\r\n            var marginLeft = parseInt(dwUtilsGetStyle(element, \"margin-left\") || dwUtilsGetStyle(element, \"margin\") || 0);\r\n            var marginRight = parseInt(dwUtilsGetStyle(element, \"margin-right\") || dwUtilsGetStyle(element, \"margin\") || 0);\r\n            var borderLeft = parseInt(dwUtilsGetStyle(element, \"border-left\") || dwUtilsGetStyle(element, \"border-left-width\") ||\r\n                                      dwUtilsGetStyle(element, \"border\") || 0);\r\n            var borderRight = parseInt(dwUtilsGetStyle(element, \"border-right\") || dwUtilsGetStyle(element, \"border-right-width\") ||\r\n                                       dwUtilsGetStyle(element, \"border\") || 0);\r\n            width = width - (paddingLeft + paddingRight + marginLeft + marginRight + borderLeft + borderRight);\r\n            return (width > 0) ? width : 0;\r\n        } else {\r\n            // Fallback #2\r\n            return 0;\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * Zieht von der Höhe die Margin/Borders/Padding Sachen des Elements ab, damit man mit\r\n * element.setHeight dessen Höhe setzen kann\r\n *\r\n * @param element\r\n * @param height\r\n */\r\nfunction dwUtilsSubstractBordersHeight(element, height) {\r\n    try {\r\n        if (!element.style) {\r\n            return height;\r\n        }\r\n        if (element.style.paddingTop) {\r\n            height -= parseInt(element.style.paddingTop);\r\n        }\r\n        if (element.style.paddingBottom) {\r\n            height -= parseInt(element.style.paddingBottom);\r\n        }\r\n        if (element.style.borderTopWidth) {\r\n            height -= parseInt(element.style.borderTopWidth);\r\n        }\r\n        if (element.style.borderBottomWidth) {\r\n            height -= parseInt(element.style.borderBottomWidth);\r\n        }\r\n        //  if (element.style.marginTop) {\r\n        //    height -= parseInt(element.style.marginTop);\r\n        //  }\r\n        //  if (element.style.marginBottom) {\r\n        //    height -= parseInt(element.style.marginBottom);\r\n        //  }\r\n    } catch (exception) {\r\n        if (dwFrameworkShowDevelopmentMessages()) {\r\n            var exceptionstring = \"Exception while running substractBordersHeight height: \" + height + \" (NaN: \" + isNaN(height) + \")\";\r\n            //      exceptionstring += \"\\n  message: \" + exception.message;\r\n            exceptionstring += \"\\n  object: \" + element + \" typof: \" + typeof (element);\r\n            // Alle Eigenschaften der Exception-Instanz ausgeben\r\n            for (var exceptionproperty in exception) {\r\n                exceptionstring += \"\\n  \" + exceptionproperty + \": \" + exception[exceptionproperty];\r\n            }\r\n            alert(exceptionstring);\r\n        }\r\n    }\r\n    return height;\r\n}\r\n\r\n/**\r\n * Setzt die Größe des Elements, komplett mit Margin/Borders/Padding\r\n *\r\n * @param element\r\n * @param height\r\n */\r\nfunction dwUtilsSetHeight(element, height) {\r\n    // Bestimmung, was ich setzen muss\r\n    height = dwUtilsSubstractBordersHeight(element, height);\r\n    if (height < 0) {\r\n        height = 0;\r\n    }\r\n\r\n    element.style.height = height + \"px\";\r\n}\r\n\r\n/**\r\n * Zeigt den Maus-Wartecursor an. Gleichzeitig wird auch keine Eingabe mehr zugelassen.\r\n */\r\nfunction dwUtilsShowWaitCursor() {\r\n    var dwUtilsShowWaitCursorOverlay = $(DWUTILS_WAIT_CURSOR_COMP_ID);\r\n    if (dwUtilsShowWaitCursorOverlay != null) {\r\n        return;\r\n    }\r\n    var body = document.getElementsByTagName(\"body\")[0];\r\n    var div = document.createElement(\"div\");\r\n    div.id = DWUTILS_WAIT_CURSOR_COMP_ID;\r\n    div.style.zIndex = 999999;\r\n    div.style.position = \"absolute\";\r\n    div.style.top = 0;\r\n    div.style.right = 0;\r\n    div.style.bottom = 0;\r\n    div.style.left = 0;\r\n    div.style.cursor = \"wait\";\r\n    div.style.backgroundColor = \"white\"; // Geht im IE nur wenn hier nicht transparent, sonst kommen die Events durch (Firefox unbekannt)\r\n    div.style.visibility = \"visible\";\r\n    div.style.filter = \"alpha(opacity=0)\";\r\n    div.style.opacity = 0;\r\n    body.appendChild(div);\r\n}\r\n\r\n/**\r\n * Setzt den Mauscursor wieder auf Nicht-Wartend\r\n */\r\nfunction dwUtilsShowNormalCursor() {\r\n    var dwUtilsShowWaitCursorOverlay = $(DWUTILS_WAIT_CURSOR_COMP_ID);\r\n    if (dwUtilsShowWaitCursorOverlay != null) {\r\n        var body = document.getElementsByTagName(\"body\")[0];\r\n        if (dwDomHasChildNode(body, dwUtilsShowWaitCursorOverlay)) {\r\n            body.removeChild(dwUtilsShowWaitCursorOverlay);\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * Legt ein Layer darüber damit man nichts mehr eingeben kann\r\n */\r\nfunction dwUtilsDisableInput() {\r\n    var dwUtilsDisableInputOverlay = $(\"dwUtilsDisableInputOverlay\");\r\n    if (dwUtilsDisableInputOverlay != null) {\r\n        return;\r\n    }\r\n\r\n    var body = document.getElementsByTagName(\"body\")[0];\r\n    var div = document.createElement(\"div\");\r\n    div.id = \"dwUtilsDisableInputOverlay\";\r\n    div.style.zIndex = 999998;\r\n    div.style.position = \"absolute\";\r\n    div.style.top = 0;\r\n    div.style.right = 0;\r\n    div.style.bottom = 0;\r\n    div.style.left = 0;\r\n    div.style.backgroundColor = \"white\"; // Geht im IE nur wenn hier nicht transparent, sonst kommen die Events durch (Firefox unbekannt)\r\n    div.style.visibility = \"visible\";\r\n    div.style.filter = \"alpha(opacity=0)\";\r\n    div.style.opacity = 0;\r\n    body.appendChild(div);\r\n}\r\n\r\n/**\r\n * Erlaubt wieder Eingaben\r\n */\r\nfunction dwUtilsEnableInput() {\r\n    var body = document.getElementsByTagName(\"body\")[0];\r\n    var dwUtilsDisableInputOverlay = $(\"dwUtilsDisableInputOverlay\");\r\n    if (dwUtilsDisableInputOverlay != null) {\r\n        body.removeChild(dwUtilsDisableInputOverlay);\r\n    }\r\n}\r\n\r\nfunction dwUtilsSetOpacity(element, opacityPercent) {\r\n    if (opacityPercent > 99.99) {\r\n        if (typeof (element.style.opacity) != \"undefined\") {\r\n            element.style.opacity = 1;\r\n        }\r\n        element.style.filter = \"\"; // Filter könnte auch woanders bereits gesetzt worden sein\r\n    } else {\r\n        if (typeof (element.style.opacity) != \"undefined\") {\r\n            element.style.opacity = opacityPercent / 100.0;\r\n            element.style.filter = \"\"; // Filter könnte auch woanders bereits gesetzt worden sein\r\n        } else {\r\n            element.style.filter = \"alpha(opacity=\" + opacityPercent + \")\";\r\n        }\r\n    }\r\n}\r\n\r\nfunction dwUtilsFadeInControlCssAnimations(controlId, setVisible, setDisplayBlock) {\r\n    var control = $(controlId);\r\n    if (control == null) {\r\n        return;\r\n    }\r\n    if (setDisplayBlock) {\r\n        control.style.display = 'block';\r\n    }\r\n    if (setVisible) {\r\n        control.style.visibility = \"visible\";\r\n    }\r\n    control.style.animation = \"anim_opacity100 0.2s ease-in-out\";\r\n    dwUtilsSetOpacity(control, 100);\r\n}\r\n\r\nfunction dwUtilsFadeInControl(controlId, setVisible, setDisplayBlock) {\r\n    if (framework_isIE && (parseFloat(framework_browserVersion) < 10.0)) {\r\n        // IE < 10 wird die alte Methode verwendet\r\n    } else if (!framework_isWithAnimations) {\r\n        // Alte Methode macht es richtig\r\n    } else {\r\n        dwUtilsFadeInControlCssAnimations(controlId, setVisible, setDisplayBlock);\r\n        return;\r\n    }\r\n    var control = $(controlId);\r\n    if (control == null) {\r\n        return;\r\n    }\r\n    if (!framework_isWithAnimations) {\r\n        // Gleich alles sichtbar machen und raus\r\n        dwUtilsSetOpacity(control, 100);\r\n        if (setDisplayBlock) {\r\n            control.style.display = 'block';\r\n        }\r\n        if (setVisible) {\r\n            control.style.visibility = \"visible\";\r\n        }\r\n        return;\r\n    }\r\n    try {\r\n        var opacity = DWUTILS_FADE_OPACITY_START;\r\n        dwUtilsSetOpacity(control, opacity);\r\n        if (setDisplayBlock) {\r\n            control.style.display = 'block';\r\n        }\r\n        if (setVisible) {\r\n            control.style.visibility = \"visible\";\r\n        }\r\n        var fadeFunctionId = setInterval(function() {\r\n            opacity += DWUTILS_FADE_OPACITY_INCREMENT;\r\n            if (opacity >= 99) {\r\n                dwUtilsSetOpacity(control, 100);\r\n                clearInterval(fadeFunctionId);\r\n            } else {\r\n                dwUtilsSetOpacity(control, opacity);\r\n            }\r\n        }, DWUTILS_FADE_STEP_CONTROL_MS);\r\n    } catch (exception) {\r\n        // Wenn, dann kracht es oben bei control.style.opacity. D.h. wir müssen es nur noch aktiv schalten\r\n        if (setDisplayBlock) {\r\n            control.style.display = 'block';\r\n        }\r\n        if (setVisible) {\r\n            control.style.visibility = \"visible\";\r\n        }\r\n    }\r\n}\r\n\r\nfunction dwUtilsFadeInWindowCssAnimations(windowId) {\r\n    var contentDiv = $(windowId + \"_contentdiv\");\r\n    var layerDiv = $(windowId + \"_layerdiv\");\r\n    if ((contentDiv == null) || (layerDiv == null)) {\r\n        return;\r\n    }\r\n    if (layerDiv.style.visibility != \"visible\") {\r\n        layerDiv.style.visibility = \"visible\";\r\n    }\r\n    var finalOpacity = layerDiv.style.opacity * 100;\r\n    var animOpacity = Math.max(2, Math.min(4, finalOpacity / 10)) * 10; // gültige Werte: 20, 30 oder 40\r\n    contentDiv.style.animation = \"anim_opacity100 0.2s ease-in-out\";\r\n    layerDiv.style.animation = \"anim_opacity\" + animOpacity + \" 0.2s ease-in-out\";\r\n    dwUtilsSetOpacity(contentDiv, 100);\r\n    dwUtilsSetOpacity(layerDiv, finalOpacity);\r\n}\r\n\r\nfunction dwUtilsFadeInWindow(windowId) {\r\n    if (framework_isIE && (parseFloat(framework_browserVersion) < 10.0)) {\r\n        // IE < 10 wird die alte Methode verwendet\r\n    } else if (!framework_isWithAnimations) {\r\n        // Alte Methode macht es richtig\r\n    } else {\r\n        dwUtilsFadeInWindowCssAnimations(windowId);\r\n        return;\r\n    }\r\n    var contentDiv = $(windowId + \"_contentdiv\");\r\n    var layerDiv = $(windowId + \"_layerdiv\");\r\n    if ((contentDiv == null) || (layerDiv == null)) {\r\n        return;\r\n    }\r\n    var finalOpacity = layerDiv.style.opacity * 100;\r\n    if (!framework_isWithAnimations) {\r\n        // Gleich alles sichtbar machen und raus\r\n        dwUtilsSetOpacity(contentDiv, 100);\r\n        dwUtilsSetOpacity(layerDiv, finalOpacity);\r\n        if (layerDiv.style.visibility != \"visible\") {\r\n            layerDiv.style.visibility = \"visible\";\r\n        }\r\n        return;\r\n    }\r\n    var animateLayerDiv = true;\r\n    try {\r\n        var opacity = finalOpacity - 10; // Damit man nicht \"aus dem nichts\" kommt, sondern schon vorher ein bisschen was sieht (analog zu DWUTILS_FADE_OPACITY_START)\r\n        dwUtilsSetOpacity(contentDiv, opacity);\r\n        if (animateLayerDiv) {\r\n            dwUtilsSetOpacity(layerDiv, opacity * (finalOpacity / 100.0));\r\n        } else {\r\n            dwUtilsSetOpacity(layerDiv, finalOpacity);\r\n        }\r\n        if (layerDiv.style.visibility != \"visible\") {\r\n            layerDiv.style.visibility = \"visible\";\r\n        }\r\n        var fadeFunctionId = setInterval(function() {\r\n            opacity += DWUTILS_FADE_OPACITY_INCREMENT;\r\n            if (opacity >= 99) {\r\n                dwUtilsSetOpacity(contentDiv, 100);\r\n                if (animateLayerDiv) {\r\n                    dwUtilsSetOpacity(layerDiv, finalOpacity);\r\n                }\r\n                clearInterval(fadeFunctionId);\r\n            } else {\r\n                dwUtilsSetOpacity(contentDiv, opacity);\r\n                if (animateLayerDiv) {\r\n                    dwUtilsSetOpacity(layerDiv, opacity * (finalOpacity / 100.0));\r\n                }\r\n            }\r\n        }, DWUTILS_FADE_STEP_WINDOW_MS);\r\n    } catch (exception) {\r\n        // Wenn, dann kracht es oben bei contentDiv.style.opacity. Wir müssen also nur noch\r\n        // unsere Sachen anzeigen, opacity können die dann nicht haben\r\n        if (layerDiv.style.visibility != \"visible\") {\r\n            layerDiv.style.visibility = \"visible\";\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * Führt die Methode zeitlich verzögert aus. Die timeoutId wird als Referenz in der Registry verwendet.\r\n * Wurde die Methode erfolgreich ausgeführt, wird die Referenz aus der Registry entfernt (assoziatives Array)\r\n * @param event\r\n * @param func\r\n * @param timeoutId\r\n * @param timeout\r\n */\r\nfunction dwUtilsSetDelayedFunction(event, func, timeoutId, timeout) {\r\n    DWUTILS_FUNCTION_TIMEOUT_REGISTRY[timeoutId] = setTimeout(func + \";dwUtilsReleaseDelayedFunction(\\\"\" + timeoutId + \"\\\");\", timeout);\r\n}\r\n\r\n/**\r\n * Entfernt den Eintrag aus der Registry (assoziatives Array). Ist aktuell noch eine Id gefunden, wird der zeitlich\r\n * verzögerte Funtkionsaufruf entfernt.\r\n * @param timeoutId\r\n */\r\nfunction dwUtilsReleaseDelayedFunction(timeoutId) {\r\n    if (DWUTILS_FUNCTION_TIMEOUT_REGISTRY[timeoutId] != null) {\r\n        clearTimeout(DWUTILS_FUNCTION_TIMEOUT_REGISTRY[timeoutId]);\r\n        delete (DWUTILS_FUNCTION_TIMEOUT_REGISTRY[timeoutId]);\r\n    }\r\n}\r\n\r\n/**\r\n * Liefert das Ziel HTML Element zurück\r\n * siehe http://www.quirksmode.org/js/events_properties.html#target\r\n * @param event\r\n */\r\nfunction dwUtilsGetEventTarget(event) {\r\n    var eventTarget = null;\r\n    if (event.target) {// W3C Standard\r\n        eventTarget = event.target;\r\n    } else if (event.srcElement) { // IE\r\n        eventTarget = event.srcElement;\r\n    }\r\n    return eventTarget;\r\n}\r\n\r\n/**\r\n * Liefert das Ziel der Mouse-Out Bewegung zurück (wohin verlässt die Maus den Bereich ...)\r\n * @param event\r\n */\r\nfunction dwUtilsGetMouseOutEventTarget(event) {\r\n    event = dwFrameworkGetEvent(event);\r\n    var mouseOutTarget = null;\r\n    if (event.relatedTarget) {\r\n        mouseOutTarget = event.relatedTarget;\r\n    } else if (event.toElement) {\r\n        mouseOutTarget = event.toElement;\r\n    }\r\n    return mouseOutTarget;\r\n}\r\n\r\nfunction dwUtilsGetMouseEnteredFromEventTarget(event) {\r\n    event = dwFrameworkGetEvent(event);\r\n    var mouseEnteredFrom = null;\r\n    if (event.relatedTarget) {\r\n        mouseEnteredFrom = event.relatedTarget;\r\n    } else if (event.fromElement) {\r\n        mouseEnteredFrom = event.fromElement;\r\n    }\r\n    return mouseEnteredFrom;\r\n}\r\n\r\n/**\r\n * Simple Clone Methode. Überträgt alle Eigenschaften/Properties\r\n * @param obj\r\n * @return {Object}\r\n */\r\nfunction dwUtilsCloneObject(obj) {\r\n    var clonedObject = {};\r\n    for (var attrib in obj) {\r\n        clonedObject[attrib] = obj[attrib];\r\n    }\r\n    return clonedObject;\r\n}\r\n\r\nfunction dwUtilsGetEventKeyCode(event) {\r\n    // Im IE ist teilweise nur das Attribut keyCode gefüllt. Ist das Attribut which gefüllt hat es den gleichen Wert wie keyCode\r\n    // Im Firefox wird bei keyPressed Events der keyCode auf '0' gesetzt - hier muss der Wert explizit aus which ausgewertet werden\r\n    // Der Wert '0' wird durch den impliziten Cast als 'false' interpretiert\r\n    // Durch diesen Ansatz lässt sich ein keyCode für alle Key-Events ermitteln und zurückliefern (keyUp, keyDown, keyPressed)\r\n    var keyCode = null;\r\n    if (event.keyCode) { // Key Code beinhaltet die Informationen für KEY_UP und KEY_DOWN Events\r\n        keyCode = event.keyCode;\r\n    } else if (event.which) { // Which beinhaltet die Informationen für KEY_PRESSED Events (insbesondere in Firefox)\r\n        keyCode = event.which;\r\n    }\r\n    return keyCode;\r\n}\r\n\r\n/**\r\n * Überprüfen, ob ein Event innerhalb eines Elements ausgelöst wurde.\r\n */\r\nfunction dwUtilsCheckMouseOutsideElement(event, element) {\r\n    var dwPoint = dwUtilsGetRelMouseCoords(event, element);\r\n    if (dwPoint == null) {\r\n        return false;\r\n    }\r\n    if ((dwPoint.x >= element.offsetWidth) || (dwPoint.y >= element.offsetHeight)\r\n        || (dwPoint.x < 0) || (dwPoint.y < 0)) {\r\n        return true;\r\n    }\r\n    return false;\r\n}\r\n\r\n/**\r\n * Liefert die Parameter einer Methode (String-Darstellung)\r\n * z.B. function foo(\"test1, test2\", \"test3, event, 123)\r\n * @param methodString\r\n */\r\nfunction dwUtilsGetFunctionParameters(methodString) {\r\n    var params = methodString.substring(methodString.indexOf(\"(\") + 1, methodString.indexOf(\")\"));\r\n    var pattern = \"\\\".[^\\\"]*.\\\"|[A-Za-z0-9]+\";\r\n    params = params.match(new RegExp(pattern, \"g\")); // global search\r\n    return params;\r\n}\r\n\r\n/**\r\n * Liefert den Namen einer Methode (String-Darstellung) oder null, falls es keine Funktion ist\r\n * @param methodString\r\n */\r\nfunction dwUtilsGetFunctionName(methodString) {\r\n    methodString = dwUtilsTrim(methodString);\r\n    if (dwUtilsStringStartsWith(methodString, \"function\", false)) {\r\n        var methodName = methodString.substring(\"function\".length, methodString.indexOf(\"(\"));\r\n        methodName = dwUtilsTrim(methodName);\r\n        return methodName;\r\n    } else {\r\n        return null;\r\n    }\r\n}\r\n\r\n/**\r\n * Liefert die Zeit als HH:MM:SS\r\n */\r\nfunction dwUtilsGetGermanTime() {\r\n    var date = new Date();\r\n    var hours = prefixStringWithCharsUpToLength(date.getHours(), '0', 2);\r\n    var minutes = prefixStringWithCharsUpToLength(date.getMinutes(), '0', 2);\r\n    var seconds = prefixStringWithCharsUpToLength(date.getSeconds(), '0', 2);\r\n    return hours + \":\" + minutes + \":\" + seconds;\r\n}\r\n\r\n/**\r\n * Liefert das Datum als TT.MM.JJJJ\r\n */\r\nfunction dwUtilsGetGermanDate() {\r\n    var date = new Date();\r\n    var day = prefixStringWithCharsUpToLength(date.getDate(), '0', 2);\r\n    var month = prefixStringWithCharsUpToLength(date.getMonth() + 1, '0', 2);\r\n    var year = date.getFullYear();\r\n    return day + \".\" + month + \".\" + year;\r\n}\r\n\r\n\r\n/**\r\n * Siehe StrUtils.prefixStringWithCharsUpToLength\r\n * @param string\r\n * @param character\r\n * @param length\r\n */\r\nfunction prefixStringWithCharsUpToLength(string, character, length) {\r\n    string = string + \"\"; // Damit wir nicht aus versehen mit Nummern arbeiten\r\n    if (string.length == length) {\r\n        return string;\r\n    } else if (string.length < length) {\r\n        while (string.length < length) {\r\n            string = character + string;\r\n        }\r\n        return string;\r\n    } else {\r\n        return string.substring(0, length);\r\n    }\r\n}\r\n\r\nfunction dwUtilsGetBaseApplicationUrl() {\r\n    // URL (in der Browser Zeile) hat den Pfad /app - dieser wird entfernt und die Basis url zur Anwendung zurückgeliefert\r\n    var url = window.location.href;\r\n    if (url.indexOf(\"#\") > -1) {\r\n        // Ist der aufgerufenen URL ein '#' Zeichen abgehängt muss dieses vorher entfernt werden.\r\n        // Andernfalls werden die URL Parameter ggf. als Fragment an die URL angehängt und stehen dem Server nicht zur Verfügung\r\n        url = url.substring(0, url.indexOf(\"#\"));\r\n    }\r\n    var baseUrl = url;\r\n    if (baseUrl.indexOf(\"?\") > -1) {\r\n        baseUrl = baseUrl.substring(0, baseUrl.indexOf(\"?\"));\r\n    }\r\n\r\n    if (dwUtilsStringEndsWith(baseUrl, \"/\", false)) {\r\n        baseUrl = baseUrl.substring(0, baseUrl.length - 1);\r\n    }\r\n    if (dwUtilsStringEndsWith(baseUrl, \"/app\", false)) {\r\n        baseUrl = baseUrl.substring(0, baseUrl.length - \"/app\".length);\r\n    }\r\n    return baseUrl;\r\n}\r\n\r\nfunction dwUtilsEvaluateJavascript(methods, waitForPendingLibraries) {\r\n//    while (waitForPendingLibraries && (DWDOM_PENDING_SCRIPT_FILES.length > 0)) {\r\n//        // Warten ...\r\n//        // Reihenfolge der auszuführenden Befehle darf sich nicht verändern, daher darf hier kein\r\n//        // setTimeout verwendet werden\r\n//    }\r\n//    eval(methods);\r\n    if (waitForPendingLibraries && (DWDOM_PENDING_SCRIPT_FILES.length > 0)) {\r\n        setTimeout(function() {\r\n            dwUtilsEvaluateJavascript(methods, waitForPendingLibraries);\r\n        }, 200);\r\n    } else {\r\n        eval(methods);\r\n    }\r\n\r\n}\r\n\r\n/**\r\n * Splittet den String\r\n * Normale Split Methode ist nicht immer ausreichend. Für einen Leerstring wird ein Array der Länge 1 zurückgeliefert,\r\n * wenn nicht returnBlanks auf false gesetzt wird.\r\n * @param string\r\n * @param delimiter\r\n * @param returnBlanks\r\n */\r\nfunction dwUtilsSplit(string, delimiter, returnBlanks) {\r\n    if (string == null) {\r\n        return new Array();\r\n    }\r\n    if ((string == \"\") && !returnBlanks) {\r\n        return new Array();\r\n    }\r\n    var array = string.split(delimiter);\r\n    if (!returnBlanks) {\r\n        array = dwUtilsRemoveFromArrayByText(array, \"\");\r\n    }\r\n    return array;\r\n}\r\n\r\n/**\r\n * Überprüft ob ein HTML-Element zumindest eine der übergebenen CSS-Klassen enthält.\r\n *\r\n * @param iterElement                   Iterator auf dem HTML-Element\r\n * @param classNamesToBeCheckedArray    Array, welches die Klassennamen enthält, die auf dem HTML-Element überprüft werden sollen\r\n * @returns {boolean}                   true, falls das HTML-Element zumindest eine der Klassen aus classNamesToBeCheckedArray enthält\r\n */\r\nfunction dwUtilsHasElementAtLeastOneOfClasses(iterElement, classNamesToBeCheckedArray) {\r\n    var elementClasses = iterElement.className;\r\n    if (!elementClasses) {\r\n        return false;\r\n    }\r\n    var classNameArray = elementClasses.split(\" \");\r\n    for (var i = 0; i < classNamesToBeCheckedArray.length; i++) {\r\n        if (dwUtilsIsInArray(classNameArray, classNamesToBeCheckedArray[i])) {\r\n            return true;\r\n        }\r\n    }\r\n    return false;\r\n}\r\n\r\nfunction dwUtilsTrimLeft(string) {\r\n    var startIdx = 0;\r\n    for (var i = 0; i < string.length - 1; i++) {\r\n        if (string.charAt(i) == ' ') {\r\n            startIdx = i + 1;\r\n        } else {\r\n            break;\r\n        }\r\n    }\r\n    return string.substring(startIdx);\r\n}\r\n\r\nfunction dwUtilsColorHex2RGB(hexColor) {\r\n    var hexCode = hexColor.replace(/#/, '');\r\n    var rgb = new Array();\r\n    rgb[\"red\"] = parseInt(hexCode.substr(0, 2), 16);\r\n    rgb[\"green\"] = parseInt(hexCode.substr(2, 2), 16);\r\n    rgb[\"blue\"] = parseInt(hexCode.substr(4, 2), 16);\r\n    return rgb;\r\n}\r\n\r\n/**\r\n * Wandelt RGB in OLE Format um (Integer Wert zur Repräsentation)\r\n * @param red\r\n * @param green\r\n * @param blue\r\n */\r\nfunction dwUtilsColorRGB2Integer(red, green, blue) {\r\n    return (red + green * 256 + blue * 65536);\r\n}\r\n\r\nfunction dwUtilsColorHex2Integer(hexColor) {\r\n    var rgb = dwUtilsColorHex2RGB(hexColor);\r\n    return dwUtilsColorRGB2Integer(rgb[\"red\"], rgb[\"green\"], rgb[\"blue\"]);\r\n}\r\n\r\n/**\r\n * Simple Sortier-Funktion für Nummern\r\n * @param num1\r\n * @param num2\r\n * @param asc\r\n */\r\nfunction dwUtilsSortNumberAsc(num1, num2) {\r\n    return (num1 - num2);\r\n}\r\n\r\n/**\r\n * Ermittelt ob eine Komponente für die Event-Koordinaten gefunden wurde, die innerhalb des\r\n * Scroll-Containers (event target) liegt (in IE)\r\n * Bei Einbindung des IE8 in einem Frame muss die Information speziell ermittelt werden\r\n * @param e\r\n * @return true wenn innerhalb des Containers geklickt wurde\r\n *         false wenn die Scrollbars gedrückt wurden (outside)\r\n */\r\nfunction dwUtilsComponentFromPoint(e) {\r\n    var target = dwUtilsGetEventTarget(e);\r\n    if (target.componentFromPoint) {\r\n        var comp = target.componentFromPoint(e.clientX, e.clientY);\r\n        if ((comp == null) || (comp == \"outside\")) {\r\n            if (!framework_isIE8) {\r\n                return false;\r\n            }\r\n        } else {\r\n            return true;\r\n        }\r\n    }\r\n    // IE8 hat eine fehlerhafte Erkennung der Informationen wenn man innerhalb von i/frames ist\r\n    var bounds = dwUtilsBoundingClientRectAsDwRectangle(target);\r\n    var scrollBarWidth = dwUtilsGetScrollbarWidth(target);\r\n    if ((e.clientY >= bounds.y1) &&\r\n        (e.clientY <= (bounds.y1 + target.offsetHeight - scrollBarWidth)) &&\r\n        (e.clientX >= bounds.x1) &&\r\n        (e.clientX <= (bounds.x1 + target.offsetWidth - scrollBarWidth))) {\r\n        return true;\r\n    } else {\r\n        return false;\r\n    }\r\n}\r\n\r\n/**\r\n * Überprüft, ob irgendwo auf die Scollbar (inkl. deren Buttons) geklickt wurde\r\n */\r\nfunction dwUtilsIsClickOnScrollBar(e) {\r\n    if (framework_isIE) {\r\n        var target = dwUtilsGetEventTarget(e);\r\n        if ((target != null) && target.componentFromPoint) {\r\n            return !dwUtilsComponentFromPoint(e);\r\n        }\r\n    } else if (framework_isFirefox) {\r\n        if (e.originalTarget != null) {\r\n            try {\r\n                e.originalTarget.tagName;\r\n            } catch (ex) {\r\n                return true;\r\n            }\r\n        }\r\n    } else if (framework_isSafari || framework_isOpera) { // Überprüfung für Safari und Opera\r\n        var target = dwUtilsGetEventTarget(e);\r\n        var scrollBarV = target.offsetWidth - target.clientWidth;\r\n        var scrollBarH = target.offsetHeight - target.clientHeight;\r\n        if ((scrollBarV > 0) && (e.srcElement == target)) {\r\n            if (e.offsetX > target.clientWidth - scrollBarV) {\r\n                return true;\r\n            }\r\n        }\r\n        if ((scrollBarH > 0) && (e.srcElement == target)) {\r\n            if (e.offsetY > target.clientHeight - scrollBarH) {\r\n                return true;\r\n            }\r\n        }\r\n    }\r\n\r\n    return false;\r\n}\r\n\r\n/**\r\n * Überprüft, ob auf ein Tag mit dem übergebenen Tagnamen geklickt wurde\r\n */\r\nfunction dwUtilsIsClickOnTagType(e, tagName) {\r\n    var target = dwUtilsGetEventTarget(e);\r\n    if (target && target.tagName && (target.tagName.toLowerCase() == tagName.toLowerCase())) {\r\n        return true;\r\n    } else {\r\n        return false;\r\n    }\r\n}\r\n\r\nfunction dwUtilsLoadUrlInTarget(/*string*/ url, /*string*/ target, /*optional*/ method, /*optional*/ baseUrl,\r\n                                /*optional*/ errorCallback) {\r\n    var form = dwUtilsParseUrlToForm(url, target, method || \"get\", baseUrl);\r\n    var body = document.getElementsByTagName(\"body\")[0];\r\n    body.appendChild(form);\r\n    try {\r\n        form.submit();\r\n    } catch (exception) {\r\n        // Kann sein, dass der Popupblocker erst einmal die Ausführung verhindert.\r\n        // Im Firefox wird hier eine Exception geworfen.\r\n        // Das Formular wird unten in removeChild trotzdem sauber ausgehängt und der Dialog kommt trotzdem sauber, wenn\r\n        // man es nachträglich im gelben Bereich im Firefox erlaubt\r\n        if (DWAJAX_SHOW_ERRORS) {\r\n            if (typeof (errorCallback) == \"function\") {\r\n                errorCallback(\"Url: \" + url + \"\\nTarget: \" + target);\r\n            }\r\n        }\r\n    }\r\n    try {\r\n        body.removeChild(form);\r\n    } catch (exception) {\r\n    }\r\n}\r\n\r\nfunction dwUtilsGetLogDate() {\r\n    var date = new Date();\r\n    var string = \"\";\r\n    string += dwUtilsPrefixStringWithCharsUpToLength(date.getHours() + \"\", \"0\", 2);\r\n    string += \":\";\r\n    string += dwUtilsPrefixStringWithCharsUpToLength(date.getMinutes() + \"\", \"0\", 2);\r\n    string += \":\";\r\n    string += dwUtilsPrefixStringWithCharsUpToLength(date.getSeconds() + \"\", \"0\", 2);\r\n    string += \".\";\r\n    string += dwUtilsPrefixStringWithCharsUpToLength(date.getMilliseconds() + \"\", \"0\", 3);\r\n    return string;\r\n}\r\n\r\nfunction dwUtilsPrefixStringWithCharsUpToLength(string, char, length) {\r\n    while (string.length < length) {\r\n        string = char + string;\r\n    }\r\n    return string;\r\n}\r\n\r\nfunction dwUtilsPadStringWithCharsUpToLength(string, char, length) {\r\n    while (string.length < length) {\r\n        string += char;\r\n    }\r\n    return string;\r\n}\r\n\r\nfunction dwUtilsToHex(string) {\r\n    var result = \"\";\r\n    for (var i = 0; i < string.length; i++) {\r\n        result += dwUtilsCharCodeToHex(string.charCodeAt(i));\r\n    }\r\n    return result;\r\n}\r\n\r\nfunction dwUtilsParseUrlToForm(/*string*/ url, /*string*/ target, /*string*/ method, /*string*/ baseUrl) {\r\n    var form = document.createElement(\"form\");\r\n    form.setAttribute(\"style\", \"visibility:hidden; overflow:hidden; display:inline; z-Index: -1000; position:absolute; left:-1px; top:-1px; width: 1px; height:1px\");\r\n    if (FRAMEWORK_LOGCHANNELS.isActive(\"J2EE_URL\")) {\r\n        dwUtilsLogUrl(url);\r\n    }\r\n    var fragment;\r\n    if (dwUtilsStringContains(url, \"#\")) {\r\n        fragment = dwUtilsStringAfter(url, \"#\");\r\n        url = dwUtilsStringBefore(url, \"#\");\r\n    }\r\n    if (dwUtilsStringContains(url, \"?\")) {\r\n        var after = dwUtilsStringAfter(url, \"?\");\r\n        if (dwUtilsIsEmpty(baseUrl)) {\r\n            url = dwUtilsStringBefore(url, \"?\");\r\n        } else {\r\n            url = baseUrl;\r\n        }\r\n        var splitted = after.split(\"&\");\r\n        for (var i = 0; i < splitted.length; i++) {\r\n            var item = splitted[i];\r\n            var input = document.createElement(\"input\");\r\n            input.setAttribute(\"type\", \"hidden\");\r\n            if (dwUtilsStringContains(item, \"=\")) {\r\n                var keyValue = item.split(\"=\");\r\n                input.setAttribute(\"name\", decodeURIComponent(keyValue[0]));\r\n                if (keyValue.length == 2) {\r\n                    var value = keyValue[1];\r\n                    // Beim dekodieren wird der Wert %2B zu '+' gewandelt. Dieses '+' Zeichen darf nicht zu einem Leerzeichen interpretiert werden\r\n                    // Die manuelle Ersetzung von + zu Leerzeichen muss daher vor dem dekodieren durchgeführt werden\r\n                    value = dwUtilsReplaceCharacter(value, '+', ' ');\r\n                    value = decodeURIComponent(value);\r\n                    input.setAttribute(\"value\", value);\r\n                }\r\n            } else {\r\n                input.setAttribute(\"name\", decodeURIComponent(item));\r\n            }\r\n            form.appendChild(input);\r\n            form.appendChild(document.createElement(\"br\"));\r\n        }\r\n    }\r\n    if (dwUtilsIsDefined(fragment)) {\r\n        url = url + \"#\" + fragment;\r\n    }\r\n    form.setAttribute(\"action\", url);\r\n    form.setAttribute(\"method\", method);\r\n    form.setAttribute(\"target\", target);\r\n    form.setAttribute(\"enctype\", \"application/x-www-form-urlencoded\");\r\n    return form;\r\n}\r\n\r\nfunction dwUtilsLogUrl(url) {\r\n    try {\r\n        var queryString = dwUtilsStringAfter(url, \"?\");\r\n        if (queryString === \"\") {\r\n            return;\r\n        }\r\n\r\n        var paramList = queryString.split(\"&\");\r\n\r\n        for (var i = 0; i < paramList.length; i++) {\r\n            var paramString = paramList[i];\r\n            var param = paramString.split(\"=\");\r\n\r\n            var key = param[0];\r\n            var value = param.length === 2 ? param[1] : null;\r\n\r\n            var message = key;\r\n            if (value != null) {\r\n                message += \"=\" + value;\r\n            } else {\r\n                // Vereinfachung des Logging ... (ein NULL Wert wurde zumindest im ersten Teil-String bereits protokolliert)\r\n                value = \"\";\r\n            }\r\n\r\n            var valueUriDecoded = decodeURIComponent(dwUtilsReplaceCharacter(value, '+', ' '));\r\n\r\n            message += \" (uriDecoded: '\" + decodeURIComponent(key) + \"'='\" + valueUriDecoded + \"' AsHex: '\" + dwUtilsToHex(value) + \"' AsDecodedUriHex: '\" + dwUtilsToHex(valueUriDecoded) + \"')\";\r\n\r\n            dwFrameworkLog(\"J2EE_URL\", message);\r\n        }\r\n\r\n    } catch (exception) {\r\n        var exceptionName = exception.name || \"<Unknown Error>\";\r\n        var exceptionMessage = exception.message || exception;\r\n        dwFrameworkLog(\"J2EE_ERROR\", exceptionName + \" - \" + exceptionMessage);\r\n    }\r\n}\r\n\r\nfunction dwUtilsSendData(/*string*/ url, /*string*/ contentType, /*string*/ bearerToken, /*string*/ content, errorCallback) {\r\n    var xmlHttp = dwUtilsCreateXmlHttpRequest(true);\r\n    xmlHttp.open(\"POST\", url, true);\r\n    xmlHttp.setRequestHeader(\"Content-type\", contentType);\r\n    if (bearerToken) {\r\n        xmlHttp.setRequestHeader(\"Authorization\", \"Bearer \" + bearerToken);\r\n    }\r\n    dwDomAddEventListener(xmlHttp, \"onreadystatechange\", function() {\r\n        if (xmlHttp.readyState == DWUTILS_READY_STATE.DONE) {\r\n            var successful = true;\r\n            if (xmlHttp.status == 0) {\r\n                successful = false;\r\n                if (DWAJAX_LOG_ERRORS) {\r\n                    // Direkter Aufruf von \"dwAjaxToServer\" - damit die Nachricht zuverlässig vor Anzeige eines Alerts zum Server übertragen wird (dwAjaxCurrentlySending könnte 'true' sein)\r\n                    dwAjaxToServer(new Date().getTime(), false, [\"error@DW@url@DW@\" + (xmlHttp.status) + \"@DWSUB@\" + (url || \"\") + \"@DWSUB@\" + (content || \"\")], true, new Date().getTime());\r\n                }\r\n                if (DWAJAX_SHOW_ERRORS) {\r\n                    if (typeof (errorCallback) == \"function\") {\r\n                        errorCallback(\"Status: Connection Aborted\" + \"\\nUrl: \" + url + \"\\nParameter: \" + content);\r\n                    }\r\n                }\r\n            } else if (xmlHttp.status >= 400) {\r\n                successful = false;\r\n                if (DWAJAX_LOG_ERRORS) {\r\n                    // Direkter Aufruf von \"dwAjaxToServer\" - damit die Nachricht zuverlässig vor Anzeige eines Alerts zum Server übertragen wird (dwAjaxCurrentlySending könnte 'true' sein)\r\n                    dwAjaxToServer(new Date().getTime(), false, [\"error@DW@url@DW@\" + (xmlHttp.status) + \"@DWSUB@\" + (url || \"\") + \"@DWSUB@\" + (content || \"\")], true, new Date().getTime());\r\n                }\r\n                if (DWAJAX_SHOW_ERRORS) {\r\n                    if (typeof (errorCallback) == \"function\") {\r\n                        errorCallback(\"Status: \" + xmlHttp.status + \"\\nUrl: \" + url + \"\\nParameter: \" + content);\r\n                    }\r\n                }\r\n            }\r\n            // Erfolgreicher Aufruf ...\r\n            if (typeof (dwAjaxFireCustomEvent) != \"undefined\") {\r\n                var rootWindowId = dwFrameworkGetRootWindowId();\r\n                var uri = url;\r\n                dwAjaxInvisibleUriLoaded(null, rootWindowId, rootWindowId, \"uri=\" + encodeURIComponent(uri) + \"@DWSUB@success=\" + successful + \"@DWSUB@__INT_statuscode=\" + xmlHttp.status, true);\r\n            }\r\n        }\r\n    });\r\n    xmlHttp.send(content);\r\n}\r\n\r\nfunction dwUtilsLoadUrlInInvisibleTarget(/*string*/ url, /*string*/ method, /*function(string, int, string, string)*/ errorCallback,\r\n                                         /*string*/ transferType, /*boolean*/ doNotLogErrors, /*boolean*/ doNotFireInvisibleUriLoadedEvent,\r\n                                         /*function(int, string)*/ successCallback, /*map<string,string>*/ requestHeaderMap, /*string*/logtype, /*string*/ logChannel) {\r\n    if (!dwUtilsIsDefined(transferType)) {\r\n        transferType = \"AUTO\";\r\n    }\r\n    var baseLoc = window.location.href.substring(0, window.location.href.indexOf(\"/\", \"https://\".length));\r\n\r\n    var forceAjaxTransferType = (transferType === \"AJAX\");\r\n    var preferAjaxTransferType = (transferType === \"AUTO\") &&\r\n                                 (dwUtilsStringStartsWith(url, baseLoc, false) || dwUtilsStringStartsWith(url, \"/\", false));\r\n    var errorLogType = logtype ? logtype : \"error\"\r\n    if (forceAjaxTransferType || preferAjaxTransferType) {\r\n        var qs = \"\";\r\n        if (method == \"POST\") {\r\n            qs = dwUtilsStringAfter(url, \"?\");\r\n            url = dwUtilsStringBefore(url, \"?\");\r\n        }\r\n        var xmlHttp = dwUtilsCreateXmlHttpRequest(true, requestHeaderMap);\r\n        xmlHttp.open(method, url, true);\r\n        xmlHttp.setRequestHeader(\"Content-type\", \"application/x-www-form-urlencoded;charset=UTF-8\");\r\n        // Laut W3C sollte Connection und Content-Length nicht interpretiert werden\r\n        // http://www.w3.org/TR/XMLHttpRequest/#the-setrequestheader%28%29-method\r\n        // Connection 'close' kann aber ggf. Vorteile mit sich bringen. Request Header werden gesetzt, ggf. aber von Browsern ignoriert (z.B. Chrome)\r\n        dwDomAddEventListener(xmlHttp, \"onreadystatechange\", function() {\r\n            if (xmlHttp.readyState == DWUTILS_READY_STATE.DONE) {\r\n                var successful = true;\r\n                if (xmlHttp.status == 0) {\r\n                    successful = false;\r\n                    if (DWAJAX_LOG_ERRORS && !doNotLogErrors) {\r\n                        // Direkter Aufruf von \"dwAjaxToServer\" - damit die Nachricht zuverlässig vor Anzeige eines Alerts zum Server übertragen wird (dwAjaxCurrentlySending könnte 'true' sein)\r\n                        dwAjaxToServer(new Date().getTime(), false, dwUtilsBuildErrorUpdates(errorLogType, xmlHttp.status, url, qs, logChannel), true, new Date().getTime());\r\n                    }\r\n                    if (DWAJAX_SHOW_ERRORS) {\r\n                        if (typeof (errorCallback) == \"function\") {\r\n                            errorCallback(\"Status: Connection Aborted\" + \"\\nUrl: \" + url + \"\\nParameter: \" + qs, xmlHttp.status, url, qs);\r\n                        }\r\n                    }\r\n                } else if (xmlHttp.status >= 400) {\r\n                    successful = false;\r\n                    if (DWAJAX_LOG_ERRORS && !doNotLogErrors) {\r\n                        // Direkter Aufruf von \"dwAjaxToServer\" - damit die Nachricht zuverlässig vor Anzeige eines Alerts zum Server übertragen wird (dwAjaxCurrentlySending könnte 'true' sein)\r\n                        dwAjaxToServer(new Date().getTime(), false, dwUtilsBuildErrorUpdates(errorLogType, xmlHttp.status, url, qs, logChannel), true, new Date().getTime());\r\n                    }\r\n                    if (DWAJAX_SHOW_ERRORS) {\r\n                        if (typeof (errorCallback) == \"function\") {\r\n                            errorCallback(\"Status: \" + xmlHttp.status + \"\\nUrl: \" + url + \"\\nParameter: \" + qs, xmlHttp.status, url, qs);\r\n                        }\r\n                    }\r\n                }\r\n\r\n                // Erfolgreicher Aufruf ...\r\n                if (successful && (typeof (successCallback) == \"function\")) {\r\n                    successCallback(xmlHttp.status, xmlHttp.response);\r\n                }\r\n\r\n                if (!doNotFireInvisibleUriLoadedEvent) {\r\n                    if (typeof (dwAjaxFireCustomEvent) != \"undefined\") {\r\n                        var rootWindowId = dwFrameworkGetRootWindowId();\r\n                        var uri = url;\r\n                        if (qs) {\r\n                            uri += \"?\" + qs;\r\n                        }\r\n                        dwAjaxInvisibleUriLoaded(null, rootWindowId, rootWindowId, \"uri=\" + encodeURIComponent(uri) + \"@DWSUB@success=\" + successful + \"@DWSUB@__INT_statuscode=\" + xmlHttp.status, true);\r\n                    }\r\n                }\r\n            }\r\n        });\r\n        xmlHttp.send(qs);\r\n    } else {\r\n        var body = document.getElementsByTagName(\"body\")[0];\r\n\r\n        var containers = document.getElementsByName(\"invisiblerequest\");\r\n        var idSuffix = \"_\" + containers.length;\r\n\r\n        var container = document.createElement(\"div\");\r\n        dwDomSetDomAttribute(container, \"name\", \"invisiblerequest\");\r\n        dwDomSetDomAttribute(container, \"id\", \"invisiblerequest\" + idSuffix);\r\n\r\n        var form = dwUtilsParseUrlToForm(url, container.id + \"_target\", method);\r\n//        form.setAttribute(\"acceptCharset\", \"UTF-8\"); // Wirklich notwendig?!\r\n        form.setAttribute(\"name\", container.id + \"_form\");\r\n        form.setAttribute(\"id\", container.id + \"_form\");\r\n        container.appendChild(form);\r\n\r\n        var iframe = document.createElement(\"iframe\");\r\n        iframe.style.border = 0;\r\n        iframe.border = 0;\r\n        iframe.style.height = 0;\r\n        iframe.style.width = 0;\r\n        dwDomSetDomAttribute(iframe, \"name\", container.id + \"_target\");\r\n\r\n        function cleanup() {\r\n            body.removeChild(container);\r\n            body = null;\r\n            container = null;\r\n            form = null;\r\n            iframe = null;\r\n        }\r\n\r\n        // Iframe muss vor den Event-Handlern hinzugefügt werden. In bestimmten Browsern (z.B. Chrome) wird beim append bereits ein onload ausgelöst\r\n        container.appendChild(iframe);\r\n        body.appendChild(container);\r\n\r\n        iframe.onload = function() {\r\n            if (typeof (dwAjaxFireCustomEvent) != \"undefined\") {\r\n                var rootWindowId = dwFrameworkGetRootWindowId();\r\n                var uri = url;\r\n                if (qs) {\r\n                    uri += \"?\" + qs;\r\n                }\r\n                // Auch bei Fehlern (z.B. 404 wird meistens onload ausgelöst und nicht onerror. Eine genaue Unterscheidung zwischen\r\n                // success und fehlgeschlagenen Aufrufen ist nicht erkennbar. Nachdem im Fehlerfall zumindest auch die \"Fehlerseite\"\r\n                // geladen wurde liefern wir 'true' als success Information zurück.\r\n                dwAjaxInvisibleUriLoaded(null, rootWindowId, rootWindowId, \"uri=\" + encodeURIComponent(uri) + \"@DWSUB@success=true@DWSUB@__INT_statuscode=200\", true);\r\n            }\r\n            if (cleanup) {\r\n                cleanup();\r\n                cleanup = null;\r\n            }\r\n        };\r\n        iframe.onerror = function() {\r\n            // Methode wird verm. nicht zuverlässig von den Browsern unterstützt. Error Handling\r\n            if (cleanup) {\r\n                cleanup();\r\n                cleanup = null;\r\n            }\r\n        };\r\n        setTimeout(function() {\r\n            if (cleanup) {\r\n                cleanup();\r\n                cleanup = null;\r\n            }\r\n        }, 10000);\r\n\r\n        form.submit();\r\n    }\r\n}\r\n\r\nfunction dwUtilsBuildErrorUpdates(/*string*/errorLogType, /*int*/status, /*string*/url,/*string*/ qs,/*string*/ logChannel) {\r\n    var result = errorLogType + \"@DW@url@DW@\" + status + \"@DWSUB@\" + (url || \"\") + \"@DWSUB@\" + (qs || \"\");\r\n    if (logChannel) {\r\n        result = result + \"@DWSUB@\" + logChannel;\r\n    }\r\n    return [result]\r\n}\r\n\r\nfunction dwUtilsCreateXmlHttpRequest(noCache, /*map<string,string>*/ requestHeaderMap) {\r\n    var xmlHttp = null;\r\n    if (window.XMLHttpRequest) {\r\n        xmlHttp = new XMLHttpRequest();\r\n    }\r\n    if (xmlHttp && noCache) {\r\n        function xmlHttpRequestNoCacheHeaderFunc() {\r\n            if (xmlHttp.readyState == DWUTILS_READY_STATE.OPENED) { // opened - in diesen Zustand lassen sich Request Header setzen\r\n                xmlHttp.setRequestHeader(\"Expires\", 0); //  Datei in jedem Fall neu laden\r\n                xmlHttp.setRequestHeader(\"Pragma\", \"no-cache\"); // An Proxy-Agenten: Datei bitte nicht auf Proxy-Server speichern!\r\n                xmlHttp.setRequestHeader(\"Cache-Control\", \"no-cache,no-store,must-revalidate,post-check=0,pre-check=0\"); // Anweisung an den Browser: keinen Cache benutzen, sondern von Originalseite laden\r\n                xmlHttp.setRequestHeader(\"P3P\", \"CP=\\\"CAO PSA OUR\\\"\");\r\n\r\n                // Optionale zusätzliche Request-Header\r\n                if ((typeof (requestHeaderMap) != \"undefined\") && (requestHeaderMap != null)) {\r\n                    try {\r\n                        const mapIterator = requestHeaderMap.entries();\r\n                        let entry = null;\r\n                        while (((entry = mapIterator.next()) != null) && !entry.done) {\r\n                            xmlHttp.setRequestHeader(entry.value[0], entry.value[1]);\r\n                        }\r\n                    } catch (e) {\r\n                        alert(\"dwUtilsCreateXmlHttpRequest(): Wrong type for parameter 'requestHeaderMap' (must be a map).\" + e);\r\n                    }\r\n                }\r\n\r\n                dwDomRemoveEventListener(xmlHttp, \"onreadystatechange\", xmlHttpRequestNoCacheHeaderFunc);\r\n            }\r\n        }\r\n\r\n        dwDomAddEventListener(xmlHttp, \"onreadystatechange\", xmlHttpRequestNoCacheHeaderFunc, false);\r\n    }\r\n    return xmlHttp;\r\n}\r\n\r\nfunction dwUtilsCanvasDrawEllipse(canvasContext, x, y, width, height, color, fill) {\r\n    var k = 0.5522848;\r\n    var offsetX = (width / 2) * k;\r\n    var offsetY = (height / 2) * k;\r\n    var xMiddle = x + width / 2;\r\n    var yMiddle = y + height / 2;\r\n    var xEnd = x + width;\r\n    var yEnd = y + height;\r\n    canvasContext.strokeStyle = color;\r\n    canvasContext.fillStyle = color;\r\n    canvasContext.beginPath();\r\n    canvasContext.moveTo(x, yMiddle);\r\n    canvasContext.bezierCurveTo(x, yMiddle - offsetY, xMiddle - offsetX, y, xMiddle, y);\r\n    canvasContext.bezierCurveTo(xMiddle + offsetX, y, xEnd, yMiddle - offsetY, xEnd, yMiddle);\r\n    canvasContext.bezierCurveTo(xEnd, yMiddle + offsetY, xMiddle + offsetX, yEnd, xMiddle, yEnd);\r\n    canvasContext.bezierCurveTo(xMiddle - offsetX, yEnd, x, yMiddle + offsetY, x, yMiddle);\r\n    if (fill) {\r\n        canvasContext.fill();\r\n    }\r\n    canvasContext.closePath();\r\n    canvasContext.stroke();\r\n}\r\n\r\n\r\nfunction dwUtilsCanvasDrawRect(canvasContext, x, y, width, height, color, fill) {\r\n    canvasContext.strokeStyle = color;\r\n    canvasContext.fillStyle = color;\r\n    if (fill) {\r\n        canvasContext.fillRect(x, y, width, height);\r\n    } else {\r\n        canvasContext.strokeRect(x, y, width, height);\r\n    }\r\n}\r\n\r\nfunction dwUtilsCanvasDrawLine(canvasContext, x, y, x2, y2, color) {\r\n    canvasContext.strokeStyle = color;\r\n    canvasContext.beginPath();\r\n    canvasContext.moveTo(x, y);\r\n    canvasContext.lineTo(x2, y2);\r\n    canvasContext.stroke();\r\n    canvasContext.closePath();\r\n}\r\n\r\nfunction dwUtilsCanvasDrawImage(canvasContext, img, srcX, srcY, srcWidth, srcHeight, destX, destY, destWidth, destHeight) {\r\n    //console.log(\"Drawing context: \" + canvasContext + \" \" + canvasContext.width + \"x\" + canvasContext.height +\r\n    //            \" img: \" + img + \" \" + img.width + \"x\" + img.height + \" src: \" + srcX+\"x\"+srcY + \"|\" + srcWidth + \"x\" + srcHeight +\r\n    //            \" dest: \" + destX + \"x\" + destY + \"|\" + destWidth + \"x\" + destHeight);\r\n    canvasContext.drawImage(img, srcX, srcY, srcWidth, srcHeight, destX, destY, destWidth, destHeight);\r\n}\r\n\r\nfunction dwUtilsCanvasGetImageData(canvasContext, srcX, srcY, srcWidth, srcHeight) {\r\n    return canvasContext.getImageData(srcX, srcY, srcWidth, srcHeight);\r\n}\r\n\r\nfunction dwUtilsCanvasPutImageData(canvasContext, srcX, srcY, imageData) {\r\n    canvasContext.putImageData(imageData, srcX, srcY);\r\n}\r\n\r\n/**\r\n * Aus Kompatibilitätsgründen zum EC.jjs in Java müssen Großbuchstaben zurückgegeben werden\r\n * @param cc\r\n * @return {String}\r\n */\r\nfunction dwUtilsCharCodeToHex(cc) {\r\n    return cc.toString(16).toUpperCase();\r\n}\r\n\r\n/**\r\n * Siehe EC.jjs in Java\r\n */\r\nfunction dwUtilsJjs(string) {\r\n    var out = \"\";\r\n    for (var i = 0; i < string.length; i++) {\r\n        var ch = string.charAt(i);\r\n        var cc = string.charCodeAt(i);\r\n        if (cc > 0xfff) {\r\n            out += \"\\\\u\" + dwUtilsCharCodeToHex(cc);\r\n        } else if (cc > 0xff) {\r\n            out += \"\\\\u0\" + dwUtilsCharCodeToHex(cc);\r\n        } else if (cc > 0x7f) {\r\n            out += \"\\\\u00\" + dwUtilsCharCodeToHex(cc);\r\n        } else if (cc < 32) {\r\n            if (ch == '\\f') {\r\n                out += '\\\\f';\r\n            } else if (ch == '\\r') {\r\n                out += '\\\\r';\r\n            } else if (ch == '\\n') {\r\n                out += '\\\\n';\r\n            } else if (ch == '\\b') {\r\n                out += '\\\\b';\r\n            } else if (ch == '\\t') {\r\n                out += '\\\\t';\r\n            } else if (cc > 0xf) {\r\n                out += \"\\\\u00\" + dwUtilsCharCodeToHex(cc);\r\n            } else {\r\n                out += \"\\\\u000\" + dwUtilsCharCodeToHex(cc);\r\n            }\r\n        } else {\r\n            if (ch == '\"') {\r\n                out += '\\\\\"';\r\n            } else if (ch == '\\\\') {\r\n                out += '\\\\\\\\';\r\n            } else if (ch == '\\'') {\r\n                out += '\\\\\\'';\r\n            } else if (ch == '/') {\r\n                out += '\\\\/';\r\n            } else {\r\n                out += ch;\r\n            }\r\n        }\r\n    }\r\n    return out;\r\n}\r\n\r\nfunction dwUtilsCountString(string, stringInside) {\r\n    if ((string.length == 0) || (stringInside.length == 0)) {\r\n        return 0;\r\n    }\r\n    var counter = 0;\r\n    var index = string.indexOf(stringInside);\r\n    while (index != -1) {\r\n        counter++;\r\n        if (string.charAt(index) == '#') {\r\n            string = string.replaceAt(index, '-');\r\n        } else {\r\n            string = string.replaceAt(index, '#');\r\n        }\r\n        index = string.indexOf(stringInside);\r\n    }\r\n    return counter;\r\n}\r\n\r\nfunction dwUtilsCutHtmlTags(text) {\r\n    if (dwUtilsStringStartsWith(text, \"<html>\", true)) {\r\n        text = text.substring(6);\r\n    }\r\n    if (dwUtilsStringEndsWith(text, \"</html>\", true)) {\r\n        text = text.substring(0, text.length - 7);\r\n    }\r\n    return text;\r\n}\r\n\r\nfunction dwUtilsSetCountdownTime(time) {\r\n    DWUTILS_COUNTDOWN_TIME = time;\r\n}\r\n\r\nfunction dwUtilsSetCountDownControlId(controlId) {\r\n    DWUTILS_COUNTDOWN_CONTROL_ID = controlId;\r\n}\r\n\r\nfunction dwUtilsInitCountdown() {\r\n    if (DWUTILS_COUNTDOWN_CONTROL_ID != null) {\r\n        if (DWUTILS_COUNTDOWN_INTERVAL) {\r\n            clearInterval(DWUTILS_COUNTDOWN_INTERVAL);\r\n        }\r\n        DWUTILS_COUNTDOWN_INTERVAL = setInterval(\"dwUtilsCountdown()\", 1000); // jede Sekunde die Anzeige anpassen\r\n    }\r\n}\r\n\r\nfunction dwUtilsCountdown() {\r\n    var container = $(DWUTILS_COUNTDOWN_CONTROL_ID);\r\n    if (container == null) {\r\n        return;\r\n    }\r\n    DWUTILS_COUNTDOWN_TIME--;\r\n    var minutes = Math.floor(DWUTILS_COUNTDOWN_TIME / 60);\r\n    var seconds = DWUTILS_COUNTDOWN_TIME % 60;\r\n    if (DWUTILS_COUNTDOWN_TIME < 0) {\r\n        container.innerHTML = \"00:00\";\r\n        if (DWUTILS_COUNTDOWN_INTERVAL) {\r\n            window.clearInterval(DWUTILS_COUNTDOWN_INTERVAL); // aufräumen\r\n        }\r\n    } else {\r\n        var time = \"\";\r\n        if (minutes < 10) {\r\n            time = \"0\";\r\n        }\r\n        time += minutes;\r\n        time += \":\";\r\n        if (seconds < 10) {\r\n            time += \"0\";\r\n        }\r\n        time += seconds;\r\n        container.innerHTML = time;\r\n    }\r\n}\r\n\r\nfunction dwUtilsCopyToClipboardWithClipboardJS(text) {\r\n    var event = document.createEvent('MouseEvents');\r\n    var dummyNode = $(\"body\"); // Lib arbeitet normalerweise in Verbindung mit DOM Elementen, die ein Event auslösen ... wir rufen es einfach so auf\r\n    event.initMouseEvent('click', true, true, null, 1, 0, 0, 0, 0,\r\n                         false, false, false, false, 0, dummyNode);\r\n    Object.defineProperty(event, 'currentTarget', {writable: false, value: dummyNode}); // Funktioniert nicht im IE11\r\n    Object.defineProperty(event, 'delegateTarget', {writable: false, value: dummyNode});\r\n\r\n\r\n    var cb = new ClipboardJS('.null', { // Fake Identifier (nicht benötigt)\r\n        text: function() {\r\n            return text;\r\n        }\r\n    });\r\n\r\n    cb.on('success', function(e) {\r\n        cb.off('error');\r\n        cb.off('success');\r\n    });\r\n\r\n    cb.on('error', function(e) {\r\n        var rootWindowId = dwFrameworkGetRootWindowId();\r\n\r\n        var currentRootNode = document.getElementById(\"dwmainwrapper\");\r\n        var childWindows = dwDomGetChildrenByTagname(currentRootNode, \"div\", {\"class\": \"guiwindow_child_container\"}, false);\r\n        var mostRecentChildWindow = null; // Popup mit höchtem z-Index\r\n        for (var i = 0; i < childWindows.length; i++) {\r\n            var childWindow = childWindows[i];\r\n            if ((mostRecentChildWindow == null) || (childWindow.style.zIndex > mostRecentChildWindow.style.zIndex)) {\r\n                mostRecentChildWindow = childWindow;\r\n            }\r\n        }\r\n        if (mostRecentChildWindow) {\r\n            rootWindowId = mostRecentChildWindow.id.substring(0, mostRecentChildWindow.id.indexOf(\"_\"));\r\n        }\r\n\r\n        if (rootWindowId) {\r\n            var params = \"text=\" + e.text;\r\n            dwAjaxAddUpdate(rootWindowId + \"@DW@\" + rootWindowId + \"@DW@__custom_openCopyDialog@DW@\" + params, true, true);\r\n\r\n        }\r\n        cb.off('error');\r\n        cb.off('success');\r\n        // Ist das Event nicht Synchron ausgelöst bleibt ggf. ein TextArea Objekt zurück. Das wird explizit gesucht und entfernt\r\n        var body = $(\"body\");\r\n        var bodyChildren = body.children;\r\n        var lastChild = bodyChildren[bodyChildren.length - 1];\r\n        if ((lastChild.tagName.toLowerCase() === \"textarea\") && ((lastChild.style.left === \"-9999px\") || (lastChild.style.right === \"-9999px\"))) {\r\n            body.removeChild(lastChild);\r\n        }\r\n    });\r\n\r\n    cb.onClick(event);\r\n}\r\n\r\nfunction dwUtilsCopyToClipboard(text) {\r\n    if (navigator.clipboard && window.isSecureContext) {\r\n        navigator.clipboard.writeText(text).then(function() {\r\n            // succesfully copied. Nothing to do\r\n        }, function() {\r\n            dwUtilsCopyToClipboardWithClipboardJS(text);\r\n        });\r\n    } else {\r\n        dwUtilsCopyToClipboardWithClipboardJS(text);\r\n    }\r\n}\r\n\r\n\r\nfunction dwUtilArrayBufferToBase64(buffer) {\r\n    var binary = '';\r\n    var bytes = new Uint8Array(buffer);\r\n    var len = bytes.byteLength;\r\n    for (var i = 0; i < len; i++) {\r\n        binary += String.fromCharCode(bytes[i]);\r\n    }\r\n    return window.btoa(binary);\r\n}\r\n\r\nlet debounceTimerMap = new Map();\r\n\r\n/**\r\n * Ruft eine Funktion mit verzögerung auf.\r\n * Wenn die funktion for Ablaufen der verzögerung nochmal aufgerufen wird, startet der timer neu.\r\n */\r\nfunction dwUtilsDebounce(controlId, func, timeout) {\r\n    let timer = debounceTimerMap.get(controlId);\r\n    clearTimeout(timer);\r\n    timer = setTimeout(function() {\r\n        func.apply(this);\r\n        debounceTimerMap.delete(controlId);\r\n    }, timeout);\r\n    debounceTimerMap.set(controlId, timer);\r\n}\r\n\r\nfunction dwUtilsGetDebounceTime(controlId) {\r\n    const control = $(controlId);\r\n    return control.getAttribute(\"debounce\");\r\n}\r\n\n/*\r\n * Copyright (c) 2016 Docware GmbH\r\n */\r\nvar DWDOM_NAVIGATION_PATH_DIRECTION = {BOTTOM_UP: \"bottom_up\", TOP_DOWN: \"top_down\"};\r\n\r\nvar DWDOM_PENDING_SCRIPT_FILES = new Array();\r\n\r\nvar dwDomPendingScriptFilesAccessLock = false;\r\n\r\n/**\r\n * Entfernt die Liste der Kindknoten (von-bis) aus dem Parent\r\n * @param children\r\n * @param startIdx : int\r\n * @param howMany : int\r\n */\r\nfunction dwDomRemoveChildren(children, startIdx, howMany) {\r\n    if (!children || !(children.length)) { // Abbruch wenn children null/undefined oder keine Kinder gelöscht werden sollen\r\n        if (dwFrameworkShowDevelopmentMessages()) {\r\n            alert(\"InvalidArgumentException calling dwDomRemoveChildren: children null or empty\");\r\n        }\r\n        return;\r\n    }\r\n\r\n    var parent = children[0].parentNode;\r\n    var endIdx = Math.min(children.length, startIdx + howMany) - 1;\r\n    var numToDelete = endIdx - startIdx;\r\n    for (var i = 0; i <= numToDelete; i++) {\r\n        parent.removeChild(children[endIdx - i]);\r\n    }\r\n}\r\n\r\nfunction dwDomRemoveSelf(node) {\r\n    if (!node) {\r\n        if (dwFrameworkShowDevelopmentMessages()) {\r\n            alert(\"InvalidArgumentException calling dwDomRemoveSelf: node null\");\r\n        }\r\n        return;\r\n    }\r\n    var parent = node.parentNode;\r\n    parent.removeChild(node);\r\n}\r\n\r\nfunction dwDomRemoveElementChildNodes(node, startIdx, howMany) {\r\n    var children = dwDomGetElementChildNodes(node);\r\n    howMany = (typeof (howMany) == \"undefined\") ? children.length - startIdx : howMany;\r\n    dwDomRemoveChildren(children, startIdx, howMany);\r\n}\r\n\r\nfunction dwDomRemoveAllElementChildNodes(node) {\r\n    var children = dwDomGetElementChildNodes(node);\r\n    if (children.length == 0) {\r\n        // Es gibt nichts zu entfernen. Abbruch\r\n        return;\r\n    }\r\n    var startIdx = 0;\r\n    var endIdx = children.length;\r\n    dwDomRemoveChildren(children, startIdx, endIdx);\r\n}\r\n\r\n/**\r\n * Entfernt die Knoten (Elemente, Texte, ...) zwischen startIdx und startIdx+howMany\r\n * Werden die Parameter startIdx und howMany nicht gesetzt, werden alle Knoten entfernt\r\n */\r\nfunction dwDomRemoveChildNodes(node, startIdx, howMany) {\r\n    var children = node.childNodes;\r\n    howMany = (typeof (howMany) == \"undefined\") ? children.length - startIdx : howMany;\r\n    dwDomRemoveChildren(children, startIdx, howMany);\r\n}\r\n\r\nfunction dwDomRemoveAllChildNodes(node) {\r\n    // Laut http://jsperf.com/innerhtml-vs-removechild/256 am schnellsten\r\n    var child;\r\n    while (child = node.firstChild) {\r\n        node.removeChild(child);\r\n    }\r\n}\r\n\r\nfunction dwDomGetIndexOfElementEntry(element) {\r\n    var parentNode = element.parentNode;\r\n    if (parentNode == null) {\r\n        return -1;\r\n    }\r\n    var children = dwDomGetElementChildNodes(parentNode);\r\n    return dwUtilsGetIndexOfEntry(children, element);\r\n}\r\n\r\nfunction dwDomGetIndexOfNodeEntry(node) {\r\n    var parentNode = node.parentNode;\r\n    if (parentNode) {\r\n        var childNodes = parentNode.childNodes;\r\n        return dwUtilsGetIndexOfEntry(childNodes, node);\r\n    } else {\r\n        return -1;\r\n    }\r\n}\r\n\r\nfunction dwDomRemoveChildrenByType(node, nodeType) {\r\n    var childrenByType = dwDomGetChildNodesByType(node, nodeType);\r\n    dwDomRemoveChildren(childrenByType, 0, childrenByType.length);\r\n}\r\n\r\n/**\r\n * Entfernt alle Inhalts-Tabellen-Zeilen.\r\n * @param tableRowContainer DOM Container mit 'tr' Unterknoten (entweder table oder tbody)\r\n * @param hasHeader Indikator, ob es sich bei der ersten Zeile der Tabelle um den Header handelt\r\n */\r\nfunction dwDomRemoveTableContentRows(tableRowContainer, hasHeader) {\r\n    var firstContentRow = (hasHeader) ? 1 : 0;\r\n    if (firstContentRow) { // Hat Header ...\r\n        dwDomRemoveElementChildNodes(tableRowContainer, firstContentRow);\r\n    } else { // Hat keinen Header\r\n        dwDomRemoveAllElementChildNodes(tableRowContainer)\r\n    }\r\n}\r\n\r\n/**\r\n * Erstellt automatisch die fehlenden Kind-Knoten\r\n *\r\n * Diese Methode ist nur notwendig, wenn Zugriffe auf ein Grid-Layout durchgeführt werden.\r\n * Ansonsten sollte die notwendige DOM Struktur bereits vorhanden sein\r\n *\r\n * @param parentNode : node Knoten in den die erstellten Kindknoten eingefügt werden sollen\r\n * @param requiredNodesCount : int Anzahl der dummy Knoten die erstellt und eingefügt werden sollen\r\n * @param nodeName : string  Name des Elements, z.B. tr oder td\r\n * @param elementModelFromServer : htmlstring_or_null html string zur Erstellung des Elements (z.B. <tr align='right'>). NULL erlaubt\r\n */\r\nfunction dwDomAutoCreateMissingElementChildNodes(parentNode, requiredNodesCount, nodeName, elementModelFromServer) {\r\n    var elementModel;\r\n    var docFrag = document.createDocumentFragment();\r\n    for (var i = 0; i < requiredNodesCount; i++) {\r\n        // Jeder Knoten muss neu generiert werden (oder gecloned) - Objekte können dem DOM nur einmalig hinzugefügt werden\r\n        if (elementModelFromServer) {\r\n            elementModel = dwDomParseStringToNodes(elementModelFromServer);\r\n        } else {\r\n            elementModel = document.createElement(nodeName);\r\n        }\r\n        docFrag.appendChild(elementModel);\r\n    }\r\n    parentNode.appendChild(docFrag);\r\n}\r\n\r\n/**\r\n * Erstellt die erwartete Knotenstruktur, wenn diese automatisch generiert werden soll.\r\n *\r\n * Diese Methode ist nur notwendig, wenn Zugriffe auf ein Grid-Layout durchgeführt werden.\r\n * Ansonsten sollte die notwendige DOM Struktur bereits vorhanden sein\r\n *\r\n * Sollen nur notwendige neue Zeilen generiert werden, und die Zelle am Ende der entsprechenden Zeile appended werden\r\n * muss der columnIdx auf den Wert '-1' gesetzt werden\r\n * @param control : node\r\n * @param rowIdx : int\r\n * @param columnIdx : int\r\n * @param trElementModelFromServer : htmlstring_or_null\r\n * @param tdElementModelFromServer : htmlstring_or_null\r\n */\r\nfunction dwDomAutoCreateMissingElementNodeStructure(control, rowIdx, columnIdx, trElementModelFromServer, tdElementModelFromServer) {\r\n    // Fehlende Zeilen (tr Knoten) erstellen\r\n    var rowContainer = dwDomGetRealRowContainerNode(control);\r\n    var currentRowCount = dwDomGetElementChildNodes(rowContainer).length;\r\n    dwDomAutoCreateMissingElementChildNodes(rowContainer, (rowIdx + 1) - currentRowCount, \"tr\", trElementModelFromServer);\r\n    // In der letzten Zeile fehlende td Knoten erstellen (ohne den aktuell darzustellenden)\r\n    var cellContainer = dwDomGetChildAtIndex(rowContainer, rowIdx);\r\n    var currentCellCount = dwDomGetElementChildNodes(cellContainer).length;\r\n    if (columnIdx == -1) {\r\n        return;\r\n    }  // Keine Spalten generieren - z.B. bei appendChild Operationen\r\n    dwDomAutoCreateMissingElementChildNodes(cellContainer, columnIdx - currentCellCount, \"td\", tdElementModelFromServer);\r\n}\r\n\r\n/**\r\n * Liefert das Kind an der Index-Position\r\n * Ist der Index zu groß wird NULL zruückgeliefert\r\n *\r\n * Bei Aktionen, die fehlende Zellen automatisch generieren sollen, muss die Methode \"dwDomAutoCreateMissingElementNodeStructure\"\r\n * vorher ausgeführt werden, um die notwendige Struktur bereits aufzubauen\r\n *\r\n * @param parentNode\r\n * @param siblingIdx\r\n */\r\nfunction dwDomGetChildAtIndex(parentNode, childIdx) {\r\n    var childNodes = dwDomGetElementChildNodes(parentNode);\r\n    if (childIdx >= childNodes.length) {\r\n        if (dwFrameworkShowDevelopmentMessages()) {\r\n            alert(\"ArrayIndexOutOfBounds in dwDomGetChildAtIndex: \" + childIdx + \" / \" + childNodes.length);\r\n        }\r\n        return null;\r\n    } else {\r\n        return childNodes[childIdx];\r\n    }\r\n}\r\n\r\n/**\r\n * Navigiert in die Tiefe des DOM und liefert den ersten Knoten zurück, der den gesuchten Node-Namen hat (z.B. table)\r\n * @param parentNode : node\r\n * @param nodeName : string\r\n */\r\nfunction dwDomGetFirstChildByName(parentNode, nodeName) {\r\n    var match = null;\r\n    for (var i = 0; i < parentNode.childNodes.length; i++) {\r\n        var childNode = parentNode.childNodes[i];\r\n        if (childNode.nodeType != DWUTILS_NODE_TYPE.ELEMENT) {\r\n            continue;\r\n        }\r\n        if (childNode.nodeName.toLowerCase() == nodeName) {\r\n            match = childNode;\r\n            break;\r\n        } else {\r\n            var potentialMatch = dwDomGetFirstChildByName(childNode, nodeName);\r\n            if (potentialMatch != null) {\r\n                match = potentialMatch;\r\n                break;\r\n            }\r\n        }\r\n    }\r\n    return match;\r\n}\r\n\r\n/**\r\n * Liefert den Knoten zurück, in dem die TR Knoten eingebettet sind.\r\n * Ist tableNode kein 'table' Knoten, wird NULL zurückgeliefert.\r\n * @param tableNode : node tbody node (wenn vorhanden), table node oder null sonst\r\n */\r\nfunction dwDomGetRealRowContainerNode(tableNode) {\r\n    if (tableNode.nodeName.toLowerCase() == \"tbody\") {\r\n        return tableNode;\r\n    }    // Knoten ist bereits tbody - keine weitere Überprüfung der Kinder notwendig\r\n    if (tableNode.nodeName.toLowerCase() != \"table\") {\r\n        // Knoten ist weder tbody noch table.\r\n        throw (\"Node invalid. Expected nodename 'table', but found '\" + tableNode.nodeName + \"'. Returning null\");\r\n    }\r\n    // Aktueller Knoten ist 'table'. Row-Container kann table oder tbody sein\r\n    var tableChildNode = dwDomGetFirstElementChild(tableNode);\r\n    if (tableChildNode != null) {\r\n        // tbody als Kindelement gefunden. Dies ist der Container für die tr Elemente\r\n        if (tableChildNode.nodeName.toLowerCase() == \"tbody\") {\r\n            return tableChildNode;\r\n        }\r\n    }\r\n    return tableNode;\r\n}\r\n\r\n/**\r\n * Liefert das Control zurück, das ausgehend vom control mit Hilfe des navigationPaths erreicht wird\r\n *\r\n * Der Pfad kann als Array (von Zahlen), String (mit '|' delimiter) oder als eine einzelne Zahl angegeben werden\r\n *\r\n * @param control : node\r\n * @param navigationPath : array_or_string_or_number\r\n */\r\nfunction dwDomFindContainer(control, navigationPath, preferTBodyIfContainerIsTable) {\r\n    var navigationCommands;\r\n    if (typeof (navigationPath) == \"string\") {\r\n        navigationCommands = navigationPath.split(DWUTILS_NAVIGATION_PATH_DIVIDER);\r\n    } else if (typeof (navigationPath) == \"number\") {\r\n        navigationCommands = new Array(navigationPath + \"\");\r\n    } else {\r\n        navigationCommands = navigationPath;\r\n    }\r\n    var currentNode = control;\r\n    for (var i = 0; i < navigationCommands.length; i++) {\r\n        if (currentNode.nodeName.toLowerCase() == \"table\") {\r\n            currentNode = dwDomGetRealRowContainerNode(currentNode);\r\n        }\r\n        if (navigationCommands[i] == \"\") {\r\n            continue;\r\n        }\r\n        var childIdx = parseInt(navigationCommands[i]);\r\n        currentNode = dwDomGetChildAtIndex(currentNode, childIdx);\r\n        if (currentNode == null) {\r\n            return null;\r\n        }\r\n    }\r\n    if (preferTBodyIfContainerIsTable) {\r\n        if (currentNode.nodeName.toLowerCase() == \"table\") {\r\n            currentNode = dwDomGetRealRowContainerNode(currentNode);\r\n        }\r\n    }\r\n    return currentNode;\r\n}\r\n\r\n/**\r\n * Parsed den XML/HTML String und liefert die entsprechende Knoten-Struktur zurück\r\n *\r\n * Ein eigener Parser wurde früher mal ausprobiert. Aber das ist knifflig und man muss auch die HTML Sachen wie &uml;\r\n * zurückwandeln.\r\n *\r\n * Daher wurde das Verfahren der HTML-> Nodes Umwandlung auf innerHTML umgesetzt.\r\n * Intern wird eine valide HTML Struktur aufgebaut, und das innerHTML bei <td> Objekten automatisch um table und tr ergänzt\r\n *\r\n * Bei Link-Elementen (<a href=\"#\">) kann vor dem # Zeichen die aktuelle Seiten-URL ergänzt werden. Beim Zugriff auf das Attribut (href)\r\n * mit Javascript wird der Wert immer mit Prefix zurückgeliefert (da kein Protokoll an der URL angegeben ist)\r\n *\r\n * Die Methode \"cloneNode(true)\" darf nicht auf die generierten Knoten ausgeführt werden, da sonst Attribute wie \"selected\" verloren gehen\r\n *\r\n * Aus Performancegründen (das ist die Methode die bei AJAX am meisten CPU verbrät wurde auf alles verzichtet, was nicht nötig ist)\r\n * Laut jsperf geht das hier mit innerHtml am schnellsten http://jsperf.com/comparing-ways-to-append-dom-elements\r\n *\r\n * @param node-Objekt basierend auf dem htmlString\r\n */\r\nfunction dwDomParseStringToNodes(htmlString) {\r\n    if (dwFrameworkShowDevelopmentMessages() && (htmlString.indexOf(\"<script\") >= 0)) {\r\n        throw (\"No script tag allowed in node-string. Use dwDomAddScript(...) instead for: '\" + htmlString + \"'.\");\r\n    }\r\n\r\n    var fakeNode = document.createElement(\"div\");\r\n    var firstCharactersLowercase = (htmlString.length >= 4) ? htmlString.substring(0, 4).toLowerCase() : \"\";\r\n    var result;\r\n\r\n    if ((firstCharactersLowercase == \"<td \") || (firstCharactersLowercase == \"<th \") ||\r\n        (firstCharactersLowercase == \"<td>\") || (firstCharactersLowercase == \"<th>\")) {\r\n        fakeNode.innerHTML = \"<table><tbody><tr>\" + htmlString + \"</tr></tbody></table>\";\r\n        result = fakeNode.childNodes[0].childNodes[0].childNodes[0].childNodes[0];\r\n    } else if ((firstCharactersLowercase == \"<tr \") || (firstCharactersLowercase == \"<tr>\")) {\r\n        fakeNode.innerHTML = \"<table><tbody>\" + htmlString + \"</tbody></table>\";\r\n        result = fakeNode.childNodes[0].childNodes[0].childNodes[0];\r\n    } else {\r\n        fakeNode.innerHTML = htmlString;\r\n        result = fakeNode.childNodes[0];\r\n    }\r\n    if (result.tagName.toLowerCase() == \"tbody\") {\r\n        result = result.childNodes[0];\r\n    }\r\n    return result;\r\n}\r\n\r\n/**\r\n * Liefert den Knoten-Namen zurück, sofern der HTML String mit einem '<' beginnt\r\n * @param htmlString\r\n */\r\nfunction dwDomGetInitialTagname(htmlString) {\r\n    if (!dwUtilsStringStartsWith(htmlString, \"<\", false)) {\r\n        return \"\";\r\n    }\r\n    var idxSpace = htmlString.indexOf(\" \");\r\n    var idxClosingTag = htmlString.indexOf(\">\");\r\n    var idxEmptyTag = htmlString.indexOf(\"/>\");\r\n    var idxTagnameEnd = 999999;\r\n    if (idxSpace > -1) {\r\n        idxTagnameEnd = Math.min(idxTagnameEnd, idxSpace);\r\n    }\r\n    if (idxClosingTag > -1) {\r\n        idxTagnameEnd = Math.min(idxTagnameEnd, idxClosingTag);\r\n    }\r\n    if (idxEmptyTag > -1) {\r\n        idxTagnameEnd = Math.min(idxTagnameEnd, idxEmptyTag);\r\n    }\r\n    return htmlString.substring(1, idxTagnameEnd).toLowerCase();\r\n}\r\n\r\n/**\r\n * Fügt den Wert des Style Attributs dem aktuellen Node hinzu.\r\n *\r\n * Style ist kein Attribut im eigentlichen Sinn (key:value) sondern (key:named-array).\r\n * @param node\r\n * @param styleValue Wert des aktuellen Style-Attributs das kopiert werden soll\r\n */\r\nfunction dwDomAddStyleAttribute(node, styleValue) {\r\n    var styles = dwUtilsSplit(styleValue, \";\", false);\r\n    for (var j = 0; j < styles.length; j++) {\r\n        var style = styles[j].split(\":\");\r\n        var key = dwFrameworkCssToJavascriptProperty(style[0]);\r\n        var value = style[1];\r\n        node.style[key] = value;\r\n    }\r\n}\r\n\r\n/**\r\n * Setzt einen Kindknoten.\r\n *\r\n * Ist ein Knoten an der Index-Position vorhanden wird dieser ersetzt. Entspricht der Index der aktuellen Anzahl\r\n * von Kindknoten, wird der neue Knoten angehängt.\r\n * Andernfalls wird eine Fehlermeldung ausgegeben\r\n * @param parentControl\r\n * @param index : int index, darf aktueller Anzahl der Knoten nicht überschreiten\r\n * @param content\r\n */\r\nfunction dwDomSetChild(parentControl, index, content) {\r\n    var childElements = dwDomGetElementChildNodes(parentControl);\r\n    var nodeToReplace = childElements.length > index ? childElements[index] : null;\r\n    if (nodeToReplace != null) {\r\n        // Index zugreifbar. Knoten ersetzen\r\n        dwDomReplaceChild(parentControl, index, content);\r\n    } else if (childElements.length == index) {\r\n        // Index nicht zugreifbar - entspricht aber currentlength + 1. Knoten am Ende anfügen\r\n        dwDomAppendChild(parentControl, content);\r\n    } else {\r\n        // Lücke zwischen vorhandenen Knoten und Index der gesetzt werden soll. Fehlerzustand.\r\n        throw (\"Setting of node failed. Tried to set node \" + index + \" of \" + childElements.length + \".\");\r\n    }\r\n}\r\n\r\n/**\r\n * Parsed den content in eine DOM Knotenstruktur und fügt den neuen Knoten an das parentControl hinzu\r\n * @param parentControl\r\n * @param content\r\n */\r\nfunction dwDomAppendChild(parentControl, content) {\r\n    if ((parentControl == null) || (parentControl.nodeType != DWUTILS_NODE_TYPE.ELEMENT)) {\r\n        throw (\"Failed to append content to node.\"); // Dieser Fall sollte nie auftreten.\r\n    }\r\n    var contentNode = dwDomParseStringToNodes(content);\r\n    parentControl.appendChild(contentNode);\r\n}\r\n\r\n/**\r\n * Parsed den content in eine DOM Knotenstruktur und fügt den neuen Knoten an das parentControl hinzu\r\n * @param parentControl\r\n * @param content\r\n */\r\nfunction dwDomAppendChildren(parentControl, contentArray) {\r\n    if ((parentControl == null) || (parentControl.nodeType != DWUTILS_NODE_TYPE.ELEMENT)) {\r\n        throw (\"Failed to append content to node.\"); // Dieser Fall sollte nie auftreten.\r\n    }\r\n    var docFrag = document.createDocumentFragment();\r\n    for (var i = 0; i < contentArray.length; i++) {\r\n        docFrag.appendChild(dwDomParseStringToNodes(contentArray[i]));\r\n    }\r\n    parentControl.appendChild(docFrag);\r\n}\r\n\r\n/**\r\n * Fügt einem generischen Kind (mit Ausgangspunkt parentControl und navigationPath) Knoten hinzu\r\n * @param parentControl\r\n * @param navigationPath\r\n * @param content\r\n */\r\nfunction dwDomGenericAppendChild(parentControl, navigationPath, content) {\r\n    var control = dwDomFindContainer(parentControl, navigationPath, true);\r\n    dwDomAppendChild(control, content);\r\n}\r\n\r\n/**\r\n * Fügt ein Kind dem DOM an der Position hinzu.\r\n *\r\n * Kann der Index keinem vorhandenen Element zugeordnet werden, wird\r\n * das Kind dem Control am Ende (als letztes Kind) hinzugefügt\r\n * Ist der Index 0, wird er am Anfang eingefügt (und damit auch vor Text-Knoten). Bei allen anderen Index Werten wird die\r\n * Position relativ zu der Anzahl der Elemente (ohne Text-Knoten) ausgewertet\r\n * @param parentControl\r\n * @param insertIdx\r\n * @param content\r\n */\r\nfunction dwDomInsertChild(parentControl, insertIdx, content) {\r\n    insertIdx = parseInt(insertIdx); // sicher ist sicher ...\r\n\r\n    var isAppend = ((insertIdx == 0) && (parentControl.childNodes.length == 0)) ||\r\n                   ((insertIdx > 0) && (insertIdx == dwDomGetElementChildNodes(parentControl).length));\r\n\r\n    if (isAppend) {\r\n        dwDomAppendChild(parentControl, content);\r\n    } else {\r\n        var newChildNode = dwDomParseStringToNodes(content);\r\n        if (insertIdx == 0) {\r\n            // Normalerweise wird der Knoten relativ zu den Elementen eingruppiert. Index 0 ist die Ausnahme ...\r\n            // Es muss mindestens einen Unterknoten geben (ansonsten wäre isAppend getriggert worden)\r\n            parentControl.insertBefore(newChildNode, parentControl.childNodes[insertIdx]);\r\n        } else {\r\n            var elementChildNodes = dwDomGetElementChildNodes(parentControl);\r\n            parentControl.insertBefore(newChildNode, elementChildNodes[insertIdx]);\r\n        }\r\n    }\r\n}\r\n\r\nfunction dwDomReplaceChild(parentControl, childIdx, content) {\r\n    var replaceableChild = dwDomGetChildAtIndex(parentControl, childIdx);\r\n    if (replaceableChild == null) {\r\n        throw (\"Insert failed. Cell index to replace could not be accessed\\nParent(inner): '\" + parentControl.innerHTML + \"'\\nIndex: \" + childIdx);\r\n    }\r\n    var newChild = dwDomParseStringToNodes(content);\r\n    parentControl.replaceChild(newChild, replaceableChild);\r\n}\r\n\r\n/**\r\n * Verschiebt das durch Index vorgegebene Kindelement an die erste Position (vor alle anderen Elemente *und* Textknoten)\r\n */\r\nfunction dwDomMoveToFront(parentControl, index) {\r\n    index = parseInt(index); // sicher ist sicher...\r\n    var childNodes = parentControl.childNodes;\r\n    if (childNodes.length == 1) {\r\n        // es gibt nur das eine Kind, nichts zu tun\r\n        return;\r\n    }\r\n    var child = dwDomGetChildAtIndex(parentControl, index);\r\n    // Kind entfernen\r\n    dwDomRemoveChild(parentControl, index);\r\n    // vor dem ersten Knoten wieder einfügen\r\n    parentControl.insertBefore(child, parentControl.childNodes[0]);\r\n}\r\n\r\n/**\r\n * Verschiebt das durch Index vorgegebene Kindelement an die letzte Position (hinter alle anderen Elemente *und* Textknoten)\r\n */\r\nfunction dwDomMoveToBack(parentControl, index) {\r\n    index = parseInt(index); // sicher ist sicher...\r\n    var childNodes = parentControl.childNodes;\r\n    if (childNodes.length == 1) {\r\n        // es gibt nur das eine Kind, nichts zu tun\r\n        return;\r\n    }\r\n    var child = dwDomGetChildAtIndex(parentControl, index);\r\n    // Kind entfernen\r\n    dwDomRemoveChild(parentControl, index);\r\n    // hinten wieder anhängen\r\n    parentControl.appendChild(child);\r\n}\r\n\r\n/**\r\n * Vertauscht zwei durch Indizes gegebene Kindelemente\r\n */\r\nfunction dwDomSwitchChildren(parentControl, index1, index2) {\r\n    index1 = parseInt(index1); // sicher ist sicher ...\r\n    index2 = parseInt(index2); // sicher ist sicher ...\r\n    // richtige Reihenfolge sicherstellen\r\n    if (index1 > index2) {\r\n        var dummy = index1;\r\n        index1 = index2;\r\n        index2 = dummy;\r\n    }\r\n    var child1 = dwDomGetChildAtIndex(parentControl, index1);\r\n    if (child1 == null) {\r\n        throw (\"Switching failed. Cell index could not be accessed\\nParent(inner): '\" + parentControl.innerHTML + \"'\\nIndex: \" + index1);\r\n    }\r\n    var child2 = dwDomGetChildAtIndex(parentControl, index2);\r\n    if (child2 == null) {\r\n        throw (\"Switching failed. Cell index could not be accessed\\nParent(inner): '\" + parentControl.innerHTML + \"'\\nIndex: \" + index2);\r\n    }\r\n    var elementChildNodes = dwDomGetElementChildNodes(parentControl);\r\n    dwDomRemoveChild(parentControl, index1);\r\n    parentControl.insertBefore(child2, elementChildNodes[index1]);\r\n    dwDomRemoveChild(parentControl, index2);\r\n    if (index2 == elementChildNodes.length) {\r\n        // Element am Ende anhängen\r\n        parentControl.appendChild(child1);\r\n    } else {\r\n        parentControl.insertBefore(child1, elementChildNodes[index2]);\r\n    }\r\n}\r\n\r\n/**\r\n * Entfernt den Kindknoten an Index-Position 'itemIdx' des ParentControls.\r\n * Wird der Methode kein 'itemIdx' übergeben, wird der letzte Kindknoten gelöscht\r\n * @param parentControl\r\n * @param itemIdx\r\n */\r\nfunction dwDomRemoveChild(parentControl, itemIdx) {\r\n    var nodes = dwDomGetElementChildNodes(parentControl);\r\n    if (itemIdx == undefined) {\r\n        itemIdx = nodes.length - 1;\r\n    }\r\n    dwDomRemoveChildren(nodes, itemIdx, 1);\r\n}\r\n\r\n/**\r\n * Setzt eine Javascript-Methode für einen Event-Typ.\r\n * Registrierte Methoden, die bislang diesem Event-Typ zugeordnet waren, werden bei dieser Aktion gelöscht.\r\n * @param control\r\n * @param eventType\r\n * @param method\r\n */\r\nfunction dwDomSetEvent(control, eventType, method, withEventBubbling) {\r\n    var fullMethodBlock = \"dwFwPreEv(event,\" + withEventBubbling + \",this);\" + // Methode wird per default vor den eigentlichen Event-Methoden ausgeführt\r\n                          method +\r\n                          \";dwFwPostEv(event)\"; // Methode wird per default nach den eigentlichen Event-Methoden ausgeführt\r\n    var actualMethodBlock = (method.length == 0) ? method : fullMethodBlock; // Gibt es keine Methode mehr, ist Bubbling erlaubt (kein pre/post)\r\n\r\n    if ((!framework_isIE7) && control.setAttribute) {\r\n        control.setAttribute(eventType, actualMethodBlock);\r\n    } else {\r\n        // IE7 kann keine Attribute setzen, die auch als Property zugreifbar sind (z.B. Event Handler wie onclick, ...)\r\n        // Elemente wie 'document' haben kein setAttribute - hier muss weiterhin mit eval gearbeitet werden\r\n        // um das Event browserübergreifend zu setzen ...\r\n        eval(\"control.\" + eventType + \" = function (event) {\" + actualMethodBlock + \"};\");\r\n    }\r\n}\r\n\r\n\r\n/**\r\n * Registriert eine Javascript-Methode für einen Event-Typ.\r\n * Ist für diesen Event-Typ noch kein Event-Handler eingerichtet, wird das Event ohne Prüfung gesetzt\r\n * Ist diese Methode (identische Signatur) bereits für diesen Event-Typ registriert, wird der Befehl ignoriert.\r\n *\r\n * Es kann sein, dass Änderungen an den Event-Typ Registrierungen nicht durch Browser-Tools (DeveloperToolbar, Firebug) erkennbar sind.\r\n * Dies kann zu einer Abweichung in der HTML Struktur zwischen Ajax- und nicht-Ajax führen.\r\n * @param control\r\n * @param eventType\r\n * @param method\r\n */\r\nfunction dwDomAddEvent(control, eventType, method, withEventBubbling) {\r\n    var eventHandler = dwDomGetEventsForType(control, eventType, true);\r\n    if (eventHandler == null || eventHandler == undefined) {\r\n        // Kein Eventhandler für diesen Typ registriert. Event wird ohne weitere Prüfung gesetzt\r\n        dwDomSetEvent(control, eventType, method, withEventBubbling);\r\n        return;\r\n    }\r\n    if (eventHandler.indexOf(method) >= 0) {\r\n        return;\r\n    } // Identische Signatur. Keine weitere Aktion notwendig\r\n    if ((eventHandler != \"\") && (!dwUtilsStringEndsWith(eventHandler, \";\", false))) {\r\n        eventHandler += \";\";\r\n    } // Jede Javascript-Methode muss mit einem \";\" enden.\r\n    eventHandler += method;\r\n    dwDomSetEvent(control, eventType, eventHandler, withEventBubbling);\r\n}\r\n\r\n/**\r\n * Entfernt die Methode für den Event-Typ.\r\n * Ist die Methode bislang nicht registriert gewesen, wird der Befehl ignoriert.\r\n * @param control\r\n * @param eventType\r\n * @param method\r\n */\r\nfunction dwDomRemoveEvent(control, eventType, method) {\r\n    var eventHandler = dwDomGetEventsForType(control, eventType, true);\r\n    if (eventHandler == null || eventHandler == undefined) {\r\n        return;\r\n    }\r\n    if (method.indexOf(\"(\") < 0) {\r\n        // Signatur der Methode muss vollständig sein, um sie zu löschen.\r\n        // Erste Methode mit diesem Methoden-Namen wird ermittelt und gelöscht (inklusive Methoden-Parameter)\r\n        dwDomRemoveEventIgnoringSignature(control, eventType, method);\r\n        return;\r\n    }\r\n    eventHandler = eventHandler.replace(method, \"\");\r\n    while (eventHandler.length >= 2) {\r\n        var last = eventHandler[eventHandler.length - 1];\r\n        var secondLast = eventHandler[eventHandler.length - 2];\r\n        if ((last == ';') && (secondLast == ';')) {\r\n            eventHandler = eventHandler.substring(0, eventHandler.length - 1);\r\n        } else {\r\n            break;\r\n        }\r\n    }\r\n    dwDomSetEvent(control, eventType, eventHandler, false);\r\n}\r\n\r\nfunction dwDomAddEventListener(element, eventType, func, useCapture) {\r\n    if (dwUtilsStringStartsWith(eventType, \"on\", false)) {\r\n        eventType = dwUtilsStringAfter(eventType, \"on\");\r\n    }\r\n    if (element.addEventListener) {\r\n        element.addEventListener(eventType, func, useCapture);\r\n    } else if (element.attachEvent) {\r\n        element.attachEvent(\"on\" + eventType, func);\r\n    }\r\n}\r\n\r\nfunction dwDomRemoveEventListener(element, eventType, func) {\r\n    if (dwUtilsStringStartsWith(eventType, \"on\", false)) {\r\n        eventType = dwUtilsStringAfter(eventType, \"on\");\r\n    }\r\n    if (element.removeEventListener) {\r\n        element.removeEventListener(eventType, func, false);\r\n    } else if (element.detachEvent) {\r\n        element.detachEvent(\"on\" + eventType, func);\r\n    }\r\n}\r\n\r\n/**\r\n * Entfernt eine Methode (unabhängig der Methoden-Parameter)\r\n *\r\n * @param control\r\n * @param eventType\r\n * @param methodWithoutSignature\r\n */\r\nfunction dwDomRemoveEventIgnoringSignature(control, eventType, methodWithoutSignature) {\r\n    var eventHandler = dwDomGetEventsForType(control, eventType, true);\r\n    if (eventHandler == null || eventHandler == undefined) {\r\n        return;\r\n    }\r\n    if (eventHandler.indexOf(methodWithoutSignature + \"(\") > -1) {\r\n        var startIdx = eventHandler.indexOf(methodWithoutSignature);\r\n        var endIdx = -1;\r\n        var inStringChar = null;\r\n        var isInString = inStringChar != null;\r\n        var parentheses = new Array();\r\n        for (var i = (startIdx + methodWithoutSignature.length); i < eventHandler.length; i++) {\r\n            var aChar = eventHandler.charAt(i);\r\n            var isEscaped = (aChar == \"\\\\\");\r\n            if (isEscaped) {\r\n                i++;\r\n                aChar = eventHandler.charAt(i);\r\n            }\r\n\r\n            if ((aChar == \"'\") || (aChar == \"\\\"\")) {\r\n                if (isEscaped) {\r\n                    continue;\r\n                } else {\r\n                    if (inStringChar == aChar) {\r\n                        inStringChar = null;\r\n                    } else if (inStringChar == null) {\r\n                        inStringChar = aChar;\r\n                    }\r\n                    isInString = inStringChar != null;\r\n                    continue;\r\n                }\r\n            }\r\n\r\n            if (aChar == \"(\" && !isInString) {\r\n                parentheses.push(parentheses.length + \"\");\r\n            }\r\n            if (aChar == \")\" && !isInString) {\r\n                parentheses.pop();\r\n            }\r\n            if (aChar == \";\") {\r\n                if (!isInString && (parentheses.length == 0)) {\r\n                    endIdx = i;\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n        var method = eventHandler.substring(startIdx, endIdx + 1);\r\n        dwDomRemoveEvent(control, eventType, method);\r\n    }\r\n}\r\n\r\n/**\r\n * Entfernt den Event-Typ (und damit alle registrierten Javascript-Methoden für diesen Typ)\r\n *\r\n * @param control\r\n * @param eventType\r\n */\r\nfunction dwDomRemoveEventType(control, eventType) {\r\n    eval(\"control.\" + eventType + \"=''\");\r\n    control.removeAttribute(eventType);\r\n}\r\n\r\n/**\r\n * Liefert alle registrierten Event-Methoden für den gewünschten Event-Typ (z.B. onmouseover) auf dem Control\r\n *\r\n * @param control\r\n * @param eventType\r\n * @param doStrip : boolean Indikator, ob der umrahmende Funktions-String entfernt werden soll\r\n */\r\nfunction dwDomGetEventsForType(control, eventType, doStrip) {\r\n    var eventHandler = null;\r\n    if (control.getAttribute) {\r\n        eventHandler = control.getAttribute(eventType);\r\n    } else {\r\n        // Bei 'document' oder ähnlichen Elementen gibt es diese Methode nicht. Wir versuchen das Event direkt auszulesen\r\n        eventHandler = eval(\"control.\" + eventType);\r\n    }\r\n    if (eventHandler != null && doStrip) {\r\n        eventHandler = dwUtilsStripFromFunction(eventHandler, true, true);\r\n    }\r\n    return eventHandler;\r\n}\r\n\r\nfunction dwDomAddAttributeEventListener(control, attribute, listener) {\r\n    if (control) {\r\n        if (control.addEventListener) { // W3C - unterstützt durch alle Browser >= IE9\r\n            control.addEventListener(\"DOMAttrModified\", listener, false);\r\n        } else if (control.attachEvent) { // veraltete Browser ...\r\n            control.attachEvent(\"onpropertychange\", listener);\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * Scrollt innerhalb eines Scroll Containers (GuiScrollpane) zu einem Knoten, der durch den Index innerhalb des Controls (z.B. Tree) ermittelt wird\r\n *\r\n * @param scrollContainerId uniqueId des Scroll Containers (GuiScrollpane)\r\n * @param controlId uniqueId des Controls in dem der gesuchte Knoten liegt\r\n * @param navigationPath pfad ausgehend vom control bis zum parent des durch den nodeIndex gesuchten Elements\r\n * @param nodeIndex Knotenindex innerhalb des Controls\r\n */\r\nfunction dwDomScrollToNode(scrollContainerId, controlId, navigationPath, nodeIndex) {\r\n    var scrollContainer = $(scrollContainerId);\r\n    if (!scrollContainer) {\r\n        return;\r\n    }\r\n    if (scrollContainer.style.overflow == \"hidden\") {\r\n        scrollContainer = getScrollingChildByBreadthFirstSearch(scrollContainer);\r\n    }\r\n    var control = $(controlId);\r\n    if (!control) {\r\n        return;\r\n    }\r\n    control = dwDomFindContainer(control, navigationPath, true);\r\n    if (!control) {\r\n        return;\r\n    }\r\n    var node = dwDomGetChildAtIndex(control, nodeIndex); // HTML Element an Index 'nodeIndex' - relativ zu Control\r\n    var coords = dwUtilsGetCoords(node, scrollContainer);\r\n    var offsetTop = coords.y;\r\n    var offsetLeft = coords.x;\r\n\r\n    if (control.className && control.className == \"guitable_row\") {\r\n        // In diesem Fall müssen wir um den Headerhöhe weiter runter, weil der Header die oberste Zeile verdeckt\r\n        offsetTop -= 25;\r\n    }\r\n\r\n    scrollContainer.scrollTop = offsetTop;\r\n    scrollContainer.scrollLeft = offsetLeft;\r\n    var id = scrollContainer.id;\r\n    var scrollTopInput = $(id + \"_scrollTop\"); // siehe GuiScrollpane - muss immer gefunden werden\r\n    var scrollLeftInput = $(id + \"_scrollLeft\");\r\n    if ((scrollTopInput != null) && (scrollLeftInput != null)) {\r\n        // Bei GuiScrollpane werden Input Controls generiert, in denen die aktuelle Scrolling Position steht\r\n        // Sobald dieses Control zur UniqueId gefunden wird, aktualisieren wir die gespeicherte Scrolling\r\n        // Position\r\n        dwHelperScrollPaneValueChanged(id);\r\n    }\r\n}\r\n\r\n/**\r\n * Scrollt innerhalb einer Liste (<select>) zur angegebenen Indexposition\r\n * @param controlId\r\n * @param nodeIndex\r\n */\r\nfunction dwDomScrollToListEntry(controlId, nodeIndex) {\r\n    var control = $(controlId);\r\n    if (framework_isIE) {\r\n        // in IE sind die offset-Werte der Listenelemente 0. Daher können wir hier nicht einfach\r\n        // offsetTop verwenden oder über offsetHeight die Scrollhöhe berechnen. Wir verwenden daher die\r\n        // FontSize der Liste zusammen mit dem Faktor 1.2 für die LineHeight. Dieser Faktor wird vom IE verwendet,\r\n        // wenn die LineHeight den Standardwert \"normal\" hat. Da wir im Framework die LineHeight nicht setzen\r\n        // (außer beim Separator, der aber nicht Vorfahre einer Liste sein kann), können wir davon ausgehen,\r\n        // dass die LineHeight auf \"normal\" steht. Sollte LineHeight im Framework irgendwann verwendet werden,\r\n        // müsste hier noch eine entsprechende Abfrage dazukommen.\r\n        var fontSize = dwUtilsGetStyle(control, \"font-size\");\r\n        var lineHeightFactor = 1.2;\r\n        var fontSizeNumber = parseInt(fontSize);\r\n        var size = lineHeightFactor * fontSizeNumber;\r\n        var sizeRounded = Math.round(size);\r\n        var scrollTop = sizeRounded * nodeIndex\r\n        control.scrollTop = scrollTop;\r\n    } else {\r\n        var node = dwDomGetChildAtIndex(control, nodeIndex); // HTML Element an Index 'nodeIndex' - relativ zu Control\r\n        control.scrollTop = node.offsetTop;\r\n    }\r\n\r\n}\r\n\r\n/**\r\n * Scrollt zu einem HTML Kind-Knoten anhand der Id. Kind Element wird oberstes sichtbares Element im Scrollbereich\r\n * @param controlId ID des Scroll-Containers\r\n * @param childId ID des Kind-Knotens\r\n */\r\nfunction dwDomScrollToListNode(controlId, childId) {\r\n    var control = $(controlId);\r\n    var child = $(childId);\r\n    var coords = dwUtilsGetCoords(child, control);\r\n    control.scrollTop = coords.y;\r\n    //update vom $controlId_scrollTop - wird dan zB. von dwHelperScrollToStoredPosition verwendet\r\n    var scrollTopTextField = $(controlId + \"_scrollTop\");\r\n    if (scrollTopTextField != null) {\r\n        scrollTopTextField.value = coords.y;\r\n    }\r\n\r\n}\r\n\r\n/**\r\n * Verschiebt einen Knoten innerhalb eines Parent Containers von Index oldChildIndex nach newChildIndex\r\n * Sind beide Indizes identisch wird keine Aktion durchgeführt\r\n * @param container\r\n * @param oldChildIndex\r\n * @param newChildIndex\r\n */\r\nfunction dwDomMoveNode(container, oldChildIndex, newChildIndex) {\r\n    if (oldChildIndex == newChildIndex) {\r\n        return; // nichts zu tun\r\n    }\r\n    var nodeChildren = dwDomGetElementChildNodes(container);\r\n    var doAppend = (newChildIndex == (nodeChildren.length - 1)); // Knoten soll als letzter Kind-Knoten eingehängt werden\r\n    var nodeAtOldIndex = nodeChildren[oldChildIndex];\r\n    var node = container.removeChild(nodeAtOldIndex);\r\n    nodeChildren = dwDomGetElementChildNodes(container);\r\n    var nodeAtNewIndex = nodeChildren[newChildIndex];\r\n    if (doAppend) {\r\n        // Neuer Knoten muss am Ende eingehängt werden (append)\r\n        container.appendChild(node);\r\n    } else {\r\n        // Neuer Knoten wird in der Liste der Kinder eingehängt.\r\n        container.insertBefore(node, nodeAtNewIndex);\r\n    }\r\n}\r\n\r\n/**\r\n * Liefert alle Kinder-Knoten vom typ \"Element\".\r\n *\r\n * Im Firefox wird meist ein leerer Textknoten vor dem ersten Element-Knoten im DOM eingebaut.\r\n * Dies wirkt sich auf alle Aktionen aus, auf die mit Hilfe eines Index auf einen Kind-Knoten zugegriffen wird (insert/remove)\r\n * @param parentControl\r\n */\r\nfunction dwDomGetElementChildNodes(parentControl) {\r\n    if (framework_isIE7 || framework_isIE8) {\r\n        // In alten Browsern (IE8 oder älter) werden bei element.children auch Kommentar-Knoten zurückgeliefert ...\r\n        return dwDomGetChildNodesByType(parentControl, DWUTILS_NODE_TYPE.ELEMENT);\r\n    } else {\r\n        // Vernünftige Browser können direkt children verwenden (im Gegensatz zu childNodes sind in children nur Elemente\r\n        return (parentControl.children || new Array());\r\n    }\r\n}\r\n\r\nfunction dwDomGetChildNodesByType(parentControl, nodeType) {\r\n    var nodes = new Array();\r\n    if (parentControl == null) {\r\n        return nodes;\r\n    }\r\n    for (var i = 0; i < parentControl.childNodes.length; i++) {\r\n        var childNode = parentControl.childNodes[i];\r\n        if (childNode.nodeType == nodeType) {\r\n            nodes.push(childNode);\r\n        }\r\n    }\r\n    return nodes;\r\n}\r\n\r\n/**\r\n * Liefert zurück, ob ein Element enthalten ist\r\n *\r\n * @param parentControl\r\n * @param node\r\n * @return {Boolean}\r\n */\r\nfunction dwDomHasChildNode(parentControl, node) {\r\n    if (parentControl == null) {\r\n        return false;\r\n    }\r\n    for (var i = 0; i < parentControl.childNodes.length; i++) {\r\n        if (parentControl.childNodes[i] == node) {\r\n            return true;\r\n        }\r\n    }\r\n    return false;\r\n}\r\n\r\n/**\r\n * Liefert das erste \"Element\"\r\n *\r\n * Im Firefox wird meist ein leerer Textknoten vor dem ersten Element-Knoten im DOM eingebaut.\r\n * Dies wirkt sich auf alle Aktionen aus, auf die mit Hilfe eines Index auf einen Kind-Knoten zugegriffen wird (insert/remove)\r\n * @param parentControl\r\n */\r\nfunction dwDomGetFirstElementChild(parentControl) {\r\n    return dwDomGetFirstChildNodeByType(parentControl, DWUTILS_NODE_TYPE.ELEMENT);\r\n}\r\n\r\nfunction dwDomGetFirstChildNodeByType(parentControl, nodeType) {\r\n    if (parentControl == null) {\r\n        return null;\r\n    }\r\n    for (var i = 0; i < parentControl.childNodes.length; i++) {\r\n        if (parentControl.childNodes[i].nodeType == nodeType) {\r\n            return parentControl.childNodes[i];\r\n        }\r\n    }\r\n    return null;\r\n}\r\n\r\nfunction dwDomSetListSelection(control, selectedIndices) {\r\n    for (var idx = 0; idx < control.options.length; idx++) {\r\n        var option = control.options[idx];\r\n        var shouldBeSelected = dwUtilsIsInArray(selectedIndices, idx);\r\n        if (option.selected && !shouldBeSelected) {\r\n            option.selected = false;\r\n        } else if (!option.selected && shouldBeSelected) {\r\n            option.selected = true;\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * Setzt die Selektion auf den einzelnen Listen-Einträgen und aktualisiert das Textfeld mit der Auflistung der selektierten Einträge\r\n * Liste generiert mit HtmlListRenderer. Jeder Listen-Eintrag ein Attribut zum Auslesen der aktuellen Selektion aufweisen (checked, selected\r\n * @param control\r\n * @param listUniqueId\r\n * @param selectedIndices array : Array von Indizes, die selektiert werden sollen\r\n * @param attribute string : Attribut-Key zum auslesen des Selektionszustandes (checked, selected)\r\n */\r\nfunction dwDomSetCustomListSelection(control, listUniqueId, selectedIndices, attribute, updateDisplay) {\r\n    var listControl = $(listUniqueId);\r\n    var nodeTag = listControl.getAttribute(\"nodeTag\");\r\n    var listEntries = listControl.getElementsByTagName(nodeTag);\r\n    var listSize = listEntries.length;\r\n    for (var idx = 0; idx < listSize; idx++) {\r\n        var entry = listEntries[idx];\r\n        var shouldBeSelected = dwUtilsIsInArray(selectedIndices, idx);\r\n        var isSelected = dwDomGetDomAttribute(entry, attribute);\r\n        if (typeof isSelected == \"string\") {\r\n            isSelected = (isSelected == \"true\");\r\n        }\r\n        if (isSelected && !shouldBeSelected) {\r\n            dwDomRemoveDomAttribute(entry, attribute);\r\n        } else if (!isSelected && shouldBeSelected) {\r\n            dwDomSetDomAttribute(entry, attribute, \"true\");\r\n        }\r\n    }\r\n    var selectedIndicesString = selectedIndices.join(\"|\");\r\n    var uniqueId = control.id;\r\n    $(listUniqueId + \"_selectedindices\").value = selectedIndicesString;\r\n    dwHelperHighlightListIndices(uniqueId, listUniqueId, selectedIndicesString);\r\n    if (updateDisplay) {\r\n        var renderMode = listControl.getAttribute(\"renderMode\");\r\n        dwHelperUpdateComboboxValue(uniqueId, listUniqueId, renderMode);\r\n    }\r\n\r\n}\r\n\r\nfunction dwDomSetDomText(control, text, escape) {\r\n    if (dwUtilsStringStartsWith(text, \"<html>\", false) && dwUtilsStringEndsWith(text, \"</html>\", false)) {\r\n        text = text.substring(6, text.length - 7);\r\n        escape = false;\r\n    }\r\n    if (!escape) {\r\n        control.innerHTML = text;\r\n    } else {\r\n        dwDomRemoveAllChildNodes(control);\r\n        if (text.length > 0) {\r\n            // ältere IE Browser legen für leere Text-Inhalte keine Knoten an ...\r\n            var textNode = document.createTextNode(text);\r\n            control.appendChild(textNode);\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * Setzt einen Text neben einem DOM Element. Der Text kann auch HTML Fragmente beinhalten (z.B. GuiLabel Texte)\r\n * @param control\r\n * @param text\r\n * @param escape\r\n */\r\nfunction dwDomSetDomNextSiblingText(control, text, escape) {\r\n    if (dwUtilsStringStartsWith(text, \"<html>\", false) && dwUtilsStringEndsWith(text, \"</html>\", false)) {\r\n        text = text.substring(6, text.length - 7);\r\n        escape = false;\r\n    }\r\n    if (!control) { // sollte nicht vorkommen\r\n        return;\r\n    }\r\n\r\n    var parent = control.parentNode;\r\n    var siblingIndex = dwDomGetIndexOfNodeEntry(control) + 1;\r\n    dwDomRemoveChildNodes(parent, siblingIndex);\r\n    if (text.length == \"\") { // Alt-Informationen komplett entfernt. Nichts neues anzufügen\r\n        return;\r\n    }\r\n    if (!escape) { // Texte wie \"&uuml;\" dürfen nicht escaped werden (würde zu \"&amp;uuml;\")\r\n        var priorContent = parent.innerHTML;\r\n        parent.innerHTML = priorContent + text;\r\n    } else { // keine HTML Notation im Text - ein einfacher Text-Knoten ist ausreichend\r\n        var textNode = document.createTextNode(text);\r\n        parent.appendChild(textNode);\r\n    }\r\n}\r\n\r\n/**\r\n * Fügt Class Names zum Class-Attribut über Javascript Notation hinzu.\r\n *\r\n * Vorhandene Class Names bleiben dem Control erhalten.\r\n * @param control\r\n * @param newClassNames leerzeichen separierte Liste von Classnames\r\n */\r\nfunction dwDomAddClass(control, newClassNames) {\r\n    var classNames = \"\";\r\n    if (control.className) {\r\n        classNames = control.className;\r\n        if (!dwUtilsStringEndsWith(classNames, \" \", false)) {\r\n            classNames += \" \";\r\n        }\r\n    }\r\n    classNames += newClassNames;\r\n    control.className = classNames;\r\n}\r\n\r\n/**\r\n * Entfernt einen oder mehrere Class Names aus dem Class Attribut\r\n *\r\n * @param control\r\n * @param removeableClassNames  leerzeichen separierte Liste von Classnames\r\n */\r\nfunction dwDomRemoveClass(control, removeableClassNames) {\r\n    if (control.className) {\r\n        if (removeableClassNames == control.className) {\r\n            control.className = \"\";\r\n            return;\r\n        }\r\n        var classNamesToRemove = dwUtilsSplit(removeableClassNames, \" \", false);\r\n        // Es gibt ein 'class' Attribut\r\n        var classNames = dwUtilsSplit(control.className, \" \", false);\r\n        var classNamesAfterRemoval = new Array();\r\n        for (var i = classNames.length - 1; i >= 0; i--) {\r\n            if (!dwUtilsIsInArray(classNamesToRemove, classNames[i])) {\r\n                classNamesAfterRemoval.push(classNames[i]);\r\n            }\r\n        }\r\n        control.className = classNamesAfterRemoval.join(\" \");\r\n    }\r\n}\r\n\r\nfunction dwDomRemoveNodeById(controlId) {\r\n    var control = $(controlId);\r\n    if (control != null) {\r\n        var parentNode = control.parentNode;\r\n        if (parentNode != null) { // NULL bei 'body' möglich\r\n            parentNode.removeChild(control);\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * Entfernt das Attribut\r\n * @param control\r\n * @param key\r\n */\r\nfunction dwDomRemoveDomAttribute(control, key) {\r\n    try {\r\n        control[key] = null; // Wert zurücksetzen\r\n        delete control[key]; // Wertn entfernen. Setzt voraus, dass die Eigenschaften des Controls als 'assoziatives Array' verwaltet werden\r\n    } catch (exception) {\r\n        // Fallback wird unten auf jeden Fall überprüft\r\n    }\r\n    // Fallback. Wert wird als Attribut aus dem DOM Baum entfernt (ausserhalb des assoziativen Arrays)\r\n    control.removeAttribute(key);\r\n}\r\n\r\n/**\r\n * Setzt den Attribut-Wert\r\n *\r\n * Der Wert wird einerseits in der \".\" Notation gesetzt, und zudem als setAttribute.\r\n * Notwendig, da abhängig vom Browser / Attribut eine andere Notation vom Browser ausgewertet wird.\r\n * @param control\r\n * @param key\r\n * @param value numeric_or_string_or_bool Wert der gesetzt werden soll. Muss bereits in den erwarteten Typ umgewandelt sein\r\n */\r\nfunction dwDomSetDomAttribute(control, key, value) {\r\n    try {\r\n        // Setzt voraus, dass die Eigenschaften des Controls als 'assoziatives Array' verwaltet werden\r\n        control[key] = value;\r\n    } catch (exception) {\r\n        // Fallback wird unten auf jeden Fall gesetzt\r\n    }\r\n    // Fallback. Wert wird als Attribut dem DOM Baum hinzugefügt (ausserhalb des assoziativen Arrays)\r\n    control.setAttribute(key, value);\r\n}\r\n\r\n/**\r\n * Liefert den Attribut-Wert zurück\r\n * @param control\r\n * @param key\r\n */\r\nfunction dwDomGetDomAttribute(control, key) {\r\n    if (!control) {\r\n        if (framework_isDevelopment) {\r\n            throw (\"dwDomGetDomAttribute: control is null. Params: control = \" + control + \", Key = \" + key);\r\n        } else {\r\n            // In einer Produktiv-Umgebung versuchen wir den fehlerhaften Aufruf zu schlucken\r\n            return \"\";\r\n        }\r\n    }\r\n    try {\r\n        var value = control[key];\r\n        if (value != undefined) {\r\n            return value;\r\n        }\r\n        if (control.getAttribute) {\r\n            return control.getAttribute(key);\r\n        } else {\r\n            // In einer Produktiv-Umgebung versuchen wir den fehlerhaften Aufruf zu schlucken.\r\n            // In der Entwicklungsumgebung ist es hingegen interessant die Ursachen für den fehlerhaften Aufruf zu ermitteln\r\n            return framework_isDevelopment ? null : \"\";\r\n        }\r\n    } catch (exception) {\r\n        // Fehler bei Aufruf der Named Properties\r\n        if (control.getAttribute) {\r\n            return control.getAttribute(key);\r\n        } else {\r\n            // In einer Produktiv-Umgebung versuchen wir den fehlerhaften Aufruf zu schlucken.\r\n            // In der Entwicklungsumgebung ist es hingegen interessant die Ursachen für den fehlerhaften Aufruf zu ermitteln\r\n            return framework_isDevelopment ? null : \"\";\r\n        }\r\n    }\r\n}\r\n\r\nfunction dwDomGetDomAttributeOrDefault(control, key, defaultValue) {\r\n    if (control == null) {\r\n        return defaultValue;\r\n    }\r\n    var val = dwDomGetDomAttribute(control, key);\r\n    return (val != null) ? val : defaultValue;\r\n}\r\n\r\nfunction dwDomHasAttribute(control, attrib) {\r\n    if (control.hasAttribute) {\r\n        return control.hasAttribute(attrib);\r\n    } else if (control.nodeType && (control.nodeType == DWUTILS_NODE_TYPE.ELEMENT)) { // Nicht alle Objekte haben getAttribute Methode (z.B. document / text nodes / ...)\r\n        // Impliziter Cast von Objekten zu 'true' kann nicht fehlerfrei angewendet werden.\r\n        // Undefined, NULL, NaN, 0 und \"\" werden als false interpretiert. Leerstring (oder ggf \"0\") könnten falsch interpretiert werden\r\n        var value = control.getAttribute(attrib);\r\n        return (typeof value != \"undefined\") && (value != null);\r\n    } else {\r\n        return false;\r\n    }\r\n}\r\n\r\n/**\r\n * Erweitert den Attribut-Wert\r\n * @param control\r\n * @param key\r\n * @param valueToAppend\r\n */\r\nfunction dwDomAppendDomAttributeValue(control, key, valueToAppend) {\r\n    try {\r\n        var oldValue = control[key];\r\n        if (!oldValue) {\r\n            oldValue = \"\";\r\n        }\r\n        control[key] = oldValue + valueToAppend;\r\n    } catch (exception) {\r\n        oldValue = control.getAttribute(key);\r\n        if (!oldValue) {\r\n            oldValue = \"\";\r\n        }\r\n        control.setAttribute(oldValue + valueToAppend);\r\n    }\r\n\r\n}\r\n\r\nfunction dwDomSetBrowserTitle(text) {\r\n    document.title = text;\r\n}\r\n\r\nfunction dwDomSelectInTextField(control, all, startPos, endPos) {\r\n    if (all) {\r\n        control.select();\r\n    } else {\r\n        if (control.setSelectionRange) {\r\n            control.style.visibility = \"visible\";\r\n            control.focus();\r\n            control.setSelectionRange(startPos, endPos);\r\n        } else if (control.createTextRange) {\r\n            var range = control.createTextRange();\r\n            range.moveStart(\"character\", startPos);\r\n            range.moveEnd(\"character\", endPos - control.value.length);\r\n            range.select();\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * Setzt das Fav Icon\r\n * @param iconUrl\r\n */\r\nfunction dwDomSetFavIcon(iconUrl) {\r\n    var head = document.getElementsByTagName(\"head\")[0];\r\n    var link = dwDomGetFavIcon();\r\n    if (!link) {\r\n        link = document.createElement(\"link\");\r\n        dwDomSetDomAttribute(link, \"rel\", \"shortcut icon\");\r\n        head.appendChild(link);\r\n    }\r\n    dwDomSetDomAttribute(link, \"href\", iconUrl);\r\n}\r\n\r\nfunction dwDomGetFavIcon() {\r\n    var head = document.getElementsByTagName(\"head\")[0];\r\n    var linkTags = head.getElementsByTagName(\"link\");\r\n    for (var i = 0; i < linkTags.length; i++) {\r\n        var link = linkTags[i];\r\n        if (link.rel == \"shortcut icon\") {\r\n            return link;\r\n        }\r\n    }\r\n    return null;\r\n}\r\n\r\n/**\r\n * Entfernt das Fav Icon aus dem HEAD - wenn es gesetzt war\r\n */\r\nfunction dwDomRemoveFavIconIfPossible() {\r\n    var link = dwDomGetFavIcon();\r\n    if (link) {\r\n        var head = document.getElementsByTagName(\"head\")[0];\r\n        head.removeChild(link);\r\n    }\r\n}\r\n\r\n/**\r\n * Setzt einen CSS Style über Javascript-Notation\r\n *\r\n * @param control\r\n * @param command\r\n */\r\nfunction dwDomSetStyle(control, key, value) {\r\n    control.style[key] = value;\r\n}\r\n\r\n/**\r\n * Entfernt einen CSS Style über Javascript-Notation\r\n * @param control\r\n * @param key\r\n */\r\nfunction dwDomRemoveStyle(control, key) {\r\n    dwDomSetStyle(control, key, \"\");\r\n}\r\n\r\n/**\r\n * Setzt das Class-Attribute über Javascript Notation.\r\n * Es können mehrere Classnames gesetzt werden (Leerzeichen separariert)\r\n *\r\n * Vorhandene Werte werden überschrieben.\r\n *\r\n * @param control\r\n * @param command\r\n */\r\nfunction dwDomSetClass(control, value) {\r\n    control.className = value;\r\n}\r\n\r\nfunction dwDomAddJavascriptListenerTag(control, objectEvent, forObjectId, methods) {\r\n    var scriptTag = document.createElement(\"script\");\r\n    scriptTag.setAttribute(\"type\", \"text/javascript\");\r\n    scriptTag.setAttribute(\"for\", forObjectId);\r\n    scriptTag.setAttribute(\"event\", objectEvent);\r\n    scriptTag.text = methods; // script kann keine Kinder haben. Der Inhalt wird direkt als TEXT gespeichert\r\n    control.appendChild(scriptTag);\r\n}\r\n\r\nfunction dwDomRemoveJavascriptListenerTag(node, objectEvent, forObjectId) {\r\n    var nodesToRemove = dwDomGetChildrenByTagname(node, \"script\", {\"event\": objectEvent, \"for\": forObjectId}, false);\r\n    for (var i = 0; i < nodesToRemove.length; i++) {\r\n        node.removeChild(nodesToRemove[i]);\r\n    }\r\n}\r\n\r\nfunction dwDomAddJavascriptFile(node, filename) {\r\n    DWDOM_PENDING_SCRIPT_FILES.push(filename);\r\n    var scriptTag = document.createElement(\"script\");\r\n    scriptTag.setAttribute(\"type\", \"text/javascript\");\r\n    scriptTag.onreadystatechange = function() {\r\n        if ((scriptTag.readyState == \"loaded\") || (scriptTag.readyState == \"complete\")) {\r\n            scriptTag.onreadystatechange = scriptTag.onload = null;\r\n            dwDomCheckScriptLibraryLoaded(scriptTag);\r\n        }\r\n    };\r\n    scriptTag.onload = function() {\r\n        scriptTag.onreadystatechange = scriptTag.onload = null;\r\n        dwDomCheckScriptLibraryLoaded(scriptTag);\r\n    };\r\n    scriptTag.setAttribute(\"src\", filename);\r\n    scriptTag.setAttribute(\"async\", \"true\");\r\n    scriptTag.setAttribute(\"defer\", \"false\");\r\n    node.appendChild(scriptTag);\r\n}\r\n\r\nfunction dwDomRemoveJavascriptFile(node, filename) {\r\n    var nodesToRemove = dwDomGetChildrenByTagname(node, \"script\", {\"src\": filename}, false);\r\n    for (var i = 0; i < nodesToRemove.length; i++) {\r\n        node.removeChild(nodesToRemove[i]);\r\n        DWDOM_PENDING_SCRIPT_FILES = dwUtilsRemoveFromArrayByText(DWDOM_PENDING_SCRIPT_FILES, filename);\r\n    }\r\n\r\n}\r\n\r\nfunction dwDomAddJavascriptTagForFunction(control, methods) {\r\n    var scriptTag = document.createElement(\"script\");\r\n    scriptTag.setAttribute(\"type\", \"text/javascript\");\r\n    scriptTag.text = methods; // script kann keine Kinder haben. Der Inhalt wird direkt als TEXT gespeichert\r\n    control.appendChild(scriptTag);\r\n}\r\n\r\nfunction dwDomCheckScriptLibraryLoaded(scriptTag) {\r\n    if (!dwDomPendingScriptFilesAccessLock) {\r\n        dwDomPendingScriptFilesAccessLock = true;\r\n        var pendingScriptFiles = new Array();\r\n        for (var i = 0; i < DWDOM_PENDING_SCRIPT_FILES.length; i++) {\r\n            if (DWDOM_PENDING_SCRIPT_FILES[i] != scriptTag.getAttribute(\"src\")) {\r\n                pendingScriptFiles.push(DWDOM_PENDING_SCRIPT_FILES[i]);\r\n            }\r\n        }\r\n        DWDOM_PENDING_SCRIPT_FILES = pendingScriptFiles;\r\n        dwDomPendingScriptFilesAccessLock = false;\r\n    }\r\n}\r\n\r\nfunction dwDomAddJavascriptFunction(newFunction) {\r\n    var functionName = dwUtilsGetFunctionName(newFunction);\r\n    eval(\"window.\" + functionName + \"=\" + newFunction);\r\n}\r\n\r\nfunction dwDomRemoveJavascriptFunction(functionToRemove) {\r\n    var functionName = dwUtilsGetFunctionName(functionToRemove);\r\n    dwDomRemoveJavascriptFunctionByName(functionName);\r\n}\r\n\r\nfunction dwDomRemoveJavascriptFunctionByName(functionName) {\r\n    window[functionName] = null;\r\n}\r\n\r\n/**\r\n * Liefert Kinder mit dem Tagname und den gewünschten Attributen zurück\r\n * @param string : tagname\r\n * @param array_of_objects : attributes\r\n * @param boolean : deepSearch wenn false, werden nur die direkten Kinder mit dem TagName zurückgeliefert,\r\n *                             wenn true werden alle Kinder rekursiv berücksichtigt\r\n */\r\nfunction dwDomGetChildrenByTagname(node, tagname, attributes, deepSearch) {\r\n    var nodesToFilter = new Array();\r\n    if (deepSearch) {\r\n        nodesToFilter = node.getElementsByTagName(tagname);\r\n    } else {\r\n        var tempNodesToFilter = dwDomGetElementChildNodes(node);\r\n        for (var tempNodeIdx = 0; tempNodeIdx < tempNodesToFilter.length; tempNodeIdx++) {\r\n            var tempNodeToFilter = tempNodesToFilter[tempNodeIdx];\r\n            if (tempNodeToFilter.tagName.toLowerCase() == tagname.toLowerCase()) {\r\n                nodesToFilter.push(tempNodeToFilter);\r\n            }\r\n        }\r\n    }\r\n    var filteredNodes = new Array();\r\n    for (var i = 0; i < nodesToFilter.length; i++) {\r\n        var nodeToFilter = nodesToFilter[i];\r\n        var isOk = true;\r\n        for (var attribName in attributes) {\r\n            var attribValue = attributes[attribName];\r\n            if (!(dwDomHasAttribute(nodeToFilter, attribName) && (nodeToFilter.getAttribute(attribName) == attribValue))) {\r\n                isOk = false;\r\n            }\r\n        }\r\n        if (isOk) {\r\n            filteredNodes.push(nodeToFilter);\r\n        }\r\n    }\r\n    return filteredNodes;\r\n}\r\n\r\nfunction dwDomGetTextContent(node, excludedTags) {\r\n    if (typeof (excludedTags) == \"undefined\") {\r\n        return node.textContent;\r\n    }\r\n    var text = \"\";\r\n    if ((node.nodeType == DWUTILS_NODE_TYPE.TEXT) || (node.nodeType == DWUTILS_NODE_TYPE.CDATA)) {\r\n        text += node.nodeValue; // Text anfügen\r\n    } else if ((node.nodeType != DWUTILS_NODE_TYPE.COMMENT) && (node.nodeName && !dwUtilsIsInArray(excludedTags, node.nodeName.toLowerCase()))) {\r\n        for (var i = 0; i < node.childNodes.length; i++) {\r\n            var childNode = node.childNodes[i];\r\n            text += dwDomGetTextContent(childNode, excludedTags);\r\n        }\r\n    }\r\n    return text;\r\n}\r\n\r\n/**\r\n * Liefert zu einem Listen-Eintrag den Wert zurück\r\n *\r\n * Manuell generierte Listen (als Ersatz für \"select\" Tag) können unterschiedliche HtmlTags für die Anzeige der Werte verwenden\r\n * Entsprechend ist die Bestimmung des \"Labels\" abhängig vom Render-Modus\r\n * @param listUniqueId\r\n * @param index\r\n * @param listRenderMode\r\n */\r\nfunction dwDomGetListEntryText(listUniqueId, index, listRenderMode) {\r\n    var entry = dwHelperGetListNodeForIndex(listUniqueId, index);\r\n    if (listRenderMode == \"checkbox\") {\r\n        var textNode = entry.nextSibling;\r\n\r\n        while ((textNode != null) && !((textNode.nodeType == DWUTILS_NODE_TYPE.ELEMENT) && (textNode.nodeName.toLowerCase() == \"span\"))) {\r\n            textNode = textNode.nextSibling; // #TEXT und img Tags überspringen\r\n        }\r\n        if (textNode != null) {\r\n            return dwUtilsUnescapeHTML(dwUtilsTrim(textNode.innerHTML));\r\n        } else {\r\n            return \"\";\r\n        }\r\n    } else if (listRenderMode == \"text\") {\r\n        if (entry.nodeType == DWUTILS_NODE_TYPE.TEXT) {\r\n            return dwUtilsUnescapeHTML(dwUtilsTrim(entry.data));\r\n        } else {\r\n            var textNode = entry.childNodes[0]; // erstes Kind-Element ist entweder ein img-Tag oder direkt das span-Tag mit dem Text\r\n\r\n            while ((textNode != null) && !((textNode.nodeType == DWUTILS_NODE_TYPE.ELEMENT) && (textNode.nodeName.toLowerCase() == \"span\"))) {\r\n                textNode = textNode.nextSibling; // #TEXT und img Tags überspringen\r\n            }\r\n            if (textNode != null) {\r\n                return dwUtilsUnescapeHTML(dwUtilsTrim(textNode.innerHTML));\r\n            } else {\r\n                return \"\";\r\n            }\r\n        }\r\n    }\r\n    return null;\r\n}\r\n\r\nfunction dwDomRemoveCustomListEntry(control, listUniqueId, index) {\r\n    var indexAsInt = parseInt(index);\r\n    var entry = dwHelperGetListNodeForIndex(listUniqueId, indexAsInt);\r\n    var parentNode = entry.parentNode;\r\n    var nextEntry = dwHelperGetListNodeForIndex(listUniqueId, indexAsInt + 1);\r\n    while ((entry.nextSibling != null) && (entry.nextSibling != nextEntry)) {\r\n        // Sibling-Knoten die zu diesem Index-Eintrag gehören\r\n        parentNode.removeChild(entry.nextSibling);\r\n    }\r\n    parentNode.removeChild(entry); // Knoten, identifiziert durch 'index' Angabe;\r\n}\r\n\r\n/**\r\n * Eintrag aus der Liste von Checkboxen entfernen. Befehle abhängig von HtmlListRenderer\r\n * @param control\r\n * @param listUniqueId\r\n * @param index\r\n */\r\nfunction dwDomRemoveCheckboxListEntry(control, listUniqueId, index) {\r\n    dwDomRemoveCustomListEntry(control, listUniqueId, index); // ggf. ist ein Bild notwendig\r\n}\r\n\r\nfunction dwDomAppendCheckboxListEntry(control, listUniqueId, checkboxHtml, imageHtml, textHtml) {\r\n    var listControl = $(listUniqueId);\r\n    dwDomAppendChild(listControl, checkboxHtml);\r\n    if (imageHtml != \"\") {\r\n        dwDomAppendChild(listControl, imageHtml);\r\n    }\r\n    dwDomAppendChild(listControl, textHtml);\r\n}\r\n\r\nfunction dwDomInsertCheckboxListEntry(control, listUniqueId, checkboxHtml, imageHtml, textHtml, index) {\r\n    var listControl = $(listUniqueId);\r\n    var listSize = dwDomGetDomAttribute(listControl, \"size\");\r\n    if (index == listSize) {\r\n        dwDomAppendCheckboxListEntry(control, listUniqueId, checkboxHtml, imageHtml, textHtml);\r\n    } else {\r\n        var oldNodeForIndex = dwHelperGetListNodeForIndex(listUniqueId, index);\r\n        var parentNode = oldNodeForIndex.parentNode;\r\n        var checkboxNode = dwDomParseStringToNodes(checkboxHtml);\r\n        var textNode = dwDomParseStringToNodes(textHtml);\r\n        parentNode.insertBefore(textNode, oldNodeForIndex);\r\n        parentNode.insertBefore(checkboxNode, textNode);\r\n        if (imageHtml != \"\") {\r\n            var imageNode = dwDomParseStringToNodes(imageHtml);\r\n            parentNode.insertBefore(imageNode, textNode);\r\n        }\r\n    }\r\n}\r\n\r\nfunction dwDomAddToFunction(functionName, commandsToAdd) {\r\n    if (!(typeof window[functionName] == \"function\")) {\r\n        // Es kann nur eine Methode modifziert werden, die bereits vorhanden ist.\r\n        // Im Fall von z.B. dwRelayout gehen wir davon aus, dass diese Methode vorher generiert worden sein muss (GuiWindow)\r\n        alert(\"Exception: Function \" + functionName + \" not found.\\n\" +\r\n              \"Failed to run dwDomAddToFunction.\");\r\n    }\r\n    var func = window[functionName].toString();\r\n    func = dwUtilsStripFromFunction(func, true, true); // function() {...} abgeschnitten\r\n    func = dwUtilsTrim(func);\r\n    if (func != \"\") {\r\n        func += DWFRAMEWORK_CLEANUP_FUNCTION_NEXT_METHOD_STRING;\r\n    }\r\n    func += commandsToAdd;\r\n    window[functionName] = new Function(func);\r\n}\r\n\r\nfunction dwDomAppendToInnerFunctionParameter(functionName, innerFunctionName, innerFunctionParameterValueToAppend) {\r\n    if (!(typeof window[functionName] == \"function\")) {\r\n        // Es kann nur eine Methode modifziert werden, die bereits vorhanden ist.\r\n        // Im Fall von z.B. dwRelayout gehen wir davon aus, dass diese Methode vorher generiert worden sein muss (GuiWindow)\r\n        alert(\"Exception: Function \" + functionName + \" not found.\\n\" +\r\n              \"Failed to run dwDomAppendToInnerFunctionParameter.\");\r\n    }\r\n    var func = window[functionName].toString();\r\n    func = dwUtilsStripFromFunction(func, true, true);\r\n    func = dwUtilsTrim(func);\r\n\r\n    var innerFunctionIdx = func.indexOf(innerFunctionName + \" (\");\r\n    if (innerFunctionIdx == -1) {\r\n        innerFunctionIdx = func.indexOf(innerFunctionName + \"(\");\r\n    }\r\n    if (innerFunctionIdx == -1) {\r\n        alert(\"Exception: Inner function string '\" + innerFunctionName + \"' not found.\");\r\n        return; // Methode nicht gefunden\r\n    }\r\n    var innerFunctionEnd = \");\";\r\n    var innerFunctionEndIdx = func.indexOf(innerFunctionEnd, innerFunctionIdx + innerFunctionName.length) + innerFunctionEnd.length;\r\n    var innerFunction = func.substring(innerFunctionIdx, innerFunctionEndIdx);\r\n    var parameters = dwUtilsGetFunctionParameters(innerFunction);\r\n    var parameterValue = \"\";\r\n    if (parameters != null) {\r\n        if (parameters.length == 1) {\r\n            parameterValue = parameters[0].replace(/\"/g, \"\");\r\n        }\r\n        if (parameterValue.length > 0) {\r\n            parameterValue += \",\";\r\n        }\r\n    }\r\n    parameterValue += innerFunctionParameterValueToAppend;\r\n\r\n    var modifiedFunc = func.substring(0, innerFunctionIdx).concat(innerFunctionName).concat(\"(\\\"\").concat(parameterValue).concat(\"\\\");\").concat(func.substring(innerFunctionEndIdx));\r\n    window[functionName] = new Function(modifiedFunc);\r\n}\r\n\r\nfunction dwDomSetImageSource(control, src, onSuccessHandler, onFailureHandler, retryCounter) {\r\n    control.onload = function() {\r\n        if (!dwDomValidateImage(this)) {\r\n            retryCounter = retryCounter || 0;\r\n//            framework_logger.log(\"dwDomSetImageSource: not valid. retry \" + retryCounter);\r\n            if (retryCounter >= 5) {\r\n//                framework_logger.log(\"dwDomSetImageSource: rage quit. src=\" + src + \" - id: \" + control.id);\r\n                if (onFailureHandler) {\r\n                    onFailureHandler();\r\n                }\r\n                return;\r\n            }\r\n            dwDomSetImageSource(control, src, onSuccessHandler, onFailureHandler, retryCounter + 1);\r\n            return;\r\n        }\r\n//        framework_logger.log(\"dwDomSetImageSource: valid\");\r\n        if (onSuccessHandler) {\r\n//            framework_logger.log(\"dwDomSetImageSource: notify success handler\");\r\n            onSuccessHandler();\r\n        }\r\n    };\r\n    control.onerror = function() {\r\n        retryCounter = retryCounter || 0;\r\n//        framework_logger.log(\"dwDomSetImageSource: on error. retry \" + retryCounter);\r\n        if (retryCounter >= 5) {\r\n//            framework_logger.log(\"dwDomSetImageSource: rage quit. src=\" + src + \" - id: \" + control.id);\r\n            if (onFailureHandler) {\r\n                onFailureHandler();\r\n            }\r\n            return;\r\n        }\r\n        setTimeout(function() {\r\n            dwDomSetImageSource(control, src, onSuccessHandler, onFailureHandler, retryCounter + 1);\r\n        }, 50);\r\n    };\r\n//    framework_logger.log(\"Setting src to \" + src);\r\n    var retryParam = \"\";\r\n    if (retryCounter) {\r\n        retryParam = \"&retry=\" + retryCounter;\r\n    }\r\n    control.src = src + retryParam;\r\n}\r\n\r\nfunction dwDomValidateImage(image) {\r\n    if (dwUtilsIsDefined(image.complete) && !image.complete) {\r\n        return false;\r\n    }\r\n\r\n    if (dwUtilsIsDefined(image.naturalWidth) && (image.naturalWidth == 0)) {\r\n        return false;\r\n    }\r\n    if (dwUtilsIsDefined(image.naturalHeight) && (image.naturalHeight == 0)) {\r\n        return false;\r\n    }\r\n    return true;\r\n}\r\n\r\n// Wenn man z.B. left und top setzt über Javascript, bla.style.left = und bla.style.top, dann gibt das zwei Repaints/Reflows\r\n// Diese Methode hier kann man machen, damit es nur einen Repaint/Reflow erzeugt. Es wird dann der geänderte Style direkt über cssText\r\n// gesetzt\r\nfunction dwDomSetStylesViaAttribute(node, styles) {\r\n    var newCssText = \"\";\r\n    var newValuesArray = dwUtilsSplit(styles, \";\", false);\r\n    var newKeysLowercase = new Array();\r\n    for (var j = 0; j < newValuesArray.length; j++) {\r\n        var item = newValuesArray[j];\r\n        if (dwUtilsStringContains(item, \":\")) {\r\n            var key = dwUtilsTrim(dwUtilsStringBefore(item, \":\"));\r\n            newKeysLowercase.push(key.toLowerCase());\r\n        }\r\n    }\r\n\r\n    var oldValuesArray = dwUtilsSplit(node.style.cssText, \";\", false);\r\n    for (var j = 0; j < oldValuesArray.length; j++) {\r\n        var item = oldValuesArray[j];\r\n        if (dwUtilsStringContains(item, \":\")) {\r\n            var key = dwUtilsTrim(dwUtilsStringBefore(item, \":\"));\r\n            if (!dwUtilsIsInArray(newKeysLowercase, key.toLowerCase())) {\r\n                if (newCssText.length > 0) {\r\n                    newCssText += \";\";\r\n                }\r\n                newCssText += item;\r\n            }\r\n        }\r\n    }\r\n    if (newCssText.length > 0) {\r\n        newCssText += \";\";\r\n    }\r\n    newCssText += styles;\r\n    if (newCssText != node.style.cssText) {\r\n        node.style.cssText = newCssText;\r\n    }\r\n}\r\n\r\n/**\r\n * In den Head des Documents wird ein neuer Style hinzugefügt.\r\n * Das entspricht einem dynamischen Erweitern der css-Definitionen\r\n * @param styleString\r\n */\r\nfunction dwDomSetGlobalStyleIfNotExists(styleString) {\r\n    var styleText = '<style>' + styleString + '</style>';\r\n    var found = false;\r\n    document.head.childNodes.forEach((elem) => {\r\n        if (elem.childNodes.length > 0 && elem.childNodes[0].textContent === styleString) {\r\n            found = true;\r\n        }\r\n    })\r\n    if (!found) {\r\n        document.head.insertAdjacentHTML('beforeend', styleText);\r\n    }\r\n}\n/*\r\n * Copyright (c) 2025 Quanos Solutions GmbH\r\n */\r\nvar DWFRAMEWORK_CALLBACK_DELAY = 1000;\r\nvar DWFRAMEWORK_CALLBACK_DELAY_ACTIVE_SESSION_CHECK = 20000;\r\nvar DWFRAMEWORK_CLEANUP_FUNCTION_NEXT_METHOD_STRING = \"dwHelperDoNothing();\";\r\nvar DWFRAMEWORK_CLEANUP_RELAYOUT_FUNCTION_NAME = \"dwRelayoutCleanup\";\r\nvar DWFRAMEWORK_CLEANUP_RELAYOUT_INNER_FUNCTION_NAME = \"dwFrameworkCheckIds\";\r\nvar DWFRAMEWORK_FORCE_LOGGING_TO_BROWSER = false; // Browser-Logging: framework_logger.log()\r\n\r\nvar DOCTYPE_HTML_5 = \"<!DOCTYPE html>\";\r\n\r\n// Kopie ist in J2EEHandler\r\nvar DWFRAMEWORK_BROWSER_TYPE_IE = \"ie\";\r\nvar DWFRAMEWORK_BROWSER_TYPE_FIREFOX = \"firefox\";\r\nvar DWFRAMEWORK_BROWSER_TYPE_OPERA = \"opera\";\r\nvar DWFRAMEWORK_BROWSER_TYPE_CHROME = \"chrome\";\r\nvar DWFRAMEWORK_BROWSER_TYPE_SAFARI = \"safari\";\r\nvar DWFRAMEWORK_BROWSER_TYPE_EDGE = \"edge\";\r\n//EdgeChromium (Microsoft Edge) behandeln wie Chrome, da das am besten zu funktionieren scheint\r\nvar DWFRAMEWORK_BROWSER_TYPE_EDGE_CHROMIUM = \"edge_chromium\";\r\n\r\nvar dwFrameworkHtmlSubmitInProgress = false;\r\nvar dwFrameworkInitFinished = false;\r\nvar dwFrameworkThreadIdCache = new Object();\r\n\r\nvar dwFrameworkRestoreScrollPositions = new Object();\r\n\r\nvar dwFrameworkHintCounter = 0;\r\n\r\nvar dwFrameworkMoveCurrentPopupElement = null;\r\nvar dwFrameworkMoveCurrentPopupLastMousePos = null;\r\n\r\nvar dwFrameworkRefreshingPage = false; // Flag, ob die Seite gerade neu geladen wird per JavaScript bzw. Formular\r\nvar dwFrameworkCloseWindowSilently = false; // Bei true wird kein Event closedSubWindowEvent beim Schließen gefeuert\r\nvar dwFrameworkEmbeddedInShop = false; // Bei true wird kein Event closedSubWindowEvent beim Schließen gefeuert\r\n\r\nvar FRAMEWORK_LOGCHANNELS = {\r\n    channels: {},\r\n    isActive: function(channel) {\r\n        return (this.channels[channel] === true);\r\n    },\r\n    activate: function(channel) {\r\n        this.channels[channel] = true;\r\n    },\r\n\r\n    deactivate: function(channel) {\r\n        this.channels[channel] = false;\r\n    }\r\n};\r\n\r\nfunction dwFrameworkLog(channel, message) {\r\n    if (FRAMEWORK_LOGCHANNELS.isActive(channel)) {\r\n        framework_logger.log(new Date().toUTCString() + \"\\t\" + channel + \"\\t\" + message + \"\\t [:\" + dwUtilsGetFunctionName((arguments.callee.caller || \"\").toString()) + \"]\");\r\n    }\r\n}\r\n\r\n// Klassennamen für Elemente für die Event Bubbling erlaubt bleiben muss, obwohl Eventbubbling eigentlich abgeschalten\r\n// werden sollte. Variablennamen nicht ändern, da er als String in ImageViewer360CssResource.java verwendet wird!\r\nvar forceEventBubblingClassNames = new Set();\r\n\r\nfunction dwFrameworkGetRootWindowId() {\r\n    var submitForm = dwFrameworkFindSubmitForm(\"\");\r\n    for (var i = 0; i < submitForm.childNodes.length; i++) {\r\n        var formChild = submitForm.childNodes[i];\r\n        if (formChild.nodeName.toLowerCase() == \"input\") {\r\n            var formChildName = formChild.getAttribute(\"name\");\r\n            if (formChildName == \"__windowid\") {\r\n                return formChild.value;\r\n            }\r\n        }\r\n    }\r\n    return \"\";\r\n}\r\n\r\n/**\r\n * Submitted das Formular\r\n *\r\n * @param eventHandlerComponentId Die Komponente aus dem Komponentenbaum die es ausgelöst hat (z.B: Table)\r\n * @param receiverid Die Komponente die das Event abarbeitet\r\n * @param actiontosubmit\r\n */\r\nfunction dwFrameworkSubmitForm(eventHandlerComponentId, receiverid, actiontosubmit) {\r\n    if (dwFrameworkHtmlSubmitInProgress) {\r\n        return; // Formular bereits abgesendet. Server verarbeitet die Anfrage bereits. Client darf keine neue Anfrage senden\r\n        // bis er neu gezeichnet wurde\r\n    }\r\n    dwFrameworkHtmlSubmitInProgress = true;\r\n    var submitForm = dwFrameworkFindSubmitForm(eventHandlerComponentId);\r\n    // Die Id die etwas gemacht hat speichern\r\n    for (var i = 0; i < submitForm.childNodes.length; i++) {\r\n        var formChild = submitForm.childNodes[i];\r\n        if (formChild.nodeName.toLowerCase() == \"input\") {\r\n            var formChildName = formChild.getAttribute(\"name\");\r\n            if (formChildName == \"id__submit_eventHandlerComponentId\") {\r\n                formChild.value = eventHandlerComponentId;\r\n            } else if (formChildName == \"id__submit_action\") {\r\n                formChild.value = actiontosubmit;\r\n            } else if (formChildName == \"id__submit_receiverId\") {\r\n                formChild.value = receiverid;\r\n            }\r\n        }\r\n    }\r\n    submitForm.submit();\r\n}\r\n\r\n/**\r\n * Sendet das Formular nach einem CLICK Event zeitverzögert ab.\r\n *\r\n * Bei einem DBLCLICK Event wird mind. 1 Click-Event ausgelöst (Browser-abhängig). Damit auch im HTML Modus\r\n * die Möglichkeit besteht, auf DBLCLICK Events zu reagieren, darf nach diesem Event nicht sofort die Seite submitted werden\r\n *\r\n * Wir warten explizit ein Zeitintervall ab, ob der Browser das DBLCLICK Event auslöst. Ist eine Methode für das\r\n * DBLCLICK Event registriert, wird das CLICK Event 'gelöscht' - d.h. für das CLICK Event wird kein Submit ausgeführt -\r\n * und der Submit für den DBLCLICK ausgeführt.\r\n *\r\n * @param event\r\n * @param submitFunc\r\n */\r\nfunction dwFrameworkSubmitFormClick(event, submitFunc, windowId) {\r\n    var eventType = event.type.toLocaleLowerCase();\r\n    if (eventType == \"click\") {\r\n        var strgInput = $(windowId + \"_strgKeyPressed\");\r\n        strgInput.value = event.ctrlKey;\r\n        // Position des geklickten Elements im HTML Dokumentenfluss auslesen und mitgeben (x:y)\r\n        var control = dwUtilsGetEventTarget(event);\r\n        var controlPosition = dwUtilsGetLocationOnWindow(control, true, true);\r\n        var positionInput = $(windowId + \"___POINT_controlPosition\");\r\n        positionInput.value = controlPosition.x + \":\" + controlPosition.y;\r\n        dwUtilsSetDelayedFunction(event, submitFunc, \"SUBMIT_FORM_CLICK\", DWUTILS_DOUBLE_CLICK_TIME);\r\n    }\r\n}\r\n\r\n/**\r\n * Sendet das Formluar nach einem DBLCLICK ab\r\n * Ein vorhandenes CLICK Event (timeout - siehe dwFrameworkSubmitFormClick) wird entfernt\r\n * @param event\r\n * @param submitFunc\r\n */\r\nfunction dwFrameworkSubmitFormDblClick(event, submitFunc) {\r\n    var eventType = event.type.toLocaleLowerCase();\r\n    if (eventType == \"dblclick\") {\r\n        dwUtilsReleaseDelayedFunction(\"SUBMIT_FORM_CLICK\");\r\n        eval(submitFunc);\r\n    }\r\n}\r\n\r\nfunction dwFrameworkOnSubmit(event) {\r\n    // Im HTML Modus / bei explizitem Abschicken des Formulars wird die Methode \"dwFrameworkSubmitForm\" verwendet und das Flag gesetzt\r\n    // Implizite Form Submits (automatischer Form Submit z.B. wenn nur 1 Eingabeelement gefunden) werden dadurch unterbunden\r\n    return dwFrameworkHtmlSubmitInProgress;\r\n}\r\n\r\n/**\r\n * Zeigt die Seite neu an (per Formularsubmit)\r\n */\r\nfunction dwFrameworkRefreshPage() {\r\n    dwFrameworkRefreshingPage = true;\r\n    dwFrameworkSubmitForm(\"\", \"\", \"refresh\");\r\n}\r\n\r\n/**\r\n * Zeigt die Seite mit dem aktuellen RootWindow neu an (per Javascript).\r\n */\r\nfunction dwFrameworkRefreshPageJs() {\r\n    // Nach einem Refresh muss Init neu durchlaufen werden\r\n    // Sonst wird Ajax schon auf einer halb geladenen Seite ausgeführt und es werden evtl. Properties auf Controls gesetzt, die im html noch nicht geladen sind\r\n    dwFrameworkInitFinished = false;\r\n    dwFrameworkRefreshingPage = true; // Notwendig, damit das Framework nicht deaktiviert und ein closedSubWindow-Event gefeuert wird\r\n    dwFrameworkLoadRootWindowJs(dwFrameworkGetRootWindowId());\r\n}\r\n\r\n/**\r\n * Zeigt die Seite für die übergebene rootWindowId neu an (per Javascript).\r\n */\r\nfunction dwFrameworkLoadRootWindowJs(rootWindowId) {\r\n    dwFrameworkRefreshingPage = true;\r\n    window.location.replace(\"app?timestamp=\" + new Date().getTime() + \"&id__submit_action=refresh&__windowid=\" + rootWindowId);\r\n}\r\n\r\nfunction dwFrameworkFindSubmitForm(childId) {\r\n    if (childId == \"\") {\r\n        return document.forms[0]; // Spezialfall z.B. für Refresh\r\n    } else {\r\n        var submitForm = $(childId);\r\n        return dwFrameworkFindSubmitFormForNode(submitForm);\r\n    }\r\n}\r\n\r\nfunction dwFrameworkFindSubmitFormForNode(submitForm) {\r\n    while ((submitForm != null) && (submitForm.tagName) && (submitForm.tagName.toLowerCase() != \"form\")) {\r\n        submitForm = submitForm.parentNode;\r\n    }\r\n    if (submitForm && submitForm.tagName && submitForm.tagName.toLowerCase() == \"form\") {\r\n        return submitForm;\r\n    } else {\r\n        return null;\r\n    }\r\n}\r\n\r\n/**\r\n * Zeigt eine interne Nachricht an\r\n */\r\nfunction dwFrameworkShowHint(idsuffix, text, backgroundColor, color) {\r\n    var id = \"internal_messagebox_\" + idsuffix;\r\n    var timeString = dwUtilsGetGermanTime();\r\n    var hintNode = $(id);\r\n    if (hintNode == null) {\r\n        hintNode = document.createElement(\"span\");\r\n        hintNode.setAttribute(\"id\", id);\r\n        hintNode.style.position = \"absolute\";\r\n        hintNode.style.zIndex = 99999;\r\n        hintNode.style.right = \"0px\";\r\n        hintNode.style.top = (dwFrameworkHintCounter * 13) + \"px\"; // voneinander unabhänige Hinweise vertikal angeordnet anzeigen (Zeilenhöhe ist 13px)\r\n        hintNode.style.fontWeight = \"bold\";\r\n        hintNode.style.backgroundColor = backgroundColor;\r\n        hintNode.style.color = color;\r\n        hintNode.style.fontSize = \"11px\";\r\n        hintNode.style.lineHeight = \"13px\";\r\n        var textNode = document.createTextNode(timeString + \" \" + text);\r\n        hintNode.appendChild(textNode);\r\n\r\n        // Einhängen\r\n        var bodyNode = $(\"body\");\r\n        bodyNode.insertBefore(hintNode, bodyNode.childNodes[0]);\r\n        dwFrameworkHintCounter++;\r\n    } else {\r\n        var textNode = document.createTextNode(timeString + \" \" + text);\r\n        hintNode.style.backgroundColor = backgroundColor;\r\n        hintNode.style.color = color;\r\n        hintNode.replaceChild(textNode, hintNode.childNodes.item(0));\r\n    }\r\n}\r\n\r\n/**\r\n * Wird vor Events aufgerufen\r\n *\r\n * @param e\r\n */\r\nfunction dwFrameworkPreEvent(event, withEventBubbling, htmlElement) {\r\n    // Events werden nicht immer sofort verarbeitet (z.B. onscroll nach Abarbeiten aller DOM Manipulationen)\r\n    // Es ist daher nicht garantiert, das event.srcElement noch im DOM Baum hängt\r\n    event = dwFrameworkGetEvent(event);\r\n    if (!withEventBubbling && !isForcedEventBubblingSource(event)) {\r\n        dwFrameworkDisableEventBubbling(event);\r\n    }\r\n    dwHelperCallHotkeyIfPossible(event);\r\n    dwHelperCloseCurrentlyOpenedContextMenu(event);\r\n    dwHelperCloseCurrentlyOpenedMenubarEntry(event);\r\n    dwHelperHideCurrentlyVisibleTooltips(event);\r\n    dwHelperCloseCurrentlyOpenedComboboxes(event);\r\n    dwHelperFireWindowAutoCloseIfPossible(event, htmlElement);\r\n    if (DWTOUCH_TOUCH_EMULATION_ENABLED) {\r\n        dwTouchEmulateTouchEvent(event);\r\n    }\r\n}\r\n\r\n// Soll für das srcElement trotz witheventBubbling = false das Eventbubbling stattfinden?\r\nfunction isForcedEventBubblingSource(event) {\r\n    return event.bubbles && (event.srcElement !== undefined) && forceEventBubblingClassNames.has(event.srcElement.className);\r\n}\r\n/**\r\n * Wird nach Events aufgerufen\r\n *\r\n * @param e\r\n */\r\nfunction dwFrameworkPostEvent(event) {\r\n    dwHelperRemoveDeprecatedPopupsIfPossible();\r\n}\r\n\r\n/**\r\n * Verhindert die Browser-Standard-Funktion (History Back) der \"Backspace\" Taste\r\n * (wenn aktuell kein Eingabefeld ausgewählt ist)\r\n * @param event\r\n */\r\nfunction dwFrameworkPreventBackspaceHistoryBack(event) {\r\n    event = dwFrameworkGetEvent(event);\r\n    if (dwUtilsGetEventKeyCode(event) == VIRTUAL_KEYCODES.KEY_BACK_SPACE) {\r\n        var eventTarget = dwUtilsGetEventTarget(event);\r\n\r\n        if (typeof (eventTarget.tagName) == \"undefined\") {\r\n            return;\r\n        }\r\n\r\n        var isReadonly = dwDomHasAttribute(eventTarget, \"readonly\");\r\n        if (isReadonly) {\r\n            dwFrameworkPreventDefaultBehaviour(event);\r\n            return;\r\n        }\r\n        var isDisabled = dwDomHasAttribute(eventTarget, \"disabled\");\r\n        if (isDisabled) {\r\n            dwFrameworkPreventDefaultBehaviour(event);\r\n            return;\r\n        }\r\n\r\n        var doPrevent = true;\r\n        var tagName = eventTarget.tagName.toLowerCase();\r\n        var contentEditable = (typeof (eventTarget.contentEditable) != \"undefined\") && (eventTarget.contentEditable == \"true\");\r\n        if (contentEditable) {\r\n            // Nicht verhindern...\r\n            doPrevent = false;\r\n        } else if (tagName == \"input\") {\r\n            var preventableInputTypes = [\"checkbox\", \"radio\", \"submit\", \"button\", \"reset\"];\r\n            // Nur verhindern, wenn es sich um kein Eingabe-Feld handelt ...\r\n            doPrevent = (dwUtilsIsInArray(preventableInputTypes, eventTarget.type));\r\n        } else if (tagName == \"textarea\") {\r\n            // Nicht verhindern...\r\n            doPrevent = false;\r\n        }\r\n\r\n        if (doPrevent) {\r\n            dwFrameworkPreventDefaultBehaviour(event);\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * Verhindert die Browser-Standard-Funktion (Kontextmenu) der \"Rechte-Maus\" Taste\r\n * Wenn das Attribut allowDefaultContextmenu gesetzt ist, wird das Standardverhalten zugelassen, wenn nicht disabled.\r\n * @param event\r\n */\r\nfunction dwFrameworkPreventContextMenu(event) {\r\n    event = dwFrameworkGetEvent(event);\r\n\r\n    var eventTarget = dwUtilsGetEventTarget(event);\r\n    if (typeof (eventTarget.tagName) == \"undefined\") {\r\n        dwFrameworkPreventDefaultBehaviour(event);\r\n        return;\r\n    }\r\n\r\n    var isDisabled = dwDomHasAttribute(eventTarget, \"disabled\");\r\n    if (isDisabled) {\r\n        dwFrameworkPreventDefaultBehaviour(event);\r\n        return;\r\n    }\r\n\r\n    var allow = dwDomHasAttribute(eventTarget, \"allowDefaultContextmenu\");\r\n    while (!allow && !(eventTarget.tagName == \"body\" || eventTarget.tagName == \"BODY\")) {\r\n        eventTarget = eventTarget.parentNode;\r\n        allow = dwDomHasAttribute(eventTarget, \"allowDefaultContextmenu\");\r\n    }\r\n\r\n    if (!allow) {\r\n        dwFrameworkPreventDefaultBehaviour(event);\r\n    }\r\n}\r\n\r\n/**\r\n * Entfernt alle unnötigen Popups von der Seite (die mit dwHelperPopupToBody in den Body verschoben wurden).\r\n * Popups können übrig bleiben, wenn man ein Popup öffnet und dann wegnavigiert\r\n */\r\nfunction dwHelperRemoveDeprecatedPopupsIfPossible() {\r\n    // Im IE8 kommen bereits Events, obwohl er noch die Seite aufbaut\r\n    if (!dwFrameworkInitFinished) {\r\n        return;\r\n    }\r\n    var body = $(\"body\");\r\n    var elements = dwDomGetElementChildNodes(body);\r\n    for (var i = 0; i < elements.length; i++) {\r\n        var element = elements[i];\r\n        if (dwDomHasAttribute(element, \"referrerId\")) {\r\n            var referrerId = element.getAttribute(\"referrerId\");\r\n            if ($(referrerId) == null) { // referrer gelöscht -> Popup entfernen\r\n                //gecachte Iframe Elemente für Heavyweight popups nicht entfernen\r\n                if (!dwPopup_isCachedPopUpByWrapperId(element.id)) {\r\n                    body.removeChild(element);\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\n\r\n/**\r\n * Darüberliegende Controls sollen das Event nicht mehr haben\r\n *\r\n * Methode wird an vielen Stellen direkt aufgerufen. Bei Verwendung von setTimeout geht das Event selbst verloren\r\n * An dieser Stelle soll die aufrufende Methode ohne Fehler bearbeitet werden können (z.B. dwAjaxDefaultOnCustomListChange)\r\n * @param event Event oder NULL\r\n */\r\nfunction dwFrameworkDisableEventBubbling(event) {\r\n    if (event == null) {\r\n        return;\r\n    }\r\n    if (event.stopPropagation) { // W3C Standard\r\n        event.stopPropagation();\r\n    } else {\r\n        event.cancelBubble = true;   // IE\r\n    }\r\n}\r\n\r\n/**\r\n * Standard-Verhalten der aktuellen Komponente wird unterdrückt (z.B. Link-Aufruf bei <a> Tags)\r\n *\r\n * Für die Unterdrückung der Standard-Events eines Controls gibt es 2 Möglichkeiten\r\n * - Variante 1: return false;\r\n *               Befehl wird an der Stelle ausgeführt, an der er im Methoden-String aufgeführt wird\r\n *               Bei onclick='foo1();return false;foo2();' wird nur foo1 ausgeführt\r\n * - Variante 2: preventDefaultBehaviour\r\n *               Befehl setzt den Rückgabewert, führt allerdings noch alle Methoden des Listeners bis zum Ende aus\r\n *               Bei onclick='foo1();preventDefaultBehaviour(event);foo2();' werden beide Methoden ausgeführt\r\n *\r\n * Die Verwendung von preventDefaultBehaviour erlaubt es, das Default-Verhalten zu deaktiveren, und weiterhin\r\n * ungeachtet der vorherigen definierten Methoden für den Listener, neue Event-Methoden zu registrieren/auszuführen\r\n * @param event\r\n */\r\nfunction dwFrameworkPreventDefaultBehaviour(event) {\r\n    if (event.preventDefault) { // W3C Standard\r\n        event.preventDefault();\r\n    }\r\n    event.returnValue = false;  // IE\r\n}\r\n\r\n/**\r\n * Wandelt css Notation in Javascript um\r\n * - background-color zu backgroundColor\r\n * - z-index zu zIndex\r\n * - usw.\r\n *\r\n * @param name\r\n */\r\nfunction dwFrameworkCssToJavascriptProperty(name) {\r\n    var result = \"\";\r\n    var doUppercase = false;\r\n    for (var i = 0; i < name.length; i++) {\r\n        var char_ = name.charAt(i);\r\n        if (char_ == '-') {\r\n            doUppercase = true;\r\n        } else {\r\n            if (doUppercase) {\r\n                result += (char_ + \"\").toUpperCase();\r\n                doUppercase = false;\r\n            } else {\r\n                result += char_;\r\n            }\r\n        }\r\n    }\r\n    return result;\r\n}\r\n\r\nfunction dwFrameworkJavascriptToCssProperty(name) {\r\n    var result = \"\";\r\n    for (var i = 0; i < name.length; i++) {\r\n        var aChar = name.charAt(i);\r\n        if (aChar == aChar.toUpperCase()) {\r\n            result += \"-\";\r\n            result += aChar.toLowerCase();\r\n        } else {\r\n            result += aChar;\r\n        }\r\n    }\r\n    return result;\r\n}\r\n\r\n/**\r\n * Wechselt den Tab-Reiter des Tabbed Pane Controls (Alte Implementierung - alle Content Tabs herausgeneriert)\r\n * Ist der Tab bereits selektiert wird keine weitere Aktion ausgeführt.\r\n *\r\n * @param controlId     Tabbed Pane ControlId\r\n * @param tabIndex      Index des auszuwählenden Tabbed Pane Entries\r\n */\r\nfunction dwHelperSwitchToTabbedPaneEntry(controlId, tabIndex) {\r\n    var tabbedPane = $(controlId);\r\n    var controlHeightWorkaroundForOpera = dwUtilsGetHeight(tabbedPane);\r\n    var selectedTabInputControl = $(controlId + \"_selectedTab\");\r\n    if ((selectedTabInputControl != null) && (selectedTabInputControl.value == tabIndex)) {\r\n        return;\r\n    } // Klick auf den aktuell selektierten Tab-Reiter\r\n    var oldSelectionIndex = selectedTabInputControl.value;\r\n    // Alte Tab Selektion bearbeiten (ausblenden / style anpassen)\r\n    var oldLink = $(controlId + \"_link\" + oldSelectionIndex);\r\n    var oldContent = $(controlId + \"_tab\" + oldSelectionIndex);\r\n    oldLink.className = \"guitabbedpane_tabinactive\";\r\n    oldContent.style.display = \"none\";\r\n    // Neue Tab Selektion bearbeiten (einblenden / style anpassen)\r\n    var newLink = $(controlId + \"_link\" + tabIndex);\r\n    var newContent = $(controlId + \"_tab\" + tabIndex);\r\n    newLink.className = \"guitabbedpane_tabactive\";\r\n    newContent.style.display = \"block\"; // Von inline auf block wg. Chrome loose 100% Höhe sonst nicht\r\n    selectedTabInputControl.value = tabIndex;\r\n    if (framework_isOpera) {\r\n        // Opera merkt sich die Höhe 100% nicht\r\n        dwUtilsSetHeight(tabbedPane, controlHeightWorkaroundForOpera);\r\n    }\r\n}\r\n\r\n/**\r\n * Übermittelt einen Request zum Wechsel des Tab-Reiters des TabbedPaneControls\r\n * Ist der gewünschte Tab bereits selektiert, wird kein Request ausgelöst\r\n * @param eventHandlerComponentId\r\n * @param controlId\r\n * @param elementIndex\r\n */\r\nfunction dwHelperRenderNewTabbedPaneEntry(eventHandlerComponentId, controlId, elementIndex) {\r\n    var selectedTabInputControl = $(controlId + \"_selectedTab\");\r\n    if ((selectedTabInputControl != null) && (selectedTabInputControl.value == elementIndex)) {\r\n        return;\r\n    } // Klick auf den aktuell selektierten Tab-Reiter\r\n    selectedTabInputControl.value = elementIndex;\r\n    dwFrameworkSubmitForm(eventHandlerComponentId, controlId, \"tabbedPaneTabChangedEvent\");\r\n}\r\n\r\nfunction dwHelperUpdateNotifyingScrollPanelHeaderScrollPosition(controlId) {\r\n    var control = $(controlId);\r\n    if (control == null) {\r\n        return;\r\n    }\r\n    var headerControlId = dwDomGetDomAttribute(control, \"headerId\");\r\n    if (!headerControlId) {\r\n        // NULL oder leer ... es gibt keinen zugehörigen Header\r\n        return;\r\n    }\r\n    var headerControl = $(headerControlId);\r\n    headerControl.style.marginLeft = -(control.scrollLeft - 2) + \"px\";     // etwas weiter rechts, damit kein Text durchscheint\r\n}\r\n\r\nfunction dwHelperUpdateNotifyingScrollPanelColumnScrollPosition(scrollPaneId) {\r\n    var scrollPane = $(scrollPaneId);\r\n    if (scrollPane == null) {\r\n        return;\r\n    }\r\n    let scrollRect = scrollPane.getBoundingClientRect();\r\n    let offsetLeft = 0;\r\n    let offsetRight = 0;\r\n    let firstColPanels = dwDomGetDomAttribute(scrollPane, \"firstColPanels\");\r\n    if (firstColPanels) {\r\n        var panelIds = firstColPanels.split(\",\");\r\n        for (var i = 0; i < panelIds.length; i++) {\r\n            var panel = $(panelIds[i] + \"_layoutdiv\");\r\n            if (panel) {\r\n                panel.style.zIndex = \"300\";\r\n                panel.style.marginLeft = scrollPane.scrollLeft + \"px\";\r\n                let fixedCells = panel.getElementsByClassName('r-table-cell');\r\n                for (let j = 0; j < fixedCells.length; j++) {\r\n                    fixedCells[j].classList.add(\"fixed\");\r\n                }\r\n\r\n            }\r\n            var scrollRectClient = panel.getBoundingClientRect();\r\n            var offset = scrollRectClient.width;\r\n            offsetLeft = Math.max(offsetLeft, offset);\r\n        }\r\n    }\r\n    var lastColPanels = dwDomGetDomAttribute(scrollPane, \"lastColPanels\");\r\n    if (lastColPanels) {\r\n        var panelIds = lastColPanels.split(\",\");\r\n\r\n        var diff = -4;\r\n        if (framework_isIE && (scrollPane.scrollWidth - scrollPane.clientWidth > 0)) {\r\n            // Beim IE11 verschieben sich die Buttons, falls die horizontale Scrollbar vorhanden ist, zu weit nach links.\r\n            diff = 10;\r\n        }\r\n        for (var i = 0; i < panelIds.length; i++) {\r\n            var panel = $(panelIds[i] + \"_layoutdiv\");\r\n            if (panel) {\r\n                panel.style.zIndex = \"300\";                                   // etwas weiter rechts, damit kein Text durchscheint\r\n                panel.style.marginLeft = -(scrollPane.scrollWidth - scrollPane.clientWidth - scrollPane.scrollLeft - diff) + \"px\";\r\n\r\n                let fixedCells = panel.getElementsByClassName('r-table-cell');\r\n                for (let j = 0; j < fixedCells.length; j++) {\r\n                    fixedCells[j].classList.add(\"fixed\");\r\n                }\r\n\r\n                var scrollRectClient = panel.getBoundingClientRect();\r\n                var offset = scrollRectClient.width;\r\n                offsetRight = Math.max(offsetRight, offset);\r\n\r\n            }\r\n        }\r\n    }\r\n\r\n    // Alle RCell der R-Table\r\n    let children = scrollPane.getElementsByClassName('r-table-cell');\r\n    // left und right ist der Bereich, der von den fixen Zellen belegt wird\r\n    let left = scrollPane.getBoundingClientRect().left + offsetLeft;\r\n    let right = scrollPane.getBoundingClientRect().left + scrollPane.getBoundingClientRect().width - offsetRight;\r\n\r\n    for (let i = 0; i < children.length; i++) {\r\n        if (!children[i].classList.contains(\"fixed\")) {\r\n            var control = children[i].parentNode;\r\n            // Alle mit zIndex >= 300 sind fixierte Zellen oder Linien\r\n            if (control && control.style.zIndex < 300) {\r\n                // Zeichne die Zelle nicht in dem von den fixen Zellen belegten Bereich\r\n                setClipPathToControl(control, left, right);\r\n            }\r\n        }\r\n    }\r\n\r\n}\r\n\r\n/**\r\n * Schneide rechts und links das Control ab. Wird fürs scrollen der R-Table benötigt, damit nichts durchscheint.\r\n * @param control\r\n * @param left\r\n * @param right\r\n */\r\nfunction setClipPathToControl(control, left, right) {\r\n    let boundingRect = control.getBoundingClientRect();\r\n    left = left - boundingRect.left;\r\n    right = boundingRect.left + boundingRect.width - right;\r\n\r\n    if (right > 0 || left > 0) {\r\n        control.style['clip-path'] = 'inset(0px ' + Math.max(0, right) + 'px 0px ' + Math.max(0, left) + 'px)';\r\n    } else {\r\n        control.style['clip-path'] = 'none';\r\n    }\r\n}\r\n\r\n/**\r\n * Speichert sich das aktuell selektierte Control\r\n */\r\nfunction dwHelperStoreFocus(windowId, controlId) {\r\n    $(windowId + \"_focusComponent\").value = controlId;\r\n}\r\n\r\n/**\r\n * Versucht, das Element zu fokusieren. Da wir bei Plain Html mit Popup das darunterliegende Hauptfenster nicht\r\n * rendern, machen wir eine Überprüfung ob es das Element überhaupt gibt\r\n */\r\nfunction dwHelperTryFocus(windowId) {\r\n    var elementIdFocused = $(windowId + \"_focusComponent\").value;\r\n    if (elementIdFocused == \"\") {\r\n        return false;\r\n    }\r\n    return dwHelperTryFocusOnNode(elementIdFocused);\r\n}\r\n\r\nfunction dwHelperTryFocusOnNode(elementIdToFocus) {\r\n    var element = $(elementIdToFocus);\r\n    if (element != null) {\r\n        try {\r\n            element.focus();\r\n            return true;\r\n        } catch (exception) {\r\n            // ignore\r\n        }\r\n    }\r\n    return false;\r\n}\r\n\r\n/**\r\n * Scrolle das Div mit der übergebenen id oder dessen erstes scrollbares Kind an die in den zugeordneten Inputfeldern abgelegte Position\r\n * @param uniqueId\r\n */\r\nfunction dwHelperScrollToStoredPosition(uniqueId) {\r\n    var div = $(uniqueId);\r\n    if ((div != null) && (div.style.overflow == \"hidden\") && !((div.getAttribute(\"horizontalScrollEnabled\") == \"false\") && (div.getAttribute(\"verticalScrollEnabled\") == \"false\"))) {\r\n        div = getScrollingChildByBreadthFirstSearch(div);\r\n    }\r\n    if (div != null) {\r\n        var scrollTopTextField = $(uniqueId + \"_scrollTop\");\r\n        var scrollLeftTextField = $(uniqueId + \"_scrollLeft\");\r\n        if (scrollTopTextField.value != div.scrollTop) {\r\n            div.scrollTop = scrollTopTextField.value;\r\n        }\r\n        if (scrollLeftTextField.value != div.scrollLeft) {\r\n            div.scrollLeft = scrollLeftTextField.value;\r\n        }\r\n    }\r\n}\r\n\r\nfunction getScrollingChildByBreadthFirstSearch(startElement) {\r\n    var queue = new Array();\r\n    queue.push(startElement);\r\n    while (queue.length > 0) {\r\n        var element = queue.shift();\r\n        if ((dwUtilsGetStyle(element, \"overflow\") == \"auto\") || (dwUtilsGetStyle(element, \"overflow-x\") == \"auto\")\r\n            || (dwUtilsGetStyle(element, \"overflow-y\") == \"auto\")) {\r\n            // gesuchtes scrollendes Kindelement gefunden\r\n            return element;\r\n        }\r\n        // noch nicht gefunden; alle Kindelemente in die Queue.\r\n        for (var i = 0; i < element.children.length; i++) {\r\n            queue.push(element.children[i]);\r\n        }\r\n    }\r\n    return null;\r\n}\r\n\r\n/**\r\n * Speichere die Scrollposition des Divs mit der übergebenen id in zugeordneten Inputfeldern\r\n * @param uniqueId\r\n */\r\nfunction dwHelperScrollPaneValueChanged(uniqueId) {\r\n    var div = $(uniqueId);\r\n    if ((div != null) && (div.style.overflow == \"hidden\")) {\r\n        div = getScrollingChildByBreadthFirstSearch(div);\r\n    }\r\n\r\n    if (div != null) {\r\n        var scrollTopTextField = $(uniqueId + \"_scrollTop\");\r\n        scrollTopTextField.value = div.scrollTop;\r\n        var scrollLeftTextField = $(uniqueId + \"_scrollLeft\");\r\n        scrollLeftTextField.value = div.scrollLeft;\r\n    }\r\n}\r\n\r\n/**\r\n * Hat sich die Scrollposition des Divs mit der übergebenen id im Vergleich zu den Werten der zugeordneten Inputfelder verändert?\r\n * @param uniqueId\r\n */\r\nfunction dwHelperHasScrollPaneValueChanged(uniqueId) {\r\n    var div = $(uniqueId);\r\n    if ((div != null) && (div.style.overflow == \"hidden\")) {\r\n        div = getScrollingChildByBreadthFirstSearch(div);\r\n    }\r\n\r\n    if (div != null) {\r\n        var scrollTopTextField = $(uniqueId + \"_scrollTop\");\r\n        var scrollLeftTextField = $(uniqueId + \"_scrollLeft\");\r\n        if ((scrollTopTextField != null) && (scrollLeftTextField != null)) {\r\n            return (scrollTopTextField.value != div.scrollTop) || (scrollLeftTextField.value != div.scrollLeft);\r\n        }\r\n    }\r\n    return true;\r\n}\r\n\r\n/**\r\n * Synchronisiere die horizontale Scrollposition der Tabelle für den Header und der Tabelle für den Inhalt\r\n * (damit wir den Inhalt bei fixem Header vertikal scrollen können, werden Header und Inhalt in zwei separaten\r\n * Tabellen angezeigt)\r\n * @param uniqueId         Die Id der Tabelle\r\n * @param usesFixedColumns Verwendet die Tabelle fixierte Spalten?\r\n * @param fixedTable       Handelt es sich um die Tabelle mit den fixierten Spalten (nur sinnvoll in Kombination mit usesFixedColumns)\r\n */\r\nfunction dwHelperTableContentScrolled(uniqueId, usesFixedColumns, fixedTable) {\r\n    // Logik mit fixierten Spalten\r\n    if (usesFixedColumns) {\r\n        // Temporäres Deaktivieren vom onscroll-Listener auf dem anderen Tabellen-Div mit Timeout notwendig, weil sich die\r\n        // beiden onscroll-Listener sonst gegenseitig aufrufen würden und die Tabelle dadurch nicht mehr sauber scrollen würde\r\n        var thisContentDiv;\r\n        var otherContentDiv;\r\n        if (fixedTable) {\r\n            thisContentDiv = $(uniqueId + '_fixedContentDiv');\r\n            otherContentDiv = $(uniqueId + '_contentDiv');\r\n        } else {\r\n            thisContentDiv = $(uniqueId + '_contentDiv');\r\n            otherContentDiv = $(uniqueId + '_fixedContentDiv');\r\n        }\r\n\r\n        if (thisContentDiv && otherContentDiv) {\r\n            // Vertikale Scrollposition vom anderen Tabellen-Div anpassen\r\n            var scrollTop = thisContentDiv.scrollTop;\r\n            dwHelperTableScrollElementVerticalWithFixedColumns(otherContentDiv, scrollTop);\r\n\r\n            // Vertikale Scrollposition von der vertikalen ScrollBar anpassen\r\n            dwHelperTableScrollElementVerticalWithFixedColumns($(uniqueId + '_verticalScrollBarDiv'), scrollTop);\r\n        }\r\n\r\n        if (!fixedTable) {\r\n            // Header und Tabelleninhalt mit horizontaler ScrollBar synchronisieren bei der scrollbaren Tabelle\r\n            dwHelperTableScrollHorizontalWithFixedColumns(uniqueId);\r\n        }\r\n\r\n        return;\r\n    }\r\n\r\n    // Ohne fixierte Spalten\r\n    var headerDiv = $(uniqueId + \"_headerDiv\");\r\n\r\n    if (headerDiv != null) {\r\n        var contentDiv = $(uniqueId + \"_contentDiv\");\r\n        var newValue = (-contentDiv.scrollLeft) + \"px\";\r\n        // Wg. Chrome nur setzen wenn geändert\r\n        if (newValue != headerDiv.style.marginLeft) {\r\n            headerDiv.style.marginLeft = newValue;\r\n        }\r\n    }\r\n\r\n    // Neues Feature SCROLLING_ON_DEMAND (TM) :-)\r\n    var scrollRight = $(uniqueId + \"_contentDivScrollRight\");\r\n    if (scrollRight) {\r\n        var table = $(uniqueId + \"_contentTable\");\r\n        var tableHeight = dwUtilsGetContentHeight(table);\r\n        var childRight = dwDomGetChildAtIndex(scrollRight, 0);\r\n        var contentDiv = $(uniqueId + \"_contentDiv\");\r\n\r\n        childRight.style.height = tableHeight + \"px\";\r\n        scrollRight.scrollTop = contentDiv.scrollTop;\r\n\r\n        var scrollBottom = $(uniqueId + \"_contentDivScrollBottom\");\r\n        var tableWidth = dwUtilsGetContentWidth(table);\r\n        var childBottom = dwDomGetChildAtIndex(scrollBottom, 0);\r\n        childBottom.style.width = tableWidth + \"px\";\r\n\r\n        scrollBottom.scrollLeft = contentDiv.scrollLeft;\r\n    }\r\n}\r\n\r\nfunction dwHelperTableContentResized(uniqueId, autoResize, useFixedColumns) {\r\n    if (autoResize) {\r\n        var headerTable = $(uniqueId + \"_headerTable\");\r\n        if (headerTable) {\r\n            var contentDiv = $(uniqueId + \"_contentDiv\");\r\n            var headerRow = dwDomGetRealRowContainerNode(headerTable).children[0];\r\n            var lastColumn = headerRow.children[headerRow.children.length - 1];\r\n            if (lastColumn) {\r\n                var labelDiv = dwDomFindContainer(lastColumn, \"0|1\", true);\r\n                if (labelDiv) {\r\n                    var columnWidth = dwDomGetDomAttribute(labelDiv, \"columnwidth\");\r\n                    if (!columnWidth) {\r\n                        var width = parseInt(labelDiv.style.width);\r\n                        dwDomSetDomAttribute(labelDiv, \"columnwidth\", width);\r\n                        columnWidth = width;\r\n                    }\r\n                    var newColumnWidth = columnWidth;\r\n                    if (dwUtilsHasVerticalOverflow(contentDiv)) {\r\n                        // Bei einem Resize muss bestimmt werden, ob eine Scrollbar angezeigt wird\r\n                        // Hier ist aber nur die vertikale Scrollbar von belang. In diesem Fall muss der Header ~17px breiter sein\r\n                        newColumnWidth += dwUtilsGetScrollbarWidth(contentDiv);\r\n                    }\r\n                    labelDiv.style.width = newColumnWidth + \"px\";\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    if (useFixedColumns) {\r\n        var table = $(uniqueId);\r\n        if (!table) {\r\n            return;\r\n        }\r\n\r\n        var tableParent = table.parentNode;\r\n        if (tableParent) {\r\n            // Breite der gesamten Tabelle sowie der einzelnen Tabellen für fixierte und scrollbare Spalten bestimmen\r\n            var tableWidth = dwUtilsGetWidth(tableParent);\r\n\r\n            var headerHeight = 0;\r\n            var fixedHeaderTable = $(uniqueId + '_fixedHeaderTable');\r\n            var fixedHeaderTableWidth = 0;\r\n            if (fixedHeaderTable) {\r\n                headerHeight = dwUtilsGetHeight(fixedHeaderTable);\r\n                fixedHeaderTableWidth = dwUtilsGetWidth(fixedHeaderTable) - 1; // fixedHeaderTable ist 1 größer als fixedHeaderDiv\r\n            }\r\n\r\n            var headerTable = $(uniqueId + '_headerTable');\r\n            var headerTableWidth = 0;\r\n            if (headerTable) {\r\n                headerTableWidth = dwUtilsGetWidth(headerTable);\r\n            }\r\n\r\n            var tableContentWidth = fixedHeaderTableWidth + headerTableWidth;\r\n            var scrollbarWidth = parseInt(dwDomGetDomAttribute(tableParent, \"scrollbarWidth\"));\r\n\r\n            // Falls die Scrollbar über den Inhalt geblendet wird (z.B. Firefox), ist die Breite 0 -> 12 Pixel als Default\r\n            // nehmen, da die Paginierungs-Buttons ansonsten vertikal abgeschnitten werden\r\n            if (scrollbarWidth == 0) {\r\n                scrollbarWidth = 12;\r\n            }\r\n\r\n            // Höhe und Sichtbarkeit der horizontalen ScrollBar anpassen\r\n            // -1 ist jeweils notwendig für die korrekte Positionierung wie früher ohne fixierte Spalten\r\n            var horizontalScrollBarHeight = -1;\r\n            var horizontalScrollBar = $(uniqueId + '_horizontalScrollBarDiv');\r\n            if (horizontalScrollBar) {\r\n                horizontalScrollBar.style.height = (scrollbarWidth - 1) + 'px';\r\n                if ((headerTableWidth == 0) || (tableWidth >= tableContentWidth)) {\r\n                    horizontalScrollBar.style.display = 'none';\r\n                } else {\r\n                    horizontalScrollBarHeight = scrollbarWidth - 1;\r\n                    horizontalScrollBar.style.display = 'block';\r\n                }\r\n            }\r\n\r\n            // Verfügbare Höhe für die Tabellen-Inhalte berechnen\r\n            var tableHeight = dwUtilsGetHeight(tableParent);\r\n            var contentHeight = tableHeight - headerHeight - horizontalScrollBarHeight;\r\n\r\n            // BrowseButtons sind nur dann vorhanden, wenn die Tabelle seitenweise dargestellt wird\r\n            var browseButtons = $(uniqueId + '_browseButtons');\r\n            if (browseButtons) {\r\n                contentHeight -= 24; // BrowseButtons sind immer 24px hoch und dwUtilsGetHeight() liefert hier sonst manchmal zu große Werte\r\n            }\r\n\r\n            var fixedContentDiv = $(uniqueId + '_fixedContentDiv');\r\n            if (fixedContentDiv) {\r\n                fixedContentDiv.style.height = contentHeight + 'px';\r\n            }\r\n\r\n            var contentDiv = $(uniqueId + '_contentDiv');\r\n            if (contentDiv) {\r\n                contentDiv.style.height = contentHeight + 'px';\r\n            }\r\n\r\n            var contentTable = $(uniqueId + '_contentTable');\r\n            var tableContentHeight = 0;\r\n            if (contentTable) {\r\n                tableContentHeight = dwUtilsGetHeight(contentTable);\r\n            }\r\n\r\n            // Breite, Höhe und Sichtbarkeit der vertikalen ScrollBar anpassen\r\n            var verticalScrollBarWidth = 0;\r\n            var verticalScrollBar = $(uniqueId + '_verticalScrollBarDiv');\r\n            if (verticalScrollBar) {\r\n                verticalScrollBar.style.top = headerHeight + 'px';\r\n                verticalScrollBar.style.width = (scrollbarWidth - 1) + 'px';\r\n                verticalScrollBar.style.height = contentHeight + 'px';\r\n                if (contentHeight >= tableContentHeight) {\r\n                    verticalScrollBar.style.display = 'none';\r\n                } else {\r\n                    verticalScrollBarWidth = scrollbarWidth - 1;\r\n                    verticalScrollBar.style.display = 'block';\r\n                }\r\n\r\n                var verticalScrollBarContent = $(uniqueId + '_verticalScrollBarContentDiv');\r\n                if (verticalScrollBarContent) {\r\n                    verticalScrollBarContent.style.height = tableContentHeight + 'px';\r\n                }\r\n            }\r\n\r\n            // Breite der horizontalen ScrollBar erst jetzt setzen, weil diese auch davon abhängig ist, ob für den Inhalt\r\n            // eine vertikale ScrollBar benötigt wird\r\n            if (horizontalScrollBar) {\r\n                horizontalScrollBar.style.width = (tableWidth - verticalScrollBarWidth) + 'px';\r\n\r\n                var emptyContentTableDiv = $(uniqueId + '_emptyContentTableDiv');\r\n                if (emptyContentTableDiv) {\r\n                    emptyContentTableDiv.style.width = (tableContentWidth - verticalScrollBarWidth) + 'px';\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * Horizontale Scrollposition von der horizontalen ScrollBar an die scrollbaren Spalten übertragen bei Verwendung von fixierten Spalten.\r\n *\r\n * @param uniqueId\r\n */\r\nfunction dwHelperTableScrollHorizontalWithFixedColumns(uniqueId) {\r\n    var horizontalScrollBarDiv = $(uniqueId + '_horizontalScrollBarDiv');\r\n    if (horizontalScrollBarDiv) {\r\n        var headerDiv = $(uniqueId + '_headerDiv');\r\n        if (headerDiv) {\r\n            headerDiv.scrollLeft = horizontalScrollBarDiv.scrollLeft;\r\n        }\r\n\r\n        var contentDiv = $(uniqueId + '_contentDiv');\r\n        if (contentDiv) {\r\n            contentDiv.scrollLeft = horizontalScrollBarDiv.scrollLeft;\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * Vertikale Scrollposition von der vertikalen ScrollBar an die Tabelle übertragen bei Verwendung von fixierten Spalten.\r\n *\r\n * @param uniqueId\r\n */\r\nfunction dwHelperTableScrollVerticalWithFixedColumns(uniqueId) {\r\n    var verticalScrollBarDiv = $(uniqueId + '_verticalScrollBarDiv');\r\n    if (verticalScrollBarDiv) {\r\n        // Vertikale Scrollposition von den beiden Tabellen-Divs für fixierte und scrollbare Spalten anpassen\r\n        var scrollTop = verticalScrollBarDiv.scrollTop;\r\n        dwHelperTableScrollElementVerticalWithFixedColumns($(uniqueId + '_fixedContentDiv'), scrollTop);\r\n        dwHelperTableScrollElementVerticalWithFixedColumns($(uniqueId + '_contentDiv'), scrollTop);\r\n    }\r\n}\r\n\r\nfunction dwHelperTableScrollElementVerticalWithFixedColumns(element, scrollTop) {\r\n    if (element) {\r\n        // Evtl. bereits vorhandenes Timeout am Element abbrechen\r\n        if (element.onscrollTimeoutHandler) {\r\n            clearTimeout(element.onscrollTimeoutHandler);\r\n            element.onscrollTimeoutHandler = null;\r\n        }\r\n\r\n        // onscroll-Funktion am Element merken und temporär entfernen\r\n        var onscrollFunction = element.onscroll;\r\n        if (onscrollFunction) {\r\n            element.oldOnscrollFunction = onscrollFunction;\r\n            element.onscroll = null;\r\n        }\r\n\r\n        // Jetzt erst das Element scrollen\r\n        element.scrollTop = scrollTop;\r\n\r\n        // Über ein Timeout die onscroll-Funktion wieder am Element setzen\r\n        if (element.oldOnscrollFunction) {\r\n            var onscrollTimeoutHandler = setTimeout(function() {\r\n                element.onscroll = element.oldOnscrollFunction;\r\n                element.oldOnscrollFunction = null;\r\n                element.onscrollTimeoutHandler = null;\r\n            }, 100);\r\n            element.onscrollTimeoutHandler = onscrollTimeoutHandler;\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * Speichere die Scrollposition des Selects mit der übergebenen Id im zugeordneten Inputfeld\r\n * @param uniqueId\r\n */\r\nfunction dwHelperListScrollValueChanged(uniqueId) {\r\n    var scrollTopTextField = $(uniqueId + \"_scrollTop\");\r\n    var list = $(uniqueId);\r\n    scrollTopTextField.value = list.scrollTop;\r\n}\r\n\r\n/**\r\n * Speichere die Cursorposition des übergebenen Textbereichs\r\n * @param textarea\r\n */\r\nfunction dwHelperStoreCaretPosition(textarea) {\r\n    // textarea ist das Textarea-Element\r\n    // Suche das zugeordnete Textfeld für die Cursor-Position\r\n    var textfield = $(textarea.id + \"_Position\");\r\n    var caretPos = 0;\r\n\r\n    if (typeof (textarea.selectionStart) == \"number\") { // Firefox und IE9\r\n        caretPos = textarea.selectionStart;\r\n    } else if (document.selection) { // IE < 9\r\n        var range = document.selection.createRange().duplicate();\r\n        range.moveStart('character', -textarea.value.length);\r\n        caretPos = range.text.length;\r\n    }\r\n    textfield.value = caretPos;\r\n}\r\n\r\n/**\r\n * Setze die Cursorposition des Textbereichs mit der übergebenen Id\r\n * anhand des in einem zugeordneten Textfeld gespeicherten Wertes\r\n * @param textareaId\r\n */\r\nfunction dwHelperSetStoredCaretPosition(textareaId, scrollToCaret) {\r\n    var pos = $(textareaId + \"_Position\").value;\r\n    var textarea = $(textareaId);\r\n    var parentScrollPanes = dwUtilsGetParentScrollPanes(textarea);\r\n    var parentScrollPanePositions = new Array();\r\n    for (var i = 0; i < parentScrollPanes.length; i++) {\r\n        var parentScrollPaneId = parentScrollPanes[i].id;\r\n        if (!dwFrameworkRestoreScrollPositions[parentScrollPaneId]) {\r\n            parentScrollPanePositions.push(new DWPoint(parentScrollPanes[i].scrollLeft, parentScrollPanes[i].scrollTop));\r\n        }\r\n    }\r\n\r\n    if (textarea.createTextRange) { // IE. Caret-Position wird automatisch in den sichtbaren Ausschnitt einer Scrollpane geschoben\r\n        var range = textarea.createTextRange();\r\n        range.collapse(true);\r\n        range.moveEnd('character', pos);\r\n        range.moveStart('character', pos);\r\n        range.select();\r\n    } else if (textarea.setSelectionRange) {\r\n        // Früher wurde hier noch etwas Spezielles gemacht, aber inzwischen benötigt das der Firefox nicht mehr\r\n    } else if (typeof (textarea.selectionStart) == \"number\") {\r\n        textarea.selectionStart = pos;\r\n        textarea.selectionEnd = pos;\r\n    }\r\n    textarea.blur();\r\n\r\n    for (var i = 0; i < parentScrollPanePositions.length; i++) {\r\n        dwFrameworkRestoreScrollPositions[parentScrollPanes[i].id] = parentScrollPanePositions[i];\r\n    }\r\n    if (textarea.createTextRange) {\r\n        dwHelperResetScrollPositions();\r\n        if (scrollToCaret) {\r\n            dwHelperScrollToCaretPositionOfTextarea(textareaId, pos);\r\n        }\r\n    } else {\r\n        setTimeout(function() { // Key-Event löst nachgelagertes Scrolling zur textarea aus. Reset muss nach dem Key-Event bedingten Scrolling ausgeführt werden\r\n            dwHelperResetScrollPositions();\r\n            dwHelperScrollToCaretPositionOfTextarea(textareaId, pos);\r\n        }, 10);\r\n    }\r\n}\r\n\r\nfunction dwHelperResetScrollPositions() {\r\n    for (var id in dwFrameworkRestoreScrollPositions) {\r\n        var parentScrollPane = $(id);\r\n        var parentScrollPanePosition = dwFrameworkRestoreScrollPositions[id];\r\n        if (parentScrollPane\r\n            && ((parentScrollPane.scrollTop != parentScrollPanePosition.y)\r\n                || (parentScrollPane.scrollLeft != parentScrollPanePosition.x))) {\r\n            parentScrollPane.scrollTop = parentScrollPanePosition.y;\r\n            parentScrollPane.scrollLeft = parentScrollPanePosition.x;\r\n        }\r\n        delete dwFrameworkRestoreScrollPositions[id];\r\n    }\r\n}\r\n\r\n/**\r\n * Entfernt das Caret in der Textarea, wenn kein Text selektiert ist\r\n * @param textareaId\r\n */\r\nfunction dwHelperRemoveCaretIfNoSelection(textareaId) {\r\n    var textarea = $(textareaId);\r\n    if (textarea) { // Textarea nicht gefunden (NULL oder undefined)\r\n        setTimeout(function() {\r\n            if (textarea.selectionStart == textarea.selectionEnd) {\r\n                textarea.blur();\r\n            }\r\n        }, 20);\r\n    }\r\n}\r\n\r\n/**\r\n * Positioniert die Scrollpane (die direkt um eine Textarea liegt), so dass die aktuelle\r\n * Caret Position in den Fokus gerückt wird\r\n * @param textareaId\r\n * @param caretPosition\r\n */\r\nfunction dwHelperScrollToCaretPositionOfTextarea(textareaId, caretPosition) {\r\n    var textarea = $(textareaId);\r\n    if (!textarea) { // Textarea nicht gefunden (NULL oder undefined)\r\n        return;\r\n    }\r\n    if ((textarea.parentNode == null) || (textarea.parentNode.className != \"guiscrollpane\")) {\r\n        // Textarea ist nicht in einer Scrollpane eingehängt. Es soll maximal die Parent-Scrollpane verändert werden,\r\n        // nicht die anderen Container die ggf. weitere Elemente beinhalten. Abbruch.\r\n        return;\r\n    }\r\n    var scrollpane = textarea.parentNode;\r\n    var inputScrollTop = $(scrollpane.id + \"_scrollTop\");\r\n    var inputScrollLeft = $(scrollpane.id + \"_scrollLeft\");\r\n\r\n    var fontFamily = textarea.style.fontFamily;\r\n    var fontSize = dwUtilsGetFontSize(textarea);\r\n    var lineHeight = dwUtilsGetLineHeight(textarea);\r\n\r\n    var textUpToCaret = textarea.value.substring(0, caretPosition);\r\n    var lines = dwUtilsSplit(textUpToCaret, \"\\n\", true);\r\n    var textLine = (lines.length > 0) ? lines[lines.length - 1] : \"\";\r\n    var caretPositionX = dwHelperGetSizeForText(textLine, fontFamily, fontSize, lineHeight, \"\\n\").width;\r\n    var caretPositionY = dwHelperGetSizeForText(textUpToCaret, fontFamily, fontSize, lineHeight, \"\\n\").height;\r\n    inputScrollTop.value = caretPositionY;\r\n    inputScrollLeft.value = caretPositionX;\r\n    dwHelperScrollToStoredPosition(scrollpane.id);\r\n}\r\n\r\n/**\r\n * Aktualisiert die eigene Größe (width/height) von Komponenten mit Text-Inhalt (z.B. GuiTextArea)\r\n * @param control\r\n * @param checkLineWrap true, wenn nach attribut lineWrap gesucht und dessen Wert ausgewertet werden soll\r\n *                      false, wenn die Zeilen nicht an der Breite des Parents (z.B. Scrollpane) umgebrochen werden sollen\r\n */\r\nfunction dwHelperUpdateOwnSize(control, checkLineWrap) {\r\n    try {\r\n        if (!control) {\r\n            return;\r\n        }\r\n        var parentControl = control.parentElement;\r\n        if (framework_isIE7 && (parentControl.nodeName.toLowerCase() == \"span\")) {\r\n            parentControl = parentControl.parentElement;\r\n        }\r\n        var scrollbarWidth = dwUtilsGetScrollbarWidth(parentControl);\r\n        var extraLength = (scrollbarWidth > 0) ? scrollbarWidth : 17; // muss ggf. addiert werden, falls Scrollbars notwendig sind\r\n        var lineWrap = \"false\";\r\n        if (checkLineWrap && (control.getAttribute(\"lineWrap\") != null)) {\r\n            lineWrap = control.getAttribute(\"lineWrap\");\r\n        }\r\n        if (lineWrap == \"true\") {\r\n            // FF wendet die 100% minHeight bei der Berechnung der scrollHeight bereits an. Wir benötigen aber den tatsächlich notwendigen\r\n            // Platz für die Auswertung der scrollHeight\r\n            control.style.minHeight = \"0px\";\r\n            var requiresResetMinSizes = true;\r\n            var scrollHeight = control.scrollHeight;\r\n            if (dwUtilsHasElementAtLeastOneOfClasses(parentControl, [\"guiscrollpane\", \"modern_scrollpane_design_thin\"])) {\r\n                if ((!(control.getAttribute(\"noScrollHeightResize\"))) && (scrollHeight > 0) && (scrollHeight + extraLength) > parentControl.offsetHeight) {\r\n                    scrollHeight += extraLength;\r\n                    control.setAttribute(\"noScrollHeightResize\", \"true\");\r\n                }\r\n                if (framework_isIE7) {\r\n                    control.style.width = control.style.minWidth;\r\n                } else {\r\n                    control.style.width = \"100%\";\r\n                }\r\n                if (parentControl.clientWidth) {\r\n                    control.style.height = calculateComponentContentHeight(control, parentControl.clientWidth) + \"px\";\r\n                } else {\r\n                    setTimeout(function() {\r\n                        // Workaround für den Fall, dass der Layouter noch nicht fertig ist. Der eigentliche Aufruf wird etwas\r\n                        // verzögert in die Event Queue geschoben...\r\n                        control.style.height = calculateComponentContentHeight(control, parentControl.clientWidth) + \"px\";\r\n                    }, 50);\r\n                }\r\n            }\r\n            if (requiresResetMinSizes) {\r\n                control.style.minHeight = \"100%\";\r\n                control.style.minWidth = \"100%\";\r\n            }\r\n        } else {\r\n            var textSize = dwHelperGetSizeForTextControl(control);\r\n            var widthToApply = textSize.width;\r\n            var heightToApply = textSize.height;\r\n            if (parentControl.className == \"guiscrollpane\") {\r\n                if ((widthToApply + extraLength) > parentControl.offsetWidth) {\r\n                    widthToApply += extraLength;\r\n                }\r\n                if ((heightToApply + extraLength) > parentControl.offsetHeight &&\r\n                    widthToApply > parentControl.offsetWidth) {\r\n                    //fuegt Scrollbar-Breite hinzu, aber nur wenn ein horizontal Scrollbar gezeigt werden soll\r\n                    heightToApply += extraLength;\r\n                }\r\n            }\r\n            control.style.width = widthToApply + \"px\";\r\n            control.style.height = heightToApply + \"px\";\r\n            control.style.minHeight = parentControl.clientHeight + \"px\";\r\n            control.style.minWidth = parentControl.clientWidth + \"px\";\r\n        }\r\n    } catch (exception) {\r\n        // Funktion der Controls darf nicht eingeschränkt werden ...\r\n    }\r\n}\r\n\r\n/**\r\n * Die Methode wird benutzt um die Höhe von Text in der Komponente zu berechnen.\r\n * Momentan wird sie nur in der \"Textarea\" Komponente mit dem \"lineWrap\" Attribute verwendet.\r\n *\r\n * Das Problem ist, dass die \"dwHelperGetSizeForTextControl\" Methode bei der Berechnung nicht berücksichtigt, dass\r\n * die Zeilen im \"Textarea\" die länger als die erlaubte Breite sind, in die nächste Zeile übertragen werden.\r\n * Das verursacht, dass die Höhe des Textes (zweimal) grösser ist als die Methode berechnet.\r\n *\r\n * In dieser Methode wird jede Zeile (gesplittet an \\n) geprüft. Ist eine Zeile größer als die maximal verfügbare/erlaubte Breite der\r\n * Textarea, wird dies erkannt und ermittelt, auf wie viele Zeilen sich der eingegebene Text erstrecken wird, um diese\r\n * Beschränkungen nicht zu verletzen.\r\n *\r\n * Diese Berechnung fliesst in die Ermittlung der Gesamthöhe der (Textarea) Komponente mit ein.\r\n *\r\n * @param control die Komponente, für die die Gesamthöhe des Textes berechnet wird\r\n * @param maxWidth maximale Breite einer Zeile\r\n * @returns {number} die berechnete Höhe des Textes\r\n */\r\nfunction calculateComponentContentHeight(control, maxWidth) {\r\n    var totalHeight = 0;\r\n    var fontSize = dwUtilsGetFontSize(control);\r\n    var lineHeight = dwUtilsGetLineHeight(control);\r\n    var fontFamily = control.style.fontFamily;\r\n    if (control.value) {\r\n        var lines = control.value.split('\\n');\r\n        for (var i = 0; i < lines.length; i++) {\r\n            var text = dwUtilsReplaceCharacters(lines[i], DWUTILS_XML_ESCAPE_MAP);\r\n            if (text == \"\") {\r\n                //leere Zeile - ein leeres Buchstaben wird hinzugefuegt, damit die Hoehe berechnet werden kann\r\n                text = \" \";\r\n            }\r\n            var size = dwHelperGetSizeForText(text, fontFamily, fontSize, lineHeight, \"\\n\");\r\n            if (size.width > maxWidth) { //die Zeile zu breit\r\n                //wie viele Zeilen werden benötigt, damit die maximale Breite nicht überschreitet wird\r\n                var cellsCount = (Math.ceil(size.width / maxWidth));\r\n                totalHeight = totalHeight + cellsCount * size.height; //berechne die Höhe des Textes\r\n            } else {\r\n                totalHeight = totalHeight + size.height;\r\n            }\r\n        }\r\n    }\r\n    return totalHeight;\r\n}\r\n\r\nfunction dwHelperGetSizeForTextControl(control) {\r\n    var fontSize = dwUtilsGetFontSize(control);\r\n    var lineHeight = dwUtilsGetLineHeight(control);\r\n    var fontFamily = control.style.fontFamily;\r\n    if (control.value) {\r\n        var text = dwUtilsReplaceCharacters(control.value, DWUTILS_XML_ESCAPE_MAP);        // Größenberechnung schlägt fehl, falls < enthalten\r\n        return dwHelperGetSizeForText(text, fontFamily, fontSize, lineHeight, \"\\n\");\r\n    } else {\r\n        // Alternative zum Auslesen des Textes, z.B. eines Span Elements, ...\r\n        var textNodes = dwDomGetChildNodesByType(control, DWUTILS_NODE_TYPE.TEXT);\r\n        var size = {width: 0, height: 0};\r\n        for (var i = 0; i < textNodes.length; i++) {\r\n            var textNode = textNodes[i];\r\n            var text = dwUtilsReplaceCharacters(textNode.data, DWUTILS_XML_ESCAPE_MAP);        // Größenberechnung schlägt fehl, falls < enthalten\r\n            var tempSize = dwHelperGetSizeForText(text, fontFamily, fontSize, lineHeight, \"\\r\"); // \\r ist der Multiline Trenner bei Textareas\r\n            if (tempSize.width > size.width) {\r\n                size.width = tempSize.width;\r\n            }\r\n            if (tempSize.height > size.height) {\r\n                size.height = tempSize.height;\r\n            }\r\n        }\r\n        return size;\r\n    }\r\n}\r\n\r\nfunction dwHelperGetSizeForText(text, fontFamily, fontSize, lineHeight, lineDivider) {\r\n    var container = document.getElementById(\"dwhelpertextcontainer\");\r\n    if (!container) {\r\n        container = document.createElement(\"div\");\r\n        container.style.visibility = \"hidden\";\r\n        container.style.position = \"absolute\";\r\n        container.style.left = \"-10000px\";\r\n        container.style.top = \"-10000px\";\r\n        container.style.whiteSpace = \"pre\"; // Leerzeichen müssen erhalten bleiben ...\r\n        container.id = \"dwhelpertextcontainer\";\r\n        document.getElementById(\"body\").appendChild(container);\r\n    }\r\n    container.style.fontSize = fontSize + \"px\";\r\n    container.style.fontFamily = fontFamily || \"inherit\"; // Font-Family (z.B. Monospace) kann die Darstellung beeinflussen\r\n    container.style.lineHeight = lineHeight + \"px\";\r\n\r\n    var textLines = dwUtilsSplit(text, lineDivider, true);\r\n    var containerText = textLines.join(\"<br>\");\r\n    dwDomSetDomText(container, containerText, false);\r\n    var width = container.offsetWidth;\r\n    var height = container.offsetHeight;\r\n    return {width: width, height: height};\r\n}\r\n\r\nfunction dwHelperShowMenu(event, menuId) {\r\n    event = dwFrameworkGetEvent(event);\r\n    var popup = dwPopup_getPopup(DW_POPUP_TYPE.MENUBAR);\r\n    var menubarentryId = menuId + \"_menu\";\r\n    var menubarentry = $(menubarentryId);\r\n    var menu = $(menuId);\r\n    if (event && (event.type == \"click\")) {\r\n        var currentlyOpenedContextMenuPopupLocal = currentlyOpenedContextMenuPopup;\r\n        if (currentlyOpenedContextMenuPopupLocal) {\r\n            currentlyOpenedContextMenuPopup = null;\r\n            currentlyOpenedContextMenuPopupLocal.close();\r\n        }\r\n        if (popup.isVisible()) {\r\n            popup.close();\r\n            return;\r\n        }\r\n\r\n    }\r\n    if (event && (event.type == \"mouseenter\")) {\r\n        if (!popup.isVisible()) {\r\n            // Popup ist noch ausgeblendet. Keine Reaktion auf Maus Bewegungen ...\r\n            return;\r\n        }\r\n        if (popup.wrapper) {\r\n            popup.closeSubmenus();\r\n        } else {\r\n            popup.close();\r\n        }\r\n    }\r\n\r\n    popup = dwPopup_wrapControl(menu, DW_POPUP_TYPE.MENUBAR, dwHelperRedirectContextMenuEventsToWrapper);\r\n    if (!popup.isVisible()) {\r\n        popup.setInvisiblePosition();\r\n    }\r\n    popup.setReferrer(menubarentry);\r\n    if (!popup.isVisible()) {\r\n        popup.fadeIn();\r\n    }\r\n    if (popup.wrapper) {\r\n        popup.adjustWrapper();\r\n    }\r\n}\r\n\r\nfunction dwHelperSelectMenuItem(event, menuItemId, eventHandlerComponentId) {\r\n    var menu = (menuItemId != eventHandlerComponentId) ? dwPopup_getPopup(DW_POPUP_TYPE.CONTEXTMENU) : dwPopup_getPopup(DW_POPUP_TYPE.MENUBAR);\r\n    menu.selectMenuItem(menuItemId);\r\n    if (event.type == \"click\") {\r\n        dwFrameworkDisableEventBubbling(event);\r\n        if (menu.isMenuItemClickable()) {\r\n            if (typeof (dwAjaxMenuItemOnClick) != \"undefined\") {\r\n                dwAjaxMenuItemOnClick(event, eventHandlerComponentId, menuItemId, \"guiWindowId=\" + $(menuItemId).getAttribute(\"guiWindowId\"), true);\r\n            } else if (typeof (dwSwingFrameworkFireCallbackEvent) != \"undefined\") {\r\n                var actualActivatingControl = document.getElementsByName(\"___ID_actualActivatingControl\")[0].value;\r\n                var activatingControl = document.getElementsByName(\"___ID_activatingControl\")[0].value;\r\n                dwSwingFrameworkFireCallbackEvent(\"menuItemEvent\", menuItemId + \"@DWSUB@\" + actualActivatingControl + \"@DWSUB@\" + activatingControl);\r\n            }\r\n            menu.close();\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * Toggled den Classname zur Anzeige des Toggle-Buttons\r\n * @param control\r\n */\r\nfunction dwHelperToggleButton(control) {\r\n    var classNames = control.className;\r\n    if (classNames.indexOf(\"guitogglebutton_up\") > -1) {\r\n        dwDomRemoveClass(control, \"guitogglebutton_up\");\r\n        dwDomAddClass(control, \"guitogglebutton_down\");\r\n    } else {\r\n        dwDomRemoveClass(control, \"guitogglebutton_down\");\r\n        dwDomAddClass(control, \"guitogglebutton_up\");\r\n    }\r\n}\r\n\r\n/**\r\n * positioniert und zeigt das Kontextmenü zu einer Komponente bei rechtem Mausklick\r\n */\r\nfunction dwHelperShowContextMenu(event, eventHandlerComponentId, elementId, contextMenuId, itemsToDeactivate, activeItems,\r\n                                 guiWindowId) {\r\n    if (!event) {\r\n        event = window.event;\r\n    }\r\n    // Explizites ausblenden ggf. für Safari notwendig... alle normalen Browser kommen ohne diese Zeilen aus\r\n//    var previousContextMenu = dwPopup_getPopup(DW_POPUP_TYPE.CONTEXTMENU);\r\n//    previousContextMenu.setVisible(false);\r\n    // rechte Maustaste? Abfragen für verschiedene Browser, siehe http://de.selfhtml.org/navigation/anzeige/rechte_maustaste.htm\r\n    if ((event.type && event.type == \"contextmenu\") || (event.button && event.button == 2) || (event.which && event.which == 3)) {\r\n        // Wir müssen hier auch ein Click losschicken, damit die Komponente selektiert wird (z.B: Treeknoten), das geht aktuell nur für Ajax\r\n\r\n        var contextMenu = $(contextMenuId);\r\n        if (contextMenu != null) {\r\n            contextMenu.dwParentElement = $(elementId);\r\n            for (var i = 0; i < activeItems.length; i++) {\r\n                var uniqueId = activeItems[i];\r\n                var item = $(uniqueId + \"_menu\");\r\n                if (item == null) {\r\n                    item = $(uniqueId);\r\n                }\r\n                if (item != null) {\r\n                    var onclickHandler = item.getAttribute(\"deactivatedOnclickHandler\");\r\n                    if ((onclickHandler != null) && (onclickHandler != \"\")) {\r\n                        item.setAttribute(\"onclick\", onclickHandler);\r\n                        item.setAttribute(\"deactivatedOnclickHandler\", \"\");\r\n                    }\r\n                    var onmouseoverHandler = item.getAttribute(\"deactivatedOnmouseoverHandler\");\r\n                    if ((onmouseoverHandler != null) && (onmouseoverHandler != \"\")) {\r\n                        item.setAttribute(\"onmouseover\", onmouseoverHandler);\r\n                        item.setAttribute(\"deactivatedOnmouseoverHandler\", \"\");\r\n                    }\r\n                    item.style.color = \"\";\r\n                }\r\n            }\r\n            for (var i = 0; i < itemsToDeactivate.length; i++) {\r\n                var uniqueId = itemsToDeactivate[i];\r\n                var item = $(uniqueId + \"_menu\");\r\n                if (item == null) {\r\n                    item = $(uniqueId);\r\n                }\r\n                if (item != null) {\r\n                    var onclickHandler = item.getAttribute(\"onclick\");\r\n                    var deactivatedOnclickHandler = item.getAttribute(\"deactivatedOnclickHandler\");\r\n                    if ((deactivatedOnclickHandler == null) || (deactivatedOnclickHandler == \"\")) {\r\n                        item.setAttribute(\"onclick\", \"dwFrameworkDisableEventBubbling(event);return false;\");\r\n                        item.setAttribute(\"deactivatedOnclickHandler\", onclickHandler);\r\n                    }\r\n                    var onmouseoverHandler = item.getAttribute(\"onmouseover\");\r\n                    var deactivatedOnmouseoverHandler = item.getAttribute(\"deactivatedOnmouseoverHandler\");\r\n                    if ((deactivatedOnmouseoverHandler == null) || (deactivatedOnmouseoverHandler == \"\")) {\r\n                        item.setAttribute(\"onmouseover\", \"dwFrameworkDisableEventBubbling(event);return false;\");\r\n                        item.setAttribute(\"deactivatedOnmouseoverHandler\", onmouseoverHandler);\r\n                    }\r\n\r\n                    item.style.color = \"#c0c0c0\";\r\n                }\r\n            }\r\n            var eventHandlerComponent = $(eventHandlerComponentId);\r\n            var eventTarget = dwUtilsGetEventTarget(event);\r\n            var actualActivatingControl = dwHelperFindActualActivatingControl(eventHandlerComponent, eventTarget,\r\n                                                                              (eventHandlerComponentId != elementId));\r\n\r\n            if (actualActivatingControl == null) {\r\n                return;\r\n            }\r\n            var id__submit_contextMenuActualActivatingControl;\r\n            if (actualActivatingControl != null) {\r\n                // Ein Element mit ID wurde gefunden und wird als actualActivatingControl gesetzt\r\n                id__submit_contextMenuActualActivatingControl = actualActivatingControl.getAttribute(\"id\");\r\n            } else {\r\n                // Bestimmung des eigentlichen Knotens, auf dem das Event ausgelöst wurde, muss über Koordinaten ausgehend\r\n                // von der eventhandler Komponente ausgegeben werden. Die entsprechende Komponente muss den Navigationspfad\r\n                // danach analysieren und das richtige Element bestimmen können (z.B. Zeile / Spalte / ...)\r\n                id__submit_contextMenuActualActivatingControl = \"|PATH|\" + dwUtilsGetNavigationPath(eventTarget, eventHandlerComponent, DWDOM_NAVIGATION_PATH_DIRECTION.BOTTOM_UP);\r\n            }\r\n            var actualActivatingControlInput = $(guiWindowId + \"___ID_actualActivatingControl\");\r\n            if (!actualActivatingControlInput && (typeof (dwSwingFrameworkCreateHiddenInput) != \"undefined\")) {\r\n                actualActivatingControlInput = dwSwingFrameworkCreateHiddenInput(guiWindowId, \"___ID_actualActivatingControl\");\r\n            }\r\n            actualActivatingControlInput.value = id__submit_contextMenuActualActivatingControl;\r\n            // Wir müssen ein Rechtsklick Event rüberschicken\r\n            if (actualActivatingControl != null && typeof (dwAjaxDefaultOnRightClick) != \"undefined\") {\r\n                dwAjaxDefaultOnRightClick(event, eventHandlerComponentId, id__submit_contextMenuActualActivatingControl, \"\", true);\r\n            }\r\n            var mousePos = dwUtilsGetCurrentMousePositionPerEvent(event);\r\n            // Damit wir nicht über dem Kontextmenü das Browserkontextmenü anzeigen, weil das Kontextmenü selbst\r\n            // keinen contextmenü Eintrag hat. Deshalb zeigen wir es ein bisschen verschoben an\r\n            mousePos.x += 4;\r\n            currentlyOpenedContextMenuPopup = dwPopup_getPopup(DW_POPUP_TYPE.CONTEXTMENU);\r\n            // Wir müssen hier außerhalb dieses Abarbeitungsthreads gehen, weil er nur dann die richtige Größe für\r\n            // das Teil hat. Wenn man setTimeout auskommentiert, dann wird das Control zu weit unten angezeigt, wenn\r\n            // man in der Stücklistentabelle am unteren Fensterrand rechts klickt\r\n            if (!currentlyOpenedContextMenuPopup.isHeavyWeight() || (typeof (dwSwingFrameworkCreateHiddenInput) != \"undefined\")) {\r\n                // Heavy Weight Controls werden durch expliziten Aufruf von dwHelperShowHeavyWeightContextMenu\r\n                // nach der Aktualisierung angezeigt\r\n                setTimeout(function() {\r\n                    dwHelperInternalWrapAndShowContextMenu(contextMenu, mousePos);\r\n                }, 100);\r\n            }\r\n            var activatingControl = $(guiWindowId + \"___ID_activatingControl\");\r\n            if (!activatingControl && (typeof (dwSwingFrameworkCreateHiddenInput) != \"undefined\")) {\r\n                activatingControl = dwSwingFrameworkCreateHiddenInput(guiWindowId, \"___ID_activatingControl\");\r\n            }\r\n            activatingControl.value = elementId;\r\n        }\r\n    }\r\n}\r\n\r\nfunction dwHelperShowHeavyWeightContextMenu(contextMenuId, position) {\r\n    if (currentlyOpenedContextMenuPopup && currentlyOpenedContextMenuPopup.isHeavyWeight()) {\r\n        var contextMenu = $(contextMenuId);\r\n        dwHelperInternalWrapAndShowContextMenu(contextMenu, position);\r\n    }\r\n}\r\n\r\nfunction dwHelperInternalWrapAndShowContextMenu(contextMenu, mousePos) {\r\n    var popup = dwPopup_wrapControl(contextMenu, DW_POPUP_TYPE.CONTEXTMENU, dwHelperRedirectContextMenuEventsToWrapper);\r\n    popup.setInvisiblePosition();\r\n    popup.fadeIn();\r\n    popup.adjustWrapper();\r\n    popup.setPosition(mousePos);\r\n}\r\n\r\n/**\r\n * Wrapper Funktion für Combobox Events innerhalb eines IFrames. Verwendet bei Heavy-Weight Popups.\r\n * Events die im Wrapper ausgelöst werden, werden zum noch im Haupt-Fenster eingebundenen Popup-Objekt weitergeleitet\r\n * Bei mouseover/mouseout (Hover) wird 'this' umgesetzt auf die Objekte im Wrapper\r\n * @param popup\r\n * @param control\r\n */\r\nfunction dwHelperRedirectComboboxPopupEventsToWrapper(popup, control) {\r\n    var rows = control.children;\r\n    var originalRows = $(control.id).children;\r\n    for (var i = 0; i < rows.length; i++) {\r\n        // Closure notwendig zur Kapselung der Variable 'i' in der internen Funktion\r\n        // Ansonsten würde die redirect-Methode immer auf dem gleichen row Element (dem letzten) aufgerufen werden\r\n        (function(i) {\r\n            var row = rows[i];\r\n            var rowInParentDoc = originalRows[i];\r\n            if (row.onclick) {\r\n                row.onclick = function(event) {\r\n                    event = dwFrameworkGetEvent(event);\r\n                    var thisContext = (row.tagName.toLowerCase() == \"input\") ? row : rowInParentDoc;\r\n                    dwPopup_redirectEvent(event, rowInParentDoc, thisContext);\r\n                };\r\n            }\r\n            if (row.onchange) {\r\n                row.onchange = function(event) {\r\n                    event = dwFrameworkGetEvent(event);\r\n                    dwPopup_redirectEvent(event, rowInParentDoc, rowInParentDoc);\r\n                    // Checked Flag wird explizit in das HTML Fragment im Hauptfenster geschrieben\r\n                    if (row.checked) {\r\n                        rowInParentDoc.setAttribute(\"checked\", \"checked\");\r\n                    } else {\r\n                        rowInParentDoc.removeAttribute(\"checked\");\r\n                    }\r\n                };\r\n            }\r\n            var rowHoverRedirect = function(event) {\r\n                event = dwFrameworkGetEvent(event);\r\n                dwPopup_redirectEvent(event, rowInParentDoc, row);\r\n            };\r\n            if (row.onmouseover) {\r\n                row.onmouseover = rowHoverRedirect;\r\n            }\r\n            if (row.onmouseout) {\r\n                row.onmouseout = rowHoverRedirect;\r\n            }\r\n        })(i);\r\n    }\r\n    if (framework_isIE8 || framework_isIELegacyMode) {\r\n        // Im Internet Explorer 8 werden Event Informationen nicht als Parameter übergeben - es gibt nur ein globales Event\r\n        // Objekt im window Scope. Das aktuelle Event wird ausgewertet und für spätere Zugriffe auf das Event Objekt als dw_event im Window abgelegt\r\n        // In der getEvent Methode kann dieses Objekt ausgelesen werden\r\n        window.dw_event = dwFrameworkGetEvent(event);\r\n    }\r\n}\r\n\r\n/**\r\n * Wrapper Funktion für Contextmenu Events innerhalb eines IFrames. Verwendet bei Heavy-Weight Popups.\r\n * Events die im Wrapper ausgelöst werden, werden zum noch im Haupt-Fenster eingebundenen Contextmenu-Objekt weitergeleitet\r\n * Bei mouseover/mouseout (Hover) wird 'this' umgesetzt auf die Objekte im Wrapper\r\n * @param popup\r\n * @param control\r\n */\r\nfunction dwHelperRedirectContextMenuEventsToWrapper(popup, control) {\r\n    var rows = control.getElementsByTagName(\"tr\");\r\n    for (var i = 0; i < rows.length; i++) {\r\n        (function(i) {\r\n            var row = rows[i];\r\n            if (row.id) {\r\n                var rowInParentDoc = document.getElementById(row.id);\r\n                // Prüfung des Knotens (existiert Eventlistener) im Hauptdokument aufgrund IE8 Einschränkungen (im IFrame ist der Knoten ggf. ohne Event-Listener)\r\n                if (rowInParentDoc.onclick) {\r\n                    row.onclick = function(event) {\r\n                        if (framework_isIE8 && popup.wrapper) {\r\n                            // Im Internet Explorer 8 werden Event Informationen nicht als Parameter übergeben - es gibt nur ein globales Event\r\n                            // Objekt im window Scope. In unserem Einsatzfall wird das Event im iframe ausgelöst, und an eine Komponente\r\n                            // im parent (window) weitergeleitet. In diesem parent window existiert allerdings noch kein Event Objekt\r\n                            // -> Event wird explizit an den Parent übergeben. In der getEvent Methode kann dieses Objekt ausgelesen werden\r\n                            event = popup.wrapper.contentWindow.event;\r\n                            popup.wrapper.contentWindow.parent.dw_event = event;\r\n                        }\r\n                        dwPopup_redirectEvent(event, rowInParentDoc, rowInParentDoc);\r\n                    };\r\n                }\r\n                var rowHoverRedirect = function(event) {\r\n                    if (framework_isIE8 && popup.wrapper) {\r\n                        // Im Internet Explorer 8 werden Event Informationen nicht als Parameter übergeben - es gibt nur ein globales Event\r\n                        // Objekt im window Scope. In unserem Einsatzfall wird das Event im iframe ausgelöst, und an eine Komponente\r\n                        // im parent (window) weitergeleitet. In diesem parent window existiert allerdings noch kein Event Objekt\r\n                        // -> Event wird explizit an den Parent übergeben. In der getEvent Methode kann dieses Objekt ausgelesen werden\r\n                        event = popup.wrapper.contentWindow.event;\r\n                        popup.wrapper.contentWindow.parent.dw_event = event;\r\n                    }\r\n                    dwPopup_redirectEvent(event, rowInParentDoc, row);\r\n                };\r\n                if (rowInParentDoc.onmouseenter) {\r\n                    row.onmouseenter = rowHoverRedirect;\r\n                }\r\n                if (rowInParentDoc.onmouseleave) {\r\n                    row.onmouseleave = rowHoverRedirect;\r\n                }\r\n            }\r\n        })(i);\r\n    }\r\n    if (framework_isIE8) {\r\n        // Im Internet Explorer 8 werden Event Informationen nicht als Parameter übergeben - es gibt nur ein globales Event\r\n        // Objekt im window Scope. In unserem Einsatzfall wird das Event im iframe ausgelöst, und an eine Komponente\r\n        // im parent (window) weitergeleitet. In diesem parent window existiert allerdings noch kein Event Objekt\r\n        // -> Event wird explizit an den Parent übergeben. In der getEvent Methode kann dieses Objekt ausgelesen werden\r\n        window.dw_event = dwFrameworkGetEvent(event);\r\n    }\r\n}\r\n\r\n/**\r\n * Navigiert von Node zu topMost und liefert den ersten Knoten zurück, der ein ID Attribut hat\r\n *\r\n * Bei Komponenten, die nicht im Komponentenbaum zugreifbar sind (z.B. Tabelle / Tree) darf der topMost Knoten\r\n * bei der Ermittlung der ID nicht berücksichtigt werden (forbidTopMost).\r\n * Kann keine ID gefunden werden, wird NULL zurückgeliefert. Die Bestimmung des Objektes muss dann auf andere Weise erfolgen\r\n * (z.B. Koordinaten)\r\n * @param topMost\r\n * @param node\r\n * @param forbidTopMost\r\n */\r\nfunction dwHelperFindActualActivatingControl(topMost, node, forbidTopMost) {\r\n    do {\r\n        // 1. Abbruchkriterium: Wenn ich beim obersten angekommen bin, dann ist Schluss\r\n        if (topMost == node) {\r\n            if (forbidTopMost) {\r\n                return null; // z.B. im GuiTable NICHT in die Tabelle geklickt\r\n            } else {\r\n                return topMost;\r\n            }\r\n        }\r\n\r\n        if ((node.nodeName.toLowerCase() == \"td\") && (node.childNodes.length == 1)) {\r\n            // Die ersten drei Verschachtelten anschauen\r\n            var childNode = node.childNodes[0];\r\n            for (var i = 0; i < 3; i++) {\r\n                if (dwDomHasAttribute(childNode, \"id\")) {\r\n                    return childNode;\r\n                }\r\n                if (childNode.childNodes.length == 1) {\r\n                    childNode = childNode.childNodes[0];\r\n                } else {\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n        if ((dwDomHasAttribute(node, \"id\")) && (node.getAttribute(\"id\").indexOf(\"_\") == -1)) {\r\n            return node;\r\n        }\r\n    } while (node = node.parentNode);\r\n\r\n    return null;\r\n}\r\n\r\nfunction dwHelperRotateMarquee(uniqueId, startId) {\r\n    var mainElement = $(uniqueId);\r\n    if (!mainElement) {\r\n        // Gibts nicht mehr\r\n        return;\r\n    }\r\n    if (mainElement.marqueeposition < 0) {\r\n        // Wurde händisch gestoppt\r\n        return;\r\n    }\r\n    if (mainElement.marqueeStartId && (mainElement.marqueeStartId != startId)) {\r\n        // Der Marquee wurde schon wieder neu gestartet. Ich laufe jetzt nicht mehr weiter (dafür gibts einen anderen Thread der jetzt läuft)\r\n        return;\r\n    }\r\n\r\n    var foregroundElement = $(uniqueId + \"_foreground\");\r\n    var mainWidth = dwUtilsGetWidth(mainElement);\r\n    var mainContentWidth = dwUtilsGetContentWidth(mainElement);\r\n    var mainOffsets = mainWidth - mainContentWidth;\r\n    var foregroundWidth = dwUtilsGetWidth(foregroundElement);\r\n    var position = mainElement.marqueeposition;\r\n    var direction = mainElement.marqueedirection;\r\n    // Variante für Marquee von links nach rechts, nach link, nach rechts usw. ist mal aktiviert (analog Swing Default)\r\n    if (true) {\r\n        if (direction == 'e') {\r\n            position++;\r\n            if (position > mainWidth - mainOffsets - foregroundWidth) {\r\n                direction = 'w';\r\n                position--;\r\n            }\r\n        } else {\r\n            position--;\r\n            if (position < 0) {\r\n                direction = 'e';\r\n                position++;\r\n            }\r\n        }\r\n    } else {\r\n        // Wenn wir rechts anstossen, dann fangen wir links wieder an\r\n        position++;\r\n        if (position > mainWidth - mainOffsets - foregroundWidth) {\r\n            position = 0;\r\n        }\r\n    }\r\n\r\n    mainElement.marqueeposition = position;\r\n    mainElement.marqueedirection = direction;\r\n    foregroundElement.style.left = position + \"px\";\r\n\r\n    setTimeout(\"dwHelperRotateMarquee('\" + uniqueId + \"', '\" + startId + \"')\", mainElement.intervalMs);\r\n}\r\n\r\nfunction dwHelperStartMarquee(uniqueId, intervalMs) {\r\n    var mainElement = $(uniqueId);\r\n    if (!mainElement) {\r\n        // Gibts nicht mehr\r\n        return;\r\n    }\r\n    dwHelperStopMarquee(uniqueId);\r\n    mainElement.marqueeStartId = new Date().getTime() + '_' + Math.random();\r\n    mainElement.marqueedirection = 'r';\r\n    mainElement.marqueeposition = 0;\r\n    mainElement.intervalMs = intervalMs;\r\n    dwHelperRotateMarquee(uniqueId, mainElement.marqueeStartId);\r\n}\r\n\r\nfunction dwHelperStopMarquee(uniqueId) {\r\n    var mainElement = $(uniqueId);\r\n    if (!mainElement) {\r\n        // Gibts nicht mehr\r\n        return;\r\n    }\r\n\r\n    // Marquee händisch stoppen\r\n    mainElement.marqueeposition = -1;\r\n}\r\n\r\nfunction dwHelperCloseCurrentlyOpenedMenubarEntry(event) {\r\n    if ((event.type == \"mousemove\") || (event.type == \"mouseover\") || (event.type == \"mouseout\") || (event.type == \"mouseenter\") || (event.type == \"mouseleave\") || event.type == \"keyup\") {\r\n        // Event Typen, bei denen das Kontext-Menü nicht geschlossen werden darf ...\r\n        return;\r\n    }\r\n\r\n    var popup = dwPopup_getPopup(DW_POPUP_TYPE.MENUBAR);\r\n    if (!popup) {\r\n        return;\r\n    }\r\n    var eventTarget = dwUtilsGetEventTarget(event);\r\n    if (popup.containsNode(eventTarget) || popup.referrerContainsNode(eventTarget)) {\r\n        return;\r\n    }\r\n    popup.close();\r\n}\r\n\r\nfunction dwHelperCloseCurrentlyOpenedContextMenu(event) {\r\n    var currentlyOpenedContextMenuPopupLocal = currentlyOpenedContextMenuPopup;\r\n    if (currentlyOpenedContextMenuPopupLocal != null) {\r\n        if (dwAjaxCurrentlySending) {\r\n            // Wir zeigen es an, weil der Server es gewünscht hat. Passieren noch weitere Sachen (z.B. im IParts\r\n            // irgendwelche Scrolls, weil man ein Bild aktualisiert (obwohl man in demselben Knoten ist)), dann\r\n            // dürfen wir es nicht schließen\r\n            return;\r\n        }\r\n        var currentlyOpenedContextMenu = currentlyOpenedContextMenuPopupLocal.getControlForContent();\r\n        // bei Safari bzw. generell auch MacOS kommt nach Öffnen des Kontextmenüs (z.B. in der Stückliste) noch ein mouseup,\r\n        // welches das KM wieder schließt\r\n        var nativeMobileOSOrMacMouseUp = (framework_isSafari || framework_isAndroid || framework_isMacOS) && (event.type == \"mouseup\");\r\n        if ((event.type == \"mousemove\") || (event.type == \"mouseover\") || (event.type == \"mouseout\")\r\n            || (event.type == \"mouseenter\") || (event.type == \"mouseleave\") || nativeMobileOSOrMacMouseUp) {\r\n            // Event Typen, bei denen das Kontext-Menü nicht geschlossen werden darf ...\r\n            return;\r\n        }\r\n        var evtTarget = dwUtilsGetEventTarget(event);\r\n\r\n        // Scroll-Events ignorieren, die nicht auf einem (Groß-)Vater-Element oder Kind-Element des aktiven Kontext-Menüs stattgefunden haben\r\n        if ((event.type == \"scroll\") && (currentlyOpenedContextMenu == null)) {\r\n            return; // ... dieses Problem wird einfach geschluckt ... warum auch immer ab und an unnötige Scroll Befehle kommen\r\n        }\r\n\r\n        if (((currentlyOpenedContextMenu == null) || (currentlyOpenedContextMenu.style == null)) && !framework_isDevelopment) {\r\n            return; //... dieses Problem wird einfach geschluckt in einer gebauten Version\r\n        }\r\n\r\n        // Ist das Popup-Menü überhaupt noch sichtbar?\r\n        if ((currentlyOpenedContextMenu.style.display == \"none\") || (dwDomGetIndexOfElementEntry(currentlyOpenedContextMenu) == -1)) {\r\n            currentlyOpenedContextMenuPopup = null;\r\n            currentlyOpenedContextMenuPopupLocal.close();\r\n            return;\r\n        }\r\n\r\n        if (currentlyOpenedContextMenuPopupLocal.containsNode(evtTarget, true)) {\r\n            // Methode wird nach jeder Event-Behandlung (post-Event) eingebunden\r\n            // Elemente die z.B. bei einem Click zunächst den Fokus bekommen, dürfen nicht\r\n            // automatisch das Context-Menu schliessen, wenn das fokussierte ELement im Menu liegt\r\n            // Um das Kontext-Menu gezielt zu schliessen kann von diesen Elementen die Methode\r\n            // dwHelperHideMenu im onclick gerufen werden\r\n            return;\r\n        }\r\n\r\n        if ((event.type == \"scroll\") && (currentlyOpenedContextMenu != null) && (currentlyOpenedContextMenu.dwParentElement != null)\r\n            && (dwUtilsGetNavigationPath(currentlyOpenedContextMenu.dwParentElement, evtTarget, DWDOM_NAVIGATION_PATH_DIRECTION.TOP_DOWN) == null)\r\n            && (dwUtilsGetNavigationPath(evtTarget, currentlyOpenedContextMenu.dwParentElement, DWDOM_NAVIGATION_PATH_DIRECTION.TOP_DOWN) == null)) {\r\n            return;\r\n        }\r\n\r\n        if (event.type == \"resize\") {\r\n            if (!dwFrameworkDisplayResized()) {\r\n                // Nur reagieren, wenn sich die Fenster-Größe tatsächlich geändert hat...\r\n                return;\r\n            }\r\n            if (evtTarget && evtTarget.tagName && (!(evtTarget.tagName.toLowerCase() == \"body\"))) {\r\n                // Nur reagieren, wenn der Auslöser der Body / das Window Objekt waren\r\n                // In der Stückliste kann ein Resize Event z.B. durch die Scrollpane ausgelöst werden (Anzeige Sub-Menu)\r\n                return;\r\n            }\r\n        }\r\n        currentlyOpenedContextMenuPopup = null;\r\n        currentlyOpenedContextMenuPopupLocal.close();\r\n    }\r\n}\r\n\r\n// Vergleichsfunktion. Sucht nach DOM Nodes mit dem ontooltip Attribut. Ist der ontooltip auf einer Kind-Komponente gesetzt\r\n// sind alle notwendigen Informationen bereits in diesem ontooltip Befehl angegeben (z.B. aktuelle ID / Zelle bei einem Server-Tooltip)\r\nfunction dwHelperTableTooltipComparatorFunction(table, node) {\r\n    if (node && (node.tagName != null) && (node.className != null) && (node.tagName.toLowerCase() == \"td\")) {\r\n        if (node.className.indexOf(\"guitable_content\") > -1) {\r\n            var columnIndex = dwDomGetIndexOfNodeEntry(node);\r\n            if ((columnIndex >= 0) && node.parentNode) {\r\n                var rowIndex = dwDomGetIndexOfNodeEntry(node.parentNode);\r\n                table.currentTooltipCell = new DWPoint(columnIndex, rowIndex);\r\n            } else {\r\n                table.currentTooltipCell = new DWPoint(-1, -1);\r\n            }\r\n        } else if (node.className.indexOf(\"guitable_header\") > -1) {\r\n            var columnIndex = dwDomGetIndexOfNodeEntry(node);\r\n            table.currentTooltipHeaderColumn = columnIndex;\r\n        }\r\n    }\r\n    return (node && dwDomHasAttribute(node, \"ontooltip\"));\r\n}\r\n\r\n/**\r\n * Steuerung der Tooltip Anzeige auf Tabellen Komponenten (und deren Kinder)\r\n * Für die Steuerung werden auf der Tabelle Hilfs-Objekte angelegt\r\n * - lastTooltipCell: Zelle in der der letzte Tooltip dargestellt wurde\r\n * - lastTooltipNode: DOM Element auf dem der letzte Tooltip registriert war (z.B. Table für Event-Listener auf der Tabelle)\r\n *\r\n * Temporär werden die Attribute \"currentTooltipCell bzw. currentTooltipHeaderColumn geschrieben zur Bestimmung, ob die\r\n * Mouse sich noch innerhalb der Tabellen-Bereiche befindet, in denen Tooltips gezeichnet werden könnnen.\r\n * @param event\r\n * @param tableId\r\n */\r\nfunction dwHelperHandleTooltipOnTable(event, tableId) {\r\n    // Im IE8 kommen bereits Events, obwohl er noch die Seite aufbaut\r\n    if (!dwFrameworkInitFinished) {\r\n        return;\r\n    }\r\n    if (currentlyOpenedContextMenuPopup != null) {\r\n        return; // Aktuell wird ein Contextmenu angezeigt. In diesem Fall soll kein Tooltip dargestellt werden\r\n    }\r\n    var table = $(tableId);\r\n    if (!table) {\r\n        // Bereits entfernt ...\r\n        return;\r\n    }\r\n    // Das könnte man machen, um nicht jedes Mal synchron den ganzen Table Dom zu durchsuchen\r\n    //var now = new Date().getTime();\r\n    //if (typeof(table.dwFrameworkLastTooltipCheckMs) != \"undefined\") {\r\n    //    var diff = now-table.dwFrameworkLastTooltipCheckMs;\r\n    //    if (diff < 100) {\r\n    //        return;\r\n    //    }\r\n    //}\r\n    //table.dwFrameworkLastTooltipCheckMs = now;\r\n\r\n    var evtTarget = dwUtilsGetEventTarget(event);\r\n\r\n    // Temporäre Informationen zur gefundenen Zelle / Überschriften Spalte werden automatisch bereinigt\r\n    // damit Änderungen explizit festgestellt werden können\r\n    dwHelperResetTemporaryTableTooltipMarker(table);\r\n\r\n    var matches = dwUtilsFindMatchingNodes(table, evtTarget, dwHelperTableTooltipComparatorFunction, true);\r\n    if (matches.length >= 1) {\r\n        if (!dwTooltip_isTooltipVisible() && !table.hasTooltipToken) {\r\n            // Die Positionierung des Tooltips (insbesondere am rechten/unteren Rand) ist abhängig von der Tooltip-Größe\r\n            // Ein Tooltip darf nicht sofort eingeblendet werden, wenn der Inhalt noch unbekannt ist (z.B. Anfrage vom Server)\r\n            // Wir setzen in diesem Fall das 'hasTooltipToken' Flag - damit nach dem Delay die Anfrage an den Server abgesetzt werden kann\r\n            table.lastTooltipNode = null;\r\n            table.lastTooltipCell = null;\r\n            var timer = table.timer;\r\n            if (timer) {\r\n                clearTimeout(timer);\r\n            }\r\n            if (!dwHelperIsCursorIntersectingTableTooltipArea(table)) {\r\n                return;\r\n            }\r\n            var eventForRecall = event;\r\n            if ((typeof (framework_isJ2EEBrowser) != \"undefined\") && (framework_isIE8 || framework_isIELegacyMode)) {\r\n                eventForRecall = dwUtilsCloneObject(event);\r\n            }\r\n            table.timer = setTimeout(function() {\r\n                dwTooltip_createTooltip(-1, -1);\r\n                table.hasTooltipToken = \"true\";\r\n                dwHelperHandleTooltipOnTable(eventForRecall, tableId);\r\n            }, DWTOOLTIP_DELAY_DEFAULT_VALUE);\r\n            return;\r\n        }\r\n        table.timer = null;\r\n        table.hasTooltipToken = null;\r\n        var tooltipNode = matches[0];\r\n        var currentTooltipCell = table.currentTooltipCell || new DWPoint(-1, -1);\r\n        if (dwHelperHasTooltipOnTableChanged(table, tooltipNode, currentTooltipCell)) {\r\n            // In der Methode moveTooltip wird die Cursor Position nur neu gesetzt, wenn der Tooltip bereits sichtbar ist\r\n            // Bereits vor dem Einblenden muss die aktuelle Position bekannt werden, damit Flackern vermieden werden kann (Veränderung der Scroll-Bereiche)\r\n            // Bei Tooltip-Listenern wird der Tooltip erst eingeblendet, wenn der Text aktualisiert wird - hier steht kein Event\r\n            // zur Verfügung -> neue Cursor Position wird hier bereits explizit gesetzt\r\n            dwTooltip_lastMousePointer = dwUtilsGetCurrentMousePositionPerEvent(event);\r\n            if (dwHelperIsTableTooltipNodeRequestingDataFromServer(table, tooltipNode)) {\r\n                var eventParameter = \"__POINT_cellPosition=\" + currentTooltipCell.x + \":\" + currentTooltipCell.y;\r\n                // ActualActivatingControl darf nur übertragen werden, wenn der Listener auf einer Kind-Komponente registriert ist\r\n//                if (tooltipNode.id) {\r\n//                    eventParameter += \"@DWSUB@__ID_actualActivatingControl=\" + tooltipNode.id;\r\n//                }\r\n                // Aktuelle Anzahl an laufenden Server-Requests abfragen. Bei erster Abfrage noch nicht gesetzt -> 0 setzen\r\n                var currentServerRequestCount = dwDomGetDomAttribute(table, \"serverRequestCount\") || 0;\r\n                currentServerRequestCount++;\r\n                dwDomSetDomAttribute(table, \"serverRequestCount\", currentServerRequestCount);\r\n                if (currentServerRequestCount > 1) {\r\n                    // Schnelle Mausbewegungen. Flackern / Anzeige veralteter Tooltips soll vermieden werden\r\n                    // Tooltip wird ausgeblendet und erst wenn die Maus still ist wieder neu eingeblendet\r\n                    // Flackern war insbesondere bei IE und größeren Tabellen ein Problem\r\n                    dwTooltip_hideTooltips();\r\n\r\n                }\r\n                dwAjaxDefaultTooltipShow(event, tableId, tableId, eventParameter, true);\r\n            } else {\r\n                var tooltipCommand = dwDomGetDomAttribute(tooltipNode, \"ontooltip\");\r\n                // Tooltip soll nun wirklich angezeigt werden. Den temporär gespeicherten Befehl für die Anzeige emulieren wir\r\n                // als wäre er direkt aus einem Eventlistener heraus aufgerufen und reichen das (ggf. geklonte) Event Objekt weiter\r\n                // das ggf. im Tooltip Befehl benötigt wird\r\n                var func = function(event) {\r\n                    eval(tooltipCommand);\r\n                };\r\n                func(event);\r\n                // Nicht zwingend notwendig, aber wir räumen die Funktion auf um die Referenz explizit freizugeben\r\n                func = null;\r\n                if (!dwTooltip_isTooltipVisible()) {\r\n                    dwTooltip_fadeInTooltip();\r\n                }\r\n            }\r\n            table.lastTooltipNode = tooltipNode;\r\n            table.lastTooltipCell = currentTooltipCell;\r\n        }\r\n        dwTooltip_moveTooltip(event);\r\n        table.lastTooltipTarget = evtTarget;\r\n    }\r\n}\r\n\r\nfunction dwHelperIsCursorIntersectingTableTooltipArea(table) {\r\n    return (table.currentTooltipCell || (typeof table.currentTooltipHeaderColumn != \"undefined\"));\r\n}\r\n\r\nfunction dwHelperIsTableTooltipNodeRequestingDataFromServer(table, tooltipNode) {\r\n    return (tooltipNode == table) && (table.hasAttribute(\"requestFromServer\")) && (dwDomGetDomAttribute(table, \"requestFromServer\") == \"true\");\r\n}\r\n\r\nfunction dwHelperResetTemporaryTableTooltipMarker(table) {\r\n    table.currentTooltipCell = null;\r\n    table.currentTooltipHeaderColumn = null;\r\n}\r\n\r\n/**\r\n * Server bestätigt die Bearbeitung der Anfrage.\r\n * Server muss diese Methode auch aufrufen, wenn der Tooltip ausgeblendet werden muss (kein Tooltip mehr bestimmbar)\r\n * @param tableId\r\n * @return {*}\r\n */\r\nfunction dwHelperHandleTooltipOnTableUpdateServerResponseReceived(tableId) {\r\n    var table = $(tableId);\r\n    if (!table) {\r\n        return 0; // bereits entfernt ...\r\n    }\r\n    var currentServerRequestCount = dwDomGetDomAttribute(table, \"serverRequestCount\"); // Wert muss gesetzt sein ( > 0)\r\n    currentServerRequestCount--;\r\n    dwDomSetDomAttribute(table, \"serverRequestCount\", currentServerRequestCount);\r\n    return currentServerRequestCount;\r\n}\r\n\r\nfunction dwHelperHasTooltipOnTableChanged(table, currentNode, currentCell) {\r\n    if (!table) {\r\n        return true;\r\n    }\r\n    var lastTooltipCell = table.lastTooltipCell;\r\n    var lastTooltipNode = table.lastTooltipNode;\r\n    return ((lastTooltipNode != currentNode) || (lastTooltipCell.toString() != currentCell.toString()))\r\n}\r\n\r\nfunction dwHelperHandleTooltipOnTableUpdate(text, width, height, tableId, tooltipControlId) {\r\n    var table = $(tableId);\r\n    if (!table) {\r\n        return; // bereits entfernt ...\r\n    }\r\n    // Control bestimmen, auf dem Tooltip gezeichnet wird (entweder Tabelle oder Kind Komponente (AbstractGuiContorl) der Tabelle)\r\n    // Entspricht dem 'currentTarget' - dem Control auf dem ontooltip registriert ist\r\n    var tooltipControl = $(tooltipControlId);\r\n    if (!tooltipControl) {\r\n        return; // bereits entfernt ...\r\n    }\r\n    // Abgleich, ob die Komponente, die den Tooltip angefordert hat, noch immer die aktive ist (oder ein anderer Tooltip angezeigt wird)\r\n    if (tooltipControl != table.lastTooltipNode) {\r\n        return;\r\n    }\r\n\r\n    if (dwDomGetDomAttribute(table, \"serverRequestCount\") > 0) {\r\n        return;\r\n    }\r\n    dwTooltip_updateTooltip(text, width, height);\r\n    if (!dwTooltip_isTooltipVisible()) { // Aktuell noch unsichtbar. Erste Anzeige eines Tooltips auf der Tabelle. Delay ist bereits abgewartet\r\n        dwTooltip_fadeInTooltip();\r\n    }\r\n}\r\n\r\nfunction dwHelperHandleTooltipOnTableLeave(event, tableId) {\r\n    if (!dwFrameworkInitFinished) {\r\n        return;\r\n    }\r\n    var table = $(tableId);\r\n    if (!table) {\r\n        return;\r\n    }\r\n    if (table.timer) {\r\n        clearTimeout(table.timer);\r\n    }\r\n    if (!dwTooltip_isTooltipVisible()) {\r\n        return;\r\n    }\r\n    var happenedEventElement = dwUtilsGetMouseOutEventTarget(event);\r\n    // Ist das Ziel der Mouse-Out Bewegung der Tooltip? Tooltip nicht ausblenden\r\n    var isTooltip = (dwUtilsFindMatchingNodes($(\"tooltipspan\"), happenedEventElement, function(rootNode, node) {\r\n        return node == $(\"tooltipspan\")\r\n    }, true).length == 1);\r\n    if (isTooltip) {\r\n        return;\r\n    }\r\n    var match = dwUtilsFindMatchingNodes(table, happenedEventElement, function(rootNode, node) {\r\n        return node == table;\r\n    }, true);\r\n    if (match.length == 0) {\r\n        dwTooltip_hideTooltips();\r\n        table.hasTooltipToken = null;\r\n        table.lastTooltipNode = null;\r\n        table.lastTooltipCell = null;\r\n        table.lastTooltipTarget = null;\r\n    }\r\n}\r\n\r\n/**\r\n * Blendet die sichtbaren Tooltips nach neuen Events automatisch aus\r\n * Verhindert, dass der Tooltip bei Ajax Events (Anzeige neuer Inhalte eines Panels) erhalten bleibt\r\n * @param event\r\n */\r\nfunction dwHelperHideCurrentlyVisibleTooltips(event) {\r\n    // focus wird geworfen wenn ein Element den Fokus bekommt, scroll wird geworfen, wenn ein Element gescrollt wird\r\n    // mouseout Event wird bereits explizit bei mouseout der Tooltip Komponenten gerufen und muss nicht explizit im pre-Event getriggert werden\r\n    if ((event.type != \"mouseover\") && (event.type != \"mousemove\") && (event.type != \"focus\") && (event.type != \"scroll\") && (event.type != \"mouseout\") && (event.type != \"mouseenter\")) {\r\n        // bei Touch-Emulation nur die emulierten MouseEvents berücksichtigen (sonst werden Tooltips sofort wieder geschlossen)\r\n        if (DWTOUCH_TOUCH_EMULATION_ENABLED && !event.dwTouch) {\r\n            return;\r\n        }\r\n\r\n        var evtTarget = dwUtilsGetEventTarget(event);\r\n        if (event.type == \"resize\") {\r\n            if (!dwFrameworkDisplayResized()) {\r\n                // Nur reagieren, wenn sich die Fenster-Größe tatsächlich geändert hat...\r\n                return;\r\n            }\r\n            if (evtTarget && evtTarget.tagName && (!(evtTarget.tagName.toLowerCase() == \"body\"))) {\r\n                // Nur reagieren, wenn der Auslöser der Body / das Window Objekt waren.\r\n                // In der Stückliste kann ein Resize Event z.B. durch die Scrollpane ausgelöst werden\r\n                return;\r\n            }\r\n        }\r\n        dwTooltip_hideTooltips();\r\n    }\r\n}\r\n\r\n/**\r\n * Schliesst das zuletzt geöffnete Popup einer selbst gezeichneten Combobox (keine SELECT Darstellung)\r\n * @param event\r\n */\r\nfunction dwHelperCloseCurrentlyOpenedComboboxes(event) {\r\n    try {\r\n        if ((currentlyOpenedComboboxPopup != null) && !currentlyOpenedComboboxPopup.isProcessing) {\r\n            currentlyOpenedComboboxPopup.isProcessing = true;\r\n            var comboboxListControl = currentlyOpenedComboboxPopup.getControlForContent();\r\n            if ((event.type == \"load\") || (event.type == \"mouseover\") || (event.type == \"mouseout\") || (event.type == \"mousemove\") || (event.type == \"mouseenter\") || (event.type == \"mouseleave\")) {\r\n                // Events, die die Sichtbarkeit des Popups nicht beeinflussen dürfen\r\n                return;\r\n            }\r\n            var evtTarget = dwUtilsGetEventTarget(event);\r\n            if (currentlyOpenedComboboxPopup.referrerContainsNode(evtTarget)) {\r\n//        if (dwUtilsGetNavigationPath(dwUtilsGetEventTarget(event), currentlyOpenedComboboxPopup.parentNode, DWDOM_NAVIGATION_PATH_DIRECTION.TOP_DOWN) != null) {\r\n                // Event, ausgelöst innerhalb des Containers. Die Sichtbarkeit muss durch die Komponente selbst gesteuert werden\r\n                // Bei Checkbox Darstellung muss nach Klick das Fenster geöffnet bleiben, bei Text-Darstellung geschlossen\r\n                return;\r\n            }\r\n            if (currentlyOpenedComboboxPopup.containsNode(evtTarget)) {\r\n                // Event, ausgelöst innerhalb des Popup Containers. Das Popup liegt nicht mehr im Combobox-Container selbst sondern\r\n                // wird in den Body umgehängt.\r\n                return;\r\n            }\r\n\r\n            if ((event.type == \"resize\") && (!dwFrameworkDisplayResized())) {\r\n                // Hoch moderne Browser (IE8 / IE9) werfen manchmal wild mit resize Events um sich. Nicht immer hat sich die Größe geändert ...\r\n                return;\r\n            }\r\n\r\n            // Keine Kriterien gefunden, die das schliessen des Popups verhindern\r\n            currentlyOpenedComboboxPopup.setVisible(false);\r\n            currentlyOpenedComboboxPopup.removeReferrer();\r\n            var popupVisibilityControl = $(comboboxListControl.id + \"_visibility\");\r\n            if (popupVisibilityControl != null) {\r\n                // Control ist ggf. in der Zwischenzeit ausgebaut...\r\n                dwDomSetDomAttribute(popupVisibilityControl, \"value\", \"false\");\r\n            }\r\n            currentlyOpenedComboboxPopup = null;\r\n        }\r\n    } finally {\r\n        if (currentlyOpenedComboboxPopup != null) {\r\n            currentlyOpenedComboboxPopup.isProcessing = false;\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * Löst ein Mouse Clicked - Event auf dem Parent-Window des geklickten Elements aus\r\n * @param event\r\n */\r\nfunction dwHelperFireWindowAutoCloseIfPossible(event, htmlElement) {\r\n    var autoCloseEvents = new Array(\"click\", \"mouseup\", \"mousedown\", \"scroll\");\r\n    if (!dwUtilsIsInArray(autoCloseEvents, event.type)) {\r\n        return;\r\n    }\r\n    var evtTarget = dwUtilsGetEventTarget(event);\r\n\r\n    // bei \"autoCloseWindows == false\" soll das evtTarget keine angezeigten GuiWindows mit aktivem autoClose-Flag schließen\r\n    if (dwDomGetDomAttribute(evtTarget, \"autoCloseWindows\") == \"false\") {\r\n        return;\r\n    }\r\n\r\n    // Erst bei einem echten Scrollen mit veränderter Scrollposition das AutoClose durchführen\r\n    // (der Android System-Browser hat ansonsten Probleme mit AutoClose-Fenstern)\r\n    if (event.type == \"scroll\") {\r\n        if ((evtTarget == null) || !dwHelperHasScrollPaneValueChanged(evtTarget.id)) {\r\n            return;\r\n        }\r\n    }\r\n\r\n    try {\r\n        var submitForm = dwFrameworkFindSubmitFormForNode(evtTarget);\r\n    } catch (exception) {\r\n        // Form nicht gefunden, z.B. Klick auf 'overlay'\r\n        return;\r\n    }\r\n    if (submitForm == null) {\r\n        // Form nicht gefunden. Element aktuell nicht mehr im DOM Baum (z.B. onscroll Handler erst nach Abarbeiten aller DOM Befehle ausgeführt)\r\n        return;\r\n    }\r\n    var formId = submitForm.id;\r\n    var windowId = formId.substring(0, formId.indexOf(\"_\"));\r\n    var currentRootNode = document.getElementById(\"dwmainwrapper\");\r\n\r\n\r\n    var childWindows = dwDomGetChildrenByTagname(currentRootNode, \"div\", {\"class\": \"guiwindow_child_container\"}, false);\r\n    var mostRecentChildWindow = null; // Popup mit höchtem z-Index\r\n    for (var i = 0; i < childWindows.length; i++) {\r\n        var childWindow = childWindows[i];\r\n        if ((mostRecentChildWindow == null) || (childWindow.style.zIndex > mostRecentChildWindow.style.zIndex)) {\r\n            mostRecentChildWindow = childWindow;\r\n        }\r\n    }\r\n\r\n    var endNodeChildWindow = $(windowId + \"_contentdiv\"); // NULL wenn Target im Hauptfenster geklickt wurde\r\n\r\n    // Autoclose wird ausgelöst, wenn es ein Kind-Fenster gibt, das Kind-Fenster das Attribut gesetzt hat, und\r\n    // das Event nicht innerhalb des Kind-Fensters ausgelöst wurde\r\n    var isAutoClose = (mostRecentChildWindow != null) && (dwDomGetDomAttribute(mostRecentChildWindow, \"autoclose\")) &&\r\n                      (mostRecentChildWindow != endNodeChildWindow);\r\n\r\n    if (isAutoClose && typeof (dwAjaxDefaultOnMouseDown) != \"undefined\") {\r\n        if ((htmlElement == currentRootNode) || (htmlElement == endNodeChildWindow)) {\r\n            if (event.type == \"click\") {\r\n                dwAjaxDefaultOnMouseDown(event, windowId, windowId, \"\", true);\r\n                ajaxLastClickTarget = undefined; // Vermeidung von Doppelklick Logik\r\n            }\r\n        } else {\r\n            var token = mostRecentChildWindow.getAttribute(\"autoCloseFired\");\r\n            if ((token == \"null\") || (token != \"true\")) {\r\n                dwAjaxDefaultOnMouseDown(event, windowId, windowId, \"\", true);\r\n                ajaxLastClickTarget = undefined; // Vermeidung von Doppelklick Logik\r\n                mostRecentChildWindow.setAttribute(\"autoCloseFired\", \"true\");\r\n            }\r\n\r\n            if (event.type == \"click\") {\r\n                mostRecentChildWindow.setAttribute(\"autoCloseFired\", null);\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\nfunction __internal_fireHtmlWindowCloseEventIfPossible(event, htmlElement, windowId) {\r\n    // Im HTML Modus kann ich nur 1 Action zum Server schicken\r\n    // Nur wenn Popup Fenster angezeigt werden (mind. 1 ) und auf dem aktuell ausgewerteten click-Handler\r\n    // noch keine Submit-Methode registriert ist, wird der Form-Submit zur AutoClose Prüfung an den Server geschickt\r\n    var body = document.getElementsByTagName(\"body\")[0];\r\n    var children = dwDomGetElementChildNodes(body);\r\n\r\n    for (var i = 0; i < children.length; i++) {\r\n        var child = children[i];\r\n        if (child.id && child.id.indexOf(\"_contentdiv\") > -1) {\r\n            var registeredMethods = dwUtilsStripFromFunction(htmlElement[\"on\" + event.type], true, true);\r\n            if (registeredMethods.indexOf(\"dwFrameworkSubmitForm\") == -1) {\r\n                dwFrameworkSubmitForm(windowId, windowId, \"mouseClickedEvent\");\r\n            }\r\n            break;\r\n        }\r\n    }\r\n}\r\n\r\nfunction dwHelperCallHotkeyIfPossible(event) {\r\n    if ((typeof (dwHotkeyRegistry) != \"undefined\") && ((event.type == \"keydown\") || (event.type == \"keyup\"))) {\r\n        // Für beide Event-Typen muss ein Listener definiert sein, der im Hotkey-Fall das Default-Verhalten (z.B. History Öffnen bei ctrl+h)\r\n        // verhindert. Der Callback darf allerdings nur einmalig ausgelöst werden.\r\n        // This bezieht sich in diesem Fall immer auf window (http://www.quirksmode.org/js/this.html)\r\n        // Wir benötigen das eventTarget nur als Semaphor (hotkey nur einmalig ausführen)\r\n        var eventTarget = document.getElementsByTagName(\"body\")[0];\r\n        if (event.type == \"keydown\") {\r\n            var executed = dwHotkeyRegistry.callHotkeyByKey(event);\r\n            if (executed) {\r\n                eventTarget.setAttribute(\"preventKeyup\", \"preventKeyUp\");\r\n            }\r\n        } else {\r\n            if (eventTarget.getAttribute(\"preventKeyup\") != null) {\r\n                eventTarget.setAttribute(\"preventKeyup\", null);\r\n            } else {\r\n                dwHotkeyRegistry.callHotkeyByKey(event);\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * Highlighted die übergebenen List-Indices (Custom Layout).\r\n *\r\n * Der Knoten, der gehighlighted wird, bestimmt sich aus der Id des Listen-Eintrags (<uniqueId>_<index>)\r\n * Vorhandene Highlights werden entfernt, wenn diese nicht in der Liste der übergebenen Indices definiert sind\r\n * (z.B. selektierte Einträge)\r\n *\r\n * @param uniqueId\r\n * @param indices : string | separierter String von Indices\r\n */\r\nfunction dwHelperHighlightListIndices(uniqueId, listUniqueId, indices) {\r\n    var popup = dwPopup_getPopupById(listUniqueId);\r\n    var listNode = (popup) ? popup.getControlForContent() : $(listUniqueId);\r\n    var oldScrollTop = listNode.scrollTop;\r\n    var selectionClassName = listNode.getAttribute(\"selectionClassName\");\r\n    if (selectionClassName == null) {\r\n        return; // Kein Highlighting zu setzen (z.B. Checkbox-Darstellung)\r\n    }\r\n    var highlightedIndices = listNode.getAttribute(\"highlightedIndices\");\r\n    var indicesList = dwUtilsSplit(indices, \"|\", false);\r\n    var highlightedIndicesList = dwUtilsSplit(highlightedIndices, \"|\", false);\r\n    // Highlighting von den alten Elementen entfernen, sofern diese nicht in der IndiZes Liste aufgeführt sind\r\n    for (var i = 0; i < highlightedIndicesList.length; i++) {\r\n        var index = highlightedIndicesList[i];\r\n        if (!dwUtilsIsInArray(indices, index)) {\r\n            var nodeWithHighlight = dwHelperGetListNodeForIndex(listUniqueId, index); // z.B. ein DIV / Input Element\r\n            if (nodeWithHighlight != null) {\r\n                dwDomRemoveClass(nodeWithHighlight, selectionClassName);\r\n            } // else : Knoten in der Zwischenzeit gelöscht.\r\n        }\r\n    }\r\n    // Highlighting für neue Elemente/Indizes setzen\r\n    for (i = 0; i < indicesList.length; i++) {\r\n        index = indicesList[i];\r\n        var nodeWithHighlight = dwHelperGetListNodeForIndex(listUniqueId, index);\r\n        if ((!dwDomHasAttribute(nodeWithHighlight, \"class\")) || (nodeWithHighlight.className.indexOf(selectionClassName) == -1)) {\r\n            dwDomAddClass(nodeWithHighlight, selectionClassName);\r\n        }\r\n    }\r\n    listNode.setAttribute(\"highlightedIndices\", indicesList.join(\"|\"));\r\n    listNode.scrollTop = oldScrollTop; // Falls sich durch das setzen der ClassNames die Positionierung ändert kann\r\n    // diese wiederhergestellt werden\r\n}\r\n\r\n/**\r\n * Aktualisiert den Wert der selektierten IDs ( | getrennte Liste von Indices in hidden Textfeld)\r\n *\r\n * Übergebener Index wird in Abhängigkeit des Selektionszustandes und des Select-Verhaltens (single vs multi)\r\n * in der Liste der IDs (Indizes) berücksichtigt\r\n * @param event\r\n * @param uniqueId\r\n * @param index\r\n * @param attribute\r\n */\r\nfunction dwHelperUpdateListSelectionIndices(event, uniqueId, listUniqueId, index, attribute) {\r\n    var entry = dwHelperGetListNodeForIndex(listUniqueId, index);\r\n    var isMultiSelect = $(listUniqueId).getAttribute(\"multiple\") == \"true\";\r\n    var selectedIndicesNode = $(listUniqueId + \"_selectedindices\"); // INPUT type hidden\r\n    var selectedIndices = dwDomGetDomAttribute(selectedIndicesNode, \"value\");\r\n    var isSelected = dwDomGetDomAttribute(entry, attribute);\r\n    if (typeof isSelected == \"string\") { // z.B. bei Listeneinträgen im DIV Format\r\n        isSelected = (isSelected == \"true\");\r\n    }\r\n\r\n    if (!isMultiSelect) {\r\n        var selectedIndicesList = dwUtilsSplit(selectedIndices, \"|\", false);\r\n        for (var i = 0; i < selectedIndicesList.length; i++) {\r\n            var selectedIdx = selectedIndicesList[i];\r\n            if (selectedIdx != index) {\r\n                var entryToDeselect = dwHelperGetListNodeForIndex(listUniqueId, selectedIdx);\r\n                dwDomSetDomAttribute(entryToDeselect, attribute, false);\r\n            }\r\n        }\r\n        selectedIndices = index;\r\n    } else {\r\n        if (isSelected) {\r\n            if (selectedIndices != \"\") {\r\n                selectedIndices += \"|\";\r\n            }\r\n            selectedIndices += index;\r\n        } else {\r\n            selectedIndices = dwUtilsRemoveFromArrayByText(dwUtilsSplit(selectedIndices, \"|\", false), index).join(\"|\");\r\n        }\r\n    }\r\n    dwDomSetDomAttribute(selectedIndicesNode, \"value\", selectedIndices);\r\n}\r\n\r\nfunction dwHelperToggleListSelectionState(event, listUniqueId, index, attribute) {\r\n    var entry = dwHelperGetListNodeForIndex(listUniqueId, index);\r\n    var oldState = dwDomGetDomAttribute(entry, attribute);\r\n    if (typeof oldState == \"string\") {\r\n        oldState = oldState == \"true\";\r\n    }\r\n    var newState = !oldState;\r\n    dwDomSetDomAttribute(entry, attribute, newState + \"\");\r\n}\r\n\r\nfunction dwHelperListTypeAheadKeyDownHandler(event, uniqueId, listUniqueId, typeInterval) {\r\n    event = dwFrameworkGetEvent(event);\r\n    if (dwUtilsGetEventKeyCode(event) == VIRTUAL_KEYCODES.KEY_BACK_SPACE) {\r\n        dwFrameworkPreventDefaultBehaviour(event);\r\n        return;\r\n    }\r\n    if ((dwUtilsGetEventKeyCode(event) == VIRTUAL_KEYCODES.KEY_ENTER) || (dwUtilsGetEventKeyCode(event) == VIRTUAL_KEYCODES.KEY_ESC)) {\r\n        dwFrameworkPreventDefaultBehaviour(event);\r\n        dwAjaxDefaultOnKeyUp(event, uniqueId, uniqueId, \"\", true);\r\n        return;\r\n    }\r\n    var listControl = $(listUniqueId);\r\n    var inputControl = $(uniqueId + \"_focus\");\r\n    var timestamp = listControl.getAttribute(\"timestamp\");\r\n    var currentTime = new Date().getTime();\r\n    if ((timestamp == null) || ((currentTime - timestamp) > typeInterval)) {\r\n        inputControl.value = \"\";\r\n    } else {\r\n        // Eingabe fortsetzen\r\n    }\r\n    listControl.setAttribute(\"timestamp\", currentTime);\r\n}\r\n\r\nfunction dwHelperListTypeAheadKeyUpHandler(event, uniqueId, listUniqueId, typeInterval, listRenderType) {\r\n    var listControl = $(listUniqueId);\r\n    var isMultiSelect = dwDomGetDomAttribute(listControl, \"multiple\") == \"true\";\r\n    var listSize = dwDomGetDomAttribute(listControl, \"size\");\r\n    var inputElement = $(uniqueId + \"_focus\");\r\n    if (inputElement == null) {\r\n        return; // Sollte nie auftreten - auf diesem Element wird der Handler registriert\r\n    }\r\n    var typedKeys = inputElement.value;\r\n    if (typedKeys == \"\") {\r\n        return; // Keine Eingabe -> keine neue Selektion\r\n    }\r\n    var startIdx = listControl.getAttribute(\"lastSelectedIdx\");\r\n    if (startIdx == null) {\r\n        var selectedIndicesList = dwUtilsSplit($(listUniqueId + \"_selectedindices\").value, \"|\", false);\r\n        if (selectedIndicesList.length == 0) {\r\n            startIdx = 0;\r\n        } else {\r\n            startIdx = selectedIndicesList[selectedIndicesList.length - 1];\r\n        }\r\n    } else {\r\n        startIdx++;\r\n    }\r\n    if (!isMultiSelect) {\r\n        var threadId = listControl.getAttribute(\"threadId\");\r\n        if (threadId != null) {\r\n            window.clearTimeout(threadId);\r\n            listControl.removeAttribute(\"threadId\");\r\n        }\r\n    }\r\n    var matchingEntryIdx = dwHelperGetMatchingListEntryIndex(uniqueId, listUniqueId, typedKeys, startIdx, listSize, listRenderType);\r\n    if (matchingEntryIdx > -1) {\r\n        listControl.setAttribute(\"lastSelectedIdx\", matchingEntryIdx);\r\n        listControl.setAttribute(\"typedKeys\", typedKeys);\r\n        var matchingEntry = dwHelperGetListNodeForIndex(listUniqueId, matchingEntryIdx);\r\n        listControl.scrollTop = matchingEntry.offsetTop; // Scrolling zum ausgewählten Eintrag. Eintrag wird \"top\" angezeigt\r\n        dwHelperListScrollValueChanged(listUniqueId);\r\n        if (!isMultiSelect) {\r\n            dwHelperHighlightListIndices(uniqueId, listUniqueId, matchingEntryIdx + \"\");\r\n            var attribute = (listRenderType == \"checkbox\") ? \"checked\" : \"selected\";\r\n            dwDomSetDomAttribute(matchingEntry, attribute, \"true\");\r\n            dwHelperUpdateListSelectionIndices(event, uniqueId, listUniqueId, matchingEntryIdx, attribute);\r\n            var postEvent = dwDomGetEventsForType(matchingEntry, \"onclick\", true);\r\n            postEvent = postEvent.replace(\"dwFwPreEv(event,false,this);\", \"\");\r\n            postEvent = postEvent.replace(\"dwFwPostEv(event)\", \"\");\r\n            postEvent = postEvent.replace(\"dwHelperToggleComboboxPopupVisibility('\" + uniqueId + \"');\", \"\");\r\n            // Event Objekt ist in den durch setTimeout aufgerufenen Methoden nicht mehr verfügbar\r\n            // Firefox4 findet in der setTimeout Methode keine gültige Referenz mehr auf das Event Objekt und bringt eine Fehlermeldung\r\n            // Der Verweis auf 'event' Objekte (immer der erste Parameter) wird explizit entfernt und durch NULL ersetzt\r\n            // so dass die Anzahl der Parameter für den Methodenaufruf nicht verändert wird\r\n            postEvent = postEvent.replace(/\\(event/g, \"(null\");\r\n            var threadId = setTimeout(postEvent, typeInterval);\r\n            listControl.setAttribute(\"threadId\", threadId);\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * Liefert den Listen-Index für die eingegebenen Zeichen. Am Ende der Liste wird automatisch mit der Suche am\r\n * List-Anfang begonnen. Ist bis zum Ende der Liste der Eintrag nicht gefunden, wird -1 zurückgeliefert\r\n * @param uniqueId\r\n * @param listUniqueId\r\n * @param typedKeys\r\n * @param startIdx\r\n * @param listSize\r\n * @param listRenderType\r\n */\r\nfunction dwHelperGetMatchingListEntryIndex(uniqueId, listUniqueId, typedKeys, startIdx, listSize, listRenderType) {\r\n    var forceReset = (startIdx == -1);\r\n    if (forceReset) {\r\n        startIdx = 0;\r\n    }\r\n    for (var i = startIdx; i < listSize; i++) {\r\n        var entryText = dwDomGetListEntryText(listUniqueId, i, listRenderType);\r\n        if (dwUtilsStringStartsWith(entryText, typedKeys, true)) {\r\n            return i;\r\n        }\r\n    }\r\n    if (!forceReset) {\r\n        return dwHelperGetMatchingListEntryIndex(uniqueId, listUniqueId, typedKeys, -1, listSize, listRenderType);\r\n    }\r\n    return -1;\r\n}\r\n\r\n/**\r\n * Liefert den HTML Knoten für die Index-Position zurück. Notwendig für die Ermittlung ist die Auswertung der Kind-Elemente\r\n * eines Knoten-Typs (z.B. DIV oder INPUT)\r\n * @param listUniqueId\r\n * @param index\r\n */\r\nfunction dwHelperGetListNodeForIndex(listUniqueId, index) {\r\n    var popup = dwPopup_getPopupById(listUniqueId);\r\n    // Das Popup ist entweder bereits geschlossen, oder die Darstellung der Liste erfolgt direkt auf der Seite (ohne Popup)\r\n    var listControl = popup ? popup.getControlForContent() : $(listUniqueId);\r\n    var nodeTag = listControl.getAttribute(\"nodeTag\");\r\n    var childNodes = listControl.getElementsByTagName(nodeTag);\r\n    if ((index == -1) || (index >= childNodes.length)) {\r\n        return null;\r\n    }\r\n    return childNodes[index];\r\n}\r\n\r\nfunction dwHelperGetListCount(listUniqueId) {\r\n    var popup = dwPopup_getPopupById(listUniqueId);\r\n    // Das Popup ist entweder bereits geschlossen, oder die Darstellung der Liste erfolgt direkt auf der Seite (ohne Popup)\r\n    var listControl = popup ? popup.getControlForContent() : $(listUniqueId);\r\n    var nodeTag = listControl.getAttribute(\"nodeTag\");\r\n    return listControl.getElementsByTagName(nodeTag).length;\r\n}\r\n\r\n/**\r\n * Setzt die Sichtbarkeit der List-Komponente im Browser\r\n * Aufruf bei Einbindung der Liste in einer Combobox (\"Popup\"-Sichtbarkeit)\r\n * @param uniqueId\r\n */\r\nfunction dwHelperToggleComboboxPopupVisibility(uniqueId) {\r\n    var body = $(\"body\");\r\n    var combobox = $(uniqueId);\r\n    if (dwDomHasAttribute(combobox, \"disabled\")) {\r\n        return;\r\n    }\r\n    var listId = uniqueId + \"_list\";\r\n    var popup = dwPopup_wrapControlWithoutCache($(listId), listId + \"_wrapper\", null, dwHelperRedirectComboboxPopupEventsToWrapper);\r\n    var contentControl = popup.getControlForContent();\r\n    if (!popup.isVisible()) {\r\n        var selectedIndices = $(listId + \"_selectedindices\").value;\r\n        var selectedIndicesList = dwUtilsSplit(selectedIndices, \"|\", false);\r\n        var scrollIndex = (selectedIndicesList.length == 0) ? 0 : selectedIndicesList[0];\r\n        popup.setReferrer(combobox);\r\n        // Styling wird nur auf Combobox angewendet. Das Popup liest sich diese Informationen zur Laufzeit ein\r\n        contentControl.style.backgroundColor = dwUtilsGetStyle(combobox, \"background-color\");\r\n        contentControl.style.color = dwUtilsGetStyle(combobox, \"color\");\r\n        popup.setVisible(true);\r\n        popup.setSize(-1, popup.control.offsetHeight);\r\n        var prefWidth = dwUtilsGetWidth(popup.control);\r\n        var comboWidth = dwUtilsGetWidth(combobox);\r\n        // Zeigt immer 8 an (empirisch ermittelt)\r\n        if (dwHelperGetListCount(listId) > 8) {\r\n            // Scrollbar draufrechnen\r\n            prefWidth += 22;\r\n        }\r\n        // Wenns dann kleiner ist als die Combobox selbst, dann mind diese Breite nehmen\r\n        if (prefWidth < comboWidth) {\r\n            prefWidth = comboWidth;\r\n        }\r\n        popup.setSize(prefWidth, popup.control.offsetHeight);\r\n        popup.adjustWrapper();\r\n        dwHelperHighlightListIndices(uniqueId, listId, selectedIndices);\r\n        var scrollToNode = dwHelperGetListNodeForIndex(listId, scrollIndex);\r\n        if (scrollToNode != null) {\r\n            contentControl.scrollTop = scrollToNode.offsetTop;\r\n        }\r\n        currentlyOpenedComboboxPopup = popup;\r\n    } else {\r\n        popup.setVisible(false);\r\n        popup.removeReferrer();\r\n    }\r\n}\r\n\r\n/**\r\n * Positioniert ein Popup Element am Bildschirm. Ist am unteren Rand nicht genug Platz, wird das Popup oberhalb des Opener gezeichnet\r\n * @param opener aufrufende Komponente\r\n * @param popup popup. wird unterhalb der aufrufenden Komponente gezeichnet, wenn ausreichend Platz verfügbar ist. andernfalls oberhalb\r\n */\r\nfunction dwHelperPositionPopup(opener, popup) {\r\n    var layoutControl = popup.getControlForLayout();\r\n    var popupHeight = parseInt(layoutControl.style.height);\r\n    if (!popupHeight) {\r\n        popupHeight = layoutControl.offsetHeight;\r\n    }\r\n    var popupTop = parseInt(layoutControl.style.top);\r\n\r\n    var bodyHeight = document.getElementsByTagName(\"body\")[0].offsetHeight;\r\n    var openerLocationOnViewport = dwUtilsGetLocationOnWindow(opener, true, false);\r\n\r\n    var borderWidth = parseInt(dwUtilsGetStyle(opener, \"border-width\"));\r\n    if (isNaN(borderWidth)) {\r\n        borderWidth = 0;\r\n    }\r\n    var scrolledContainer = dwUtilsGetFirstParentScrolledElement(opener);\r\n    var scrollbarWidth = (scrolledContainer != null) ? dwUtilsGetScrollbarWidth(scrolledContainer) : 0;\r\n    var position = dwUtilsGetStyle(layoutControl, \"position\");\r\n    var openerHeight = dwUtilsGetHeight(opener);\r\n    if (position == \"absolute\") {\r\n        layoutControl.style.margin = 0; // Margins beeinflussen die Position des Containers (left/top)\r\n        var location = new DWPoint(0, 0);\r\n        location.x = (openerLocationOnViewport.x);\r\n        if (bodyHeight < (openerLocationOnViewport.y + popupHeight + openerHeight + scrollbarWidth)) {\r\n            location.y = (openerLocationOnViewport.y - popupHeight);\r\n        } else {\r\n            location.y = (openerLocationOnViewport.y + openerHeight);\r\n        }\r\n        popup.setPosition(location);\r\n    } else if (position == \"relative\") {\r\n        if (bodyHeight < (openerLocationOnViewport.y + popupHeight + openerHeight + scrollbarWidth)) {\r\n            layoutControl.style.marginTop = (-borderWidth - popupTop - popupHeight) + \"px\";\r\n        } else {\r\n            layoutControl.style.marginTop = -borderWidth + \"px\";\r\n        }\r\n    }\r\n}\r\n\r\nfunction dwHelperToggleComboboxValueManuallyEnteredState(uniqueId, newState) {\r\n    var element = $(uniqueId + \"_isValueEntered\");\r\n    element.value = newState + \"\";\r\n}\r\n\r\nfunction dwHelperForceOnChangeIfEnterPressed(event) {\r\n    if (dwUtilsIsEnter(event)) {\r\n        this.blur();\r\n        this.focus();\r\n    }\r\n}\r\n\r\n/**\r\n * Aktualisiert den Wert des Combobox-Display-Textfeldes\r\n *\r\n * Ausgewertet werden die Einträge des \"selectedids\" Elements\r\n * Zukünftiges FIXME_MM Einträge sind \"unsortiert\". Im HTML Modus ist die Reihenfolge anhand er Index-Position aufsteigend sortiert.\r\n * Es fehlt allgemein noch die Schaltfläche zum Sortieren\r\n * @param uniqueId\r\n * @param listRenderMode\r\n */\r\nfunction dwHelperUpdateComboboxValue(uniqueId, listUniqueId, listRenderMode) {\r\n    var selectedIndicesNode = $(listUniqueId + \"_selectedindices\"); // INPUT type hidden\r\n    var selectedIndices = dwDomGetDomAttribute(selectedIndicesNode, \"value\");\r\n    var comboboxDisplay = $(uniqueId + \"_input\");\r\n    var listControl = $(listUniqueId);\r\n    var multiValueSeparator = listControl.getAttribute(\"multiValueSeparator\");\r\n    var selectedIndicesList = dwUtilsSplit(selectedIndices, \"|\", false);\r\n    var textToDisplay = \"\";\r\n    for (var i = 0; i < selectedIndicesList.length; i++) {\r\n        if (i > 0) {\r\n            textToDisplay = textToDisplay.concat(multiValueSeparator);\r\n        }\r\n        var selectedIdx = selectedIndicesList[i];\r\n        var entryText = dwDomGetListEntryText(listUniqueId, selectedIdx, listRenderMode);\r\n        textToDisplay = textToDisplay.concat(entryText);\r\n    }\r\n    comboboxDisplay.value = textToDisplay;\r\n    // Eigentlich sollte im onChange bereits ein focus() ausgeführt werden.\r\n    // Beim Aufruf dieser Methode (z.B. aus Spaltenfilter Dialog) lag der Focus allerdings danach auf dem BODY Element\r\n    // Der Fokus wird nochmal korrigiert und auf das _focus Element der Combobox umgesetzt\r\n    var activeElement = getActiveElement(document);\r\n    if ((activeElement == document.getElementById(\"body\") || ((activeElement != null) && (activeElement.id == \"focus_wrapper\")))) {\r\n        $(uniqueId + \"_focus\").focus();\r\n    }\r\n}\r\n\r\nfunction dwHelperSetNextSpinnerValue(spinnerControlId) {\r\n    var inputControlId = spinnerControlId + \"_input\";\r\n    var spinnerControl = $(spinnerControlId);\r\n    var inputControl = $(inputControlId);\r\n    var step = spinnerControl.getAttribute(\"stepSize\") * 1;\r\n    var max = spinnerControl.getAttribute(\"maxValue\") * 1;\r\n    var currentValue = inputControl.value * 1;\r\n    if (currentValue == \"\") {\r\n        currentValue = 0;\r\n    }\r\n    var newValue = currentValue;\r\n    if ((currentValue + step) <= max) {\r\n        newValue += step;\r\n    } else {\r\n        // Größer als max -> dann setze auf max\r\n        newValue = max;\r\n    }\r\n    inputControl.value = newValue + \"\";\r\n    return newValue;\r\n}\r\n\r\nfunction dwHelperSetPreviousSpinnerValue(spinnerControlId) {\r\n    var inputControlId = spinnerControlId + \"_input\";\r\n    var spinnerControl = $(spinnerControlId);\r\n    var inputControl = $(inputControlId);\r\n    var step = spinnerControl.getAttribute(\"stepSize\") * 1;\r\n    var min = spinnerControl.getAttribute(\"minValue\") * 1;\r\n    var currentValue = inputControl.value * 1;\r\n    if (currentValue == \"\") {\r\n        currentValue = 0;\r\n    }\r\n    var newValue = currentValue;\r\n    if ((currentValue - step) >= min) {\r\n        newValue -= step;\r\n    } else {\r\n        // Kleiner als min -> setze auf min\r\n        // Weil, falls Step 5 und min -1, dann würde man mit dem Spinner nicht auf -1 kommen, wenn der aktuelle Wert z.B. 5 ist\r\n        newValue = min;\r\n    }\r\n    inputControl.value = newValue;\r\n    return newValue;\r\n}\r\n\r\n/**\r\n * Workaround für Datei-Download in Firefox\r\n * Die Komponente für die Übertragung der Datei wird automatisch entfernt, wenn die Übertragung abgeschlossen ist.\r\n * Ist im Firefox allerdings ein 2-stufiger Download eingestellt (Stufe 1: Öffnen vs. Speichern / Stufe 2: Speicherort wählen)\r\n * steht im 2. Schritt die Datei nicht mehr zur Verfügung, wenn die Komponente die diese angefordert hat (IFrame) bereits entfernt wurde\r\n *\r\n * Die Komponente, die die Datei anfordert wird dynamisch im Browser generiert (und nicht in den DOM eingebaut)\r\n * So ist gewährleistet, dass Firefox auch für den 2. Schritt auf die Datei zugreifen kann.\r\n * @param eventHandlerComponentId\r\n * @param uniqueId\r\n * @param url\r\n */\r\nfunction dwHelperDownloadFileInFirefox(eventHandlerComponentId, uniqueId, url) {\r\n    if (framework_isFirefox) { // IE kann mit diesem Mechanismus nicht umgehen ...\r\n        var fileName = url.substring(url.lastIndexOf(\"/\") + 1);\r\n        var link = document.createElement('a');\r\n        link.href = url;\r\n        link.target = '_blank';\r\n        link.download = fileName || 'unknown';\r\n\r\n        var event = document.createEvent('MouseEvents');\r\n        event.initMouseEvent('click', true, true, null, 1, 0, 0, 0, 0,\r\n                             false, false, false, false, 0, null);\r\n        link.dispatchEvent(event);\r\n    }\r\n}\r\n\r\n\r\nfunction dwFrameworkGetEvent(event) {\r\n    // Event Objekt (z.B. als funktionsparameter übergeben)\r\n    // Wenn null oder undefined, dann globales Window Event (z.B. IE8)\r\n    // Wenn null oder undefined, dann docware Event (z.B. IE8 - bei Event Delegation zwischen IFrame und Hauptfenster)\r\n    return event || window.event || window.dw_event;\r\n}\r\n\r\nfunction dwFrameworkShowDevelopmentMessages() {\r\n    return framework_showDevelopmentHints;\r\n}\r\n\r\nfunction dwActiveSessionCheck() {\r\n    if ((!framework_isActive) || (framework_activeSessionCheckMode == \"none\")) {\r\n        // Ist die Verbindung komplett verloren gegangen (und die Ajax Anfragen eingestellt)\r\n        // kann auch der Ping eingestellt werden\r\n        if (typeof (framework_activeSessionCheckId) != \"undefined\") {\r\n            clearInterval(framework_activeSessionCheckId);\r\n        }\r\n        return;\r\n    }\r\n\r\n    var baseUrl = dwUtilsGetBaseApplicationUrl();\r\n    var url = baseUrl + \"/activeSessionCheck?userId=\" + framework_userId + \"&mode=\" + framework_activeSessionCheckMode;\r\n\r\n    try {\r\n        var xmlHttp = dwUtilsCreateXmlHttpRequest(true);\r\n        if (xmlHttp != null) {\r\n            xmlHttp.open(\"GET\", url, framework_isChrome); // Nur bei Chrome muss/darf der xmlHttp-Request asynchron sein\r\n            xmlHttp.send(null);\r\n        }\r\n    } catch (e) {\r\n        //ignorieren\r\n    }\r\n}\r\n\r\nfunction dwFrameworkInitFramework(userId, isDevelopment, isDevelopmentQFTest, showDevelopmentHints, isMobileView, isMobileBrowser,\r\n                                  isTouchBrowser, isPointerBrowser, isMSPointerBrowser, isEmulateTouchEvents,\r\n                                  isWithAnimations, childThreadCount, isWithPing, activeSessionCheckMode, isWithCanvas, isWithVideo, isIELegacyMode,\r\n                                  isIEHeavyWeightPopupAllowed, isSecured, isNonModalWindow, browserType, browserVersion, isWithStaticConnection,\r\n                                  doctype, hiddenscroll, activeLogChannels, isOffline, isWithHistoryEntryOnInit) {\r\n    // Wenn das nicht vorhanden ist, dann ist man in Swing\r\n    framework_isJ2EEBrowser = true;\r\n    framework_userId = userId;\r\n    framework_isDevelopment = isDevelopment;\r\n    framework_isDevelopmentQFTest = isDevelopmentQFTest;\r\n    framework_showDevelopmentHints = showDevelopmentHints;\r\n    framework_isMobileView = isMobileView;\r\n    framework_isMobileBrowser = isMobileBrowser;\r\n    framework_isTouchBrowser = isTouchBrowser;\r\n    framework_isPointerBrowser = isPointerBrowser;\r\n    framework_isMSPointerBrowser = isMSPointerBrowser;\r\n    framework_isWithAnimations = isWithAnimations;\r\n    framework_childThreadCount = childThreadCount;\r\n    framework_activeSessionCheckMode = activeSessionCheckMode;\r\n    framework_isWithCanvas = isWithCanvas;\r\n    framework_isWithVideo = isWithVideo;\r\n    framework_browserType = browserType;\r\n    framework_browserVersion = browserVersion;\r\n    framework_isIELegacyMode = isIELegacyMode;\r\n    framework_isIEHeavyWeightPopupAllowed = isIEHeavyWeightPopupAllowed;\r\n    framework_isSecured = isSecured;\r\n    framework_isNonModalWindow = isNonModalWindow;\r\n\r\n    // MacOS?\r\n    framework_isMacOS = false;\r\n    if (navigator.userAgent) {\r\n        framework_isMacOS = dwUtilsStringStartsWith(navigator.platform, 'Mac', true);\r\n    }\r\n\r\n    framework_isFirefox = framework_browserType == DWFRAMEWORK_BROWSER_TYPE_FIREFOX;\r\n    framework_isIE = framework_browserType == DWFRAMEWORK_BROWSER_TYPE_IE;\r\n    framework_isEdge = framework_browserType == DWFRAMEWORK_BROWSER_TYPE_EDGE;\r\n    framework_isOpera = framework_browserType == DWFRAMEWORK_BROWSER_TYPE_OPERA;\r\n    framework_isSafari = framework_browserType == DWFRAMEWORK_BROWSER_TYPE_SAFARI;\r\n    framework_isChrome = (framework_browserType == DWFRAMEWORK_BROWSER_TYPE_CHROME) || (framework_browserType == DWFRAMEWORK_BROWSER_TYPE_EDGE_CHROMIUM);\r\n    framework_isIE7 = (framework_browserType == DWFRAMEWORK_BROWSER_TYPE_IE) && (framework_browserVersion.indexOf(\"7.\") != -1);\r\n    framework_isIE8 = (framework_browserType == DWFRAMEWORK_BROWSER_TYPE_IE) && (framework_browserVersion.indexOf(\"8.\") != -1);\r\n    framework_isIE9 = (framework_browserType == DWFRAMEWORK_BROWSER_TYPE_IE) && (framework_browserVersion.indexOf(\"9.\") != -1);\r\n    framework_isOffline = isOffline;\r\n\r\n    framework_hiddenscroll = hiddenscroll;\r\n\r\n    for (var i = 0; i < activeLogChannels.length; i++) {\r\n        FRAMEWORK_LOGCHANNELS.activate(activeLogChannels[i]);\r\n    }\r\n\r\n    framework_doctype = doctype;\r\n\r\n    // History relevante Sachen\r\n    framework_html5HistoryEnabled = (typeof (window.onpopstate) != \"undefined\");\r\n    framework_html5HistoryCurrentState = dwFrameworkCreateBrowserHistoryState(\"\");\r\n\r\n    // Browser-Informationen für mobile Endgeräte\r\n    framework_isiOS = false;\r\n    framework_isAndroid = false;\r\n    framework_mobileOSVersion = -1;\r\n    if (navigator.userAgent) {\r\n        // Mit Einführung von iOS 13 hat Apple eine bessere Unterstützung für die einzelnen UIs eingeführt (z.B. ipados, ...)\r\n        // In diesem Zuge wurde der User Agent String verallgemeinert.\r\n        // Ein iPAD mit iOS 13 meldet sich als\r\n        // Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.1 Safari/605.1.15\r\n        // Für eine Unterscheidung zwischen Mac und iPad untersuchen wir, ob das Gerät eine Touch Oberfläche hat => iOS\r\n        framework_isiOS = (/iPad|iPhone|iPod/.test(navigator.platform) || (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1));\r\n        // Android Geräte geben als platform Android oder Linux Version (Linux armvx, wobei x=version) zurück\r\n        // bei Linux prüfen wir zusätzlich den UserAgend auf Android um festzustellen, ob es auch wirklich Android ist\r\n        framework_isAndroid = /Android/.test(navigator.platform) ||\r\n                              ((/Linux/.test(navigator.platform)) && (/Android/.test(navigator.userAgent) || (/Edg/.test(navigator.userAgent)\r\n                                                                      || (/Chrome/.test(navigator.userAgent)))));\r\n        framework_isEdgeChromium = (framework_browserType == DWFRAMEWORK_BROWSER_TYPE_EDGE_CHROMIUM) && (/Edg/.test(navigator.userAgent));\r\n\r\n        if (framework_isiOS) {\r\n            var osNameIndex = navigator.userAgent.indexOf(\"CPU OS \");\r\n            var osVersionString = navigator.userAgent.substr(osNameIndex + 7, 3).replace(\"_\", \".\");\r\n            framework_mobileOSVersion = parseFloat(osVersionString);\r\n        } else if (framework_isAndroid) {\r\n            var osNameIndex = navigator.userAgent.indexOf(\"Android \");\r\n            var osVersionString = navigator.userAgent.substr(osNameIndex + 8, 3);\r\n            framework_mobileOSVersion = parseFloat(osVersionString);\r\n        }\r\n    }\r\n\r\n    framework_isQuirks = document.compatMode.toLowerCase() == \"backcompat\";\r\n    framework_lastServerRequest = new Date().getTime();\r\n    framework_logger = new DwLogger(DWFRAMEWORK_FORCE_LOGGING_TO_BROWSER);\r\n    framework_offsetSupport = dwFrameworkGetOffsetSupport();\r\n\r\n    // wenn framework_isActive, dann nicht mehr Pingen\r\n    framework_isActive = true;\r\n    window.onpagehide = function(event) {\r\n        if (!event.persisted && (typeof (dwFrameworkShutdownFrameworkBrowser) != \"undefined\")) {\r\n            dwFrameworkShutdownFrameworkBrowser();\r\n        }\r\n    };\r\n\r\n    // Error Handler\r\n    window.onerror = dwFrameworkErrorHandler;\r\n\r\n    // Default Close\r\n    var bodyNode = $(\"body\");\r\n    bodyNode.onmouseup = function(event) {\r\n        dwFrameworkDefaultClose(event);\r\n    };\r\n\r\n    // Browser Vor/Zurück\r\n    if (framework_html5HistoryEnabled) {\r\n        // Soll hier ein History Eintrag gesetzt werden?\r\n        if (isWithHistoryEntryOnInit) {\r\n            dwFrameworkPushBrowserHistoryState();\r\n        }\r\n\r\n        window.onpopstate = function(event) {\r\n            dwFrameworkOnPopState(event);\r\n        };\r\n    }\r\n\r\n    if (dwFrameworkShowDevelopmentMessages()) {\r\n        dwFrameworkShowHint(\"AJAX\", \"browser \" + framework_browserType + \" \" + framework_browserVersion +\r\n                                    \"; userId \" + framework_userId +\r\n                                    \"; isMobileView \" + framework_isMobileView +\r\n                                    \"; isMobileBrowser \" + framework_isMobileBrowser +\r\n                                    \"; isTouchBrowser: \" + framework_isTouchBrowser +\r\n                                    \"; isPointerBrowser: \" + framework_isPointerBrowser +\r\n                                    \"; isMSPointerBrowser: \" + framework_isMSPointerBrowser +\r\n                                    \"; isEmulateTouchEvents: \" + isEmulateTouchEvents +\r\n                                    \"; isNonModalWindow: \" + framework_isNonModalWindow,\r\n                            \"#ffffcc\", \"#000000\");\r\n    }\r\n\r\n    // Touch Effekte\r\n    if (isEmulateTouchEvents) {\r\n        dwTouchEnableTouchEmulation();\r\n    } else if (framework_isTouchBrowser) {\r\n        dwTouchRegisterTouchFunctionsInBrowser();\r\n    }\r\n\r\n    dwFrameworkPreventCtrlPSForPrint();\r\n\r\n    if (buildPopupWrapperCache) {\r\n        buildPopupWrapperCache();\r\n    }\r\n    if (dwTooltip_createTooltip) {\r\n        // Vorsorgliche Initialisierung der Tooltip Komponente\r\n        dwTooltip_createTooltip(-1, -1);\r\n    }\r\n\r\n    // aktuelle Breite und Höhe merken, um bei Ausrichtungsänderungen auf das Ändern der Breite und Höhe warten\r\n    // zu können (ist unter Android notwendig, da die Breite und Höhe dort erst NACH dem onorientationchange-Event angepasst wird)\r\n    framework_displayWidth = dwUtilsGetViewportWidth();\r\n    framework_displayHeight = dwUtilsGetViewportHeight();\r\n    framework_displayOrientation = 0;\r\n\r\n    // auf Ausrichtungsänderungen reagieren\r\n    if (window.orientation != null) { // Mechanismus für die meisten mobilen Browser (nicht für mobilen Firefox)\r\n        framework_displayOrientation = window.orientation;\r\n        window.onorientationchange = function() {\r\n            dwFrameworkCheckOrientationOrSizeChanged(0);\r\n        };\r\n    } else if ((window.DeviceOrientationEvent) && framework_isMobileBrowser) { // Der mobile Firefox verwendet diesen Mechanismus (evtl. auch andere Gecko-basierte mobile Browser)\r\n        window.ondeviceorientation = function(event) {\r\n            // event.alpha stellt den Drehwinkel dar -> diesen auf BrowserInfo.DISPLAY_ORIENTATION_* normieren (analog zu anderen Browsern)\r\n            var displayOrientation = event.alpha;\r\n            var numDegrees = 30; // Anzahl Grad (jeweils +/-) um den jeweiligen Ausrichtungswinkel herum für das Erkennen einer Ausrichtung\r\n            if ((displayOrientation > 180 - numDegrees) && (displayOrientation < 180 + numDegrees)) {\r\n                displayOrientation = 0; // BrowserInfo.DISPLAY_ORIENTATION_PORTRAIT\r\n            } else if ((displayOrientation > 90 - numDegrees) && (displayOrientation < 90 + numDegrees)) {\r\n                displayOrientation = 90; // BrowserInfo.DISPLAY_ORIENTATION_LANDSCAPE_LEFT\r\n            } else if ((displayOrientation > 360 - numDegrees) || (displayOrientation < numDegrees)) {\r\n                displayOrientation = 180; // BrowserInfo.DISPLAY_ORIENTATION_UPSIDE_DOWN\r\n            } else if ((displayOrientation > 270 - numDegrees) && (displayOrientation < 270 + numDegrees)) {\r\n                displayOrientation = -90; // BrowserInfo.DISPLAY_ORIENTATION_LANDSCAPE_RIGHT\r\n            } else {\r\n                displayOrientation = -1; // Ausrichtung nicht ändern außerhalb +/-numDegrees um den jeweiligen Ausrichtungswinkel herum\r\n            }\r\n\r\n            if ((displayOrientation != -1) && (framework_displayOrientation != displayOrientation)) {\r\n                framework_displayOrientation = displayOrientation;\r\n\r\n                // beim IE kommt bei Größenveränderung vom Browserfenster kein DeviceOrientationEvent -> auch auf Größenänderung reagieren\r\n                // und hier kein dwFrameworkCheckOrientationOrSizeChanged() aufrufen, damit kein doppelter Event kommt\r\n                if (!framework_isIE) {\r\n                    dwFrameworkCheckOrientationOrSizeChanged(0);\r\n                }\r\n            }\r\n        };\r\n\r\n    } else { // als letztes Fallback einfach auf die Größenänderung des Fensters reagieren (notwendig z.B. für IE und Desktop-Browser)\r\n        if (bodyNode.offsetWidth >= bodyNode.offsetHeight) { // aufgrund des Seitenverhältnisses die Ausrichtung erraten\r\n            framework_displayOrientation = 0; // BrowserInfo.DISPLAY_ORIENTATION_PORTRAIT\r\n        } else {\r\n            framework_displayOrientation = 90; // BrowserInfo.DISPLAY_ORIENTATION_LANDSCAPE_LEFT\r\n        }\r\n    }\r\n\r\n    // Beim Resize muss dwFrameworkCheckOrientationOrSizeChanged immer gerufen werden, da nur dort die Größenvariablen gesetzt werden\r\n    dwDomAddEvent(bodyNode, \"onresize\", \"dwFrameworkCheckOrientationOrSizeChanged(0);\", false);\r\n\r\n    framework_isWithPing = isWithPing;\r\n    if (isWithPing) {\r\n        framework_pingId = setInterval(dwFrameworkPing, DWFRAMEWORK_CALLBACK_DELAY);\r\n    }\r\n\r\n    framework_isWithStaticConnection = isWithStaticConnection;\r\n\r\n    if (framework_activeSessionCheckMode != \"none\") {\r\n        dwActiveSessionCheck();//gleich den ersten Request schicken, sonst kann der Benutzer Tab schliessen befor der Request im Interval verschickt wird\r\n        framework_activeSessionCheckId = setInterval(dwActiveSessionCheck, DWFRAMEWORK_CALLBACK_DELAY_ACTIVE_SESSION_CHECK);\r\n    }\r\n}\r\n\r\n/**\r\n * Ctrl + P und Ctrl + S verhindern, damit der Nutzer über unsere Funktionen zum Drucken/Speichern der Daten gehen muss,\r\n * die teilweise nur eingeschränkt abhängig von Konfiguration und Rechten verfügbar sind.\r\n */\r\nfunction dwFrameworkPreventCtrlPSForPrint() {\r\n    var bodyNode = $(\"body\");\r\n    bodyNode.onkeydown = function(event) {\r\n        if ((event.ctrlKey || event.metaKey) && (event.key == \"s\" || event.key == \"p\" || event.charCode == 16 || event.charCode == 112 || event.keyCode == 80 || event.keyCode == 83)) {\r\n            event.preventDefault();\r\n            return false;\r\n        }\r\n    };\r\n}\r\n\r\n// Leider ist es so, dass man in Browsern nicht unbedingt mitbekommen, wenn der Autofill Mechanismus Textfelder vorausgefüllt hat\r\n// Wir arbeiten ja mit onchange/oninput bzw. keyup und die werden beide im aktuellen Firefox nicht gerufen, wenn Firefox autofilled hat\r\n// Zukünftig wird es noch schwieriger, da soll man per JS gar nicht mehr mitbekommen, wenn es vorausgefüllt wird, weil es sonst\r\n// dazu führt, dass man bei einer XSS Lücke die Logindaten einer anderen Seite abgreifen kann\r\nfunction dwFrameworkSendAutoFill() {\r\n    var list = document.getElementsByTagName('input');\r\n    for (var i = 0; i < list.length; i++) {\r\n        var c = list[i];\r\n        if ((c.type == 'text') || (c.type == 'password')) {\r\n            if ((c.value != '') && (typeof (c.oninput) != 'undefined') && dwUtilsStringContains(c.className, \"guitextfield\")) {\r\n                if (typeof (dwAjaxAddUpdate) == \"function\") {\r\n                    // Methode ist im GWT Umfeld nicht verfügbar\r\n                    dwAjaxAddUpdate(c.id + \"@DW@autoFillValue@DW@\" + c.value, false, true);\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\nfunction dwFrameworkInitFrameworkFinished() {\r\n    if (framework_isWithStaticConnection && typeof (dwAjaxNewStaticConnection) != \"undefined\") {\r\n        dwAjaxNewStaticConnection();\r\n    }\r\n    dwFrameworkInitFinished = true;\r\n    // updateSizes erzeugt evtl. Events, die bei dwFrameworkInitFinished == false nicht geworfen werden würden,\r\n    // so dass wir das explizit ganz am Schluss hier machen\r\n    dwResizeRegistryGetInstance().updateSizes();\r\n\r\n    // Aktiviere den Fix, wenn es Android oder Edge im Tabletmodus ist. Bei Android werden sonst die Eingabefelder öfters überdeckt\r\n    softkeyboardFix.install();\r\n\r\n    // Aktiviere den Tiffconverter\r\n    QUANOS_TIFF_CONVERTER.install();\r\n\r\n    // Wir müssen leider dem Firefox etwas Zeit geben, weil man hier noch nicht die vorausgefüllten Felder zuverlässig ausgefüllt bekommt!\r\n    setTimeout(function() {\r\n        dwFrameworkSendAutoFill();\r\n    }, 100);\r\n}\r\n\r\nfunction dwFrameworkCheckOrientationOrSizeChanged(checkCounter) {\r\n    // Test bei jedem Resize, ob es schon installiert ist oder nicht mehr benötigt wird\r\n    softkeyboardFix.install();\r\n\r\n    if (softkeyboardFix.isInstalled()) {\r\n        // Prüfe, ob sich die Größe nur geändert hat, weil die Tastatur eingeblendet wurde.\r\n        // In diesem Fall schlucke den Resizeevent\r\n        if (!softkeyboardFix.reallySizeChanged()) {\r\n            // Die Veränderung ist durch ein-/ausblenden des Keyboards ausgelöst worden ...\r\n            if (!softkeyboardFix.isSoftkeyboardVisible()) {\r\n                let edgeDesktop = framework_isEdgeChromium && isNaN(framework_mobileOSVersion);\r\n                let edgeMobile = framework_isEdgeChromium && (framework_mobileOSVersion > -1);\r\n                let chromeDesktop = framework_isChrome && !framework_isEdgeChromium && isNaN(framework_mobileOSVersion);\r\n                let chromeMobile = framework_isChrome && !framework_isEdgeChromium && (framework_mobileOSVersion > -1);\r\n                if (chromeMobile || chromeDesktop || edgeMobile || edgeDesktop) {\r\n                    // Hier kein blur, weil sich dadurch die Bildschirmtastatur sofort wieder schließt seit Chrome 108\r\n                } else {\r\n                    // Keyboard wurde ausgeblendet. Die tatsächliche Seitenhöhe entspricht der gemerkten maximalen Seitenhöhe\r\n                    const activeElement = getActiveElement(document);\r\n                    if (activeElement && activeElement.tagName && dwUtilsIsInputTextBox(activeElement)) {\r\n                        // Workaround für JAVA_VIEWER-7172. Die Eingabeelemente behalten bei Android den Focus, obwohl sie nicht mehr fokusiert sind\r\n                        // Der Workaround sendet einen blur, wenn erkannt wird, dass die Tastatur nicht mehr angezeigt wird.\r\n                        // Der Grund für dieses Verhalten ist:\r\n                        // Bei Touch Browsern werden mouseup/down Befehle manuell via Javascript ausgelöst (laut SB unterstützt iOS diese Events nicht)\r\n                        // Bei diesen Befehlen werden bereits die entsprechenden Mouse Listener ausgelöst.\r\n                        // Das doppelte Auslösen der Events wird verhindert indem das Default Verhalten abgebrochen wird (preventDefault) und das Event\r\n                        // nicht an den Browser weiter geleitet wird\r\n                        // Im dwTouchEnd wird daher bereits der focus() manuell auf Eingabecontrols gesetzt, hier machen wir manuell den blur()\r\n                        activeElement.blur();\r\n                    }\r\n                }\r\n            }\r\n            return;\r\n        }\r\n        // Größe hat sich echt geändert (Am Handy wahrscheinlich rotiert)\r\n        softkeyboardFix.setNewWidth();\r\n    }\r\n\r\n    if (window.orientation != null) {\r\n        framework_displayOrientation = window.orientation;\r\n    }\r\n\r\n    var bodyNode = $(\"body\");\r\n    var displayWidth = dwUtilsGetViewportWidth();\r\n    var displayHeight = dwUtilsGetViewportHeight();\r\n\r\n    // so lange den Check über setTimeout() wiederholen, bis die Ausrichtungsänderung auch im Body durch eine veränderte\r\n    // Breite und Höhe angekommen ist (dies kann unter Android anscheinend ein paar Millisekunden dauern...)\r\n    if (dwFrameworkDisplayResized()) {\r\n        if (framework_isiOS) {\r\n            // Workaround für einen Apple iOS Bug, der ggf. mit Version 12.x eingeführt wurde. Probleme haben mehrere Nutzer\r\n            // https://developer.apple.com/forums/thread/128949.\r\n            // Auch im Xamarin Umfeld ist dieses neue Apple Feature dokumentiert\r\n            // https://github.com/xamarin/Xamarin.Forms/issues/9872\r\n            // Beim Rendering der weißen Seite ist die Ursache, dass Apple an die Browser Schnittstelle die Größe weitergibt\r\n            // die bei Anzeige der Toolbar/Statusbar zur Verfügung steht. Nur werden diese beiden Symbolleisten nicht dargestellt\r\n            // Der Scrolling Befehl forciert die Darstellung der Symbolleisten - so dass der weiße Bereich weg ist.\r\n            setTimeout(function() {\r\n                // Länge des Timeouts kann ggf. verkürzt werden - ich habe mich am \"original\" orientiert\r\n                // https://stackoverflow.com/questions/62717621/white-space-at-page-bottom-after-device-rotation-in-ios-safari\r\n                window.scrollTo(0, 1);\r\n            }, 500);\r\n\r\n        }\r\n        framework_displayWidth = displayWidth;\r\n        framework_displayHeight = displayHeight;\r\n        if (typeof (dwAjaxDefaultOnDisplayOrientationChanged) != \"undefined\") {\r\n            dwAjaxDefaultOnDisplayOrientationChanged(\"@DWSUB@__INT_displayOrientation=\" + framework_displayOrientation\r\n                                                     + \"@DWSUB@__INT_displayWidth=\" + framework_displayWidth\r\n                                                     + \"@DWSUB@__INT_displayHeight=\" + framework_displayHeight, true);\r\n        }\r\n    } else if (checkCounter < 30) { // nach maximal 30 Versuchen (d.h. 3000ms) aufgeben\r\n        setTimeout(function() {\r\n            dwFrameworkCheckOrientationOrSizeChanged(checkCounter + 1)\r\n        }, 100);\r\n    }\r\n}\r\n\r\n/**\r\n * Methode liefert zurück, ob bei einem resize Event sich auch die Display-Größe verändert hat\r\n *\r\n * Notwendig, weil resize Events (bei älteren Browsern) auch gerufen werden, wenn sich einzelne DOM Elemente in der\r\n * Größe geändert haben, und bei einem (richtigen) resize Contextmenü und Tooltips beendet werden sollen\r\n *\r\n * Die Methode muss vor dwFrameworkCheckOrientationOrSizeChanged aufgerufen werden - andernfalls wird immer false zurückgeliefert.\r\n */\r\nfunction dwFrameworkDisplayResized() {\r\n    if (!dwFrameworkInitFinished) {\r\n        return false;\r\n    }\r\n    var displayWidth = dwUtilsGetViewportWidth();\r\n    var displayHeight = dwUtilsGetViewportHeight();\r\n\r\n    // so lange den Check über setTimeout() wiederholen, bis die Ausrichtungsänderung auch im Body durch eine veränderte\r\n    // Breite und Höhe angekommen ist (dies kann unter Android anscheinend ein paar Millisekunden dauern...)\r\n    var displayIsSame = (framework_displayWidth == framework_displayHeight);\r\n    var displayWidthIsChanged = (framework_displayWidth != displayWidth);\r\n    var displayHeightIsChanged = (framework_displayHeight != displayHeight);\r\n    return (displayIsSame || displayWidthIsChanged || displayHeightIsChanged);\r\n}\r\n\r\n/**\r\n * Es kann sein, das das onresize (und damit dwRelayout) mehrfach gerufen wird (z.B. Android Browser)\r\n * Verwendet man die Methode dwFrameworkFireOnceForEvent wird die eigentliche Funktion erst dann gerufen,\r\n * wenn 100ms kein neuer Funktions-Aufruf verzeichnet wurde\r\n */\r\nfunction dwFrameworkFireOnceForEvent(cacheId, functionToFire) {\r\n    var threadId = dwFrameworkThreadIdCache[cacheId];\r\n    if (threadId != null) {\r\n        clearTimeout(threadId);\r\n        delete dwFrameworkThreadIdCache[cacheId];\r\n    }\r\n    var args = arguments;\r\n    threadId = setTimeout(function() {\r\n        if (functionToFire) { // Methode gefunden ...\r\n            // http://stackoverflow.com/questions/676721/calling-dynamic-function-with-dynamic-parameters-in-javascript\r\n            this[functionToFire].apply(this, Array.prototype.slice.call(args, 2));\r\n        }\r\n        delete dwFrameworkThreadIdCache[cacheId];\r\n    }, 100);\r\n    dwFrameworkThreadIdCache[cacheId] = threadId;\r\n}\r\n\r\nvar softkeyboardFix = new SoftkeyboardFix();\r\n\r\n/**\r\n * Klasse, die das spezielle Verhalten beim der Softwaretastatur bei Andriod und Edge handelt\r\n * siehe: https://confluence.docware.de/x/EQADB  (Android: Eingabefelder nicht von Softtastatur überdecken)\r\n *\r\n * In IE11 oder Firefox funktioniert der Debug Modus nicht - hier kommt es nur kurz zu einem Resize-Flackern\r\n * @constructor\r\n */\r\nfunction SoftkeyboardFix() {\r\n    var _self = this;\r\n    var debugMode = false;\r\n    var debugShowInstallFrame = false;\r\n    var isInstalled = false;\r\n    var lastWidth = -1;\r\n    var lastHeight = -1;\r\n    var heightOfBrowserHeader = -1;\r\n    var widthToHeightMap = {};\r\n    var lastHeightOfGetHeight = -1;\r\n\r\n    /**\r\n     * Prüft, ob für diesen Browser/Betriebsystem der Fix nötig ist\r\n     * @returns {boolean}\r\n     */\r\n    var needFix = function() {\r\n        if (debugMode) {\r\n            return true;\r\n        }\r\n        // Bei Android Geräten immer den fix verwenden, da wir hier sicher wissen dass es ich um ein Gerät handelt\r\n        // bei dem die Softkeytastatur erscheint\r\n        if (framework_isAndroid) {\r\n            return true;\r\n        }\r\n        // Ansonsten bei Firefox bzw. Offline den Fix verwenden, solange sie auf einem Touchgerät laufen, da\r\n        // auch hier die Softkeytastatur eingeblendet werden könnte und dies kein Resize auslösen darf\r\n        if (framework_isTouchBrowser && (framework_isFirefox || framework_isOffline)) {\r\n            return true;\r\n        }\r\n        return false;\r\n    };\r\n\r\n    /**\r\n     * Ein Eingabefeld hat den aktuellen Focus\r\n     * @returns {boolean}\r\n     */\r\n    var inputHasFocus = function() {\r\n        return dwUtilsIsInputTextBox(getActiveElement(document));\r\n    };\r\n\r\n\r\n    /**\r\n     * Aktuelle Höhe des Browserfensters. Mit dem Workaround um die Tastatur nicht mitzurechnen\r\n     * @returns {*}\r\n     */\r\n    var getHeight = function() {\r\n        if (!inputHasFocus()) {\r\n            // Solange kein Inputfield den Focus hat, kann man immer einfach die wirkliche Größe zurückliefern, da\r\n            // hier keine Tastatur eingeblendet sein kann\r\n            return getRealHeight();\r\n        } else {\r\n            var height;\r\n            // Jetzt wird es umständlich, da evtl. die Tastatur angezeigt wird.\r\n            // Falls für die Breite schon mal eine Höhe ermittelt wurde, nehme diese\r\n            height = widthToHeightMap[getWidth()];\r\n\r\n            if (height === undefined) {\r\n                // Ne, Noch keine Höhe da gewesen\r\n                // Falls die Höhe des Browserheaders schon bekannt ist, berechne die wahrscheinliche Höhe als screenHöhe minus Browserheader\r\n                if (heightOfBrowserHeader >= 0) {\r\n                    height = window.screen.availHeight - heightOfBrowserHeader;\r\n                } else {\r\n                    // kompletter Notausgang, hier kann man eigentlich nie landen, aber was will man machen\r\n                    // machen wir es so falsch wie ohne fix\r\n                    height = window.innerHeight;\r\n                }\r\n            }\r\n            return height;\r\n        }\r\n    };\r\n\r\n    var getRealHeight = function() {\r\n        // Kein Focus auf einem Inputfeld -> es ist sicher kein Keyboard an und die\r\n        // Höhe kann einfach vom Fenster ausgelesen werden und als Wert für später gespeichert werden\r\n        var height = window.innerHeight;\r\n        // So hoch scheint die Eingabeleiste vom Browser zu sein\r\n        heightOfBrowserHeader = window.screen.availHeight - height;\r\n        // und diesen Wert in der Map zu der Breite speichern\r\n        widthToHeightMap[getWidth()] = height;\r\n\r\n        return height;\r\n    };\r\n\r\n    /**\r\n     * Browserfensterbreite\r\n     * @returns {number}\r\n     */\r\n    var getWidth = function() {\r\n        return window.innerWidth;\r\n    };\r\n\r\n\r\n    /**\r\n     * Modifiziere den Wrapper und Body, so dass die Höhe manuell gesetzt wird und Scrolling möglich ist\r\n     * @param installfix\r\n     */\r\n    var prepareDom = function(installfix) {\r\n        isInstalled = installfix;\r\n\r\n        var bodyNode = $(\"body\");\r\n        var mainWrapper = $(\"dwmainwrapper\");\r\n\r\n        if (installfix) {\r\n            mainWrapper.style.height = getHeight() + \"px\";\r\n            if (debugShowInstallFrame) {\r\n                mainWrapper.style.border = \"2px solid red\";\r\n            }\r\n            bodyNode.style.overflow = \"auto\";\r\n            _self.setNewWidth();\r\n        } else {\r\n            mainWrapper.style.height = \"100%\";\r\n            if (debugShowInstallFrame) {\r\n                mainWrapper.style.border = \"2px solid black\";\r\n            }\r\n            bodyNode.style.overflow = \"hidden\";\r\n            lastHeight = -1;\r\n            lastWidth = -1;\r\n        }\r\n    };\r\n\r\n    /**\r\n     * Die Neu ermittelte Höhe in dem Wrapper setzen\r\n     */\r\n    this.setNewWidth = function() {\r\n        var mainWrapper = $(\"dwmainwrapper\");\r\n        mainWrapper.style.height = getHeight() + \"px\";\r\n\r\n        lastHeight = getHeight();\r\n        lastWidth = getWidth();\r\n\r\n    };\r\n\r\n\r\n    /**\r\n     * Prüfe, ob sich die Höhe oder Breite wirklich geändert hat\r\n     * @returns {boolean}\r\n     */\r\n    this.reallySizeChanged = function() {\r\n        if (lastWidth != getWidth()) {\r\n            return true;\r\n        }\r\n        if (lastHeight != getHeight()) {\r\n            return true;\r\n        }\r\n\r\n        return false;\r\n    };\r\n\r\n    /**\r\n     * Abgleich zwischen Wrapper und Browser Größenberechnung.\r\n     *\r\n     * Die Tastatur ist eingeblendet, wenn die berechnete Browser Größe kleiner ist, als die im Wrapper hinterlegte\r\n     * @returns {boolean}\r\n     */\r\n    this.isSoftkeyboardVisible = function() {\r\n        var realSizeChange = this.reallySizeChanged();\r\n        if (realSizeChange) {\r\n            return false;\r\n        }\r\n        if (lastHeight === -1) {\r\n            return false;\r\n        }\r\n        return lastHeight > dwUtilsGetViewportHeight();\r\n    };\r\n\r\n    /**\r\n     * Modifiziere den Wrapper, falls es beim diesem Browser/Betriebssystem nötig ist\r\n     * @returns {boolean}\r\n     */\r\n    this.install = function() {\r\n        if (needFix()) {\r\n            if (!isInstalled) {\r\n                prepareDom(true);\r\n            }\r\n            return true;\r\n        } else {\r\n            if (isInstalled) {\r\n                prepareDom(false);\r\n            }\r\n        }\r\n        return false;\r\n    };\r\n\r\n    this.isInstalled = function() {\r\n        return isInstalled;\r\n    }\r\n}\r\n\r\nfunction dwFrameworkOnResize() {\r\n    dwFrameworkFireOnceForEvent(\"dw_framework_onresize\", \"dwRelayout\");\r\n}\r\n\r\nfunction dwFrameworkGetMajorBrowserVersion(userAgent, versionIndicator) {\r\n    var versionIndicatorIdx = userAgent.indexOf(versionIndicator);\r\n    var version = \"\";\r\n    if (versionIndicatorIdx > -1) {\r\n        var withoutIndicator = userAgent.substring(versionIndicatorIdx + versionIndicator.length);\r\n        withoutIndicator = dwUtilsTrimLeft(withoutIndicator);\r\n        version = parseInt(withoutIndicator);\r\n    }\r\n    if (version == \"\") {\r\n        if (versionIndicator.toLowerCase() == \"msie\") {\r\n            return 8;\r\n        } else {\r\n            return 1;\r\n        }\r\n    }\r\n    return version;\r\n}\r\n\r\nfunction dwFrameworkGetOffsetSupport() {\r\n    var bodyNode = $(\"body\");\r\n    var noVisibilityStyle = \"visibility:hidden;\";\r\n    var noBorderStyle = \"border:0;\";\r\n    var noPaddingStyle = \"padding:0;\";\r\n    var positionAbsoluteToTopLeftCornerStyle = \"position:absolute;top:0;left:0;\";\r\n    var noMarginStyle = \"margin:0;\";\r\n\r\n    var childStyle = positionAbsoluteToTopLeftCornerStyle + noMarginStyle + noPaddingStyle +\r\n                     \"width:1px;height:1px;border:5px solid #000000;\";\r\n    var containerStyle = positionAbsoluteToTopLeftCornerStyle + noMarginStyle + noVisibilityStyle +\r\n                         \"width:1px;height:1px;\" + noBorderStyle;\r\n    var childDivHtml = \"<div style=\\\"\" + childStyle + \"\\\" ><div></div></div>\";\r\n    var childTableHtml = \"<table style=\\\"\" + childStyle + \"\\\" cellpadding='0' cellspacing='0'><tr><td></td></tr></table>\";\r\n\r\n    var container = document.createElement(\"div\");\r\n    container.style.cssText = containerStyle;\r\n    bodyNode.insertBefore(container, bodyNode.firstChild);\r\n\r\n    var docFrag = document.createDocumentFragment();\r\n    docFrag.appendChild(dwDomParseStringToNodes(childDivHtml));\r\n    docFrag.appendChild(dwDomParseStringToNodes(childTableHtml));\r\n    container.appendChild(docFrag);\r\n\r\n    var childDiv = dwDomGetChildAtIndex(container, 0);\r\n    var subChildDiv = dwDomGetChildAtIndex(childDiv, 0); // Verwendet für Offset-Berechnung (wird Border berücksichtigt)\r\n    var childTable = dwDomGetChildAtIndex(container, 1);\r\n\r\n    var isBorderIncludedInOffset = (subChildDiv.offsetTop) && (subChildDiv.offsetTop == 5);\r\n    var isBorderIncludedInTableOffset = (childTable.offsetTop) && (childTable.offsetTop == 5);\r\n\r\n    childDiv.style.overflow = \"hidden\";\r\n    childDiv.style.position = \"relative\";\r\n\r\n    var isBorderSubstractedForInvisibleOverflow = (subChildDiv.offsetTop) && (subChildDiv.offsetTop == -5);\r\n\r\n    bodyNode.removeChild(container);\r\n    container = childDiv = subChildDiv = childTable = null;\r\n    var offsetSupport = {\r\n        isBorderIncludedInOffset: isBorderIncludedInOffset,\r\n        isBorderIncludedInTableOffset: isBorderIncludedInTableOffset,\r\n        isBorderSubstractedForInvisibleOverflow: isBorderSubstractedForInvisibleOverflow\r\n    };\r\n    return offsetSupport;\r\n}\r\n\r\nfunction dwFrameworkDefaultClose(event) {\r\n    if (typeof (dwTableColumnResizeDragStopEvent) != \"undefined\") {\r\n        dwTableColumnResizeDragStopEvent(event);\r\n    }\r\n    if (typeof (dwSplitDragStopEvent) != \"undefined\") {\r\n        dwSplitDragStopEvent(event);\r\n    }\r\n}\r\n\r\nfunction dwFrameworkOpenWindow(windowUniqueId, url, width, height, resizable) {\r\n    var opened = false;\r\n    try {\r\n        opened = window.open(url, windowUniqueId,\r\n                             \"width=\" + width + \",height=\" + height + \",location=no,menubar=no,resizable=\" + (resizable ? \"yes\" : \"no\")\r\n                             + \",status=no,titlebar=no,toolbar=no\", false);\r\n    } catch (exception) {\r\n    }\r\n    return opened;\r\n}\r\n\r\nfunction dwFrameworkOpenTab(url) {\r\n    var opened = false;\r\n    try {\r\n        opened = window.open(url, \"_blank\");\r\n    } catch (exception) {\r\n    }\r\n    return opened;\r\n}\r\n\r\nfunction dwFrameworkSetAsynchronousFlag(event, doAsynchronousCall) {\r\n    if (!dwFrameworkInitFinished) {\r\n        return;\r\n    }\r\n    if (event) {\r\n        event.asynchronous = doAsynchronousCall;\r\n        if (framework_isIE8 || framework_isIELegacyMode) {\r\n            window.dw_asynchronous = doAsynchronousCall;\r\n        }\r\n    }\r\n}\r\n\r\nfunction dwFrameworkShutdownFrameworkBrowser() {\r\n    // Bei einem per JavaScript getriggerten Refresh das Framework natürlich nicht deaktivieren\r\n    if (!framework_isActive || dwFrameworkRefreshingPage) {\r\n        dwFrameworkRefreshingPage = false;\r\n        return;\r\n    }\r\n    framework_isActive = false;\r\n\r\n    if (!dwFrameworkCloseWindowSilently) {\r\n        // URL zur Banachrichtigung des Servers über das geschlossene Fenster; funktioniert je nach Browser leider nicht\r\n        // per AJAX oder window.open(url, '_self') -> XMLHttpRequest verwenden\r\n        try {\r\n            var closeSubWindowUrl = \"app?closedSubWindow=\" + dwFrameworkGetRootWindowId() + \"&tabWindowId=\" + dwFrameworkGetTabWindowId();\r\n            var xmlHttp = dwUtilsCreateXmlHttpRequest(true);\r\n            if (xmlHttp != null) {\r\n                xmlHttp.open(\"GET\", closeSubWindowUrl, framework_isChrome); // Nur bei Chrome muss/darf der xmlHttp-Request asynchron sein\r\n                xmlHttp.send(null);\r\n\r\n                // Bei Chrome wegen dem asynchronen xmlHttp-Request beim Schließen vom MasterRootWindow noch kurz warten,\r\n                // damit evtl. geöffnete nicht-modale Fenster noch geschlossen werden können\r\n                if (framework_isChrome && ((typeof (framework_isNonModalWindow) == 'undefined') || !framework_isNonModalWindow) && !dwFrameworkEmbeddedInShop) {\r\n                    sleep(2000);\r\n                }\r\n            }\r\n        } catch (exception) {\r\n            // Ignorieren\r\n        }\r\n    }\r\n}\r\n\r\nfunction dwFrameworkGetTabWindowId() {\r\n    return document.getElementById(\"body\").getAttribute(\"tabWindowId\")\r\n}\r\n\r\nfunction dwFrameworkShowLostConnectionBanner(countdown) {\r\n    $(\"lostConnectionBanner\").style.display = \"block\";\r\n    $(\"lostConnectionBannerTimer\").innerHTML = countdown + \"s\";\r\n}\r\n\r\nfunction dwFrameworkHideLostConnectionBanner() {\r\n    $(\"lostConnectionBanner\").style.display = \"none\";\r\n}\r\n\r\nfunction dwFrameworkInitWindow(windowId) {\r\n    // Firefox fixes\r\n    if (framework_isFirefox) {\r\n        dwFrameworkFixAutocomplete();\r\n    }\r\n}\r\n\r\n/**\r\n * Braucht man für Firefox. Dort ist das setzen von unbekannten Parametern nur über setAttribute möglich.\r\n */\r\nfunction dwFrameworkFixAutocomplete() {\r\n    for (var i = 0; i < document.forms.length; i++) {\r\n        document.forms[i].setAttribute(\"autocomplete\", \"off\");\r\n    }\r\n}\r\n\r\n/**\r\n * Skript läuft alle DWFRAMEWORK_CALLBACK_DELAY Millisekunden (aktuell 1 Sekunde)\r\n */\r\nfunction dwFrameworkPing() {\r\n    if ((!framework_isActive) || (!framework_isWithPing)) {\r\n        if (typeof (framework_pingId) != \"undefined\") {\r\n            clearInterval(framework_pingId);\r\n        }\r\n        return;\r\n    }\r\n    // Wenn er sowieso schon was macht, dann muss er keinen Ping senden\r\n    // Falls andere Sachen in der Liste stehen würden (außer Ping),\r\n    // dann macht das auch nichts, weil er nach dem aktuellen Senden\r\n    // dann nochmal direkt nachschaut, ob sich etwas neues angesammelt hat\r\n    // und er dann gleich wieder sendet\r\n    if (!dwAjaxCurrentlySending) {\r\n        var shouldPing = false;\r\n        if (framework_childThreadCount > 0) {\r\n            // Alle DWFRAMEWORK_CALLBACK_DELAY ms schauen ob etwas neues da ist\r\n            shouldPing = true;\r\n        } else {\r\n            // Nur alle 3 Minuten einen Ping machen wg. Refresh der Session\r\n            if (new Date().getTime() - framework_lastServerRequest > 3 * 60 * 1000) {\r\n                shouldPing = true;\r\n            }\r\n        }\r\n        if (shouldPing && typeof (dwAjaxAddUpdate) != \"undefined\") {\r\n            // Wenn es nur ein Ping ist, dann ignorieren wir Fehler (Server nicht erreichbar, soll ja so sein, weil\r\n            // mittendrin die Verbindung auch mal weg sein kann und es trotzdem richtig weiterläuft)\r\n            var shouldIgnoreErrors = (dwAjaxUpdates.length == 0);\r\n            dwAjaxAddUpdate(\"ping\", false, true);\r\n            dwAjaxSendUpdates(shouldIgnoreErrors, true);\r\n        }\r\n    }\r\n}\r\n\r\nfunction dwHelperDoNothing() {\r\n} // Verwendet als Trennzeichen zwischen den Methoden z.B. in der dwRelayout Methode\r\n\r\n/**\r\n * Überprüft ob die übergebenen unique Ids noch im DOM erreichbar sind\r\n * @param uniqueIds string : komma separierter String von uniqueids\r\n * @return array : array von Indizes. Indexposition definiert, welcher Methoden-Index aus einer Funktion gelöscht werden soll\r\n */\r\nfunction dwFrameworkCheckIds(uniqueIds) {\r\n    var uniqueIdsToCheck = dwUtilsSplit(uniqueIds, \",\", false);\r\n    var invalidIdxs = new Array();\r\n    for (var i = 0; i < uniqueIdsToCheck.length; i++) {\r\n        var uniqueIdToCheck = uniqueIdsToCheck[i];\r\n        if (!$(uniqueIdToCheck)) {\r\n            invalidIdxs.push(i);\r\n        }\r\n    }\r\n    return invalidIdxs;\r\n}\r\n\r\n/**\r\n * Entfernt interne Methodenaufrufe, die sich auf nicht mehr existierende IDs beziehen und korrigiert die Parameter\r\n * der Methode \"dwFrameworkCheckIds\"\r\n * Dieser Mechanismus setzt voraus, dass die Methoden durch DWFRAMEWORK_NEXT_METHOD_STRING getrennt sind\r\n * @param functionNameToCleanup string : Name der Funktion, die bereinigt werden soll\r\n * @param invalidIdxs array : String Array von IDs die nicht mehr zugeordnet werden konnten\r\n */\r\nfunction dwFrameworkCleanupDeprecatedMethods(functionNameToCleanup, functionNameOfCleanup, checkFunctionNameOfCleanup, invalidIdxs) {\r\n    if (!(typeof window[functionNameToCleanup] == \"function\")) {\r\n        // Es kann nur eine Methode bereinigt werden, die bereits vorhanden ist.\r\n        // Im Fall von z.B. dwRelayout gehen wir davon aus, dass diese Methode vorher generiert worden sein muss (GuiWindow)\r\n        alert(\"Exception: Function \" + functionNameToCleanup + \" not found.\\n\" +\r\n              \"Failed to run dwFrameworkCleanupDeprecatedMethods.\");\r\n    }\r\n    var func = window[functionNameToCleanup].toString();\r\n    func = dwUtilsStripFromFunction(func, true, true); // function() {...} abgeschnitten\r\n    func = dwUtilsTrim(func); // Left + Right Trim\r\n    // Bereinigung der einzelnen Methoden-Aufrufe (herauslöschen von Methoden die zu nicht vorhandenen IDs gehören)\r\n    var funcCommands = dwUtilsSplit(func, DWFRAMEWORK_CLEANUP_FUNCTION_NEXT_METHOD_STRING, false);\r\n    var processedCommands = new Object();\r\n    for (var i = 0, j = 0; i < funcCommands.length; i++) {\r\n        var funcCommand = funcCommands[i];\r\n        var invalidIdx = invalidIdxs[j];\r\n        if (i == invalidIdx) {\r\n            j++;\r\n        } else if (processedCommands[funcCommand] == \"set\") {\r\n            // Bereits verarbeitet - Duplikat ignorieren und aus Check-Methode entfernen\r\n            invalidIdxs.push(i);\r\n        } else {\r\n            processedCommands[funcCommand] = \"set\";\r\n        }\r\n    }\r\n\r\n    func = \"\";\r\n    for (var processedCommand in processedCommands) {\r\n        if (func.length > 0) {\r\n            func += DWFRAMEWORK_CLEANUP_FUNCTION_NEXT_METHOD_STRING;\r\n        }\r\n        func += processedCommand;\r\n    }\r\n    window[functionNameToCleanup] = new Function(func);\r\n\r\n    // Bereinigung der Cleanup Methode\r\n\r\n    if (!(typeof window[functionNameOfCleanup] == \"function\")) {\r\n        // Es kann nur eine Methode bereinigt werden, die bereits vorhanden ist.\r\n        // Im Fall von z.B. dwRelayout gehen wir davon aus, dass diese Methode vorher generiert worden sein muss (GuiWindow)\r\n        alert(\"Exception: Function \" + functionNameOfCleanup + \" not found.\\n\" +\r\n              \"Failed to run dwFrameworkCleanupDeprecatedMethods.\");\r\n    }\r\n    var cleanupFunction = window[functionNameOfCleanup].toString();\r\n    cleanupFunction = dwUtilsStripFromFunction(cleanupFunction, true, true); // function() {...} abgeschnitten\r\n    cleanupFunction = dwUtilsTrim(cleanupFunction); // Left + Right Trim\r\n\r\n    var innerFunctionName = checkFunctionNameOfCleanup;\r\n    var innerFunctionIdx = cleanupFunction.indexOf(innerFunctionName + \" (\");\r\n    if (innerFunctionIdx == -1) {\r\n        innerFunctionIdx = cleanupFunction.indexOf(innerFunctionName + \"(\");\r\n    }\r\n    if (innerFunctionIdx == -1) {\r\n        alert(\"Exception: Inner function string '\" + innerFunctionName + \"' not found.\");\r\n        return; // Methode nicht gefunden\r\n    }\r\n    var innerFunctionEnd = \");\";\r\n    var innerFunctionEndIdx = cleanupFunction.indexOf(innerFunctionEnd, innerFunctionIdx + innerFunctionName.length) + innerFunctionEnd.length;\r\n    var innerFunction = cleanupFunction.substring(innerFunctionIdx, innerFunctionEndIdx);\r\n    var parameters = dwUtilsGetFunctionParameters(innerFunction);\r\n    var parameterValue = \"\";\r\n    if (parameters.length == 1) {\r\n        parameterValue = parameters[0].replace(/\"/g, \"\");\r\n    }\r\n    parameters = dwUtilsSplit(parameterValue, \",\", false);\r\n    invalidIdxs.sort(dwUtilsSortNumberAsc);\r\n    var cleanParameters = new Array();\r\n    for (var i = 0, j = 0; i < parameters.length; i++) {\r\n        var invalidIdx = invalidIdxs[j];\r\n        if (i == invalidIdx) {\r\n            j++;\r\n        } else {\r\n            var param = parameters[i];\r\n            cleanParameters.push(param);\r\n        }\r\n    }\r\n    parameterValue = cleanParameters.join(\",\");\r\n\r\n    var modifiedFunc = cleanupFunction.substring(0, innerFunctionIdx).concat(innerFunctionName).concat(\"(\\\"\").concat(parameterValue).concat(\"\\\");\").concat(cleanupFunction.substring(innerFunctionEndIdx));\r\n    window[functionNameOfCleanup] = new Function(modifiedFunc);\r\n}\r\n\r\n/**\r\n * Repositioniert bei Bedarf den zentrierten Knoten innerhalb eines Parent Container (wie Scrollpane).\r\n * Bei Verwendung des Gridbag Layouts werden die Inhalte zentriert dargestellt, sofern es keine Zelle gibt, die eine\r\n * Gewichtung gesetzt bekommen hat. Bei Verwendung des Flow-Layouts wird der Container immer zentriert\r\n * Ist der darzustellende Inhalt in dieser Dimension größer als der umschliessende Container (z.B. Scrollpane), darf der Inhalt nicht mehr\r\n * zentriert sondern an der Kante anliegend dargestellt werden. (overflow hat Probleme, bei negativem margin-top / margin-left)\r\n *\r\n * Ist der darzustellende Inhalt kleiner als die Scrollpane muss entsprechend die Zentrierung wieder gewährleistet werden\r\n * @param uniqueId string : UniqueId der Gui Komponente, der das Gridbag Layout zugeordnet ist (z.B. GuiPanel)\r\n * @param scrollPaneUniqueId string : UniqueId der GuiScrollpane\r\n * @param navigationPath string : Navigationspfad von der Gui Komponente (mit Layout) zum zentrierten DOM Knoten\r\n * @param styleName : string : StyleName der angepasst werden soll (height / width). Andere Stylenamen nicht zulässig!\r\n */\r\nfunction dwFrameworkRelayoutCenteredNodeInParentContainer(uniqueId, scrollPaneUniqueId, navigationPath, styleName) {\r\n    var control = $(uniqueId);\r\n    var scroller = $(scrollPaneUniqueId);\r\n    if ((control == null) || (scroller == null)) {\r\n        // In der Relayout-Methode sind ggf. noch Verweise auf nicht mehr existierende Komponenten\r\n        // Im Anschluss an den fehlerhaften Aufruf wird die Methode automatisch aus dwRelayout gelöscht (dwFrameworkModifyInnerComponentJsFunction)\r\n//        dwUtilsDebugWrite(\"Exception: Either layout component or scrollpane not found. Failed to run dwFrameworkRelayoutCenteredNodeInParentContainer. - \" + uniqueId + \" / \" + scrollPaneUniqueId);\r\n        return;\r\n    }\r\n    var centeredNode = dwDomFindContainer(control, navigationPath, false);\r\n    var offsetName = \"offset\" + styleName.substring(0, 1).toUpperCase() + styleName.substring(1);\r\n    var scrollDim = scroller[offsetName];\r\n    var styleTopOrLeft = (styleName == \"height\") ? \"top\" : \"left\";\r\n    var styleMarginTopOrLeft = \"margin\" + styleTopOrLeft.substring(0, 1).toUpperCase() + styleTopOrLeft.substring(1);\r\n    // offsetGröße der centeredNode entspricht ggf. nicht der Größe des Inhalts (z.B. durch left / right Attribute beeinflusst)\r\n    // Aktueller Wert des Containers wird aufgrund der offsetGrößen der Kind-Container bestimmt\r\n    var containers = dwDomGetElementChildNodes(centeredNode);\r\n    var styleValue = 0;\r\n    for (var i = 0; i < containers.length; i++) {\r\n        var container = containers[i];\r\n        var containerOffset = container[offsetName];\r\n        var containerPosition = dwUtilsGetCoords(container, centeredNode);\r\n        var positionYorX = (styleName == \"height\") ? \"y\" : \"x\";\r\n        styleValue = Math.max(styleValue, containerOffset + containerPosition[positionYorX]);\r\n    }\r\n    if (scrollDim < styleValue) {\r\n        // Zentrierung von guilayoutgridbag_centered entfernen\r\n        dwDomSetStyle(centeredNode, styleTopOrLeft, \"0px\");\r\n        dwDomSetStyle(centeredNode, styleMarginTopOrLeft, \"0px\");\r\n    } else {\r\n        // Zentrierung wiederherstellen ...\r\n        dwDomSetStyle(centeredNode, styleTopOrLeft, \"50%\");\r\n        dwDomSetStyle(centeredNode, styleMarginTopOrLeft, -(Math.floor(styleValue / 2)) + \"px\");\r\n    }\r\n}\r\n\r\nfunction skipErrorForBrowser(message) {\r\n    // Firebug macht manchmal Probleme in QFTest. Meldungen dieses Scripts sollten wir ignorieren\r\n    if (framework_isDevelopmentQFTest && (typeof (url) != \"undefined\") && (url.indexOf(\"http://getfirebug.com/firebug-lite.js#startOpened\") == 0)) {\r\n        return true;\r\n    }\r\n\r\n    if (framework_isDevelopmentQFTest && message && (message.includes(\"_qf\"))) {\r\n        return true;\r\n    }\r\n\r\n    let showError = isDolphinBrowser();\r\n\r\n    if (!showError) {\r\n        showError = isXiaomiBrowser();\r\n    }\r\n\r\n    return showError;\r\n}\r\n\r\nfunction isDolphinBrowser() {\r\n    //Wenn es kein mobiler Browser ist, muss die u.s. Prüfung garnicht durchlaufen werden\r\n    if (!framework_isMobileBrowser) {\r\n        return false;\r\n    }\r\n\r\n    var userAgentString = navigator.userAgent.toLowerCase();\r\n\r\n    //Dolphin Browser identifizieren\r\n    //Leider ist dieser Browser nur schwer zu identifizieren, da er sich als Mozilla und Chrome Browser gleichzeitig ausgibt.\r\n    //Die eigentliche Unterscheidung dieses Browser liegt im Kürzel \"wv\".\r\n    //Es ist allerdings nicht sichergestellt, das sich der UserAgent- String dieses Browser irgendwann mal ändert\r\n    //Da nicht genau klar ist, ob die Fehlermeldung für alle mobilen Browser abgeschalten werden kann,\r\n    //werden vorläufig nur die beide u.s. Browser ausgenommen\r\n    let mozillaStringIndicator = userAgentString.indexOf(\"mozilla\");\r\n    if (mozillaStringIndicator > -1) {\r\n        let chromeStringIndicator = userAgentString.indexOf(\"chrome\");\r\n        if (chromeStringIndicator > -1) {\r\n            let number = userAgentString.indexOf(\"wv\");\r\n            if (number > -1) {\r\n                let versionNumber = userAgentString.indexOf(\"version/4.0\");\r\n                if (versionNumber > -1) {\r\n                    return true;\r\n                }\r\n            }\r\n        }\r\n    }\r\n    return false;\r\n}\r\n\r\nfunction isXiaomiBrowser() {\r\n    if (!framework_isMobileBrowser) {\r\n        return false;\r\n    }\r\n\r\n    var userAgentString = navigator.userAgent.toLowerCase();\r\n    //Xiaomi-Browser identifizieren\r\n    //Dieser Browser sendet seinen Namen als Klarstring\r\n    let xiaomiStringIndicator = userAgentString.indexOf(\"xiaomi\")\r\n    if (xiaomiStringIndicator > -1) {\r\n        return true;\r\n    }\r\n}\r\n\r\n/**\r\n * Gibt eine Alert-Nachricht mit der aktuellen Fehlermeldung aus (z.B. generiert durch 'throw')\r\n *\r\n * Der onError Mechanismus ist (noch nicht) standardisiert, wird allerdings von IE und Firefox unterstützt.\r\n * Ist im Internet Explorer der Debugger aktiviert, wird der onerror Handler umgangen und der Debugger angezeigt\r\n *\r\n * Aus Sicherheitsgründen hat sich z.B. die Mozilla Foundation dazu entschieden, das 'caller' Objekt nicht zu füllen\r\n * Die aufrufende Methode kann daher nicht implizit ermittelt werden.\r\n * siehe https://bugzilla.mozilla.org/show_bug.cgi?id=355430\r\n * @param message Fehlermeldungs-Text. Im IE lediglich die Aussage, dass ein nicht abgefangener Fehler aufgetreten ist\r\n * @param url   URL Pfad zur Javascript Datei, in der der Fehler aufgetreten ist. Nur IE\r\n * @param line  Zeile in der der Javascript Fehler aufgetreten ist. Nur IE\r\n */\r\nfunction dwFrameworkErrorHandler(message, url, line, col, error) {\r\n\r\n    //Workaround für den Xiaomi und Dolphin Browser, der offensichtliche Fehler in der Renderengine hat,\r\n    //die zu einem Fehler führen\r\n    //Nach Rückspräche mit Andreas Hofmann und Manfred Mälzer, wird die OnErrorMessage für die beiden Browser deaktiviert\r\n    //Sollten noch weitere Fehler mit diesen Browsern auftreten so sollte überlegt werden, die Erkennung In der\r\n    //Klasse J2EEServlet , Methode getBrowserInfo ergänzt werden\r\n    if (skipErrorForBrowser(message)) {\r\n        return;\r\n    }\r\n\r\n\r\n    if (DWAJAX_LOG_ERRORS) {\r\n        var logLevel = dwFrameworkInitFinished ? \"error\" : \"debug\";\r\n        // Direkter Aufruf von \"dwAjaxToServer\" - damit die Nachricht zuverlässig vor Anzeige eines Alerts zum Server übertragen wird (dwAjaxCurrentlySending könnte 'true' sein)\r\n        dwAjaxToServer(new Date().getTime(), false, [logLevel + \"@DW@html@DW@\" + (message || \"\") + \"@DWSUB@\" + (url || \"\") + \"@DWSUB@\" + (line || \"\") + \"@DWSUB@\" + dwFrameworkGetStacktrace(\"\")], true, new Date().getTime());\r\n    }\r\n\r\n    if (message === \"ResizeObserver loop limit exceeded\") {\r\n        // Fehlermeldung wird in Chrome nur in der Console protokolliert, ohne sich real auf die Darstellung auszuwirken.\r\n        // Aufgetreten bei der Darstellung von mp4 Dateien in der Dokumentation.\r\n        // In der Fehlerbehandlung wird die Nachricht nun geschluckt. So lässt sich zumindest die mp4 Datei laden und manuell abspielen.\r\n        return;\r\n    }\r\n\r\n    if (message.endsWith(\"ReferenceError: member called after shutdown\")) {\r\n        return;\r\n    }\r\n\r\n    var output = \"HTML Exception\\n\\n\";\r\n    output += \"Message: \" + message + \"\\n\\n\";\r\n    if (arguments.length > 1) {\r\n        output += \"URL: \" + url + \"\\n\";\r\n    }\r\n    if (arguments.length > 2) {\r\n        output += \"Line: \" + line + \"\\n\";\r\n    }\r\n    if (dwFrameworkInitFinished) {\r\n        dwDialogShowErrorDialog(output);\r\n    }\r\n    return true;\r\n}\r\n\r\nfunction dwFrameworkGetStacktrace(exception) {\r\n    if (exception && exception.stack) {\r\n        return exception.stack;\r\n    }\r\n    var stack = [];\r\n    var func = arguments.callee.caller;\r\n    while (func) {\r\n        var name = func.name || dwUtilsGetFunctionName(func.toString());\r\n        stack.push(name);\r\n        func = func.caller;\r\n    }\r\n    return stack.join(\"\\n\");\r\n}\r\n\r\nfunction dwFrameworkExceptionHandler(exception) {\r\n    if ((typeof (framework_isActive) == 'undefined') || !framework_isActive) {\r\n        return;\r\n    }\r\n\r\n    var name = exception.name || \"Error\";\r\n    var message = exception.message || exception || \"unknown\";\r\n\r\n    if (framework_isDevelopmentQFTest && message.includes(\"_qf\")) {\r\n        return;\r\n    }\r\n\r\n    var url = \"\";\r\n    var line = \"\";\r\n    var stack = dwFrameworkGetStacktrace(exception);\r\n\r\n    if (DWAJAX_LOG_ERRORS) {\r\n        var logLevel = dwFrameworkInitFinished ? \"error\" : \"debug\";\r\n        // Direkter Aufruf von \"dwAjaxToServer\" - damit die Nachricht zuverlässig vor Anzeige eines Alerts zum Server übertragen wird (dwAjaxCurrentlySending könnte 'true' sein)\r\n        dwAjaxToServer(new Date().getTime(), false, [logLevel + \"@DW@html@DW@\" + name + \": \" + message + \"@DWSUB@\" + url + \"@DWSUB@\" + line + \"@DWSUB@\" + stack], true, new Date().getTime());\r\n    }\r\n    if (DWAJAX_SHOW_ERRORS && dwFrameworkInitFinished) {\r\n        dwDialogShowErrorDialog(name + \": \" + message + \"\\n\\nStacktrace:\\n\" + stack);\r\n    }\r\n}\r\n\r\n/**\r\n * Klick für Auswahl in einer Tabelle ans Framework übermitteln.\r\n * Dabei müssen Parameter für die angeklickte Zeile und Strg übermittelt werden.\r\n * @param event\r\n * @param tableId\r\n * @param index\r\n * @param windowId\r\n */\r\nfunction dwFrameworkTableRowSelection(event, tableId, index, windowId) {\r\n    var clickedRowInput = $(tableId + \"_clickedRow\");\r\n    clickedRowInput.value = index;\r\n    var strgInput = $(windowId + \"_strgKeyPressed\");\r\n    strgInput.value = event.ctrlKey;\r\n    dwFrameworkSubmitForm(tableId, tableId, \"tableSelectionEvent\");\r\n}\r\n\r\n/**\r\n * Klick für Sortierung in einer Tabelle ans Framework übermitteln.\r\n * Dabei muss ein Parameter für die angeklickte Spalte übermittelt werden.\r\n * @param tableId\r\n * @param index\r\n */\r\nfunction dwFrameworkTableSort(tableId, index) {\r\n    var clickedColumnInput = $(tableId + \"_clickedColumn\");\r\n    clickedColumnInput.value = index;\r\n    dwFrameworkSubmitForm(tableId, tableId, \"tableColumnSortedEvent\");\r\n}\r\n\r\nvar calculatedTextSizes = [];\r\n\r\n/**\r\n * Ermittelt die Größe eines Textes, indem ein dummy Text-div eingefügt wird und seine Größe dadurch vom Browser\r\n * berechnet wird. Anschließend speichert man sich die Größe, schmeißt das Element wieder weg und feuert das Event, dass\r\n * dem Control sagt welche Größe es wirklich haben müsste.\r\n *\r\n * @param fontFamily\r\n * @param fontSize\r\n * @param fontStyle\r\n * @param fontWeight\r\n * @param params        Liste der guids/Texte, die berechnet werden sollen einer guid folgt immer der dazugehörige Text\r\n */\r\nfunction dwFrameworkMeasureTextSize(fontFamily, fontSize, fontStyle, fontWeight, params) {\r\n    const hiddenDiv = document.createElement(\"div\");\r\n    // Absolute und ganz weit oben links, damit keine Scrollbox erscheint.\r\n    // display none darf man nicht verwenden, sonst hat das Control die Größe 0\r\n    hiddenDiv.style.visibility = \"hidden\";\r\n    hiddenDiv.style.position = \"absolute\";\r\n    hiddenDiv.style.left = \"-1000px\";\r\n    hiddenDiv.style.top = \"-1000px\";\r\n    hiddenDiv.style.zIndex = 1;\r\n\r\n    // Font einstellen\r\n    hiddenDiv.style.fontFamily = fontFamily;\r\n    hiddenDiv.style.fontSize = fontSize;\r\n    hiddenDiv.style.fontStyle = fontStyle;\r\n    hiddenDiv.style.fontWeight = fontWeight;\r\n\r\n\r\n    const spanNodes = [];\r\n\r\n    for (var i = 0; i < params.length - 1; i += 2) {\r\n        const guid = params[i];\r\n        const text = params[i + 1];\r\n        const spanNode = document.createElement(\"span\");\r\n\r\n        spanNode.style.fontFamily = 'inherit';\r\n        spanNode.style.fontSize = 'inherit';\r\n        spanNode.style.fontStyle = 'inherit';\r\n        spanNode.style.fontWeight = 'inherit';\r\n        spanNode.style.position = 'absolute';\r\n        spanNode.style.whiteSpace = 'pre';\r\n\r\n        // Textnode erstellen und dem Span anhängen\r\n        const textNode = document.createTextNode(text);\r\n        spanNode.appendChild(textNode);\r\n\r\n        //Jetzt den Span in das hiddenDiv\r\n        hiddenDiv.appendChild(spanNode);\r\n\r\n        spanNodes.push({\r\n                           node: spanNode,\r\n                           guid: guid,\r\n                       })\r\n    }\r\n\r\n    // Hiddendiv in den DOM und die Breite und Höhe ermitteln\r\n    const bodyNode = $(\"body\");\r\n    bodyNode.appendChild(hiddenDiv);\r\n\r\n    spanNodes.forEach(function(elem) {\r\n        calculatedTextSizes.push({\r\n                                     width: elem.node.offsetWidth,\r\n                                     height: elem.node.offsetHeight,\r\n                                     guid: elem.guid\r\n                                 })\r\n    });\r\n\r\n    // temporären Node wieder entfernen\r\n    bodyNode.removeChild(hiddenDiv);\r\n}\r\n\r\n\r\n/**\r\n * Die berechneten Textgrößen an den Server zurückmelden. Die Parameternamen sind durchnummeriert.\r\n * Also\r\n * width1=xx@DWSUB@height1=yy@DWSUB@guid1=zzz@DWSUB@width2=xx@DWSUB@height2=yy@DWSUB@guid2=zzz...\r\n * @param eventHandlerId\r\n * @param elementId\r\n */\r\nfunction dwFrameworkSendTextSizes(eventHandlerId, elementId) {\r\n    let params = '';\r\n    if (calculatedTextSizes.length > 0) {\r\n        for (var i = 0; i < calculatedTextSizes.length; i++) {\r\n            const elem = calculatedTextSizes[i];\r\n            if (i > 0) {\r\n                params += \"@DWSUB@\";\r\n            }\r\n            params += \"width\" + i + \"=\" + elem.width + \"@DWSUB@\" + \"height\" + i + \"=\" + elem.height + \"@DWSUB@\" + \"elemGuid\" + i + \"=\" + elem.guid;\r\n        }\r\n        calculatedTextSizes = [];\r\n\r\n        dwAjaxAddUpdate(eventHandlerId + \"@DW@\" + elementId + \"@DW@__custom_systemmeasuretextsize\" + \"@DW@\" + params\r\n                        + \"@DW@\", true);\r\n    }\r\n}\r\n\r\n\r\n/**\r\n * Ermittelt die Position und Ausdehnung eines Controls.\r\n * @param eventHandlerId\r\n * @param elementId\r\n */\r\nfunction dwFrameworkGetControlBounds(eventHandlerId, elementId) {\r\n    var element = $(elementId);\r\n    var absPointChild = dwUtilsGetLocationOnWindow(element, true); // Absolute Koordinaten bestimmen\r\n    var params = \"left=\" + absPointChild.x + \"@DWSUB@\" + \"top=\" + absPointChild.y + \"@DWSUB@\"\r\n                 + \"width=\" + element.offsetWidth + \"@DWSUB@\" + \"height=\" + element.offsetHeight;\r\n    dwAjaxAddUpdate(eventHandlerId + \"@DW@\" + elementId + \"@DW@__custom_controlbounds\" + elementId + \"@DW@\" + params\r\n                    + \"@DW@\", true);\r\n}\r\n\r\nfunction dwFrameworkOnPopState(event) {\r\n    var currentState = event ? event.state : history.state; // Ergebnis ist das gleiche. Fallback falls Aufruf ohne Event Objekt\r\n    if (currentState == null) {\r\n        // Wir können nichts damit anfangen\r\n        dwAjaxAddUpdate(windowId + \"@DW@browserNavigationBackward@DW@\" + \"firstCall\", true);\r\n        return;\r\n    }\r\n\r\n    if (currentState.timestamp === framework_html5HistoryCurrentState.timestamp) {\r\n        // Nichts geändert\r\n        return;\r\n    }\r\n    var windowId = dwFrameworkGetRootWindowId();\r\n    // In der Vergangenheit wurde der Timestamp mit einem \\t terminiert. Hinter diesem Wert konnten weitere Parameter ggf. angehängt sein\r\n    // Der Text wurde aber imho nie gesetzt. Vielleicht der Versuch die Bookmark Logik anzubinden.\r\n    // Im ersten PoC wurde diese Komplexität entfernt und nur mit einem reinen Timestamp gearbeitet für die Unterscheidung der Richtung\r\n    var timeCurrent = parseInt(framework_html5HistoryCurrentState.timestamp);\r\n    var timeNew = parseInt(currentState.timestamp);\r\n    if (timeNew < timeCurrent) {\r\n        dwAjaxAddUpdate(windowId + \"@DW@browserNavigationBackward@DW@\" + currentState.bookmark, true);\r\n    } else {\r\n        dwAjaxAddUpdate(windowId + \"@DW@browserNavigationForward@DW@\" + currentState.bookmark, true);\r\n    }\r\n\r\n    framework_html5HistoryCurrentState = currentState;\r\n}\r\n\r\nfunction dwFrameworkCreateBrowserHistoryState(bookmark) {\r\n    var timestamp = new Date().getTime();\r\n    bookmark = bookmark || \"\";\r\n    if (bookmark === \"\") {\r\n        bookmark = window.location.hash;\r\n        if (dwUtilsStringStartsWith(bookmark, \"#\", false)) {\r\n            bookmark = bookmark.substring(1);\r\n        }\r\n    }\r\n    return {\r\n        timestamp: timestamp,\r\n        bookmark: bookmark\r\n    }\r\n}\r\n\r\nfunction dwFrameworkPushBrowserHistoryState() {\r\n    if (!framework_html5HistoryEnabled) {\r\n        // Zugriff auf die HTML5 Browser History API muss erlaubt sein - ansonsten werden Fehler ausgelöst\r\n        return;\r\n    }\r\n    // Eintrag in die Browser History schreiben. Der interne Status (hier: timestamp) wird bei onpopstate Events an den Listener gegeben\r\n    // So lässt sich anhand des Zeitstempels der Browser History Aktion und des letzten gemerkten Zustandes erkennen,\r\n    // welche Aktion intern ausgelöst werden muss. Title und URL sind optionale Parameter. Bei leerer URL wird die aktuelle Adresse in der Browser Zeile beibehalten\r\n    var state = dwFrameworkCreateBrowserHistoryState(\"\");\r\n    framework_html5HistoryCurrentState = state;\r\n\r\n    try {\r\n        window.history.pushState(state, \"\", null);\r\n    } catch (exception) {\r\n    }\r\n}\r\n\r\nfunction dwFrameworkMovePopupStart(event, id) {\r\n    dwFrameworkMoveCurrentPopupElement = $(id);\r\n    dwFrameworkMoveCurrentPopupLastMousePos = dwUtilsGetCurrentMousePositionPerEvent(event);\r\n}\r\n\r\nfunction dwFrameworkMovePopupStop() {\r\n    dwFrameworkMoveCurrentPopupElement = null;\r\n    dwFrameworkMoveCurrentPopupLastMousePos = null;\r\n}\r\n\r\nfunction dwFrameworkMovePopup(event) {\r\n    if (dwFrameworkMoveCurrentPopupElement == null) {\r\n        return;\r\n    }\r\n    var lastMousePos = dwFrameworkMoveCurrentPopupLastMousePos;\r\n    dwFrameworkMoveCurrentPopupLastMousePos = dwUtilsGetCurrentMousePositionPerEvent(event);\r\n    var x = parseInt(dwFrameworkMoveCurrentPopupElement.style.marginLeft);\r\n    var y = parseInt(dwFrameworkMoveCurrentPopupElement.style.marginTop);\r\n    x -= (lastMousePos.x - dwFrameworkMoveCurrentPopupLastMousePos.x);\r\n    y -= (lastMousePos.y - dwFrameworkMoveCurrentPopupLastMousePos.y);\r\n    dwFrameworkMoveCurrentPopupElement.style.marginLeft = x + \"px\";\r\n    dwFrameworkMoveCurrentPopupElement.style.marginTop = y + \"px\";\r\n}\r\n\r\nfunction dwFrameworkUpdateBrowserFeatures() {\r\n    var params = \"\";\r\n    for (var featureName in FEATURE_MAPPING) {\r\n        if (!FEATURE_MAPPING.hasOwnProperty(featureName)) {\r\n            continue;\r\n        }\r\n        if (params.length > 0) {\r\n            params += \"&\";\r\n        }\r\n        params += featureName + \"=\" + hasSupportForFeature(featureName);\r\n    }\r\n    if (params) { // Mindestens ein Parameter wurde gesetzt\r\n        var baseUrl = dwUtilsGetBaseApplicationUrl();\r\n        var url = baseUrl + \"/WEB-RES/browserinfo/update?\" + params;\r\n\r\n        var xmlHttp = dwUtilsCreateXmlHttpRequest(true);\r\n        xmlHttp.open(\"GET\", url, true);\r\n        xmlHttp.setRequestHeader(\"Content-type\", \"application/x-www-form-urlencoded;charset=UTF-8\");\r\n        dwDomAddEventListener(xmlHttp, \"onreadystatechange\", function() {\r\n            if (xmlHttp.readyState == DWUTILS_READY_STATE.DONE) {\r\n                if (xmlHttp.status == 200) {\r\n                    dwFrameworkRefreshPageJs();\r\n                }\r\n            }\r\n        });\r\n        xmlHttp.send(\"\");\r\n    }\r\n}\r\n\r\nfunction dwFrameworkRegisterPdfMessageHandler(pdf) {\r\n    if (!pdf) {\r\n        return;\r\n    }\r\n    pdf.messageHandler = {\r\n        onMessage: function(/*array*/ parameter) {\r\n            var xmlHttp = dwUtilsCreateXmlHttpRequest(true);\r\n            var url = parameter[0] || \"\";\r\n            if (!url) {\r\n                return;\r\n            }\r\n            // Absolute URL Verlinkungen müssen weiterhin erhalten bleiben\r\n            if ((url.indexOf(\"http://\") == -1) && (url.indexOf(\"https://\") == -1)) {\r\n                var baseUrl = dwUtilsGetBaseApplicationUrl();\r\n                var contextNameStartIdx = baseUrl.indexOf(\"/\", \"https://\".length);\r\n                var contextName = \"\";\r\n                if (contextNameStartIdx > -1) {\r\n                    contextName = baseUrl.substring(contextNameStartIdx);\r\n                    if (dwUtilsStringStartsWith(url, contextName, false)) {\r\n                        // In der Vergangenheit wurde bei relativen URLs der context-Name der Anwendung als Prefix verwendet\r\n                        // Der context-Name muss kurz bereinigt werden, bevor die URL zusammengebaut wird.\r\n                        baseUrl = baseUrl.substring(0, contextNameStartIdx);\r\n                    }\r\n                }\r\n\r\n                url = baseUrl + url;\r\n            }\r\n            xmlHttp.open(\"get\", url, true);\r\n            xmlHttp.onreadystatechange = function() {\r\n                if (this.readyState == DWUTILS_READY_STATE.DONE) {\r\n                    if (this.status == 200) {\r\n                        dwAjaxAddUpdate(\"ping\", true);\r\n                    }\r\n                }\r\n            };\r\n            xmlHttp.send();\r\n        }\r\n    }\r\n}\r\n\r\nfunction dwFrameworkInitResponsiveTextfield(uniqueId, maskOptions) {\r\n    var control = $(uniqueId);\r\n    var component = mdc.textfield.MDCTextField.attachTo(control);\r\n    component.foundation.setUseNativeValidation(false);\r\n    component.foundation.adapter.registerTextFieldInteractionHandler(\"input\", function(event) {\r\n        var input = component.foundation.adapter.getNativeInput();\r\n        if (input.inputmask) {\r\n            var unmaskedValue = input.inputmask.unmaskedvalue(); // masked value wird als eigentlicher Wert (input.value) ausgelesen und übertragen\r\n            unmaskedValue = unmaskedValue.replace('-', ''); // aus irgendeinem Grund ab und zu enthält inputmask.unmaskedvalue() das '-' Zeichen\r\n            dwAjaxDefaultOnChange(event, uniqueId, uniqueId + \"_input\", \"complete=\" + input.inputmask.isComplete() + \"@DWSUB@unmasked=\" + unmaskedValue + \"@DWSUB@emptymask=\" + input.inputmask.getemptymask(), true);\r\n        } else {\r\n            // Ohne Maske ist der Text immer \"vollständig\" (da keine Maske erfüllt werden muss). Maskiert und unmaskiert sind das gleiche\r\n            dwAjaxDefaultOnChange(event, uniqueId, uniqueId + \"_input\", \"complete=true@DWSUB@unmasked=\" + input.value + \"@DWSUB@emptymask=\", true);\r\n        }\r\n    });\r\n    control.component = component;\r\n    control.componenthelper = new mdc.textfield.MDCTextFieldHelperText($(uniqueId + \"_helper\"));\r\n    try {\r\n        // Insbesondere bei REGEXP kann es vorkommen, dass man ein absolut ungültiges Format auslöst. Es sollte hier keine Fehlermeldung mit Reload kommen (Endlosschleife)\r\n        // oder die Verarbeitung komplett im Wald sein (onload) - sondern nur loggen und ignorieren\r\n        // Im Fehlerfall schreibt er die Maske noch nicht in die Komponente (Format Befehl)\r\n        Inputmask.format(\"\", maskOptions);\r\n        Inputmask(maskOptions).mask($(uniqueId + \"_input\"));\r\n    } catch (error) {\r\n        dwFrameworkLog(\"J2EE_ERRORS\", \"Failed to set input mask (id='\" + uniqueId + \"' cause='\" + (error.message || error) + \"')\");\r\n    }\r\n}\r\n\r\nfunction dwFrameworkDestroyResponsiveTextfield(uniqueId) {\r\n    $(uniqueId).component.destroy();\r\n}\r\n\r\nfunction dwFrameworkValidateResponsiveTextfield(uniqueId, isValid, message) {\r\n    var component = $(uniqueId).component;\r\n    component.foundation.setValid(isValid);\r\n    component.foundation.setHelperTextContent(message);\r\n}\r\n\r\nfunction dwFrameworkDisableResponsiveTextfield(uniqueId, disable) {\r\n    $(uniqueId).component.foundation.setDisabled(disable);\r\n}\r\n\r\nfunction dwFrameworkSetPlaceholderOnResponsiveTextfield(uniqueId, placeholder) {\r\n    var placeHolderComponent = $(uniqueId + \"_placeholder\");\r\n    if (placeHolderComponent) { // Nur vorhanden, wenn \"Outline\" gewünscht sind. Bei leerem Text würde eine Lücke in Border entstehen ...\r\n        dwDomSetDomText(placeHolderComponent, placeholder, true);\r\n        if (placeholder === \"\") {\r\n            placeHolderComponent.parentNode.style.display = \"none\";\r\n        } else {\r\n            placeHolderComponent.parentNode.style.display = \"\";\r\n        }\r\n        $(uniqueId).component.layout();\r\n    } else {\r\n        // Fehlen die Outline Tags - wird das Attribut aktualisiert (Plain HTML Mechanismus)\r\n        placeHolderComponent = $(uniqueId + \"_input\");\r\n        dwDomSetDomAttribute(placeHolderComponent, \"placeholder\", placeholder);\r\n    }\r\n}\r\n\r\nfunction dwFrameworkToggleGuiWindowMaximized(controlId) {\r\n    var img = $(controlId + \"_child_title_maximize_img\");\r\n    var windowDiv = $(controlId + \"_contentdiv\");\r\n\r\n    // Eine eventuelle manuelle Verschiebung des Fensters aufheben\r\n    windowDiv.moving = false;\r\n    windowDiv.moved = false;\r\n\r\n    if (img.className == \"guiwindow_child_title_restore_img\") {\r\n        img.className = \"guiwindow_child_title_maximize_img\";\r\n        windowDiv.style.width = windowDiv.origWidth;\r\n        windowDiv.style.height = windowDiv.origHeight;\r\n    } else {\r\n        img.className = \"guiwindow_child_title_restore_img\";\r\n        windowDiv.origWidth = windowDiv.style.width;\r\n        windowDiv.origHeight = windowDiv.style.height;\r\n        windowDiv.style.width = \"100%\";\r\n        windowDiv.style.height = \"100%\";\r\n    }\r\n    dwUtilsRepositionChildWindow(controlId);\r\n}\r\n\r\n\r\n// Ab hier verkürzte Methodennamen, da diese sehr häufig im generierten JavaScript vorkommen\r\n/**\r\n * Wird vor Events aufgerufen\r\n *\r\n * @param e\r\n * @see #dwFrameworkPreEvent\r\n */\r\nfunction dwFwPreEv(event, withEventBubbling, htmlElement) {\r\n    dwFrameworkPreEvent(event, withEventBubbling, htmlElement);\r\n}\r\n\r\n/**\r\n * Wird nach Events aufgerufen\r\n *\r\n * @param e\r\n * @see #dwFrameworkPostEvent\r\n */\r\nfunction dwFwPostEv(event) {\r\n    dwFrameworkPostEvent(event);\r\n}\r\n\r\n/**\r\n * Exception-Handling\r\n *\r\n * @param exception\r\n * @see dwFrameworkExceptionHandler\r\n */\r\nfunction dwFwExH(exception) {\r\n    dwFrameworkExceptionHandler(exception);\r\n}\r\n\r\n/**\r\n * Setzt das Flag, um das Event-Handling (a)synchron auszuführen\r\n *\r\n * @param event\r\n * @param doAsynchronousCall\r\n * @see #dwFrameworkSetAsynchronousFlag\r\n */\r\nfunction dwFwAsync(event, doAsynchronousCall) {\r\n    dwFrameworkSetAsynchronousFlag(event, doAsynchronousCall);\r\n}\r\n\r\n/**\r\n * Start für das Verschieben von dem Kind-Fenster mit der übergebenen {@code uniqueId}.\r\n *\r\n * @param event\r\n * @param uniqueId\r\n */\r\nfunction moveChildWindowStart(event, uniqueId) {\r\n    if (event.button != 0) { // Nur bei Linksklick\r\n        return;\r\n    }\r\n\r\n    var windowContentDiv = $(uniqueId + \"_contentdiv\");\r\n    if (windowContentDiv) {\r\n        windowContentDiv.moving = true;\r\n        windowContentDiv.moveOffsetX = parseInt(windowContentDiv.style.marginLeft) - event.screenX;\r\n        windowContentDiv.moveOffsetY = parseInt(windowContentDiv.style.marginTop) - event.screenY;\r\n    }\r\n}\r\n\r\n/**\r\n * Das Kind-Fenster mit der übergebenen {@code uniqueId} wird gerade verschoben.\r\n *\r\n * @param event\r\n * @param uniqueId\r\n */\r\nfunction moveChildWindowMoving(event, uniqueId) {\r\n    var windowContentDiv = $(uniqueId + \"_contentdiv\");\r\n    // Ist das moving-Flag vorhanden und gesetzt (wurde also vorher moveChildWindowStart() aufgerufen)?\r\n    if (windowContentDiv && (typeof (windowContentDiv.moving) != \"undefined\") && windowContentDiv.moving) {\r\n        var minimumVisibleSize = 25;\r\n\r\n        // Der linke Ursprung ist abhängig davon, ob das Fenster normal dargestellt wird (left=50%) oder maximiert\r\n        var leftOffset;\r\n        if (windowContentDiv.style.left == \"50%\") {\r\n            leftOffset = 0;\r\n        } else {\r\n            leftOffset = framework_displayWidth / 2;\r\n        }\r\n\r\n        // x-Koordinate nur beim obersten Kind-Fenster anpassen\r\n        var width = dwUtilsGetWidth(windowContentDiv);\r\n        windowContentDiv.style.marginLeft = Math.max(leftOffset - framework_displayWidth / 2 - width + minimumVisibleSize,\r\n                                                     Math.min(leftOffset + framework_displayWidth / 2 - minimumVisibleSize,\r\n                                            windowContentDiv.moveOffsetX + event.screenX)) + \"px\";\r\n\r\n        // Alle Kind-Fenster verschieben? Wird auch als Flag am obersten Kind-Fenster gemerkt für moveChildWindowEnd()\r\n        var moveAllChildWindows = event.ctrlKey;\r\n        if (moveAllChildWindows) {\r\n            windowContentDiv.movedAllChildWindows = true;\r\n        }\r\n\r\n        var childWindows = getChildWindowsToMove(windowContentDiv, moveAllChildWindows);\r\n        for (var i = 0; i < childWindows.length; i++) {\r\n            var childWindowContentDiv = childWindows[i];\r\n\r\n            // Der obere Ursprung ist abhängig davon, ob das Fenster normal dargestellt wird (top=50%) oder maximiert bzw.\r\n            // mit maximaler vertikaler Höhe\r\n            var topOffset;\r\n            if (childWindowContentDiv.style.top == \"50%\") {\r\n                topOffset = 0;\r\n            } else if (childWindowContentDiv == windowContentDiv) { // Verschobenes oberstes Fenster ist maximiert\r\n                topOffset = framework_displayHeight / 2;\r\n            } else {\r\n                // Bei allen anderen maximierten Fenstern die Positionierung anpassen, damit diese vertikal sauber mitverschoben werden\r\n                childWindowContentDiv.style.top = \"50%\";\r\n                topOffset = 0;\r\n            }\r\n\r\n            // y-Koordinate immer auf die y-Koordinate vom obersten Kind-Fenster setzen zum gemeinsamen Verschieben\r\n            var height = dwUtilsGetHeight(childWindowContentDiv);\r\n            childWindowContentDiv.style.marginTop = Math.max(topOffset - framework_displayHeight / 2 - height + minimumVisibleSize,\r\n                                                             Math.min(topOffset + framework_displayHeight / 2 - minimumVisibleSize,\r\n                                                    windowContentDiv.moveOffsetY + event.screenY)) + \"px\";\r\n\r\n            // Opacity auf 10% stellen bei allen darunterliegenden Kind-Fenstern, damit deren Inhalt besser erkennbar ist\r\n            if (childWindowContentDiv != windowContentDiv) {\r\n                var childWindowUniqueId = childWindowContentDiv.id.substring(0, childWindowContentDiv.id.length - \"_contentdiv\".length);\r\n                var windowLayerDiv = $(childWindowUniqueId + \"_layerdiv\");\r\n                if (windowLayerDiv) {\r\n                    dwUtilsSetOpacity(windowLayerDiv, 10);\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * Ende für das Verschieben von dem Kind-Fenster mit der übergebenen {@code uniqueId}.\r\n *\r\n * @param event\r\n * @param uniqueId\r\n */\r\nfunction moveChildWindowEnd(event, uniqueId) {\r\n    var windowContentDiv = $(uniqueId + \"_contentdiv\");\r\n    if (windowContentDiv && (typeof (windowContentDiv.moving) != \"undefined\") && windowContentDiv.moving) {\r\n        var childWindows = getChildWindowsToMove(windowContentDiv, windowContentDiv.movedAllChildWindows);\r\n        for (var i = 0; i < childWindows.length; i++) {\r\n            var childWindowContentDiv = childWindows[i];\r\n            childWindowContentDiv.moving = false;\r\n            childWindowContentDiv.moved = true;\r\n\r\n            // Event an den Server mit den neuen Koordinaten schicken\r\n            var childWindowUniqueId = childWindowContentDiv.id.substring(0, childWindowContentDiv.id.length - \"_contentdiv\".length);\r\n            var childWindowLocation = dwUtilsGetLocationOnWindow(childWindowContentDiv, false, true);\r\n            dwAjaxAddUpdate(childWindowUniqueId + \"@DW@\" + childWindowUniqueId + \"@DW@onLocationChangedEvent@DW@absX=\"\r\n                            + childWindowLocation.x + \"@DWSUB@absY=\" + childWindowLocation.y, false, true);\r\n        }\r\n        windowContentDiv.movedAllChildWindows = false;\r\n        dwAjaxSendUpdates(false, true);\r\n    }\r\n}\r\n\r\n/**\r\n * Bestimmt alle Kind-Fenster inkl. dem übergebenen Kind-Fenster, die verschoben werden sollen.\r\n *\r\n * @param windowContentDiv\r\n * @param moveAllChildWindows\r\n * @returns\r\n */\r\nfunction getChildWindowsToMove(windowContentDiv, moveAllChildWindows) {\r\n    var childWindowsToMove;\r\n    if (moveAllChildWindows) {\r\n        childWindowsToMove = dwDomGetChildrenByTagname(windowContentDiv.parentNode, \"div\", {\"class\": \"guiwindow_child_container\"}, false);\r\n    } else {\r\n        childWindowsToMove = new Array();\r\n        childWindowsToMove.push(windowContentDiv);\r\n    }\r\n    return childWindowsToMove;\r\n}\r\n\r\n/**\r\n * Benutzt html2pdf um aus einem HTML String ein PDF zu machen. Schickt das Pdf dann an den Server zurück.\r\n * @param html Inhalt des Pdfs als String\r\n */\r\nfunction dwHtmlStringToPdf(uniqueid, html, transactionid) {\r\n    //funktioniert ohne timeout nicht. Unbekannt warum\r\n    setTimeout(function() {\r\n        //alle Elemente die die Klasse avoidbreak haben bei pageBreak vermeiden + 1cm Rand\r\n        //Render Fensterbreite auf 800 damit Media Querys im css die Darstellung bei kleiner Fenstergröße nicht beeinflussen\r\n        const opts = {\r\n            pagebreak: {avoid: '.avoidbreak'},\r\n            margin: 1,\r\n            jsPDF: {unit: 'cm'},\r\n            html2canvas: {windowWidth: 800, scale: 1}\r\n        };\r\n        var worker = html2pdf().set(opts).from(html).toPdf();\r\n        worker.outputPdf('arraybuffer', {}).then(function(pdfData) {\r\n            dwAjaxReturnPdfData(uniqueid, transactionid, pdfData);\r\n        });\r\n\r\n    }, 500);\r\n}\r\n\r\nvar html5QrcodeScanner;\r\n\r\n/**\r\n * Scanner starten\r\n * @param html Inhalt des Pdfs als String\r\n */\r\nfunction dwStartScanner(uniqueId, transactionId) {\r\n    //funktioniert ohne timeout nicht. Unbekannt warum\r\n    setTimeout(function() {\r\n        html5QrcodeScanner = new Html5QrcodeScanner(\"qr-reader\", {fps: 10, qrbox: 250});\r\n        html5QrcodeScanner.render(function(decodedText, decodedResult) {\r\n            dwAjaxReturnScanResult(uniqueId, transactionId, decodedText, decodedResult);\r\n            dwStopScanner();\r\n        });\r\n    }, 500);\r\n}\r\n\r\nfunction dwStopScanner() {\r\n    if (html5QrcodeScanner != null) {\r\n        html5QrcodeScanner.clear();\r\n        html5QrcodeScanner = null;\r\n    }\r\n}\r\n\r\n/**\r\n * Setze die Hoverklassen neu. Alte entfernen und neue zusätzlich ans Control hängen\r\n * @param control\r\n * @param classNamesAsStringWithSpace\r\n */\r\nfunction dwAjaxSetHoverClasses(control, classNamesAsStringWithSpace) {\r\n    if (control != null) {\r\n        dwRemoveAllHoverClasses(control);\r\n        if (classNamesAsStringWithSpace) {\r\n            var classNames = dwUtilsSplit(classNamesAsStringWithSpace, \" \", false);\r\n            for (var i = classNames.length - 1; i >= 0; i--) {\r\n                dwDomAddClass(control, classNames[i]);\r\n            }\r\n        }\r\n    }\r\n\r\n\r\n    function dwRemoveAllHoverClasses(control) {\r\n        if (control.className) {\r\n            var classNames = dwUtilsSplit(control.className, \" \", false);\r\n            var classNamesAfterRemoval = new Array();\r\n            for (var i = classNames.length - 1; i >= 0; i--) {\r\n                if (!classNames[i].startsWith(\"dw-hover-class-\")) {\r\n                    classNamesAfterRemoval.push(classNames[i]);\r\n                }\r\n            }\r\n            control.className = classNamesAfterRemoval.join(\" \");\r\n        }\r\n    }\r\n\r\n}\r\n\n/*\r\n * Copyright (c) 2018 Docware GmbH\r\n */\r\nvar DWSPLIT_MINIMUM_COMPONENT_SIZE = 20;\r\n// Ausrichtung der Splitpane: column/row\r\nvar dwSplitDragType = null;\r\n// Startposition des Drag-Vorgangs\r\nvar dwSplitDragStartCoords = null;\r\n// Komponenten, deren Größen sich ändern\r\nvar dwSplitDragComponent1 = null;\r\nvar dwSplitDragComponent2 = null;\r\n// Mindestgrößen der Komponenten\r\nvar dwSplitDragComponent1Min = null;\r\nvar dwSplitDragComponent2Min = null;\r\n// Startwerte (Breite/Höhe) der Komponenten \r\nvar dwSplitDragComponent1Start = null;\r\nvar dwSplitDragComponent2Start = null;\r\n// Die Id der GuiSplitPane\r\nvar dwSplitDragUniqueId = null;\r\n// Maus wurde wirklich bewegt und damit Dragvorgang durchgeführt, sonst evtl. nur Klick\r\nvar dwSplitDragged = false;\r\n// Die Id der GuiSplitPane\r\nvar dwSplitDragEventHandlerComponentId = null;\r\n// Wie breit der Divider ist\r\nvar dwSplitDragDividerSize = null;\r\n// Wie breit der Divider ist wenn ein Kind komplett eingeklappt ist\r\nvar dwSplitDragDividerSizeTilted = null;\r\n// Wie breit die SplitPane ist\r\nvar dwSplitDragSplitPaneSize = null;\r\n// Soll die aktualisierte Position via Ajax übermittelt werden\r\nvar dwSplitDragDoAjaxCallback = null;\r\n// Flag, ob gerade ein SplitPane-Divider bewegt wird und ein transparentes DIV darübergelegt wurde\r\nvar dwSplitTransparentOverlayIsUsed;\r\n//ID von Split Pane im Dokument-Viewer\r\nvar dwSplitPaneID;\r\n//ID von transparent Panel-Overlay von PDF-Viewer\r\nvar dwPdfViewerOverlayID;\r\n\r\nfunction dwSplitInitDragAndDrop() {\r\n    // Auf body sind Listener registriert für den 'auto close' Mechanismus von Popup-Fenstern\r\n    // Alle Mouse-Events werden ab Body automatisch geschluckt und dringen nicht mehr zum document durch\r\n    // Body erstreckt sich auf 100% des Viewports und wird als Ersatz für document verwendet\r\n    var body = $(\"body\");\r\n    dwDomAddEvent(body, \"onmousemove\", \"dwSplitDragEvent(event);\", false);\r\n}\r\n\r\nfunction dwSplitDragStartEvent(event, eventHandlerComponentId, uniqueId, type, firstcellid, secondcellid) {\r\n    if (dwSplitDragType != null) {\r\n        return;\r\n    }\r\n    dwFrameworkPreventDefaultBehaviour(event);\r\n    dwSplitDragStartCoords = dwSplitGetPageCoordinates(event);\r\n    dwSplitDragComponent1 = $(firstcellid);\r\n    dwSplitDragComponent2 = $(secondcellid);\r\n    dwSplitDragType = type;\r\n    dwSplitDragComponent1Min = dwSplitGetMinimumSize(dwSplitDragComponent1, dwSplitDragType, DWSPLIT_MINIMUM_COMPONENT_SIZE);\r\n    dwSplitDragComponent2Min = dwSplitGetMinimumSize(dwSplitDragComponent2, dwSplitDragType, DWSPLIT_MINIMUM_COMPONENT_SIZE);\r\n    dwSplitDragEventHandlerComponentId = eventHandlerComponentId;\r\n    dwSplitDragUniqueId = uniqueId;\r\n    dwSplitDragDoAjaxCallback = true;\r\n    if (dwSplitDragType == \"column\") {\r\n        dwSplitDragDividerSize = parseInt($(dwSplitDragUniqueId + \"_divider\").style.width);\r\n        dwSplitDragSplitPaneSize = dwSplitParsePixel($(dwSplitDragUniqueId).offsetWidth);\r\n        dwSplitDragComponent1Start = dwSplitParsePixel(dwSplitDragComponent1.offsetWidth);\r\n        dwSplitDragComponent2Start = dwSplitParsePixel(dwSplitDragComponent2.offsetWidth);\r\n    } else if (dwSplitDragType == \"row\") {\r\n        dwSplitDragDividerSize = parseInt($(dwSplitDragUniqueId + \"_divider\").style.height);\r\n        dwSplitDragSplitPaneSize = dwSplitParsePixel($(dwSplitDragUniqueId).offsetHeight);\r\n        dwSplitDragComponent1Start = dwSplitParsePixel(dwSplitDragComponent1.offsetHeight);\r\n        dwSplitDragComponent2Start = dwSplitParsePixel(dwSplitDragComponent2.offsetHeight);\r\n    }\r\n    dwSplitDragged = false;\r\n\r\n    //  dragFirst.style.visibility  = \"hidden\";\r\n    //  dragSecond.style.visibility = \"hidden\";\r\n}\r\n\r\nfunction dwSplitDragEvent(event) {\r\n    // Im IE8 kommen bereits Events, obwohl er noch die Seite aufbaut\r\n    if (!dwFrameworkInitFinished) {\r\n        return;\r\n    }\r\n    if (dwSplitDragType == null) {\r\n        return;\r\n    }\r\n    // Berechne die Koordinaten der Mausbewegung\r\n    var newCoords = dwSplitGetPageCoordinates(event);\r\n    // Neue Größen für die Elemente berechnen\r\n    var sizes = dwSplitDragGetNewSizes(event);\r\n    var newFirstSize = sizes[0];\r\n    var newSecondSize = sizes[1];\r\n    if (newFirstSize + dwSplitDragDividerSize + newSecondSize > dwSplitDragSplitPaneSize) {\r\n        return;\r\n    }\r\n    dwSplitDragged = true;\r\n    var parent = dwSplitDragComponent1.parentNode;\r\n    var allChildren = dwDomGetElementChildNodes(parent);\r\n    var dragBorder = allChildren[1];  // Reihenfolge fix: component1, border, component2\r\n    // Neue Größen setzen\r\n    if (dwSplitDragType == \"column\") {\r\n        dwSplitDragComponent1.style.width = newFirstSize + \"px\";\r\n        dragBorder.style.left = newFirstSize + \"px\";\r\n        // Größe des rechten Containers wird nicht über 'width' sondern left und right definiert.\r\n        // Die Abprüfung auf die minimal-Breite des rechten Containers wurde bereits vorher durchgeführt\r\n        dwSplitDragComponent2.style.left = (newFirstSize + dwSplitDragDividerSize) + \"px\";\r\n    } else if (dwSplitDragType == \"row\") {\r\n        dwSplitDragComponent1.style.height = newFirstSize + \"px\";\r\n        dragBorder.style.top = newFirstSize + \"px\";\r\n        // Größe des unteren Containers wird nicht über 'height' sondern top und bottom definiert.\r\n        // Die Abprüfung auf die minimal-Höhe des unteren Containers wurde bereits vorher durchgeführt\r\n        dwSplitDragComponent2.style.top = (newFirstSize + dwSplitDragDividerSize) + \"px\";\r\n    }\r\n    if (dwSplitDragDoAjaxCallback) {\r\n        var params = \"leftSize=\" + newFirstSize + \"@DWSUB@\" + \"rightSize=\" + newSecondSize;\r\n        dwAjaxSplitpaneDragging(event, dwSplitDragEventHandlerComponentId, dwSplitDragUniqueId, params, true);\r\n    }\r\n}\r\n\r\n/**\r\n * Liefert die Länge der gezogenen Strecke mit dem Divider. Also den Unterschied zwischen Position-Start und Position-Ende\r\n * des Divider-Drag-Events.\r\n *\r\n * @param event Das DividerDragEvent\r\n * @returns {*}\r\n */\r\nfunction dwSplitGetDragDifference(event) {\r\n    // Im getilteten Modus hat Drag einen seltsamen Zustand herbeigeführt\r\n    var splitPane = $(dwSplitDragUniqueId);\r\n    if ((splitPane == null) || splitPane.hasAttribute(\"oldDividerRatio\")) {    // SplitPane ist getiltet, kein MouseDrag möglich\r\n        return 0;\r\n    }\r\n\r\n    var difference;\r\n    var newCoords = dwSplitGetPageCoordinates(event);\r\n    if (dwSplitDragStartCoords == null) {\r\n        dwSplitDragStartCoords = dwSplitGetPageCoordinates(event);\r\n    }\r\n    if ((dwSplitDragType == \"column\")) {\r\n        difference = newCoords[0] - dwSplitDragStartCoords[0];\r\n    } else if (dwSplitDragType == \"row\") {\r\n        difference = newCoords[1] - dwSplitDragStartCoords[1];\r\n    }\r\n\r\n    return difference;\r\n}\r\n\r\nfunction dwSplitDragGetNewSizes(event) {\r\n    var newFirstSize, newSecondSize;\r\n    var difference = dwSplitGetDragDifference(event);\r\n    newFirstSize = dwSplitDragComponent1Start + difference;\r\n    if (newFirstSize < dwSplitDragComponent1Min) {\r\n        newFirstSize = dwSplitDragComponent1Min;\r\n    }\r\n\r\n    newSecondSize = dwSplitDragSplitPaneSize - dwSplitDragDividerSize - newFirstSize;\r\n    if (newSecondSize < dwSplitDragComponent2Min) {\r\n        newSecondSize = dwSplitDragComponent2Min;\r\n    }\r\n    var sizes = new Array();\r\n    sizes[0] = newFirstSize;\r\n    sizes[1] = newSecondSize;\r\n    return sizes;\r\n}\r\n\r\nfunction dwSplitDragStopEvent(event) {\r\n    var textField = $(dwSplitDragUniqueId + \"_dividerPosition\");\r\n    if (textField != null) {              // Komponente könnte schon weggeblendet sein\r\n        // Neue Größen setzen\r\n        if (dwSplitDragType == \"column\") {\r\n            textField.value = dwSplitDragComponent1.style.width;\r\n        } else if (dwSplitDragType == \"row\") {\r\n            textField.value = dwSplitDragComponent1.style.height;\r\n        }\r\n\r\n        //Hat sich an der Position beim drag nichts geändert, wird keine Ajaxrückmeldung gegeben\r\n        //Kommt vor, wenn z.B. nur geklickt wurde, aber da das DragEvent auf MouseDown hört, wird es trotzdem ausgelöst\r\n        // Spezialfall ist nur, wenn man mit dem Drag des Dividers genau da aufhört, wo man angefangen hat. Aber genau den Pixel zu\r\n        // treffen ist auch schwer und zufällig.\r\n        var difference = dwSplitGetDragDifference(event);\r\n        if (dwSplitDragDoAjaxCallback && (difference != 0)) {\r\n            var sizes = dwSplitDragGetNewSizes(event);\r\n            //Hier wird tilt=0 mitgegeben, da durch ein drag die splitpane nicht getilted werden kann.\r\n            //Es kann höchstens sein, das die Splitpane schon getilted war, daher ein Kind eingeklappt ist, und durch\r\n            //einen Drag das eingeklappte Kind wieder geöffnet wird. Dadurch ist die splitpane nicht mehr getilted.\r\n            var params = \"leftSize=\" + sizes[0] + \"@DWSUB@\" + \"rightSize=\" + sizes[1] + \"@DWSUB@\" + \"tilt=0\";\r\n            dwAjaxSplitpaneDragged(event, dwSplitDragEventHandlerComponentId, dwSplitDragUniqueId, params, true);\r\n        }\r\n    }\r\n\r\n    dwSplitDragType = null;\r\n    dwSplitDragStartCoords = null;\r\n    dwSplitDragComponent1 = null;\r\n    dwSplitDragComponent2 = null;\r\n    dwSplitDragComponent1Min = null;\r\n    dwSplitDragComponent2Min = null;\r\n    dwSplitDragComponent1Start = null;\r\n    dwSplitDragComponent2Start = null;\r\n    dwSplitDragEventHandlerComponentId = null;\r\n    dwSplitDragUniqueId = null;\r\n    dwSplitDragDividerSize = null;\r\n    dwSplitDragSplitPaneSize = null;\r\n    dwSplitDragDoAjaxCallback = null;\r\n    dwSplitDragged = false;\r\n}\r\n\r\nfunction dwSplitGetMinimumSize(splitpanel, dragType, defaultValue) {\r\n    var splitpanelContent = dwDomGetElementChildNodes(splitpanel);\r\n    if (splitpanelContent.length == 1) {\r\n        if ((dragType == \"column\") && (splitpanelContent[0].style.minWidth)) {\r\n            var minWidth = dwSplitParsePixel(splitpanelContent[0].style.minWidth);\r\n            return (Math.max(minWidth, defaultValue));\r\n        } else if ((dragType == \"row\") && (splitpanelContent[0].style.minHeight)) {\r\n            var minHeight = dwSplitParsePixel(splitpanelContent[0].style.minHeight);\r\n            return (Math.max(minHeight, defaultValue));\r\n        } else {\r\n            return defaultValue;\r\n        }\r\n    } else {\r\n        return defaultValue;\r\n    }\r\n}\r\n\r\nfunction dwSplitParsePixel(pixelValue) {\r\n    if (pixelValue == \"\") {\r\n        return 0;\r\n    }\r\n    return parseInt(pixelValue);\r\n}\r\n\r\nfunction dwSplitGetPageCoordinates(event) {\r\n    //  if (dragUseAlternativeMouseCoords) {\r\n    //    return new Array(event.clientX, event.clientY);\r\n    //  } else {\r\n    return new Array((document.all && window.event) ? window.event.clientX : event.pageX,\r\n                     (document.all && window.event) ? window.event.clientY : event.pageY);\r\n    //  }\r\n}\r\n\r\n/**\r\n * Fügt ein transparentes Panel auf PDF-Viewer, weil beim mobile -> desktop oder desktop -> mobile Wechsel wird\r\n * es entfernt. Wenn es schon ein solches Panel existiert - wird es nicht noch einmal hinzugefügt.\r\n * Verwendet im Legacy-Layout\r\n */\r\nfunction addPdfViewerOverlayIfNotExistsLegacy() {\r\n    if (dwSplitDragged && dwPdfViewerOverlayID != null && document.getElementById(dwSplitPaneID + \"_overlay\") == null) {\r\n        var dwSplitChildWithOverlay = document.getElementById(dwPdfViewerOverlayID);\r\n        if (dwSplitChildWithOverlay !== null) {\r\n            addTransparentOverlayLegacy(dwSplitChildWithOverlay, dwSplitPaneID);\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * Falls die Breite oder die Höhe eines Videos < Parent-Element, die Tag-Breite auf 100% setzen,\r\n * damit das Video umskaliert werden kann und im Parent-Element passt.\r\n * Wenn jedoch die Video-Breite kleiner als die Parent-Element-Breite ist,\r\n * dann nichts machen (width=\"\"), weil die umskalierung nicht notwendig ist\r\n * (mit width=100% wird das Video mit größen Pixeln gezeigt und wird nicht schön).\r\n *\r\n * @param videoId\r\n */\r\nfunction dwAdjustVideoSize(videoId) {\r\n    var videoElement = document.getElementById(videoId);\r\n    if (videoElement != null) {\r\n        var width = videoElement.videoWidth;\r\n\r\n        if (width > videoElement.parentElement.clientWidth) {\r\n            videoElement.style.width = \"100%\";\r\n        } else {\r\n            videoElement.style.width = \"\";\r\n        }\r\n\r\n        var height = videoElement.videoHeight;\r\n\r\n        if (height > videoElement.parentElement.clientHeight) {\r\n            videoElement.style.height = \"100%\";\r\n        } else {\r\n            videoElement.style.height = \"\";\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * Installiert einen zusätzlichen MouseDown-Listener, um über das linke bzw. rechte Kind während des Draggens\r\n * des SplitPane-Dividers ein transparentes DIV zu legen\r\n *\r\n * @param Angabe, ob erstes oder zweites Kind der SplitPane überblendet werden soll\r\n * @param splitPaneID id der Splitpane\r\n */\r\nfunction dwSplitAddLayerWhileDragging(isFirstChild, splitPaneID) {\r\n    dwSplitPaneID = splitPaneID;\r\n    var divider = $(splitPaneID + \"_divider\");\r\n    var oldDividerMouseDown = divider.onmousedown;\r\n\r\n    divider.onmousedown = function(event) {\r\n        if (!dwSplitTransparentOverlayIsUsed) {    // Es könnte 2. MouseDown kommen ohne MouseUp (Klick außerhalb)\r\n            dwSplitTransparentOverlayIsUsed = true;\r\n            var firstChild = $(splitPaneID + \"_firstchildcell\");\r\n            var secondChild = $(splitPaneID + \"_secondchildcell\");\r\n            var dwSplitChildWithOverlay = isFirstChild ? firstChild : secondChild;\r\n            dwPdfViewerOverlayID = dwSplitChildWithOverlay.id;\r\n            addTransparentOverlayLegacy(dwSplitChildWithOverlay, splitPaneID);\r\n        }\r\n\r\n        if (oldDividerMouseDown) {                 // Eigentliches Draggen\r\n            oldDividerMouseDown(event);\r\n        }\r\n    };\r\n}\r\n\r\nfunction addTransparentOverlayLegacy(dwSplitChildWithOverlay, splitPaneID) {\r\n    // nur bei IE ist Hintergrundfarbe nötig, sonst funktionieren die Events nicht\r\n    var bgColor = framework_isIE ? \"background-color:#FFFFFF;\" : \"\";\r\n\r\n    // Und dann auf dem Parent von dem GuiViewerElement das transparente Div hinzufügen, damit das DragEvent vom SplitpaneDivider weiter ankommt\r\n    if (dwSplitChildWithOverlay.children.length == 1) {\r\n        // Bei allen GuiViewern (außer Html) ist direkt der IFrame in der SplitPane -> Overlay muss davor eingehängt werden\r\n        dwDomInsertChild(dwSplitChildWithOverlay, 0, \"<div id='\" + splitPaneID + \"_overlay' style='filter:alpha(opacity=1); opacity:0.01; -ms-filter:alpha(opacity=1);\"\r\n                                                     + bgColor + \"width:100%;height:100%;position:absolute' z-index='1'>\");\r\n    } else {\r\n        // Bei Html gibt es zwei Inputs und dann die Scrollpane mit dem IFrame -> Overlay muss nach der Scrollpane hängen\r\n        dwDomAppendChild(dwSplitChildWithOverlay, \"<div id='\" + splitPaneID + \"_overlay' style='filter:alpha(opacity=1); opacity:0.01; -ms-filter:alpha(opacity=1);\"\r\n                                                  + bgColor + \"width:100%;height:100%;position:absolute' z-index='1'>\");\r\n    }\r\n}\r\n\r\nfunction dwSplitAddLayerWhileDraggingForResponsive(isFirstChild, splitPaneID_, panelID) {\r\n    dwSplitPaneID = splitPaneID_;\r\n    var divider = $(dwSplitPaneID + \"_divider\");\r\n    var oldDividerMouseDown = divider.onmousedown;\r\n    dwPdfViewerOverlayID = panelID;\r\n\r\n    divider.onmousedown = function(event) {\r\n        if (!dwSplitTransparentOverlayIsUsed) {    // Es könnte 2. MouseDown kommen ohne MouseUp (Klick außerhalb)\r\n            dwSplitTransparentOverlayIsUsed = true;\r\n            addTransparentDivToDOM(panelID);\r\n        }\r\n\r\n        if (oldDividerMouseDown) {                 // Eigentliches Draggen\r\n            oldDividerMouseDown(event);\r\n        }\r\n    };\r\n}\r\n\r\nfunction addTransparentDivToDOM(panelID) {\r\n    // Das ist das Panel mit LayoutBorder in dem das GuiViewer(das PDF) Element steckt\r\n    var panelForOverlay = $(panelID);\r\n    // In dem Panel steckt das LayoutBorder-Div\r\n    var children = dwDomGetElementChildNodes(panelForOverlay);\r\n    var child = children[0];\r\n    // Hier holt man sich die verschiedenen Divs für North, South, Center, East, West\r\n    children = dwDomGetElementChildNodes(child);\r\n    // Jetzt das Center Element holen, weil hier das GuiViewer-Element steckt\r\n    child = children[2];\r\n\r\n    // Und dann auf dem Parent von dem GuiViewerElement das transparente Div hinzufügen, damit das DragEvent vom SplitpaneDivider weiter ankommt\r\n    dwDomInsertChild(child, 0, createTransparentDiv());\r\n}\r\n\r\nfunction createTransparentDiv() {\r\n    var bgColor = framework_isIE ? \"background-color:#FFFFFF;\" : \"\";\r\n    return \"<div id='\" + dwSplitPaneID + \"_overlay' style='filter:alpha(opacity=1); opacity:0.01; -ms-filter:alpha(opacity=1);\"\r\n           + bgColor + \"width:100%;height:100%;position:absolute' z-index='1'>\";\r\n}\r\n\r\n/**\r\n * Fügt ein transparentes Panel auf PDF-Viewer, weil beim mobile -> desktop oder desktop -> mobile Wechsel wird\r\n * es entfernt. Wenn es schon ein solches Panel existiert - wird es nicht noch einmal hinzugefügt.\r\n */\r\nfunction addPdfViewerOverlayIfNotExists() {\r\n    if (dwSplitDragged && dwPdfViewerOverlayID != null && document.getElementById(dwSplitPaneID + \"_overlay\") == null) {\r\n        var dwSplitChildWithOverlay = document.getElementById(dwPdfViewerOverlayID);\r\n        if (dwSplitChildWithOverlay !== null) {\r\n            addTransparentDivToDOM(dwPdfViewerOverlayID);\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * Draggen des Dividers endet nicht immer nur mit MouseUp (z.B. Maus aus Fenster herausbewegen und dort loslassen),\r\n * daher explizit den Drag-Vorgang beenden und transparentes DIV wieder entfernen\r\n */\r\nfunction dwSplitRemoveLayerAfterDragging(isFirstChild, splitPaneID) {\r\n    dwDomRemoveNodeById(splitPaneID + \"_overlay\"); // Node eventuell nicht vorhanden - falls Event nicht durch Drag&Drop ausgelöst wurde\r\n    dwSplitTransparentOverlayIsUsed = false;\r\n}\r\n\r\n/**\r\n * Bei Klick auf die Kreise eines Splitpane-Dividers soll die Dividerposition auf 0 (tiltToZero == true) oder auf\r\n * maxWidth (horizontal == true) gesetzt werden und bei erneutem Klick in die Ursprungsposition zurückgesetzt werden.\r\n *\r\n * Diese Funktion ist momentan nur in Responsive vorhanden\r\n *\r\n * @param splitPaneID\r\n * @param tiltToZero\r\n * @param horizontal\r\n * @param dividerSizeTilted\r\n */\r\nfunction dwSplitTilt(event, splitPaneID, tiltToZero, horizontal, dividerSizeTilted) {\r\n    //splitTilt wird von MouseUp getriggert. Es kann passieren, dass MouseUp ohne vorheriges MouseDown durchkommt (z.B. durch\r\n    //gedrückt halten der Maus). In dem Fall hier abbrechen, sonst werden nachfolgend nicht alle nötigen Resize Events gefeuert\r\n\r\n    if ((event instanceof MouseEvent) && (dwSplitDragType == null)) {\r\n        return;\r\n    }\r\n    //nur bei linksklick\r\n    if (event.button != 0) {\r\n        return;\r\n    }\r\n\r\n    var hasCustomTiltEvent = false;             // Nachsehen, ob ein customTiltEvent registriert ist\r\n    var divider = $(dwSplitDragUniqueId + \"_divider\");\r\n    if (divider && dwDomHasAttribute(divider, \"customEventType\")) {\r\n        hasCustomTiltEvent = true;\r\n    }\r\n\r\n    var splitPane = $(splitPaneID);\r\n    dwSplitDragDividerSizeTilted = dividerSizeTilted;\r\n    if (dwSplitDragStartCoords != null) {\r\n        // Nur wenn Maus nicht bzw. max. 3 Pixel bewegt wird, auf-/zuklappen. Sonst ist es nur ein Verändern der Dividerposition\r\n        var newCoords = dwSplitGetPageCoordinates(event);\r\n        if ((4 < Math.abs(newCoords[0] - dwSplitDragStartCoords[0])) || (4 < Math.abs(newCoords[1] - dwSplitDragStartCoords[1]))) {\r\n            return;         // Draggen mit 4 Pixeln oder mehr Bewegung werden als Verschieben des Dividers intepretiert\r\n        }\r\n        // Bei Draggen bix max. 3 Pixel wird es dennoch als Tilt interpretiert\r\n        dwSplitDragged = false;\r\n    }\r\n\r\n    if (!dwSplitDragged && hasCustomTiltEvent) {      // Nur wenn nicht schon gedraggt wurde (gar keine Mausbewegung), sondern geklickt, customTilt auslösen\r\n        var paramType = dwDomGetDomAttribute(divider, \"customEventType\");\r\n        dwAjaxFireCustomEvent(dwSplitDragUniqueId, dwSplitDragUniqueId, paramType, '', true);\r\n        return;       // Jetzt keinen Tilt, sondern das CustomTilt durchführen\r\n    }\r\n\r\n    var divider = $(splitPaneID + \"_divider\");\r\n    var dividerWidth = Math.max(divider.offsetWidth, dwSplitDragDividerSizeTilted);\r\n    var dividerHeight = Math.max(divider.offsetHeight, dwSplitDragDividerSizeTilted);\r\n    var dividerMaxOffset = horizontal ? dividerWidth : dividerHeight;\r\n    var dividerPos = horizontal ? divider.offsetLeft : divider.offsetTop;\r\n    var oldDividerRatio = splitPane.getAttribute(\"oldDividerRatio\");    // vom html-Attribut auslesen, falls getilted wurde\r\n    var splitPaneSize = horizontal ? splitPane.offsetWidth : splitPane.offsetHeight;\r\n    //Um die maxPos zu berechnen, wird die Breite/Höhe des Dividers genommen, welche am Größten ist.\r\n    //Da der Divider seine Größe zwischen tilted und nicht tilted ändern kann, muss diese vorher ermittelt werden\r\n    var maxPos = horizontal ? splitPane.offsetWidth - dividerMaxOffset : splitPane.offsetHeight - dividerMaxOffset;\r\n    var newPos = horizontal ? 0 : maxPos;\r\n\r\n    var wasTilt = (tiltToZero && (dividerPos == 0)) || (dividerPos >= maxPos);\r\n    if (wasTilt) {                                          // alte Ratio auslesen\r\n        newPos = oldDividerRatio * splitPaneSize / 100;     // neue Größe bestimmen\r\n        splitPane.removeAttribute(\"oldDividerRatio\");       // und Attribut entfernen\r\n    } else {\r\n        splitPane.setAttribute(\"oldDividerRatio\", dividerPos * 100 / splitPaneSize);    // jetzt wird getilted, aktuelle Position des Dividers merken\r\n        newPos = tiltToZero ? 0 : maxPos;\r\n    }\r\n\r\n    if (horizontal) {\r\n        dwAjaxGenericSetNodeStyle(splitPane, ['', '', '0', 'width', newPos + \"px\"]);\r\n        dwAjaxGenericSetNodeStyle(splitPane, ['', '', '1', 'left', newPos + \"px\"]);\r\n        dwAjaxGenericSetNodeStyle(splitPane, ['', '', '2', 'left', (newPos + divider.offsetWidth) + \"px\"]);\r\n    } else {\r\n        dwAjaxGenericSetNodeStyle(splitPane, ['', '', '0', 'height', newPos + \"px\"]);\r\n        dwAjaxGenericSetNodeStyle(splitPane, ['', '', '1', 'top', newPos + \"px\"]);\r\n        dwAjaxGenericSetNodeStyle(splitPane, ['', '', '2', 'top', (newPos + divider.offsetHeight) + \"px\"]);\r\n    }\r\n    $(splitPaneID + \"_dividerPosition\").value = newPos;\r\n\r\n    if (dwSplitDragDoAjaxCallback) {\r\n        // Ajax Rückmeldung für das Resize der Komponenten\r\n        var isTilt = (newPos == maxPos) || (newPos == 0);\r\n        var params = \"leftSize=\" + newPos + \"@DWSUB@\" + \"rightSize=\" + (maxPos - newPos) + \"@DWSUB@\" + \"tilt=\" + (isTilt ? \"1\" : \"0\");\r\n        dwAjaxSplitpaneDragged(event, dwSplitDragEventHandlerComponentId, dwSplitDragUniqueId, params, true);\r\n    }\r\n\r\n    dwSplitDragType = null;\r\n    dwSplitDragStartCoords = null;\r\n    dwSplitDragComponent1 = null;\r\n    dwSplitDragComponent2 = null;\r\n    dwSplitDragComponent1Min = null;\r\n    dwSplitDragComponent2Min = null;\r\n    dwSplitDragComponent1Start = null;\r\n    dwSplitDragComponent2Start = null;\r\n    dwSplitDragEventHandlerComponentId = null;\r\n    dwSplitDragUniqueId = null;\r\n    dwSplitDragDividerSize = null;\r\n    dwSplitDragDividerSizeTilted = null;\r\n    dwSplitDragSplitPaneSize = null;\r\n    dwSplitDragDoAjaxCallback = null;\r\n}\r\n\r\n\n/*\r\n * Copyright (c) 2025 Quanos Solutions GmbH\r\n */\r\nvar DW_IMAGE_DIR_MODE = false;\r\n/**\r\n * Sammlung von Methoden zur Anzeige des Bildes inkl. Overview-Panel\r\n */\r\nvar DW_IMAGE_IN_ZOOM_EVENT = false;\r\n\r\n// ZoomSlider wird bewegt\r\nvar DW_IMAGE_SLIDER_MOVE = false;\r\n\r\n// Rotes Rechteck im Overview-Panel wird bewegt\r\nvar DW_IMAGE_NAVRECT_MOVE = false;\r\n\r\n// Zoom-to-Rect: Rechteck wird aufgezogen, Start-Position speichern\r\nvar DW_IMAGE_ZOOMRECT;\r\n\r\n// Image verschieben, Start-Position speichern\r\nvar DW_IMAGE_DRAGRECT;\r\n\r\nvar DW_LINK_STYLE_NONE = 0;\r\nvar DW_LINK_STYLE_LINE = 1;\r\nvar DW_LINK_STYLE_RECT = 2;\r\nvar DW_LINK_STYLE_ELLIPSE = 3;\r\nvar DW_LINK_STYLE_ELLIPSE_FULL = 4;\r\nvar DW_LINK_STYLE_FULL = 5;\r\nvar DW_LINK_STYLE_REDESIGN_RECT = 6;\r\n\r\nvar DW_IMAGE_LAST_ELEMENT_ID;\r\nvar DW_IMAGE_LAST_ZOOM = 1.0;\r\nvar DW_IMAGE_LAST_HOTSPOT_KEY;\r\nvar DW_IMAGE_LAST_HOTSPOT_KEY_VER;\r\n\r\nvar DW_IMAGE_BIAS = 1.5; // das Bias mal größere Bild wird als neues Bild genommen\r\n\r\nvar DW_PAGE_SCALE;\r\n\r\n/*\r\n * Normalerweise wird das Bild über URL Parameter geholt, also z.B.\r\n * irgend/eine/url?tileX=3&tileY=3&imgW=2000&imgH=2000&inctrans=true\r\n * aber im Falle von GWT müssen wir die richtigen Bilder auf der Platte finden.\r\n * Es ist ja kein Server vorhanden\r\n */\r\nfunction dwImageViewerSetDirMode(value) {\r\n    DW_IMAGE_DIR_MODE = value;\r\n}\r\n\r\nfunction dwImageViewerGetImage(elementId) {\r\n    var imageElement = $(elementId + \"_tiles\");\r\n    if (imageElement == null) {\r\n        imageElement = $(elementId + \"_image\");\r\n    }\r\n    return imageElement;\r\n}\r\n\r\n/**\r\n * Initialisiert den Viewer mit allen notwendigen Parametern. Bei Ajax wird über diese\r\n * Methode auch reinitialisiert\r\n */\r\nfunction dwImageViewerInitStart(elementId, imgSrcPrefix, dwWidth, dwHeight, curImageWidth, curImageHeight,\r\n                                openButtonUrl, closeButtonUrl, panClosedUrl, panOpenedUrl, panOpenedRUrl,\r\n                                overviewClosedWidth, overviewClosedHeight, overviewOpenWidth, overviewOpenHeight,\r\n                                clientUpscale, clientDownscale, isWithHiddenZoom, tileSize, useOriginalImage, useTiffOnClient, autoCloseWindows, transpixelUrl,\r\n                                panOpened, panCorner, zoomToRect, unmarkedHotspotsVisible, isMultiSelection, openPanWindowText,\r\n                                closePanWindowText, initialHidePanWindow, forceNoPanWindow, viewerType, plainImageOnly, dontZoomSmallImagesAtStart, debug) {\r\n    var image = dwImageViewerGetImage(elementId);\r\n    if (image == null) { // kann durch die Verwendung von setTimeout() passieren\r\n        return;\r\n    }\r\n\r\n    image.dwTileInfosForAllZoomLevels = new Object();\r\n    image.elementId = elementId;\r\n    image.dwWidth = dwWidth; // Original-Bildbreite\r\n    image.dwHeight = dwHeight; // Original-Bildhöhe\r\n    image.dwCurrentZoomLevel = panOpened ? 2.0 : 1.0;\r\n    image.dwImgSrcPrefix = imgSrcPrefix;\r\n    image.dwOrigImageWidth = curImageWidth; // Die erste ausgelieferte Version (maximal 750x500)\r\n    image.dwOrigImageHeight = curImageHeight; // Die erste ausgelieferte Version (maximal 750x500)\r\n    image.dwCurrentImageWidth = curImageWidth; // Aktuelle Bildgröße\r\n    image.dwCurrentImageHeight = curImageHeight; // Aktuelle Bildgröße\r\n    image.dwOpenButtonUrl = openButtonUrl;\r\n    image.dwCloseButtonUrl = closeButtonUrl;\r\n    image.dwPanClosedUrl = panClosedUrl;\r\n    image.dwPanOpenedUrl = panOpenedUrl;\r\n    image.dwPanOpenedRUrl = panOpenedRUrl;\r\n    image.dwOverviewClosedWidth = overviewClosedWidth;\r\n    image.dwOverviewClosedHeight = overviewClosedHeight;\r\n    image.dwOverviewOpenWidth = overviewOpenWidth;\r\n    image.dwOverviewOpenHeight = overviewOpenHeight;\r\n    image.dwClientUpscale = clientUpscale;\r\n    image.dwClientDownscale = clientDownscale;\r\n    image.dwIsWithHiddenZoom = isWithHiddenZoom;\r\n    image.panOpened = panOpened;\r\n    image.panCorner = panCorner;\r\n    image.panZoom2Rect = !zoomToRect; // Damit es im Toggle unten richtig gesetzt wird\r\n    image.dwTileSize = Math.floor(tileSize);\r\n    image.useOriginalImage = useOriginalImage;\r\n    image.useTiffOnClient = useTiffOnClient;\r\n    image.autoCloseWindows = autoCloseWindows;\r\n    image.transpixelUrl = transpixelUrl;\r\n    image.hotspots = new Array();\r\n    image.unmarkedHotspotsVisible = unmarkedHotspotsVisible;\r\n    image.isMultiSelection = isMultiSelection;\r\n    image.dwOpenPanWindowText = openPanWindowText;\r\n    image.dwClosePanWindowText = closePanWindowText;\r\n    image.dwInitialHidePanWindow = initialHidePanWindow;\r\n    image.dwForceNoPanWindow = forceNoPanWindow || plainImageOnly; //Bei der plain Anzeige kein PanWindow\r\n    image.viewerType = viewerType;\r\n    image.plainImageOnly = plainImageOnly;\r\n    image.dontZoomSmallImagesAtStart = dontZoomSmallImagesAtStart;\r\n    image.debug = debug;\r\n    image.logger = new DwLogger(!(typeof (framework_isJ2EEBrowser) != \"undefined\"));\r\n    image.log = function(msg) {\r\n        if (image.debug) {\r\n            var date = new Date();\r\n            var timestamp = date.getDate() + \".\" + (date.getMonth() + 1) + \".\" + date.getFullYear() + \" \" + date.getHours() + \":\" + date.getMinutes() + \":\" + date.getSeconds() + \":\" + date.getMilliseconds();\r\n            var lines = msg.split(\"\\n\");\r\n            for (var i = 0; i < lines.length; i++) {\r\n                var line = lines[i];\r\n                if (line) { // Leerzeilen werden ausgefiltert ...\r\n                    image.logger.log(timestamp + \" - \" + line);\r\n                }\r\n            }\r\n        }\r\n    };\r\n    image.logGroupStart = function(msg) {\r\n        if (image.debug) {\r\n            image.logger.groupStart(msg);\r\n        }\r\n    };\r\n    image.logGroupEnd = function() {\r\n        if (image.debug) {\r\n            image.logger.groupEnd();\r\n        }\r\n    };\r\n\r\n    // Um den Scale der gesamten Seite im PackAndGo zu unterstützen\r\n    var rootPanel = document.getElementById(\"gwtGuiWindowRootLayoutPanel\");\r\n    if ((rootPanel != undefined) && (typeof (rootPanel.style.transform) != \"undefined\") && (typeof (rootPanel.style.transform.match) != \"undefined\")) {\r\n        var trans = rootPanel.style.transform;\r\n        var matches = trans.match(/(scale)|(\\d(.\\d+)?)/g);\r\n        if (matches != null) {\r\n            for (var index = 0; index < matches.length; index++) {\r\n                if (matches[index] === \"scale\") {\r\n                    DW_PAGE_SCALE = matches[index + 1];\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    dwImageViewerSetPan(elementId);\r\n    dwImageViewerToggleZoomRect(elementId);\r\n}\r\n\r\nfunction dwImageViewerInitEnd(elementId) {\r\n    var image = dwImageViewerGetImage(elementId);\r\n    if (image == null) { // kann durch die Verwendung von setTimeout() passieren\r\n        return;\r\n    }\r\n\r\n    if (!dwImageViewerUpdateOverviewVisibility(elementId, image.dwInitialHidePanWindow)) {\r\n        // Overview-Fenster kann nicht angezeigt werden -> Zoom initial auf 100% setzen\r\n        image.dwCurrentZoomLevel = 1.0;\r\n    }\r\n\r\n    dwImageViewerAddHotspotSpans(elementId, false);\r\n\r\n    var sliderKnob = $(elementId + \"_sliderKnob\");\r\n    var sliderImage = $(elementId + \"_slider\");\r\n    sliderKnob.style.left = ((sliderImage.offsetWidth - sliderKnob.offsetWidth)\r\n                             * imageViewerSliderZoomToLogarithm(image.dwCurrentZoomLevel) / 2000.0) - 1 + \"px\";\r\n\r\n    var imagescroll = $(elementId + \"_imagescroll\");\r\n    if (imagescroll.addEventListener) {\r\n        if (!image.plainImageOnly) {\r\n            imagescroll.addEventListener('DOMMouseScroll', function(event) {\r\n                dwImageViewerMouseWheel(event, elementId)\r\n            }, false);\r\n        }\r\n    }\r\n\r\n    dwImageViewerInitEndPartTwo(elementId, false);\r\n}\r\n\r\nfunction dwImageViewerInitEndPartTwo(elementId, isUpdateHotpots) {\r\n    var image = dwImageViewerGetImage(elementId);\r\n    if (image == null) { // kann durch die Verwendung von setTimeout() passieren\r\n        return;\r\n    }\r\n\r\n    setTimeout(function() {\r\n        if (DW_IMAGE_LAST_ELEMENT_ID == elementId) {\r\n            image.dwCurrentZoomLevel = DW_IMAGE_LAST_ZOOM;\r\n\r\n            // Hotspot-Daten von vorheriger Instanz mit gleicher elementId übernehmen\r\n            if (image.lastHotspotKey == null) {\r\n                image.lastHotspotKey = DW_IMAGE_LAST_HOTSPOT_KEY;\r\n                image.lastHotspotKeyVer = DW_IMAGE_LAST_HOTSPOT_KEY_VER;\r\n            }\r\n        } else {\r\n            DW_IMAGE_LAST_ELEMENT_ID = elementId;\r\n\r\n            // Hotspot-Daten von vorheriger Instanz zurücksetzen\r\n            DW_IMAGE_LAST_HOTSPOT_KEY = null;\r\n            DW_IMAGE_LAST_HOTSPOT_KEY_VER = null;\r\n        }\r\n        if (dwImageViewerSetNormalizedZoom_immediately(image, true, null)) {\r\n            DW_IMAGE_LAST_ZOOM = image.dwCurrentZoomLevel;\r\n        }\r\n\r\n        if (!isUpdateHotpots) {\r\n            if ((image.lastHotspotKey != null) && !image.isMultiSelection) {\r\n                // letzten Hotspot-Key und KeyVer merken, da diese durch dwImageMarkHotspotsForKey() zurückgesetzt werden\r\n                var lastHotspotKey = image.lastHotspotKey;\r\n                var lastHotspotKeyVer = image.lastHotspotKeyVer;\r\n\r\n                // explizit dwImageScrollToHotspotForKey() nach dem Markieren aufrufen, da der Hotspot evtl. schon markiert\r\n                // war und dann nicht dorthin gescrollt werden würde\r\n                dwImageMarkHotspotsForKey(elementId, lastHotspotKey, lastHotspotKeyVer, false, false, false, null);\r\n                dwImageScrollToHotspotForKey(elementId, lastHotspotKey, lastHotspotKeyVer);\r\n            }\r\n\r\n            image.style.visibility = \"visible\";\r\n            image.initialized = true;\r\n\r\n            // Im IPP nicht vorhanden\r\n            if (image.viewerType != \"viewerimagesvgnative\") {\r\n                if (typeof (dwAjaxImageLoaded) != \"undefined\") {\r\n                    dwAjaxImageLoaded(null, elementId, elementId, \"\", true);\r\n                } else if (typeof (dwSwingFrameworkFireCallbackEvent) != \"undefined\") {\r\n                    dwSwingFrameworkFireCallbackEvent(\"imageLoadedEvent\", \"\");\r\n                }\r\n            }\r\n            dwImageViewerUpdateOverviewVisibility(elementId, image.dwInitialHidePanWindow);  // Pan-Window zuverlässig ein/ausblenden, nachdem jetzt Breite/Höhe feststeht\r\n        }\r\n    }, 50); // 10ms funktioniert unter iOS nicht\r\n\r\n    if (!image.unmarkedHotspotsVisible) {\r\n        dwImageSetUnmarkedHotspotsVisibility(elementId, false);\r\n    }\r\n}\r\n\r\nfunction dwImageViewerAddHotspotSpans(elementId, isUpdateHotpots) {\r\n    let image = dwImageViewerGetImage(elementId);\r\n    if (image == null) { // kann durch die Verwendung von setTimeout() passieren\r\n        return;\r\n    }\r\n\r\n    for (let i = 0; i < image.hotspots.length; i++) {\r\n        let hotspot = image.hotspots[i];\r\n        image.log(\"addHotspotToImage (key=\" + hotspot.key + \")\");\r\n        hotspot.addToImage(elementId);\r\n    }\r\n\r\n    if (isUpdateHotpots) {\r\n        dwImageViewerInitEndPartTwo(elementId, true);\r\n    }\r\n}\r\n\r\nfunction dwImageViewerModifyFileOnlyMode(src) {\r\n    if (DW_IMAGE_DIR_MODE) {\r\n        var charmap = {};\r\n        charmap['?'] = '/';\r\n        charmap['&'] = '_';\r\n        charmap['='] = '_';\r\n        charmap['.'] = '_';\r\n        return dwUtilsReplaceCharacters(src, charmap) + \".png\";\r\n    } else {\r\n        return src;\r\n    }\r\n}\r\n\r\nfunction dwImageViewerGetMinHeightForViewerControls() {\r\n    var minHeight;\r\n\r\n    // 255px = GuiViewerUtils.OVERVIEW_HEIGHT_OPEN * 1.5 bei Desktop-GUI bzw. 200px bei mobilen Anwendungen auf Smartphones\r\n    // (480px = MobileGui.MINIMUM_WIDTH_FOR_2_VIEWS)\r\n    if (framework_isMobileView && ((framework_displayWidth < 480) || (framework_displayHeight < 480))) {\r\n        minHeight = 200;\r\n    } else {\r\n        minHeight = 255;\r\n    }\r\n    return minHeight;\r\n}\r\n\r\nfunction dwImageViewerUpdateOverviewVisibility(elementId, hidePanWindow) {\r\n    var control = $(elementId);\r\n    if (control == null) {\r\n        return true;\r\n    }\r\n    var overview = $(elementId + \"_overview\");\r\n    var image = dwImageViewerGetImage(elementId);\r\n    if (image == null) { // kann durch die Verwendung von setTimeout() passieren\r\n        return;\r\n    }\r\n    if (image.dwForceNoPanWindow) {\r\n        dwDomSetStyle(overview, \"display\", \"none\");\r\n        return false;\r\n    }\r\n    var minHeight = dwImageViewerGetMinHeightForViewerControls();\r\n\r\n    if (!hidePanWindow && (control.offsetHeight > minHeight)) {\r\n        dwDomSetStyle(overview, \"display\", \"\");\r\n        return true;\r\n    } else {\r\n        if (overview.offsetHeight > 0) { // offsetHeight merken, würde sonst 0, wenn unsichtbar\r\n            overview.oldOffsetHeight = overview.offsetHeight;\r\n        }\r\n        dwDomSetStyle(overview, \"display\", \"none\");\r\n        return false;\r\n    }\r\n}\r\n\r\nfunction dwImageViewerHotspot(elementId, x1, y1, x2, y2, linkStyle, linkStyleMark, linkStyleFocused,\r\n                              color, colorMark, colorFocused,\r\n                              marked, focused, key, keyVer, uniqueId, text, type,\r\n                              isWithHover, colorHover, isWithOutline, colorOutline, fontSize, fontName, fontWeight) {\r\n    this.elementId = elementId;\r\n    this.x1 = x1;\r\n    this.y1 = y1;\r\n    this.x2 = x2;\r\n    this.y2 = y2;\r\n    this.width = x2 - x1;\r\n    this.height = y2 - y1;\r\n    this.linkStyle = linkStyle;\r\n    this.linkStyleMark = linkStyleMark;\r\n    this.linkStyleFocused = linkStyleFocused;\r\n    this.color = color;\r\n    this.colorMark = colorMark;\r\n    this.colorFocused = colorFocused;\r\n    this.isWithHover = isWithHover;\r\n    this.colorHover = colorHover;\r\n    this.isWithOutline = isWithOutline;\r\n    this.colorOutline = colorOutline;\r\n    this.marked = marked;\r\n    this.focused = focused;\r\n    this.key = key;\r\n    this.keyVer = keyVer;\r\n    this.uniqueId = uniqueId;\r\n    this.text = text;\r\n    this.type = type;\r\n    this.fontSize = fontSize;\r\n    this.fontName = fontName;\r\n    this.fontWeight = fontWeight;\r\n    this.manualClickUrl = null;\r\n    this.manualClickTarget = null;\r\n    this.manualDoubleClickUrl = null;\r\n    this.manualDoubleClickTarget = null;\r\n}\r\n\r\n/**\r\n * ändert den Fokusiert-Status der beiden übergebenen Hotspots. Ein Fokusierter Hotspot ist ein Hotspot der geklickt wurde\r\n * oder der über den \"Weiterschalten\"-Button im ImageOverlay fokusiert wurde. Fokusiert-Status hilft zu unterscheiden\r\n * wenn es mehrere Hotspots mit gleichem Key gibt und die nah beiandner liegen, welcher Hotspot gerade der \"aktive\" ist\r\n * den man über den \"Weiterschalten-\"Button bekommen hat.\r\n * @param elementId\r\n * @param uniqueIdOfNewFocusedHotspot\r\n * @param uniqueIdOfOldFocusedHotspot\r\n */\r\nfunction dwChangeFocusOfHotspot(elementId, uniqueIdOfNewFocusedHotspot, uniqueIdOfOldFocusedHotspot) {\r\n    var image = dwImageViewerGetImage(elementId);\r\n    // Find the hotspots\r\n    var newHotspot, oldHotspot;\r\n    for (let i = 0; i < image.hotspots.length; i++) {\r\n        if (image.hotspots[i].uniqueId === uniqueIdOfNewFocusedHotspot) {\r\n            newHotspot = image.hotspots[i];\r\n        } else if ((uniqueIdOfOldFocusedHotspot !== null) && (image.hotspots[i].uniqueId === uniqueIdOfOldFocusedHotspot)) {\r\n            oldHotspot = image.hotspots[i];\r\n        }\r\n    }\r\n\r\n    if (oldHotspot != undefined) {\r\n        var oldHotspotSpan = $(uniqueIdOfOldFocusedHotspot);\r\n        oldHotspotSpan.hotspot.focused = false;\r\n        dwImagePaintHotspot(oldHotspotSpan);\r\n    }\r\n\r\n    if (newHotspot != undefined) {\r\n        var newHotspotSpan = $(uniqueIdOfNewFocusedHotspot);\r\n        newHotspotSpan.hotspot.focused = true;\r\n        dwImagePaintHotspot(newHotspotSpan);\r\n        dwImageScrollToHotspot(uniqueIdOfNewFocusedHotspot);\r\n    }\r\n}\r\n\r\ndwImageViewerHotspot.prototype.addToImage = function(elementId) {\r\n    var image = dwImageViewerGetImage(elementId);\r\n    if (image == null) { // kann durch die Verwendung von setTimeout() passieren\r\n        return;\r\n    }\r\n\r\n\r\n    var hotspotSpanClickArea = document.createElement(\"span\");\r\n    hotspotSpanClickArea.hotspot = this;\r\n    hotspotSpanClickArea.id = this.uniqueId;\r\n    hotspotSpanClickArea.style.position = \"absolute\";\r\n    hotspotSpanClickArea.style.left = \"0px\";\r\n    hotspotSpanClickArea.style.top = \"0px\";\r\n    hotspotSpanClickArea.style.width = \"100%\";\r\n    hotspotSpanClickArea.style.height = \"100%\";\r\n    hotspotSpanClickArea.style.visibility = \"visible\";\r\n    hotspotSpanClickArea.style.backgroundColor = \"transparent\";\r\n    hotspotSpanClickArea.style.cursor = \"pointer\";\r\n    hotspotSpanClickArea.style.mixBlendMode = \"darken\";\r\n    if (framework_isDevelopmentQFTest) {\r\n        hotspotSpanClickArea.setAttribute(\"compname\", \"hotspot_\" + this.key);\r\n        hotspotSpanClickArea.setAttribute(\"compclass\", \"javax.swing.JLabel\");\r\n    }\r\n\r\n    // Vorher rausziehen. Im Event handler geht this ja auf die Function\r\n    var elementId = this.elementId;\r\n    var key = this.key;\r\n    var keyVer = this.keyVer;\r\n    var uniqueId = this.uniqueId;\r\n    var hotspotClickfunction = function(event) {\r\n        event = dwFrameworkGetEvent(event);\r\n        // bei Touch-Emulation nur die emulierten MouseEvents berücksichtigen (sonst wird der Event bei Desktop-Browsern doppelt ausgewertet)\r\n        if (DWTOUCH_TOUCH_EMULATION_ENABLED && !event.dwTouch) {\r\n            return;\r\n        }\r\n        // Wenn gerade Zeichnungsausschnitt auswählen aktiv ist, möchte man keine Hotspotselektion machen, sondern einen Ausschnitt wählen\r\n        // Sonst würde das Event zum Auswählen des Ausschnitts nicht mehr kommen, wenn das Hotspot-click event ausgelöst wird.\r\n        if (image.panZoom2Rect) {\r\n            return;\r\n        }\r\n        image.log(\"clicked hotspot (key=\" + key + \" keyver=\" + keyVer + \")\");\r\n        var rightClicked = event.button == 2;\r\n        dwImageMarkHotspotsForKey(elementId, key, keyVer, !image.isMultiSelection, false, rightClicked, uniqueId);\r\n\r\n        if (framework_isMobileView && (hotspotSpanClickArea.hotspot.text != \"\")) {\r\n            dwTooltip_delayShowTooltip(event, hotspotSpanClickArea.hotspot.text, 0);\r\n        }\r\n\r\n        dwFrameworkDisableEventBubbling(event);\r\n        if ((this.hotspot.manualClickUrl != null) && (this.hotspot.manualClickTarget != null)) {\r\n            dwUtilsLoadUrlInTarget(this.hotspot.manualClickUrl, this.hotspot.manualClickTarget)\r\n        } else if (typeof (dwAjaxAddUpdate) != \"undefined\") {\r\n            dwAjaxAddUpdate(elementId + \"@DW@\" + elementId + \"@DW@imageHotspotClickedEvent@DW@hotspotId=\" + dwImageGetMarkedHotspotIds(elementId).join(\"|\") +\r\n                            \"@DWSUB@focusedHotspotId=\" + dwImageGetFocusedHotspotId(elementId) +\r\n                            \"@DWSUB@mouseButton=\" + (event.button + 1), true);\r\n        } else if (typeof (dwSwingFrameworkFireCallbackEvent) != \"undefined\") {\r\n            dwSwingFrameworkFireCallbackEvent(\"imageHotspotClickedEvent\", uniqueId + \"@DWSUB@\" + (event.button + 1));\r\n        } else if (typeof (hotspotClicked) != \"undefined\") {\r\n            // GWT\r\n            hotspotClicked(key, 1);\r\n        } else {\r\n            // Hier kann es sich nur um eine IPP Anwendung handeln (ansonsten existiert dwAjaxAddUpdate)\r\n            // Firefox lässt den Zugriff auf parent Methoden/Attribute nicht zu, wenn der parent in einer anderen Domain ist (XSS Schutz)\r\n            // -> permission denied\r\n            try {\r\n                if (typeof (parent.highlightPartlistRow) != \"undefined\") {\r\n                    parent.highlightPartlistRow(key, true);\r\n                }\r\n            } catch (exception) {\r\n                // Alternative Ursache (zu XSS) - siehe https://bugzilla.mozilla.org/show_bug.cgi?id=911444\r\n            }\r\n        }\r\n    };\r\n\r\n    // Unbedingt immer auf mousedown lassen, weil nur bei Mousedown-Event die Clicks von Linksklick, Rechtsklick und auch\r\n    // die Touchemulation durchkommt. Bei onClick z.b. kommt nämlich kein Rechtsklick vom Browser an und Hotspots sollen\r\n    // auch bei Rechtsklick selektiert werden.\r\n    hotspotSpanClickArea.onmousedown = hotspotClickfunction;\r\n\r\n    hotspotSpanClickArea.ondblclick = function(event) {\r\n        event = dwFrameworkGetEvent(event);\r\n        // bei Touch-Emulation nur die emulierten MouseEvents berücksichtigen (sonst wird der Event bei Desktop-Browsern doppelt ausgewertet)\r\n        if (DWTOUCH_TOUCH_EMULATION_ENABLED && !event.dwTouch) {\r\n            return;\r\n        }\r\n        // Teilweise kommt es vor durch unglückliches schnelles links und dann rechtsklick, dass er das als\r\n        // dblClick wertet. Deshalb bei DblClick mit rechter Mouse hier nichts machen.\r\n        var rightClicked = event.button == 2;\r\n        if (rightClicked) {\r\n            return;\r\n        }\r\n        // Bei einem Doppelclick lassen wir nur den letzten Klick zu und deselektieren alle anderen Einträge\r\n        dwImageMarkHotspotsForKey(elementId, key, keyVer, true, false, false, uniqueId);\r\n        dwFrameworkDisableEventBubbling(event);\r\n        if ((this.hotspot.manualDoubleClickUrl != null) && (this.hotspot.manualDoubleClickTarget != null)) {\r\n            dwUtilsLoadUrlInTarget(this.hotspot.manualDoubleClickUrl, this.hotspot.manualDoubleClickTarget)\r\n        } else if (typeof (dwAjaxAddUpdate) != \"undefined\") {\r\n            dwAjaxAddUpdate(elementId + \"@DW@\" + elementId + \"@DW@imageHotspotDoubleClickedEvent@DW@hotspotId=\" + uniqueId +\r\n                            \"@DWSUB@mouseButton=\" + (event.button + 1), true);\r\n        } else if (typeof (dwSwingFrameworkFireCallbackEvent) != \"undefined\") {\r\n            dwSwingFrameworkFireCallbackEvent(\"imageHotspotDoubleClickedEvent\", uniqueId + \"@DWSUB@\" + (event.button + 1));\r\n        } else if (typeof (hotspotClicked) != \"undefined\") {\r\n            // GWT\r\n            hotspotClicked(key, 2);\r\n        } else {\r\n            // Hier kann es sich nur um eine IPP Anwendung handeln (ansonsten existiert dwAjaxAddUpdate)\r\n            // Firefox lässt den Zugriff auf parent Methoden/Attribute nicht zu, wenn der parent in einer anderen Domain ist (XSS Schutz)\r\n            // -> permission denied\r\n            try {\r\n                if (typeof (parent.loadAssembly) != \"undefined\") {\r\n                    if (hotspotSpanClickArea.hotspot.type == \"G\") {\r\n                        // IPP Bildportierung\r\n                        parent.loadAssembly(key, \"\", \"\");\r\n                    }\r\n                }\r\n            } catch (exception) {\r\n                // Alternative Ursache (zu XSS) - siehe https://bugzilla.mozilla.org/show_bug.cgi?id=911444\r\n            }\r\n        }\r\n    };\r\n    hotspotSpanClickArea.onmouseover = function(event) {\r\n        if (event == null) {\r\n            // IE8\r\n            event = window.event;\r\n        }\r\n        if (hotspotSpanClickArea.hotspot.text != \"\") {\r\n            dwTooltip_delayShowTooltip(event, hotspotSpanClickArea.hotspot.text, DWTOOLTIP_DELAY_DEFAULT_VALUE);\r\n        }\r\n    };\r\n    hotspotSpanClickArea.onmouseout = function(event) {\r\n        // onmouseout bei echten mobilen Browsern mit Touch-Emulation (aktuell nur IE >= 10 auf Windows Tablets) ignorieren,\r\n        // wenn es sich nicht um einen durch die Touch-Emulation erzeugten Event handelt\r\n        if (framework_isMobileBrowser && DWTOUCH_TOUCH_EMULATION_ENABLED && !event.dwTouch) {\r\n            return;\r\n        }\r\n\r\n        dwTooltip_hideTooltips();\r\n    };\r\n    this.span = hotspotSpanClickArea;\r\n    var hotspotDivClick = $(elementId + \"_hotspots_click\");\r\n    hotspotSpanClickArea.hotspot = this;\r\n    hotspotDivClick.appendChild(hotspotSpanClickArea);\r\n\r\n\r\n    dwImagePaintHotspot(hotspotSpanClickArea);\r\n};\r\n\r\ndwImageViewerHotspot.prototype.resizeForImage = function(image, imageLeft, imageTop, imageWidth, imageHeight) {\r\n    var hotspotWidth = Math.min(imageWidth, (this.width / image.dwFactor * image.dwCurrentZoomLevel));\r\n    var hotspotHeight = Math.min(imageHeight, (this.height / image.dwFactor * image.dwCurrentZoomLevel));\r\n\r\n    //-1 weil wenn die Größe des Hotspotviews gleich der Größe des Bildes ist, wird manchmal schon\r\n    // das Scrollpane gezeigt, weil das Hotspotview zu groß für Scrollpane ist\r\n    let left = Math.max(0, (this.x1 / image.dwFactor * image.dwCurrentZoomLevel) - 1);\r\n    let top = Math.max(0, (this.y1 / image.dwFactor * image.dwCurrentZoomLevel) - 1);\r\n    this.span.style.left = left + \"px\";\r\n    this.span.style.top = top + \"px\";\r\n\r\n    this.span.width = hotspotWidth; // notwendig für den Canvas von Ellipsen, schadet aber auch sonst nicht\r\n    this.span.style.width = hotspotWidth + \"px\";\r\n    this.span.height = hotspotHeight; // notwendig für den Canvas von Ellipsen, schadet aber auch sonst nicht\r\n    this.span.style.height = hotspotHeight + \"px\";\r\n\r\n    if (this.span.dwCanvas != null) {\r\n        // Beim Canvas muss bei jedem Resize neu gezeichnet werden\r\n        dwImagePaintHotspot(this.span);\r\n    }\r\n    this.span.style.visibility = \"visible\";\r\n};\r\n\r\ndwImageViewerHotspot.prototype.setManualClickUrl = function(url, target) {\r\n    this.manualClickUrl = url;\r\n    this.manualClickTarget = target;\r\n};\r\n\r\ndwImageViewerHotspot.prototype.setManualDoubleClickUrl = function(url, target) {\r\n    this.manualDoubleClickUrl = url;\r\n    this.manualDoubleClickTarget = target;\r\n};\r\n\r\n/**\r\n * Wird gerufen wenn gezoomt werden soll. Bildanpassung passiert aber ein paar Millisekunden später.\r\n * @param image Dom Element id_image\r\n * @param zoom Wieviel reingezoomt werden soll (1.0 = gesamtes Bild anzeigen)\r\n * @param when wieviel millisekunden gewartet werden soll\r\n */\r\nfunction dwImageViewerSetNormalizedZoom(image, zoom, centerPoint, when) {\r\n    if (image == null) { // kann evtl. durch verzögerte Zoom-Aufrufe vom Server passieren\r\n        return;\r\n    }\r\n\r\n    if (zoom <= 1.0001) {\r\n        zoom = 1.0;\r\n    }\r\n    if (zoom >= 19.999) {\r\n        zoom = 20.0;\r\n    }\r\n    var zoomChanged = !(Math.abs(image.dwCurrentZoomLevel - zoom) < 0.0001);\r\n    if (!zoomChanged && (zoom > 1)) {\r\n        return;\r\n    }\r\n    image.dwCurrentZoomLevel = zoom;\r\n    DW_IMAGE_LAST_ZOOM = zoom;\r\n    if (zoomChanged) {\r\n        if (typeof (dwAjaxAddUpdate) != \"undefined\") {\r\n            dwAjaxAddUpdate(image.elementId + \"@DW@\" + image.elementId + \"@DW@imageZoomChangedEvent@DW@zoom=\" + zoom, true);\r\n        } else if (typeof (dwSwingFrameworkFireCallbackEvent) != \"undefined\") {\r\n            dwSwingFrameworkFireCallbackEvent(\"imageZoomChangedEvent\", zoom);\r\n        }\r\n    }\r\n    if (when <= 0) {\r\n        dwImageViewerSetNormalizedZoom_immediately(image, false, centerPoint);\r\n    } else {\r\n        setTimeout(function() {\r\n            dwImageViewerSetNormalizedZoom_immediately(image, false, centerPoint);\r\n        }, when);\r\n    }\r\n}\r\n\r\n/**\r\n * Normalisierten Zoomfaktor umrechnen in Slider-Bereich (von 100 bis 2000)\r\n */\r\nfunction imageViewerSliderZoomToLogarithm(value) {\r\n    var zoomValue = value * 100;\r\n    var minValue = 100;\r\n    var maxValue = 2000;\r\n    if ((zoomValue >= maxValue) || (zoomValue <= minValue)) {\r\n        return zoomValue;\r\n    }\r\n\r\n    var y = zoomValue;\r\n    var weite = maxValue - minValue;\r\n    var logBauch = 2.0;\r\n    var f = weite * (1 + (Math.log((y - 100) / (maxValue - 100) * (Math.exp(logBauch) - Math.exp(-logBauch))\r\n                                   + Math.exp(-logBauch)) / logBauch));\r\n    return f / 2 + minValue;\r\n}\r\n\r\n/**\r\n * Wert innerhalb des Slider-Bereichs (von 100 bis 2000) umrechnen in normalisierten Zoomfaktor\r\n */\r\nfunction imageViewerSliderLogarithmToZoom(logValue) {\r\n    var minValue = 100;\r\n    var maxValue = 2000;\r\n    var x = logValue - minValue;\r\n    var weite = maxValue - minValue;\r\n    var logBauch = 2.0;\r\n    return (Math.exp((x / weite * 2 * logBauch) - logBauch) - Math.exp(-logBauch))\r\n           / (Math.exp(logBauch) - Math.exp(-logBauch)) * (maxValue / 100 - 1) + 1;\r\n}\r\n\r\n/**\r\n * Setzt den neuen Zoomfaktor sofort\r\n *\r\n * @param image\r\n */\r\nfunction dwImageViewerSetNormalizedZoom_immediately(image, forceNewImage, centerPoint) {\r\n    if ((image == null) || (image.parentNode == null)) { // kann durch die Verwendung von setTimeout() passieren\r\n        // Außerdem beim wilden klicken GWT + IE11 im IE10 Kompatibilitätsmodus und außerdem in\r\n        // der HMI Software (NICHT! wenn man den IE11 der HMI normal öffnet)\r\n        return false;\r\n    }\r\n\r\n    var sliderImage = $(image.elementId + \"_slider\");\r\n    var sliderKnob = $(image.elementId + \"_sliderKnob\");\r\n    if ((sliderImage != null) && (sliderKnob != null)) { // kann durch die Verwendung von setTimeout() passieren\r\n        var knobWidth = sliderKnob.offsetWidth;\r\n        sliderKnob.style.left = (((sliderImage.offsetWidth - knobWidth)\r\n                                  * imageViewerSliderZoomToLogarithm(image.dwCurrentZoomLevel) / 2000.0) - 1) + \"px\";\r\n    }\r\n\r\n    var displayWidth = image.parentNode.offsetWidth;\r\n    var displayHeight = image.parentNode.offsetHeight;\r\n    if ((displayWidth == 0) || (displayHeight == 0)) {\r\n        return false;\r\n    }\r\n\r\n    // Falls die Breite oder Höhe vom Parent <= 10 Pixel ist, so ist der Parent gerade z.B. in einem DockingPanel ausgeblendet\r\n    // und der entsprechende Faktor würde viel zu groß werden, was in der Anzeige dann zu viel zu großen Hotspots führen\r\n    // kann. Das Problem tritt primär in Chrome auf beim Aufklappen von einem DockingPanel.\r\n    var factorX = image.dwWidth / displayWidth;\r\n    var factorY = image.dwHeight / displayHeight;\r\n    var isHeightLimited = ((factorX < factorY) && (displayHeight > 10)) || (displayWidth <= 10); // Ob das Bild in die Höhe eher beschränkt ist wie in die Breite\r\n    image.dwFactor = (isHeightLimited) ? factorY : factorX;\r\n    if (image.dontZoomSmallImagesAtStart && image.dwFactor < 1) {\r\n        // In dem Modus dontZoomSmallImagesAtStart werden nur große Bilder in das Control eingepasst\r\n        // kleine Bilder nicht groß gezoomt. Zoomen ist aber natürlich schon möglich\r\n        image.dwFactor = 1;\r\n    }\r\n    var newImageDisplayWidth = Math.round(image.dwCurrentZoomLevel * image.dwWidth / image.dwFactor);\r\n    var newImageDisplayHeight = Math.round(image.dwCurrentZoomLevel * image.dwHeight / image.dwFactor);\r\n    if (!forceNewImage && (parseInt(image.style.height) == newImageDisplayHeight) && (parseInt(image.style.width) == newImageDisplayWidth)) {\r\n        dwImageViewerScrollUpdate(image.elementId, false);\r\n        dwImageViewerRepositionPanWindow(image.elementId);\r\n        return false;\r\n    }\r\n    if (centerPoint == null) {\r\n        centerPoint = dwImageViewerGetImageCenterPoint(image);\r\n    }\r\n    if (image.dwIsWithHiddenZoom) {\r\n        image.style.visibility = \"hidden\";           // wird erst in dwImageLoadImageInSrc wieder sichtbar gemacht\r\n        if (image.hotspots != null) {\r\n            for (var i = 0; i < image.hotspots.length; i++) {\r\n                var hotspot = image.hotspots[i];\r\n                hotspot.span.style.visibility = \"hidden\";\r\n            }\r\n        }\r\n    }\r\n    var imageWidthToBeSet = newImageDisplayWidth;\r\n    var imageHeightToBeSet = newImageDisplayHeight;\r\n    var imageLeftToBeSet = 0;\r\n    var imageTopToBeSet = 0;\r\n    // Zentrieren wenn nötig\r\n    if (newImageDisplayWidth < displayWidth) {\r\n        imageLeftToBeSet = (displayWidth - newImageDisplayWidth) / 2.0;\r\n    }\r\n    if (newImageDisplayHeight < displayHeight) {\r\n        imageTopToBeSet = (displayHeight - newImageDisplayHeight) / 2.0;\r\n    }\r\n    // Damit der imageViewer weiß, ob Scrollbars angezeigt werden ihm den Zustand schicken, damit er es bei sich speichert\r\n    // Leider liefert dwUtilsHasVerticalScrollbar bzw dwUtilsHasHorizontalScrollbar nicht zuverlässig ein richtiges Ergebnis zurück...\r\n    var imagescroll = $(image.elementId + \"_imagescroll\");\r\n\r\n    // zweifache Width, weil man die Pfeile der horizontalen Scrollbar auch noch einrechnen muss\r\n    var offset = (2 * dwUtilsGetScrollbarWidth(imagescroll));\r\n    var verticalScrollbarVisible = (newImageDisplayHeight > displayHeight);\r\n    var horizontalScrollbarVisible = verticalScrollbarVisible ? (newImageDisplayWidth > (displayWidth - offset)) : (newImageDisplayWidth > displayWidth);\r\n    var params = \"horizontal=\" + horizontalScrollbarVisible + \"@DWSUB@\" + \"vertical=\" + verticalScrollbarVisible;\r\n    if (typeof (dwAjaxAddUpdate) != \"undefined\") {\r\n        dwAjaxAddUpdate(image.elementId + \"@DW@\" + image.elementId + \"@DW@__custom_scrollbarVisibilityChanged@DW@\" + params, true);\r\n    } else if (typeof (dwSwingFrameWorkCallbackEvent) != \"undefined\") {\r\n        dwSwingFrameworkFireCallbackEvent(\"__custom_scrollbarVisibilityChanged\", uniqueId + \"@DWSUB@\" + params);\r\n    }\r\n\r\n    if (image.dwCurrentZoomLevel <= 1.0001) {\r\n        // Bug im IE und Chrome: wenn gleichzeitig beide Scrollbars angezeigt werden und man hier dann die Größe des Image anpasst, so dass kein Scrolling mehr notwendig ist,\r\n        // bleiben die Scrollbars trotzdem sichtbar\r\n        // deshalb wird hier im imageScroll DIV das Scrolling erst einmal abgeschalten und erst nach den Größenänderungen wieder eingeschalten (siehe unten)\r\n        dwDomSetStyle(image.parentNode, \"overflow\", \"hidden\");\r\n    }\r\n\r\n    if (dwImageElementIsTag(image, \"object\")) {\r\n        //bei Object-Tag (z.B. SVG) die Attribute margin-left/margin-top setzen statt left/top\r\n        dwDomSetStylesViaAttribute(image, \"width:\" + (imageWidthToBeSet - 2) + \"px;\" +\r\n                                          \"height:\" + (imageHeightToBeSet - 2) + \"px;\" +\r\n                                          \"margin-left: \" + Math.floor(imageLeftToBeSet) + \"px;\" +\r\n                                          \"margin-top: \" + Math.floor(imageTopToBeSet) + \"px;\");\r\n    } else {\r\n        dwDomSetStylesViaAttribute(image, \"width:\" + imageWidthToBeSet + \"px;\" +\r\n                                          \"height:\" + imageHeightToBeSet + \"px;\" +\r\n                                          \"left:\" + imageLeftToBeSet + \"px;\" +\r\n                                          \"top:\" + imageTopToBeSet + \"px;\");\r\n    }\r\n\r\n    dwImageViewerSetImageCenterPoint(image, centerPoint);\r\n\r\n    var hotspotClickLayer = $(image.elementId + \"_hotspots_click\");\r\n    if (hotspotClickLayer != null) {\r\n        dwDomSetStylesViaAttribute(hotspotClickLayer, \"left:\" + imageLeftToBeSet + \"px;\" +\r\n                                                      \"top:\" + imageTopToBeSet + \"px;\" +\r\n                                                      \"width:\" + imageWidthToBeSet + \"px;\" +\r\n                                                      \"height:\" + imageHeightToBeSet + \"px\");\r\n    }\r\n\r\n    if (image.hotspots != null) {\r\n        for (var i = 0; i < image.hotspots.length; i++) {\r\n            var hotspot = image.hotspots[i];\r\n            hotspot.resizeForImage(image, imageLeftToBeSet, imageTopToBeSet, imageWidthToBeSet, imageHeightToBeSet);\r\n        }\r\n    }\r\n\r\n    if (image.dwCurrentZoomLevel <= 1.0001) {\r\n        // Bug im IE und Chrome. siehe oben\r\n        // Scrolling im imagescroll DIV wieder einschalten\r\n        dwDomSetStyle(image.parentNode, \"overflow\", \"auto\");\r\n    }\r\n\r\n    if (image.useOriginalImage) {\r\n        dwImageLoadImageInSrc(image, image.dwWidth, image.dwHeight, forceNewImage);\r\n    } else if ((newImageDisplayWidth < image.dwWidth) && image.dwClientDownscale && (image.dwTileSize == 0)) { // nicht bei Tiling\r\n        dwImageLoadImageInSrc(image, image.dwWidth, image.dwHeight, forceNewImage);\r\n    } else if ((newImageDisplayWidth > image.dwWidth) && image.dwClientUpscale) {\r\n        dwImageLoadImageInSrc(image, image.dwWidth, image.dwHeight, forceNewImage);\r\n    } else {\r\n        // Neues Bild laden wenn nötig, solange runter und raufskalieren bis ein passendes da ist\r\n        var newImageWidth = image.dwWidth;\r\n        var newImageHeight = image.dwHeight;\r\n        var lastValueWidth = newImageWidth;\r\n        // Solange wir ein zu großes Bild haben, nehmen wir ein kleineres Bild\r\n        // Berechnungsalgorithmuss muss mit dem in ImageTilingCacher übereinstimmen, sonst gibt es einen Unterschied\r\n        // zwischen Tiling Cache und den angeforderten hier\r\n        var factor = 1.0;\r\n        var lastFactor = factor;\r\n        var doScaling = true;\r\n        while ((newImageWidth > newImageDisplayWidth) && doScaling) {\r\n            lastValueWidth = newImageWidth;\r\n            lastFactor = factor;\r\n            if (factor == 1.0) {\r\n                factor = DW_IMAGE_BIAS;\r\n            } else {\r\n                factor *= DW_IMAGE_BIAS;\r\n            }\r\n\r\n            // so lange skalieren bis newImageWidth und newImageHeight gerade kleiner sind als ImageConverter.TILE_SIZE = 512\r\n            doScaling = (newImageWidth > 512) || (newImageHeight > 512);\r\n\r\n            newImageWidth = Math.floor(image.dwWidth / factor);\r\n            newImageHeight = Math.floor(image.dwHeight / factor);\r\n            // Damit es nicht unendlich in der While Schleife hängen bleibt, wenn man z.B. Anzeigegröße 0 hat\r\n            if (newImageWidth == lastValueWidth) {\r\n                break;\r\n            }\r\n        }\r\n        // Nun haben wir eins zuviel runterge-whiled, z.B: Anzeigebreite 700, Bild aber Breite 600. Wir müssen nun das nächst-höhere nehmen\r\n        factor = lastFactor;\r\n        newImageWidth = Math.floor(image.dwWidth / factor);\r\n        newImageHeight = Math.floor(image.dwHeight / factor);\r\n        dwImageLoadImageInSrc(image, newImageWidth, newImageHeight, forceNewImage);\r\n        dwImageViewerScrollUpdate(image.elementId, true);\r\n        dwImageViewerRepositionPanWindow(image.elementId);\r\n        return true;\r\n    }\r\n    dwImageViewerScrollUpdate(image.elementId, true);\r\n    dwImageViewerRepositionPanWindow(image.elementId);\r\n    return false;\r\n}\r\n\r\n/**\r\n * Scrollt bei Mouseklick in das Nav-Overview-Fenster an die entsprechende Stelle im Bild.\r\n */\r\nfunction dwImageViewerGotoMousePos(event, elementId) {\r\n    dwFrameworkDisableEventBubbling(event);\r\n    var image = dwImageViewerGetImage(elementId);\r\n    if (image == null) { // kann durch die Verwendung von setTimeout() passieren\r\n        return;\r\n    }\r\n\r\n    var preview = $(elementId + \"_imgPreview\");\r\n\r\n    var eventPoint = dwUtilsGetRelMouseCoords(event, preview);\r\n    if (eventPoint.x < 0 || eventPoint.x > 170) {\r\n        // Wir sind außerhalb des Bildbereichs\r\n        return;\r\n    }\r\n    var newX = eventPoint.x / preview.offsetWidth * image.dwWidth;\r\n    var newY = eventPoint.y / preview.offsetHeight * image.dwHeight;\r\n\r\n    var point = new DWPoint(newX, newY);\r\n    dwImageViewerSetImageCenterPoint(image, point);\r\n}\r\n\r\n/**\r\n * Aktualisiert die Position des Nav-Overview-Rechtecks, wenn das Bild gescrollt wurde oder sich die Größe des\r\n * Anzeigebereichs geändert hat.\r\n */\r\nfunction dwImageViewerScrollUpdate(elementId, zoomFactorChanged) {\r\n    var image = dwImageViewerGetImage(elementId);\r\n    if (image == null) { // kann durch die Verwendung von setTimeout() passieren\r\n        return;\r\n    }\r\n    if (image.dwTileSize > 0) {\r\n        var currentImageWidth = image.dwLastImageWidthForTiles;\r\n        var offsetWidth = image.offsetWidth;\r\n        var offsetHeight = image.offsetHeight;\r\n        for (var zoomLevelKey in image.dwTileInfosForAllZoomLevels) {\r\n            var tilesInfo = image.dwTileInfosForAllZoomLevels[zoomLevelKey];\r\n            if (tilesInfo != null) {\r\n                var tiles = tilesInfo.tiles;\r\n                var imageWidth = tilesInfo.imageWidth;\r\n                var imageHeight = tilesInfo.imageHeight;\r\n                var tileSize = tilesInfo.tileSize;\r\n                var isCurrentZoomLevel = imageWidth == currentImageWidth;\r\n\r\n                // beim reinen Scrollen müssen nur die Kacheln vom aktuellen Zoom-Level aktualisiert werden\r\n                if (isCurrentZoomLevel || zoomFactorChanged) {\r\n                    dwImageViewerUpdateTiles(image, offsetWidth, offsetHeight, tiles, imageWidth, imageHeight, tileSize,\r\n                                             isCurrentZoomLevel);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    // Scrollen im IE während zoom2rect aktiv: Wird als Klick für zoom interpretiert, daher ausschalten\r\n    if (DW_IMAGE_ZOOMRECT != null) {\r\n        DW_IMAGE_ZOOMRECT = null;\r\n        var zoomRect = $(elementId + \"_zoom2rect\");\r\n        zoomRect.style.display = \"none\";\r\n    }\r\n\r\n    var previewImg = $(elementId + \"_imgPreview\");\r\n    var previewImgWidth = previewImg.offsetWidth;\r\n    var previewImgHeight = previewImg.offsetHeight;\r\n\r\n    // weil manchmal das kleine Rechteck die falsche Position hat nach Wechsel auf eine andere Zeichnung\r\n    if (image.panOpened && (previewImgWidth == 0)) {\r\n        setTimeout(function() {\r\n            dwImageViewerScrollUpdate(elementId, false)\r\n        }, 50);\r\n        return;\r\n    }\r\n\r\n    previewImg.style.visibility = \"visible\";\r\n\r\n    var displayWidth = image.parentNode.clientWidth;\r\n    var displayHeight = image.parentNode.clientHeight;\r\n\r\n    var factorX = image.dwWidth / displayWidth;\r\n    var factorY = image.dwHeight / displayHeight;\r\n    var isHeightLimited = factorX < factorY; // Ob das Bild in die Höhe eher beschränkt ist wie in die Breite\r\n    var dwFactor = isHeightLimited ? factorY : factorX;\r\n\r\n    var newWidthInt = parseInt(image.dwCurrentZoomLevel * image.dwWidth / dwFactor);\r\n    var newHeightInt = parseInt(image.dwCurrentZoomLevel * image.dwHeight / dwFactor);\r\n\r\n    var newLeft = Math.max(previewImg.offsetLeft, Math.min(previewImg.offsetLeft + previewImg.offsetWidth - 1, previewImg.offsetLeft + parseInt(previewImgWidth * image.parentNode.scrollLeft / newWidthInt)));\r\n    var newTop = Math.max(previewImg.offsetTop, Math.min(previewImg.offsetTop + previewImg.offsetHeight - 1, previewImg.offsetTop + parseInt(previewImgHeight * image.parentNode.scrollTop / newHeightInt)));\r\n    var newWidth = Math.max(1, Math.min(previewImg.offsetWidth - 1, parseInt(previewImgWidth * displayWidth / newWidthInt)));\r\n    var newHeight = Math.max(1, Math.min(previewImg.offsetHeight - 1, parseInt(previewImgHeight * displayHeight / newHeightInt)));\r\n\r\n    // Dafür sorgen, dass es nicht woanders gezeichnet wird als über dem previewImg, auch wenn es mal in IE8 in der VM\r\n    // so langsam ist, dass es Rechenfehler gibt. Liegt aber auch an der aktuellen Eventverkettung JFRAME-429\r\n    if (newLeft + newWidth > previewImg.offsetLeft + previewImg.offsetWidth - 1) {\r\n        newLeft = previewImg.offsetLeft + previewImg.offsetWidth - 1 - newWidth;\r\n    }\r\n    if (newTop + newHeight > previewImg.offsetTop + previewImg.offsetHeight - 1) {\r\n        newTop = previewImg.offsetTop + previewImg.offsetHeight - 1 - newHeight;\r\n    }\r\n\r\n    var drawRect = $(elementId + \"_imageNavRect\");\r\n    dwDomSetStylesViaAttribute(drawRect, \"left:\" + newLeft + \"px;\" +\r\n                                         \"top:\" + newTop + \"px;\" +\r\n                                         \"width:\" + newWidth + \"px;\" +\r\n                                         \"height:\" + newHeight + \"px;\" +\r\n                                         \"visibility:visible\");\r\n\r\n    var drawRectInner = $(elementId + \"_imageNavRectInner\");\r\n    dwDomSetStylesViaAttribute(drawRectInner, \"width:\" + Math.max(0, newWidth - 1) + \"px;\" +\r\n                                              \"height:\" + Math.max(0, newHeight - 1) + \"px;\" +\r\n                                              \"visibility:visible\");\r\n\r\n}\r\n\r\n/**\r\n * Bei Größenänderungen des Fensters soll sich das Overview-Fenster neu ausrichten (es könnte in einer der rechten\r\n * Ecken sein).\r\n */\r\nfunction dwImageViewerScrollResize(elementId, hidePanWindow) {\r\n    if (!dwFrameworkInitFinished) {\r\n        return;\r\n    }\r\n    var image = dwImageViewerGetImage(elementId);\r\n    if (image == null) { // die Zeichnung existiert nicht mehr\r\n        return;\r\n    }\r\n\r\n    setTimeout(function() {\r\n        dwImageViewerUpdateOverviewVisibility(elementId, hidePanWindow);\r\n    }, 10);\r\n\r\n    if ((typeof (image) == \"undefined\") || (typeof (image.initialized) == \"undefined\") || (!image.initialized)) {\r\n        // Viewer ist noch nicht fertig initialisiert worden, oder bereits wieder entfernt\r\n        return;\r\n    }\r\n\r\n    // beim Maximieren von Desktop-Browsern und für die mobile GUI setTimeout() verwenden, da ansonsten falsche Breiten-\r\n    // und Höhenangaben in dwImageViewerCornerClicked() ausgewertet werden\r\n    setTimeout(function() {\r\n        dwImageViewerSetNormalizedZoom_immediately(image, true);\r\n    }, 50);\r\n}\r\n\r\n/**\r\n * Beim Drücken der Maustaste soll der Cursor geändert werden, bewegen scrollt das Bild.\r\n */\r\nfunction dwImageViewerImageMouseDown(e, elementId) {\r\n    if (dwUtilsIsClickOnScrollBar(e)) {\r\n        return;\r\n    }\r\n    dwImageViewerSetImageCursor(elementId, \"dwClosedCursor\");\r\n    var imagescroll = $(elementId + \"_imagescroll\");\r\n    DW_IMAGE_DRAGRECT = dwUtilsGetRelMouseCoords(e, imagescroll);\r\n}\r\n\r\n/**\r\n * Bewegen der Maus zum Verschieben der Zeichnung\r\n */\r\nfunction dwImageViewerImageMouseMove(event, elementId) {\r\n    if (DW_IMAGE_DRAGRECT != null) {\r\n        var imagescroll = $(elementId + \"_imagescroll\");\r\n        var dwPoint = dwUtilsGetRelMouseCoords(event, imagescroll);\r\n        imagescroll.scrollLeft -= dwPoint.x - DW_IMAGE_DRAGRECT.x;\r\n        imagescroll.scrollTop -= dwPoint.y - DW_IMAGE_DRAGRECT.y;\r\n        DW_IMAGE_DRAGRECT = dwUtilsGetRelMouseCoords(event, imagescroll);\r\n    }\r\n}\r\n\r\n/**\r\n * Zeigt das graue Bild mit der Lupe und setzt den Pointer-Cursor auf dem Thumbnail-Bild\r\n * @param event\r\n * @param elementId\r\n */\r\nfunction dwImageViewerImageMouseOverShowHoverPicture(event, elementId, completeElementId, withMagnifier) {\r\n    if (withMagnifier) {\r\n        var overlay = document.getElementById(elementId + \"_magnifier_overlay\");\r\n        if (!overlay) {\r\n            // bei 360°-Bildern gibts kein _imagescroll, hier wird die Id als completElementId übergeben\r\n            let scrollId = completeElementId ? completeElementId : elementId + \"_imagescroll\";\r\n            var imagescroll = document.getElementById(scrollId);\r\n            if (imagescroll != null) {\r\n                // Wir erzeugen ein DIV als Overlay, das beim MouseOut (auf sich selbst!) wieder entfernt wird\r\n                // damit klappt es auch bei komplett ausfüllenden Bildern, was bei background nicht ginge\r\n                let overlay = document.createElement(\"div\");\r\n                overlay.id = elementId + \"_magnifier_overlay\";\r\n                overlay.style.backgroundColor = 'rgba(0, 0, 0, 0.25)';\r\n                overlay.style.position = 'absolute';\r\n                overlay.style.width = '100%';\r\n                overlay.style.height = '100%';\r\n                overlay.style.cursor = 'pointer';\r\n                imagescroll.appendChild(overlay);\r\n                var controlForMouseOut = overlay; // der MouseOut-Listener muss aufs Overlay\r\n                if (imagescroll.plainImageOnly == false) {\r\n                    controlForMouseOut = imagescroll;       // die grab-Ebene hat höheren z-Index, daher Listener direkt auf den pannellum-Container\r\n                }\r\n                controlForMouseOut.onmouseout = function() {\r\n                    // Hier wieder entfernen\r\n                    dwImageViewerImageMouseOutHideHoverPicture(event, elementId);\r\n                };\r\n            }\r\n\r\n            var magnifier = document.getElementById(elementId + \"_magnifier\");\r\n            if (magnifier != null) {\r\n                magnifier.style.visibility = 'visible';\r\n            }\r\n        }\r\n    }\r\n\r\n    var tiles = document.getElementById(elementId + \"_tiles\");\r\n    if (tiles != null) {\r\n        var images = tiles.getElementsByTagName('img');\r\n        //soll eigentlich nur ein Bild sein\r\n        if (images != null && images.length > 0) {\r\n            for (var i = 0; i < images.length; i++) {\r\n                images[i].style.cursor = 'pointer';\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * Versteckt das graue Bild mit der Lupe\r\n * @param event\r\n * @param elementId\r\n */\r\nfunction dwImageViewerImageMouseOutHideHoverPicture(event, elementId) {\r\n    var overlay = document.getElementById(elementId + \"_magnifier_overlay\");\r\n    if (overlay != null) {\r\n        overlay.remove();\r\n    }\r\n\r\n    var magnifier = document.getElementById(elementId + \"_magnifier\");\r\n    if (magnifier != null) {\r\n        magnifier.style.visibility = 'hidden';\r\n    }\r\n}\r\n\r\n/**\r\n * Verschieben der Zeichnung abbrechen\r\n */\r\nfunction dwImageViewerImageMouseOut(elementId) {\r\n    if (DW_IMAGE_DRAGRECT != null) {\r\n        dwImageViewerStopImageDrag(elementId);\r\n    }\r\n}\r\n\r\n/**\r\n * Beim Loslassen der Maustaste soll der Cursor wiederhergestellt werden.\r\n */\r\nfunction dwImageViewerImageMouseUp(elementId) {\r\n    if (DW_IMAGE_DRAGRECT != null) {\r\n        dwImageViewerStopImageDrag(elementId);\r\n    }\r\n}\r\n\r\nfunction dwImageViewerStopImageDrag(elementId) {\r\n    dwImageViewerSetImageCursor(elementId, \"dwOpenCursor\");\r\n    DW_IMAGE_DRAGRECT = null;\r\n}\r\n\r\nfunction dwImageViewerSetImageCursor(elementId, cursorId) {\r\n    var image = dwImageViewerGetImage(elementId);\r\n    if (image == null) { // die Zeichnung existiert nicht mehr\r\n        return;\r\n    }\r\n\r\n    var cursorURL = image.getAttribute(cursorId);\r\n    image.style.cursor = cursorURL;\r\n    $(elementId + \"_imagescroll\").style.cursor = cursorURL;\r\n}\r\n\r\n/**\r\n * Scrollen durch Bewegen des Mausrades\r\n */\r\nfunction dwImageViewerMouseWheel(event, elementId) {\r\n    if (DW_IMAGE_IN_ZOOM_EVENT) {\r\n        return;\r\n    }\r\n    DW_IMAGE_IN_ZOOM_EVENT = true;\r\n    try {\r\n        var viewerElement = $(elementId);\r\n        var image = dwImageViewerGetImage(elementId);\r\n        if (image == null) { // kann durch die Verwendung von setTimeout() passieren\r\n            return;\r\n        }\r\n\r\n        if (image.plainImageOnly) {\r\n            DW_IMAGE_IN_ZOOM_EVENT = false;\r\n            return;\r\n        }\r\n\r\n        var diff = 0;\r\n        if (event.wheelDelta) { // IE\r\n            diff = -event.wheelDelta;\r\n        }\r\n        if (event.detail) {     // FF\r\n            diff = event.detail / 3;\r\n        }\r\n        var newZoom = image.dwCurrentZoomLevel;\r\n        var zoomFactor = (diff < 0) ? 1.2 : 1 / 1.2;\r\n        newZoom = newZoom * zoomFactor;\r\n        newZoom = Math.min(20, Math.max(1, newZoom));\r\n        var viewerWidth = viewerElement.offsetWidth;\r\n        var viewerHeight = viewerElement.offsetHeight;\r\n        var eventPointRelativeToImage = dwUtilsGetRelMouseCoords(event, image);\r\n        var eventPointRelativeToDisplay = dwUtilsGetRelMouseCoords(event, viewerElement);\r\n        var factor = Math.max(image.dwWidth / image.offsetWidth, image.dwHeight / image.offsetHeight);\r\n        var newX = (eventPointRelativeToImage.x - image.offsetLeft) * factor;\r\n        var newY = (eventPointRelativeToImage.y - image.offsetTop) * factor;\r\n        // Jetzt würde newX/newY so gemacht werden, dass es in die Mitte kommt. Das wollen wir aber nicht. Wir verschieben\r\n        // es, so dass der Punkt wieder unter der Maus gemacht wird\r\n        newX -= (eventPointRelativeToDisplay.x - (viewerWidth / 2)) * factor / zoomFactor;\r\n        newY -= (eventPointRelativeToDisplay.y - (viewerHeight / 2)) * factor / zoomFactor;\r\n        var newCenterPoint = new DWPoint(newX, newY);\r\n        // Direkt machen (-1) weil wir sonst beim nächsten hier noch nicht die neuesten image.offsetLeft usw. hätten\r\n        dwImageViewerSetNormalizedZoom(image, newZoom, newCenterPoint, -1);\r\n    } catch (exception) {\r\n    }\r\n    if (event.preventDefault) {\r\n        event.preventDefault();\r\n    }\r\n    event.returnValue = false;\r\n    DW_IMAGE_IN_ZOOM_EVENT = false;\r\n}\r\n\r\nfunction setLoadingVisible(imageId, value) {\r\n    var loadingLayer = $(imageId + \"_loading\");\r\n    if (loadingLayer) {\r\n        dwDomSetStyle(loadingLayer, \"display\", value ? \"\" : \"none\")\r\n    }\r\n}\r\n\r\nfunction dwImageLoadImageInSrc(image, width, height, forceNewImage) {\r\n    if (image.useOriginalImage) {\r\n        var src = image.dwImgSrcPrefix + \"&forViewer=true\";\r\n        if (image.useTiffOnClient) {\r\n            image.setAttribute(\"qs_need_tiff_conversion\", true);\r\n            src += \"&accepttiff=true\"\r\n        }\r\n\r\n        var loadedImage = image.hasAttribute(\"q_loaded_image\") ? image.getAttribute(\"q_loaded_image\") : undefined;\r\n\r\n        if (loadedImage !== src) {\r\n            // Orignalbild\r\n            image.onload = function() {\r\n                image.dwLoaded = true;\r\n                if (image.hotspots != null) {\r\n                    for (var i = 0; i < image.hotspots.length; i++) {\r\n                        var hotspot = image.hotspots[i];\r\n                        if (hotspot.span.dwCanvas) {\r\n                            dwImagePaintHotspot(hotspot.span);\r\n                        }\r\n                    }\r\n                }\r\n                // Loading mit verzögerung abschalten, weil das Rendern am Browser noch etwas brauchen kann und man sonst ein leeres Bild sieht\r\n                setTimeout(function() {\r\n                    setLoadingVisible(image.elementId, false);\r\n                }, 200);\r\n            };\r\n            image.dwLoaded = false;\r\n\r\n            image.setAttribute(\"q_loaded_image\", src);\r\n\r\n            image.src = src;\r\n\r\n            // Loadingpanel\r\n            setLoadingVisible(image.elementId, true);\r\n        }\r\n    } else {\r\n        // Schauen ob es wirklich eine neue Version ist\r\n        if (forceNewImage || (image.dwCurrentImageWidth != width)) {\r\n            image.dwCurrentImageWidth = width;\r\n            image.dwCurrentImageHeight = height;\r\n            if (image.dwTileSize > 0) {\r\n                // Breite und Höhe des Gesamtbildes für alle Kacheln bestimmen\r\n                var imageWidth = width;\r\n                var imageHeight = height;\r\n                if (image.dwClientUpscale) {\r\n                    if (imageWidth > image.dwWidth) {\r\n                        imageWidth = image.dwWidth;\r\n                    }\r\n                    if (imageHeight > image.dwHeight) {\r\n                        imageHeight = image.dwHeight;\r\n                    }\r\n                }\r\n                image.dwLastImageWidthForTiles = imageWidth;\r\n                image.dwLastImageHeightForTiles = imageHeight;\r\n\r\n                var zoomLevelKey = imageWidth + \"x\" + imageHeight;\r\n                var tilesInfo = image.dwTileInfosForAllZoomLevels[zoomLevelKey];\r\n                if (tilesInfo == null) {\r\n                    tilesInfo = new Object();\r\n                    tilesInfo.imageWidth = imageWidth;\r\n                    tilesInfo.imageHeight = imageHeight;\r\n                    tilesInfo.tileSize = image.dwTileSize;\r\n                    tilesInfo.tiles = dwImageViewerCreateTilesArray(imageWidth, imageHeight, tilesInfo.tileSize);\r\n                    image.dwTileInfosForAllZoomLevels[zoomLevelKey] = tilesInfo;\r\n                } else {\r\n                    // bereits existierende Kacheln vom aktuellen Zoom-Level als aktiv setzen\r\n                    dwImageViewerSetCurrentTiles(image, tilesInfo.tiles, tilesInfo.imageWidth, tilesInfo.imageHeight, tilesInfo.tileSize);\r\n                }\r\n\r\n                // Kacheln entfernen, die noch nicht geladen wurden\r\n                dwImageViewerRemoveUnloadedTilesForOtherZoomLevels(image, imageWidth);\r\n            } else {\r\n                // kein Tiling\r\n                image.onload = function() {\r\n                    image.dwLoaded = true;\r\n                    if (image.hotspots != null) {\r\n                        for (var i = 0; i < image.hotspots.length; i++) {\r\n                            var hotspot = image.hotspots[i];\r\n                            if (hotspot.span.dwCanvas) {\r\n                                dwImagePaintHotspot(hotspot.span);\r\n                            }\r\n                        }\r\n                    }\r\n                };\r\n                image.dwLoaded = false;\r\n                image.src = image.dwImgSrcPrefix + \"&width=\" + width + \"&height=\" + height + \"&inctrans=true\";\r\n            }\r\n        }\r\n    }\r\n    image.style.visibility = \"visible\";\r\n    if (framework_doctype == DOCTYPE_HTML_5) {\r\n        image.style.overflow = \"hidden\";\r\n    }\r\n    if (dwFrameworkShowDevelopmentMessages()) {\r\n        dwFrameworkShowHint(\"IMAGE\", \"IMAGE ORIG (Server): \" + image.dwWidth + \"x\" + image.dwHeight +\r\n                                     \" SRC (Client): \" + width + \"x\" + height, \"#ffca58\", \"#000000\");\r\n    }\r\n}\r\n\r\n/**\r\n * Alle noch nicht geladenen Kacheln entfernen (außer für den aktuellen Zoom-Level mit der übergebenen Kachelnbreite).\r\n */\r\nfunction dwImageViewerRemoveUnloadedTilesForOtherZoomLevels(image, imageWidth) {\r\n    for (var otherZoomLevelKey in image.dwTileInfosForAllZoomLevels) {\r\n        var tilesInfoForOtherZoomLevel = image.dwTileInfosForAllZoomLevels[otherZoomLevelKey];\r\n        if ((tilesInfoForOtherZoomLevel != null) && (tilesInfoForOtherZoomLevel.imageWidth != imageWidth)) {\r\n            var tiles = tilesInfoForOtherZoomLevel.tiles;\r\n            for (var posY = 0; posY < tiles.length; posY++) {\r\n                var row = tiles[posY];\r\n                if (row != null) {\r\n                    for (var posX = 0; posX < row.length; posX++) {\r\n                        dwImageViewerRemoveTileFromRow(image, row, posX, false);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * Alle Kacheln des übergebenen Kachel-Arrays in den Vordergrund bringen und alle nicht mehr benötigten Kacheln anderer\r\n * Zoom-Levels entfernen.\r\n */\r\nfunction dwImageViewerSetCurrentTiles(image, tiles, imageWidth, imageHeight, tileSize) {\r\n    for (var posY = 0; posY < tiles.length; posY++) {\r\n        var row = tiles[posY];\r\n        if (row != null) {\r\n            for (var posX = 0; posX < row.length; posX++) {\r\n                var tileDiv = row[posX];\r\n                if (tileDiv != null) {\r\n                    try {\r\n                        if (image.contains(tileDiv)) {\r\n                            image.removeChild(tileDiv);\r\n                        }\r\n                    } catch (e) {\r\n                        // kann passieren, wenn tileDiv gerade entfernt wurde\r\n                    }\r\n                    image.appendChild(tileDiv);\r\n\r\n                    // falls die Kachel bereits geladen wurde, alle teilweise überdeckten Kacheln von anderen Zoom-Levels entfernen\r\n                    if (tileDiv.dwLoaded) {\r\n                        dwImageViewerRemoveOtherZoomLevelTiles(image, posX, posY, imageWidth, imageHeight, true);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * Erzeugt eine Kachel für eine bestimmte Position\r\n */\r\nfunction dwImageViewerCreateTile(image, tiles, x, y, imageWidth, imageHeight, tileSize) {\r\n    var tileDiv = document.createElement(\"span\");\r\n    tiles[y][x] = tileDiv;\r\n    tileDiv.style.position = \"absolute\";\r\n    tileDiv.style.left = (tileSize * x) + \"px\";\r\n    tileDiv.style.top = (tileSize * y) + \"px\";\r\n    if (!image.autoCloseWindows) {\r\n        tileDiv.autoCloseWindows = false;\r\n    }\r\n\r\n    var tile = document.createElement(\"img\");\r\n    tile.id = image.elementId + \"_tile_\" + x + \"_\" + y + \"_\" + imageWidth + \"x\" + imageHeight;\r\n    tile.style.height = \"100%\";\r\n    tile.style.width = \"100%\";\r\n    tileDiv.tile = tile;\r\n    tileDiv.appendChild(tile);\r\n\r\n    if ((framework_browserType == DWFRAMEWORK_BROWSER_TYPE_IE) && (framework_browserVersion.indexOf(\"11.\") != -1)) {\r\n        // IE 11 kann nicht mit mehreren onload umgehen, deshalb der Workaround ohne transpixel.png\r\n        // onload für echte Kachel\r\n        tile.onload = function() {\r\n            try {\r\n                if (tileDiv.dwRemoved) {\r\n                    tileDiv.dwLoaded = false;\r\n                    tile.onload = null;\r\n                    tile.src = image.transpixelUrl;\r\n                    return;\r\n                }\r\n\r\n                tileDiv.dwLoaded = true;\r\n                var isCurrentZoomLevel = imageWidth == image.dwLastImageWidthForTiles;\r\n                dwImageViewerRemoveOtherZoomLevelTiles(image, x, y, imageWidth, imageHeight, isCurrentZoomLevel);\r\n                if (image.hotspots != null) {\r\n                    for (var i = 0; i < image.hotspots.length; i++) {\r\n                        var hotspot = image.hotspots[i];\r\n                        if (hotspot.span.dwCanvas) {\r\n                            dwImagePaintHotspot(hotspot.span);\r\n                        }\r\n                    }\r\n                }\r\n            } catch (exception) {\r\n                // Zeile bitte so lassen damit wir immer alle Codestellen per Volltextsuche finden. Das kann man nicht auslagern in eine Datei.\r\n                if (typeof (framework_isActive) == 'undefined' || !framework_isActive) {\r\n                    return;\r\n                }\r\n                throw exception;\r\n            }\r\n        };\r\n\r\n        // Kachel-URL setzen\r\n        var src = image.dwImgSrcPrefix;\r\n        src += (src.indexOf(\"?\") == -1) ? \"?\" : \"&\";\r\n        src += \"tileX=\" + x + \"&tileY=\" + y + \"&imgW=\" + imageWidth + \"&imgH=\" + imageHeight + \"&inctrans=true\";\r\n        src = dwImageViewerModifyFileOnlyMode(src);\r\n        tile.src = src;\r\n        image.appendChild(tileDiv);\r\n    } else {\r\n        // onload für image.transpixelUrl\r\n        tile.onload = function() {\r\n            try {\r\n                if (tileDiv.dwRemoved) {\r\n                    tile.onload = null;\r\n                    return;\r\n                }\r\n\r\n                // onload für echte Kachel\r\n                tile.onload = function() {\r\n                    try {\r\n                        if (tileDiv.dwRemoved) {\r\n                            tileDiv.dwLoaded = false;\r\n                            tile.onload = null;\r\n                            tile.src = image.transpixelUrl;\r\n                            return;\r\n                        }\r\n\r\n                        tileDiv.dwLoaded = true;\r\n                        var isCurrentZoomLevel = imageWidth == image.dwLastImageWidthForTiles;\r\n                        dwImageViewerRemoveOtherZoomLevelTiles(image, x, y, imageWidth, imageHeight, isCurrentZoomLevel);\r\n                        if (image.hotspots != null) {\r\n                            for (var i = 0; i < image.hotspots.length; i++) {\r\n                                var hotspot = image.hotspots[i];\r\n                                if (hotspot.span.dwCanvas) {\r\n                                    dwImagePaintHotspot(hotspot.span);\r\n                                }\r\n                            }\r\n                        }\r\n                    } catch (exception) {\r\n                        // Zeile bitte so lassen damit wir immer alle Codestellen per Volltextsuche finden. Das kann man nicht auslagern in eine Datei.\r\n                        if (typeof (framework_isActive) == 'undefined' || !framework_isActive) {\r\n                            return;\r\n                        }\r\n                        throw exception;\r\n                    }\r\n                };\r\n\r\n                // Kachel-URL setzen\r\n                var src = image.dwImgSrcPrefix;\r\n                src += (src.indexOf(\"?\") == -1) ? \"?\" : \"&\";\r\n                src += \"tileX=\" + x + \"&tileY=\" + y + \"&imgW=\" + imageWidth + \"&imgH=\" + imageHeight + \"&inctrans=true\";\r\n                src = dwImageViewerModifyFileOnlyMode(src);\r\n                tile.src = src;\r\n            } catch (exception) {\r\n                // Zeile bitte so lassen damit wir immer alle Codestellen per Volltextsuche finden. Das kann man nicht auslagern in eine Datei.\r\n                if (typeof (framework_isActive) == 'undefined' || !framework_isActive) {\r\n                    return;\r\n                }\r\n                throw exception;\r\n            }\r\n        };\r\n        tile.src = image.transpixelUrl;\r\n        image.appendChild(tileDiv);\r\n    }\r\n}\r\n\r\n/**\r\n * Erzeugt das Kachel-Array beim Ändern der Auflösungsstufe.\r\n */\r\nfunction dwImageViewerCreateTilesArray(imageWidth, imageHeight, tileSize) {\r\n    var maxTilesX = Math.ceil(imageWidth / tileSize);\r\n    var maxTilesY = Math.ceil(imageHeight / tileSize);\r\n\r\n    // Neues Kachel-Array anlegen\r\n    var tiles = new Array(maxTilesY);\r\n    for (var i = 0; i < maxTilesY; i++) {\r\n        tiles[i] = new Array(maxTilesX);\r\n    }\r\n\r\n    return tiles;\r\n}\r\n\r\n/**\r\n * Entfernt die Kachel an der angegebenen x-Position aus der übergebenen Zeile (je nach Wert von removeAlsoIfLoaded auch dann,\r\n * wenn sie bereits geladen wurde).\r\n */\r\nfunction dwImageViewerRemoveTileFromRow(image, tilesRow, posX, removeAlsoIfLoaded) {\r\n    var tileDiv = tilesRow[posX];\r\n    if ((tileDiv != null) && (removeAlsoIfLoaded || !tileDiv.dwLoaded)) {\r\n        tileDiv.dwRemoved = true;\r\n        tileDiv.tile.src = image.transpixelUrl;\r\n        try {\r\n            image.removeChild(tileDiv);\r\n        } catch (e) {\r\n            // kann passieren, wenn tileDiv noch nicht image als Kind hinzugefügt wurde\r\n        }\r\n        try {\r\n            tileDiv.removeChild(tileDiv.tile);\r\n        } catch (e) {\r\n            // nur zur Sicherheit, damit bei dieser Aufräumaktion keine Exception fliegt\r\n        }\r\n        tilesRow[posX] = null;\r\n    }\r\n}\r\n\r\n/**\r\n * Fügt fehlende Kacheln hinzu, wenn sich der Anzeigebereich bei gleicher Auflösungsstufe (isCurrentZoomLevel == true) ändert\r\n * (z.B. durch Scrollen) und aktualisiert die Größen und Positionen der Kacheln basierend auf dem aktuellen Zoom.\r\n */\r\nfunction dwImageViewerUpdateTiles(image, offsetWidth, offsetHeight, tiles, imageWidth, imageHeight, tileSize, isCurrentZoomLevel) {\r\n    var maxTilesX = Math.ceil(imageWidth / tileSize);\r\n    var maxTilesY = Math.ceil(imageHeight / tileSize);\r\n\r\n    // tileSize an den aktuellen Darstellungsbereich für das Bild anpassen (kann größer als die erzeugten Tiles sein)\r\n    tileSize = Math.round(tileSize * offsetWidth / imageWidth);\r\n\r\n    // alle Kacheln in x- und y-Richtung\r\n    var startTilesX = 0;\r\n    var startTilesY = 0;\r\n    var endTilesX = maxTilesX - 1;\r\n    var endTilesY = maxTilesY - 1;\r\n\r\n    if (isCurrentZoomLevel) {\r\n        // nur sichtbare Kacheln in x- und y-Richtung bestimmen\r\n        var imagescroll = image.parentElement;\r\n        if (!imagescroll) { // kann passieren, wenn es beim Kacheln zu einem Fehler gekommen ist\r\n            return;\r\n        }\r\n\r\n        var visTop = imagescroll.scrollTop;\r\n        var visLeft = imagescroll.scrollLeft;\r\n        var visWidth = Math.min(offsetWidth, imagescroll.clientWidth);\r\n        var visHeight = Math.min(offsetHeight, imagescroll.clientHeight);\r\n\r\n        // Anzahl der benötigten Kacheln in x- und y-Richtung\r\n        startTilesX = Math.max(0, Math.min(maxTilesX - 1, Math.floor(visLeft / tileSize)));\r\n        startTilesY = Math.max(0, Math.min(maxTilesY - 1, Math.floor(visTop / tileSize)));\r\n        endTilesX = Math.min(maxTilesX - 1, Math.ceil((visLeft + visWidth) / tileSize));\r\n        endTilesY = Math.min(maxTilesY - 1, Math.ceil((visTop + visHeight) / tileSize));\r\n    }\r\n\r\n    for (var posY = 0; posY < maxTilesY; posY++) {\r\n        var row = tiles[posY];\r\n        if (row == null) {\r\n            // nur beim aktuellen Zoom-Level und im sichtbaren Bereich neue Kachel-Zeilen hinzufügen\r\n            if ((isCurrentZoomLevel) && (posY >= startTilesY) && (posY <= endTilesY)) {\r\n                row = new Array(endTilesX);\r\n                tiles[posY] = row;\r\n            } else {\r\n                continue;\r\n            }\r\n        }\r\n        for (var posX = 0; posX < maxTilesX; posX++) {\r\n            var tileDiv = row[posX];\r\n            if (tileDiv == null) {\r\n                // nur beim aktuellen Zoom-Level und im sichtbaren Bereich neue Kacheln hinzufügen\r\n                if ((isCurrentZoomLevel) && (posY >= startTilesY) && (posY <= endTilesY) && (posX >= startTilesX) && (posX <= endTilesX)) {\r\n                    dwImageViewerCreateTile(image, tiles, posX, posY, imageWidth, imageHeight, tileSize);\r\n                    tileDiv = row[posX];\r\n                } else {\r\n                    continue;\r\n                }\r\n            }\r\n\r\n            // beim aktuellen Zoom-Level alle noch nicht geladenen Kacheln im nicht sichtbaren Bereich entfernen\r\n            if (isCurrentZoomLevel && !tileDiv.dwLoaded && !((posY >= startTilesY) && (posY <= endTilesY) && (posX >= startTilesX) && (posX <= endTilesX))) {\r\n                dwImageViewerRemoveTileFromRow(image, row, posX, false);\r\n                continue;\r\n            }\r\n\r\n            // Kachel-Position und -Größe anpassen\r\n            tileDiv.style.left = (tileSize * posX) + \"px\";\r\n            tileDiv.style.top = (tileSize * posY) + \"px\";\r\n            if (posX == maxTilesX - 1) {\r\n                tileDiv.style.width = (offsetWidth - posX * tileSize) + \"px\";\r\n            } else {\r\n                tileDiv.style.width = tileSize + \"px\";\r\n            }\r\n            if (posY == maxTilesY - 1) {\r\n                tileDiv.style.height = (offsetHeight - posY * tileSize) + \"px\";\r\n            } else {\r\n                tileDiv.style.height = tileSize + \"px\";\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * Entfernt alle zumindest teilweise überdeckten Kacheln aus anderen Zoom-Levels, um Speicher zu sparen und für bessere Performance\r\n * auf mobilen Endgeräten (größere Auflösungen werden nur beim aktuellen Zoomlevel mit isCurrentZoomLevel == true entfernt).\r\n */\r\nfunction dwImageViewerRemoveOtherZoomLevelTiles(image, posX, posY, imageWidth, imageHeight, isCurrentZoomLevel) {\r\n    for (var otherZoomLevelKey in image.dwTileInfosForAllZoomLevels) {\r\n        var tilesInfoForOtherZoomLevel = image.dwTileInfosForAllZoomLevels[otherZoomLevelKey];\r\n        if ((tilesInfoForOtherZoomLevel != null) && ((tilesInfoForOtherZoomLevel.imageWidth < imageWidth)\r\n                                                     || (isCurrentZoomLevel && (tilesInfoForOtherZoomLevel.imageWidth > imageWidth)))) { // größere Auflösungen nur beim aktuellen Zoomlevel entfernen\r\n            var otherTiles = tilesInfoForOtherZoomLevel.tiles;\r\n            var otherTileSize = tilesInfoForOtherZoomLevel.tileSize;\r\n            var otherImageWidth = tilesInfoForOtherZoomLevel.imageWidth;\r\n            var otherImageHeight = tilesInfoForOtherZoomLevel.imageHeight;\r\n            var otherMaxTilesX = Math.ceil(otherImageWidth / otherTileSize); // inkl. unvollständigen Kacheln rechts\r\n            var otherMaxTilesY = Math.ceil(otherImageHeight / otherTileSize); // inkl. unvollständigen Kacheln unten\r\n\r\n            // Bestimmung der zumindest teilweise überdeckten Kacheln der anderen Auflösung in x- und y-Richtung\r\n            var tilePosFactorX = otherImageWidth / imageWidth;\r\n            var tilePosFactorY = otherImageHeight / imageHeight;\r\n            var startTilesX = Math.max(0, Math.min(otherMaxTilesX - 1, Math.floor(posX * tilePosFactorX)));\r\n            var startTilesY = Math.max(0, Math.min(otherMaxTilesY - 1, Math.floor(posY * tilePosFactorY)));\r\n            var endTilesX = Math.min(otherMaxTilesX - 1, Math.max(startTilesX, Math.ceil((posX + 1) * tilePosFactorX))); // 1 Kachel breit\r\n            var endTilesY = Math.min(otherMaxTilesY - 1, Math.max(startTilesY, Math.ceil((posY + 1) * tilePosFactorY))); // 1 Kachel hoch\r\n            for (var otherPosY = startTilesY; otherPosY <= endTilesY; otherPosY++) {\r\n                var otherRow = otherTiles[otherPosY];\r\n                if (otherRow != null) {\r\n                    for (var otherPosX = startTilesX; otherPosX <= endTilesX; otherPosX++) {\r\n                        dwImageViewerRemoveTileFromRow(image, otherRow, otherPosX, true);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * Zoomt in das Bild um den Faktor howMuch\r\n */\r\nfunction dwImageViewerZoomIn(elementId, howMuch) {\r\n    var image = dwImageViewerGetImage(elementId);\r\n    if (image == null) { // kann durch die Verwendung von setTimeout() passieren\r\n        return;\r\n    }\r\n\r\n    var zoomLevel = image.dwCurrentZoomLevel * (1.25 * howMuch);\r\n    dwImageViewerSetNormalizedZoom(image, zoomLevel, null, 50);\r\n}\r\n\r\n/**\r\n * Zoomt aus dem Bild um den Faktor howMuch\r\n */\r\nfunction dwImageViewerZoomOut(elementId, howMuch) {\r\n    var image = dwImageViewerGetImage(elementId);\r\n    if (image == null) { // kann durch die Verwendung von setTimeout() passieren\r\n        return;\r\n    }\r\n\r\n    var zoomLevel = image.dwCurrentZoomLevel / (1.25 * howMuch);\r\n    dwImageViewerSetNormalizedZoom(image, zoomLevel, null, 50);\r\n}\r\n\r\n/**\r\n * Zoomt 1:1\r\n */\r\nfunction dwImageViewerZoomFit(elementId) {\r\n    var image = dwImageViewerGetImage(elementId);\r\n    if (image == null) { // kann durch die Verwendung von setTimeout() passieren\r\n        return;\r\n    }\r\n\r\n    dwImageViewerSetNormalizedZoom(image, 1.0, null, 50);\r\n}\r\n\r\n/**\r\n * Liefert den Bildpunkt des Originalbildes der gerade in der Mitte angezeigt wird.\r\n * @param image\r\n */\r\nfunction dwImageViewerGetImageCenterPoint(image) {\r\n    var displayWidth = image.parentNode.offsetWidth;\r\n    var displayHeight = image.parentNode.offsetHeight;\r\n    var imageWidth = image.offsetWidth;\r\n    var imageHeight = image.offsetHeight;\r\n    var imageOrigWidth = image.dwWidth;\r\n    var imageOrigHeight = image.dwHeight;\r\n\r\n    if (displayWidth > imageWidth) {\r\n        var centerPointX = imageOrigWidth / 2.0;\r\n    } else {\r\n        var centerScreen = displayWidth / 2.0;\r\n        var centerPointX = (imageOrigWidth / imageWidth) * (image.parentNode.scrollLeft + centerScreen);\r\n    }\r\n    if (displayHeight > imageHeight) {\r\n        var centerPointY = imageOrigHeight / 2.0;\r\n    } else {\r\n        var centerScreen = displayHeight / 2.0;\r\n        var centerPointY = (imageOrigHeight / imageHeight) * (image.parentNode.scrollTop + centerScreen);\r\n    }\r\n\r\n    return new DWPoint(centerPointX, centerPointY);\r\n}\r\n\r\n/**\r\n * Scrollt zu einer bestimmten Bildposition\r\n * @param imageId\r\n * @param x\r\n * @param y\r\n */\r\nfunction dwImageViewerScrollImageToPosition(imageId, x, y) {\r\n    var image = dwImageViewerGetImage(imageId);\r\n    if (image == null) { // kann durch die Verwendung von setTimeout() passieren\r\n        return;\r\n    }\r\n\r\n    dwImageViewerScrollToPoint(image, new DWPoint(x, y), false);\r\n}\r\n\r\n/**\r\n * Zentriert auf die Bildkoordinate\r\n */\r\nfunction dwImageViewerSetImageCenterPoint(image, centerPoint) {\r\n    dwImageViewerScrollToPoint(image, centerPoint, true);\r\n}\r\n\r\n/**\r\n * Scrollt zu einer bestimmten Position\r\n * @param image\r\n * @param point\r\n * @param center gibt an, ob die Position zentriert werden soll\r\n */\r\nfunction dwImageViewerScrollToPoint(image, point, center) {\r\n    var displayWidth = image.parentNode.offsetWidth;\r\n    var displayHeight = image.parentNode.offsetHeight;\r\n    var imageWidth = parseInt(image.style.width);\r\n    var imageHeight = parseInt(image.style.height);\r\n    var imageOrigWidth = image.dwWidth;\r\n    var imageOrigHeight = image.dwHeight;\r\n\r\n    var newX = null;\r\n    var newY = null;\r\n    if (displayWidth < imageWidth) {\r\n        newX = point.x / (imageOrigWidth / imageWidth);\r\n        if (center) {\r\n            newX -= displayWidth / 2.0;\r\n        }\r\n    } else {\r\n        if (image.parentNode.scrollLeft != 0) {\r\n            // Im IE8 steht noch ein Scrollwert drin\r\n            newX = 0;\r\n        }\r\n    }\r\n    if (displayHeight < imageHeight) {\r\n        newY = point.y / (imageOrigHeight / imageHeight);\r\n        if (center) {\r\n            newY -= displayHeight / 2.0;\r\n        }\r\n    } else {\r\n        if (image.parentNode.scrollTop != 0) {\r\n            // Im IE8 steht noch ein Scrollwert drin\r\n            newY = 0;\r\n        }\r\n    }\r\n    if (newX != null) {\r\n        image.parentNode.scrollLeft = parseInt(newX);\r\n    }\r\n    if (newY != null) {\r\n        image.parentNode.scrollTop = parseInt(newY);\r\n    }\r\n}\r\n\r\nfunction dwImageViewerSetScrollPos(imageId, posX, posY) {\r\n    var image = dwImageViewerGetImage(imageId);\r\n    if (image == null) { // kann durch die Verwendung von setTimeout() passieren\r\n        return;\r\n    }\r\n\r\n    image.parentNode.scrollLeft = posX;\r\n    image.parentNode.scrollTop = posY;\r\n}\r\n\r\n\r\nfunction dwImageViewerSliderMoved(elementId, event) {\r\n    if (!event) {\r\n        event = window.event;\r\n    }\r\n    var target = dwUtilsGetEventTarget(event);\r\n    if ((event.type == \"click\") && (target.id != elementId + \"_slider\")) {     // z.B. Klick auf Knob\r\n        return;\r\n    }\r\n\r\n    var image = dwImageViewerGetImage(elementId);\r\n    if (image == null) { // kann durch die Verwendung von setTimeout() passieren\r\n        return;\r\n    }\r\n\r\n    var slider = $(elementId + \"_slider\");\r\n\r\n    var dwPoint = dwUtilsGetRelMouseCoords(event, slider);\r\n\r\n    var sliderKnob = $(elementId + \"_sliderKnob\");\r\n    var knobWidth = sliderKnob.offsetWidth;\r\n    var zoom = imageViewerSliderLogarithmToZoom(2000 * ((dwPoint.x - 3) / (slider.offsetWidth - knobWidth)));\r\n    dwImageViewerSetNormalizedZoom(image, zoom, null, 50);\r\n}\r\n\r\n/**\r\n * Zeichnet das gerade aufgezogene Rechteck zum Zoomen.\r\n */\r\nfunction dwImageViewerInternalDrawZoomRect(elementId, right, bottom) {\r\n    var zoomRect = $(elementId + \"_zoom2rect\");\r\n    var left = DW_IMAGE_ZOOMRECT.x;\r\n    var top = DW_IMAGE_ZOOMRECT.y;\r\n    if (right > left) {\r\n        zoomRect.style.left = left + \"px\";\r\n        zoomRect.style.width = right - left + \"px\";\r\n    } else {\r\n        zoomRect.style.left = right + \"px\";\r\n        zoomRect.style.width = left - right + \"px\";\r\n    }\r\n    if (bottom > top) {\r\n        zoomRect.style.top = top + \"px\";\r\n        zoomRect.style.height = bottom - top + \"px\";\r\n    } else {\r\n        zoomRect.style.top = bottom + \"px\";\r\n        zoomRect.style.height = top - bottom + \"px\";\r\n    }\r\n}\r\n\r\nfunction setCoursorStyleOnChildrenOfElement(cursor, elementId) {\r\n    for (var i = 0; i < $(elementId).getElementsByTagName('span').length; i++) {\r\n        var elem = $(elementId).getElementsByTagName('span')[i];\r\n        elem.style.cursor = cursor;\r\n    }\r\n}\r\n\r\n/**\r\n * (De-)/Aktivieren des Zoom-2-Rect-Modus\r\n * Dabei werden alle alten Listener ausgetauscht und zwischengespeichert und bei Deaktivieren wieder zurückgesetzt.\r\n */\r\nfunction dwImageViewerToggleZoomRect(elementId) {\r\n    var image = dwImageViewerGetImage(elementId);\r\n    if (image == null) { // kann durch die Verwendung von setTimeout() passieren\r\n        return;\r\n    }\r\n\r\n    image.panZoom2Rect = !image.panZoom2Rect;\r\n    dwImageViewerSetButtonPressed($(elementId + \"_zoomrect\"), image.panZoom2Rect);\r\n\r\n    var imageScroll = $(elementId + \"_imagescroll\");\r\n    var zoom2Rect = $(elementId + \"_zoom2rect\");\r\n\r\n    $(elementId).setAttribute(\"touchemulation\", !image.panZoom2Rect + \"\");\r\n\r\n    if (image.panZoom2Rect) {\r\n        // Zur Visualisierung dass man gerade einen Zeichnungsausschnitt wählt\r\n        image.style.cursor = \"crosshair\";\r\n        imageScroll.style.cursor = \"crosshair\";\r\n        var hotspotClickLayer = $(image.elementId + \"_hotspots_click\");\r\n        hotspotClickLayer.style.cursor = \"crosshair\";\r\n\r\n        setCoursorStyleOnChildrenOfElement(\"crosshair\", elementId);\r\n\r\n        image.dwImageViewerOldZoomMouseMove = zoom2Rect.onmousemove;\r\n        zoom2Rect.onmousemove = function(event) {\r\n        };\r\n\r\n        image.dwImageViewerOldImageMouseDown = image.onmousedown;\r\n        image.onmousedown = function(event) {\r\n        };\r\n\r\n        image.dwImageViewerOldImageMouseMove = image.onmousemove;\r\n        image.onmousemove = function(event) {\r\n        };\r\n\r\n        image.dwImageViewerOldImageMouseUp = image.onmouseup;\r\n        image.onmouseup = function(event) {\r\n        };\r\n\r\n        image.dwImageViewerOldScrollMouseDown = imageScroll.onmousedown;\r\n        imageScroll.onmousedown = function(event) {\r\n            event = dwFrameworkGetEvent(event);\r\n\r\n            /* Klick auf Scrollbar wird fälschlicherweise als MouseDown erkannt.\r\n             Für den IE wird in scrollUpdate das image.panZoom2Rect auf null zurückgesetzt, ein mouseUp kommt nicht mehr.\r\n             Im FF wird anhand des originalTargets geschaut, ob es ein Bestandteil der scrollbar ist. Blöderweise ist\r\n             das tagName aber nicht zugreifbar, daher wird davon ausgegangen, dass bei einer Exception auf die\r\n             Scrollbar geklickt wurde.\r\n             */\r\n            if (event.originalTarget != null) {\r\n                try {\r\n                    event.originalTarget.tagName;\r\n                } catch (e) {\r\n                    return;\r\n                }\r\n            }\r\n            // für internet explorer: Bei Klick auf Scrollbar nichts tun\r\n            var target = dwUtilsGetEventTarget(event);\r\n            if (target.componentFromPoint) {\r\n                if (!dwUtilsComponentFromPoint(event)) {\r\n                    return;\r\n                }\r\n            }\r\n\r\n            var imageScroll = $(elementId + \"_imagescroll\");\r\n            var relCoords = dwUtilsGetRelMouseCoords(event, imageScroll);\r\n            if (relCoords.x >= 0) {    // in mobiler Variante kommen nochmal 2 mouseDowns mit negativen Koordinaten\r\n                DW_IMAGE_ZOOMRECT = new DWPoint(relCoords.x, relCoords.y);\r\n                var zoomRect = $(elementId + \"_zoom2rect\");\r\n                zoomRect.style.left = relCoords.x + \"px\";\r\n                zoomRect.style.top = relCoords.y + \"px\";\r\n                zoomRect.style.width = \"0px\";\r\n                zoomRect.style.height = \"0px\";\r\n                zoomRect.style.display = \"inline\";\r\n            }\r\n        };\r\n\r\n        image.dwImageViewerOldScrollMouseMove = imageScroll.onmousemove;\r\n        imageScroll.onmousemove = function(event) {\r\n            if (DW_IMAGE_ZOOMRECT != null) {\r\n                event = dwFrameworkGetEvent(event);\r\n                var relCoords = dwUtilsGetRelMouseCoords(event, $(elementId + \"_imagescroll\"));\r\n                if (relCoords.x >= 0) {    // in mobiler Variante kommen nochmal 2 mouseDowns mit negativen Koordinaten\r\n                    dwImageViewerInternalDrawZoomRect(elementId, relCoords.x, relCoords.y);\r\n                }\r\n            }\r\n        };\r\n\r\n        image.dwImageViewerOldScrollMouseUp = imageScroll.onmouseup;\r\n        imageScroll.onmouseup = function(event) {\r\n            if (DW_IMAGE_ZOOMRECT == null) {\r\n                return;\r\n            }\r\n            var zoomRect = $(elementId + \"_zoom2rect\");\r\n            if (zoomRect.offsetWidth > 3 && zoomRect.offsetHeight > 3) {\r\n                var image = dwImageViewerGetImage(elementId);\r\n                if (image == null) { // kann durch die Verwendung von setTimeout() passieren\r\n                    return;\r\n                }\r\n\r\n                var displayWidth = image.offsetWidth;\r\n                var displayHeight = image.offsetHeight;\r\n\r\n                var factor = Math.max(image.dwWidth / displayWidth, image.dwHeight / displayHeight);\r\n                var widthOnUnzoomed = zoomRect.offsetWidth / image.dwCurrentZoomLevel;\r\n                var heightOnUnzoomed = zoomRect.offsetHeight / image.dwCurrentZoomLevel;\r\n\r\n                var zoom = Math.min(image.parentNode.offsetWidth / widthOnUnzoomed, image.parentNode.offsetHeight / heightOnUnzoomed);\r\n                var centerPoint = new DWPoint((zoomRect.offsetLeft + zoomRect.offsetWidth / 2 - image.offsetLeft) * factor,\r\n                                              (zoomRect.offsetTop + zoomRect.offsetHeight / 2 - image.offsetTop) * factor);\r\n\r\n                dwImageViewerSetNormalizedZoom(image, zoom, centerPoint, 50);\r\n            }\r\n\r\n            DW_IMAGE_ZOOMRECT = null;\r\n            zoomRect.style.display = \"none\";\r\n        };\r\n    } else {\r\n        // Und auch wieder abschalten\r\n        image.style.cursor = \"inherit\";\r\n        imageScroll.style.cursor = \"inherit\";\r\n        var hotspotClickLayer = $(image.elementId + \"_hotspots_click\");\r\n        setCoursorStyleOnChildrenOfElement(\"pointer\", elementId);\r\n\r\n        hotspotClickLayer.style.cursor = \"inherit\";\r\n        if (image.dwImageViewerOldScrollMouseDown != null) {\r\n            zoom2Rect.onmousemove = image.dwImageViewerOldZoomMouseMove;\r\n            image.onmousedown = image.dwImageViewerOldImageMouseDown;\r\n            image.onmousemove = image.dwImageViewerOldImageMouseMove;\r\n            image.onmouseup = image.dwImageViewerOldImageMouseUp;\r\n            imageScroll.onmousedown = image.dwImageViewerOldScrollMouseDown;\r\n            imageScroll.onmouseup = image.dwImageViewerOldScrollMouseUp;\r\n            imageScroll.onmousemove = image.dwImageViewerOldScrollMouseMove;\r\n\r\n            image.dwImageViewerOldZoomMouseMove = null;\r\n            image.dwImageViewerOldImageMouseDown = null;\r\n            image.dwImageViewerOldImageMouseMove = null;\r\n            image.dwImageViewerOldImageMouseUp = null;\r\n            image.dwImageViewerOldScrollMouseDown = null;\r\n            image.dwImageViewerOldScrollMouseUp = null;\r\n            image.dwImageViewerOldScrollMouseMove = null;\r\n\r\n            // Cursor zurücksetzen\r\n            dwImageViewerStopImageDrag(elementId);\r\n        }\r\n    }\r\n    if (typeof (dwAjaxGuiViewerImageZoomToRectStateChanged) != \"undefined\") {\r\n        dwAjaxGuiViewerImageZoomToRectStateChanged(elementId, elementId, image.panZoom2Rect, true);\r\n    } else if (typeof (callbackHandler) != \"undefined\") {\r\n        var ietkTop = (parent.ietktop) ? parent.ietktop : parent.parent.ietktop;\r\n        callbackHandler(ietkTop, \"genericRubberband\", image.panZoom2Rect ? \"1\" : \"0\");\r\n    }\r\n}\r\n\r\nfunction dwImageViewerTogglePan(elementId) {\r\n    var image = dwImageViewerGetImage(elementId);\r\n    if (image == null) { // kann durch die Verwendung von setTimeout() passieren\r\n        return;\r\n    }\r\n\r\n    image.panOpened = !image.panOpened;\r\n    dwImageViewerSetPan(elementId);\r\n\r\n    if (image.panOpened) {\r\n        // Hier muss es immer ausgeführt werden, auch wenn wir nicht zoomen. Hier werden die Slider Elemente hingerückt\r\n        var newZoomLevel = image.dwCurrentZoomLevel;\r\n        if (newZoomLevel < 2) {\r\n            newZoomLevel = 2.0;\r\n        }\r\n        // damit dwImageViewerSetNormalizedZoom() auch auf jeden Fall komplett ausgeführt wird\r\n        image.dwCurrentZoomLevel = 0;\r\n        dwImageViewerSetNormalizedZoom(image, newZoomLevel, null, 50);\r\n    }\r\n    if (typeof (dwAjaxGuiViewerImagePanOpenStateChanged) != \"undefined\") {\r\n        dwAjaxGuiViewerImagePanOpenStateChanged(elementId, elementId, image.panOpened, true);\r\n    } else if (typeof (callbackHandler) != \"undefined\") {\r\n        var ietkTop = (parent.ietktop) ? parent.ietktop : parent.parent.ietktop;\r\n        callbackHandler(ietkTop, \"genericPanWindow\", image.panOpened ? \"1\" : \"0\");\r\n    }\r\n}\r\n\r\n/**\r\n * Setzt das Pressed-Hintergrundbild für den Button und disabled das MouseOver.\r\n */\r\nfunction dwImageViewerSetButtonPressed(button, pressed) {\r\n    // Wenn die Funktion ohne den Button aufgerufen wird einfach nichts machen. Im Redesign ist der Button\r\n    // nicht über HTML-Mitteln gelöst sondenr mit nem RButton der für seinen Zustand schon selbst sorgt\r\n    if (button != null) {\r\n        if (pressed) {\r\n            dwDomRemoveEvent(button, \"onmouseout\", \" this.style.backgroundImage = \\\"url('\" + button.getAttribute(\"background-default\") + \"')\\\";\");\r\n            dwDomRemoveEvent(button, \"onmouseover\", \" this.style.backgroundImage = \\\"url('\" + button.getAttribute(\"background-hover\") + \"')\\\";\");\r\n\r\n            button.style.backgroundImage = \"url('\" + button.getAttribute(\"background-pressed\") + \"')\";\r\n            dwDomAddEvent(button, \"onmouseout\", \" this.style.backgroundImage = \\\"url('\" + button.getAttribute(\"background-pressed\") + \"')\\\";\");\r\n            dwDomAddEvent(button, \"onmouseover\", \" this.style.backgroundImage = \\\"url('\" + button.getAttribute(\"background-pressed\") + \"')\\\";\");\r\n            button.onmouseup = function(event) {\r\n            };\r\n        } else {\r\n            dwDomRemoveEvent(button, \"onmouseout\", \" this.style.backgroundImage = \\\"url('\" + button.getAttribute(\"background-pressed\") + \"')\\\";\");\r\n            dwDomRemoveEvent(button, \"onmouseover\", \" this.style.backgroundImage = \\\"url('\" + button.getAttribute(\"background-pressed\") + \"')\\\";\");\r\n\r\n            button.style.backgroundImage = \"url('\" + button.getAttribute(\"background-default\") + \"')\";\r\n            dwDomAddEvent(button, \"onmouseout\", \" this.style.backgroundImage = \\\"url('\" + button.getAttribute(\"background-default\") + \"')\\\";\");\r\n            dwDomAddEvent(button, \"onmouseover\", \" this.style.backgroundImage = \\\"url('\" + button.getAttribute(\"background-hover\") + \"')\\\";\");\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * Öffnet den Notiz-Dialog für die Zeichnung\r\n * @param menuItemId id des MenuEintrags aus dem Zeichnungs-Kontextmenü zum Editieren der Notizen\r\n */\r\nfunction dwImageViewerEditNotes(event, menuItemId) {\r\n    $(menuItemId).onclick(event);\r\n}\r\n\r\nfunction dwImageViewerSetPan(elementId) {\r\n    var image = dwImageViewerGetImage(elementId);\r\n    if (image == null) { // kann durch die Verwendung von setTimeout() passieren\r\n        return;\r\n    }\r\n\r\n    var overview = $(elementId + \"_overview\");\r\n    var slider = $(elementId + \"_slider\");\r\n    var imgPreview = $(elementId + \"_imgPreview\");\r\n    var drawRect = $(elementId + \"_imageNavRect\");\r\n    var openButton = $(elementId + \"_openbutton\");\r\n\r\n    var mouseOver = openButton.getAttribute(\"onmouseover\") + \"\"; // im IE kann es ein Event Objekt sein, deshalb mit \"\" zu String\r\n    if (image.panOpened) {\r\n        dwDomSetStylesViaAttribute(overview, \"width:\" + image.dwOverviewOpenWidth + \"px;height:\" + image.dwOverviewOpenHeight + \"px\");\r\n        slider.style.display = \"inline\";\r\n        imgPreview.style.display = \"inline\";\r\n        drawRect.style.display = \"inline\";\r\n        mouseOver = mouseOver.replace(dwUtilsJjs(image.dwOpenPanWindowText), dwUtilsJjs(image.dwClosePanWindowText));\r\n    } else {\r\n        dwDomSetStylesViaAttribute(overview, \"width:\" + image.dwOverviewClosedWidth + \"px;height:\" + image.dwOverviewClosedHeight + \"px\");\r\n        slider.style.display = \"none\";\r\n        imgPreview.style.display = \"none\";\r\n        drawRect.style.display = \"none\";\r\n        mouseOver = mouseOver.replace(dwUtilsJjs(image.dwClosePanWindowText), dwUtilsJjs(image.dwOpenPanWindowText));\r\n    }\r\n    // Tooltip ändern durch direkte Anpassung des Textes\r\n    openButton.setAttribute(\"onmouseover\", mouseOver);\r\n\r\n    drawRect.oldTop = 0;\r\n    drawRect.oldScrollTop = 0;\r\n    dwImageViewerSetButtonPressed(openButton, image.panOpened);\r\n\r\n    for (var j = 0; j < 2; j++) {\r\n        for (var i = 0; i < 2; i++) {\r\n            var corner = $(elementId + \"_overview\" + \"_arrow\" + (i + j * 2));\r\n            corner.style.display = image.panOpened ? \"inline\" : \"none\";\r\n        }\r\n    }\r\n\r\n    dwImageViewerRepositionPanWindow(elementId, image.panCorner);\r\n}\r\n\r\n/**\r\n * Reaktion auf Klick auf einen der Eckpunkte zum Verschieben des Overview-Panels\r\n */\r\nfunction dwImageViewerPanWindowCornerClicked(event, elementId, corner) {\r\n    dwFrameworkDisableEventBubbling(event);\r\n    dwImageViewerRepositionPanWindow(elementId, corner);\r\n}\r\n\r\n/**\r\n * Anpassen der Position des Overview-Panels bei Größenänderungen des Fensters,\r\n * Verschieben der SplitPane-Dividers, Anzeige/Verbergen der Scrollbalken\r\n */\r\nfunction dwImageViewerRepositionPanWindow(elementId, corner) {\r\n    var viewer = $(elementId);\r\n    var image = dwImageViewerGetImage(elementId);\r\n    if (image == null) { // kann durch die Verwendung von setTimeout() passieren\r\n        return;\r\n    }\r\n\r\n    var overview = $(elementId + \"_overview\");\r\n    var imagescroll = $(elementId + \"_imagescroll\");\r\n    var openButton = $(elementId + \"_openbutton\");\r\n    var openButtonImage = dwDomGetChildAtIndex(openButton, 0);\r\n\r\n    if ((viewer == null) || (image == null) || (overview == null) || (imagescroll == null)) { // kann durch die Verwendung von setTimeout() passieren\r\n        return;\r\n    }\r\n\r\n    if (corner != null) {\r\n        image.panCorner = corner;\r\n    }\r\n\r\n    // Breite der vertikalen Scrollbar\r\n    var hScroll = imagescroll.offsetWidth - imagescroll.clientWidth;\r\n    // Höhe der horizontalen Scrollbar\r\n    var vScroll = imagescroll.offsetHeight - imagescroll.clientHeight;\r\n\r\n    // Im IE 10 zeigt er normalerweise keine Scrollbars an, nur wenn man über das Element fährt. Deshalb kommt hier 0 zurück\r\n    // Berücksichtigen müssen wir die Scrollbars aber trotzdem\r\n    if (hScroll <= 0) {\r\n        hScroll = 17;\r\n    }\r\n    if (vScroll <= 0) {\r\n        vScroll = 17;\r\n    }\r\n    if (image.panCorner < 2) {\r\n        // Oben\r\n        overview.style.top = \"0\";\r\n    } else {\r\n        // Unten\r\n        var diff = viewer.offsetHeight - overview.offsetHeight - vScroll;\r\n        overview.style.top = diff + \"px\";\r\n    }\r\n\r\n    if (image.panCorner % 2 == 0) {\r\n        if (corner != null) {\r\n            // Links\r\n            overview.style.left = \"0\";\r\n            if (image.panOpened) {\r\n                // Links offen\r\n                overview.style.backgroundImage = \"url(\" + image.dwPanOpenedUrl + \")\";\r\n                openButtonImage.src = image.dwCloseButtonUrl;\r\n            } else {\r\n                // Links geschlossen\r\n                overview.style.backgroundImage = \"url(\" + image.dwPanClosedUrl + \")\";\r\n                openButtonImage.src = image.dwOpenButtonUrl;\r\n            }\r\n            var left = framework_isMobileView ? \"8px\" : \"9px\";\r\n            $(elementId + \"_zoominbutton\").style.left = left;\r\n            $(elementId + \"_zoomoutbutton\").style.left = left;\r\n            $(elementId + \"_zoomfitbutton\").style.left = left;\r\n            var zoomRect = $(elementId + \"_zoomrect\");\r\n            if (zoomRect != null) {\r\n                zoomRect.style.left = left;\r\n            }\r\n            $(elementId + \"_openbutton\").style.left = left;\r\n            $(elementId + \"_pandiv\").style.left = \"0px\";\r\n        }\r\n    } else {\r\n        // Rechts\r\n        var diff = viewer.offsetWidth - overview.offsetWidth - hScroll;\r\n        overview.style.left = diff + \"px\";\r\n        if (corner != null) {\r\n            if (image.panOpened) {\r\n                // Rechts offen\r\n                overview.style.backgroundImage = \"url(\" + image.dwPanOpenedRUrl + \")\";\r\n                openButtonImage.src = image.dwOpenButtonUrl;\r\n                var left = framework_isMobileView ? \"154px\" : \"155px\"; // = Gesamtbreite - BUTTON_WIDTH - GENERAL_INSETS\r\n                $(elementId + \"_zoominbutton\").style.left = left;\r\n                $(elementId + \"_zoomoutbutton\").style.left = left;\r\n                $(elementId + \"_zoomfitbutton\").style.left = left;\r\n                var zoomRect = $(elementId + \"_zoomrect\");\r\n                if (zoomRect != null) {\r\n                    zoomRect.style.left = left;\r\n                }\r\n                $(elementId + \"_openbutton\").style.left = left;\r\n            } else {\r\n                // Rechts geschlossen\r\n                overview.style.backgroundImage = \"url(\" + image.dwPanClosedUrl + \")\";\r\n                openButtonImage.src = image.dwCloseButtonUrl;\r\n                var left = framework_isMobileView ? \"8px\" : \"9px\";\r\n                $(elementId + \"_zoominbutton\").style.left = left;\r\n                $(elementId + \"_zoomoutbutton\").style.left = left;\r\n                $(elementId + \"_zoomfitbutton\").style.left = left;\r\n                var zoomRect = $(elementId + \"_zoomrect\");\r\n                if (zoomRect != null) {\r\n                    zoomRect.style.left = left;\r\n                }\r\n                $(elementId + \"_openbutton\").style.left = left;\r\n                $(elementId + \"_pandiv\").style.left = \"0px\";\r\n            }\r\n        }\r\n        $(elementId + \"_pandiv\").style.left = framework_isMobileView ? \"-44px\" : \"-32px\"; // = SLIDER_X - GENERAL_INSETS\r\n    }\r\n\r\n    if (corner != null) {\r\n        if (typeof (dwAjaxGuiViewerImagePanPositionChanged) != \"undefined\") {\r\n            dwAjaxGuiViewerImagePanPositionChanged(elementId, elementId, corner, true);\r\n        } else if (typeof (callbackHandler) != \"undefined\") {\r\n            var nr;\r\n            var IPP_POSITION_TOP_LEFT = 1;\r\n            var IPP_POSITION_BOTTOM_LEFT = 2;\r\n            var IPP_POSITION_BOTTOM_RIGHT = 3;\r\n            var IPP_POSITION_TOP_RIGHT = 4;\r\n            var JV_POSITION_TOP_LEFT = 0;\r\n            var JV_POSITION_TOP_RIGHT = 1;\r\n            var JV_POSITION_BOTTOM_LEFT = 2;\r\n            var JV_POSITION_BOTTOM_RIGHT = 3;\r\n            if (corner == JV_POSITION_TOP_LEFT) {\r\n                nr = IPP_POSITION_TOP_LEFT;\r\n            }\r\n            if (corner == JV_POSITION_BOTTOM_LEFT) {\r\n                nr = IPP_POSITION_BOTTOM_LEFT;\r\n            }\r\n            if (corner == JV_POSITION_BOTTOM_RIGHT) {\r\n                nr = IPP_POSITION_BOTTOM_RIGHT;\r\n            }\r\n            if (corner == JV_POSITION_TOP_RIGHT) {\r\n                nr = IPP_POSITION_TOP_RIGHT;\r\n            }\r\n            var ietkTop = (parent.ietktop) ? parent.ietktop : parent.parent.ietktop;\r\n            callbackHandler(ietkTop, \"genericPanWindowLocation\", nr);\r\n        }\r\n    }\r\n\r\n    overview.style.visibility = \"visible\";\r\n}\r\n\r\nfunction dwImageViewerAddHotspot(elementId, x1, y1, x2, y2, linkStyle, linkStyleMark, linkStyleFocused,\r\n                                 color, colorMark, colorFocused,\r\n                                 marked, focused, key, keyVer, uniqueId, text, type,\r\n                                 isWithHover, colorHover, isWithOutline, colorOutline, fontSize, fontName, fontWeight) {\r\n    var image = dwImageViewerGetImage(elementId);\r\n    if (image == null) { // kann durch die Verwendung von setTimeout() passieren\r\n        return;\r\n    }\r\n\r\n    var hotspot = new dwImageViewerHotspot(elementId, x1, y1, x2, y2, linkStyle, linkStyleMark, linkStyleFocused,\r\n                                           color, colorMark, colorFocused,\r\n                                           marked, focused, key, keyVer, uniqueId, text, type,\r\n                                           isWithHover, colorHover, isWithOutline, colorOutline, fontSize, fontName, fontWeight);\r\n    image.hotspots.push(hotspot);\r\n    return hotspot;\r\n}\r\n\r\nfunction dwImageViewerRemoveAllHotspots(elementId) {\r\n    let image = dwImageViewerGetImage(elementId);\r\n    if (image == null) { // kann durch die Verwendung von setTimeout() passieren\r\n        return;\r\n    }\r\n\r\n    let existingHotspots = image.hotspots;\r\n    image.hotspots = new Array();\r\n    for (let i = 0; i < existingHotspots.length; i++) {\r\n        let hotspotSpan = existingHotspots[i].span;\r\n        if (hotspotSpan != null) {\r\n            dwDomRemoveSelf(hotspotSpan);\r\n        }\r\n    }\r\n}\r\n\r\nfunction dwImageMarkHotspot(uniqueId, marked, scrollToMarkedHotspot, focused) {\r\n    var hotspotSpan = $(uniqueId);\r\n    var wasMarked = hotspotSpan.hotspot.marked;\r\n    hotspotSpan.hotspot.marked = marked;\r\n    hotspotSpan.hotspot.focused = focused;\r\n    dwImagePaintHotspot(hotspotSpan);\r\n    if (marked && !wasMarked && scrollToMarkedHotspot) {\r\n        dwImageScrollToHotspot(uniqueId);\r\n        return true;\r\n    }\r\n    return false;\r\n}\r\n\r\nfunction dwImageScrollToHotspot(uniqueId) {\r\n    var hotspotSpan = $(uniqueId);\r\n    var image = dwImageViewerGetImage(hotspotSpan.hotspot.elementId);\r\n    if (image != null) {\r\n        dwImageViewerSetImageCenterPoint(image, new DWPoint(hotspotSpan.hotspot.x1 + hotspotSpan.hotspot.width / 2,\r\n                                                            hotspotSpan.hotspot.y1 + hotspotSpan.hotspot.height / 2));\r\n    }\r\n}\r\n\r\nfunction dwImagePaintHotspot(hotspotSpan) {\r\n    var hotspot = hotspotSpan.hotspot;\r\n    var image = dwImageViewerGetImage(hotspot.elementId);\r\n    if (image == null) { // kann durch die Verwendung von setTimeout() passieren\r\n        return;\r\n    }\r\n\r\n    //Bei SVG Zeichnungen müssen Hotspotfarben manuell gesetzt werden, weil die Hotspots direkt im SVG gezeichnet sind\r\n    // Mind. hier muss man ändern wenn man EPlan SVG will\r\n    if ((image) && (image.viewerType == \"viewerimagesvgnative\")) {\r\n        dwImageSVGPaintHotspot(hotspot);\r\n        return;\r\n    }\r\n    var hotspotMarked = hotspot.marked;\r\n    var hotspotFocused = hotspot.focused;\r\n    var hotspotLinkStyle = hotspot.linkStyle;\r\n    var hotspotColor = hotspot.color;\r\n    if (hotspotMarked) {\r\n        if (hotspotFocused) {\r\n            hotspotLinkStyle = hotspot.linkStyleFocused;\r\n            hotspotColor = hotspot.colorFocused;\r\n        } else {\r\n            hotspotLinkStyle = hotspot.linkStyleMark;\r\n            hotspotColor = hotspot.colorMark;\r\n        }\r\n    } else {\r\n        if ((image) && !image.unmarkedHotspotsVisible) {\r\n            hotspotLinkStyle = DW_LINK_STYLE_NONE;\r\n            hotspotColor = \"transparent\"; // Ignoriert, da ohne Shape\r\n        }\r\n    }\r\n\r\n    var didWithCanvas = false;\r\n    var isEllipse = ((hotspotLinkStyle == DW_LINK_STYLE_ELLIPSE) || (hotspotLinkStyle == DW_LINK_STYLE_ELLIPSE_FULL));\r\n    // Nur bei Ellipse Canvas nehmen\r\n    if (isEllipse && framework_isWithCanvas) {\r\n        if (!hotspotSpan.dwCanvas) {\r\n            // Canvas anlegen\r\n            hotspotSpan.dwCanvas = document.createElement(\"canvas\");\r\n            hotspotSpan.appendChild(hotspotSpan.dwCanvas);\r\n            hotspotSpan.dwContext = hotspotSpan.dwCanvas.getContext(\"2d\");\r\n            hotspotSpan.dwContext.imageSmoothingEnabled = true;\r\n        }\r\n\r\n        image = dwImageViewerGetImage(hotspot.elementId);\r\n        if (!image) {\r\n            return; // kann bei Verwendung von Timeouts passieren, wenn die Zeichnung inzwischen gar nicht mehr angezeigt wird\r\n        }\r\n\r\n        var hotspotX = Math.floor(parseFloat(hotspotSpan.style.left) - parseFloat(image.style.left));\r\n        var hotspotY = Math.floor(parseFloat(hotspotSpan.style.top) - parseFloat(image.style.top));\r\n        var hotspotWidth = Math.ceil(parseFloat(hotspotSpan.style.width));\r\n        var hotspotHeight = Math.ceil(parseFloat(hotspotSpan.style.height));\r\n        if ((hotspotWidth <= 0.001) || (hotspotHeight <= 0.001)) {\r\n            // Noch nicht initialisiert\r\n            return;\r\n        }\r\n\r\n\r\n        // Nun die Hotspots zeichnen\r\n        if ((hotspotLinkStyle == DW_LINK_STYLE_FULL) || (hotspotLinkStyle == DW_LINK_STYLE_RECT)) {\r\n            dwImageDrawRectForHotspot(hotspotSpan, hotspotX, hotspotY, hotspotWidth, hotspotHeight, hotspotColor, hotspotLinkStyle);\r\n            didWithCanvas = true;\r\n        } else if ((hotspotLinkStyle == DW_LINK_STYLE_ELLIPSE_FULL) || (hotspotLinkStyle == DW_LINK_STYLE_ELLIPSE)) {\r\n            dwImageDrawEllipseForHotspot(hotspotSpan, hotspotX, hotspotY, hotspotWidth, hotspotHeight, hotspotColor, hotspotLinkStyle);\r\n            didWithCanvas = true;\r\n        } else if (hotspotLinkStyle == DW_LINK_STYLE_LINE) {\r\n            dwImageDrawLineForHotspot(hotspotSpan, hotspotX, hotspotY, hotspotWidth, hotspotHeight, hotspotColor);\r\n            didWithCanvas = true;\r\n        } else if (hotspotLinkStyle == DW_LINK_STYLE_NONE) {\r\n            // Nichts zu tun\r\n        }\r\n    }\r\n\r\n    if (didWithCanvas) {\r\n        // Bei Canvas brauchen wir das hier nicht anzeigen\r\n        hotspotSpan.style.borderWidth = \"0px\";\r\n        hotspotSpan.style.borderBottomWidth = \"0px\";\r\n        hotspotSpan.style.borderColor = \"transparent\";\r\n        hotspotSpan.style.backgroundColor = \"transparent\";\r\n        dwUtilsSetOpacity(hotspotSpan, 100);\r\n        dwUtilsSetOpacity(hotspotSpan.dwCanvas, 100);\r\n    } else {\r\n        dwUtilsSetOpacity(hotspotSpan, 100);\r\n        // Nach umschalten müssen wir das auch so machen\r\n        if (hotspotSpan.dwCanvas) {\r\n            dwUtilsSetOpacity(hotspotSpan.dwCanvas, 0);\r\n        }\r\n        // Ellipsen gehen nicht, deshalb Fallback auf Rect\r\n        if ((hotspotLinkStyle == DW_LINK_STYLE_FULL) || (hotspotLinkStyle == DW_LINK_STYLE_ELLIPSE_FULL)) {\r\n            hotspotSpan.style.borderWidth = \"0px\";\r\n            hotspotSpan.style.borderBottomWidth = \"0px\";\r\n            hotspotSpan.style.borderColor = \"transparent\";\r\n            hotspotSpan.style.backgroundColor = hotspotColor;\r\n        } else if ((hotspotLinkStyle == DW_LINK_STYLE_RECT) || (hotspotLinkStyle == DW_LINK_STYLE_ELLIPSE)) {\r\n            hotspotSpan.style.borderWidth = \"1px\";\r\n            hotspotSpan.style.borderBottomWidth = \"1px\";\r\n            hotspotSpan.style.borderStyle = \"solid\";\r\n            hotspotSpan.style.borderColor = hotspotColor;\r\n            hotspotSpan.style.backgroundColor = \"transparent\";\r\n        } else if (hotspotLinkStyle == DW_LINK_STYLE_LINE) {\r\n            hotspotSpan.style.borderWidth = \"0px\";\r\n            hotspotSpan.style.borderBottomWidth = \"1px\";\r\n            hotspotSpan.style.borderStyle = \"solid\";\r\n            hotspotSpan.style.borderColor = hotspotColor;\r\n            hotspotSpan.style.backgroundColor = \"transparent\";\r\n        } else if (hotspotLinkStyle == DW_LINK_STYLE_NONE) {\r\n            hotspotSpan.style.borderWidth = \"0px\";\r\n            hotspotSpan.style.borderBottomWidth = \"0px\";\r\n            hotspotSpan.style.borderColor = \"transparent\";\r\n            hotspotSpan.style.backgroundColor = \"transparent\";\r\n        } else if (hotspotLinkStyle == DW_LINK_STYLE_REDESIGN_RECT) {\r\n            // Im MaterialTheme soll der Hotspot fest einen gräulich/schwarzen Rahmen erhalten. Die Farbe die sonst\r\n            // für den Hotspot konfiguriert ist wird dann hier als Füllfarbe für das Rechteck verwendet.\r\n            hotspotSpan.style.borderWidth = \"1px\";\r\n            hotspotSpan.style.borderBottomWidth = \"1px\";\r\n            hotspotSpan.style.borderColor = \"#707070\";\r\n            hotspotSpan.style.backgroundColor = hotspotColor;\r\n        }\r\n    }\r\n}\r\n\r\nfunction dwImageDrawEllipseForHotspot(hotspotSpan, srcX, srcY, srcWidth, srcHeight, hotspotColor, hotspotLinkStyle) {\r\n    // Ellipse in jede Richtung um ellipsePaddingFactor größer als rechteckigen Bereich darstellen, damit die Ellipse\r\n    // nicht zu klein wird und der klickbare Bereich als in die Ellipse eingepasstes Rechteck stimmt (analog zu Classic);\r\n    // in der mobilen GUI keine Vergrößerung vornehmen, da dort die Hotspots sowieso schon vergrößert sind\r\n    var ellipsePaddingFactor = framework_isMobileView ? 0 : 0.2;\r\n    hotspotSpan.dwCanvas.style.position = \"absolute\";\r\n    hotspotSpan.dwCanvas.style.left = (-hotspotSpan.width * ellipsePaddingFactor) + \"px\";\r\n    hotspotSpan.dwCanvas.style.top = (-hotspotSpan.height * ellipsePaddingFactor) + \"px\";\r\n    hotspotSpan.dwCanvas.width = hotspotSpan.width * (1 + 2 * ellipsePaddingFactor);\r\n    hotspotSpan.dwCanvas.height = hotspotSpan.height * (1 + 2 * ellipsePaddingFactor);\r\n    hotspotSpan.dwCanvas.style.cursor = \"pointer\";\r\n\r\n    // Ellipse bei (1, 1) beginnen lassen bis (width - 2, height - 2), damit die Ellipse an den Rändern u.a. wegen Anti-Aliasing\r\n    // von dem Canvas nicht abgeschnitten wird\r\n    dwUtilsCanvasDrawEllipse(hotspotSpan.dwContext, 1, 1, hotspotSpan.dwCanvas.width - 2, hotspotSpan.dwCanvas.height - 2,\r\n                             hotspotColor, hotspotLinkStyle == DW_LINK_STYLE_ELLIPSE_FULL);\r\n}\r\n\r\nfunction dwImageDrawLineForHotspot(hotspotSpan, srcX, srcY, srcWidth, srcHeight, hotspotColor) {\r\n    hotspotSpan.dwCanvas.style.position = \"absolute\";\r\n    hotspotSpan.dwCanvas.style.left = \"0px\";\r\n    hotspotSpan.dwCanvas.style.top = \"0px\";\r\n    hotspotSpan.dwCanvas.width = hotspotSpan.width;\r\n    hotspotSpan.dwCanvas.height = hotspotSpan.height;\r\n    hotspotSpan.dwCanvas.style.cursor = \"pointer\";\r\n\r\n    dwUtilsCanvasDrawLine(hotspotSpan.dwContext, 0, hotspotSpan.dwCanvas.height - 1, hotspotSpan.dwCanvas.width,\r\n                          hotspotSpan.dwCanvas.height - 1, hotspotColor);\r\n}\r\n\r\nfunction dwImageDrawRectForHotspot(hotspotSpan, srcX, srcY, srcWidth, srcHeight, hotspotColor, hotspotLinkStyle) {\r\n    hotspotSpan.dwCanvas.style.position = \"absolute\";\r\n    hotspotSpan.dwCanvas.style.left = \"0px\";\r\n    hotspotSpan.dwCanvas.style.top = \"0px\";\r\n    hotspotSpan.dwCanvas.width = srcWidth;\r\n    hotspotSpan.dwCanvas.height = srcHeight;\r\n\r\n    dwUtilsCanvasDrawRect(hotspotSpan.dwContext, 0, 0, hotspotSpan.dwCanvas.width, hotspotSpan.dwCanvas.height,\r\n                          hotspotColor, hotspotLinkStyle == DW_LINK_STYLE_FULL);\r\n}\r\n\r\n/*\r\n * Es gibt keine separate dwImageClearHotspotMarks() Methode, weil:\r\n * 1. Sowohl der Zugriff auf image über $(elementId + \"_image\")\r\n * als auch das Durchlaufen aller Hotspots würde doppelt gemacht werden müssen\r\n * 2. Es könnte ein Flackern auftreten, wenn ein bereits markierter Hotspot erneut markiert werden soll,\r\n * weil er vorher zunächst gelöscht werden würde. Dieses Problem tritt in der kombinierten Methode nicht auf.\r\n *\r\n * Das Löschen aller Hotspot-Markierungen kann mit <code>dwImageMarkHotspotsForKey(elementId, \"\", \"\", true, false)</code> erfolgen.\r\n */\r\nfunction dwImageMarkHotspotsForKey(elementId, key, keyVer, clearHotspotMarks, scrollToMarkedHotspot, rightClicked, uniqueIdOfFocusedHotspot) {\r\n    var image = dwImageViewerGetImage(elementId);\r\n\r\n    // kann passieren, wenn diese Methode über setTimeout() von dwImageViewerInitEnd() aufgerufen wird und das image nicht mehr existiert\r\n    if (image == null) {\r\n        return;\r\n    }\r\n\r\n    dwImageSetLastHotspotKey(elementId, key, keyVer);\r\n    var markedHotspotIds = dwImageGetMarkedHotspotIds(elementId);\r\n\r\n    for (var i = 0; i < image.hotspots.length; i++) {\r\n        var hotspot = image.hotspots[i];\r\n        var markHotspot = (hotspot.key === key) && (hotspot.keyVer === keyVer);\r\n        if (clearHotspotMarks || markHotspot) {\r\n            // Wenn die Multiselektion aktiv ist und die anderen Hotspots nicht wieder \"entmarked\" werden sollen\r\n            // dann das markHotspot überschreiben in Abhängkeit davon ob der Hotspot schon markiert war. Das toggeled\r\n            // quasi die Selektion dieses Hotspots. Das darf aber nur bei Linksklick passieren, sonst wundert man sich\r\n            // warum der Hotspot deselektiert wird, wenn man das Kontextmenü vom Bild auf ihm aufrufen möchte\r\n            if (image.isMultiSelection && !clearHotspotMarks && !rightClicked) {\r\n                markHotspot = !dwUtilsIsInArray(markedHotspotIds, hotspot.uniqueId);\r\n            }\r\n            var focused = hotspot.uniqueId === uniqueIdOfFocusedHotspot;\r\n            var didScroll = dwImageMarkHotspot(hotspot.uniqueId, markHotspot, scrollToMarkedHotspot, focused);\r\n            if (didScroll) {\r\n                scrollToMarkedHotspot = false;\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\nfunction dwImageGetFocusedHotspotId(elementId) {\r\n    var image = dwImageViewerGetImage(elementId);\r\n\r\n    // kann passieren, wenn diese Methode über setTimeout() von dwImageViewerInitEnd() aufgerufen wird und das image nicht mehr existiert\r\n    if (image == null) {\r\n        return;\r\n    }\r\n    for (var i = 0; i < image.hotspots.length; i++) {\r\n        var hotspot = image.hotspots[i];\r\n        var hotspotSpan = $(hotspot.uniqueId);\r\n        var isFocused = hotspotSpan.hotspot.focused;\r\n        if (isFocused) {\r\n            return hotspot.uniqueId\r\n        }\r\n    }\r\n    return \"\";\r\n}\r\n\r\nfunction dwImageGetMarkedHotspotIds(elementId) {\r\n    var image = dwImageViewerGetImage(elementId);\r\n\r\n    // kann passieren, wenn diese Methode über setTimeout() von dwImageViewerInitEnd() aufgerufen wird und das image nicht mehr existiert\r\n    if (image == null) {\r\n        return;\r\n    }\r\n    var markedHotspotIds = [];\r\n    for (var i = 0; i < image.hotspots.length; i++) {\r\n        var hotspot = image.hotspots[i];\r\n        var hotspotSpan = $(hotspot.uniqueId);\r\n        var isMarked = hotspotSpan.hotspot.marked;\r\n        if (isMarked) {\r\n            markedHotspotIds.push(hotspot.uniqueId);\r\n        }\r\n    }\r\n    return markedHotspotIds;\r\n}\r\n\r\n/*\r\n * Scrollt in dem Bild zur angegebenen elementId zum Hotspot mit den angegebenen Daten.\r\n */\r\nfunction dwImageScrollToHotspotForKey(elementId, key, keyVer) {\r\n    var image = dwImageViewerGetImage(elementId);\r\n\r\n    // kann passieren, wenn das image nicht mehr existiert\r\n    if (image == null) {\r\n        return;\r\n    }\r\n\r\n    for (var i = 0; i < image.hotspots.length; i++) {\r\n        var hotspot = image.hotspots[i];\r\n        if ((hotspot.key == key) && (hotspot.keyVer == keyVer)) {\r\n            dwImageScrollToHotspot(hotspot.uniqueId);\r\n            return;\r\n        }\r\n    }\r\n}\r\n\r\n/*\r\n * Muss aufgerufen werden, um sich den letzten gewählten Hotspot zu merken (z.B. wenn zwischenzeitlich der ImageViewer\r\n * mal durch andere Controls ausgetauscht wurde).\r\n */\r\nfunction dwImageSetLastHotspotKey(elementId, key, keyVer) {\r\n    // Hotspot-Daten für neue Instanzen mit gleicher elementId merken\r\n    DW_IMAGE_LAST_HOTSPOT_KEY = key;\r\n    DW_IMAGE_LAST_HOTSPOT_KEY_VER = keyVer;\r\n\r\n    // Hotspot-Daten in dieser Instanz merken (notwendigen bei mehreren gleichzeitigen ImageViewern)\r\n    var image = dwImageViewerGetImage(elementId);\r\n\r\n    // kann passieren, wenn das image nicht mehr existiert\r\n    if (image == null) {\r\n        return;\r\n    }\r\n\r\n    image.lastHotspotKey = key;\r\n    image.lastHotspotKeyVer = keyVer;\r\n}\r\n\r\n/**\r\n * Schaltet die Hotspots an/aus\r\n * @param elementId\r\n */\r\nfunction dwImageToggleUnmarkedHotspotsVisibility(elementId) {\r\n    var image = dwImageViewerGetImage(elementId);\r\n    if (image == null) { // kann durch die Verwendung von setTimeout() passieren\r\n        return;\r\n    }\r\n\r\n    dwImageSetUnmarkedHotspotsVisibility(elementId, !image.unmarkedHotspotsVisible);\r\n}\r\n\r\n/**\r\n * Schaltet die Hotspots an/aus\r\n * @param elementId\r\n */\r\nfunction dwImageSetUnmarkedHotspotsVisibility(elementId, value) {\r\n    var image = dwImageViewerGetImage(elementId);\r\n    if (image == null) { // kann durch die Verwendung von setTimeout() passieren\r\n        return;\r\n    }\r\n\r\n    image.unmarkedHotspotsVisible = value;\r\n    for (var i = 0; i < image.hotspots.length; i++) {\r\n        var hotspot = image.hotspots[i];\r\n        var hotspotSpan = $(hotspot.uniqueId);\r\n        dwImagePaintHotspot(hotspotSpan)\r\n    }\r\n}\r\n\r\nfunction dwImageSetMultiSelection(elementId, value) {\r\n    var image = dwImageViewerGetImage(elementId)\r\n    if (image == null) { // kann durch die Verwendung von setTimeout() passieren\r\n        return;\r\n    }\r\n\r\n    image.isMultiSelection = value;\r\n}\r\n\r\n/**\r\n * Reagiert auf mouseover / mouseout Events der Leisten zum Blättern zwischen den Bildern\r\n *\r\n * Delegiert wichtige Mouse Event Handler zu anderen Objekten weiter\r\n * @param 1:isOver, 0:isOut, -1:ShowAlways\r\n */\r\nfunction dwImageNavigationBarMouseMoveHandler(elementId, navigationBarId, isOver) {\r\n    var imagescroll = $(elementId + \"_imagescroll\");\r\n    var navigationBar = $(navigationBarId);\r\n    var nextBar = $(elementId + \"_nav_next\");\r\n    if (nextBar) {\r\n        if (dwUtilsHasVerticalOverflow(imagescroll)) {\r\n            var scrollWidth = dwUtilsGetScrollbarWidth(imagescroll);\r\n            nextBar.style.right = scrollWidth + \"px\";\r\n        } else {\r\n            nextBar.style.right = \"0\";\r\n        }\r\n    }\r\n    if (isOver == 1) {     // einblenden\r\n        dwUtilsSetOpacity(navigationBar, 100);\r\n        navigationBar.onclick = function(event) {\r\n            dwImageNavigationBarMouseClickedHandler(event, elementId, navigationBar.getAttribute(\"imageIndex\"))\r\n        };\r\n        navigationBar.ondblclick = function(event) {\r\n            var intersectingHotspot = dwImageIsNavigationBarMouseClickIntersectingHotspot(event, elementId);\r\n            if (intersectingHotspot) {\r\n                dwImageNavigationBarEventRedirectHandler(event, intersectingHotspot.span);\r\n            }\r\n        };\r\n        navigationBar.onmousemove = function(event) {\r\n            var intersectingHotspot = dwImageIsNavigationBarMouseClickIntersectingHotspot(event, elementId);\r\n            if (intersectingHotspot) {\r\n                // Aktuell wird ein Hotspot überlagert ...\r\n                if (navigationBar.hotspotWithTooltip) {\r\n                    if (navigationBar.hotspotWithTooltip.span.id != intersectingHotspot.span.id) {\r\n                        // Alten Hotspot Tooltip ausblenden ...\r\n                        dwImageNavigationBarDispatchMouseEvent(event, \"mouseout\", navigationBar.hotspotWithTooltip.span);\r\n                        // Neuen Hotspot Tooltip einblenden ...\r\n                        dwImageNavigationBarDispatchMouseEvent(event, \"mouseover\", intersectingHotspot.span);\r\n                        navigationBar.hotspotWithTooltip = intersectingHotspot;\r\n                    }\r\n                    // Aktuelle Mouse Position an den Tooltip weitergeben (onmousemove)\r\n                    dwImageNavigationBarEventRedirectHandler(event, intersectingHotspot.span);\r\n                } else {\r\n                    dwImageNavigationBarDispatchMouseEvent(event, \"mouseover\", intersectingHotspot.span);\r\n                    navigationBar.hotspotWithTooltip = intersectingHotspot;\r\n                }\r\n\r\n            } else {\r\n                var oldHotspot = navigationBar.hotspotWithTooltip;\r\n                if (oldHotspot) {\r\n                    dwImageNavigationBarDispatchMouseEvent(event, \"mouseout\", oldHotspot.span);\r\n                    navigationBar.hotspotWithTooltip = null;\r\n                }\r\n            }\r\n\r\n        };\r\n\r\n        var defaultRedirectFunction = function(event) {\r\n            var imagescroll = $(elementId + \"_imagescroll\");\r\n            dwImageNavigationBarEventRedirectHandler(event, imagescroll);\r\n        };\r\n        navigationBar.onmouseup = defaultRedirectFunction;\r\n        navigationBar.onmousewheel = defaultRedirectFunction;\r\n        if (!(navigationBar.getAttribute(\"inited\")) && navigationBar.addEventListener) {\r\n            navigationBar.setAttribute(\"inited\", true);\r\n            navigationBar.addEventListener('DOMMouseScroll',\r\n                                           function(event) {\r\n                                               dwImageViewerMouseWheel(event, elementId);\r\n                                               if (nextBar && dwUtilsHasVerticalOverflow(imagescroll)) {\r\n                                                   var scrollWidth = dwUtilsGetScrollbarWidth(imagescroll);\r\n                                                   nextBar.style.right = scrollWidth + \"px\";\r\n                                               }\r\n                                           }, false);\r\n        }\r\n\r\n    } else if (isOver == 0) {     // ausblenden\r\n        dwUtilsSetOpacity(navigationBar, 0.1);\r\n        // Listener werden dynamisch hinzugefügt / entfernt. Bei Verwendung von addEventListener/removeEventListener müsste jedoch\r\n        // die gesetzte/entfernte Methode als Variable vorgehalten werden. Ziel des Mechanismus ist eine Vermeidung,\r\n        // die Listener doppelt zu setzen. Das wird für \"DOMMouseScroll\" durch setzen eines init Flags realisiert\r\n        navigationBar.onclick = function() {\r\n        };\r\n        navigationBar.ondblclick = function() {\r\n        };\r\n        navigationBar.onmouseup = function() {\r\n        };\r\n        navigationBar.onmousemove = function() {\r\n        };\r\n        navigationBar.onmousewheel = function() {\r\n        };\r\n        navigationBar.hotspotWithTooltip = null;\r\n    } else if (isOver == -1) {  // Dauerhaft anzeigen\r\n        dwUtilsSetOpacity(navigationBar, 100);\r\n        navigationBar.onclick = function(event) {\r\n            dwImageNavigationBarMouseClickedHandler(event, elementId, navigationBar.getAttribute(\"imageIndex\"))\r\n        };\r\n    }\r\n}\r\n\r\n/**\r\n * Klick auf Layer zum Blättern ziwschen den Bildern. Ist unterhalb der geklickten Fläche ein Hotspot\r\n * wird die Hotspot Aktion ausgelöst. Andernfalls die Blätter-Aktion\r\n * @param event\r\n * @param elementId\r\n * @param imageIndex\r\n */\r\nfunction dwImageNavigationBarMouseClickedHandler(event, elementId, imageIndex) {\r\n    event = dwFrameworkGetEvent(event);\r\n    var intersectingHotspot = dwImageIsNavigationBarMouseClickIntersectingHotspot(event, elementId);\r\n    if (intersectingHotspot) { // Hotspot Objekt wurde zurückgeliefert\r\n        var eventType = (framework_isMobileView) ? \"onclick\" : \"onmousedown\";\r\n        intersectingHotspot.span[eventType](event);\r\n        return;\r\n    }\r\n    if (typeof (dwAjaxAddUpdate) != \"undefined\") {\r\n        dwAjaxAddUpdate(elementId + \"@DW@\" + elementId + \"@DW@imageIndexChangeEvent@DW@imageIndex=\" + imageIndex, true);\r\n    } else if (typeof (dwSwingFrameworkFireCallbackEvent) != \"undefined\") {\r\n        dwSwingFrameworkFireCallbackEvent(\"imageIndexChangeEvent\", imageIndex);\r\n    } else if (typeof (loadPicture) != \"undefined\") {\r\n        loadPicture(imageIndex);\r\n    }\r\n\r\n}\r\n\r\n/**\r\n * Generiert ein mouse-event auf Basis des alten Events (z.B. mousemove/mouseover/mouseout) und feuert dies auf dem target ab.\r\n * @param event\r\n * @param type\r\n * @param target\r\n */\r\nfunction dwImageNavigationBarDispatchMouseEvent(event, type, target) {\r\n    var mouseEvent = document.createEvent(\"MouseEvents\");\r\n    mouseEvent.initMouseEvent(type, false, true, event.view, 0, event.screenX, event.screenY,\r\n                              event.clientX, event.clientY, event.ctrlKey, event.altKey, event.shiftKey,\r\n                              event.metaKey, 0, target);\r\n    target.dispatchEvent(mouseEvent);\r\n}\r\n\r\n/**\r\n * Convinience Methode zur Event Delagation an ein anderes HTML DOM Element\r\n * @param event\r\n * @param eventTarget\r\n */\r\nfunction dwImageNavigationBarEventRedirectHandler(event, eventTarget) {\r\n    if (!eventTarget) {\r\n        return;\r\n    }\r\n    event = dwFrameworkGetEvent(event);\r\n    var func = eventTarget[\"on\" + event.type];\r\n    if (func) {\r\n        func.apply(eventTarget, new Array(event));\r\n    }\r\n}\r\n\r\n/**\r\n * Liefert den Hotspot zurück, der für die aktuelle Mouse Position gefunden wurde\r\n * NULL wenn kein Hotspot zur Mouse Position gefunden wurde\r\n *\r\n * Bei der Bestimmung wird nicht nur die (relative) Hotspot Position bestimmt (diese ist relativ zur Hotspot Paint Area)\r\n * sondern auch die Position dieser Hotspot Paint Area berücksichtigt\r\n * Grund: ImageScroll füllt die gesamte Viewer Fläche aus,\r\n *        die Hotspot Area ggf. nur einen Teilbereich,\r\n *        und der Hotspot nur eine Teilfläche der Paint Area\r\n * @param event\r\n * @param elementId\r\n * @return Hotspot oder NULL\r\n */\r\nfunction dwImageIsNavigationBarMouseClickIntersectingHotspot(event, elementId) {\r\n    event = dwFrameworkGetEvent(event);\r\n    var image = dwImageViewerGetImage(elementId);\r\n    if (image == null) { // kann durch die Verwendung von setTimeout() passieren\r\n        return;\r\n    }\r\n\r\n    var imagescroll = $(elementId + \"_imagescroll\");\r\n    // Da diese Navigationsicons/bars auch in WebGl vorhanden sind und dort kein imagescroll vorhanden ist hier einfach aussteigen\r\n    // Die Hotspots sind in WebGl eigens gelöst.\r\n    if (imagescroll != null) {\r\n        var hotspotsPaintArea = $(elementId + \"_hotspots_click\");\r\n        var mouseCoords = dwUtilsGetRelMouseCoords(event, imagescroll);\r\n        for (var i = 0; i < image.hotspots.length; i++) {\r\n            var hotspot = image.hotspots[i];\r\n            if (hotspot.span == null) {\r\n                continue;\r\n            }\r\n            var x1 = parseInt(hotspotsPaintArea.style.left) + parseInt(hotspot.span.style.left);\r\n            var x2 = x1 + parseInt(hotspot.span.style.width);\r\n            var y1 = parseInt(hotspotsPaintArea.style.top) + parseInt(hotspot.span.style.top);\r\n            var y2 = y1 + parseInt(hotspot.span.style.height);\r\n            if ((mouseCoords.x >= x1) && (mouseCoords.x <= x2) && (mouseCoords.y >= y1) && mouseCoords.y <= y2) {\r\n                // Wenn über dem gefundenen Hotspot das kleine Image eines Navigationsbuttons (vor oder zurück) liegt,\r\n                // dann \"gewinnt\" doch die Navigation und nicht der Hotspot. Wenn ein Hotspot die gesamte Breite eines Bildes\r\n                // einnimmt, ist die Navigation sonst nicht mehr erreichbar\r\n                if (dwImageIsMouseClickIntersectingNavButtonImages(event, elementId)) {\r\n                    return null;\r\n                }\r\n                return hotspot;\r\n            }\r\n        }\r\n    }\r\n    return null;\r\n}\r\n\r\n// Prüft, ob sich an der aktuellen Mausposition einer der Navigationsbuttons bzw. genauer deren Images befindet\r\nfunction dwImageIsMouseClickIntersectingNavButtonImages(event, elementId) {\r\n    var viewer = $(elementId);\r\n    // Mausposition\r\n    var mouseCoords = dwUtilsGetRelMouseCoords(event, viewer);\r\n\r\n    // Vor- und zurück Button\r\n    return dwImageIsMouseClickIntersectingNavButtonImage(\"_nav_next\", elementId, mouseCoords) ||\r\n           dwImageIsMouseClickIntersectingNavButtonImage(\"_nav_previous\", elementId, mouseCoords);\r\n}\r\n\r\n// Prüft, ob sich an der aktuellen Mausposition das Image eines bestimmten Navigationsbuttons befindet\r\nfunction dwImageIsMouseClickIntersectingNavButtonImage(suffix, elementId, mouseCoords) {\r\n    // Navigationsbutton\r\n    var navButton = $(elementId + suffix);\r\n    if (navButton) {\r\n        // Image\r\n        var navButtonImage = dwDomGetChildAtIndex(navButton, 0);\r\n        if (navButtonImage) {\r\n            var x1 = parseInt(navButton.offsetLeft) + parseInt(navButtonImage.offsetLeft);\r\n            var x2 = x1 + parseInt(navButtonImage.offsetWidth);\r\n            var y1 = parseInt(navButton.offsetTop) + parseInt(navButtonImage.offsetTop);\r\n            var y2 = y1 + parseInt(navButtonImage.offsetHeight);\r\n            if ((mouseCoords.x >= x1) && (mouseCoords.x <= x2) && (mouseCoords.y >= y1) && mouseCoords.y <= y2) {\r\n                // Treffer\r\n                return true;\r\n            }\r\n        }\r\n    }\r\n    return false;\r\n}\r\n\r\n\r\nfunction dwImageViewerGetVisibleRect(elementId) {\r\n    var image = dwImageViewerGetImage(elementId);\r\n    if (image == null) { // kann durch die Verwendung von setTimeout() passieren\r\n        return;\r\n    }\r\n\r\n    var imagescroll = $(elementId + \"_imagescroll\");\r\n    if ((image == null) || (imagescroll == null)) { // kann evtl. passieren, wenn der Server den sichtbaren Bereich von einem nicht mehr vorhandenen ImageViewer abfragt\r\n        return\r\n    }\r\n\r\n    var scaleFactor = Math.max(image.dwWidth / image.offsetWidth, image.dwHeight / image.offsetHeight);\r\n    if (typeof (dwAjaxFireCustomEvent) != \"undefined\") {\r\n        dwAjaxFireCustomEvent(elementId, elementId, \"getImageVisibleRectEvent\",\r\n                              \"x=\" + Math.round(imagescroll.scrollLeft * scaleFactor)\r\n                              + \"@DWSUB@y=\" + Math.round(imagescroll.scrollTop * scaleFactor)\r\n                              + \"@DWSUB@width=\" + Math.round(imagescroll.clientWidth * scaleFactor)\r\n                              + \"@DWSUB@height=\" + Math.round(imagescroll.clientHeight * scaleFactor), true);\r\n    } else if (typeof (dwSwingFrameworkFireCallbackEvent) != \"undefined\") {\r\n        dwSwingFrameworkFireCallbackEvent(\"getImageVisibleRectEvent\", \"x=\" + Math.round(imagescroll.scrollLeft * scaleFactor)\r\n                                                                      + \"@DWSUB@y=\" + Math.round(imagescroll.scrollTop * scaleFactor)\r\n                                                                      + \"@DWSUB@width=\" + Math.round(imagescroll.clientWidth * scaleFactor)\r\n                                                                      + \"@DWSUB@height=\" + Math.round(imagescroll.clientHeight * scaleFactor), true);\r\n    }\r\n}\r\n\r\nfunction dwImageElementIsTag(element, tagName) {\r\n    if ((element) && (element.tagName) && (tagName)) {\r\n        return (element.tagName.toUpperCase() == tagName.toUpperCase());\r\n    } else {\r\n        return false;\r\n    }\r\n}\r\n\r\nfunction dwImageWriteToLog(elementId, msg) {\r\n    var image = dwImageViewerGetImage(elementId);\r\n    if (image == null) { // kann durch die Verwendung von setTimeout() passieren\r\n        return;\r\n    }\r\n\r\n    image.log(msg);\r\n}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\n/*\r\n * Copyright (c) 2024 Quanos Solutions GmbH\r\n */\r\n\r\n// Pannellum 2.5.6, https://github.com/mpetroff/pannellum\r\nwindow.libpannellum=function(E,g,p){function Ba(K){function ja(a,e){return 1==a.level&&1!=e.level?-1:1==e.level&&1!=a.level?1:e.timestamp-a.timestamp}function Q(a,e){return a.level!=e.level?a.level-e.level:a.diff-e.diff}function ka(a,e,c,g,l,h){this.vertices=a;this.side=e;this.level=c;this.x=g;this.y=l;this.path=h.replace(\"%s\",e).replace(\"%l\",c).replace(\"%x\",g).replace(\"%y\",l)}function Ja(a,e,g,p,l){var h;var d=e.vertices;h=la(a,d.slice(0,3));var u=la(a,d.slice(3,6)),x=la(a,d.slice(6,9)),d=la(a,d.slice(9,\r\n12)),t=h[0]+u[0]+x[0]+d[0];-4==t||4==t?h=!1:(t=h[1]+u[1]+x[1]+d[1],h=-4==t||4==t?!1:4!=h[2]+u[2]+x[2]+d[2]);if(h){h=e.vertices;u=h[0]+h[3]+h[6]+h[9];x=h[1]+h[4]+h[7]+h[10];d=h[2]+h[5]+h[8]+h[11];t=Math.sqrt(u*u+x*x+d*d);d=Math.asin(d/t);u=Math.atan2(x,u)-p;u+=u>Math.PI?-2*Math.PI:u<-Math.PI?2*Math.PI:0;u=Math.abs(u);e.diff=Math.acos(Math.sin(g)*Math.sin(d)+Math.cos(g)*Math.cos(d)*Math.cos(u));u=!1;for(x=0;x<c.nodeCache.length;x++)if(c.nodeCache[x].path==e.path){u=!0;c.nodeCache[x].timestamp=c.nodeCacheTimestamp++;\r\nc.nodeCache[x].diff=e.diff;c.currentNodes.push(c.nodeCache[x]);break}u||(e.timestamp=c.nodeCacheTimestamp++,c.currentNodes.push(e),c.nodeCache.push(e));if(e.level<c.level){var d=m.cubeResolution*Math.pow(2,e.level-m.maxLevel),u=Math.ceil(d*m.invTileResolution)-1,x=d%m.tileResolution*2,k=2*d%m.tileResolution;0===k&&(k=m.tileResolution);0===x&&(x=2*m.tileResolution);t=0.5;if(e.x==u||e.y==u)t=1-m.tileResolution/(m.tileResolution+k);var y=1-t,d=[],s=t,z=t,D=t,I=y,A=y,B=y;if(k<m.tileResolution)if(e.x==\r\nu&&e.y!=u){if(A=z=0.5,\"d\"==e.side||\"u\"==e.side)B=D=0.5}else e.x!=u&&e.y==u&&(I=s=0.5,\"l\"==e.side||\"r\"==e.side)&&(B=D=0.5);x<=m.tileResolution&&(e.x==u&&(s=0,I=1,\"l\"==e.side||\"r\"==e.side)&&(D=0,B=1),e.y==u&&(z=0,A=1,\"d\"==e.side||\"u\"==e.side)&&(D=0,B=1));k=[h[0],h[1],h[2],h[0]*s+h[3]*I,h[1]*t+h[4]*y,h[2]*D+h[5]*B,h[0]*s+h[6]*I,h[1]*z+h[7]*A,h[2]*D+h[8]*B,h[0]*t+h[9]*y,h[1]*z+h[10]*A,h[2]*D+h[11]*B];k=new ka(k,e.side,e.level+1,2*e.x,2*e.y,m.fullpath);d.push(k);e.x==u&&x<=m.tileResolution||(k=[h[0]*s+\r\nh[3]*I,h[1]*t+h[4]*y,h[2]*D+h[5]*B,h[3],h[4],h[5],h[3]*t+h[6]*y,h[4]*z+h[7]*A,h[5]*D+h[8]*B,h[0]*s+h[6]*I,h[1]*z+h[7]*A,h[2]*D+h[8]*B],k=new ka(k,e.side,e.level+1,2*e.x+1,2*e.y,m.fullpath),d.push(k));e.x==u&&x<=m.tileResolution||e.y==u&&x<=m.tileResolution||(k=[h[0]*s+h[6]*I,h[1]*z+h[7]*A,h[2]*D+h[8]*B,h[3]*t+h[6]*y,h[4]*z+h[7]*A,h[5]*D+h[8]*B,h[6],h[7],h[8],h[9]*s+h[6]*I,h[10]*t+h[7]*y,h[11]*D+h[8]*B],k=new ka(k,e.side,e.level+1,2*e.x+1,2*e.y+1,m.fullpath),d.push(k));e.y==u&&x<=m.tileResolution||\r\n(k=[h[0]*t+h[9]*y,h[1]*z+h[10]*A,h[2]*D+h[11]*B,h[0]*s+h[6]*I,h[1]*z+h[7]*A,h[2]*D+h[8]*B,h[9]*s+h[6]*I,h[10]*t+h[7]*y,h[11]*D+h[8]*B,h[9],h[10],h[11]],k=new ka(k,e.side,e.level+1,2*e.x,2*e.y+1,m.fullpath),d.push(k));for(e=0;e<d.length;e++)Ja(a,d[e],g,p,l)}}}function ta(){return[-1,1,-1,1,1,-1,1,-1,-1,-1,-1,-1,1,1,1,-1,1,1,-1,-1,1,1,-1,1,-1,1,1,1,1,1,1,1,-1,-1,1,-1,-1,-1,-1,1,-1,-1,1,-1,1,-1,-1,1,-1,1,1,-1,1,-1,-1,-1,-1,-1,-1,1,1,1,-1,1,1,1,1,-1,1,1,-1,-1]}function ua(a,e,c){var g=Math.sin(e);e=Math.cos(e);\r\nif(\"x\"==c)return[a[0],e*a[1]+g*a[2],e*a[2]-g*a[1],a[3],e*a[4]+g*a[5],e*a[5]-g*a[4],a[6],e*a[7]+g*a[8],e*a[8]-g*a[7]];if(\"y\"==c)return[e*a[0]-g*a[2],a[1],e*a[2]+g*a[0],e*a[3]-g*a[5],a[4],e*a[5]+g*a[3],e*a[6]-g*a[8],a[7],e*a[8]+g*a[6]];if(\"z\"==c)return[e*a[0]+g*a[1],e*a[1]-g*a[0],a[2],e*a[3]+g*a[4],e*a[4]-g*a[3],a[5],e*a[6]+g*a[7],e*a[7]-g*a[6],a[8]]}function ma(a){return[a[0],a[4],a[8],a[12],a[1],a[5],a[9],a[13],a[2],a[6],a[10],a[14],a[3],a[7],a[11],a[15]]}function Ka(a){La(a,a.path+\".\"+m.extension,\r\nfunction(e,c){a.texture=e;a.textureLoaded=c?2:1},va.crossOrigin)}function la(a,e){var c=[a[0]*e[0]+a[1]*e[1]+a[2]*e[2],a[4]*e[0]+a[5]*e[1]+a[6]*e[2],a[11]+a[8]*e[0]+a[9]*e[1]+a[10]*e[2],1/(a[12]*e[0]+a[13]*e[1]+a[14]*e[2])],g=c[0]*c[3],l=c[1]*c[3],c=c[2]*c[3],h=[0,0,0];-1>g&&(h[0]=-1);1<g&&(h[0]=1);-1>l&&(h[1]=-1);1<l&&(h[1]=1);if(-1>c||1<c)h[2]=1;return h}function Ea(){console.log(\"Reducing canvas size due to error 1286!\");A.width=Math.round(A.width/2);A.height=Math.round(A.height/2)}var A=g.createElement(\"canvas\");\r\nA.style.width=A.style.height=\"100%\";K.appendChild(A);var c,a,U,V,$,R,wa,ga,m,z,F,ca,Fa,Y,na,va;this.init=function(L,e,Ca,H,l,h,d,u){function x(a){if(E){var e=a*a*4,h=new Uint8ClampedArray(e),c=u.backgroundColor?u.backgroundColor:[0,0,0];c[0]*=255;c[1]*=255;c[2]*=255;for(var b=0;b<e;b++)h[b++]=c[0],h[b++]=c[1],h[b++]=c[2];a=new ImageData(h,a,a);for(t=0;6>t;t++)0==m[t].width&&(m[t]=a)}}e===p&&(e=\"equirectangular\");if(\"equirectangular\"!=e&&\"cubemap\"!=e&&\"multires\"!=e)throw console.log(\"Error: invalid image type specified!\"),\r\n{type:\"config error\"};z=e;m=L;F=Ca;va=u||{};if(c){U&&(a.detachShader(c,U),a.deleteShader(U));V&&(a.detachShader(c,V),a.deleteShader(V));a.bindBuffer(a.ARRAY_BUFFER,null);a.bindBuffer(a.ELEMENT_ARRAY_BUFFER,null);c.texture&&a.deleteTexture(c.texture);if(c.nodeCache)for(L=0;L<c.nodeCache.length;L++)a.deleteTexture(c.nodeCache[L].texture);a.deleteProgram(c);c=p}ga=p;var t,E=!1,y;if(\"cubemap\"==z)for(t=0;6>t;t++)0<m[t].width?(y===p&&(y=m[t].width),y!=m[t].width&&console.log(\"Cube faces have inconsistent widths: \"+\r\ny+\" vs. \"+m[t].width)):E=!0;\"cubemap\"==z&&0!==(y&y-1)&&(navigator.userAgent.toLowerCase().match(/(iphone|ipod|ipad).* os 8_/)||navigator.userAgent.toLowerCase().match(/(iphone|ipod|ipad).* os 9_/)||navigator.userAgent.toLowerCase().match(/(iphone|ipod|ipad).* os 10_/)||navigator.userAgent.match(/Trident.*rv[ :]*11\\./))||(a||(a=A.getContext(\"experimental-webgl\",{alpha:!1,depth:!1})),a&&1286==a.getError()&&Ea());if(!a&&(\"multires\"==z&&m.hasOwnProperty(\"fallbackPath\")||\"cubemap\"==z)&&(\"WebkitAppearance\"in\r\ng.documentElement.style||navigator.userAgent.match(/Trident.*rv[ :]*11\\./)||-1!==navigator.appVersion.indexOf(\"MSIE 10\"))){R&&K.removeChild(R);R=g.createElement(\"div\");R.className=\"pnlm-world\";H=m.basePath?m.basePath+m.fallbackPath:m.fallbackPath;var Q=\"frblud\".split(\"\"),S=0;l=function(){var a=g.createElement(\"canvas\");a.className=\"pnlm-face pnlm-\"+Q[this.side]+\"face\";R.appendChild(a);var e=a.getContext(\"2d\");a.style.width=this.width+4+\"px\";a.style.height=this.height+4+\"px\";a.width=this.width+4;a.height=\r\nthis.height+4;e.drawImage(this,2,2);var h=e.getImageData(0,0,a.width,a.height),c=h.data,b,d;for(b=2;b<a.width-2;b++)for(d=0;4>d;d++)c[4*(b+a.width)+d]=c[4*(b+2*a.width)+d],c[4*(b+a.width*(a.height-2))+d]=c[4*(b+a.width*(a.height-3))+d];for(b=2;b<a.height-2;b++)for(d=0;4>d;d++)c[4*(b*a.width+1)+d]=c[4*(b*a.width+2)+d],c[4*((b+1)*a.width-2)+d]=c[4*((b+1)*a.width-3)+d];for(d=0;4>d;d++)c[4*(a.width+1)+d]=c[4*(2*a.width+2)+d],c[4*(2*a.width-2)+d]=c[4*(3*a.width-3)+d],c[4*(a.width*(a.height-2)+1)+d]=c[4*\r\n(a.width*(a.height-3)+2)+d],c[4*(a.width*(a.height-1)-2)+d]=c[4*(a.width*(a.height-2)-3)+d];for(b=1;b<a.width-1;b++)for(d=0;4>d;d++)c[4*b+d]=c[4*(b+a.width)+d],c[4*(b+a.width*(a.height-1))+d]=c[4*(b+a.width*(a.height-2))+d];for(b=1;b<a.height-1;b++)for(d=0;4>d;d++)c[b*a.width*4+d]=c[4*(b*a.width+1)+d],c[4*((b+1)*a.width-1)+d]=c[4*((b+1)*a.width-2)+d];for(d=0;4>d;d++)c[d]=c[4*(a.width+1)+d],c[4*(a.width-1)+d]=c[4*(2*a.width-2)+d],c[a.width*(a.height-1)*4+d]=c[4*(a.width*(a.height-2)+1)+d],c[4*(a.width*\r\na.height-1)+d]=c[4*(a.width*(a.height-1)-2)+d];e.putImageData(h,0,0);D.call(this)};var D=function(){0<this.width?($===p&&($=this.width),$!=this.width&&console.log(\"Fallback faces have inconsistent widths: \"+$+\" vs. \"+this.width)):E=!0;S++;6==S&&($=this.width,K.appendChild(R),d())},E=!1;for(t=0;6>t;t++)h=new Image,h.crossOrigin=va.crossOrigin?va.crossOrigin:\"anonymous\",h.side=t,h.onload=l,h.onerror=D,h.src=\"multires\"==z?H.replace(\"%s\",Q[t])+\".\"+m.extension:m[t].src;x($)}else{if(!a)throw console.log(\"Error: no WebGL support detected!\"),\r\n{type:\"no webgl\"};\"cubemap\"==z&&x(y);m.fullpath=m.basePath?m.basePath+m.path:m.path;m.invTileResolution=1/m.tileResolution;L=ta();wa=[];for(t=0;6>t;t++)wa[t]=L.slice(12*t,12*t+12),L=ta();L=0;if(\"equirectangular\"==z){if(L=a.getParameter(a.MAX_TEXTURE_SIZE),Math.max(m.width/2,m.height)>L)throw console.log(\"Error: The image is too big; it's \"+m.width+\"px wide, but this device's maximum supported size is \"+2*L+\"px.\"),{type:\"webgl size error\",width:m.width,maxWidth:2*L};}else if(\"cubemap\"==z&&y>a.getParameter(a.MAX_CUBE_MAP_TEXTURE_SIZE))throw console.log(\"Error: The image is too big; it's \"+\r\ny+\"px wide, but this device's maximum supported size is \"+L+\"px.\"),{type:\"webgl size error\",width:y,maxWidth:L};u===p||u.horizonPitch===p&&u.horizonRoll===p||(ga=[u.horizonPitch==p?0:u.horizonPitch,u.horizonRoll==p?0:u.horizonRoll]);y=a.TEXTURE_2D;a.viewport(0,0,a.drawingBufferWidth,a.drawingBufferHeight);a.getShaderPrecisionFormat&&(e=a.getShaderPrecisionFormat(a.FRAGMENT_SHADER,a.HIGH_FLOAT))&&1>e.precision&&(oa=oa.replace(\"highp\",\"mediump\"));U=a.createShader(a.VERTEX_SHADER);e=s;\"multires\"==z&&\r\n(e=k);a.shaderSource(U,e);a.compileShader(U);V=a.createShader(a.FRAGMENT_SHADER);e=pa;\"cubemap\"==z?(y=a.TEXTURE_CUBE_MAP,e=qa):\"multires\"==z&&(e=bb);a.shaderSource(V,e);a.compileShader(V);c=a.createProgram();a.attachShader(c,U);a.attachShader(c,V);a.linkProgram(c);a.getShaderParameter(U,a.COMPILE_STATUS)||console.log(a.getShaderInfoLog(U));a.getShaderParameter(V,a.COMPILE_STATUS)||console.log(a.getShaderInfoLog(V));a.getProgramParameter(c,a.LINK_STATUS)||console.log(a.getProgramInfoLog(c));a.useProgram(c);\r\nc.drawInProgress=!1;e=u.backgroundColor?u.backgroundColor:[0,0,0];a.clearColor(e[0],e[1],e[2],1);a.clear(a.COLOR_BUFFER_BIT);c.texCoordLocation=a.getAttribLocation(c,\"a_texCoord\");a.enableVertexAttribArray(c.texCoordLocation);\"multires\"!=z?(ca||(ca=a.createBuffer()),a.bindBuffer(a.ARRAY_BUFFER,ca),a.bufferData(a.ARRAY_BUFFER,new Float32Array([-1,1,1,1,1,-1,-1,1,1,-1,-1,-1]),a.STATIC_DRAW),a.vertexAttribPointer(c.texCoordLocation,2,a.FLOAT,!1,0,0),c.aspectRatio=a.getUniformLocation(c,\"u_aspectRatio\"),\r\na.uniform1f(c.aspectRatio,a.drawingBufferWidth/a.drawingBufferHeight),c.psi=a.getUniformLocation(c,\"u_psi\"),c.theta=a.getUniformLocation(c,\"u_theta\"),c.f=a.getUniformLocation(c,\"u_f\"),c.h=a.getUniformLocation(c,\"u_h\"),c.v=a.getUniformLocation(c,\"u_v\"),c.vo=a.getUniformLocation(c,\"u_vo\"),c.rot=a.getUniformLocation(c,\"u_rot\"),a.uniform1f(c.h,H/(2*Math.PI)),a.uniform1f(c.v,l/Math.PI),a.uniform1f(c.vo,h/Math.PI*2),\"equirectangular\"==z&&(c.backgroundColor=a.getUniformLocation(c,\"u_backgroundColor\"),a.uniform4fv(c.backgroundColor,\r\ne.concat([1]))),c.texture=a.createTexture(),a.bindTexture(y,c.texture),\"cubemap\"==z?(a.texImage2D(a.TEXTURE_CUBE_MAP_POSITIVE_X,0,a.RGB,a.RGB,a.UNSIGNED_BYTE,m[1]),a.texImage2D(a.TEXTURE_CUBE_MAP_NEGATIVE_X,0,a.RGB,a.RGB,a.UNSIGNED_BYTE,m[3]),a.texImage2D(a.TEXTURE_CUBE_MAP_POSITIVE_Y,0,a.RGB,a.RGB,a.UNSIGNED_BYTE,m[4]),a.texImage2D(a.TEXTURE_CUBE_MAP_NEGATIVE_Y,0,a.RGB,a.RGB,a.UNSIGNED_BYTE,m[5]),a.texImage2D(a.TEXTURE_CUBE_MAP_POSITIVE_Z,0,a.RGB,a.RGB,a.UNSIGNED_BYTE,m[0]),a.texImage2D(a.TEXTURE_CUBE_MAP_NEGATIVE_Z,\r\n0,a.RGB,a.RGB,a.UNSIGNED_BYTE,m[2])):m.width<=L?(a.uniform1i(a.getUniformLocation(c,\"u_splitImage\"),0),a.texImage2D(y,0,a.RGB,a.RGB,a.UNSIGNED_BYTE,m)):(a.uniform1i(a.getUniformLocation(c,\"u_splitImage\"),1),H=g.createElement(\"canvas\"),H.width=m.width/2,H.height=m.height,H=H.getContext(\"2d\"),H.drawImage(m,0,0),l=H.getImageData(0,0,m.width/2,m.height),a.texImage2D(y,0,a.RGB,a.RGB,a.UNSIGNED_BYTE,l),c.texture2=a.createTexture(),a.activeTexture(a.TEXTURE1),a.bindTexture(y,c.texture2),a.uniform1i(a.getUniformLocation(c,\r\n\"u_image1\"),1),H.drawImage(m,-m.width/2,0),l=H.getImageData(0,0,m.width/2,m.height),a.texImage2D(y,0,a.RGB,a.RGB,a.UNSIGNED_BYTE,l),a.texParameteri(y,a.TEXTURE_WRAP_S,a.CLAMP_TO_EDGE),a.texParameteri(y,a.TEXTURE_WRAP_T,a.CLAMP_TO_EDGE),a.texParameteri(y,a.TEXTURE_MIN_FILTER,a.LINEAR),a.texParameteri(y,a.TEXTURE_MAG_FILTER,a.LINEAR),a.activeTexture(a.TEXTURE0)),a.texParameteri(y,a.TEXTURE_WRAP_S,a.CLAMP_TO_EDGE),a.texParameteri(y,a.TEXTURE_WRAP_T,a.CLAMP_TO_EDGE),a.texParameteri(y,a.TEXTURE_MIN_FILTER,\r\na.LINEAR),a.texParameteri(y,a.TEXTURE_MAG_FILTER,a.LINEAR)):(c.vertPosLocation=a.getAttribLocation(c,\"a_vertCoord\"),a.enableVertexAttribArray(c.vertPosLocation),Fa||(Fa=a.createBuffer()),Y||(Y=a.createBuffer()),na||(na=a.createBuffer()),a.bindBuffer(a.ARRAY_BUFFER,Y),a.bufferData(a.ARRAY_BUFFER,new Float32Array([0,0,1,0,1,1,0,1]),a.STATIC_DRAW),a.bindBuffer(a.ELEMENT_ARRAY_BUFFER,na),a.bufferData(a.ELEMENT_ARRAY_BUFFER,new Uint16Array([0,1,2,0,2,3]),a.STATIC_DRAW),c.perspUniform=a.getUniformLocation(c,\r\n\"u_perspMatrix\"),c.cubeUniform=a.getUniformLocation(c,\"u_cubeMatrix\"),c.level=-1,c.currentNodes=[],c.nodeCache=[],c.nodeCacheTimestamp=0);H=a.getError();if(0!==H)throw console.log(\"Error: Something went wrong with WebGL!\",H),{type:\"webgl error\"};d()}};this.destroy=function(){K!==p&&(A!==p&&K.contains(A)&&K.removeChild(A),R!==p&&K.contains(R)&&K.removeChild(R));if(a){var c=a.getExtension(\"WEBGL_lose_context\");c&&c.loseContext()}};this.resize=function(){var g=E.devicePixelRatio||1;A.width=A.clientWidth*\r\ng;A.height=A.clientHeight*g;a&&(1286==a.getError()&&Ea(),a.viewport(0,0,a.drawingBufferWidth,a.drawingBufferHeight),\"multires\"!=z&&a.uniform1f(c.aspectRatio,A.clientWidth/A.clientHeight))};this.resize();this.setPose=function(a,c){ga=[a,c]};this.render=function(g,e,k,s){var l,h=0;s===p&&(s={});s.roll&&(h=s.roll);if(ga!==p){l=ga[0];var d=ga[1],u=g,x=e,t=Math.cos(d)*Math.sin(g)*Math.sin(l)+Math.cos(g)*(Math.cos(l)*Math.cos(e)+Math.sin(d)*Math.sin(l)*Math.sin(e)),E=-Math.sin(g)*Math.sin(d)+Math.cos(g)*\r\nMath.cos(d)*Math.sin(e);g=Math.cos(d)*Math.cos(l)*Math.sin(g)+Math.cos(g)*(-Math.cos(e)*Math.sin(l)+Math.cos(l)*Math.sin(d)*Math.sin(e));g=Math.asin(Math.max(Math.min(g,1),-1));e=Math.atan2(E,t);l=[Math.cos(u)*(Math.sin(d)*Math.sin(l)*Math.cos(x)-Math.cos(l)*Math.sin(x)),Math.cos(u)*Math.cos(d)*Math.cos(x),Math.cos(u)*(Math.cos(l)*Math.sin(d)*Math.cos(x)+Math.sin(x)*Math.sin(l))];d=[-Math.cos(g)*Math.sin(e),Math.cos(g)*Math.cos(e)];d=Math.acos(Math.max(Math.min((l[0]*d[0]+l[1]*d[1])/(Math.sqrt(l[0]*\r\nl[0]+l[1]*l[1]+l[2]*l[2])*Math.sqrt(d[0]*d[0]+d[1]*d[1])),1),-1));0>l[2]&&(d=2*Math.PI-d);h+=d}if(a||\"multires\"!=z&&\"cubemap\"!=z){if(\"multires\"!=z)k=2*Math.atan(Math.tan(0.5*k)/(a.drawingBufferWidth/a.drawingBufferHeight)),k=1/Math.tan(0.5*k),a.uniform1f(c.psi,e),a.uniform1f(c.theta,g),a.uniform1f(c.rot,h),a.uniform1f(c.f,k),!0===F&&\"equirectangular\"==z&&(a.bindTexture(a.TEXTURE_2D,c.texture),a.texImage2D(a.TEXTURE_2D,0,a.RGB,a.RGB,a.UNSIGNED_BYTE,m)),a.drawArrays(a.TRIANGLES,0,6);else{l=a.drawingBufferWidth/\r\na.drawingBufferHeight;d=2*Math.atan(Math.tan(k/2)*a.drawingBufferHeight/a.drawingBufferWidth);d=1/Math.tan(d/2);l=[d/l,0,0,0,0,d,0,0,0,0,100.1/-99.9,20/-99.9,0,0,-1,0];for(d=1;d<m.maxLevel&&a.drawingBufferWidth>m.tileResolution*Math.pow(2,d-1)*Math.tan(k/2)*0.707;)d++;c.level=d;d=[1,0,0,0,1,0,0,0,1];d=ua(d,-h,\"z\");d=ua(d,-g,\"x\");d=ua(d,e,\"y\");d=[d[0],d[1],d[2],0,d[3],d[4],d[5],0,d[6],d[7],d[8],0,0,0,0,1];a.uniformMatrix4fv(c.perspUniform,!1,new Float32Array(ma(l)));a.uniformMatrix4fv(c.cubeUniform,\r\n!1,new Float32Array(ma(d)));h=[l[0]*d[0],l[0]*d[1],l[0]*d[2],0,l[5]*d[4],l[5]*d[5],l[5]*d[6],0,l[10]*d[8],l[10]*d[9],l[10]*d[10],l[11],-d[8],-d[9],-d[10],0];c.nodeCache.sort(ja);if(200<c.nodeCache.length&&c.nodeCache.length>c.currentNodes.length+50)for(l=c.nodeCache.splice(200,c.nodeCache.length-200),d=0;d<l.length;d++)a.deleteTexture(l[d].texture);c.currentNodes=[];d=\"fbudlr\".split(\"\");for(l=0;6>l;l++)u=new ka(wa[l],d[l],1,0,0,m.fullpath),Ja(h,u,g,e,k);c.currentNodes.sort(Q);for(g=S.length-1;0<=\r\ng;g--)-1===c.currentNodes.indexOf(S[g].node)&&(S[g].node.textureLoad=!1,S.splice(g,1));if(0===S.length)for(g=0;g<c.currentNodes.length;g++)if(e=c.currentNodes[g],!e.texture&&!e.textureLoad){e.textureLoad=!0;setTimeout(Ka,0,e);break}if(!c.drawInProgress){c.drawInProgress=!0;a.clear(a.COLOR_BUFFER_BIT);for(g=0;g<c.currentNodes.length;g++)1<c.currentNodes[g].textureLoaded&&(a.bindBuffer(a.ARRAY_BUFFER,Fa),a.bufferData(a.ARRAY_BUFFER,new Float32Array(c.currentNodes[g].vertices),a.STATIC_DRAW),a.vertexAttribPointer(c.vertPosLocation,\r\n3,a.FLOAT,!1,0,0),a.bindBuffer(a.ARRAY_BUFFER,Y),a.vertexAttribPointer(c.texCoordLocation,2,a.FLOAT,!1,0,0),a.bindTexture(a.TEXTURE_2D,c.currentNodes[g].texture),a.drawElements(a.TRIANGLES,6,a.UNSIGNED_SHORT,0));c.drawInProgress=!1}}if(s.returnImage!==p)return A.toDataURL(\"image/png\")}else for(l=$/2,s={f:\"translate3d(-\"+(l+2)+\"px, -\"+(l+2)+\"px, -\"+l+\"px)\",b:\"translate3d(\"+(l+2)+\"px, -\"+(l+2)+\"px, \"+l+\"px) rotateX(180deg) rotateZ(180deg)\",u:\"translate3d(-\"+(l+2)+\"px, -\"+l+\"px, \"+(l+2)+\"px) rotateX(270deg)\",\r\nd:\"translate3d(-\"+(l+2)+\"px, \"+l+\"px, -\"+(l+2)+\"px) rotateX(90deg)\",l:\"translate3d(-\"+l+\"px, -\"+(l+2)+\"px, \"+(l+2)+\"px) rotateX(180deg) rotateY(90deg) rotateZ(180deg)\",r:\"translate3d(\"+l+\"px, -\"+(l+2)+\"px, -\"+(l+2)+\"px) rotateY(270deg)\"},k=1/Math.tan(k/2),k=k*A.clientWidth/2+\"px\",e=\"perspective(\"+k+\") translateZ(\"+k+\") rotateX(\"+g+\"rad) rotateY(\"+e+\"rad) \",k=Object.keys(s),g=0;6>g;g++)if(h=R.querySelector(\".pnlm-\"+k[g]+\"face\"))h.style.webkitTransform=e+s[k[g]],h.style.transform=e+s[k[g]]};this.isLoading=\r\nfunction(){if(a&&\"multires\"==z)for(var g=0;g<c.currentNodes.length;g++)if(!c.currentNodes[g].textureLoaded)return!0;return!1};this.getCanvas=function(){return A};var S=[],La=function(){function c(){var d=this;this.texture=this.callback=null;this.image=new Image;this.image.crossOrigin=l?l:\"anonymous\";var e=function(){if(0<d.image.width&&0<d.image.height){var c=d.image;a.bindTexture(a.TEXTURE_2D,d.texture);a.texImage2D(a.TEXTURE_2D,0,a.RGB,a.RGB,a.UNSIGNED_BYTE,c);a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MAG_FILTER,\r\na.LINEAR);a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MIN_FILTER,a.LINEAR);a.texParameteri(a.TEXTURE_2D,a.TEXTURE_WRAP_S,a.CLAMP_TO_EDGE);a.texParameteri(a.TEXTURE_2D,a.TEXTURE_WRAP_T,a.CLAMP_TO_EDGE);a.bindTexture(a.TEXTURE_2D,null);d.callback(d.texture,!0)}else d.callback(d.texture,!1);S.length?(c=S.shift(),d.loadTexture(c.src,c.texture,c.callback)):k[g++]=d};this.image.addEventListener(\"load\",e);this.image.addEventListener(\"error\",e)}function e(a,c,e,g){this.node=a;this.src=c;this.texture=e;this.callback=\r\ng}var g=4,k={},l;c.prototype.loadTexture=function(a,c,e){this.texture=c;this.callback=e;this.image.src=a};for(var h=0;h<g;h++)k[h]=new c;return function(c,h,m,p){l=p;p=a.createTexture();g?k[--g].loadTexture(h,p,m):S.push(new e(c,h,p,m));return p}}()}var s=\"attribute vec2 a_texCoord;varying vec2 v_texCoord;void main() {gl_Position = vec4(a_texCoord, 0.0, 1.0);v_texCoord = a_texCoord;}\",k=\"attribute vec3 a_vertCoord;attribute vec2 a_texCoord;uniform mat4 u_cubeMatrix;uniform mat4 u_perspMatrix;varying mediump vec2 v_texCoord;void main(void) {gl_Position = u_perspMatrix * u_cubeMatrix * vec4(a_vertCoord, 1.0);v_texCoord = a_texCoord;}\",\r\noa=\"precision highp float;\\nuniform float u_aspectRatio;\\nuniform float u_psi;\\nuniform float u_theta;\\nuniform float u_f;\\nuniform float u_h;\\nuniform float u_v;\\nuniform float u_vo;\\nuniform float u_rot;\\nconst float PI = 3.14159265358979323846264;\\nuniform sampler2D u_image0;\\nuniform sampler2D u_image1;\\nuniform bool u_splitImage;\\nuniform samplerCube u_imageCube;\\nvarying vec2 v_texCoord;\\nuniform vec4 u_backgroundColor;\\nvoid main() {\\nfloat x = v_texCoord.x * u_aspectRatio;\\nfloat y = v_texCoord.y;\\nfloat sinrot = sin(u_rot);\\nfloat cosrot = cos(u_rot);\\nfloat rot_x = x * cosrot - y * sinrot;\\nfloat rot_y = x * sinrot + y * cosrot;\\nfloat sintheta = sin(u_theta);\\nfloat costheta = cos(u_theta);\\nfloat a = u_f * costheta - rot_y * sintheta;\\nfloat root = sqrt(rot_x * rot_x + a * a);\\nfloat lambda = atan(rot_x / root, a / root) + u_psi;\\nfloat phi = atan((rot_y * costheta + u_f * sintheta) / root);\",\r\nqa=oa+\"float cosphi = cos(phi);\\ngl_FragColor = textureCube(u_imageCube, vec3(cosphi*sin(lambda), sin(phi), cosphi*cos(lambda)));\\n}\",pa=oa+\"lambda = mod(lambda + PI, PI * 2.0) - PI;\\nvec2 coord = vec2(lambda / PI, phi / (PI / 2.0));\\nif(coord.x < -u_h || coord.x > u_h || coord.y < -u_v + u_vo || coord.y > u_v + u_vo)\\ngl_FragColor = u_backgroundColor;\\nelse {\\nif(u_splitImage) {\\nif(coord.x < 0.0)\\ngl_FragColor = texture2D(u_image0, vec2((coord.x + u_h) / u_h, (-coord.y + u_v + u_vo) / (u_v * 2.0)));\\nelse\\ngl_FragColor = texture2D(u_image1, vec2((coord.x + u_h) / u_h - 1.0, (-coord.y + u_v + u_vo) / (u_v * 2.0)));\\n} else {\\ngl_FragColor = texture2D(u_image0, vec2((coord.x + u_h) / (u_h * 2.0), (-coord.y + u_v + u_vo) / (u_v * 2.0)));\\n}\\n}\\n}\",\r\nbb=\"varying mediump vec2 v_texCoord;uniform sampler2D u_sampler;void main(void) {gl_FragColor = texture2D(u_sampler, v_texCoord);}\";return{renderer:function(g,k,p,s){return new Ba(g,k,p,s)}}}(window,document);\r\nwindow.pannellum=function(E,g,p){function Ba(s,k){function oa(){var a=g.createElement(\"div\");a.innerHTML=\"\\x3c!--[if lte IE 9]><i></i><![endif]--\\x3e\";if(1==a.getElementsByTagName(\"i\").length)K();else{ra=b.hfov;Ga=b.pitch;var f;if(\"cubemap\"==b.type){P=[];for(a=0;6>a;a++)P.push(new Image),P[a].crossOrigin=b.crossOrigin;q.load.lbox.style.display=\"block\";q.load.lbar.style.display=\"none\"}else if(\"multires\"==b.type)a=JSON.parse(JSON.stringify(b.multiRes)),b.basePath&&b.multiRes.basePath&&!/^(?:[a-z]+:)?\\/\\//i.test(b.multiRes.basePath)?\r\na.basePath=b.basePath+b.multiRes.basePath:b.multiRes.basePath?a.basePath=b.multiRes.basePath:b.basePath&&(a.basePath=b.basePath),P=a;else if(!0===b.dynamic)P=b.panorama;else{if(b.panorama===p){K(b.strings.noPanoramaError);return}P=new Image}if(\"cubemap\"==b.type)for(var n=6,c=function(){n--;0===n&&pa()},d=function(a){var ea=g.createElement(\"a\");ea.href=a.target.src;ea.textContent=ea.href;K(b.strings.fileAccessError.replace(\"%s\",ea.outerHTML))},a=0;a<P.length;a++)f=b.cubeMap[a],\"null\"==f?(console.log(\"Will use background instead of missing cubemap face \"+\r\na),c()):(b.basePath&&!qa(f)&&(f=b.basePath+f),P[a].onload=c,P[a].onerror=d,P[a].src=I(f));else if(\"multires\"==b.type)pa();else if(f=\"\",b.basePath&&(f=b.basePath),!0!==b.dynamic){f=qa(b.panorama)?b.panorama:f+b.panorama;P.onload=function(){E.URL.revokeObjectURL(this.src);pa()};var e=new XMLHttpRequest;e.onloadend=function(){if(200!=e.status){var a=g.createElement(\"a\");a.href=f;a.textContent=a.href;K(b.strings.fileAccessError.replace(\"%s\",a.outerHTML))}Ba(this.response);q.load.msg.innerHTML=\"\"};e.onprogress=\r\nfunction(a){if(a.lengthComputable){q.load.lbarFill.style.width=a.loaded/a.total*100+\"%\";var b,ea;1E6<a.total?(b=\"MB\",ea=(a.loaded/1E6).toFixed(2),a=(a.total/1E6).toFixed(2)):1E3<a.total?(b=\"kB\",ea=(a.loaded/1E3).toFixed(1),a=(a.total/1E3).toFixed(1)):(b=\"B\",ea=a.loaded,a=a.total);q.load.msg.innerHTML=ea+\" / \"+a+\" \"+b}else q.load.lbox.style.display=\"block\",q.load.lbar.style.display=\"none\"};try{e.open(\"GET\",f,!0)}catch(h){K(b.strings.malformedURLError)}e.responseType=\"blob\";e.setRequestHeader(\"Accept\",\r\n\"image/*,*/*;q=0.9\");e.withCredentials=\"use-credentials\"===b.crossOrigin;e.send()}b.draggable&&J.classList.add(\"pnlm-grab\");J.classList.remove(\"pnlm-grabbing\");Ma=!0===b.dynamicUpdate;b.dynamic&&Ma&&(P=b.panorama,pa())}}function qa(a){return/^(?:[a-z]+:)?\\/\\//i.test(a)||\"/\"==a[0]||\"blob:\"==a.slice(0,5)}function pa(){C||(C=new libpannellum.renderer(M));Sa||(Sa=!0,W.addEventListener(\"mousedown\",ka,!1),g.addEventListener(\"mousemove\",ua,!1),g.addEventListener(\"mouseup\",ma,!1),b.mouseZoom&&(J.addEventListener(\"mousewheel\",\r\nU,!1),J.addEventListener(\"DOMMouseScroll\",U,!1)),b.doubleClickZoom&&W.addEventListener(\"dblclick\",Ja,!1),s.addEventListener(\"mozfullscreenchange\",d,!1),s.addEventListener(\"webkitfullscreenchange\",d,!1),s.addEventListener(\"msfullscreenchange\",d,!1),s.addEventListener(\"fullscreenchange\",d,!1),E.addEventListener(\"resize\",z,!1),E.addEventListener(\"orientationchange\",z,!1),b.disableKeyboardCtrl||(s.addEventListener(\"keydown\",V,!1),s.addEventListener(\"keyup\",R,!1),s.addEventListener(\"blur\",$,!1)),g.addEventListener(\"mouseleave\",\r\nma,!1),\"\"===g.documentElement.style.pointerAction&&\"\"===g.documentElement.style.touchAction?(W.addEventListener(\"pointerdown\",A,!1),W.addEventListener(\"pointermove\",c,!1),W.addEventListener(\"pointerup\",a,!1),W.addEventListener(\"pointerleave\",a,!1)):(W.addEventListener(\"touchstart\",Ka,!1),W.addEventListener(\"touchmove\",la,!1),W.addEventListener(\"touchend\",Ea,!1)),E.navigator.pointerEnabled&&(s.style.touchAction=\"none\"));va();x(b.hfov);setTimeout(function(){},500)}function Ba(a){var f=new FileReader;\r\nf.addEventListener(\"loadend\",function(){var n=f.result;if(navigator.userAgent.toLowerCase().match(/(iphone|ipod|ipad).* os 8_/)){var c=n.indexOf(\"\\u00ff\\u00c2\");(0>c||65536<c)&&K(b.strings.iOS8WebGLError)}c=n.indexOf(\"<x:xmpmeta\");if(-1<c&&!0!==b.ignoreGPanoXMP){var d=n.substring(c,n.indexOf(\"</x:xmpmeta>\")+12),e=function(a){var b;0<=d.indexOf(a+'=\"')?(b=d.substring(d.indexOf(a+'=\"')+a.length+2),b=b.substring(0,b.indexOf('\"'))):0<=d.indexOf(a+\">\")&&(b=d.substring(d.indexOf(a+\">\")+a.length+1),b=b.substring(0,\r\nb.indexOf(\"<\")));return b!==p?Number(b):null},n=e(\"GPano:FullPanoWidthPixels\"),c=e(\"GPano:CroppedAreaImageWidthPixels\"),g=e(\"GPano:FullPanoHeightPixels\"),h=e(\"GPano:CroppedAreaImageHeightPixels\"),l=e(\"GPano:CroppedAreaTopPixels\"),k=e(\"GPano:PoseHeadingDegrees\"),m=e(\"GPano:PosePitchDegrees\"),e=e(\"GPano:PoseRollDegrees\");null!==n&&null!==c&&null!==g&&null!==h&&null!==l&&(0>aa.indexOf(\"haov\")&&(b.haov=c/n*360),0>aa.indexOf(\"vaov\")&&(b.vaov=h/g*180),0>aa.indexOf(\"vOffset\")&&(b.vOffset=-180*((l+h/2)/g-\r\n0.5)),null!==k&&0>aa.indexOf(\"northOffset\")&&(b.northOffset=k,!1!==b.compass&&(b.compass=!0)),null!==m&&null!==e&&(0>aa.indexOf(\"horizonPitch\")&&(b.horizonPitch=m),0>aa.indexOf(\"horizonRoll\")&&(b.horizonRoll=e)))}P.src=E.URL.createObjectURL(a)});f.readAsBinaryString!==p?f.readAsBinaryString(a):f.readAsText(a)}function K(a){a===p&&(a=b.strings.genericWebGLError);q.errorMsg.innerHTML=\"<p>\"+a+\"</p>\";v.load.style.display=\"none\";q.load.box.style.display=\"none\";q.errorMsg.style.display=\"table\";Na=!0;G=\r\np;M.style.display=\"none\";B(\"error\",a)}function ja(a){var b=Q(a);fa.style.left=b.x+\"px\";fa.style.top=b.y+\"px\";clearTimeout(ja.t1);clearTimeout(ja.t2);fa.style.display=\"block\";fa.style.opacity=1;ja.t1=setTimeout(function(){fa.style.opacity=0},2E3);ja.t2=setTimeout(function(){fa.style.display=\"none\"},2500);a.preventDefault()}function Q(a){var b=s.getBoundingClientRect(),n={};n.x=(a.clientX||a.pageX)-b.left;n.y=(a.clientY||a.pageY)-b.top;return n}function ka(a){a.preventDefault();s.focus();if(G&&b.draggable){var f=\r\nQ(a);if(b.hotSpotDebug){var n=ta(a);console.log(\"Pitch: \"+n[0]+\", Yaw: \"+n[1]+\", Center Pitch: \"+b.pitch+\", Center Yaw: \"+b.yaw+\", HFOV: \"+b.hfov)}t();Da();b.roll=0;w.hfov=0;ha=!0;N=Date.now();xa=f.x;ya=f.y;Oa=b.yaw;Pa=b.pitch;J.classList.add(\"pnlm-grabbing\");J.classList.remove(\"pnlm-grab\");B(\"mousedown\",a);F()}}function Ja(a){b.minHfov===b.hfov?da.setHfov(ra,1E3):(a=ta(a),da.lookAt(a[0],a[1],b.minHfov,1E3))}function ta(a){var f=Q(a);a=C.getCanvas();var n=a.clientWidth,c=a.clientHeight;a=f.x/n*2-\r\n1;var c=(1-f.y/c*2)*c/n,e=1/Math.tan(b.hfov*Math.PI/360),d=Math.sin(b.pitch*Math.PI/180),g=Math.cos(b.pitch*Math.PI/180),f=e*g-c*d,n=Math.sqrt(a*a+f*f),c=180*Math.atan((c*g+e*d)/n)/Math.PI;a=180*Math.atan2(a/n,f/n)/Math.PI+b.yaw;-180>a&&(a+=360);180<a&&(a-=360);return[c,a]}function ua(a){if(ha&&G){N=Date.now();var f=C.getCanvas(),n=f.clientWidth,f=f.clientHeight;a=Q(a);var c=180*(Math.atan(xa/n*2-1)-Math.atan(a.x/n*2-1))/Math.PI*b.hfov/90+Oa;w.yaw=(c-b.yaw)%360*0.2;b.yaw=c;n=360*Math.atan(Math.tan(b.hfov/\r\n360*Math.PI)*f/n)/Math.PI;n=180*(Math.atan(a.y/f*2-1)-Math.atan(ya/f*2-1))/Math.PI*n/90+Pa;w.pitch=0.2*(n-b.pitch);b.pitch=n}}function ma(a){ha&&(ha=!1,15<Date.now()-N&&(w.pitch=w.yaw=0),J.classList.add(\"pnlm-grab\"),J.classList.remove(\"pnlm-grabbing\"),N=Date.now(),B(\"mouseup\",a))}function Ka(a){if(G&&b.draggable){t();Da();b.roll=0;w.hfov=0;var f=Q(a.targetTouches[0]);xa=f.x;ya=f.y;if(2==a.targetTouches.length){var n=Q(a.targetTouches[1]);xa+=0.5*(n.x-f.x);ya+=0.5*(n.y-f.y);Ha=Math.sqrt((f.x-n.x)*\r\n(f.x-n.x)+(f.y-n.y)*(f.y-n.y))}ha=!0;N=Date.now();Oa=b.yaw;Pa=b.pitch;B(\"touchstart\",a);F()}}function la(a){if(b.draggable&&(a.preventDefault(),G&&(N=Date.now()),ha&&G)){var f=Q(a.targetTouches[0]),n=f.x,c=f.y;2==a.targetTouches.length&&-1!=Ha&&(a=Q(a.targetTouches[1]),n+=0.5*(a.x-f.x),c+=0.5*(a.y-f.y),f=Math.sqrt((f.x-a.x)*(f.x-a.x)+(f.y-a.y)*(f.y-a.y)),x(b.hfov+0.1*(Ha-f)),Ha=f);f=b.hfov/360*b.touchPanSpeedCoeffFactor;n=(xa-n)*f+Oa;w.yaw=(n-b.yaw)%360*0.2;b.yaw=n;c=(c-ya)*f+Pa;w.pitch=0.2*(c-b.pitch);\r\nb.pitch=c}}function Ea(){ha=!1;150<Date.now()-N&&(w.pitch=w.yaw=0);Ha=-1;N=Date.now();B(\"touchend\",event)}function A(a){\"touch\"==a.pointerType&&G&&b.draggable&&(ia.push(a.pointerId),za.push({clientX:a.clientX,clientY:a.clientY}),a.targetTouches=za,Ka(a),a.preventDefault())}function c(a){if(\"touch\"==a.pointerType&&b.draggable)for(var f=0;f<ia.length;f++)if(a.pointerId==ia[f]){za[f].clientX=a.clientX;za[f].clientY=a.clientY;a.targetTouches=za;la(a);a.preventDefault();break}}function a(a){if(\"touch\"==\r\na.pointerType){for(var b=!1,n=0;n<ia.length;n++)a.pointerId==ia[n]&&(ia[n]=p),ia[n]&&(b=!0);b||(ia=[],za=[],Ea());a.preventDefault()}}function U(a){G&&(\"fullscreenonly\"!=b.mouseZoom||Aa)&&(a.preventDefault(),t(),N=Date.now(),a.wheelDeltaY?(x(b.hfov-0.05*a.wheelDeltaY),w.hfov=0>a.wheelDelta?1:-1):a.wheelDelta?(x(b.hfov-0.05*a.wheelDelta),w.hfov=0>a.wheelDelta?1:-1):a.detail&&(x(b.hfov+1.5*a.detail),w.hfov=0<a.detail?1:-1),F())}function V(a){t();N=Date.now();Da();b.roll=0;var f=a.which||a.keycode;0>\r\nb.capturedKeyNumbers.indexOf(f)||(a.preventDefault(),27==f?Aa&&h():wa(f,!0))}function $(){for(var a=0;10>a;a++)r[a]=!1}function R(a){var f=a.which||a.keycode;0>b.capturedKeyNumbers.indexOf(f)||(a.preventDefault(),wa(f,!1))}function wa(a,b){var n=!1;switch(a){case 109:case 189:case 17:case 173:r[0]!=b&&(n=!0);r[0]=b;break;case 107:case 187:case 16:case 61:r[1]!=b&&(n=!0);r[1]=b;break;case 38:r[2]!=b&&(n=!0);r[2]=b;break;case 87:r[6]!=b&&(n=!0);r[6]=b;break;case 40:r[3]!=b&&(n=!0);r[3]=b;break;case 83:r[7]!=\r\nb&&(n=!0);r[7]=b;break;case 37:r[4]!=b&&(n=!0);r[4]=b;break;case 65:r[8]!=b&&(n=!0);r[8]=b;break;case 39:r[5]!=b&&(n=!0);r[5]=b;break;case 68:r[9]!=b&&(n=!0),r[9]=b}n&&b&&(ba=\"undefined\"!==typeof performance&&performance.now()?performance.now():Date.now(),F())}function ga(){if(G){var a=!1,f=b.pitch,n=b.yaw,c=b.hfov,e;e=\"undefined\"!==typeof performance&&performance.now()?performance.now():Date.now();ba===p&&(ba=e);var d=(e-ba)*b.hfov/1700,d=Math.min(d,1);r[0]&&!0===b.keyboardZoom&&(x(b.hfov+(0.8*w.hfov+\r\n0.5)*d),a=!0);r[1]&&!0===b.keyboardZoom&&(x(b.hfov+(0.8*w.hfov-0.2)*d),a=!0);if(r[2]||r[6])b.pitch+=(0.8*w.pitch+0.2)*d,a=!0;if(r[3]||r[7])b.pitch+=(0.8*w.pitch-0.2)*d,a=!0;if(r[4]||r[8])b.yaw+=(0.8*w.yaw-0.2)*d,a=!0;if(r[5]||r[9])b.yaw+=(0.8*w.yaw+0.2)*d,a=!0;a&&(N=Date.now());if(b.autoRotate){if(0.001<e-ba){var a=(e-ba)/1E3,g=(w.yaw/a*d-0.2*b.autoRotate)*a,g=(0<-b.autoRotate?1:-1)*Math.min(Math.abs(b.autoRotate*a),Math.abs(g));b.yaw+=g}b.autoRotateStopDelay&&(b.autoRotateStopDelay-=e-ba,0>=b.autoRotateStopDelay&&\r\n(b.autoRotateStopDelay=!1,Z=b.autoRotate,b.autoRotate=0))}O.pitch&&(m(\"pitch\"),f=b.pitch);O.yaw&&(m(\"yaw\"),n=b.yaw);O.hfov&&(m(\"hfov\"),c=b.hfov);0<d&&!b.autoRotate&&(a=1-b.friction,r[4]||r[5]||r[8]||r[9]||O.yaw||(b.yaw+=w.yaw*d*a),r[2]||r[3]||r[6]||r[7]||O.pitch||(b.pitch+=w.pitch*d*a),r[0]||r[1]||O.hfov||x(b.hfov+w.hfov*d*a));ba=e;0<d&&(w.yaw=0.8*w.yaw+(b.yaw-n)/d*0.2,w.pitch=0.8*w.pitch+(b.pitch-f)/d*0.2,w.hfov=0.8*w.hfov+(b.hfov-c)/d*0.2,f=b.autoRotate?Math.abs(b.autoRotate):5,w.yaw=Math.min(f,\r\nMath.max(w.yaw,-f)),w.pitch=Math.min(f,Math.max(w.pitch,-f)),w.hfov=Math.min(f,Math.max(w.hfov,-f)));r[0]&&r[1]&&(w.hfov=0);(r[2]||r[6])&&(r[3]||r[7])&&(w.pitch=0);(r[4]||r[8])&&(r[5]||r[9])&&(w.yaw=0)}}function m(a){var f=O[a],n=Math.min(1,Math.max((Date.now()-f.startTime)/1E3/(f.duration/1E3),0)),n=f.startPosition+b.animationTimingFunction(n)*(f.endPosition-f.startPosition);if(f.endPosition>f.startPosition&&n>=f.endPosition||f.endPosition<f.startPosition&&n<=f.endPosition||f.endPosition===f.startPosition)n=\r\nf.endPosition,w[a]=0,delete O[a];b[a]=n}function z(){d(\"resize\")}function F(){Ta||(Ta=!0,ca())}function ca(){if(!Za)if(Fa(),Qa&&clearTimeout(Qa),ha||!0===X)requestAnimationFrame(ca);else if(r[0]||r[1]||r[2]||r[3]||r[4]||r[5]||r[6]||r[7]||r[8]||r[9]||b.autoRotate||O.pitch||O.yaw||O.hfov||0.01<Math.abs(w.yaw)||0.01<Math.abs(w.pitch)||0.01<Math.abs(w.hfov))ga(),0<=b.autoRotateInactivityDelay&&Z&&Date.now()-N>b.autoRotateInactivityDelay&&!b.autoRotate&&(b.autoRotate=Z,da.lookAt(Ga,p,ra,3E3)),requestAnimationFrame(ca);\r\nelse if(C&&(C.isLoading()||!0===b.dynamic&&Ma))requestAnimationFrame(ca);else{B(\"animatefinished\",{pitch:da.getPitch(),yaw:da.getYaw(),hfov:da.getHfov()});Ta=!1;ba=p;var a=b.autoRotateInactivityDelay-(Date.now()-N);0<a?Qa=setTimeout(function(){b.autoRotate=Z;da.lookAt(Ga,p,ra,3E3);F()},a):0<=b.autoRotateInactivityDelay&&Z&&(b.autoRotate=Z,da.lookAt(Ga,p,ra,3E3),F())}}function Fa(){var a;if(G){var f=C.getCanvas();!1!==b.autoRotate&&(360<b.yaw?b.yaw-=360:-360>b.yaw&&(b.yaw+=360));a=b.yaw;var n=0;if(b.avoidShowingBackground){var c=\r\nb.hfov/2,d=180*Math.atan2(Math.tan(c/180*Math.PI),f.width/f.height)/Math.PI;b.vaov>b.haov?Math.min(Math.cos((b.pitch-c)/180*Math.PI),Math.cos((b.pitch+c)/180*Math.PI)):n=c*(1-Math.min(Math.cos((b.pitch-d)/180*Math.PI),Math.cos((b.pitch+d)/180*Math.PI)))}var c=b.maxYaw-b.minYaw,d=-180,e=180;360>c&&(d=b.minYaw+b.hfov/2+n,e=b.maxYaw-b.hfov/2-n,c<b.hfov&&(d=e=(d+e)/2),b.yaw=Math.max(d,Math.min(e,b.yaw)));!1===b.autoRotate&&(360<b.yaw?b.yaw-=360:-360>b.yaw&&(b.yaw+=360));!1!==b.autoRotate&&a!=b.yaw&&ba!==\r\np&&(b.autoRotate*=-1);a=2*Math.atan(Math.tan(b.hfov/180*Math.PI*0.5)/(f.width/f.height))/Math.PI*180;f=b.minPitch+a/2;n=b.maxPitch-a/2;b.maxPitch-b.minPitch<a&&(f=n=(f+n)/2);isNaN(f)&&(f=-90);isNaN(n)&&(n=90);b.pitch=Math.max(f,Math.min(n,b.pitch));C.render(b.pitch*Math.PI/180,b.yaw*Math.PI/180,b.hfov*Math.PI/180,{roll:b.roll*Math.PI/180});b.hotSpots.forEach(Ca);b.compass&&(Ia.style.transform=\"rotate(\"+(-b.yaw-b.northOffset)+\"deg)\",Ia.style.webkitTransform=\"rotate(\"+(-b.yaw-b.northOffset)+\"deg)\")}}\r\nfunction Y(a,b,c,d){this.w=a;this.x=b;this.y=c;this.z=d}function na(a){var f;f=a.alpha;var c=a.beta;a=a.gamma;c=[c?c*Math.PI/180/2:0,a?a*Math.PI/180/2:0,f?f*Math.PI/180/2:0];f=[Math.cos(c[0]),Math.cos(c[1]),Math.cos(c[2])];c=[Math.sin(c[0]),Math.sin(c[1]),Math.sin(c[2])];f=new Y(f[0]*f[1]*f[2]-c[0]*c[1]*c[2],c[0]*f[1]*f[2]-f[0]*c[1]*c[2],f[0]*c[1]*f[2]+c[0]*f[1]*c[2],f[0]*f[1]*c[2]+c[0]*c[1]*f[2]);f=f.multiply(new Y(Math.sqrt(0.5),-Math.sqrt(0.5),0,0));c=E.orientation?-E.orientation*Math.PI/180/2:\r\n0;f=f.multiply(new Y(Math.cos(c),0,-Math.sin(c),0)).toEulerAngles();\"number\"==typeof X&&10>X?X+=1:10===X?($a=f[2]/Math.PI*180+b.yaw,X=!0,requestAnimationFrame(ca)):(b.pitch=f[0]/Math.PI*180,b.roll=-f[1]/Math.PI*180,b.yaw=-f[2]/Math.PI*180+$a)}function va(){try{var a={};b.horizonPitch!==p&&(a.horizonPitch=b.horizonPitch*Math.PI/180);b.horizonRoll!==p&&(a.horizonRoll=b.horizonRoll*Math.PI/180);b.backgroundColor!==p&&(a.backgroundColor=b.backgroundColor);C.init(P,b.type,b.dynamic,b.haov*Math.PI/180,\r\nb.vaov*Math.PI/180,b.vOffset*Math.PI/180,S,a);!0!==b.dynamic&&(P=p)}catch(f){if(\"webgl error\"==f.type||\"no webgl\"==f.type)K();else if(\"webgl size error\"==f.type)K(b.strings.textureSizeError.replace(\"%s\",f.width).replace(\"%s\",f.maxWidth));else throw K(b.strings.unknownError),f;}}function S(){if(b.sceneFadeDuration&&C.fadeImg!==p){C.fadeImg.style.opacity=0;var a=C.fadeImg;delete C.fadeImg;setTimeout(function(){M.removeChild(a);B(\"scenechangefadedone\")},b.sceneFadeDuration)}Ia.style.display=b.compass?\r\n\"inline\":\"none\";L();q.load.box.style.display=\"none\";sa!==p&&(M.removeChild(sa),sa=p);G=!0;B(\"load\");F()}function La(a){a.pitch=Number(a.pitch)||0;a.yaw=Number(a.yaw)||0;var f=g.createElement(\"div\");f.className=\"pnlm-hotspot-base\";f.className=a.cssClass?f.className+(\" \"+a.cssClass):f.className+(\" pnlm-hotspot pnlm-sprite pnlm-\"+D(a.type));var c=g.createElement(\"span\");a.text&&(c.innerHTML=D(a.text));var d;if(a.video){d=g.createElement(\"video\");var e=a.video;b.basePath&&!qa(e)&&(e=b.basePath+e);d.src=\r\nI(e);d.controls=!0;d.style.width=a.width+\"px\";M.appendChild(f);c.appendChild(d)}else if(a.image){e=a.image;b.basePath&&!qa(e)&&(e=b.basePath+e);d=g.createElement(\"a\");d.href=I(a.URL?a.URL:e,!0);d.target=\"_blank\";c.appendChild(d);var h=g.createElement(\"img\");h.src=I(e);h.style.width=a.width+\"px\";h.style.paddingTop=\"5px\";M.appendChild(f);d.appendChild(h);c.style.maxWidth=\"initial\"}else if(a.URL){d=g.createElement(\"a\");d.href=I(a.URL,!0);if(a.attributes)for(e in a.attributes)d.setAttribute(e,a.attributes[e]);\r\nelse d.target=\"_blank\";M.appendChild(d);f.className+=\" pnlm-pointer\";c.className+=\" pnlm-pointer\";d.appendChild(f)}else a.sceneId&&(f.onclick=f.ontouchend=function(){f.clicked||(f.clicked=!0,y(a.sceneId,a.targetPitch,a.targetYaw,a.targetHfov));return!1},f.className+=\" pnlm-pointer\",c.className+=\" pnlm-pointer\"),M.appendChild(f);if(a.createTooltipFunc)a.createTooltipFunc(f,a.createTooltipArgs);else if(a.text||a.video||a.image)f.classList.add(\"pnlm-tooltip\"),f.appendChild(c),c.style.width=c.scrollWidth-\r\n20+\"px\",c.style.marginLeft=-(c.scrollWidth-f.offsetWidth)/2+\"px\",c.style.marginTop=-c.scrollHeight-12+\"px\";a.clickHandlerFunc&&(f.addEventListener(\"click\",function(b){a.clickHandlerFunc(b,a.clickHandlerArgs)},\"false\"),f.className+=\" pnlm-pointer\",c.className+=\" pnlm-pointer\");a.div=f}function L(){Ua||(b.hotSpots?(b.hotSpots=b.hotSpots.sort(function(a,b){return a.pitch<b.pitch}),b.hotSpots.forEach(La)):b.hotSpots=[],Ua=!0,b.hotSpots.forEach(Ca))}function e(){var a=b.hotSpots;Ua=!1;delete b.hotSpots;\r\nif(a)for(var f=0;f<a.length;f++){var c=a[f].div;if(c){for(;c.parentNode&&c.parentNode!=M;)c=c.parentNode;M.removeChild(c)}delete a[f].div}}function Ca(a){var f=Math.sin(a.pitch*Math.PI/180),c=Math.cos(a.pitch*Math.PI/180),d=Math.sin(b.pitch*Math.PI/180),e=Math.cos(b.pitch*Math.PI/180),g=Math.cos((-a.yaw+b.yaw)*Math.PI/180),h=f*d+c*g*e;if(90>=a.yaw&&-90<a.yaw&&0>=h||(90<a.yaw||-90>=a.yaw)&&0>=h)a.div.style.visibility=\"hidden\";else{var l=Math.sin((-a.yaw+b.yaw)*Math.PI/180),k=Math.tan(b.hfov*Math.PI/\r\n360);a.div.style.visibility=\"visible\";var m=C.getCanvas(),p=m.clientWidth,m=m.clientHeight,f=[-p/k*l*c/h/2,-p/k*(f*e-c*g*d)/h/2],c=Math.sin(b.roll*Math.PI/180),d=Math.cos(b.roll*Math.PI/180),f=[f[0]*d-f[1]*c,f[0]*c+f[1]*d];f[0]+=(p-a.div.offsetWidth)/2;f[1]+=(m-a.div.offsetHeight)/2;p=\"translate(\"+f[0]+\"px, \"+f[1]+\"px) translateZ(9999px) rotate(\"+b.roll+\"deg)\";a.scale&&(p+=\" scale(\"+ra/b.hfov/h+\")\");a.div.style.webkitTransform=p;a.div.style.MozTransform=p;a.div.style.transform=p}}function H(a){b=\r\n{};var f,c,d=\"haov vaov vOffset northOffset horizonPitch horizonRoll\".split(\" \");aa=[];for(f in Va)Va.hasOwnProperty(f)&&(b[f]=Va[f]);for(f in k.default)if(k.default.hasOwnProperty(f))if(\"strings\"==f)for(c in k.default.strings)k.default.strings.hasOwnProperty(c)&&(b.strings[c]=D(k.default.strings[c]));else b[f]=k.default[f],0<=d.indexOf(f)&&aa.push(f);if(null!==a&&\"\"!==a&&k.scenes&&k.scenes[a]){var e=k.scenes[a];for(f in e)if(e.hasOwnProperty(f))if(\"strings\"==f)for(c in e.strings)e.strings.hasOwnProperty(c)&&\r\n(b.strings[c]=D(e.strings[c]));else b[f]=e[f],0<=d.indexOf(f)&&aa.push(f);b.scene=a}for(f in k)if(k.hasOwnProperty(f))if(\"strings\"==f)for(c in k.strings)k.strings.hasOwnProperty(c)&&(b.strings[c]=D(k.strings[c]));else b[f]=k[f],0<=d.indexOf(f)&&aa.push(f)}function l(a){if((a=a?a:!1)&&\"preview\"in b){var c=b.preview;b.basePath&&!qa(c)&&(c=b.basePath+c);sa=g.createElement(\"div\");sa.className=\"pnlm-preview-img\";sa.style.backgroundImage=\"url('\"+I(c).replace(/\"/g,\"%22\").replace(/'/g,\"%27\")+\"')\";M.appendChild(sa)}var c=\r\nb.title,d=b.author;a&&(\"previewTitle\"in b&&(b.title=b.previewTitle),\"previewAuthor\"in b&&(b.author=b.previewAuthor));b.hasOwnProperty(\"title\")||(q.title.innerHTML=\"\");b.hasOwnProperty(\"author\")||(q.author.innerHTML=\"\");b.hasOwnProperty(\"title\")||b.hasOwnProperty(\"author\")||(q.container.style.display=\"none\");v.load.innerHTML=\"<p>\"+b.strings.loadButtonLabel+\"</p>\";q.load.boxp.innerHTML=b.strings.loadingLabel;for(var e in b)if(b.hasOwnProperty(e))switch(e){case \"title\":q.title.innerHTML=D(b[e]);q.container.style.display=\r\n\"inline\";break;case \"author\":var h=D(b[e]);b.authorURL&&(h=g.createElement(\"a\"),h.href=I(b.authorURL,!0),h.target=\"_blank\",h.innerHTML=D(b[e]),h=h.outerHTML);q.author.innerHTML=b.strings.bylineLabel.replace(\"%s\",h);q.container.style.display=\"inline\";break;case \"fallback\":h=g.createElement(\"a\");h.href=I(b[e],!0);h.target=\"_blank\";h.textContent=\"Click here to view this panorama in an alternative viewer.\";var k=g.createElement(\"p\");k.textContent=\"Your browser does not support WebGL.\";k.appendChild(g.createElement(\"br\"));\r\nk.appendChild(h);q.errorMsg.innerHTML=\"\";q.errorMsg.appendChild(k);break;case \"hfov\":x(Number(b[e]));break;case \"autoLoad\":!0===b[e]&&C===p&&(q.load.box.style.display=\"inline\",v.load.style.display=\"none\",oa());break;case \"showZoomCtrl\":v.zoom.style.display=b[e]&&!1!=b.showControls?\"block\":\"none\";break;case \"showFullscreenCtrl\":v.fullscreen.style.display=b[e]&&!1!=b.showControls&&(\"fullscreen\"in g||\"mozFullScreen\"in g||\"webkitIsFullScreen\"in g||\"msFullscreenElement\"in g)?\"block\":\"none\";break;case \"hotSpotDebug\":Wa.style.display=\r\nb[e]?\"block\":\"none\";break;case \"showControls\":b[e]||(v.orientation.style.display=\"none\",v.zoom.style.display=\"none\",v.fullscreen.style.display=\"none\");break;case \"orientationOnByDefault\":b[e]&&Ra()}a&&(c?b.title=c:delete b.title,d?b.author=d:delete b.author)}function h(){if(G&&!Na)if(Aa)g.exitFullscreen?g.exitFullscreen():g.mozCancelFullScreen?g.mozCancelFullScreen():g.webkitCancelFullScreen?g.webkitCancelFullScreen():g.msExitFullscreen&&g.msExitFullscreen();else try{s.requestFullscreen?s.requestFullscreen():\r\ns.mozRequestFullScreen?s.mozRequestFullScreen():s.msRequestFullscreen?s.msRequestFullscreen():s.webkitRequestFullScreen()}catch(a){}}function d(a){g.fullscreenElement||g.fullscreen||g.mozFullScreen||g.webkitIsFullScreen||g.msFullscreenElement?(v.fullscreen.classList.add(\"pnlm-fullscreen-toggle-button-active\"),Aa=!0):(v.fullscreen.classList.remove(\"pnlm-fullscreen-toggle-button-active\"),Aa=!1);\"resize\"!==a&&B(\"fullscreenchange\",Aa);C.resize();x(b.hfov);F()}function u(a){var c=b.minHfov;\"multires\"==\r\nb.type&&C&&!b.multiResMinHfov&&(c=Math.min(c,C.getCanvas().width/(b.multiRes.cubeResolution/90*0.9)));if(c>b.maxHfov)return console.log(\"HFOV bounds do not make sense (minHfov > maxHfov).\"),b.hfov;var d=b.hfov,d=a<c?c:a>b.maxHfov?b.maxHfov:a;b.avoidShowingBackground&&C&&(a=C.getCanvas(),d=Math.min(d,360*Math.atan(Math.tan((b.maxPitch-b.minPitch)/360*Math.PI)/a.height*a.width)/Math.PI));return d}function x(a){b.hfov=u(a);B(\"zoomchange\",b.hfov)}function t(){O={};Z=b.autoRotate?b.autoRotate:Z;b.autoRotate=\r\n!1}function Ya(){Na&&(q.load.box.style.display=\"none\",q.errorMsg.style.display=\"none\",Na=!1,M.style.display=\"block\",B(\"errorcleared\"));G=!1;v.load.style.display=\"none\";q.load.box.style.display=\"inline\";oa()}function y(a,c,d,h,g){G||(g=!0);G=!1;O={};var m,q;if(b.sceneFadeDuration&&!g&&(m=C.render(b.pitch*Math.PI/180,b.yaw*Math.PI/180,b.hfov*Math.PI/180,{returnImage:!0}),m!==p)){g=new Image;g.className=\"pnlm-fade-img\";g.style.transition=\"opacity \"+b.sceneFadeDuration/1E3+\"s\";g.style.width=\"100%\";g.style.height=\r\n\"100%\";g.onload=function(){y(a,c,d,h,!0)};g.src=m;M.appendChild(g);C.fadeImg=g;return}g=\"same\"===c?b.pitch:c;m=\"same\"===d?b.yaw:\"sameAzimuth\"===d?b.yaw+(b.northOffset||0)-(k.scenes[a].northOffset||0):d;q=\"same\"===h?b.hfov:h;e();H(a);w.yaw=w.pitch=w.hfov=0;l();g!==p&&(b.pitch=g);m!==p&&(b.yaw=m);q!==p&&(b.hfov=q);B(\"scenechange\",a);Ya()}function Da(){E.removeEventListener(\"deviceorientation\",na);v.orientation.classList.remove(\"pnlm-orientation-button-active\");X=!1}function Ra(){\"function\"===typeof DeviceMotionEvent.requestPermission?\r\nDeviceOrientationEvent.requestPermission().then(function(a){\"granted\"==a&&(X=1,E.addEventListener(\"deviceorientation\",na),v.orientation.classList.add(\"pnlm-orientation-button-active\"))}):(X=1,E.addEventListener(\"deviceorientation\",na),v.orientation.classList.add(\"pnlm-orientation-button-active\"))}function D(a){return k.escapeHTML?String(a).split(/&/g).join(\"&amp;\").split('\"').join(\"&quot;\").split(\"'\").join(\"&#39;\").split(\"<\").join(\"&lt;\").split(\">\").join(\"&gt;\").split(\"/\").join(\"&#x2f;\").split(\"\\n\").join(\"<br>\"):\r\nString(a).split(\"\\n\").join(\"<br>\")}function I(a,b){try{var c=decodeURIComponent(ab(a)).replace(/[^\\w:]/g,\"\").toLowerCase()}catch(d){return\"about:blank\"}return 0===c.indexOf(\"javascript:\")||0===c.indexOf(\"vbscript:\")?(console.log(\"Script URL removed.\"),\"about:blank\"):b&&0===c.indexOf(\"data:\")?(console.log(\"Data URI removed from link.\"),\"about:blank\"):a}function ab(a){return a.replace(/&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/ig,function(a,b){b=b.toLowerCase();return\"colon\"===b?\":\":\"#\"===b.charAt(0)?\r\n\"x\"===b.charAt(1)?String.fromCharCode(parseInt(b.substring(2),16)):String.fromCharCode(+b.substring(1)):\"\"})}function B(a){if(a in T)for(var b=T[a].length;0<b;b--)T[a][T[a].length-b].apply(null,[].slice.call(arguments,1))}var da=this,b,C,sa,ha=!1,N=Date.now(),xa=0,ya=0,Ha=-1,Oa=0,Pa=0,r=Array(10),Aa=!1,G,Na=!1,Sa=!1,P,ba,w={yaw:0,pitch:0,hfov:0},Ta=!1,X=!1,$a=0,Qa,Z=0,ra,Ga,O={},T={},aa=[],Ma=!1,Ua=!1,Za=!1,Va={hfov:100,minHfov:50,multiResMinHfov:!1,maxHfov:120,pitch:0,minPitch:p,maxPitch:p,yaw:0,\r\nminYaw:-180,maxYaw:180,roll:0,haov:360,vaov:180,vOffset:0,autoRotate:!1,autoRotateInactivityDelay:-1,autoRotateStopDelay:p,type:\"equirectangular\",northOffset:0,showFullscreenCtrl:!0,dynamic:!1,dynamicUpdate:!1,doubleClickZoom:!0,keyboardZoom:!0,mouseZoom:!0,showZoomCtrl:!0,autoLoad:!1,showControls:!0,orientationOnByDefault:!1,hotSpotDebug:!1,backgroundColor:[0,0,0],avoidShowingBackground:!1,animationTimingFunction:function(a){return 0.5>a?2*a*a:-1+(4-2*a)*a},draggable:!0,disableKeyboardCtrl:!1,crossOrigin:\"anonymous\",\r\ntouchPanSpeedCoeffFactor:1,capturedKeyNumbers:[16,17,27,37,38,39,40,61,65,68,83,87,107,109,173,187,189],friction:0.15,strings:{loadButtonLabel:\"Click to<br>Load<br>Panorama\",loadingLabel:\"Loading...\",bylineLabel:\"by %s\",noPanoramaError:\"No panorama image was specified.\",fileAccessError:\"The file %s could not be accessed.\",malformedURLError:\"There is something wrong with the panorama URL.\",iOS8WebGLError:\"Due to iOS 8's broken WebGL implementation, only progressive encoded JPEGs work for your device (this panorama uses standard encoding).\",\r\ngenericWebGLError:\"Your browser does not have the necessary WebGL support to display this panorama.\",textureSizeError:\"This panorama is too big for your device! It's %spx wide, but your device only supports images up to %spx wide. Try another device. (If you're the author, try scaling down the image.)\",unknownError:\"Unknown error. Check developer console.\"}};s=\"string\"===typeof s?g.getElementById(s):s;s.classList.add(\"pnlm-container\");s.tabIndex=0;var J=g.createElement(\"div\");J.className=\"pnlm-ui\";\r\ns.appendChild(J);var M=g.createElement(\"div\");M.className=\"pnlm-render-container\";s.appendChild(M);var W=g.createElement(\"div\");W.className=\"pnlm-dragfix\";J.appendChild(W);var fa=g.createElement(\"span\");fa.className=\"pnlm-about-msg\";fa.innerHTML='<a href=\"https://pannellum.org/\" target=\"_blank\">Pannellum</a> 2.5.6';J.appendChild(fa);W.addEventListener(\"contextmenu\",ja);var q={},Wa=g.createElement(\"div\");Wa.className=\"pnlm-sprite pnlm-hot-spot-debug-indicator\";J.appendChild(Wa);q.container=g.createElement(\"div\");\r\nq.container.className=\"pnlm-panorama-info\";q.title=g.createElement(\"div\");q.title.className=\"pnlm-title-box\";q.container.appendChild(q.title);q.author=g.createElement(\"div\");q.author.className=\"pnlm-author-box\";q.container.appendChild(q.author);J.appendChild(q.container);q.load={};q.load.box=g.createElement(\"div\");q.load.box.className=\"pnlm-load-box\";q.load.boxp=g.createElement(\"p\");q.load.box.appendChild(q.load.boxp);q.load.lbox=g.createElement(\"div\");q.load.lbox.className=\"pnlm-lbox\";q.load.lbox.innerHTML=\r\n'<div class=\"pnlm-loading\"></div>';q.load.box.appendChild(q.load.lbox);q.load.lbar=g.createElement(\"div\");q.load.lbar.className=\"pnlm-lbar\";q.load.lbarFill=g.createElement(\"div\");q.load.lbarFill.className=\"pnlm-lbar-fill\";q.load.lbar.appendChild(q.load.lbarFill);q.load.box.appendChild(q.load.lbar);q.load.msg=g.createElement(\"p\");q.load.msg.className=\"pnlm-lmsg\";q.load.box.appendChild(q.load.msg);J.appendChild(q.load.box);q.errorMsg=g.createElement(\"div\");q.errorMsg.className=\"pnlm-error-msg pnlm-info-box\";\r\nJ.appendChild(q.errorMsg);var v={};v.container=g.createElement(\"div\");v.container.className=\"pnlm-controls-container\";J.appendChild(v.container);v.load=g.createElement(\"div\");v.load.className=\"pnlm-load-button\";v.load.addEventListener(\"click\",function(){l();Ya()});J.appendChild(v.load);v.zoom=g.createElement(\"div\");v.zoom.className=\"pnlm-zoom-controls pnlm-controls\";v.zoomIn=g.createElement(\"div\");v.zoomIn.className=\"pnlm-zoom-in pnlm-sprite pnlm-control\";v.zoomIn.addEventListener(\"click\",function(){G&&\r\n(x(b.hfov-5),F())});v.zoom.appendChild(v.zoomIn);v.zoomOut=g.createElement(\"div\");v.zoomOut.className=\"pnlm-zoom-out pnlm-sprite pnlm-control\";v.zoomOut.addEventListener(\"click\",function(){G&&(x(b.hfov+5),F())});v.zoom.appendChild(v.zoomOut);v.container.appendChild(v.zoom);v.fullscreen=g.createElement(\"div\");v.fullscreen.addEventListener(\"click\",h);v.fullscreen.className=\"pnlm-fullscreen-toggle-button pnlm-sprite pnlm-fullscreen-toggle-button-inactive pnlm-controls pnlm-control\";(g.fullscreenEnabled||\r\ng.mozFullScreenEnabled||g.webkitFullscreenEnabled||g.msFullscreenEnabled)&&v.container.appendChild(v.fullscreen);v.orientation=g.createElement(\"div\");v.orientation.addEventListener(\"click\",function(a){X?Da():Ra()});v.orientation.addEventListener(\"mousedown\",function(a){a.stopPropagation()});v.orientation.addEventListener(\"touchstart\",function(a){a.stopPropagation()});v.orientation.addEventListener(\"pointerdown\",function(a){a.stopPropagation()});v.orientation.className=\"pnlm-orientation-button pnlm-orientation-button-inactive pnlm-sprite pnlm-controls pnlm-control\";\r\nvar Xa=!1;E.DeviceOrientationEvent&&\"https:\"==location.protocol&&0<=navigator.userAgent.toLowerCase().indexOf(\"mobi\")&&(v.container.appendChild(v.orientation),Xa=!0);var Ia=g.createElement(\"div\");Ia.className=\"pnlm-compass pnlm-controls pnlm-control\";J.appendChild(Ia);k.firstScene?H(k.firstScene):k.default&&k.default.firstScene?H(k.default.firstScene):H(null);l(!0);var ia=[],za=[];Y.prototype.multiply=function(a){return new Y(this.w*a.w-this.x*a.x-this.y*a.y-this.z*a.z,this.x*a.w+this.w*a.x+this.y*\r\na.z-this.z*a.y,this.y*a.w+this.w*a.y+this.z*a.x-this.x*a.z,this.z*a.w+this.w*a.z+this.x*a.y-this.y*a.x)};Y.prototype.toEulerAngles=function(){var a=Math.atan2(2*(this.w*this.x+this.y*this.z),1-2*(this.x*this.x+this.y*this.y)),b=Math.asin(2*(this.w*this.y-this.z*this.x)),c=Math.atan2(2*(this.w*this.z+this.x*this.y),1-2*(this.y*this.y+this.z*this.z));return[a,b,c]};this.isLoaded=function(){return Boolean(G)};this.getPitch=function(){return b.pitch};this.setPitch=function(a,c,d,e){N=Date.now();if(1E-6>=\r\nMath.abs(a-b.pitch))return\"function\"==typeof d&&d(e),this;(c=c==p?1E3:Number(c))?(O.pitch={startTime:Date.now(),startPosition:b.pitch,endPosition:a,duration:c},\"function\"==typeof d&&setTimeout(function(){d(e)},c)):b.pitch=a;F();return this};this.getPitchBounds=function(){return[b.minPitch,b.maxPitch]};this.setPitchBounds=function(a){b.minPitch=Math.max(-90,Math.min(a[0],90));b.maxPitch=Math.max(-90,Math.min(a[1],90));return this};this.getYaw=function(){return(b.yaw+540)%360-180};this.setYaw=function(a,\r\nc,d,e){N=Date.now();if(1E-6>=Math.abs(a-b.yaw))return\"function\"==typeof d&&d(e),this;c=c==p?1E3:Number(c);a=(a+180)%360-180;c?(180<b.yaw-a?a+=360:180<a-b.yaw&&(a-=360),O.yaw={startTime:Date.now(),startPosition:b.yaw,endPosition:a,duration:c},\"function\"==typeof d&&setTimeout(function(){d(e)},c)):b.yaw=a;F();return this};this.getYawBounds=function(){return[b.minYaw,b.maxYaw]};this.setYawBounds=function(a){b.minYaw=Math.max(-360,Math.min(a[0],360));b.maxYaw=Math.max(-360,Math.min(a[1],360));return this};\r\nthis.getHfov=function(){return b.hfov};this.setHfov=function(a,c,d,e){N=Date.now();if(1E-6>=Math.abs(a-b.hfov))return\"function\"==typeof d&&d(e),this;(c=c==p?1E3:Number(c))?(O.hfov={startTime:Date.now(),startPosition:b.hfov,endPosition:u(a),duration:c},\"function\"==typeof d&&setTimeout(function(){d(e)},c)):x(a);F();return this};this.getHfovBounds=function(){return[b.minHfov,b.maxHfov]};this.setHfovBounds=function(a){b.minHfov=Math.max(0,a[0]);b.maxHfov=Math.max(0,a[1]);return this};this.lookAt=function(a,\r\nc,d,e,g,h){e=e==p?1E3:Number(e);a!==p&&1E-6<Math.abs(a-b.pitch)&&(this.setPitch(a,e,g,h),g=p);c!==p&&1E-6<Math.abs(c-b.yaw)&&(this.setYaw(c,e,g,h),g=p);d!==p&&1E-6<Math.abs(d-b.hfov)&&(this.setHfov(d,e,g,h),g=p);\"function\"==typeof g&&g(h);return this};this.getNorthOffset=function(){return b.northOffset};this.setNorthOffset=function(a){b.northOffset=Math.min(360,Math.max(0,a));F();return this};this.getHorizonRoll=function(){return b.horizonRoll};this.setHorizonRoll=function(a){b.horizonRoll=Math.min(90,\r\nMath.max(-90,a));C.setPose(b.horizonPitch*Math.PI/180,b.horizonRoll*Math.PI/180);F();return this};this.getHorizonPitch=function(){return b.horizonPitch};this.setHorizonPitch=function(a){b.horizonPitch=Math.min(90,Math.max(-90,a));C.setPose(b.horizonPitch*Math.PI/180,b.horizonRoll*Math.PI/180);F();return this};this.startAutoRotate=function(a,c){a=a||Z||1;c=c===p?Ga:c;b.autoRotate=a;da.lookAt(c,p,ra,3E3);F();return this};this.stopAutoRotate=function(){Z=b.autoRotate?b.autoRotate:Z;b.autoRotate=!1;b.autoRotateInactivityDelay=\r\n-1;return this};this.stopMovement=function(){t();w={yaw:0,pitch:0,hfov:0}};this.getRenderer=function(){return C};this.setUpdate=function(a){Ma=!0===a;C===p?pa():F();return this};this.mouseEventToCoords=function(a){return ta(a)};this.loadScene=function(a,b,c,d){!1!==G&&y(a,b,c,d);return this};this.getScene=function(){return b.scene};this.addScene=function(a,b){k.scenes[a]=b;return this};this.removeScene=function(a){if(b.scene===a||!k.scenes.hasOwnProperty(a))return!1;delete k.scenes[a];return!0};this.toggleFullscreen=\r\nfunction(){h();return this};this.getConfig=function(){return b};this.getContainer=function(){return s};this.addHotSpot=function(a,c){if(c===p&&b.scene===p)b.hotSpots.push(a);else{var d=c!==p?c:b.scene;if(k.scenes.hasOwnProperty(d))k.scenes[d].hasOwnProperty(\"hotSpots\")||(k.scenes[d].hotSpots=[],d==b.scene&&(b.hotSpots=k.scenes[d].hotSpots)),k.scenes[d].hotSpots.push(a);else throw\"Invalid scene ID!\";}if(c===p||b.scene==c)La(a),G&&Ca(a);return this};this.removeHotSpot=function(a,c){if(c===p||b.scene==\r\nc){if(!b.hotSpots)return!1;for(var d=0;d<b.hotSpots.length;d++)if(b.hotSpots[d].hasOwnProperty(\"id\")&&b.hotSpots[d].id===a){for(var e=b.hotSpots[d].div;e.parentNode!=M;)e=e.parentNode;M.removeChild(e);delete b.hotSpots[d].div;b.hotSpots.splice(d,1);return!0}}else if(k.scenes.hasOwnProperty(c)){if(!k.scenes[c].hasOwnProperty(\"hotSpots\"))return!1;for(d=0;d<k.scenes[c].hotSpots.length;d++)if(k.scenes[c].hotSpots[d].hasOwnProperty(\"id\")&&k.scenes[c].hotSpots[d].id===a)return k.scenes[c].hotSpots.splice(d,\r\n1),!0}else return!1};this.resize=function(){C&&z()};this.isLoaded=function(){return G};this.isOrientationSupported=function(){return Xa||!1};this.stopOrientation=function(){Da()};this.startOrientation=function(){Xa&&Ra()};this.isOrientationActive=function(){return Boolean(X)};this.on=function(a,b){T[a]=T[a]||[];T[a].push(b);return this};this.off=function(a,b){if(!a)return T={},this;if(b){var c=T[a].indexOf(b);0<=c&&T[a].splice(c,1);0==T[a].length&&delete T[a]}else delete T[a];return this};this.destroy=\r\nfunction(){Za=!0;clearTimeout(Qa);C&&C.destroy();Sa&&(g.removeEventListener(\"mousemove\",ua,!1),g.removeEventListener(\"mouseup\",ma,!1),s.removeEventListener(\"mozfullscreenchange\",d,!1),s.removeEventListener(\"webkitfullscreenchange\",d,!1),s.removeEventListener(\"msfullscreenchange\",d,!1),s.removeEventListener(\"fullscreenchange\",d,!1),E.removeEventListener(\"resize\",z,!1),E.removeEventListener(\"orientationchange\",z,!1),s.removeEventListener(\"keydown\",V,!1),s.removeEventListener(\"keyup\",R,!1),s.removeEventListener(\"blur\",\r\n$,!1),g.removeEventListener(\"mouseleave\",ma,!1));s.innerHTML=\"\";s.classList.remove(\"pnlm-container\")}}return{viewer:function(g,k){return new Ba(g,k)}}}(window,document);\r\n\n/*\r\n * Copyright (c) 2024 Quanos Solutions GmbH\r\n */\r\n\r\n\r\nfunction open360(id, imageUrl, hotspotsOfImage, plainImageOnly) {\r\n    forceEventBubblingClassNames.add(\"pnlm-dragfix\");\r\n    var config = {\r\n        \"type\": \"equirectangular\",\r\n        \"panorama\": imageUrl,\r\n        \"autoLoad\": true,\r\n        \"hotSpots\": hotspotsOfImage\r\n    };\r\n    var viewer360 = pannellum.viewer(id, config);\r\n    var parent = $(id);\r\n    if (parent) {\r\n        parent.viewer360 = viewer360;\r\n    }\r\n    viewer360.getContainer().plainImageOnly = plainImageOnly;\r\n    let grabLayer = viewer360.getContainer().children[0];\r\n    if (plainImageOnly) {\r\n        grabLayer.style.zIndex = 0; // \"pnlm-ui pnlm-grab\"-Ebene in den Hintergrund, um Zoomen zu deaktivieren\r\n    } else {\r\n        // Das MouseUp kommt nicht an (am document), daher feuern wir es direkt, damit das Grabben im Bild beendet wird\r\n        grabLayer.onmouseup = function(event) {\r\n            var mouseUpEvent = mouseUpEvent = new MouseEvent(\"mouseup\");\r\n            document.dispatchEvent(mouseUpEvent);\r\n        }\r\n    }\r\n    viewer360Resized(id, plainImageOnly);\r\n}\r\n\r\nfunction viewer360Resized(id, hidePanWindow) {\r\n    var viewer360 = $(id).viewer360;\r\n    if (viewer360 == null) {\r\n        return;\r\n    }\r\n    viewer360.resize();\r\n    updateViewer360ControlsVisibility(viewer360, hidePanWindow);\r\n}\r\n\r\nfunction updateViewer360ControlsVisibility(viewer360, hidePanWindow) {\r\n    var container = viewer360.getContainer();\r\n    if (container == null) {\r\n        return;\r\n    }\r\n    console.log(\"resize from adjust\");\r\n    var minHeight = dwImageViewerGetMinHeightForViewerControls();\r\n    if (!hidePanWindow && (container.offsetHeight > minHeight)) {\r\n        setViewer360ControlsVisible(viewer360, true);\r\n    } else {\r\n        setViewer360ControlsVisible(viewer360, false);\r\n    }\r\n}\r\n\r\nfunction setViewer360ControlsVisible(viewer360, visible) {\r\n    let control = viewer360.getContainer().querySelector(\".pnlm-controls-container\");\r\n    if (control) {\r\n        dwDomSetStyle(control, \"display\", visible ? \"\" : \"none\");\r\n    }\r\n}\r\n\r\nfunction colorizeHotspot360(hotSpotDiv, linkStyleValue, color) {\r\n    switch (linkStyleValue) {\r\n        case 2:     // Rechteck\r\n            hotSpotDiv.style.backgroundColor = \"transparent\";\r\n            hotSpotDiv.style.borderColor = color;\r\n            hotSpotDiv.style.borderWidth = \"2px\";\r\n            break;\r\n        case 3:     // Ellipse\r\n            hotSpotDiv.style.backgroundColor = \"transparent\";\r\n            hotSpotDiv.style.borderColor = color;\r\n            hotSpotDiv.style.borderRadius = \"50%\";\r\n            hotSpotDiv.style.borderWidth = \"2px\";\r\n            break;\r\n        case 4:     // EllipseFull\r\n            hotSpotDiv.style.backgroundColor = color;\r\n            hotSpotDiv.style.borderColor = color;\r\n            hotSpotDiv.style.borderRadius = \"50px\";\r\n            break;\r\n        default:     // Rechteck gefüllt\r\n            hotSpotDiv.style.backgroundColor = color;\r\n            hotSpotDiv.style.borderColor = color;\r\n    }\r\n}\r\n\r\nfunction setTooltipForHotspot(tooltip, hotSpotDiv) {\r\n    var span = document.createElement('span');\r\n    span.classList.add('custom-tooltip');\r\n    span.classList.add('guitooltip');\r\n\r\n    span.innerHTML = dwUtilsUnescapeHTML(tooltip);\r\n    hotSpotDiv.appendChild(span);\r\n    span.style.marginLeft = -(span.scrollWidth - hotSpotDiv.offsetWidth) / 2 + 'px';\r\n    span.style.marginTop = -span.scrollHeight - 12 + 'px';\r\n}\r\n\r\nfunction setClickListenerForHotspot(hotSpotDiv, parentUniqueId) {\r\n    hotSpotDiv.parentUniqueId = parentUniqueId;\r\n    hotSpotDiv.onclick = function(event) {\r\n        colorizeHotspot360(hotSpotDiv, hotSpotDiv.linkStyleValuePressed, hotSpotDiv.backgroundColorPressed);\r\n        markHotspots360(parentUniqueId, hotSpotDiv.uniqueId, false);\r\n\r\n        // hier hat man selbst geklickt, daher soll kein Scrollen zum Hotspot erfolgen. Allerdings bekommt man vom der\r\n        // Stückliste die Benachrichtigung, dass sich die Selektion geändert hat. Man muss jetzt irgendwie unterscheiden\r\n        // zwischen Klick in Stückliste oder auf den Hotspot der Zeichnung. Daher wird hier bei allen Hotspots mit gleichem Link\r\n        // ein Flag gesetzt, um ein Scrollen zu unterbinden.\r\n        var hotSpotDivs = document.querySelectorAll(\"div.hotspot360rect\");\r\n        for (var i = 0; i < hotSpotDivs.length; i++) {\r\n            var tempHotSpotDiv = hotSpotDivs[i];\r\n            // bei mehreren Tbumbnails darf nur nicht zu dem Hotspot gescrollt werden, den man gerade geklickt hat\r\n            // zum Hotspot mit gleicher Nummer im anderen Thumbnail aber schon\r\n            if (tempHotSpotDiv.parentUniqueId == parentUniqueId) {\r\n                if (hotSpotDiv.key == tempHotSpotDiv.key) {\r\n                    hotSpotDivs[i].dontScroll = true;\r\n                }\r\n            }\r\n        }\r\n\r\n        dwAjaxAddUpdate(parentUniqueId + \"@DW@\" + hotSpotDiv.uniqueId + \"@DW@imageHotspotClickedEvent@DW@hotspotId=\"\r\n                        + hotSpotDiv.uniqueId + \"|\" + \"@DWSUB@mouseButton=\" + (event.button + 1), true);\r\n    }\r\n}\r\n\r\nfunction setDblClickListenerForHotspot(hotSpotDiv, parentUniqueId) {\r\n    hotSpotDiv.ondblclick = function(event) {\r\n        event = dwFrameworkGetEvent(event);\r\n\r\n        if (typeof (dwAjaxAddUpdate) != \"undefined\") {\r\n            dwAjaxAddUpdate(parentUniqueId + \"@DW@\" + hotSpotDiv.uniqueId + \"@DW@imageHotspotDoubleClickedEvent@DW@hotspotId=\"\r\n                            + hotSpotDiv.uniqueId + \"@DWSUB@mouseButton=\" + (event.button + 1), true);\r\n        }\r\n    }\r\n}\r\n\r\nfunction setTextForHotspot(linkKey, hotSpotDiv) {\r\n    var textNode = document.createElement('div');\r\n    textNode.style.cursor = \"pointer\";\r\n    textNode.style.textAlign = \"center\";\r\n    hotSpotDiv.key = linkKey;\r\n    textNode.innerHTML = linkKey;\r\n    hotSpotDiv.appendChild(textNode);\r\n    textNode.style.lineHeight = textNode.offsetWidth + 'px';    // vertikal zentrieren\r\n}\r\n\r\n/**\r\n * Speichert die Hotspot Daten für linkStyle und Backgroundfarbe\r\n * @param hotSpotDiv\r\n * @param jsonObject\r\n */\r\nfunction saveHotspotData(hotSpotDiv, jsonObject) {\r\n    hotSpotDiv.linkStyleValue = jsonObject.linkStyle;\r\n    hotSpotDiv.linkStyleValuePressed = jsonObject.linkStylePressed;\r\n    hotSpotDiv.backgroundColor = jsonObject.bgColor;\r\n    hotSpotDiv.backgroundColorPressed = jsonObject.bgColorPressed;\r\n}\r\n\r\nfunction saveHotspotCoordinates(hotSpotDiv, jsonObject) {\r\n    hotSpotDiv.pitch = jsonObject.pitch;\r\n    hotSpotDiv.yaw = jsonObject.yaw;\r\n}\r\n\r\n/**\r\n * Die Funktion in der originalen Lib heißt leider nur createTooltipFunc() ist aber de facto eine Methode zum generellen\r\n * Erzeugen des Hotspots. Deswegen heißt sie zumindest auf unserer Seite so.\r\n * @param hotSpotDiv\r\n * @param json in json stehen die Parameter des Hotspots als Json-Objekt, siehe Hotspot360.getAsStringFor360Viewer()\r\n */\r\nfunction createHotspotWithTooltip(hotSpotDiv, json) {\r\n    var jsonObject = JSON.parse(json);\r\n\r\n    saveHotspotCoordinates(hotSpotDiv, jsonObject);\r\n\r\n    // Hotspot uniqueID vergeben, damit man ihn wiederfinden kann um ihn z.B. zu markieren zu können\r\n    hotSpotDiv.uniqueId = jsonObject.uniqueId;\r\n\r\n    saveHotspotData(hotSpotDiv, jsonObject);\r\n\r\n    colorizeHotspot360(hotSpotDiv, hotSpotDiv.linkStyleValue, hotSpotDiv.backgroundColor);\r\n\r\n    setTextForHotspot(jsonObject.linkKey, hotSpotDiv);\r\n\r\n    setClickListenerForHotspot(hotSpotDiv, jsonObject.parentUniqueId);\r\n\r\n    setDblClickListenerForHotspot(hotSpotDiv, jsonObject.parentUniqueId);\r\n\r\n    setTooltipForHotspot(jsonObject.tooltip, hotSpotDiv);\r\n}\r\n\r\nfunction markHotspots360(id, markedIds, scrollTo) {\r\n    var markedHotspotIds = markedIds.split(',');\r\n    var hotSpotDivs = document.querySelectorAll(\"div.hotspot360rect\");\r\n    var viewer = $(id).viewer360;\r\n    if (!viewer) {\r\n        return;\r\n    }\r\n\r\n    for (var i = 0; i < hotSpotDivs.length; i++) {\r\n        var hotSpotDiv = hotSpotDivs[i];\r\n        var uniqueId = hotSpotDiv.uniqueId;\r\n\r\n        // da wir über ALLE 360°-Hotspot iterieren, könnten sie auch von einem anderen Zeichnungs-Thumbnail sein\r\n        var parentUniqueId = hotSpotDiv.parentUniqueId;\r\n        if (parentUniqueId == id) {\r\n            if (markedHotspotIds.includes(uniqueId)) {\r\n                colorizeHotspot360(hotSpotDiv, hotSpotDiv.linkStyleValuePressed, hotSpotDiv.backgroundColorPressed);\r\n                if (scrollTo) {\r\n                    if (hotSpotDiv.dontScroll === true) {   // Hier wird das Flag zurückgesetzt. Man kam initial vom Hotspot, also nicht scrollen\r\n                        hotSpotDiv.dontScroll = false;\r\n                    } else {\r\n                        viewer.lookAt(hotSpotDiv.pitch / 1.0, hotSpotDiv.yaw / 1.0, undefined, 500);\r\n                    }\r\n                }\r\n            } else {\r\n                colorizeHotspot360(hotSpotDiv, hotSpotDiv.linkStyleValue, hotSpotDiv.backgroundColor);\r\n            }\r\n        }\r\n    }\r\n}\n/*\r\n * Copyright (c) 2015 Docware GmbH\r\n */\r\n\r\n// NULL oder Id des Timer-Thread (setTimeout)\r\nvar dwTooltip_timeoutIntervalId = null;\r\n// Wo die Maus zuletzt war, wenn er wartet, um den Tooltip anzuzeigen\r\nvar dwTooltip_lastMousePointer = null;\r\n\r\nvar DWTOOLTIP_DELAY_DEFAULT_VALUE = 250;\r\nvar DWTOOLTIP_TEXT_FOR_EVENTLISTENER = \"__FROM__SERVER__\";\r\n\r\n/**\r\n * Zeitverzögerte Anzeige des Tooltips\r\n * @param event\r\n * @param text\r\n * @param delay\r\n * @param width optional\r\n * @param height optional\r\n */\r\nfunction dwTooltip_delayShowTooltip(event, text, delay, width, height, currentTarget) {\r\n    if (!dwTooltip_isTooltipEventAllowed(event, currentTarget)) {\r\n        return false;\r\n    }\r\n    if ((text == null) || (text == \"\") || ((currentlyOpenedContextMenuPopup != null) && currentlyOpenedContextMenuPopup.isVisible())) {\r\n        return false;\r\n    } else if (text != DWTOOLTIP_TEXT_FOR_EVENTLISTENER) {\r\n        // Bei Anfragen des Tooltip-Textes vom Server wird die Ajax Schnittstelle aufgerufen. Diese Schnittstelle\r\n        // verarbeitet nur Anfragen, wenn das Flag noch nicht 'true' ist\r\n        event.preventTooltip = true;\r\n    }\r\n\r\n    // Tooltip soll nur für die aktuelle Komponente (im Vordergrund) ausgelöst werden. Tooltips die in der Hierarchie dahinter\r\n    // stehen müssen unterdrückt werden (z.B. Tooltip auf Toolbar bzw Toolbar Button -> Toolbar Button Tooltip anzeigen)\r\n    // Update August 2013: Das können wir nicht machen, weil darunter z.B: ein GuiToolbutton kein Hover Farbverlauf mehr bekommt.\r\n    //dwFrameworkDisableEventBubbling(event);\r\n    if (dwTooltip_timeoutIntervalId != null) {\r\n        clearTimeout(dwTooltip_timeoutIntervalId);\r\n    }\r\n    dwTooltip_lastMousePointer = dwUtilsGetCurrentMousePositionPerEvent(event);\r\n\r\n    var eventForServerTooltip = event;\r\n    // In IE8 bleiben Event Objekte in einem setTimeout nicht erhalten. Clone damit das aufrufende Control bestimmt werden kann\r\n    var isJ2EEBrowser = typeof (framework_isJ2EEBrowser) != \"undefined\";\r\n    if (isJ2EEBrowser && (framework_isIE8 || framework_isIELegacyMode)) {\r\n        eventForServerTooltip = dwUtilsCloneObject(event);\r\n    }\r\n    dwTooltip_timeoutIntervalId = setTimeout(function() {\r\n        if (text == DWTOOLTIP_TEXT_FOR_EVENTLISTENER) {\r\n            dwTooltip_showServerTooltip(eventForServerTooltip);\r\n        } else {\r\n            dwTooltip_showTooltip(text, width, height);\r\n        }\r\n    }, delay);\r\n    return false;\r\n\r\n}\r\n\r\n/**\r\n * Anzeige des Tooltips\r\n * Methode kann nur aus tooltip_delayShowTooltip aufgerufen werden.\r\n *\r\n * Im IE Quirksmodus kann es intern zu Verzögerungen kommen, wenn die Höhe des Viewports oder des Controls berechnet werden muss\r\n * Dies liegt an der tiefen Verschachtelung von Tabellen (> 16)\r\n * Im IE Loose Modus ist die Darstellung des Tooltips performant\r\n * @param text\r\n * @param point\r\n */\r\nfunction dwTooltip_showTooltip(text, width, height) {\r\n    if (dwTooltip_timeoutIntervalId != null) {\r\n        // Tooltip soll angezeigt werden - es ist noch kein onmouseout Event eingangen\r\n        try {\r\n            dwTooltip_createTooltip(width, height);\r\n            dwTooltip_updateTooltip(text, width, height);\r\n            dwTooltip_fadeInTooltip();\r\n        } catch (exception) {\r\n            // Framework_Logger ist zu diesem Zeitpunkt auch noch nicht initialisiert\r\n            // Daher gibt es keine Ausgabe an dieser Stelle\r\n            // framework_logger.log(\"Failed to create tooltip '\" + text + \"' (cause=\" + exception + \")\");\r\n        }\r\n    }\r\n}\r\n\r\nfunction dwTooltip_showServerTooltip(event) {\r\n    if (dwTooltip_timeoutIntervalId != null) {\r\n        var control = dwUtilsGetEventTarget(event);\r\n        if (control && dwDomHasAttribute(control, \"ontooltip\")) {\r\n            var tooltipCommand = dwDomGetDomAttribute(control, \"ontooltip\");\r\n            // Tooltip soll nun wirklich angezeigt werden. Den temporär gespeicherten Befehl für die Anzeige emulieren wir\r\n            // als wäre er direkt aus einem Eventlistener heraus aufgerufen und reichen das (ggf. geklonte) Event Objekt weiter\r\n            // das ggf. im Tooltip Befehl benötigt wird\r\n            var func = function(event) {\r\n                eval(tooltipCommand);\r\n            };\r\n            func(event);\r\n            // Nicht zwingend notwendig, aber wir räumen die Funktion auf um die Referenz explizit freizugeben\r\n            func = null;\r\n        }\r\n    }\r\n}\r\n\r\nfunction dwTooltip_updateTooltip(text, width, height) {\r\n    var popup = dwTooltip_getPopup();\r\n    var startingTag = dwDomGetInitialTagname(text);\r\n    if ((startingTag != \"\") && (dwUtilsStringEndsWith(text, \"</\" + startingTag + \">\", false))) {\r\n        // HTML Konstrukt - direkt als innerHTML setzen\r\n        popup.getControlForContent().innerHTML = text;\r\n    } else {\r\n        // Text Konstrukt - Alternative um das Layout des Tooltips vorzugeben.\r\n        // Diese Logik ist aus der alten tooltips.js unverändert übernommen (Fallback)\r\n        // Per default werden die Tooltips im HTML Format an den Client übermittelt\r\n        dwTooltip_setTextTooltip(text);\r\n    }\r\n    popup.setSize(width, height);\r\n    popup.setPosition(dwTooltip_getTooltipLocation());\r\n}\r\n\r\nfunction dwTooltip_fadeInTooltip() {\r\n    if (!dwTooltip_isTooltipVisible()) {\r\n        var popup = dwTooltip_getPopup();\r\n        // Wir müssen es schon mal anzeigen, um es richtig zu positionieren (damit es nicht rechts oder unten aus dem Fenster rausläuft)\r\n        popup.setInvisiblePosition();\r\n        popup.fadeIn();\r\n        popup.setPosition(dwTooltip_getTooltipLocation());\r\n    }\r\n}\r\n\r\nfunction dwTooltip_isTooltipVisible() {\r\n    var popup = dwTooltip_getPopup();\r\n    return popup.isVisible();\r\n}\r\n\r\nfunction dwTooltip_moveTooltip(event) {\r\n    if (!dwFrameworkInitFinished) {\r\n        return;\r\n    }\r\n    var popup = dwTooltip_getPopup();\r\n    if (popup.isVisible()) {\r\n        // Wir merken uns die letzte Position, damit nach dem Timeout der Tooltip an der richtigen Position angezeigt wird\r\n        dwTooltip_lastMousePointer = dwUtilsGetCurrentMousePositionPerEvent(event);\r\n        popup.setPosition(dwTooltip_getTooltipLocation());\r\n    }\r\n}\r\n\r\n/**\r\n * Blendet einen Tooltip aus.\r\n * Timer für die zeitverzögerte Anzeige eines Tooltips wird zurückgesetzt, sofern vorhanden.\r\n *\r\n * Auf diese Weise wird verhindert, dass ein Tooltip zeitverzögert angezeigt wird, dessen Element bereits verlassen wurde\r\n */\r\nfunction dwTooltip_hideTooltips() {\r\n    if (dwTooltip_timeoutIntervalId != null) {\r\n        clearTimeout(dwTooltip_timeoutIntervalId);\r\n        dwTooltip_timeoutIntervalId = null;\r\n    }\r\n    // Tooltip Komponente darf nicht aus dem DOM gelöscht werden.\r\n    // Bei Dropdown-Listen im Firefox wird bei der Mausbewegung über die Optionen jeweils ein\r\n    // onmouseout und onmouseover Event gefeuert. Löscht/Setzt man zu diesem Zeitpunkt ein Element\r\n    // im DOM Baum, wird das Auswahlfenster der Dropdown-Liste automatisch geschlossen.\r\n    var popup = dwTooltip_getPopup();\r\n    if (popup) {\r\n        popup.setVisible(false);\r\n    }\r\n}\r\n\r\nfunction dwTooltip_createTooltip(width, height) {\r\n    var popup = dwTooltip_getPopup();\r\n    if (!popup) {\r\n        // Framework_Logger ist zu diesem Zeitpunkt auch noch nicht initialisiert\r\n        // Daher gibt es keine Ausgabe an dieser Stelle\r\n        //framework_logger.log(\"Failed to find tooltip in cache. Skipped command.\");\r\n        return;\r\n    }\r\n    if (!popup.control) {\r\n        // Komponente noch nicht im DOM eingebunden. Wir erstellen uns das SPAN Element und fügen es dem Body hinzu\r\n        var control = document.createElement(\"span\");\r\n        control.setAttribute(\"id\", \"tooltipspan\");\r\n        control.className = \"guitooltip\";\r\n        // Tooltip wird nur für die Anzeige von Informationen verwendet. Events müssen nicht umgeleitet werden\r\n        dwPopup_wrapControl(control, DW_POPUP_TYPE.TOOLTIP, null);\r\n        popup.appendToBody();\r\n    }\r\n\r\n    popup.setSize(width, height);\r\n    popup.setVisible(false);\r\n}\r\n\r\n/**\r\n * Methode zum setzen von textuellen Inhalten (\\n, @IMAGE@ ...)\r\n * Diese Logik ist aus der alten tooltips.js unverändert übernommen (Fallback)\r\n * Per default werden die Tooltips im HTML Format an den Client übermittelt\r\n * @param text\r\n */\r\nfunction dwTooltip_setTextTooltip(text) {\r\n    // workaround => mozilla macht leere eintraege\r\n    var tmpstringarray = text.split(/\\n/);\r\n    var stringarray = new Array();\r\n    for (var i = 0; i < tmpstringarray.length; i++) {\r\n        if (tmpstringarray[i] != \"\") {\r\n            stringarray[stringarray.length] = tmpstringarray[i];\r\n        }\r\n    }\r\n    // Tooltip-Span ist in der Methode tooltip_showtooltip bereits erstellt und in den DOM Baum eingehängt worden\r\n    var tooltipspan = dwTooltip_getPopup().getControlForContent();\r\n    // Vorhandenes Tooltip-Element zurücksetzen (Inhalte löschen)\r\n    dwDomRemoveAllChildNodes(tooltipspan);\r\n    // Tooltip Nachricht schreiben\r\n    var docFrag = document.createDocumentFragment();\r\n    for (var i = 0; i < stringarray.length; i++) {\r\n        var tableNode = document.createElement(\"table\");\r\n        tableNode.setAttribute(\"border\", \"0\");\r\n        tableNode.setAttribute(\"cellspacing\", \"0\");\r\n        tableNode.setAttribute(\"cellpadding\", \"0\");\r\n        tableNode.style.backgroundColor = \"transparent\";\r\n        docFrag.appendChild(tableNode);\r\n        var tbodyNode = document.createElement(\"tbody\");\r\n        tableNode.appendChild(tbodyNode);\r\n        var trNode = document.createElement(\"tr\");\r\n        tbodyNode.appendChild(trNode);\r\n        var textValue = stringarray[i];\r\n        textValue.replace(/@NEWLINE@/g, \"\\n\");\r\n        textValue.replace(/@CRETURN@/g, \"\\n\");\r\n        while (textValue.indexOf(\"@IMAGE@\") > -1) {\r\n            var startIndex = textValue.indexOf(\"@IMAGE@\");\r\n            var stopIndex = textValue.indexOf(\"@/IMAGE@\");\r\n            var aSubstring = textValue.substring(0, startIndex);\r\n            if (aSubstring != \"\") {\r\n                var titleNode = document.createTextNode(aSubstring);\r\n                var tdNode = document.createElement(\"td\");\r\n                dwTooltip_setStyleDefaults(tdNode);\r\n                trNode.appendChild(tdNode);\r\n                tdNode.appendChild(titleNode);\r\n            }\r\n            aSubstring = textValue.substring(startIndex + \"@IMAGE@\".length, stopIndex);\r\n            var imgNode = document.createElement(\"img\");\r\n            imgNode.setAttribute(\"src\", \"../\" + aSubstring);\r\n            imgNode.setAttribute(\"border\", \"0\");\r\n            var tdNode = document.createElement(\"td\");\r\n            dwTooltip_setStyleDefaults(tdNode);\r\n            trNode.appendChild(tdNode);\r\n            tdNode.appendChild(imgNode);\r\n            textValue = textValue.substring(stopIndex + \"@/IMAGE@\".length);\r\n        }\r\n        if (textValue != \"\") {\r\n            var titleNode = document.createTextNode(textValue);\r\n            var tdNode = document.createElement(\"td\");\r\n            dwTooltip_setStyleDefaults(tdNode);\r\n            trNode.appendChild(tdNode);\r\n            tdNode.appendChild(titleNode);\r\n        }\r\n    }\r\n    tooltipspan.appendChild(docFrag);\r\n}\r\n\r\nfunction dwTooltip_setStyleDefaults(tdNode) {\r\n    tdNode.setAttribute(\"valign\", \"top\");\r\n    tdNode.style.backgroundColor = \"transparent\";\r\n    tdNode.style.verticalAlign = \"top\";\r\n    tdNode.style.whiteSpace = \"nowrap\";\r\n}\r\n\r\nfunction dwTooltip_getPopup() {\r\n    return dwPopup_getPopup(DW_POPUP_TYPE.TOOLTIP);\r\n}\r\n\r\nfunction dwTooltip_getTooltipLocation() {\r\n    return (dwTooltip_lastMousePointer) ? new DWPoint(dwTooltip_lastMousePointer.x + 16, dwTooltip_lastMousePointer.y + 5) : null;\r\n}\r\n\r\n/**\r\n * Tooltip Event darf nur einmal ausgelöst werden, danach muss die Event Propagation verhindert werden ...\r\n * @param event\r\n */\r\nfunction dwTooltip_isTooltipEventAllowed(event, currentTarget) {\r\n    if (!event || event.preventTooltip) { // Standard-Verfahren\r\n        // Tooltips werden durch mouseover ausgelöst. Das mouseover Event muss bis zu einem Event-Handler durchgereicht werden\r\n        // gleichermaßen muss verhindert werden, dass mehrere Tooltips angezeigt werden.\r\n        // Das erste Tooltip Event setzt das Flag \"preventTooltip\" -> Weitere Elemente in der Hierarchie ignorieren dann\r\n        // die Tooltip anzeige für dieses Event\r\n        return false;\r\n    }\r\n\r\n    var isJ2EEBrowser = typeof (framework_isJ2EEBrowser) != \"undefined\";\r\n    if (isJ2EEBrowser && framework_isIE8 && currentTarget) { // IE8 kann das Event-Objekt nicht verändern ...\r\n        // Ist ein Tooltip bereits bei einem Kind-Element ausgelöst worden wird ein weiteres auslösen verhindert ...\r\n        // Ist kein Abbruchkriterium bekannt (Control das aktuell das event hat) kann die Untersuchung nicht durchgeführt werden\r\n        var iterNode = dwUtilsGetEventTarget(event);\r\n        while ((iterNode != null) && (iterNode != currentTarget)) {\r\n\r\n            var eventHandler = dwDomGetEventsForType(iterNode, \"onmouseover\", true);\r\n            if (eventHandler && (eventHandler.indexOf(\"dwTooltip_delayShowTooltip\") > -1)) {\r\n                return false; // Prevent Event Propagation!\r\n            }\r\n            iterNode = iterNode.parentNode;\r\n        }\r\n    }\r\n    return true;\r\n}\n/*\r\n * Copyright (c) 2016 Docware GmbH\r\n */\r\n\r\nvar DW_HEAVYWEIGHT_POPUP_ENABLED = true;\r\n\r\n// Cache damit IFRAME Objekte nicht immer neu generiert werden müssen\r\nvar DW_POPUP_WRAPPER_CACHE = new Object(); // key == type | value == popup\r\n\r\nvar DW_POPUP_TYPE = {\r\n    TOOLTIP: \"tooltip\",\r\n    CONTEXTMENU: \"contextmenu\",\r\n    MENUBAR: \"menubar\",\r\n    VIEWER_TOOLTIP: \"viewertooltip\"\r\n};\r\nvar DW_POPUP_SHADOW_BORDERS = {\r\n    TOP: 2,\r\n    RIGHT: 2,\r\n    BOTTOM: 2,\r\n    LEFT: 0\r\n};\r\n\r\n/**\r\n * Baut die vordefinierten IFrame Wrapper für Tooltips / Contextmenü (rechte Maustaste) auf.\r\n * Diese Wrapper werden einmalig erzeugt und wiederverwendet\r\n */\r\nfunction buildPopupWrapperCache() {\r\n    for (var popupTypeKey in DW_POPUP_TYPE) {\r\n        var popupType = DW_POPUP_TYPE[popupTypeKey];\r\n        DW_POPUP_WRAPPER_CACHE[popupType] = __internal_dwPopup_createPopup(__internal_dwPopup_getWrapperId(popupType));\r\n    }\r\n}\r\n\r\n/**\r\n * Simple Bean für Speicherung der Wrapper-Informationen. Popup wird für Heavyweight und Lightweight verwendet\r\n * Bei Lightweight Popups sind die Attribute \"wrapper\" und \"document\" NULL\r\n *\r\n * Wird das Popup relativ zu einem anderen Objekt ausgerichtet (Referrer) wird dynamisch das Attribut 'referrer' gesetzt\r\n * @constructor\r\n */\r\nfunction DWPopup() {\r\n    this.__name = null;\r\n    this.wrapper = null;\r\n    this.control = null;\r\n    this.document = null;\r\n}\r\n\r\nDWPopup.prototype.getDocument = function() {\r\n    return this.document || document;\r\n};\r\nDWPopup.prototype.getControlForLayout = function() {\r\n    return this.wrapper || this.control; // Control für die Positionierung / Anpassung der Größe\r\n};\r\nDWPopup.prototype.getControlForContent = function() {\r\n    return this.control; // Control für die Darstellung des Inhalts (inkl. Border / Shadow)\r\n};\r\nDWPopup.prototype.isVisible = function() {\r\n    var control = this.getControlForLayout();\r\n    return control ? control.style.display != \"none\" : false;\r\n};\r\n\r\nDWPopup.prototype.setVisible = function(visible) {\r\n    var control = this.getControlForLayout();\r\n    if (control) {\r\n        // Wg. Chrome Reflow nur setzen wenn geändert\r\n        var newValue = (visible) ? \"block\" : \"none\";\r\n        if (newValue != control.style.display) {\r\n            control.style.display = newValue;\r\n        }\r\n    }\r\n};\r\nDWPopup.prototype.fadeIn = function() {\r\n    var layoutControl = this.getControlForLayout();\r\n    if (framework_isWithAnimations) {\r\n        dwUtilsSetOpacity(layoutControl, DWUTILS_FADE_OPACITY_START);\r\n    }\r\n    this.setVisible(true);\r\n    this.adjustWrapper();\r\n    dwUtilsFadeInControl(layoutControl.id, false, false);\r\n};\r\n\r\nDWPopup.prototype.setPosition = function(position) {\r\n    if (position) {\r\n        var layoutControl = this.getControlForLayout();\r\n        if ((layoutControl.parentNode != null) && (layoutControl.parentNode.offsetTop == 0)) {\r\n            // Ist das parent-Control am oberen Rand -> positionieren, relativ zu window\r\n            dwUtilsRepositionAbsolutePositionedControlInWindow(dwFrameworkFindSubmitForm(this.getControlForLayout().id), this.getControlForLayout(), position, 0, 0);\r\n        } else {\r\n            // Ist das parent-Control irgendwo in der Seite eingebaut (z.B. Lightweight->Sub-Menu) -> relativ zu parent\r\n            layoutControl.style.left = position.x + \"px\";\r\n            layoutControl.style.top = position.y + \"px\";\r\n        }\r\n    }\r\n};\r\n/**\r\n * Setzt Position relativ zu einem Caller (z.B. Sub Menu)\r\n */\r\nDWPopup.prototype.setChildPosition = function(childPopup, insetTop, insetLeft) {\r\n    var childContentControl = childPopup.getControlForContent();\r\n    var childLayoutControl = childPopup.getControlForLayout();\r\n    var caller = this.getDocument().getElementById(childContentControl.id);\r\n    var callerParentCoords = dwUtilsGetCoords(caller.parentNode, null);\r\n    var childPopupHeight = dwUtilsGetContentHeight(childLayoutControl);\r\n    var childPopupWidth = dwUtilsGetContentWidth(childLayoutControl);\r\n\r\n    var rootWindow = $(dwFrameworkGetRootWindowId());\r\n    var windowWidth = dwUtilsGetContentWidth(rootWindow);\r\n    var windowHeight = dwUtilsGetContentHeight(rootWindow);\r\n\r\n    // Manuelle Bestimmung der Location - rechterhand vom Popup-Fenster aus dem das Untermenü aufgerufen wird\r\n    // Bestimmung könnte ggf. in Popup Klasse eingebaut werden (setPositionByParent o.ä.)\r\n    var possibleChildPosition = new DWPoint(insetLeft, insetTop);\r\n    var possibleChildPositionInWindow = new DWPoint(insetLeft, insetTop);\r\n    if (this.wrapper) {\r\n        // Bei heavyweight Komponenten ist das Child Popup in einem IFrame (im Body des Hauptfenster) gerendert\r\n        // Position muss relativ zum viewport berechnet werden. Grundlage ist dabei die Position des MenuItem im Parent Popup.\r\n        possibleChildPositionInWindow.x += (this.getPosition().x + callerParentCoords.x);\r\n        possibleChildPositionInWindow.y += (this.getPosition().y + callerParentCoords.y);\r\n\r\n        possibleChildPosition = possibleChildPositionInWindow;\r\n    } else {\r\n        possibleChildPositionInWindow.x += callerParentCoords.x;\r\n        possibleChildPositionInWindow.y += callerParentCoords.y;\r\n    }\r\n    if (possibleChildPositionInWindow.y + childPopupHeight > windowHeight - 16) {\r\n        var diff = windowHeight - 16 - possibleChildPositionInWindow.y - childPopupHeight;\r\n        possibleChildPosition.y += diff;\r\n    }\r\n    if (possibleChildPositionInWindow.x + childPopupWidth > windowWidth - 16) {\r\n        var diff = windowWidth - 16 - possibleChildPositionInWindow.x - childPopupWidth;\r\n        possibleChildPosition.x += diff;\r\n    }\r\n\r\n    childPopup.setPosition(new DWPoint(possibleChildPosition.x, possibleChildPosition.y));\r\n};\r\n\r\nDWPopup.prototype.getPosition = function() {\r\n    var layoutControl = this.getControlForLayout();\r\n    var x = parseInt(layoutControl.style.left);\r\n    var y = parseInt(layoutControl.style.top);\r\n    return new DWPoint(x, y);\r\n};\r\nDWPopup.prototype.createChildPopup = function(childId, wrapperParent, eventRedirector) {\r\n//    if (this.child) {\r\n//        this.child.setVisible(false);\r\n//        this.child.removeFromBody();\r\n//    }\r\n\r\n    var doc = this.getDocument();\r\n    var callerId = dwUtilsStringBefore(childId, \"_\");\r\n    var caller = doc.getElementById(callerId);\r\n    if (caller) {\r\n        // Abprüfen, ob der Caller (der Menüeintrag aus dem das Child Popup heraus aufgerufen wurde) disabled ist\r\n        if (caller.disabled == true) {\r\n            return null; // Fenster darf nicht erzeugt werden\r\n        }\r\n    }\r\n    var childControl = doc.getElementById(childId);\r\n    return dwPopup_wrapControlWithoutCache(childControl, childId + \"_wrapper\", wrapperParent, eventRedirector);\r\n};\r\n\r\nDWPopup.prototype.close = function() {\r\n    if (this.clearHovers) {\r\n        this.clearHovers(this.getControlForContent());\r\n    }\r\n    if (this.closeSubmenus) {\r\n        this.closeSubmenus();\r\n    }\r\n    this.setVisible(false);\r\n    if (this.referrer) {\r\n        this.removeReferrer();\r\n    } else {\r\n        this.removeFromBody();\r\n    }\r\n};\r\n\r\n/**\r\n * Setzt einen Referrer. Das Popup wird relativ zum Referrer angezeigt (unterhalb). Verwendung findet dieser Mechanismus\r\n * z.B. für die Anzeige von Combobox-Popups\r\n * Bei Lightweight Popups wird das DOM Element aus der aktuellen DOM Position in den BODY verschoben\r\n * Bei Heavyweight Popups wird das DOM Element als Clone in den Wrapper eingefügt.\r\n *\r\n * Bei beiden Implementierungen (heavy vs. light) ist auf diese Weise das dargestellte Popup im BODY eingehängt und kann\r\n * absolut positioniert werden\r\n * @param referrer\r\n */\r\nDWPopup.prototype.setReferrer = function(referrer) {\r\n    this.referrer = referrer;\r\n    var originalControl = $(this.control.id);\r\n    var body = $(\"body\");\r\n    if (originalControl.parentNode && (originalControl.parentNode != body)) {\r\n        this.getControlForLayout().setAttribute(\"referrerId\", referrer.id);\r\n        this.control.style.top = \"0px\";\r\n        if (!this.wrapper) {\r\n            originalControl.parentNode.removeChild(originalControl);\r\n            body.appendChild(originalControl);\r\n        }\r\n    }\r\n    // Positionierung relativ zum Referrer\r\n    dwHelperPositionPopup(referrer, this);\r\n};\r\n/**\r\n * Entfernt den Referrer. Die Aktionen, die bei setReferrer umgesetzt wurden, werde rückgängig gemacht\r\n * Die Methode stellt sicher, dass das Popup implizit unsichtbar geschalten wird\r\n */\r\nDWPopup.prototype.removeReferrer = function() {\r\n    if (!dwPopup_isCachedPopup(this)) {\r\n        this.removeFromBody();\r\n    }\r\n    // Kommentar, warum dwUtilsIsDefined nötig ist von MM: Das Problem tritt nur in Firefox auf (zumindest nicht in IE).\r\n    // Es hängt zusammen mit dem setReferrer bzw. removeReferrer Mechanismus durch den die Komponente „umgehängt“ wird, von der eigentlichen Stelle in den Body (und umgekehrt).\r\n    // Das Problem ist allerdings, dass er sporadisch zwar sich aus dem parent entfernt, aber wenn man dann nochmal nach der id sucht findet man noch ein Vorkommen das\r\n    // eingehängt ist.. (wann in der Verkettung der Events hier etwas schief geht hab ich noch nicht 100% erkannt).\r\n    // Lösungsansätze die beide funktioniert hatten (entweder/oder):\r\n    // - beim removeReferrer nur einhängen, wenn $(this.control.id) nicht existiert nachdem es vom body entfernt wurde\r\n    // - beim setReferrer solange wiederholen bis wirklich kein Objekt mehr nach dem entfernen vorkommt, erst dann im Body einhängen\r\n    // Grund warum es am Ende nicht mehr klappte ist, dass am Ende ein unsichtbares Element an Original-Stelle existierte und ein weiteres\r\n    // mit gleicher ID im Body ... und viele Ereignisse auf die ID gehen ...\r\n    if (!this.wrapper && !dwUtilsIsDefined($(this.control.id))) {\r\n        this.referrer.appendChild(this.control);\r\n    }\r\n\r\n    this.control.style.display = \"none\";\r\n    this.referrer = null;\r\n};\r\n/**\r\n * Positioniert das Popup in einen nicht sichtbaren Bereich. Im Anschluss kann das Popup sichtbar geschalten\r\n * und korrekt positioniert werden. Ohne diesen Mechanismus wurde das Popup beim Einblenden kurz am Ende des Seiteninhalts\r\n * gezeichnet bevor es korrekt positioniert wurde (für die eigentliche Positionierung muss das Popup sichtbar sein)\r\n */\r\nDWPopup.prototype.setInvisiblePosition = function() {\r\n    if (!this.isVisible()) {\r\n        var layoutControl = this.getControlForLayout();\r\n        var treatAsIe8 = !dwFrameworkInitFinished; // Init noch nicht abgeschlossen. Browser kann ggf. noch nicht ermittelt worden sein. Wird wie IE8 behandelt\r\n        if (!treatAsIe8 || framework_isIE8 || framework_isIE9) {\r\n            // In IE8 wird ein resize Event ausgelöst wenn das Control unterhalb / rechts des vorherigen Viewport Bereichs geschoben wird\r\n            // Der Browser registriert tatsächliche Größenänderungen was zum automatischen schliessen von jeglichen Popups führt (Tooltip/Contextmenu ...)\r\n            // Aus diesem Grund wird im IE8 der Inhalt in den nicht-sichtbaren Bereich (oben/links) verschoben\r\n            // In IE9 wird auch ein resize Event ausgelöst (16 px Unterschied). Zur Vorsicht auch hier das alte Verfahren\r\n            layoutControl.style.top = (-dwUtilsGetViewportHeight()) + \"px\";\r\n            layoutControl.style.left = \"0px\";\r\n        } else {\r\n            // In IE10 wird ein zwar auch ein resize Event ausgelöst - aber ohne Änderung der Höhe/Breite -> keine negativen Seiteneffekte\r\n            // In IE11 und FF wird kein resize Event ausgelöst\r\n            layoutControl.style.top = (dwUtilsGetViewportHeight() + 200) + \"px\";\r\n        }\r\n    }\r\n};\r\nDWPopup.prototype.appendToBody = function() {\r\n    var layoutControl = this.getControlForLayout();\r\n    var alreadyAppended = (layoutControl.parentNode != null);\r\n    if (!alreadyAppended) {\r\n        var body = document.getElementsByTagName(\"body\")[0];\r\n        body.appendChild(this.getControlForLayout());\r\n    }\r\n};\r\nDWPopup.prototype.removeFromBody = function() {\r\n    var body = document.getElementsByTagName(\"body\")[0];\r\n    var layoutControl = this.getControlForLayout();\r\n    if (!dwPopup_isCachedPopup(this) && (layoutControl.parentNode == body)) {\r\n        body.removeChild(this.getControlForLayout());\r\n        if (this.wrapper) {\r\n            // Selektion einer Eingabe-Komponente kann fehlschlagen nachdem der iframe entfernt wurde\r\n            // Der Fokus wird explizit auf die zuletzt fokussierte Komponente gesetzt (und damit das richtige window)\r\n            __internal_resetFocus();\r\n        }\r\n    }\r\n};\r\n/**\r\n * Passt den Inhalt (z.B. SPAN / DIV) im Iframe an den Wrapper an.\r\n * Hat der Wrapper keine feste Größe in px, wird keine Aktion ausgeführt\r\n */\r\nDWPopup.prototype.adjustContent = function() {\r\n    if (this.wrapper && this.control) {\r\n        this.control.style.width = this.wrapper.style.width;\r\n        this.control.style.height = this.wrapper.style.height;\r\n\r\n        if (this.wrapper.style.width != \"auto\") {\r\n            this.wrapper.style.width = (parseInt(this.wrapper.style.width) + DW_POPUP_SHADOW_BORDERS.LEFT + DW_POPUP_SHADOW_BORDERS.RIGHT) + \"px\";\r\n        }\r\n        if (this.wrapper.style.height != \"auto\") {\r\n            this.wrapper.style.height = (parseInt(this.wrapper.style.height) + DW_POPUP_SHADOW_BORDERS.TOP + DW_POPUP_SHADOW_BORDERS.BOTTOM) + \"px\";\r\n        }\r\n    }\r\n};\r\n/**\r\n * Passt den Wrapper an den Inhalt an\r\n * Bei 'auto' Wert für width/height wird dieser ermittelt (offsetHeight/offsetWidth) und für den Wrapper übernommen\r\n */\r\nDWPopup.prototype.adjustWrapper = function() {\r\n    if (this.wrapper && this.control) {\r\n        if ((this.control.style.width == \"\") || (this.control.style.width == \"auto\") || (this.wrapper.style.width == \"auto\")) {\r\n            var width = (framework_isIE8 || framework_isIELegacyMode) ? this.control.clientWidth : this.control.offsetWidth;\r\n            this.wrapper.style.width = (width + DW_POPUP_SHADOW_BORDERS.LEFT + DW_POPUP_SHADOW_BORDERS.RIGHT) + \"px\";\r\n        }\r\n        if ((this.control.style.height == \"\") || (this.control.style.height == \"auto\") || (this.wrapper.style.height == \"auto\")) {\r\n            var height = (framework_isIE8 || framework_isIELegacyMode) ? this.control.clientHeight : this.control.offsetHeight;\r\n            this.wrapper.style.height = (height + DW_POPUP_SHADOW_BORDERS.TOP + DW_POPUP_SHADOW_BORDERS.BOTTOM) + \"px\";\r\n        }\r\n        this.wrapper.style.maxWidth = null;\r\n        this.wrapper.style.maxHeight = null;\r\n    }\r\n};\r\n/**\r\n * Setzt eine fixe Größe (in Pixel). Bei '-1' wird intern der Wert auf 'auto' gesetzt.\r\n * Bei Heavyweight Popups wird der Inhalt an die Größe des Wrappers angeglichen\r\n * @param width\r\n * @param height\r\n */\r\nDWPopup.prototype.setSize = function(width, height) {\r\n    var layoutControl = this.getControlForLayout();\r\n    var newWidth = \"auto\";\r\n    if (width && (width > 0)) {\r\n        if (this.wrapper) {\r\n            this.wrapper.style.maxWidth = null;\r\n        }\r\n        newWidth = width;\r\n        if (framework_isIELegacyMode && !this.isHeavyWeight()) {\r\n            var widthFilter = dwUtilsGetStyle(layoutControl, \"filter\") || \"\";\r\n            if (widthFilter && widthFilter.indexOf(\"Microsoft.Shadow\") > -1) {\r\n                newWidth -= parseInt(dwUtilsStringAfter(widthFilter, \"Strength=\")) || 0;\r\n            }\r\n        }\r\n        newWidth = newWidth + \"px\";\r\n    }\r\n    var newHeight = \"auto\";\r\n    if (height && (height > 0)) {\r\n        if (this.wrapper) {\r\n            this.wrapper.style.maxHeight = null;\r\n        }\r\n        newHeight = height;\r\n        if (framework_isIELegacyMode && !this.isHeavyWeight()) {\r\n            // In bestimmten Konstellationen hat der Browser (im Legacy Modus, mehrere Verschachtelungen) den Schatten\r\n            // zur gesetzten/ausgelesenen Höhe addiert. Bei jedem erneuten Öffnen wurde der Dialog dadurch größer ...\r\n            var heightFilter = dwUtilsGetStyle(layoutControl, \"filter\") || \"\";\r\n            if (heightFilter && heightFilter.indexOf(\"Microsoft.Shadow\") > -1) {\r\n                newHeight -= parseInt(dwUtilsStringAfter(heightFilter, \"Strength=\")) || 0;\r\n            }\r\n        }\r\n        newHeight = newHeight + \"px\";\r\n    }\r\n    layoutControl.style.width = newWidth;\r\n    layoutControl.style.height = newHeight;\r\n    this.adjustContent();\r\n};\r\n\r\nDWPopup.prototype.getBounds = function() {\r\n    var layoutControl = this.getControlForLayout();\r\n    var bounds = dwUtilsBoundingClientRectAsDwRectangle(layoutControl);\r\n    return bounds;\r\n};\r\n\r\nDWPopup.prototype.containsNode = function(node) {\r\n    return dwUtilsGetNavigationPath(node, this.getControlForContent(), DWDOM_NAVIGATION_PATH_DIRECTION.TOP_DOWN) != null;\r\n};\r\n\r\nDWPopup.prototype.referrerContainsNode = function(node) {\r\n    return dwUtilsGetNavigationPath(node, this.referrer, DWDOM_NAVIGATION_PATH_DIRECTION.TOP_DOWN) != null;\r\n};\r\n\r\nDWPopup.prototype.isHeavyWeight = function() {\r\n    return __internal_dwPopup_isHeavyweight() && this.supportsHeavyWeight();\r\n};\r\n\r\nDWPopup.prototype.supportsHeavyWeight = function() {\r\n    // Im Kompatibilitätsmodus (legacy mode) werden die Größe des Contextmenu und Menubar Einträge falsch berechnet (Darstellung 0x0)\r\n    // Hier wird der IFrame Mechanismus (heavyweight) explizit umgangen.\r\n    return (!framework_isIELegacyMode ||\r\n            ((this.__name.indexOf(\"_submenu\") == -1) &&\r\n             (this.__name.indexOf(DW_POPUP_TYPE.CONTEXTMENU) == -1) &&\r\n             (this.__name.indexOf(DW_POPUP_TYPE.MENUBAR) == -1)));\r\n};\r\n\r\nDWPopup.prototype.__internal_prepareHeavyWeightPopup = function(wrapperId, wrapperParent) {\r\n    if (!this.isHeavyWeight()) {\r\n        return this;\r\n    }\r\n    var wrapper = document.createElement(\"iframe\");\r\n    wrapper.setAttribute(\"id\", wrapperId);\r\n    wrapper.style.position = \"absolute\";\r\n    wrapper.style.backgroundColor = \"transparent\";\r\n    wrapper.frameBorder = \"0px\";\r\n    wrapper.style.border = 0;\r\n    wrapper.scrolling = \"no\";\r\n    // Bei der \"Offset\" Bestimmung der Elemente im IFrame wirkt sich (sporadisch) dessen Default Size aus (300 x 150)\r\n    // Die Größe des IFrames wird initial stark limitiert, und erst bei setSize\r\n    wrapper.style.maxWidth = \"1px\";\r\n    wrapper.style.maxHeight = \"1px\";\r\n    wrapper.style.display = \"none\";\r\n    if (wrapperParent) {\r\n        wrapperParent.appendChild(wrapper);\r\n    } else {\r\n        document.getElementsByTagName(\"body\")[0].appendChild(wrapper);\r\n    }\r\n    var doc = __internal_dwPopup_computeHeavyweightDocument(wrapper);\r\n    if (doc != null) {\r\n        doc.open();\r\n        doc.write(framework_doctype);\r\n        doc.close();\r\n        var globalHead = document.getElementsByTagName(\"head\")[0];\r\n        var head = doc.getElementsByTagName(\"head\")[0];\r\n        if (framework_isIE) {\r\n            var meta = doc.createElement(\"meta\");\r\n            dwDomSetDomAttribute(meta, \"http-equiv\", \"X-UA-Compatible\");\r\n            dwDomSetDomAttribute(meta, \"content\", \"IE=\" + parseInt(framework_browserVersion));\r\n            head.appendChild(meta);\r\n        }\r\n\r\n        var linkTags = globalHead.getElementsByTagName(\"link\");\r\n        for (var i = 0; i < linkTags.length; i++) {\r\n            var linkTag = linkTags[i];\r\n            if (linkTag.rel == \"stylesheet\") {\r\n                var link = doc.createElement(\"link\");\r\n                dwDomSetDomAttribute(link, \"rel\", \"stylesheet\");\r\n                dwDomSetDomAttribute(link, \"type\", \"text/css\");\r\n                dwDomSetDomAttribute(link, \"href\", dwDomGetDomAttribute(linkTag, \"href\"));\r\n                head.appendChild(link);\r\n            }\r\n        }\r\n        // SCRIPT Tags sollten nicht im Wrapper definiert sein - ansonsten ist nicht gewährleistet, dass die globalen\r\n        // Objekte korrekt gesetzt sind.\r\n        // Funktionen sollten immer auf den ursprünglichen DOM Elementen ausgeführt werden (event-redirection)\r\n//            var baseScript = doc.createElement(\"script\");\r\n//            dwDomSetDomAttribute(baseScript, \"type\", \"text/javascript\");\r\n//            dwDomSetDomAttribute(baseScript, \"src\", \"WEB-RES/js/base.js\"); <= Mittlerweile sind die JS Dateien in der URL versioniert, das würde also so nicht mehr funktionieren\r\n//            head.appendChild(baseScript);\r\n        var body = doc.getElementsByTagName(\"body\")[0];\r\n        var html = body.parentNode;\r\n        html.style.backgroundColor = \"transparent\";\r\n        body.style.backgroundColor = \"transparent\";\r\n\r\n        this.wrapper = wrapper;\r\n        this.document = doc;\r\n        // Beim entfernen des Wrappers aus dem BODY wird der Seiten-Inhalt sofort zurückgesetzt (kein eingebundenes CSS, kein Body-Inhalt, ...)\r\n        // da kein src gesetzt ist\r\n//            popup.removeFromBody();\r\n    }\r\n    return this;\r\n};\r\n\r\nfunction dwPopup_isCachedPopup(popup) {\r\n    for (var cachedPopupKey in DW_POPUP_WRAPPER_CACHE) {\r\n        if (popup == DW_POPUP_WRAPPER_CACHE[cachedPopupKey]) {\r\n            return true;\r\n        }\r\n    }\r\n    return false;\r\n}\r\n\r\nfunction dwPopup_isCachedPopUpByWrapperId(popupId) {\r\n    for (var cachedPopupKey in DW_POPUP_WRAPPER_CACHE) {\r\n        var wrapper = DW_POPUP_WRAPPER_CACHE[cachedPopupKey].wrapper;\r\n        if (wrapper && popupId == wrapper.id) {\r\n            return true;\r\n        }\r\n    }\r\n    return false;\r\n}\r\n\r\n/**\r\n * Injiziert das Control in einen vordefinierten Wrapper (siehe verfügbare Popup Typen)\r\n * @param control       darzustellendes Control\r\n * @param popupType     gültiger Popup-Typ\r\n * @param eventRedirector Funktion zur Umleitung der Events (ausgelöst im IFrame) - zur Weiterleitung an den Context der Hauptseite\r\n *                        Hinweis: Javascript (base.js / viewer.js) steht nur in der Hauptseite zur Verfügung\r\n * @return DWPopup\r\n */\r\nfunction dwPopup_wrapControl(control, popupType, eventRedirector) {\r\n    var popup = DW_POPUP_WRAPPER_CACHE[popupType];\r\n    return __internal_dwPopup_wrapControl(popup, control, eventRedirector);\r\n}\r\n\r\n/**\r\n * Injiziert das Control in einen Wrapper. Wrapper werden dynamisch erzeugt und müssen am Ende über z.B. removeFromBody entfernt werden\r\n * Ist ein Wrapper für das Control in der aktuellen Seite bereits eingebaut wird dieser wiederverwendet.\r\n * @param control\r\n * @param wrapperId         entspricht i.d.R. <control.id>_wrapper\r\n * @param wrapperParent     z.B. window.parent um einen Wrapper für ein submenu im Hauptfenster einzuhängen, sonst NULL\r\n * @param eventRedirector\r\n * @return DWPopup\r\n */\r\nfunction dwPopup_wrapControlWithoutCache(control, wrapperId, wrapperParent, eventRedirector) {\r\n    var popup = dwPopup_getPopupById(control.id) || __internal_dwPopup_createPopup(wrapperId, wrapperParent);\r\n    return __internal_dwPopup_wrapControl(popup, control, eventRedirector);\r\n}\r\n\r\nfunction __internal_dwPopup_wrapControl(popup, control, eventRedirector) {\r\n    if (popup.isHeavyWeight()) {\r\n        if (!popup.document) {\r\n            // bei einem Wechsel der Seite (ausblenden / neuladen) kann ggf. das document undefined sein\r\n            // Zugriff auf den Body ist dann nicht mehr möglich (geteElementsByTagName) -> vorher Abbruch\r\n            popup.control = control;\r\n            return popup;\r\n        }\r\n        var body = popup.document.getElementsByTagName(\"body\")[0];\r\n        var dwParentElement = control.dwParentElement;\r\n        dwDomRemoveAllChildNodes(body);\r\n        if (control.parentNode) {\r\n            // Bereits eingebaut ...\r\n            control = dwDomParseStringToNodes(control.outerHTML);\r\n        }\r\n        control.style.display = \"block\";\r\n        body.appendChild(control);\r\n        if (eventRedirector) {\r\n            eventRedirector(popup, control);\r\n        }\r\n        var zIndex = dwUtilsGetStyle(control, \"z-index\");\r\n        if ((zIndex == null) || (zIndex == \"\")) {\r\n            zIndex = 0;\r\n        }\r\n        popup.wrapper.style.zIndex = zIndex;\r\n    }\r\n\r\n    // dwParentElement merken, sonst wird u.U. fälschlicherweise das Contextmenü im dwHelperCloseCurrentlyOpenedContextMenu geschlossen (nach OnScroll-Event)\r\n    if (!control.dwParentElement) {\r\n        control.dwParentElement = dwParentElement;\r\n    }\r\n    popup.control = control;\r\n    return popup;\r\n}\r\n\r\n/**\r\n * Leitet die ausgelösten Events zu einem anderen Event-Handler um. 'this' kann explizit für die Event Verarbeitung vorgegeben werden\r\n * @param event\r\n * @param eventTarget\r\n * @param thisScope\r\n */\r\nfunction dwPopup_redirectEvent(event, eventTarget, thisScope) {\r\n    if (!eventTarget) {\r\n        return;\r\n    }\r\n    event = dwFrameworkGetEvent(event);\r\n    var func = eventTarget[\"on\" + event.type];\r\n    if (func) {\r\n        func.apply(thisScope, new Array(event));\r\n    }\r\n}\r\n\r\nfunction dwPopup_getPopup(popupType) {\r\n    return DW_POPUP_WRAPPER_CACHE[popupType];\r\n}\r\n\r\nfunction dwPopup_getPopupById(id, controlId) {\r\n    var popup = new DWPopup();\r\n    popup.__name = id;\r\n    if (popup.isHeavyWeight()) {\r\n        popup.wrapper = $(id + \"_wrapper\");\r\n        if (!popup.wrapper) {\r\n            return null;\r\n        }\r\n        popup.document = __internal_dwPopup_computeHeavyweightDocument(popup.wrapper);\r\n    }\r\n    controlId = controlId || id;\r\n    popup.control = popup.getDocument().getElementById(controlId);\r\n    var referrerId = popup.getControlForLayout().getAttribute(\"referrerId\");\r\n    if (referrerId) {\r\n        popup.referrer = $(referrerId);\r\n    }\r\n    return popup;\r\n}\r\n\r\nfunction __internal_dwPopup_getWrapperId(popupType) {\r\n    return popupType + \"_wrapper\";\r\n}\r\n\r\nfunction __internal_dwPopup_isHeavyweight() {\r\n    return DW_HEAVYWEIGHT_POPUP_ENABLED && (framework_isIE) && (framework_isIEHeavyWeightPopupAllowed);\r\n}\r\n\r\nfunction __internal_dwPopup_createPopup(wrapperId, wrapperParent) {\r\n    var popup = ((wrapperId.indexOf(DW_POPUP_TYPE.CONTEXTMENU) == 0) || (wrapperId.indexOf(DW_POPUP_TYPE.MENUBAR) == 0)) ?\r\n                new DWMenuPopup() :\r\n                new DWPopup();\r\n    popup.__name = wrapperId;\r\n    if (popup.isHeavyWeight()) {\r\n        return popup.__internal_prepareHeavyWeightPopup(wrapperId, wrapperParent);\r\n    } else {\r\n        return popup;\r\n    }\r\n}\r\n\r\nfunction __internal_dwPopup_computeHeavyweightDocument(wrapper) {\r\n    var doc = null;\r\n    if (wrapper.contentDocument) {\r\n        doc = wrapper.contentDocument;\r\n    } else if (wrapper.contentWindow && wrapper.contentWindow.document) {\r\n        doc = wrapper.contentWindow.document;\r\n    } else {\r\n        doc = wrapper.document;\r\n    }\r\n    return doc;\r\n}\r\n\r\nfunction __internal_resetFocus() {\r\n    var focusComponentId = \"focus_wrapper\";\r\n    if (!$(focusComponentId)) {\r\n        // Beim Entfernen eines IFrames verschluckt sich der IE - Eingabekomponenten funktionieren danach nicht mehr korrekt\r\n        // KeyCodes werden noch registriert, allerdings wirken sich die Eingaben nicht mehr auf den value aus\r\n        // Die zuletzt fokussierte Komponente wird fokussiert. Schlägt dieser Versuch fehl, wird eine Dummy-Eingabekomponente\r\n        // fokussiert und selektiert - das Verhalten des IE ist danach wieder erwartungsgemäß\r\n        var component = document.createElement(\"input\");\r\n        dwDomSetDomAttribute(component, \"type\", \"text\");\r\n        dwDomSetDomAttribute(component, \"id\", focusComponentId);\r\n        dwDomSetDomAttribute(component, \"name\", focusComponentId);\r\n        dwDomSetStyle(component, \"position\", \"absolute\");\r\n        dwDomSetStyle(component, \"left\", \"-10px\");\r\n        dwDomSetStyle(component, \"top\", \"-10px\");\r\n        dwDomSetStyle(component, \"width\", \"0px\");\r\n        dwDomSetStyle(component, \"height\", \"0px\");\r\n        dwDomSetStyle(component, \"border\", \"0\");\r\n        dwDomSetStyle(component, \"padding\", \"0\");\r\n        dwDomSetStyle(component, \"margin\", \"0\");\r\n        $(\"body\").appendChild(component);\r\n    }\r\n    var focusSuccessful = dwHelperTryFocusOnNode(focusComponentId);\r\n    $(focusComponentId).select();\r\n}\r\n\r\nDWMenuPopup.prototype = new DWPopup();\r\n\r\nfunction DWMenuPopup() {\r\n    var selectionPath = new Array();\r\n    var openedSubmenus = new Object();\r\n\r\n    this.selectMenuItem = function(menuItemId) {\r\n        var menuItem = $(menuItemId);\r\n        var newSelectionPath = new Array();\r\n        var node = menuItem;\r\n        while ((node != null) && node.tagName && (node.tagName.toLowerCase() != \"form\")) {\r\n            if (node.id) {\r\n                newSelectionPath.unshift(node.id);\r\n            }\r\n            node = node.parentNode;\r\n        }\r\n\r\n        var firstDifference = 0;\r\n\r\n        for (var i = firstDifference; i < newSelectionPath.length; i++) {\r\n            if ((i < selectionPath.length) && (newSelectionPath[i] == selectionPath[i])) {\r\n                firstDifference++;\r\n            } else {\r\n                break;\r\n            }\r\n        }\r\n//        framework_logger.log(\"First diff: \" + firstDifference);\r\n//        framework_logger.log(\"Old: \" + selectionPath);\r\n//        framework_logger.log(\"New: \" + newSelectionPath);\r\n        var previousSelectionCount = selectionPath.length;\r\n        for (i = (previousSelectionCount - 1); i >= firstDifference; i--) {\r\n            var previousItemId = selectionPath[i];\r\n            var previousSubmenu = $(previousItemId + \"_submenu\");\r\n            if (previousSubmenu) {\r\n                var previousSubmenuPopup = dwPopup_getPopupById(previousSubmenu.id);\r\n                if (previousSubmenuPopup) {\r\n                    previousSubmenuPopup.close();\r\n                    openedSubmenus[previousSubmenu.id] = null;\r\n                    delete openedSubmenus[previousSubmenu.id];\r\n                }\r\n            }\r\n\r\n            var parentItemId = selectionPath[selectionPath.length - 2];\r\n            var parent = $(parentItemId);\r\n            if (parent && (parent.className == \"guimenupopup\")) {\r\n                var previousItem = (dwPopup_getPopupById(parentItemId) || this).getDocument().getElementById(previousItemId);\r\n                if (previousItem) {\r\n//                    framework_logger.log(\"Remove class from \" + previousItemId);\r\n                    dwDomRemoveClass(previousItem, \"guimenuitem-hovered\");\r\n                }\r\n            }\r\n\r\n            selectionPath.pop();\r\n        }\r\n\r\n        for (i = firstDifference; i < newSelectionPath.length; i++) {\r\n            var newItemId = newSelectionPath[i];\r\n            selectionPath.push(newItemId);\r\n            var parentItemId = selectionPath[selectionPath.length - 2];\r\n            var parent = $(parentItemId);\r\n            if (parent && (parent.className == \"guimenupopup\")) {\r\n//                framework_logger.log(\"Add class to \" + newItemId);\r\n                var newItem = (dwPopup_getPopupById(parentItemId) || this).getDocument().getElementById(newItemId);\r\n                if (!newItem) {\r\n                    continue;\r\n                } // kann bei Aufruf via Mnemonic vorkommen\r\n                dwDomAddClass(newItem, \"guimenuitem-hovered\");\r\n                if (framework_isIE8 || framework_isIELegacyMode) {\r\n                    newItem.offsetWidth; // man muss es nicht verstehen ...\r\n                }\r\n            }\r\n        }\r\n\r\n        var currentItemId = selectionPath[selectionPath.length - 1];\r\n        if ($(currentItemId + \"_submenu\")) {\r\n//            framework_logger.log(\"Choose entry from path: \" + selectionPath)\r\n            var parentMenu = selectionPath[selectionPath.length - 2];\r\n            var parentPopup = dwPopup_getPopupById(parentMenu) || this;\r\n            var childPopup = parentPopup.createChildPopup(currentItemId + \"_submenu\", null, dwHelperRedirectContextMenuEventsToWrapper);\r\n            openedSubmenus[parentMenu] = childPopup;\r\n            childPopup.setInvisiblePosition();\r\n            childPopup.setVisible(true);\r\n//            childPopup.adjustWrapper();\r\n//            parentPopup.setChildPosition(childPopup, -3, 0);\r\n            setTimeout(function() {\r\n                childPopup.adjustWrapper();\r\n                parentPopup.setChildPosition(childPopup, -3, 0);\r\n            }, 50); // rendering/repaint ist manchmal verzögert/zu langsam\r\n        }\r\n    };\r\n    this.isMenuItemClickable = function() {\r\n        var currentItemId = selectionPath[selectionPath.length - 1];\r\n        return !($(currentItemId + \"_submenu\"));\r\n    };\r\n\r\n    this.closeSubmenus = function() {\r\n        for (var id in openedSubmenus) {\r\n            if (openedSubmenus.hasOwnProperty(id)) {\r\n                var openedSubmenu = openedSubmenus[id];\r\n                openedSubmenu.setVisible(false);\r\n                this.clearHovers(openedSubmenu.getControlForContent());\r\n                if (openedSubmenu.referrer) {\r\n                    openedSubmenu.removeReferrer();\r\n                } else {\r\n                    openedSubmenu.removeFromBody();\r\n                }\r\n            }\r\n        }\r\n    };\r\n\r\n    this.clearHovers = function(menu) {\r\n        if (!menu) {\r\n            return;\r\n        }\r\n        // div guimenupopup -> table -> tbody -> tr guimenuitem\r\n        var menuiItems = menu.children[0].children[0];\r\n        for (var i = 0; i < menuiItems.childElementCount; i++) {\r\n            dwDomRemoveClass(menuiItems.children[i], 'guimenuitem-hovered');\r\n        }\r\n    };\r\n\r\n    /**\r\n     * Methode zur Bestimmung ob der Knoten innerhalb des aktuellen Popups (oder damit verbundenen) liegt\r\n     *\r\n     * Basis Implementierung aus DWPopup muss hierzu überlagert werden, da DWPopup keine Verwaltung der offenen Kinder hat\r\n     * @param node\r\n     * @param includeSubmenus\r\n     * @return {Boolean}\r\n     */\r\n    this.containsNode = function(node, includeSubmenus) {\r\n        var containsNode = dwUtilsGetNavigationPath(node, this.getControlForContent(), DWDOM_NAVIGATION_PATH_DIRECTION.TOP_DOWN) != null;\r\n        if (!includeSubmenus || containsNode) {\r\n            return containsNode;\r\n        }\r\n        for (var id in openedSubmenus) {\r\n            if (openedSubmenus.hasOwnProperty(id)) {\r\n                var openedSubmenu = openedSubmenus[id];\r\n                var submenuContainsNode = openedSubmenu.containsNode(node, false);\r\n                if (submenuContainsNode) {\r\n                    return true;\r\n                }\r\n            }\r\n        }\r\n        return false;\r\n    };\r\n}\r\n\n/*\r\n * Copyright (c) 2017 Docware GmbH\r\n */\r\nvar DWTABLECOLUMNRESIZE_DELAY = 10;\r\nvar dwTableColumnResizeColumnIndex = null;\r\nvar dwTableColumnResizeColumnIndexWithFixedColumns = null;\r\n// Startposition des Drag-Vorgangs\r\nvar dwTableColumnResizeDragStartCoords = null;\r\nvar dwTableColumnResizeInitialColumnWidth = null;\r\nvar dwTableColumnResizeInitialFixedTableWidth = null;\r\n\r\n// Die Id der GuiTable\r\nvar dwTableColumnResizeDragUniqueId = null;\r\n\r\n// Fixierte Spalten oder scrollbare Spalten?\r\nvar dwTableColumnResizeDragFixedColumn = false;\r\n\r\n// Die Id vom EventHandler\r\nvar dwTableColumnResizeDragEventHandlerComponentId = null;\r\n\r\nvar dwTableColumnResizeHeaderCell = null;\r\nvar dwTableColumnResizeFixedTable = null;\r\nvar dwTableColumnResizeColumnCount = 0;\r\n\r\n// Für den Inhalt\r\nvar dwTableColumnContentResizeRuns = false;\r\nvar dwTableColumnContentResizeNewValue = null;\r\n\r\nfunction dwTableColumnResizeInitDragAndDrop() {\r\n    // Auf body sind Listener registriert für den 'auto close' Mechanismus von Popup-Fenstern\r\n    // Alle Mouse-Events werden ab Body automatisch geschluckt und dringen nicht mehr zum document durch\r\n    // Body erstreckt sich auf 100% des Viewports und wird als Ersatz für document verwendet\r\n    var body = $(\"body\");\r\n    dwDomAddEvent(body, \"onmousemove\", \"dwTableColumnResizeDragEvent(event);\", false);\r\n}\r\n\r\nfunction dwTableColumnResizeDragStartEvent(event, eventHandlerComponentId, uniqueId, index, indexWithFixedColumns, isFixedColumn) {\r\n    if (dwTableColumnResizeColumnIndex != null) {\r\n        return;\r\n    }\r\n    dwFrameworkPreventDefaultBehaviour(event);\r\n    dwTableColumnResizeDragStartCoords = dwTableColumnResizeGetPageCoordinates(event);\r\n    dwTableColumnResizeColumnIndex = index;\r\n    dwTableColumnResizeColumnIndexWithFixedColumns = indexWithFixedColumns;\r\n    dwTableColumnResizeDragEventHandlerComponentId = eventHandlerComponentId;\r\n    dwTableColumnResizeDragUniqueId = uniqueId;\r\n    dwTableColumnResizeDragFixedColumn = isFixedColumn;\r\n    dwTableColumnResizeHeaderCell = getHeaderCell();\r\n    dwTableColumnResizeColumnCount = getHeaderColumnCount();\r\n    dwTableColumnResizeInitialColumnWidth = dwTableColumnResizeHeaderCell.offsetWidth;\r\n    dwTableColumnContentResizeNewValue = dwTableColumnResizeInitialColumnWidth;\r\n\r\n    if (isFixedColumn) {\r\n        dwTableColumnResizeFixedTable = $(dwTableColumnResizeDragUniqueId + \"_enclosingFixedTable\");\r\n        if (dwTableColumnResizeFixedTable) {\r\n            dwTableColumnResizeInitialFixedTableWidth = dwTableColumnResizeFixedTable.offsetWidth;\r\n        }\r\n    }\r\n}\r\n\r\nfunction getHeaderRow() {\r\n    var headerTable = $(dwTableColumnResizeDragUniqueId + (dwTableColumnResizeDragFixedColumn ? \"_fixedHeaderTable\" : \"_headerTable\"));\r\n    var rowOrTBody = dwDomGetChildAtIndex(headerTable, 0);\r\n    var row = rowOrTBody;\r\n    if (rowOrTBody.nodeName.toLowerCase() == \"tbody\") {\r\n        row = dwDomGetChildAtIndex(rowOrTBody, 0);\r\n    }\r\n    return row;\r\n}\r\n\r\nfunction getHeaderCell() {\r\n    var row = getHeaderRow();\r\n    var td = dwDomGetChildAtIndex(row, dwTableColumnResizeColumnIndex);\r\n    var div = dwDomGetChildAtIndex(td, 0);\r\n    if (dwTableColumnResizeColumnIndex == 0) {\r\n        return dwDomGetChildAtIndex(div, 0);\r\n    } else {\r\n        return dwDomGetChildAtIndex(div, 1);\r\n    }\r\n\r\n}\r\n\r\nfunction getHeaderColumnCount() {\r\n    return dwDomGetElementChildNodes(getHeaderRow()).length;\r\n}\r\n\r\nfunction getRealTableColumnWidth(headerColumnIdx, headerColumnWidth) {\r\n    if ((headerColumnIdx != (dwTableColumnResizeColumnCount - 1)) || dwTableColumnResizeDragFixedColumn) {\r\n        return headerColumnWidth;\r\n    }\r\n    var contentDiv = $(dwTableColumnResizeDragUniqueId + \"_contentDiv\");\r\n    if (dwUtilsHasVerticalOverflow(contentDiv)) {\r\n        headerColumnWidth -= dwUtilsGetScrollbarWidth(contentDiv);\r\n    }\r\n    return headerColumnWidth;\r\n}\r\n\r\nfunction dwTableColumnResizeDragEvent(event) {\r\n    if (dwTableColumnResizeColumnIndex == null) {\r\n        return;\r\n    }\r\n\r\n    // Berechne die Koordinaten der Mausbewegung\r\n    var newCoords = dwTableColumnResizeGetPageCoordinates(event);\r\n    // Neue Größen für die Elemente berechnen\r\n    var difference = newCoords[0] - dwTableColumnResizeDragStartCoords[0];\r\n    var newWidthInt = dwTableColumnResizeInitialColumnWidth + difference;\r\n    if (newWidthInt < 16) {\r\n        newWidthInt = 16;\r\n    }\r\n    var newWidthPx = newWidthInt + \"px\";\r\n    dwTableColumnResizeHeaderCell.style.width = newWidthPx;\r\n    if (dwTableColumnResizeColumnIndex == (dwTableColumnResizeColumnCount - 1)) {\r\n        // Letzte Spalte wurde bewusst in der Breite angepasst. Der Wert für columnwidth muss angeglichen werden\r\n        // Dieser Wert wird z.B. bei Resize Aktionen ausgewertet (notwendig damit nicht scrollbalken-Breite manuell rausgereichnet/reingerechnet werden muss)\r\n        dwDomSetDomAttribute(dwTableColumnResizeHeaderCell, \"columnwidth\", getRealTableColumnWidth(dwTableColumnResizeColumnIndex, newWidthInt));\r\n    }\r\n\r\n    // Bei Änderung der Spaltenbreite einer fixierten Spalte muss die Breite der gesamten fixierten Tabelle ebenfalls angepasst werden\r\n    if (dwTableColumnResizeDragFixedColumn && dwTableColumnResizeInitialFixedTableWidth) {\r\n        var newFixedTableWidthInt = dwTableColumnResizeInitialFixedTableWidth + difference;\r\n        dwTableColumnResizeFixedTable.style.width = newFixedTableWidthInt + \"px\";\r\n    }\r\n\r\n    // Bei Änderung der Spaltenbreite in einer Tabelle mit fixierten Spalten muss dwHelperTableContentResized() aufgerufen\r\n    // werden, um die horizontale ScrollBar anzupassen\r\n    if (dwTableColumnResizeDragFixedColumn || (dwTableColumnResizeColumnIndex != dwTableColumnResizeColumnIndexWithFixedColumns)) {\r\n        dwHelperTableContentResized(dwTableColumnResizeDragUniqueId, false, true);\r\n    }\r\n\r\n    dwTableColumnContentResizeNewValue = newWidthPx;\r\n    if (!dwTableColumnContentResizeRuns) {\r\n        dwTableColumnContentResizeInBackground();\r\n    }\r\n}\r\n\r\nfunction dwTableColumnContentResizeInBackground() {\r\n    dwTableColumnContentResizeRuns = true;\r\n    // In Thread anstossen\r\n    setTimeout(function() {\r\n        // Breite der Inhalts-Spalte kann für die letzte Spalte abweichen - und muss ggf. neu berechnet werden\r\n        dwTableColumnContentResizeNewValue = getRealTableColumnWidth(dwTableColumnResizeColumnIndex, parseInt(dwTableColumnContentResizeNewValue)) + \"px\";\r\n        dwTableColumnContentResize();\r\n    }, DWTABLECOLUMNRESIZE_DELAY);\r\n}\r\n\r\nfunction dwTableColumnContentResize() {\r\n    while (true) {\r\n        var myValue = dwTableColumnContentResizeNewValue;\r\n        try {\r\n            var contentTable = $(dwTableColumnResizeDragUniqueId + (dwTableColumnResizeDragFixedColumn ? \"_fixedContentTable\" : \"_contentTable\"));\r\n            var rowContainer = dwDomGetRealRowContainerNode(contentTable);\r\n            var rows = dwDomGetChildrenByTagname(rowContainer, \"tr\", {}, false);\r\n            for (var i = 0; i < rows.length; i++) {\r\n                var row = rows[i];\r\n                var cell = dwDomGetChildAtIndex(dwDomGetChildAtIndex(row, dwTableColumnResizeColumnIndex), 0);\r\n                cell.style.width = myValue;\r\n                if (dwTableColumnContentResizeNewValue != myValue) {\r\n                    break;\r\n                }\r\n            }\r\n        } catch (exception) {\r\n        }\r\n        if (dwTableColumnContentResizeNewValue == myValue) {\r\n            // Wert ist gleich geblieben\r\n            dwTableColumnContentResizeRuns = false;\r\n            return;\r\n        }\r\n    }\r\n}\r\n\r\nfunction dwTableColumnResizeDragStopEvent(event) {\r\n    if (dwTableColumnResizeColumnIndex == null) {\r\n        return;\r\n    }\r\n    dwTableColumnContentResize();\r\n\r\n    var inputFieldName = dwTableColumnResizeDragUniqueId + \"_columnWidth_\" + dwTableColumnResizeColumnIndexWithFixedColumns;\r\n    $(inputFieldName).value = dwTableColumnResizeHeaderCell.offsetWidth;\r\n    dwAjaxTableColumnResized(event, dwTableColumnResizeDragEventHandlerComponentId, dwTableColumnResizeDragUniqueId, dwTableColumnResizeColumnIndexWithFixedColumns, \"\", true);\r\n\r\n    dwTableColumnResizeDragStartCoords = null;\r\n    dwTableColumnResizeDragEventHandlerComponentId = null;\r\n    dwTableColumnResizeDragUniqueId = null;\r\n    dwTableColumnResizeDragFixedColumn = false;\r\n\r\n    dwTableColumnResizeColumnIndex = null;\r\n    dwTableColumnResizeColumnIndexWithFixedColumns = null;\r\n    dwTableColumnResizeHeaderCell = null;\r\n    dwTableColumnResizeFixedTable = null;\r\n    dwTableColumnResizeInitialColumnWidth = null;\r\n    dwTableColumnResizeInitialFixedTableWidth = null;\r\n}\r\n\r\nfunction dwTableColumnResizeParsePixel(pixelValue) {\r\n    if (pixelValue == \"\") {\r\n        return 0;\r\n    }\r\n    return parseInt(pixelValue);\r\n}\r\n\r\nfunction dwTableColumnResizeGetPageCoordinates(event) {\r\n    return new Array(document.all ? window.event.clientX : event.pageX,\r\n                     document.all ? window.event.clientY : event.pageY);\r\n}\n/*\r\n * Copyright (c) 2018 Docware GmbH\r\n */\r\n\r\n/**\r\n * Verwaltet Informationen über Controls, die bei Größenänderungen benachrichtigt werden sollen.\r\n */\r\n\r\n\r\nvar dwResizeRegistry = dwResizeRegistryGetInstance();\r\n\r\n/**\r\n * Klasse zur Verwaltung der Controls mit Resize-Listenern\r\n */\r\nfunction DwResizeRegistry() {\r\n    this.dwResizeRegistryControlCache = {};\r\n    this.isUpdating = false;\r\n}\r\n\r\nfunction dwResizeRegistryGetInstance() {\r\n    if (dwResizeRegistry == null) {\r\n        dwResizeRegistry = new DwResizeRegistry();\r\n    }\r\n    return dwResizeRegistry;\r\n}\r\n\r\n/**\r\n * Ein Control zur Überwachung der Größe hinzufügen (Resize-Listener installieren)\r\n */\r\nDwResizeRegistry.prototype.addControl = function(eventHandlerComponentId, controlId, parentId) {\r\n    var data = this.dwResizeRegistryControlCache[controlId];\r\n    if (data) {\r\n        return;\r\n    }\r\n    data = {};\r\n    data.eventHandlerComponentId = eventHandlerComponentId;\r\n    data.controlId = controlId;\r\n    data.parentId = parentId;\r\n    data.width = 0;\r\n    data.height = 0;\r\n    this.dwResizeRegistryControlCache[controlId] = data;\r\n\r\n    if (dwFrameworkInitFinished) {\r\n        var control = $(data.controlId);                    // initiales resize-Event feuern\r\n        if (control != null) {\r\n            var updateControls = {};\r\n            this.checkControl(control, data, updateControls);\r\n            this.notifyControls(updateControls);\r\n        }\r\n    }\r\n};\r\n\r\n/**\r\n * Ein Control von der Überwachung der Größe entfernen (Resize-Listener deinstallieren)\r\n */\r\nDwResizeRegistry.prototype.removeControl = function(controlId) {\r\n    delete this.dwResizeRegistryControlCache[controlId];\r\n};\r\n\r\n/**\r\n * Änderungen der Größe feststellen, neue Größen speichern und Änderungen weiter propagieren\r\n */\r\nDwResizeRegistry.prototype.updateSizes = function() {\r\n    if (this.isUpdating) {\r\n        return;\r\n    }\r\n    this.isUpdating = true;\r\n    try {\r\n        var updateControls = {};\r\n        // zuerst Ermitteln der Controls mit Größenänderungen\r\n        for (var id in this.dwResizeRegistryControlCache) {\r\n            if (this.dwResizeRegistryControlCache.hasOwnProperty(id)) {\r\n                var data = this.dwResizeRegistryControlCache[id];\r\n                var control = $(data.controlId);\r\n                if (control == null) {\r\n                    // nicht mehr sichtbar -> entfernen\r\n                    delete this.dwResizeRegistryControlCache[data.controlId];\r\n                } else {\r\n                    this.checkControl(control, data, updateControls);\r\n                }\r\n            }\r\n        }\r\n        this.notifyControls(updateControls);\r\n    } finally {\r\n        // Im Fehlerfall Flag trotzdem sauber bereinigen sonst würde er nie mehr in die Methode gelangen\r\n        this.isUpdating = false;\r\n    }\r\n};\r\n/**\r\n * Überprüft, ob sich die Höhe/Breite eines Controls geändert hat\r\n */\r\nDwResizeRegistry.prototype.checkControl = function(control, data, updateControls) {\r\n    var currentWidth = control.offsetWidth;\r\n    var currentHeight = control.offsetHeight;\r\n    if ((data.width !== currentWidth) || (data.height !== currentHeight)) {\r\n        data.oldWidth = data.width;           // alte Breite/Höhe merken\r\n        data.oldHeight = data.height;\r\n        data.width = currentWidth;            // aktuelle Breite/Höhe setzen\r\n        data.height = currentHeight;\r\n        var absPointChild = dwUtilsGetLocationOnWindow(control, true);\r\n        var absPointParent = new DWPoint(0, 0);\r\n        if (data.parentId) {\r\n            // parentId kann leer sein ...\r\n            var parent = $(data.parentId);\r\n            if (parent != null) {\r\n                absPointParent = dwUtilsGetLocationOnWindow(parent, true);\r\n            }\r\n        }\r\n        data.relX = absPointChild.x - absPointParent.x;\r\n        data.relY = absPointChild.y - absPointParent.y;\r\n        data.absX = absPointChild.x;\r\n        data.absY = absPointChild.y;\r\n        updateControls[data.controlId] = data;\r\n    }\r\n};\r\n\r\n/**\r\n * Informiert alle Controls über Größenänderungen\r\n */\r\nDwResizeRegistry.prototype.notifyControls = function(updateControls) {\r\n    // nun diese Controls benachrichtigen\r\n    for (var id in updateControls) {\r\n        if (updateControls.hasOwnProperty(id)) {\r\n            var data = updateControls[id];\r\n\r\n            var newWidth = \"newWidth=\" + data.width + \"@DWSUB@\";\r\n            var newHeight = \"newHeight=\" + data.height + \"@DWSUB@\";\r\n            var relX = \"relX=\" + data.relX + \"@DWSUB@\";\r\n            var relY = \"relY=\" + data.relY + \"@DWSUB@\";\r\n            var absX = \"absX=\" + data.absX + \"@DWSUB@\";\r\n            var absY = \"absY=\" + data.absY;\r\n\r\n            var params = newWidth + newHeight + relX + relY + absX + absY;\r\n            var control = $(data.controlId);\r\n            if (control != null) {\r\n                var onClientSideResize = dwDomGetDomAttribute(control, \"onresizeClientSide\"); // Workaround für clientseitige Resize-Listener\r\n                if (onClientSideResize != null) {\r\n                    eval(onClientSideResize);  // die eigentliche Funktion versteckt sich im Attributwert\r\n                }\r\n            }\r\n            dwAjaxDefaultOnResize(null, data.eventHandlerComponentId, data.controlId, params, true);\r\n        }\r\n    }\r\n};\r\n\n/*\r\n * Copyright (c) 2018 Docware GmbH\r\n */\r\n\r\n//\r\n// Hinweis: Prototype Methoden werden nicht für jede Instanz in den Speicher geladen, sondern einmalig für die JS Klasse\r\n// Sie sind Methoden-Implementierungen in der Klassendefinition selbst vorzuziehen (z.B. this.myMethod = function()...)\r\n// Sie dürfen erst nach den Vererbungsregeln definiert werden\r\n//\r\n\r\n//\r\n// KONSTANTEN\r\n//\r\nvar DW_HOTKEY_KEY_SEPARATOR = \"_\";\r\nvar dwHotkeyRegistry = dwHotkeyRegistryGetInstance();\r\n// Unterstützte HOTKEY Typen. Typ-spezifische Ableitung muss Methode 'execute' implementieren\r\nvar DW_HOTKEY_TYPE = {\r\n    RECURSIVE_WITH_CALLBACK: \"RECURSIVE_WITH_CALLBACK\",\r\n    RECURSIVE_WITH_ONCLICK: \"RECURSIVE_WITH_CLICK\",\r\n    NEAREST_NEIGHBOUR: \"NEAREST_NEIGHBOUR\"\r\n};\r\n// event[<modifier>Key] dient zum Auslesen, ob der Modifier beim Event gedrückt ist\r\nvar DW_HOTKEY_SUPPORTED_MODIFIERS = new Array(\"ALT\", \"CTRL\", \"SHIFT\");\r\n\r\nvar dwHotkeyRegistryCacheByWindowId = new Object();\r\n\r\n//\r\n// KLASSEN\r\n//\r\n\r\n/**\r\n * Abstrakte Implementierung der Bean für Hotkey Einträge in der Registry\r\n * Muss von DwTempHotkey als Zwischenschicht abgeleitet werden, damit bei der Vererbungshierarchie\r\n * der Konstruktor der Superklasse nicht mit Parametern aufgerufen wird\r\n * @param type\r\n * @param keycode\r\n * @param modifiersArray\r\n */\r\nfunction DwAbstractHotkey(type, keycode, modifiersArray) {\r\n    this.type = type;\r\n    this.keycode = keycode;\r\n    this.modifiersArray = modifiersArray.sort();\r\n}\r\n\r\nDwAbstractHotkey.prototype.doAction = function(event, eventHandlerComponentId, controlId) {\r\n    alert(\"Method 'doAction' needs to be overriden for type '\" + this.type + \"'.\");\r\n};\r\n\r\nDwAbstractHotkey.prototype.getKey = function() {\r\n    return this.keycode + DW_HOTKEY_KEY_SEPARATOR + this.modifiersArray.join(DW_HOTKEY_KEY_SEPARATOR);\r\n};\r\n\r\nDwAbstractHotkey.prototype.fireCallback = function(event, eventHandlerComponentId, controlId) {\r\n    dwFrameworkPreventDefaultBehaviour(event);\r\n    dwFrameworkDisableEventBubbling(event);\r\n    var keycode = dwUtilsGetEventKeyCode(event);\r\n    var key = String.fromCharCode(keycode);\r\n    var hotkey = \"\";\r\n    var modifiers = this.modifiersArray.join(\"+\");\r\n    hotkey = hotkey.concat(modifiers).concat(\"+\").concat(key);\r\n    dwAjaxDefaultOnHotkeyEvent(event, eventHandlerComponentId, controlId,\r\n                               \"hotkey=\" + hotkey + \"@DWSUB@hotkeyType=\" + this.type, true);\r\n};\r\n\r\nDwAbstractHotkey.prototype.fireClick = function(event, controlToClick, resetFocus) {\r\n    var srcControl = dwUtilsGetEventTarget(event);\r\n    // Im IE muss der Focus weg, damit wir onChange des Textfields mitbekommen\r\n    if (resetFocus) {\r\n        try {\r\n            controlToClick.focus();\r\n        } catch (exception) {\r\n        } // nicht fokussierbar\r\n    }\r\n    controlToClick.click();\r\n    if (resetFocus) {\r\n        try {\r\n            srcControl.focus();\r\n        } catch (exception) {\r\n        } // nicht fokussierbar\r\n    }\r\n};\r\n\r\n\r\n/**\r\n * Klasse für Hotkey Einträge, die nur ein Event zum Server schicken\r\n * Keine direkten clientseitigen Aufrufe\r\n * @param keycode\r\n * @param modifiersArray\r\n */\r\nfunction DwRecursiveCallbackHotkey(keycode, modifiersArray) {\r\n    DwAbstractHotkey.call(this, DW_HOTKEY_TYPE.RECURSIVE_WITH_CALLBACK, keycode, modifiersArray);\r\n}\r\n\r\n/**\r\n * Klasse für Hotkey Einträge, die ein clientseitiges Event auslösen (Aufruf der onclick Methode auf dem\r\n * aufgerufenen Element)\r\n * @param keycode\r\n * @param modifiersArray\r\n */\r\nfunction DwExecuteClickHotkey(keycode, modifiersArray) {\r\n    DwAbstractHotkey.call(this, DW_HOTKEY_TYPE.RECURSIVE_WITH_ONCLICK, keycode, modifiersArray);\r\n}\r\n\r\n/**\r\n * Klasse für Mnemonic Hotkey-Einträge\r\n * @param keycode\r\n * @param modifiersArray\r\n */\r\nfunction DwMnemonicHotkey(keycode, modifiersArray) {\r\n    DwAbstractHotkey.call(this, DW_HOTKEY_TYPE.RECURSIVE_WITH_ONCLICK, keycode, modifiersArray);\r\n}\r\n\r\n/**\r\n * Klasse für Hotkey Einträge, die alle nearest neighbours auswertet und mit den registrierten IDs abgleicht\r\n * Bei positivem Match wird das onClick Event ausgelöst (z.B. Defaultbutton)\r\n * @param keycode\r\n * @param modifiersArray\r\n */\r\nfunction DwNearestNeighbourHotkey(keycode, modifiersArray) {\r\n    DwAbstractHotkey.call(this, DW_HOTKEY_TYPE.NEAREST_NEIGHBOUR, keycode, modifiersArray);\r\n}\r\n\r\n/**\r\n * Leere Klasse in der Vererbungshierarchie, so dass Konstruktur der Super-Klasse\r\n * bei Aufbau der Vererbung nicht mit Parametern aufgerufen werden muss\r\n */\r\nfunction DwTempHotkey() {\r\n}\r\n\r\n//\r\n// VERERBUNGEN. DwAbstractHotkey -> DwTempHotkey -> DwRecursiveCallbackHotkey/ ...\r\n//\r\nDwTempHotkey.prototype = DwAbstractHotkey.prototype;\r\nDwRecursiveCallbackHotkey.prototype = new DwTempHotkey();\r\nDwExecuteClickHotkey.prototype = new DwTempHotkey();\r\nDwMnemonicHotkey.prototype = new DwTempHotkey();\r\nDwNearestNeighbourHotkey.prototype = new DwTempHotkey();\r\n\r\n//\r\n// METHODEN. Neue oder überlagernde Methoden in den ableitenden Klassen müssen nach der Vererbungsregel definiert werden!\r\n//\r\nDwRecursiveCallbackHotkey.prototype.doAction = function(event, eventHandlerComponentId, controlId) {\r\n    // Aktion: Callback zu Server. Event auslösen\r\n    var isExecuted = false;\r\n    var srcControl = dwUtilsGetEventTarget(event);\r\n    var control = srcControl;\r\n    while (!isExecuted && (control != null)) {\r\n        if (control.id == controlId) {\r\n            this.fireCallback(event, eventHandlerComponentId, controlId);\r\n            isExecuted = true;\r\n        }\r\n        control = control.parentNode;\r\n    }\r\n    return isExecuted;\r\n};\r\n\r\nDwExecuteClickHotkey.prototype.doAction = function(event, eventHandlerComponentId, controlId) {\r\n    // Aktion: Click Event auslösen.\r\n    var control = $(controlId);\r\n    this.fireClick(event, control, true);\r\n    return true; // nur/immer das erste Hotkey Objekt wird geklickt \r\n};\r\n\r\nDwMnemonicHotkey.prototype.doAction = function(event, eventHandlerComponentId, controlId) {\r\n    var control = $(controlId);\r\n    this.fireClick(event, control, true);\r\n    this.fireCallback(event, eventHandlerComponentId, controlId);\r\n    return true;\r\n};\r\n\r\nDwNearestNeighbourHotkey.prototype.doAction = function(event, eventHandlerComponentId, controlId) {\r\n    // Aktion: Nearest Neighbour finden (z.B. DefaultButton, Cancel Button) und Event auslösen\r\n    if (event.keyCode != this.keycode) {\r\n        return false;\r\n    }\r\n    var srcControl = dwUtilsGetEventTarget(event);\r\n\r\n    var srcControlAllowsFiring = srcControl.getAttribute(\"allowsFiringNearestNeighbour\");\r\n    // Wenn das Attribut nicht vorhanden ist, dann ist es allowed\r\n    if ((srcControlAllowsFiring != null) && (srcControlAllowsFiring == \"false\")) {\r\n        return false;\r\n    }\r\n\r\n    // Wir schauen 1 Ebene(n) hoch\r\n    var iterControl = srcControl.parentNode;\r\n    var panelCounter = 0;\r\n    while (true) {\r\n        if ((panelCounter > 0) || (iterControl == null)) {\r\n            break;\r\n        }\r\n        if (iterControl.nodeType == DWUTILS_NODE_TYPE.ELEMENT) {\r\n            var classNames = iterControl.className;\r\n            classNames = dwUtilsSplit(classNames, \" \", false);\r\n            if (dwUtilsIsInArray(classNames, \"guipanel\")) {\r\n                panelCounter++;\r\n                var nearestNeighbour = this.findNearestNeighbour(iterControl, event.keyCode, controlId, true, true, null);\r\n                if ((nearestNeighbour != null) && !nearestNeighbour.disabled) {\r\n                    this.fireClick(event, nearestNeighbour, true);\r\n                    return true;\r\n                }\r\n            }\r\n        }\r\n        iterControl = iterControl.parentNode;\r\n    }\r\n    return false;\r\n};\r\n\r\n/**\r\n *\r\n * Die Funktion findNearestNeighbour sucht NICHT nach dem nächsten Element im DOM-Baum, welches auf den keyCode registriert ist!\r\n *\r\n * Sondern: Die auf den entsprechenden KeyCode registrierten Elemente werden in der Datenstruktur this.registeredHotkeysByKey gespeichert.\r\n * Wird ein Hotkey-Event ausgelöst wird das Element zurückgegeben, welches sich als erstes registriert hat, daher als erstes in this.registeredHotkeysByKey gespeichert ist und im aktuellen DOM-Baum auch enthalten ist.\r\n * Die Elemente in this.registeredHotkeysByKey werden in @function callHotkeyByKey der Reihe nach abgearbeitet.\r\n *\r\n *\r\n * @param currentNode\r\n * @param keyCode\r\n * @param nearestNeighbourId    die id des elements, welches gerade betrachtet wird und in this.registeredHotkeysByKey registriert ist\r\n * @param doSearchUp            soll im DOM-Baum aufwärts gesucht werden (parentNodes)\r\n * @param doSearchDown          soll im DOM-Baum abwärts gesucht werden (childNodes)\r\n * @param excludedNode\r\n * @returns {*}                 null, wenn nichts gefunden wurde oder die node welche mit der nearestNeighbourId übereinstimmt\r\n */\r\nDwNearestNeighbourHotkey.prototype.findNearestNeighbour = function(currentNode, keyCode, nearestNeighbourId, doSearchUp, doSearchDown, excludedNode) {\r\n    var childNodes = currentNode.childNodes;\r\n    for (var i = 0; i < childNodes.length; i++) {\r\n        var childNode = childNodes[i];\r\n        if (childNode == excludedNode) {\r\n            continue;\r\n        }\r\n        if (childNode.nodeType == DWUTILS_NODE_TYPE.ELEMENT) {\r\n            var childId = childNode.id;\r\n            if (childId == nearestNeighbourId) {\r\n                if (dwUtilsGetStyle(childNode, \"display\") != \"none\") {\r\n                    return childNode; // Button gefunden (Default oder Cancel, abhängig von registrierten Keycode)\r\n                } else {\r\n                    return null; // gefundener Button ist nicht sichtbar\r\n                }\r\n            }\r\n\r\n            if (doSearchDown) {\r\n                var nearestNeighbourNode = this.findNearestNeighbour(childNode, keyCode, nearestNeighbourId, false, true, null);\r\n                if (nearestNeighbourNode != null) {\r\n                    return nearestNeighbourNode;\r\n                }\r\n            }\r\n        }\r\n    }\r\n    if (doSearchUp) {\r\n        var parentNode = currentNode.parentNode;\r\n        if (parentNode != null) {\r\n            var nearestNeighbourNode = this.findNearestNeighbour(parentNode, keyCode, nearestNeighbourId, true, true, currentNode);\r\n            if (nearestNeighbourNode != null) {\r\n                return nearestNeighbourNode;\r\n            }\r\n        }\r\n    }\r\n    return null;\r\n};\r\n\r\nfunction DwHotkeyRegistryEntry(eventHandlerComponentId, controlId, hotkey) {\r\n    this.eventHandlerComponentId = eventHandlerComponentId;\r\n    this.controlId = controlId;\r\n    this.hotkey = hotkey;\r\n}\r\n\r\nDwHotkeyRegistryEntry.prototype.getKey = function() {\r\n    return this.hotkey.getKey();\r\n};\r\n\r\nDwHotkeyRegistryEntry.prototype.doAction = function(event) {\r\n    return this.hotkey.doAction(event, this.eventHandlerComponentId, this.controlId);\r\n};\r\nDwHotkeyRegistryEntry.prototype.fireCallback = function(event) {\r\n    this.hotkey.fireCallback(event, this.eventHandlerComponentId, this.controlId);\r\n};\r\nDwHotkeyRegistryEntry.prototype.equals = function(entry) {\r\n    if (this == entry) {\r\n        return true;\r\n    }\r\n    if ((this.controlId != entry.controlId) || (this.eventHandlerComponentId != entry.eventHandlerComponentId)) {\r\n        return false;\r\n    }\r\n    if ((this.hotkey.keycode != entry.hotkey.keycode) || (this.hotkey.type != entry.hotkey.type)) {\r\n        return false;\r\n    }\r\n    return true;\r\n};\r\n\r\n/**\r\n * Klasse zur Verwaltung der Hotkey Einträge\r\n */\r\nfunction DwHotkeyRegistry() {\r\n    this.registeredHotkeysByKey = new Object();\r\n}\r\n\r\nDwHotkeyRegistry.prototype.getIndex = function(registryEntryValue) {\r\n    var key = registryEntryValue.getKey();\r\n    var registeredHotkeys = this.registeredHotkeysByKey[key];\r\n    if (registeredHotkeys != null) {\r\n        for (var i = 0; i < registeredHotkeys.length; i++) {\r\n            if (registeredHotkeys[i].equals(registryEntryValue)) {\r\n                return i;\r\n            }\r\n        }\r\n    }\r\n    return -1;\r\n};\r\n\r\nDwHotkeyRegistry.prototype.__internalCreateKeyFromEvent = function(event) {\r\n    var keycode = dwUtilsGetEventKeyCode(event);\r\n    var modifiersArray = new Array();\r\n    for (var i = 0; i < DW_HOTKEY_SUPPORTED_MODIFIERS.length; i++) {\r\n        var supportedModifier = DW_HOTKEY_SUPPORTED_MODIFIERS[i];\r\n        if (event[supportedModifier.toLowerCase() + \"Key\"]) {\r\n            modifiersArray.push(supportedModifier);\r\n        }\r\n    }\r\n    return keycode + DW_HOTKEY_KEY_SEPARATOR + modifiersArray.join(DW_HOTKEY_KEY_SEPARATOR);\r\n};\r\n\r\nDwHotkeyRegistry.prototype.__internalRemoveHotkeyEntry = function(eventHandlerComponentId, controlId, hotkey) {\r\n    var registryEntryValue = new DwHotkeyRegistryEntry(eventHandlerComponentId, controlId, hotkey);\r\n    var key = registryEntryValue.getKey();\r\n\r\n    dwHotkeyRegistryStoreSettingsToCache(\"thisWindowId\");\r\n    var windowId;\r\n    for (windowId in dwHotkeyRegistryCacheByWindowId) {\r\n        var windowReg = dwHotkeyRegistryCacheByWindowId[windowId];\r\n        if (windowReg) { // kann durch dwHotkeyRegistryLoadSettingsFromCache() null sein\r\n            var registeredHotkeys = windowReg.registeredHotkeysByKey[key];\r\n            var index = windowReg.getIndex(registryEntryValue);\r\n            if (index != -1) {\r\n                dwUtilsRemoveFromArrayByIndex(registeredHotkeys, index);\r\n                if (registeredHotkeys.length == 0) {\r\n                    windowReg.registeredHotkeysByKey[key] = null; // Entspricht dem Zustand bevor ein erster Eintrag hinzugefügt wurde\r\n                }\r\n            }\r\n        }\r\n    }\r\n    dwHotkeyRegistryLoadSettingsFromCache(\"thisWindowId\");\r\n};\r\n\r\nDwHotkeyRegistry.prototype.__internalAddHotkeyEntry = function(eventHandlerComponentId, controlId, hotkey) {\r\n    var registryEntryValue = new DwHotkeyRegistryEntry(eventHandlerComponentId, controlId, hotkey);\r\n    var registryEntryKey = registryEntryValue.getKey();\r\n\r\n    dwHotkeyRegistryStoreSettingsToCache(\"thisWindowId\");\r\n    var windowId;\r\n    for (windowId in dwHotkeyRegistryCacheByWindowId) {\r\n        var windowReg = dwHotkeyRegistryCacheByWindowId[windowId];\r\n        if (windowReg) { // kann durch dwHotkeyRegistryLoadSettingsFromCache() null sein\r\n            var currentRegisteredEntriesForKey = windowReg.registeredHotkeysByKey[registryEntryKey];\r\n            if (currentRegisteredEntriesForKey == null) {\r\n                // Noch keine Einträge. Liste erstellen\r\n                currentRegisteredEntriesForKey = new Array();\r\n                windowReg.registeredHotkeysByKey[registryEntryKey] = currentRegisteredEntriesForKey;\r\n            }\r\n            currentRegisteredEntriesForKey.push(registryEntryValue);\r\n        }\r\n    }\r\n    dwHotkeyRegistryLoadSettingsFromCache(\"thisWindowId\");\r\n};\r\n\r\nDwHotkeyRegistry.prototype.addRecursiveCallbackHotkeyEntry = function(eventHandlerComponentId, controlId, key, modifiers) {\r\n    var keycode = VIRTUAL_KEYCODES[\"KEY_\" + key.toUpperCase()];\r\n    var modifiersArray = dwUtilsSplit(modifiers, \"+\", false);\r\n    var hotkey = new DwRecursiveCallbackHotkey(keycode, modifiersArray);\r\n    this.__internalAddHotkeyEntry(eventHandlerComponentId, controlId, hotkey);\r\n};\r\nDwHotkeyRegistry.prototype.addExecuteClickHotkeyEntry = function(eventHandlerComponentId, controlId, key, modifiers) {\r\n    var keycode = VIRTUAL_KEYCODES[\"KEY_\" + key.toUpperCase()];\r\n    var modifiersArray = dwUtilsSplit(modifiers, \"+\", false);\r\n    var hotkey = new DwExecuteClickHotkey(keycode, modifiersArray);\r\n    this.__internalAddHotkeyEntry(eventHandlerComponentId, controlId, hotkey);\r\n};\r\nDwHotkeyRegistry.prototype.addMnemonicHotkeyEntry = function(eventHandlerComponentId, controlId, key, modifiers) {\r\n    var keycode = VIRTUAL_KEYCODES[\"KEY_\" + key.toUpperCase()];\r\n    var modifiersArray = dwUtilsSplit(modifiers, \"+\", false);\r\n    var hotkey = new DwMnemonicHotkey(keycode, modifiersArray);\r\n    this.__internalAddHotkeyEntry(eventHandlerComponentId, controlId, hotkey);\r\n};\r\nDwHotkeyRegistry.prototype.addNearestNeighbourHotkeyEntry = function(eventHandlerComponentId, controlId, key, modifiers) {\r\n    var keycode = VIRTUAL_KEYCODES[\"KEY_\" + key.toUpperCase()];\r\n    var modifiersArray = dwUtilsSplit(modifiers, \"+\", false);\r\n    var hotkey = new DwNearestNeighbourHotkey(keycode, modifiersArray);\r\n    this.__internalAddHotkeyEntry(eventHandlerComponentId, controlId, hotkey);\r\n};\r\n\r\nDwHotkeyRegistry.prototype.removeRecursiveCallbackHotkeyEntry = function(eventHandlerComponentId, controlId, key, modifiers) {\r\n    var keycode = VIRTUAL_KEYCODES[\"KEY_\" + key.toUpperCase()];\r\n    var modifiersArray = dwUtilsSplit(modifiers, \"+\", false);\r\n    var hotkey = new DwRecursiveCallbackHotkey(keycode, modifiersArray);\r\n    this.__internalRemoveHotkeyEntry(eventHandlerComponentId, controlId, hotkey);\r\n};\r\nDwHotkeyRegistry.prototype.removeExecuteClickHotkeyEntry = function(eventHandlerComponentId, controlId, key, modifiers) {\r\n    var keycode = VIRTUAL_KEYCODES[\"KEY_\" + key.toUpperCase()];\r\n    var modifiersArray = dwUtilsSplit(modifiers, \"+\", false);\r\n    var hotkey = new DwExecuteClickHotkey(keycode, modifiersArray);\r\n    this.__internalRemoveHotkeyEntry(eventHandlerComponentId, controlId, hotkey);\r\n};\r\nDwHotkeyRegistry.prototype.removeMnemonicHotkeyEntry = function(eventHandlerComponentId, controlId, key, modifiers) {\r\n    var keycode = VIRTUAL_KEYCODES[\"KEY_\" + key.toUpperCase()];\r\n    var modifiersArray = dwUtilsSplit(modifiers, \"+\", false);\r\n    var hotkey = new DwMnemonicHotkey(keycode, modifiersArray);\r\n    this.__internalRemoveHotkeyEntry(eventHandlerComponentId, controlId, hotkey);\r\n};\r\nDwHotkeyRegistry.prototype.removeNearestNeighbourHotkeyEntry = function(eventHandlerComponentId, controlId, key, modifiers) {\r\n    var keycode = VIRTUAL_KEYCODES[\"KEY_\" + key.toUpperCase()];\r\n    var modifiersArray = dwUtilsSplit(modifiers, \"+\", false);\r\n    var hotkey = new DwNearestNeighbourHotkey(keycode, modifiersArray);\r\n    this.__internalRemoveHotkeyEntry(eventHandlerComponentId, controlId, hotkey);\r\n};\r\n\r\nDwHotkeyRegistry.prototype.callHotkeyByKey = function(event) {\r\n    if (!event) {\r\n        event = window.event;\r\n    }\r\n    var srcControl = dwUtilsGetEventTarget(event);\r\n    var key = this.__internalCreateKeyFromEvent(event);\r\n    var registeredHotkeysForKey = this.registeredHotkeysByKey[key];\r\n    if (registeredHotkeysForKey == null) {\r\n        return false; // Keine Hotkeys für dieses Event registriert. Es muss nicht weiter gesucht werden\r\n    }\r\n    var control = srcControl;\r\n    var isExecuted = false;\r\n    var i = 0;\r\n    while (!isExecuted && (i < registeredHotkeysForKey.length)) {\r\n        var registeredHotkeyEntryForKey = registeredHotkeysForKey[i];\r\n        isExecuted = registeredHotkeyEntryForKey.doAction(event);\r\n        i++;\r\n    }\r\n    if (isExecuted) {\r\n        dwFrameworkPreventDefaultBehaviour(event);\r\n    }\r\n    return isExecuted;\r\n};\r\n\r\nfunction dwHotkeyRegistryStoreSettingsToCache(parentWindowId) {\r\n    dwHotkeyRegistryCacheByWindowId[parentWindowId] = dwHotkeyRegistryGetInstance();\r\n    dwHotkeyRegistry = new DwHotkeyRegistry();\r\n}\r\n\r\nfunction dwHotkeyRegistryLoadSettingsFromCache(parentWindowId) {\r\n    dwHotkeyRegistry = dwHotkeyRegistryCacheByWindowId[parentWindowId];\r\n    delete dwHotkeyRegistryCacheByWindowId[parentWindowId];\r\n}\r\n\r\nfunction dwHotkeyRegistryGetInstance() {\r\n    if (dwHotkeyRegistry == null) {\r\n        dwHotkeyRegistry = new DwHotkeyRegistry();\r\n    }\r\n    return dwHotkeyRegistry;\r\n}\n//\r\n// EXPERIMENTELLE IMPLEMENTIERUNG. DIENT ALS MAPPING VON JS KEY CODE ZU KONSTANTE.\r\n// EXPERIMENTELL DESWEGEN, WEIL ES AUF ANDEREN TASTATUREN ALS DEUTSCH EVLT. NICHT PASST\r\n//\r\nvar VIRTUAL_KEYCODES = {\r\n    MOUSE_LEFTBUTTON: 1,\r\n    MOUSE_RIGHTBUTTON: 2,\r\n    MOUSE_MIDDLEBUTTON: 4, // falls 3-Button-Mouse\r\n    KEY_CANCEL: 3, // Control-break Processing\r\n\r\n    KEY_BACK_SPACE: 8,\r\n    KEY_TAB: 9,\r\n    KEY_ENTER: 13,\r\n    KEY_SHIFT: 16,\r\n    KEY_CTRL: 17,\r\n    KEY_ALT: 18,\r\n    KEY_PAUSE: 19,\r\n    KEY_CAPSLOCK: 20,\r\n    KEY_ESC: 27,\r\n    KEY_SPACE: 32,\r\n    KEY_PAGE_UP: 33,\r\n    KEY_PAGE_DOWN: 34,\r\n    KEY_END: 35,\r\n    KEY_HOME: 36,\r\n    KEY_LEFT: 37,\r\n    KEY_UP: 38,\r\n    KEY_RIGHT: 39,\r\n    KEY_DOWN: 40,\r\n    KEY_INSERT: 45,\r\n    KEY_DELETE: 46,\r\n\r\n    KEY_0: 48,\r\n    KEY_1: 49,\r\n    KEY_2: 50,\r\n    KEY_3: 51,\r\n    KEY_4: 52,\r\n    KEY_5: 53,\r\n    KEY_6: 54,\r\n    KEY_7: 55,\r\n    KEY_8: 56,\r\n    KEY_9: 57,\r\n\r\n\r\n    KEY_A: 65,\r\n    KEY_B: 66,\r\n    KEY_C: 67,\r\n    KEY_D: 68,\r\n    KEY_E: 69,\r\n    KEY_F: 70,\r\n    KEY_G: 71,\r\n    KEY_H: 72,\r\n    KEY_I: 73,\r\n    KEY_J: 74,\r\n    KEY_K: 75,\r\n    KEY_L: 76,\r\n    KEY_M: 77,\r\n    KEY_N: 78,\r\n    KEY_O: 79,\r\n    KEY_P: 80,\r\n    KEY_Q: 81,\r\n    KEY_R: 82,\r\n    KEY_S: 83,\r\n    KEY_T: 84,\r\n    KEY_U: 85,\r\n    KEY_V: 86,\r\n    KEY_W: 87,\r\n    KEY_X: 88,\r\n    KEY_Y: 89,\r\n    KEY_Z: 90,\r\n\r\n    KEY_WINDOWS: 91,\r\n    KEY_NUMPAD_0: 96,\r\n    KEY_NUMPAD_1: 97,\r\n    KEY_NUMPAD_2: 98,\r\n    KEY_NUMPAD_3: 99,\r\n    KEY_NUMPAD_4: 100,\r\n    KEY_NUMPAD_5: 101,\r\n    KEY_NUMPAD_6: 102,\r\n    KEY_NUMPAD_7: 103,\r\n    KEY_NUMPAD_8: 104,\r\n    KEY_NUMPAD_9: 105,\r\n\r\n    KEY_NUMPAD_MULTIPLY: 106,\r\n    KEY_NUMPAD_PLUS: 107,\r\n    KEY_NUMPAD_MINUS: 109, // entspricht auch Binde-/Unterstrich\r\n    KEY_NUMPAD_POINT: 110,\r\n    KEY_NUMPAD_DIVIDE: 111,\r\n\r\n    KEY_F1: 112,\r\n    KEY_F2: 113,\r\n    KEY_F3: 114,\r\n    KEY_F4: 115,\r\n    KEY_F5: 116,\r\n    KEY_F6: 117,\r\n    KEY_F7: 118,\r\n    KEY_F8: 119,\r\n    KEY_F9: 120,\r\n    KEY_F10: 121,\r\n    KEY_F11: 122,\r\n    KEY_F12: 123,\r\n\r\n    KEY_NUMLOCK: 144,\r\n    KEY_SCROLLLOCK: 145,\r\n\r\n    // Zeichen Benennungen angelehnt an deutsches Standard-Tastatur-Layout\r\n    KEY_SIGNS_COMMA: 188,\r\n    KEY_SIGNS_POINT: 190,\r\n    KEY_SIGNS_HASH: 191,\r\n    KEY_SIGNS_UUML: 59,\r\n    KEY_SIGNS_OUML: 192,\r\n    KEY_SIGNS_AUML: 222,\r\n    KEY_SIGNS_LESSTHAN: 226,\r\n    KEY_SIGNS_APOSTROPHE: 221,\r\n    KEY_SIGNS_SZ: 219,\r\n    KEY_SIGNS_ZIRKUMFLEX: 220\r\n};\r\n\r\n//var LETTERS = new Array(VIRTUAL_KEYCODES.KEY_A, VIRTUAL_KEYCODES.KEY_B, VIRTUAL_KEYCODES.KEY_C, VIRTUAL_KEYCODES.KEY_D,\r\n//                        VIRTUAL_KEYCODES.KEY_E, VIRTUAL_KEYCODES.KEY_F, VIRTUAL_KEYCODES.KEY_G, VIRTUAL_KEYCODES.KEY_H,\r\n//                        VIRTUAL_KEYCODES.KEY_I, VIRTUAL_KEYCODES.KEY_J, VIRTUAL_KEYCODES.KEY_K, VIRTUAL_KEYCODES.KEY_L,\r\n//                        VIRTUAL_KEYCODES.KEY_M, VIRTUAL_KEYCODES.KEY_N, VIRTUAL_KEYCODES.KEY_O, VIRTUAL_KEYCODES.KEY_P,\r\n//                        VIRTUAL_KEYCODES.KEY_Q, VIRTUAL_KEYCODES.KEY_R, VIRTUAL_KEYCODES.KEY_S, VIRTUAL_KEYCODES.KEY_T,\r\n//                        VIRTUAL_KEYCODES.KEY_U, VIRTUAL_KEYCODES.KEY_V, VIRTUAL_KEYCODES.KEY_W, VIRTUAL_KEYCODES.KEY_X,\r\n//                        VIRTUAL_KEYCODES.KEY_Y, VIRTUAL_KEYCODES.KEY_Z);\r\n//\r\n//var NUMBERS = new Array(VIRTUAL_KEYCODES.KEY_0, VIRTUAL_KEYCODES.KEY_1, VIRTUAL_KEYCODES.KEY_2, VIRTUAL_KEYCODES.KEY_3,\r\n//                        VIRTUAL_KEYCODES.KEY_4, VIRTUAL_KEYCODES.KEY_5, VIRTUAL_KEYCODES.KEY_6, VIRTUAL_KEYCODES.KEY_7,\r\n//                        VIRTUAL_KEYCODES.KEY_8, VIRTUAL_KEYCODES.KEY_9);\r\n//var NUMBERS_NUMPAD = new Array (VIRTUAL_KEYCODES.KEY_NUMPAD_0, VIRTUAL_KEYCODES.KEY_NUMPAD_1, VIRTUAL_KEYCODES.KEY_NUMPAD_2,\r\n//                                VIRTUAL_KEYCODES.KEY_NUMPAD_3, VIRTUAL_KEYCODES.KEY_NUMPAD_4, VIRTUAL_KEYCODES.KEY_NUMPAD_5,\r\n//                                VIRTUAL_KEYCODES.KEY_NUMPAD_6, VIRTUAL_KEYCODES.KEY_NUMPAD_7, VIRTUAL_KEYCODES.KEY_NUMPAD_8,\r\n//                                VIRTUAL_KEYCODES.KEY_NUMPAD_9);\r\n//\r\n//var ALPHANUMERIC = LETTERS.concat(NUMBERS).concat(NUMBERS_NUMPAD);\r\n\r\nfunction dwKeyCodesKeyIsLetter(event) {\r\n    event = dwFrameworkGetEvent(event);\r\n    var keyCode = dwUtilsGetEventKeyCode(event);\r\n    return dwKeyCodesKeyCodeIsLetter(keyCode);\r\n}\r\n\r\nfunction dwKeyCodesKeyCodeIsLetter(keyCode) {\r\n    return ((keyCode >= VIRTUAL_KEYCODES.KEY_A) && (keyCode <= VIRTUAL_KEYCODES.KEY_Z));\r\n}\r\n\r\nfunction dwKeyCodesKeyIsNumber(event, includeNumpadNumbers) {\r\n    event = dwFrameworkGetEvent(event);\r\n    var keyCode = dwUtilsGetEventKeyCode(event);\r\n    return dwKeyCodesKeyCodeIsNumber(keyCode, includeNumpadNumbers);\r\n}\r\n\r\nfunction dwKeyCodesKeyCodeIsNumber(keyCode, includeNumpadNumbers) {\r\n    if ((keyCode >= VIRTUAL_KEYCODES.KEY_0) && (keyCode <= VIRTUAL_KEYCODES.KEY_9)) {\r\n        return true;\r\n    }\r\n    if (includeNumpadNumbers) {\r\n        if ((keyCode >= VIRTUAL_KEYCODES.KEY_NUMPAD_0) && (keyCode <= VIRTUAL_KEYCODES.KEY_NUMPAD_9)) {\r\n            return true;\r\n        }\r\n    }\r\n    return false;\r\n}\r\n\r\nfunction dwKeyCodesKeyIsValidForTypeahead(event) {\r\n    event = dwFrameworkGetEvent(event);\r\n    var keyCode = dwUtilsGetEventKeyCode(event);\r\n    return dwKeyCodesKeyCodeIsValidForTypeahead(keyCode);\r\n}\r\n\r\nfunction dwKeyCodesKeyCodeIsValidForTypeahead(keyCode) {\r\n    if (dwKeyCodesKeyCodeIsLetter(keyCode)) {\r\n        return true;\r\n    }\r\n\r\n    if (keyCode == VIRTUAL_KEYCODES.KEY_SPACE) {\r\n        return true;\r\n    }\r\n\r\n    if (dwKeyCodesKeyCodeIsNumber(keyCode, true)) {\r\n        return true;\r\n    }\r\n\r\n    var numPadSigns = new Array(VIRTUAL_KEYCODES.KEY_NUMPAD_MULTIPLY, VIRTUAL_KEYCODES.KEY_NUMPAD_PLUS,\r\n                                VIRTUAL_KEYCODES.KEY_NUMPAD_MINUS, VIRTUAL_KEYCODES.KEY_NUMPAD_POINT,\r\n                                VIRTUAL_KEYCODES.KEY_NUMPAD_DIVIDE);\r\n    if (dwUtilsIsInArray(numPadSigns, keyCode)) {\r\n        return true;\r\n    }\r\n\r\n    var otherInputSigns = new Array(VIRTUAL_KEYCODES.KEY_SIGNS_COMMA, VIRTUAL_KEYCODES.KEY_SIGNS_APOSTROPHE,\r\n                                    VIRTUAL_KEYCODES.KEY_SIGNS_HASH, VIRTUAL_KEYCODES.KEY_SIGNS_LESSTHAN, VIRTUAL_KEYCODES.KEY_SIGNS_POINT,\r\n                                    VIRTUAL_KEYCODES.KEY_SIGNS_ZIRKUMFLEX, VIRTUAL_KEYCODES.KEY_SIGNS_SZ, VIRTUAL_KEYCODES.KEY_SIGNS_AUML,\r\n                                    VIRTUAL_KEYCODES.KEY_SIGNS_OUML, VIRTUAL_KEYCODES.KEY_SIGNS_UUML);\r\n    if (dwUtilsIsInArray(otherInputSigns, keyCode)) {\r\n        return true;\r\n    }\r\n    return false;\r\n}\n/*\r\n * Copyright (c) 2024 Quanos Service Solutions GmbH\r\n */\r\nvar DWTOUCH_SLIDE_VALUE = 70;\r\nvar DWTOUCH_CLICK_TOLERANCE_VALUE = 30; // entspricht auch der minimalen Größe von Controls\r\n\r\nvar DWTOUCH_FINGERS = -1;\r\nvar DWTOUCH_START_X1 = -1;\r\nvar DWTOUCH_START_Y1 = -1;\r\nvar DWTOUCH_CURRENT_X1 = -1;\r\nvar DWTOUCH_CURRENT_Y1 = -1;\r\nvar DWTOUCH_CURRENT_SCREEN_X1 = -1;\r\nvar DWTOUCH_CURRENT_SCREEN_Y1 = -1;\r\nvar DWTOUCH_START_X2 = -1;\r\nvar DWTOUCH_START_Y2 = -1;\r\nvar DWTOUCH_CURRENT_X2 = -1;\r\nvar DWTOUCH_CURRENT_Y2 = -1;\r\nvar DWTOUCH_IMAGEVIEW = null;\r\nvar DWTOUCH_IMAGEVIEW_START_ZOOMLEVEL = -1;\r\nvar DWTOUCH_SCROLLPANE = null;\r\nvar DWTOUCH_SCROLLPANE_IS_IMAGE = false;\r\nvar DWTOUCH_SCROLLPANE_NATIVE = false;\r\nvar DWTOUCH_START_SCROLL_X = -1;\r\nvar DWTOUCH_START_SCROLL_Y = -1;\r\nvar DWTOUCH_START_SCROLL_DATE = null;\r\n\r\nvar DWTOUCH_SLIDE_DIRECTION_NORTH = \"N\";\r\nvar DWTOUCH_SLIDE_DIRECTION_EAST = \"E\";\r\nvar DWTOUCH_SLIDE_DIRECTION_SOUTH = \"S\";\r\nvar DWTOUCH_SLIDE_DIRECTION_WEST = \"W\";\r\nvar DWTOUCH_SLIDE_DIRECTION_NORTHWEST = \"NW\";\r\nvar DWTOUCH_SLIDE_DIRECTION_NORTHEAST = \"NE\";\r\nvar DWTOUCH_SLIDE_DIRECTION_SOUTHWEST = \"SW\";\r\nvar DWTOUCH_SLIDE_DIRECTION_SOUTHEAST = \"SE\";\r\n\r\nvar DWTOUCH_HANDLER_MOVE_EVENT = null;\r\n\r\nvar DWTOUCH_LONG_PRESS_START_TIME = 0;\r\nvar DWTOUCH_LAST_TOUCH_TIME = 0;\r\nvar DWTOUCH_LAST_TOUCH_TARGET = null;\r\nvar DWTOUCH_TOUCH_TARGET = null;\r\nvar DWTOUCH_TOUCHED_ID = null;\r\nvar DWTOUCH_TOUCH_MOVED = false;\r\n\r\nvar DWTOUCH_TOUCH_EMULATION_CENTER_CLIENT_X = null;\r\nvar DWTOUCH_TOUCH_EMULATION_CENTER_CLIENT_Y = null;\r\nvar DWTOUCH_TOUCHING = false;\r\n\r\nvar DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_1_EVENT = null;\r\nvar DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_2_EVENT = null;\r\n\r\nfunction dwTouchRegisterWindowForTouchMove(windowId) {\r\n    DWTOUCH_HANDLER_MOVE_EVENT = windowId;\r\n}\r\n\r\nfunction dwTouchRemoveSelection(e) {\r\n    // Selektion nicht entfernen, wenn es sich um ein Input-Control (speziell Textfeld) oder TextArea-Control handelt\r\n    if (!dwUtilsIsClickOnTagType(e, \"input\") && !dwUtilsIsClickOnTagType(e, \"textarea\")) {\r\n        window.getSelection().removeAllRanges();\r\n    }\r\n}\r\n\r\nfunction dwTouchRegisterTouchFunctionsInBrowser() {\r\n    // Eventlistener benötigen die Option \"passive:false\".\r\n    // https://developer.mozilla.org/de/docs/Web/API/EventTarget/addEventListener\r\n    // iOS (getestet in iOS 11.x) ignoriert andernfalls die Versuche via event.preventDefault die Standardverarbeitung\r\n    // durch den Browser zu unterbinden (resultiert in page pinch zooms und ggf. Abstürzen des Safari Browsers)\r\n    try {\r\n        var body = $(\"body\");\r\n        body.addEventListener('touchstart', function(e) {\r\n            DWTOUCH_TOUCHING = true;\r\n            try {\r\n                dwTouchStart(e);\r\n            } finally {\r\n                DWTOUCH_TOUCHING = false;\r\n            }\r\n\r\n        }, {passive: false});\r\n        body.addEventListener('touchmove', function(e) {\r\n            DWTOUCH_TOUCHING = true;\r\n            try {\r\n                dwTouchMove(e);\r\n            } finally {\r\n                DWTOUCH_TOUCHING = false;\r\n            }\r\n        }, {passive: false});\r\n        body.addEventListener('touchend', function(e) {\r\n            DWTOUCH_TOUCHING = true;\r\n            try {\r\n                dwTouchEnd(e);\r\n            } finally {\r\n                DWTOUCH_TOUCHING = false;\r\n            }\r\n        }, {passive: false});\r\n\r\n        body.addEventListener(\"selectstart\", function(e) {\r\n            e.preventDefault();\r\n            return false;\r\n        }, false);\r\n\r\n        // für normale MouseEvents registrieren, um deren Standardverhalten zu unterdrücken:\r\n        // - unter iOS und Android für MouseEvents direkt vom Browser (mit dwTouch == false) das EventBubbling abschalten\r\n        // - ansonsten die MouseEvents unterdrücken; außerdem evtl. Selektionen sofort wieder aufheben\r\n        if (framework_isiOS || framework_isAndroid || framework_isFirefox || framework_isChrome) {\r\n\r\n        } else {\r\n            body.addEventListener('mousedown', function(e) {\r\n                dwTouchRemoveSelection(e);\r\n                dwTouchPreventDefaultForEmulatedTouchEvent(e);\r\n            }, true);\r\n            body.addEventListener('mousemove', function(e) {\r\n                dwTouchRemoveSelection(e);\r\n                dwTouchPreventDefaultForEmulatedTouchEvent(e);\r\n            }, true);\r\n            body.addEventListener('mouseup', function(e) {\r\n                dwTouchRemoveSelection(e);\r\n                dwTouchPreventDefaultForEmulatedTouchEvent(e);\r\n            }, true);\r\n            body.addEventListener('click', function(e) {\r\n                dwTouchRemoveSelection(e);\r\n                dwTouchPreventDefaultForEmulatedTouchEvent(e);\r\n            }, true);\r\n            body.addEventListener('dblclick', function(e) {\r\n                dwTouchRemoveSelection(e);\r\n                dwTouchPreventDefaultForEmulatedTouchEvent(e);\r\n            }, true);\r\n        }\r\n    } catch (exception) {\r\n        // IE7 kann das z.B. nicht. Auch im alten Firefox 5.0.1 kommt ein Fehler\r\n    }\r\n}\r\n\r\nfunction dwTouchEnableTouchEmulation() {\r\n    try {\r\n        // für normale MouseEvents registrieren, um in Desktop-Browsern TouchEvents zu emulieren\r\n        var body = $(\"body\");\r\n        body.addEventListener('click', function(e) {\r\n            dwTouchEmulateTouchEvent(e);\r\n        });\r\n        body.addEventListener('dblclick', function(e) {\r\n            dwTouchEmulateTouchEvent(e);\r\n        });\r\n\r\n        // außerdem evtl. Selektionen sofort wieder aufheben\r\n        if (!framework_isPointerBrowser && !framework_isMSPointerBrowser) { // für alle Browser, die KEINE (MS)PointerEvents unterstützen\r\n            body.addEventListener('mousedown', function(e) {\r\n                if (e.button !== 2) {\r\n                    dwTouchRemoveSelection(e);\r\n                }\r\n                dwTouchEmulateTouchEvent(e);\r\n            });\r\n            body.addEventListener('mousemove', function(e) {\r\n                if (e.button !== 2) {\r\n                    dwTouchRemoveSelection(e);\r\n                }\r\n                dwTouchEmulateTouchEvent(e);\r\n            });\r\n            body.addEventListener('mouseup', function(e) {\r\n                if (e.button !== 2) {\r\n                    dwTouchRemoveSelection(e);\r\n                }\r\n                dwTouchEmulateTouchEvent(e);\r\n            });\r\n        } else { // für MSPointerEvents registrieren, um diese in standardisierte MultiTouchEvents umzuwandeln\r\n            // auch für normale MouseEvents registrieren, um diese generell zu unterdrücken\r\n            body.addEventListener('mousedown', function(e) {\r\n                dwTouchRemoveSelection(e);\r\n                dwTouchPreventDefaultForEmulatedTouchEvent(e);\r\n            });\r\n            body.addEventListener('mousemove', function(e) {\r\n                dwTouchRemoveSelection(e);\r\n                dwTouchPreventDefaultForEmulatedTouchEvent(e);\r\n            });\r\n            body.addEventListener('mouseup', function(e) {\r\n                dwTouchRemoveSelection(e);\r\n                dwTouchPreventDefaultForEmulatedTouchEvent(e);\r\n            });\r\n\r\n            // es werden maximal 2 Finger gleichzeitig unterstützt\r\n            body.addEventListener(framework_isPointerBrowser ? 'pointerdown' : 'MSPointerDown', function(e) {\r\n                if (e.button !== 2) {\r\n                    dwTouchRemoveSelection(e);\r\n                }\r\n                dwTouchEmulateTouchEventForMSPointerEvent(e);\r\n            });\r\n            body.addEventListener(framework_isPointerBrowser ? 'pointermove' : 'MSPointerMove', function(e) {\r\n                if (e.button !== 2) {\r\n                    dwTouchRemoveSelection(e);\r\n                }\r\n                dwTouchEmulateTouchEventForMSPointerEvent(e);\r\n            });\r\n            body.addEventListener(framework_isPointerBrowser ? 'pointerup' : 'MSPointerUp', function(e) {\r\n                if (e.button !== 2) {\r\n                    dwTouchRemoveSelection(e);\r\n                }\r\n                dwTouchEmulateTouchEventForMSPointerEvent(e);\r\n            });\r\n        }\r\n\r\n        DWTOUCH_TOUCH_EMULATION_ENABLED = true;\r\n    } catch (exception) {\r\n        // IE7 kann das z.B. nicht. Auch im alten Firefox 5.0.1 kommt ein Fehler\r\n    }\r\n}\r\n\r\nfunction dwTouchEmulateTouchEvent(e) {\r\n    if (DWTOUCH_TOUCHING) { // echter bzw. emulierter TouchEvent wird bereits ausgeführt\r\n        return;\r\n    }\r\n\r\n    if (dwUtilsIsInputTextBox(dwUtilsGetEventTarget(e))) {\r\n        // Auf Inputcontrols keine eigenen Touchfunktionen ausführen\r\n        return;\r\n    }\r\n\r\n\r\n    // dwTouchPreventDefaultForEmulatedTouchEvent() ist wichtig, da ansonsten z.B. Maus-Klicks doppelt bzw. ungewollt ausgeführt werden würden\r\n    DWTOUCH_TOUCHING = true;\r\n    try {\r\n        if (e.type == 'mousedown') {\r\n            // Bei Klick auf Scrollbar nichts tun\r\n            if (dwUtilsIsClickOnScrollBar(e)) {\r\n                return;\r\n            }\r\n            if (dwTouchPreventDefaultForEmulatedTouchEvent(e)) {\r\n                DWTOUCH_TOUCH_TARGET = e.target;\r\n                dwTouchStart(dwTouchCreateEmulatedTouchEvent(e, 'touchstart'));\r\n            }\r\n        } else if (e.type == 'mousemove') {\r\n            if (DWTOUCH_FINGERS > 0) { // entspricht einem echten Touch (= MouseDrag)\r\n                if (dwTouchPreventDefaultForEmulatedTouchEvent(e)) {\r\n                    dwTouchMove(dwTouchCreateEmulatedTouchEvent(e, 'touchmove'));\r\n                }\r\n            }\r\n        } else if (e.type == 'mouseup') {\r\n            if (dwTouchPreventDefaultForEmulatedTouchEvent(e)) {\r\n                if (DWTOUCH_FINGERS > 0) {\r\n                    dwTouchEnd(dwTouchCreateEmulatedTouchEvent(e, 'touchend'));\r\n                }\r\n            }\r\n        } else if (e.type == 'click') {\r\n            dwTouchPreventDefaultForEmulatedTouchEvent(e);\r\n        } else if (e.type == 'dblclick') {\r\n            dwTouchPreventDefaultForEmulatedTouchEvent(e);\r\n        }\r\n    } finally {\r\n        DWTOUCH_TOUCHING = false;\r\n    }\r\n}\r\n\r\nfunction dwTouchEmulateTouchEventForMSPointerEvent(e) {\r\n    if (DWTOUCH_TOUCHING) { // echter bzw. emulierter TouchEvent wird bereits ausgeführt\r\n        return;\r\n    }\r\n\r\n    if (dwUtilsIsInputTextBox(dwUtilsGetEventTarget(e))) {\r\n        // Auf Inputcontrols keine eigenen Touchfunktionen ausführen\r\n        return;\r\n    }\r\n\r\n\r\n    if (dwUtilsIsClickOnScrollBar(e)) {\r\n        return;\r\n    }\r\n\r\n    // dwTouchPreventDefaultForEmulatedTouchEvent() ist wichtig, da ansonsten z.B. Maus-Klicks doppelt bzw. ungewollt ausgeführt werden würden\r\n    DWTOUCH_TOUCHING = true;\r\n    try {\r\n        if ((e.type == 'MSPointerDown') || (e.type == 'pointerdown')) {\r\n            DWTOUCH_FINGERS = -1;\r\n            if (dwTouchPreventDefaultForEmulatedTouchEvent(e)) {\r\n                // Event für den Finger merken (Event für 2. Finger nur dann, wenn das gleiche Target getroffen wurde)\r\n                if (DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_1_EVENT == null) {\r\n                    DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_1_EVENT = e;\r\n                } else if ((DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_2_EVENT == null)\r\n                           && (DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_1_EVENT.target == e.target)) {\r\n                    DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_2_EVENT = e;\r\n                } else {\r\n                    // es werden maximal 2 Finger gleichzeitig unterstützt\r\n                    if (DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_1_EVENT != null) {\r\n                        dwTouchFireMouseEventForTouchEvent(dwTouchCreateEmulatedMultiTouchEvent(DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_1_EVENT, null, 'touchend', e.button), 'mouseup');\r\n                        DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_1_EVENT = null;\r\n                    }\r\n                    if (DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_2_EVENT != null) {\r\n                        dwTouchFireMouseEventForTouchEvent(dwTouchCreateEmulatedMultiTouchEvent(DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_2_EVENT, null, 'touchend', e.button), 'mouseup');\r\n                        DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_2_EVENT = null;\r\n                    }\r\n                    return;\r\n                }\r\n                DWTOUCH_TOUCH_TARGET = e.target;\r\n                dwTouchStart(dwTouchCreateEmulatedMultiTouchEvent(DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_1_EVENT,\r\n                                                                  DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_2_EVENT,\r\n                                                                  'touchstart', e.button));\r\n            }\r\n        } else if ((e.type == 'MSPointerMove') || (e.type == 'pointermove')) {\r\n            if (DWTOUCH_FINGERS > 0) { // entspricht einem echten Touch (= MouseDrag)\r\n                // passenden Finger aufgrund der pointerId des Events herausfinden\r\n                if ((DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_1_EVENT != null)\r\n                    && (DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_1_EVENT.pointerId == e.pointerId)) {\r\n                    DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_1_EVENT = e;\r\n                } else if ((DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_2_EVENT != null)\r\n                           && (DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_2_EVENT.pointerId == e.pointerId)) {\r\n                    DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_2_EVENT = e;\r\n                } else {\r\n                    // kein Event mit passender pointerId gefunden (es werden maximal 2 Finger gleichzeitig unterstützt)\r\n                    // Reset der Events für die beiden Finger, da dieser Zustand nicht unterstützt wird\r\n                    dwTouchPreventDefaultForEmulatedTouchEvent(e);\r\n                    DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_1_EVENT = null;\r\n                    DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_2_EVENT = null;\r\n                    return;\r\n                }\r\n\r\n                if (dwTouchPreventDefaultForEmulatedTouchEvent(e)) {\r\n                    dwTouchMove(dwTouchCreateEmulatedMultiTouchEvent(DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_1_EVENT,\r\n                                                                     DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_2_EVENT,\r\n                                                                     'touchmove', e.button));\r\n                }\r\n            } else {\r\n                // Reset der Events für die beiden Finger, da dieser Zustand nicht unterstützt wird\r\n                DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_1_EVENT = null;\r\n                DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_2_EVENT = null;\r\n            }\r\n        } else if ((e.type == 'MSPointerUp') || (e.type == 'pointerup')) {\r\n            if (DWTOUCH_FINGERS > 0) {\r\n                if (!dwTouchPreventDefaultForEmulatedTouchEvent(e)) {\r\n                    return;\r\n                }\r\n\r\n                // den Event vom losgelassenen Finger entfernen (über die pointerId des Events)\r\n                var fingerEventFound = false;\r\n                if ((DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_2_EVENT != null)\r\n                    && (DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_2_EVENT.pointerId == e.pointerId)) {\r\n                    dwTouchEnd(dwTouchCreateEmulatedMultiTouchEvent(DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_2_EVENT, null, 'touchend', e.button));\r\n                    DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_2_EVENT = null;\r\n                    fingerEventFound = true;\r\n                }\r\n                if ((DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_1_EVENT != null)\r\n                    && (DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_1_EVENT.pointerId == e.pointerId)) {\r\n                    // den Event von Finger 2 zum von Event Finger 1 machen falls der Finger 1 zuerst losgelassen wird\r\n                    dwTouchEnd(dwTouchCreateEmulatedMultiTouchEvent(DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_1_EVENT, null, 'touchend', e.button));\r\n                    DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_1_EVENT = DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_2_EVENT;\r\n                    fingerEventFound = true;\r\n                }\r\n\r\n                if (!fingerEventFound) {\r\n                    // kein Event mit passender pointerId gefunden (es werden maximal 2 Finger gleichzeitig unterstützt)\r\n                    // Reset der Events für die beiden Finger, da dieser Zustand nicht unterstützt wird\r\n                    DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_1_EVENT = null;\r\n                    DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_2_EVENT = null;\r\n                    return;\r\n                }\r\n\r\n                // DWTOUCH_FINGERS korrigieren, falls noch ein Finger (und somit dazugehöriger Event) gedrückt ist\r\n                if (DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_1_EVENT != null) {\r\n                    DWTOUCH_FINGERS = 1;\r\n                }\r\n            } else {\r\n                // Reset der Events für die beiden Finger, da dieser Zustand nicht unterstützt wird\r\n                DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_1_EVENT = null;\r\n                DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_2_EVENT = null;\r\n            }\r\n        }\r\n    } finally {\r\n        DWTOUCH_TOUCHING = false;\r\n    }\r\n}\r\n\r\nfunction dwTouchPreventDefaultForEmulatedTouchEvent(e) {\r\n    if (dwUtilsIsInputTextBox(dwUtilsGetEventTarget(e))) {\r\n        // Auf Inputcontrols keine eigenen Touchfunktionen ausführen\r\n        return false;\r\n    }\r\n\r\n    // TouchEvents nur für Controls ohne eigene Mausinteraktionen emulieren, da sonst deren Eigenverhalten verändert wird\r\n    if (dwTouchFindTargetForTouchEmulation(e.target) != null) {\r\n        dwFrameworkPreventDefaultBehaviour(e);\r\n        return true;\r\n    } else {\r\n        return false;\r\n    }\r\n}\r\n\r\nfunction dwTouchFindTargetForTouchEmulation(target) {\r\n    // Gehe im DOM nach oben bis ein gültiges Target (mit CSS-Klassennamen, kein Layout-Tag, touchemulation == true)\r\n    // für die Touch-Emulation gefunden wird\r\n    try {\r\n        while ((target != null)\r\n               && ((target.className == null) || (target.className == '') || (target.className == 'modern_scrollpane_design_thin')\r\n                   || dwUtilsStringStartsWith(target.className, 'guilayout', false))) {\r\n            target = target.parentNode;\r\n        }\r\n    } catch (exception) {\r\n        return null;\r\n    }\r\n    if ((target != null) && (dwDomGetDomAttribute(target, \"touchemulation\") == \"true\")) {\r\n        return target;\r\n    } else {\r\n        return null;\r\n    }\r\n}\r\n\r\nfunction dwTouchCreateEmulatedTouchEvent(e, type) {\r\n    return dwTouchCreateEmulatedMultiTouchEvent(e, null, type, e.button);\r\n}\r\n\r\nfunction dwTouchCreateEmulatedMultiTouchEvent(e, e2, type, button) {\r\n    // simples Object und kein echtes Event-Objekt (bzw. weiter unten Touch-Objekt) verwenden, da echte TouchEvents von\r\n    // Desktop-Browsern nicht erzeugt werden können und später auch nur die entsprechenden Attribute ausgelesen werden können müssen\r\n    var touchEvent = new Object();\r\n    touchEvent.type = type;\r\n    touchEvent.target = DWTOUCH_TOUCH_TARGET;\r\n    touchEvent.srcElement = DWTOUCH_TOUCH_TARGET;\r\n    touchEvent.view = e.view;\r\n    touchEvent.ctrlKey = e.ctrlKey;\r\n    touchEvent.altKey = e.altKey;\r\n    touchEvent.shiftKey = e.shiftKey;\r\n    touchEvent.metaKey = e.metaKey;\r\n    touchEvent.button = button;\r\n\r\n    // ALT ist gedrückt für \"zweiten Finger\" (funktioniert nur für Zoom, nicht für Pinch)\r\n    if ((e.altKey) && (e2 == null)) {\r\n        if (DWTOUCH_TOUCH_EMULATION_CENTER_CLIENT_X == null) {\r\n            DWTOUCH_TOUCH_EMULATION_CENTER_CLIENT_X = e.clientX;\r\n            DWTOUCH_TOUCH_EMULATION_CENTER_CLIENT_Y = e.clientY;\r\n        }\r\n    } else {\r\n        DWTOUCH_TOUCH_EMULATION_CENTER_CLIENT_X = null;\r\n        DWTOUCH_TOUCH_EMULATION_CENTER_CLIENT_Y = null;\r\n    }\r\n\r\n    // einen bzw. zwei Touches mit DWTOUCH_TOUCH_EMULATION_CENTER_CLIENT_X/Y als Zentrum erzeugen\r\n    if (DWTOUCH_TOUCH_EMULATION_CENTER_CLIENT_X == null) {\r\n        touchEvent.targetTouches = new Array((e2 != null) ? 2 : 1);\r\n        touchEvent.targetTouches[0] = new Object();\r\n        touchEvent.targetTouches[0].clientX = e.clientX;\r\n        touchEvent.targetTouches[0].clientY = e.clientY;\r\n        touchEvent.targetTouches[0].pageX = e.pageX;\r\n        touchEvent.targetTouches[0].pageY = e.pageY;\r\n        touchEvent.targetTouches[0].screenX = e.screenX;\r\n        touchEvent.targetTouches[0].screenY = e.screenY;\r\n        touchEvent.targetTouches[0].target = DWTOUCH_TOUCH_TARGET;\r\n        if (e2 != null) {\r\n            touchEvent.targetTouches[1] = new Object();\r\n            touchEvent.targetTouches[1].clientX = e2.clientX;\r\n            touchEvent.targetTouches[1].clientY = e2.clientY;\r\n            touchEvent.targetTouches[1].pageX = e2.pageX;\r\n            touchEvent.targetTouches[1].pageY = e2.pageY;\r\n            touchEvent.targetTouches[1].screenX = e2.screenX;\r\n            touchEvent.targetTouches[1].screenY = e2.screenY;\r\n            touchEvent.targetTouches[1].target = DWTOUCH_TOUCH_TARGET;\r\n        }\r\n    } else {\r\n        touchEvent.targetTouches = new Array(2);\r\n        touchEvent.targetTouches[0] = new Object();\r\n        touchEvent.targetTouches[0].clientX = e.clientX;\r\n        touchEvent.targetTouches[0].clientY = e.clientY;\r\n        touchEvent.targetTouches[0].pageX = e.pageX;\r\n        touchEvent.targetTouches[0].pageY = e.pageY;\r\n        touchEvent.targetTouches[0].screenX = e.screenX;\r\n        touchEvent.targetTouches[0].screenY = e.screenY;\r\n        touchEvent.targetTouches[0].target = DWTOUCH_TOUCH_TARGET;\r\n\r\n        var deltaX = 2 * (e.clientX - DWTOUCH_TOUCH_EMULATION_CENTER_CLIENT_X);\r\n        var deltaY = 2 * (e.clientY - DWTOUCH_TOUCH_EMULATION_CENTER_CLIENT_Y);\r\n        touchEvent.targetTouches[1] = new Object();\r\n        touchEvent.targetTouches[1].clientX = e.clientX - deltaX;\r\n        touchEvent.targetTouches[1].clientY = e.clientY - deltaY;\r\n        touchEvent.targetTouches[1].pageX = e.pageX - deltaX;\r\n        touchEvent.targetTouches[1].pageY = e.pageY - deltaY;\r\n        touchEvent.targetTouches[1].screenX = e.screenX - deltaX;\r\n        touchEvent.targetTouches[1].screenY = e.screenY - deltaY;\r\n        touchEvent.targetTouches[1].target = DWTOUCH_TOUCH_TARGET;\r\n    }\r\n    return touchEvent;\r\n}\r\n\r\nfunction dwTouchFireMouseEventForTouchEvent(touchEvent, mouseEventType) {\r\n    var numMouseClicks = mouseEventType == \"dblclick\" ? 2 : 1;\r\n    var target = null;\r\n    var mouseEvent = document.createEvent(\"MouseEvents\");\r\n    if ((touchEvent.targetTouches != null) && (touchEvent.targetTouches.length > 0)) {\r\n        mouseEvent.initMouseEvent(mouseEventType, true, true, touchEvent.view, numMouseClicks,\r\n                                  touchEvent.targetTouches[0].screenX, touchEvent.targetTouches[0].screenY,\r\n                                  touchEvent.targetTouches[0].clientX, touchEvent.targetTouches[0].clientY,\r\n                                  touchEvent.ctrlKey, touchEvent.altKey, touchEvent.shiftKey, touchEvent.metaKey, touchEvent.button,\r\n                                  touchEvent.targetTouches[0].target);\r\n        mouseEvent.pageX = touchEvent.targetTouches[0].pageX;\r\n        mouseEvent.pageY = touchEvent.targetTouches[0].pageY;\r\n        target = touchEvent.targetTouches[0].target;\r\n    } else { // z.B. notwendig für touchend\r\n        // Beim TouchEnd wird kein Touchpunkt übergeben, deshalb nehme den, der sich aus touchStart und touchMove ergibt\r\n        // ScreenX/Y wird nicht ausgewertet wird aber übergeben, damit die Werte halbwegs stimmig sind und nicht in der JS-Implementierung ein Bereichcheck\r\n        // fehlschlägt. Im FireFox könnte auch 0 verwendet werden, aber man weiß nicht, ob andere Browser das vertragen\r\n        mouseEvent.initMouseEvent(mouseEventType, true, true, touchEvent.view, numMouseClicks, DWTOUCH_CURRENT_SCREEN_X1, DWTOUCH_CURRENT_SCREEN_Y1, DWTOUCH_CURRENT_X1, DWTOUCH_CURRENT_Y1,\r\n                                  touchEvent.ctrlKey, touchEvent.altKey, touchEvent.shiftKey, touchEvent.metaKey, touchEvent.button,\r\n                                  touchEvent.target);\r\n\r\n        // Die Zuweisung bewirkt im Firefox nichts. Bin nicht sicher, ob man die braucht\r\n        // mouseEvent.pageX scheint readonly zu sein\r\n        mouseEvent.pageX = DWTOUCH_CURRENT_X1;\r\n        mouseEvent.pageY = DWTOUCH_CURRENT_Y1;\r\n        target = touchEvent.target;\r\n    }\r\n\r\n    // Wenn das Event nicht zum Server weitergeleitet werden soll, muss man das Attribut hier übernehmen\r\n    if (touchEvent.skipServer) {\r\n        mouseEvent.skipServer = true;\r\n    }\r\n\r\n    var relTargetCoords = dwUtilsGetRelMouseCoords(mouseEvent, target);\r\n    mouseEvent.offsetX = relTargetCoords.x;\r\n    mouseEvent.offsetY = relTargetCoords.y;\r\n    mouseEvent.dwTouch = true;\r\n    target.dispatchEvent(mouseEvent);\r\n    dwTouchRemoveSelection(touchEvent);\r\n\r\n    // bei mousemove ohne gefundene ScrollPane (innerhalb eines Elements, welches auf mousemove reagiert) des Standardverhalten\r\n    // deaktivieren, weil ansonsten eine evtl. umschließende ScrollPane durch den Browser gescrollt werden würde\r\n    if ((mouseEventType == \"mousemove\") && (DWTOUCH_SCROLLPANE == null) && touchEvent.preventDefault) {\r\n        touchEvent.preventDefault();\r\n    }\r\n}\r\n\r\nfunction dwTouchStart(e) {\r\n    var eventTarget = dwUtilsGetEventTarget(e);\r\n    if (dwUtilsIsInputTextBox(eventTarget)) {\r\n        // Auf Inputcontrols und auch Textareas keine eigenen Touchfunktionen ausführen\r\n        return;\r\n    }\r\n    if (dwFrameworkShowDevelopmentMessages()) {\r\n        dwFrameworkShowHint(\"TOUCH_START\", \"touchStart with \" + e.targetTouches.length + \" finger\" + ((e.targetTouches.length > 1) ? \"s\" : \"\"),\r\n                            \"#ccccff\", \"#000000\");\r\n        dwFrameworkShowHint(\"TOUCH_MOVE\", \"touchMove N/A\", \"#ccccff\", \"#000000\");\r\n        dwFrameworkShowHint(\"TOUCH_END\", \"touchEnd N/A\", \"#ccccff\", \"#000000\");\r\n    }\r\n    if (framework_isiOS) {\r\n        // iOS 11.x hat Stabilitätsprobleme bei Page-Zoom Operationen (Pinch Zoom).\r\n        // https://bugs.webkit.org/show_bug.cgi?id=172206\r\n        // Sicherheitshalber werden ALLE Aktionen abgebrochen, auch das schöne smoothe Scrolling in der Stückliste\r\n        // wird händisch über JS Code durchgeführt ... (für iOS)\r\n        // Natürlich gibt es für jede Regel eine Ausnahme (Bei Eingabecontrols reagiert Safari leider nicht mehr wenn wir das Default Verhalten abschalten, ...)\r\n        dwTouchPreventDefaultBehaviourIfRequired(e);\r\n    }\r\n    if (e.targetTouches.length > 0) {\r\n        if ((DWTOUCH_TOUCHED_ID != null) && ($(DWTOUCH_TOUCHED_ID) != null)) { // notwendig, wenn ein weiterer Finger dazukommt und ein weiteres dwTouchStart() auslöst\r\n            if (typeof (dwAjaxDefaultOnMouseUp) != \"undefined\") {\r\n                dwAjaxDefaultOnMouseUp(e, DWTOUCH_TOUCHED_ID, DWTOUCH_TOUCHED_ID, \"\", true);\r\n            }\r\n        }\r\n        DWTOUCH_LONG_PRESS_START_TIME = new Date().getTime();\r\n        DWTOUCH_FINGERS = 1;\r\n        DWTOUCH_TOUCH_TARGET = e.target;\r\n        DWTOUCH_START_X1 = e.targetTouches[0].clientX;\r\n        DWTOUCH_START_Y1 = e.targetTouches[0].clientY;\r\n        DWTOUCH_CURRENT_X1 = DWTOUCH_START_X1;\r\n        DWTOUCH_CURRENT_Y1 = DWTOUCH_START_Y1;\r\n        DWTOUCH_CURRENT_SCREEN_X1 = e.targetTouches[0].screenX;\r\n        DWTOUCH_CURRENT_SCREEN_Y1 = e.targetTouches[0].screenY;\r\n        DWTOUCH_SCROLLPANE = dwTouchFindScrollPane(e);\r\n        DWTOUCH_SCROLLPANE_NATIVE = false;\r\n        if (DWTOUCH_SCROLLPANE != null) {\r\n            // natives Scrolling auf mobilen Browsern, die diese Funktion unterstützen (der Android System-Browser ab\r\n            // Androis 4.0 liefert leider nicht 'touch' zurück, unterstützt das native Scrolling aber ebenfalls)\r\n            // Safari liefert der Android Browser anscheinend mit, damit die Webseiten, die hart auf IPhone programmiert sind,\r\n            // funktionieren\r\n            DWTOUCH_SCROLLPANE_NATIVE = (dwUtilsGetStyle(DWTOUCH_SCROLLPANE, \"-webkit-overflow-scrolling\") == \"touch\") ||\r\n                                        (framework_isAndroid && framework_isSafari && (framework_mobileOSVersion >= 4.0));\r\n            // Vermeiden der Scroll/Pinch Funktionen durch den Safari Browser (iOS) aufgrund Stabiltätsprobleme / Zoom Probleme\r\n            DWTOUCH_SCROLLPANE_NATIVE = false;\r\n\r\n            DWTOUCH_START_SCROLL_DATE = new Date();\r\n            DWTOUCH_START_SCROLL_X = DWTOUCH_SCROLLPANE.scrollLeft;\r\n            DWTOUCH_START_SCROLL_Y = DWTOUCH_SCROLLPANE.scrollTop;\r\n            e.target.style.webkitTapHighlightColor = \"rgba(0,0,0,0)\";\r\n        }\r\n        if (e.targetTouches.length > 1) {\r\n            if (framework_isiOS) {\r\n                // Bei Pinch Gesten (egal auf welchem Control) wird die Event Weitergabe an den Browser unterbunden -\r\n                // Ursache siehe Beginn der Methode ...\r\n                dwFrameworkPreventDefaultBehaviour(e);\r\n            }\r\n            DWTOUCH_FINGERS = 2;\r\n            DWTOUCH_START_X2 = e.targetTouches[1].clientX;\r\n            DWTOUCH_START_Y2 = e.targetTouches[1].clientY;\r\n            DWTOUCH_CURRENT_X2 = DWTOUCH_START_X2;\r\n            DWTOUCH_CURRENT_Y2 = DWTOUCH_START_Y2;\r\n            DWTOUCH_IMAGEVIEW = dwTouchFindImageViewer(e);\r\n            if (DWTOUCH_IMAGEVIEW != null) {\r\n                DWTOUCH_IMAGEVIEW_START_ZOOMLEVEL = dwImageViewerGetImage(DWTOUCH_IMAGEVIEW.id).dwCurrentZoomLevel;\r\n            }\r\n        } else {\r\n            // genau 1 Finger\r\n            DWTOUCH_TOUCHED_ID = dwTouchFindTargetId(e);\r\n            dwTouchFireMouseEventForTouchEvent(e, \"mousedown\");\r\n        }\r\n    }\r\n}\r\n\r\nfunction dwTouchMove(e) {\r\n    if (dwUtilsIsInputTextBox(dwUtilsGetEventTarget(e))) {\r\n        // Auf Inputcontrols keine eigenen Touchfunktionen ausführen\r\n        return;\r\n    }\r\n\r\n    if (dwFrameworkShowDevelopmentMessages()) {\r\n        dwFrameworkShowHint(\"TOUCH_MOVE\", \"touchMove with \" + e.targetTouches.length + \" finger\" + ((e.targetTouches.length > 1) ? \"s\" : \"\"),\r\n                            \"#ccccff\", \"#000000\");\r\n    }\r\n\r\n    if (DWTOUCH_FINGERS == -1) {\r\n        return;\r\n    }\r\n\r\n    DWTOUCH_TOUCH_MOVED = true;\r\n\r\n    if (e.targetTouches.length > 0) {\r\n        DWTOUCH_CURRENT_X1 = e.targetTouches[0].clientX;\r\n        DWTOUCH_CURRENT_Y1 = e.targetTouches[0].clientY;\r\n        DWTOUCH_CURRENT_SCREEN_X1 = e.targetTouches[0].screenX;\r\n        DWTOUCH_CURRENT_SCREEN_Y1 = e.targetTouches[0].screenY;\r\n    }\r\n    if (e.targetTouches.length > 1) {\r\n        DWTOUCH_FINGERS = 2;\r\n        DWTOUCH_CURRENT_X2 = e.targetTouches[1].clientX;\r\n        DWTOUCH_CURRENT_Y2 = e.targetTouches[1].clientY;\r\n        if (DWTOUCH_START_X2 == -1) {\r\n            // Wir hatten noch keine zwei Finger\r\n            DWTOUCH_START_X2 = DWTOUCH_CURRENT_X2;\r\n            DWTOUCH_START_Y2 = DWTOUCH_CURRENT_Y2;\r\n        }\r\n    }\r\n\r\n    if ((DWTOUCH_FINGERS == 1) && (DWTOUCH_SCROLLPANE != null)) {\r\n        var doPreventDefault = !DWTOUCH_SCROLLPANE_NATIVE;\r\n        var distanceY = DWTOUCH_CURRENT_Y1 - DWTOUCH_START_Y1;\r\n        var distanceX = DWTOUCH_CURRENT_X1 - DWTOUCH_START_X1;\r\n\r\n        if (dwFrameworkShowDevelopmentMessages()) {\r\n            dwFrameworkShowHint(\"TOUCH_MOVE\", \"touchMove with 1 finger: \" + distanceX + \"dx; \" + distanceY + \"dy\", \"#ccccff\", \"#000000\");\r\n        }\r\n        var verticalScrollEnabled = !dwDomHasAttribute(DWTOUCH_SCROLLPANE, \"verticalScrollEnabled\") || (dwDomGetDomAttribute(DWTOUCH_SCROLLPANE, \"verticalScrollEnabled\") == \"true\");\r\n        var horizontalScrollEnabled = !dwDomHasAttribute(DWTOUCH_SCROLLPANE, \"horizontalScrollEnabled\") || (dwDomGetDomAttribute(DWTOUCH_SCROLLPANE, \"horizontalScrollEnabled\") == \"true\");\r\n        if (DWTOUCH_SCROLLPANE_IS_IMAGE || verticalScrollEnabled) {\r\n            if (!DWTOUCH_SCROLLPANE_NATIVE) {\r\n                if (Math.abs(distanceY) > 10) {\r\n                    var scrollTop = DWTOUCH_START_SCROLL_Y - distanceY;\r\n                    if (scrollTop < 1) {\r\n                        scrollTop = 1;\r\n                    }\r\n                    DWTOUCH_SCROLLPANE.scrollTop = scrollTop;\r\n                }\r\n            } else {\r\n                // bei nativem Scrolling unter iOS muss das Standard-Touch-Verhalten deaktiviert werden,\r\n                // wenn aufgrund der Größe des Inhalts gerade kein vertikales Scrolling in dieser ScrollPane stattfindet,\r\n                // um das vertikale Scrollen der ganzen Seite zu verhindern\r\n                if ((!horizontalScrollEnabled || (Math.abs(distanceY) >= Math.abs(distanceX))) && (DWTOUCH_SCROLLPANE.scrollHeight <= DWTOUCH_SCROLLPANE.clientHeight)) {\r\n                    doPreventDefault = true\r\n                }\r\n            }\r\n        }\r\n\r\n        if (DWTOUCH_SCROLLPANE_IS_IMAGE || horizontalScrollEnabled) {\r\n            if (!DWTOUCH_SCROLLPANE_NATIVE) {\r\n                if (Math.abs(distanceX) > 10) {\r\n                    var scrollLeft = DWTOUCH_START_SCROLL_X - distanceX;\r\n                    if (scrollLeft < 1) {\r\n                        scrollLeft = 1;\r\n                    }\r\n                    DWTOUCH_SCROLLPANE.scrollLeft = scrollLeft;\r\n                }\r\n            } else {\r\n                // bei nativem Scrolling unter iOS muss das Standard-Touch-Verhalten deaktiviert werden,\r\n                // wenn aufgrund der Größe des Inhalts gerade kein horizontales Scrolling in dieser ScrollPane stattfindet,\r\n                // um das horizontale Scrollen der ganzen Seite zu verhindern\r\n                if ((!verticalScrollEnabled || (Math.abs(distanceX) >= Math.abs(distanceY))) && (DWTOUCH_SCROLLPANE.scrollWidth <= DWTOUCH_SCROLLPANE.clientWidth)) {\r\n                    doPreventDefault = true\r\n                }\r\n            }\r\n        }\r\n        if (!DWTOUCH_SCROLLPANE_IS_IMAGE && !verticalScrollEnabled && !horizontalScrollEnabled) {\r\n            doPreventDefault = true;\r\n        }\r\n        if (e.preventDefault && doPreventDefault && framework_isiOS) {\r\n            e.preventDefault();//nur im Fall von iOS unterdrucken\r\n        }\r\n    } else if (DWTOUCH_FINGERS == 1) {\r\n        dwTouchFireMouseEventForTouchEvent(e, \"mousemove\");\r\n    } else if ((DWTOUCH_FINGERS == 2) && (DWTOUCH_IMAGEVIEW != null)) {\r\n        var image = dwImageViewerGetImage(DWTOUCH_IMAGEVIEW.id);\r\n        var origDistance = dwTouchGetDistance(DWTOUCH_START_X1, DWTOUCH_START_Y1, DWTOUCH_START_X2, DWTOUCH_START_Y2);\r\n        var newDistance = dwTouchGetDistance(DWTOUCH_CURRENT_X1, DWTOUCH_CURRENT_Y1, DWTOUCH_CURRENT_X2, DWTOUCH_CURRENT_Y2);\r\n        var diff = newDistance - origDistance;\r\n        var zoomLevel = DWTOUCH_IMAGEVIEW_START_ZOOMLEVEL + (diff / 30);\r\n        dwImageViewerSetNormalizedZoom(image, zoomLevel, null, 50);\r\n        if (e.preventDefault) {\r\n            e.preventDefault();\r\n        }\r\n    }\r\n}\r\n\r\nfunction dwTouchGetDistance(x1, y1, x2, y2) {\r\n    return Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));\r\n}\r\n\r\nfunction dwTouchFindTargetId(e) {\r\n    // Gehe im DOM nach oben bis eine gültige ID gefunden wird\r\n    var id = null;\r\n    try {\r\n        var target = dwUtilsGetEventTarget(e);\r\n        while (((id == null) || (id.toString() == \"\")) && (target != null)) {\r\n            id = target.id;\r\n            target = target.parentNode;\r\n        }\r\n    } catch (exception) {\r\n        // Bei einem Fehler die letzte gültige ID beibehalten\r\n    }\r\n    return id;\r\n}\r\n\r\nfunction dwTouchFindScrollPane(e) {\r\n    var iterElement = e.target;\r\n    while (iterElement != null) {\r\n        if (dwUtilsHasElementAtLeastOneOfClasses(iterElement, [\"guiscrollpane\",\r\n                                                               \"guicustomcomboboxpopup\",\r\n                                                               \"guitable_fixed_content_div\",\r\n                                                               \"guitable_scrollable_content_div\",\r\n                                                               \"guitable_scrollable_content_div_with_fixed_columns\"])) {\r\n            DWTOUCH_SCROLLPANE_IS_IMAGE = false;\r\n            var verticalScrollEnabled = !dwDomHasAttribute(iterElement, \"verticalScrollEnabled\") || (dwDomGetDomAttribute(iterElement, \"verticalScrollEnabled\") == \"true\");\r\n            if (framework_isiOS && (iterElement.className.includes(\"guiscrollpane\") && !verticalScrollEnabled)) {\r\n                // Suche nach der primären Scrollpane. In einzelnen Oberflächen sind ggf. Tabellen (nacheinander) in einer\r\n                // großen Scrollpane vorhanden. Die Tabellen für sich sind vollständig dargestellt (und damit nicht scrollbar, deshalb wird hier auch auf verticalScrollEnabled geprüft)\r\n                // Das Scrolling erfolgt in einem parent container. Die Information zum Scrollen muss daher\r\n                // nicht von der vollständig dargestellten Tabelle mit Scrollcontainer sondern vom primären Scrollcontainer\r\n                // verarbeitet werden ...\r\n                return dwUtilsFindMatchingNodes($(\"body\"), iterElement.parentNode, function(rootNode, node) {\r\n                    return node.classList.contains(\"guiscrollpane\");\r\n                }, true).pop() || iterElement;\r\n            }\r\n            return iterElement;\r\n        } else if ((iterElement.id != null) && iterElement.id.indexOf(\"_imagescroll\") > -1) {\r\n            DWTOUCH_SCROLLPANE_IS_IMAGE = true;\r\n            return iterElement;\r\n        } else if ((iterElement.onmousemove) && (iterElement.hotspot == null)) { // sobald ein MouseMove-Listener gefunden wurde (hotspotSpanClickArea ignorieren!),\r\n            return null;                                           // nicht mehr weiter nach einer ScrollPane suchen\r\n        } else {\r\n            iterElement = iterElement.parentNode;\r\n        }\r\n    }\r\n    return null;\r\n}\r\n\r\nfunction dwTouchFindImageViewer(e) {\r\n    var iter = e.target;\r\n    while (iter != null) {\r\n        if (iter.className == \"guiviewerimage\") {\r\n            return iter;\r\n        } else {\r\n            iter = iter.parentNode;\r\n        }\r\n    }\r\n    return null;\r\n}\r\n\r\nfunction dwTouchEnd(e) {\r\n\r\n    dwTouchPreventDoubeTap(e);\r\n    if (dwUtilsIsInputTextBox(dwUtilsGetEventTarget(e))) {\r\n        // Auf Inputcontrols keine eigenen Touchfunktionen ausführen\r\n        // Ausnahme, die Zeit für den letzten Click merken um den doubleClick bei ios abzufangen\r\n        DWTOUCH_LAST_TOUCH_TIME = new Date().getTime();\r\n        return;\r\n    }\r\n\r\n    // Hier drin wird das Event möglicherweise verändert!\r\n    dwTouchPreventDefaultBehaviourIfRequired(e);\r\n\r\n    if (dwFrameworkShowDevelopmentMessages()) {\r\n        dwFrameworkShowHint(\"TOUCH_END\", \"touchEnd\" + ((DWTOUCH_FINGERS > 0) ? \" with \" + DWTOUCH_FINGERS + \" finger\"\r\n                                         + ((DWTOUCH_FINGERS > 1) ? \"s\" : \"\") : \"\"), \"#ccccff\", \"#000000\");\r\n    }\r\n\r\n    if (DWTOUCH_FINGERS == -1) {\r\n        return;\r\n    }\r\n\r\n    if (DWTOUCH_FINGERS == 1) {\r\n        var distanceX = DWTOUCH_CURRENT_X1 - DWTOUCH_START_X1;\r\n        var distanceY = DWTOUCH_CURRENT_Y1 - DWTOUCH_START_Y1;\r\n\r\n        if (dwFrameworkShowDevelopmentMessages()) {\r\n            dwFrameworkShowHint(\"TOUCH_END\", \"touchEnd with 1 finger: \" + distanceX + \"dx; \" + distanceY + \"dy\", \"#ccccff\", \"#000000\");\r\n        }\r\n\r\n        var result = \"\";\r\n        if (distanceX < -DWTOUCH_SLIDE_VALUE) {\r\n            // nach links\r\n            if (distanceY < -DWTOUCH_SLIDE_VALUE) {\r\n                // nach oben\r\n                result = DWTOUCH_SLIDE_DIRECTION_NORTHWEST;\r\n            } else if (distanceY > DWTOUCH_SLIDE_VALUE) {\r\n                // nach unten\r\n                result = DWTOUCH_SLIDE_DIRECTION_SOUTHWEST;\r\n            } else {\r\n                result = DWTOUCH_SLIDE_DIRECTION_WEST;\r\n            }\r\n        } else if (distanceX > DWTOUCH_SLIDE_VALUE) {\r\n            // nach rechts\r\n            if (distanceY < -DWTOUCH_SLIDE_VALUE) {\r\n                // nach oben\r\n                result = DWTOUCH_SLIDE_DIRECTION_NORTHEAST;\r\n            } else if (distanceY > DWTOUCH_SLIDE_VALUE) {\r\n                // nach unten\r\n                result = DWTOUCH_SLIDE_DIRECTION_SOUTHEAST;\r\n            } else {\r\n                result = DWTOUCH_SLIDE_DIRECTION_EAST;\r\n            }\r\n        } else {\r\n            if (distanceY < -DWTOUCH_SLIDE_VALUE) {\r\n                // nach oben\r\n                result = DWTOUCH_SLIDE_DIRECTION_NORTH;\r\n            } else if (distanceY > DWTOUCH_SLIDE_VALUE) {\r\n                // nach unten\r\n                result = DWTOUCH_SLIDE_DIRECTION_SOUTH;\r\n            } else {\r\n                // Nichts gemacht\r\n            }\r\n        }\r\n        if (result != \"\") {\r\n            if (DWTOUCH_HANDLER_MOVE_EVENT != null) {\r\n                if ((result == DWTOUCH_SLIDE_DIRECTION_EAST) || (result == DWTOUCH_SLIDE_DIRECTION_WEST)) {\r\n                    if (DWTOUCH_TOUCHED_ID == null) {\r\n                        DWTOUCH_TOUCHED_ID = DWTOUCH_HANDLER_MOVE_EVENT;\r\n                    }\r\n\r\n                    // JFRAME-125 TODO Der Eventhandler ist aktuell fix auf das GuiWindow (DWTOUCH_HANDLER_MOVE_EVENT) gesetzt, da\r\n                    // Touch-Events bisher auch nur am GuiWindow registriert werden\r\n                    if ($(DWTOUCH_TOUCHED_ID) != null) {\r\n                        if (dwFrameworkShowDevelopmentMessages()) {\r\n                            dwFrameworkShowHint(\"TOUCH_END\", \"touchEnd with gesture: \" + result, \"#ccccff\", \"#000000\");\r\n                        }\r\n\r\n                        if (typeof (dwAjaxDefaultOnTouchEvent) != \"undefined\") {\r\n                            dwAjaxDefaultOnTouchEvent(e, DWTOUCH_HANDLER_MOVE_EVENT, DWTOUCH_TOUCHED_ID, \"touchDirection=\" + result, true);\r\n                        }\r\n                    }\r\n                } else {\r\n                    // Im Tablet-Modus fehlt sonst das MouseUp und die Hoverfarbe beim Hoch-/Runterswipen wird nicht zurückgesetzt. Evtl nicht die finale Lösung.\r\n                    dwTouchFireMouseEventForTouchEvent(e, \"mouseup\");\r\n                }\r\n            }\r\n        } else {\r\n            // Doppelklick erzeugen\r\n            var now = new Date().getTime();\r\n            // für Doppelklick bei Touch doppelte Zeit wie normal (DWUTILS_DOUBLE_CLICK_TIME) zulassen\r\n            if ((now - DWTOUCH_LAST_TOUCH_TIME < 2 * DWUTILS_DOUBLE_CLICK_TIME) && (DWTOUCH_LAST_TOUCH_TARGET != null) && (DWTOUCH_LAST_TOUCH_TARGET == e.target)) {\r\n                if (dwFrameworkShowDevelopmentMessages()) {\r\n                    dwFrameworkShowHint(\"TOUCH_END\", \"touchEnd with double click\", \"#ccccff\", \"#000000\");\r\n                }\r\n\r\n                dwTouchFireMouseEventForTouchEvent(e, \"dblclick\");\r\n                DWTOUCH_LAST_TOUCH_TARGET = null;\r\n                DWTOUCH_LAST_TOUCH_TIME = 0;\r\n            } else {\r\n                DWTOUCH_LAST_TOUCH_TARGET = e.target;\r\n\r\n                // Klick erzeugen, wenn zwischendrin ein touchMove() stattgefunden hat oder TouchEvents emuliert werden\r\n                if ((Math.abs(distanceX) < DWTOUCH_CLICK_TOLERANCE_VALUE) && (Math.abs(distanceY) < DWTOUCH_CLICK_TOLERANCE_VALUE)) {\r\n                    if (dwFrameworkShowDevelopmentMessages()) {\r\n                        dwFrameworkShowHint(\"TOUCH_END\", \"touchEnd with click\", \"#ccccff\", \"#000000\");\r\n                    }\r\n                    var longPress = now - DWTOUCH_LONG_PRESS_START_TIME >= 500;\r\n                    if (longPress) {\r\n                        e.button = 2; // longPress => \"Rechtsklick\"\r\n                    }\r\n                    dwTouchFireMouseEventForTouchEvent(e, \"mouseup\");\r\n                    if (e.button !== 2) {     // Bei Rechtsklick nur mouseup und kein click, sonst gehen u.a. Tabellenselektionen verloren\r\n                        dwTouchFireMouseEventForTouchEvent(e, \"click\");\r\n                    }\r\n                    // Nur für iOS und Chrome notwendig, da nur für iOS die Befehle (default Behaviour) an den Browser größtenteils verhindert werden\r\n                    // Das LongPress Verhalten wird nachträglich gezielt emuliert.\r\n\r\n                    if (longPress && (framework_isiOS || framework_isChrome)) {\r\n                        dwTouchFireMouseEventForTouchEvent(e, \"contextmenu\");\r\n                    }\r\n                } else if (!DWTOUCH_TOUCH_MOVED && dwFrameworkShowDevelopmentMessages()) { // nativer click-Event vom OS\r\n                    dwFrameworkShowHint(\"TOUCH_END\", \"touchEnd with click\", \"#ccccff\", \"#000000\");\r\n                } else {\r\n                    dwTouchFireMouseEventForTouchEvent(e, \"mouseup\");\r\n                }\r\n\r\n                DWTOUCH_LAST_TOUCH_TIME = now;\r\n            }\r\n        }\r\n    }\r\n    var smoothVar_DWTOUCH_START_SCROLLPANE = null;\r\n    var smoothVar_DWTOUCH_START_SCROLL_DATE = null;\r\n    if ((DWTOUCH_FINGERS == 1) && !DWTOUCH_SCROLLPANE_IS_IMAGE && !DWTOUCH_SCROLLPANE_NATIVE) {\r\n        smoothVar_DWTOUCH_START_SCROLLPANE = DWTOUCH_SCROLLPANE;\r\n        smoothVar_DWTOUCH_START_SCROLL_DATE = DWTOUCH_START_SCROLL_DATE;\r\n    }\r\n\r\n    dwTouchReset();\r\n\r\n    if (smoothVar_DWTOUCH_START_SCROLLPANE != null) {\r\n        if (Math.abs(distanceY) > 0.5) {\r\n            setTimeout(function() {\r\n                var endDate = new Date();\r\n                var smoothY = 0;\r\n                var vY = distanceY / (endDate.getTime() - smoothVar_DWTOUCH_START_SCROLL_DATE.getTime());\r\n                if ((endDate.getTime() - smoothVar_DWTOUCH_START_SCROLL_DATE.getTime()) < 500) {\r\n                    smoothY = vY * 250;\r\n                } else {\r\n                    smoothY = 0;\r\n                }\r\n                if (smoothY != 0) {\r\n                    dwTouchSmoothScroll(smoothVar_DWTOUCH_START_SCROLLPANE, smoothVar_DWTOUCH_START_SCROLLPANE.scrollTop, smoothY);\r\n                }\r\n            }, 0);\r\n        }\r\n    }\r\n}\r\n\r\n\r\n/**\r\n * Verhindert manuell das Double-Tap Verhalten im Browser\r\n * iOS 10 ignoriert die bisher funktionierenden meta tags zum Abschalten des zooms via double tap\r\n * https://webkit.org/blog/7367/new-interaction-behaviors-in-ios-10/\r\n * @param e\r\n */\r\nfunction dwTouchPreventDoubeTap(e) {\r\n    var now = new Date().getTime();\r\n    if ((now - DWTOUCH_LAST_TOUCH_TIME < 2 * DWUTILS_DOUBLE_CLICK_TIME)) {\r\n        // DWTOUCH_LAST_TOUCH_TARGET stimmt ggf. nicht immer mit dem Browser-Zustand überein (NULL bzw. DIV kann Double Tap auslösen)\r\n        // Das Attribut ignorieren wir für die Prüfung\r\n        // Dieses abschalten des Browser-Default-Verhaltens wirkt sich nicht auf eigentliche\r\n        // Doppelclicks aus (die im weiteren Verlauf der dwTouchEnd Methode getriggert werden)\r\n        // Hier wird wie gewohnt das DWTOUCH_LAST_TOUCH_TARGET ausgewertet\r\n        dwFrameworkPreventDefaultBehaviour(e);\r\n    }\r\n}\r\n\r\nfunction dwTouchPreventDefaultBehaviourIfRequired(e) {\r\n    var target = dwUtilsGetEventTarget(e);\r\n    if (!target) {\r\n        return false;\r\n    }\r\n    var preventDefaultBehaviour = true;\r\n    var isInputField = dwUtilsIsInputTextBox(target);\r\n    var isSelectOptionField = dwUtilsStringStartsWith(target.tagName, \"option\", true)\r\n                              || dwUtilsStringStartsWith(target.tagName, \"select\", true);\r\n    if ((framework_isiOS && isInputField) || isSelectOptionField) {\r\n        // iOS hat Probleme den Focus zu setzen, wenn das Default Behaviour abgeschalten wurde\r\n        // Programmatisch Focus setzen ist (warum auch immer) verboten - und führt nicht zuverlässig zum Erfolg\r\n        // Ein langer Touch würde funktionieren in Verbindung mit focus() Befehl, aber ist nicht wirklich intuitiv\r\n        // Bei SELECT Tags ist browserübergreifend das Problem, dass ein onChange nicht ausgelöst wird wenn das Standardverhalten\r\n        // unterbunden wird ...\r\n        preventDefaultBehaviour = false;\r\n    }\r\n    if (preventDefaultBehaviour) {\r\n        // Hier drin wird das Event möglicherweise verändert!\r\n        dwFrameworkPreventDefaultBehaviour(e);\r\n    }\r\n    return preventDefaultBehaviour;\r\n}\r\n\r\nfunction dwTouchSmoothScroll(scrollPane, currentValue, distance) {\r\n    if (DWTOUCH_SCROLLPANE != null) {\r\n        // Neuer Touch\r\n        return;\r\n    }\r\n    currentValue -= distance;\r\n    scrollPane.scrollTop = currentValue;\r\n    if (Math.abs(distance) > 2) {\r\n        dwTouchSmoothScroll(scrollPane, currentValue, distance / 2);\r\n    }\r\n}\r\n\r\nfunction dwTouchReset() {\r\n    DWTOUCH_START_X1 = -1;\r\n    DWTOUCH_START_Y1 = -1;\r\n    DWTOUCH_CURRENT_X1 = -1;\r\n    DWTOUCH_CURRENT_Y1 = -1;\r\n    DWTOUCH_CURRENT_SCREEN_X1 = -1;\r\n    DWTOUCH_CURRENT_SCREEN_Y1 = -1;\r\n    DWTOUCH_START_X2 = -1;\r\n    DWTOUCH_START_Y2 = -1;\r\n    DWTOUCH_CURRENT_X2 = -1;\r\n    DWTOUCH_CURRENT_Y2 = -1;\r\n    DWTOUCH_SCROLLPANE = null;\r\n    DWTOUCH_IMAGEVIEW = null;\r\n    DWTOUCH_IMAGEVIEW_START_ZOOMLEVEL = -1;\r\n    DWTOUCH_START_SCROLL_X = -1;\r\n    DWTOUCH_START_SCROLL_Y = -1;\r\n    DWTOUCH_START_SCROLL_DATE = null;\r\n    DWTOUCH_SCROLLPANE_IS_IMAGE = false;\r\n    DWTOUCH_SCROLLPANE_NATIVE = false;\r\n    DWTOUCH_FINGERS = -1;\r\n    DWTOUCH_TOUCHED_ID = null;\r\n    DWTOUCH_TOUCH_MOVED = false;\r\n    DWTOUCH_TOUCH_EMULATION_CENTER_CLIENT_X = null;\r\n    DWTOUCH_TOUCH_EMULATION_CENTER_CLIENT_Y = null;\r\n    DWTOUCH_TOUCHING = false;\r\n    DWTOUCH_LONG_PRESS_START_TIME = 0;\r\n}\r\n\r\n\n// Debug Kanal wird von IE nicht unterstützt\r\n// Firebug API: http://getfirebug.com/wiki/index.php/Console_API\r\n// IE API: http://msdn.microsoft.com/en-us/library/gg589530%28v=vs.85%29.aspx\r\n\r\n/**\r\n * Initialisiert das Logger Objekt. Native Firebug Console steht erst nach dem onload zur Verfügung\r\n * @param forceLoggingInBrowserWindow\r\n */\r\nfunction DwLogger(forceLoggingInBrowserWindow) {\r\n    this.logger = this.__internal_getConsole(forceLoggingInBrowserWindow);\r\n    this.groupStack = new Array();\r\n    this.DW_LOGGER_CHANNELS = {\r\n        INFO: \"info\",\r\n        WARN: \"warn\",\r\n        ERROR: \"error\",\r\n        ASSERT: \"assert\",\r\n        LOG: \"log\",\r\n        DEBUG: \"debug\"\r\n    };\r\n}\r\n\r\nDwLogger.prototype.__internal_getConsole = function(forceLoggingInBrowserWindow) {\r\n    var nativeConsole = null;\r\n    try {\r\n        nativeConsole = (window.console) ? window.console : console;\r\n    } catch (exception) {\r\n        // keine console\r\n    }\r\n    var supportsNativeConsole = (nativeConsole != null); // deckt auch != undefined ab\r\n    if (forceLoggingInBrowserWindow || !supportsNativeConsole) {\r\n        return new DwBrowserLogger(this);\r\n    } else {\r\n        return nativeConsole;\r\n    }\r\n};\r\n\r\nDwLogger.prototype.__internal_log = function(channel, message) {\r\n    if (this.DW_LOGGER_CHANNELS[channel.toUpperCase()]) {\r\n        var indent = \"\";\r\n        for (var i = 0; i < this.groupStack.length; i++) {\r\n            indent += \"  \"; // 2 Spaces\r\n        }\r\n        this.logger[channel.toLowerCase()](indent + message);\r\n    }\r\n};\r\n\r\nDwLogger.prototype.log = function(message) {\r\n    if (this.logger.debug) {\r\n        this.__internal_log(this.DW_LOGGER_CHANNELS.DEBUG, message);\r\n    } else {\r\n        this.__internal_log(this.DW_LOGGER_CHANNELS.LOG, message);\r\n    }\r\n};\r\n\r\nDwLogger.prototype.error = function(message) {\r\n    this.__internal_log(this.DW_LOGGER_CHANNELS.ERROR, message);\r\n};\r\n\r\nDwLogger.prototype.assert = function(expression, message) {\r\n    this.logger[this.DW_LOGGER_CHANNELS.ASSERT.toLowerCase()](expression, message);\r\n};\r\n\r\nDwLogger.prototype.clear = function() {\r\n    this.logger[\"clear\"]();\r\n};\r\n\r\nDwLogger.prototype.dir = function(obj) {\r\n    this.logger.dir(obj);\r\n};\r\n\r\nDwLogger.prototype.profile = function(profileTitle) {\r\n    this.logger.profile(profileTitle);\r\n};\r\n\r\nDwLogger.prototype.profileEnd = function() {\r\n    this.logger.profileEnd();\r\n};\r\n\r\nDwLogger.prototype.groupStart = function(message) {\r\n    if (!this.logger.group) {\r\n        dwLoggerCustomGroupStart(this, message);\r\n    } else {\r\n        this.logger.group(message);\r\n    }\r\n};\r\n\r\nDwLogger.prototype.groupEnd = function() {\r\n    if (!this.logger.groupEnd) {\r\n        dwLoggerCustomGroupEnd(this);\r\n    } else {\r\n        this.logger.groupEnd();\r\n    }\r\n//    this.log(\"<<\");\r\n};\r\n\r\n\r\nfunction dwLoggerCustomGroupStart(logger, message) {\r\n    logger.log(\"GROUP START: \" + message);\r\n    logger.groupStack.push(message);\r\n}\r\n\r\nfunction dwLoggerCustomGroupEnd(logger) {\r\n    logger.log(\"GROUP END: \" + logger.groupStack.pop());\r\n}\r\n\r\n/**\r\n * Kapsel für das Logging auf den Browser\r\n */\r\nfunction DwBrowserLogger(dwLogger) {\r\n    this.logger = dwLogger;\r\n    this.browserdoc = null;\r\n    this.browserwindow = null;\r\n    this.autoretry = 0;\r\n}\r\n\r\nDwBrowserLogger.prototype.__internal_log = function(channel, message) {\r\n    if (message == null) {\r\n        return;\r\n    }\r\n    if (this.browserdoc == null) {\r\n        if ((typeof (framework_isJ2EEBrowser) != \"undefined\") && framework_isJ2EEBrowser) {\r\n            // Im J2EE Fall hat das Popup automatisch eine Minimalgröße. Keine weiteren Vorgaben\r\n            this.browserwindow = window.open(); // kann Popup Blocker auslösen\r\n        } else {\r\n            // Im Swing Fall wird die Größe direkt vorgegeben (und das Popup wiederverwendet)\r\n            this.browserwindow = window.open(\"\", \"dw_browser_logger\", \"width=600, height=400, scrollbars=yes, resizable=yes\"); // kann Popup Blocker auslösen\r\n        }\r\n        this.browserdoc = this.browserwindow.document;\r\n    }\r\n    message = message.replace(/ /g, \"&nbsp;\");\r\n    try {\r\n        this.browserdoc.write(channel.toUpperCase() + \": \" + message + \"<br>\");\r\n    } catch (exception) {\r\n        if (this.autoretry < 3) {\r\n            this.autoretry++;\r\n            this.browserdoc = null;\r\n            this.__internal_log(channel, message);\r\n        }\r\n    }\r\n};\r\n\r\nDwBrowserLogger.prototype.log = function(message) {\r\n    this.__internal_log(this.logger.DW_LOGGER_CHANNELS.LOG, message);\r\n};\r\n\r\nDwBrowserLogger.prototype.info = function(message) {\r\n    this.__internal_log(this.logger.DW_LOGGER_CHANNELS.INFO, message);\r\n};\r\n\r\nDwBrowserLogger.prototype.warn = function(message) {\r\n    this.__internal_log(this.logger.DW_LOGGER_CHANNELS.WARN, message);\r\n};\r\n\r\nDwBrowserLogger.prototype.error = function(message) {\r\n    this.__internal_log(this.logger.DW_LOGGER_CHANNELS.ERROR, message);\r\n};\r\n\r\nDwBrowserLogger.prototype.assert = function(expression, message) {\r\n    if (!eval(expression)) {\r\n        this.__internal_log(this.logger.DW_LOGGER_CHANNELS.ASSERT, message);\r\n    }\r\n};\r\n\r\nDwBrowserLogger.prototype.clear = function() {\r\n    // Beim Schliessen eines Browser-Fensters wird eine Sicherheitsmeldung angezeigt, wenn kein \"Opener\" gesetzt ist\r\n    // Aktuell ist dieser automatisch gesetzt, da wird das Fenster aus unserem eigenen Hauptfenster heraus öffnen\r\n    // Alternativ kann der opener auch manuell gesetzt werden (Kommentar der nächsten Zeile entfernen)\r\n    this.browserwindow.opener = 'dwDummyLogOpener_foo';\r\n    this.browserwindow.close();\r\n    this.browserwindow = null;\r\n    this.browserdoc = null;\r\n};\r\n\r\nDwBrowserLogger.prototype.dir = function(obj) {\r\n    // noch nicht unterstützt\r\n};\r\n\r\nDwBrowserLogger.prototype.profile = function(profileTitle) {\r\n    // noch nicht unterstützt\r\n};\r\n\r\nDwBrowserLogger.prototype.profileEnd = function() {\r\n    // noch nicht unterstützt;\r\n};\r\n\r\nDwBrowserLogger.prototype.group = function(message) {\r\n    this.logger.log(\"GROUP START: \" + message);\r\n    this.logger.groupStack.push(message);\r\n};\r\n\r\nDwBrowserLogger.prototype.groupEnd = function(message) {\r\n    this.logger.log(\"GROUP END: \" + this.logger.groupStack.pop());\r\n};\n/*\r\n * Copyright (c) 2025 Quanos Solutions GmbH\r\n */\r\n\r\n// KONSTANTEN\r\nvar DWAJAX_ACTIVE = true;\r\n\r\nvar DWAJAX_LOG_ERRORS = true;\r\nvar DWAJAX_SHOW_ERRORS = true;\r\nvar DWAJAX_SHOW_EXCEPTIONS = true;\r\nvar DWAJAX_ERROR_DETAIL_MAX_LENGTH = 10000;\r\nvar DWAJAX_REFRESH_AFTER_ERROR = false;\r\n\r\nvar DWAJAX_DEBUG_COMMANDS = false;\r\nvar DWAJAX_SHOW_STACKTRACE = false;\r\n// Eigentlich müssten wir warten bis die Antwort vom Server kommt. Aber es funktioniert bei schnellen Klicks\r\n// nicht, deshalb erst mal disabled, bis wir etwas haben, um die Klicks aufzusammeln, während der Server arbeitet\r\nvar DWAJAX_DISABLE_INPUT = false;\r\nvar DWAJAX_WAIT_CURSOR_MS = 2000; // 2000ms, bei 0 kommt er sofort, bei -1 gar nicht\r\nvar DWAJAX_WAIT_CURSOR_TIMEOUT_ID = null;\r\nvar DWAJAX_TIMEOUT_MS = 999999999;\r\n\r\n// Liste mit Updates die zu senden sind\r\nvar dwAjaxUpdates = new Array();\r\n// Flag ob überhaupt noch die Sanduhr anzuzeigen ist\r\nvar dwAjaxCurrentlySending = false;\r\n// Static Pong Mechanismus. Eine Verbindung, die offen gehalten wird, und der Server gibt darüber Bescheid, wenn der Browser\r\n// etwas aktualisieren soll\r\nvar dwAjaxStaticConnectionXmlHttp = null;\r\nvar dwAjaxStaticConnectionForbiddenCounter = 0;\r\n\r\n// 400er und 500er Fehler bei Ajax-Requests können einfach wiederholt werden. Erst nach 10 Fehlversuchen wird ein Fehler in der GUI gezeigt\r\nvar isRepeatAjaxError = false;\r\nvar repeatAjaxErrorCounter = 0;\r\nvar pageRefreshCounter = 0;\r\n\r\n/**\r\n * Fügt ein Update hinzu\r\n *\r\n * @param command    das Kommando das zum Server gesendet werden soll\r\n * @param doAutoSend soll es gleich geendet werden?\r\n * @param doAsynchronousCall soll (nicht) auf die Antwort gewartet werden?\r\n */\r\nfunction dwAjaxAddUpdate(command, doAutoSend, doAsynchronousCall) {\r\n    dwAjaxUpdates.push(command);\r\n    if (doAutoSend && !dwAjaxCurrentlySending) {\r\n        dwAjaxSendUpdates(false, doAsynchronousCall);\r\n    }\r\n}\r\n\r\n/**\r\n * Sendet eine Liste von Änderungs-Befehlen an den Server\r\n */\r\nfunction dwAjaxSendUpdates(ignoreErrors, doAsynchronousCall) {\r\n    if (!DWAJAX_ACTIVE) {\r\n        // Nach \"Lost connection\" oder \"404\" keine Aktivität mehr, bringt ja nichts\r\n        return;\r\n    }\r\n    if (!dwFrameworkInitFinished) {\r\n        // Init Methode noch nicht abgeschlossen - noch keine Ajax Befehle abfeuern\r\n        return;\r\n    }\r\n    if (dwAjaxCurrentlySending) {\r\n        return;\r\n    }\r\n    if ((typeof (framework_isActive) == 'undefined' || !framework_isActive)) {\r\n        return;\r\n    }\r\n\r\n    if (dwAjaxUpdates.length > 0) {\r\n        // Normalerweise bei DEVELOPMENT Hints zu Ajax anzeigen\r\n        var showHint = dwFrameworkShowDevelopmentMessages();\r\n        if ((dwAjaxUpdates.length == 1) && (dwAjaxUpdates[0] == \"ping\")) {\r\n            // Ausser bei Pings\r\n            showHint = false;\r\n        }\r\n        dwAjaxCurrentlySending = true;\r\n        var dwAjaxTimerStart = new Date().getTime();\r\n\r\n        if (DWAJAX_WAIT_CURSOR_MS == 0) {\r\n            dwUtilsShowWaitCursor();\r\n        } else if (DWAJAX_WAIT_CURSOR_MS > 0) {\r\n            DWAJAX_WAIT_CURSOR_TIMEOUT_ID = setTimeout(dwUtilsShowWaitCursor, DWAJAX_WAIT_CURSOR_MS);\r\n        }\r\n\r\n        if (DWAJAX_DISABLE_INPUT) {\r\n            dwUtilsDisableInput();\r\n        }\r\n\r\n        dwResizeRegistryGetInstance().updateSizes();\r\n\r\n        if (DWAJAX_DEBUG_COMMANDS) {\r\n            for (var i = 0; i < dwAjaxUpdates.length; i++) {\r\n                var line = dwAjaxUpdates[i];\r\n                line = line.replace(/<br>/g, \"&nbsp;\");\r\n                line = line.replace(/</g, \"&lt;\");\r\n                line = line.replace(/>/g, \"&gt;\");\r\n                dwUtilsDebugWrite(\"<pre style=\\\"white-space: nowrap\\\">&nbsp;&nbsp;&nbsp;&gt;&gt;&gt; \" + line + \"</pre>\");\r\n            }\r\n        }\r\n        // Kopie damit wir ja nichts verlieren\r\n        var dwAjaxUpdatesTmp = dwAjaxUpdates;\r\n        dwAjaxUpdates = new Array();\r\n        framework_lastServerRequest = new Date().getTime();\r\n        var currentBrowserRootWindowCommand = \"currentBrowserRootWindow\" + \"@DW@\" + dwFrameworkGetRootWindowId() + \"@DW@\" + framework_displayWidth + \"@DW@\" + framework_displayHeight;\r\n        dwAjaxUpdatesTmp.unshift(currentBrowserRootWindowCommand);\r\n\r\n        dwAjaxToServer(dwAjaxTimerStart, showHint, dwAjaxUpdatesTmp, ignoreErrors, new Date().getTime(), doAsynchronousCall);\r\n    }\r\n}\r\n\r\nfunction getNewUrlForWebapp(path) {\r\n    var url = dwUtilsGetBaseApplicationUrl() + path;\r\n    return url;\r\n}\r\n\r\n// Siehe StaticConnectionUpdater\r\nfunction dwAjaxNewStaticConnection() {\r\n    if (!framework_isActive) {\r\n        return;\r\n    }\r\n    setTimeout(function() {\r\n        if (!framework_isActive) {\r\n            return;\r\n        }\r\n\r\n        dwAjaxStaticConnectionXmlHttp = dwUtilsCreateXmlHttpRequest(true);\r\n        var url = getNewUrlForWebapp(\"/static.connection_\" + dwFrameworkGetRootWindowId()); // StaticConnection pro RootWindow\r\n        dwAjaxStaticConnectionXmlHttp.open(\"POST\", url, true);\r\n        dwAjaxStaticConnectionXmlHttp.setRequestHeader(\"Content-type\", \"text/plain; charset=UTF-8\");\r\n        dwAjaxStaticConnectionXmlHttp.onreadystatechange = function() {\r\n            if (!framework_isActive) {\r\n                return;\r\n            }\r\n            if (dwAjaxStaticConnectionXmlHttp.readyState == DWUTILS_READY_STATE.DONE) {\r\n                try {\r\n                    if (dwAjaxStaticConnectionXmlHttp.status == 200) {\r\n                        // Bei Antwort y (yes), p (ping) oder f (finish) ein AJAX Ping durchführen\r\n                        if ((dwAjaxStaticConnectionXmlHttp.responseText == 'y') || (dwAjaxStaticConnectionXmlHttp.responseText == 'p')\r\n                            || (dwAjaxStaticConnectionXmlHttp.responseText == 'f')) {\r\n                            dwAjaxAddUpdate(\"ping\", true, true);\r\n                            if (dwAjaxStaticConnectionXmlHttp.responseText == 'f') {\r\n                                return; // Fertig -> Static Connection beendet\r\n                            }\r\n                        } else { // Static Connection wurde beendet\r\n                            return;\r\n                        }\r\n                    }\r\n                } catch (exception) {\r\n                }\r\n                if ((dwAjaxStaticConnectionXmlHttp.status == 403) || (dwAjaxStaticConnectionXmlHttp.status == 302)\r\n                    || (dwAjaxStaticConnectionXmlHttp.status == 307)) {\r\n                    // 403 tritt z.B. auf, wenn Tomcat neu gestartet wurde und Browserfenster noch offen ist\r\n                    // 302 oder 307 werden von Login-Systemen für den Redirect auf eine Login-Seite verwendet, was bedeutet,\r\n                    // dass die Session/Login abgelaufen ist\r\n                    dwAjaxStaticConnectionForbiddenCounter++;\r\n                } else {\r\n                    dwAjaxStaticConnectionForbiddenCounter = 0;\r\n                }\r\n                if (dwAjaxStaticConnectionForbiddenCounter < 10) {\r\n                    dwAjaxNewStaticConnection();\r\n                }\r\n            }\r\n        };\r\n        dwAjaxStaticConnectionXmlHttp.send(\"?\");\r\n    }, 0);\r\n}\r\n\r\nfunction sleep(millis) {\r\n    var date = new Date();\r\n    var curDate = null;\r\n    while (curDate - date < millis) {\r\n        curDate = new Date();\r\n    }\r\n}\r\n\r\nfunction dwAjaxToServer(dwAjaxTimerStart, showHint, dwAjaxUpdatesTmp, ignoreErrors, startTime, doAsynchronousCall) {\r\n    var string = \"\";\r\n    for (var i = 0; i < dwAjaxUpdatesTmp.length; i++) {\r\n        var line = dwAjaxUpdatesTmp[i];\r\n        if (string.length > 0) {\r\n            string += \"@DX@\";\r\n        }\r\n        string += line;\r\n    }\r\n    if (typeof (doAsynchronousCall) == 'undefined') {\r\n        // Flag sollte immer gesetzt sein. Im Fehlerfall wird der Default angenommen (asynchron)\r\n        doAsynchronousCall = true;\r\n    }\r\n\r\n    var xmlHttp = dwUtilsCreateXmlHttpRequest(true);\r\n    var url = getNewUrlForWebapp(\"/ajax\");\r\n    xmlHttp.open(\"POST\", url, doAsynchronousCall);\r\n    xmlHttp.setRequestHeader(\"Content-type\", \"text/plain; charset=UTF-8\");\r\n    xmlHttp.onreadystatechange = function() {\r\n        if ((DWAJAX_WAIT_CURSOR_MS > 0) && (new Date().getTime() - dwAjaxTimerStart > DWAJAX_WAIT_CURSOR_MS)) {\r\n            dwUtilsShowWaitCursor();\r\n        }\r\n        try {\r\n            if (showHint) {\r\n                if (xmlHttp.readyState == DWUTILS_READY_STATE.OPENED) {\r\n                    dwFrameworkShowHint(\"AJAX\", \"SENDING (\" + dwAjaxUpdates.length + \")\", \"#0000dd\", \"#ffffff\");\r\n                } else if (xmlHttp.readyState == DWUTILS_READY_STATE.HEADERS_RECEIVED) {\r\n                    dwFrameworkShowHint(\"AJAX\", \"WAITING FOR SERVER...\", \"#0000dd\", \"#ffffff\");\r\n                } else if (xmlHttp.readyState == DWUTILS_READY_STATE.LOADING) {\r\n                    dwFrameworkShowHint(\"AJAX\", \"RECEIVING\", \"#0000dd\", \"#ffffff\");\r\n                }\r\n            }\r\n            if (xmlHttp.readyState == DWUTILS_READY_STATE.DONE) {\r\n                var shutdownFramework = false;\r\n                switch (xmlHttp.status) {\r\n                    case 200:\r\n                        pageRefreshCounter = 0;\r\n                        repeatAjaxErrorCounter = 0;\r\n                        dwFrameworkHideLostConnectionBanner();\r\n                        if (xmlHttp.responseText == \"\") {\r\n                            // Damit auch hier er ganz normal in GotUpdate reingeht\r\n                            var newValues = new Array();\r\n                        } else {\r\n                            var newValues = xmlHttp.responseText.split('@DX@');\r\n                        }\r\n                        dwAjaxGotUpdate(dwAjaxTimerStart, newValues, showHint);\r\n                        break;\r\n                    case 12029:\r\n                    case 12030:\r\n                    case 12031:\r\n                    case 12152:\r\n                    case 12159:\r\n                    case 12007:\r\n                    case 0:\r\n                        if (pageRefreshCounter < 2) {\r\n                            pageRefreshCounter++;\r\n                            dwAjaxRefreshPage();    // Keine Verbindung\r\n                            return;\r\n                        }\r\n                    case 404:\r\n                        // Bislang wurde bei Status Code 0 und Status Code 404 (keine Verbindung zum Server / Server nicht gefunden)\r\n                        // automatisch ein Fehlerdialog angezeigt.\r\n                        // Stattdessen wird jetzt auch bis zu 30 Sekunden gewartet (insbesondere in Bezug darauf das temporär ein\r\n                        // Verbindungsverlust (z.B. bei mobilen Endgeräten) auftreten kann und es angenehmer ist,\r\n                        // wenn der Nutzer nicht ständig \"neu laden\" drücken muss - ohne zu wissen ob/wann die Verbindung wieder steht.\r\n                        if (ignoreErrors || $(\"lostConnection\")) {\r\n                            // Fehler sollen z.B. ignoriert werden, wenn die Nachricht zur Fehlerübertragung dient (dwAjaxErrorHandler->dwAjaxSendMessage)\r\n                            // oder bereits das Popup angezeigt wird, dass die Verbindung verloren ist (d.h. > 30 Sekunden sind bereits vergangen)\r\n                            break;\r\n                        } else if ((new Date().getTime() - startTime) > 30000) {\r\n                            // Fehler ignorieren ist hier notwendig, damit in der Finish-Methode die bislang vorliegenden Befehle\r\n                            // nicht erneut gesendet werden und erneut der Timer ausgelöst wird (während das Popup angezeigt wird)\r\n                            ignoreErrors = true;\r\n\r\n                            // In der Liste der Updates ist ggf. noch der Befehl drin der nicht übertragen werden konnte\r\n                            // Liste der Befehle muss geleert werden, damit eine ewig neue Verbindung / Übertragung im onFinished ausgelöst wird\r\n                            dwAjaxUpdates = [];\r\n                            dwFrameworkHideLostConnectionBanner();\r\n                            // Länger als 30 Sekunden probiert => Aufgeben. Wir biegen um auf die üblichen Probleme.\r\n                            var exception = new Object();\r\n                            exception.name = \"Ajax error \" + xmlHttp.status + \": \" + xmlHttp.statusText;\r\n                            exception.message = \"Ajax error \" + xmlHttp.status + \": \" + xmlHttp.statusText;\r\n                            dwAjaxErrorHandler(exception, null, 12029, xmlHttp.responseText);\r\n                            shutdownFramework = true;\r\n                            break;\r\n                        } else {\r\n                            // Langsam von 30 herunterzählen ... (damit der Nutzer sieht, wie lange noch probiert wird)\r\n                            setTimeout(function() {\r\n                                var countdown = parseInt(((startTime + 30000 - new Date().getTime()) / 1000));\r\n                                dwFrameworkShowLostConnectionBanner(countdown);\r\n                                // http://www.experts-exchange.com/Programming/Languages/Scripting/JavaScript/Q_23421667.html\r\n                                // http://danweber.blogspot.de/2007/04/ie6-and-error-code-12030.html\r\n                                // Kann 1000 Gründe haben.\r\n                                // Wir wiederholen den Call einfach nochmal\r\n                                dwAjaxToServer(dwAjaxTimerStart, showHint, dwAjaxUpdatesTmp, ignoreErrors, startTime);\r\n                            }, 1000);\r\n                            return;\r\n                        }\r\n                    case 403:\r\n                        // PING Requests ignorieren Fehler (temporär kann Server unerreichbar sein...)\r\n                        // Ist der PING allerdings abgelehnt worden (Status Code 403) werden weitere Versuche abgebrochen (verm. Session invalid)\r\n                        ignoreErrors = false;\r\n\r\n                    default:\r\n                        if (!ignoreErrors) {\r\n                            if (isRepeatAjaxError && (xmlHttp.status >= 400) && (xmlHttp.status < 600) && (repeatAjaxErrorCounter < 10)) {\r\n                                if (repeatAjaxErrorCounter > 5) {\r\n                                    sleep(200);\r\n                                }\r\n                                repeatAjaxErrorCounter++;\r\n                                dwAjaxToServer(dwAjaxTimerStart, showHint, dwAjaxUpdatesTmp, ignoreErrors, startTime);\r\n                                return;\r\n                            }\r\n\r\n                            var exception = new Object();\r\n                            exception.name = \"Ajax error \" + xmlHttp.status + \": \" + xmlHttp.statusText;\r\n                            exception.message = \"Ajax error \" + xmlHttp.status + \": \" + xmlHttp.statusText;\r\n                            dwAjaxErrorHandler(exception, null, xmlHttp.status, xmlHttp.responseText);\r\n                            shutdownFramework = true;\r\n                        }\r\n                }\r\n                dwAjaxDwrFinished(ignoreErrors);\r\n                if (shutdownFramework) {\r\n                    framework_isActive = false; // Framework deaktivieren\r\n                }\r\n            }\r\n        } catch (exception) {\r\n            // Zeile bitte so lassen damit wir immer alle Codestellen per Volltextsuche finden. Das kann man nicht auslagern in eine Datei.\r\n            if (typeof (framework_isActive) == 'undefined' || !framework_isActive) {\r\n                return;\r\n            }\r\n            throw exception;\r\n        }\r\n    };\r\n\r\n    xmlHttp.send(string);\r\n}\r\n\r\n/**\r\n * Setzt die Darstellung zurück (normaler Cursor, ...) und versucht die bisher aufgelaufenen Befehle direkt zu übertragen\r\n *\r\n * Ist \"ignoreErrors\" gesetzt so wird kein Timer / erneuter Fehlerdialog angzeigt, wenn die Datenverbindung noch immer nicht aufgebaut werden konnte\r\n * @param ignoreErrors\r\n */\r\nfunction dwAjaxDwrFinished(ignoreErrors) {\r\n    if (DWAJAX_DISABLE_INPUT) {\r\n        dwUtilsEnableInput();\r\n    }\r\n    try {\r\n        if (DWAJAX_WAIT_CURSOR_TIMEOUT_ID != null) {\r\n            clearTimeout(DWAJAX_WAIT_CURSOR_TIMEOUT_ID);\r\n            DWAJAX_WAIT_CURSOR_TIMEOUT_ID = null;\r\n        }\r\n    } catch (exception) {\r\n    }\r\n\r\n    dwUtilsShowNormalCursor();\r\n    dwAjaxCurrentlySending = false;\r\n    // Nochmal senden falls wieder etwas neu drin ist\r\n    dwAjaxSendUpdates(ignoreErrors, true);\r\n}\r\n\r\n/**\r\n * Vom Server ist eine Anfrage reingekommen\r\n *\r\n * @param newvalues Liste mit Kommandos die am Client ausgeführt werden sollen\r\n */\r\nfunction dwAjaxGotUpdate(dwAjaxTimerStart, commands, showHint) {\r\n    if (!dwFrameworkInitFinished) {\r\n        // Das Html wurde noch nicht komplett geladen, speichere die commandos, damit sie später\r\n        // ausgeführt werden können\r\n        return;\r\n    }\r\n\r\n    var dwAjaxTimerClientStart = new Date();\r\n    try {\r\n        if (commands == null) {\r\n            if (DWAJAX_DEBUG_COMMANDS) {\r\n                alert(\"Ajax got update - but commands was 'null'\");\r\n            }\r\n            throw (\"Ajax got update - but commands was 'null'\");\r\n        }\r\n        if (showHint) {\r\n            dwFrameworkShowHint(\"AJAX\", \"RECEIVED (\" + commands.length + \")\", \"#0000dd\", \"#ffffff\");\r\n        }\r\n        var nrOfCharacters = 0;\r\n        var alreadyShowingWaitCursor = false;\r\n        for (var i = 0; i < commands.length; i++) {\r\n\r\n            if ((DWAJAX_WAIT_CURSOR_MS > 0) && (!alreadyShowingWaitCursor) && (new Date().getTime() - dwAjaxTimerStart > DWAJAX_WAIT_CURSOR_MS)) {\r\n                dwUtilsShowWaitCursor();\r\n                alreadyShowingWaitCursor = true;\r\n            }\r\n            if (DWAJAX_DEBUG_COMMANDS) {\r\n                var line = commands[i];\r\n                line = line.replace(/<br>/g, \"&nbsp;\");\r\n                line = line.replace(/</g, \"&lt;\");\r\n                line = line.replace(/>/g, \"&gt;\");\r\n                dwUtilsDebugWrite(\"<pre style=\\\"white-space: nowrap\\\">&lt;&lt;&lt;&nbsp;&nbsp;&nbsp; \" + line + \"</pre>\");\r\n            }\r\n            nrOfCharacters += commands[i].length;\r\n            var command = commands[i].split(\"@DW@\");\r\n            var control = null;\r\n            var action = null;\r\n\r\n            if (command.length < 1) {\r\n                throw \"NO_ACTION_FOUND\";\r\n            } else {\r\n                action = command[0];\r\n            }\r\n\r\n            // Ab hier kommen die Implementierungen\r\n            // Aktionen die nur 1 Angabe benötigen (Aktion)\r\n            if (action == \"refreshPage\") {\r\n                dwAjaxRefreshPage();\r\n            } else if (action == \"setBookmarkValue\") {\r\n                dwAjaxSetBookmarkValue(command[1]);\r\n            } else if (action == \"setChildThreadCount\") {\r\n                dwAjaxSetChildThreadCount(command[1]);\r\n            } else if (action == \"evaluateJavascript\") {\r\n                var javascriptMethods = command[1];\r\n                dwUtilsEvaluateJavascript(javascriptMethods, true);\r\n            } else if (action == \"addJavascriptFunction\") {\r\n                var functionCode = command[1];\r\n                dwDomAddJavascriptFunction(functionCode);\r\n            } else if (action == \"removeJavascriptFunction\") {\r\n                var functionCode = command[1];\r\n                dwDomRemoveJavascriptFunction(functionCode);\r\n            } else if (action == \"addJavascriptFile\") {\r\n                var filename = command[1];\r\n                dwAjaxAddJavascriptFile(filename);\r\n            } else if (action == \"removeJavascriptFile\") {\r\n                var filename = command[1];\r\n                dwAjaxRemoveJavascriptFile(filename);\r\n            } else if (action == \"addJavascriptListenerTagForControl\") {\r\n                dwAjaxAddJavascriptListenerTag(command);\r\n            } else if (action == \"setGlobalStyleIfNotExists\") {\r\n                dwDomSetGlobalStyleIfNotExists(command[1]);\r\n            } else if (action == \"removeJavascriptListenerTagForControl\") {\r\n                dwAjaxRemoveJavascriptListenerTag(command);\r\n            } else if (action == \"addToInnerFunction\") {\r\n                var functionName = command[1];\r\n                var commandsToAdd = command[2];\r\n                dwDomAddToFunction(functionName, commandsToAdd);\r\n            } else if (action == \"addToInnerFunctionParameter\") {\r\n                var functionName = command[1];\r\n                var innerFunctionName = command[2];\r\n                var innerFunctionParameterValueToAppend = command[3];\r\n                dwDomAppendToInnerFunctionParameter(functionName, innerFunctionName, innerFunctionParameterValueToAppend);\r\n            } else if (action == \"setBrowserTitle\") {\r\n                dwDomSetBrowserTitle(command[1]);\r\n            } else if (action == \"setFavIcon\") {\r\n                dwDomSetFavIcon(command[1]);\r\n            } else if (action == \"removeFavIcon\") {\r\n                dwDomRemoveFavIconIfPossible();\r\n            } else if (action == \"showException\") {\r\n                var stackTrace = command[2];\r\n                dwAjaxServerExceptionHandler(command[1], stackTrace);\r\n            } else if (action == \"initCountdown\") {\r\n                dwUtilsInitCountdown();\r\n            } else if (action == \"setCountdownTime\") {\r\n                dwUtilsSetCountdownTime(command[1]);\r\n            } else if (action == \"htmlToPDf\") {\r\n                dwHtmlStringToPdf(command[1], command[2], command[3]);\r\n            } else if (action == \"scanQrCode\") {\r\n                dwStartScanner(command[1], command[2], command[3], command[4]);\r\n            } else if (action == \"startCamera\") {\r\n                dwCameraStartVideo(command[1], command[2], command[3]);\r\n            } else if (action == \"stopCamera\") {\r\n                dwCameraStopVideo();\r\n            } else if (action == \"takePicture\") {\r\n                dwCameraTakeSnapshot();\r\n            } else if (action == \"cropPicture\") {\r\n                dwCameraStartCrop();\r\n            } else if (action == \"rotatePicture\") {\r\n                dwCameraRotatePicture();\r\n            } else if (action == \"savePicture\") {\r\n                dwCameraSavePicture();\r\n            } else {\r\n                // Aktionen die auf einen Knoten im DOM ausgeführt werden, und sich somit fest auf ein Control beziehen (uniqueId)\r\n                if (command.length < 2) {\r\n                    // Wenn es weniger als 2 Kommandos gibt, dann ist @DW@ folglich gar nicht in dem Kommando-String enthalten\r\n                    // und es handelt sich ziemlich sicher nicht um eine Antwort vom ApplicationServer, sondern z.B. von\r\n                    // einem Login-System -> prüfe, ob es sich um eine HTML-Seite handelt, und lade die Seite in diesem Fall neu\r\n                    if ((command.length > 0) && dwUtilsStringStartsWith(command[0], \"<HTML>\", true)) {\r\n                        dwFrameworkRefreshPage();\r\n                        return;\r\n                    }\r\n\r\n                    throw \"NO_ID_FOUND\";\r\n                } else {\r\n                    var controlId = command[1];\r\n                    control = $(controlId);\r\n                    if (control == null) {\r\n                        if (dwAjaxIgnoreControlNotFound(action, controlId)) { // Soll ignoriert werden, dass das Control nicht gefunden werden konnte?\r\n                            continue;\r\n                        } else {\r\n                            throw \"CONTROL_NOT_FOUND\";\r\n                        }\r\n                    }\r\n                }\r\n                if (action == \"removeDomAttribute\") {\r\n                    dwAjaxRemoveDomAttribute(control, command);\r\n                } else if (action == \"setDomAttribute\") {\r\n                    var key = command[2];\r\n                    var value = command[3];\r\n                    dwAjaxSetDomAttribute(control, key, value);\r\n                } else if (action == \"appendDomAttributeValue\") {\r\n                    var key = command[2];\r\n                    var value = command[3];\r\n                    dwAjaxAppendDomAttributeValue(control, key, value);\r\n                } else if (action == \"setDomMultiSelection\") {\r\n                    dwAjaxSetDomMultiSelection(control, command);\r\n                } else if (action == \"removeDomMultiSelection\") {\r\n                    dwAjaxRemoveDomMultiSelection(control, command);\r\n                } else if (action == \"setCustomMultiSelection\") {\r\n                    dwAjaxSetCustomMultiSelection(control, command);\r\n                } else if (action == \"removeCustomMultiSelection\") {\r\n                    dwAjaxRemoveCustomMultiSelection(control, command);\r\n                } else if (action == \"selectInTextField\") {\r\n                    var all = command[2] == \"true\";\r\n                    var startPos = command[3];\r\n                    var endPos = command[4];\r\n                    dwDomSelectInTextField(control, all, startPos, endPos);\r\n                } else if (action == \"setStyle\") {\r\n                    var key = command[2];\r\n                    var value = command[3];\r\n                    key = dwFrameworkCssToJavascriptProperty(key);\r\n                    dwDomSetStyle(control, key, value);\r\n                } else if (action == \"setStyleIgnoreControlNotFound\") {\r\n                    var key = command[2];\r\n                    var value = command[3];\r\n                    key = dwFrameworkCssToJavascriptProperty(key);\r\n                    dwDomSetStyle(control, key, value);\r\n                } else if (action == \"removeStyle\") {\r\n                    var key = command[2];\r\n                    key = dwFrameworkCssToJavascriptProperty(key);\r\n                    dwDomRemoveStyle(control, key);\r\n                } else if (action == \"setClass\") {\r\n                    var value = command[2];\r\n                    dwDomSetClass(control, value);\r\n                } else if (action == \"addClass\") {\r\n                    dwAjaxAddClass(control, command);\r\n                } else if (action == \"removeClass\") {\r\n                    dwAjaxRemoveClass(control, command);\r\n                } else if (action == \"removeTableRow\") {\r\n                    dwAjaxRemoveTableRow(control, command);\r\n                } else if (action == \"removeLastTableRow\") {\r\n                    dwAjaxRemoveLastTableRow(control, command);\r\n                } else if (action == \"removeTableContentRows\") {\r\n                    dwAjaxRemoveTableContentRows(control, command);\r\n                } else if (action == \"addTableRow\") {\r\n                    dwAjaxAddTableRow(control, command);\r\n                } else if (action == \"addTableRows\") {\r\n                    dwAjaxAddTableRows(control, command);\r\n                } else if (action == \"insertTableRow\") {\r\n                    dwAjaxInsertTableRow(control, command);\r\n                } else if (action == \"setDomText\") {\r\n                    dwAjaxSetDomText(control, command);\r\n                } else if (action == \"setDomNextSiblingText\") {\r\n                    dwAjaxSetDomNextSiblingText(control, command);\r\n                } else if (action == \"removeDomText\") {\r\n                    dwAjaxRemoveDomText(control, command);\r\n                } else if (action == \"removeDomSiblingText\") {\r\n                    dwAjaxRemoveDomSiblingText(control, command);\r\n                } else if (action == \"setNode\") {\r\n                    dwAjaxSetNode(control, command);\r\n                } else if (action == \"addNode\") {\r\n                    dwAjaxAddNode(control, command);\r\n                } else if (action == \"addNodes\") {\r\n                    dwAjaxAddNodes(control, command);\r\n                } else if (action == \"insertNode\") {\r\n                    dwAjaxInsertNode(control, command);\r\n                } else if (action == \"replaceNode\") {\r\n                    dwAjaxReplaceNode(control, command);\r\n                } else if (action == \"moveToFront\") {\r\n                    dwAjaxMoveToFront(control, command);\r\n                } else if (action == \"moveToBack\") {\r\n                    dwAjaxMoveToBack(control, command);\r\n                } else if (action == \"switchNodes\") {\r\n                    dwAjaxSwitchChildNodes(control, command);\r\n                } else if (action == \"removeChildNode\") {\r\n                    dwAjaxRemoveChildNode(control, command);\r\n                } else if (action == \"removeAllChildNodes\") {\r\n                    dwDomRemoveAllChildNodes(control);\r\n                } else if (action == \"removeNode\") {\r\n                    dwDomRemoveNodeById(command[1]);\r\n                } else if (action == \"addOptionNode\") {\r\n                    dwAjaxAddOptionNode(control, command);\r\n                } else if (action == \"insertOptionNode\") {\r\n                    dwAjaxInsertOptionNode(control, command);\r\n                } else if (action == \"addCheckboxListEntry\") {\r\n                    dwAjaxAddCheckboxListEntry(control, command);\r\n                } else if (action == \"insertCheckboxListEntry\") {\r\n                    dwAjaxInsertCheckboxListEntry(control, command);\r\n                } else if (action == \"removeCheckboxListEntry\") {\r\n                    dwAjaxRemoveCheckboxListEntry(control, command);\r\n                } else if (action == \"removeCustomListEntry\") {\r\n                    dwAjaxRemoveCustomListEntry(control, command);\r\n                } else if (action == \"scrollToListEntry\") {\r\n                    dwAjaxScrollToListEntry(control, command);\r\n                } else if (action == \"replaceSelf\") {\r\n                    dwAjaxReplaceSelf(control, command);\r\n                } else if (action == \"replaceParent\") {\r\n                    dwAjaxReplaceParent(control, command);\r\n                } else if (action == \"removeParent\") {\r\n                    dwAjaxRemoveParent(control, command);\r\n                } else if (action == \"setEvent\") {\r\n                    var key = command[2];\r\n                    var value = command[3];\r\n                    var withEventBubbling = (command[4] == \"true\");\r\n                    dwDomSetEvent(control, key, value, withEventBubbling);\r\n                } else if (action == \"removeEvent\") {\r\n                    var key = command[2];\r\n                    var value = command[3];\r\n                    dwDomRemoveEvent(control, key, value);\r\n                } else if (action == \"removeEventType\") {\r\n                    dwDomRemoveEventType(control, command[2]);\r\n                } else if (action == \"addEvent\") {\r\n                    var key = command[2];\r\n                    var value = command[3];\r\n                    var withEventBubbling = (command[4] == \"true\");\r\n                    dwDomAddEvent(control, key, value, withEventBubbling);\r\n                } else if (action == \"addJavascriptFileToNode\") {\r\n                    // Standard AddNode Mechanismus nicht verwendbar, der mit innerHTML arbeitet\r\n                    // Script Tags müssen clientseitig mit createElement eingebunden werden\r\n                    var filename = command[2];\r\n                    dwDomAddJavascriptFile(control, filename);\r\n                } else if (action == \"addJavascriptListenerTagForControlToNode\") {\r\n                    var objectEvent = command[2];\r\n                    var forObjectId = command[3];\r\n                    var javascriptMethods = command[4];\r\n                    dwDomAddJavascriptListenerTag(control, objectEvent, forObjectId, javascriptMethods);\r\n                } else if (action == \"removeJavascriptListenerTagForControlFromNode\") {\r\n                    var objectEvent = command[2];\r\n                    var forObjectId = command[3];\r\n                    dwDomRemoveJavascriptListenerTag(control, objectEvent, forObjectId);\r\n                } else if (action == \"addHotkeyRecursiveCallback\") {\r\n                    if (dwHotkeyRegistry != null) {\r\n                        var eventHandlerComponentId = command[1];\r\n                        var uniqueId = command[2];\r\n                        var key = command[3];\r\n                        var modifiers = command[4];\r\n                        dwHotkeyRegistry.addRecursiveCallbackHotkeyEntry(eventHandlerComponentId, uniqueId, key, modifiers);\r\n                    }\r\n                } else if (action == \"addHotkeyNearestNeighbour\") {\r\n                    if (dwHotkeyRegistry != null) {\r\n                        var eventHandlerComponentId = command[1];\r\n                        var uniqueId = command[2];\r\n                        var key = command[3];\r\n                        var modifiers = command[4];\r\n                        dwHotkeyRegistry.addNearestNeighbourHotkeyEntry(eventHandlerComponentId, uniqueId, key, modifiers);\r\n                    }\r\n                } else if (action == \"addHotkeyExecuteClick\") {\r\n                    if (dwHotkeyRegistry != null) {\r\n                        var eventHandlerComponentId = command[1];\r\n                        var uniqueId = command[2];\r\n                        var key = command[3];\r\n                        var modifiers = command[4];\r\n                        dwHotkeyRegistry.addExecuteClickHotkeyEntry(eventHandlerComponentId, uniqueId, key, modifiers);\r\n                    }\r\n                } else if (action == \"addHotkeyMnemonic\") {\r\n                    if (dwHotkeyRegistry != null) {\r\n                        var eventHandlerComponentId = command[1];\r\n                        var uniqueId = command[2];\r\n                        var key = command[3];\r\n                        var modifiers = command[4];\r\n                        dwHotkeyRegistry.addMnemonicHotkeyEntry(eventHandlerComponentId, uniqueId, key, modifiers);\r\n                    }\r\n                } else if (action == \"removeHotkeyRecursiveCallback\") {\r\n                    if (dwHotkeyRegistry != null) {\r\n                        var eventHandlerComponentId = command[1];\r\n                        var uniqueId = command[2];\r\n                        var key = command[3];\r\n                        var modifiers = command[4];\r\n                        dwHotkeyRegistry.removeRecursiveCallbackHotkeyEntry(eventHandlerComponentId, uniqueId, key, modifiers);\r\n                    }\r\n                } else if (action == \"removeHotkeyNearestNeighbour\") {\r\n                    if (dwHotkeyRegistry != null) {\r\n                        var eventHandlerComponentId = command[1];\r\n                        var uniqueId = command[2];\r\n                        var key = command[3];\r\n                        var modifiers = command[4];\r\n                        dwHotkeyRegistry.removeNearestNeighbourHotkeyEntry(eventHandlerComponentId, uniqueId, key, modifiers);\r\n                    }\r\n                } else if (action == \"removeHotkeyExecuteClick\") {\r\n                    if (dwHotkeyRegistry != null) {\r\n                        var eventHandlerComponentId = command[1];\r\n                        var uniqueId = command[2];\r\n                        var key = command[3];\r\n                        var modifiers = command[4];\r\n                        dwHotkeyRegistry.removeExecuteClickHotkeyEntry(eventHandlerComponentId, uniqueId, key, modifiers);\r\n                    }\r\n                } else if (action == \"removeHotkeyMnemonic\") {\r\n                    if (dwHotkeyRegistry != null) {\r\n                        var eventHandlerComponentId = command[1];\r\n                        var uniqueId = command[2];\r\n                        var key = command[3];\r\n                        var modifiers = command[4];\r\n                        dwHotkeyRegistry.removeMnemonicHotkeyEntry(eventHandlerComponentId, uniqueId, key, modifiers);\r\n                    }\r\n                } else if (action == \"genericSetNodeStyle\") {\r\n                    dwAjaxGenericSetNodeStyle(control, command);\r\n                } else if (action == \"genericRemoveNodeStyle\") {\r\n                    dwAjaxGenericRemoveNodeStyle(control, command);\r\n                } else if (action == \"genericSetClass\") {\r\n                    dwAjaxGenericSetClass(control, command);\r\n                } else if (action == \"genericAddClass\") {\r\n                    dwAjaxGenericAddClass(control, command);\r\n                } else if (action == \"genericRemoveClass\") {\r\n                    dwAjaxGenericRemoveClass(control, command);\r\n                } else if (action == \"genericSetDomAttribute\") {\r\n                    dwAjaxGenericSetDomAttribute(control, command);\r\n                } else if (action == \"genericRemoveDomAttribute\") {\r\n                    dwAjaxGenericRemoveDomAttribute(control, command);\r\n                } else if (action == \"genericSetDomText\") {\r\n                    dwAjaxGenericSetDomText(control, command);\r\n                } else if (action == \"genericSetDomNextSiblingText\") {\r\n                    dwAjaxGenericSetDomNextSiblingText(control, command);\r\n                } else if (action == \"genericAddNode\") {\r\n                    dwAjaxGenericAddNode(control, command);\r\n                } else if (action == \"genericInsertNode\") {\r\n                    dwAjaxGenericInsertNode(control, command);\r\n                } else if (action == \"genericInsertTableRow\") {\r\n                    dwAjaxGenericInsertTableRow(control, command);\r\n                } else if (action == \"genericRemoveNode\") {\r\n                    dwAjaxGenericRemoveNode(control, command);\r\n                } else if (action == \"genericRemoveNodes\") {\r\n                    dwAjaxGenericRemoveNodes(control, command);\r\n                } else if (action == \"genericRemoveAllChildNodes\") {\r\n                    dwAjaxGenericRemoveAllChildNodes(control, command);\r\n                } else if (action == \"genericReplaceNode\") {\r\n                    dwAjaxGenericReplaceNode(control, command);\r\n                } else if (action == \"genericRemoveEvent\") {\r\n                    dwAjaxGenericRemoveEvent(control, command);\r\n                } else if (action == \"genericRemoveEventType\") {\r\n                    dwAjaxGenericRemoveEventType(control, command);\r\n                } else if (action == \"genericAddEvent\") {\r\n                    dwAjaxGenericAddEvent(control, command);\r\n                } else if (action == \"genericScrollToNode\") {\r\n                    dwAjaxGenericScrollToNode(control, command);\r\n                } else if (action == \"genericMoveNode\") {\r\n                    dwAjaxGenericMoveNode(control, command);\r\n                } else if (action == \"setHoverClasses\") {\r\n                    dwAjaxSetHoverClasses(control, command[2]);\r\n                }\r\n            }\r\n        }\r\n        var dwAjaxTimerEnd = new Date();\r\n        if (showHint) {\r\n            var serverTimeElapsed = dwAjaxTimerClientStart.getTime() - dwAjaxTimerStart;\r\n            var clientTimeElapsed = dwAjaxTimerEnd.getTime() - dwAjaxTimerClientStart.getTime();\r\n//            var timeString = dwAjaxTimerEnd.getHours() + \":\" + dwAjaxTimerEnd.getMinutes() + \":\" + dwAjaxTimerEnd.getSeconds();\r\n            dwFrameworkShowHint(\"AJAX\", \"AJAX SERVER: \" + serverTimeElapsed + \"ms CLIENT: \" +\r\n                                        clientTimeElapsed + \"ms SIZE: \" + nrOfCharacters + \" characters\", \"#BBFFBB\", \"#000000\");\r\n        }\r\n        // Durch Änderungen am DOM könnten sich Control-Größen geändert haben und man will nicht auf die nächste Anfrage\r\n        // vom Client zum Server warten (evtl. kommt keine z.B. von Notizen -> allg. Info springen)\r\n        dwResizeRegistryGetInstance().updateSizes();\r\n    } catch (exception) {\r\n        if (typeof (exception) == \"string\") {\r\n            var text = exception;\r\n            exception = new Object();\r\n            exception.name = text;\r\n            exception.message = text;\r\n        }\r\n        var additionalInfo = (commands == null) ? \"null\" : commands[i];\r\n        dwAjaxErrorHandler(exception, additionalInfo, null, null);\r\n    }\r\n}\r\n\r\nvar ignoreControlNotFoundOnActions = [\r\n    'setStyle',\r\n    'removeStyle',\r\n    'removeDomAttribute',\r\n    'setDomAttribute',\r\n    'appendDomAttributeValue',\r\n    'removeStyle',\r\n    'genericSetNodeStyle',\r\n    'genericRemoveNodeStyle',\r\n    'genericSetDomAttribute',\r\n    'genericRemoveDomAttribute'\r\n];\r\n\r\n/**\r\n * Soll während der Abarbeitung der AJAX Updates ignoriert werden, dass das Control mit der angegebenen <i>controlId</i>\r\n * nicht gefunden werden konnte?\r\n * @param controlId\r\n * @return {@code true} falls das fehlende Control ignoriert und die Abarbeitung des aktuellen AJAX Updates abgebrochen werden soll\r\n */\r\nfunction dwAjaxIgnoreControlNotFound(action, controlId) {\r\n    if (!framework_isDevelopment) {\r\n        // Im Releasemode soll CONTROL_NOT_FOUND ignoriert werden, wenn es sich um einfache Styleänderungen handelt.\r\n        // Im Prinzip dürfte das nicht passieren, aber die Anzeige des Fehlers macht deutlich mehr Ärger, als wenn man eben die Farbe nicht setzt.\r\n        for (var i = 0; i < ignoreControlNotFoundOnActions.length; i++) {\r\n            if (action === ignoreControlNotFoundOnActions[i]) {\r\n                return true;\r\n            }\r\n        }\r\n    }\r\n\r\n    // beim Öffnen der Tastatur unter iOS können kurzfristig die Elemente von AutoClose-Popup-Fenstern\r\n    // (enden auf \"_layerdiv\" und \"_contentdiv\") nicht gefunden werden -> fehlendes Control ignorieren\r\n    if (framework_isiOS && (dwUtilsStringEndsWith(controlId, \"_layerdiv\", false) || dwUtilsStringEndsWith(controlId, \"_contentdiv\", false))) {\r\n        return true;\r\n    }\r\n    // In Einzelfällen können Komponenten im Komponentenbaum hängen, die nicht im DOM-Baum sind (z.B. Inhalte einer inaktiven TabbedPaneEntry)\r\n    // Gibt es dort dann ein HeavyWeightControl, wird bei Anzeige eines modalen Fensters setVisible geschickt. Das auf dem Server abzufangen,\r\n    // wäre sehr aufwändig, deswegen wird dann explizit mitgeschickt, dass nichtvorhandene Controls ignoriert werden sollen.\r\n    if (action == \"setStyleIgnoreControlNotFound\") {\r\n        return true;\r\n    }\r\n\r\n    return false;\r\n}\r\n\r\n/**\r\n * Lädt die Seite neu\r\n */\r\nfunction dwAjaxRefreshPage() {\r\n    dwFrameworkRefreshPageJs();\r\n}\r\n\r\n/**\r\n * Setzt den Bookmark Wert neu\r\n */\r\nfunction dwAjaxSetBookmarkValue(value) {\r\n    var oldHash = (window.location.hash.indexOf('#') == 0) ? window.location.hash.substring(1) : window.location.hash;\r\n    if (oldHash == value) {\r\n        return;\r\n    }\r\n    window.location.hash = value;\r\n    if (framework_html5HistoryEnabled) {\r\n        var state = dwFrameworkCreateBrowserHistoryState(value);\r\n\r\n        try {\r\n            history.replaceState(state, document.title, window.location.href);\r\n        } catch (exception) {\r\n        }\r\n\r\n        framework_html5HistoryCurrentState = state;\r\n    }\r\n}\r\n\r\n/**\r\n * Setzt, wieviel Kindthreads gerade im Hintergrund aktiv sind\r\n */\r\nfunction dwAjaxSetChildThreadCount(value) {\r\n    framework_childThreadCount = parseInt(value);\r\n}\r\n\r\nfunction dwAjaxAddJavascriptFile(filename) {\r\n    var head = document.getElementsByTagName(\"head\")[0];\r\n    dwDomAddJavascriptFile(head, filename);\r\n}\r\n\r\nfunction dwAjaxRemoveJavascriptFile(filename) {\r\n    var head = document.getElementsByTagName(\"head\")[0];\r\n    dwDomRemoveJavascriptFile(head, filename);\r\n}\r\n\r\nfunction dwAjaxAddJavascriptListenerTag(command) {\r\n    var objectEvent = command[1];\r\n    var forObjectId = command[2];\r\n    var methods = command[3];\r\n    var head = document.getElementsByTagName(\"head\")[0];\r\n    dwDomAddJavascriptListenerTag(head, objectEvent, forObjectId, methods);\r\n}\r\n\r\nfunction dwAjaxRemoveJavascriptListenerTag(command) {\r\n    var objectEvent = command[1];\r\n    var forObjectId = command[2];\r\n    var head = document.getElementsByTagName(\"head\")[0];\r\n    dwDomRemoveJavascriptListenerTag(head, objectEvent, forObjectId);\r\n}\r\n\r\n\r\n/**\r\n * Löscht ein Dom Attribut\r\n */\r\nfunction dwAjaxRemoveDomAttribute(control, command) {\r\n    var key = command[2];\r\n    dwDomRemoveDomAttribute(control, key);\r\n}\r\n\r\n/**\r\n * Setzt ein Dom Attribut\r\n *\r\n * @param control\r\n * @param command\r\n */\r\nfunction dwAjaxSetDomAttribute(control, key, value) {\r\n    dwDomSetDomAttribute(control, key, value);\r\n}\r\n\r\n/**\r\n * Erweitert ein (textbasiertes) Dom-Attribut\r\n * @param control\r\n * @param key\r\n * @param valueToAppend\r\n */\r\nfunction dwAjaxAppendDomAttributeValue(control, key, valueToAppend) {\r\n    dwDomAppendDomAttributeValue(control, key, valueToAppend);\r\n}\r\n\r\n/**\r\n * Selektiert Einträge in einer Multi-Select-Auswahl\r\n *\r\n * @param control\r\n * @param command\r\n */\r\nfunction dwAjaxSetDomMultiSelection(control, command) {\r\n    // GuiList Control (Multi-Selection möglich). Jeder Index durch Divider \"|\" getrennt.\r\n    // Es wird mind 1 Wert erwartet.\r\n    // prüfen ob das eigentliche objekt in dem array ist -> ansonsten deselekt\r\n    var selectionValue = command[2];\r\n    var selectedIndices = dwUtilsSplit(selectionValue, \"|\", false);\r\n    dwDomSetListSelection(control, selectedIndices);\r\n}\r\n\r\n/**\r\n * Deselektiert (alle) Einträge aus einer Multi-Select-Auswahl\r\n * @param control\r\n * @param command\r\n */\r\nfunction dwAjaxRemoveDomMultiSelection(control, command) {\r\n    var value = command[2];\r\n    if (value == null || value == undefined) {\r\n        // Alle Einträge deselektieren\r\n        dwDomSetListSelection(control, new Array());\r\n    } else {\r\n        // Dieser Fall wird aktuell noch nicht server-seitig unterstützt\r\n    }\r\n}\r\n\r\n/**\r\n * Selektiert Eitnräge in einer Multi Select Auswahl (generiert mit HtmlListRenderer).\r\n * @param control\r\n * @param command\r\n */\r\nfunction dwAjaxSetCustomMultiSelection(control, command) {\r\n    var listUniqueId = command[2];\r\n    var selectionValue = command[3];\r\n    var attribute = command[4];\r\n    var updateDisplay = (command[5] == \"true\");\r\n    var selectedIndices = dwUtilsSplit(selectionValue, \"|\", false);\r\n    dwDomSetCustomListSelection(control, listUniqueId, selectedIndices, attribute, updateDisplay);\r\n}\r\n\r\nfunction dwAjaxRemoveCustomMultiSelection(control, command) {\r\n    var listUniqueId = command[2];\r\n    var attribute = command[3];\r\n    var listControl = $(listUniqueId);\r\n    var updateDisplay = (command[5] == \"true\");\r\n    dwDomSetCustomListSelection(control, listUniqueId, new Array(), attribute, updateDisplay);\r\n    listControl.setAttribute(\"highlightedIndices\", \"\");\r\n}\r\n\r\n/**\r\n * Fügt Class Names zum Class-Attribut über Javascript Notation hinzu.\r\n *\r\n * Vorhandene Class Names bleiben dem Control erhalten.\r\n * @param control\r\n * @param command\r\n */\r\nfunction dwAjaxAddClass(control, command) {\r\n    var value = command[2]; // Leerzeichen separierte Liste\r\n    dwDomAddClass(control, value);\r\n}\r\n\r\n/**\r\n * Entfernt einen oder mehrere Class Names aus dem Class Attribut\r\n *\r\n * @param control\r\n * @param command\r\n */\r\nfunction dwAjaxRemoveClass(control, command) {\r\n    var value = command[2]; // Leerzeichen separierte Liste\r\n    dwDomRemoveClass(control, value);\r\n}\r\n\r\n/**\r\n * Löscht aus der Tabelle eine Zeile\r\n *\r\n * @param control\r\n * @param command\r\n */\r\nfunction dwAjaxRemoveTableRow(control, command) {\r\n    var index = parseInt(command[2]);\r\n    var tableRowContainer = dwDomGetRealRowContainerNode(control);\r\n    dwDomRemoveChild(tableRowContainer, index);\r\n}\r\n\r\nfunction dwAjaxRemoveLastTableRow(control, command) {\r\n    var tableRowContainer = dwDomGetRealRowContainerNode(control);\r\n    dwDomRemoveChild(tableRowContainer);\r\n}\r\n\r\n/**\r\n * Löscht alle Inhalts-Zeilen aus der Tabelle\r\n * @param control\r\n * @param command\r\n */\r\nfunction dwAjaxRemoveTableContentRows(control, command) {\r\n    var hasHeader = dwUtilsToBoolean(command[2]);\r\n    var tableRowContainer = dwDomGetRealRowContainerNode(control);\r\n    dwDomRemoveTableContentRows(tableRowContainer, hasHeader);\r\n}\r\n\r\n/**\r\n * Hängt eine Zeile an die Tabelle an\r\n *\r\n * @param control\r\n * @param command\r\n */\r\nfunction dwAjaxAddTableRow(control, command) {\r\n    control = dwDomGetRealRowContainerNode(control);\r\n    var content = command[2];\r\n    dwDomAppendChild(control, content);\r\n}\r\n\r\n/**\r\n * Fügt mehrere Zeilen hinzu\r\n *\r\n * @param control\r\n * @param command\r\n */\r\nfunction dwAjaxAddTableRows(control, command) {\r\n    control = dwDomGetRealRowContainerNode(control);\r\n    var contentArray = new Array();\r\n    for (var i = 2; i < command.length; i++) {\r\n        contentArray[i - 2] = command[i];\r\n    }\r\n    dwDomAppendChildren(control, contentArray);\r\n}\r\n\r\nfunction dwAjaxInsertTableRow(control, command) {\r\n    var rowIndex = parseInt(command[2]);\r\n    var content = command[3];\r\n    var tableRowContainer = dwDomGetRealRowContainerNode(control);\r\n    dwDomInsertChild(tableRowContainer, rowIndex, content);\r\n}\r\n\r\nfunction dwAjaxSetDomText(control, command) {\r\n    var value = command[2];\r\n    var escape = dwUtilsToBoolean(command[3]);\r\n    dwDomSetDomText(control, value, escape);\r\n}\r\n\r\nfunction dwAjaxSetDomNextSiblingText(control, command) {\r\n    var value = command[2];\r\n    var escape = dwUtilsToBoolean(command[3]);\r\n    dwDomSetDomNextSiblingText(control, value, escape);\r\n}\r\n\r\n/**\r\n * Löscht alle Text-Unterknoten eines Elements. Andere Unterknoten (wie Elemente) werden nicht entfernt\r\n *\r\n * @param control\r\n * @param command\r\n */\r\nfunction dwAjaxRemoveDomText(control, command) {\r\n    var textNodes = dwDomGetChildNodesByType(control, DWUTILS_NODE_TYPE.TEXT);\r\n    dwDomRemoveChildren(textNodes, 0, textNodes.length);\r\n}\r\n\r\n/**\r\n * Löscht den nächsten Knoten, wenn dieser vom Typ 'Text' ist\r\n * @param control\r\n * @param command\r\n */\r\nfunction dwAjaxRemoveDomSiblingText(control, command) {\r\n    var siblingNode = control.nextSibling;\r\n    // Nur löschen, wenn Sibling vorhanden und Typ 'Text'\r\n    if ((siblingNode != null) && (siblingNode.nodeType == DWUTILS_NODE_TYPE.TEXT)) {\r\n        control.parentNode.removeChild(siblingNode);\r\n    }\r\n}\r\n\r\nfunction dwAjaxSetNode(control, command) {\r\n    var index = parseInt(command[2]);\r\n    var content = command[3];\r\n\r\n}\r\n\r\n/**\r\n * Fügt einen Knoten hinzu\r\n *\r\n * @param control\r\n * @param command\r\n */\r\nfunction dwAjaxAddNode(control, command) {\r\n    var content = command[2];\r\n    dwDomAppendChild(control, content);\r\n}\r\n\r\n/**\r\n * Fügt mehrere Knoten hinzu\r\n *\r\n * @param control\r\n * @param command\r\n */\r\nfunction dwAjaxAddNodes(control, command) {\r\n    var contentArray = new Array();\r\n    for (var i = 2; i < command.length; i++) {\r\n        contentArray[i - 2] = command[i];\r\n    }\r\n    dwDomAppendChildren(control, contentArray);\r\n}\r\n\r\nfunction dwAjaxAddOptionNode(control, command) {\r\n    var value = command[2];\r\n    var label = command[3];\r\n    var option = document.createElement(\"option\");\r\n    option.text = label;\r\n    option.value = value;\r\n    if (framework_isIE) {\r\n        control.options.add(option);\r\n    } else {\r\n        control.appendChild(option);\r\n    }\r\n}\r\n\r\nfunction dwAjaxInsertOptionNode(control, command) {\r\n    var value = command[2];\r\n    var label = command[3];\r\n    var index = command[4];\r\n    var option = document.createElement(\"option\");\r\n    option.text = label;\r\n    option.value = value;\r\n    if (framework_isIE) {\r\n        control.options.add(option, index);\r\n    } else {\r\n        control.insertBefore(option, control.childNodes[index]);\r\n    }\r\n}\r\n\r\nfunction dwAjaxAddCheckboxListEntry(control, command) {\r\n    var listUniqueId = command[2];\r\n    var checkbox = command[3];\r\n    var image = command[4];\r\n    var text = command[5];\r\n    dwDomAppendCheckboxListEntry(control, listUniqueId, checkbox, image, text);\r\n}\r\n\r\nfunction dwAjaxInsertCheckboxListEntry(control, command) {\r\n    var listUniqueId = command[2];\r\n    var checkbox = command[3];\r\n    var image = command[4];\r\n    var text = command[5];\r\n    var index = command[6];\r\n    dwDomInsertCheckboxListEntry(control, listUniqueId, checkbox, image, text, index);\r\n}\r\n\r\nfunction dwAjaxRemoveCheckboxListEntry(control, command) {\r\n    var listUniqueId = command[2];\r\n    var index = command[3];\r\n    dwDomRemoveCheckboxListEntry(control, listUniqueId, index);\r\n}\r\n\r\nfunction dwAjaxRemoveCustomListEntry(control, command) {\r\n    var listUniqueId = command[2];\r\n    var index = command[3];\r\n    dwDomRemoveCustomListEntry(control, listUniqueId, index);\r\n}\r\n\r\n/**\r\n * Fügt im Dom einen Knoten hinzu\r\n *\r\n * @param control\r\n * @param command\r\n */\r\nfunction dwAjaxInsertNode(control, command) {\r\n    var itemIdx = parseInt(command[2]);\r\n    var content = command[3];\r\n    dwDomInsertChild(control, itemIdx, content);\r\n}\r\n\r\n/**\r\n * Ersetzt einen Knoten\r\n *\r\n * @param control\r\n * @param command\r\n */\r\nfunction dwAjaxReplaceNode(control, command) {\r\n    var itemIdx = parseInt(command[2]);\r\n    var content = command[3];\r\n    dwDomReplaceChild(control, itemIdx, content);\r\n}\r\n\r\n/**\r\n * Verschiebt ein Element an erste Stelle (vor Elemente und Textknoten)\r\n * @param control\r\n * @param command\r\n */\r\nfunction dwAjaxMoveToFront(control, command) {\r\n    var index = parseInt(command[2]);\r\n    dwDomMoveToFront(control, index);\r\n}\r\n\r\n/**\r\n * Verschiebt ein Element an letzte Stelle (hinter Elemente und Textknoten)\r\n * @param control\r\n * @param command\r\n */\r\nfunction dwAjaxMoveToBack(control, command) {\r\n    var index = parseInt(command[2]);\r\n    dwDomMoveToBack(control, index);\r\n}\r\n\r\n/**\r\n * Vertauscht zwei Kindelemente\r\n * @param control\r\n * @param command\r\n */\r\nfunction dwAjaxSwitchChildNodes(control, command) {\r\n    var index1 = parseInt(command[2]);\r\n    var index2 = parseInt(command[3]);\r\n    dwDomSwitchChildren(control, index1, index2);\r\n}\r\n\r\n/**\r\n * Löscht einen Kindknoten\r\n *\r\n * @param control\r\n * @param command\r\n */\r\nfunction dwAjaxRemoveChildNode(control, command) {\r\n    var itemIdx = parseInt(command[2]);\r\n    dwDomRemoveChild(control, itemIdx);\r\n}\r\n\r\nfunction dwAjaxReplaceSelf(control, command) {\r\n    var parentNode = control.parentNode;\r\n    parentNode.replaceChild(dwDomParseStringToNodes(command[2]), control);\r\n}\r\n\r\nfunction dwAjaxReplaceParent(control, command) {\r\n    dwAjaxReplaceSelf(control.parentNode, command);\r\n}\r\n\r\nfunction dwAjaxRemoveParent(control, command) {\r\n    var parent = control.parentNode;\r\n    var grandparent = parent.parentNode;\r\n    grandparent.removeChild(parent);\r\n}\r\n\r\nfunction dwAjaxGenericSetNodeStyle(control, command) {\r\n    var navigationString = command[2];\r\n    var key = command[3];\r\n    var value = command[4];\r\n    key = dwFrameworkCssToJavascriptProperty(key);\r\n    var container = dwDomFindContainer(control, navigationString, false);\r\n    dwDomSetStyle(container, key, value);\r\n}\r\n\r\nfunction dwAjaxGenericRemoveNodeStyle(control, command) {\r\n    var navigationString = command[2];\r\n    var key = command[3];\r\n    key = dwFrameworkCssToJavascriptProperty(key);\r\n    var container = dwDomFindContainer(control, navigationString, false);\r\n    dwDomSetStyle(container, key, \"\");\r\n}\r\n\r\nfunction dwAjaxGenericSetClass(control, command) {\r\n    var navigationString = command[2];\r\n    var value = command[3];\r\n    var container = dwDomFindContainer(control, navigationString, false);\r\n    dwDomSetClass(container, value);\r\n}\r\n\r\nfunction dwAjaxGenericAddClass(control, command) {\r\n    var navigationString = command[2];\r\n    var value = command[3];\r\n    var container = dwDomFindContainer(control, navigationString, false);\r\n    dwDomAddClass(container, value);\r\n}\r\n\r\nfunction dwAjaxGenericRemoveClass(control, command) {\r\n    var navigationString = command[2];\r\n    var value = command[3];\r\n    var container = dwDomFindContainer(control, navigationString, false);\r\n    dwDomRemoveClass(container, value);\r\n}\r\n\r\nfunction dwAjaxGenericSetDomAttribute(control, command) {\r\n    var navigationString = command[2];\r\n    var key = command[3];\r\n    var value = command[4];\r\n    var container = dwDomFindContainer(control, navigationString, false);\r\n    dwAjaxSetDomAttribute(container, key, value);\r\n}\r\n\r\nfunction dwAjaxGenericRemoveDomAttribute(control, command) {\r\n    var navigationString = command[2];\r\n    var key = command[3];\r\n    var container = dwDomFindContainer(control, navigationString, false);\r\n    dwAjaxRemoveDomAttribute(container, key);\r\n}\r\n\r\nfunction dwAjaxGenericSetDomText(control, command) {\r\n    var navigationString = command[2];\r\n    var text = command[3];\r\n    var escape = dwUtilsToBoolean(command[4]);\r\n    var container = dwDomFindContainer(control, navigationString, false);\r\n    dwDomSetDomText(container, text, escape);\r\n}\r\n\r\nfunction dwAjaxGenericSetDomNextSiblingText(control, command) {\r\n    var navigationPath = command[2];\r\n    var text = command[3];\r\n    var escape = dwUtilsToBoolean(command[4]);\r\n    var container = dwDomFindContainer(control, navigationPath, false);\r\n    dwDomSetDomNextSiblingText(container, text, escape);\r\n}\r\n\r\nfunction dwAjaxGenericAddNode(control, command) {\r\n    var navigationString = command[2];\r\n    var content = command[3];\r\n    var container = dwDomFindContainer(control, navigationString, true);\r\n    dwDomAppendChild(container, content);\r\n}\r\n\r\nfunction dwAjaxGenericInsertNode(control, command) {\r\n    var navigationString = command[2];\r\n    var insertAt = parseInt(command[3]);\r\n    var content = command[4];\r\n    var container = dwDomFindContainer(control, navigationString, true);\r\n    dwDomInsertChild(container, insertAt, content);\r\n}\r\n\r\nfunction dwAjaxGenericInsertTableRow(control, command) {\r\n    var navigationString = command[2]\r\n    var rowIndex = parseInt(command[3]);\r\n    var content = command[4];\r\n    var tableRowContainer = dwDomFindContainer(control, navigationString, true);\r\n    dwDomInsertChild(tableRowContainer, rowIndex, content);\r\n}\r\n\r\nfunction dwAjaxGenericRemoveNode(control, command) {\r\n    var navigationString = command[2];\r\n    var itemIdx = parseInt(command[3]);\r\n    var container = dwDomFindContainer(control, navigationString, true);\r\n    dwDomRemoveChild(container, itemIdx);\r\n}\r\n\r\nfunction dwAjaxGenericRemoveNodes(control, command) {\r\n    var navigationString = command[2];\r\n    var itemIdx = parseInt(command[3]);\r\n    var howMany = parseInt(command[4]);\r\n    var container = dwDomFindContainer(control, navigationString, true);\r\n    dwDomRemoveElementChildNodes(container, itemIdx, howMany);\r\n}\r\n\r\nfunction dwAjaxGenericRemoveAllChildNodes(control, command) {\r\n    var navigationString = command[2];\r\n    var container = dwDomFindContainer(control, navigationString, true);\r\n    dwDomRemoveAllChildNodes(container);\r\n}\r\n\r\nfunction dwAjaxGenericReplaceNode(control, command) {\r\n    var navigationString = command[2];\r\n    var itemIdx = parseInt(command[3]);\r\n    var content = command[4];\r\n    var container = dwDomFindContainer(control, navigationString, true);\r\n    dwDomReplaceChild(container, itemIdx, content);\r\n}\r\n\r\nfunction dwAjaxGenericRemoveEvent(control, command) {\r\n    var navigationString = command[2];\r\n    var eventType = command[3];\r\n    var method = command[4];\r\n    var container = dwDomFindContainer(control, navigationString, true);\r\n    dwDomRemoveEvent(container, eventType, method);\r\n}\r\n\r\nfunction dwAjaxGenericRemoveEventType(control, command) {\r\n    var navigationString = command[2];\r\n    var eventType = command[3];\r\n    var container = dwDomFindContainer(control, navigationString, true);\r\n    dwDomRemoveEventType(container, eventType);\r\n}\r\n\r\nfunction dwAjaxGenericAddEvent(control, command) {\r\n    var navigationString = command[2];\r\n    var eventType = command[3];\r\n    var method = command[4];\r\n    var container = dwDomFindContainer(control, navigationString, true);\r\n    dwDomAddEvent(container, eventType, method, false);\r\n}\r\n\r\nfunction dwAjaxGenericScrollToNode(control, command) {\r\n    var scrolledId = command[2];\r\n    var navigationPath = command[3];\r\n    var nodeIndex = parseInt(command[4]);\r\n    dwDomScrollToNode(control.id, scrolledId, navigationPath, nodeIndex);\r\n}\r\n\r\nfunction dwAjaxScrollToListEntry(control, command) {\r\n    var nodeIndex = parseInt(command[2]);\r\n    dwDomScrollToListEntry(control.id, nodeIndex);\r\n}\r\n\r\nfunction dwAjaxGenericMoveNode(control, command) {\r\n    var navigationString = command[2];\r\n    var oldNodeIndex = parseInt(command[3]);\r\n    var newNodeIndex = parseInt(command[4]);\r\n    var container = dwDomFindContainer(control, navigationString, true);\r\n    dwDomMoveNode(container, oldNodeIndex, newNodeIndex);\r\n}\r\n\r\n/**\r\n * Zeigt eine Nachricht an. Kann später in eine Javascript Konsole umgeleitet werden.\r\n * MS Status Codes (> 12000) siehe http://msdn.microsoft.com/en-us/library/windows/desktop/aa383770%28v=vs.85%29.aspx\r\n *\r\n * @param command\r\n * @param doAutoSend\r\n */\r\nfunction dwAjaxErrorHandler(exception, additionalInformation, xmlHttpStatus, xmlHttpResponseText) {\r\n    if (!framework_isActive) {\r\n        // Kann bei CTRL-R auftreten. Mittlerweile wird bei onunload framework_isActive auf false gesetzt\r\n        // damit wir das hier erkennen\r\n        return;\r\n    }\r\n    if ((exception != null) && (exception.name)) {\r\n        if ((exception.name.indexOf(\"commands was 'null'\") > 0) || // Neustart\r\n            ((xmlHttpStatus != null) && (\r\n                    (xmlHttpStatus == 0) ||    // Ajax nicht erreichbar\r\n                    (xmlHttpStatus == 404) ||  // Andere Anwendung aktiv (IPP?)\r\n                    (xmlHttpStatus == 403) ||  // Forbidden, d.h. Server neu gestartet oder wirklich forbidden\r\n                    (xmlHttpStatus == 12029))) // Connection to server failed\r\n        ) {\r\n            if (xmlHttpStatus == 403) { // Server wurde neu gestartet oder Session ist nicht mehr gültig\r\n                DWAJAX_ACTIVE = false;\r\n                if (dwFrameworkShowDevelopmentMessages()) {\r\n                    dwFrameworkShowHint(\"AJAX\", \"Invalid or expired session: \" + exception.name, \"#FF0000\", \"#000000\");\r\n                } else {\r\n                    if (xmlHttpResponseText && dwUtilsStringStartsWith(xmlHttpResponseText, \"http\", true)) {\r\n                        window.location.href = xmlHttpResponseText;\r\n                    } else {\r\n                        // Bei nicht-modalen Fenstern und einem Fehler 403 das Fenster schließen (z.B. bei einer neuen Session)\r\n                        if ((typeof (framework_isNonModalWindow) != 'undefined') && framework_isNonModalWindow) {\r\n                            dwFrameworkCloseWindowSilently = true;\r\n                            window.close();\r\n                        } else { // Bei modalen Fenstern (Hauptfenster) einen Fehlerdialog anzeigen bzgl. ungültiger Session\r\n                            // Bei Aufruf ohne Secure Start hat der Benutzer die Option die Sitzung neu zu starten\r\n                            // Beim Neustart werden die alten Startparameter berücksichtigt\r\n                            var isSecured = (typeof (framework_isSecured) != \"undefined\") && framework_isSecured;\r\n                            dwDialogShowInvalidSession(!isSecured);\r\n\r\n                            // Framework deaktivieren, so dass z.B. auch keine Notifizierung beim Schließen des Fensters mehr verschickt wird\r\n                            framework_isActive = false;\r\n                            dwFrameworkHideLostConnectionBanner();\r\n                        }\r\n                    }\r\n                }\r\n            } else {\r\n                if (dwFrameworkShowDevelopmentMessages()) {\r\n                    dwFrameworkShowHint(\"AJAX\", \"Lost connection to server: \" + exception.name, \"#FF0000\", \"#000000\");\r\n                } else {\r\n                    dwDialogShowLostConnection();\r\n                    dwFrameworkHideLostConnectionBanner();\r\n                }\r\n            }\r\n\r\n            return;\r\n        }\r\n    }\r\n\r\n    if (!exception) {\r\n        return; // Ohne Exception kein Exception Handling ...\r\n    }\r\n    var exceptionName = exception.name || \"Error\";\r\n    var exceptionMessage = exception.message || exception || \"unknown\";\r\n    var exceptionDetails = additionalInformation || \"\";\r\n    if (!framework_isDevelopment && (exceptionDetails.length > DWAJAX_ERROR_DETAIL_MAX_LENGTH)) {\r\n        exceptionDetails = exceptionDetails.substring(0, DWAJAX_ERROR_DETAIL_MAX_LENGTH) + \"...\";\r\n    }\r\n    var exceptionStack = dwFrameworkGetStacktrace(exception);\r\n\r\n    // Wenn keine ID gefunden wurde, dann den Fehler nicht loggen, weil der Request komplett ungültig ist und demzufolge\r\n    // vermutlich gar nicht vom ApplicationServer, sondern z.B. einem Login-System stammt\r\n    if (DWAJAX_LOG_ERRORS && (exceptionName != \"NO_ID_FOUND\")) {\r\n        // Direkter Aufruf von \"dwAjaxToServer\" - damit die Nachricht zuverlässig vor Anzeige eines Alerts zum Server übertragen wird (dwAjaxCurrentlySending könnte 'true' sein)\r\n        // Schliesst ein Anwender bei einer Alert Nachricht den Browser / Tab kann andernfalls die Information verloren gehen.\r\n        var message = \"@DWSUB@\" + exceptionMessage + \"@DWSUB@\" + dwAjaxErrorHandlerGetEncodedExceptionDetail(exceptionDetails) + \"@DWSUB@\";\r\n        dwAjaxToServer(new Date().getTime(), false, [\"error@DW@ajax@DW@\" + exceptionName + message +\r\n                                                     exceptionStack], true, new Date().getTime());\r\n    }\r\n    var skipDefaultHandling = false;\r\n    if (typeof (pluginOnAjaxErrorHandler) == \"function\") {\r\n        skipDefaultHandling = pluginOnAjaxErrorHandler(exception, additionalInformation, xmlHttpStatus, xmlHttpResponseText);\r\n    }\r\n\r\n    if (DWAJAX_SHOW_ERRORS && !skipDefaultHandling) {\r\n        var errorInfo = exceptionName + \": \" + exceptionMessage + \"\\n\\nStacktrace:\\n\" + exceptionStack;\r\n        if (additionalInformation != null) {\r\n            errorInfo += \"\\n\\nAdditional information:\\n\";\r\n            errorInfo += additionalInformation;\r\n        }\r\n        dwDialogShowErrorDialog(errorInfo);\r\n    }\r\n    if (DWAJAX_REFRESH_AFTER_ERROR && !skipDefaultHandling) {\r\n        dwFrameworkRefreshPageJs();\r\n    }\r\n}\r\n\r\n// Die exceptionDetails werden jetzt \"codiert\" in Form von Bytes in UTF-8, weil manche Server Sicherheitsprobleme\r\n// mit dem übertragenen HTML Code haben (aufgetreten bei Claas)\r\nfunction dwAjaxErrorHandlerGetEncodedExceptionDetail(exceptionDetails) {\r\n    var message = exceptionDetails.replace(/@DW@/g, \"@ERR@\").replace(/@DWSUB@/g, \"@ERRSUB@\");\r\n    // UTF-8 Bytes\r\n    try {\r\n        return new TextEncoder().encode(message);\r\n    } catch (exception) {\r\n        // Wenn beim Encodieren etwas schief geht, dann doch die Originalmessage übertragen\r\n        return message;\r\n    }\r\n}\r\n\r\nfunction dwAjaxServerExceptionHandler(errorString, stacktrace) {\r\n    if (DWAJAX_SHOW_EXCEPTIONS) {\r\n        var name = \"Server Exception\";\r\n        var message = errorString || \"unknown\";\r\n        var errorInfo = name + \": \" + message;\r\n        if (DWAJAX_SHOW_STACKTRACE || framework_isDevelopment) {\r\n            if (stacktrace) {\r\n                errorInfo += \"\\n\\nStacktrace:\\n\" + stacktrace;\r\n            }\r\n        }\r\n        var skipDefaultHandling = false;\r\n        if (typeof (pluginOnServerErrorHandler) == \"function\") {\r\n            skipDefaultHandling = pluginOnServerErrorHandler(name, message, stacktrace);\r\n        }\r\n        if (skipDefaultHandling) {\r\n            return;\r\n        }\r\n\r\n        dwDialogShowErrorDialog(errorInfo);\r\n    }\r\n    if (DWAJAX_REFRESH_AFTER_ERROR) {\r\n        dwFrameworkRefreshPageJs();\r\n    }\r\n}\r\n\r\n// ########### AB HIER SIND DIE DEFAULT EVENTS###########################################\r\n\r\nfunction dwAjaxDefaultOnChange(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    dwFrameworkDisableEventBubbling(event);\r\n    var control = $(controlId);\r\n\r\n    // control kann z.B. null sein, wenn im IE ein Textfeld mit OnChange-Listener entfernt wird, wo der IE (warum auch immer)\r\n    // dann nochmal einen OnInput-Event feuert, das Control aber nicht mehr im DOM vorhanden ist\r\n    if (!control) {\r\n        return;\r\n    }\r\n\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@onChangeEvent@DW@\" + eventParameters + \"@DW@\" + control.value, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxDefaultOnChangeWithDebounce(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    dwUtilsDebounce(controlId, function() {\r\n        dwAjaxDefaultOnChange(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend)\r\n    }, dwUtilsGetDebounceTime(controlId))\r\n}\r\n\r\nfunction dwAjaxDefaultOnKeyPress(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    dwFrameworkDisableEventBubbling(event);\r\n    eventParameters += \"@DWSUB@__INT_keyCode=\" + event.keyCode;\r\n    eventParameters = dwAjaxAddKeyModifiersToEventParameters(event, eventParameters);\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@keyPressedEvent@DW@\" + eventParameters, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxDefaultOnKeyUp(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    dwFrameworkDisableEventBubbling(event);\r\n    var control = $(controlId);\r\n    eventParameters += \"@DWSUB@__INT_keyCode=\" + event.keyCode;\r\n    if (event.keyCode === undefined) {\r\n        //Beim Autofill des Chrome Browsers\r\n        return;\r\n    }\r\n    eventParameters = dwAjaxAddKeyModifiersToEventParameters(event, eventParameters);\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@keyReleasedEvent@DW@\" + eventParameters + \"@DW@\" + control.value, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxDefaultOnKeyDown(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    dwFrameworkDisableEventBubbling(event);\r\n    eventParameters += \"@DWSUB@__INT_keyCode=\" + event.keyCode;\r\n    if (event.keyCode === undefined) {\r\n        //Beim Autofill des Chrome Browsers\r\n        return;\r\n    }\r\n    eventParameters = dwAjaxAddKeyModifiersToEventParameters(event, eventParameters);\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@keyTypedEvent@DW@\" + eventParameters, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n    //  var keyCode = event.keyCode ? event.keyCode : event.which;\r\n    //  var key     = String.fromCharCode(keyCode);\r\n    //  var isShiftPressed = event.shiftKey;\r\n    //  var val = control.value;\r\n    //  if (keyCode == 8) {\r\n    //     Backspace -> delete 1 char\r\n    //  } else if (keyCode >= 32 && keyCode <= 128) {\r\n    //    if (!isShiftPressed) {\r\n    //      key = key.toLowerCase();\r\n    //      val += key;\r\n    //    }\r\n    //  }\r\n    //  dwAjaxSendUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@keyTypedEvent@DW@\" + key);\r\n    //  var str = control.value;\r\n    //  if (keyCode == 8) {\r\n    //    // Backspace\r\n    //    if (control.value.length > 0) {\r\n    //      str = control.value.substring(0, control.value.length - 1);\r\n    //    }\r\n    //  } else if (keyCode == 12 || keyCode == 38 || keyCode == 40 || keyCode == 13 || keyCode == 45 || keyCode == 32 || keyCode == 18 || keyCode == 16 || keyCode == 9 || keyCode == 36 || keyCode == 115) {\r\n    //    // ignore\r\n    //    return;\r\n    //  } else {\r\n    //    str += key;\r\n    //  }\r\n\r\n    //  setTimeout(function() {dwAjaxSendUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@keyTypedEvent@DW@\" + control.value) }, 0)\r\n}\r\n\r\nfunction dwAjaxAddActualActivatingControlToEventParameters(event, control, eventParameters) {\r\n    var actualActivatingControl = dwHelperFindActualActivatingControl(control, dwUtilsGetEventTarget(event), false);\r\n    if (actualActivatingControl != null) {\r\n        if (eventParameters == \"\") {\r\n            eventParameters += \"__ID_actualActivatingControl=\" + actualActivatingControl.id;\r\n        } else {\r\n            eventParameters += \"@DWSUB@__ID_actualActivatingControl=\" + actualActivatingControl.id;\r\n        }\r\n    }\r\n\r\n    return eventParameters;\r\n}\r\n\r\nfunction dwAjaxAddKeyModifiersToEventParameters(event, eventParameters) {\r\n    if (eventParameters == \"\") {\r\n        eventParameters = \"strgKeyPressed=\" + event.ctrlKey;\r\n    } else {\r\n        eventParameters += \"@DWSUB@strgKeyPressed=\" + event.ctrlKey;\r\n    }\r\n    eventParameters += \"@DWSUB@shiftKeyPressed=\" + event.shiftKey;\r\n\r\n    return eventParameters;\r\n}\r\n\r\nfunction dwAjaxDefaultOnClick(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    // Abfrage auf event.defaultPrevented verhindert bei touch-Emulation das mehrfache Ausführen eines Events.\r\n    // Die fehlende Unterstützung von event.defaultPrevented für IE8 spielt bei Touch-Emulation keine Rolle\r\n    if ((event != null) && event.defaultPrevented) {\r\n        return;\r\n    }\r\n\r\n//    dwUtilsDebugWrite(new Date() + \" onClick\");\r\n    dwFrameworkDisableEventBubbling(event);\r\n    var eventTarget = dwUtilsGetEventTarget(event);\r\n\r\n    // Damit wir keinen Klick doppelt machen, sondern einen Doppelklick\r\n    if ((typeof (ajaxLastClickTarget) != \"undefined\") && (ajaxLastClickTarget == eventTarget)) {\r\n        // das zuletzt geklickte Element war dasselbe\r\n        if ((ajaxLastClickTime + DWUTILS_DOUBLE_CLICK_TIME >= new Date().getTime())) {\r\n            // Innerhalb von 250ms auf dasselbe Element geklickt, wir ignorieren das Event, weil dann ein Doppelklick gefeuert wird\r\n            return;\r\n        }\r\n    }\r\n\r\n    ajaxLastClickTime = new Date().getTime();\r\n    ajaxLastClickTarget = eventTarget;\r\n\r\n    eventParameters = dwAjaxAddActualActivatingControlToEventParameters(event, $(controlId), eventParameters);\r\n    eventParameters = dwAjaxAddKeyModifiersToEventParameters(event, eventParameters);\r\n    var control = $(controlId);\r\n    var coords = dwUtilsGetLocationOnWindow(control, true, true);\r\n    eventParameters += \"@DWSUB@__POINT_controlPosition=\" + coords.x + \":\" + coords.y; // Sendet die aktuellen Koordinaten an den Server.\r\n    // Koordinaten können z.B. für die Positionierung von GuiWindows verwendet werden\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@mouseClickedEvent@DW@\" + eventParameters, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxDefaultOnDblClick(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    // Abfrage auf event.defaultPrevented verhindert bei touch-Emulation das mehrfache Ausführen eines Events.\r\n    // Die fehlende Unterstützung von event.defaultPrevented für IE8 spielt bei Touch-Emulation keine Rolle\r\n    if ((event != null) && event.defaultPrevented) {\r\n        return;\r\n    }\r\n\r\n//    dwUtilsDebugWrite(new Date() + \" onDblClick\");\r\n    dwFrameworkDisableEventBubbling(event);\r\n\r\n    var eventTarget = dwUtilsGetEventTarget(event);\r\n\r\n    // Damit wir nich zwei Doppelklicks ausführen\r\n    if ((typeof (ajaxLastDoubleClickTarget) != \"undefined\") && (ajaxLastDoubleClickTarget == eventTarget)) {\r\n        // das zuletzt doppelgeklickte Element war dasselbe\r\n        if ((ajaxLastDoubleClickTime + DWUTILS_DOUBLE_CLICK_TIME >= new Date().getTime())) {\r\n            // Innerhalb von 250ms kommen zwei Doppelklick Events auf dasselbe Element, wir ignorieren das Event\r\n            return;\r\n        }\r\n    }\r\n    ajaxLastDoubleClickTime = new Date().getTime();\r\n    ajaxLastDoubleClickTarget = eventTarget;\r\n\r\n    eventParameters = dwAjaxAddActualActivatingControlToEventParameters(event, $(controlId), eventParameters);\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@mouseDoubleClickedEvent@DW@\" + eventParameters, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxDefaultOnRightClick(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    //    dwUtilsDebugWrite(new Date() + \" onClick\");\r\n    dwFrameworkDisableEventBubbling(event);\r\n\r\n    if (eventParameters == \"\") {\r\n        eventParameters = \"strgKeyPressed=\" + event.ctrlKey;\r\n    } else {\r\n        eventParameters += \"@DWSUB@strgKeyPressed=\" + event.ctrlKey;\r\n    }\r\n    var control = $(controlId);\r\n    var coords = dwUtilsGetLocationOnWindow(control, true, true);\r\n    eventParameters += \"@DWSUB@__POINT_controlPosition=\" + coords.x + \":\" + coords.y; // Sendet die aktuellen Koordinaten an den Server.\r\n    // Koordinaten können z.B. für die Positionierung von GuiWindows verwendet werden\r\n    var mousePoint = dwUtilsGetCurrentMousePositionPerEvent(event);\r\n    eventParameters += \"@DWSUB@__POINT_mousePoint=\" + mousePoint.x + \":\" + mousePoint.y; // Koordinaten des Mouse Clicks (in Bezug auf Viewport)\r\n\r\n    eventParameters = dwAjaxAddActualActivatingControlToEventParameters(event, control, eventParameters);\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@mouseRightClickedEvent@DW@\" + eventParameters, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxDefaultOnMouseEnter(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    if (!dwFrameworkInitFinished) {\r\n        return;\r\n    }\r\n    dwFrameworkDisableEventBubbling(event);\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@mouseEnteredEvent@DW@\" + eventParameters, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxDefaultOnMouseLeave(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    if (!dwFrameworkInitFinished) {\r\n        return;\r\n    }\r\n    dwFrameworkDisableEventBubbling(event);\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@mouseExitedEvent@DW@\" + eventParameters, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxDefaultOnMouseOver(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    if (!dwFrameworkInitFinished) {\r\n        return;\r\n    }\r\n    dwFrameworkDisableEventBubbling(event);\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@mouseMovedOverEvent@DW@\" + eventParameters, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxDefaultOnMouseOut(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    if (!dwFrameworkInitFinished) {\r\n        return;\r\n    }\r\n    dwFrameworkDisableEventBubbling(event);\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@mouseMovedOutEvent@DW@\" + eventParameters, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxDefaultOnMouseMove(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    if (!dwFrameworkInitFinished) {\r\n        return;\r\n    }\r\n    dwFrameworkDisableEventBubbling(event);\r\n    var eventHandler = $(eventHandlerComponentId);\r\n    if (!eventHandler.mouseMoveIntervalTimer) {\r\n        eventHandler.mouseMoveIntervalTimer = window.setInterval(function() {\r\n            eventHandler.mouseMoveEventGranted = true;\r\n            if (eventHandler.mouseMovedTimestamp && ((eventHandler.mouseMovedTimestamp + 3000) < new Date().getTime())) {\r\n                // Bei 3 Sekunden Inaktivität wird das Intervall gestoppt ...\r\n                window.clearInterval(eventHandler.mouseMoveIntervalTimer);\r\n                eventHandler.mouseMoveIntervalTimer = null;\r\n            }\r\n        }, 100); // Intervall übermittelt alle 100ms eine neue Positionsangabe an den Server\r\n    }\r\n    if (!eventHandler.mouseMoveEventGranted) {\r\n        return;\r\n    }\r\n    eventHandler.mouseMoveEventGranted = false;\r\n    var relMouseCoords = dwUtilsGetRelMouseCoords(event, $(eventHandlerComponentId));\r\n    if (eventHandler.mousePoint && (eventHandler.mousePoint.x == relMouseCoords.x) && (eventHandler.mousePoint.y == relMouseCoords.y)) {\r\n        return; // Aktuelle Position hat sich nicht geändert...\r\n    }\r\n    eventHandler.mousePoint = relMouseCoords;\r\n    eventHandler.mouseMovedTimestamp = new Date().getTime();\r\n    if (eventParameters.length > 0) {\r\n        eventParameters += \"@DWSUB@\";\r\n    }\r\n    eventParameters += \"__POINT_mousePoint=\" + relMouseCoords.x + \":\" + relMouseCoords.y;\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@mouseMovedEvent@DW@\" + eventParameters, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxAddMouseButtonToEventParameters(event, eventParameters) {\r\n    var mouseButton = 0;\r\n    if (event.which) { // Browser außer IE\r\n        mouseButton = event.which;\r\n    } else if (event.button) { // IE\r\n        if (event.button == 1) { // Links (Bit 1)\r\n            mouseButton = 1;\r\n        } else if (event.button == 4) { // Mitte (Bit 3)\r\n            mouseButton = 2;\r\n        } else if (event.button == 3) { // Rechts (Bit 2)\r\n            mouseButton = 3;\r\n        }\r\n    }\r\n\r\n    if (eventParameters == \"\") {\r\n        eventParameters = \"mouseButton=\" + mouseButton;\r\n    } else {\r\n        eventParameters += \"@DWSUB@mouseButton=\" + mouseButton;\r\n    }\r\n\r\n    return eventParameters;\r\n}\r\n\r\nfunction dwAjaxDefaultOnMouseDown(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    // Abfrage auf event.defaultPrevented verhindert bei touch-Emulation das mehrfache Ausführen eines Events.\r\n    // Die fehlende Unterstützung von event.defaultPrevented für IE8 spielt bei Touch-Emulation keine Rolle\r\n    if ((event != null) && event.defaultPrevented) {\r\n        return;\r\n    }\r\n\r\n    dwFrameworkDisableEventBubbling(event);\r\n\r\n    eventParameters = dwAjaxAddActualActivatingControlToEventParameters(event, $(controlId), eventParameters);\r\n    eventParameters = dwAjaxAddMouseButtonToEventParameters(event, eventParameters);\r\n    eventParameters = dwAjaxAddKeyModifiersToEventParameters(event, eventParameters);\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@mousePressedEvent@DW@\" + eventParameters, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxDefaultOnMouseUp(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    // Abfrage auf event.defaultPrevented verhindert bei touch-Emulation das mehrfache Ausführen eines Events.\r\n    // Die fehlende Unterstützung von event.defaultPrevented für IE8 spielt bei Touch-Emulation keine Rolle\r\n    if ((event != null) && event.defaultPrevented) {\r\n        return;\r\n    }\r\n\r\n    //Das Event soll explizit nicht zum Server geschickt werden\r\n    if ((event != null) && event.skipServer) {\r\n        return;\r\n    }\r\n\r\n    dwFrameworkDefaultClose(event);\r\n    dwFrameworkDisableEventBubbling(event);\r\n\r\n    eventParameters = dwAjaxAddActualActivatingControlToEventParameters(event, $(controlId), eventParameters);\r\n    eventParameters = dwAjaxAddMouseButtonToEventParameters(event, eventParameters);\r\n    eventParameters = dwAjaxAddKeyModifiersToEventParameters(event, eventParameters);\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@mouseReleasedEvent@DW@\" + eventParameters, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxDefaultOnResize(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    // Abfrage auf event.defaultPrevented verhindert bei touch-Emulation das mehrfache Ausführen eines Events.\r\n    // Die fehlende Unterstützung von event.defaultPrevented für IE8 spielt bei Touch-Emulation keine Rolle\r\n    if ((event != null) && event.defaultPrevented) {\r\n        return;\r\n    }\r\n\r\n    if (eventParameters != \"\") {\r\n        eventParameters += \"@DWSUB@\";\r\n    }\r\n    var control = $(controlId);\r\n    eventParameters += \"newWidth=\" + control.clientWidth;\r\n    eventParameters += \"@DWSUB@newHeight=\" + control.clientHeight;\r\n    eventParameters += \"@DWSUB@hasVerticalOverflow=\" + dwUtilsHasVerticalOverflow(control);\r\n    eventParameters += \"@DWSUB@hasHorizontalOverflow=\" + dwUtilsHasHorizontalOverflow(control);\r\n\r\n    dwFrameworkDisableEventBubbling(event);\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@onresizeEvent@DW@\" + eventParameters, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\n\r\n// AB HIER SIND DIE CUSTOM EVENTS\r\n\r\nfunction dwAjaxMenuItemOnClick(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    dwFrameworkDisableEventBubbling(event);\r\n    // Bei Klick der rechten Maustaste wir das Contextmenü angezeigt und die Id der zugeordneten Komponente in dem\r\n    // versteckten Input-Field abgespeichert. Wir lesen uns die ID aus und ergänzen die Event-Parameter die zum\r\n    // Server gesendet werden\r\n    var guiWindowId = \"\";\r\n    var paramArray = eventParameters.split(\"@DWSUB@\");\r\n    var guiWindowIdString = \"guiWindowId=\";\r\n    for (var i = 0; i < paramArray.length; i++) {\r\n        var paramVal = paramArray[i];\r\n        if (dwUtilsStringStartsWith(paramVal, guiWindowIdString, false)) {\r\n            guiWindowId = paramVal.substring(guiWindowIdString.length);\r\n            break;\r\n        }\r\n    }\r\n\r\n    var activatingControl = $(guiWindowId + \"___ID_activatingControl\");\r\n    var activatingControlId = activatingControl.value;\r\n    if (activatingControlId == \"\") {\r\n        // Es handelt sich nicht um ein Popup-Menu sondern um einen Click auf einen Menubar Eintrag\r\n        // In diesem Fall ist das aufrufende Control die Komponente mit der eventHandlerComponentId\r\n        activatingControlId = eventHandlerComponentId;\r\n    }\r\n    var activatingControlParam = \"__ID_activatingControl=\" + activatingControlId;\r\n    if (eventParameters != \"\") {\r\n        eventParameters += \"@DWSUB@\";\r\n    }\r\n    eventParameters += activatingControlParam;\r\n    var actualActivatingControl = $(guiWindowId + \"___ID_actualActivatingControl\");\r\n    var actualActivatingControlValue = actualActivatingControl.value;\r\n    if (actualActivatingControlValue != \"\") {\r\n        var actualActivatingControlParam;\r\n        if (actualActivatingControlValue.indexOf(\"|PATH|\") == 0) {\r\n            actualActivatingControlValue = actualActivatingControlValue.substring(\"|PATH|\".length);\r\n            // ID konnte nicht genau bestimmt werden. Navigationspfad wurde ermittelt (von EventHandler zu EventTarget)\r\n            actualActivatingControlParam = \"__PATH_actualActivatingControl=\" + activatingControlId + \"|PATH|\" + actualActivatingControlValue;\r\n        } else {\r\n            actualActivatingControlParam = \"__ID_actualActivatingControl=\" + actualActivatingControlValue;\r\n        }\r\n        eventParameters += \"@DWSUB@\";\r\n        eventParameters += actualActivatingControlParam;\r\n    }\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@menuItemEvent@DW@\" + eventParameters, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxButtonOnClick(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    // Ergänzung der Vollständigkeit halber auch hier ... (wird mitunter aus einem onclick ausgelöst ...)\r\n    // Abfrage auf event.defaultPrevented verhindert bei touch-Emulation das mehrfache Ausführen eines Events.\r\n    // Die fehlende Unterstützung von event.defaultPrevented für IE8 spielt bei Touch-Emulation keine Rolle\r\n    if ((event != null) && event.defaultPrevented) {\r\n        return;\r\n    }\r\n\r\n    dwFrameworkDisableEventBubbling(event);\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@actionPerformedEvent@DW@\" + eventParameters, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxCheckboxOnChange(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    dwFrameworkDisableEventBubbling(event);\r\n    var control = $(controlId);\r\n    if ((typeof (control.getAttribute('disabled')) != \"undefined\") && (control.getAttribute('disabled') == 'disabled')) {\r\n        return;\r\n    }\r\n    if ((event.type.toLowerCase() == \"click\") || (event.type.toLowerCase() == \"mousedown\")) {\r\n        // Click (Stand 11.04.2016). Zusätzlich wird vorausschauend auch auf ein potentielles mousedown reagiert (radio button wurde abgeändert)\r\n        // Es ist nicht anzunehmen, dass beide Listener auf dem Control registriert sind und diesen Befehl auslösen können\r\n        control.checked = !control.checked;\r\n        // On Change wird anscheined nicht gerufen, daher springen wir nicht mit return raus\r\n    }\r\n    // Übergebene controlId ist <uniqueId>_input\r\n    // Server erwartet die uniqueId zur weiteren Update/Event-Verarbeitung\r\n    var controlIdLength = controlId.length - \"_input\".length;\r\n    controlId = controlId.substring(0, controlIdLength);\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@onChangeEvent@DW@\" + eventParameters + \"@DW@\" + control.checked, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxRadioButtonOnChange(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    dwFrameworkDisableEventBubbling(event);\r\n    var control = $(controlId);\r\n    if ((typeof (control.getAttribute('disabled')) != \"undefined\") && (control.getAttribute('disabled') == 'disabled')) {\r\n        return;\r\n    }\r\n    if ((event.type.toLowerCase() == \"click\") || (event.type.toLowerCase() == \"mousedown\")) {\r\n        // mousedown (Stand 11.04.2016). Zusätzlich wird weiterhin auch auf ein potentielles click reagiert\r\n        // Es ist nicht anzunehmen, dass beide Listener auf dem Control registriert sind und diesen Befehl auslösen können\r\n        dwDomSetDomAttribute(control, \"checked\", \"true\");\r\n        control.checked = true;\r\n        // On Change wird anscheined nicht gerufen, daher springen wir nicht mit return raus\r\n    }\r\n\r\n    // Übergebene controlId ist <uniqueId>_input\r\n    // Server erwartet die uniqueId zur weiteren Update/Event-Verarbeitung\r\n    var controlIdLength = controlId.length - \"_input\".length;\r\n    controlId = controlId.substring(0, controlIdLength);\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@onChangeEvent@DW@\" + eventParameters + \"@DW@\" + control.checked, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxListOnChange(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    dwFrameworkDisableEventBubbling(event);\r\n    var control = $(controlId);\r\n    var command = eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@onChangeEvent@DW@\" + eventParameters;\r\n    for (var i = 0; i < control.options.length; i++) {\r\n        if (control.options[i].selected) {\r\n            command += \"@DW@\" + i;\r\n        }\r\n    }\r\n    dwAjaxAddUpdate(command, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxGuiViewerImagePanPositionChanged(eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    var command = eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@imagePanPositionChangedEvent@DW@pos=\" + eventParameters;\r\n    dwAjaxAddUpdate(command, doAutoSend, true);\r\n}\r\n\r\nfunction dwAjaxGuiViewerImagePanOpenStateChanged(eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    var command = eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@imagePanOpenStateChangedEvent@DW@state=\" + eventParameters;\r\n    dwAjaxAddUpdate(command, doAutoSend, true);\r\n}\r\n\r\nfunction dwAjaxGuiViewerImageZoomToRectStateChanged(eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    var command = eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@imageZoomToRectStateChangedEvent@DW@state=\" + eventParameters;\r\n    dwAjaxAddUpdate(command, doAutoSend, true);\r\n}\r\n\r\nfunction dwAjaxCustomListOnChange(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    dwFrameworkDisableEventBubbling(event);\r\n    var index = dwAjaxGetEventParameterValue(eventParameters, \"index\");\r\n    var attribute = dwAjaxGetEventParameterValue(eventParameters, \"attribute\");\r\n    var listUniqueId = dwAjaxGetEventParameterValue(eventParameters, \"listUniqueId\");\r\n    dwHelperUpdateListSelectionIndices(event, controlId, listUniqueId, index, attribute);\r\n    var selectedIndicesNode = $(listUniqueId + \"_selectedindices\"); // Input type hidden. Wert in Helper Methode aktualisiert\r\n    var selectedIndices = dwUtilsSplit(dwDomGetDomAttribute(selectedIndicesNode, \"value\"), \"|\", false);\r\n    var command = eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@onChangeEvent@DW@\" + eventParameters;\r\n    for (var i = 0; i < selectedIndices.length; i++) {\r\n        command += \"@DW@\" + selectedIndices[i];\r\n    }\r\n    dwAjaxAddUpdate(command, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxOnFileSelection(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    dwFrameworkDisableEventBubbling(event);\r\n    var target = dwUtilsGetEventTarget(event);\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@fileSelectedEvent@DW@\" + eventParameters + \"@DW@\" + target.value, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxTreeNodeExpansion(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    dwFrameworkDisableEventBubbling(event);\r\n    if ((typeof (event.returnValue) != \"undefined\") && !event.returnValue) {\r\n        return;\r\n    }\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@treeExpansionEvent@DW@\" + eventParameters, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxTreeNodeCollapse(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    dwFrameworkDisableEventBubbling(event);\r\n    if ((typeof (event.returnValue) != \"undefined\") && !event.returnValue) {\r\n        return;\r\n    }\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@treeCollapseEvent@DW@\" + eventParameters, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxTreeNodeSelection(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    dwFrameworkDisableEventBubbling(event);\r\n    if ((typeof (event.returnValue) != \"undefined\") && !event.returnValue) {\r\n        return;\r\n    }\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@treeSelectionEvent@DW@\" + eventParameters, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxTableRowSelection(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    dwFrameworkDisableEventBubbling(event);\r\n    if ((typeof (event.returnValue) != \"undefined\") && !event.returnValue) {\r\n        return;\r\n    }\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@tableSelectionEvent@DW@\" + eventParameters\r\n                    + \"@DW@\" + event.ctrlKey + \"@DW@\" + event.shiftKey, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxTreeTableRowSelection(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    dwFrameworkDisableEventBubbling(event);\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@treeTableSelectionEvent@DW@\" + eventParameters\r\n                    + \"@DW@\" + event.ctrlKey + \"@DW@\" + event.shiftKey, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxTableScrolled(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    dwFrameworkDisableEventBubbling(event);\r\n    if (eventParameters.length > 0) {\r\n        eventParameters += \"@DWSUB@\";\r\n    }\r\n    var tableContentScroller = $(eventHandlerComponentId + \"_contentDiv\");\r\n    if (!tableContentScroller) {\r\n        // In älteren Browsern wird ggf. bereits ein scrolled Event ausgelöst bevor der gesamte Inhalt aufgebaut wurde\r\n        // Event macht keinen Sinn ohne Zugriff auf die eig. Werte.\r\n        return;\r\n    }\r\n    eventParameters += \"__INT_xScrollOffset=\" + tableContentScroller.scrollLeft + \"@DWSUB@__INT_yScrollOffset=\" + tableContentScroller.scrollTop;\r\n\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@tableScrolledEvent@DW@\" + eventParameters, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxToggleButton(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    dwFrameworkDisableEventBubbling(event);\r\n    dwHelperToggleButton($(controlId));\r\n    dwAjaxButtonOnClick(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxImageHotspotOnClick(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    dwFrameworkDisableEventBubbling(event);\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@imageHotspotClickedEvent@DW@\" + eventParameters, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxImageHotspotOnDoubleClick(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    dwFrameworkDisableEventBubbling(event);\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@imageHotspotDoubleClickedEvent@DW@\" + eventParameters, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxImageLoaded(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    dwFrameworkDisableEventBubbling(event);\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@imageLoadedEvent@DW@\" + eventParameters, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxInvisibleUriLoaded(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@invisibleUriLoadedEvent@DW@\" + eventParameters, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\n/**\r\n * Aktualisiert die Dividerposition der Splitpane Komponente\r\n * @param event\r\n * @param eventHandlerComponentId\r\n * @param controlId\r\n * @param eventParameters\r\n * @param doAutoSend\r\n */\r\nfunction dwAjaxSplitpaneDragging(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    var splitpaneDividerTextField = $(controlId + \"_dividerPosition\");\r\n    if (splitpaneDividerTextField == null) {   // kann passieren, wenn die Komponente durch den ersten Klick schon ausgeblendet wurde\r\n        dwSplitDragStopEvent(event);         // da mouseUp u.U. nicht mehr kommt, explizit aufrufen, um Dragaktion abzubrechen\r\n        return;\r\n    }\r\n    var splitpaneDividerPosition = parseInt(splitpaneDividerTextField.value);\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@splitpaneDividerMovingEvent@DW@\" + eventParameters\r\n                    + \"@DW@\" + splitpaneDividerPosition, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxFocusLost(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@onFocusLostEvent@DW@\" + eventParameters, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxFocusGained(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@onFocusGainedEvent@DW@\" + eventParameters, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\n/**\r\n * Aktualisiert die Dividerposition der Splitpane Komponente\r\n * @param event\r\n * @param eventHandlerComponentId\r\n * @param controlId\r\n * @param eventParameters\r\n * @param doAutoSend\r\n */\r\nfunction dwAjaxSplitpaneDragged(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    var splitpaneDividerTextField = $(controlId + \"_dividerPosition\");\r\n    var splitpaneDividerPosition = parseInt(splitpaneDividerTextField.value);\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@splitpaneDividerMovedEvent@DW@\" + eventParameters\r\n                    + \"@DW@\" + splitpaneDividerPosition, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxTableColumnResized(event, eventHandlerComponentId, controlId, index, eventParameters, doAutoSend) {\r\n    var textfieldId = controlId + \"_columnWidth_\" + index;\r\n    var textfield = $(textfieldId);\r\n    var newWidth = parseInt(textfield.value);\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@tableColumnResizedEvent@DW@\" + eventParameters + \"@DWSUB@index=\" + index + \"@DWSUB@newWidth=\" + newWidth, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxTableSort(event, eventHandlerComponentId, controlId, index, eventParameters, doAutoSend) {\r\n    var control = $(controlId);\r\n    var coords = dwUtilsGetLocationOnWindow(control, true, true);\r\n    if (eventParameters != \"\") {\r\n        eventParameters += \"@DWSUB@\";\r\n    }\r\n    eventParameters += \"__POINT_controlPosition=\" + coords.x + \":\" + coords.y; // Sendet die aktuellen Koordinaten an den Server.\r\n    // Koordinaten können z.B. für die Positionierung von speziellen Popup-Menüs für Sortierung oder Filterung verwendet werden\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@tableColumnSortedEvent@DW@\" + eventParameters + \"@DW@\" + index, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxTabbedPaneTabChanged(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    var headerLink = dwUtilsFindMatchingNodes($(eventHandlerComponentId), dwUtilsGetEventTarget(event), function(rootNode, node) {\r\n        return (node.tagName) && (node.tagName.toLowerCase() == \"th\");\r\n    }, true);\r\n    if (headerLink.length == 0) {\r\n        return;\r\n    }\r\n    var index = dwUtilsStringAfter(headerLink[0].id, \"_link\");\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@tabbedPaneTabChangedEvent@DW@\" + eventParameters + \"@DW@\" + index, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxTabbedPaneCustomRemoveTab(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    var headerLink = dwUtilsFindMatchingNodes($(eventHandlerComponentId), dwUtilsGetEventTarget(event), function(rootNode, node) {\r\n        return (node.tagName) && (node.tagName.toLowerCase() == \"th\");\r\n    }, true);\r\n    if (headerLink.length == 0) {\r\n        return;\r\n    }\r\n    var index = dwUtilsStringAfter(headerLink[0].id, \"_link\");\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@__custom_RemoveTab@DW@\" + eventParameters + \"@DW@\" + index, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxScrollpaneScrolled(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    if (!dwHelperHasScrollPaneValueChanged(controlId)) {\r\n        return;\r\n    }\r\n\r\n    dwHelperScrollPaneValueChanged(controlId);\r\n    var div = $(controlId);\r\n    if (div != null) {\r\n        var vertical = parseInt(div.scrollTop);\r\n        var horizontal = parseInt(div.scrollLeft);\r\n        if (eventParameters != \"\") {\r\n            eventParameters += \"@DWSUB@\";\r\n        }\r\n        eventParameters += \"left=\" + horizontal + \"@DWSUB@\";\r\n        eventParameters += \"top=\" + vertical + \"@DWSUB@\";\r\n        eventParameters += \"scrollWidth=\" + parseInt(div.scrollWidth) + \"@DWSUB@\"\r\n        eventParameters += \"scrollHeight=\" + parseInt(div.scrollHeight) + \"@DWSUB@\";\r\n        eventParameters += \"divWidth=\" + parseInt(div.clientWidth) + \"@DWSUB@\";\r\n        eventParameters += \"divHeight=\" + parseInt(div.clientHeight) + \"@DWSUB@\";\r\n        dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@scrollpaneScrolledEvent@DW@\" + eventParameters\r\n                        + \"@DW@\" + horizontal + \"@DW@\" + vertical, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n    }\r\n}\r\n\r\nfunction dwAjaxWindowClosing(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    dwFrameworkDisableEventBubbling(event);\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@closingEvent@DW@\" + eventParameters, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxWindowToggleMaximize(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    dwFrameworkDisableEventBubbling(event);\r\n\r\n    dwFrameworkToggleGuiWindowMaximized(controlId);\r\n\r\n    // Resize Listener müssen wir informieren\r\n    dwResizeRegistryGetInstance().updateSizes();\r\n\r\n\r\n    eventParameters += \"@DWSUB@toggleMaximized=true\";\r\n    return dwAjaxDefaultOnResize(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxDefaultTooltipShow(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    var preventTooltip = !dwTooltip_isTooltipEventAllowed(event, $(controlId));\r\n    if (preventTooltip) {\r\n        return;\r\n    }\r\n    event.preventTooltip = true;\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@tooltipWillShowEvent@DW@\" + eventParameters, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxSpinnerOnChange(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    dwFrameworkDisableEventBubbling(event);\r\n    var direction = dwAjaxGetEventParameterValue(eventParameters, \"direction\");\r\n    var newValue = $(controlId + \"_input\").value;\r\n    if (direction != null) {\r\n        if (direction.toLowerCase() == \"next\") {\r\n            newValue = dwHelperSetNextSpinnerValue(controlId);\r\n        } else if (direction.toLowerCase() == \"previous\") {\r\n            newValue = dwHelperSetPreviousSpinnerValue(controlId);\r\n        }\r\n    }\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@onChangeEvent@DW@\" + eventParameters + \"@DW@\" + newValue, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxDefaultOnHotkeyEvent(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    dwFrameworkDisableEventBubbling(event);\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@hotkeyEvent@DW@\" + eventParameters, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxDefaultOnTouchEvent(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@touchEvent@DW@\" + eventParameters, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxDefaultOnDisplayOrientationChanged(eventParameters, doAutoSend) {\r\n    // die ID des aktuellen Fensters auslesen und als eventHandlerComponentId und controlId verwenden\r\n    var windowId = null;\r\n    var nodes = dwDomGetChildrenByTagname(document.forms[0], \"input\");\r\n    for (var i = 0; i < nodes.length; i++) {\r\n        if (nodes[i].getAttribute(\"name\") == \"__windowid\") {\r\n            windowId = nodes[i].getAttribute(\"value\");\r\n            break;\r\n        }\r\n    }\r\n    if (windowId != null) {\r\n        dwAjaxAddUpdate(windowId + \"@DW@\" + windowId + \"@DW@displayOrientationChangedEvent@DW@\" + eventParameters, doAutoSend, true);\r\n    }\r\n}\r\n\r\nfunction dwAjaxFireCustomEvent(eventHandlerComponentId, controlId, customEventType, eventParameters, doAutoSend) {\r\n    dwAjaxFireCustomEventWithEvent(null, eventHandlerComponentId, controlId, customEventType, eventParameters, doAutoSend, true);\r\n}\r\n\r\nfunction dwAjaxFireCustomEventWithEvent(event, eventHandlerComponentId, controlId, customEventType, eventParameters, doAutoSend) {\r\n    if ((event != null) && event.dwTouch) {\r\n        eventParameters += \"@DWSUB@\" + \"dwTouch=true\";\r\n    }\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@__custom_\" + customEventType + \"@DW@\" + eventParameters, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\n/**\r\n * Liest aus den übergebenen Event Parametern den Wert für den gewünschten Key aus\r\n * @param eventParameters\r\n * @param parameterKey\r\n * @return Wert oder NULL wenn key nicht gefunden\r\n */\r\nfunction dwAjaxGetEventParameterValue(eventParameters, parameterKey) {\r\n    var paramArray = eventParameters.split(\"@DWSUB@\");\r\n    var paramSearchId = parameterKey += \"=\";\r\n    for (var i = 0; i < paramArray.length; i++) {\r\n        var paramEntry = paramArray[i];\r\n        if (dwUtilsStringStartsWith(paramEntry, paramSearchId, false)) {\r\n            return paramEntry.substring(paramSearchId.length);\r\n        }\r\n    }\r\n    return null;\r\n}\r\n\r\nfunction dwAjaxIsAsynchronousCommand(event) {\r\n    event = dwFrameworkGetEvent(event);\r\n    if (typeof (event) == 'undefined') {\r\n        return true; // Default\r\n    }\r\n    if (typeof (window.dw_asynchronous) != 'undefined') {\r\n        // Im IE8 (oder compat mode) kann ggf. das Event Objekt verändert werden\r\n        return window.dw_asynchronous;\r\n    }\r\n    if (typeof (event.asynchronous) == 'undefined') {\r\n        return true; // Kann z.B. vorkommen, wenn Events manuell erzeugt werden ...\r\n    }\r\n    return event.asynchronous;\r\n}\r\n\r\nfunction dwAjaxReturnPdfData(controlId, transactionid, arraybuffer) {\r\n    var result = dwUtilArrayBufferToBase64(arraybuffer)\r\n    dwAjaxAddUpdate(controlId + \"@DW@\" + controlId + \"@DW@__custom_pdfCreationFinishedEvent@DW@data=\" + result + \"@DWSUB@transactionId=\" + transactionid, true, true)\r\n}\r\n\r\n\r\nfunction dwAjaxReturnScanResult(controlId, transactionid, decodedText, decodedResult) {\r\n    dwAjaxAddUpdate(controlId + \"@DW@\" + controlId + \"@DW@__custom_QrCodeScanFinishedEvent@DW@decodedText=\" + decodedText + \"@DWSUB@decodedResult=\" + decodedResult + \"@DWSUB@transactionId=\" + transactionid, true, true)\r\n}\r\n\r\n\r\n\r\n\r\n\n/*\r\n * Copyright (c) 2014 Docware GmbH\r\n */\r\n\r\nvar DW_LAZYLOAD_DEBUG_ACTIVE = false;\r\nvar DW_LAZYLOAD_WORKER_STATE = {BUSY: \"busy\", FREE: \"free\"};\r\n\r\nfunction DW_LAZYLOAD_WORKER() {\r\n    var state = DW_LAZYLOAD_WORKER_STATE.FREE;\r\n    var id = \"\";\r\n    var dpi = 0;\r\n}\r\n\r\n// pageNo hat als ersten Seitenindex 1 und nicht 0\r\nfunction dwLazyLoadPage(controlId, pageNo) {\r\n    var control = $(controlId);\r\n    if (control == null) {\r\n        return;\r\n    }\r\n    dwLazyLoadDebug(\"dwLazyLoadPage: show page \" + pageNo);\r\n\r\n    function __internal_updateTodoList(pageNo) {\r\n        if ((pageNo < 1) || (pageNo > count)) {\r\n            return; // ungültige Angabe\r\n        }\r\n        control.current = pageNo;\r\n        var startPage = pageNo - preloadPreviousCount;\r\n        if (startPage < 1) {\r\n            startPage = 1;\r\n        }\r\n        var endPage = pageNo + preloadNextCount;\r\n        if (endPage > count) {\r\n            endPage = count;\r\n        }\r\n        var dpi = parseInt(dwDomGetDomAttribute(control, \"dpi\")); // dpi erst jetzt bestimmen, könnte sich nämlich geändert haben\r\n        dwLazyLoadDebug(\"__internal_updateToDoList: from \" + startPage + \" to \" + endPage);\r\n        pageLoop:for (var i = startPage; i <= endPage; i++) {\r\n            var page = $(controlId + \"_\" + i);\r\n            var pageDPI = parseInt(dwDomGetDomAttributeOrDefault(page, \"dpi\", \"0\"));\r\n            var loaded = page && (pageDPI >= dpi);\r\n            if (loaded) {\r\n                dwLazyLoadDebug(\"Ignoring page: \" + i + \". Reason: already done (pagedpi: \" + pageDPI + \" - dpi: \" + dpi);\r\n                continue;\r\n            }\r\n            for (var workerIdx = 0; workerIdx < workerCount; workerIdx++) {\r\n                if ((workers[workerIdx].id == controlId + \"_\" + i) && (workers[workerIdx].dpi >= dpi)) {\r\n                    dwLazyLoadDebug(\"Ignoring page: \" + i + \". Reason: already working on it (\" + workerIdx + \")\");\r\n                    continue pageLoop;\r\n                }\r\n            }\r\n            if (todoList.indexOf(i) == -1) {\r\n                todoList.push(i);\r\n            }\r\n        }\r\n        todoList.sort(__internal_sort);\r\n        dwLazyLoadDebug(\"__internal_updateTodoList: \" + todoList);\r\n    }\r\n\r\n    function __internal_sort(val1, val2) {\r\n        var diff1 = val1 - pageNo;\r\n        var diff2 = val2 - pageNo;\r\n        // Aufsteigende Gewichtung. Wichtigste Teile am Ende des Array zum Abarbeiten (POP)\r\n        if (diff1 == 0) {\r\n            return +1;\r\n        }\r\n        if (diff2 == 0) {\r\n            return -1;\r\n        }\r\n        if (diff1 == diff2) {\r\n            return 0;\r\n        }\r\n        var previousCount = (preloadPreviousCount > 0) ? preloadPreviousCount : 1;\r\n        var nextCount = (preloadNextCount > 0) ? preloadNextCount : 1;\r\n        var weightedDiff1 = (diff1 >= 0) ? (diff1 / nextCount) : (diff1 / previousCount);\r\n        var weightedDiff2 = (diff2 >= 0) ? (diff2 / nextCount) : (diff2 / previousCount);\r\n        return Math.abs(weightedDiff2) - Math.abs(weightedDiff1);\r\n    }\r\n\r\n    function __internal_doProcessTodoList(workerIndex) {\r\n        var todoList = dwDomGetDomAttribute(control, \"todoList\");\r\n        dwLazyLoadDebug(\"__internal_doProcessTodoList: \" + todoList);\r\n        if (todoList.length == 0) {\r\n            return;\r\n        }\r\n        if (workers[workerIndex].state == DW_LAZYLOAD_WORKER_STATE.BUSY) {\r\n            return;\r\n        }\r\n        var pageIdx = parseInt(todoList.pop());\r\n        var dpi = parseInt(dwDomGetDomAttribute(control, \"dpi\")); // dpi erst jetzt bestimmen, könnte sich nämlich geändert haben\r\n        workers[workerIndex].state = DW_LAZYLOAD_WORKER_STATE.BUSY;\r\n        workers[workerIndex].id = controlId + \"_\" + pageIdx;\r\n        workers[workerIndex].dpi = dpi;\r\n        dwDomSetDomAttribute(control, \"workers\", workers);\r\n        dwDomSetDomAttribute(control, \"todoList\", todoList);\r\n        var page = $(controlId + \"_\" + pageIdx);\r\n        dwLazyLoadDebug(\"Processing page \" + pageIdx + \". Found: \" + (page != null) + \" (\" + controlId + \")\");\r\n        if (!page) {\r\n            workers[workerIndex].state = DW_LAZYLOAD_WORKER_STATE.FREE;\r\n            workers[workerIndex].id = \"\";\r\n            workers[workerIndex].dpi = 0;\r\n            dwDomSetDomAttribute(control, \"workers\", workers);\r\n            __internal_doProcessTodoList(workerIndex);\r\n            return;\r\n        }\r\n        var pageSrc = dwDomGetDomAttribute(page, \"data-src\") + \"&dpi=\" + dpi;\r\n        dwDomSetImageSource(page, pageSrc, function() {\r\n            dwLazyLoadDebug(\"__internal_doProcessTodoList: dpi[\" + dpi + \"] for page '\" + pageIdx + \"' set\");\r\n            dwDomSetDomAttribute(page, \"dpi\", dpi);\r\n            workers[workerIndex].state = DW_LAZYLOAD_WORKER_STATE.FREE;\r\n            workers[workerIndex].id = \"\";\r\n            workers[workerIndex].dpi = 0;\r\n            dwDomSetDomAttribute(control, \"workers\", workers);\r\n            __internal_doProcessTodoList(workerIndex);\r\n        }, function() {\r\n            workers[workerIndex].state = DW_LAZYLOAD_WORKER_STATE.FREE;\r\n            workers[workerIndex].id = \"\";\r\n            workers[workerIndex].dpi = 0;\r\n            dwDomSetDomAttribute(control, \"workers\", workers);\r\n            __internal_doProcessTodoList(workerIndex);\r\n        });\r\n    }\r\n\r\n    var preloadPreviousCount = dwDomGetDomAttribute(control, \"preload_previous\");\r\n    var preloadNextCount = dwDomGetDomAttribute(control, \"preload_next\");\r\n    var count = dwDomGetDomAttribute(control, \"count\");\r\n    preloadPreviousCount = preloadPreviousCount ? parseInt(preloadPreviousCount) : 0;\r\n    preloadNextCount = preloadNextCount ? parseInt(preloadNextCount) : 0;\r\n    count = count ? parseInt(count) : 0;\r\n\r\n    var workerCount = 4;\r\n    var workers = dwDomGetDomAttribute(control, \"workers\") || dwUtilsInitArray(workerCount, new DW_LAZYLOAD_WORKER());\r\n\r\n    var todoList = dwDomGetDomAttribute(control, \"todoList\") || new Array();\r\n    dwLazyLoadDebug(\"TODO-LIST: \" + todoList + \" - Length: \" + todoList.length);\r\n    dwLazyLoadDebug(\"WORKER-LIST: \" + workers + \" - Length: \" + workers.length);\r\n    __internal_updateTodoList(pageNo);\r\n\r\n    dwDomSetDomAttribute(control, \"todoList\", todoList);\r\n    dwDomSetDomAttribute(control, \"workers\", workers);\r\n\r\n    for (var i = 0; i < workers.length; i++) {\r\n        __internal_doProcessTodoList(i);\r\n    }\r\n}\r\n\r\nfunction dwLazyLoadDebug(msg) {\r\n    if (DW_LAZYLOAD_DEBUG_ACTIVE) {\r\n        framework_logger.log(msg);\r\n    }\r\n}\n/*\r\n * Copyright (c) 2017 Docware GmbH\r\n */\r\n\r\nfunction DwFile(file, controlId) {\r\n    this.nativeFile = file;\r\n    this.name = file.name || file || '';\r\n    this.size = file.size || 0;\r\n    this.type = file.type || '';\r\n    this.lastmodified = file.lastModifiedDate || new Date();\r\n    this.controlId = controlId; // kann null / undefined sein bei drag&drop\r\n\r\n    this.dateTo_yyyyMMdd = function() {\r\n        return this.lastmodified.getTime();\r\n    }\r\n}\r\n\r\nfunction dwFileUploadOnDrop(event, fileUploadPanelEventHandlerComponentId, fileUploadPanelId) {\r\n    dwFrameworkPreventDefaultBehaviour(event);\r\n    var control = dwUtilsGetEventTarget(event);\r\n    if (dwDomHasAttribute(control, \"disabled\")) {\r\n        dwDomRemoveClass(control, \"guidropzone_invalid\");\r\n        return;\r\n    }\r\n    dwDomRemoveClass(control, \"guidropzone_entered\");\r\n    if (event.dataTransfer) {\r\n        dwFileUploadAddMultipleFiles(fileUploadPanelEventHandlerComponentId, fileUploadPanelId, event.dataTransfer.files);\r\n        dwFileUploadAddFilesFinished(fileUploadPanelEventHandlerComponentId, fileUploadPanelId);\r\n        dwAjaxSendUpdates(false);\r\n    }\r\n}\r\n\r\nfunction dwFileUploadOnDragEnter(event) {\r\n    dwFrameworkPreventDefaultBehaviour(event);\r\n    var control = dwUtilsGetEventTarget(event);\r\n    if (dwDomHasAttribute(control, \"disabled\")) {\r\n        dwDomAddClass(control, \"guidropzone_invalid\");\r\n    } else {\r\n        dwDomAddClass(control, \"guidropzone_entered\");\r\n    }\r\n}\r\n\r\nfunction dwFileUploadOnDragLeave(event) {\r\n    dwFrameworkPreventDefaultBehaviour(event);\r\n    var control = dwUtilsGetEventTarget(event);\r\n    if (dwDomHasAttribute(control, \"disabled\")) {\r\n        dwDomRemoveClass(control, \"guidropzone_invalid\");\r\n    } else {\r\n        dwDomRemoveClass(control, \"guidropzone_entered\");\r\n    }\r\n}\r\n\r\nfunction dwFileUploadOnDragOver(event) {\r\n    dwFrameworkPreventDefaultBehaviour(event);\r\n}\r\n\r\n\r\nfunction dwFileUploadAddFile(event, fileUploadPanelEventHandlerComponentId, fileUploadPanelId) {\r\n    var clickedButton = dwUtilsGetEventTarget(dwFrameworkGetEvent(event));\r\n    var fileUploadIframeDocument = dwFileUploadFindIframeDocument(fileUploadPanelId);\r\n    var fileUploadForm = fileUploadIframeDocument.getElementById(\"submitform\");\r\n    //Auf Typ Button testen\r\n    if (clickedButton.tagName && clickedButton.tagName.toLowerCase() != \"button\") {\r\n        var match = dwUtilsFindMatchingNodes($(fileUploadPanelEventHandlerComponentId), clickedButton, function(rootNode, node) {\r\n            return (node.tagName) && (node.tagName.toLowerCase() == \"button\");\r\n        }, true);\r\n        if (match.length) {\r\n            clickedButton = match[0];\r\n        }\r\n    }\r\n    var inputFile = fileUploadIframeDocument.createElement(\"input\");\r\n    inputFile.type = \"file\";\r\n    var existingInputs = fileUploadForm.getElementsByTagName(\"input\");\r\n    inputFile.name = \"file_\" + existingInputs.length;\r\n    inputFile.id = \"file_\" + existingInputs.length;\r\n    var isMultipleSelection = dwDomGetDomAttribute(clickedButton, \"multiple\") == \"multiple\";\r\n    if (isMultipleSelection) {\r\n        inputFile.multiple = \"multiple\";\r\n    }\r\n    inputFile.onchange = function() {\r\n        if (this.files) {\r\n            dwFileUploadAddMultipleFiles(fileUploadPanelEventHandlerComponentId, fileUploadPanelId, this.files, inputFile.id);\r\n        } else {\r\n            dwFileUploadAddSingleFile(fileUploadPanelEventHandlerComponentId, fileUploadPanelId, new DwFile(inputFile.value, inputFile.id));\r\n        }\r\n        dwFileUploadAddFilesFinished(fileUploadPanelEventHandlerComponentId, fileUploadPanelId);\r\n        dwAjaxSendUpdates(false);\r\n    };\r\n    fileUploadForm.appendChild(inputFile);\r\n    inputFile.click();\r\n}\r\n\r\nfunction dwFileUploadAddMultipleFiles(fileUploadPanelEventHandlerComponentId, fileUploadPanelId, files, controlId) {\r\n    for (var i = 0; i < files.length; i++) {\r\n        var file = new DwFile(files[i], controlId);\r\n        dwFileUploadAddSingleFile(fileUploadPanelEventHandlerComponentId, fileUploadPanelId, file);\r\n    }\r\n}\r\n\r\nfunction dwFileUploadAddSingleFile(fileUploadPanelEventHandlerComponentId, fileUploadPanelId, file) {\r\n    var fileUploadIframeDocument = dwFileUploadFindIframeDocument(fileUploadPanelId);\r\n    var fileUploadForm = fileUploadIframeDocument.getElementById(\"submitform\");\r\n    var fileList = fileUploadForm.fileList;\r\n    if (!fileList) {\r\n        fileList = new Array();\r\n        fileUploadForm.fileList = fileList;\r\n    }\r\n    fileList.push(file);\r\n    var eventParameter = \"filename=\" + file.name + \"@DWSUB@filesize=\" + file.size + \"@DWSUB@type=\" + file.type + \"@DWSUB@lastmodified=\" + file.dateTo_yyyyMMdd();\r\n    dwAjaxFireCustomEvent(fileUploadPanelEventHandlerComponentId, fileUploadPanelId, \"ADD_FILE\", eventParameter, false);\r\n}\r\n\r\nfunction dwFileUploadAddFilesFinished(fileUploadPanelEventHandlerComponentId, fileUploadPanelId) {\r\n    dwAjaxFireCustomEvent(fileUploadPanelEventHandlerComponentId, fileUploadPanelId, \"ADD_FILES_FINISHED\", \"\", false);\r\n}\r\n\r\nfunction dwFileUploadRemoveFile(fileUploadPanelId, index) {\r\n    var fileUploadIframeDocument = dwFileUploadFindIframeDocument(fileUploadPanelId);\r\n    var fileUploadForm = fileUploadIframeDocument.getElementById(\"submitform\");\r\n    var fileList = fileUploadForm.fileList;\r\n    var fileItem = fileList[index];\r\n    dwUtilsRemoveFromArrayByIndex(fileList, index);\r\n\r\n    if (fileItem.controlId) {\r\n        var fileInputControl = $(fileItem.controlId);\r\n        if (!fileInputControl) {\r\n            return;\r\n        }\r\n        if (fileInputControl.files && fileInputControl.files.length > 1) {\r\n            fileInputControl.files = dwUtilsRemoveFromArrayByIndex(fileInputControl.files, index);\r\n        } else {\r\n            dwDomRemoveSelf(fileInputControl);\r\n        }\r\n    }\r\n}\r\n\r\nfunction dwFileUploadTransferFiles(fileUploadPanelId) {\r\n    var fileUploadIframeDocument = dwFileUploadFindIframeDocument(fileUploadPanelId);\r\n    var fileUploadForm = fileUploadIframeDocument.getElementById(\"submitform\");\r\n    var fileList = fileUploadForm.fileList;\r\n    if ((typeof (FormData) != \"undefined\") && fileList) {\r\n//    if (FormData && fileList) {\r\n        var uri = $(fileUploadPanelId).getElementsByTagName(\"iframe\")[0].src;\r\n        var xhr = new XMLHttpRequest();\r\n        var fd = new FormData();\r\n\r\n        xhr.open(\"POST\", uri, true);\r\n        xhr.onreadystatechange = function() {\r\n            if (xhr.readyState == DWUTILS_READY_STATE.DONE && xhr.status == 200) {\r\n                // Handle response.\r\n            }\r\n        };\r\n        for (var i = 0; i < fileList.length; i++) {\r\n            var file = fileList[i];\r\n            fd.append(file.name, file.nativeFile);\r\n        }\r\n        // Initiate a multipart/form-data upload\r\n        xhr.send(fd);\r\n\r\n//        for (var i = 0; i < fileList.length; i++) {\r\n//            dwFileUploadTransferFile(fileUploadPanelId, fileList[i]);\r\n//        }\r\n    } else {\r\n        fileUploadForm.submit();\r\n    }\r\n\r\n}\r\n\r\nfunction dwFileUploadTransferFile(fileUploadPanelId, file) {\r\n    var uri = $(fileUploadPanelId).getElementsByTagName(\"iframe\")[0].src;\r\n    var xhr = new XMLHttpRequest();\r\n    var fd = new FormData();\r\n\r\n    xhr.open(\"POST\", uri, true);\r\n    xhr.onreadystatechange = function() {\r\n        if (xhr.readyState == DWUTILS_READY_STATE.DONE && xhr.status == 200) {\r\n            // Handle response.\r\n//            alert(xhr.responseText); // handle response.\r\n        }\r\n    };\r\n    fd.append(file.name, file.nativeFile);\r\n    // Initiate a multipart/form-data upload\r\n    xhr.send(fd);\r\n}\r\n\r\n\r\nfunction dwFileUploadFindIframeDocument(fileUploadPanelId) {\r\n    var fileUploadPanel = $(fileUploadPanelId);\r\n    var fileUploadIframe = fileUploadPanel.getElementsByTagName(\"iframe\")[0]; // muss da sein ...\r\n\r\n    var fileUploadIframeDocument = fileUploadIframe.contentWindow || fileUploadIframe.contentDocument;\r\n    if (fileUploadIframeDocument.document) {\r\n        fileUploadIframeDocument = fileUploadIframeDocument.document;\r\n    }\r\n    return fileUploadIframeDocument;\r\n}\r\n\n/*\r\n * Copyright (c) 2021 Quanos Service Solutions GmbH\r\n */\r\n\r\nvar DW_DIALOG_TEXTS = new Object(); // Hashmap<id<Hashmap<key, translation>>\r\n\r\n/**\r\n * Speichert die Übersetzungstexte für eine Dialog Instanz / ID\r\n * @param id\r\n * @param textForTitle\r\n * @param textForMessage\r\n * @param textForDetailLink\r\n * @param textForCopyToClipboard\r\n * @param textForRetryButton\r\n * @param textForDetails\r\n */\r\nfunction dwDialogStoreDialogTranslations(id, textForTitle, textForMessage, textForDetailLink, textForCopyToClipboard, textForRetryButton, textForDetails) {\r\n    DW_DIALOG_TEXTS[id] = {\r\n        textForTitle: textForTitle,\r\n        textForMessage: textForMessage,\r\n        textForDetailLink: textForDetailLink,\r\n        textForCopyToClipboard: textForCopyToClipboard,\r\n        textForRetryButton: textForRetryButton,\r\n        textForDetails: textForDetails\r\n    }\r\n}\r\n\r\n/**\r\n * Klasse zur Darstellung eines Dialogs (z.B. für Fehlermeldungen). Layout angelehnt an Framework Dialoge\r\n * Parameter (title / message / ...) werden nur als Fallback ausgewertet, sofern keine Übersetzungstexte vorab übertragen wurden\r\n * @param id\r\n * @param title\r\n * @param message\r\n * @param linkTextDetail\r\n * @param buttonTextRetry\r\n * @param details\r\n * @constructor\r\n */\r\nvar DWDialog = function(id, title, message, linkTextDetail, copyToClipboardText, buttonTextRetry, details) {\r\n    var _self = this;\r\n    var texts = DW_DIALOG_TEXTS[id] || new Object();\r\n    title = texts.textForTitle || title;\r\n    message = texts.textForMessage || message;\r\n    linkTextDetail = texts.textForDetailLink || linkTextDetail;\r\n    copyToClipboardText = texts.textForCopyToClipboard || copyToClipboardText;\r\n\r\n    if (buttonTextRetry) {\r\n        buttonTextRetry = texts.textForRetryButton || buttonTextRetry;\r\n    }\r\n\r\n    if (details) {\r\n        details = texts.textForDetails || details;\r\n    }\r\n\r\n    this.visible = false;\r\n\r\n    this.__getWidth = function(withDetails) {\r\n        var width = withDetails ? 650 : 450;\r\n        return Math.min(width, framework_displayWidth);\r\n    };\r\n    this.__getHeight = function(withDetails) {\r\n        var height = withDetails ? 250 : 145;\r\n        // 15 ist Header, eine Zeile ist 18\r\n        var heightCalculated = 15 + (dwUtilsCountString(message, \"<br>\") + 1) * 18;\r\n        height = Math.max(heightCalculated, height);\r\n\r\n        if (buttonTextRetry) {\r\n            height += 23 + 2 * 8; // Button-Höhe + 2x Padding\r\n        }\r\n\r\n        return Math.min(height, framework_displayHeight);\r\n    };\r\n    this.__getMarginForCentering = function(size) {\r\n        return parseInt(-size / 2);\r\n    };\r\n    this.__create = function() {\r\n        this.fragment = document.createElement(\"div\");\r\n        this.fragment.id = id;\r\n        var dialogOverlay = document.createElement(\"div\");\r\n        dialogOverlay.id = id + \"_dialog_overlay\";\r\n        dialogOverlay.className = \"guiwindow_child_overlay\";\r\n        dialogOverlay.style.zIndex = 50000;\r\n        dialogOverlay.onclick = function(event) {\r\n            dwFrameworkDisableEventBubbling(event);\r\n        };\r\n        dialogOverlay.onmousedown = function(event) {\r\n            dwFrameworkDisableEventBubbling(event);\r\n        };\r\n        dialogOverlay.onmouseup = function(event) {\r\n            dwFrameworkDisableEventBubbling(event);\r\n        };\r\n        dialogOverlay.onmousemove = function(event) {\r\n            dwFrameworkDisableEventBubbling(event);\r\n        };\r\n        dialogOverlay.onkeydown = function(event) {\r\n            dwFrameworkDisableEventBubbling(event);\r\n        };\r\n        dialogOverlay.onkeypress = function(event) {\r\n            dwFrameworkDisableEventBubbling(event);\r\n        };\r\n        dialogOverlay.onkeyup = function(event) {\r\n            dwFrameworkDisableEventBubbling(event);\r\n        };\r\n        this.fragment.appendChild(dialogOverlay);\r\n\r\n        var width = this.__getWidth(false);\r\n        var height = this.__getHeight(false);\r\n        var marginLeft = this.__getMarginForCentering(width);\r\n        var marginTop = this.__getMarginForCentering(height);\r\n        var dialogContainer = document.createElement(\"div\");\r\n        dialogContainer.id = id + \"_dialog_container\";\r\n        dialogContainer.className = \"guiwindow_child_container\";\r\n        dialogContainer.style.width = width + \"px\";\r\n        dialogContainer.style.marginLeft = marginLeft + \"px\";\r\n        dialogContainer.style.height = height + \"px\";\r\n        dialogContainer.style.marginTop = marginTop + \"px\";\r\n        dialogContainer.style.zIndex = 50001;\r\n        dialogContainer.onclick = function(event) {\r\n            dwFrameworkDisableEventBubbling(event);\r\n        };\r\n        dialogContainer.onmousedown = function(event) {\r\n            dwFrameworkDisableEventBubbling(event);\r\n        };\r\n        dialogContainer.onmouseup = function(event) {\r\n            dwFrameworkDisableEventBubbling(event);\r\n        };\r\n        dialogContainer.onmousemove = function(event) {\r\n            dwFrameworkDisableEventBubbling(event);\r\n        };\r\n        dialogContainer.onkeydown = function(event) {\r\n            dwFrameworkDisableEventBubbling(event);\r\n        };\r\n        dialogContainer.onkeypress = function(event) {\r\n            dwFrameworkDisableEventBubbling(event);\r\n        };\r\n        dialogContainer.onkeyup = function(event) {\r\n            dwFrameworkDisableEventBubbling(event);\r\n        };\r\n\r\n        this.fragment.appendChild(dialogContainer);\r\n\r\n        var dialogTitle = document.createElement(\"div\");\r\n        //dialogTitle.appendChild(document.createTextNode(title)); // escaped\r\n        dialogTitle.innerHTML = title;\r\n        dialogTitle.className = \"guiwindow_child_title\";\r\n        dialogTitle.style.right = \"0\";\r\n        dialogTitle.style.backgroundImage = \"none\";\r\n        dialogContainer.appendChild(dialogTitle);\r\n\r\n        var dialogContentContainer = document.createElement(\"div\");\r\n        dialogContentContainer.className = \"guiwindow_child_content\";\r\n        dialogContentContainer.style.top = \"23px\";\r\n        dialogContainer.appendChild(dialogContentContainer);\r\n\r\n        var dialogContentContainerPanel = document.createElement(\"div\");\r\n        dialogContentContainerPanel.className = \"guipanel\";\r\n        dialogContentContainerPanel.style.padding = \"8px\";\r\n        dialogContentContainerPanel.style.height = \"100%\";\r\n        dialogContentContainerPanel.style.width = \"100%\";\r\n        dialogContentContainer.appendChild(dialogContentContainerPanel);\r\n\r\n        var dialogContentMessage = document.createElement(\"div\");\r\n        dialogContentMessage.innerHTML = message;\r\n        dialogContentMessage.className = \"guilabel\";\r\n        dialogContentMessage.style.whiteSpace = \"normal\";\r\n        dialogContentContainerPanel.appendChild(dialogContentMessage);\r\n\r\n        if (details) {\r\n            var dialogContentMessageDetailsPanel = document.createElement(\"div\");\r\n            dialogContentMessageDetailsPanel.id = id + \"_dialog_details_panel\";\r\n            dialogContentMessageDetailsPanel.className = \"guipanel\";\r\n            dialogContentMessageDetailsPanel.style.top = \"48px\";\r\n            dialogContentMessageDetailsPanel.style.bottom = \"44px\";\r\n            dialogContentMessageDetailsPanel.style.left = \"8px\";\r\n            dialogContentMessageDetailsPanel.style.right = \"8px\";\r\n            dialogContentMessageDetailsPanel.style.display = \"none\";\r\n            dialogContentContainerPanel.appendChild(dialogContentMessageDetailsPanel);\r\n\r\n            var dialogContentMessageDetails = document.createElement(\"textarea\");\r\n            dialogContentMessageDetails.textContent = details;\r\n            dialogContentMessageDetails.className = \"guitextarea cursor_text\";\r\n            dialogContentMessageDetails.readOnly = true;\r\n            dialogContentMessageDetails.style.width = \"100%\";\r\n            dialogContentMessageDetails.style.height = \"100%\";\r\n            dialogContentMessageDetails.style.overflow = \"auto\";\r\n            dialogContentMessageDetailsPanel.appendChild(dialogContentMessageDetails);\r\n        }\r\n\r\n        if (details || buttonTextRetry) {\r\n            var dialogContentToButtonsSeparatorPanel = document.createElement(\"div\");\r\n            dialogContentToButtonsSeparatorPanel.className = \"guipanel\";\r\n            dialogContentToButtonsSeparatorPanel.style.bottom = \"36px\";\r\n            dialogContentToButtonsSeparatorPanel.style.left = \"8px\";\r\n            dialogContentToButtonsSeparatorPanel.style.right = \"8px\";\r\n            dialogContentContainerPanel.appendChild(dialogContentToButtonsSeparatorPanel);\r\n\r\n            var dialogContentToButtonsSeparator = document.createElement(\"div\");\r\n            dialogContentToButtonsSeparator.className = \"guiseparator_h\";\r\n            dialogContentToButtonsSeparatorPanel.appendChild(dialogContentToButtonsSeparator);\r\n        }\r\n\r\n        if (details) {\r\n            var dialogLinkToDetailsPanel = document.createElement(\"div\");\r\n            dialogLinkToDetailsPanel.className = \"guipanel\";\r\n            dialogLinkToDetailsPanel.style.bottom = \"8px\";\r\n            dialogLinkToDetailsPanel.style.left = \"8px\";\r\n            dialogContentContainerPanel.appendChild(dialogLinkToDetailsPanel);\r\n\r\n            var dialogCopyDetailsToClipboard = document.createElement(\"button\");\r\n            dialogCopyDetailsToClipboard.innerHTML = copyToClipboardText;\r\n            dialogCopyDetailsToClipboard.className = \"guibutton_linkenabled\";\r\n            dialogCopyDetailsToClipboard.style.paddingLeft = \"20px\";\r\n            dialogCopyDetailsToClipboard.style.display = \"none\";\r\n            dialogCopyDetailsToClipboard.style.height = \"22px\";\r\n            dialogCopyDetailsToClipboard.onclick = dwUtilsCopyToClipboard(details);\r\n\r\n            var dialogLinkToDetails = document.createElement(\"button\");\r\n            dialogLinkToDetails.innerHTML = linkTextDetail;\r\n            dialogLinkToDetails.className = \"guibutton_linkenabled\";\r\n            dialogLinkToDetails.onclick = function() {\r\n                var isVisible = $(id + \"_dialog_details_panel\").style.display == \"\";\r\n                _self.__showDetails(!isVisible);\r\n                dialogCopyDetailsToClipboard.style.display = !isVisible ? \"\" : \"none\";\r\n            };\r\n\r\n            dialogLinkToDetailsPanel.appendChild(dialogLinkToDetails);\r\n            dialogLinkToDetailsPanel.appendChild(dialogCopyDetailsToClipboard);\r\n        }\r\n\r\n        if (buttonTextRetry) {\r\n            var dialogButtonToReloadPanel = document.createElement(\"div\");\r\n            dialogButtonToReloadPanel.className = \"guipanel\";\r\n            dialogButtonToReloadPanel.style.bottom = \"8px\";\r\n            dialogButtonToReloadPanel.style.right = \"8px\";\r\n            dialogContentContainerPanel.appendChild(dialogButtonToReloadPanel);\r\n\r\n            var dialogButtonToReload = document.createElement(\"button\");\r\n            dialogButtonToReload.innerHTML = buttonTextRetry;\r\n            dialogButtonToReload.className = \"guibutton_enabled\";\r\n            dialogButtonToReload.id = id + \"_dialog_retry_button\";\r\n            dialogButtonToReload.style.height = \"23px\";\r\n            dialogButtonToReload.style.minWidth = \"100px\";\r\n            dialogButtonToReload.style.paddingLeft = \"4px\";\r\n            dialogButtonToReload.style.paddingRight = \"4px\";\r\n            dialogButtonToReload.onclick = function() {\r\n                _self.__retry();\r\n            };\r\n            dialogButtonToReloadPanel.appendChild(dialogButtonToReload);\r\n        }\r\n    };\r\n\r\n    this.__create();\r\n\r\n    this.__showDetails = function(visible) {\r\n        var container = $(id + \"_dialog_container\");\r\n        var width = this.__getWidth(visible);\r\n        var height = this.__getHeight(visible);\r\n        var marginLeft = this.__getMarginForCentering(width);\r\n        var marginTop = this.__getMarginForCentering(height);\r\n        var display = visible ? \"\" : \"none\";\r\n        $(id + \"_dialog_details_panel\").style.display = display;\r\n        container.style.height = height + \"px\";\r\n        container.style.marginTop = marginTop + \"px\";\r\n        container.style.width = width + \"px\";\r\n        container.style.marginLeft = marginLeft + \"px\";\r\n\r\n        this.__focusButton();\r\n//        window.getSelection().selectAllChildren($(id + \"_dialog_details_panel\"));\r\n    };\r\n\r\n    this.__retry = function() {\r\n        dwFrameworkRefreshPage();\r\n    };\r\n\r\n    this.__focusButton = function() {\r\n        if ($(id + \"_dialog_retry_button\")) {\r\n            $(id + \"_dialog_retry_button\").focus();\r\n        }\r\n    };\r\n\r\n    this.setVisible = function(visible) {\r\n        if ((typeof (url) != \"undefined\") && url.indexOf(\"chrome://\") == 0) {\r\n            // Nein es geht nicht um den Chrome Browser sondern um Firefox. Die interne Engine hat auch einen Begriff wie \"chrome\"\r\n            // Browser interne Meldungen bringen wir nicht als unsere Fehler. mit window.onError catchen wir ja alles\r\n            return;\r\n        }\r\n        if (this.visible == visible) {\r\n            return;\r\n        }\r\n        this.visible = visible;\r\n        var body = $(\"body\");\r\n        if (visible) {\r\n            body.appendChild(this.fragment);\r\n            this.__focusButton();\r\n            if (framework_isIE) {\r\n                var objectTags = document.getElementsByTagName(\"object\");\r\n                for (var i = 0; i < objectTags.length; i++) {\r\n                    var object = objectTags[i];\r\n                    object.style.visibility = \"hidden\";\r\n                }\r\n            }\r\n            dwTooltip_hideTooltips();\r\n        } else {\r\n            body.removeChild(this.fragment);\r\n        }\r\n    };\r\n};\r\n\r\nfunction dwDialogShowErrorDialog(details) {\r\n    var body = $(\"body\");\r\n    var dialog = $(\"error\");\r\n    if (dialog) {\r\n        // Dialog wird bereits angezeigt\r\n        return;\r\n    }\r\n    dialog = new DWDialog(\"error\", \"An error occurred\", \"A communication error occurred. Do you want to retry?\", \"Details\", \"Copy to Clipboard\", \"Reload\", details);\r\n    dialog.setVisible(true);\r\n}\r\n\r\n// Aktuell noch keinen generischen Fehlerdialog bei Requests (im Hintergrund) anzeigen. Nachricht könnte zudem nur angezeigt werden bei gleicher Domain\r\n//function dwDialogShowLoadUrlErrorDialog(details) {\r\n//    var body = $(\"body\");\r\n//    var dialog = $(\"loadError\");\r\n//    if (dialog) {\r\n//        // Dialog wird bereits angezeigt\r\n//        return;\r\n//    }\r\n//    dialog = new DWDialog(\"loadError\", \"An error occurred\", \"A communication error occurred. Do you want to retry?\", \"Details\", \"Reload\", details);\r\n//    dialog.setVisible(true);\r\n//}\r\n\r\nfunction dwDialogShowLostConnection() {\r\n    var body = $(\"body\");\r\n    var dialog = $(\"lostConnection\");\r\n    if (dialog) {\r\n        // Dialog wird bereits angezeigt\r\n        return;\r\n    }\r\n    dialog = new DWDialog(\"lostConnection\", \"Lost connection to server\", \"A communication error occurred. Do you want to retry?\", null, null, \"Reload\", null);\r\n    dialog.setVisible(true);\r\n}\r\n\r\nfunction dwDialogShowInvalidSession(showReloadButton) {\r\n    var body = $(\"body\");\r\n    var dialog = $(\"invalidSession\");\r\n    if (dialog) {\r\n        // Dialog wird bereits angezeigt\r\n        return;\r\n    }\r\n    var buttonText = showReloadButton ? \"Reload\" : null;\r\n    dialog = new DWDialog(\"invalidSession\", \"Invalid or expired session\", \"The current session has expired. Please restart the application.\", null, null, buttonText, null);\r\n    if (showReloadButton) {\r\n        dialog.__retry = function() {\r\n            // Refresh Action ist leider nicht hinreichend. Bei der Location Reload Methode wird der Bookmark String korrekt übertragen\r\n            // und intern das Laden des Bookmarks ausgelöst\r\n            window.location.reload(true);\r\n        }\r\n    }\r\n    //500ms delay bevor die meldung angezeigt wird\r\n    var delayInterval = setInterval(function() {\r\n        dialog.setVisible(true);\r\n        clearInterval(delayInterval);\r\n    }, 500);\r\n}\r\n\r\nfunction dwDialogShowMessageDialog(title, message) {\r\n    var body = $(\"body\");\r\n    var dialog = $(\"message\");\r\n    if (dialog) {\r\n        // Dialog wird bereits angezeigt\r\n        return;\r\n    }\r\n    dialog = new DWDialog(\"message\", title, message, null, null, \"Close\", null);\r\n    dialog.setVisible(true);\r\n}\n/*\r\n * Copyright (c) 2025 Quanos Solutions GmbH\r\n */\r\n/**\r\n * Sammlung von Methoden zur Anzeige von SVG\r\n */\r\n\r\n// Erzeugt einen Hotspot (nur für Anzeige)\r\nfunction dwImageSVGCreateHotspot(root, textNode, hotspot, unmarkedHotspotsVisible) {\r\n    if ((root) && (textNode) && (hotspot)) {\r\n        var bBoxRectangle = dwImageSVGGetBBox(textNode);\r\n\r\n        dwImageWriteToLog(hotspot.elementId, \"create svg hotspot (id=\" + hotspot.uniqueId + \" key=\" + hotspot.key + \" keyver=\" + hotspot.keyVer + \")\");\r\n        var node = dwImageSVGPaintHotspotNode(hotspot, null, bBoxRectangle, unmarkedHotspotsVisible);\r\n        if (node) {\r\n            node.setAttribute(\"id\", hotspot.uniqueId);\r\n            if (textNode.hasAttribute(\"transform\")) { // Vermeidung von Browser Hinweisen, dass 'NULL' als transform gesetzt würde ...\r\n                node.setAttribute(\"transform\", textNode.getAttribute(\"transform\")); //Transformation\r\n            } else if ((textNode.tagName === \"tspan\") && (textNode.parentNode.hasAttribute(\"transform\"))) {\r\n                node.setAttribute(\"transform\", textNode.parentNode.getAttribute(\"transform\")); //Transformation\r\n            }\r\n\r\n            node.setAttribute(\"textBoundingBox\", bBoxRectangle.x1 + \" \" + bBoxRectangle.y1 + \" \" + bBoxRectangle.width + \" \" + bBoxRectangle.height);\r\n\r\n            //im SVG einhängen\r\n            dwImageSVGInsertHotspot(root, textNode, node);\r\n\r\n            //Position der Hotspots (Clickbereich) anpassen\r\n            dwImageSVGTransformHotspot(root, node, hotspot, bBoxRectangle);\r\n\r\n            dwImageWriteToLog(hotspot.elementId, \"inserted svg hotspot (id=\" + hotspot.uniqueId + \" \" +\r\n                                                 \"key=\" + hotspot.key + \" \" +\r\n                                                 \"keyver=\" + hotspot.keyVer + \" \" +\r\n                                                 \"bbox=(x1=\" + hotspot.x1 + \", x2=\" + hotspot.x2 + \", y1=\" + hotspot.y1 + \", y2=\" + hotspot.y2 + \"))\");\r\n        }\r\n    }\r\n}\r\n\r\nfunction dwImageSVGGetBBox(textNode) {\r\n    if (textNode.getBBox) {\r\n        var bBox = textNode.getBBox();\r\n        return new DWRectangle(bBox.x, bBox.y, bBox.x + bBox.width, bBox.y + bBox.height);\r\n    } else {\r\n        var extent = textNode.getExtentOfChar(0);\r\n        var width = textNode.getComputedTextLength();\r\n        return new DWRectangle(extent.x, extent.y, extent.x + width, extent.y + extent.height);\r\n    }\r\n}\r\n\r\nfunction dwImageSVGInsertHotspot(root, textNode, hotspotNode) {\r\n    if ((root) && (textNode) && (textNode.parentNode) && (hotspotNode)) {\r\n        //Zeichenbereich: Hotspot vor Text einhängen\r\n        try {\r\n            var parentNode = textNode.parentNode;\r\n            //Parent ist ein switch und der Text eine Alternative\r\n            if (dwImageSVGNodeIsInSwitch(root, textNode, false)) {\r\n                //Gruppe um Rect und Text erzeugen\r\n                var group = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\r\n                parentNode.insertBefore(group, textNode);\r\n                group.appendChild(hotspotNode);\r\n                group.appendChild(textNode);\r\n            } else {    //Rect vor Text einhängen\r\n                if (textNode.tagName === \"tspan\") {\r\n                    textNode = parentNode;\r\n                    parentNode = parentNode.parentNode;\r\n                }\r\n                parentNode.insertBefore(hotspotNode, textNode);\r\n            }\r\n        } catch (exception) {\r\n        }\r\n    }\r\n}\r\n\r\nfunction dwImageSVGNodeIsInSwitch(root, node, recursively) {\r\n    if ((node) && (node.parentNode) && (node.parentNode.tagName) && (node != root)) {\r\n        var isSwitch = (node.parentNode.tagName.toLowerCase() == \"switch\");\r\n        if (isSwitch) {\r\n            return true;\r\n        } else {\r\n            if (recursively) {\r\n                return dwImageSVGNodeIsInSwitch(root, node.parentNode, recursively);\r\n            } else {\r\n                return false;\r\n            }\r\n        }\r\n    } else {\r\n        return false;\r\n    }\r\n}\r\n\r\n//Matrix aus transform-Attribute in SVGMatrix wandeln (damit Matrizenoperationen ausgeführt werden können)\r\nfunction dwImageSVGCreateMatrixFromString(matrix) {\r\n    var svgMatrix = null;\r\n    if (matrix) {\r\n        try {\r\n            svgMatrix = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\").createSVGMatrix();\r\n            var matrixStr = matrix.substring(matrix.indexOf(\"(\") + 1, matrix.indexOf(\")\"));\r\n            var array = matrixStr.split(\" \");\r\n            svgMatrix.a = array[0];\r\n            svgMatrix.b = array[1];\r\n            svgMatrix.c = array[2];\r\n            svgMatrix.d = array[3];\r\n            svgMatrix.e = array[4];\r\n            svgMatrix.f = array[5];\r\n        } catch (exception) {\r\n        }\r\n    }\r\n    return svgMatrix;\r\n}\r\n\r\nfunction dwImageSVGGetHotspotMatrix(root, node) {\r\n    var matrix = null;\r\n    if ((root) && (node)) {\r\n        try {\r\n            //Im IE 10 liefert getTransformToElement bei einem Switch falsche Werte\r\n            //deshalb hier die Matrix aus dem Transform-Attribut mit der Transformation des Switch-Knotens multiplizieren\r\n            if (dwImageSVGNodeIsInSwitch(root, node, true)) {\r\n                var matrixSVG = dwImageSVGCreateMatrixFromString(node.getAttribute(\"transform\"));\r\n\r\n                //1. Parent = Group, 2. Parent = switch-Knoten und darauf dann das getTransformToElement\r\n                matrix = dwImageSVGTransformToElement(root, node.parentNode.parentNode).inverse();\r\n                matrix = matrix.multiply(matrixSVG);\r\n            } else {\r\n                matrix = dwImageSVGTransformToElement(root, node).inverse();\r\n            }\r\n        } catch (exception) {\r\n            //Nix tun\r\n        }\r\n    }\r\n\r\n    if (!matrix) {\r\n        //Einheitsmatrix\r\n        matrix = dwImageSVGCreateMatrixFromString(\"matrix(1 0 0 1 0 0)\");\r\n    }\r\n    return matrix;\r\n}\r\n\r\nfunction dwImageSVGTransformToElement(fromElement, toElement) {\r\n    if (fromElement && toElement) {\r\n        //Bei Chrome wurde getTransformToElement ab Version 48 ausgebaut\r\n        //Workaround von http://jointjs.com/blog/get-transform-to-element-polyfill.html\r\n        if (fromElement.getTransformToElement) {\r\n            return fromElement.getTransformToElement(toElement);\r\n        } else {\r\n            return toElement.getScreenCTM().inverse().multiply(fromElement.getScreenCTM());\r\n        }\r\n    }\r\n    return null;\r\n}\r\n\r\nfunction getViewbox(root) {\r\n    if ((root) && (root.hasAttribute(\"viewBox\"))) {\r\n        return root.getAttribute(\"viewBox\");\r\n    }\r\n    return null;\r\n}\r\n\r\nfunction dwImageSVGTransformHotspot(root, node, hotspot, bBoxRectangle) {\r\n    if ((root) && (node) && (hotspot) && (bBoxRectangle)) {\r\n        try {\r\n            // see http://stackoverflow.com/questions/10623809/get-bounding-box-of-element-accounting-for-its-transform\r\n            var pts = [\r\n                root.createSVGPoint(), root.createSVGPoint(),\r\n                root.createSVGPoint(), root.createSVGPoint()\r\n            ];\r\n\r\n            pts[0].x = bBoxRectangle.x1;\r\n            pts[0].y = bBoxRectangle.y1;\r\n            pts[1].x = bBoxRectangle.x1 + bBoxRectangle.width;\r\n            pts[1].y = bBoxRectangle.y1;\r\n            pts[2].x = bBoxRectangle.x1 + bBoxRectangle.width;\r\n            pts[2].y = bBoxRectangle.y1 + bBoxRectangle.height;\r\n            pts[3].x = bBoxRectangle.x1;\r\n            pts[3].y = bBoxRectangle.y1 + bBoxRectangle.height;\r\n\r\n            var matrix = dwImageSVGGetHotspotMatrix(root, node);\r\n            dwImageWriteToLog(hotspot.elementId, \"using transformation matrix '\" + matrix + \"' \" +\r\n                                                 \"(id=\" + hotspot.uniqueId + \" key=\" + hotspot.key + \" keyver=\" + hotspot.keyVer + \")\");\r\n\r\n            // Transformation unter Berücksichtigung der Transformations-Matrix (min/max)\r\n            var xMin = Infinity;\r\n            var xMax = -Infinity;\r\n            var yMin = Infinity;\r\n            var yMax = -Infinity;\r\n            pts.forEach(function(pt) {\r\n                pt = pt.matrixTransform(matrix);\r\n                xMin = Math.min(xMin, pt.x);\r\n                xMax = Math.max(xMax, pt.x);\r\n                yMin = Math.min(yMin, pt.y);\r\n                yMax = Math.max(yMax, pt.y);\r\n            });\r\n\r\n            // Bounding Box relativ zum Root bestimmen\r\n            var newBoundingBox = {\r\n                x: xMin,\r\n                y: yMin,\r\n                width: xMax - xMin,\r\n                height: yMax - yMin\r\n            };\r\n            //Viewbox berücksichtigen (x,y)\r\n            var viewBox = getViewbox(root);\r\n            if (viewBox) {\r\n                var vbArray = dwUtilsSplit(dwUtilsReplaceCharacter(viewBox, ' ', ','), ',', false);\r\n                if (vbArray.length == 4) {\r\n                    newBoundingBox.x -= parseFloat(dwUtilsTrim(vbArray[0])); //x-Verschiebung\r\n                    newBoundingBox.y -= parseFloat(dwUtilsTrim(vbArray[1])); //y-Verschiebung\r\n                }\r\n            }\r\n            //Position im Hotspot anpassen\r\n            hotspot.x1 = newBoundingBox.x;\r\n            hotspot.x2 = newBoundingBox.x + newBoundingBox.width;\r\n            hotspot.y1 = newBoundingBox.y;\r\n            hotspot.y2 = newBoundingBox.y + newBoundingBox.height;\r\n            hotspot.width = parseFloat(newBoundingBox.width);\r\n            hotspot.height = parseFloat(newBoundingBox.height);\r\n        } catch (exception) {\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * Bestimmung der Hotspot Informationen.\r\n *\r\n * Die Koordinaten des (Mouse-)Events werden aus dem absoluten Koordinaten System (relativ zu Viewport) umgewandelt\r\n * in interne Koordinaten, relativ zum SVG Objekt.\r\n *\r\n * Im Anschluss wird ein HIT Test ausgeführt. Bei mehreren Treffern wird optimiert, und das \"Original\" Objekt verwendet\r\n * sofern die Maus direkt über einer Linie war.\r\n *\r\n * Die gefundene Hotspot Information wird als Hashmap zurückgeliefert {hotspot : <hotspot>, node : <node>}\r\n *\r\n * @param event\r\n * @param elementId\r\n * @param ignoreSimpleHotspots\r\n * @returns {*}\r\n */\r\nfunction dwImageSVGGetBestSuitableHotspotForMouseLocation(event, elementId, ignoreSimpleHotspots) {\r\n    var image = dwImageViewerGetImage(elementId);\r\n    if (!image) {\r\n        return;\r\n    }\r\n\r\n    if (ignoreSimpleHotspots !== true) {\r\n        var matchSimpleHotspot = dwImageSVGGetSimpleHotspotAtPoint(image, event.clientX, event.clientY);\r\n        if (matchSimpleHotspot) {\r\n            return matchSimpleHotspot;\r\n        }\r\n    }\r\n\r\n    var imageLocation = dwUtilsGetLocationOnWindow(image, true, true);\r\n    var relativePositionToImage = new DWPoint(event.clientX - imageLocation.x, event.clientY - imageLocation.y);\r\n\r\n    var intersectionList = dwImageSVGGetIntersectionListForCoord(image, relativePositionToImage.x, relativePositionToImage.y);\r\n\r\n    var result = null;\r\n\r\n    for (var i = 0; i < intersectionList.length; i++) {\r\n        var match = dwImageSVGGetHotspotForOutlineNode(image, intersectionList[i]);\r\n        if (match) {\r\n            var nodeId = match.node.getAttribute(\"id\");\r\n            if (!result) {\r\n                // Bei einem Klon ist das Interesse am zugehörigen realen Knoten ...\r\n                var isClone = nodeId.indexOf(\"_clone\") > -1;\r\n                if (isClone) {\r\n                    var originalNodeName = nodeId.substring(0, nodeId.indexOf(\"_clone\"));\r\n                    match.node = image.contentDocument.getElementById(originalNodeName);\r\n                }\r\n                result = match;\r\n            } else {\r\n                var isClone = nodeId.indexOf(\"_clone\") > -1;\r\n                if (!isClone) {\r\n                    result = match;\r\n                }\r\n            }\r\n            if (result) {\r\n                break;\r\n            }\r\n        }\r\n    }\r\n    return result;\r\n}\r\n\r\nfunction dwImageSVGImageScrollpaneOnDoubleClickListener(event, elementId) {\r\n    var image = dwImageViewerGetImage(elementId);\r\n    if (!image) {\r\n        return;\r\n    }\r\n\r\n    var match = dwImageSVGGetBestSuitableHotspotForMouseLocation(event, elementId, false);\r\n    if (!match) {\r\n        return;\r\n    }\r\n\r\n    if (!match.isOutlineElement) {\r\n        // Der Listener ist nur für die Outlineelemente, die normalen Hotspots haben eigene Eventlistener\r\n        return;\r\n    }\r\n\r\n    var hotspotSpanClickArea = $(match.hotspot.uniqueId);\r\n    if (hotspotSpanClickArea && hotspotSpanClickArea.ondblclick) {\r\n        hotspotSpanClickArea.ondblclick(event);\r\n    }\r\n}\r\n\r\nfunction dwImageSVGImageScrollpaneOnClickListener(event, elementId) {\r\n    var image = dwImageViewerGetImage(elementId);\r\n    if (!image) {\r\n        return;\r\n    }\r\n\r\n    var match = dwImageSVGGetBestSuitableHotspotForMouseLocation(event, elementId, false);\r\n    if (!match) {\r\n        return;\r\n    }\r\n\r\n    if (!match.isOutlineElement) {\r\n        // Der Listener ist nur für die Outlineelemente, die normalen Hotspots haben eigene Eventlistener\r\n        return;\r\n    }\r\n\r\n    var hotspotSpanClickArea = $(match.hotspot.uniqueId);\r\n    if (hotspotSpanClickArea.onclick) {\r\n        hotspotSpanClickArea.onclick(event);\r\n    } else if (hotspotSpanClickArea.onmousedown) {\r\n        hotspotSpanClickArea.onmousedown(event);\r\n    }\r\n}\r\n\r\nfunction dwImageSVGImageScrollPaneOnMouseMoveListener(event, elementId) {\r\n    var image = dwImageViewerGetImage(elementId);\r\n    if (!image) {\r\n        return;\r\n    }\r\n\r\n    event = dwFrameworkGetEvent(event);\r\n\r\n    var lastOutlineMatch = image.lastOutlineMatch;\r\n    // Ignoriere die 'einfachen' Hotspots bei der Suche, da es nur um das Einfärben der outline-Elemente beim Hover geht.\r\n    // Falls ein 'einfacher' Hotspot über den Bereichen wäre, dann würde das Element nicht mehr eingefärbt\r\n    var match = dwImageSVGGetBestSuitableHotspotForMouseLocation(event, elementId, true);\r\n\r\n    if ((lastOutlineMatch == null) && (match == null)) {\r\n        return;\r\n    } else if ((lastOutlineMatch != null) && (match != null)) {\r\n        if ((lastOutlineMatch.hotspot.key == match.hotspot.key) &&\r\n            (lastOutlineMatch.node == match.node)) {\r\n            return;\r\n        }\r\n    }\r\n    if (lastOutlineMatch && lastOutlineMatch.hotspot.isWithHover) {\r\n        dwUtilsGetEventTarget(event).style.cursor = image.getAttribute(\"dwOpenCursor\");\r\n        dwImageSVGPaintHotspotOutline(lastOutlineMatch.hotspot, lastOutlineMatch.node, false);\r\n        dwTooltip_hideTooltips();\r\n    }\r\n\r\n    if (match && match.hotspot.isWithHover) {\r\n        dwUtilsGetEventTarget(event).style.cursor = \"pointer\";\r\n        dwImageSVGPaintHotspotOutline(match.hotspot, match.node, true);\r\n        dwTooltip_delayShowTooltip(event, match.hotspot.text, DWTOOLTIP_DELAY_DEFAULT_VALUE);\r\n    }\r\n    image.lastOutlineMatch = match;\r\n}\r\n\r\n/**\r\n * Liefert eine Liste mit SVGElementen zurück, die sich mit den Koordinaten überlappen\r\n * @param image\r\n * @param x\r\n * @param y\r\n * @returns {Array}\r\n */\r\nfunction dwImageSVGGetIntersectionListForCoord(image, x, y) {\r\n    var svgDocument = image.contentDocument;\r\n    if (!svgDocument) {\r\n        return [];\r\n    }\r\n    var root = svgDocument.documentElement;\r\n    if (!root) {\r\n        return [];\r\n    }\r\n\r\n    if (!image.hasHoverOrOutline) {\r\n        // Flag wird gesetzt, wenn es mind. 1 Hotspot gibt, bei dem das Flag gesetzt ist (DWK Konfiguration für hotspots)\r\n        // Nur dann muss (wegen Solidworks Mechanik) der vertikale Schnitt im SVG untersucht werden ob es Überschneidungen\r\n        // mit einem Hotspot gibt (highlight der hotspot Fläche bei mouse over)\r\n        return [];\r\n    }\r\n\r\n    var intersectionList = [];\r\n    if (svgDocument.elementsFromPoint) { // FF und Chrome\r\n        // Firefox ignoriert seit über 8 Jahren den SVG Standard, der die Methode getIntersectionList vorgibt\r\n        // Chrome kann zwar getIntersectionList - allerdings wird hier die BoundingBox (großes Rechteck) als Fläche zugrunde gelegt -> fehlerhafte Ermittlung\r\n        // IE unterstützt die getIntersectionList Methode korrekt\r\n        intersectionList = svgDocument.elementsFromPoint(x, y);\r\n    } else if (root.getIntersectionList) {\r\n        var intersectionRect = root.createSVGRect();\r\n        intersectionRect.x = x;\r\n        intersectionRect.y = y;\r\n        intersectionRect.width = intersectionRect.height = 1;\r\n        intersectionList = root.getIntersectionList(intersectionRect, null);\r\n    } else {\r\n        // Nachteil dieser Methode: es wird nur eine Fläche zurückgeliefert. Es kann auch eine ungünstige/falsche sein.\r\n        var intersectionElement = svgDocument.elementFromPoint(x, y);\r\n        if (intersectionElement) {\r\n            intersectionList.push(intersectionElement);\r\n        }\r\n    }\r\n    return intersectionList;\r\n}\r\n\r\n\r\n/**\r\n * Ermittelt, ob es an der Position eine einfache clickAerea für einen Hotspot gibt und liefert eine Struktur mit Hotspot,\r\n * dem node zurück.\r\n * @param image\r\n * @param x\r\n * @param y\r\n * @returns {{node: Element, hotspot: *, isOutlineElement: boolean}}\r\n */\r\nfunction dwImageSVGGetSimpleHotspotAtPoint(image, x, y) {\r\n    var element = document.elementFromPoint(x, y);\r\n\r\n    var hotspot = dwImageSVGGetHotspotByElement(image, element);\r\n\r\n    if (hotspot) {\r\n        return {\r\n            node: element,\r\n            hotspot: hotspot,\r\n            isOutlineElement: false\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * Liefert den Hotspot zu dieser ClickAerea zurück.\r\n * @param image\r\n * @param element\r\n * @returns {*}\r\n */\r\nfunction dwImageSVGGetHotspotByElement(image, element) {\r\n    if (element) {\r\n        if (image) {\r\n            for (var i = 0; i < image.hotspots.length; i++) {\r\n                var hotspot = image.hotspots[i];\r\n                if (element.id === hotspot.uniqueId) {\r\n                    return hotspot;\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * Liefert nur die Hotspot-ID ohne einen evtl. Suffix zurück (z.B. {@code filter_1234_ajsdhfkasjhdf => 1234}).\r\n *\r\n * @param nodeId\r\n * @returns Hotspot-ID ohne einen evtl. Suffix\r\n */\r\nfunction getHotspotIdWithoutSuffix(nodeId) {\r\n    let hotspotIdStrings = nodeId.split(\"_\");\r\n    if (hotspotIdStrings.length >= 2) {\r\n        return hotspotIdStrings[1];\r\n    } else {\r\n        return \"\";\r\n    }\r\n}\r\n\r\n/**\r\n * Liefert die Hotspot-ID inkl. einen evtl. Suffix zurück (z.B. {@code filter_1234_ajsdhfkasjhdf => 1234_ajsdhfkasjhdf}).\r\n *\r\n * @param nodeId\r\n * @returns Hotspot-ID inkl. einen evtl. Suffix\r\n */\r\nfunction getHostpotIdIncludingSuffix(nodeId) {\r\n    let hotspotIdSuffixIndex = nodeId.indexOf(\"_\");\r\n    if ((hotspotIdSuffixIndex >= 0) && (hotspotIdSuffixIndex < nodeId.length - 1)) {\r\n        return nodeId.substring(hotspotIdSuffixIndex + 1);\r\n    } else {\r\n        return \"\";\r\n    }\r\n}\r\n\r\n/**\r\n * Liefert die Hotspot Information (matching zwischen hotspot.key und node.class) zurück\r\n * @param image\r\n * @param node\r\n * @returns {{node: *, hotspot: *}}\r\n */\r\nfunction dwImageSVGGetHotspotForOutlineNode(image, node) {\r\n    let isASPLMversion2OrHigher = dwImageSVGIsASPLMOutlineVersionOrHigher(node.ownerDocument, 2);\r\n    while (node && node.tagName) {\r\n        if ((node.tagName === \"g\") && node.className.baseVal) {\r\n            if (isASPLMversion2OrHigher) {\r\n                return null;\r\n            }\r\n            var classNames = dwUtilsSplit(node.className.baseVal, \" \", false);\r\n            for (var i = 0; i < image.hotspots.length; i++) {\r\n                var hotspot = image.hotspots[i];\r\n                if (dwUtilsIsInArray(classNames, hotspot.key)) {\r\n                    return {\r\n                        node: node,\r\n                        hotspot: hotspot,\r\n                        isOutlineElement: true\r\n                    }\r\n                }\r\n            }\r\n        } else if (node.tagName === \"text\") {\r\n            if (dwImageSVGIsWithOutlinesByASPLM(node.ownerDocument)) {\r\n                // Spezielle Logik für Hotspots / Outlines aus dem ASPLM Umfeld\r\n                // Anhand des Text-Knotens wird der zugehörige \"hotspot_\" Knoten gesucht in dem die Outline Informationen\r\n                // zusammengefasst sind. Berücksichtigt werden muss, dass nur der Prefix fest ist, der Suffix bei den IDs ist variabel\r\n                let text = dwDomGetTextContent(node, [\"desc\", \"metadata\", \"title\"]).trim();\r\n                const hotspot = getHotspotForOutlineNodeById(text);\r\n                if (hotspot) {\r\n                    return hotspot;\r\n                }\r\n            }\r\n        } else if ((node.tagName === \"path\") || (node.tagName === \"rect\")) {\r\n            if (dwImageSVGIsWithOutlinesByASPLM(node.ownerDocument)) {\r\n                let hotspotId = getHotspotIdWithoutSuffix(node.id);\r\n                const hotspot = getHotspotForOutlineNodeById(hotspotId);\r\n                if (hotspot) {\r\n                    return hotspot;\r\n                }\r\n            }\r\n        }\r\n\r\n        function getHotspotForOutlineNodeById(hotspotId) {\r\n            for (let i = 0; i < image.hotspots.length; i++) {\r\n                let hotspot = image.hotspots[i];\r\n                if (hotspotId === hotspot.key) {\r\n                    let hotspotIdWithSuffix = getHostpotIdIncludingSuffix(node.id); // ID inkl. Suffix des Hotspots, z.B. 280 oder 280_1_\r\n                    let outlineNode = node.ownerDocument.getElementById(\"hotspot_\" + hotspotIdWithSuffix);\r\n                    if (!outlineNode) {\r\n                        // Standardmäßig sollte immer ein passendes image mit identischer ID zu einem Text Node existieren\r\n                        // Sicherheitshalber machen wir einen Fallback - der aber nie großartig zuschlagen sollte\r\n                        // Beim Highlight spielt die genaue ID nur eine nebensächliche Rolle - es werden alle Outlines\r\n                        // zu einem Basis Hotspot Key (zb 280 und damit 280, 280_ 280_1 280_1_ 280_2, ... usw ) angezeigt\r\n                        outlineNode = dwImageSVGFindMatchingNodesForPartialId(node.ownerDocument, \"hotspot_\" + hotspot.key).getFirst();\r\n                    }\r\n                    if (outlineNode) {\r\n                        return {\r\n                            node: outlineNode,\r\n                            hotspot: hotspot,\r\n                            isOutlineElement: true\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n            return null;\r\n        }\r\n\r\n        node = node.parentNode;\r\n    }\r\n}\r\n\r\nfunction dwImageSVGRemoveAllHotspots(elementId) {\r\n    let image = dwImageViewerGetImage(elementId);\r\n    if (image == null) { // kann durch die Verwendung von setTimeout() passieren\r\n        return;\r\n    }\r\n\r\n    let svgDoc = image.contentDocument;\r\n    if ((svgDoc) && (svgDoc.documentElement) && (svgDoc.documentElement.getElementById)) {\r\n        let existingHotspots = image.hotspots;\r\n        for (let i = 0; i < existingHotspots.length; i++) {\r\n            var node = svgDoc.documentElement.getElementById(existingHotspots[i].uniqueId);\r\n            if (node != null) {\r\n                dwDomRemoveSelf(node);\r\n            }\r\n        }\r\n    }\r\n\r\n    dwImageViewerRemoveAllHotspots(elementId);\r\n\r\n    // Flag \"isAlreadyHotspot\" in den Text-Elementen zurücksetzen\r\n    if (image.contentDocument) {\r\n        let textNodes = image.contentDocument.getElementsByTagName(\"text\");\r\n        let tspanNodes = image.contentDocument.getElementsByTagName(\"tspan\");\r\n        let textElements = [];\r\n        textElements = textElements.concat(dwUtilsToArray(textNodes));\r\n        textElements = textElements.concat(dwUtilsToArray(tspanNodes));\r\n        if ((textElements) && (textElements.length > 0)) {\r\n            for (let i = 0; i < textElements.length; i++) {\r\n                let textNode = textElements[i];\r\n                textNode.removeAttribute(\"isAlreadyHotspot\");\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\nfunction dwImageSVGMakeHotspots(image) {\r\n    if (image) {\r\n        var svgDoc = image.contentDocument;\r\n        if ((svgDoc) && (svgDoc.documentElement)) {\r\n            dwImageWriteToLog(image.elementId, \"Preparing Hotspot Creation: found documentElement\");\r\n            var root = svgDoc.documentElement;\r\n            var isBrowserEdge = (framework_isIE && (parseFloat(framework_browserVersion) > 11.0));\r\n            var isOutlinesByASPLM = root.getAttribute(\"svg_outline_generator\") === \"asplm\";\r\n            try {\r\n                // Alle Textelemente im SVG\r\n                // Ein TEXT Element kann kein / ein / beliebig viele TSPAN Elementen beinhalten\r\n                // Beinhaltet ein TEXT Element genau ein TSPAN Element (mit dem vollständigen Text)\r\n                // so wird das Hotspot matching für diesen Text aktuell mehrfach durchlaufen\r\n                var textNodes = image.contentDocument.getElementsByTagName(\"text\");\r\n                var tspanNodes = image.contentDocument.getElementsByTagName(\"tspan\");\r\n                var textElements = [];\r\n                textElements = textElements.concat(dwUtilsToArray(textNodes));\r\n                textElements = textElements.concat(dwUtilsToArray(tspanNodes));\r\n                if ((textElements) && (textElements.length > 0)) {\r\n                    dwImageWriteToLog(image.elementId, \"Preparing Hotspot Creation: found text elements (count=\" + textElements.length + \" - text=\" + textNodes.length + \" - tspan=\" + tspanNodes.length + \")\");\r\n                    //image.log(\"dwImageSVGMakeHotspots - Texts found\");\r\n                    var isSpacePreserve = false;\r\n                    if ((framework_isFirefox) && (root.hasAttribute(\"xml:space\")) && (root.getAttribute(\"xml:space\") == \"preserve\")) {\r\n                        //Verhalten im Firefox: wenn Attribut 'xml:space=\"preserve\"' gesetzt ist, liefert getBBox() auf den Textnodes falsche Werte (width zu groß)\r\n                        //Workaround: xml:space auf default setzen und nach der Berechnung der Hotspots wieder zurück auf preserve\r\n                        isSpacePreserve = true;\r\n                        root.setAttribute(\"xml:space\", \"default\");\r\n                    }\r\n\r\n                    var hotspot = null;\r\n                    //alle Hotspots durchlaufen und nach entsprechenden Textelementen im SVG suchen\r\n                    dwImageWriteToLog(image.elementId, \"Preparing Hotspot Creation: found hotspots (count=\" + image.hotspots.length + \")\");\r\n                    for (var i = 0; i < image.hotspots.length; i++) {\r\n                        hotspot = image.hotspots[i];\r\n                        if (hotspot != null) {\r\n                            //image.log(\"found hotspot \" + i + \"(key=\" + hotspot.key + \")\");\r\n                            var textHotSpot = hotspot.key;\r\n                            if (textHotSpot != \"\") {\r\n                                //image.log(\"found \" + textElements.length + \" textfragments\");\r\n                                for (var j = 0; j < textElements.length; j++) {\r\n                                    var textNode = textElements[j];\r\n                                    //Hotspot gefunden (Text stimmt überein und ist noch kein Hotspot)\r\n                                    if (dwImageIsHotspotNode(svgDoc, textNode, hotspot)) {\r\n                                        if (textNode.hasAttribute(\"isAlreadyHotspot\")) {\r\n                                            continue;\r\n                                        }\r\n\r\n                                        //Hotspot erzeugen\r\n                                        dwImageSVGCreateHotspot(root, textNode, hotspot, image.unmarkedHotspotsVisible);\r\n                                        //dieses Textnode als \"schon verarbeitet\" kennzeichnen\r\n                                        textNode.setAttribute(\"isAlreadyHotspot\", \"1\");\r\n\r\n                                        if (dwImageSVGIsWithHoverOrOutline(hotspot)) {\r\n                                            image.hasHoverOrOutline = true;\r\n                                            // Lattice Webmaster Konturen\r\n                                            // Ein übergeordnetes SVG Element ist ein Anchor Tag. Das Parent Element des Anchors wird\r\n                                            // mit einem classname analog zum IsoDraw Mechanismus (classname = hotspot.key) geflagt\r\n                                            var node = textNode;\r\n                                            while ((node != null) && (node.tagName != \"svg\")) {\r\n                                                if ((node.tagName == \"a\") && node.hasAttribute(\"xlink:href\")) {\r\n                                                    node = node.parentNode; // übergeordnete Group auswählen\r\n                                                    node.setAttribute(\"class\", hotspot.key);\r\n                                                    break;\r\n                                                }\r\n                                                node = node.parentNode;\r\n                                            }\r\n\r\n                                            if (node.className.baseVal != hotspot.key) {\r\n                                                var isoDraw73Hotspots = (svgDoc.getElementsByClassName(\"hotspot_\" + hotspot.key));\r\n                                                if (isoDraw73Hotspots && isoDraw73Hotspots.length) {\r\n                                                    for (var isoDrawHotspotIdx = 0; isoDrawHotspotIdx < isoDraw73Hotspots.length; isoDrawHotspotIdx++) {\r\n                                                        var isoDrawHotspot = isoDraw73Hotspots[isoDrawHotspotIdx];\r\n                                                        var classNames = isoDrawHotspot.getAttribute(\"class\") || \"\";\r\n                                                        if (classNames) {\r\n                                                            classNames += \" \";\r\n                                                        }\r\n                                                        classNames += hotspot.key;\r\n                                                        isoDrawHotspot.setAttribute(\"class\", classNames);\r\n                                                    }\r\n                                                } else if (isOutlinesByASPLM) {\r\n                                                    let parentNode = textNode.parentNode;\r\n                                                    let outlineNode = null;\r\n                                                    while ((parentNode != null) && (parentNode.tagName.toLowerCase() !== \"svg\")) {\r\n                                                        let parentNodeId = parentNode.getAttribute(\"id\");\r\n                                                        if (!dwUtilsStringStartsWith(parentNodeId, \"hotspot_\", false)) {\r\n                                                            // Offen ist, ob die while-Schleife notwendig ist,\r\n                                                            // aber das Navigieren zum potentiellen Root erlaubt eine höhere Flexibilität der Datenstrukturen.\r\n                                                            // Vorkommen kann diese Struktur zb. bei <symbol><text> Kombinationen (zb Motorcode_Benzin).\r\n                                                            parentNode = parentNode.parentNode;\r\n                                                            continue;\r\n                                                        }\r\n                                                        outlineNode = parentNode;\r\n                                                        let hotspotIdWithSuffix = getHostpotIdIncludingSuffix(parentNodeId); // ID inkl. Suffix des Hotspots, z.B. 280 oder 280_1_\r\n                                                        let hotspotId = getHotspotIdWithoutSuffix(parentNodeId);\r\n                                                        let outlinePathId = \"path_\" + hotspotId;\r\n                                                        let outlinePaths = dwImageSVGFindMatchingNodesForPartialId(svgDoc, outlinePathId).getNodes();\r\n                                                        if (outlinePaths.length === 0) {\r\n                                                            let outlinePath = dwImageSVGCreateOutlinePathRectForASPLM(svgDoc, outlineNode, \"path_\" + hotspotIdWithSuffix)\r\n                                                            outlinePaths.push(outlinePath);\r\n                                                        }\r\n                                                        outlinePaths.forEach(node => node.setAttribute(\"pointer-events\", \"visibleFill\"));\r\n                                                        // Class Mechanismus wird für die Erkennung der Outlines verwendet\r\n                                                        // Bei Mouse-Move Effekten werden Elemente mit class=hotspot.key ermittelt und\r\n                                                        // die Outline visualisiert\r\n                                                        outlineNode.setAttribute(\"class\", hotspot.key)\r\n                                                        break;\r\n                                                    }\r\n                                                } else {\r\n                                                    // Solidworks Composer Konturen\r\n                                                    // In Abhängigkeit des SVG Formats (z.B. Solidworks Composer Quellformat) steht die zum Text-Hotspot\r\n                                                    // zugehörige Kontur/Fläche in keinem logischen Zusammenhang.\r\n                                                    // Bei der Überprüfung der überlappenden SVG Elemente wird nach Eigenschaften gesucht,\r\n                                                    // die auf eine Kontur/Fläche schließen lassen und so künstlich die logische Verknüpfung zum\r\n                                                    // Stücklisten-Hotspot hergestellt\r\n\r\n                                                    var intersectingNodes = null;\r\n                                                    //Problem im Edge Browser: getBoundingClientRect liefert keine verwertbaren Koordinaten, deshalb stattdessen getBBox verwenden\r\n                                                    if (isBrowserEdge) {\r\n                                                        var textBounds = textNode.getBBox();\r\n                                                        intersectingNodes = dwImageSVGGetIntersectionListForCoord(image, textBounds.x + textBounds.width / 2, textBounds.y + textBounds.height / 2);\r\n                                                    } else {\r\n                                                        var textBounds = textNode.getBoundingClientRect();\r\n                                                        intersectingNodes = dwImageSVGGetIntersectionListForCoord(image, textBounds.left + textBounds.width / 2, textBounds.top + textBounds.height / 2);\r\n                                                    }\r\n\r\n                                                    for (var intersectingNodeIdx = 0; intersectingNodeIdx < intersectingNodes.length; intersectingNodeIdx++) {\r\n                                                        var intersectedNode = intersectingNodes[intersectingNodeIdx];\r\n                                                        var outlineNode = intersectedNode;\r\n                                                        while (outlineNode != null) {\r\n                                                            // In der Pfad Struktur kann (aber muss nicht) ein Anchor Tag auftauchen\r\n                                                            // Indikator ist aber idR die group mit der ID \"hotspot.<zahl>\", auf die das Class Attribut gesetzt werden muss\r\n                                                            // Die Parent Struktur wird komplett durchlaufen auf der Suche nach einem passenden Element\r\n                                                            if (outlineNode.id && dwUtilsStringStartsWith(outlineNode.id, \"hotspot.\", true)) {\r\n                                                                outlineNode.setAttribute(\"class\", hotspot.key);\r\n                                                                outlineNode.style.transition = \"opacity ease 0.2s\";\r\n                                                                intersectingNodeIdx = intersectingNodes.length;\r\n                                                                break;\r\n                                                            }\r\n                                                            outlineNode = outlineNode.parentNode;\r\n                                                        }\r\n                                                    }\r\n                                                }\r\n                                            }\r\n                                        }\r\n                                        //Schleife beenden, damit Hotspot-Koordinaten nicht vom nächsten Textvorkommen wieder überschrieben werden\r\n                                        break;\r\n                                    }\r\n                                }\r\n\r\n                                if (dwImageSVGIsWithHoverOrOutline(hotspot)) {\r\n                                    if (!dwImageSVGIsWithOutlinesByASPLM(svgDoc)) {\r\n                                        // Für die Visualisierung wird idR eine Kopie der Outline erzeugt\r\n                                        // und bei Highlight die Linien-Dicke/Farbe beeinflusst (ohne das Original zu verändern)\r\n                                        // Bei Daten aus ASPLM ist dieser Ansatz unnötig - das SVG wird nicht unnötig \"aufgebläht\"\r\n                                        dwImageSVGPCreateHotspotOutlineClone(hotspot);\r\n                                    }\r\n                                    dwImageSVGPaintHotspotOutlineForKey(hotspot, false);\r\n                                }\r\n                            }\r\n                        }\r\n                    }\r\n                    if (dwImageSVGIsWithRerenderUnlinkedImageHotspots(root)) {\r\n                        let unlinkedTextElements = [];\r\n                        let linkedTextElementsWithoutHover = []\r\n                        // Schleife muss erneut durchlaufen werden, diesmal erst Text dann Hotspot - damit leichter Textelemente ohne Verlinkung identifiziert werden können\r\n                        for (let i = 0; i < textElements.length; i++) {\r\n                            let textNode = textElements[i];\r\n                            if (textNode.hasAttribute(\"isAlreadyHotspot\")) {\r\n                                // Es kann Hotspots geben die keine Outline haben\r\n                                let text = dwDomGetTextContent(textNode, [\"desc\", \"metadata\", \"title\"]).trim();\r\n                                for (let j = 0; j < image.hotspots.length; j++) {\r\n                                    let hotspot = image.hotspots[j];\r\n                                    if (hotspot.key === text && !dwImageSVGIsWithHoverOrOutline(hotspot)) {\r\n                                        linkedTextElementsWithoutHover.push(textNode);\r\n                                        break;\r\n                                    }\r\n                                }\r\n                                continue;\r\n                            }\r\n                            unlinkedTextElements.push(textNode);\r\n                        }\r\n                        dwImageSVGRenderUnlinkedImageHotspots(svgDoc, unlinkedTextElements);\r\n                        dwImageSVGRenderUnhoverableImageHotspots(svgDoc, linkedTextElementsWithoutHover);\r\n                    }\r\n\r\n                    if (isSpacePreserve) {\r\n                        //nach dem Laden der Hotspots Attribut wieder auf xml:space=preserve zurücksetzen\r\n                        root.setAttribute(\"xml:space\", \"preserve\");\r\n                    }\r\n\r\n                    //Nochmal laden, damit die geänderten Hotspotpositionen auch angezeigt werden\r\n                    dwImageViewerSetNormalizedZoom_immediately(image, true);\r\n                }\r\n            } catch (exception) {\r\n                dwImageWriteToLog(image.elementId, \"Error while making hotspots: \" + exception.toString());\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\n// Prüft auf Schriftgröße, -art und -gewichtung. Ist ein Wert nicht angegeben, gilt dies als gültig\r\nfunction isValidFont(textNode, hotspot) {\r\n    if ((textNode == null) || (hotspot == null)) {\r\n        dwImageWriteToLog(image.elementId, \"Font check failed. TextNode = \" + textNode + \", hotspot = \" + hotspot);\r\n        return false;\r\n    }\r\n\r\n    try {\r\n        if (!isValidFontSize(textNode, hotspot) || (!isValidFontName(textNode, hotspot) || (!isValidFontWeight(textNode, hotspot)))) {\r\n            return false;\r\n        }\r\n    } catch (exception) {\r\n        dwImageWriteToLog(image.elementId, \"Error on comparing font size, name or weight\");\r\n        return false;\r\n    }\r\n    return true;\r\n}\r\n\r\nfunction isValidFontSize(textNode, hotspot) {\r\n    // Fehlt die font-Size Angabe, ist der Hotspot auf jeden Fall gültig\r\n    if (hotspot.fontSize.length === 0) {\r\n        return true;\r\n    }\r\n\r\n    // beide Werte auf 2 Stellen runden, weil window.getComputedStyle(node).fontSize zwar auch in der Workbench\r\n    // zur Bestimmung der Schriftgröße verwendet wird, aber anscheinend (browserabhängig?)\r\n    // unterschiedliche Werte liefert (Bsp.: in der DB steht fontsize 3.53, wir berechnen hier 3.528px)\r\n    const fontSizeNode = ((Math.round(parseFloat(dwUtilsGetStyle(textNode, \"font-size\")) * 100)) / 100);\r\n    const fontSizeHotspot = ((Math.round(parseFloat(hotspot.fontSize) * 100)) / 100);\r\n    return checkWithTolerance(fontSizeNode, fontSizeHotspot, 0.03);\r\n}\r\n\r\n// Werte mit Toleranz vergleichen\r\nfunction checkWithTolerance(valueToBeChecked, valueTarget, tolerance) {\r\n    // Alles Zahlen?\r\n    if (!parseFloat(valueToBeChecked) || !parseFloat(valueTarget) || !parseFloat(tolerance)) {\r\n        return false;\r\n    }\r\n    // Liegt der Wert im Toleranzbereich?\r\n    const toleranceMin = ((Math.round(parseFloat(valueTarget - tolerance) * 100)) / 100);\r\n    const toleranceMax = ((Math.round(parseFloat(valueTarget + tolerance) * 100)) / 100);\r\n    return ((valueToBeChecked >= toleranceMin) && (valueToBeChecked <= toleranceMax));\r\n}\r\n\r\nfunction isValidFontName(textNode, hotspot) {\r\n    // Fehlt die Schriftart Angabe, ist der Hotspot auf jeden Fall gültig\r\n    if (hotspot.fontName.length === 0) {\r\n        return true;\r\n    }\r\n    const fontNameNode = dwUtilsGetStyle(textNode, \"font-family\");\r\n    return (hotspot.fontName === fontNameNode);\r\n}\r\n\r\nfunction isValidFontWeight(textNode, hotspot) {\r\n    // Fehlt die Gewichtung, ist der Hotspot auf jeden Fall gültig\r\n    if (hotspot.fontWeight.length === 0) {\r\n        return true;\r\n    }\r\n    const fontWeightNode = dwUtilsGetStyle(textNode, \"font-weight\");\r\n    return (hotspot.fontWeight === fontWeightNode);\r\n}\r\n\r\n\r\n//neuen Knoten ins SVG einhängen (vor altem Knoten) und alten Knoten entfernen\r\nfunction dwImageSVGReplaceNode(oldNode, newNode, attributesToCopy) {\r\n    if ((oldNode) && (oldNode.parentNode) && (newNode)) {\r\n        if (attributesToCopy instanceof Array) {\r\n            for (var i = 0; i < attributesToCopy.length; i++) {\r\n                var attributeName = attributesToCopy[i];\r\n                //framework_logger.log(\"copying svg attribute '\" + attributeName + \"' = '\" + oldNode.getAttribute(attributeName) + \"'\");\r\n                newNode.setAttribute(attributeName, oldNode.getAttribute(attributeName));\r\n            }\r\n        }\r\n        var parentNode = oldNode.parentNode;\r\n        parentNode.replaceChild(newNode, oldNode);\r\n    }\r\n}\r\n\r\nfunction dwImageSVGPaintHotspot(hotspot) {\r\n    if (hotspot) {\r\n        var image = dwImageViewerGetImage(hotspot.elementId);\r\n        if (image) {\r\n            var svgDoc = image.contentDocument;\r\n            if ((svgDoc) && (svgDoc.documentElement) && (svgDoc.documentElement.getElementById)) {\r\n                // Repaint des Knotens (z.B. nach Selektion). Der Knoten muss vorher bereits erzeugt worden sein.\r\n                var node = svgDoc.documentElement.getElementById(hotspot.uniqueId);\r\n                if (!node) {\r\n                    return;\r\n                }\r\n                // Vorhandene Bounding Box auslesen und für den repaint verwenden\r\n                var boundingBoxArray = node.getAttribute(\"textBoundingBox\").split(\" \");\r\n                var bBoxRectangle = new DWRectangle(parseFloat(boundingBoxArray[0]), parseFloat(boundingBoxArray[1]), parseFloat(boundingBoxArray[0]) + parseFloat(boundingBoxArray[2]), parseFloat(boundingBoxArray[1]) + parseFloat(boundingBoxArray[3]));\r\n                //Hotspots zeichnen (Rechteck, Ellipse...)\r\n                dwImageSVGPaintHotspotNode(hotspot, node, bBoxRectangle, image.unmarkedHotspotsVisible);\r\n\r\n                if (dwImageSVGIsWithHoverOrOutline(hotspot)) {\r\n                    dwImageSVGPaintHotspotOutlineForKey(hotspot, false);\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\nfunction dwImageSVGCreateNewNodeIfRequired(oldNode, nodeType) {\r\n    var node = null;\r\n    if (!oldNode) {\r\n        // Knoten gibts noch nicht - neu erzeugen\r\n        node = document.createElementNS(\"http://www.w3.org/2000/svg\", nodeType);\r\n    } else if (!dwImageElementIsTag(oldNode, nodeType)) {\r\n        // Knoten gibt es schon, ist aber ein anderer Typ, deshalb neu erzeugen und Attribute kopieren\r\n        node = document.createElementNS(\"http://www.w3.org/2000/svg\", nodeType);\r\n        // Übernimmt wichtige Attribute aus dem alten Knoten, und ersetzt diesen danach im DOM durch den neuen Knoten\r\n        dwImageSVGReplaceNode(oldNode, node, [\"id\", \"transform\", \"textBoundingBox\"]);\r\n    } else {\r\n        //Knoten gibt es schon und ist der gleiche typ\r\n        node = oldNode;\r\n    }\r\n    return node;\r\n}\r\n\r\nfunction dwImageSVGPaintHotspotOutline(hotspot, outlineNode, isHover) {\r\n    // Bei Solidworks Composer sind die Konturen/Hotspotflächen initial transparent (opacity)\r\n    // Hier wird nicht die Farbe gesetzt, sondern der Hover/Selektionseffekt durch Anpassung des Attributs erzielt\r\n    if (dwImageSVGIsWithOutlinesByASPLM(outlineNode.ownerDocument)) {\r\n        let outlineNodeId = outlineNode.getAttribute(\"id\");\r\n        let basicHotspotIdSuffix = outlineNodeId.substring(\"hotspot_\".length);\r\n        let basicHotspotIdUnderscoreIdx = basicHotspotIdSuffix.indexOf(\"_\"); // Hat die Id einen Suffix in sich (z.B. text_123_ oder text_123_1)\r\n        if (basicHotspotIdUnderscoreIdx >= 0) {\r\n            // kürzt den Suffix von 123_1 auf 123\r\n            // Basic Suffix wird verwendet zur Bestimmung aller passenden Hotspot Texte/Outlines zu dem Hotspot Key\r\n            basicHotspotIdSuffix = basicHotspotIdSuffix.substring(0, basicHotspotIdUnderscoreIdx);\r\n        }\r\n\r\n        let textNodeId = \"text_\" + basicHotspotIdSuffix;\r\n        let outlineFilterId = \"filter_\" + basicHotspotIdSuffix;\r\n        // Suche nach allen passenden Text-Knoten (beginnend mit textNodeId)\r\n        // Bei ID 16 können aber auch 160, 161, ...1600, ... zurückgeliefert werden. Das muss erst mal noch gefiltert werden\r\n        let textNodes = dwImageSVGFindMatchingNodesForPartialId(outlineNode.ownerDocument, textNodeId).getNodes();\r\n        let outlineFilterNodes = dwImageSVGFindMatchingNodesForPartialId(outlineNode.ownerDocument, outlineFilterId).getNodes();\r\n        if (isHover || hotspot.marked) {\r\n            for (let i = 0; i < outlineFilterNodes.length; i++) {\r\n                let outlineFilter = outlineFilterNodes[i];\r\n                outlineFilter.setAttribute(\"filter\", \"url(#HighlightMe)\");\r\n            }\r\n            let highLightTextFilterExists = outlineNode.ownerDocument.getElementById(\"HighlightText\");\r\n            for (let i = 0; i < textNodes.length; i++) {\r\n                let textNode = textNodes[i];\r\n                if (!dwUtilsStringContains(textNode.className.baseVal, \" st_high\")) {\r\n                    textNode.className.baseVal = textNode.className.baseVal + \" st_high\";\r\n                }\r\n                if (highLightTextFilterExists) {\r\n                    textNode.setAttribute(\"filter\", \"url(#HighlightText)\");\r\n                }\r\n            }\r\n        } else {\r\n            for (let i = 0; i < outlineFilterNodes.length; i++) {\r\n                let outlineFilter = outlineFilterNodes[i];\r\n                outlineFilter.setAttribute(\"filter\", \"url(#NoHighlight)\");\r\n            }\r\n            for (let i = 0; i < textNodes.length; i++) {\r\n                let textNode = textNodes[i];\r\n                // Nicht kompatibel mit IE11 ... (unterstützt keine fat arrow und filter Methoden)\r\n                let classNames = textNode.className.baseVal.split(\" \");\r\n                let resultingClassNames = [];\r\n                for (let cIdx = 0; cIdx < classNames.length; cIdx++) {\r\n                    let className = classNames[cIdx];\r\n                    if (className === \"st_high\") {\r\n                        continue;\r\n                    }\r\n                    resultingClassNames.push(className);\r\n                }\r\n                textNode.className.baseVal = resultingClassNames.join(\" \");\r\n                textNode.removeAttribute(\"filter\");\r\n            }\r\n        }\r\n        return;\r\n    }\r\n    if (outlineNode.hasAttribute(\"opacity\")) {\r\n        if (isHover || hotspot.marked) {\r\n            outlineNode.setAttribute(\"opacity\", \"0.5\");\r\n        } else {\r\n            outlineNode.setAttribute(\"opacity\", \"0\");\r\n        }\r\n        return;\r\n    }\r\n\r\n    // TODO Methodik näher beschreiben, Worfklow ggf. optimieren (d.h. original Attribut im onload setzen, ...)?\r\n    // Bei IsoDraw werden die (stroke-) Farben gesetzt\r\n    if (!outlineNode.hasAttribute(\"stroke\")) {\r\n        // zuerst Originalfarbe setzen, damit man wieder zur Ursprungsfarbe zurückgehen kann\r\n        // sonst wird u.U. bei dwImageSVGGetHotspotOriginalColor die Selektionsfarbe als Originalfarbe reingeschrieben und das Teil nicht mehr deselektiert\r\n        outlineNode.style.stroke = dwImageSVGGetHotspotOriginalColor(outlineNode, \"stroke\");\r\n    }\r\n\r\n    //strokeColor setzen (je nachdem, ob der Knoten gehovert, selektiert oder in der Originalfarbe angezeigt werden soll)\r\n    dwImageSVGSetHotspotOutlineColorAttribute(hotspot, outlineNode, isHover, \"stroke\");\r\n\r\n\r\n    // DAIMLER DATEN\r\n    //if (outlineNode.children.length > 0) {\r\n    //    var child = outlineNode.children[0];\r\n    //    if (child.hasAttribute(\"visibility\")) {\r\n    //        var visValue = isHover || hotspot.marked ? \"visible\" : \"visible\";\r\n    //        child.setAttribute(\"visibility\", visValue);\r\n    //    }\r\n    //}\r\n\r\n    //in den Kindknoten nach Elementen suchen, die bereits eine Füllfarbe haben und dort explizit die aktuelle Farbe setzen\r\n    dwImageSVGPaintHotspotOutlineFixColor(hotspot, outlineNode, isHover, true);\r\n}\r\n\r\nfunction dwImageSVGPaintHotspotOutlineForKey(hotspot, isHover) {\r\n    var svgDocument = dwImageSVGGetDocument(hotspot.elementId);\r\n    if (!svgDocument) {\r\n        return;\r\n    }\r\n    var elementsByClassname = svgDocument.getElementsByClassName(hotspot.key);\r\n    if (elementsByClassname) {\r\n        for (var j = 0; j < elementsByClassname.length; j++) {\r\n            var elementByClassname = elementsByClassname[j];\r\n            if (elementByClassname.tagName.toLowerCase() == \"g\") {\r\n                dwImageSVGPaintHotspotOutline(hotspot, elementByClassname, isHover);\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\nfunction dwImageSVGIsWithOutlinesByASPLM(svgDocument) {\r\n    let root = dwImageSVGGetRootElement(svgDocument);\r\n    if (!root) {\r\n        return false;\r\n    }\r\n    return root.getAttribute(\"svg_outline_generator\") === \"asplm\";\r\n}\r\n\r\nfunction dwImageSVGIsASPLMOutlineVersionOrHigher(svgDocument, version) {\r\n    if (!dwImageSVGIsWithOutlinesByASPLM(svgDocument)) {\r\n        return false;\r\n    }\r\n    let root = dwImageSVGGetRootElement(svgDocument);\r\n    if (!root) {\r\n        return false;\r\n    }\r\n    let outlineVersion = root.getAttribute(\"svg_outline_version\");\r\n    if (!outlineVersion) {\r\n        return false;\r\n    }\r\n    return parseInt(outlineVersion) >= parseInt(version);\r\n}\r\n\r\nfunction dwImageSVGCreatePointForASPLM(svgDocument, x, y) {\r\n    const pt = svgDocument.documentElement.createSVGPoint();\r\n    pt.x = x;\r\n    pt.y = y;\r\n\r\n    return pt.matrixTransform(svgDocument.documentElement.getScreenCTM().inverse());\r\n}\r\n\r\n\r\nfunction dwImageSVGCreateOutlinePathRectForASPLM(svgDocument, hotspotNode, outlinePathId) {\r\n    let boundRect = hotspotNode.getBoundingClientRect();\r\n    // For embedded SVG in html page DOM to SVG transformation is needed\r\n    let boundRectTxy = dwImageSVGCreatePointForASPLM(svgDocument, boundRect.x, boundRect.y);\r\n    let boundRectTxy2 = dwImageSVGCreatePointForASPLM(svgDocument, boundRect.x + boundRect.width, boundRect.y + boundRect.height);\r\n\r\n    let newRect = svgDocument.createElementNS(\"http://www.w3.org/2000/svg\", 'rect');\r\n    newRect.setAttribute(\"id\", outlinePathId);\r\n    newRect.setAttribute(\"x\", boundRectTxy.x);\r\n    newRect.setAttribute(\"y\", boundRectTxy.y);\r\n    newRect.setAttribute(\"width\", Math.abs(boundRectTxy2.x - boundRectTxy.x));\r\n    newRect.setAttribute(\"height\", Math.abs(boundRectTxy2.y - boundRectTxy.y));\r\n    newRect.setAttribute(\"fill\", \"none\");\r\n    newRect.setAttribute(\"pointer-events\", \"visibleFill\");\r\n\r\n    let hotspotPathsGroup = svgDocument.getElementById(\"hotspot-paths\");\r\n    if (!hotspotPathsGroup) {\r\n        hotspotPathsGroup = svgDocument.createElementNS(\"http://www.w3.org/2000/svg\", \"g\")\r\n        hotspotPathsGroup.setAttribute(\"id\", \"hotspot-paths\");\r\n        svgDocument.documentElement.appendChild(hotspotPathsGroup)\r\n    }\r\n\r\n    const hotspotPath = dwDomGetFirstElementChild(hotspotPathsGroup);\r\n    if (!hotspotPath) {\r\n        hotspotPathsGroup.appendChild(newRect);\r\n        return newRect;\r\n    }\r\n\r\n    if (hotspotPath.tagName === \"path\") {\r\n        // Noch keine Rectangles hinzugefügt. Keine weitere Sortierung der Rectangles nach Größe notwendig\r\n        hotspotPathsGroup.insertBefore(newRect, hotspotPath);\r\n        return newRect;\r\n    }\r\n\r\n    // Sortierung nach Größe der Rectangles (größte zuerst, damit kleinere darüber liegen)\r\n    const rectangles = hotspotPathsGroup.querySelectorAll(\"rect\");\r\n    for (const nextBigger of rectangles) {\r\n        const nextBiggerBoundRect = nextBigger.getBoundingClientRect();\r\n        if (boundRect.width * boundRect.height > nextBiggerBoundRect.width * nextBiggerBoundRect.height) {\r\n            hotspotPathsGroup.insertBefore(newRect, nextBigger);\r\n            return newRect;\r\n        }\r\n    }\r\n\r\n    // Es ist davon auszugehen, dass mindestens 1 Rectangle vorher definiert war - ansonsten ist es bereits vor dem ersten\r\n    // path Element eingefügt\r\n    // Rectangle ist das kleinste und muss direkt vor dem ersten Path bzw. ganz hinten eingefügt werden, falls es keinen\r\n    // Path gibt\r\n    if (hotspotPath) {\r\n        hotspotPathsGroup.insertBefore(newRect, hotspotPath);\r\n    } else {\r\n        hotspotPathsGroup.appendChild(newRect);\r\n    }\r\n\r\n    return newRect\r\n}\r\n\r\nfunction dwImageSVGHighlightUnlinkedHotspotsByASPLM(svgDoc, nodes) {\r\n    if (!dwImageSVGIsWithOutlinesByASPLM(svgDoc)) {\r\n        return;\r\n    }\r\n\r\n    // Zunächst alle nicht verlinkten Hotspot-Nummern ermitteln\r\n    let unlinkedNodes = [];\r\n    let unlinkedHotspotIds = [];\r\n    for (let i = 0; i < nodes.length; i++) {\r\n        let node = nodes[i];\r\n        let nodeId = node.getAttribute(\"id\");\r\n        if (!nodeId || !dwUtilsStringStartsWith(nodeId, \"text_\", false)) {\r\n            continue;\r\n        }\r\n        unlinkedNodes.push(node);\r\n        unlinkedHotspotIds.push(getHotspotIdWithoutSuffix(nodeId));\r\n    }\r\n\r\n    // Jetzt diese Hotspots gedimmt darstellen\r\n    for (let i = 0; i < unlinkedNodes.length; i++) {\r\n        let node = unlinkedNodes[i];\r\n        let hotspotId = unlinkedHotspotIds[i];\r\n        let filter = dwImageSVGFindMatchingNodesForPartialId(svgDoc, \"filter_\" + hotspotId).getNodes();\r\n        if ((filter != null) && (filter.length > 0)) {\r\n            filter.forEach(filterNode => {\r\n                // Jetzt überprüfen, ob es sich um eine Gruppe handelt und Hotspots innerhalb dieser Gruppe in der Stückliste\r\n                // vorhanden sind -> in diesem Fall die Gruppe nicht gedimmt darstellen\r\n                let groupHotspotIds = dwImageSVGFindAllGroupHotspotIdsForPartialId(svgDoc, filterNode);\r\n                let linkedHotspotFound = false;\r\n                for (let groupIndex = 0; groupIndex < groupHotspotIds.length; groupIndex++) {\r\n                    if (!dwUtilsIsInArray(unlinkedHotspotIds, groupHotspotIds[groupIndex])) {\r\n                        linkedHotspotFound = true;\r\n                        break;\r\n                    }\r\n                }\r\n                if (!linkedHotspotFound) {\r\n                    // Alle FilterNodes, die mit der HotspotId beginnen (z.B. 1234, 1234_44213) als inaktiv markieren\r\n                    filterNode.setAttribute(\"filter\", \"url(#DimmedInactive)\");\r\n                } else if (filterNode.getAttribute(\"filter\") === \"url(#DimmedInactive)\") {\r\n                    filterNode.setAttribute(\"filter\", \"url(#NoHighlight)\");\r\n                }\r\n            });\r\n        }\r\n\r\n        node.className.baseVal = node.className.baseVal + \" st_dimmed\";\r\n    }\r\n}\r\n\r\nfunction dwImageSVGFindMatchingNodesForPartialId(svgDoc, partialId) {\r\n    let possibleMatches = svgDoc.querySelectorAll('[id^=' + partialId + \"]\");\r\n    let matches = [];\r\n    for (let i = 0; i < possibleMatches.length; i++) {\r\n        let possibleMatchId = possibleMatches[i].getAttribute(\"id\");\r\n        if ((possibleMatchId === partialId) || dwUtilsStringStartsWith(possibleMatchId, partialId + \"_\", false)) {\r\n            let match = svgDoc.getElementById(possibleMatchId);\r\n            if (match) {\r\n                matches.push(match);\r\n            }\r\n        }\r\n    }\r\n    return {\r\n        getNodes: function() {\r\n            return matches\r\n        },\r\n        getFirst: function() {\r\n            return matches.length ? matches[0] : null\r\n        }\r\n    };\r\n}\r\n\r\nfunction dwImageSVGFindAllGroupHotspotIdsForPartialId(svgDoc, groupNode) {\r\n    // Ab AS-PLM Outline Version 2 werden die ehemals notwendigen filtered_hotspot_ Gruppen nicht mehr generiert.\r\n    // -> Filter sind verlinkt mit der original Hotspot-Gruppe.\r\n    let childNodeIdPrefix = dwImageSVGIsASPLMOutlineVersionOrHigher(svgDoc, 2) ? \"hotspot_\" : \"filtered_hotspot_\";\r\n\r\n    let todoNodes = [groupNode];\r\n    let groupHotspots = [];\r\n    while (todoNodes.length) {\r\n        let todoNode = todoNodes.pop();\r\n        let todoNodeId = dwDomGetDomAttribute(todoNode, \"id\");\r\n        if (todoNodeId && dwUtilsStringStartsWith(todoNodeId, \"text_\", false)) {\r\n            groupHotspots.push(getHotspotIdWithoutSuffix(todoNodeId)); // Hotspot in der Gruppe gefunden\r\n        } else {\r\n            let elements = dwDomGetElementChildNodes(todoNode);\r\n            if (elements && elements.length) {\r\n                // Alle Kind-Elemente auf den Stack pushen zur weiteren Untersuchung\r\n                for (let i = 0; i < elements.length; i++) {\r\n                    todoNodes.push(elements[i]);\r\n                }\r\n            } else if (todoNodeId && dwUtilsStringStartsWith(todoNodeId, \"filter_\", false)) {\r\n                // use-Tags mit \"filter_*\" haben nur einen ShadowRoot, der nicht normal über dwDomGetElementChildNodes()\r\n                // seine Kind-Elemente zurückgibt. Stattdessen das darin befindliche g-Tag mit \"filtered_hotspot_*\" suchen\r\n                // und dieses als Kind auf den Stack pushen zur weiteren Untersuchung.\r\n\r\n                let hotspotId = getHotspotIdWithoutSuffix(todoNodeId);\r\n                let childNodes = dwImageSVGFindMatchingNodesForPartialId(svgDoc, childNodeIdPrefix + hotspotId).getNodes();\r\n                if (childNodes) {\r\n                    todoNodes.push(...childNodes);\r\n                }\r\n            }\r\n        }\r\n    }\r\n    return groupHotspots;\r\n}\r\n\r\nfunction dwImageSVGGetRootElement(svgDocument) {\r\n    if (!svgDocument) {\r\n        return null;\r\n    }\r\n    return svgDocument.documentElement;\r\n}\r\n\r\nfunction dwImageSVGPCreateHotspotOutlineClone(hotspot) {\r\n    var svgDocument = dwImageSVGGetDocument(hotspot.elementId);\r\n    if (!svgDocument) {\r\n        return;\r\n    }\r\n\r\n    var elementsByClassname = svgDocument.getElementsByClassName(hotspot.key);\r\n    if (elementsByClassname) {\r\n        for (var j = 0; j < elementsByClassname.length; j++) {\r\n            var elementByClassname = elementsByClassname[j];\r\n            if (elementByClassname.tagName.toLowerCase() == \"g\") {\r\n                if (elementByClassname.hasAttribute(\"isCloned\")) {\r\n                    continue;\r\n                }\r\n                if (elementByClassname.hasAttribute(\"dw_stroke_big_clone\")) {\r\n                    continue;\r\n                }\r\n                var groupClone = elementByClassname.cloneNode(true);\r\n                groupClone.setAttribute(\"id\", elementByClassname.getAttribute(\"id\") + \"_clone\");\r\n                groupClone.setAttribute(\"dw_stroke_big_clone\", \"1\");\r\n                groupClone.style.stroke = \"transparent\";\r\n                groupClone.style.opacity = \"0\";\r\n                dwImageSVGModifyStroke(groupClone, \"#00FF00\", 10, true);\r\n\r\n                elementByClassname.parentNode.appendChild(groupClone);\r\n                elementByClassname.setAttribute(\"isCloned\", \"1\");\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\nfunction dwImageSVGModifyStroke(node, strokeColor, strokeWidthMultiplier, recursive) {\r\n    node.style.stroke = strokeColor;\r\n    var strokeWidth = node.style.strokeWidth || node.getAttribute(\"stroke-width\");\r\n    if (strokeWidth) {\r\n        // Beim Anpassen der Width (z.B. für den unsichtbaren Clone) muss immer auch die Unit beachtet werden (z.B. mm bei Solidworks Composer)\r\n        var strokeWidthVal = parseFloat(strokeWidth);\r\n        var strokeWidthUnit = \"\";\r\n        if (strokeWidthVal != strokeWidth) {\r\n            strokeWidthUnit = strokeWidth.substring((strokeWidthVal + \"\").length);\r\n        }\r\n        node.style.strokeWidth = (strokeWidthVal * strokeWidthMultiplier) + strokeWidthUnit;\r\n    }\r\n    if (recursive) {\r\n        for (var i = 0; i < node.childNodes.length; i++) {\r\n            var childNode = node.childNodes[i];\r\n            if (childNode.nodeType == DWUTILS_NODE_TYPE.ELEMENT) {\r\n                dwImageSVGModifyStroke(childNode, strokeColor, strokeWidthMultiplier, recursive);\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\nfunction dwImageSVGGetDocument(elementId) {\r\n    var image = dwImageViewerGetImage(elementId);\r\n    return (image != null) ? image.contentDocument : null;\r\n}\r\n\r\nfunction dwImageSVGPaintHotspotNode(hotspot, oldNode, bBoxRectangle, unmarkedHotspotsVisible) {\r\n    var linkStyle = dwImageSVGGetHotspotLinkStyle(hotspot, unmarkedHotspotsVisible);\r\n    var hotspotNode = null;\r\n    if (bBoxRectangle) {\r\n        var hotspotVisibility = \"visible\";\r\n        var color = dwImageSVGGetHotspotColor(hotspot);\r\n        dwImageWriteToLog(hotspot.elementId, \"paint svg hotspot (id=\" + hotspot.uniqueId + \" key=\" + hotspot.key + \" keyver=\" + hotspot.keyVer + \" bBox=\" + bBoxRectangle.toString() + \" linkstyle=\" + linkStyle + \" marked=\" + hotspot.marked + \")\");\r\n        if (linkStyle == DW_LINK_STYLE_RECT) {\r\n            hotspotNode = dwImageSVGCreateNewRect(bBoxRectangle.x1, bBoxRectangle.y1, bBoxRectangle.width, bBoxRectangle.height, oldNode);\r\n            hotspotNode.style.fill = \"none\";\r\n        } else if (linkStyle == DW_LINK_STYLE_FULL) {\r\n            hotspotNode = dwImageSVGCreateNewRect(bBoxRectangle.x1, bBoxRectangle.y1, bBoxRectangle.width, bBoxRectangle.height, oldNode);\r\n            hotspotNode.style.fill = color;\r\n        } else if (linkStyle == DW_LINK_STYLE_ELLIPSE) {\r\n            hotspotNode = dwImageSVGCreateNewEllipse(bBoxRectangle.x1, bBoxRectangle.y1, bBoxRectangle.width, bBoxRectangle.height, oldNode);\r\n            hotspotNode.style.fill = \"none\";\r\n        } else if (linkStyle == DW_LINK_STYLE_ELLIPSE_FULL) {\r\n            hotspotNode = dwImageSVGCreateNewEllipse(bBoxRectangle.x1, bBoxRectangle.y1, bBoxRectangle.width, bBoxRectangle.height, oldNode);\r\n            hotspotNode.style.fill = color;\r\n        } else if (linkStyle == DW_LINK_STYLE_LINE) {\r\n            hotspotNode = dwImageSVGCreateNewLine(bBoxRectangle.x1, bBoxRectangle.y1, bBoxRectangle.width, bBoxRectangle.height, oldNode);\r\n        } else {\r\n            hotspotNode = dwImageSVGCreateNewRect(bBoxRectangle.x1, bBoxRectangle.y1, bBoxRectangle.width, bBoxRectangle.height, oldNode);\r\n            hotspotVisibility = \"hidden\";\r\n        }\r\n        //Allgemeine Eigenschaften\r\n        hotspotNode.setAttribute(\"stroke\", color);\r\n        hotspotNode.setAttribute(\"stroke-width\", \"0.5\");\r\n        hotspotNode.setAttribute(\"visibility\", hotspotVisibility);\r\n        hotspotNode.setAttribute(\"dw_hotspot_rect\", \"true\");\r\n    }\r\n    return hotspotNode;\r\n}\r\n\r\n//Hotspot - Rechteck erzeugen\r\nfunction dwImageSVGCreateNewRect(x, y, width, height, oldNode) {\r\n    var node = dwImageSVGCreateNewNodeIfRequired(oldNode, \"rect\");\r\n    node.setAttribute(\"x\", x);\r\n    node.setAttribute(\"y\", y);\r\n    node.setAttribute(\"width\", width);\r\n    node.setAttribute(\"height\", height);\r\n    return node;\r\n}\r\n\r\n//Hotspot - Ellipse erzeugen\r\nfunction dwImageSVGCreateNewEllipse(x, y, width, height, oldNode) {\r\n    var node = dwImageSVGCreateNewNodeIfRequired(oldNode, \"ellipse\");\r\n    //Center der Ellipse (1 Pixel verschoben zur Textbox)\r\n    node.setAttribute(\"cx\", parseInt(x) + parseInt(Math.floor(width / 2)) + parseInt(1));\r\n    node.setAttribute(\"cy\", parseInt(y) + parseInt(Math.floor(height / 2)) + parseInt(1));\r\n    //\"Breite\" und \"Höhe\"\r\n    node.setAttribute(\"rx\", (Math.floor(width / 2)) + 2);\r\n    node.setAttribute(\"ry\", (Math.floor(height / 2)) + 2);\r\n    return node;\r\n}\r\n\r\n//Hotspot - Linie (Unterstrich) erzeugen\r\nfunction dwImageSVGCreateNewLine(x, y, width, height, oldNode) {\r\n    var node = dwImageSVGCreateNewNodeIfRequired(oldNode, \"line\");\r\n    //Koordinaten\r\n    node.setAttribute(\"x1\", x);\r\n    node.setAttribute(\"y1\", parseInt(y) + parseInt(height));\r\n    node.setAttribute(\"x2\", parseInt(x) + parseInt(width));\r\n    node.setAttribute(\"y2\", node.getAttribute(\"y1\"));\r\n    return node;\r\n}\r\n\r\nfunction dwImageSVGGetHotspotLinkStyle(hotspot, unmarkedHotspotsVisible) {\r\n    if (hotspot) {\r\n        var hotspotLinkStyle = hotspot.linkStyle;\r\n        if (hotspot.marked) {\r\n            dwImageWriteToLog(hotspot.elementId, \"mark svg hotspot (id=\" + hotspot.uniqueId + \" key=\" + hotspot.key + \" keyver=\" + hotspot.keyVer + \")\");\r\n            hotspotLinkStyle = hotspot.linkStyleMark;\r\n        } else if (!unmarkedHotspotsVisible) { //Keine Hotspots anzeigen\r\n            hotspotLinkStyle = DW_LINK_STYLE_NONE;\r\n        }\r\n        return hotspotLinkStyle;\r\n    }\r\n    return DW_LINK_STYLE_NONE;\r\n}\r\n\r\n//Farbe für 'normale' Hotspotknoten (Texte)\r\nfunction dwImageSVGGetHotspotColor(hotspot) {\r\n    var hotspotColor = \"#ffffff\";\r\n    if (hotspot) {\r\n        hotspotColor = hotspot.color;\r\n        if (hotspot.marked) {\r\n            hotspotColor = hotspot.colorMark;\r\n        }\r\n    }\r\n    return hotspotColor;\r\n}\r\n\r\n//Farbe für Hover und Konturen (colorAttribute z.B. \"fill\" oder \"stroke\")\r\nfunction dwImageSVGGetHotspotColorOutline(hotspot, node, isHover, colorAttribute) {\r\n    var hotspotColor = \"#ffffff\";\r\n    if (hotspot) {\r\n        // Aktuell wird als 'default' die Farbe Schwarz angenommen, aber falls der Knoten eine eigene Fillcolor hat, wird diese verwendet\r\n        // Es kann (bei farbigen Zeichnungen) notwendig sein, alle Kinder recursiv zu untersuchen, und (mit Backup der Originalfarbe)\r\n        // via inline Befehl die Farbe um-/zurückzusetzen\r\n        hotspotColor = dwImageSVGGetHotspotOriginalColor(node, colorAttribute);\r\n        if (isHover && hotspot.isWithHover) {\r\n            hotspotColor = hotspot.colorHover;\r\n        }\r\n        if (hotspot.marked && hotspot.isWithOutline) {\r\n            hotspotColor = hotspot.colorOutline;\r\n        }\r\n    }\r\n    return hotspotColor;\r\n}\r\n\r\nfunction dwImageSVGOnLoad(elementId) {\r\n    dwImageSVGLoadHotspots(elementId, new Date().getTime(), 0);\r\n}\r\n\r\nfunction dwImageSVGOnError(elementId) {\r\n    dwImageWriteToLog(elementId, \"Error occurs while loading SVG!\");\r\n}\r\n\r\nfunction dwImageSVGOnAbort(elementId) {\r\n    dwImageWriteToLog(elementId, \"Loading SVG aborted!\");\r\n}\r\n\r\n// Hotspots laden (nach 30s aufgeben)\r\nfunction dwImageSVGLoadHotspots(elementId, startTime, counter) {\r\n    var image = dwImageViewerGetImage(elementId);\r\n    if (image) {\r\n        counter++;\r\n        // Im GWT können wir nicht mit parent.dwImageOnLoad arbeiten. Deshalb ist hier eine erweiterte Erkennung,\r\n        // ob das SVG schon komplett geladen ist.\r\n        var mustWait = false;\r\n        try {\r\n            if ((typeof (image) == \"undefined\") || (typeof (image.initialized) == \"undefined\") || (!image.initialized)) {\r\n                mustWait = true;\r\n            } else if (typeof (image.contentDocument) == \"undefined\") {\r\n                // IE Probleme\r\n                mustWait = true;\r\n            } else if (typeof (image.contentDocument.documentElement) == \"undefined\") {\r\n                // IE Probleme\r\n                mustWait = true;\r\n            } else {\r\n                var textNodes = image.contentDocument.getElementsByTagName(\"text\");\r\n                image.contentDocument.documentElement.getElementsByTagName(\"text\");\r\n                if (framework_isIE) {\r\n                    // IE feuert das onload etwas früh. Eine saubere Erkennung ist so nicht möglich\r\n                    // Serverseitig wird ein Element am Ende des SVG ROOT eingefügt. Ist dieses Element\r\n                    // geladen gehen wir davon aus, dass das SVG komplett geladen wurde ...\r\n                    mustWait = (image.contentDocument.getElementById(\"DOCWARE_END_NODE\") == null);\r\n                }\r\n                if (textNodes && textNodes.length) {\r\n                    // In Chrome ist die Layout Phase ggf. noch nicht vollständig abgeschlossen und die BBOx nicht ermittelbar - wir machen hier einen simplen Check\r\n                    for (var i = 0; i < textNodes.length; i++) {\r\n                        var textNode = textNodes[i];\r\n                        if (dwImageSVGIsEmptyText(textNode)) {\r\n                            continue;\r\n                        }\r\n\r\n                        mustWait = !dwImageSVGValidateTextBBox(textNode);\r\n                        if (!mustWait) {\r\n                            // Annahme: Ist ein Textknoten korrekt ermittelt, sollte die offset Bestimmung auch für alle weiteren Textknoten korrekt sein\r\n                            // Es wird nur der erste Knoten untersucht und abgebrochen.\r\n                            break;\r\n\r\n                            // Defensiver Ansatz für die ASPLM Daten. Hier kann es sein, dass bestimmte Textelemente (z.B. Symbol für Motorcode_Benzin)\r\n                            // als erstes Textelement gefunden werden. Ist in diesen Daten auch ein <use> Filter Element hinterlegt, ist eine BBox Bestimmung für den Text nicht möglich.\r\n                            // Entsprechend werden alle potentiellen weiteren Textknoten ermittelt und geprüft ob eine bbox Bestimmung erfolgreich ist.\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n        } catch (e) {\r\n            mustWait = true;\r\n        }\r\n        if (mustWait) {\r\n            // Methode \"dwImageViewerInitStart\" noch nicht vollständig durchlaufen - Initialisierung der Anwendung noch nicht abgeschlossen\r\n            if ((new Date().getTime() - startTime) > 30000) {\r\n                dwImageWriteToLog(elementId, \"SVG OnLoad - Cancelled (attempt=\" + counter + \" past time=\" + (new Date().getTime() - startTime) + \"ms)\");\r\n                return;\r\n            } else {\r\n                setTimeout(function() {\r\n                    dwImageSVGLoadHotspots(elementId, startTime, counter);\r\n                }, 50);\r\n                return;\r\n            }\r\n        }\r\n        dwImageWriteToLog(elementId, \"SVG OnLoad - Creating Hotspots (attempt=\" + counter + \" past time=\" + (new Date().getTime() - startTime) + \"ms)\");\r\n        dwImageSVGLoadCSSDefs(image);\r\n        dwImageSVGMakeHotspots(image);\r\n        dwImageWriteToLog(elementId, \"SVG OnLoad - Created Hotspots (past time=\" + (new Date().getTime() - startTime) + \"ms)\");\r\n\r\n        //Loaded.\r\n        // TODO Umstellung der Initialisierung. Harmonisierung mit 2D Load Behaviour. Umstellung des 2D Init Bereichs,\r\n        // dass hier auch alle Tiles geprüft werden auf dwLoaded Flag und erst nach Laden aller Tiles das Event geworfen wird\r\n        // KOPIE von dwImageViewerInitEnd (gegen Ende der Methode)\r\n        if (typeof (dwAjaxImageLoaded) != \"undefined\") {\r\n            dwAjaxImageLoaded(null, elementId, elementId, \"\", true);\r\n        } else if (typeof (dwSwingFrameworkFireCallbackEvent) != \"undefined\") {\r\n            dwSwingFrameworkFireCallbackEvent(\"imageLoadedEvent\", \"\");\r\n        }\r\n    }\r\n}\r\n\r\nfunction dwImageSVGIsWithHoverOrOutline(hotspot) {\r\n    if (!hotspot) {\r\n        return false;\r\n    }\r\n    return (hotspot.isWithHover || hotspot.isWithOutline);\r\n}\r\n\r\nfunction dwImageSVGIsWithRerenderUnlinkedImageHotspots(root) {\r\n    if (root.getAttribute(\"svg_outline_generator\") === \"asplm\") {\r\n        return true;\r\n    }\r\n    // Weitere IF Abfragen ergänzbar ...\r\n    return false;\r\n}\r\n\r\nfunction dwImageIsHotspotNode(svgDoc, node, hotspot) {\r\n    var nodeText = dwDomGetTextContent(node, [\"desc\", \"metadata\", \"title\"]).trim();\r\n\r\n    var isHotspot = nodeText === hotspot.key;\r\n    if (!isHotspot) {\r\n        return false;\r\n    }\r\n    // Prüfung der Font-Size (wenn der Hotspot eine bestimmte Fontsize haben muss, dann dies berücksichtigen)\r\n    // Außerdem Prüfung auf Schriftart und Gewichtung\r\n    if (!isValidFont(node, hotspot)) {\r\n        return false;\r\n    }\r\n\r\n    if (dwImageSVGIsWithOutlinesByASPLM(svgDoc)) {\r\n        // Das Text-Element muss eine ID haben, die mit \"text_\" beginnt\r\n        let elementId = node.getAttribute(\"id\");\r\n        if (!elementId || (elementId.length === 0) || (elementId.indexOf(\"text_\") !== 0)) {\r\n            return false;\r\n        }\r\n\r\n        // Das Text-Element muss sich in einem Element vom Typ \"g\" befinden mit einer ID, die mit \"hotspot_\" beginnt\r\n        let parentNode = node.parentNode;\r\n        while (parentNode !== null) {\r\n            if (parentNode.tagName && (parentNode.tagName.toLowerCase() === \"g\") && (parentNode.getAttribute(\"id\").indexOf(\"hotspot_\") === 0)) {\r\n                return true;\r\n            }\r\n            parentNode = parentNode.parentNode;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\n/**\r\n * Zeichnet die Hotspots, die in der Stückliste nicht verlinkt sind\r\n * @param svgDoc\r\n * @param unlinkedTextElements\r\n */\r\nfunction dwImageSVGRenderUnlinkedImageHotspots(svgDoc, unlinkedTextElements) {\r\n    if (dwImageSVGIsWithOutlinesByASPLM(svgDoc)) {\r\n        dwImageSVGHighlightUnlinkedHotspotsByASPLM(svgDoc, unlinkedTextElements);\r\n    }\r\n}\r\n\r\n/**\r\n * Zeichnet die Hotspots, die in der Stückliste verlinkt sind, aber kein Hover/Outline Flag haben\r\n * @param svgDoc\r\n * @param linkedTextElementsWithoutHover\r\n */\r\nfunction dwImageSVGRenderUnhoverableImageHotspots(svgDoc, linkedTextElementsWithoutHover) {\r\n    if (dwImageSVGIsWithOutlinesByASPLM(svgDoc)) {\r\n        dwImageSVGHighlightUnlinkedHotspotsByASPLM(svgDoc, linkedTextElementsWithoutHover);\r\n    }\r\n}\r\n\r\n//rekursiv alle Unterknoten, die bereits eine fill-Farbe oder eine stroke-Farbe haben, mit der aktuellen Farbe überschreiben\r\nfunction dwImageSVGPaintHotspotOutlineFixColor(hotspot, node, isHover, recursive) {\r\n    if (!node) {\r\n        return;\r\n    }\r\n\r\n    // DAIMLER DATEN\r\n    //if (node.ownerDocument.getElementById(\"hotspots\") != null) {\r\n    //    node.style.fill = \"none\";\r\n    //}\r\n\r\n    // Knoten die wir für die Hotspot Darstellung eingefügt haben (\"Rectangles\" o.ä.) müssen ignoriert werden\r\n    // Diese werden in entsprechender Methode bereits korrekt eingefärbt\r\n    if (node.hasAttribute(\"dw_hotspot_rect\")) {\r\n        return;\r\n    }\r\n\r\n    dwImageSVGSetHotspotOutlineColorAttribute(hotspot, node, isHover, \"fill\");\r\n    dwImageSVGSetHotspotOutlineColorAttribute(hotspot, node, isHover, \"stroke\");\r\n\r\n    if (recursive) {\r\n        for (var i = 0; i < node.childNodes.length; i++) {\r\n            var childNode = node.childNodes[i];\r\n            if (childNode.nodeType == DWUTILS_NODE_TYPE.ELEMENT) {\r\n                dwImageSVGPaintHotspotOutlineFixColor(hotspot, childNode, isHover, recursive);\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\n//colorAttribute z.B. \"fill\" oder \"stroke\"\r\nfunction dwImageSVGGetHotspotOriginalColor(node, colorAttribute) {\r\n    //aktuelle Farbe des Elements\r\n    var nodeColor = dwImageSVGGetHotspotOutlineColorAttribute(node, colorAttribute);\r\n    if (nodeColor) {\r\n        var colorSaveName = \"save_\" + colorAttribute + \"Color\";\r\n        if (!node.hasAttribute(colorSaveName)) {\r\n            node.setAttribute(colorSaveName, nodeColor);\r\n        }\r\n        return node.getAttribute(colorSaveName);\r\n    }\r\n    //Default ist Schwarz\r\n    return \"#000000\";\r\n}\r\n\r\n\r\nfunction dwImageSVGSetHotspotOutlineColorAttribute(hotspot, node, isHover, colorAttribute) {\r\n    var color = dwImageSVGGetHotspotOutlineColorAttribute(node, colorAttribute);\r\n    //neue Farbe nur setzen, wenn es \"stroke- oder fill-\" Farbe bereits gibt...\r\n    if (color) {\r\n        //... und nur wenn es nicht auf \"none\" steht\r\n        if (color != \"none\") {\r\n            node.style.transition = colorAttribute + \" ease 0.2s\";\r\n            //aktuelle Farbe bestimmt (z.B. abhängig davon, ob der Knoten gerade gehovert oder selektiert ist)\r\n            var newColor = dwImageSVGGetHotspotColorOutline(hotspot, node, isHover, colorAttribute);\r\n            if (colorAttribute == \"stroke\") {\r\n                node.style.stroke = newColor;\r\n            }\r\n            if (colorAttribute == \"fill\") {\r\n                node.style.fill = newColor;\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\nfunction dwImageSVGGetHotspotOutlineColorAttribute(node, colorAttribute) {\r\n    if (!node) {\r\n        return null;\r\n    }\r\n\r\n    //Erst style, dann attribute...\r\n    var color = null;\r\n\r\n    //stroke\r\n    if (colorAttribute == \"stroke\") {\r\n        color = node.style.stroke;\r\n    }\r\n    //fill\r\n    if (colorAttribute == \"fill\") {\r\n        color = node.style.fill;\r\n    }\r\n    if (!color) {\r\n        color = node.getAttribute(colorAttribute);\r\n    }\r\n    return color;\r\n}\r\n\r\nfunction dwImageSVGValidateTextBBox(textNode) {\r\n    let bbox = dwImageSVGGetBBox(textNode);\r\n    return (bbox.width !== 0 && bbox.height !== 0);\r\n}\r\n\r\nfunction dwImageSVGIsEmptyText(textNode) {\r\n    let textNodeContent = dwDomGetTextContent(textNode, [\"desc\", \"metadata\", \"title\"]).trim();\r\n    return textNodeContent.length === 0;\r\n}\r\n\r\n\r\nfunction dwImageSVGLoadCSSDefs(image) {\r\n    var defs = new DwSvgStyleDef(image.contentDocument, true);\r\n}\r\n\r\nfunction DwSvgStyleDef(svgDocument, autoAddInlineStyles) {\r\n    this.cssRules = {};\r\n    if (!svgDocument) {\r\n        return;\r\n    }\r\n    var parse = function(css) {\r\n        var rules = {};\r\n        css = removeComments(css);\r\n        var blocks = css.split('}');\r\n        blocks.pop();\r\n        var len = blocks.length;\r\n        for (var i = 0; i < len; i++) {\r\n            var pair = blocks[i].split('{');\r\n            rules[dwUtilsTrim(pair[0])] = parseCSSBlock(pair[1]);\r\n        }\r\n        return rules;\r\n    };\r\n\r\n    var parseCSSBlock = function(css) {\r\n        var rule = {};\r\n        var declarations = dwUtilsSplit(css, \";\", false);\r\n        var len = declarations.length;\r\n        for (var i = 0; i < len; i++) {\r\n            var loc = declarations[i].indexOf(':');\r\n            var property = dwUtilsTrim(declarations[i].substring(0, loc));\r\n            var value = dwUtilsTrim(declarations[i].substring(loc + 1));\r\n            if (property != \"\" && value != \"\") {\r\n                rule[property] = value;\r\n            }\r\n        }\r\n        return rule;\r\n    };\r\n\r\n    var removeComments = function(css) {\r\n        return css.replace(/\\/\\*(\\r|\\n|.)*\\*\\//g, \"\");\r\n    };\r\n\r\n    var styleDefs = svgDocument.getElementsByTagName(\"style\");\r\n    if (styleDefs.length && styleDefs[0].childNodes.length) { // Annahme: es gibt entweder keinen oder einen style Block im SVG ... nicht mehrere.\r\n        this.cssRules = parse(styleDefs[0].childNodes[0].textContent);\r\n        if (autoAddInlineStyles) {\r\n            var groups = svgDocument.getElementsByTagName(\"g\");\r\n            for (var grpIdx = 0; grpIdx < groups.length; grpIdx++) {\r\n                var group = groups[grpIdx];\r\n                if (!group.className.baseVal) {\r\n                    continue;\r\n                }\r\n                this.classToInlineStyles(group);\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\nDwSvgStyleDef.prototype.getStyle = function(node, attrib) {\r\n    if (node.hasAttribute(attrib)) {\r\n        return node.getAttribute(attrib);\r\n    }\r\n    var className = node.className.baseVal;\r\n    var classDef = this.cssRules[\".\" + className];\r\n    if (classDef) {\r\n        return classDef[attrib];\r\n    }\r\n    return \"\";\r\n};\r\n\r\nDwSvgStyleDef.prototype.classToInlineStyles = function(node) {\r\n    var className = node.className.baseVal;\r\n    var classDef = this.cssRules[\".\" + className];\r\n    if (!classDef) {\r\n        return;\r\n    }\r\n    var inlineStyles = [];\r\n    for (var styleName in classDef) {\r\n        if (!classDef.hasOwnProperty(styleName)) {\r\n            continue;\r\n        }\r\n        if (node.hasAttribute(styleName)) {\r\n            // Inline gewinnt ...\r\n            continue;\r\n        }\r\n        var styleValue = classDef[styleName];\r\n        inlineStyles.push(styleName + \": \" + styleValue);\r\n    }\r\n    var newInlineStyles = (node.getAttribute(\"style\") + \";\" || \"\") + inlineStyles.join(\";\");\r\n    node.setAttribute(\"style\", newInlineStyles);\r\n};\n;(function() {\r\n    var UTIF = {};\r\n\r\n// Make available for import by `require()`\r\n    if (typeof module == \"object\") {\r\n        module.exports = UTIF;\r\n    } else {\r\n        self.UTIF = UTIF;\r\n    }\r\n\r\n    function log() {\r\n        if (typeof process == \"undefined\" || process.env.NODE_ENV == \"development\") {\r\n            console.log.apply(console, arguments);\r\n        }\r\n    }\r\n\r\n    (function(UTIF) {\r\n\r\n// Following lines add a JPEG decoder  to UTIF.JpegDecoder\r\n        (function() {\r\n            \"use strict\";\r\n            var W = function a1() {\r\n                function W(p) {\r\n                    this.message = \"JPEG error: \" + p\r\n                }\r\n\r\n                W.prototype = new Error;\r\n                W.prototype.name = \"JpegError\";\r\n                W.constructor = W;\r\n                return W\r\n            }(), ak = function ag() {\r\n                var p = new Uint8Array([0, 1, 8, 16, 9, 2, 3, 10, 17, 24, 32, 25, 18, 11, 4, 5, 12, 19, 26, 33, 40, 48, 41, 34, 27, 20, 13, 6, 7, 14, 21, 28, 35, 42, 49, 56, 57, 50, 43, 36, 29, 22, 15, 23, 30, 37, 44, 51, 58, 59, 52, 45, 38, 31, 39, 46, 53, 60, 61, 54, 47, 55, 62, 63]),\r\n                        t = 4017, ac = 799, ah = 3406, ao = 2276, ar = 1567, ai = 3784, s = 5793, ad = 2896;\r\n\r\n                function ak(Q) {\r\n                    if (Q == null) {\r\n                        Q = {};\r\n                    }\r\n                    if (Q.w == null) {\r\n                        Q.w = -1;\r\n                    }\r\n                    this.V = Q.n;\r\n                    this.N = Q.w\r\n                }\r\n\r\n                function a5(Q, h) {\r\n                    var f = 0, G = [], n, E, a = 16, F;\r\n                    while (a > 0 && !Q[a - 1]) {\r\n                        a--\r\n                    }\r\n                    G.push({children: [], index: 0});\r\n                    var C = G[0];\r\n                    for (n = 0; n < a; n++) {\r\n                        for (E = 0; E < Q[n]; E++) {\r\n                            C = G.pop();\r\n                            C.children[C.index] = h[f];\r\n                            while (C.index > 0) {\r\n                                C = G.pop()\r\n                            }\r\n                            C.index++;\r\n                            G.push(C);\r\n                            while (G.length <= n) {\r\n                                G.push(F = {children: [], index: 0});\r\n                                C.children[C.index] = F.children;\r\n                                C = F\r\n                            }\r\n                            f++\r\n                        }\r\n                        if (n + 1 < a) {\r\n                            G.push(F = {children: [], index: 0});\r\n                            C.children[C.index] = F.children;\r\n                            C = F\r\n                        }\r\n                    }\r\n                    return G[0].children\r\n                }\r\n\r\n                function a2(Q, h, f) {\r\n                    return 64 * ((Q.P + 1) * h + f)\r\n                }\r\n\r\n                function a7(Q, h, f, G, n, E, a, C, F, d) {\r\n                    if (d == null) {\r\n                        d = !1;\r\n                    }\r\n                    var T = f.m, U = f.Z, z = h, J = 0, V = 0, r = 0, D = 0, a8, q = 0, X, O, _, N, e, K, x = 0, k, g,\r\n                            R, c;\r\n\r\n                    function Y() {\r\n                        if (V > 0) {\r\n                            V--;\r\n                            return J >> V & 1\r\n                        }\r\n                        J = Q[h++];\r\n                        if (J === 255) {\r\n                            var I = Q[h++];\r\n                            if (I) {\r\n                                if (I === 220 && d) {\r\n                                    h += 2;\r\n                                    var l = Z(Q, h);\r\n                                    h += 2;\r\n                                    if (l > 0 && l !== f.s) {\r\n                                        throw new DNLMarkerError(\"Found DNL marker (0xFFDC) while parsing scan data\", l)\r\n                                    }\r\n                                } else if (I === 217) {\r\n                                    if (d) {\r\n                                        var M = q * 8;\r\n                                        if (M > 0 && M < f.s / 10) {\r\n                                            throw new DNLMarkerError(\"Found EOI marker (0xFFD9) while parsing scan data, \" + \"possibly caused by incorrect `scanLines` parameter\", M)\r\n                                        }\r\n                                    }\r\n                                    throw new EOIMarkerError(\"Found EOI marker (0xFFD9) while parsing scan data\")\r\n                                }\r\n                                throw new W(\"unexpected marker\")\r\n                            }\r\n                        }\r\n                        V = 7;\r\n                        return J >>> 7\r\n                    }\r\n\r\n                    function u(I) {\r\n                        var l = I;\r\n                        while (!0) {\r\n                            l = l[Y()];\r\n                            switch (typeof l) {\r\n                                case\"number\":\r\n                                    return l;\r\n                                case\"object\":\r\n                                    continue\r\n                            }\r\n                            throw new W(\"invalid huffman sequence\")\r\n                        }\r\n                    }\r\n\r\n                    function m(I) {\r\n                        var e = 0;\r\n                        while (I > 0) {\r\n                            e = e << 1 | Y();\r\n                            I--\r\n                        }\r\n                        return e\r\n                    }\r\n\r\n                    function j(I) {\r\n                        if (I === 1) {\r\n                            return Y() === 1 ? 1 : -1\r\n                        }\r\n                        var e = m(I);\r\n                        if (e >= 1 << I - 1) {\r\n                            return e\r\n                        }\r\n                        return e + (-1 << I) + 1\r\n                    }\r\n\r\n                    function v(X, I) {\r\n                        var l = u(X.J), M = l === 0 ? 0 : j(l), N = 1;\r\n                        X.D[I] = X.Q += M;\r\n                        while (N < 64) {\r\n                            var S = u(X.i), i = S & 15, A = S >> 4;\r\n                            if (i === 0) {\r\n                                if (A < 15) {\r\n                                    break\r\n                                }\r\n                                N += 16;\r\n                                continue\r\n                            }\r\n                            N += A;\r\n                            var o = p[N];\r\n                            X.D[I + o] = j(i);\r\n                            N++\r\n                        }\r\n                    }\r\n\r\n                    function $(X, I) {\r\n                        var l = u(X.J), M = l === 0 ? 0 : j(l) << F;\r\n                        X.D[I] = X.Q += M\r\n                    }\r\n\r\n                    function b(X, I) {\r\n                        X.D[I] |= Y() << F\r\n                    }\r\n\r\n                    function P(X, I) {\r\n                        if (r > 0) {\r\n                            r--;\r\n                            return\r\n                        }\r\n                        var N = E, l = a;\r\n                        while (N <= l) {\r\n                            var M = u(X.i), S = M & 15, i = M >> 4;\r\n                            if (S === 0) {\r\n                                if (i < 15) {\r\n                                    r = m(i) + (1 << i) - 1;\r\n                                    break\r\n                                }\r\n                                N += 16;\r\n                                continue\r\n                            }\r\n                            N += i;\r\n                            var A = p[N];\r\n                            X.D[I + A] = j(S) * (1 << F);\r\n                            N++\r\n                        }\r\n                    }\r\n\r\n                    function a4(X, I) {\r\n                        var N = E, l = a, M = 0, S, i;\r\n                        while (N <= l) {\r\n                            var A = I + p[N], o = X.D[A] < 0 ? -1 : 1;\r\n                            switch (D) {\r\n                                case 0:\r\n                                    i = u(X.i);\r\n                                    S = i & 15;\r\n                                    M = i >> 4;\r\n                                    if (S === 0) {\r\n                                        if (M < 15) {\r\n                                            r = m(M) + (1 << M);\r\n                                            D = 4\r\n                                        } else {\r\n                                            M = 16;\r\n                                            D = 1\r\n                                        }\r\n                                    } else {\r\n                                        if (S !== 1) {\r\n                                            throw new W(\"invalid ACn encoding\")\r\n                                        }\r\n                                        a8 = j(S);\r\n                                        D = M ? 2 : 3\r\n                                    }\r\n                                    continue;\r\n                                case 1:\r\n                                case 2:\r\n                                    if (X.D[A]) {\r\n                                        X.D[A] += o * (Y() << F)\r\n                                    } else {\r\n                                        M--;\r\n                                        if (M === 0) {\r\n                                            D = D === 2 ? 3 : 0\r\n                                        }\r\n                                    }\r\n                                    break;\r\n                                case 3:\r\n                                    if (X.D[A]) {\r\n                                        X.D[A] += o * (Y() << F)\r\n                                    } else {\r\n                                        X.D[A] = a8 << F;\r\n                                        D = 0\r\n                                    }\r\n                                    break;\r\n                                case 4:\r\n                                    if (X.D[A]) {\r\n                                        X.D[A] += o * (Y() << F)\r\n                                    }\r\n                                    break\r\n                            }\r\n                            N++\r\n                        }\r\n                        if (D === 4) {\r\n                            r--;\r\n                            if (r === 0) {\r\n                                D = 0\r\n                            }\r\n                        }\r\n                    }\r\n\r\n                    function H(X, I, x, l, M) {\r\n                        var S = x / T | 0, i = x % T;\r\n                        q = S * X.A + l;\r\n                        var A = i * X.h + M, o = a2(X, q, A);\r\n                        I(X, o)\r\n                    }\r\n\r\n                    function w(X, I, x) {\r\n                        q = x / X.P | 0;\r\n                        var l = x % X.P, M = a2(X, q, l);\r\n                        I(X, M)\r\n                    }\r\n\r\n                    var y = G.length;\r\n                    if (U) {\r\n                        if (E === 0) {\r\n                            K = C === 0 ? $ : b\r\n                        } else {\r\n                            K = C === 0 ? P : a4\r\n                        }\r\n                    } else {\r\n                        K = v\r\n                    }\r\n                    if (y === 1) {\r\n                        g = G[0].P * G[0].c\r\n                    } else {\r\n                        g = T * f.R\r\n                    }\r\n                    while (x <= g) {\r\n                        var L = n ? Math.min(g - x, n) : g;\r\n                        if (L > 0) {\r\n                            for (O = 0; O < y; O++) {\r\n                                G[O].Q = 0\r\n                            }\r\n                            r = 0;\r\n                            if (y === 1) {\r\n                                X = G[0];\r\n                                for (e = 0; e < L; e++) {\r\n                                    w(X, K, x);\r\n                                    x++\r\n                                }\r\n                            } else {\r\n                                for (e = 0; e < L;\r\n                                     e++) {\r\n                                    for (O = 0; O < y; O++) {\r\n                                        X = G[O];\r\n                                        R = X.h;\r\n                                        c = X.A;\r\n                                        for (_ = 0; _ < c; _++) {\r\n                                            for (N = 0; N < R; N++) {\r\n                                                H(X, K, x, _, N)\r\n                                            }\r\n                                        }\r\n                                    }\r\n                                    x++\r\n                                }\r\n                            }\r\n                        }\r\n                        V = 0;\r\n                        k = an(Q, h);\r\n                        if (!k) {\r\n                            break\r\n                        }\r\n                        if (k.u) {\r\n                            var a6 = L > 0 ? \"unexpected\" : \"excessive\";\r\n                            h = k.offset\r\n                        }\r\n                        if (k.M >= 65488 && k.M <= 65495) {\r\n                            h += 2\r\n                        } else {\r\n                            break\r\n                        }\r\n                    }\r\n                    return h - z\r\n                }\r\n\r\n                function al(Q, h, f) {\r\n                    var G = Q.$, n = Q.D, E, a, C, F, d, T, U, z, J, V, Y, u, m, j, v, $, b;\r\n                    if (!G) {\r\n                        throw new W(\"missing required Quantization Table.\")\r\n                    }\r\n                    for (var r = 0; r < 64; r += 8) {\r\n                        J = n[h + r];\r\n                        V = n[h + r + 1];\r\n                        Y = n[h + r + 2];\r\n                        u = n[h + r + 3];\r\n                        m = n[h + r + 4];\r\n                        j = n[h + r + 5];\r\n                        v = n[h + r + 6];\r\n                        $ = n[h + r + 7];\r\n                        J *= G[r];\r\n                        if ((V | Y | u | m | j | v | $) === 0) {\r\n                            b = s * J + 512 >> 10;\r\n                            f[r] = b;\r\n                            f[r + 1] = b;\r\n                            f[r + 2] = b;\r\n                            f[r + 3] = b;\r\n                            f[r + 4] = b;\r\n                            f[r + 5] = b;\r\n                            f[r + 6] = b;\r\n                            f[r + 7] = b;\r\n                            continue\r\n                        }\r\n                        V *= G[r + 1];\r\n                        Y *= G[r + 2];\r\n                        u *= G[r + 3];\r\n                        m *= G[r + 4];\r\n                        j *= G[r + 5];\r\n                        v *= G[r + 6];\r\n                        $ *= G[r + 7];\r\n                        E = s * J + 128 >> 8;\r\n                        a = s * m + 128 >> 8;\r\n                        C = Y;\r\n                        F = v;\r\n                        d = ad * (V - $) + 128 >> 8;\r\n                        z = ad * (V + $) + 128 >> 8;\r\n                        T = u << 4;\r\n                        U = j << 4;\r\n                        E = E + a + 1 >> 1;\r\n                        a = E - a;\r\n                        b = C * ai + F * ar + 128 >> 8;\r\n                        C = C * ar - F * ai + 128 >> 8;\r\n                        F = b;\r\n                        d = d + U + 1 >> 1;\r\n                        U = d - U;\r\n                        z = z + T + 1 >> 1;\r\n                        T = z - T;\r\n                        E = E + F + 1 >> 1;\r\n                        F = E - F;\r\n                        a = a + C + 1 >> 1;\r\n                        C = a - C;\r\n                        b = d * ao + z * ah + 2048 >> 12;\r\n                        d = d * ah - z * ao + 2048 >> 12;\r\n                        z = b;\r\n                        b = T * ac + U * t + 2048 >> 12;\r\n                        T = T * t - U * ac + 2048 >> 12;\r\n                        U = b;\r\n                        f[r] = E + z;\r\n                        f[r + 7] = E - z;\r\n                        f[r + 1] = a + U;\r\n                        f[r + 6] = a - U;\r\n                        f[r + 2] = C + T;\r\n                        f[r + 5] = C - T;\r\n                        f[r + 3] = F + d;\r\n                        f[r + 4] = F - d\r\n                    }\r\n                    for (var P = 0; P < 8; ++P) {\r\n                        J = f[P];\r\n                        V = f[P + 8];\r\n                        Y = f[P + 16];\r\n                        u = f[P + 24];\r\n                        m = f[P + 32];\r\n                        j = f[P + 40];\r\n                        v = f[P + 48];\r\n                        $ = f[P + 56];\r\n                        if ((V | Y | u | m | j | v | $) === 0) {\r\n                            b = s * J + 8192 >> 14;\r\n                            if (b < -2040) {\r\n                                b = 0\r\n                            } else if (b >= 2024) {\r\n                                b = 255\r\n                            } else {\r\n                                b = b + 2056 >> 4\r\n                            }\r\n                            n[h + P] = b;\r\n                            n[h + P + 8] = b;\r\n                            n[h + P + 16] = b;\r\n                            n[h + P + 24] = b;\r\n                            n[h + P + 32] = b;\r\n                            n[h + P + 40] = b;\r\n                            n[h + P + 48] = b;\r\n                            n[h + P + 56] = b;\r\n                            continue\r\n                        }\r\n                        E = s * J + 2048 >> 12;\r\n                        a = s * m + 2048 >> 12;\r\n                        C = Y;\r\n                        F = v;\r\n                        d = ad * (V - $) + 2048 >> 12;\r\n                        z = ad * (V + $) + 2048 >> 12;\r\n                        T = u;\r\n                        U = j;\r\n                        E = (E + a + 1 >> 1) + 4112;\r\n                        a = E - a;\r\n                        b = C * ai + F * ar + 2048 >> 12;\r\n                        C = C * ar - F * ai + 2048 >> 12;\r\n                        F = b;\r\n                        d = d + U + 1 >> 1;\r\n                        U = d - U;\r\n                        z = z + T + 1 >> 1;\r\n                        T = z - T;\r\n                        E = E + F + 1 >> 1;\r\n                        F = E - F;\r\n                        a = a + C + 1 >> 1;\r\n                        C = a - C;\r\n                        b = d * ao + z * ah + 2048 >> 12;\r\n                        d = d * ah - z * ao + 2048 >> 12;\r\n                        z = b;\r\n                        b = T * ac + U * t + 2048 >> 12;\r\n                        T = T * t - U * ac + 2048 >> 12;\r\n                        U = b;\r\n                        J = E + z;\r\n                        $ = E - z;\r\n                        V = a + U;\r\n                        v = a - U;\r\n                        Y = C + T;\r\n                        j = C - T;\r\n                        u = F + d;\r\n                        m = F - d;\r\n                        if (J < 16) {\r\n                            J = 0\r\n                        } else if (J >= 4080) {\r\n                            J = 255\r\n                        } else {\r\n                            J >>= 4\r\n                        }\r\n                        if (V < 16) {\r\n                            V = 0\r\n                        } else if (V >= 4080) {\r\n                            V = 255\r\n                        } else {\r\n                            V >>= 4\r\n                        }\r\n                        if (Y < 16) {\r\n                            Y = 0\r\n                        } else if (Y >= 4080) {\r\n                            Y = 255\r\n                        } else {\r\n                            Y >>= 4\r\n                        }\r\n                        if (u < 16) {\r\n                            u = 0\r\n                        } else if (u >= 4080) {\r\n                            u = 255\r\n                        } else {\r\n                            u >>= 4\r\n                        }\r\n                        if (m < 16) {\r\n                            m = 0\r\n                        } else if (m >= 4080) {\r\n                            m = 255\r\n                        } else {\r\n                            m >>= 4\r\n                        }\r\n                        if (j < 16) {\r\n                            j = 0\r\n                        } else if (j >= 4080) {\r\n                            j = 255\r\n                        } else {\r\n                            j >>= 4\r\n                        }\r\n                        if (v < 16) {\r\n                            v = 0\r\n                        } else if (v >= 4080) {\r\n                            v = 255\r\n                        } else {\r\n                            v >>= 4\r\n                        }\r\n                        if ($ < 16) {\r\n                            $ = 0\r\n                        } else if ($ >= 4080) {\r\n                            $ = 255\r\n                        } else {\r\n                            $ >>= 4\r\n                        }\r\n                        n[h + P] = J;\r\n                        n[h + P + 8] = V;\r\n                        n[h + P + 16] = Y;\r\n                        n[h + P + 24] = u;\r\n                        n[h + P + 32] = m;\r\n                        n[h + P + 40] = j;\r\n                        n[h + P + 48] = v;\r\n                        n[h + P + 56] = $\r\n                    }\r\n                }\r\n\r\n                function a0(Q, h) {\r\n                    var f = h.P, G = h.c, n = new Int16Array(64);\r\n                    for (var E = 0; E < G; E++) {\r\n                        for (var a = 0; a < f; a++) {\r\n                            var C = a2(h, E, a);\r\n                            al(h, C, n)\r\n                        }\r\n                    }\r\n                    return h.D\r\n                }\r\n\r\n                function an(Q, h, f) {\r\n                    if (f == null) {\r\n                        f = h;\r\n                    }\r\n                    var G = Q.length - 1, n = f < h ? f : h;\r\n                    if (h >= G) {\r\n                        return null\r\n                    }\r\n                    var E = Z(Q, h);\r\n                    if (E >= 65472 && E <= 65534) {\r\n                        return {u: null, M: E, offset: h}\r\n                    }\r\n                    var a = Z(Q, n);\r\n                    while (!(a >= 65472 && a <= 65534)) {\r\n                        if (++n >= G) {\r\n                            return null\r\n                        }\r\n                        a = Z(Q, n)\r\n                    }\r\n                    return {u: E.toString(16), M: a, offset: n}\r\n                }\r\n\r\n                ak.prototype = {\r\n                    parse(Q, h) {\r\n                        if (h == null) {\r\n                            h = {};\r\n                        }\r\n                        var f = h.F, E = 0, a = null, C = null, F, d, T = 0;\r\n\r\n                        function G() {\r\n                            var o = Z(Q, E);\r\n                            E += 2;\r\n                            var B = E + o - 2, V = an(Q, B, E);\r\n                            if (V && V.u) {\r\n                                B = V.offset\r\n                            }\r\n                            var ab = Q.subarray(E, B);\r\n                            E += ab.length;\r\n                            return ab\r\n                        }\r\n\r\n                        function n(F) {\r\n                            var o = Math.ceil(F.o / 8 / F.X), B = Math.ceil(F.s / 8 / F.B);\r\n                            for (var Y = 0; Y < F.W.length; Y++) {\r\n                                R = F.W[Y];\r\n                                var ab = Math.ceil(Math.ceil(F.o / 8) * R.h / F.X),\r\n                                        af = Math.ceil(Math.ceil(F.s / 8) * R.A / F.B), ap = o * R.h, aq = B * R.A,\r\n                                        ae = 64 * aq * (ap + 1);\r\n                                R.D = new Int16Array(ae);\r\n                                R.P = ab;\r\n                                R.c = af\r\n                            }\r\n                            F.m = o;\r\n                            F.R = B\r\n                        }\r\n\r\n                        var U = [], z = [], J = [], V = Z(Q, E);\r\n                        E += 2;\r\n                        if (V !== 65496) {\r\n                            throw new W(\"SOI not found\")\r\n                        }\r\n                        V = Z(Q, E);\r\n                        E += 2;\r\n                        markerLoop:while (V !== 65497) {\r\n                            var Y, u, m;\r\n                            switch (V) {\r\n                                case 65504:\r\n                                case 65505:\r\n                                case 65506:\r\n                                case 65507:\r\n                                case 65508:\r\n                                case 65509:\r\n                                case 65510:\r\n                                case 65511:\r\n                                case 65512:\r\n                                case 65513:\r\n                                case 65514:\r\n                                case 65515:\r\n                                case 65516:\r\n                                case 65517:\r\n                                case 65518:\r\n                                case 65519:\r\n                                case 65534:\r\n                                    var j = G();\r\n                                    if (V === 65504) {\r\n                                        if (j[0] === 74 && j[1] === 70 && j[2] === 73 && j[3] === 70 && j[4] === 0) {\r\n                                            a = {\r\n                                                version: {d: j[5], T: j[6]},\r\n                                                K: j[7],\r\n                                                j: j[8] << 8 | j[9],\r\n                                                H: j[10] << 8 | j[11],\r\n                                                S: j[12],\r\n                                                I: j[13],\r\n                                                C: j.subarray(14, 14 + 3 * j[12] * j[13])\r\n                                            }\r\n                                        }\r\n                                    }\r\n                                    if (V === 65518) {\r\n                                        if (j[0] === 65 && j[1] === 100 && j[2] === 111 && j[3] === 98 && j[4] === 101) {\r\n                                            C = {\r\n                                                version: j[5] << 8 | j[6],\r\n                                                k: j[7] << 8 | j[8],\r\n                                                q: j[9] << 8 | j[10],\r\n                                                a: j[11]\r\n                                            }\r\n                                        }\r\n                                    }\r\n                                    break;\r\n                                case 65499:\r\n                                    var v = Z(Q, E), b;\r\n                                    E += 2;\r\n                                    var $ = v + E - 2;\r\n                                    while (E < $) {\r\n                                        var r = Q[E++], P = new Uint16Array(64);\r\n                                        if (r >> 4 === 0) {\r\n                                            for (u = 0; u < 64; u++) {\r\n                                                b = p[u];\r\n                                                P[b] = Q[E++]\r\n                                            }\r\n                                        } else if (r >> 4 === 1) {\r\n                                            for (u = 0; u < 64; u++) {\r\n                                                b = p[u];\r\n                                                P[b] = Z(Q, E);\r\n                                                E += 2\r\n                                            }\r\n                                        } else {\r\n                                            throw new W(\"DQT - invalid table spec\")\r\n                                        }\r\n                                        U[r & 15] = P\r\n                                    }\r\n                                    break;\r\n                                case 65472:\r\n                                case 65473:\r\n                                case 65474:\r\n                                    if (F) {\r\n                                        throw new W(\"Only single frame JPEGs supported\")\r\n                                    }\r\n                                    E += 2;\r\n                                    F = {};\r\n                                    F.G = V === 65473;\r\n                                    F.Z = V === 65474;\r\n                                    F.precision = Q[E++];\r\n                                    var D = Z(Q, E), a4, q = 0, H = 0;\r\n                                    E += 2;\r\n                                    F.s = f || D;\r\n                                    F.o = Z(Q, E);\r\n                                    E += 2;\r\n                                    F.W = [];\r\n                                    F._ = {};\r\n                                    var a8 = Q[E++];\r\n                                    for (Y = 0; Y < a8; Y++) {\r\n                                        a4 = Q[E];\r\n                                        var w = Q[E + 1] >> 4, y = Q[E + 1] & 15;\r\n                                        if (q < w) {\r\n                                            q = w\r\n                                        }\r\n                                        if (H < y) {\r\n                                            H = y\r\n                                        }\r\n                                        var X = Q[E + 2];\r\n                                        m = F.W.push({h: w, A: y, L: X, $: null});\r\n                                        F._[a4] = m - 1;\r\n                                        E += 3\r\n                                    }\r\n                                    F.X = q;\r\n                                    F.B = H;\r\n                                    n(F);\r\n                                    break;\r\n                                case 65476:\r\n                                    var O = Z(Q, E);\r\n                                    E += 2;\r\n                                    for (Y = 2; Y < O;) {\r\n                                        var _ = Q[E++], N = new Uint8Array(16), e = 0;\r\n                                        for (u = 0; u < 16; u++, E++) {\r\n                                            e += N[u] = Q[E]\r\n                                        }\r\n                                        var K = new Uint8Array(e);\r\n                                        for (u = 0; u < e; u++, E++) {\r\n                                            K[u] = Q[E]\r\n                                        }\r\n                                        Y += 17 + e;\r\n                                        (_ >> 4 === 0 ? J : z)[_ & 15] = a5(N, K)\r\n                                    }\r\n                                    break;\r\n                                case 65501:\r\n                                    E += 2;\r\n                                    d = Z(Q, E);\r\n                                    E += 2;\r\n                                    break;\r\n                                case 65498:\r\n                                    var x = ++T === 1 && !f, R;\r\n                                    E += 2;\r\n                                    var k = Q[E++], g = [];\r\n                                    for (Y = 0; Y < k; Y++) {\r\n                                        var c = Q[E++], L = F._[c];\r\n                                        R = F.W[L];\r\n                                        R.index = c;\r\n                                        var a6 = Q[E++];\r\n                                        R.J = J[a6 >> 4];\r\n                                        R.i = z[a6 & 15];\r\n                                        g.push(R)\r\n                                    }\r\n                                    var I = Q[E++], l = Q[E++], M = Q[E++];\r\n                                    try {\r\n                                        var S = a7(Q, E, F, g, d, I, l, M >> 4, M & 15, x);\r\n                                        E += S\r\n                                    } catch (ex) {\r\n                                        if (ex instanceof DNLMarkerError) {\r\n                                            return this.parse(Q, {F: ex.s})\r\n                                        } else if (ex instanceof EOIMarkerError) {\r\n                                            break markerLoop\r\n                                        }\r\n                                        throw ex\r\n                                    }\r\n                                    break;\r\n                                case 65500:\r\n                                    E += 4;\r\n                                    break;\r\n                                case 65535:\r\n                                    if (Q[E] !== 255) {\r\n                                        E--\r\n                                    }\r\n                                    break;\r\n                                default:\r\n                                    var i = an(Q, E - 2, E - 3);\r\n                                    if (i && i.u) {\r\n                                        E = i.offset;\r\n                                        break\r\n                                    }\r\n                                    if (E >= Q.length - 1) {\r\n                                        break markerLoop\r\n                                    }\r\n                                    throw new W(\"JpegImage.parse - unknown marker: \" + V.toString(16))\r\n                            }\r\n                            V = Z(Q, E);\r\n                            E += 2\r\n                        }\r\n                        this.width = F.o;\r\n                        this.height = F.s;\r\n                        this.g = a;\r\n                        this.b = C;\r\n                        this.W = [];\r\n                        for (Y = 0; Y < F.W.length; Y++) {\r\n                            R = F.W[Y];\r\n                            var A = U[R.L];\r\n                            if (A) {\r\n                                R.$ = A\r\n                            }\r\n                            this.W.push({index: R.index, e: a0(F, R), l: R.h / F.X, t: R.A / F.B, P: R.P, c: R.c})\r\n                        }\r\n                        this.p = this.W.length;\r\n                        return undefined\r\n                    }, Y(Q, h, f) {\r\n                        if (f == null) {\r\n                            f = !1;\r\n                        }\r\n                        var G = this.width / Q, n = this.height / h, E, a, C, F, d, T, U, z, J, V, Y = 0, u,\r\n                                m = this.W.length, j = Q * h * m, v = new Uint8ClampedArray(j), $ = new Uint32Array(Q),\r\n                                b = 4294967288, r;\r\n                        for (U = 0; U < m; U++) {\r\n                            E = this.W[U];\r\n                            a = E.l * G;\r\n                            C = E.t * n;\r\n                            Y = U;\r\n                            u = E.e;\r\n                            F = E.P + 1 << 3;\r\n                            if (a !== r) {\r\n                                for (d = 0; d < Q; d++) {\r\n                                    z = 0 | d * a;\r\n                                    $[d] = (z & b) << 3 | z & 7\r\n                                }\r\n                                r = a\r\n                            }\r\n                            for (T = 0; T < h; T++) {\r\n                                z = 0 | T * C;\r\n                                V = F * (z & b) | (z & 7) << 3;\r\n                                for (d = 0; d < Q; d++) {\r\n                                    v[Y] = u[V + $[d]];\r\n                                    Y += m\r\n                                }\r\n                            }\r\n                        }\r\n                        var P = this.V;\r\n                        if (!f && m === 4 && !P) {\r\n                            P = new Int32Array([-256, 255, -256, 255, -256, 255, -256, 255])\r\n                        }\r\n                        if (P) {\r\n                            for (U = 0; U < j;) {\r\n                                for (z = 0, J = 0; z < m; z++, U++, J += 2) {\r\n                                    v[U] = (v[U] * P[J] >> 8) + P[J + 1]\r\n                                }\r\n                            }\r\n                        }\r\n                        return v\r\n                    }, get f() {\r\n                        if (this.b) {\r\n                            return !!this.b.a\r\n                        }\r\n                        if (this.p === 3) {\r\n                            if (this.N === 0) {\r\n                                return !1\r\n                            } else if (this.W[0].index === 82 && this.W[1].index === 71 && this.W[2].index === 66) {\r\n                                return !1\r\n                            }\r\n                            return !0\r\n                        }\r\n                        if (this.N === 1) {\r\n                            return !0\r\n                        }\r\n                        return !1\r\n                    }, z: function aj(Q) {\r\n                        var h, f, G;\r\n                        for (var n = 0, E = Q.length; n < E; n += 3) {\r\n                            h = Q[n];\r\n                            f = Q[n + 1];\r\n                            G = Q[n + 2];\r\n                            Q[n] = h - 179.456 + 1.402 * G;\r\n                            Q[n + 1] = h + 135.459 - .344 * f - .714 * G;\r\n                            Q[n + 2] = h - 226.816 + 1.772 * f\r\n                        }\r\n                        return Q\r\n                    }, O: function aa(Q) {\r\n                        var h, f, G, n, E = 0;\r\n                        for (var a = 0, C = Q.length; a < C; a += 4) {\r\n                            h = Q[a];\r\n                            f = Q[a + 1];\r\n                            G = Q[a + 2];\r\n                            n = Q[a + 3];\r\n                            Q[E++] = -122.67195406894 + f * (-660635669420364e-19 * f + .000437130475926232 * G - 54080610064599e-18 * h + .00048449797120281 * n - .154362151871126) + G * (-.000957964378445773 * G + .000817076911346625 * h - .00477271405408747 * n + 1.53380253221734) + h * (.000961250184130688 * h - .00266257332283933 * n + .48357088451265) + n * (-.000336197177618394 * n + .484791561490776);\r\n                            Q[E++] = 107.268039397724 + f * (219927104525741e-19 * f - .000640992018297945 * G + .000659397001245577 * h + .000426105652938837 * n - .176491792462875) + G * (-.000778269941513683 * G + .00130872261408275 * h + .000770482631801132 * n - .151051492775562) + h * (.00126935368114843 * h - .00265090189010898 * n + .25802910206845) + n * (-.000318913117588328 * n - .213742400323665);\r\n                            Q[E++] = -20.810012546947 + f * (-.000570115196973677 * f - 263409051004589e-19 * G + .0020741088115012 * h - .00288260236853442 * n + .814272968359295) + G * (-153496057440975e-19 * G - .000132689043961446 * h + .000560833691242812 * n - .195152027534049) + h * (.00174418132927582 * h - .00255243321439347 * n + .116935020465145) + n * (-.000343531996510555 * n + .24165260232407)\r\n                        }\r\n                        return Q.subarray(0, E)\r\n                    }, r: function a3(Q) {\r\n                        var h, f, G;\r\n                        for (var n = 0, E = Q.length; n < E; n += 4) {\r\n                            h = Q[n];\r\n                            f = Q[n + 1];\r\n                            G = Q[n + 2];\r\n                            Q[n] = 434.456 - h - 1.402 * G;\r\n                            Q[n + 1] = 119.541 - h + .344 * f + .714 * G;\r\n                            Q[n + 2] = 481.816 - h - 1.772 * f\r\n                        }\r\n                        return Q\r\n                    }, U: function as(Q) {\r\n                        var h, f, G, n, E = 0;\r\n                        for (var a = 0, C = Q.length; a < C; a += 4) {\r\n                            h = Q[a];\r\n                            f = Q[a + 1];\r\n                            G = Q[a + 2];\r\n                            n = Q[a + 3];\r\n                            Q[E++] = 255 + h * (-6747147073602441e-20 * h + .0008379262121013727 * f + .0002894718188643294 * G + .003264231057537806 * n - 1.1185611867203937) + f * (26374107616089404e-21 * f - 8626949158638572e-20 * G - .0002748769067499491 * n - .02155688794978967) + G * (-3878099212869363e-20 * G - .0003267808279485286 * n + .0686742238595345) - n * (.0003361971776183937 * n + .7430659151342254);\r\n                            Q[E++] = 255 + h * (.00013596372813588848 * h + .000924537132573585 * f + .00010567359618683593 * G + .0004791864687436512 * n - .3109689587515875) + f * (-.00023545346108370344 * f + .0002702845253534714 * G + .0020200308977307156 * n - .7488052167015494) + G * (6834815998235662e-20 * G + .00015168452363460973 * n - .09751927774728933) - n * (.0003189131175883281 * n + .7364883807733168);\r\n                            Q[E++] = 255 + h * (13598650411385308e-21 * h + .00012423956175490851 * f + .0004751985097583589 * G - 36729317476630424e-22 * n - .05562186980264034) + f * (.00016141380598724676 * f + .0009692239130725186 * G + .0007782692450036253 * n - .44015232367526463) + G * (5.068882914068769e-7 * G + .0017778369011375071 * n - .7591454649749609) - n * (.0003435319965105553 * n + .7063770186160144)\r\n                        }\r\n                        return Q.subarray(0, E)\r\n                    }, getData: function(Q) {\r\n                        var h = Q.width, f = Q.height, G = Q.forceRGB, n = Q.isSourcePDF;\r\n                        if (this.p > 4) {\r\n                            throw new W(\"Unsupported color mode\")\r\n                        }\r\n                        var E = this.Y(h, f, n);\r\n                        if (this.p === 1 && G) {\r\n                            var a = E.length, C = new Uint8ClampedArray(a * 3), F = 0;\r\n                            for (var d = 0; d < a; d++) {\r\n                                var T = E[d];\r\n                                C[F++] = T;\r\n                                C[F++] = T;\r\n                                C[F++] = T\r\n                            }\r\n                            return C\r\n                        } else if (this.p === 3 && this.f) {\r\n                            return this.z(E)\r\n                        } else if (this.p === 4) {\r\n                            if (this.f) {\r\n                                if (G) {\r\n                                    return this.O(E)\r\n                                }\r\n                                return this.r(E)\r\n                            } else if (G) {\r\n                                return this.U(E)\r\n                            }\r\n                        }\r\n                        return E\r\n                    }\r\n                };\r\n                return ak\r\n            }();\r\n\r\n            function a9(p, t) {\r\n                return p[t] << 24 >> 24\r\n            }\r\n\r\n            function Z(p, t) {\r\n                return p[t] << 8 | p[t + 1]\r\n            }\r\n\r\n            function am(p, t) {\r\n                return (p[t] << 24 | p[t + 1] << 16 | p[t + 2] << 8 | p[t + 3]) >>> 0\r\n            }\r\n\r\n            UTIF.JpegDecoder = ak\r\n        }());\r\n\r\n//UTIF.JpegDecoder = PDFJS.JpegImage;\r\n\r\n\r\n        UTIF.encodeImage = function(rgba, w, h, metadata) {\r\n            var idf = {\r\n                \"t256\": [w],\r\n                \"t257\": [h],\r\n                \"t258\": [8, 8, 8, 8],\r\n                \"t259\": [1],\r\n                \"t262\": [2],\r\n                \"t273\": [1000], // strips offset\r\n                \"t277\": [4],\r\n                \"t278\": [h], /* rows per strip */\r\n                \"t279\": [w * h * 4], // strip byte counts\r\n                \"t282\": [[72, 1]],\r\n                \"t283\": [[72, 1]],\r\n                \"t284\": [1],\r\n                \"t286\": [[0, 1]],\r\n                \"t287\": [[0, 1]],\r\n                \"t296\": [1],\r\n                \"t305\": [\"Photopea (utif.js)\"],\r\n                \"t338\": [1]\r\n            };\r\n            if (metadata) {\r\n                for (var i in metadata) {\r\n                    idf[i] = metadata[i];\r\n                }\r\n            }\r\n\r\n            var prfx = new Uint8Array(UTIF.encode([idf]));\r\n            var img = new Uint8Array(rgba);\r\n            var data = new Uint8Array(1000 + w * h * 4);\r\n            for (var i = 0; i < prfx.length; i++) {\r\n                data[i] = prfx[i];\r\n            }\r\n            for (var i = 0; i < img.length; i++) {\r\n                data[1000 + i] = img[i];\r\n            }\r\n            return data.buffer;\r\n        }\r\n\r\n        UTIF.encode = function(ifds) {\r\n            var LE = false;\r\n            var data = new Uint8Array(20000), offset = 4, bin = LE ? UTIF._binLE : UTIF._binBE;\r\n            data[0] = data[1] = LE ? 73 : 77;\r\n            bin.writeUshort(data, 2, 42);\r\n\r\n            var ifdo = 8;\r\n            bin.writeUint(data, offset, ifdo);\r\n            offset += 4;\r\n            for (var i = 0; i < ifds.length; i++) {\r\n                var noffs = UTIF._writeIFD(bin, UTIF._types.basic, data, ifdo, ifds[i]);\r\n                ifdo = noffs[1];\r\n                if (i < ifds.length - 1) {\r\n                    if ((ifdo & 3) != 0) {\r\n                        ifdo += (4 - (ifdo & 3));\r\n                    }  // make each IFD start at multiple of 4\r\n                    bin.writeUint(data, noffs[0], ifdo);\r\n                }\r\n            }\r\n            return data.slice(0, ifdo).buffer;\r\n        }\r\n\r\n        UTIF.decode = function(buff, prm) {\r\n            if (prm == null) {\r\n                prm = {parseMN: true, debug: false};\r\n            }  // read MakerNote, debug\r\n            var data = new Uint8Array(buff), offset = 0;\r\n\r\n            var id = UTIF._binBE.readASCII(data, offset, 2);\r\n            offset += 2;\r\n            var bin = id == \"II\" ? UTIF._binLE : UTIF._binBE;\r\n            var num = bin.readUshort(data, offset);\r\n            offset += 2;\r\n\r\n            var ifdo = bin.readUint(data, offset);\r\n            offset += 4;\r\n            var ifds = [];\r\n            while (true) {\r\n                var cnt = bin.readUshort(data, ifdo), typ = bin.readUshort(data, ifdo + 4);\r\n                if (cnt != 0) {\r\n                    if (typ < 1 || 13 < typ) {\r\n                        log(\"error in TIFF\");\r\n                        break\r\n                    }\r\n                }\r\n                ;\r\n                UTIF._readIFD(bin, data, ifdo, ifds, 0, prm);\r\n\r\n                ifdo = bin.readUint(data, ifdo + 2 + cnt * 12);\r\n                if (ifdo == 0) {\r\n                    break;\r\n                }\r\n            }\r\n            return ifds;\r\n        }\r\n\r\n        UTIF.decodeImage = function(buff, img, ifds) {\r\n            if (img.data) {\r\n                return;\r\n            }\r\n            var data = new Uint8Array(buff);\r\n            var id = UTIF._binBE.readASCII(data, 0, 2);\r\n\r\n            if (img[\"t256\"] == null) {\r\n                return;\r\n            }\t// No width => probably not an image\r\n            img.isLE = id == \"II\";\r\n            img.width = img[\"t256\"][0];  //delete img[\"t256\"];\r\n            img.height = img[\"t257\"][0];  //delete img[\"t257\"];\r\n\r\n            var cmpr = img[\"t259\"] ? img[\"t259\"][0] : 1;  //delete img[\"t259\"];\r\n            var fo = img[\"t266\"] ? img[\"t266\"][0] : 1;  //delete img[\"t266\"];\r\n            if (img[\"t284\"] && img[\"t284\"][0] == 2) {\r\n                log(\"PlanarConfiguration 2 should not be used!\");\r\n            }\r\n            if (cmpr == 7 && img[\"t258\"] && img[\"t258\"].length > 3) {\r\n                img[\"t258\"] = img[\"t258\"].slice(0, 3);\r\n            }\r\n\r\n            var spp = img[\"t277\"] ? img[\"t277\"][0] : 1;\r\n            var bps = img[\"t258\"] ? img[\"t258\"][0] : 1;\r\n            var bipp = bps * spp;  // bits per pixel\r\n            /*\r\n\tvar bipp;  // bits per pixel\r\n\tif(img[\"t258\"]) bipp = Math.min(32,img[\"t258\"][0])*img[\"t258\"].length;\r\n\telse            bipp = (img[\"t277\"]?img[\"t277\"][0]:1);\r\n\t*/\r\n            // Some .NEF files have t258==14, even though they use 16 bits per pixel\r\n            if (cmpr == 1 && img[\"t279\"] != null && img[\"t278\"] && img[\"t262\"][0] == 32803) {\r\n                bipp = Math.round((img[\"t279\"][0] * 8) / (img.width * img[\"t278\"][0]));\r\n            }\r\n            if (img[\"t50885\"] && img[\"t50885\"][0] == 4) {\r\n                bipp = img[\"t258\"][0] * 3;\r\n            }  // RAW_CANON_40D_SRAW_V103.CR2\r\n            var bipl = Math.ceil(img.width * bipp / 8) * 8;\r\n            var soff = img[\"t273\"];\r\n            if (soff == null || img[\"t322\"]) {\r\n                soff = img[\"t324\"];\r\n            }\r\n            var bcnt = img[\"t279\"];\r\n            if (cmpr == 1 && soff.length == 1) {\r\n                bcnt = [img.height * (bipl >>> 3)];\r\n            }\r\n            if (bcnt == null || img[\"t322\"]) {\r\n                bcnt = img[\"t325\"];\r\n            }\r\n            //bcnt[0] = Math.min(bcnt[0], data.length);  // Hasselblad, \"RAW_HASSELBLAD_H3D39II.3FR\"\r\n            var bytes = new Uint8Array(img.height * (bipl >>> 3)), bilen = 0;\r\n\r\n            if (img[\"t322\"] != null) // tiled\r\n            {\r\n                var tw = img[\"t322\"][0], th = img[\"t323\"][0];\r\n                var tx = Math.floor((img.width + tw - 1) / tw);\r\n                var ty = Math.floor((img.height + th - 1) / th);\r\n                var tbuff = new Uint8Array(Math.ceil(tw * th * bipp / 8) | 0);\r\n                console.log(\"====\", tx, ty);\r\n                for (var y = 0; y < ty; y++) {\r\n                    for (var x = 0; x < tx; x++) {\r\n                        var i = y * tx + x;\r\n                        tbuff.fill(0);\r\n                        UTIF.decode._decompress(img, ifds, data, soff[i], bcnt[i], cmpr, tbuff, 0, fo, tw, th);\r\n                        // Might be required for 7 too. Need to check\r\n                        if (cmpr == 6) {\r\n                            bytes = tbuff;\r\n                        } else {\r\n                            UTIF._copyTile(tbuff, Math.ceil(tw * bipp / 8) | 0, th, bytes, Math.ceil(img.width * bipp / 8) | 0, img.height, Math.ceil(x * tw * bipp / 8) | 0, y * th);\r\n                        }\r\n                    }\r\n                }\r\n                bilen = bytes.length * 8;\r\n            } else\t// stripped\r\n            {\r\n                if (soff == null) {\r\n                    return;\r\n                }\r\n                var rps = img[\"t278\"] ? img[\"t278\"][0] : img.height;\r\n                rps = Math.min(rps, img.height);\r\n                //console.log(\"====\", img.width, rps);\r\n                for (var i = 0; i < soff.length; i++) {\r\n                    UTIF.decode._decompress(img, ifds, data, soff[i], bcnt[i], cmpr, bytes, Math.ceil(bilen / 8) | 0, fo, img.width, rps);\r\n                    bilen += bipl * rps;\r\n                }\r\n                bilen = Math.min(bilen, bytes.length * 8);\r\n            }\r\n            img.data = new Uint8Array(bytes.buffer, 0, Math.ceil(bilen / 8) | 0);\r\n        }\r\n\r\n        UTIF.decode._decompress = function(img, ifds, data, off, len, cmpr, tgt, toff, fo, w, h)  // fill order\r\n        {\r\n            if (img[\"t271\"] && img[\"t271\"][0] == \"Panasonic\" && img[\"t45\"] && img[\"t45\"][0] == 6) {\r\n                cmpr = 34316;\r\n            }\r\n            //console.log(\"compression\", cmpr);\r\n            //var time = Date.now();\r\n            if (false) {\r\n            } else if (cmpr == 1/* || (len==tgt.length && cmpr!=32767)*/) {\r\n                for (var j = 0; j < len; j++) {\r\n                    tgt[toff + j] = data[off + j];\r\n                }\r\n            } else if (cmpr == 2) {\r\n                UTIF.decode._decodeG2(data, off, len, tgt, toff, w, fo);\r\n            } else if (cmpr == 3) {\r\n                UTIF.decode._decodeG3(data, off, len, tgt, toff, w, fo, img[\"t292\"] ? ((img[\"t292\"][0] & 1) == 1) : false);\r\n            } else if (cmpr == 4) {\r\n                UTIF.decode._decodeG4(data, off, len, tgt, toff, w, fo);\r\n            } else if (cmpr == 5) {\r\n                UTIF.decode._decodeLZW(data, off, len, tgt, toff, 8);\r\n            } else if (cmpr == 6) {\r\n                UTIF.decode._decodeOldJPEG(img, data, off, len, tgt, toff);\r\n            } else if (cmpr == 7 || cmpr == 34892) {\r\n                UTIF.decode._decodeNewJPEG(img, data, off, len, tgt, toff);\r\n            } else if (cmpr == 8 || cmpr == 32946) {\r\n                var src = new Uint8Array(data.buffer, off + 2, len - 6);\r\n                var bin = UTIF._inflateRaw(src);\r\n                if (toff + bin.length <= tgt.length) {\r\n                    tgt.set(bin, toff);\r\n                }\r\n            } else if (cmpr == 9) {\r\n                UTIF.decode._decodeVC5(data, off, len, tgt, toff, img[\"t33422\"]);\r\n            } else if (cmpr == 32767) {\r\n                UTIF.decode._decodeARW(img, data, off, len, tgt, toff);\r\n            } else if (cmpr == 32773) {\r\n                UTIF.decode._decodePackBits(data, off, len, tgt, toff);\r\n            } else if (cmpr == 32809) {\r\n                UTIF.decode._decodeThunder(data, off, len, tgt, toff);\r\n            } else if (cmpr == 34316) {\r\n                UTIF.decode._decodePanasonic(img, data, off, len, tgt, toff);\r\n            } else if (cmpr == 34713) //for(var j=0; j<len; j++) tgt[toff+j] = data[off+j];\r\n            {\r\n                UTIF.decode._decodeNikon(img, ifds, data, off, len, tgt, toff);\r\n            } else if (cmpr == 34676) {\r\n                UTIF.decode._decodeLogLuv32(img, data, off, len, tgt, toff);\r\n            } else {\r\n                log(\"Unknown compression\", cmpr);\r\n            }\r\n\r\n            //console.log(Date.now()-time);\r\n\r\n            var bps = (img[\"t258\"] ? Math.min(32, img[\"t258\"][0]) : 1);\r\n            var noc = (img[\"t277\"] ? img[\"t277\"][0] : 1), bpp = (bps * noc) >>> 3, bpl = Math.ceil(bps * noc * w / 8);\r\n\r\n            // convert to Little Endian  /*\r\n            if (bps == 16 && !img.isLE && img[\"t33422\"] == null)  // not DNG\r\n            {\r\n                for (var y = 0; y < h; y++) {\r\n                    //console.log(\"fixing endianity\");\r\n                    var roff = toff + y * bpl;\r\n                    for (var x = 1; x < bpl; x += 2) {\r\n                        var t = tgt[roff + x];\r\n                        tgt[roff + x] = tgt[roff + x - 1];\r\n                        tgt[roff + x - 1] = t;\r\n                    }\r\n                }\r\n            }  //*/\r\n\r\n            if (img[\"t317\"] && img[\"t317\"][0] == 2) {\r\n                for (var y = 0; y < h; y++) {\r\n                    var ntoff = toff + y * bpl;\r\n                    if (bps == 16) {\r\n                        for (var j = bpp; j < bpl; j += 2) {\r\n                            var nv = ((tgt[ntoff + j + 1] << 8) | tgt[ntoff + j]) + ((tgt[ntoff + j - bpp + 1] << 8) | tgt[ntoff + j - bpp]);\r\n                            tgt[ntoff + j] = nv & 255;\r\n                            tgt[ntoff + j + 1] = (nv >>> 8) & 255;\r\n                        }\r\n                    } else if (noc == 3) {\r\n                        for (var j = 3; j < bpl; j += 3) {\r\n                            tgt[ntoff + j] = (tgt[ntoff + j] + tgt[ntoff + j - 3]) & 255;\r\n                            tgt[ntoff + j + 1] = (tgt[ntoff + j + 1] + tgt[ntoff + j - 2]) & 255;\r\n                            tgt[ntoff + j + 2] = (tgt[ntoff + j + 2] + tgt[ntoff + j - 1]) & 255;\r\n                        }\r\n                    } else {\r\n                        for (var j = bpp; j < bpl; j++) {\r\n                            tgt[ntoff + j] = (tgt[ntoff + j] + tgt[ntoff + j - bpp]) & 255;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        UTIF.decode._decodePanasonic = function(img, data, off, len, tgt, toff) {\r\n\r\n            var img_buffer = data.buffer;\r\n\r\n            var rawWidth = img[\"t2\"][0];\r\n            var rawHeight = img[\"t3\"][0];\r\n            var bitsPerSample = img[\"t10\"][0];\r\n            var RW2_Format = img[\"t45\"][0];\r\n\r\n            var bidx = 0;\r\n            var imageIndex = 0;\r\n            var vpos = 0;\r\n            var byte = 0;\r\n            var arr_a, arr_b;\r\n            var bytes = (RW2_Format == 6 ? new Uint32Array(18) : new Uint8Array(16));\r\n            var i, j, sh, pred = [0, 0], nonz = [0, 0], isOdd, idx = 0, pixel_base;\r\n            var row, col, crow;\r\n            var buffer = new Uint8Array(0x4000);\r\n            var result = new Uint16Array(tgt.buffer);\r\n\r\n            function getDataRaw(bits) {\r\n                if (vpos == 0) {\r\n                    var arr_a = new Uint8Array(img_buffer, off + imageIndex + 0x1ff8, 0x4000 - 0x1ff8);\r\n                    var arr_b = new Uint8Array(img_buffer, off + imageIndex, 0x1ff8);\r\n                    buffer.set(arr_a);\r\n                    buffer.set(arr_b, arr_a.length);\r\n                    imageIndex += 0x4000;\r\n                }\r\n                if (RW2_Format == 5) {\r\n                    for (i = 0; i < 16; i++) {\r\n                        bytes[i] = buffer[vpos++];\r\n                        vpos &= 0x3FFF;\r\n                    }\r\n                } else {\r\n                    vpos = (vpos - bits) & 0x1ffff;\r\n                    byte = vpos >> 3 ^ 0x3ff0;\r\n                    return (buffer[byte] | buffer[byte + 1] << 8) >> (vpos & 7) & ~((-1) << bits);\r\n                }\r\n            }\r\n\r\n            // Raw Format 6\r\n            function getBufferDataRW6(i) {\r\n                return buffer[vpos + 15 - i];\r\n            }\r\n\r\n            function readPageRW6() {\r\n                bytes[0] = (getBufferDataRW6(0) << 6) | (getBufferDataRW6(1) >> 2); // 14 bit\r\n                bytes[1] = (((getBufferDataRW6(1) & 0x3) << 12) | (getBufferDataRW6(2) << 4) | (getBufferDataRW6(3) >> 4)) & 0x3fff;\r\n                bytes[2] = (getBufferDataRW6(3) >> 2) & 0x3;\r\n                bytes[3] = ((getBufferDataRW6(3) & 0x3) << 8) | getBufferDataRW6(4);\r\n                bytes[4] = (getBufferDataRW6(5) << 2) | (getBufferDataRW6(6) >> 6);\r\n                bytes[5] = ((getBufferDataRW6(6) & 0x3f) << 4) | (getBufferDataRW6(7) >> 4);\r\n                bytes[6] = (getBufferDataRW6(7) >> 2) & 0x3;\r\n                bytes[7] = ((getBufferDataRW6(7) & 0x3) << 8) | getBufferDataRW6(8);\r\n                bytes[8] = ((getBufferDataRW6(9) << 2) & 0x3fc) | (getBufferDataRW6(10) >> 6);\r\n                bytes[9] = ((getBufferDataRW6(10) << 4) | (getBufferDataRW6(11) >> 4)) & 0x3ff;\r\n                bytes[10] = (getBufferDataRW6(11) >> 2) & 0x3;\r\n                bytes[11] = ((getBufferDataRW6(11) & 0x3) << 8) | getBufferDataRW6(12);\r\n                bytes[12] = (((getBufferDataRW6(13) << 2) & 0x3fc) | getBufferDataRW6(14) >> 6) & 0x3ff;\r\n                bytes[13] = ((getBufferDataRW6(14) << 4) | (getBufferDataRW6(15) >> 4)) & 0x3ff;\r\n                vpos += 16;\r\n                byte = 0;\r\n            }\r\n\r\n            function readPageRw6_bps12() {\r\n                bytes[0] = (getBufferDataRW6(0) << 4) | (getBufferDataRW6(1) >> 4);\r\n                bytes[1] = (((getBufferDataRW6(1) & 0xf) << 8) | (getBufferDataRW6(2))) & 0xfff;\r\n                bytes[2] = (getBufferDataRW6(3) >> 6) & 0x3;\r\n                bytes[3] = ((getBufferDataRW6(3) & 0x3f) << 2) | (getBufferDataRW6(4) >> 6);\r\n                bytes[4] = ((getBufferDataRW6(4) & 0x3f) << 2) | (getBufferDataRW6(5) >> 6);\r\n                bytes[5] = ((getBufferDataRW6(5) & 0x3f) << 2) | (getBufferDataRW6(6) >> 6);\r\n                bytes[6] = (getBufferDataRW6(6) >> 4) & 0x3;\r\n                bytes[7] = ((getBufferDataRW6(6) & 0xf) << 4) | (getBufferDataRW6(7) >> 4);\r\n                bytes[8] = ((getBufferDataRW6(7) & 0xf) << 4) | (getBufferDataRW6(8) >> 4);\r\n                bytes[9] = ((getBufferDataRW6(8) & 0xf) << 4) | (getBufferDataRW6(9) >> 4);\r\n                bytes[10] = (getBufferDataRW6(9) >> 2) & 0x3;\r\n                bytes[11] = ((getBufferDataRW6(9) & 0x3) << 6) | (getBufferDataRW6(10) >> 2);\r\n                bytes[12] = ((getBufferDataRW6(10) & 0x3) << 6) | (getBufferDataRW6(11) >> 2);\r\n                bytes[13] = ((getBufferDataRW6(11) & 0x3) << 6) | (getBufferDataRW6(12) >> 2);\r\n                bytes[14] = getBufferDataRW6(12) & 0x3;\r\n                bytes[15] = getBufferDataRW6(13);\r\n                bytes[16] = getBufferDataRW6(14);\r\n                bytes[17] = getBufferDataRW6(15);\r\n\r\n                vpos += 16;\r\n                byte = 0;\r\n            }\r\n\r\n            // Main loop\r\n            function resetPredNonzeros() {\r\n                pred[0] = 0;\r\n                pred[1] = 0;\r\n                nonz[0] = 0;\r\n                nonz[1] = 0;\r\n            }\r\n\r\n            if (RW2_Format == 7) {\r\n                throw RW2_Format;\r\n\r\n                // Skatch of version 7\r\n                /*\r\n                    var pixels_per_block = bitsPerSample == 14 ? 9 : 10;\r\n                        rowbytes = 0|(rawWidth / pixels_per_block * 16);\r\n                    for (row = 0; row < rawHeight - 15; row += 16) {\r\n                        var rowstoread = Math.min(16, rawHeight - row);\r\n                        var readlen = rowbytes*rowstoread;\r\n                        buffer = new Uint8Array(image.slice(bidx, bidx+readlen));\r\n                        vpos = 0;\r\n                        bidx += readlen;\r\n                        i = 0;\r\n                        for (crow = 0; crow < rowstoread; crow++) {\r\n                            idx = (row + crow) * rawWidth;\r\n                            for (col = 0; col <= rawWidth - pixels_per_block; col += pixels_per_block) {\r\n                                for(j=0; j < pixels_per_block; j++) bytes[j] = buffer[i++];\r\n                                if (bitsPerSample == 12) {\r\n                                    result[idx ] = ((bytes[1] & 0xF) << 8) + bytes[0];\r\n                                    result[idx + 1] = 16 * bytes[2] + (bytes[1] >> 4);\r\n                                    result[idx + 2] = ((bytes[4] & 0xF) << 8) + bytes[3];\r\n                                    result[idx + 3] = 16 * bytes[5] + (bytes[4] >> 4);\r\n                                    result[idx + 4] = ((bytes[7] & 0xF) << 8) + bytes[6];\r\n                                    result[idx + 5] = 16 * bytes[8] + (bytes[7] >> 4);\r\n                                    result[idx + 6] = ((bytes[10] & 0xF) << 8) + bytes[9];\r\n                                    result[idx + 7] = 16 * bytes[11] + (bytes[10] >> 4);\r\n                                    result[idx + 8] = ((bytes[13] & 0xF) << 8) + bytes[12];\r\n                                    result[idx + 9] = 16 * bytes[14] + (bytes[13] >> 4);\r\n                                } else if (bitsPerSample == 14) {\r\n                                    result[idx] = bytes[0] + ((bytes[1] & 0x3F) << 8);\r\n                                    result[idx + 1] = (bytes[1] >> 6) + 4 * (bytes[2]) + ((bytes[3] & 0xF) << 10);\r\n                                    result[idx + 2] = (bytes[3] >> 4) + 16 * (bytes[4]) + ((bytes[5] & 3) << 12);\r\n                                    result[idx + 3] = ((bytes[5] & 0xFC) >> 2) + (bytes[6] << 6);\r\n                                    result[idx + 4] = bytes[7] + ((bytes[8] & 0x3F) << 8);\r\n                                    result[idx + 5] = (bytes[8] >> 6) + 4 * bytes[9] + ((bytes[10] & 0xF) << 10);\r\n                                    result[idx + 6] = (bytes[10] >> 4) + 16 * bytes[11] + ((bytes[12] & 3) << 12);\r\n                                    result[idx + 7] = ((bytes[12] & 0xFC) >> 2) + (bytes[13] << 6);\r\n                                    result[idx + 8] = bytes[14] + ((bytes[15] & 0x3F) << 8);\r\n                                }\r\n                            }\r\n                        }\r\n                    }\r\n                    */\r\n            } else if (RW2_Format == 6) {\r\n                var is12bit = bitsPerSample == 12,\r\n                        readPageRw6Fn = is12bit ? readPageRw6_bps12 : readPageRW6,\r\n                        pixelsPerBlock = is12bit ? 14 : 11,\r\n                        pixelbase0 = is12bit ? 0x80 : 0x200,\r\n                        pixelbase_compare = is12bit ? 0x800 : 0x2000,\r\n                        spix_compare = is12bit ? 0x3fff : 0xffff,\r\n                        pixel_mask = is12bit ? 0xfff : 0x3fff,\r\n                        blocksperrow = rawWidth / pixelsPerBlock,\r\n                        rowbytes = blocksperrow * 16,\r\n                        bufferSize = is12bit ? 18 : 14;\r\n\r\n                for (row = 0; row < rawHeight - 15; row += 16) {\r\n                    var rowstoread = Math.min(16, rawHeight - row);\r\n                    var readlen = rowbytes * rowstoread;\r\n                    buffer = new Uint8Array(img_buffer, off + bidx, readlen);//new Uint8Array(image.slice(bidx, bidx+readlen));\r\n                    vpos = 0;\r\n                    bidx += readlen;\r\n                    for (crow = 0, col = 0; crow < rowstoread; crow++, col = 0) {\r\n                        idx = (row + crow) * rawWidth;\r\n                        for (var rblock = 0; rblock < blocksperrow; rblock++) {\r\n                            readPageRw6Fn();\r\n                            resetPredNonzeros();\r\n                            sh = 0;\r\n                            pixel_base = 0;\r\n                            for (i = 0; i < pixelsPerBlock; i++) {\r\n                                isOdd = i & 1;\r\n                                if (i % 3 == 2) {\r\n                                    var base = byte < bufferSize ? bytes[byte++] : 0;\r\n                                    if (base == 3) {\r\n                                        base = 4;\r\n                                    }\r\n                                    pixel_base = pixelbase0 << base;\r\n                                    sh = 1 << base;\r\n                                }\r\n                                var epixel = byte < bufferSize ? bytes[byte++] : 0;\r\n                                if (pred[isOdd]) {\r\n                                    epixel *= sh;\r\n                                    if (pixel_base < pixelbase_compare && nonz[isOdd] > pixel_base) {\r\n                                        epixel += nonz[isOdd] - pixel_base;\r\n                                    }\r\n                                    nonz[isOdd] = epixel;\r\n                                } else {\r\n                                    pred[isOdd] = epixel;\r\n                                    if (epixel) {\r\n                                        nonz[isOdd] = epixel;\r\n                                    } else {\r\n                                        epixel = nonz[isOdd];\r\n                                    }\r\n                                }\r\n                                result[idx + col++] = (epixel - 0xf) <= spix_compare ? (epixel - 0xf) & spix_compare : ((epixel + 0x7ffffff1) >> 0x1f) & pixel_mask;\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n            } else if (RW2_Format == 5) {\r\n                var blockSize = bitsPerSample == 12 ? 10 : 9;\r\n                for (row = 0; row < rawHeight; row++) {\r\n                    for (col = 0; col < rawWidth; col += blockSize) {\r\n                        getDataRaw(0);\r\n                        // Tuhle podminku pouziva i RW2_Format 7\r\n                        if (bitsPerSample == 12) {\r\n                            result[idx++] = ((bytes[1] & 0xF) << 8) + bytes[0];\r\n                            result[idx++] = 16 * bytes[2] + (bytes[1] >> 4);\r\n                            result[idx++] = ((bytes[4] & 0xF) << 8) + bytes[3];\r\n                            result[idx++] = 16 * bytes[5] + (bytes[4] >> 4);\r\n                            result[idx++] = ((bytes[7] & 0xF) << 8) + bytes[6];\r\n                            result[idx++] = 16 * bytes[8] + (bytes[7] >> 4);\r\n                            result[idx++] = ((bytes[10] & 0xF) << 8) + bytes[9];\r\n                            result[idx++] = 16 * bytes[11] + (bytes[10] >> 4);\r\n                            result[idx++] = ((bytes[13] & 0xF) << 8) + bytes[12];\r\n                            result[idx++] = 16 * bytes[14] + (bytes[13] >> 4);\r\n                        } else if (bitsPerSample == 14) {\r\n                            result[idx++] = bytes[0] + ((bytes[1] & 0x3F) << 8);\r\n                            result[idx++] = (bytes[1] >> 6) + 4 * (bytes[2]) + ((bytes[3] & 0xF) << 10);\r\n                            result[idx++] = (bytes[3] >> 4) + 16 * (bytes[4]) + ((bytes[5] & 3) << 12);\r\n                            result[idx++] = ((bytes[5] & 0xFC) >> 2) + (bytes[6] << 6);\r\n                            result[idx++] = bytes[7] + ((bytes[8] & 0x3F) << 8);\r\n                            result[idx++] = (bytes[8] >> 6) + 4 * bytes[9] + ((bytes[10] & 0xF) << 10);\r\n                            result[idx++] = (bytes[10] >> 4) + 16 * bytes[11] + ((bytes[12] & 3) << 12);\r\n                            result[idx++] = ((bytes[12] & 0xFC) >> 2) + (bytes[13] << 6);\r\n                            result[idx++] = bytes[14] + ((bytes[15] & 0x3F) << 8);\r\n                        }\r\n                    }\r\n                }\r\n                //console.log(result[1000000 - 1])\r\n            } else if (RW2_Format == 4) {\r\n                for (row = 0; row < rawHeight; row++) {\r\n                    for (col = 0; col < rawWidth; col++) {\r\n                        i = col % 14;\r\n                        isOdd = i & 1;\r\n                        if (i == 0) {\r\n                            resetPredNonzeros();\r\n                        }\r\n                        if (i % 3 == 2) {\r\n                            sh = 4 >> (3 - getDataRaw(2));\r\n                        }\r\n                        if (nonz[isOdd]) {\r\n                            j = getDataRaw(8);\r\n                            if (j != 0) {\r\n                                pred[isOdd] -= 0x80 << sh;\r\n                                if (pred[isOdd] < 0 || sh == 4) {\r\n                                    pred[isOdd] &= ~((-1) << sh);\r\n                                }\r\n                                pred[isOdd] += j << sh;\r\n                            }\r\n                        } else {\r\n                            nonz[isOdd] = getDataRaw(8);\r\n                            if (nonz[isOdd] || i > 11) {\r\n                                pred[isOdd] = nonz[isOdd] << 4 | getDataRaw(4);\r\n                            }\r\n                        }\r\n                        result[idx++] = pred[col & 1];\r\n                    }\r\n                }\r\n            } else {\r\n                throw RW2_Format;\r\n            }\r\n        }\r\n\r\n\r\n        UTIF.decode._decodeVC5 = function() {\r\n            var x = [1, 0, 1, 0, 2, 2, 1, 1, 3, 7, 1, 2, 5, 25, 1, 3, 6, 48, 1, 4, 6, 54, 1, 5, 7, 111, 1, 8, 7, 99, 1, 6, 7, 105, 12, 0, 7, 107, 1, 7, 8, 209, 20, 0, 8, 212, 1, 9, 8, 220, 1, 10, 9, 393, 1, 11, 9, 394, 32, 0, 9, 416, 1, 12, 9, 427, 1, 13, 10, 887, 1, 18, 10, 784, 1, 14, 10, 790, 1, 15, 10, 835, 60, 0, 10, 852, 1, 16, 10, 885, 1, 17, 11, 1571, 1, 19, 11, 1668, 1, 20, 11, 1669, 100, 0, 11, 1707, 1, 21, 11, 1772, 1, 22, 12, 3547, 1, 29, 12, 3164, 1, 24, 12, 3166, 1, 25, 12, 3140, 1, 23, 12, 3413, 1, 26, 12, 3537, 1, 27, 12, 3539, 1, 28, 13, 7093, 1, 35, 13, 6283, 1, 30, 13, 6331, 1, 31, 13, 6335, 180, 0, 13, 6824, 1, 32, 13, 7072, 1, 33, 13, 7077, 320, 0, 13, 7076, 1, 34, 14, 12565, 1, 36, 14, 12661, 1, 37, 14, 12669, 1, 38, 14, 13651, 1, 39, 14, 14184, 1, 40, 15, 28295, 1, 46, 15, 28371, 1, 47, 15, 25320, 1, 42, 15, 25336, 1, 43, 15, 25128, 1, 41, 15, 27300, 1, 44, 15, 28293, 1, 45, 16, 50259, 1, 48, 16, 50643, 1, 49, 16, 50675, 1, 50, 16, 56740, 1, 53, 16, 56584, 1, 51, 16, 56588, 1, 52, 17, 113483, 1, 61, 17, 113482, 1, 60, 17, 101285, 1, 55, 17, 101349, 1, 56, 17, 109205, 1, 57, 17, 109207, 1, 58, 17, 100516, 1, 54, 17, 113171, 1, 59, 18, 202568, 1, 62, 18, 202696, 1, 63, 18, 218408, 1, 64, 18, 218412, 1, 65, 18, 226340, 1, 66, 18, 226356, 1, 67, 18, 226358, 1, 68, 19, 402068, 1, 69, 19, 405138, 1, 70, 19, 405394, 1, 71, 19, 436818, 1, 72, 19, 436826, 1, 73, 19, 452714, 1, 75, 19, 452718, 1, 76, 19, 452682, 1, 74, 20, 804138, 1, 77, 20, 810279, 1, 78, 20, 810790, 1, 79, 20, 873638, 1, 80, 20, 873654, 1, 81, 20, 905366, 1, 82, 20, 905430, 1, 83, 20, 905438, 1, 84, 21, 1608278, 1, 85, 21, 1620557, 1, 86, 21, 1621582, 1, 87, 21, 1621583, 1, 88, 21, 1747310, 1, 89, 21, 1810734, 1, 90, 21, 1810735, 1, 91, 21, 1810863, 1, 92, 21, 1810879, 1, 93, 22, 3621725, 1, 99, 22, 3621757, 1, 100, 22, 3241112, 1, 94, 22, 3494556, 1, 95, 22, 3494557, 1, 96, 22, 3494622, 1, 97, 22, 3494623, 1, 98, 23, 6482227, 1, 102, 23, 6433117, 1, 101, 23, 6989117, 1, 103, 23, 6989119, 1, 105, 23, 6989118, 1, 104, 23, 7243449, 1, 106, 23, 7243512, 1, 107, 24, 13978233, 1, 111, 24, 12964453, 1, 109, 24, 12866232, 1, 108, 24, 14486897, 1, 113, 24, 13978232, 1, 110, 24, 14486896, 1, 112, 24, 14487026, 1, 114, 24, 14487027, 1, 115, 25, 25732598, 1, 225, 25, 25732597, 1, 189, 25, 25732596, 1, 188, 25, 25732595, 1, 203, 25, 25732594, 1, 202, 25, 25732593, 1, 197, 25, 25732592, 1, 207, 25, 25732591, 1, 169, 25, 25732590, 1, 223, 25, 25732589, 1, 159, 25, 25732522, 1, 235, 25, 25732579, 1, 152, 25, 25732575, 1, 192, 25, 25732489, 1, 179, 25, 25732573, 1, 201, 25, 25732472, 1, 172, 25, 25732576, 1, 149, 25, 25732488, 1, 178, 25, 25732566, 1, 120, 25, 25732571, 1, 219, 25, 25732577, 1, 150, 25, 25732487, 1, 127, 25, 25732506, 1, 211, 25, 25732548, 1, 125, 25, 25732588, 1, 158, 25, 25732486, 1, 247, 25, 25732467, 1, 238, 25, 25732508, 1, 163, 25, 25732552, 1, 228, 25, 25732603, 1, 183, 25, 25732513, 1, 217, 25, 25732587, 1, 168, 25, 25732520, 1, 122, 25, 25732484, 1, 128, 25, 25732562, 1, 249, 25, 25732505, 1, 187, 25, 25732504, 1, 186, 25, 25732483, 1, 136, 25, 25928905, 1, 181, 25, 25732560, 1, 255, 25, 25732500, 1, 230, 25, 25732482, 1, 135, 25, 25732555, 1, 233, 25, 25732568, 1, 222, 25, 25732583, 1, 145, 25, 25732481, 1, 134, 25, 25732586, 1, 167, 25, 25732521, 1, 248, 25, 25732518, 1, 209, 25, 25732480, 1, 243, 25, 25732512, 1, 216, 25, 25732509, 1, 164, 25, 25732547, 1, 140, 25, 25732479, 1, 157, 25, 25732544, 1, 239, 25, 25732574, 1, 191, 25, 25732564, 1, 251, 25, 25732478, 1, 156, 25, 25732546, 1, 139, 25, 25732498, 1, 242, 25, 25732557, 1, 133, 25, 25732477, 1, 162, 25, 25732515, 1, 213, 25, 25732584, 1, 165, 25, 25732514, 1, 212, 25, 25732476, 1, 227, 25, 25732494, 1, 198, 25, 25732531, 1, 236, 25, 25732530, 1, 234, 25, 25732529, 1, 117, 25, 25732528, 1, 215, 25, 25732527, 1, 124, 25, 25732526, 1, 123, 25, 25732525, 1, 254, 25, 25732524, 1, 253, 25, 25732523, 1, 148, 25, 25732570, 1, 218, 25, 25732580, 1, 146, 25, 25732581, 1, 147, 25, 25732569, 1, 224, 25, 25732533, 1, 143, 25, 25732540, 1, 184, 25, 25732541, 1, 185, 25, 25732585, 1, 166, 25, 25732556, 1, 132, 25, 25732485, 1, 129, 25, 25732563, 1, 250, 25, 25732578, 1, 151, 25, 25732501, 1, 119, 25, 25732502, 1, 193, 25, 25732536, 1, 176, 25, 25732496, 1, 245, 25, 25732553, 1, 229, 25, 25732516, 1, 206, 25, 25732582, 1, 144, 25, 25732517, 1, 208, 25, 25732558, 1, 137, 25, 25732543, 1, 241, 25, 25732466, 1, 237, 25, 25732507, 1, 190, 25, 25732542, 1, 240, 25, 25732551, 1, 131, 25, 25732554, 1, 232, 25, 25732565, 1, 252, 25, 25732475, 1, 171, 25, 25732493, 1, 205, 25, 25732492, 1, 204, 25, 25732491, 1, 118, 25, 25732490, 1, 214, 25, 25928904, 1, 180, 25, 25732549, 1, 126, 25, 25732602, 1, 182, 25, 25732539, 1, 175, 25, 25732545, 1, 141, 25, 25732559, 1, 138, 25, 25732537, 1, 177, 25, 25732534, 1, 153, 25, 25732503, 1, 194, 25, 25732606, 1, 160, 25, 25732567, 1, 121, 25, 25732538, 1, 174, 25, 25732497, 1, 246, 25, 25732550, 1, 130, 25, 25732572, 1, 200, 25, 25732474, 1, 170, 25, 25732511, 1, 221, 25, 25732601, 1, 196, 25, 25732532, 1, 142, 25, 25732519, 1, 210, 25, 25732495, 1, 199, 25, 25732605, 1, 155, 25, 25732535, 1, 154, 25, 25732499, 1, 244, 25, 25732510, 1, 220, 25, 25732600, 1, 195, 25, 25732607, 1, 161, 25, 25732604, 1, 231, 25, 25732473, 1, 173, 25, 25732599, 1, 226, 26, 51465122, 1, 116, 26, 51465123, 0, 1],\r\n                    o, C, k, P = [3, 3, 3, 3, 2, 2, 2, 1, 1, 1], V = 24576, ar = 16384, H = 8192, az = ar | H;\r\n\r\n            function d(t) {\r\n                var E = t[1], h = t[0][E >>> 3] >>> 7 - (E & 7) & 1;\r\n                t[1]++;\r\n                return h\r\n            }\r\n\r\n            function ag(t, E) {\r\n                if (o == null) {\r\n                    o = {};\r\n                    for (var h = 0; h < x.length; h += 4) {\r\n                        o[x[h + 1]] = x.slice(h, h + 4)\r\n                    }\r\n                }\r\n                var L = d(t), g = o[L];\r\n                while (g == null) {\r\n                    L = L << 1 | d(t);\r\n                    g = o[L]\r\n                }\r\n                var n = g[3];\r\n                if (n != 0) {\r\n                    n = d(t) == 0 ? n : -n;\r\n                }\r\n                E[0] = g[2];\r\n                E[1] = n\r\n            }\r\n\r\n            function m(t, E) {\r\n                for (var h = 0; h < E; h++) {\r\n                    if ((t & 1) == 1) {\r\n                        t++;\r\n                    }\r\n                    t = t >>> 1\r\n                }\r\n                return t\r\n            }\r\n\r\n            function A(t, E) {\r\n                return t >> E\r\n            }\r\n\r\n            function O(t, E, h, L, g, n) {\r\n                E[h] = A(A(11 * t[g] - 4 * t[g + n] + t[g + n + n] + 4, 3) + t[L], 1);\r\n                E[h + n] = A(A(5 * t[g] + 4 * t[g + n] - t[g + n + n] + 4, 3) - t[L], 1)\r\n            }\r\n\r\n            function J(t, E, h, L, g, n) {\r\n                var W = t[g - n] - t[g + n], j = t[g], $ = t[L];\r\n                E[h] = A(A(W + 4, 3) + j + $, 1);\r\n                E[h + n] = A(A(-W + 4, 3) + j - $, 1)\r\n            }\r\n\r\n            function y(t, E, h, L, g, n) {\r\n                E[h] = A(A(5 * t[g] + 4 * t[g - n] - t[g - n - n] + 4, 3) + t[L], 1);\r\n                E[h + n] = A(A(11 * t[g] - 4 * t[g - n] + t[g - n - n] + 4, 3) - t[L], 1)\r\n            }\r\n\r\n            function q(t) {\r\n                t = t < 0 ? 0 : t > 4095 ? 4095 : t;\r\n                t = k[t] >>> 2;\r\n                return t\r\n            }\r\n\r\n            function av(t, E, h, L, g, n) {\r\n                L = new Uint16Array(L.buffer);\r\n                var W = Date.now(), j = UTIF._binBE, $ = E + h, r, u, X, I, ax, a3, R, ai, aa, ap, ah, ae, aD, al, i,\r\n                        aE, T, B;\r\n                E += 4;\r\n                var a5 = n[0] == 1;\r\n                while (E < $) {\r\n                    var S = j.readShort(t, E), s = j.readUshort(t, E + 2);\r\n                    E += 4;\r\n                    if (S == 12) {\r\n                        r = s;\r\n                    } else if (S == 20) {\r\n                        u = s;\r\n                    } else if (S == 21) {\r\n                        X = s;\r\n                    } else if (S == 48) {\r\n                        I = s;\r\n                    } else if (S == 53) {\r\n                        ax = s;\r\n                    } else if (S == 35) {\r\n                        a3 = s;\r\n                    } else if (S == 62) {\r\n                        R = s;\r\n                    } else if (S == 101) {\r\n                        ai = s;\r\n                    } else if (S == 109) {\r\n                        aa = s;\r\n                    } else if (S == 84) {\r\n                        ap = s;\r\n                    } else if (S == 106) {\r\n                        ah = s;\r\n                    } else if (S == 107) {\r\n                        ae = s;\r\n                    } else if (S == 108) {\r\n                        aD = s;\r\n                    } else if (S == 102) {\r\n                        al = s;\r\n                    } else if (S == 104) {\r\n                        i = s;\r\n                    } else if (S == 105) {\r\n                        aE = s;\r\n                    } else {\r\n                        var F = S < 0 ? -S : S, D = F & 65280, _ = 0;\r\n                        if (F & az) {\r\n                            if (F & H) {\r\n                                _ = s & 65535;\r\n                                _ += (F & 255) << 16\r\n                            } else {\r\n                                _ = s & 65535\r\n                            }\r\n                        }\r\n                        if ((F & V) == V) {\r\n                            if (T == null) {\r\n                                T = [];\r\n                                for (var M = 0; M < 4; M++) {\r\n                                    T[M] = new Int16Array((u >>> 1) * (X >>> 1));\r\n                                }\r\n                                B = new Int16Array((u >>> 1) * (X >>> 1));\r\n                                C = new Int16Array(1024);\r\n                                for (var M = 0; M < 1024; M++) {\r\n                                    var aG = M - 512, p = Math.abs(aG),\r\n                                            r = Math.floor(768 * p * p * p / (255 * 255 * 255)) + p;\r\n                                    C[M] = Math.sign(aG) * r\r\n                                }\r\n                                k = new Uint16Array(4096);\r\n                                var aA = (1 << 16) - 1;\r\n                                for (var M = 0; M < 4096; M++) {\r\n                                    var at = M, a1 = aA * (Math.pow(113, at / 4095) - 1) / 112;\r\n                                    k[M] = Math.min(a1, aA)\r\n                                }\r\n                            }\r\n                            var w = T[R], v = m(u, 1 + P[I]), N = m(X, 1 + P[I]);\r\n                            if (I == 0) {\r\n                                for (var b = 0; b < N; b++) {\r\n                                    for (var G = 0; G < v; G++) {\r\n                                        var c = E + (b * v + G) * 2;\r\n                                        w[b * (u >>> 1) + G] = t[c] << 8 | t[c + 1]\r\n                                    }\r\n                                }\r\n                            } else {\r\n                                var a7 = [t, E * 8], a4 = [], ay = 0, aw = v * N, f = [0, 0], Q = 0, s = 0;\r\n                                while (ay < aw) {\r\n                                    ag(a7, f);\r\n                                    Q = f[0];\r\n                                    s = f[1];\r\n                                    while (Q > 0) {\r\n                                        a4[ay++] = s;\r\n                                        Q--\r\n                                    }\r\n                                }\r\n                                var l = (I - 1) % 3, aF = l != 1 ? v : 0, a2 = l != 0 ? N : 0;\r\n                                for (var b = 0; b < N; b++) {\r\n                                    var af = (b + a2) * (u >>> 1) + aF, au = b * v;\r\n                                    for (var G = 0; G < v; G++) {\r\n                                        w[af + G] = C[a4[au + G] + 512] * ax\r\n                                    }\r\n                                }\r\n                                if (l == 2) {\r\n                                    var i = u >>> 1, an = v * 2, a9 = N * 2;\r\n                                    for (var b = 0; b < N; b++) {\r\n                                        for (var G = 0; G < an; G++) {\r\n                                            var M = b * 2 * i + G, a = b * i + G, e = N * i + a;\r\n                                            if (b == 0) {\r\n                                                O(w, B, M, e, a, i);\r\n                                            } else if (b == N - 1) {\r\n                                                y(w, B, M, e, a, i);\r\n                                            } else {\r\n                                                J(w, B, M, e, a, i)\r\n                                            }\r\n                                        }\r\n                                    }\r\n                                    var Z = w;\r\n                                    w = B;\r\n                                    B = Z;\r\n                                    for (var b = 0; b < a9; b++) {\r\n                                        for (var G = 0; G < v; G++) {\r\n                                            var M = b * i + 2 * G, a = b * i + G, e = v + a;\r\n                                            if (G == 0) {\r\n                                                O(w, B, M, e, a, 1);\r\n                                            } else if (G == v - 1) {\r\n                                                y(w, B, M, e, a, 1);\r\n                                            } else {\r\n                                                J(w, B, M, e, a, 1)\r\n                                            }\r\n                                        }\r\n                                    }\r\n                                    var Z = w;\r\n                                    w = B;\r\n                                    B = Z;\r\n                                    var aC = [], aB = 2 - ~~((I - 1) / 3);\r\n                                    for (var K = 0; K < 3; K++) {\r\n                                        aC[K] = aa >> 14 - K * 2 & 3;\r\n                                    }\r\n                                    var a6 = aC[aB];\r\n                                    if (a6 != 0) {\r\n                                        for (var b = 0; b < a9; b++) {\r\n                                            for (var G = 0; G < an;\r\n                                                 G++) {\r\n                                                var M = b * i + G;\r\n                                                w[M] = w[M] << a6\r\n                                            }\r\n                                        }\r\n                                    }\r\n                                }\r\n                            }\r\n                            if (I == 9 && R == 3) {\r\n                                var a8 = T[0], ab = T[1], aq = T[2], as = T[3];\r\n                                for (var b = 0; b < X;\r\n                                     b += 2) {\r\n                                    for (var G = 0; G < u; G += 2) {\r\n                                        var U = b * u + G, c = (b >>> 1) * (u >>> 1) + (G >>> 1), z = a8[c],\r\n                                                ao = ab[c] - 2048, ak = aq[c] - 2048, ad = as[c] - 2048,\r\n                                                aj = (ao << 1) + z,\r\n                                                a0 = (ak << 1) + z, aH = z + ad, am = z - ad;\r\n                                        if (a5) {\r\n                                            L[U] = q(aH);\r\n                                            L[U + 1] = q(a0);\r\n                                            L[U + u] = q(aj);\r\n                                            L[U + u + 1] = q(am)\r\n                                        } else {\r\n                                            L[U] = q(aj);\r\n                                            L[U + 1] = q(aH);\r\n                                            L[U + u] = q(am);\r\n                                            L[U + u + 1] = q(a0)\r\n                                        }\r\n                                    }\r\n                                }\r\n                            }\r\n                            E += _ * 4\r\n                        } else if (F == 16388) {\r\n                            E += _ * 4\r\n                        } else if (D == 8192 || D == 8448 || D == 9216) {\r\n                        } else {\r\n                            throw F.toString(16)\r\n                        }\r\n                    }\r\n                }\r\n                console.log(Date.now() - W)\r\n            }\r\n\r\n            return av\r\n        }()\r\n\r\n\r\n        UTIF.decode._decodeLogLuv32 = function(img, data, off, len, tgt, toff) {\r\n            var w = img.width, qw = w * 4;\r\n            var io = 0, out = new Uint8Array(qw);\r\n\r\n            while (io < len) {\r\n                var oo = 0;\r\n                while (oo < qw) {\r\n                    var c = data[off + io];\r\n                    io++;\r\n                    if (c < 128) {\r\n                        for (var j = 0; j < c; j++) {\r\n                            out[oo + j] = data[off + io + j];\r\n                        }\r\n                        oo += c;\r\n                        io += c;\r\n                    } else {\r\n                        c = c - 126;\r\n                        for (var j = 0; j < c; j++) {\r\n                            out[oo + j] = data[off + io];\r\n                        }\r\n                        oo += c;\r\n                        io++;\r\n                    }\r\n                }\r\n\r\n                for (var x = 0; x < w; x++) {\r\n                    tgt[toff + 0] = out[x];\r\n                    tgt[toff + 1] = out[x + w];\r\n                    tgt[toff + 2] = out[x + w * 2];\r\n                    tgt[toff + 4] = out[x + w * 3];\r\n                    toff += 6;\r\n                }\r\n            }\r\n        }\r\n\r\n        UTIF.decode._ljpeg_diff = function(data, prm, huff) {\r\n            var getbithuff = UTIF.decode._getbithuff;\r\n            var len, diff;\r\n            len = getbithuff(data, prm, huff[0], huff);\r\n            diff = getbithuff(data, prm, len, 0);\r\n            if ((diff & (1 << (len - 1))) == 0) {\r\n                diff -= (1 << len) - 1;\r\n            }\r\n            return diff;\r\n        }\r\n        UTIF.decode._decodeARW = function(img, inp, off, src_length, tgt, toff) {\r\n            var raw_width = img[\"t256\"][0], height = img[\"t257\"][0], tiff_bps = img[\"t258\"][0];\r\n            var bin = (img.isLE ? UTIF._binLE : UTIF._binBE);\r\n            //console.log(raw_width, height, tiff_bps, raw_width*height, src_length);\r\n            var arw2 = (raw_width * height == src_length) || (raw_width * height * 1.5 == src_length);\r\n            //arw2 = true;\r\n            //console.log(\"ARW2: \", arw2, raw_width*height, src_length, tgt.length);\r\n            if (!arw2) {  //\"sony_arw_load_raw\"; // not arw2\r\n                height += 8;\r\n                var prm = [off, 0, 0, 0];\r\n                var huff = new Uint16Array(32770);\r\n                var tab = [0xf11, 0xf10, 0xe0f, 0xd0e, 0xc0d, 0xb0c, 0xa0b, 0x90a, 0x809,\r\n                           0x708, 0x607, 0x506, 0x405, 0x304, 0x303, 0x300, 0x202, 0x201];\r\n                var i, c, n, col, row, sum = 0;\r\n                var ljpeg_diff = UTIF.decode._ljpeg_diff;\r\n\r\n                huff[0] = 15;\r\n                for (n = i = 0; i < 18; i++) {\r\n                    var lim = 32768 >>> (tab[i] >>> 8);\r\n                    for (var c = 0; c < lim; c++) {\r\n                        huff[++n] = tab[i];\r\n                    }\r\n                }\r\n                for (col = raw_width; col--;) {\r\n                    for (row = 0; row < height + 1; row += 2) {\r\n                        if (row == height) {\r\n                            row = 1;\r\n                        }\r\n                        sum += ljpeg_diff(inp, prm, huff);\r\n                        if (row < height) {\r\n                            var clr = (sum) & 4095;\r\n                            UTIF.decode._putsF(tgt, (row * raw_width + col) * tiff_bps, clr << (16 - tiff_bps));\r\n                        }\r\n                    }\r\n                }\r\n                return;\r\n            }\r\n            if (raw_width * height * 1.5 == src_length) {\r\n                //console.log(\"weird compression\");\r\n                for (var i = 0; i < src_length; i += 3) {\r\n                    var b0 = inp[off + i + 0], b1 = inp[off + i + 1], b2 = inp[off + i + 2];\r\n                    tgt[toff + i] = (b1 << 4) | (b0 >>> 4);\r\n                    tgt[toff + i + 1] = (b0 << 4) | (b2 >>> 4);\r\n                    tgt[toff + i + 2] = (b2 << 4) | (b1 >>> 4);\r\n                }\r\n                return;\r\n            }\r\n\r\n            var pix = new Uint16Array(16);\r\n            var row, col, val, max, min, imax, imin, sh, bit, i, dp;\r\n\r\n            var data = new Uint8Array(raw_width + 1);\r\n            for (row = 0; row < height; row++) {\r\n                //fread (data, 1, raw_width, ifp);\r\n                for (var j = 0; j < raw_width; j++) {\r\n                    data[j] = inp[off++];\r\n                }\r\n                for (dp = 0, col = 0; col < raw_width - 30; dp += 16) {\r\n                    max = 0x7ff & (val = bin.readUint(data, dp));\r\n                    min = 0x7ff & (val >>> 11);\r\n                    imax = 0x0f & (val >>> 22);\r\n                    imin = 0x0f & (val >>> 26);\r\n                    for (sh = 0; sh < 4 && 0x80 << sh <= max - min; sh++) {\r\n                        ;\r\n                    }\r\n                    for (bit = 30, i = 0; i < 16; i++) {\r\n                        if (i == imax) {\r\n                            pix[i] = max;\r\n                        } else if (i == imin) {\r\n                            pix[i] = min;\r\n                        } else {\r\n                            pix[i] = ((bin.readUshort(data, dp + (bit >> 3)) >>> (bit & 7) & 0x7f) << sh) + min;\r\n                            if (pix[i] > 0x7ff) {\r\n                                pix[i] = 0x7ff;\r\n                            }\r\n                            bit += 7;\r\n                        }\r\n                    }\r\n                    for (i = 0; i < 16; i++, col += 2) {\r\n                        //RAW(row,col) = curve[pix[i] << 1] >> 2;\r\n                        var clr = pix[i] << 1;   //clr = 0xffff;\r\n                        UTIF.decode._putsF(tgt, (row * raw_width + col) * tiff_bps, clr << (16 - tiff_bps));\r\n                    }\r\n                    col -= col & 1 ? 1 : 31;\r\n                }\r\n            }\r\n        }\r\n\r\n        UTIF.decode._decodeNikon = function(img, imgs, data, off, src_length, tgt, toff) {\r\n            var nikon_tree = [\r\n                [0, 0, 1, 5, 1, 1, 1, 1, 1, 1, 2, 0, 0, 0, 0, 0, 0,\t/* 12-bit lossy */\r\n                 5, 4, 3, 6, 2, 7, 1, 0, 8, 9, 11, 10, 12],\r\n                [0, 0, 1, 5, 1, 1, 1, 1, 1, 1, 2, 0, 0, 0, 0, 0, 0,\t/* 12-bit lossy after split */\r\n                 0x39, 0x5a, 0x38, 0x27, 0x16, 5, 4, 3, 2, 1, 0, 11, 12, 12],\r\n                [0, 0, 1, 4, 2, 3, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,  /* 12-bit lossless */\r\n                 5, 4, 6, 3, 7, 2, 8, 1, 9, 0, 10, 11, 12],\r\n                [0, 0, 1, 4, 3, 1, 1, 1, 1, 1, 2, 0, 0, 0, 0, 0, 0,\t/* 14-bit lossy */\r\n                 5, 6, 4, 7, 8, 3, 9, 2, 1, 0, 10, 11, 12, 13, 14],\r\n                [0, 0, 1, 5, 1, 1, 1, 1, 1, 1, 1, 2, 0, 0, 0, 0, 0,\t/* 14-bit lossy after split */\r\n                 8, 0x5c, 0x4b, 0x3a, 0x29, 7, 6, 5, 4, 3, 2, 1, 0, 13, 14],\r\n                [0, 0, 1, 4, 2, 2, 3, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0,\t/* 14-bit lossless */\r\n                 7, 6, 8, 5, 9, 4, 10, 3, 11, 12, 2, 0, 1, 13, 14]];\r\n\r\n            var raw_width = img[\"t256\"][0], height = img[\"t257\"][0], tiff_bps = img[\"t258\"][0];\r\n\r\n            var tree = 0, split = 0;\r\n            var make_decoder = UTIF.decode._make_decoder;\r\n            var getbithuff = UTIF.decode._getbithuff;\r\n\r\n            var mn = imgs[0].exifIFD.makerNote, md = mn[\"t150\"] ? mn[\"t150\"] : mn[\"t140\"], mdo = 0;  //console.log(mn,md);\r\n            //console.log(md[0].toString(16), md[1].toString(16), tiff_bps);\r\n            var ver0 = md[mdo++], ver1 = md[mdo++];\r\n            if (ver0 == 0x49 || ver1 == 0x58) {\r\n                mdo += 2110;\r\n            }\r\n            if (ver0 == 0x46) {\r\n                tree = 2;\r\n            }\r\n            if (tiff_bps == 14) {\r\n                tree += 3;\r\n            }\r\n\r\n            var vpred = [[0, 0], [0, 0]], bin = (img.isLE ? UTIF._binLE : UTIF._binBE);\r\n            for (var i = 0; i < 2; i++) {\r\n                for (var j = 0; j < 2; j++) {\r\n                    vpred[i][j] = bin.readShort(md, mdo);\r\n                    mdo += 2;\r\n                }\r\n            }  // not sure here ... [i][j] or [j][i]\r\n            //console.log(vpred);\r\n\r\n\r\n            var max = 1 << tiff_bps & 0x7fff, step = 0;\r\n            var csize = bin.readShort(md, mdo);\r\n            mdo += 2;\r\n            if (csize > 1) {\r\n                step = Math.floor(max / (csize - 1));\r\n            }\r\n            if (ver0 == 0x44 && ver1 == 0x20 && step > 0) {\r\n                split = bin.readShort(md, 562);\r\n            }\r\n\r\n\r\n            var i;\r\n            var row, col;\r\n            var len, shl, diff;\r\n            var min_v = 0;\r\n            var hpred = [0, 0];\r\n            var huff = make_decoder(nikon_tree[tree]);\r\n\r\n            //var g_input_offset=0, bitbuf=0, vbits=0, reset=0;\r\n            var prm = [off, 0, 0, 0];\r\n            //console.log(split);  split = 170;\r\n\r\n            for (min_v = row = 0; row < height; row++) {\r\n                if (split && row == split) {\r\n                    //free (huff);\r\n                    huff = make_decoder(nikon_tree[tree + 1]);\r\n                    //max_v += (min_v = 16) << 1;\r\n                }\r\n                for (col = 0; col < raw_width; col++) {\r\n                    i = getbithuff(data, prm, huff[0], huff);\r\n                    len = i & 15;\r\n                    shl = i >>> 4;\r\n                    diff = (((getbithuff(data, prm, len - shl, 0) << 1) + 1) << shl) >>> 1;\r\n                    if ((diff & (1 << (len - 1))) == 0) {\r\n                        diff -= (1 << len) - (shl == 0 ? 1 : 0);\r\n                    }\r\n                    if (col < 2) {\r\n                        hpred[col] = vpred[row & 1][col] += diff;\r\n                    } else {\r\n                        hpred[col & 1] += diff;\r\n                    }\r\n\r\n                    var clr = Math.min(Math.max(hpred[col & 1], 0), (1 << tiff_bps) - 1);\r\n                    var bti = (row * raw_width + col) * tiff_bps;\r\n                    UTIF.decode._putsF(tgt, bti, clr << (16 - tiff_bps));\r\n                }\r\n            }\r\n        }\r\n// put 16 bits\r\n        UTIF.decode._putsF = function(dt, pos, val) {\r\n            val = val << (8 - (pos & 7));\r\n            var o = (pos >>> 3);\r\n            dt[o] |= val >>> 16;\r\n            dt[o + 1] |= val >>> 8;\r\n            dt[o + 2] |= val;\r\n        }\r\n\r\n\r\n        UTIF.decode._getbithuff = function(data, prm, nbits, huff) {\r\n            var zero_after_ff = 0;\r\n            var get_byte = UTIF.decode._get_byte;\r\n            var c;\r\n\r\n            var off = prm[0], bitbuf = prm[1], vbits = prm[2], reset = prm[3];\r\n\r\n            //if (nbits > 25) return 0;\r\n            //if (nbits <  0) return bitbuf = vbits = reset = 0;\r\n            if (nbits == 0 || vbits < 0) {\r\n                return 0;\r\n            }\r\n            while (!reset && vbits < nbits && (c = data[off++]) != -1 &&\r\n                   !(reset = zero_after_ff && c == 0xff && data[off++])) {\r\n                //console.log(\"byte read into c\");\r\n                bitbuf = (bitbuf << 8) + c;\r\n                vbits += 8;\r\n            }\r\n            c = (bitbuf << (32 - vbits)) >>> (32 - nbits);\r\n            if (huff) {\r\n                vbits -= huff[c + 1] >>> 8;  //console.log(c, huff[c]>>8);\r\n                c = huff[c + 1] & 255;\r\n            } else {\r\n                vbits -= nbits;\r\n            }\r\n            if (vbits < 0) {\r\n                throw \"e\";\r\n            }\r\n\r\n            prm[0] = off;\r\n            prm[1] = bitbuf;\r\n            prm[2] = vbits;\r\n            prm[3] = reset;\r\n\r\n            return c;\r\n        }\r\n\r\n        UTIF.decode._make_decoder = function(source) {\r\n            var max, len, h, i, j;\r\n            var huff = [];\r\n\r\n            for (max = 16; max != 0 && !source[max]; max--) {\r\n                ;\r\n            }\r\n            var si = 17;\r\n\r\n            huff[0] = max;\r\n            for (h = len = 1; len <= max; len++) {\r\n                for (i = 0; i < source[len]; i++, ++si) {\r\n                    for (j = 0; j < 1 << (max - len); j++) {\r\n                        if (h <= 1 << max) {\r\n                            huff[h++] = (len << 8) | source[si];\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n            return huff;\r\n        }\r\n\r\n        UTIF.decode._decodeNewJPEG = function(img, data, off, len, tgt, toff) {\r\n            len = Math.min(len, data.length - off);\r\n            var tables = img[\"t347\"], tlen = tables ? tables.length : 0, buff = new Uint8Array(tlen + len);\r\n\r\n            if (tables) {\r\n                var SOI = 216, EOI = 217, boff = 0;\r\n                for (var i = 0; i < (tlen - 1); i++) {\r\n                    // Skip EOI marker from JPEGTables\r\n                    if (tables[i] == 255 && tables[i + 1] == EOI) {\r\n                        break;\r\n                    }\r\n                    buff[boff++] = tables[i];\r\n                }\r\n\r\n                // Skip SOI marker from data\r\n                var byte1 = data[off], byte2 = data[off + 1];\r\n                if (byte1 != 255 || byte2 != SOI) {\r\n                    buff[boff++] = byte1;\r\n                    buff[boff++] = byte2;\r\n                }\r\n                for (var i = 2; i < len; i++) {\r\n                    buff[boff++] = data[off + i];\r\n                }\r\n            } else {\r\n                for (var i = 0; i < len; i++) {\r\n                    buff[i] = data[off + i];\r\n                }\r\n            }\r\n\r\n            if (img[\"t262\"][0] == 32803 || (img[\"t259\"][0] == 7 && img[\"t262\"][0] == 34892)) // lossless JPEG (used in DNG files)\r\n            {\r\n                var bps = img[\"t258\"][0];//, dcdr = new LosslessJpegDecoder();\r\n                //var time = Date.now();\r\n                var out = UTIF.LosslessJpegDecode(buff), olen = out.length;  //console.log(olen);\r\n                //var out = ULLJPG(buff), olen=out.length;  //console.log(olen);\r\n                //console.log(Date.now()-time);\r\n\r\n                if (false) {\r\n                } else if (bps == 16) {\r\n                    if (img.isLE) {\r\n                        for (var i = 0; i < olen; i++) {\r\n                            tgt[toff + (i << 1)] = (out[i] & 255);\r\n                            tgt[toff + (i << 1) + 1] = (out[i] >>> 8);\r\n                        }\r\n                    } else {\r\n                        for (var i = 0; i < olen; i++) {\r\n                            tgt[toff + (i << 1)] = (out[i] >>> 8);\r\n                            tgt[toff + (i << 1) + 1] = (out[i] & 255);\r\n                        }\r\n                    }\r\n                } else if (bps == 14 || bps == 12 || bps == 10) {  // 4 * 14 == 56 == 7 * 8\r\n                    var rst = 16 - bps;\r\n                    for (var i = 0; i < olen; i++) {\r\n                        UTIF.decode._putsF(tgt, i * bps, out[i] << rst);\r\n                    }\r\n                } else if (bps == 8) {\r\n                    for (var i = 0; i < olen; i++) {\r\n                        tgt[toff + i] = out[i];\r\n                    }\r\n                } else {\r\n                    throw new Error(\"unsupported bit depth \" + bps);\r\n                }\r\n            } else {\r\n                var parser = new UTIF.JpegDecoder();\r\n                parser.parse(buff);\r\n                var decoded = parser.getData({\r\n                                                 \"width\": parser.width,\r\n                                                 \"height\": parser.height,\r\n                                                 \"forceRGB\": true,\r\n                                                 \"isSourcePDF\": false\r\n                                             });\r\n                for (var i = 0; i < decoded.length; i++) {\r\n                    tgt[toff + i] = decoded[i];\r\n                }\r\n            }\r\n\r\n            // PhotometricInterpretation is 6 (YCbCr) for JPEG, but after decoding we populate data in\r\n            // RGB format, so updating the tag value\r\n            if (img[\"t262\"][0] == 6) {\r\n                img[\"t262\"][0] = 2;\r\n            }\r\n        }\r\n\r\n        UTIF.decode._decodeOldJPEGInit = function(img, data, off, len) {\r\n            var SOI = 216, EOI = 217, DQT = 219, DHT = 196, DRI = 221, SOF0 = 192, SOS = 218;\r\n            var joff = 0, soff = 0, tables, sosMarker, isTiled = false, i, j, k;\r\n            var jpgIchgFmt = img[\"t513\"], jifoff = jpgIchgFmt ? jpgIchgFmt[0] : 0;\r\n            var jpgIchgFmtLen = img[\"t514\"], jiflen = jpgIchgFmtLen ? jpgIchgFmtLen[0] : 0;\r\n            var soffTag = img[\"t324\"] || img[\"t273\"] || jpgIchgFmt;\r\n            var ycbcrss = img[\"t530\"], ssx = 0, ssy = 0;\r\n            var spp = img[\"t277\"] ? img[\"t277\"][0] : 1;\r\n            var jpgresint = img[\"t515\"];\r\n\r\n            if (soffTag) {\r\n                soff = soffTag[0];\r\n                isTiled = (soffTag.length > 1);\r\n            }\r\n\r\n            if (!isTiled) {\r\n                if (data[off] == 255 && data[off + 1] == SOI) {\r\n                    return {jpegOffset: off};\r\n                }\r\n                if (jpgIchgFmt != null) {\r\n                    if (data[off + jifoff] == 255 && data[off + jifoff + 1] == SOI) {\r\n                        joff = off + jifoff;\r\n                    } else {\r\n                        log(\"JPEGInterchangeFormat does not point to SOI\");\r\n                    }\r\n\r\n                    if (jpgIchgFmtLen == null) {\r\n                        log(\"JPEGInterchangeFormatLength field is missing\");\r\n                    } else if (jifoff >= soff || (jifoff + jiflen) <= soff) {\r\n                        log(\"JPEGInterchangeFormatLength field value is invalid\");\r\n                    }\r\n\r\n                    if (joff != null) {\r\n                        return {jpegOffset: joff};\r\n                    }\r\n                }\r\n            }\r\n\r\n            if (ycbcrss != null) {\r\n                ssx = ycbcrss[0];\r\n                ssy = ycbcrss[1];\r\n            }\r\n\r\n            if (jpgIchgFmt != null) {\r\n                if (jpgIchgFmtLen != null) {\r\n                    if (jiflen >= 2 && (jifoff + jiflen) <= soff) {\r\n                        if (data[off + jifoff + jiflen - 2] == 255 && data[off + jifoff + jiflen - 1] == SOI) {\r\n                            tables = new Uint8Array(jiflen - 2);\r\n                        } else {\r\n                            tables = new Uint8Array(jiflen);\r\n                        }\r\n\r\n                        for (i = 0; i < tables.length; i++) {\r\n                            tables[i] = data[off + jifoff + i];\r\n                        }\r\n                        log(\"Incorrect JPEG interchange format: using JPEGInterchangeFormat offset to derive tables\");\r\n                    } else {\r\n                        log(\"JPEGInterchangeFormat+JPEGInterchangeFormatLength > offset to first strip or tile\");\r\n                    }\r\n                }\r\n            }\r\n\r\n            if (tables == null) {\r\n                var ooff = 0, out = [];\r\n                out[ooff++] = 255;\r\n                out[ooff++] = SOI;\r\n\r\n                var qtables = img[\"t519\"];\r\n                if (qtables == null) {\r\n                    throw new Error(\"JPEGQTables tag is missing\");\r\n                }\r\n                for (i = 0; i < qtables.length; i++) {\r\n                    out[ooff++] = 255;\r\n                    out[ooff++] = DQT;\r\n                    out[ooff++] = 0;\r\n                    out[ooff++] = 67;\r\n                    out[ooff++] = i;\r\n                    for (j = 0; j < 64; j++) {\r\n                        out[ooff++] = data[off + qtables[i] + j];\r\n                    }\r\n                }\r\n\r\n                for (k = 0; k < 2; k++) {\r\n                    var htables = img[(k == 0) ? \"t520\" : \"t521\"];\r\n                    if (htables == null) {\r\n                        throw new Error(((k == 0) ? \"JPEGDCTables\" : \"JPEGACTables\") + \" tag is missing\");\r\n                    }\r\n                    for (i = 0; i < htables.length; i++) {\r\n                        out[ooff++] = 255;\r\n                        out[ooff++] = DHT;\r\n                        //out[ooff++] = 0; out[ooff++] = 67; out[ooff++] = i;\r\n                        var nc = 19;\r\n                        for (j = 0; j < 16; j++) {\r\n                            nc += data[off + htables[i] + j];\r\n                        }\r\n\r\n                        out[ooff++] = (nc >>> 8);\r\n                        out[ooff++] = nc & 255;\r\n                        out[ooff++] = (i | (k << 4));\r\n                        for (j = 0; j < 16; j++) {\r\n                            out[ooff++] = data[off + htables[i] + j];\r\n                        }\r\n                        for (j = 0; j < nc; j++) {\r\n                            out[ooff++] = data[off + htables[i] + 16 + j];\r\n                        }\r\n                    }\r\n                }\r\n\r\n                out[ooff++] = 255;\r\n                out[ooff++] = SOF0;\r\n                out[ooff++] = 0;\r\n                out[ooff++] = 8 + 3 * spp;\r\n                out[ooff++] = 8;\r\n                out[ooff++] = (img.height >>> 8) & 255;\r\n                out[ooff++] = img.height & 255;\r\n                out[ooff++] = (img.width >>> 8) & 255;\r\n                out[ooff++] = img.width & 255;\r\n                out[ooff++] = spp;\r\n                if (spp == 1) {\r\n                    out[ooff++] = 1;\r\n                    out[ooff++] = 17;\r\n                    out[ooff++] = 0;\r\n                } else {\r\n                    for (i = 0; i < 3; i++) {\r\n                        out[ooff++] = i + 1;\r\n                        out[ooff++] = (i != 0) ? 17 : (((ssx & 15) << 4) | (ssy & 15));\r\n                        out[ooff++] = i;\r\n                    }\r\n                }\r\n\r\n                if (jpgresint != null && jpgresint[0] != 0) {\r\n                    out[ooff++] = 255;\r\n                    out[ooff++] = DRI;\r\n                    out[ooff++] = 0;\r\n                    out[ooff++] = 4;\r\n                    out[ooff++] = (jpgresint[0] >>> 8) & 255;\r\n                    out[ooff++] = jpgresint[0] & 255;\r\n                }\r\n\r\n                tables = new Uint8Array(out);\r\n            }\r\n\r\n            var sofpos = -1;\r\n            i = 0;\r\n            while (i < (tables.length - 1)) {\r\n                if (tables[i] == 255 && tables[i + 1] == SOF0) {\r\n                    sofpos = i;\r\n                    break;\r\n                }\r\n                i++;\r\n            }\r\n\r\n            if (sofpos == -1) {\r\n                var tmptab = new Uint8Array(tables.length + 10 + 3 * spp);\r\n                tmptab.set(tables);\r\n                var tmpoff = tables.length;\r\n                sofpos = tables.length;\r\n                tables = tmptab;\r\n\r\n                tables[tmpoff++] = 255;\r\n                tables[tmpoff++] = SOF0;\r\n                tables[tmpoff++] = 0;\r\n                tables[tmpoff++] = 8 + 3 * spp;\r\n                tables[tmpoff++] = 8;\r\n                tables[tmpoff++] = (img.height >>> 8) & 255;\r\n                tables[tmpoff++] = img.height & 255;\r\n                tables[tmpoff++] = (img.width >>> 8) & 255;\r\n                tables[tmpoff++] = img.width & 255;\r\n                tables[tmpoff++] = spp;\r\n                if (spp == 1) {\r\n                    tables[tmpoff++] = 1;\r\n                    tables[tmpoff++] = 17;\r\n                    tables[tmpoff++] = 0;\r\n                } else {\r\n                    for (i = 0; i < 3; i++) {\r\n                        tables[tmpoff++] = i + 1;\r\n                        tables[tmpoff++] = (i != 0) ? 17 : (((ssx & 15) << 4) | (ssy & 15));\r\n                        tables[tmpoff++] = i;\r\n                    }\r\n                }\r\n            }\r\n\r\n            if (data[soff] == 255 && data[soff + 1] == SOS) {\r\n                var soslen = (data[soff + 2] << 8) | data[soff + 3];\r\n                sosMarker = new Uint8Array(soslen + 2);\r\n                sosMarker[0] = data[soff];\r\n                sosMarker[1] = data[soff + 1];\r\n                sosMarker[2] = data[soff + 2];\r\n                sosMarker[3] = data[soff + 3];\r\n                for (i = 0; i < (soslen - 2); i++) {\r\n                    sosMarker[i + 4] = data[soff + i + 4];\r\n                }\r\n            } else {\r\n                sosMarker = new Uint8Array(2 + 6 + 2 * spp);\r\n                var sosoff = 0;\r\n                sosMarker[sosoff++] = 255;\r\n                sosMarker[sosoff++] = SOS;\r\n                sosMarker[sosoff++] = 0;\r\n                sosMarker[sosoff++] = 6 + 2 * spp;\r\n                sosMarker[sosoff++] = spp;\r\n                if (spp == 1) {\r\n                    sosMarker[sosoff++] = 1;\r\n                    sosMarker[sosoff++] = 0;\r\n                } else {\r\n                    for (i = 0; i < 3; i++) {\r\n                        sosMarker[sosoff++] = i + 1;\r\n                        sosMarker[sosoff++] = (i << 4) | i;\r\n                    }\r\n                }\r\n                sosMarker[sosoff++] = 0;\r\n                sosMarker[sosoff++] = 63;\r\n                sosMarker[sosoff++] = 0;\r\n            }\r\n\r\n            return {jpegOffset: off, tables: tables, sosMarker: sosMarker, sofPosition: sofpos};\r\n        }\r\n\r\n        UTIF.decode._decodeOldJPEG = function(img, data, off, len, tgt, toff) {\r\n            var i, dlen, tlen, buff, buffoff;\r\n            var jpegData = UTIF.decode._decodeOldJPEGInit(img, data, off, len);\r\n\r\n            if (jpegData.jpegOffset != null) {\r\n                dlen = off + len - jpegData.jpegOffset;\r\n                buff = new Uint8Array(dlen);\r\n                for (i = 0; i < dlen; i++) {\r\n                    buff[i] = data[jpegData.jpegOffset + i];\r\n                }\r\n            } else {\r\n                tlen = jpegData.tables.length;\r\n                buff = new Uint8Array(tlen + jpegData.sosMarker.length + len + 2);\r\n                buff.set(jpegData.tables);\r\n                buffoff = tlen;\r\n\r\n                buff[jpegData.sofPosition + 5] = (img.height >>> 8) & 255;\r\n                buff[jpegData.sofPosition + 6] = img.height & 255;\r\n                buff[jpegData.sofPosition + 7] = (img.width >>> 8) & 255;\r\n                buff[jpegData.sofPosition + 8] = img.width & 255;\r\n\r\n                if (data[off] != 255 || data[off + 1] != SOS) {\r\n                    buff.set(jpegData.sosMarker, buffoff);\r\n                    buffoff += sosMarker.length;\r\n                }\r\n                for (i = 0; i < len; i++) {\r\n                    buff[buffoff++] = data[off + i];\r\n                }\r\n                buff[buffoff++] = 255;\r\n                buff[buffoff++] = EOI;\r\n            }\r\n\r\n            var parser = new UTIF.JpegDecoder();\r\n            parser.parse(buff);\r\n            var decoded = parser.getData({\r\n                                             \"width\": parser.width,\r\n                                             \"height\": parser.height,\r\n                                             \"forceRGB\": true,\r\n                                             \"isSourcePDF\": false\r\n                                         });\r\n            for (var i = 0; i < decoded.length; i++) {\r\n                tgt[toff + i] = decoded[i];\r\n            }\r\n\r\n            // PhotometricInterpretation is 6 (YCbCr) for JPEG, but after decoding we populate data in\r\n            // RGB format, so updating the tag value\r\n            if (img[\"t262\"] && img[\"t262\"][0] == 6) {\r\n                img[\"t262\"][0] = 2;\r\n            }\r\n        }\r\n\r\n        UTIF.decode._decodePackBits = function(data, off, len, tgt, toff) {\r\n            var sa = new Int8Array(data.buffer), ta = new Int8Array(tgt.buffer), lim = off + len;\r\n            while (off < lim) {\r\n                var n = sa[off];\r\n                off++;\r\n                if (n >= 0 && n < 128) {\r\n                    for (var i = 0; i < n + 1; i++) {\r\n                        ta[toff] = sa[off];\r\n                        toff++;\r\n                        off++;\r\n                    }\r\n                }\r\n                if (n >= -127 && n < 0) {\r\n                    for (var i = 0; i < -n + 1; i++) {\r\n                        ta[toff] = sa[off];\r\n                        toff++;\r\n                    }\r\n                    off++;\r\n                }\r\n            }\r\n            return toff;\r\n        }\r\n\r\n        UTIF.decode._decodeThunder = function(data, off, len, tgt, toff) {\r\n            var d2 = [0, 1, 0, -1], d3 = [0, 1, 2, 3, 0, -3, -2, -1];\r\n            var lim = off + len, qoff = toff * 2, px = 0;\r\n            while (off < lim) {\r\n                var b = data[off], msk = (b >>> 6), n = (b & 63);\r\n                off++;\r\n                if (msk == 3) {\r\n                    px = (n & 15);\r\n                    tgt[qoff >>> 1] |= (px << (4 * (1 - qoff & 1)));\r\n                    qoff++;\r\n                }\r\n                if (msk == 0) {\r\n                    for (var i = 0; i < n; i++) {\r\n                        tgt[qoff >>> 1] |= (px << (4 * (1 - qoff & 1)));\r\n                        qoff++;\r\n                    }\r\n                }\r\n                if (msk == 2) {\r\n                    for (var i = 0; i < 2; i++) {\r\n                        var d = (n >>> (3 * (1 - i))) & 7;\r\n                        if (d != 4) {\r\n                            px += d3[d];\r\n                            tgt[qoff >>> 1] |= (px << (4 * (1 - qoff & 1)));\r\n                            qoff++;\r\n                        }\r\n                    }\r\n                }\r\n                if (msk == 1) {\r\n                    for (var i = 0; i < 3; i++) {\r\n                        var d = (n >>> (2 * (2 - i))) & 3;\r\n                        if (d != 2) {\r\n                            px += d2[d];\r\n                            tgt[qoff >>> 1] |= (px << (4 * (1 - qoff & 1)));\r\n                            qoff++;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        UTIF.decode._dmap = {\"1\": 0, \"011\": 1, \"000011\": 2, \"0000011\": 3, \"010\": -1, \"000010\": -2, \"0000010\": -3};\r\n        UTIF.decode._lens = (function() {\r\n            var addKeys = function(lens, arr, i0, inc) {\r\n                for (var i = 0; i < arr.length; i++) {\r\n                    lens[arr[i]] = i0 + i * inc;\r\n                }\r\n            }\r\n\r\n            var termW = \"00110101,000111,0111,1000,1011,1100,1110,1111,10011,10100,00111,01000,001000,000011,110100,110101,\" // 15\r\n                        + \"101010,101011,0100111,0001100,0001000,0010111,0000011,0000100,0101000,0101011,0010011,0100100,0011000,00000010,00000011,00011010,\" // 31\r\n                        + \"00011011,00010010,00010011,00010100,00010101,00010110,00010111,00101000,00101001,00101010,00101011,00101100,00101101,00000100,00000101,00001010,\" // 47\r\n                        + \"00001011,01010010,01010011,01010100,01010101,00100100,00100101,01011000,01011001,01011010,01011011,01001010,01001011,00110010,00110011,00110100\";\r\n\r\n            var termB = \"0000110111,010,11,10,011,0011,0010,00011,000101,000100,0000100,0000101,0000111,00000100,00000111,000011000,\" // 15\r\n                        + \"0000010111,0000011000,0000001000,00001100111,00001101000,00001101100,00000110111,00000101000,00000010111,00000011000,000011001010,000011001011,000011001100,000011001101,000001101000,000001101001,\" // 31\r\n                        + \"000001101010,000001101011,000011010010,000011010011,000011010100,000011010101,000011010110,000011010111,000001101100,000001101101,000011011010,000011011011,000001010100,000001010101,000001010110,000001010111,\" // 47\r\n                        + \"000001100100,000001100101,000001010010,000001010011,000000100100,000000110111,000000111000,000000100111,000000101000,000001011000,000001011001,000000101011,000000101100,000001011010,000001100110,000001100111\";\r\n\r\n            var makeW = \"11011,10010,010111,0110111,00110110,00110111,01100100,01100101,01101000,01100111,011001100,011001101,011010010,011010011,011010100,011010101,011010110,\"\r\n                        + \"011010111,011011000,011011001,011011010,011011011,010011000,010011001,010011010,011000,010011011\";\r\n\r\n            var makeB = \"0000001111,000011001000,000011001001,000001011011,000000110011,000000110100,000000110101,0000001101100,0000001101101,0000001001010,0000001001011,0000001001100,\"\r\n                        + \"0000001001101,0000001110010,0000001110011,0000001110100,0000001110101,0000001110110,0000001110111,0000001010010,0000001010011,0000001010100,0000001010101,0000001011010,\"\r\n                        + \"0000001011011,0000001100100,0000001100101\";\r\n\r\n            var makeA = \"00000001000,00000001100,00000001101,000000010010,000000010011,000000010100,000000010101,000000010110,000000010111,000000011100,000000011101,000000011110,000000011111\";\r\n\r\n            termW = termW.split(\",\");\r\n            termB = termB.split(\",\");\r\n            makeW = makeW.split(\",\");\r\n            makeB = makeB.split(\",\");\r\n            makeA = makeA.split(\",\");\r\n\r\n            var lensW = {}, lensB = {};\r\n            addKeys(lensW, termW, 0, 1);\r\n            addKeys(lensW, makeW, 64, 64);\r\n            addKeys(lensW, makeA, 1792, 64);\r\n            addKeys(lensB, termB, 0, 1);\r\n            addKeys(lensB, makeB, 64, 64);\r\n            addKeys(lensB, makeA, 1792, 64);\r\n            return [lensW, lensB];\r\n        })();\r\n\r\n        UTIF.decode._decodeG4 = function(data, off, slen, tgt, toff, w, fo) {\r\n            var U = UTIF.decode, boff = off << 3, len = 0, wrd = \"\";\t// previous starts with 1\r\n            var line = [], pline = [];\r\n            for (var i = 0; i < w; i++) {\r\n                pline.push(0);\r\n            }\r\n            pline = U._makeDiff(pline);\r\n            var a0 = 0, a1 = 0, a2 = 0, b1 = 0, b2 = 0, clr = 0;\r\n            var y = 0, mode = \"\", toRead = 0;\r\n            var bipl = Math.ceil(w / 8) * 8;\r\n\r\n            while ((boff >>> 3) < off + slen) {\r\n                b1 = U._findDiff(pline, a0 + (a0 == 0 ? 0 : 1), 1 - clr), b2 = U._findDiff(pline, b1, clr);\t// could be precomputed\r\n                var bit = 0;\r\n                if (fo == 1) {\r\n                    bit = (data[boff >>> 3] >>> (7 - (boff & 7))) & 1;\r\n                }\r\n                if (fo == 2) {\r\n                    bit = (data[boff >>> 3] >>> ((boff & 7))) & 1;\r\n                }\r\n                boff++;\r\n                wrd += bit;\r\n                if (mode == \"H\") {\r\n                    if (U._lens[clr][wrd] != null) {\r\n                        var dl = U._lens[clr][wrd];\r\n                        wrd = \"\";\r\n                        len += dl;\r\n                        if (dl < 64) {\r\n                            U._addNtimes(line, len, clr);\r\n                            a0 += len;\r\n                            clr = 1 - clr;\r\n                            len = 0;\r\n                            toRead--;\r\n                            if (toRead == 0) {\r\n                                mode = \"\";\r\n                            }\r\n                        }\r\n                    }\r\n                } else {\r\n                    if (wrd == \"0001\") {\r\n                        wrd = \"\";\r\n                        U._addNtimes(line, b2 - a0, clr);\r\n                        a0 = b2;\r\n                    }\r\n                    if (wrd == \"001\") {\r\n                        wrd = \"\";\r\n                        mode = \"H\";\r\n                        toRead = 2;\r\n                    }\r\n                    if (U._dmap[wrd] != null) {\r\n                        a1 = b1 + U._dmap[wrd];\r\n                        U._addNtimes(line, a1 - a0, clr);\r\n                        a0 = a1;\r\n                        wrd = \"\";\r\n                        clr = 1 - clr;\r\n                    }\r\n                }\r\n                if (line.length == w && mode == \"\") {\r\n                    U._writeBits(line, tgt, toff * 8 + y * bipl);\r\n                    clr = 0;\r\n                    y++;\r\n                    a0 = 0;\r\n                    pline = U._makeDiff(line);\r\n                    line = [];\r\n                }\r\n                //if(wrd.length>150) {  log(wrd);  break;  throw \"e\";  }\r\n            }\r\n        }\r\n\r\n        UTIF.decode._findDiff = function(line, x, clr) {\r\n            for (var i = 0; i < line.length; i += 2) {\r\n                if (line[i] >= x && line[i + 1] == clr) {\r\n                    return line[i];\r\n                }\r\n            }\r\n        }\r\n\r\n        UTIF.decode._makeDiff = function(line) {\r\n            var out = [];\r\n            if (line[0] == 1) {\r\n                out.push(0, 1);\r\n            }\r\n            for (var i = 1; i < line.length; i++) {\r\n                if (line[i - 1] != line[i]) {\r\n                    out.push(i, line[i]);\r\n                }\r\n            }\r\n            out.push(line.length, 0, line.length, 1);\r\n            return out;\r\n        }\r\n\r\n        UTIF.decode._decodeG2 = function(data, off, slen, tgt, toff, w, fo) {\r\n            var U = UTIF.decode, boff = off << 3, len = 0, wrd = \"\";\r\n            var line = [];\r\n            var clr = 0;\r\n            var y = 0;\r\n            var bipl = Math.ceil(w / 8) * 8;\r\n\r\n            while ((boff >>> 3) < off + slen) {\r\n                var bit = 0;\r\n                if (fo == 1) {\r\n                    bit = (data[boff >>> 3] >>> (7 - (boff & 7))) & 1;\r\n                }\r\n                if (fo == 2) {\r\n                    bit = (data[boff >>> 3] >>> ((boff & 7))) & 1;\r\n                }\r\n                boff++;\r\n                wrd += bit;\r\n\r\n                len = U._lens[clr][wrd];\r\n                if (len != null) {\r\n                    U._addNtimes(line, len, clr);\r\n                    wrd = \"\";\r\n                    if (len < 64) {\r\n                        clr = 1 - clr;\r\n                    }\r\n                    if (line.length == w) {\r\n                        U._writeBits(line, tgt, toff * 8 + y * bipl);\r\n                        line = [];\r\n                        y++;\r\n                        clr = 0;\r\n                        if ((boff & 7) != 0) {\r\n                            boff += 8 - (boff & 7);\r\n                        }\r\n                        if (len >= 64) {\r\n                            boff += 8;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        UTIF.decode._decodeG3 = function(data, off, slen, tgt, toff, w, fo, twoDim) {\r\n            var U = UTIF.decode, boff = off << 3, len = 0, wrd = \"\";\r\n            var line = [], pline = [];\r\n            for (var i = 0; i < w; i++) {\r\n                line.push(0);\r\n            }\r\n            var a0 = 0, a1 = 0, a2 = 0, b1 = 0, b2 = 0, clr = 0;\r\n            var y = -1, mode = \"\", toRead = 0, is1D = true;\r\n            var bipl = Math.ceil(w / 8) * 8;\r\n            while ((boff >>> 3) < off + slen) {\r\n                b1 = U._findDiff(pline, a0 + (a0 == 0 ? 0 : 1), 1 - clr), b2 = U._findDiff(pline, b1, clr);\t// could be precomputed\r\n                var bit = 0;\r\n                if (fo == 1) {\r\n                    bit = (data[boff >>> 3] >>> (7 - (boff & 7))) & 1;\r\n                }\r\n                if (fo == 2) {\r\n                    bit = (data[boff >>> 3] >>> ((boff & 7))) & 1;\r\n                }\r\n                boff++;\r\n                wrd += bit;\r\n\r\n                if (is1D) {\r\n                    if (U._lens[clr][wrd] != null) {\r\n                        var dl = U._lens[clr][wrd];\r\n                        wrd = \"\";\r\n                        len += dl;\r\n                        if (dl < 64) {\r\n                            U._addNtimes(line, len, clr);\r\n                            clr = 1 - clr;\r\n                            len = 0;\r\n                        }\r\n                    }\r\n                } else {\r\n                    if (mode == \"H\") {\r\n                        if (U._lens[clr][wrd] != null) {\r\n                            var dl = U._lens[clr][wrd];\r\n                            wrd = \"\";\r\n                            len += dl;\r\n                            if (dl < 64) {\r\n                                U._addNtimes(line, len, clr);\r\n                                a0 += len;\r\n                                clr = 1 - clr;\r\n                                len = 0;\r\n                                toRead--;\r\n                                if (toRead == 0) {\r\n                                    mode = \"\";\r\n                                }\r\n                            }\r\n                        }\r\n                    } else {\r\n                        if (wrd == \"0001\") {\r\n                            wrd = \"\";\r\n                            U._addNtimes(line, b2 - a0, clr);\r\n                            a0 = b2;\r\n                        }\r\n                        if (wrd == \"001\") {\r\n                            wrd = \"\";\r\n                            mode = \"H\";\r\n                            toRead = 2;\r\n                        }\r\n                        if (U._dmap[wrd] != null) {\r\n                            a1 = b1 + U._dmap[wrd];\r\n                            U._addNtimes(line, a1 - a0, clr);\r\n                            a0 = a1;\r\n                            wrd = \"\";\r\n                            clr = 1 - clr;\r\n                        }\r\n                    }\r\n                }\r\n                if (wrd.endsWith(\"000000000001\")) // needed for some files\r\n                {\r\n                    if (y >= 0) {\r\n                        U._writeBits(line, tgt, toff * 8 + y * bipl);\r\n                    }\r\n                    if (twoDim) {\r\n                        if (fo == 1) {\r\n                            is1D = ((data[boff >>> 3] >>> (7 - (boff & 7))) & 1) == 1;\r\n                        }\r\n                        if (fo == 2) {\r\n                            is1D = ((data[boff >>> 3] >>> ((boff & 7))) & 1) == 1;\r\n                        }\r\n                        boff++;\r\n                    }\r\n                    //log(\"EOL\",y, \"next 1D:\", is1D);\r\n                    wrd = \"\";\r\n                    clr = 0;\r\n                    y++;\r\n                    a0 = 0;\r\n                    pline = U._makeDiff(line);\r\n                    line = [];\r\n                }\r\n            }\r\n            if (line.length == w) {\r\n                U._writeBits(line, tgt, toff * 8 + y * bipl);\r\n            }\r\n        }\r\n\r\n        UTIF.decode._addNtimes = function(arr, n, val) {\r\n            for (var i = 0; i < n; i++) {\r\n                arr.push(val);\r\n            }\r\n        }\r\n\r\n        UTIF.decode._writeBits = function(bits, tgt, boff) {\r\n            for (var i = 0; i < bits.length; i++) {\r\n                tgt[(boff + i) >>> 3] |= (bits[i] << (7 - ((boff + i) & 7)));\r\n            }\r\n        }\r\n\r\n        UTIF.decode._decodeLZW = UTIF.decode._decodeLZW = function() {\r\n            var e, U, Z, u, K = 0, V = 0, g = 0, N = 0, O = function() {\r\n                var S = e >>> 3, A = U[S] << 16 | U[S + 1] << 8 | U[S + 2], j = A >>> 24 - (e & 7) - V & (1 << V) - 1;\r\n                e += V;\r\n                return j\r\n            }, h = new Uint32Array(4096 * 4), w = 0, m = function(S) {\r\n                if (S == w) {\r\n                    return;\r\n                }\r\n                w = S;\r\n                g = 1 << S;\r\n                N = g + 1;\r\n                for (var A = 0;\r\n                     A < N + 1; A++) {\r\n                    h[4 * A] = h[4 * A + 3] = A;\r\n                    h[4 * A + 1] = 65535;\r\n                    h[4 * A + 2] = 1\r\n                }\r\n            }, i = function(S) {\r\n                V = S + 1;\r\n                K = N + 1\r\n            }, D = function(S) {\r\n                var A = S << 2, j = h[A + 2], a = u + j - 1;\r\n                while (A != 65535) {\r\n                    Z[a--] = h[A];\r\n                    A = h[A + 1]\r\n                }\r\n                u += j\r\n            }, L = function(S, A) {\r\n                var j = K << 2, a = S << 2;\r\n                h[j] = h[(A << 2) + 3];\r\n                h[j + 1] = a;\r\n                h[j + 2] = h[a + 2] + 1;\r\n                h[j + 3] = h[a + 3];\r\n                K++;\r\n                if (K + 1 == 1 << V && V != 12) {\r\n                    V++\r\n                }\r\n            }, T = function(S, A, j, a, n, q) {\r\n                e = A << 3;\r\n                U = S;\r\n                Z = a;\r\n                u = n;\r\n                var B = A + j << 3, _ = 0, t = 0;\r\n                m(q);\r\n                i(q);\r\n                while (e < B && (_ = O()) != N) {\r\n                    if (_ == g) {\r\n                        i(q);\r\n                        _ = O();\r\n                        if (_ == N) {\r\n                            break;\r\n                        }\r\n                        D(_)\r\n                    } else {\r\n                        if (_ < K) {\r\n                            D(_);\r\n                            L(t, _)\r\n                        } else {\r\n                            L(t, t);\r\n                            D(K - 1)\r\n                        }\r\n                    }\r\n                    t = _\r\n                }\r\n                return u\r\n            };\r\n            return T\r\n        }();\r\n\r\n        UTIF.tags = {};\r\n//UTIF.ttypes = {  256:3,257:3,258:3,   259:3, 262:3,  273:4,  274:3, 277:3,278:4,279:4, 282:5, 283:5, 284:3, 286:5,287:5, 296:3, 305:2, 306:2, 338:3, 513:4, 514:4, 34665:4  };\r\n// start at tag 250\r\n        UTIF._types = function() {\r\n            var main = new Array(250);\r\n            main.fill(0);\r\n            main = main.concat([0, 0, 0, 0, 4, 3, 3, 3, 3, 3, 0, 0, 3, 0, 0, 0, 3, 0, 0, 2, 2, 2, 2, 4, 3, 0, 0, 3, 4, 4, 3, 3, 5, 5, 3, 2, 5, 5, 0, 0, 0, 0, 4, 4, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 3, 5, 5, 3, 0, 3, 3, 4, 4, 4, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);\r\n            var rest = {\r\n                33432: 2,\r\n                33434: 5,\r\n                33437: 5,\r\n                34665: 4,\r\n                34850: 3,\r\n                34853: 4,\r\n                34855: 3,\r\n                34864: 3,\r\n                34866: 4,\r\n                36864: 7,\r\n                36867: 2,\r\n                36868: 2,\r\n                37121: 7,\r\n                37377: 10,\r\n                37378: 5,\r\n                37380: 10,\r\n                37381: 5,\r\n                37383: 3,\r\n                37384: 3,\r\n                37385: 3,\r\n                37386: 5,\r\n                37510: 7,\r\n                37520: 2,\r\n                37521: 2,\r\n                37522: 2,\r\n                40960: 7,\r\n                40961: 3,\r\n                40962: 4,\r\n                40963: 4,\r\n                40965: 4,\r\n                41486: 5,\r\n                41487: 5,\r\n                41488: 3,\r\n                41985: 3,\r\n                41986: 3,\r\n                41987: 3,\r\n                41988: 5,\r\n                41989: 3,\r\n                41990: 3,\r\n                41993: 3,\r\n                41994: 3,\r\n                41995: 7,\r\n                41996: 3,\r\n                42032: 2,\r\n                42033: 2,\r\n                42034: 5,\r\n                42036: 2,\r\n                42037: 2,\r\n                59932: 7\r\n            };\r\n            return {\r\n                basic: {\r\n                    main: main,\r\n                    rest: rest\r\n                },\r\n                gps: {\r\n                    main: [1, 2, 5, 2, 5, 1, 5, 5, 0, 9],\r\n                    rest: {18: 2, 29: 2}\r\n                }\r\n            }\r\n        }();\r\n\r\n        UTIF._readIFD = function(bin, data, offset, ifds, depth, prm) {\r\n            var cnt = bin.readUshort(data, offset);\r\n            offset += 2;\r\n            var ifd = {};\r\n\r\n            if (prm.debug) {\r\n                log(\"   \".repeat(depth), ifds.length - 1, \">>>----------------\");\r\n            }\r\n            for (var i = 0; i < cnt; i++) {\r\n                var tag = bin.readUshort(data, offset);\r\n                offset += 2;\r\n                var type = bin.readUshort(data, offset);\r\n                offset += 2;\r\n                var num = bin.readUint(data, offset);\r\n                offset += 4;\r\n                var voff = bin.readUint(data, offset);\r\n                offset += 4;\r\n\r\n                var arr = [];\r\n                //ifd[\"t\"+tag+\"-\"+UTIF.tags[tag]] = arr;\r\n                if (type == 1 || type == 7) {\r\n                    var no = (num < 5 ? offset - 4 : voff);\r\n                    if (no + num > data.buffer.byteLength) {\r\n                        num = data.buffer.byteLength - no;\r\n                    }\r\n                    arr = new Uint8Array(data.buffer, no, num);\r\n                }\r\n                if (type == 2) {\r\n                    var o0 = (num < 5 ? offset - 4 : voff), c = data[o0],\r\n                            len = Math.max(0, Math.min(num - 1, data.length - o0));\r\n                    if (c < 128 || len == 0) {\r\n                        arr.push(bin.readASCII(data, o0, len));\r\n                    } else {\r\n                        arr = new Uint8Array(data.buffer, o0, len);\r\n                    }\r\n                }\r\n                if (type == 3) {\r\n                    for (var j = 0; j < num; j++) {\r\n                        arr.push(bin.readUshort(data, (num < 3 ? offset - 4 : voff) + 2 * j));\r\n                    }\r\n                }\r\n                if (type == 4\r\n                    || type == 13) {\r\n                    for (var j = 0; j < num; j++) {\r\n                        arr.push(bin.readUint(data, (num < 2 ? offset - 4 : voff) + 4 * j));\r\n                    }\r\n                }\r\n                if (type == 5 || type == 10) {\r\n                    var ri = type == 5 ? bin.readUint : bin.readInt;\r\n                    for (var j = 0; j < num; j++) {\r\n                        arr.push([ri(data, voff + j * 8), ri(data, voff + j * 8 + 4)]);\r\n                    }\r\n                }\r\n                if (type == 8) {\r\n                    for (var j = 0; j < num; j++) {\r\n                        arr.push(bin.readShort(data, (num < 3 ? offset - 4 : voff) + 2 * j));\r\n                    }\r\n                }\r\n                if (type == 9) {\r\n                    for (var j = 0; j < num; j++) {\r\n                        arr.push(bin.readInt(data, (num < 2 ? offset - 4 : voff) + 4 * j));\r\n                    }\r\n                }\r\n                if (type == 11) {\r\n                    for (var j = 0; j < num; j++) {\r\n                        arr.push(bin.readFloat(data, voff + j * 4));\r\n                    }\r\n                }\r\n                if (type == 12) {\r\n                    for (var j = 0; j < num; j++) {\r\n                        arr.push(bin.readDouble(data, voff + j * 8));\r\n                    }\r\n                }\r\n\r\n                if (num != 0 && arr.length == 0) {\r\n                    log(tag, \"unknown TIFF tag type: \", type, \"num:\", num);\r\n                    if (i == 0) {\r\n                        return;\r\n                    }\r\n                    continue;\r\n                }\r\n                if (prm.debug) {\r\n                    log(\"   \".repeat(depth), tag, type, UTIF.tags[tag], arr);\r\n                }\r\n\r\n                ifd[\"t\" + tag] = arr;\r\n\r\n                if (tag == 330 && ifd[\"t272\"] && ifd[\"t272\"][0] == \"DSLR-A100\") {\r\n                } else if (tag == 330 || tag == 34665 || tag == 34853 || (tag == 50740 && bin.readUshort(data, bin.readUint(arr, 0)) < 300) || tag == 61440) {\r\n                    var oarr = tag == 50740 ? [bin.readUint(arr, 0)] : arr;\r\n                    var subfd = [];\r\n                    for (var j = 0; j < oarr.length; j++) {\r\n                        UTIF._readIFD(bin, data, oarr[j], subfd, depth + 1, prm);\r\n                    }\r\n                    if (tag == 330) {\r\n                        ifd.subIFD = subfd;\r\n                    }\r\n                    if (tag == 34665) {\r\n                        ifd.exifIFD = subfd[0];\r\n                    }\r\n                    if (tag == 34853) {\r\n                        ifd.gpsiIFD = subfd[0];\r\n                    }  //console.log(\"gps\", subfd[0]);  }\r\n                    if (tag == 50740) {\r\n                        ifd.dngPrvt = subfd[0];\r\n                    }\r\n                    if (tag == 61440) {\r\n                        ifd.fujiIFD = subfd[0];\r\n                    }\r\n                }\r\n                if (tag == 37500 && prm.parseMN) {\r\n                    var mn = arr;\r\n                    //console.log(bin.readASCII(mn,0,mn.length), mn);\r\n                    if (bin.readASCII(mn, 0, 5) == \"Nikon\") {\r\n                        ifd.makerNote = UTIF[\"decode\"](mn.slice(10).buffer)[0];\r\n                    } else if (bin.readASCII(mn, 0, 5) == \"OLYMP\" || bin.readASCII(mn, 0, 9) == \"OM SYSTEM\") { // ???\r\n                        var inds = [8208, 8224, 8240, 8256, 8272];\r\n                        var subsub = [];\r\n                        UTIF._readIFD(bin, mn, mn[1] == 77 ? 16 : (mn[5] == 85 ? 12 : 8), subsub, depth + 1, prm);\r\n                        var obj = ifd.makerNote = subsub.pop();\r\n                        for (var j = 0; j < inds.length; j++) {\r\n                            var k = \"t\" + inds[j];\r\n                            if (obj[k] == null) {\r\n                                continue;\r\n                            }\r\n                            UTIF._readIFD(bin, mn, obj[k][0], subsub, depth + 1, prm);\r\n                            obj[k] = subsub.pop();\r\n                        }\r\n                        if (obj[\"t12288\"]) {\r\n                            UTIF._readIFD(bin, obj[\"t12288\"], 0, subsub, depth + 1, prm);\r\n                            obj[\"t12288\"] = subsub.pop();\r\n                        }\r\n                    } else if (bin.readUshort(data, voff) < 300 && bin.readUshort(data, voff + 4) <= 12) {\r\n                        var subsub = [];\r\n                        UTIF._readIFD(bin, data, voff, subsub, depth + 1, prm);\r\n                        ifd.makerNote = subsub[0];\r\n                    }\r\n                }\r\n            }\r\n            ifds.push(ifd);\r\n            if (prm.debug) {\r\n                log(\"   \".repeat(depth), \"<<<---------------\");\r\n            }\r\n            return offset;\r\n        }\r\n\r\n        UTIF._writeIFD = function(bin, types, data, offset, ifd) {\r\n            var keys = Object.keys(ifd), knum = keys.length;\r\n            if (ifd[\"exifIFD\"]) {\r\n                knum--;\r\n            }\r\n            if (ifd[\"gpsiIFD\"]) {\r\n                knum--;\r\n            }\r\n            bin.writeUshort(data, offset, knum);\r\n            offset += 2;\r\n\r\n            var eoff = offset + knum * 12 + 4;\r\n\r\n            for (var ki = 0; ki < keys.length; ki++) {\r\n                var key = keys[ki];\r\n                if (key == \"t34665\" || key == \"t34853\") {\r\n                    continue;\r\n                }\r\n                if (key == \"exifIFD\") {\r\n                    key = \"t34665\";\r\n                }\r\n                if (key == \"gpsiIFD\") {\r\n                    key = \"t34853\";\r\n                }\r\n                var tag = parseInt(key.slice(1)), type = types.main[tag];\r\n                if (type == null) {\r\n                    type = types.rest[tag];\r\n                }\r\n                if (type == null || type == 0) {\r\n                    throw new Error(\"unknown type of tag: \" + tag);\r\n                }\r\n                //console.log(offset+\":\", tag, type, eoff);\r\n                var val = ifd[key];\r\n                if (tag == 34665) {\r\n                    var outp = UTIF._writeIFD(bin, types, data, eoff, ifd[\"exifIFD\"]);\r\n                    val = [eoff];\r\n                    eoff = outp[1];\r\n                }\r\n                if (tag == 34853) {\r\n                    var outp = UTIF._writeIFD(bin, UTIF._types.gps, data, eoff, ifd[\"gpsiIFD\"]);\r\n                    val = [eoff];\r\n                    eoff = outp[1];\r\n                }\r\n                if (type == 2) {\r\n                    val = val[0] + \"\\u0000\";\r\n                }\r\n                var num = val.length;\r\n                bin.writeUshort(data, offset, tag);\r\n                offset += 2;\r\n                bin.writeUshort(data, offset, type);\r\n                offset += 2;\r\n                bin.writeUint(data, offset, num);\r\n                offset += 4;\r\n\r\n                var dlen = [-1, 1, 1, 2, 4, 8, 0, 1, 0, 4, 8, 0, 8][type] * num;  //if(dlen<1) throw \"e\";\r\n                var toff = offset;\r\n                if (dlen > 4) {\r\n                    bin.writeUint(data, offset, eoff);\r\n                    toff = eoff;\r\n                }\r\n\r\n                if (type == 1 || type == 7) {\r\n                    for (var i = 0; i < num; i++) {\r\n                        data[toff + i] = val[i];\r\n                    }\r\n                } else if (type == 2) {\r\n                    bin.writeASCII(data, toff, val);\r\n                } else if (type == 3) {\r\n                    for (var i = 0; i < num; i++) {\r\n                        bin.writeUshort(data, toff + 2 * i, val[i]);\r\n                    }\r\n                } else if (type == 4) {\r\n                    for (var i = 0; i < num; i++) {\r\n                        bin.writeUint(data, toff + 4 * i, val[i]);\r\n                    }\r\n                } else if (type == 5 || type == 10) {\r\n                    var wr = type == 5 ? bin.writeUint : bin.writeInt;\r\n                    for (var i = 0; i < num; i++) {\r\n                        var v = val[i], nu = v[0], de = v[1];\r\n                        if (nu == null) {\r\n                            throw \"e\";\r\n                        }\r\n                        wr(data, toff + 8 * i, nu);\r\n                        wr(data, toff + 8 * i + 4, de);\r\n                    }\r\n                } else if (type == 9) {\r\n                    for (var i = 0; i < num; i++) {\r\n                        bin.writeInt(data, toff + 4 * i, val[i]);\r\n                    }\r\n                } else if (type == 12) {\r\n                    for (var i = 0; i < num; i++) {\r\n                        bin.writeDouble(data, toff + 8 * i, val[i]);\r\n                    }\r\n                } else {\r\n                    throw type;\r\n                }\r\n\r\n                if (dlen > 4) {\r\n                    dlen += (dlen & 1);\r\n                    eoff += dlen;\r\n                }\r\n                offset += 4;\r\n            }\r\n            return [offset, eoff];\r\n        }\r\n\r\n        UTIF.toRGBA8 = function(out, scl) {\r\n            function gamma(x) {\r\n                return x < 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1.0 / 2.4) - 0.055;\r\n            }\r\n\r\n\r\n            var w = out.width, h = out.height, area = w * h, qarea = area * 4, data = out.data;\r\n            var img = new Uint8Array(area * 4);\r\n            //console.log(out);\r\n            // 0: WhiteIsZero, 1: BlackIsZero, 2: RGB, 3: Palette color, 4: Transparency mask, 5: CMYK\r\n            var intp = (out[\"t262\"] ? out[\"t262\"][0] : 2), bps = (out[\"t258\"] ? Math.min(32, out[\"t258\"][0]) : 1);\r\n            if (out[\"t262\"] == null && bps == 1) {\r\n                intp = 0;\r\n            }\r\n\r\n            var smpls = out[\"t277\"] ? out[\"t277\"][0] : (out[\"t258\"] ? out[\"t258\"].length : [1, 1, 3, 1, 1, 4, 3][intp]);\r\n            var sfmt = out[\"t339\"] ? out[\"t339\"][0] : null;\r\n            if (intp == 1 && bps == 32 && sfmt != 3) {\r\n                throw \"e\";\r\n            }  // sample format\r\n            var bpl = Math.ceil(smpls * bps * w / 8);\r\n\r\n            //log(\"interpretation: \", intp, \"smpls\", smpls, \"bps\", bps, \"sample format\",sfmt, out);\r\n\r\n            if (false) {\r\n            } else if (intp == 0) {\r\n                scl = 1 / 256; // \"Photopeatest.tif\"\r\n                for (var y = 0; y < h; y++) {\r\n                    var off = y * bpl, io = y * w;\r\n                    if (bps == 1) {\r\n                        for (var i = 0; i < w; i++) {\r\n                            var qi = (io + i) << 2, px = ((data[off + (i >> 3)]) >> (7 - (i & 7))) & 1;\r\n                            img[qi] = img[qi + 1] = img[qi + 2] = (1 - px) * 255;\r\n                            img[qi + 3] = 255;\r\n                        }\r\n                    }\r\n                    if (bps == 4) {\r\n                        for (var i = 0; i < w; i++) {\r\n                            var qi = (io + i) << 2, px = ((data[off + (i >> 1)]) >> (4 - 4 * (i & 1))) & 15;\r\n                            img[qi] = img[qi + 1] = img[qi + 2] = (15 - px) * 17;\r\n                            img[qi + 3] = 255;\r\n                        }\r\n                    }\r\n                    if (bps == 8) {\r\n                        for (var i = 0; i < w; i++) {\r\n                            var qi = (io + i) << 2, px = data[off + i];\r\n                            img[qi] = img[qi + 1] = img[qi + 2] = 255 - px;\r\n                            img[qi + 3] = 255;\r\n                        }\r\n                    }\r\n                    if (bps == 16) {\r\n                        for (var i = 0; i < w; i++) {\r\n                            var qi = (io + i) << 2, o = off + (2 * i), px = (data[o + 1] << 8) | data[o];\r\n                            img[qi] = img[qi + 1] = img[qi + 2] = Math.min(255, 255 - (~~(px * scl)));\r\n                            img[qi + 3] = 255;\r\n                        }\r\n                    } // ladoga.tif\r\n                }\r\n            } else if (intp == 1) {\r\n                if (scl == null) {\r\n                    scl = 1 / 256;\r\n                }\r\n                var f32 = ((data.length & 3) == 0) ? new Float32Array(data.buffer) : null;\r\n\r\n                for (var y = 0; y < h; y++) {\r\n                    var off = y * bpl, io = y * w;\r\n                    if (bps == 1) {\r\n                        for (var i = 0; i < w; i++) {\r\n                            var qi = (io + i) << 2, px = ((data[off + (i >> 3)]) >> (7 - (i & 7))) & 1;\r\n                            img[qi] = img[qi + 1] = img[qi + 2] = (px) * 255;\r\n                            img[qi + 3] = 255;\r\n                        }\r\n                    }\r\n                    if (bps == 2) {\r\n                        for (var i = 0; i < w; i++) {\r\n                            var qi = (io + i) << 2, px = ((data[off + (i >> 2)]) >> (6 - 2 * (i & 3))) & 3;\r\n                            img[qi] = img[qi + 1] = img[qi + 2] = (px) * 85;\r\n                            img[qi + 3] = 255;\r\n                        }\r\n                    }\r\n                    if (bps == 8) {\r\n                        for (var i = 0; i < w; i++) {\r\n                            var qi = (io + i) << 2, px = data[off + i * smpls];\r\n                            img[qi] = img[qi + 1] = img[qi + 2] = px;\r\n                            img[qi + 3] = 255;\r\n                        }\r\n                    }\r\n                    if (bps == 16) {\r\n                        for (var i = 0; i < w; i++) {\r\n                            var qi = (io + i) << 2, o = off + (2 * i), px = (data[o + 1] << 8) | data[o];\r\n                            img[qi] = img[qi + 1] = img[qi + 2] = Math.min(255, ~~(px * scl));\r\n                            img[qi + 3] = 255;\r\n                        }\r\n                    } // ladoga.tif\r\n                    if (bps == 32) {\r\n                        for (var i = 0; i < w; i++) {\r\n                            var qi = (io + i) << 2, o = (off >>> 2) + i, px = f32[o];\r\n                            img[qi] = img[qi + 1] = img[qi + 2] = ~~(0.5 + 255 * px);\r\n                            img[qi + 3] = 255;\r\n                        }\r\n                    }\r\n                }\r\n            } else if (intp == 2) {\r\n                if (bps == 8) {\r\n                    if (smpls == 1) {\r\n                        for (var i = 0; i < area; i++) {\r\n                            img[4 * i] = img[4 * i + 1] = img[4 * i + 2] = data[i];\r\n                            img[4 * i + 3] = 255;\r\n                        }\r\n                    }\r\n                    if (smpls == 3) {\r\n                        for (var i = 0; i < area; i++) {\r\n                            var qi = i << 2, ti = i * 3;\r\n                            img[qi] = data[ti];\r\n                            img[qi + 1] = data[ti + 1];\r\n                            img[qi + 2] = data[ti + 2];\r\n                            img[qi + 3] = 255;\r\n                        }\r\n                    }\r\n                    if (smpls >= 4) {\r\n                        for (var i = 0; i < area; i++) {\r\n                            var qi = i << 2, ti = i * smpls;\r\n                            img[qi] = data[ti];\r\n                            img[qi + 1] = data[ti + 1];\r\n                            img[qi + 2] = data[ti + 2];\r\n                            img[qi + 3] = data[ti + 3];\r\n                        }\r\n                    }\r\n                } else if (bps == 16) {  // 3x 16-bit channel\r\n                    if (smpls == 4) {\r\n                        for (var i = 0; i < area; i++) {\r\n                            var qi = i << 2, ti = i * 8 + 1;\r\n                            img[qi] = data[ti];\r\n                            img[qi + 1] = data[ti + 2];\r\n                            img[qi + 2] = data[ti + 4];\r\n                            img[qi + 3] = data[ti + 6];\r\n                        }\r\n                    }\r\n                    if (smpls == 3) {\r\n                        for (var i = 0; i < area; i++) {\r\n                            var qi = i << 2, ti = i * 6 + 1;\r\n                            img[qi] = data[ti];\r\n                            img[qi + 1] = data[ti + 2];\r\n                            img[qi + 2] = data[ti + 4];\r\n                            img[qi + 3] = 255;\r\n                        }\r\n                    }\r\n                } else if (bps == 32) {\r\n                    var ndt = new Float32Array(data.buffer);  // t339 is [3,3,3]\r\n                    // check the endianity\r\n                    var min = 0;\r\n                    for (var i = 0; i < ndt.length; i++) {\r\n                        min = Math.min(min, ndt[i]);\r\n                    }\r\n                    if (min < 0) {\r\n                        for (var i = 0; i < data.length; i += 4) {\r\n                            var t = data[i];\r\n                            data[i] = data[i + 3];\r\n                            data[i + 3] = t;\r\n                            t = data[i + 1];\r\n                            data[i + 1] = data[i + 2];\r\n                            data[i + 2] = t;\r\n                        }\r\n                    }\r\n                    // gamma correction\r\n                    var pmap = [];\r\n                    for (var i = 0; i < 65536; i++) {\r\n                        pmap.push(gamma(i / 65535));\r\n                    }\r\n                    for (var i = 0; i < ndt.length; i++) {\r\n                        var cv = Math.max(0, Math.min(1, ndt[i]));\r\n                        ndt[i] = pmap[~~(0.5 + cv * 65535)];\r\n                    }\r\n\r\n                    if (smpls == 3) {\r\n                        for (var i = 0; i < area; i++) {\r\n                            var qi = i << 2, ti = i * 3;\r\n                            img[qi] = ~~(0.5 + ndt[ti] * 255);\r\n                            img[qi + 1] = ~~(0.5 + ndt[ti + 1] * 255);\r\n                            img[qi + 2] = ~~(0.5 + ndt[ti + 2] * 255);\r\n                            img[qi + 3] = 255;\r\n                        }\r\n                    } else if (smpls == 4) {\r\n                        for (var i = 0; i < area; i++) {\r\n                            var qi = i << 2, ti = i * 4;\r\n                            img[qi] = ~~(0.5 + ndt[ti] * 255);\r\n                            img[qi + 1] = ~~(0.5 + ndt[ti + 1] * 255);\r\n                            img[qi + 2] = ~~(0.5 + ndt[ti + 2] * 255);\r\n                            img[qi + 3] = ~~(0.5 + ndt[ti + 3] * 255);\r\n                        }\r\n                    } else {\r\n                        throw smpls;\r\n                    }\r\n                } else {\r\n                    throw bps;\r\n                }\r\n            } else if (intp == 3) {\r\n                var map = out[\"t320\"];\r\n                var cn = 1 << bps;\r\n\r\n                var nexta = bps == 8 && smpls > 1 && out[\"t338\"] && out[\"t338\"][0] != 0;\r\n\r\n                for (var y = 0; y < h; y++) {\r\n                    for (var x = 0; x < w; x++) {\r\n                        var i = y * w + x;\r\n                        var qi = i << 2, mi = 0;\r\n                        var dof = y * bpl;\r\n                        if (false) {\r\n                        } else if (bps == 1) {\r\n                            mi = (data[dof + (x >>> 3)] >>> (7 - (x & 7))) & 1;\r\n                        } else if (bps == 2) {\r\n                            mi = (data[dof + (x >>> 2)] >>> (6 - 2 * (x & 3))) & 3;\r\n                        } else if (bps == 4) {\r\n                            mi = (data[dof + (x >>> 1)] >>> (4 - 4 * (x & 1))) & 15;\r\n                        } else if (bps == 8) {\r\n                            mi = data[dof + x * smpls];\r\n                        } else {\r\n                            throw bps;\r\n                        }\r\n                        img[qi] = (map[mi] >> 8);\r\n                        img[qi + 1] = (map[cn + mi] >> 8);\r\n                        img[qi + 2] = (map[cn + cn + mi] >> 8);\r\n                        img[qi + 3] = nexta ? data[dof + x * smpls + 1] : 255;\r\n                    }\r\n                }\r\n            } else if (intp == 5) {\r\n                var gotAlpha = smpls > 4 ? 1 : 0;\r\n                for (var i = 0; i < area; i++) {\r\n                    var qi = i << 2, si = i * smpls;\r\n\r\n                    if (window.UDOC) {\r\n                        var C = data[si], M = data[si + 1], Y = data[si + 2], K = data[si + 3];\r\n                        var c = UDOC.C.cmykToRgb([C * (1 / 255), M * (1 / 255), Y * (1 / 255), K * (1 / 255)]);\r\n                        img[qi] = ~~(0.5 + 255 * c[0]);\r\n                        img[qi + 1] = ~~(0.5 + 255 * c[1]);\r\n                        img[qi + 2] = ~~(0.5 + 255 * c[2]);\r\n                    } else {\r\n                        var C = 255 - data[si], M = 255 - data[si + 1], Y = 255 - data[si + 2],\r\n                                K = (255 - data[si + 3]) * (1 / 255);\r\n                        img[qi] = ~~(C * K + 0.5);\r\n                        img[qi + 1] = ~~(M * K + 0.5);\r\n                        img[qi + 2] = ~~(Y * K + 0.5);\r\n                    }\r\n\r\n                    img[qi + 3] = 255 * (1 - gotAlpha) + data[si + 4] * gotAlpha;\r\n                }\r\n            } else if (intp == 6 && out[\"t278\"]) {  // only for DSC_1538.TIF\r\n                var rps = out[\"t278\"][0];\r\n                for (var y = 0; y < h; y += rps) {\r\n                    var i = (y * w), len = rps * w;\r\n\r\n                    for (var j = 0; j < len; j++) {\r\n                        var qi = 4 * (i + j), si = 3 * i + 4 * (j >>> 1);\r\n                        var Y = data[si + (j & 1)], Cb = data[si + 2] - 128, Cr = data[si + 3] - 128;\r\n\r\n                        var r = Y + ((Cr >> 2) + (Cr >> 3) + (Cr >> 5));\r\n                        var g = Y - ((Cb >> 2) + (Cb >> 4) + (Cb >> 5)) - ((Cr >> 1) + (Cr >> 3) + (Cr >> 4) + (Cr >> 5));\r\n                        var b = Y + (Cb + (Cb >> 1) + (Cb >> 2) + (Cb >> 6));\r\n\r\n                        img[qi] = Math.max(0, Math.min(255, r));\r\n                        img[qi + 1] = Math.max(0, Math.min(255, g));\r\n                        img[qi + 2] = Math.max(0, Math.min(255, b));\r\n                        img[qi + 3] = 255;\r\n                    }\r\n                }\r\n            } else if (intp == 32845) {\r\n\r\n                for (var y = 0; y < h; y++) {\r\n                    for (var x = 0; x < w; x++) {\r\n                        var si = (y * w + x) * 6, qi = (y * w + x) * 4;\r\n                        var L = (data[si + 1] << 8) | data[si];\r\n\r\n                        var L = Math.pow(2, (L + 0.5) / 256 - 64);\r\n                        var u = (data[si + 3] + 0.5) / 410;\r\n                        var v = (data[si + 5] + 0.5) / 410;\r\n\r\n                        // Luv to xyY\r\n                        var sX = (9 * u) / (6 * u - 16 * v + 12);\r\n                        var sY = (4 * v) / (6 * u - 16 * v + 12);\r\n                        var bY = L;\r\n\r\n                        // xyY to XYZ\r\n                        var X = (sX * bY) / sY, Y = bY, Z = (1 - sX - sY) * bY / sY;\r\n\r\n\r\n                        var r = 2.690 * X - 1.276 * Y - 0.414 * Z\r\n                        var g = -1.022 * X + 1.978 * Y + 0.044 * Z\r\n                        var b = 0.061 * X - 0.224 * Y + 1.163 * Z\r\n\r\n                        img[qi] = gamma(Math.min(r, 1)) * 255;\r\n                        img[qi + 1] = gamma(Math.min(g, 1)) * 255;\r\n                        img[qi + 2] = gamma(Math.min(b, 1)) * 255;\r\n                        img[qi + 3] = 255;\r\n                    }\r\n                }\r\n            } else {\r\n                log(\"Unknown Photometric interpretation: \" + intp);\r\n            }\r\n            return img;\r\n        }\r\n\r\n        UTIF.replaceIMG = function(imgs) {\r\n            if (imgs == null) {\r\n                imgs = document.getElementsByTagName(\"img\");\r\n            }\r\n            var sufs = [\"tif\", \"tiff\", \"dng\", \"cr2\", \"nef\"]\r\n            for (var i = 0; i < imgs.length; i++) {\r\n                var img = imgs[i], src = img.getAttribute(\"src\");\r\n                if (src == null) {\r\n                    continue;\r\n                }\r\n                var suff = src.split(\".\").pop().toLowerCase();\r\n                if (sufs.indexOf(suff) == -1) {\r\n                    continue;\r\n                }\r\n                var xhr = new XMLHttpRequest();\r\n                UTIF._xhrs.push(xhr);\r\n                UTIF._imgs.push(img);\r\n                xhr.open(\"GET\", src);\r\n                xhr.responseType = \"arraybuffer\";\r\n                xhr.onload = UTIF._imgLoaded;\r\n                xhr.send();\r\n            }\r\n        }\r\n\r\n        UTIF._xhrs = [];\r\n        UTIF._imgs = [];\r\n        UTIF._imgLoaded = function(e) {\r\n            var ind = UTIF._xhrs.indexOf(e.target), img = UTIF._imgs[ind];\r\n            UTIF._xhrs.splice(ind, 1);\r\n            UTIF._imgs.splice(ind, 1);\r\n\r\n            img.setAttribute(\"src\", UTIF.bufferToURI(e.target.response));\r\n        }\r\n\r\n        UTIF.bufferToURI = function(buff) {\r\n            var ifds = UTIF.decode(buff);  //console.log(ifds);\r\n            var vsns = ifds, ma = 0, page = vsns[0];\r\n            if (ifds[0].subIFD) {\r\n                vsns = vsns.concat(ifds[0].subIFD);\r\n            }\r\n            for (var i = 0; i < vsns.length; i++) {\r\n                var img = vsns[i];\r\n                if (img[\"t258\"] == null || img[\"t258\"].length < 3) {\r\n                    continue;\r\n                }\r\n                var ar = img[\"t256\"] * img[\"t257\"];\r\n                if (ar > ma) {\r\n                    ma = ar;\r\n                    page = img;\r\n                }\r\n            }\r\n            UTIF.decodeImage(buff, page, ifds);\r\n            var rgba = UTIF.toRGBA8(page), w = page.width, h = page.height;\r\n\r\n            var cnv = document.createElement(\"canvas\");\r\n            cnv.width = w;\r\n            cnv.height = h;\r\n            var ctx = cnv.getContext(\"2d\");\r\n            var imgd = new ImageData(new Uint8ClampedArray(rgba.buffer), w, h);\r\n            ctx.putImageData(imgd, 0, 0);\r\n            return cnv.toDataURL();\r\n        }\r\n\r\n\r\n        UTIF._binBE =\r\n                {\r\n                    nextZero: function(data, o) {\r\n                        while (data[o] != 0) {\r\n                            o++;\r\n                        }\r\n                        return o;\r\n                    },\r\n                    readUshort: function(buff, p) {\r\n                        return (buff[p] << 8) | buff[p + 1];\r\n                    },\r\n                    readShort: function(buff, p) {\r\n                        var a = UTIF._binBE.ui8;\r\n                        a[0] = buff[p + 1];\r\n                        a[1] = buff[p + 0];\r\n                        return UTIF._binBE.i16[0];\r\n                    },\r\n                    readInt: function(buff, p) {\r\n                        var a = UTIF._binBE.ui8;\r\n                        a[0] = buff[p + 3];\r\n                        a[1] = buff[p + 2];\r\n                        a[2] = buff[p + 1];\r\n                        a[3] = buff[p + 0];\r\n                        return UTIF._binBE.i32[0];\r\n                    },\r\n                    readUint: function(buff, p) {\r\n                        var a = UTIF._binBE.ui8;\r\n                        a[0] = buff[p + 3];\r\n                        a[1] = buff[p + 2];\r\n                        a[2] = buff[p + 1];\r\n                        a[3] = buff[p + 0];\r\n                        return UTIF._binBE.ui32[0];\r\n                    },\r\n                    readASCII: function(buff, p, l) {\r\n                        var s = \"\";\r\n                        for (var i = 0; i < l; i++) {\r\n                            s += String.fromCharCode(buff[p + i]);\r\n                        }\r\n                        return s;\r\n                    },\r\n                    readFloat: function(buff, p) {\r\n                        var a = UTIF._binBE.ui8;\r\n                        for (var i = 0; i < 4; i++) {\r\n                            a[i] = buff[p + 3 - i];\r\n                        }\r\n                        return UTIF._binBE.fl32[0];\r\n                    },\r\n                    readDouble: function(buff, p) {\r\n                        var a = UTIF._binBE.ui8;\r\n                        for (var i = 0; i < 8; i++) {\r\n                            a[i] = buff[p + 7 - i];\r\n                        }\r\n                        return UTIF._binBE.fl64[0];\r\n                    },\r\n\r\n                    writeUshort: function(buff, p, n) {\r\n                        buff[p] = (n >> 8) & 255;\r\n                        buff[p + 1] = n & 255;\r\n                    },\r\n                    writeInt: function(buff, p, n) {\r\n                        var a = UTIF._binBE.ui8;\r\n                        UTIF._binBE.i32[0] = n;\r\n                        buff[p + 3] = a[0];\r\n                        buff[p + 2] = a[1];\r\n                        buff[p + 1] = a[2];\r\n                        buff[p + 0] = a[3];\r\n                    },\r\n                    writeUint: function(buff, p, n) {\r\n                        buff[p] = (n >> 24) & 255;\r\n                        buff[p + 1] = (n >> 16) & 255;\r\n                        buff[p + 2] = (n >> 8) & 255;\r\n                        buff[p + 3] = (n >> 0) & 255;\r\n                    },\r\n                    writeASCII: function(buff, p, s) {\r\n                        for (var i = 0; i < s.length; i++) {\r\n                            buff[p + i] = s.charCodeAt(i);\r\n                        }\r\n                    },\r\n                    writeDouble: function(buff, p, n) {\r\n                        UTIF._binBE.fl64[0] = n;\r\n                        for (var i = 0; i < 8; i++) {\r\n                            buff[p + i] = UTIF._binBE.ui8[7 - i];\r\n                        }\r\n                    }\r\n                }\r\n        UTIF._binBE.ui8 = new Uint8Array(8);\r\n        UTIF._binBE.i16 = new Int16Array(UTIF._binBE.ui8.buffer);\r\n        UTIF._binBE.i32 = new Int32Array(UTIF._binBE.ui8.buffer);\r\n        UTIF._binBE.ui32 = new Uint32Array(UTIF._binBE.ui8.buffer);\r\n        UTIF._binBE.fl32 = new Float32Array(UTIF._binBE.ui8.buffer);\r\n        UTIF._binBE.fl64 = new Float64Array(UTIF._binBE.ui8.buffer);\r\n\r\n        UTIF._binLE =\r\n                {\r\n                    nextZero: UTIF._binBE.nextZero,\r\n                    readUshort: function(buff, p) {\r\n                        return (buff[p + 1] << 8) | buff[p];\r\n                    },\r\n                    readShort: function(buff, p) {\r\n                        var a = UTIF._binBE.ui8;\r\n                        a[0] = buff[p + 0];\r\n                        a[1] = buff[p + 1];\r\n                        return UTIF._binBE.i16[0];\r\n                    },\r\n                    readInt: function(buff, p) {\r\n                        var a = UTIF._binBE.ui8;\r\n                        a[0] = buff[p + 0];\r\n                        a[1] = buff[p + 1];\r\n                        a[2] = buff[p + 2];\r\n                        a[3] = buff[p + 3];\r\n                        return UTIF._binBE.i32[0];\r\n                    },\r\n                    readUint: function(buff, p) {\r\n                        var a = UTIF._binBE.ui8;\r\n                        a[0] = buff[p + 0];\r\n                        a[1] = buff[p + 1];\r\n                        a[2] = buff[p + 2];\r\n                        a[3] = buff[p + 3];\r\n                        return UTIF._binBE.ui32[0];\r\n                    },\r\n                    readASCII: UTIF._binBE.readASCII,\r\n                    readFloat: function(buff, p) {\r\n                        var a = UTIF._binBE.ui8;\r\n                        for (var i = 0; i < 4; i++) {\r\n                            a[i] = buff[p + i];\r\n                        }\r\n                        return UTIF._binBE.fl32[0];\r\n                    },\r\n                    readDouble: function(buff, p) {\r\n                        var a = UTIF._binBE.ui8;\r\n                        for (var i = 0; i < 8; i++) {\r\n                            a[i] = buff[p + i];\r\n                        }\r\n                        return UTIF._binBE.fl64[0];\r\n                    },\r\n\r\n                    writeUshort: function(buff, p, n) {\r\n                        buff[p] = (n) & 255;\r\n                        buff[p + 1] = (n >> 8) & 255;\r\n                    },\r\n                    writeInt: function(buff, p, n) {\r\n                        var a = UTIF._binBE.ui8;\r\n                        UTIF._binBE.i32[0] = n;\r\n                        buff[p + 0] = a[0];\r\n                        buff[p + 1] = a[1];\r\n                        buff[p + 2] = a[2];\r\n                        buff[p + 3] = a[3];\r\n                    },\r\n                    writeUint: function(buff, p, n) {\r\n                        buff[p] = (n >>> 0) & 255;\r\n                        buff[p + 1] = (n >>> 8) & 255;\r\n                        buff[p + 2] = (n >>> 16) & 255;\r\n                        buff[p + 3] = (n >>> 24) & 255;\r\n                    },\r\n                    writeASCII: UTIF._binBE.writeASCII\r\n                }\r\n        UTIF._copyTile = function(tb, tw, th, b, w, h, xoff, yoff) {\r\n            //log(\"copyTile\", tw, th,  w, h, xoff, yoff);\r\n            var xlim = Math.min(tw, w - xoff);\r\n            var ylim = Math.min(th, h - yoff);\r\n            for (var y = 0; y < ylim; y++) {\r\n                var tof = (yoff + y) * w + xoff;\r\n                var sof = y * tw;\r\n                for (var x = 0; x < xlim; x++) {\r\n                    b[tof + x] = tb[sof + x];\r\n                }\r\n            }\r\n        }\r\n\r\n        UTIF._inflateRaw = function() {\r\n            var H = {};\r\n            H.H = {};\r\n            H.H.N = function(N, W) {\r\n                var R = Uint8Array, i = 0, m = 0, J = 0, h = 0, Q = 0, X = 0, u = 0, w = 0, d = 0, v, C;\r\n                if (N[0] == 3 && N[1] == 0) {\r\n                    return W ? W : new R(0);\r\n                }\r\n                var V = H.H, n = V.b, A = V.e, l = V.R, M = V.n, I = V.A, e = V.Z, b = V.m, Z = W == null;\r\n                if (Z) {\r\n                    W = new R(N.length >>> 2 << 5);\r\n                }\r\n                while (i == 0) {\r\n                    i = n(N, d, 1);\r\n                    m = n(N, d + 1, 2);\r\n                    d += 3;\r\n                    if (m == 0) {\r\n                        if ((d & 7) != 0) {\r\n                            d += 8 - (d & 7);\r\n                        }\r\n                        var D = (d >>> 3) + 4, q = N[D - 4] | N[D - 3] << 8;\r\n                        if (Z) {\r\n                            W = H.H.W(W, w + q);\r\n                        }\r\n                        W.set(new R(N.buffer, N.byteOffset + D, q), w);\r\n                        d = D + q << 3;\r\n                        w += q;\r\n                        continue\r\n                    }\r\n                    if (Z) {\r\n                        W = H.H.W(W, w + (1 << 17));\r\n                    }\r\n                    if (m == 1) {\r\n                        v = b.J;\r\n                        C = b.h;\r\n                        X = (1 << 9) - 1;\r\n                        u = (1 << 5) - 1\r\n                    }\r\n                    if (m == 2) {\r\n                        J = A(N, d, 5) + 257;\r\n                        h = A(N, d + 5, 5) + 1;\r\n                        Q = A(N, d + 10, 4) + 4;\r\n                        d += 14;\r\n                        var E = d, j = 1;\r\n                        for (var c = 0; c < 38; c += 2) {\r\n                            b.Q[c] = 0;\r\n                            b.Q[c + 1] = 0\r\n                        }\r\n                        for (var c = 0;\r\n                             c < Q; c++) {\r\n                            var K = A(N, d + c * 3, 3);\r\n                            b.Q[(b.X[c] << 1) + 1] = K;\r\n                            if (K > j) {\r\n                                j = K\r\n                            }\r\n                        }\r\n                        d += 3 * Q;\r\n                        M(b.Q, j);\r\n                        I(b.Q, j, b.u);\r\n                        v = b.w;\r\n                        C = b.d;\r\n                        d = l(b.u, (1 << j) - 1, J + h, N, d, b.v);\r\n                        var r = V.V(b.v, 0, J, b.C);\r\n                        X = (1 << r) - 1;\r\n                        var S = V.V(b.v, J, h, b.D);\r\n                        u = (1 << S) - 1;\r\n                        M(b.C, r);\r\n                        I(b.C, r, v);\r\n                        M(b.D, S);\r\n                        I(b.D, S, C)\r\n                    }\r\n                    while (!0) {\r\n                        var T = v[e(N, d) & X];\r\n                        d += T & 15;\r\n                        var p = T >>> 4;\r\n                        if (p >>> 8 == 0) {\r\n                            W[w++] = p\r\n                        } else if (p == 256) {\r\n                            break\r\n                        } else {\r\n                            var z = w + p - 254;\r\n                            if (p > 264) {\r\n                                var _ = b.q[p - 257];\r\n                                z = w + (_ >>> 3) + A(N, d, _ & 7);\r\n                                d += _ & 7\r\n                            }\r\n                            var $ = C[e(N, d) & u];\r\n                            d += $ & 15;\r\n                            var s = $ >>> 4, Y = b.c[s], a = (Y >>> 4) + n(N, d, Y & 15);\r\n                            d += Y & 15;\r\n                            while (w < z) {\r\n                                W[w] = W[w++ - a];\r\n                                W[w] = W[w++ - a];\r\n                                W[w] = W[w++ - a];\r\n                                W[w] = W[w++ - a]\r\n                            }\r\n                            w = z\r\n                        }\r\n                    }\r\n                }\r\n                return W.length == w ? W : W.slice(0, w)\r\n            };\r\n            H.H.W = function(N, W) {\r\n                var R = N.length;\r\n                if (W <= R) {\r\n                    return N;\r\n                }\r\n                var V = new Uint8Array(R << 1);\r\n                V.set(N, 0);\r\n                return V\r\n            };\r\n            H.H.R = function(N, W, R, V, n, A) {\r\n                var l = H.H.e, M = H.H.Z, I = 0;\r\n                while (I < R) {\r\n                    var e = N[M(V, n) & W];\r\n                    n += e & 15;\r\n                    var b = e >>> 4;\r\n                    if (b <= 15) {\r\n                        A[I] = b;\r\n                        I++\r\n                    } else {\r\n                        var Z = 0, m = 0;\r\n                        if (b == 16) {\r\n                            m = 3 + l(V, n, 2);\r\n                            n += 2;\r\n                            Z = A[I - 1]\r\n                        } else if (b == 17) {\r\n                            m = 3 + l(V, n, 3);\r\n                            n += 3\r\n                        } else if (b == 18) {\r\n                            m = 11 + l(V, n, 7);\r\n                            n += 7\r\n                        }\r\n                        var J = I + m;\r\n                        while (I < J) {\r\n                            A[I] = Z;\r\n                            I++\r\n                        }\r\n                    }\r\n                }\r\n                return n\r\n            };\r\n            H.H.V = function(N, W, R, V) {\r\n                var n = 0, A = 0, l = V.length >>> 1;\r\n                while (A < R) {\r\n                    var M = N[A + W];\r\n                    V[A << 1] = 0;\r\n                    V[(A << 1) + 1] = M;\r\n                    if (M > n) {\r\n                        n = M;\r\n                    }\r\n                    A++\r\n                }\r\n                while (A < l) {\r\n                    V[A << 1] = 0;\r\n                    V[(A << 1) + 1] = 0;\r\n                    A++\r\n                }\r\n                return n\r\n            };\r\n            H.H.n = function(N, W) {\r\n                var R = H.H.m, V = N.length, n, A, l, M, I, e = R.j;\r\n                for (var M = 0; M <= W; M++) {\r\n                    e[M] = 0;\r\n                }\r\n                for (M = 1; M < V; M += 2) {\r\n                    e[N[M]]++;\r\n                }\r\n                var b = R.K;\r\n                n = 0;\r\n                e[0] = 0;\r\n                for (A = 1; A <= W; A++) {\r\n                    n = n + e[A - 1] << 1;\r\n                    b[A] = n\r\n                }\r\n                for (l = 0; l < V; l += 2) {\r\n                    I = N[l + 1];\r\n                    if (I != 0) {\r\n                        N[l] = b[I];\r\n                        b[I]++\r\n                    }\r\n                }\r\n            };\r\n            H.H.A = function(N, W, R) {\r\n                var V = N.length, n = H.H.m, A = n.r;\r\n                for (var l = 0; l < V; l += 2) {\r\n                    if (N[l + 1] != 0) {\r\n                        var M = l >> 1, I = N[l + 1], e = M << 4 | I, b = W - I, Z = N[l] << b, m = Z + (1 << b);\r\n                        while (Z != m) {\r\n                            var J = A[Z] >>> 15 - W;\r\n                            R[J] = e;\r\n                            Z++\r\n                        }\r\n                    }\r\n                }\r\n            };\r\n            H.H.l = function(N, W) {\r\n                var R = H.H.m.r, V = 15 - W;\r\n                for (var n = 0; n < N.length;\r\n                     n += 2) {\r\n                    var A = N[n] << W - N[n + 1];\r\n                    N[n] = R[A] >>> V\r\n                }\r\n            };\r\n            H.H.M = function(N, W, R) {\r\n                R = R << (W & 7);\r\n                var V = W >>> 3;\r\n                N[V] |= R;\r\n                N[V + 1] |= R >>> 8\r\n            };\r\n            H.H.I = function(N, W, R) {\r\n                R = R << (W & 7);\r\n                var V = W >>> 3;\r\n                N[V] |= R;\r\n                N[V + 1] |= R >>> 8;\r\n                N[V + 2] |= R >>> 16\r\n            };\r\n            H.H.e = function(N, W, R) {\r\n                return (N[W >>> 3] | N[(W >>> 3) + 1] << 8) >>> (W & 7) & (1 << R) - 1\r\n            };\r\n            H.H.b = function(N, W, R) {\r\n                return (N[W >>> 3] | N[(W >>> 3) + 1] << 8 | N[(W >>> 3) + 2] << 16) >>> (W & 7) & (1 << R) - 1\r\n            };\r\n            H.H.Z = function(N, W) {\r\n                return (N[W >>> 3] | N[(W >>> 3) + 1] << 8 | N[(W >>> 3) + 2] << 16) >>> (W & 7)\r\n            };\r\n            H.H.i = function(N, W) {\r\n                return (N[W >>> 3] | N[(W >>> 3) + 1] << 8 | N[(W >>> 3) + 2] << 16 | N[(W >>> 3) + 3] << 24) >>> (W & 7)\r\n            };\r\n            H.H.m = function() {\r\n                var N = Uint16Array, W = Uint32Array;\r\n                return {\r\n                    K: new N(16),\r\n                    j: new N(16),\r\n                    X: [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15],\r\n                    S: [3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 999, 999, 999],\r\n                    T: [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 0, 0, 0],\r\n                    q: new N(32),\r\n                    p: [1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577, 65535, 65535],\r\n                    z: [0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 0, 0],\r\n                    c: new W(32),\r\n                    J: new N(512),\r\n                    _: [],\r\n                    h: new N(32),\r\n                    $: [],\r\n                    w: new N(32768),\r\n                    C: [],\r\n                    v: [],\r\n                    d: new N(32768),\r\n                    D: [],\r\n                    u: new N(512),\r\n                    Q: [],\r\n                    r: new N(1 << 15),\r\n                    s: new W(286),\r\n                    Y: new W(30),\r\n                    a: new W(19),\r\n                    t: new W(15e3),\r\n                    k: new N(1 << 16),\r\n                    g: new N(1 << 15)\r\n                }\r\n            }();\r\n            (function() {\r\n                var N = H.H.m, W = 1 << 15;\r\n                for (var R = 0; R < W; R++) {\r\n                    var V = R;\r\n                    V = (V & 2863311530) >>> 1 | (V & 1431655765) << 1;\r\n                    V = (V & 3435973836) >>> 2 | (V & 858993459) << 2;\r\n                    V = (V & 4042322160) >>> 4 | (V & 252645135) << 4;\r\n                    V = (V & 4278255360) >>> 8 | (V & 16711935) << 8;\r\n                    N.r[R] = (V >>> 16 | V << 16) >>> 17\r\n                }\r\n\r\n                function n(A, l, M) {\r\n                    while (l-- != 0) {\r\n                        A.push(0, M)\r\n                    }\r\n                }\r\n\r\n                for (var R = 0; R < 32; R++) {\r\n                    N.q[R] = N.S[R] << 3 | N.T[R];\r\n                    N.c[R] = N.p[R] << 4 | N.z[R]\r\n                }\r\n                n(N._, 144, 8);\r\n                n(N._, 255 - 143, 9);\r\n                n(N._, 279 - 255, 7);\r\n                n(N._, 287 - 279, 8);\r\n                H.H.n(N._, 9);\r\n                H.H.A(N._, 9, N.J);\r\n                H.H.l(N._, 9);\r\n                n(N.$, 32, 5);\r\n                H.H.n(N.$, 5);\r\n                H.H.A(N.$, 5, N.h);\r\n                H.H.l(N.$, 5);\r\n                n(N.Q, 19, 0);\r\n                n(N.C, 286, 0);\r\n                n(N.D, 30, 0);\r\n                n(N.v, 320, 0)\r\n            }());\r\n            return H.H.N\r\n        }();\r\n\r\n\r\n        UTIF.LosslessJpegDecode = function() {\r\n            var b, O;\r\n\r\n            function l() {\r\n                return b[O++]\r\n            }\r\n\r\n            function m() {\r\n                return b[O++] << 8 | b[O++]\r\n            }\r\n\r\n            function a0(h) {\r\n                var V = l(), I = [0, 0, 0, 255], f = [], G = 8;\r\n                for (var w = 0; w < 16; w++) {\r\n                    f[w] = l();\r\n                }\r\n                for (var w = 0; w < 16; w++) {\r\n                    for (var x = 0; x < f[w]; x++) {\r\n                        var T = z(I, 0, w + 1, 1);\r\n                        I[T + 3] = l()\r\n                    }\r\n                }\r\n                var E = new Uint8Array(1 << G);\r\n                h[V] = [new Uint8Array(I), E];\r\n                for (var w = 0; w < 1 << G; w++) {\r\n                    var s = G, _ = w, Y = 0, F = 0;\r\n                    while (I[Y + 3] == 255 && s != 0) {\r\n                        F = _ >> --s & 1;\r\n                        Y = I[Y + F]\r\n                    }\r\n                    E[w] = Y\r\n                }\r\n            }\r\n\r\n            function z(h, V, I, f) {\r\n                if (h[V + 3] != 255) {\r\n                    return 0;\r\n                }\r\n                if (I == 0) {\r\n                    return V;\r\n                }\r\n                for (var w = 0; w < 2; w++) {\r\n                    if (h[V + w] == 0) {\r\n                        h[V + w] = h.length;\r\n                        h.push(0, 0, f, 255)\r\n                    }\r\n                    var x = z(h, h[V + w], I - 1, f + 1);\r\n                    if (x != 0) {\r\n                        return x\r\n                    }\r\n                }\r\n                return 0\r\n            }\r\n\r\n            function i(h) {\r\n                var V = h.b, I = h.f;\r\n                while (V < 25 && h.a < h.d) {\r\n                    var f = h.data[h.a++];\r\n                    if (f == 255 && !h.c) {\r\n                        h.a++;\r\n                    }\r\n                    I = I << 8 | f;\r\n                    V += 8\r\n                }\r\n                if (V < 0) {\r\n                    throw \"e\";\r\n                }\r\n                h.b = V;\r\n                h.f = I\r\n            }\r\n\r\n            function H(h, V) {\r\n                if (V.b < h) {\r\n                    i(V);\r\n                }\r\n                return V.f >> (V.b -= h) & 65535 >> 16 - h\r\n            }\r\n\r\n            function g(h, V) {\r\n                var I = h[0], f = 0, w = 255, x = 0;\r\n                if (V.b < 16) {\r\n                    i(V);\r\n                }\r\n                var T = V.f >> V.b - 8 & 255;\r\n                f = h[1][T];\r\n                w = I[f + 3];\r\n                V.b -= I[f + 2];\r\n                while (w == 255) {\r\n                    x = V.f >> --V.b & 1;\r\n                    f = I[f + x];\r\n                    w = I[f + 3]\r\n                }\r\n                return w\r\n            }\r\n\r\n            function P(h, V) {\r\n                if (h < 32768 >> 16 - V) {\r\n                    h += -(1 << V) + 1;\r\n                }\r\n                return h\r\n            }\r\n\r\n            function a2(h, V) {\r\n                var I = g(h, V);\r\n                if (I == 0) {\r\n                    return 0;\r\n                }\r\n                if (I == 16) {\r\n                    return -32768;\r\n                }\r\n                var f = H(I, V);\r\n                return P(f, I)\r\n            }\r\n\r\n            function X(h, V, I, f, w, x) {\r\n                var T = 0;\r\n                for (var G = 0; G < x; G++) {\r\n                    var s = G * V;\r\n                    for (var _ = 0; _ < V; _ += w) {\r\n                        T++;\r\n                        for (var Y = 0; Y < w; Y++) {\r\n                            h[s + _ + Y] = a2(f[Y], I)\r\n                        }\r\n                    }\r\n                    if (I.e != 0 && T % I.e == 0 && G != 0) {\r\n                        var F = I.a, t = I.data;\r\n                        while (t[F] != 255 || !(208 <= t[F + 1] && t[F + 1] <= 215)) {\r\n                            F--;\r\n                        }\r\n                        I.a = F + 2;\r\n                        I.f = 0;\r\n                        I.b = 0\r\n                    }\r\n                }\r\n            }\r\n\r\n            function o(h, V) {\r\n                return P(H(h, V), h)\r\n            }\r\n\r\n            function a1(h, V, I, f, w) {\r\n                var x = b.length - O;\r\n                for (var T = 0; T < x; T += 4) {\r\n                    var G = b[O + T];\r\n                    b[O + T] = b[O + T + 3];\r\n                    b[O + T + 3] = G;\r\n                    var G = b[O + T + 1];\r\n                    b[O + T + 1] = b[O + T + 2];\r\n                    b[O + T + 2] = G\r\n                }\r\n                for (var E = 0;\r\n                     E < w; E++) {\r\n                    var s = 32768, _ = 32768;\r\n                    for (var Y = 0; Y < V; Y += 2) {\r\n                        var F = g(f, I), t = g(f, I);\r\n                        if (F != 0) {\r\n                            s += o(F, I);\r\n                        }\r\n                        if (t != 0) {\r\n                            _ += o(t, I);\r\n                        }\r\n                        h[E * V + Y] = s & 65535;\r\n                        h[E * V + Y + 1] = _ & 65535\r\n                    }\r\n                }\r\n            }\r\n\r\n            function C(h) {\r\n                b = h;\r\n                O = 0;\r\n                if (m() != 65496) {\r\n                    throw \"e\";\r\n                }\r\n                var V = [], I = 0, f = 0, w = 0, x = [], T = [], G = [], E = 0, s = 0, _ = 0;\r\n                while (!0) {\r\n                    var Y = m();\r\n                    if (Y == 65535) {\r\n                        O--;\r\n                        continue\r\n                    }\r\n                    var F = m();\r\n                    if (Y == 65475) {\r\n                        f = l();\r\n                        s = m();\r\n                        _ = m();\r\n                        E = l();\r\n                        for (var t = 0;\r\n                             t < E; t++) {\r\n                            var a = l(), J = l(), r = l();\r\n                            if (r != 0) {\r\n                                throw \"e\";\r\n                            }\r\n                            V[a] = [t, J >> 4, J & 15]\r\n                        }\r\n                    } else if (Y == 65476) {\r\n                        var a3 = O + F - 2;\r\n                        while (O < a3) {\r\n                            a0(T)\r\n                        }\r\n                    } else if (Y == 65498) {\r\n                        O++;\r\n                        for (var t = 0; t < E; t++) {\r\n                            var a5 = l(), v = V[a5];\r\n                            G[v[0]] = T[l() >>> 4];\r\n                            x[v[0]] = v.slice(1)\r\n                        }\r\n                        I = l();\r\n                        O += 2;\r\n                        break\r\n                    } else if (Y == 65501) {\r\n                        w = m()\r\n                    } else {\r\n                        O += F - 2\r\n                    }\r\n                }\r\n                var a4 = f > 8 ? Uint16Array : Uint8Array, $ = new a4(s * _ * E),\r\n                        M = {b: 0, f: 0, c: I == 8, a: O, data: b, d: b.length, e: w};\r\n                if (M.c) {\r\n                    a1($, _ * E, M, G[0], s);\r\n                } else {\r\n                    var c = [], p = 0, D = 0;\r\n                    for (var t = 0; t < E; t++) {\r\n                        var N = x[t], S = N[0], K = N[1];\r\n                        if (S > p) {\r\n                            p = S;\r\n                        }\r\n                        if (K > D) {\r\n                            D = K;\r\n                        }\r\n                        c.push(S * K)\r\n                    }\r\n                    if (p != 1 || D != 1) {\r\n                        if (E != 3 || c[1] != 1 || c[2] != 1) {\r\n                            throw \"e\";\r\n                        }\r\n                        if (p != 2 || D != 1 && D != 2) {\r\n                            throw \"e\";\r\n                        }\r\n                        var u = [], Z = 0;\r\n                        for (var t = 0; t < E; t++) {\r\n                            for (var R = 0; R < c[t]; R++) {\r\n                                u.push(G[t]);\r\n                            }\r\n                            Z += c[t]\r\n                        }\r\n                        var B = _ / p, e = s / D, d = B * e;\r\n                        X($, B * Z, M, u, Z, e);\r\n                        j($, I, B, e, Z - 2, Z, Z, f);\r\n                        var A = new Uint16Array(d * c[0]);\r\n                        if (p == 2 && D == 2) {\r\n                            for (var t = 0; t < d; t++) {\r\n                                A[4 * t] = $[6 * t];\r\n                                A[4 * t + 1] = $[6 * t + 1];\r\n                                A[4 * t + 2] = $[6 * t + 2];\r\n                                A[4 * t + 3] = $[6 * t + 3]\r\n                            }\r\n                            j(A, I, B * 4, e, 0, 1, 1, f);\r\n                            for (var t = 0; t < d; t++) {\r\n                                $[6 * t] = A[4 * t];\r\n                                $[6 * t + 1] = A[4 * t + 1];\r\n                                $[6 * t + 2] = A[4 * t + 2];\r\n                                $[6 * t + 3] = A[4 * t + 3]\r\n                            }\r\n                        }\r\n                        if (p == 2 && D == 1) {\r\n                            for (var t = 0; t < d; t++) {\r\n                                A[2 * t] = $[4 * t];\r\n                                A[2 * t + 1] = $[4 * t + 1]\r\n                            }\r\n                            j(A, I, B * 2, e, 0, 1, 1, f);\r\n                            for (var t = 0; t < d; t++) {\r\n                                $[4 * t] = A[2 * t];\r\n                                $[4 * t + 1] = A[2 * t + 1]\r\n                            }\r\n                        }\r\n                        var n = $.slice(0);\r\n                        for (var K = 0; K < s; K++) {\r\n                            if (D == 2) {\r\n                                for (var S = 0; S < _; S++) {\r\n                                    var q = (K * _ + S) * E, k = ((K >>> 1) * B + (S >>> 1)) * Z,\r\n                                            y = (K & 1) * 2 + (S & 1);\r\n                                    $[q] = n[k + y];\r\n                                    $[q + 1] = n[k + 4];\r\n                                    $[q + 2] = n[k + 5]\r\n                                }\r\n                            } else {\r\n                                for (var S = 0; S < _; S++) {\r\n                                    var q = (K * _ + S) * E, k = (K * B + (S >>> 1)) * Z, y = S & 1;\r\n                                    $[q] = n[k + y];\r\n                                    $[q + 1] = n[k + 2];\r\n                                    $[q + 2] = n[k + 3]\r\n                                }\r\n                            }\r\n                        }\r\n                    } else {\r\n                        X($, _ * E, M, G, E, s);\r\n                        if (w == 0) {\r\n                            j($, I, _, s, 0, E, E, f);\r\n                        } else {\r\n                            var U = Math.floor(w / _);\r\n                            for (var K = 0; K < s; K += U) {\r\n                                var L = $.slice(K * _ * E, (K + U) * _ * E);\r\n                                j(L, I, _, U, 0, E, E, f);\r\n                                $.set(L, K * _ * E)\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n                return $\r\n            }\r\n\r\n            function j(h, V, I, f, w, x, G, E) {\r\n                var s = I * G;\r\n                for (var _ = w; _ < x; _++) {\r\n                    h[_] += 1 << E - 1;\r\n                }\r\n                for (var Y = G; Y < s; Y += G) {\r\n                    for (var _ = w; _ < x; _++) {\r\n                        h[Y + _] += h[Y + _ - G];\r\n                    }\r\n                }\r\n                for (var F = 1;\r\n                     F < f; F++) {\r\n                    var t = F * s;\r\n                    for (var _ = w; _ < x; _++) {\r\n                        h[t + _] += h[t + _ - s];\r\n                    }\r\n                    for (var Y = G; Y < s; Y += G) {\r\n                        for (var _ = w; _ < x; _++) {\r\n                            var a = t + Y + _, J = a - s, r = h[a - G], Q = 0;\r\n                            if (V == 0) {\r\n                                Q = 0;\r\n                            } else if (V == 1) {\r\n                                Q = r;\r\n                            } else if (V == 2) {\r\n                                Q = h[J];\r\n                            } else if (V == 3) {\r\n                                Q = h[J - G];\r\n                            } else if (V == 4) {\r\n                                Q = r + (h[J] - h[J - G]);\r\n                            } else if (V == 5) {\r\n                                Q = r + (h[J] - h[J - G] >>> 1);\r\n                            } else if (V == 6) {\r\n                                Q = h[J] + (r - h[J - G] >>> 1);\r\n                            } else if (V == 7) {\r\n                                Q = r + h[J] >>> 1;\r\n                            } else {\r\n                                throw V;\r\n                            }\r\n                            h[a] += Q\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n\r\n            return C\r\n        }();\r\n\r\n\r\n        (function() {\r\n            var G = 0, F = 1, i = 2, b = 3, J = 4, N = 5, E = 6, s = 7, c = 8, T = 9, a3 = 10, f = 11, q = 12, M = 13,\r\n                    m = 14, x = 15, L = 16, $ = 17, p = 18;\r\n\r\n            function a5(t) {\r\n                var Z = UTIF._binBE.readUshort, u = {\r\n                    b: Z(t, 0),\r\n                    i: t[2],\r\n                    C: t[3],\r\n                    u: t[4],\r\n                    q: Z(t, 5),\r\n                    k: Z(t, 7),\r\n                    e: Z(t, 9),\r\n                    l: Z(t, 11),\r\n                    s: t[13],\r\n                    d: Z(t, 14)\r\n                };\r\n                if (u.b != 18771 || u.i > 1 || u.q < 6 || u.q % 6 || u.e < 768 || u.e % 24 || u.l != 768 || u.k < u.l || u.k % u.l || u.k - u.e >= u.l || u.s > 16 || u.s != u.k / u.l || u.s != Math.ceil(u.e / u.l) || u.d != u.q / 6 || u.u != 12 && u.u != 14 && u.u != 16 || u.C != 16 && u.C != 0) {\r\n                    throw \"Invalid data\"\r\n                }\r\n                if (u.i == 0) {\r\n                    throw \"Not implemented. We need this file!\"\r\n                }\r\n                u.h = u.C == 16;\r\n                u.m = (u.h ? u.l * 2 / 3 : u.l >>> 1) | 0;\r\n                u.A = u.m + 2;\r\n                u.f = 64;\r\n                u.g = (1 << u.u) - 1;\r\n                u.n = 4 * u.u;\r\n                return u\r\n            }\r\n\r\n            function a7(t, Z) {\r\n                var u = new Array(Z.s), e = 4 * Z.s, Q = 16 + e;\r\n                if (e & 12) {\r\n                    Q += 16 - (e & 12);\r\n                }\r\n                for (var V = 0, O = 16; V < Z.s; O += 4) {\r\n                    var o = UTIF._binBE.readUint(t, O);\r\n                    u[V] = t.slice(Q, Q + o);\r\n                    u[V].j = 0;\r\n                    u[V].a = 0;\r\n                    Q += o;\r\n                    V++\r\n                }\r\n                if (Q != t.length) {\r\n                    throw \"Invalid data\";\r\n                }\r\n                return u\r\n            }\r\n\r\n            function a6(t, Z) {\r\n                for (var u = -Z[4], e = 0; u <= Z[4]; e++, u++) {\r\n                    t[e] = u <= -Z[3] ? -4 : u <= -Z[2] ? -3 : u <= -Z[1] ? -2 : u < -Z[0] ? -1 : u <= Z[0] ? 0 : u < Z[1] ? 1 : u < Z[2] ? 2 : u < Z[3] ? 3 : 4\r\n                }\r\n            }\r\n\r\n            function a1(t, Z, u) {\r\n                var e = [Z, 3 * Z + 18, 5 * Z + 67, 7 * Z + 276, u];\r\n                t.o = Z;\r\n                t.w = (e[4] + 2 * Z) / (2 * Z + 1) + 1 | 0;\r\n                t.v = Math.ceil(Math.log2(t.w));\r\n                t.t = 9;\r\n                a6(t.c, e)\r\n            }\r\n\r\n            function a2(t) {\r\n                var Z = {c: new Int8Array(2 << t.u)};\r\n                a1(Z, 0, t.g);\r\n                return Z\r\n            }\r\n\r\n            function D(t) {\r\n                var Z = [[], [], []], u = Math.max(2, t.w + 32 >>> 6);\r\n                for (var e = 0; e < 3; e++) {\r\n                    for (var Q = 0;\r\n                         Q < 41; Q++) {\r\n                        Z[e][Q] = [u, 1]\r\n                    }\r\n                }\r\n                return Z\r\n            }\r\n\r\n            function a4(t) {\r\n                for (var Z = -1, u = 0; !u; Z++) {\r\n                    u = t[t.j] >>> 7 - t.a & 1;\r\n                    t.a++;\r\n                    t.a &= 7;\r\n                    if (!t.a) {\r\n                        t.j++\r\n                    }\r\n                }\r\n                return Z\r\n            }\r\n\r\n            function K(t, Z) {\r\n                var u = 0, e = 8 - t.a, Q = t.j, V = t.a;\r\n                if (Z) {\r\n                    if (Z >= e) {\r\n                        do {\r\n                            u <<= e;\r\n                            Z -= e;\r\n                            u |= t[t.j] & (1 << e) - 1;\r\n                            t.j++;\r\n                            e = 8\r\n                        } while (Z >= 8)\r\n                    }\r\n                    if (Z) {\r\n                        u <<= Z;\r\n                        e -= Z;\r\n                        u |= t[t.j] >>> e & (1 << Z) - 1\r\n                    }\r\n                    t.a = 8 - e\r\n                }\r\n                return u\r\n            }\r\n\r\n            function a0(t, Z) {\r\n                var u = 0;\r\n                if (Z < t) {\r\n                    while (u <= 14 && Z << ++u < t) {\r\n                        ;\r\n                    }\r\n                }\r\n                return u\r\n            }\r\n\r\n            function r(t, Z, u, e, Q, V, O, o) {\r\n                if (o == null) {\r\n                    o = 0;\r\n                }\r\n                var X = V + 1, k = X % 2, j = 0, I = 0, a = 0, l, R, w = e[Q], S = e[Q - 1], H = e[Q - 2][X],\r\n                        g = S[X - 1], Y = S[X], P = S[X + 1], A = w[X - 1], v = w[X + 1], y = Math.abs, d, C, n, h;\r\n                if (k) {\r\n                    d = y(P - Y);\r\n                    C = y(H - Y);\r\n                    n = y(g - Y)\r\n                }\r\n                if (k) {\r\n                    h = d > n && C < d ? H + g : d < n && C < n ? H + P : P + g;\r\n                    h = h + 2 * Y >>> 2;\r\n                    if (o) {\r\n                        w[X] = h;\r\n                        return\r\n                    }\r\n                    l = Z.t * Z.c[t.g + Y - H] + Z.c[t.g + g - Y]\r\n                } else {\r\n                    h = Y > g && Y > P || Y < g && Y < P ? v + A + 2 * Y >>> 2 : A + v >>> 1;\r\n                    l = Z.t * Z.c[t.g + Y - g] + Z.c[t.g + g - A]\r\n                }\r\n                R = y(l);\r\n                var W = a4(u);\r\n                if (W < t.n - Z.v - 1) {\r\n                    var z = a0(O[R][0], O[R][1]);\r\n                    a = K(u, z) + (W << z)\r\n                } else {\r\n                    a = K(u, Z.v) + 1\r\n                }\r\n                a = a & 1 ? -1 - (a >>> 1) : a >>> 1;\r\n                O[R][0] += y(a);\r\n                if (O[R][1] == t.f) {\r\n                    O[R][0] >>>= 1;\r\n                    O[R][1] >>>= 1\r\n                }\r\n                O[R][1]++;\r\n                h = l < 0 ? h - a : h + a;\r\n                if (t.i) {\r\n                    if (h < 0) {\r\n                        h += Z.w;\r\n                    } else if (h > t.g) {\r\n                        h -= Z.w\r\n                    }\r\n                }\r\n                w[X] = h >= 0 ? Math.min(h, t.g) : 0\r\n            }\r\n\r\n            function U(t, Z, u) {\r\n                var e = t[0].length;\r\n                for (var Q = Z; Q <= u;\r\n                     Q++) {\r\n                    t[Q][0] = t[Q - 1][1];\r\n                    t[Q][e - 1] = t[Q - 1][e - 2]\r\n                }\r\n            }\r\n\r\n            function B(t) {\r\n                U(t, s, q);\r\n                U(t, i, J);\r\n                U(t, x, $)\r\n            }\r\n\r\n            function _(t, Z, u, e, Q, V, O, o, X, k, j, I, a) {\r\n                var l = 0, R = 1, w = Q < M && Q > J;\r\n                while (R < t.m) {\r\n                    if (l < t.m) {\r\n                        r(t, Z, u, e, Q, l, O[X], t.h && (w && k || !w && (j || (l & I) == a)));\r\n                        r(t, Z, u, e, V, l, O[X], t.h && (!w && k || w && (j || (l & I) == a)));\r\n                        l += 2\r\n                    }\r\n                    if (l > 8) {\r\n                        r(t, Z, u, e, Q, R, o[X]);\r\n                        r(t, Z, u, e, V, R, o[X]);\r\n                        R += 2\r\n                    }\r\n                }\r\n                B(e)\r\n            }\r\n\r\n            function a8(t, Z, u, e, Q, V) {\r\n                _(t, Z, u, e, i, s, Q, V, 0, 0, 1, 0, 8);\r\n                _(t, Z, u, e, c, x, Q, V, 1, 0, 1, 0, 8);\r\n                _(t, Z, u, e, b, T, Q, V, 2, 1, 0, 3, 0);\r\n                _(t, Z, u, e, a3, L, Q, V, 0, 0, 0, 3, 2);\r\n                _(t, Z, u, e, J, f, Q, V, 1, 0, 0, 3, 2);\r\n                _(t, Z, u, e, q, $, Q, V, 2, 1, 0, 3, 0)\r\n            }\r\n\r\n            function a9(t, Z, u, e, Q, V) {\r\n                var O = V.length, o = t.l;\r\n                if (Q + 1 == t.s) {\r\n                    o = t.e - Q * t.l;\r\n                }\r\n                var X = 6 * t.e * e + Q * t.l;\r\n                for (var k = 0; k < 6; k++) {\r\n                    for (var j = 0; j < o; j++) {\r\n                        var I = V[k % O][j % O], a;\r\n                        if (I == 0) {\r\n                            a = i + (k >>> 1)\r\n                        } else if (I == 2) {\r\n                            a = x + (k >>> 1)\r\n                        } else {\r\n                            a = s + k\r\n                        }\r\n                        var l = t.h ? (j * 2 / 3 & 2147483646 | j % 3 & 1) + (j % 3 >>> 1) : j >>> 1;\r\n                        Z[X + j] = u[a][l + 1]\r\n                    }\r\n                    X += t.e\r\n                }\r\n            }\r\n\r\n            UTIF._decompressRAF = function(t, Z) {\r\n                var u = a5(t), e = a7(t, u), Q = a2(u), V = new Int16Array(u.e * u.q);\r\n                if (Z == null) {\r\n                    Z = u.h ? [[1, 1, 0, 1, 1, 2], [1, 1, 2, 1, 1, 0], [2, 0, 1, 0, 2, 1], [1, 1, 2, 1, 1, 0], [1, 1, 0, 1, 1, 2], [0, 2, 1, 2, 0, 1]] : [[0, 1], [3, 2]]\r\n                }\r\n                var O = [[G, b], [F, J], [N, f], [E, q], [M, L], [m, $]], o = [];\r\n                for (var X = 0; X < p; X++) {\r\n                    o[X] = new Uint16Array(u.A)\r\n                }\r\n                for (var k = 0; k < u.s; k++) {\r\n                    var j = D(Q), I = D(Q);\r\n                    for (var X = 0;\r\n                         X < p; X++) {\r\n                        for (var a = 0; a < u.A; a++) {\r\n                            o[X][a] = 0\r\n                        }\r\n                    }\r\n                    for (var l = 0; l < u.d; l++) {\r\n                        a8(u, Q, e[k], o, j, I);\r\n                        for (var X = 0; X < 6;\r\n                             X++) {\r\n                            for (var a = 0; a < u.A; a++) {\r\n                                o[O[X][0]][a] = o[O[X][1]][a]\r\n                            }\r\n                        }\r\n                        a9(u, V, o, l, k, Z);\r\n                        for (var X = i; X < p; X++) {\r\n                            if ([N, E, M, m].indexOf(X) == -1) {\r\n                                for (var a = 0;\r\n                                     a < u.A; a++) {\r\n                                    o[X][a] = 0\r\n                                }\r\n                            }\r\n                        }\r\n                        B(o)\r\n                    }\r\n                }\r\n                return V\r\n            }\r\n        }())\r\n\r\n\r\n    })(UTIF);\r\n})();\nvar QUANOS_TIFF_CONVERTER = {};\r\n\r\nQUANOS_TIFF_CONVERTER.install = function() {\r\n    var imgs = document.getElementsByTagName(\"img\");\r\n    for (var i = 0; i < imgs.length; i++) {\r\n        var img = imgs[i];\r\n        QUANOS_TIFF_CONVERTER.replaceOneIMG(img);\r\n    }\r\n    QUANOS_TIFF_CONVERTER.installObserver();\r\n}\r\n\r\n// Callback function to execute when mutations are observed\r\nQUANOS_TIFF_CONVERTER.callback = function(mutationList, observer) {\r\n    for (var mutation of mutationList) {\r\n        if (mutation.type === \"childList\") {\r\n            for (var mutationNode of mutation.addedNodes) {\r\n                var children = undefined;\r\n                if (mutationNode.getElementsByTagName) {\r\n                    children = mutationNode.getElementsByTagName(\"img\");\r\n                }\r\n                var nodesAndRoot = [];\r\n                nodesAndRoot.push(mutationNode);\r\n                if (children) {\r\n                    for (var node of children) {\r\n                        nodesAndRoot.push(node);\r\n                    }\r\n                }\r\n                for (var node of nodesAndRoot) {\r\n                    if (node.tagName && (node.tagName.toLowerCase() === \"img\")) {\r\n                        var needConversion = node.getAttribute(\"qs_need_tiff_conversion\");\r\n                        if (needConversion) {\r\n                            QUANOS_TIFF_CONVERTER.replaceOneIMG(node);\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n        } else if ((mutation.type === \"attributes\") && (mutation.attributeName === \"src\")) {\r\n            if (mutation.target.tagName && (mutation.target.tagName.toLowerCase() === \"img\")) {\r\n                QUANOS_TIFF_CONVERTER.replaceOneIMG(mutation.target);\r\n            }\r\n        }\r\n    }\r\n};\r\n\r\nQUANOS_TIFF_CONVERTER.installObserver = function() {\r\n    // Create an observer instance linked to the callback function\r\n    // Options for the observer (which mutations to observe)\r\n    var config = {attributes: true, childList: true, subtree: true};\r\n\r\n    var observer = new MutationObserver(QUANOS_TIFF_CONVERTER.callback);\r\n    var body = $(\"body\")\r\n    observer.observe(body, config);\r\n}\r\n\r\nQUANOS_TIFF_CONVERTER.replaceOneIMG = function(img) {\r\n    if (!img.hasAttribute(\"qs_need_tiff_conversion\")) {\r\n        //Normales Bild, welches gar nix mit der tiffkonvertierung zu tun hat\r\n        return;\r\n    }\r\n\r\n    var src = img.getAttribute(\"src\");\r\n    img.setAttribute(\"qs_need_tiff_conversion\", false);\r\n    if (src.startsWith(\"data:image/png\")) {\r\n        // Schon konvertiert\r\n        return;\r\n    }\r\n    if (src == null) {\r\n        return;\r\n    }\r\n    var xhr = new XMLHttpRequest();\r\n    UTIF._xhrs.push(xhr);\r\n    UTIF._imgs.push(img);\r\n    xhr.open(\"GET\", src);\r\n    xhr.responseType = \"arraybuffer\";\r\n    xhr.onload = function(e) {\r\n        QUANOS_TIFF_CONVERTER.imgLoaded(xhr, e);\r\n    }\r\n    xhr.send();\r\n}\r\n\r\nQUANOS_TIFF_CONVERTER.imgLoaded = function(xhr, e) {\r\n    try {\r\n        var mimeType = xhr.getResponseHeader(\"Content-Type\");\r\n        if (mimeType === \"image/tiff\") {\r\n            UTIF._imgLoaded(e);\r\n        }\r\n    } catch (exeption) {\r\n    }\r\n}\r\n\r\n\nDW_SCROLLPANE_FADING_COMPONENT_MAX_SIZE = 25;\r\n\r\n/**\r\n * Fading Seite (Top, Right, Left, Bottom)\r\n *\r\n * Stellt einen leichten Zugriff auf das DOM Element für das Fading zur Verfügung und kann dieses Element bei Bedarf neu zeichnen (bei Scroll/Resize Events)\r\n *\r\n * @param id\r\n * @param style\r\n * @param repaintFunction\r\n * @constructor\r\n */\r\nfunction DwScrollpaneSide(id, style, repaintFunction) {\r\n    this.id = id;\r\n    this.fadingNode = this.getNode(style); // Liefert den DOM Knoten zurück. Einbau des Knotens (falls noch nicht im DOM) erfolgt in load Methode\r\n    this.repaint = repaintFunction; // Setzt die Attribute für die Fadings (Positionierung, Größe) entsprechend der ScrollBar-Sichtbarkeiten\r\n}\r\n\r\n\r\nDwScrollpaneSide.prototype.getNode = function(style) {\r\n    let node = $(this.id);\r\n    if (!node) {\r\n        node = this.createNode(style);\r\n    }\r\n    return node;\r\n};\r\n\r\nDwScrollpaneSide.prototype.createNode = function(style) {\r\n    let node = document.createElement('div');\r\n    node.id = this.id;\r\n    node.style = style;\r\n    return node;\r\n};\r\n\r\n/**\r\n * Bestimmt aktuelle Informationen (update Methode) zur Scrollpane (Sichtbarkeit der vertikalen/horizontalen Balken und Balkenbreite)\r\n * @param scrollpane\r\n * @constructor\r\n */\r\nfunction DwScrollpaneInfo(scrollpane) {\r\n    this.scrollpane = scrollpane;\r\n    this.scrollBarVerticalVisible = false;\r\n    this.scrollBarHorizontalVisible = false;\r\n    this.contentHeight = 0;\r\n    this.contentWidth = 0;\r\n    this.scrollBarWidth = 16;\r\n    this.update();\r\n}\r\n\r\nDwScrollpaneInfo.prototype.update = function() {\r\n    this.scrollBarHorizontalVisible = this.hasHorizontalOverflow();\r\n    this.scrollBarVerticalVisible = this.hasVerticalOverflow();\r\n    this.scrollBarWidth = dwUtilsGetScrollbarWidth(this.scrollpane) - 1; // Vermeidung von Selektionsfarben (ohne Fade) am Rand Rechts/Unten\r\n    if (this.scrollpane.children.length >= 1) {\r\n        // Annahme: Das erste Kind ist der (sichtbare) Inhalt\r\n        var contentNode = this.scrollpane.children[0];\r\n        this.contentHeight = contentNode.offsetHeight;\r\n        this.contentWidth = contentNode.offsetWidth;\r\n    }\r\n};\r\n\r\n/**\r\n * Prüft auch, ob überhaupt eine Scrollbox aktiv ist\r\n * @returns {boolean}\r\n */\r\nDwScrollpaneInfo.prototype.hasHorizontalOverflow = function() {\r\n    if (this.scrollpane.style['overflow'] !== \"hidden\" && this.scrollpane.style['overflow-x'] !== \"hidden\") {\r\n        return dwUtilsHasHorizontalOverflow(this.scrollpane);\r\n    } else {\r\n        return false;\r\n    }\r\n}\r\n\r\n/**\r\n * Prüft auch, ob überhaupt eine Scrollbox aktiv ist\r\n * @returns {boolean}\r\n */\r\nDwScrollpaneInfo.prototype.hasVerticalOverflow = function() {\r\n    if (this.scrollpane.style['overflow'] !== \"hidden\" && this.scrollpane.style['overflow-y'] !== \"hidden\") {\r\n        return dwUtilsHasVerticalOverflow(this.scrollpane);\r\n    } else {\r\n        return false;\r\n    }\r\n}\r\n\r\n\r\nfunction dwScrollpaneInitializeScrollpaneFadings(scrollpaneId, fadingPropertiesJson) {\r\n    let painter = new DwScrollpanePainter(scrollpaneId);\r\n    let fadingProperties = painter.parseJson(fadingPropertiesJson);\r\n    if (!painter.isFound() || !painter.isValidJSON(fadingProperties)) {\r\n        return;\r\n    }\r\n    painter.loadFading(fadingProperties);\r\n}\r\n\r\nfunction dwScrollpaneRepaintScrollpaneFadings(scrollpaneId) {\r\n    let painter = new DwScrollpanePainter(scrollpaneId);\r\n    if (!painter.isFound()) {\r\n        return;\r\n    }\r\n    painter.repaint();\r\n}\r\n\r\n/**\r\n * Erzeugt und zeichnet die Fading Elemente (neu)\r\n * @param scrollPaneId\r\n * @constructor\r\n */\r\nfunction DwScrollpanePainter(scrollPaneId) {\r\n    let painter = this;\r\n    this.scrollpane = $(scrollPaneId);\r\n    if (!this.scrollpane) {\r\n        return;\r\n    }\r\n    this.scrollpaneInfo = this.createScrollpaneInfo();\r\n    this.sides = {\r\n        TOP: this.createSide(\"top\",\r\n                             \"height:50px; left: 0px;right: 18px;top: 0px; position: absolute;background:linear-gradient(to top,hsla(0, 0%, 100%, 0) 0%,hsla(0, 0%, 100%, 0.013) 8.1%,hsla(0, 0%, 100%, 0.049) 15.5%,hsla(0, 0%, 100%, 0.104) 22.5%,hsla(0, 0%, 100%, 0.175) 29%,hsla(0, 0%, 100%, 0.259) 35.3%,hsla(0, 0%, 100%, 0.352) 41.2%,hsla(0, 0%, 100%, 0.45) 47.1%,hsla(0, 0%, 100%, 0.55) 52.9%,hsla(0, 0%, 100%, 0.648) 58.8%,hsla(0, 0%, 100%, 0.741) 64.7%,hsla(0, 0%, 100%, 0.825) 71%,hsla(0, 0%, 100%, 0.896) 77.5%,hsla(0, 0%, 100%, 0.951) 84.5%,hsla(0, 0%, 100%, 0.987) 91.9%,hsl(0, 0%, 100%) 100%);z-index:400;pointer-events:none;\",\r\n                             function() {\r\n                                 const visibility = this.fadingNode.getAttribute(\"themeVisibility\");\r\n                                 const offset = parseInt(this.fadingNode.getAttribute(\"themeOffset\"));\r\n                                 const scrollBarVerticalVisible = painter.scrollpaneInfo.scrollBarVerticalVisible;\r\n                                 this.fadingNode.style.visibility = scrollBarVerticalVisible ? visibility : \"hidden\";\r\n                                 this.fadingNode.style.top = offset + \"px\";\r\n                                 this.fadingNode.style.right = scrollBarVerticalVisible ? painter.scrollpaneInfo.scrollBarWidth + \"px\" : \"0px\";\r\n                                 this.fadingNode.style.height = Math.min(painter.scrollpane.scrollTop, DW_SCROLLPANE_FADING_COMPONENT_MAX_SIZE) + \"px\";\r\n                             }),\r\n        LEFT: this.createSide(\"left\",\r\n                              \"width:50px; top: 0px;left: 0px;bottom: 18px;position: absolute;background:linear-gradient(to left,hsla(0, 0%, 100%, 0) 0%,hsla(0, 0%, 100%, 0.013) 8.1%,hsla(0, 0%, 100%, 0.049) 15.5%,hsla(0, 0%, 100%, 0.104) 22.5%,hsla(0, 0%, 100%, 0.175) 29%,hsla(0, 0%, 100%, 0.259) 35.3%,hsla(0, 0%, 100%, 0.352) 41.2%,hsla(0, 0%, 100%, 0.45) 47.1%,hsla(0, 0%, 100%, 0.55) 52.9%,hsla(0, 0%, 100%, 0.648) 58.8%,hsla(0, 0%, 100%, 0.741) 64.7%,hsla(0, 0%, 100%, 0.825) 71%,hsla(0, 0%, 100%, 0.896) 77.5%,hsla(0, 0%, 100%, 0.951) 84.5%,hsla(0, 0%, 100%, 0.987) 91.9%,hsl(0, 0%, 100%) 100%); z-index:400;pointer-events:none;\",\r\n                              function() {\r\n                                  const visibility = this.fadingNode.getAttribute(\"themeVisibility\");\r\n                                  const offset = parseInt(this.fadingNode.getAttribute(\"themeOffset\"));\r\n                                  const scrollBarHorizontalVisible = painter.scrollpaneInfo.scrollBarHorizontalVisible;\r\n                                  this.fadingNode.style.visibility = scrollBarHorizontalVisible ? visibility : \"hidden\";\r\n                                  this.fadingNode.style.bottom = scrollBarHorizontalVisible ? painter.scrollpaneInfo.scrollBarWidth + \"px\" : \"0px\";\r\n                                  this.fadingNode.style.left = offset + \"px\";\r\n                                  this.fadingNode.style.width = Math.min(painter.scrollpane.scrollLeft, DW_SCROLLPANE_FADING_COMPONENT_MAX_SIZE) + \"px\";\r\n                              }),\r\n        RIGHT: this.createSide(\"right\",\r\n                               \"width:50px; right: 18px;top: 0px;bottom: 18px; position: absolute;background:linear-gradient(to right,hsla(0, 0%, 100%, 0) 0%,hsla(0, 0%, 100%, 0.013) 8.1%,hsla(0, 0%, 100%, 0.049) 15.5%,hsla(0, 0%, 100%, 0.104) 22.5%,hsla(0, 0%, 100%, 0.175) 29%,hsla(0, 0%, 100%, 0.259) 35.3%,hsla(0, 0%, 100%, 0.352) 41.2%,hsla(0, 0%, 100%, 0.45) 47.1%,hsla(0, 0%, 100%, 0.55) 52.9%,hsla(0, 0%, 100%, 0.648) 58.8%,hsla(0, 0%, 100%, 0.741) 64.7%,hsla(0, 0%, 100%, 0.825) 71%,hsla(0, 0%, 100%, 0.896) 77.5%,hsla(0, 0%, 100%, 0.951) 84.5%,hsla(0, 0%, 100%, 0.987) 91.9%,hsl(0, 0%, 100%) 100%);z-index:400;pointer-events:none;\",\r\n                               function() {\r\n                                   const visibility = this.fadingNode.getAttribute(\"themeVisibility\");\r\n                                   const offset = parseInt(this.fadingNode.getAttribute(\"themeOffset\"));\r\n                                   const scrollBarHorizontalVisible = painter.scrollpaneInfo.scrollBarHorizontalVisible;\r\n                                   const scrollBarVerticalVisible = painter.scrollpaneInfo.scrollBarVerticalVisible;\r\n                                   const scrollBarWidth = painter.scrollpaneInfo.scrollBarWidth;\r\n\r\n                                   this.fadingNode.style.visibility = scrollBarHorizontalVisible ? visibility : \"hidden\";\r\n                                   this.fadingNode.style.right = scrollBarVerticalVisible ? (scrollBarWidth + offset) + \"px\" : offset + \"px\";\r\n                                   this.fadingNode.style.bottom = scrollBarHorizontalVisible ? scrollBarWidth + \"px\" : \"0px\";\r\n                                   // Breite ist maximal die gesamte innere Breite (ohne Scrollbar)\r\n                                   var width = Math.min(painter.scrollpaneInfo.contentWidth - painter.scrollpane.offsetWidth - painter.scrollpane.scrollLeft, DW_SCROLLPANE_FADING_COMPONENT_MAX_SIZE);\r\n                                   if (width < 0) {\r\n                                       width = 0; // Vermeidung, dass er sonst auf zB 50px springt - weil er keine negative Breite kennt\r\n                                   }\r\n                                   this.fadingNode.style.width = width + \"px\";\r\n                               }),\r\n        BOTTOM: this.createSide(\"bottom\",\r\n                                \"height:50px; bottom: 18px;left: 0px;right: 18px; position: absolute;background:linear-gradient(to bottom,hsla(0, 0%, 100%, 0) 0%,hsla(0, 0%, 100%, 0.013) 8.1%,hsla(0, 0%, 100%, 0.049) 15.5%,hsla(0, 0%, 100%, 0.104) 22.5%,hsla(0, 0%, 100%, 0.175) 29%,hsla(0, 0%, 100%, 0.259) 35.3%,hsla(0, 0%, 100%, 0.352) 41.2%,hsla(0, 0%, 100%, 0.45) 47.1%,hsla(0, 0%, 100%, 0.55) 52.9%,hsla(0, 0%, 100%, 0.648) 58.8%,hsla(0, 0%, 100%, 0.741) 64.7%,hsla(0, 0%, 100%, 0.825) 71%,hsla(0, 0%, 100%, 0.896) 77.5%,hsla(0, 0%, 100%, 0.951) 84.5%,hsla(0, 0%, 100%, 0.987) 91.9%,hsl(0, 0%, 100%) 100%);z-index:400;pointer-events:none;\",\r\n                                function() {\r\n                                    const visibility = this.fadingNode.getAttribute(\"themeVisibility\");\r\n                                    const offset = parseInt(this.fadingNode.getAttribute(\"themeOffset\"));\r\n                                    const scrollBarHorizontalVisible = painter.scrollpaneInfo.scrollBarHorizontalVisible;\r\n                                    const scrollBarVerticalVisible = painter.scrollpaneInfo.scrollBarVerticalVisible;\r\n                                    const scrollBarWidth = painter.scrollpaneInfo.scrollBarWidth;\r\n\r\n                                    this.fadingNode.style.visibility = scrollBarVerticalVisible ? visibility : \"hidden\";\r\n                                    this.fadingNode.style.right = scrollBarVerticalVisible ? scrollBarWidth + \"px\" : \"0px\";\r\n                                    this.fadingNode.style.bottom = scrollBarHorizontalVisible ? (scrollBarWidth + offset) + \"px\" : offset + \"px\";\r\n                                    var height = Math.min(painter.scrollpaneInfo.contentHeight - painter.scrollpane.offsetHeight - painter.scrollpane.scrollTop - painter.scrollpaneInfo.scrollBarWidth - 2, DW_SCROLLPANE_FADING_COMPONENT_MAX_SIZE);\r\n                                    if (height < 0) {\r\n                                        height = 0; // Vermeidung, dass er sonst auf zB 50px springt - weil er keine negative Höhe kennt\r\n                                    }\r\n                                    // Höhe ist maximal die gesamte innere Höhe (ohne Scrollbar)\r\n                                    this.fadingNode.style.height = height + \"px\";\r\n                                })\r\n    };\r\n}\r\n\r\nDwScrollpanePainter.prototype.isFound = function() {\r\n    return this.scrollpane != null;\r\n};\r\n\r\nDwScrollpanePainter.prototype.isValidJSON = function(fadingProperties) {\r\n    return (fadingProperties != null) && (fadingProperties[\"sides\"] !== undefined);\r\n};\r\n\r\nDwScrollpanePainter.prototype.parseJson = function(fadingPropertiesJson) {\r\n    if (typeof (fadingPropertiesJson) === \"undefined\") {\r\n        return null;\r\n    }\r\n    try {\r\n        return JSON.parse(fadingPropertiesJson);\r\n    } catch (exception) {\r\n        return null;\r\n    }\r\n};\r\n\r\nDwScrollpanePainter.prototype.createSide = function(idSuffix, style, repaintFunction) {\r\n    return new DwScrollpaneSide(this.scrollpane.id + \"_guiScrollPaneFading-\" + idSuffix, style, repaintFunction);\r\n};\r\n\r\nDwScrollpanePainter.prototype.createScrollpaneInfo = function() {\r\n    return new DwScrollpaneInfo(this.scrollpane);\r\n};\r\n\r\nDwScrollpanePainter.prototype.loadFading = function(fadingProperties) {\r\n    let painter = this;\r\n\r\n    let requiresListenerInit = false;\r\n    for (let sideName in this.sides) {\r\n        if (!this.sides.hasOwnProperty(sideName)) {\r\n            continue;\r\n        }\r\n\r\n        let side = this.sides[sideName];\r\n        let sideNode = side.fadingNode;\r\n        if (!sideNode.parentNode) {\r\n            requiresListenerInit = true;\r\n\r\n            // !!! WICHTIG !!! DOM Struktur (in welchen Knoten werden die Side Elemente hinzugefügt) muss analog zur Struktur bei GuiScrollpane sein\r\n            this.scrollpane.parentNode.appendChild(sideNode);\r\n        }\r\n\r\n        let propertyFromServer = fadingProperties.sides[sideName.toUpperCase()];\r\n\r\n        if (propertyFromServer === undefined) {\r\n            sideNode.setAttribute(\"themeVisibility\", \"hidden\");\r\n            sideNode.setAttribute(\"themeOffset\", 0);\r\n        } else {\r\n            sideNode.setAttribute(\"themeVisibility\", \"visible\");\r\n            sideNode.setAttribute(\"themeOffset\", propertyFromServer);\r\n        }\r\n\r\n        if (side.repaint) {\r\n            side.repaint();\r\n        }\r\n    }\r\n    if (requiresListenerInit) {\r\n        // Scroll Listener zum DOM Element hinzufügen. Nur 1x notwendig - bei der Initialisierung\r\n        // Erkennungsmerkmal ist, ob das Fading Element bereits im DOM eingebaut wurde oder noch nicht\r\n        let scrollListener = function() {\r\n            painter.repaint();\r\n        };\r\n        this.scrollpane.addEventListener(\"scroll\", scrollListener);\r\n\r\n        // \"Resize Listener\" (onresizeClientSide) zum DOM Element und zur Registry hinzufügen\r\n        dwDomAppendDomAttributeValue(this.scrollpane, \"onresizeClientSide\", \"dwScrollpaneRepaintScrollpaneFadings('\" + this.scrollpane.id + \"');\");\r\n        dwResizeRegistryGetInstance().addControl(this.scrollpane.id, this.scrollpane.id, this.scrollpane.parentNode.id);\r\n    }\r\n};\r\n\r\nDwScrollpanePainter.prototype.repaint = function() {\r\n    this.scrollpaneInfo.update();\r\n    for (let sideName in this.sides) {\r\n        if (!this.sides.hasOwnProperty(sideName)) {\r\n            continue;\r\n        }\r\n\r\n        let side = this.sides[sideName];\r\n\r\n        if (side.repaint) {\r\n            side.repaint();\r\n        }\r\n    }\r\n};\n"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": -1,
          "_transferSize": 252870,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:09.559Z",
        "time": 362.12400009389967,
        "timings": {
          "blocked": 25.509000079624354,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 1.0870000000000006,
          "wait": 297.84600004870447,
          "receive": 37.68199996557087,
          "_blocked_queueing": 20.696000079624355,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_connectionId": "1726423",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "parser",
          "url": "https://ekat.festool.de/login/app?__bk_&__windowid=IRW3104379&__rid=FOE1787216989423",
          "lineNumber": 1
        },
        "_priority": "High",
        "_resourceType": "script",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/login/WEB-RES/js/plugin.js_shop_7.26.1.5.js",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": ":authority",
              "value": "ekat.festool.de"
            },
            {
              "name": ":method",
              "value": "GET"
            },
            {
              "name": ":path",
              "value": "/login/WEB-RES/js/plugin.js_shop_7.26.1.5.js"
            },
            {
              "name": ":scheme",
              "value": "https"
            },
            {
              "name": "accept",
              "value": "*/*"
            },
            {
              "name": "accept-encoding",
              "value": "gzip, deflate, br, zstd"
            },
            {
              "name": "accept-language",
              "value": "en-GB,en-US;q=0.9,en;q=0.8"
            },
            {
              "name": "if-modified-since",
              "value": "Thu, 20 Aug 2026 07:47:25 GMT"
            },
            {
              "name": "if-none-match",
              "value": "W/\"0-1787216828300\""
            },
            {
              "name": "priority",
              "value": "u=1"
            },
            {
              "name": "referer",
              "value": "https://ekat.festool.de/login/app?__bk_&__windowid=IRW3104379&__rid=FOE1787216989423"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            },
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "sec-fetch-dest",
              "value": "script"
            },
            {
              "name": "sec-fetch-mode",
              "value": "no-cors"
            },
            {
              "name": "sec-fetch-site",
              "value": "same-origin"
            },
            {
              "name": "user-agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            }
          ],
          "queryString": [],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "cache-control",
              "value": "public"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "content-length",
              "value": "20"
            },
            {
              "name": "content-type",
              "value": "text/javascript"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 09:09:49 GMT"
            },
            {
              "name": "etag",
              "value": "W/\"0-1787216989610\""
            },
            {
              "name": "expires",
              "value": "Thu, 20 Aug 2026 09:11:49 GMT"
            },
            {
              "name": "last-modified",
              "value": "Thu, 20 Aug 2026 07:47:25 GMT"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "pragma",
              "value": "cache"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "x-robots-tag",
              "value": "noindex"
            }
          ],
          "cookies": [],
          "content": {
            "size": 0,
            "mimeType": "text/javascript",
            "text": ""
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": -1,
          "_transferSize": 176,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:09.559Z",
        "time": 148.9290000172332,
        "timings": {
          "blocked": 25.542999995708467,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0.9819999999999993,
          "wait": 106.0869999909848,
          "receive": 16.31700003053993,
          "_blocked_queueing": 20.791999995708466,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_connectionId": "1726423",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "parser",
          "url": "https://ekat.festool.de/login/app?__bk_&__windowid=IRW3104379&__rid=FOE1787216989423",
          "lineNumber": 1
        },
        "_priority": "High",
        "_resourceType": "script",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/login/WEB-RES/js/html5-qrcode.min.js_shop_7.26.1.5.js",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": ":authority",
              "value": "ekat.festool.de"
            },
            {
              "name": ":method",
              "value": "GET"
            },
            {
              "name": ":path",
              "value": "/login/WEB-RES/js/html5-qrcode.min.js_shop_7.26.1.5.js"
            },
            {
              "name": ":scheme",
              "value": "https"
            },
            {
              "name": "accept",
              "value": "*/*"
            },
            {
              "name": "accept-encoding",
              "value": "gzip, deflate, br, zstd"
            },
            {
              "name": "accept-language",
              "value": "en-GB,en-US;q=0.9,en;q=0.8"
            },
            {
              "name": "if-modified-since",
              "value": "Thu, 20 Aug 2026 07:47:25 GMT"
            },
            {
              "name": "if-none-match",
              "value": "W/\"547334-1787216828333\""
            },
            {
              "name": "priority",
              "value": "u=1"
            },
            {
              "name": "referer",
              "value": "https://ekat.festool.de/login/app?__bk_&__windowid=IRW3104379&__rid=FOE1787216989423"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            },
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "sec-fetch-dest",
              "value": "script"
            },
            {
              "name": "sec-fetch-mode",
              "value": "no-cors"
            },
            {
              "name": "sec-fetch-site",
              "value": "same-origin"
            },
            {
              "name": "user-agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            }
          ],
          "queryString": [],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "cache-control",
              "value": "public"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "content-length",
              "value": "109164"
            },
            {
              "name": "content-type",
              "value": "text/javascript"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 09:09:49 GMT"
            },
            {
              "name": "etag",
              "value": "W/\"547334-1787216989610\""
            },
            {
              "name": "expires",
              "value": "Thu, 20 Aug 2026 09:11:49 GMT"
            },
            {
              "name": "last-modified",
              "value": "Thu, 20 Aug 2026 07:47:25 GMT"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "pragma",
              "value": "cache"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "x-robots-tag",
              "value": "noindex"
            }
          ],
          "cookies": [],
          "content": {
            "size": 547334,
            "mimeType": "text/javascript",
            "text": "/** ZXing **/ ! function(t, e) {\r\n    \"object\" == typeof exports && \"undefined\" != typeof module ? e(exports) : \"function\" == typeof define && define.amd ? define([\"exports\"], e) : e((t = \"undefined\" != typeof globalThis ? globalThis : t || self).ZXing = {})\r\n}(this, function(t) {\r\n    \"use strict\";\r\n    var e = Object.setPrototypeOf || {\r\n                __proto__: []\r\n            }\r\n            instanceof Array && function(t, e) {\r\n                t.__proto__ = e\r\n            } || function(t, e) {\r\n                for (var r in e) e.hasOwnProperty(r) && (t[r] = e[r])\r\n            };\r\n    var r, n = function(t) {\r\n        function r(e) {\r\n            var r, n, i, s = this.constructor,\r\n                    o = t.call(this, e) || this;\r\n            return Object.defineProperty(o, \"name\", {\r\n                value: s.name,\r\n                enumerable: !1\r\n            }), r = o, n = s.prototype, (i = Object.setPrototypeOf) ? i(r, n) : r.__proto__ = n,\r\n                    function(t, e) {\r\n                        void 0 === e && (e = t.constructor);\r\n                        var r = Error.captureStackTrace;\r\n                        r && r(t, e)\r\n                    }(o), o\r\n        }\r\n        return function(t, r) {\r\n            function n() {\r\n                this.constructor = t\r\n            }\r\n            e(t, r), t.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)\r\n        }(r, t), r\r\n    }(Error);\r\n    class i extends n {\r\n        constructor(t) {\r\n            super(t), this.message = t\r\n        }\r\n        getKind() {\r\n            return this.constructor.kind\r\n        }\r\n    }\r\n    i.kind = \"Exception\";\r\n    class s extends i {}\r\n    s.kind = \"ArgumentException\";\r\n    class o extends i {}\r\n    o.kind = \"IllegalArgumentException\";\r\n    class a {\r\n        constructor(t) {\r\n            if (this.binarizer = t, null === t) throw new o(\"Binarizer must be non-null.\")\r\n        }\r\n        getWidth() {\r\n            return this.binarizer.getWidth()\r\n        }\r\n        getHeight() {\r\n            return this.binarizer.getHeight()\r\n        }\r\n        getBlackRow(t, e) {\r\n            return this.binarizer.getBlackRow(t, e)\r\n        }\r\n        getBlackMatrix() {\r\n            return null !== this.matrix && void 0 !== this.matrix || (this.matrix = this.binarizer.getBlackMatrix()), this.matrix\r\n        }\r\n        isCropSupported() {\r\n            return this.binarizer.getLuminanceSource().isCropSupported()\r\n        }\r\n        crop(t, e, r, n) {\r\n            const i = this.binarizer.getLuminanceSource().crop(t, e, r, n);\r\n            return new a(this.binarizer.createBinarizer(i))\r\n        }\r\n        isRotateSupported() {\r\n            return this.binarizer.getLuminanceSource().isRotateSupported()\r\n        }\r\n        rotateCounterClockwise() {\r\n            const t = this.binarizer.getLuminanceSource().rotateCounterClockwise();\r\n            return new a(this.binarizer.createBinarizer(t))\r\n        }\r\n        rotateCounterClockwise45() {\r\n            const t = this.binarizer.getLuminanceSource().rotateCounterClockwise45();\r\n            return new a(this.binarizer.createBinarizer(t))\r\n        }\r\n        toString() {\r\n            try {\r\n                return this.getBlackMatrix().toString()\r\n            } catch (t) {\r\n                return \"\"\r\n            }\r\n        }\r\n    }\r\n    class l extends i {\r\n        static getChecksumInstance() {\r\n            return new l\r\n        }\r\n    }\r\n    l.kind = \"ChecksumException\";\r\n    class h {\r\n        constructor(t) {\r\n            this.source = t\r\n        }\r\n        getLuminanceSource() {\r\n            return this.source\r\n        }\r\n        getWidth() {\r\n            return this.source.getWidth()\r\n        }\r\n        getHeight() {\r\n            return this.source.getHeight()\r\n        }\r\n    }\r\n    class c {\r\n        static arraycopy(t, e, r, n, i) {\r\n            for (; i--;) r[n++] = t[e++]\r\n        }\r\n        static currentTimeMillis() {\r\n            return Date.now()\r\n        }\r\n    }\r\n    class u extends i {}\r\n    u.kind = \"IndexOutOfBoundsException\";\r\n    class d extends u {\r\n        constructor(t, e) {\r\n            super(e), this.index = t, this.message = e\r\n        }\r\n    }\r\n    d.kind = \"ArrayIndexOutOfBoundsException\";\r\n    class g {\r\n        static fill(t, e) {\r\n            for (let r = 0, n = t.length; r < n; r++) t[r] = e\r\n        }\r\n        static fillWithin(t, e, r, n) {\r\n            g.rangeCheck(t.length, e, r);\r\n            for (let i = e; i < r; i++) t[i] = n\r\n        }\r\n        static rangeCheck(t, e, r) {\r\n            if (e > r) throw new o(\"fromIndex(\" + e + \") > toIndex(\" + r + \")\");\r\n            if (e < 0) throw new d(e);\r\n            if (r > t) throw new d(r)\r\n        }\r\n        static asList(...t) {\r\n            return t\r\n        }\r\n        static create(t, e, r) {\r\n            return Array.from({\r\n                                  length: t\r\n                              }).map(t => Array.from({\r\n                                                         length: e\r\n                                                     }).fill(r))\r\n        }\r\n        static createInt32Array(t, e, r) {\r\n            return Array.from({\r\n                                  length: t\r\n                              }).map(t => Int32Array.from({\r\n                                                              length: e\r\n                                                          }).fill(r))\r\n        }\r\n        static equals(t, e) {\r\n            if (!t) return !1;\r\n            if (!e) return !1;\r\n            if (!t.length) return !1;\r\n            if (!e.length) return !1;\r\n            if (t.length !== e.length) return !1;\r\n            for (let r = 0, n = t.length; r < n; r++)\r\n                if (t[r] !== e[r]) return !1;\r\n            return !0\r\n        }\r\n        static hashCode(t) {\r\n            if (null === t) return 0;\r\n            let e = 1;\r\n            for (const r of t) e = 31 * e + r;\r\n            return e\r\n        }\r\n        static fillUint8Array(t, e) {\r\n            for (let r = 0; r !== t.length; r++) t[r] = e\r\n        }\r\n        static copyOf(t, e) {\r\n            return t.slice(0, e)\r\n        }\r\n        static copyOfUint8Array(t, e) {\r\n            if (t.length <= e) {\r\n                const r = new Uint8Array(e);\r\n                return r.set(t), r\r\n            }\r\n            return t.slice(0, e)\r\n        }\r\n        static copyOfRange(t, e, r) {\r\n            const n = r - e,\r\n                    i = new Int32Array(n);\r\n            return c.arraycopy(t, e, i, 0, n), i\r\n        }\r\n        static binarySearch(t, e, r) {\r\n            void 0 === r && (r = g.numberComparator);\r\n            let n = 0,\r\n                    i = t.length - 1;\r\n            for (; n <= i;) {\r\n                const s = i + n >> 1,\r\n                        o = r(e, t[s]);\r\n                if (o > 0) n = s + 1;\r\n                else {\r\n                    if (!(o < 0)) return s;\r\n                    i = s - 1\r\n                }\r\n            }\r\n            return -n - 1\r\n        }\r\n        static numberComparator(t, e) {\r\n            return t - e\r\n        }\r\n    }\r\n    class f {\r\n        static numberOfTrailingZeros(t) {\r\n            let e;\r\n            if (0 === t) return 32;\r\n            let r = 31;\r\n            return 0 !== (e = t << 16) && (r -= 16, t = e), 0 !== (e = t << 8) && (r -= 8, t = e), 0 !== (e = t << 4) && (r -= 4, t = e), 0 !== (e = t << 2) && (r -= 2, t = e), r - (t << 1 >>> 31)\r\n        }\r\n        static numberOfLeadingZeros(t) {\r\n            if (0 === t) return 32;\r\n            let e = 1;\r\n            return t >>> 16 == 0 && (e += 16, t <<= 16), t >>> 24 == 0 && (e += 8, t <<= 8), t >>> 28 == 0 && (e += 4, t <<= 4), t >>> 30 == 0 && (e += 2, t <<= 2), e -= t >>> 31\r\n        }\r\n        static toHexString(t) {\r\n            return t.toString(16)\r\n        }\r\n        static toBinaryString(t) {\r\n            return String(parseInt(String(t), 2))\r\n        }\r\n        static bitCount(t) {\r\n            return t = (t = (858993459 & (t -= t >>> 1 & 1431655765)) + (t >>> 2 & 858993459)) + (t >>> 4) & 252645135, t += t >>> 8, 63 & (t += t >>> 16)\r\n        }\r\n        static truncDivision(t, e) {\r\n            return Math.trunc(t / e)\r\n        }\r\n        static parseInt(t, e) {\r\n            return parseInt(t, e)\r\n        }\r\n    }\r\n    f.MIN_VALUE_32_BITS = -2147483648, f.MAX_VALUE = Number.MAX_SAFE_INTEGER;\r\n    class w {\r\n        constructor(t, e) {\r\n            void 0 === t ? (this.size = 0, this.bits = new Int32Array(1)) : (this.size = t, this.bits = null == e ? w.makeArray(t) : e)\r\n        }\r\n        getSize() {\r\n            return this.size\r\n        }\r\n        getSizeInBytes() {\r\n            return Math.floor((this.size + 7) / 8)\r\n        }\r\n        ensureCapacity(t) {\r\n            if (t > 32 * this.bits.length) {\r\n                const e = w.makeArray(t);\r\n                c.arraycopy(this.bits, 0, e, 0, this.bits.length), this.bits = e\r\n            }\r\n        }\r\n        get(t) {\r\n            return 0 != (this.bits[Math.floor(t / 32)] & 1 << (31 & t))\r\n        }\r\n        set(t) {\r\n            this.bits[Math.floor(t / 32)] |= 1 << (31 & t)\r\n        }\r\n        flip(t) {\r\n            this.bits[Math.floor(t / 32)] ^= 1 << (31 & t)\r\n        }\r\n        getNextSet(t) {\r\n            const e = this.size;\r\n            if (t >= e) return e;\r\n            const r = this.bits;\r\n            let n = Math.floor(t / 32),\r\n                    i = r[n];\r\n            i &= ~((1 << (31 & t)) - 1);\r\n            const s = r.length;\r\n            for (; 0 === i;) {\r\n                if (++n === s) return e;\r\n                i = r[n]\r\n            }\r\n            const o = 32 * n + f.numberOfTrailingZeros(i);\r\n            return o > e ? e : o\r\n        }\r\n        getNextUnset(t) {\r\n            const e = this.size;\r\n            if (t >= e) return e;\r\n            const r = this.bits;\r\n            let n = Math.floor(t / 32),\r\n                    i = ~r[n];\r\n            i &= ~((1 << (31 & t)) - 1);\r\n            const s = r.length;\r\n            for (; 0 === i;) {\r\n                if (++n === s) return e;\r\n                i = ~r[n]\r\n            }\r\n            const o = 32 * n + f.numberOfTrailingZeros(i);\r\n            return o > e ? e : o\r\n        }\r\n        setBulk(t, e) {\r\n            this.bits[Math.floor(t / 32)] = e\r\n        }\r\n        setRange(t, e) {\r\n            if (e < t || t < 0 || e > this.size) throw new o;\r\n            if (e === t) return;\r\n            e--;\r\n            const r = Math.floor(t / 32),\r\n                    n = Math.floor(e / 32),\r\n                    i = this.bits;\r\n            for (let s = r; s <= n; s++) {\r\n                const o = (2 << (s < n ? 31 : 31 & e)) - (1 << (s > r ? 0 : 31 & t));\r\n                i[s] |= o\r\n            }\r\n        }\r\n        clear() {\r\n            const t = this.bits.length,\r\n                    e = this.bits;\r\n            for (let r = 0; r < t; r++) e[r] = 0\r\n        }\r\n        isRange(t, e, r) {\r\n            if (e < t || t < 0 || e > this.size) throw new o;\r\n            if (e === t) return !0;\r\n            e--;\r\n            const n = Math.floor(t / 32),\r\n                    i = Math.floor(e / 32),\r\n                    s = this.bits;\r\n            for (let o = n; o <= i; o++) {\r\n                const a = (2 << (o < i ? 31 : 31 & e)) - (1 << (o > n ? 0 : 31 & t)) & 4294967295;\r\n                if ((s[o] & a) !== (r ? a : 0)) return !1\r\n            }\r\n            return !0\r\n        }\r\n        appendBit(t) {\r\n            this.ensureCapacity(this.size + 1), t && (this.bits[Math.floor(this.size / 32)] |= 1 << (31 & this.size)), this.size++\r\n        }\r\n        appendBits(t, e) {\r\n            if (e < 0 || e > 32) throw new o(\"Num bits must be between 0 and 32\");\r\n            this.ensureCapacity(this.size + e);\r\n            for (let r = e; r > 0; r--) this.appendBit(1 == (t >> r - 1 & 1))\r\n        }\r\n        appendBitArray(t) {\r\n            const e = t.size;\r\n            this.ensureCapacity(this.size + e);\r\n            for (let r = 0; r < e; r++) this.appendBit(t.get(r))\r\n        }\r\n        xor(t) {\r\n            if (this.size !== t.size) throw new o(\"Sizes don't match\");\r\n            const e = this.bits;\r\n            for (let r = 0, n = e.length; r < n; r++) e[r] ^= t.bits[r]\r\n        }\r\n        toBytes(t, e, r, n) {\r\n            for (let i = 0; i < n; i++) {\r\n                let n = 0;\r\n                for (let e = 0; e < 8; e++) this.get(t) && (n |= 1 << 7 - e), t++;\r\n                e[r + i] = n\r\n            }\r\n        }\r\n        getBitArray() {\r\n            return this.bits\r\n        }\r\n        reverse() {\r\n            const t = new Int32Array(this.bits.length),\r\n                    e = Math.floor((this.size - 1) / 32),\r\n                    r = e + 1,\r\n                    n = this.bits;\r\n            for (let i = 0; i < r; i++) {\r\n                let r = n[i];\r\n                r = (r = (r = (r = (r = r >> 1 & 1431655765 | (1431655765 & r) << 1) >> 2 & 858993459 | (858993459 & r) << 2) >> 4 & 252645135 | (252645135 & r) << 4) >> 8 & 16711935 | (16711935 & r) << 8) >> 16 & 65535 | (65535 & r) << 16, t[e - i] = r\r\n            }\r\n            if (this.size !== 32 * r) {\r\n                const e = 32 * r - this.size;\r\n                let n = t[0] >>> e;\r\n                for (let i = 1; i < r; i++) {\r\n                    const r = t[i];\r\n                    n |= r << 32 - e, t[i - 1] = n, n = r >>> e\r\n                }\r\n                t[r - 1] = n\r\n            }\r\n            this.bits = t\r\n        }\r\n        static makeArray(t) {\r\n            return new Int32Array(Math.floor((t + 31) / 32))\r\n        }\r\n        equals(t) {\r\n            if (!(t instanceof w)) return !1;\r\n            const e = t;\r\n            return this.size === e.size && g.equals(this.bits, e.bits)\r\n        }\r\n        hashCode() {\r\n            return 31 * this.size + g.hashCode(this.bits)\r\n        }\r\n        toString() {\r\n            let t = \"\";\r\n            for (let e = 0, r = this.size; e < r; e++) 0 == (7 & e) && (t += \" \"), t += this.get(e) ? \"X\" : \".\";\r\n            return t\r\n        }\r\n        clone() {\r\n            return new w(this.size, this.bits.slice())\r\n        }\r\n    }! function(t) {\r\n        t[t.OTHER = 0] = \"OTHER\", t[t.PURE_BARCODE = 1] = \"PURE_BARCODE\", t[t.POSSIBLE_FORMATS = 2] = \"POSSIBLE_FORMATS\", t[t.TRY_HARDER = 3] = \"TRY_HARDER\", t[t.CHARACTER_SET = 4] = \"CHARACTER_SET\", t[t.ALLOWED_LENGTHS = 5] = \"ALLOWED_LENGTHS\", t[t.ASSUME_CODE_39_CHECK_DIGIT = 6] = \"ASSUME_CODE_39_CHECK_DIGIT\", t[t.ASSUME_GS1 = 7] = \"ASSUME_GS1\", t[t.RETURN_CODABAR_START_END = 8] = \"RETURN_CODABAR_START_END\", t[t.NEED_RESULT_POINT_CALLBACK = 9] = \"NEED_RESULT_POINT_CALLBACK\", t[t.ALLOWED_EAN_EXTENSIONS = 10] = \"ALLOWED_EAN_EXTENSIONS\"\r\n    }(r || (r = {}));\r\n    var A, C = r;\r\n    class E extends i {\r\n        static getFormatInstance() {\r\n            return new E\r\n        }\r\n    }\r\n    E.kind = \"FormatException\",\r\n            function(t) {\r\n                t[t.Cp437 = 0] = \"Cp437\", t[t.ISO8859_1 = 1] = \"ISO8859_1\", t[t.ISO8859_2 = 2] = \"ISO8859_2\", t[t.ISO8859_3 = 3] = \"ISO8859_3\", t[t.ISO8859_4 = 4] = \"ISO8859_4\", t[t.ISO8859_5 = 5] = \"ISO8859_5\", t[t.ISO8859_6 = 6] = \"ISO8859_6\", t[t.ISO8859_7 = 7] = \"ISO8859_7\", t[t.ISO8859_8 = 8] = \"ISO8859_8\", t[t.ISO8859_9 = 9] = \"ISO8859_9\", t[t.ISO8859_10 = 10] = \"ISO8859_10\", t[t.ISO8859_11 = 11] = \"ISO8859_11\", t[t.ISO8859_13 = 12] = \"ISO8859_13\", t[t.ISO8859_14 = 13] = \"ISO8859_14\", t[t.ISO8859_15 = 14] = \"ISO8859_15\", t[t.ISO8859_16 = 15] = \"ISO8859_16\", t[t.SJIS = 16] = \"SJIS\", t[t.Cp1250 = 17] = \"Cp1250\", t[t.Cp1251 = 18] = \"Cp1251\", t[t.Cp1252 = 19] = \"Cp1252\", t[t.Cp1256 = 20] = \"Cp1256\", t[t.UnicodeBigUnmarked = 21] = \"UnicodeBigUnmarked\", t[t.UTF8 = 22] = \"UTF8\", t[t.ASCII = 23] = \"ASCII\", t[t.Big5 = 24] = \"Big5\", t[t.GB18030 = 25] = \"GB18030\", t[t.EUC_KR = 26] = \"EUC_KR\"\r\n            }(A || (A = {}));\r\n    class m {\r\n        constructor(t, e, r, ...n) {\r\n            this.valueIdentifier = t, this.name = r, this.values = \"number\" == typeof e ? Int32Array.from([e]) : e, this.otherEncodingNames = n, m.VALUE_IDENTIFIER_TO_ECI.set(t, this), m.NAME_TO_ECI.set(r, this);\r\n            const i = this.values;\r\n            for (let t = 0, e = i.length; t !== e; t++) {\r\n                const e = i[t];\r\n                m.VALUES_TO_ECI.set(e, this)\r\n            }\r\n            for (const t of n) m.NAME_TO_ECI.set(t, this)\r\n        }\r\n        getValueIdentifier() {\r\n            return this.valueIdentifier\r\n        }\r\n        getName() {\r\n            return this.name\r\n        }\r\n        getValue() {\r\n            return this.values[0]\r\n        }\r\n        static getCharacterSetECIByValue(t) {\r\n            if (t < 0 || t >= 900) throw new E(\"incorect value\");\r\n            const e = m.VALUES_TO_ECI.get(t);\r\n            if (void 0 === e) throw new E(\"incorect value\");\r\n            return e\r\n        }\r\n        static getCharacterSetECIByName(t) {\r\n            const e = m.NAME_TO_ECI.get(t);\r\n            if (void 0 === e) throw new E(\"incorect value\");\r\n            return e\r\n        }\r\n        equals(t) {\r\n            if (!(t instanceof m)) return !1;\r\n            const e = t;\r\n            return this.getName() === e.getName()\r\n        }\r\n    }\r\n    m.VALUE_IDENTIFIER_TO_ECI = new Map, m.VALUES_TO_ECI = new Map, m.NAME_TO_ECI = new Map, m.Cp437 = new m(A.Cp437, Int32Array.from([0, 2]), \"Cp437\"), m.ISO8859_1 = new m(A.ISO8859_1, Int32Array.from([1, 3]), \"ISO-8859-1\", \"ISO88591\", \"ISO8859_1\"), m.ISO8859_2 = new m(A.ISO8859_2, 4, \"ISO-8859-2\", \"ISO88592\", \"ISO8859_2\"), m.ISO8859_3 = new m(A.ISO8859_3, 5, \"ISO-8859-3\", \"ISO88593\", \"ISO8859_3\"), m.ISO8859_4 = new m(A.ISO8859_4, 6, \"ISO-8859-4\", \"ISO88594\", \"ISO8859_4\"), m.ISO8859_5 = new m(A.ISO8859_5, 7, \"ISO-8859-5\", \"ISO88595\", \"ISO8859_5\"), m.ISO8859_6 = new m(A.ISO8859_6, 8, \"ISO-8859-6\", \"ISO88596\", \"ISO8859_6\"), m.ISO8859_7 = new m(A.ISO8859_7, 9, \"ISO-8859-7\", \"ISO88597\", \"ISO8859_7\"), m.ISO8859_8 = new m(A.ISO8859_8, 10, \"ISO-8859-8\", \"ISO88598\", \"ISO8859_8\"), m.ISO8859_9 = new m(A.ISO8859_9, 11, \"ISO-8859-9\", \"ISO88599\", \"ISO8859_9\"), m.ISO8859_10 = new m(A.ISO8859_10, 12, \"ISO-8859-10\", \"ISO885910\", \"ISO8859_10\"), m.ISO8859_11 = new m(A.ISO8859_11, 13, \"ISO-8859-11\", \"ISO885911\", \"ISO8859_11\"), m.ISO8859_13 = new m(A.ISO8859_13, 15, \"ISO-8859-13\", \"ISO885913\", \"ISO8859_13\"), m.ISO8859_14 = new m(A.ISO8859_14, 16, \"ISO-8859-14\", \"ISO885914\", \"ISO8859_14\"), m.ISO8859_15 = new m(A.ISO8859_15, 17, \"ISO-8859-15\", \"ISO885915\", \"ISO8859_15\"), m.ISO8859_16 = new m(A.ISO8859_16, 18, \"ISO-8859-16\", \"ISO885916\", \"ISO8859_16\"), m.SJIS = new m(A.SJIS, 20, \"SJIS\", \"Shift_JIS\"), m.Cp1250 = new m(A.Cp1250, 21, \"Cp1250\", \"windows-1250\"), m.Cp1251 = new m(A.Cp1251, 22, \"Cp1251\", \"windows-1251\"), m.Cp1252 = new m(A.Cp1252, 23, \"Cp1252\", \"windows-1252\"), m.Cp1256 = new m(A.Cp1256, 24, \"Cp1256\", \"windows-1256\"), m.UnicodeBigUnmarked = new m(A.UnicodeBigUnmarked, 25, \"UnicodeBigUnmarked\", \"UTF-16BE\", \"UnicodeBig\"), m.UTF8 = new m(A.UTF8, 26, \"UTF8\", \"UTF-8\"), m.ASCII = new m(A.ASCII, Int32Array.from([27, 170]), \"ASCII\", \"US-ASCII\"), m.Big5 = new m(A.Big5, 28, \"Big5\"), m.GB18030 = new m(A.GB18030, 29, \"GB18030\", \"GB2312\", \"EUC_CN\", \"GBK\"), m.EUC_KR = new m(A.EUC_KR, 30, \"EUC_KR\", \"EUC-KR\");\r\n    class _ extends i {}\r\n    _.kind = \"UnsupportedOperationException\";\r\n    class I {\r\n        static decode(t, e) {\r\n            const r = this.encodingName(e);\r\n            return this.customDecoder ? this.customDecoder(t, r) : \"undefined\" == typeof TextDecoder || this.shouldDecodeOnFallback(r) ? this.decodeFallback(t, r) : new TextDecoder(r).decode(t)\r\n        }\r\n        static shouldDecodeOnFallback(t) {\r\n            return !I.isBrowser() && \"ISO-8859-1\" === t\r\n        }\r\n        static encode(t, e) {\r\n            const r = this.encodingName(e);\r\n            return this.customEncoder ? this.customEncoder(t, r) : \"undefined\" == typeof TextEncoder ? this.encodeFallback(t) : (new TextEncoder).encode(t)\r\n        }\r\n        static isBrowser() {\r\n            return \"undefined\" != typeof window && \"[object Window]\" === {}.toString.call(window)\r\n        }\r\n        static encodingName(t) {\r\n            return \"string\" == typeof t ? t : t.getName()\r\n        }\r\n        static encodingCharacterSet(t) {\r\n            return t instanceof m ? t : m.getCharacterSetECIByName(t)\r\n        }\r\n        static decodeFallback(t, e) {\r\n            const r = this.encodingCharacterSet(e);\r\n            if (I.isDecodeFallbackSupported(r)) {\r\n                let e = \"\";\r\n                for (let r = 0, n = t.length; r < n; r++) {\r\n                    let n = t[r].toString(16);\r\n                    n.length < 2 && (n = \"0\" + n), e += \"%\" + n\r\n                }\r\n                return decodeURIComponent(e)\r\n            }\r\n            if (r.equals(m.UnicodeBigUnmarked)) return String.fromCharCode.apply(null, new Uint16Array(t.buffer));\r\n            throw new _(`Encoding ${this.encodingName(e)} not supported by fallback.`)\r\n        }\r\n        static isDecodeFallbackSupported(t) {\r\n            return t.equals(m.UTF8) || t.equals(m.ISO8859_1) || t.equals(m.ASCII)\r\n        }\r\n        static encodeFallback(t) {\r\n            const e = btoa(unescape(encodeURIComponent(t))).split(\"\"),\r\n                    r = [];\r\n            for (let t = 0; t < e.length; t++) r.push(e[t].charCodeAt(0));\r\n            return new Uint8Array(r)\r\n        }\r\n    }\r\n    class S {\r\n        static castAsNonUtf8Char(t, e = null) {\r\n            const r = e ? e.getName() : this.ISO88591;\r\n            return I.decode(new Uint8Array([t]), r)\r\n        }\r\n        static guessEncoding(t, e) {\r\n            if (null != e && void 0 !== e.get(C.CHARACTER_SET)) return e.get(C.CHARACTER_SET).toString();\r\n            const r = t.length;\r\n            let n = !0,\r\n                    i = !0,\r\n                    s = !0,\r\n                    o = 0,\r\n                    a = 0,\r\n                    l = 0,\r\n                    h = 0,\r\n                    c = 0,\r\n                    u = 0,\r\n                    d = 0,\r\n                    g = 0,\r\n                    f = 0,\r\n                    w = 0,\r\n                    A = 0;\r\n            const E = t.length > 3 && 239 === t[0] && 187 === t[1] && 191 === t[2];\r\n            for (let e = 0; e < r && (n || i || s); e++) {\r\n                const r = 255 & t[e];\r\n                s && (o > 0 ? 0 == (128 & r) ? s = !1 : o-- : 0 != (128 & r) && (0 == (64 & r) ? s = !1 : (o++, 0 == (32 & r) ? a++ : (o++, 0 == (16 & r) ? l++ : (o++, 0 == (8 & r) ? h++ : s = !1))))), n && (r > 127 && r < 160 ? n = !1 : r > 159 && (r < 192 || 215 === r || 247 === r) && A++), i && (c > 0 ? r < 64 || 127 === r || r > 252 ? i = !1 : c-- : 128 === r || 160 === r || r > 239 ? i = !1 : r > 160 && r < 224 ? (u++, g = 0, ++d > f && (f = d)) : r > 127 ? (c++, d = 0, ++g > w && (w = g)) : (d = 0, g = 0))\r\n            }\r\n            return s && o > 0 && (s = !1), i && c > 0 && (i = !1), s && (E || a + l + h > 0) ? S.UTF8 : i && (S.ASSUME_SHIFT_JIS || f >= 3 || w >= 3) ? S.SHIFT_JIS : n && i ? 2 === f && 2 === u || 10 * A >= r ? S.SHIFT_JIS : S.ISO88591 : n ? S.ISO88591 : i ? S.SHIFT_JIS : s ? S.UTF8 : S.PLATFORM_DEFAULT_ENCODING\r\n        }\r\n        static format(t, ...e) {\r\n            let r = -1;\r\n            return t.replace(/%(-)?(0?[0-9]+)?([.][0-9]+)?([#][0-9]+)?([scfpexd%])/g, function(t, n, i, s, o, a) {\r\n                if (\"%%\" === t) return \"%\";\r\n                if (void 0 === e[++r]) return;\r\n                t = s ? parseInt(s.substr(1)) : void 0;\r\n                let l, h = o ? parseInt(o.substr(1)) : void 0;\r\n                switch (a) {\r\n                    case \"s\":\r\n                        l = e[r];\r\n                        break;\r\n                    case \"c\":\r\n                        l = e[r][0];\r\n                        break;\r\n                    case \"f\":\r\n                        l = parseFloat(e[r]).toFixed(t);\r\n                        break;\r\n                    case \"p\":\r\n                        l = parseFloat(e[r]).toPrecision(t);\r\n                        break;\r\n                    case \"e\":\r\n                        l = parseFloat(e[r]).toExponential(t);\r\n                        break;\r\n                    case \"x\":\r\n                        l = parseInt(e[r]).toString(h || 16);\r\n                        break;\r\n                    case \"d\":\r\n                        l = parseFloat(parseInt(e[r], h || 10).toPrecision(t)).toFixed(0)\r\n                }\r\n                l = \"object\" == typeof l ? JSON.stringify(l) : (+l).toString(h);\r\n                let c = parseInt(i),\r\n                        u = i && i[0] + \"\" == \"0\" ? \"0\" : \" \";\r\n                for (; l.length < c;) l = void 0 !== n ? l + u : u + l;\r\n                return l\r\n            })\r\n        }\r\n        static getBytes(t, e) {\r\n            return I.encode(t, e)\r\n        }\r\n        static getCharCode(t, e = 0) {\r\n            return t.charCodeAt(e)\r\n        }\r\n        static getCharAt(t) {\r\n            return String.fromCharCode(t)\r\n        }\r\n    }\r\n    S.SHIFT_JIS = m.SJIS.getName(), S.GB2312 = \"GB2312\", S.ISO88591 = m.ISO8859_1.getName(), S.EUC_JP = \"EUC_JP\", S.UTF8 = m.UTF8.getName(), S.PLATFORM_DEFAULT_ENCODING = S.UTF8, S.ASSUME_SHIFT_JIS = !1;\r\n    class p {\r\n        constructor(t = \"\") {\r\n            this.value = t\r\n        }\r\n        enableDecoding(t) {\r\n            return this.encoding = t, this\r\n        }\r\n        append(t) {\r\n            return \"string\" == typeof t ? this.value += t.toString() : this.encoding ? this.value += S.castAsNonUtf8Char(t, this.encoding) : this.value += String.fromCharCode(t), this\r\n        }\r\n        appendChars(t, e, r) {\r\n            for (let n = e; e < e + r; n++) this.append(t[n]);\r\n            return this\r\n        }\r\n        length() {\r\n            return this.value.length\r\n        }\r\n        charAt(t) {\r\n            return this.value.charAt(t)\r\n        }\r\n        deleteCharAt(t) {\r\n            this.value = this.value.substr(0, t) + this.value.substring(t + 1)\r\n        }\r\n        setCharAt(t, e) {\r\n            this.value = this.value.substr(0, t) + e + this.value.substr(t + 1)\r\n        }\r\n        substring(t, e) {\r\n            return this.value.substring(t, e)\r\n        }\r\n        setLengthToZero() {\r\n            this.value = \"\"\r\n        }\r\n        toString() {\r\n            return this.value\r\n        }\r\n        insert(t, e) {\r\n            this.value = this.value.substr(0, t) + e + this.value.substr(t + e.length)\r\n        }\r\n    }\r\n    class T {\r\n        constructor(t, e, r, n) {\r\n            if (this.width = t, this.height = e, this.rowSize = r, this.bits = n, null == e && (e = t), this.height = e, t < 1 || e < 1) throw new o(\"Both dimensions must be greater than 0\");\r\n            null == r && (r = Math.floor((t + 31) / 32)), this.rowSize = r, null == n && (this.bits = new Int32Array(this.rowSize * this.height))\r\n        }\r\n        static parseFromBooleanArray(t) {\r\n            const e = t.length,\r\n                    r = t[0].length,\r\n                    n = new T(r, e);\r\n            for (let i = 0; i < e; i++) {\r\n                const e = t[i];\r\n                for (let t = 0; t < r; t++) e[t] && n.set(t, i)\r\n            }\r\n            return n\r\n        }\r\n        static parseFromString(t, e, r) {\r\n            if (null === t) throw new o(\"stringRepresentation cannot be null\");\r\n            const n = new Array(t.length);\r\n            let i = 0,\r\n                    s = 0,\r\n                    a = -1,\r\n                    l = 0,\r\n                    h = 0;\r\n            for (; h < t.length;)\r\n                if (\"\\n\" === t.charAt(h) || \"\\r\" === t.charAt(h)) {\r\n                    if (i > s) {\r\n                        if (-1 === a) a = i - s;\r\n                        else if (i - s !== a) throw new o(\"row lengths do not match\");\r\n                        s = i, l++\r\n                    }\r\n                    h++\r\n                } else if (t.substring(h, h + e.length) === e) h += e.length, n[i] = !0, i++;\r\n                else {\r\n                    if (t.substring(h, h + r.length) !== r) throw new o(\"illegal character encountered: \" + t.substring(h));\r\n                    h += r.length, n[i] = !1, i++\r\n                }\r\n            if (i > s) {\r\n                if (-1 === a) a = i - s;\r\n                else if (i - s !== a) throw new o(\"row lengths do not match\");\r\n                l++\r\n            }\r\n            const c = new T(a, l);\r\n            for (let t = 0; t < i; t++) n[t] && c.set(Math.floor(t % a), Math.floor(t / a));\r\n            return c\r\n        }\r\n        get(t, e) {\r\n            const r = e * this.rowSize + Math.floor(t / 32);\r\n            return 0 != (this.bits[r] >>> (31 & t) & 1)\r\n        }\r\n        set(t, e) {\r\n            const r = e * this.rowSize + Math.floor(t / 32);\r\n            this.bits[r] |= 1 << (31 & t) & 4294967295\r\n        }\r\n        unset(t, e) {\r\n            const r = e * this.rowSize + Math.floor(t / 32);\r\n            this.bits[r] &= ~(1 << (31 & t) & 4294967295)\r\n        }\r\n        flip(t, e) {\r\n            const r = e * this.rowSize + Math.floor(t / 32);\r\n            this.bits[r] ^= 1 << (31 & t) & 4294967295\r\n        }\r\n        xor(t) {\r\n            if (this.width !== t.getWidth() || this.height !== t.getHeight() || this.rowSize !== t.getRowSize()) throw new o(\"input matrix dimensions do not match\");\r\n            const e = new w(Math.floor(this.width / 32) + 1),\r\n                    r = this.rowSize,\r\n                    n = this.bits;\r\n            for (let i = 0, s = this.height; i < s; i++) {\r\n                const s = i * r,\r\n                        o = t.getRow(i, e).getBitArray();\r\n                for (let t = 0; t < r; t++) n[s + t] ^= o[t]\r\n            }\r\n        }\r\n        clear() {\r\n            const t = this.bits,\r\n                    e = t.length;\r\n            for (let r = 0; r < e; r++) t[r] = 0\r\n        }\r\n        setRegion(t, e, r, n) {\r\n            if (e < 0 || t < 0) throw new o(\"Left and top must be nonnegative\");\r\n            if (n < 1 || r < 1) throw new o(\"Height and width must be at least 1\");\r\n            const i = t + r,\r\n                    s = e + n;\r\n            if (s > this.height || i > this.width) throw new o(\"The region must fit inside the matrix\");\r\n            const a = this.rowSize,\r\n                    l = this.bits;\r\n            for (let r = e; r < s; r++) {\r\n                const e = r * a;\r\n                for (let r = t; r < i; r++) l[e + Math.floor(r / 32)] |= 1 << (31 & r) & 4294967295\r\n            }\r\n        }\r\n        getRow(t, e) {\r\n            null == e || e.getSize() < this.width ? e = new w(this.width) : e.clear();\r\n            const r = this.rowSize,\r\n                    n = this.bits,\r\n                    i = t * r;\r\n            for (let t = 0; t < r; t++) e.setBulk(32 * t, n[i + t]);\r\n            return e\r\n        }\r\n        setRow(t, e) {\r\n            c.arraycopy(e.getBitArray(), 0, this.bits, t * this.rowSize, this.rowSize)\r\n        }\r\n        rotate180() {\r\n            const t = this.getWidth(),\r\n                    e = this.getHeight();\r\n            let r = new w(t),\r\n                    n = new w(t);\r\n            for (let t = 0, i = Math.floor((e + 1) / 2); t < i; t++) r = this.getRow(t, r), n = this.getRow(e - 1 - t, n), r.reverse(), n.reverse(), this.setRow(t, n), this.setRow(e - 1 - t, r)\r\n        }\r\n        getEnclosingRectangle() {\r\n            const t = this.width,\r\n                    e = this.height,\r\n                    r = this.rowSize,\r\n                    n = this.bits;\r\n            let i = t,\r\n                    s = e,\r\n                    o = -1,\r\n                    a = -1;\r\n            for (let t = 0; t < e; t++)\r\n                for (let e = 0; e < r; e++) {\r\n                    const l = n[t * r + e];\r\n                    if (0 !== l) {\r\n                        if (t < s && (s = t), t > a && (a = t), 32 * e < i) {\r\n                            let t = 0;\r\n                            for (; 0 == (l << 31 - t & 4294967295);) t++;\r\n                            32 * e + t < i && (i = 32 * e + t)\r\n                        }\r\n                        if (32 * e + 31 > o) {\r\n                            let t = 31;\r\n                            for (; l >>> t == 0;) t--;\r\n                            32 * e + t > o && (o = 32 * e + t)\r\n                        }\r\n                    }\r\n                }\r\n            return o < i || a < s ? null : Int32Array.from([i, s, o - i + 1, a - s + 1])\r\n        }\r\n        getTopLeftOnBit() {\r\n            const t = this.rowSize,\r\n                    e = this.bits;\r\n            let r = 0;\r\n            for (; r < e.length && 0 === e[r];) r++;\r\n            if (r === e.length) return null;\r\n            const n = r / t;\r\n            let i = r % t * 32;\r\n            const s = e[r];\r\n            let o = 0;\r\n            for (; 0 == (s << 31 - o & 4294967295);) o++;\r\n            return i += o, Int32Array.from([i, n])\r\n        }\r\n        getBottomRightOnBit() {\r\n            const t = this.rowSize,\r\n                    e = this.bits;\r\n            let r = e.length - 1;\r\n            for (; r >= 0 && 0 === e[r];) r--;\r\n            if (r < 0) return null;\r\n            const n = Math.floor(r / t);\r\n            let i = 32 * Math.floor(r % t);\r\n            const s = e[r];\r\n            let o = 31;\r\n            for (; s >>> o == 0;) o--;\r\n            return i += o, Int32Array.from([i, n])\r\n        }\r\n        getWidth() {\r\n            return this.width\r\n        }\r\n        getHeight() {\r\n            return this.height\r\n        }\r\n        getRowSize() {\r\n            return this.rowSize\r\n        }\r\n        equals(t) {\r\n            if (!(t instanceof T)) return !1;\r\n            const e = t;\r\n            return this.width === e.width && this.height === e.height && this.rowSize === e.rowSize && g.equals(this.bits, e.bits)\r\n        }\r\n        hashCode() {\r\n            let t = this.width;\r\n            return t = 31 * (t = 31 * (t = 31 * (t = 31 * t + this.width) + this.height) + this.rowSize) + g.hashCode(this.bits)\r\n        }\r\n        toString(t = \"X \", e = \"  \", r = \"\\n\") {\r\n            return this.buildToString(t, e, r)\r\n        }\r\n        buildToString(t, e, r) {\r\n            let n = new p;\r\n            for (let i = 0, s = this.height; i < s; i++) {\r\n                for (let r = 0, s = this.width; r < s; r++) n.append(this.get(r, i) ? t : e);\r\n                n.append(r)\r\n            }\r\n            return n.toString()\r\n        }\r\n        clone() {\r\n            return new T(this.width, this.height, this.rowSize, this.bits.slice())\r\n        }\r\n    }\r\n    class R extends i {\r\n        static getNotFoundInstance() {\r\n            return new R\r\n        }\r\n    }\r\n    R.kind = \"NotFoundException\";\r\n    class N extends h {\r\n        constructor(t) {\r\n            super(t), this.luminances = N.EMPTY, this.buckets = new Int32Array(N.LUMINANCE_BUCKETS)\r\n        }\r\n        getBlackRow(t, e) {\r\n            const r = this.getLuminanceSource(),\r\n                    n = r.getWidth();\r\n            null == e || e.getSize() < n ? e = new w(n) : e.clear(), this.initArrays(n);\r\n            const i = r.getRow(t, this.luminances),\r\n                    s = this.buckets;\r\n            for (let t = 0; t < n; t++) s[(255 & i[t]) >> N.LUMINANCE_SHIFT]++;\r\n            const o = N.estimateBlackPoint(s);\r\n            if (n < 3)\r\n                for (let t = 0; t < n; t++)(255 & i[t]) < o && e.set(t);\r\n            else {\r\n                let t = 255 & i[0],\r\n                        r = 255 & i[1];\r\n                for (let s = 1; s < n - 1; s++) {\r\n                    const n = 255 & i[s + 1];\r\n                    (4 * r - t - n) / 2 < o && e.set(s), t = r, r = n\r\n                }\r\n            }\r\n            return e\r\n        }\r\n        getBlackMatrix() {\r\n            const t = this.getLuminanceSource(),\r\n                    e = t.getWidth(),\r\n                    r = t.getHeight(),\r\n                    n = new T(e, r);\r\n            this.initArrays(e);\r\n            const i = this.buckets;\r\n            for (let n = 1; n < 5; n++) {\r\n                const s = Math.floor(r * n / 5),\r\n                        o = t.getRow(s, this.luminances),\r\n                        a = Math.floor(4 * e / 5);\r\n                for (let t = Math.floor(e / 5); t < a; t++) {\r\n                    i[(255 & o[t]) >> N.LUMINANCE_SHIFT]++\r\n                }\r\n            }\r\n            const s = N.estimateBlackPoint(i),\r\n                    o = t.getMatrix();\r\n            for (let t = 0; t < r; t++) {\r\n                const r = t * e;\r\n                for (let i = 0; i < e; i++) {\r\n                    (255 & o[r + i]) < s && n.set(i, t)\r\n                }\r\n            }\r\n            return n\r\n        }\r\n        createBinarizer(t) {\r\n            return new N(t)\r\n        }\r\n        initArrays(t) {\r\n            this.luminances.length < t && (this.luminances = new Uint8ClampedArray(t));\r\n            const e = this.buckets;\r\n            for (let t = 0; t < N.LUMINANCE_BUCKETS; t++) e[t] = 0\r\n        }\r\n        static estimateBlackPoint(t) {\r\n            const e = t.length;\r\n            let r = 0,\r\n                    n = 0,\r\n                    i = 0;\r\n            for (let s = 0; s < e; s++) t[s] > i && (n = s, i = t[s]), t[s] > r && (r = t[s]);\r\n            let s = 0,\r\n                    o = 0;\r\n            for (let r = 0; r < e; r++) {\r\n                const e = r - n,\r\n                        i = t[r] * e * e;\r\n                i > o && (s = r, o = i)\r\n            }\r\n            if (n > s) {\r\n                const t = n;\r\n                n = s, s = t\r\n            }\r\n            if (s - n <= e / 16) throw new R;\r\n            let a = s - 1,\r\n                    l = -1;\r\n            for (let e = s - 1; e > n; e--) {\r\n                const i = e - n,\r\n                        o = i * i * (s - e) * (r - t[e]);\r\n                o > l && (a = e, l = o)\r\n            }\r\n            return a << N.LUMINANCE_SHIFT\r\n        }\r\n    }\r\n    N.LUMINANCE_BITS = 5, N.LUMINANCE_SHIFT = 8 - N.LUMINANCE_BITS, N.LUMINANCE_BUCKETS = 1 << N.LUMINANCE_BITS, N.EMPTY = Uint8ClampedArray.from([0]);\r\n    class D extends N {\r\n        constructor(t) {\r\n            super(t), this.matrix = null\r\n        }\r\n        getBlackMatrix() {\r\n            if (null !== this.matrix) return this.matrix;\r\n            const t = this.getLuminanceSource(),\r\n                    e = t.getWidth(),\r\n                    r = t.getHeight();\r\n            if (e >= D.MINIMUM_DIMENSION && r >= D.MINIMUM_DIMENSION) {\r\n                const n = t.getMatrix();\r\n                let i = e >> D.BLOCK_SIZE_POWER;\r\n                0 != (e & D.BLOCK_SIZE_MASK) && i++;\r\n                let s = r >> D.BLOCK_SIZE_POWER;\r\n                0 != (r & D.BLOCK_SIZE_MASK) && s++;\r\n                const o = D.calculateBlackPoints(n, i, s, e, r),\r\n                        a = new T(e, r);\r\n                D.calculateThresholdForBlock(n, i, s, e, r, o, a), this.matrix = a\r\n            } else this.matrix = super.getBlackMatrix();\r\n            return this.matrix\r\n        }\r\n        createBinarizer(t) {\r\n            return new D(t)\r\n        }\r\n        static calculateThresholdForBlock(t, e, r, n, i, s, o) {\r\n            const a = i - D.BLOCK_SIZE,\r\n                    l = n - D.BLOCK_SIZE;\r\n            for (let i = 0; i < r; i++) {\r\n                let h = i << D.BLOCK_SIZE_POWER;\r\n                h > a && (h = a);\r\n                const c = D.cap(i, 2, r - 3);\r\n                for (let r = 0; r < e; r++) {\r\n                    let i = r << D.BLOCK_SIZE_POWER;\r\n                    i > l && (i = l);\r\n                    const a = D.cap(r, 2, e - 3);\r\n                    let u = 0;\r\n                    for (let t = -2; t <= 2; t++) {\r\n                        const e = s[c + t];\r\n                        u += e[a - 2] + e[a - 1] + e[a] + e[a + 1] + e[a + 2]\r\n                    }\r\n                    const d = u / 25;\r\n                    D.thresholdBlock(t, i, h, d, n, o)\r\n                }\r\n            }\r\n        }\r\n        static cap(t, e, r) {\r\n            return t < e ? e : t > r ? r : t\r\n        }\r\n        static thresholdBlock(t, e, r, n, i, s) {\r\n            for (let o = 0, a = r * i + e; o < D.BLOCK_SIZE; o++, a += i)\r\n                for (let i = 0; i < D.BLOCK_SIZE; i++)(255 & t[a + i]) <= n && s.set(e + i, r + o)\r\n        }\r\n        static calculateBlackPoints(t, e, r, n, i) {\r\n            const s = i - D.BLOCK_SIZE,\r\n                    o = n - D.BLOCK_SIZE,\r\n                    a = new Array(r);\r\n            for (let i = 0; i < r; i++) {\r\n                a[i] = new Int32Array(e);\r\n                let r = i << D.BLOCK_SIZE_POWER;\r\n                r > s && (r = s);\r\n                for (let s = 0; s < e; s++) {\r\n                    let e = s << D.BLOCK_SIZE_POWER;\r\n                    e > o && (e = o);\r\n                    let l = 0,\r\n                            h = 255,\r\n                            c = 0;\r\n                    for (let i = 0, s = r * n + e; i < D.BLOCK_SIZE; i++, s += n) {\r\n                        for (let e = 0; e < D.BLOCK_SIZE; e++) {\r\n                            const r = 255 & t[s + e];\r\n                            l += r, r < h && (h = r), r > c && (c = r)\r\n                        }\r\n                        if (c - h > D.MIN_DYNAMIC_RANGE)\r\n                            for (i++, s += n; i < D.BLOCK_SIZE; i++, s += n)\r\n                                for (let e = 0; e < D.BLOCK_SIZE; e++) l += 255 & t[s + e]\r\n                    }\r\n                    let u = l >> 2 * D.BLOCK_SIZE_POWER;\r\n                    if (c - h <= D.MIN_DYNAMIC_RANGE && (u = h / 2, i > 0 && s > 0)) {\r\n                        const t = (a[i - 1][s] + 2 * a[i][s - 1] + a[i - 1][s - 1]) / 4;\r\n                        h < t && (u = t)\r\n                    }\r\n                    a[i][s] = u\r\n                }\r\n            }\r\n            return a\r\n        }\r\n    }\r\n    D.BLOCK_SIZE_POWER = 3, D.BLOCK_SIZE = 1 << D.BLOCK_SIZE_POWER, D.BLOCK_SIZE_MASK = D.BLOCK_SIZE - 1, D.MINIMUM_DIMENSION = 5 * D.BLOCK_SIZE, D.MIN_DYNAMIC_RANGE = 24;\r\n    class y {\r\n        constructor(t, e) {\r\n            this.width = t, this.height = e\r\n        }\r\n        getWidth() {\r\n            return this.width\r\n        }\r\n        getHeight() {\r\n            return this.height\r\n        }\r\n        isCropSupported() {\r\n            return !1\r\n        }\r\n        crop(t, e, r, n) {\r\n            throw new _(\"This luminance source does not support cropping.\")\r\n        }\r\n        isRotateSupported() {\r\n            return !1\r\n        }\r\n        rotateCounterClockwise() {\r\n            throw new _(\"This luminance source does not support rotation by 90 degrees.\")\r\n        }\r\n        rotateCounterClockwise45() {\r\n            throw new _(\"This luminance source does not support rotation by 45 degrees.\")\r\n        }\r\n        toString() {\r\n            const t = new Uint8ClampedArray(this.width);\r\n            let e = new p;\r\n            for (let r = 0; r < this.height; r++) {\r\n                const n = this.getRow(r, t);\r\n                for (let t = 0; t < this.width; t++) {\r\n                    const r = 255 & n[t];\r\n                    let i;\r\n                    i = r < 64 ? \"#\" : r < 128 ? \"+\" : r < 192 ? \".\" : \" \", e.append(i)\r\n                }\r\n                e.append(\"\\n\")\r\n            }\r\n            return e.toString()\r\n        }\r\n    }\r\n    class O extends y {\r\n        constructor(t) {\r\n            super(t.getWidth(), t.getHeight()), this.delegate = t\r\n        }\r\n        getRow(t, e) {\r\n            const r = this.delegate.getRow(t, e),\r\n                    n = this.getWidth();\r\n            for (let t = 0; t < n; t++) r[t] = 255 - (255 & r[t]);\r\n            return r\r\n        }\r\n        getMatrix() {\r\n            const t = this.delegate.getMatrix(),\r\n                    e = this.getWidth() * this.getHeight(),\r\n                    r = new Uint8ClampedArray(e);\r\n            for (let n = 0; n < e; n++) r[n] = 255 - (255 & t[n]);\r\n            return r\r\n        }\r\n        isCropSupported() {\r\n            return this.delegate.isCropSupported()\r\n        }\r\n        crop(t, e, r, n) {\r\n            return new O(this.delegate.crop(t, e, r, n))\r\n        }\r\n        isRotateSupported() {\r\n            return this.delegate.isRotateSupported()\r\n        }\r\n        invert() {\r\n            return this.delegate\r\n        }\r\n        rotateCounterClockwise() {\r\n            return new O(this.delegate.rotateCounterClockwise())\r\n        }\r\n        rotateCounterClockwise45() {\r\n            return new O(this.delegate.rotateCounterClockwise45())\r\n        }\r\n    }\r\n    class M extends y {\r\n        constructor(t) {\r\n            super(t.width, t.height), this.canvas = t, this.tempCanvasElement = null, this.buffer = M.makeBufferFromCanvasImageData(t)\r\n        }\r\n        static makeBufferFromCanvasImageData(t) {\r\n            const e = t.getContext(\"2d\").getImageData(0, 0, t.width, t.height);\r\n            return M.toGrayscaleBuffer(e.data, t.width, t.height)\r\n        }\r\n        static toGrayscaleBuffer(t, e, r) {\r\n            const n = new Uint8ClampedArray(e * r);\r\n            for (let e = 0, r = 0, i = t.length; e < i; e += 4, r++) {\r\n                let i;\r\n                if (0 === t[e + 3]) i = 255;\r\n                else {\r\n                    i = 306 * t[e] + 601 * t[e + 1] + 117 * t[e + 2] + 512 >> 10\r\n                }\r\n                n[r] = i\r\n            }\r\n            return n\r\n        }\r\n        getRow(t, e) {\r\n            if (t < 0 || t >= this.getHeight()) throw new o(\"Requested row is outside the image: \" + t);\r\n            const r = this.getWidth(),\r\n                    n = t * r;\r\n            return null === e ? e = this.buffer.slice(n, n + r) : (e.length < r && (e = new Uint8ClampedArray(r)), e.set(this.buffer.slice(n, n + r))), e\r\n        }\r\n        getMatrix() {\r\n            return this.buffer\r\n        }\r\n        isCropSupported() {\r\n            return !0\r\n        }\r\n        crop(t, e, r, n) {\r\n            return super.crop(t, e, r, n), this\r\n        }\r\n        isRotateSupported() {\r\n            return !0\r\n        }\r\n        rotateCounterClockwise() {\r\n            return this.rotate(-90), this\r\n        }\r\n        rotateCounterClockwise45() {\r\n            return this.rotate(-45), this\r\n        }\r\n        getTempCanvasElement() {\r\n            if (null === this.tempCanvasElement) {\r\n                const t = this.canvas.ownerDocument.createElement(\"canvas\");\r\n                t.width = this.canvas.width, t.height = this.canvas.height, this.tempCanvasElement = t\r\n            }\r\n            return this.tempCanvasElement\r\n        }\r\n        rotate(t) {\r\n            const e = this.getTempCanvasElement(),\r\n                    r = e.getContext(\"2d\"),\r\n                    n = t * M.DEGREE_TO_RADIANS,\r\n                    i = this.canvas.width,\r\n                    s = this.canvas.height,\r\n                    o = Math.ceil(Math.abs(Math.cos(n)) * i + Math.abs(Math.sin(n)) * s),\r\n                    a = Math.ceil(Math.abs(Math.sin(n)) * i + Math.abs(Math.cos(n)) * s);\r\n            return e.width = o, e.height = a, r.translate(o / 2, a / 2), r.rotate(n), r.drawImage(this.canvas, i / -2, s / -2), this.buffer = M.makeBufferFromCanvasImageData(e), this\r\n        }\r\n        invert() {\r\n            return new O(this)\r\n        }\r\n    }\r\n    M.DEGREE_TO_RADIANS = Math.PI / 180;\r\n    class b {\r\n        constructor(t, e, r) {\r\n            this.deviceId = t, this.label = e, this.kind = \"videoinput\", this.groupId = r || void 0\r\n        }\r\n        toJSON() {\r\n            return {\r\n                kind: this.kind,\r\n                groupId: this.groupId,\r\n                deviceId: this.deviceId,\r\n                label: this.label\r\n            }\r\n        }\r\n    }\r\n    var B, P = (globalThis || global || self || window ? (globalThis || global || self || window || void 0).__awaiter : void 0) || function(t, e, r, n) {\r\n        return new(r || (r = Promise))(function(i, s) {\r\n            function o(t) {\r\n                try {\r\n                    l(n.next(t))\r\n                } catch (t) {\r\n                    s(t)\r\n                }\r\n            }\r\n\r\n            function a(t) {\r\n                try {\r\n                    l(n.throw(t))\r\n                } catch (t) {\r\n                    s(t)\r\n                }\r\n            }\r\n\r\n            function l(t) {\r\n                var e;\r\n                t.done ? i(t.value) : (e = t.value, e instanceof r ? e : new r(function(t) {\r\n                    t(e)\r\n                })).then(o, a)\r\n            }\r\n            l((n = n.apply(t, e || [])).next())\r\n        })\r\n    };\r\n    class L {\r\n        constructor(t, e = 500, r) {\r\n            this.reader = t, this.timeBetweenScansMillis = e, this._hints = r, this._stopContinuousDecode = !1, this._stopAsyncDecode = !1, this._timeBetweenDecodingAttempts = 0\r\n        }\r\n        get hasNavigator() {\r\n            return \"undefined\" != typeof navigator\r\n        }\r\n        get isMediaDevicesSuported() {\r\n            return this.hasNavigator && !!navigator.mediaDevices\r\n        }\r\n        get canEnumerateDevices() {\r\n            return !(!this.isMediaDevicesSuported || !navigator.mediaDevices.enumerateDevices)\r\n        }\r\n        get timeBetweenDecodingAttempts() {\r\n            return this._timeBetweenDecodingAttempts\r\n        }\r\n        set timeBetweenDecodingAttempts(t) {\r\n            this._timeBetweenDecodingAttempts = t < 0 ? 0 : t\r\n        }\r\n        set hints(t) {\r\n            this._hints = t || null\r\n        }\r\n        get hints() {\r\n            return this._hints\r\n        }\r\n        listVideoInputDevices() {\r\n            return P(this, void 0, void 0, function*() {\r\n                if (!this.hasNavigator) throw new Error(\"Can't enumerate devices, navigator is not present.\");\r\n                if (!this.canEnumerateDevices) throw new Error(\"Can't enumerate devices, method not supported.\");\r\n                const t = yield navigator.mediaDevices.enumerateDevices(), e = [];\r\n                for (const r of t) {\r\n                    const t = \"video\" === r.kind ? \"videoinput\" : r.kind;\r\n                    if (\"videoinput\" !== t) continue;\r\n                    const n = {\r\n                        deviceId: r.deviceId || r.id,\r\n                        label: r.label || `Video device ${e.length+1}`,\r\n                        kind: t,\r\n                        groupId: r.groupId\r\n                    };\r\n                    e.push(n)\r\n                }\r\n                return e\r\n            })\r\n        }\r\n        getVideoInputDevices() {\r\n            return P(this, void 0, void 0, function*() {\r\n                return (yield this.listVideoInputDevices()).map(t => new b(t.deviceId, t.label))\r\n            })\r\n        }\r\n        findDeviceById(t) {\r\n            return P(this, void 0, void 0, function*() {\r\n                const e = yield this.listVideoInputDevices();\r\n                return e ? e.find(e => e.deviceId === t) : null\r\n            })\r\n        }\r\n        decodeFromInputVideoDevice(t, e) {\r\n            return P(this, void 0, void 0, function*() {\r\n                return yield this.decodeOnceFromVideoDevice(t, e)\r\n            })\r\n        }\r\n        decodeOnceFromVideoDevice(t, e) {\r\n            return P(this, void 0, void 0, function*() {\r\n                let r;\r\n                this.reset();\r\n                const n = {\r\n                    video: r = t ? {\r\n                        deviceId: {\r\n                            exact: t\r\n                        }\r\n                    } : {\r\n                        facingMode: \"environment\"\r\n                    }\r\n                };\r\n                return yield this.decodeOnceFromConstraints(n, e)\r\n            })\r\n        }\r\n        decodeOnceFromConstraints(t, e) {\r\n            return P(this, void 0, void 0, function*() {\r\n                const r = yield navigator.mediaDevices.getUserMedia(t);\r\n                return yield this.decodeOnceFromStream(r, e)\r\n            })\r\n        }\r\n        decodeOnceFromStream(t, e) {\r\n            return P(this, void 0, void 0, function*() {\r\n                this.reset();\r\n                const r = yield this.attachStreamToVideo(t, e);\r\n                return yield this.decodeOnce(r)\r\n            })\r\n        }\r\n        decodeFromInputVideoDeviceContinuously(t, e, r) {\r\n            return P(this, void 0, void 0, function*() {\r\n                return yield this.decodeFromVideoDevice(t, e, r)\r\n            })\r\n        }\r\n        decodeFromVideoDevice(t, e, r) {\r\n            return P(this, void 0, void 0, function*() {\r\n                let n;\r\n                const i = {\r\n                    video: n = t ? {\r\n                        deviceId: {\r\n                            exact: t\r\n                        }\r\n                    } : {\r\n                        facingMode: \"environment\"\r\n                    }\r\n                };\r\n                return yield this.decodeFromConstraints(i, e, r)\r\n            })\r\n        }\r\n        decodeFromConstraints(t, e, r) {\r\n            return P(this, void 0, void 0, function*() {\r\n                const n = yield navigator.mediaDevices.getUserMedia(t);\r\n                return yield this.decodeFromStream(n, e, r)\r\n            })\r\n        }\r\n        decodeFromStream(t, e, r) {\r\n            return P(this, void 0, void 0, function*() {\r\n                this.reset();\r\n                const n = yield this.attachStreamToVideo(t, e);\r\n                return yield this.decodeContinuously(n, r)\r\n            })\r\n        }\r\n        stopAsyncDecode() {\r\n            this._stopAsyncDecode = !0\r\n        }\r\n        stopContinuousDecode() {\r\n            this._stopContinuousDecode = !0\r\n        }\r\n        attachStreamToVideo(t, e) {\r\n            return P(this, void 0, void 0, function*() {\r\n                const r = this.prepareVideoElement(e);\r\n                return this.addVideoSource(r, t), this.videoElement = r, this.stream = t, yield this.playVideoOnLoadAsync(r), r\r\n            })\r\n        }\r\n        playVideoOnLoadAsync(t) {\r\n            return new Promise((e, r) => this.playVideoOnLoad(t, () => e()))\r\n        }\r\n        playVideoOnLoad(t, e) {\r\n            this.videoEndedListener = (() => this.stopStreams()), this.videoCanPlayListener = (() => this.tryPlayVideo(t)), t.addEventListener(\"ended\", this.videoEndedListener), t.addEventListener(\"canplay\", this.videoCanPlayListener), t.addEventListener(\"playing\", e), this.tryPlayVideo(t)\r\n        }\r\n        isVideoPlaying(t) {\r\n            return t.currentTime > 0 && !t.paused && !t.ended && t.readyState > 2\r\n        }\r\n        tryPlayVideo(t) {\r\n            return P(this, void 0, void 0, function*() {\r\n                if (this.isVideoPlaying(t)) console.warn(\"Trying to play video that is already playing.\");\r\n                else try {\r\n                    yield t.play()\r\n                } catch (t) {\r\n                    console.warn(\"It was not possible to play the video.\")\r\n                }\r\n            })\r\n        }\r\n        getMediaElement(t, e) {\r\n            const r = document.getElementById(t);\r\n            if (!r) throw new s(`element with id '${t}' not found`);\r\n            if (r.nodeName.toLowerCase() !== e.toLowerCase()) throw new s(`element with id '${t}' must be an ${e} element`);\r\n            return r\r\n        }\r\n        decodeFromImage(t, e) {\r\n            if (!t && !e) throw new s(\"either imageElement with a src set or an url must be provided\");\r\n            return e && !t ? this.decodeFromImageUrl(e) : this.decodeFromImageElement(t)\r\n        }\r\n        decodeFromVideo(t, e) {\r\n            if (!t && !e) throw new s(\"Either an element with a src set or an URL must be provided\");\r\n            return e && !t ? this.decodeFromVideoUrl(e) : this.decodeFromVideoElement(t)\r\n        }\r\n        decodeFromVideoContinuously(t, e, r) {\r\n            if (void 0 === t && void 0 === e) throw new s(\"Either an element with a src set or an URL must be provided\");\r\n            return e && !t ? this.decodeFromVideoUrlContinuously(e, r) : this.decodeFromVideoElementContinuously(t, r)\r\n        }\r\n        decodeFromImageElement(t) {\r\n            if (!t) throw new s(\"An image element must be provided.\");\r\n            this.reset();\r\n            const e = this.prepareImageElement(t);\r\n            let r;\r\n            return this.imageElement = e, r = this.isImageLoaded(e) ? this.decodeOnce(e, !1, !0) : this._decodeOnLoadImage(e)\r\n        }\r\n        decodeFromVideoElement(t) {\r\n            const e = this._decodeFromVideoElementSetup(t);\r\n            return this._decodeOnLoadVideo(e)\r\n        }\r\n        decodeFromVideoElementContinuously(t, e) {\r\n            const r = this._decodeFromVideoElementSetup(t);\r\n            return this._decodeOnLoadVideoContinuously(r, e)\r\n        }\r\n        _decodeFromVideoElementSetup(t) {\r\n            if (!t) throw new s(\"A video element must be provided.\");\r\n            this.reset();\r\n            const e = this.prepareVideoElement(t);\r\n            return this.videoElement = e, e\r\n        }\r\n        decodeFromImageUrl(t) {\r\n            if (!t) throw new s(\"An URL must be provided.\");\r\n            this.reset();\r\n            const e = this.prepareImageElement();\r\n            this.imageElement = e;\r\n            const r = this._decodeOnLoadImage(e);\r\n            return e.src = t, r\r\n        }\r\n        decodeFromVideoUrl(t) {\r\n            if (!t) throw new s(\"An URL must be provided.\");\r\n            this.reset();\r\n            const e = this.prepareVideoElement(),\r\n                    r = this.decodeFromVideoElement(e);\r\n            return e.src = t, r\r\n        }\r\n        decodeFromVideoUrlContinuously(t, e) {\r\n            if (!t) throw new s(\"An URL must be provided.\");\r\n            this.reset();\r\n            const r = this.prepareVideoElement(),\r\n                    n = this.decodeFromVideoElementContinuously(r, e);\r\n            return r.src = t, n\r\n        }\r\n        _decodeOnLoadImage(t) {\r\n            return new Promise((e, r) => {\r\n                this.imageLoadedListener = (() => this.decodeOnce(t, !1, !0).then(e, r)), t.addEventListener(\"load\", this.imageLoadedListener)\r\n            })\r\n        }\r\n        _decodeOnLoadVideo(t) {\r\n            return P(this, void 0, void 0, function*() {\r\n                return yield this.playVideoOnLoadAsync(t), yield this.decodeOnce(t)\r\n            })\r\n        }\r\n        _decodeOnLoadVideoContinuously(t, e) {\r\n            return P(this, void 0, void 0, function*() {\r\n                yield this.playVideoOnLoadAsync(t), this.decodeContinuously(t, e)\r\n            })\r\n        }\r\n        isImageLoaded(t) {\r\n            return !!t.complete && 0 !== t.naturalWidth\r\n        }\r\n        prepareImageElement(t) {\r\n            let e;\r\n            return void 0 === t && ((e = document.createElement(\"img\")).width = 200, e.height = 200), \"string\" == typeof t && (e = this.getMediaElement(t, \"img\")), t instanceof HTMLImageElement && (e = t), e\r\n        }\r\n        prepareVideoElement(t) {\r\n            let e;\r\n            return t || \"undefined\" == typeof document || ((e = document.createElement(\"video\")).width = 200, e.height = 200), \"string\" == typeof t && (e = this.getMediaElement(t, \"video\")), t instanceof HTMLVideoElement && (e = t), e.setAttribute(\"autoplay\", \"true\"), e.setAttribute(\"muted\", \"true\"), e.setAttribute(\"playsinline\", \"true\"), e\r\n        }\r\n        decodeOnce(t, e = !0, r = !0) {\r\n            this._stopAsyncDecode = !1;\r\n            const n = (i, s) => {\r\n                if (this._stopAsyncDecode) return s(new R(\"Video stream has ended before any code could be detected.\")), void(this._stopAsyncDecode = void 0);\r\n                try {\r\n                    i(this.decode(t))\r\n                } catch (t) {\r\n                    const o = (t instanceof l || t instanceof E) && r;\r\n                    if (e && t instanceof R || o) return setTimeout(n, this._timeBetweenDecodingAttempts, i, s);\r\n                    s(t)\r\n                }\r\n            };\r\n            return new Promise((t, e) => n(t, e))\r\n        }\r\n        decodeContinuously(t, e) {\r\n            this._stopContinuousDecode = !1;\r\n            const r = () => {\r\n                if (this._stopContinuousDecode) this._stopContinuousDecode = void 0;\r\n                else try {\r\n                    const n = this.decode(t);\r\n                    e(n, null), setTimeout(r, this.timeBetweenScansMillis)\r\n                } catch (t) {\r\n                    e(null, t);\r\n                    const n = t instanceof R;\r\n                    (t instanceof l || t instanceof E || n) && setTimeout(r, this._timeBetweenDecodingAttempts)\r\n                }\r\n            };\r\n            r()\r\n        }\r\n        decode(t) {\r\n            const e = this.createBinaryBitmap(t);\r\n            return this.decodeBitmap(e)\r\n        }\r\n        createBinaryBitmap(t) {\r\n            const e = this.getCaptureCanvasContext(t);\r\n            this.drawImageOnCanvas(e, t);\r\n            const r = this.getCaptureCanvas(t),\r\n                    n = new M(r),\r\n                    i = new D(n);\r\n            return new a(i)\r\n        }\r\n        getCaptureCanvasContext(t) {\r\n            if (!this.captureCanvasContext) {\r\n                const e = this.getCaptureCanvas(t).getContext(\"2d\");\r\n                this.captureCanvasContext = e\r\n            }\r\n            return this.captureCanvasContext\r\n        }\r\n        getCaptureCanvas(t) {\r\n            if (!this.captureCanvas) {\r\n                const e = this.createCaptureCanvas(t);\r\n                this.captureCanvas = e\r\n            }\r\n            return this.captureCanvas\r\n        }\r\n        drawImageOnCanvas(t, e) {\r\n            t.drawImage(e, 0, 0)\r\n        }\r\n        decodeBitmap(t) {\r\n            return this.reader.decode(t, this._hints)\r\n        }\r\n        createCaptureCanvas(t) {\r\n            if (\"undefined\" == typeof document) return this._destroyCaptureCanvas(), null;\r\n            const e = document.createElement(\"canvas\");\r\n            let r, n;\r\n            return void 0 !== t && (t instanceof HTMLVideoElement ? (r = t.videoWidth, n = t.videoHeight) : t instanceof HTMLImageElement && (r = t.naturalWidth || t.width, n = t.naturalHeight || t.height)), e.style.width = r + \"px\", e.style.height = n + \"px\", e.width = r, e.height = n, e\r\n        }\r\n        stopStreams() {\r\n            this.stream && (this.stream.getVideoTracks().forEach(t => t.stop()), this.stream = void 0), !1 === this._stopAsyncDecode && this.stopAsyncDecode(), !1 === this._stopContinuousDecode && this.stopContinuousDecode()\r\n        }\r\n        reset() {\r\n            this.stopStreams(), this._destroyVideoElement(), this._destroyImageElement(), this._destroyCaptureCanvas()\r\n        }\r\n        _destroyVideoElement() {\r\n            this.videoElement && (void 0 !== this.videoEndedListener && this.videoElement.removeEventListener(\"ended\", this.videoEndedListener), void 0 !== this.videoPlayingEventListener && this.videoElement.removeEventListener(\"playing\", this.videoPlayingEventListener), void 0 !== this.videoCanPlayListener && this.videoElement.removeEventListener(\"loadedmetadata\", this.videoCanPlayListener), this.cleanVideoSource(this.videoElement), this.videoElement = void 0)\r\n        }\r\n        _destroyImageElement() {\r\n            this.imageElement && (void 0 !== this.imageLoadedListener && this.imageElement.removeEventListener(\"load\", this.imageLoadedListener), this.imageElement.src = void 0, this.imageElement.removeAttribute(\"src\"), this.imageElement = void 0)\r\n        }\r\n        _destroyCaptureCanvas() {\r\n            this.captureCanvasContext = void 0, this.captureCanvas = void 0\r\n        }\r\n        addVideoSource(t, e) {\r\n            try {\r\n                t.srcObject = e\r\n            } catch (r) {\r\n                t.src = URL.createObjectURL(e)\r\n            }\r\n        }\r\n        cleanVideoSource(t) {\r\n            try {\r\n                t.srcObject = null\r\n            } catch (e) {\r\n                t.src = \"\"\r\n            }\r\n            this.videoElement.removeAttribute(\"src\")\r\n        }\r\n    }\r\n    class F {\r\n        constructor(t, e, r = (null == e ? 0 : 8 * e.length), n, i, s = c.currentTimeMillis()) {\r\n            this.text = t, this.rawBytes = e, this.numBits = r, this.resultPoints = n, this.format = i, this.timestamp = s, this.text = t, this.rawBytes = e, this.numBits = null == r ? null == e ? 0 : 8 * e.length : r, this.resultPoints = n, this.format = i, this.resultMetadata = null, this.timestamp = null == s ? c.currentTimeMillis() : s\r\n        }\r\n        getText() {\r\n            return this.text\r\n        }\r\n        getRawBytes() {\r\n            return this.rawBytes\r\n        }\r\n        getNumBits() {\r\n            return this.numBits\r\n        }\r\n        getResultPoints() {\r\n            return this.resultPoints\r\n        }\r\n        getBarcodeFormat() {\r\n            return this.format\r\n        }\r\n        getResultMetadata() {\r\n            return this.resultMetadata\r\n        }\r\n        putMetadata(t, e) {\r\n            null === this.resultMetadata && (this.resultMetadata = new Map), this.resultMetadata.set(t, e)\r\n        }\r\n        putAllMetadata(t) {\r\n            null !== t && (null === this.resultMetadata ? this.resultMetadata = t : this.resultMetadata = new Map(t))\r\n        }\r\n        addResultPoints(t) {\r\n            const e = this.resultPoints;\r\n            if (null === e) this.resultPoints = t;\r\n            else if (null !== t && t.length > 0) {\r\n                const r = new Array(e.length + t.length);\r\n                c.arraycopy(e, 0, r, 0, e.length), c.arraycopy(t, 0, r, e.length, t.length), this.resultPoints = r\r\n            }\r\n        }\r\n        getTimestamp() {\r\n            return this.timestamp\r\n        }\r\n        toString() {\r\n            return this.text\r\n        }\r\n    }! function(t) {\r\n        t[t.AZTEC = 0] = \"AZTEC\", t[t.CODABAR = 1] = \"CODABAR\", t[t.CODE_39 = 2] = \"CODE_39\", t[t.CODE_93 = 3] = \"CODE_93\", t[t.CODE_128 = 4] = \"CODE_128\", t[t.DATA_MATRIX = 5] = \"DATA_MATRIX\", t[t.EAN_8 = 6] = \"EAN_8\", t[t.EAN_13 = 7] = \"EAN_13\", t[t.ITF = 8] = \"ITF\", t[t.MAXICODE = 9] = \"MAXICODE\", t[t.PDF_417 = 10] = \"PDF_417\", t[t.QR_CODE = 11] = \"QR_CODE\", t[t.RSS_14 = 12] = \"RSS_14\", t[t.RSS_EXPANDED = 13] = \"RSS_EXPANDED\", t[t.UPC_A = 14] = \"UPC_A\", t[t.UPC_E = 15] = \"UPC_E\", t[t.UPC_EAN_EXTENSION = 16] = \"UPC_EAN_EXTENSION\"\r\n    }(B || (B = {}));\r\n    var v, k = B;\r\n    ! function(t) {\r\n        t[t.OTHER = 0] = \"OTHER\", t[t.ORIENTATION = 1] = \"ORIENTATION\", t[t.BYTE_SEGMENTS = 2] = \"BYTE_SEGMENTS\", t[t.ERROR_CORRECTION_LEVEL = 3] = \"ERROR_CORRECTION_LEVEL\", t[t.ISSUE_NUMBER = 4] = \"ISSUE_NUMBER\", t[t.SUGGESTED_PRICE = 5] = \"SUGGESTED_PRICE\", t[t.POSSIBLE_COUNTRY = 6] = \"POSSIBLE_COUNTRY\", t[t.UPC_EAN_EXTENSION = 7] = \"UPC_EAN_EXTENSION\", t[t.PDF417_EXTRA_METADATA = 8] = \"PDF417_EXTRA_METADATA\", t[t.STRUCTURED_APPEND_SEQUENCE = 9] = \"STRUCTURED_APPEND_SEQUENCE\", t[t.STRUCTURED_APPEND_PARITY = 10] = \"STRUCTURED_APPEND_PARITY\"\r\n    }(v || (v = {}));\r\n    var x, V, U, H, G, X, W = v;\r\n    class z {\r\n        constructor(t, e, r, n, i = -1, s = -1) {\r\n            this.rawBytes = t, this.text = e, this.byteSegments = r, this.ecLevel = n, this.structuredAppendSequenceNumber = i, this.structuredAppendParity = s, this.numBits = null == t ? 0 : 8 * t.length\r\n        }\r\n        getRawBytes() {\r\n            return this.rawBytes\r\n        }\r\n        getNumBits() {\r\n            return this.numBits\r\n        }\r\n        setNumBits(t) {\r\n            this.numBits = t\r\n        }\r\n        getText() {\r\n            return this.text\r\n        }\r\n        getByteSegments() {\r\n            return this.byteSegments\r\n        }\r\n        getECLevel() {\r\n            return this.ecLevel\r\n        }\r\n        getErrorsCorrected() {\r\n            return this.errorsCorrected\r\n        }\r\n        setErrorsCorrected(t) {\r\n            this.errorsCorrected = t\r\n        }\r\n        getErasures() {\r\n            return this.erasures\r\n        }\r\n        setErasures(t) {\r\n            this.erasures = t\r\n        }\r\n        getOther() {\r\n            return this.other\r\n        }\r\n        setOther(t) {\r\n            this.other = t\r\n        }\r\n        hasStructuredAppend() {\r\n            return this.structuredAppendParity >= 0 && this.structuredAppendSequenceNumber >= 0\r\n        }\r\n        getStructuredAppendParity() {\r\n            return this.structuredAppendParity\r\n        }\r\n        getStructuredAppendSequenceNumber() {\r\n            return this.structuredAppendSequenceNumber\r\n        }\r\n    }\r\n    class Y {\r\n        exp(t) {\r\n            return this.expTable[t]\r\n        }\r\n        log(t) {\r\n            if (0 === t) throw new o;\r\n            return this.logTable[t]\r\n        }\r\n        static addOrSubtract(t, e) {\r\n            return t ^ e\r\n        }\r\n    }\r\n    class Z {\r\n        constructor(t, e) {\r\n            if (0 === e.length) throw new o;\r\n            this.field = t;\r\n            const r = e.length;\r\n            if (r > 1 && 0 === e[0]) {\r\n                let t = 1;\r\n                for (; t < r && 0 === e[t];) t++;\r\n                t === r ? this.coefficients = Int32Array.from([0]) : (this.coefficients = new Int32Array(r - t), c.arraycopy(e, t, this.coefficients, 0, this.coefficients.length))\r\n            } else this.coefficients = e\r\n        }\r\n        getCoefficients() {\r\n            return this.coefficients\r\n        }\r\n        getDegree() {\r\n            return this.coefficients.length - 1\r\n        }\r\n        isZero() {\r\n            return 0 === this.coefficients[0]\r\n        }\r\n        getCoefficient(t) {\r\n            return this.coefficients[this.coefficients.length - 1 - t]\r\n        }\r\n        evaluateAt(t) {\r\n            if (0 === t) return this.getCoefficient(0);\r\n            const e = this.coefficients;\r\n            let r;\r\n            if (1 === t) {\r\n                r = 0;\r\n                for (let t = 0, n = e.length; t !== n; t++) {\r\n                    const n = e[t];\r\n                    r = Y.addOrSubtract(r, n)\r\n                }\r\n                return r\r\n            }\r\n            r = e[0];\r\n            const n = e.length,\r\n                    i = this.field;\r\n            for (let s = 1; s < n; s++) r = Y.addOrSubtract(i.multiply(t, r), e[s]);\r\n            return r\r\n        }\r\n        addOrSubtract(t) {\r\n            if (!this.field.equals(t.field)) throw new o(\"GenericGFPolys do not have same GenericGF field\");\r\n            if (this.isZero()) return t;\r\n            if (t.isZero()) return this;\r\n            let e = this.coefficients,\r\n                    r = t.coefficients;\r\n            if (e.length > r.length) {\r\n                const t = e;\r\n                e = r, r = t\r\n            }\r\n            let n = new Int32Array(r.length);\r\n            const i = r.length - e.length;\r\n            c.arraycopy(r, 0, n, 0, i);\r\n            for (let t = i; t < r.length; t++) n[t] = Y.addOrSubtract(e[t - i], r[t]);\r\n            return new Z(this.field, n)\r\n        }\r\n        multiply(t) {\r\n            if (!this.field.equals(t.field)) throw new o(\"GenericGFPolys do not have same GenericGF field\");\r\n            if (this.isZero() || t.isZero()) return this.field.getZero();\r\n            const e = this.coefficients,\r\n                    r = e.length,\r\n                    n = t.coefficients,\r\n                    i = n.length,\r\n                    s = new Int32Array(r + i - 1),\r\n                    a = this.field;\r\n            for (let t = 0; t < r; t++) {\r\n                const r = e[t];\r\n                for (let e = 0; e < i; e++) s[t + e] = Y.addOrSubtract(s[t + e], a.multiply(r, n[e]))\r\n            }\r\n            return new Z(a, s)\r\n        }\r\n        multiplyScalar(t) {\r\n            if (0 === t) return this.field.getZero();\r\n            if (1 === t) return this;\r\n            const e = this.coefficients.length,\r\n                    r = this.field,\r\n                    n = new Int32Array(e),\r\n                    i = this.coefficients;\r\n            for (let s = 0; s < e; s++) n[s] = r.multiply(i[s], t);\r\n            return new Z(r, n)\r\n        }\r\n        multiplyByMonomial(t, e) {\r\n            if (t < 0) throw new o;\r\n            if (0 === e) return this.field.getZero();\r\n            const r = this.coefficients,\r\n                    n = r.length,\r\n                    i = new Int32Array(n + t),\r\n                    s = this.field;\r\n            for (let t = 0; t < n; t++) i[t] = s.multiply(r[t], e);\r\n            return new Z(s, i)\r\n        }\r\n        divide(t) {\r\n            if (!this.field.equals(t.field)) throw new o(\"GenericGFPolys do not have same GenericGF field\");\r\n            if (t.isZero()) throw new o(\"Divide by 0\");\r\n            const e = this.field;\r\n            let r = e.getZero(),\r\n                    n = this;\r\n            const i = t.getCoefficient(t.getDegree()),\r\n                    s = e.inverse(i);\r\n            for (; n.getDegree() >= t.getDegree() && !n.isZero();) {\r\n                const i = n.getDegree() - t.getDegree(),\r\n                        o = e.multiply(n.getCoefficient(n.getDegree()), s),\r\n                        a = t.multiplyByMonomial(i, o),\r\n                        l = e.buildMonomial(i, o);\r\n                r = r.addOrSubtract(l), n = n.addOrSubtract(a)\r\n            }\r\n            return [r, n]\r\n        }\r\n        toString() {\r\n            let t = \"\";\r\n            for (let e = this.getDegree(); e >= 0; e--) {\r\n                let r = this.getCoefficient(e);\r\n                if (0 !== r) {\r\n                    if (r < 0 ? (t += \" - \", r = -r) : t.length > 0 && (t += \" + \"), 0 === e || 1 !== r) {\r\n                        const e = this.field.log(r);\r\n                        0 === e ? t += \"1\" : 1 === e ? t += \"a\" : (t += \"a^\", t += e)\r\n                    }\r\n                    0 !== e && (1 === e ? t += \"x\" : (t += \"x^\", t += e))\r\n                }\r\n            }\r\n            return t\r\n        }\r\n    }\r\n    class K extends i {}\r\n    K.kind = \"ArithmeticException\";\r\n    class q extends Y {\r\n        constructor(t, e, r) {\r\n            super(), this.primitive = t, this.size = e, this.generatorBase = r;\r\n            const n = new Int32Array(e);\r\n            let i = 1;\r\n            for (let r = 0; r < e; r++) n[r] = i, (i *= 2) >= e && (i ^= t, i &= e - 1);\r\n            this.expTable = n;\r\n            const s = new Int32Array(e);\r\n            for (let t = 0; t < e - 1; t++) s[n[t]] = t;\r\n            this.logTable = s, this.zero = new Z(this, Int32Array.from([0])), this.one = new Z(this, Int32Array.from([1]))\r\n        }\r\n        getZero() {\r\n            return this.zero\r\n        }\r\n        getOne() {\r\n            return this.one\r\n        }\r\n        buildMonomial(t, e) {\r\n            if (t < 0) throw new o;\r\n            if (0 === e) return this.zero;\r\n            const r = new Int32Array(t + 1);\r\n            return r[0] = e, new Z(this, r)\r\n        }\r\n        inverse(t) {\r\n            if (0 === t) throw new K;\r\n            return this.expTable[this.size - this.logTable[t] - 1]\r\n        }\r\n        multiply(t, e) {\r\n            return 0 === t || 0 === e ? 0 : this.expTable[(this.logTable[t] + this.logTable[e]) % (this.size - 1)]\r\n        }\r\n        getSize() {\r\n            return this.size\r\n        }\r\n        getGeneratorBase() {\r\n            return this.generatorBase\r\n        }\r\n        toString() {\r\n            return \"GF(0x\" + f.toHexString(this.primitive) + \",\" + this.size + \")\"\r\n        }\r\n        equals(t) {\r\n            return t === this\r\n        }\r\n    }\r\n    q.AZTEC_DATA_12 = new q(4201, 4096, 1), q.AZTEC_DATA_10 = new q(1033, 1024, 1), q.AZTEC_DATA_6 = new q(67, 64, 1), q.AZTEC_PARAM = new q(19, 16, 1), q.QR_CODE_FIELD_256 = new q(285, 256, 0), q.DATA_MATRIX_FIELD_256 = new q(301, 256, 1), q.AZTEC_DATA_8 = q.DATA_MATRIX_FIELD_256, q.MAXICODE_FIELD_64 = q.AZTEC_DATA_6;\r\n    class Q extends i {}\r\n    Q.kind = \"ReedSolomonException\";\r\n    class j extends i {}\r\n    j.kind = \"IllegalStateException\";\r\n    class J {\r\n        constructor(t) {\r\n            this.field = t\r\n        }\r\n        decode(t, e) {\r\n            const r = this.field,\r\n                    n = new Z(r, t),\r\n                    i = new Int32Array(e);\r\n            let s = !0;\r\n            for (let t = 0; t < e; t++) {\r\n                const e = n.evaluateAt(r.exp(t + r.getGeneratorBase()));\r\n                i[i.length - 1 - t] = e, 0 !== e && (s = !1)\r\n            }\r\n            if (s) return;\r\n            const o = new Z(r, i),\r\n                    a = this.runEuclideanAlgorithm(r.buildMonomial(e, 1), o, e),\r\n                    l = a[0],\r\n                    h = a[1],\r\n                    c = this.findErrorLocations(l),\r\n                    u = this.findErrorMagnitudes(h, c);\r\n            for (let e = 0; e < c.length; e++) {\r\n                const n = t.length - 1 - r.log(c[e]);\r\n                if (n < 0) throw new Q(\"Bad error location\");\r\n                t[n] = q.addOrSubtract(t[n], u[e])\r\n            }\r\n        }\r\n        runEuclideanAlgorithm(t, e, r) {\r\n            if (t.getDegree() < e.getDegree()) {\r\n                const r = t;\r\n                t = e, e = r\r\n            }\r\n            const n = this.field;\r\n            let i = t,\r\n                    s = e,\r\n                    o = n.getZero(),\r\n                    a = n.getOne();\r\n            for (; s.getDegree() >= (r / 2 | 0);) {\r\n                let t = i,\r\n                        e = o;\r\n                if (o = a, (i = s).isZero()) throw new Q(\"r_{i-1} was zero\");\r\n                s = t;\r\n                let r = n.getZero();\r\n                const l = i.getCoefficient(i.getDegree()),\r\n                        h = n.inverse(l);\r\n                for (; s.getDegree() >= i.getDegree() && !s.isZero();) {\r\n                    const t = s.getDegree() - i.getDegree(),\r\n                            e = n.multiply(s.getCoefficient(s.getDegree()), h);\r\n                    r = r.addOrSubtract(n.buildMonomial(t, e)), s = s.addOrSubtract(i.multiplyByMonomial(t, e))\r\n                }\r\n                if (a = r.multiply(o).addOrSubtract(e), s.getDegree() >= i.getDegree()) throw new j(\"Division algorithm failed to reduce polynomial?\")\r\n            }\r\n            const l = a.getCoefficient(0);\r\n            if (0 === l) throw new Q(\"sigmaTilde(0) was zero\");\r\n            const h = n.inverse(l);\r\n            return [a.multiplyScalar(h), s.multiplyScalar(h)]\r\n        }\r\n        findErrorLocations(t) {\r\n            const e = t.getDegree();\r\n            if (1 === e) return Int32Array.from([t.getCoefficient(1)]);\r\n            const r = new Int32Array(e);\r\n            let n = 0;\r\n            const i = this.field;\r\n            for (let s = 1; s < i.getSize() && n < e; s++) 0 === t.evaluateAt(s) && (r[n] = i.inverse(s), n++);\r\n            if (n !== e) throw new Q(\"Error locator degree does not match number of roots\");\r\n            return r\r\n        }\r\n        findErrorMagnitudes(t, e) {\r\n            const r = e.length,\r\n                    n = new Int32Array(r),\r\n                    i = this.field;\r\n            for (let s = 0; s < r; s++) {\r\n                const o = i.inverse(e[s]);\r\n                let a = 1;\r\n                for (let t = 0; t < r; t++)\r\n                    if (s !== t) {\r\n                        const r = i.multiply(e[t], o),\r\n                                n = 0 == (1 & r) ? 1 | r : -2 & r;\r\n                        a = i.multiply(a, n)\r\n                    } n[s] = i.multiply(t.evaluateAt(o), i.inverse(a)), 0 !== i.getGeneratorBase() && (n[s] = i.multiply(n[s], o))\r\n            }\r\n            return n\r\n        }\r\n    }! function(t) {\r\n        t[t.UPPER = 0] = \"UPPER\", t[t.LOWER = 1] = \"LOWER\", t[t.MIXED = 2] = \"MIXED\", t[t.DIGIT = 3] = \"DIGIT\", t[t.PUNCT = 4] = \"PUNCT\", t[t.BINARY = 5] = \"BINARY\"\r\n    }(x || (x = {}));\r\n    class $ {\r\n        decode(t) {\r\n            this.ddata = t;\r\n            let e = t.getBits(),\r\n                    r = this.extractBits(e),\r\n                    n = this.correctBits(r),\r\n                    i = $.convertBoolArrayToByteArray(n),\r\n                    s = $.getEncodedData(n),\r\n                    o = new z(i, s, null, null);\r\n            return o.setNumBits(n.length), o\r\n        }\r\n        static highLevelDecode(t) {\r\n            return this.getEncodedData(t)\r\n        }\r\n        static getEncodedData(t) {\r\n            let e = t.length,\r\n                    r = x.UPPER,\r\n                    n = x.UPPER,\r\n                    i = \"\",\r\n                    s = 0;\r\n            for (; s < e;)\r\n                if (n === x.BINARY) {\r\n                    if (e - s < 5) break;\r\n                    let o = $.readCode(t, s, 5);\r\n                    if (s += 5, 0 === o) {\r\n                        if (e - s < 11) break;\r\n                        o = $.readCode(t, s, 11) + 31, s += 11\r\n                    }\r\n                    for (let r = 0; r < o; r++) {\r\n                        if (e - s < 8) {\r\n                            s = e;\r\n                            break\r\n                        }\r\n                        const r = $.readCode(t, s, 8);\r\n                        i += S.castAsNonUtf8Char(r), s += 8\r\n                    }\r\n                    n = r\r\n                } else {\r\n                    let o = n === x.DIGIT ? 4 : 5;\r\n                    if (e - s < o) break;\r\n                    let a = $.readCode(t, s, o);\r\n                    s += o;\r\n                    let l = $.getCharacter(n, a);\r\n                    l.startsWith(\"CTRL_\") ? (r = n, n = $.getTable(l.charAt(5)), \"L\" === l.charAt(6) && (r = n)) : (i += l, n = r)\r\n                } return i\r\n        }\r\n        static getTable(t) {\r\n            switch (t) {\r\n                case \"L\":\r\n                    return x.LOWER;\r\n                case \"P\":\r\n                    return x.PUNCT;\r\n                case \"M\":\r\n                    return x.MIXED;\r\n                case \"D\":\r\n                    return x.DIGIT;\r\n                case \"B\":\r\n                    return x.BINARY;\r\n                case \"U\":\r\n                default:\r\n                    return x.UPPER\r\n            }\r\n        }\r\n        static getCharacter(t, e) {\r\n            switch (t) {\r\n                case x.UPPER:\r\n                    return $.UPPER_TABLE[e];\r\n                case x.LOWER:\r\n                    return $.LOWER_TABLE[e];\r\n                case x.MIXED:\r\n                    return $.MIXED_TABLE[e];\r\n                case x.PUNCT:\r\n                    return $.PUNCT_TABLE[e];\r\n                case x.DIGIT:\r\n                    return $.DIGIT_TABLE[e];\r\n                default:\r\n                    throw new j(\"Bad table\")\r\n            }\r\n        }\r\n        correctBits(t) {\r\n            let e, r;\r\n            this.ddata.getNbLayers() <= 2 ? (r = 6, e = q.AZTEC_DATA_6) : this.ddata.getNbLayers() <= 8 ? (r = 8, e = q.AZTEC_DATA_8) : this.ddata.getNbLayers() <= 22 ? (r = 10, e = q.AZTEC_DATA_10) : (r = 12, e = q.AZTEC_DATA_12);\r\n            let n = this.ddata.getNbDatablocks(),\r\n                    i = t.length / r;\r\n            if (i < n) throw new E;\r\n            let s = t.length % r,\r\n                    o = new Int32Array(i);\r\n            for (let e = 0; e < i; e++, s += r) o[e] = $.readCode(t, s, r);\r\n            try {\r\n                new J(e).decode(o, i - n)\r\n            } catch (t) {\r\n                throw new E(t)\r\n            }\r\n            let a = (1 << r) - 1,\r\n                    l = 0;\r\n            for (let t = 0; t < n; t++) {\r\n                let e = o[t];\r\n                if (0 === e || e === a) throw new E;\r\n                1 !== e && e !== a - 1 || l++\r\n            }\r\n            let h = new Array(n * r - l),\r\n                    c = 0;\r\n            for (let t = 0; t < n; t++) {\r\n                let e = o[t];\r\n                if (1 === e || e === a - 1) h.fill(e > 1, c, c + r - 1), c += r - 1;\r\n                else\r\n                    for (let t = r - 1; t >= 0; --t) h[c++] = 0 != (e & 1 << t)\r\n            }\r\n            return h\r\n        }\r\n        extractBits(t) {\r\n            let e = this.ddata.isCompact(),\r\n                    r = this.ddata.getNbLayers(),\r\n                    n = (e ? 11 : 14) + 4 * r,\r\n                    i = new Int32Array(n),\r\n                    s = new Array(this.totalBitsInLayer(r, e));\r\n            if (e)\r\n                for (let t = 0; t < i.length; t++) i[t] = t;\r\n            else {\r\n                let t = n + 1 + 2 * f.truncDivision(f.truncDivision(n, 2) - 1, 15),\r\n                        e = n / 2,\r\n                        r = f.truncDivision(t, 2);\r\n                for (let t = 0; t < e; t++) {\r\n                    let n = t + f.truncDivision(t, 15);\r\n                    i[e - t - 1] = r - n - 1, i[e + t] = r + n + 1\r\n                }\r\n            }\r\n            for (let o = 0, a = 0; o < r; o++) {\r\n                let l = 4 * (r - o) + (e ? 9 : 12),\r\n                        h = 2 * o,\r\n                        c = n - 1 - h;\r\n                for (let e = 0; e < l; e++) {\r\n                    let r = 2 * e;\r\n                    for (let n = 0; n < 2; n++) s[a + r + n] = t.get(i[h + n], i[h + e]), s[a + 2 * l + r + n] = t.get(i[h + e], i[c - n]), s[a + 4 * l + r + n] = t.get(i[c - n], i[c - e]), s[a + 6 * l + r + n] = t.get(i[c - e], i[h + n])\r\n                }\r\n                a += 8 * l\r\n            }\r\n            return s\r\n        }\r\n        static readCode(t, e, r) {\r\n            let n = 0;\r\n            for (let i = e; i < e + r; i++) n <<= 1, t[i] && (n |= 1);\r\n            return n\r\n        }\r\n        static readByte(t, e) {\r\n            let r = t.length - e;\r\n            return r >= 8 ? $.readCode(t, e, 8) : $.readCode(t, e, r) << 8 - r\r\n        }\r\n        static convertBoolArrayToByteArray(t) {\r\n            let e = new Uint8Array((t.length + 7) / 8);\r\n            for (let r = 0; r < e.length; r++) e[r] = $.readByte(t, 8 * r);\r\n            return e\r\n        }\r\n        totalBitsInLayer(t, e) {\r\n            return ((e ? 88 : 112) + 16 * t) * t\r\n        }\r\n    }\r\n    $.UPPER_TABLE = [\"CTRL_PS\", \" \", \"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\", \"H\", \"I\", \"J\", \"K\", \"L\", \"M\", \"N\", \"O\", \"P\", \"Q\", \"R\", \"S\", \"T\", \"U\", \"V\", \"W\", \"X\", \"Y\", \"Z\", \"CTRL_LL\", \"CTRL_ML\", \"CTRL_DL\", \"CTRL_BS\"], $.LOWER_TABLE = [\"CTRL_PS\", \" \", \"a\", \"b\", \"c\", \"d\", \"e\", \"f\", \"g\", \"h\", \"i\", \"j\", \"k\", \"l\", \"m\", \"n\", \"o\", \"p\", \"q\", \"r\", \"s\", \"t\", \"u\", \"v\", \"w\", \"x\", \"y\", \"z\", \"CTRL_US\", \"CTRL_ML\", \"CTRL_DL\", \"CTRL_BS\"], $.MIXED_TABLE = [\"CTRL_PS\", \" \", \"\\\\1\", \"\\\\2\", \"\\\\3\", \"\\\\4\", \"\\\\5\", \"\\\\6\", \"\\\\7\", \"\\b\", \"\\t\", \"\\n\", \"\\\\13\", \"\\f\", \"\\r\", \"\\\\33\", \"\\\\34\", \"\\\\35\", \"\\\\36\", \"\\\\37\", \"@\", \"\\\\\", \"^\", \"_\", \"`\", \"|\", \"~\", \"\\\\177\", \"CTRL_LL\", \"CTRL_UL\", \"CTRL_PL\", \"CTRL_BS\"], $.PUNCT_TABLE = [\"\", \"\\r\", \"\\r\\n\", \". \", \", \", \": \", \"!\", '\"', \"#\", \"$\", \"%\", \"&\", \"'\", \"(\", \")\", \"*\", \"+\", \",\", \"-\", \".\", \"/\", \":\", \";\", \"<\", \"=\", \">\", \"?\", \"[\", \"]\", \"{\", \"}\", \"CTRL_UL\"], $.DIGIT_TABLE = [\"CTRL_PS\", \" \", \"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \",\", \".\", \"CTRL_UL\", \"CTRL_US\"];\r\n    class tt {\r\n        constructor() {}\r\n        static round(t) {\r\n            return NaN === t ? 0 : t <= Number.MIN_SAFE_INTEGER ? Number.MIN_SAFE_INTEGER : t >= Number.MAX_SAFE_INTEGER ? Number.MAX_SAFE_INTEGER : t + (t < 0 ? -.5 : .5) | 0\r\n        }\r\n        static distance(t, e, r, n) {\r\n            const i = t - r,\r\n                    s = e - n;\r\n            return Math.sqrt(i * i + s * s)\r\n        }\r\n        static sum(t) {\r\n            let e = 0;\r\n            for (let r = 0, n = t.length; r !== n; r++) {\r\n                e += t[r]\r\n            }\r\n            return e\r\n        }\r\n    }\r\n    class et {\r\n        static floatToIntBits(t) {\r\n            return t\r\n        }\r\n    }\r\n    et.MAX_VALUE = Number.MAX_SAFE_INTEGER;\r\n    class rt {\r\n        constructor(t, e) {\r\n            this.x = t, this.y = e\r\n        }\r\n        getX() {\r\n            return this.x\r\n        }\r\n        getY() {\r\n            return this.y\r\n        }\r\n        equals(t) {\r\n            if (t instanceof rt) {\r\n                const e = t;\r\n                return this.x === e.x && this.y === e.y\r\n            }\r\n            return !1\r\n        }\r\n        hashCode() {\r\n            return 31 * et.floatToIntBits(this.x) + et.floatToIntBits(this.y)\r\n        }\r\n        toString() {\r\n            return \"(\" + this.x + \",\" + this.y + \")\"\r\n        }\r\n        static orderBestPatterns(t) {\r\n            const e = this.distance(t[0], t[1]),\r\n                    r = this.distance(t[1], t[2]),\r\n                    n = this.distance(t[0], t[2]);\r\n            let i, s, o;\r\n            if (r >= e && r >= n ? (s = t[0], i = t[1], o = t[2]) : n >= r && n >= e ? (s = t[1], i = t[0], o = t[2]) : (s = t[2], i = t[0], o = t[1]), this.crossProductZ(i, s, o) < 0) {\r\n                const t = i;\r\n                i = o, o = t\r\n            }\r\n            t[0] = i, t[1] = s, t[2] = o\r\n        }\r\n        static distance(t, e) {\r\n            return tt.distance(t.x, t.y, e.x, e.y)\r\n        }\r\n        static crossProductZ(t, e, r) {\r\n            const n = e.x,\r\n                    i = e.y;\r\n            return (r.x - n) * (t.y - i) - (r.y - i) * (t.x - n)\r\n        }\r\n    }\r\n    class nt {\r\n        constructor(t, e) {\r\n            this.bits = t, this.points = e\r\n        }\r\n        getBits() {\r\n            return this.bits\r\n        }\r\n        getPoints() {\r\n            return this.points\r\n        }\r\n    }\r\n    class it extends nt {\r\n        constructor(t, e, r, n, i) {\r\n            super(t, e), this.compact = r, this.nbDatablocks = n, this.nbLayers = i\r\n        }\r\n        getNbLayers() {\r\n            return this.nbLayers\r\n        }\r\n        getNbDatablocks() {\r\n            return this.nbDatablocks\r\n        }\r\n        isCompact() {\r\n            return this.compact\r\n        }\r\n    }\r\n    class st {\r\n        constructor(t, e, r, n) {\r\n            this.image = t, this.height = t.getHeight(), this.width = t.getWidth(), null == e && (e = st.INIT_SIZE), null == r && (r = t.getWidth() / 2 | 0), null == n && (n = t.getHeight() / 2 | 0);\r\n            const i = e / 2 | 0;\r\n            if (this.leftInit = r - i, this.rightInit = r + i, this.upInit = n - i, this.downInit = n + i, this.upInit < 0 || this.leftInit < 0 || this.downInit >= this.height || this.rightInit >= this.width) throw new R\r\n        }\r\n        detect() {\r\n            let t = this.leftInit,\r\n                    e = this.rightInit,\r\n                    r = this.upInit,\r\n                    n = this.downInit,\r\n                    i = !1,\r\n                    s = !0,\r\n                    o = !1,\r\n                    a = !1,\r\n                    l = !1,\r\n                    h = !1,\r\n                    c = !1;\r\n            const u = this.width,\r\n                    d = this.height;\r\n            for (; s;) {\r\n                s = !1;\r\n                let g = !0;\r\n                for (;\r\n                        (g || !a) && e < u;)(g = this.containsBlackPoint(r, n, e, !1)) ? (e++, s = !0, a = !0) : a || e++;\r\n                if (e >= u) {\r\n                    i = !0;\r\n                    break\r\n                }\r\n                let f = !0;\r\n                for (;\r\n                        (f || !l) && n < d;)(f = this.containsBlackPoint(t, e, n, !0)) ? (n++, s = !0, l = !0) : l || n++;\r\n                if (n >= d) {\r\n                    i = !0;\r\n                    break\r\n                }\r\n                let w = !0;\r\n                for (;\r\n                        (w || !h) && t >= 0;)(w = this.containsBlackPoint(r, n, t, !1)) ? (t--, s = !0, h = !0) : h || t--;\r\n                if (t < 0) {\r\n                    i = !0;\r\n                    break\r\n                }\r\n                let A = !0;\r\n                for (;\r\n                        (A || !c) && r >= 0;)(A = this.containsBlackPoint(t, e, r, !0)) ? (r--, s = !0, c = !0) : c || r--;\r\n                if (r < 0) {\r\n                    i = !0;\r\n                    break\r\n                }\r\n                s && (o = !0)\r\n            }\r\n            if (!i && o) {\r\n                const i = e - t;\r\n                let s = null;\r\n                for (let e = 1; null === s && e < i; e++) s = this.getBlackPointOnSegment(t, n - e, t + e, n);\r\n                if (null == s) throw new R;\r\n                let o = null;\r\n                for (let e = 1; null === o && e < i; e++) o = this.getBlackPointOnSegment(t, r + e, t + e, r);\r\n                if (null == o) throw new R;\r\n                let a = null;\r\n                for (let t = 1; null === a && t < i; t++) a = this.getBlackPointOnSegment(e, r + t, e - t, r);\r\n                if (null == a) throw new R;\r\n                let l = null;\r\n                for (let t = 1; null === l && t < i; t++) l = this.getBlackPointOnSegment(e, n - t, e - t, n);\r\n                if (null == l) throw new R;\r\n                return this.centerEdges(l, s, a, o)\r\n            }\r\n            throw new R\r\n        }\r\n        getBlackPointOnSegment(t, e, r, n) {\r\n            const i = tt.round(tt.distance(t, e, r, n)),\r\n                    s = (r - t) / i,\r\n                    o = (n - e) / i,\r\n                    a = this.image;\r\n            for (let r = 0; r < i; r++) {\r\n                const n = tt.round(t + r * s),\r\n                        i = tt.round(e + r * o);\r\n                if (a.get(n, i)) return new rt(n, i)\r\n            }\r\n            return null\r\n        }\r\n        centerEdges(t, e, r, n) {\r\n            const i = t.getX(),\r\n                    s = t.getY(),\r\n                    o = e.getX(),\r\n                    a = e.getY(),\r\n                    l = r.getX(),\r\n                    h = r.getY(),\r\n                    c = n.getX(),\r\n                    u = n.getY(),\r\n                    d = st.CORR;\r\n            return i < this.width / 2 ? [new rt(c - d, u + d), new rt(o + d, a + d), new rt(l - d, h - d), new rt(i + d, s - d)] : [new rt(c + d, u + d), new rt(o + d, a - d), new rt(l - d, h + d), new rt(i - d, s - d)]\r\n        }\r\n        containsBlackPoint(t, e, r, n) {\r\n            const i = this.image;\r\n            if (n) {\r\n                for (let n = t; n <= e; n++)\r\n                    if (i.get(n, r)) return !0\r\n            } else\r\n                for (let n = t; n <= e; n++)\r\n                    if (i.get(r, n)) return !0;\r\n            return !1\r\n        }\r\n    }\r\n    st.INIT_SIZE = 10, st.CORR = 1;\r\n    class ot {\r\n        static checkAndNudgePoints(t, e) {\r\n            const r = t.getWidth(),\r\n                    n = t.getHeight();\r\n            let i = !0;\r\n            for (let t = 0; t < e.length && i; t += 2) {\r\n                const s = Math.floor(e[t]),\r\n                        o = Math.floor(e[t + 1]);\r\n                if (s < -1 || s > r || o < -1 || o > n) throw new R;\r\n                i = !1, -1 === s ? (e[t] = 0, i = !0) : s === r && (e[t] = r - 1, i = !0), -1 === o ? (e[t + 1] = 0, i = !0) : o === n && (e[t + 1] = n - 1, i = !0)\r\n            }\r\n            i = !0;\r\n            for (let t = e.length - 2; t >= 0 && i; t -= 2) {\r\n                const s = Math.floor(e[t]),\r\n                        o = Math.floor(e[t + 1]);\r\n                if (s < -1 || s > r || o < -1 || o > n) throw new R;\r\n                i = !1, -1 === s ? (e[t] = 0, i = !0) : s === r && (e[t] = r - 1, i = !0), -1 === o ? (e[t + 1] = 0, i = !0) : o === n && (e[t + 1] = n - 1, i = !0)\r\n            }\r\n        }\r\n    }\r\n    class at {\r\n        constructor(t, e, r, n, i, s, o, a, l) {\r\n            this.a11 = t, this.a21 = e, this.a31 = r, this.a12 = n, this.a22 = i, this.a32 = s, this.a13 = o, this.a23 = a, this.a33 = l\r\n        }\r\n        static quadrilateralToQuadrilateral(t, e, r, n, i, s, o, a, l, h, c, u, d, g, f, w) {\r\n            const A = at.quadrilateralToSquare(t, e, r, n, i, s, o, a);\r\n            return at.squareToQuadrilateral(l, h, c, u, d, g, f, w).times(A)\r\n        }\r\n        transformPoints(t) {\r\n            const e = t.length,\r\n                    r = this.a11,\r\n                    n = this.a12,\r\n                    i = this.a13,\r\n                    s = this.a21,\r\n                    o = this.a22,\r\n                    a = this.a23,\r\n                    l = this.a31,\r\n                    h = this.a32,\r\n                    c = this.a33;\r\n            for (let u = 0; u < e; u += 2) {\r\n                const e = t[u],\r\n                        d = t[u + 1],\r\n                        g = i * e + a * d + c;\r\n                t[u] = (r * e + s * d + l) / g, t[u + 1] = (n * e + o * d + h) / g\r\n            }\r\n        }\r\n        transformPointsWithValues(t, e) {\r\n            const r = this.a11,\r\n                    n = this.a12,\r\n                    i = this.a13,\r\n                    s = this.a21,\r\n                    o = this.a22,\r\n                    a = this.a23,\r\n                    l = this.a31,\r\n                    h = this.a32,\r\n                    c = this.a33,\r\n                    u = t.length;\r\n            for (let d = 0; d < u; d++) {\r\n                const u = t[d],\r\n                        g = e[d],\r\n                        f = i * u + a * g + c;\r\n                t[d] = (r * u + s * g + l) / f, e[d] = (n * u + o * g + h) / f\r\n            }\r\n        }\r\n        static squareToQuadrilateral(t, e, r, n, i, s, o, a) {\r\n            const l = t - r + i - o,\r\n                    h = e - n + s - a;\r\n            if (0 === l && 0 === h) return new at(r - t, i - r, t, n - e, s - n, e, 0, 0, 1);\r\n            {\r\n                const c = r - i,\r\n                        u = o - i,\r\n                        d = n - s,\r\n                        g = a - s,\r\n                        f = c * g - u * d,\r\n                        w = (l * g - u * h) / f,\r\n                        A = (c * h - l * d) / f;\r\n                return new at(r - t + w * r, o - t + A * o, t, n - e + w * n, a - e + A * a, e, w, A, 1)\r\n            }\r\n        }\r\n        static quadrilateralToSquare(t, e, r, n, i, s, o, a) {\r\n            return at.squareToQuadrilateral(t, e, r, n, i, s, o, a).buildAdjoint()\r\n        }\r\n        buildAdjoint() {\r\n            return new at(this.a22 * this.a33 - this.a23 * this.a32, this.a23 * this.a31 - this.a21 * this.a33, this.a21 * this.a32 - this.a22 * this.a31, this.a13 * this.a32 - this.a12 * this.a33, this.a11 * this.a33 - this.a13 * this.a31, this.a12 * this.a31 - this.a11 * this.a32, this.a12 * this.a23 - this.a13 * this.a22, this.a13 * this.a21 - this.a11 * this.a23, this.a11 * this.a22 - this.a12 * this.a21)\r\n        }\r\n        times(t) {\r\n            return new at(this.a11 * t.a11 + this.a21 * t.a12 + this.a31 * t.a13, this.a11 * t.a21 + this.a21 * t.a22 + this.a31 * t.a23, this.a11 * t.a31 + this.a21 * t.a32 + this.a31 * t.a33, this.a12 * t.a11 + this.a22 * t.a12 + this.a32 * t.a13, this.a12 * t.a21 + this.a22 * t.a22 + this.a32 * t.a23, this.a12 * t.a31 + this.a22 * t.a32 + this.a32 * t.a33, this.a13 * t.a11 + this.a23 * t.a12 + this.a33 * t.a13, this.a13 * t.a21 + this.a23 * t.a22 + this.a33 * t.a23, this.a13 * t.a31 + this.a23 * t.a32 + this.a33 * t.a33)\r\n        }\r\n    }\r\n    class lt extends ot {\r\n        sampleGrid(t, e, r, n, i, s, o, a, l, h, c, u, d, g, f, w, A, C, E) {\r\n            const m = at.quadrilateralToQuadrilateral(n, i, s, o, a, l, h, c, u, d, g, f, w, A, C, E);\r\n            return this.sampleGridWithTransform(t, e, r, m)\r\n        }\r\n        sampleGridWithTransform(t, e, r, n) {\r\n            if (e <= 0 || r <= 0) throw new R;\r\n            const i = new T(e, r),\r\n                    s = new Float32Array(2 * e);\r\n            for (let e = 0; e < r; e++) {\r\n                const r = s.length,\r\n                        o = e + .5;\r\n                for (let t = 0; t < r; t += 2) s[t] = t / 2 + .5, s[t + 1] = o;\r\n                n.transformPoints(s), ot.checkAndNudgePoints(t, s);\r\n                try {\r\n                    for (let n = 0; n < r; n += 2) t.get(Math.floor(s[n]), Math.floor(s[n + 1])) && i.set(n / 2, e)\r\n                } catch (t) {\r\n                    throw new R\r\n                }\r\n            }\r\n            return i\r\n        }\r\n    }\r\n    class ht {\r\n        static setGridSampler(t) {\r\n            ht.gridSampler = t\r\n        }\r\n        static getInstance() {\r\n            return ht.gridSampler\r\n        }\r\n    }\r\n    ht.gridSampler = new lt;\r\n    class ct {\r\n        constructor(t, e) {\r\n            this.x = t, this.y = e\r\n        }\r\n        toResultPoint() {\r\n            return new rt(this.getX(), this.getY())\r\n        }\r\n        getX() {\r\n            return this.x\r\n        }\r\n        getY() {\r\n            return this.y\r\n        }\r\n    }\r\n    class ut {\r\n        constructor(t) {\r\n            this.EXPECTED_CORNER_BITS = new Int32Array([3808, 476, 2107, 1799]), this.image = t\r\n        }\r\n        detect() {\r\n            return this.detectMirror(!1)\r\n        }\r\n        detectMirror(t) {\r\n            let e = this.getMatrixCenter(),\r\n                    r = this.getBullsEyeCorners(e);\r\n            if (t) {\r\n                let t = r[0];\r\n                r[0] = r[2], r[2] = t\r\n            }\r\n            this.extractParameters(r);\r\n            let n = this.sampleGrid(this.image, r[this.shift % 4], r[(this.shift + 1) % 4], r[(this.shift + 2) % 4], r[(this.shift + 3) % 4]),\r\n                    i = this.getMatrixCornerPoints(r);\r\n            return new it(n, i, this.compact, this.nbDataBlocks, this.nbLayers)\r\n        }\r\n        extractParameters(t) {\r\n            if (!(this.isValidPoint(t[0]) && this.isValidPoint(t[1]) && this.isValidPoint(t[2]) && this.isValidPoint(t[3]))) throw new R;\r\n            let e = 2 * this.nbCenterLayers,\r\n                    r = new Int32Array([this.sampleLine(t[0], t[1], e), this.sampleLine(t[1], t[2], e), this.sampleLine(t[2], t[3], e), this.sampleLine(t[3], t[0], e)]);\r\n            this.shift = this.getRotation(r, e);\r\n            let n = 0;\r\n            for (let t = 0; t < 4; t++) {\r\n                let e = r[(this.shift + t) % 4];\r\n                this.compact ? (n <<= 7, n += e >> 1 & 127) : (n <<= 10, n += (e >> 2 & 992) + (e >> 1 & 31))\r\n            }\r\n            let i = this.getCorrectedParameterData(n, this.compact);\r\n            this.compact ? (this.nbLayers = 1 + (i >> 6), this.nbDataBlocks = 1 + (63 & i)) : (this.nbLayers = 1 + (i >> 11), this.nbDataBlocks = 1 + (2047 & i))\r\n        }\r\n        getRotation(t, e) {\r\n            let r = 0;\r\n            t.forEach((t, n, i) => {\r\n                r = (r << 3) + ((t >> e - 2 << 1) + (1 & t))\r\n            }), r = ((1 & r) << 11) + (r >> 1);\r\n            for (let t = 0; t < 4; t++)\r\n                if (f.bitCount(r ^ this.EXPECTED_CORNER_BITS[t]) <= 2) return t;\r\n            throw new R\r\n        }\r\n        getCorrectedParameterData(t, e) {\r\n            let r, n;\r\n            e ? (r = 7, n = 2) : (r = 10, n = 4);\r\n            let i = r - n,\r\n                    s = new Int32Array(r);\r\n            for (let e = r - 1; e >= 0; --e) s[e] = 15 & t, t >>= 4;\r\n            try {\r\n                new J(q.AZTEC_PARAM).decode(s, i)\r\n            } catch (t) {\r\n                throw new R\r\n            }\r\n            let o = 0;\r\n            for (let t = 0; t < n; t++) o = (o << 4) + s[t];\r\n            return o\r\n        }\r\n        getBullsEyeCorners(t) {\r\n            let e = t,\r\n                    r = t,\r\n                    n = t,\r\n                    i = t,\r\n                    s = !0;\r\n            for (this.nbCenterLayers = 1; this.nbCenterLayers < 9; this.nbCenterLayers++) {\r\n                let t = this.getFirstDifferent(e, s, 1, -1),\r\n                        o = this.getFirstDifferent(r, s, 1, 1),\r\n                        a = this.getFirstDifferent(n, s, -1, 1),\r\n                        l = this.getFirstDifferent(i, s, -1, -1);\r\n                if (this.nbCenterLayers > 2) {\r\n                    let r = this.distancePoint(l, t) * this.nbCenterLayers / (this.distancePoint(i, e) * (this.nbCenterLayers + 2));\r\n                    if (r < .75 || r > 1.25 || !this.isWhiteOrBlackRectangle(t, o, a, l)) break\r\n                }\r\n                e = t, r = o, n = a, i = l, s = !s\r\n            }\r\n            if (5 !== this.nbCenterLayers && 7 !== this.nbCenterLayers) throw new R;\r\n            this.compact = 5 === this.nbCenterLayers;\r\n            let o = new rt(e.getX() + .5, e.getY() - .5),\r\n                    a = new rt(r.getX() + .5, r.getY() + .5),\r\n                    l = new rt(n.getX() - .5, n.getY() + .5),\r\n                    h = new rt(i.getX() - .5, i.getY() - .5);\r\n            return this.expandSquare([o, a, l, h], 2 * this.nbCenterLayers - 3, 2 * this.nbCenterLayers)\r\n        }\r\n        getMatrixCenter() {\r\n            let t, e, r, n;\r\n            try {\r\n                let i = new st(this.image).detect();\r\n                t = i[0], e = i[1], r = i[2], n = i[3]\r\n            } catch (i) {\r\n                let s = this.image.getWidth() / 2,\r\n                        o = this.image.getHeight() / 2;\r\n                t = this.getFirstDifferent(new ct(s + 7, o - 7), !1, 1, -1).toResultPoint(), e = this.getFirstDifferent(new ct(s + 7, o + 7), !1, 1, 1).toResultPoint(), r = this.getFirstDifferent(new ct(s - 7, o + 7), !1, -1, 1).toResultPoint(), n = this.getFirstDifferent(new ct(s - 7, o - 7), !1, -1, -1).toResultPoint()\r\n            }\r\n            let i = tt.round((t.getX() + n.getX() + e.getX() + r.getX()) / 4),\r\n                    s = tt.round((t.getY() + n.getY() + e.getY() + r.getY()) / 4);\r\n            try {\r\n                let o = new st(this.image, 15, i, s).detect();\r\n                t = o[0], e = o[1], r = o[2], n = o[3]\r\n            } catch (o) {\r\n                t = this.getFirstDifferent(new ct(i + 7, s - 7), !1, 1, -1).toResultPoint(), e = this.getFirstDifferent(new ct(i + 7, s + 7), !1, 1, 1).toResultPoint(), r = this.getFirstDifferent(new ct(i - 7, s + 7), !1, -1, 1).toResultPoint(), n = this.getFirstDifferent(new ct(i - 7, s - 7), !1, -1, -1).toResultPoint()\r\n            }\r\n            return i = tt.round((t.getX() + n.getX() + e.getX() + r.getX()) / 4), s = tt.round((t.getY() + n.getY() + e.getY() + r.getY()) / 4), new ct(i, s)\r\n        }\r\n        getMatrixCornerPoints(t) {\r\n            return this.expandSquare(t, 2 * this.nbCenterLayers, this.getDimension())\r\n        }\r\n        sampleGrid(t, e, r, n, i) {\r\n            let s = ht.getInstance(),\r\n                    o = this.getDimension(),\r\n                    a = o / 2 - this.nbCenterLayers,\r\n                    l = o / 2 + this.nbCenterLayers;\r\n            return s.sampleGrid(t, o, o, a, a, l, a, l, l, a, l, e.getX(), e.getY(), r.getX(), r.getY(), n.getX(), n.getY(), i.getX(), i.getY())\r\n        }\r\n        sampleLine(t, e, r) {\r\n            let n = 0,\r\n                    i = this.distanceResultPoint(t, e),\r\n                    s = i / r,\r\n                    o = t.getX(),\r\n                    a = t.getY(),\r\n                    l = s * (e.getX() - t.getX()) / i,\r\n                    h = s * (e.getY() - t.getY()) / i;\r\n            for (let t = 0; t < r; t++) this.image.get(tt.round(o + t * l), tt.round(a + t * h)) && (n |= 1 << r - t - 1);\r\n            return n\r\n        }\r\n        isWhiteOrBlackRectangle(t, e, r, n) {\r\n            t = new ct(t.getX() - 3, t.getY() + 3), e = new ct(e.getX() - 3, e.getY() - 3), r = new ct(r.getX() + 3, r.getY() - 3), n = new ct(n.getX() + 3, n.getY() + 3);\r\n            let i = this.getColor(n, t);\r\n            if (0 === i) return !1;\r\n            let s = this.getColor(t, e);\r\n            return s === i && ((s = this.getColor(e, r)) === i && (s = this.getColor(r, n)) === i)\r\n        }\r\n        getColor(t, e) {\r\n            let r = this.distancePoint(t, e),\r\n                    n = (e.getX() - t.getX()) / r,\r\n                    i = (e.getY() - t.getY()) / r,\r\n                    s = 0,\r\n                    o = t.getX(),\r\n                    a = t.getY(),\r\n                    l = this.image.get(t.getX(), t.getY()),\r\n                    h = Math.ceil(r);\r\n            for (let t = 0; t < h; t++) o += n, a += i, this.image.get(tt.round(o), tt.round(a)) !== l && s++;\r\n            let c = s / r;\r\n            return c > .1 && c < .9 ? 0 : c <= .1 === l ? 1 : -1\r\n        }\r\n        getFirstDifferent(t, e, r, n) {\r\n            let i = t.getX() + r,\r\n                    s = t.getY() + n;\r\n            for (; this.isValid(i, s) && this.image.get(i, s) === e;) i += r, s += n;\r\n            for (i -= r, s -= n; this.isValid(i, s) && this.image.get(i, s) === e;) i += r;\r\n            for (i -= r; this.isValid(i, s) && this.image.get(i, s) === e;) s += n;\r\n            return new ct(i, s -= n)\r\n        }\r\n        expandSquare(t, e, r) {\r\n            let n = r / (2 * e),\r\n                    i = t[0].getX() - t[2].getX(),\r\n                    s = t[0].getY() - t[2].getY(),\r\n                    o = (t[0].getX() + t[2].getX()) / 2,\r\n                    a = (t[0].getY() + t[2].getY()) / 2,\r\n                    l = new rt(o + n * i, a + n * s),\r\n                    h = new rt(o - n * i, a - n * s);\r\n            return i = t[1].getX() - t[3].getX(), s = t[1].getY() - t[3].getY(), o = (t[1].getX() + t[3].getX()) / 2, a = (t[1].getY() + t[3].getY()) / 2, [l, new rt(o + n * i, a + n * s), h, new rt(o - n * i, a - n * s)]\r\n        }\r\n        isValid(t, e) {\r\n            return t >= 0 && t < this.image.getWidth() && e > 0 && e < this.image.getHeight()\r\n        }\r\n        isValidPoint(t) {\r\n            let e = tt.round(t.getX()),\r\n                    r = tt.round(t.getY());\r\n            return this.isValid(e, r)\r\n        }\r\n        distancePoint(t, e) {\r\n            return tt.distance(t.getX(), t.getY(), e.getX(), e.getY())\r\n        }\r\n        distanceResultPoint(t, e) {\r\n            return tt.distance(t.getX(), t.getY(), e.getX(), e.getY())\r\n        }\r\n        getDimension() {\r\n            return this.compact ? 4 * this.nbLayers + 11 : this.nbLayers <= 4 ? 4 * this.nbLayers + 15 : 4 * this.nbLayers + 2 * (f.truncDivision(this.nbLayers - 4, 8) + 1) + 15\r\n        }\r\n    }\r\n    class dt {\r\n        decode(t, e = null) {\r\n            let r = null,\r\n                    n = new ut(t.getBlackMatrix()),\r\n                    i = null,\r\n                    s = null;\r\n            try {\r\n                let t = n.detectMirror(!1);\r\n                i = t.getPoints(), this.reportFoundResultPoints(e, i), s = (new $).decode(t)\r\n            } catch (t) {\r\n                r = t\r\n            }\r\n            if (null == s) try {\r\n                let t = n.detectMirror(!0);\r\n                i = t.getPoints(), this.reportFoundResultPoints(e, i), s = (new $).decode(t)\r\n            } catch (t) {\r\n                if (null != r) throw r;\r\n                throw t\r\n            }\r\n            let o = new F(s.getText(), s.getRawBytes(), s.getNumBits(), i, k.AZTEC, c.currentTimeMillis()),\r\n                    a = s.getByteSegments();\r\n            null != a && o.putMetadata(W.BYTE_SEGMENTS, a);\r\n            let l = s.getECLevel();\r\n            return null != l && o.putMetadata(W.ERROR_CORRECTION_LEVEL, l), o\r\n        }\r\n        reportFoundResultPoints(t, e) {\r\n            if (null != t) {\r\n                let r = t.get(C.NEED_RESULT_POINT_CALLBACK);\r\n                null != r && e.forEach((t, e, n) => {\r\n                    r.foundPossibleResultPoint(t)\r\n                })\r\n            }\r\n        }\r\n        reset() {}\r\n    }\r\n    class gt {\r\n        decode(t, e) {\r\n            try {\r\n                return this.doDecode(t, e)\r\n            } catch (r) {\r\n                if (e && !0 === e.get(C.TRY_HARDER) && t.isRotateSupported()) {\r\n                    const r = t.rotateCounterClockwise(),\r\n                            n = this.doDecode(r, e),\r\n                            i = n.getResultMetadata();\r\n                    let s = 270;\r\n                    null !== i && !0 === i.get(W.ORIENTATION) && (s += i.get(W.ORIENTATION) % 360), n.putMetadata(W.ORIENTATION, s);\r\n                    const o = n.getResultPoints();\r\n                    if (null !== o) {\r\n                        const t = r.getHeight();\r\n                        for (let e = 0; e < o.length; e++) o[e] = new rt(t - o[e].getY() - 1, o[e].getX())\r\n                    }\r\n                    return n\r\n                }\r\n                throw new R\r\n            }\r\n        }\r\n        reset() {}\r\n        doDecode(t, e) {\r\n            const r = t.getWidth(),\r\n                    n = t.getHeight();\r\n            let i = new w(r);\r\n            const s = e && !0 === e.get(C.TRY_HARDER),\r\n                    o = Math.max(1, n >> (s ? 8 : 5));\r\n            let a;\r\n            a = s ? n : 15;\r\n            const l = Math.trunc(n / 2);\r\n            for (let s = 0; s < a; s++) {\r\n                const a = Math.trunc((s + 1) / 2),\r\n                        h = l + o * (0 == (1 & s) ? a : -a);\r\n                if (h < 0 || h >= n) break;\r\n                try {\r\n                    i = t.getBlackRow(h, i)\r\n                } catch (t) {\r\n                    continue\r\n                }\r\n                for (let t = 0; t < 2; t++) {\r\n                    if (1 === t && (i.reverse(), e && !0 === e.get(C.NEED_RESULT_POINT_CALLBACK))) {\r\n                        const t = new Map;\r\n                        e.forEach((e, r) => t.set(r, e)), t.delete(C.NEED_RESULT_POINT_CALLBACK), e = t\r\n                    }\r\n                    try {\r\n                        const n = this.decodeRow(h, i, e);\r\n                        if (1 === t) {\r\n                            n.putMetadata(W.ORIENTATION, 180);\r\n                            const t = n.getResultPoints();\r\n                            null !== t && (t[0] = new rt(r - t[0].getX() - 1, t[0].getY()), t[1] = new rt(r - t[1].getX() - 1, t[1].getY()))\r\n                        }\r\n                        return n\r\n                    } catch (t) {}\r\n                }\r\n            }\r\n            throw new R\r\n        }\r\n        static recordPattern(t, e, r) {\r\n            const n = r.length;\r\n            for (let t = 0; t < n; t++) r[t] = 0;\r\n            const i = t.getSize();\r\n            if (e >= i) throw new R;\r\n            let s = !t.get(e),\r\n                    o = 0,\r\n                    a = e;\r\n            for (; a < i;) {\r\n                if (t.get(a) !== s) r[o]++;\r\n                else {\r\n                    if (++o === n) break;\r\n                    r[o] = 1, s = !s\r\n                }\r\n                a++\r\n            }\r\n            if (o !== n && (o !== n - 1 || a !== i)) throw new R\r\n        }\r\n        static recordPatternInReverse(t, e, r) {\r\n            let n = r.length,\r\n                    i = t.get(e);\r\n            for (; e > 0 && n >= 0;) t.get(--e) !== i && (n--, i = !i);\r\n            if (n >= 0) throw new R;\r\n            gt.recordPattern(t, e + 1, r)\r\n        }\r\n        static patternMatchVariance(t, e, r) {\r\n            const n = t.length;\r\n            let i = 0,\r\n                    s = 0;\r\n            for (let r = 0; r < n; r++) i += t[r], s += e[r];\r\n            if (i < s) return Number.POSITIVE_INFINITY;\r\n            const o = i / s;\r\n            r *= o;\r\n            let a = 0;\r\n            for (let i = 0; i < n; i++) {\r\n                const n = t[i],\r\n                        s = e[i] * o,\r\n                        l = n > s ? n - s : s - n;\r\n                if (l > r) return Number.POSITIVE_INFINITY;\r\n                a += l\r\n            }\r\n            return a / i\r\n        }\r\n    }\r\n    class ft extends gt {\r\n        static findStartPattern(t) {\r\n            const e = t.getSize(),\r\n                    r = t.getNextSet(0);\r\n            let n = 0,\r\n                    i = Int32Array.from([0, 0, 0, 0, 0, 0]),\r\n                    s = r,\r\n                    o = !1;\r\n            for (let a = r; a < e; a++)\r\n                if (t.get(a) !== o) i[n]++;\r\n                else {\r\n                    if (5 === n) {\r\n                        let e = ft.MAX_AVG_VARIANCE,\r\n                                r = -1;\r\n                        for (let t = ft.CODE_START_A; t <= ft.CODE_START_C; t++) {\r\n                            const n = gt.patternMatchVariance(i, ft.CODE_PATTERNS[t], ft.MAX_INDIVIDUAL_VARIANCE);\r\n                            n < e && (e = n, r = t)\r\n                        }\r\n                        if (r >= 0 && t.isRange(Math.max(0, s - (a - s) / 2), s, !1)) return Int32Array.from([s, a, r]);\r\n                        s += i[0] + i[1], (i = i.slice(2, i.length - 1))[n - 1] = 0, i[n] = 0, n--\r\n                    } else n++;\r\n                    i[n] = 1, o = !o\r\n                } throw new R\r\n        }\r\n        static decodeCode(t, e, r) {\r\n            gt.recordPattern(t, r, e);\r\n            let n = ft.MAX_AVG_VARIANCE,\r\n                    i = -1;\r\n            for (let t = 0; t < ft.CODE_PATTERNS.length; t++) {\r\n                const r = ft.CODE_PATTERNS[t],\r\n                        s = this.patternMatchVariance(e, r, ft.MAX_INDIVIDUAL_VARIANCE);\r\n                s < n && (n = s, i = t)\r\n            }\r\n            if (i >= 0) return i;\r\n            throw new R\r\n        }\r\n        decodeRow(t, e, r) {\r\n            const n = r && !0 === r.get(C.ASSUME_GS1),\r\n                    i = ft.findStartPattern(e),\r\n                    s = i[2];\r\n            let o = 0;\r\n            const a = new Uint8Array(20);\r\n            let h;\r\n            switch (a[o++] = s, s) {\r\n                case ft.CODE_START_A:\r\n                    h = ft.CODE_CODE_A;\r\n                    break;\r\n                case ft.CODE_START_B:\r\n                    h = ft.CODE_CODE_B;\r\n                    break;\r\n                case ft.CODE_START_C:\r\n                    h = ft.CODE_CODE_C;\r\n                    break;\r\n                default:\r\n                    throw new E\r\n            }\r\n            let c = !1,\r\n                    u = !1,\r\n                    d = \"\",\r\n                    g = i[0],\r\n                    f = i[1];\r\n            const w = Int32Array.from([0, 0, 0, 0, 0, 0]);\r\n            let A = 0,\r\n                    m = 0,\r\n                    _ = s,\r\n                    I = 0,\r\n                    S = !0,\r\n                    p = !1,\r\n                    T = !1;\r\n            for (; !c;) {\r\n                const t = u;\r\n                switch (u = !1, A = m, m = ft.decodeCode(e, w, f), a[o++] = m, m !== ft.CODE_STOP && (S = !0), m !== ft.CODE_STOP && (_ += ++I * m), g = f, f += w.reduce((t, e) => t + e, 0), m) {\r\n                    case ft.CODE_START_A:\r\n                    case ft.CODE_START_B:\r\n                    case ft.CODE_START_C:\r\n                        throw new E\r\n                }\r\n                switch (h) {\r\n                    case ft.CODE_CODE_A:\r\n                        if (m < 64) d += T === p ? String.fromCharCode(\" \".charCodeAt(0) + m) : String.fromCharCode(\" \".charCodeAt(0) + m + 128), T = !1;\r\n                        else if (m < 96) d += T === p ? String.fromCharCode(m - 64) : String.fromCharCode(m + 64), T = !1;\r\n                        else switch (m !== ft.CODE_STOP && (S = !1), m) {\r\n                                case ft.CODE_FNC_1:\r\n                                    n && (0 === d.length ? d += \"]C1\" : d += String.fromCharCode(29));\r\n                                    break;\r\n                                case ft.CODE_FNC_2:\r\n                                case ft.CODE_FNC_3:\r\n                                    break;\r\n                                case ft.CODE_FNC_4_A:\r\n                                    !p && T ? (p = !0, T = !1) : p && T ? (p = !1, T = !1) : T = !0;\r\n                                    break;\r\n                                case ft.CODE_SHIFT:\r\n                                    u = !0, h = ft.CODE_CODE_B;\r\n                                    break;\r\n                                case ft.CODE_CODE_B:\r\n                                    h = ft.CODE_CODE_B;\r\n                                    break;\r\n                                case ft.CODE_CODE_C:\r\n                                    h = ft.CODE_CODE_C;\r\n                                    break;\r\n                                case ft.CODE_STOP:\r\n                                    c = !0\r\n                            }\r\n                        break;\r\n                    case ft.CODE_CODE_B:\r\n                        if (m < 96) d += T === p ? String.fromCharCode(\" \".charCodeAt(0) + m) : String.fromCharCode(\" \".charCodeAt(0) + m + 128), T = !1;\r\n                        else switch (m !== ft.CODE_STOP && (S = !1), m) {\r\n                            case ft.CODE_FNC_1:\r\n                                n && (0 === d.length ? d += \"]C1\" : d += String.fromCharCode(29));\r\n                                break;\r\n                            case ft.CODE_FNC_2:\r\n                            case ft.CODE_FNC_3:\r\n                                break;\r\n                            case ft.CODE_FNC_4_B:\r\n                                !p && T ? (p = !0, T = !1) : p && T ? (p = !1, T = !1) : T = !0;\r\n                                break;\r\n                            case ft.CODE_SHIFT:\r\n                                u = !0, h = ft.CODE_CODE_A;\r\n                                break;\r\n                            case ft.CODE_CODE_A:\r\n                                h = ft.CODE_CODE_A;\r\n                                break;\r\n                            case ft.CODE_CODE_C:\r\n                                h = ft.CODE_CODE_C;\r\n                                break;\r\n                            case ft.CODE_STOP:\r\n                                c = !0\r\n                        }\r\n                        break;\r\n                    case ft.CODE_CODE_C:\r\n                        if (m < 100) m < 10 && (d += \"0\"), d += m;\r\n                        else switch (m !== ft.CODE_STOP && (S = !1), m) {\r\n                            case ft.CODE_FNC_1:\r\n                                n && (0 === d.length ? d += \"]C1\" : d += String.fromCharCode(29));\r\n                                break;\r\n                            case ft.CODE_CODE_A:\r\n                                h = ft.CODE_CODE_A;\r\n                                break;\r\n                            case ft.CODE_CODE_B:\r\n                                h = ft.CODE_CODE_B;\r\n                                break;\r\n                            case ft.CODE_STOP:\r\n                                c = !0\r\n                        }\r\n                }\r\n                t && (h = h === ft.CODE_CODE_A ? ft.CODE_CODE_B : ft.CODE_CODE_A)\r\n            }\r\n            const N = f - g;\r\n            if (f = e.getNextUnset(f), !e.isRange(f, Math.min(e.getSize(), f + (f - g) / 2), !1)) throw new R;\r\n            if ((_ -= I * A) % 103 !== A) throw new l;\r\n            const D = d.length;\r\n            if (0 === D) throw new R;\r\n            D > 0 && S && (d = h === ft.CODE_CODE_C ? d.substring(0, D - 2) : d.substring(0, D - 1));\r\n            const y = (i[1] + i[0]) / 2,\r\n                    O = g + N / 2,\r\n                    M = a.length,\r\n                    b = new Uint8Array(M);\r\n            for (let t = 0; t < M; t++) b[t] = a[t];\r\n            const B = [new rt(y, t), new rt(O, t)];\r\n            return new F(d, b, 0, B, k.CODE_128, (new Date).getTime())\r\n        }\r\n    }\r\n    ft.CODE_PATTERNS = [Int32Array.from([2, 1, 2, 2, 2, 2]), Int32Array.from([2, 2, 2, 1, 2, 2]), Int32Array.from([2, 2, 2, 2, 2, 1]), Int32Array.from([1, 2, 1, 2, 2, 3]), Int32Array.from([1, 2, 1, 3, 2, 2]), Int32Array.from([1, 3, 1, 2, 2, 2]), Int32Array.from([1, 2, 2, 2, 1, 3]), Int32Array.from([1, 2, 2, 3, 1, 2]), Int32Array.from([1, 3, 2, 2, 1, 2]), Int32Array.from([2, 2, 1, 2, 1, 3]), Int32Array.from([2, 2, 1, 3, 1, 2]), Int32Array.from([2, 3, 1, 2, 1, 2]), Int32Array.from([1, 1, 2, 2, 3, 2]), Int32Array.from([1, 2, 2, 1, 3, 2]), Int32Array.from([1, 2, 2, 2, 3, 1]), Int32Array.from([1, 1, 3, 2, 2, 2]), Int32Array.from([1, 2, 3, 1, 2, 2]), Int32Array.from([1, 2, 3, 2, 2, 1]), Int32Array.from([2, 2, 3, 2, 1, 1]), Int32Array.from([2, 2, 1, 1, 3, 2]), Int32Array.from([2, 2, 1, 2, 3, 1]), Int32Array.from([2, 1, 3, 2, 1, 2]), Int32Array.from([2, 2, 3, 1, 1, 2]), Int32Array.from([3, 1, 2, 1, 3, 1]), Int32Array.from([3, 1, 1, 2, 2, 2]), Int32Array.from([3, 2, 1, 1, 2, 2]), Int32Array.from([3, 2, 1, 2, 2, 1]), Int32Array.from([3, 1, 2, 2, 1, 2]), Int32Array.from([3, 2, 2, 1, 1, 2]), Int32Array.from([3, 2, 2, 2, 1, 1]), Int32Array.from([2, 1, 2, 1, 2, 3]), Int32Array.from([2, 1, 2, 3, 2, 1]), Int32Array.from([2, 3, 2, 1, 2, 1]), Int32Array.from([1, 1, 1, 3, 2, 3]), Int32Array.from([1, 3, 1, 1, 2, 3]), Int32Array.from([1, 3, 1, 3, 2, 1]), Int32Array.from([1, 1, 2, 3, 1, 3]), Int32Array.from([1, 3, 2, 1, 1, 3]), Int32Array.from([1, 3, 2, 3, 1, 1]), Int32Array.from([2, 1, 1, 3, 1, 3]), Int32Array.from([2, 3, 1, 1, 1, 3]), Int32Array.from([2, 3, 1, 3, 1, 1]), Int32Array.from([1, 1, 2, 1, 3, 3]), Int32Array.from([1, 1, 2, 3, 3, 1]), Int32Array.from([1, 3, 2, 1, 3, 1]), Int32Array.from([1, 1, 3, 1, 2, 3]), Int32Array.from([1, 1, 3, 3, 2, 1]), Int32Array.from([1, 3, 3, 1, 2, 1]), Int32Array.from([3, 1, 3, 1, 2, 1]), Int32Array.from([2, 1, 1, 3, 3, 1]), Int32Array.from([2, 3, 1, 1, 3, 1]), Int32Array.from([2, 1, 3, 1, 1, 3]), Int32Array.from([2, 1, 3, 3, 1, 1]), Int32Array.from([2, 1, 3, 1, 3, 1]), Int32Array.from([3, 1, 1, 1, 2, 3]), Int32Array.from([3, 1, 1, 3, 2, 1]), Int32Array.from([3, 3, 1, 1, 2, 1]), Int32Array.from([3, 1, 2, 1, 1, 3]), Int32Array.from([3, 1, 2, 3, 1, 1]), Int32Array.from([3, 3, 2, 1, 1, 1]), Int32Array.from([3, 1, 4, 1, 1, 1]), Int32Array.from([2, 2, 1, 4, 1, 1]), Int32Array.from([4, 3, 1, 1, 1, 1]), Int32Array.from([1, 1, 1, 2, 2, 4]), Int32Array.from([1, 1, 1, 4, 2, 2]), Int32Array.from([1, 2, 1, 1, 2, 4]), Int32Array.from([1, 2, 1, 4, 2, 1]), Int32Array.from([1, 4, 1, 1, 2, 2]), Int32Array.from([1, 4, 1, 2, 2, 1]), Int32Array.from([1, 1, 2, 2, 1, 4]), Int32Array.from([1, 1, 2, 4, 1, 2]), Int32Array.from([1, 2, 2, 1, 1, 4]), Int32Array.from([1, 2, 2, 4, 1, 1]), Int32Array.from([1, 4, 2, 1, 1, 2]), Int32Array.from([1, 4, 2, 2, 1, 1]), Int32Array.from([2, 4, 1, 2, 1, 1]), Int32Array.from([2, 2, 1, 1, 1, 4]), Int32Array.from([4, 1, 3, 1, 1, 1]), Int32Array.from([2, 4, 1, 1, 1, 2]), Int32Array.from([1, 3, 4, 1, 1, 1]), Int32Array.from([1, 1, 1, 2, 4, 2]), Int32Array.from([1, 2, 1, 1, 4, 2]), Int32Array.from([1, 2, 1, 2, 4, 1]), Int32Array.from([1, 1, 4, 2, 1, 2]), Int32Array.from([1, 2, 4, 1, 1, 2]), Int32Array.from([1, 2, 4, 2, 1, 1]), Int32Array.from([4, 1, 1, 2, 1, 2]), Int32Array.from([4, 2, 1, 1, 1, 2]), Int32Array.from([4, 2, 1, 2, 1, 1]), Int32Array.from([2, 1, 2, 1, 4, 1]), Int32Array.from([2, 1, 4, 1, 2, 1]), Int32Array.from([4, 1, 2, 1, 2, 1]), Int32Array.from([1, 1, 1, 1, 4, 3]), Int32Array.from([1, 1, 1, 3, 4, 1]), Int32Array.from([1, 3, 1, 1, 4, 1]), Int32Array.from([1, 1, 4, 1, 1, 3]), Int32Array.from([1, 1, 4, 3, 1, 1]), Int32Array.from([4, 1, 1, 1, 1, 3]), Int32Array.from([4, 1, 1, 3, 1, 1]), Int32Array.from([1, 1, 3, 1, 4, 1]), Int32Array.from([1, 1, 4, 1, 3, 1]), Int32Array.from([3, 1, 1, 1, 4, 1]), Int32Array.from([4, 1, 1, 1, 3, 1]), Int32Array.from([2, 1, 1, 4, 1, 2]), Int32Array.from([2, 1, 1, 2, 1, 4]), Int32Array.from([2, 1, 1, 2, 3, 2]), Int32Array.from([2, 3, 3, 1, 1, 1, 2])], ft.MAX_AVG_VARIANCE = .25, ft.MAX_INDIVIDUAL_VARIANCE = .7, ft.CODE_SHIFT = 98, ft.CODE_CODE_C = 99, ft.CODE_CODE_B = 100, ft.CODE_CODE_A = 101, ft.CODE_FNC_1 = 102, ft.CODE_FNC_2 = 97, ft.CODE_FNC_3 = 96, ft.CODE_FNC_4_A = 101, ft.CODE_FNC_4_B = 100, ft.CODE_START_A = 103, ft.CODE_START_B = 104, ft.CODE_START_C = 105, ft.CODE_STOP = 106;\r\n    class wt extends gt {\r\n        constructor(t = !1, e = !1) {\r\n            super(), this.usingCheckDigit = t, this.extendedMode = e, this.decodeRowResult = \"\", this.counters = new Int32Array(9)\r\n        }\r\n        decodeRow(t, e, r) {\r\n            let n = this.counters;\r\n            n.fill(0), this.decodeRowResult = \"\";\r\n            let i, s, o = wt.findAsteriskPattern(e, n),\r\n                    a = e.getNextSet(o[1]),\r\n                    h = e.getSize();\r\n            do {\r\n                wt.recordPattern(e, a, n);\r\n                let t = wt.toNarrowWidePattern(n);\r\n                if (t < 0) throw new R;\r\n                i = wt.patternToChar(t), this.decodeRowResult += i, s = a;\r\n                for (let t of n) a += t;\r\n                a = e.getNextSet(a)\r\n            } while (\"*\" !== i);\r\n            this.decodeRowResult = this.decodeRowResult.substring(0, this.decodeRowResult.length - 1);\r\n            let c, u = 0;\r\n            for (let t of n) u += t;\r\n            if (a !== h && 2 * (a - s - u) < u) throw new R;\r\n            if (this.usingCheckDigit) {\r\n                let t = this.decodeRowResult.length - 1,\r\n                        e = 0;\r\n                for (let r = 0; r < t; r++) e += wt.ALPHABET_STRING.indexOf(this.decodeRowResult.charAt(r));\r\n                if (this.decodeRowResult.charAt(t) !== wt.ALPHABET_STRING.charAt(e % 43)) throw new l;\r\n                this.decodeRowResult = this.decodeRowResult.substring(0, t)\r\n            }\r\n            if (0 === this.decodeRowResult.length) throw new R;\r\n            c = this.extendedMode ? wt.decodeExtended(this.decodeRowResult) : this.decodeRowResult;\r\n            let d = (o[1] + o[0]) / 2,\r\n                    g = s + u / 2;\r\n            return new F(c, null, 0, [new rt(d, t), new rt(g, t)], k.CODE_39, (new Date).getTime())\r\n        }\r\n        static findAsteriskPattern(t, e) {\r\n            let r = t.getSize(),\r\n                    n = t.getNextSet(0),\r\n                    i = 0,\r\n                    s = n,\r\n                    o = !1,\r\n                    a = e.length;\r\n            for (let l = n; l < r; l++)\r\n                if (t.get(l) !== o) e[i]++;\r\n                else {\r\n                    if (i === a - 1) {\r\n                        if (this.toNarrowWidePattern(e) === wt.ASTERISK_ENCODING && t.isRange(Math.max(0, s - Math.floor((l - s) / 2)), s, !1)) return [s, l];\r\n                        s += e[0] + e[1], e.copyWithin(0, 2, 2 + i - 1), e[i - 1] = 0, e[i] = 0, i--\r\n                    } else i++;\r\n                    e[i] = 1, o = !o\r\n                } throw new R\r\n        }\r\n        static toNarrowWidePattern(t) {\r\n            let e, r = t.length,\r\n                    n = 0;\r\n            do {\r\n                let i = 2147483647;\r\n                for (let e of t) e < i && e > n && (i = e);\r\n                n = i, e = 0;\r\n                let s = 0,\r\n                        o = 0;\r\n                for (let i = 0; i < r; i++) {\r\n                    let a = t[i];\r\n                    a > n && (o |= 1 << r - 1 - i, e++, s += a)\r\n                }\r\n                if (3 === e) {\r\n                    for (let i = 0; i < r && e > 0; i++) {\r\n                        let r = t[i];\r\n                        if (r > n && (e--, 2 * r >= s)) return -1\r\n                    }\r\n                    return o\r\n                }\r\n            } while (e > 3);\r\n            return -1\r\n        }\r\n        static patternToChar(t) {\r\n            for (let e = 0; e < wt.CHARACTER_ENCODINGS.length; e++)\r\n                if (wt.CHARACTER_ENCODINGS[e] === t) return wt.ALPHABET_STRING.charAt(e);\r\n            if (t === wt.ASTERISK_ENCODING) return \"*\";\r\n            throw new R\r\n        }\r\n        static decodeExtended(t) {\r\n            let e = t.length,\r\n                    r = \"\";\r\n            for (let n = 0; n < e; n++) {\r\n                let e = t.charAt(n);\r\n                if (\"+\" === e || \"$\" === e || \"%\" === e || \"/\" === e) {\r\n                    let i = t.charAt(n + 1),\r\n                            s = \"\\0\";\r\n                    switch (e) {\r\n                        case \"+\":\r\n                            if (!(i >= \"A\" && i <= \"Z\")) throw new E;\r\n                            s = String.fromCharCode(i.charCodeAt(0) + 32);\r\n                            break;\r\n                        case \"$\":\r\n                            if (!(i >= \"A\" && i <= \"Z\")) throw new E;\r\n                            s = String.fromCharCode(i.charCodeAt(0) - 64);\r\n                            break;\r\n                        case \"%\":\r\n                            if (i >= \"A\" && i <= \"E\") s = String.fromCharCode(i.charCodeAt(0) - 38);\r\n                            else if (i >= \"F\" && i <= \"J\") s = String.fromCharCode(i.charCodeAt(0) - 11);\r\n                            else if (i >= \"K\" && i <= \"O\") s = String.fromCharCode(i.charCodeAt(0) + 16);\r\n                            else if (i >= \"P\" && i <= \"T\") s = String.fromCharCode(i.charCodeAt(0) + 43);\r\n                            else if (\"U\" === i) s = \"\\0\";\r\n                            else if (\"V\" === i) s = \"@\";\r\n                            else if (\"W\" === i) s = \"`\";\r\n                            else {\r\n                                if (\"X\" !== i && \"Y\" !== i && \"Z\" !== i) throw new E;\r\n                                s = \"\"\r\n                            }\r\n                            break;\r\n                        case \"/\":\r\n                            if (i >= \"A\" && i <= \"O\") s = String.fromCharCode(i.charCodeAt(0) - 32);\r\n                            else {\r\n                                if (\"Z\" !== i) throw new E;\r\n                                s = \":\"\r\n                            }\r\n                    }\r\n                    r += s, n++\r\n                } else r += e\r\n            }\r\n            return r\r\n        }\r\n    }\r\n    wt.ALPHABET_STRING = \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%\", wt.CHARACTER_ENCODINGS = [52, 289, 97, 352, 49, 304, 112, 37, 292, 100, 265, 73, 328, 25, 280, 88, 13, 268, 76, 28, 259, 67, 322, 19, 274, 82, 7, 262, 70, 22, 385, 193, 448, 145, 400, 208, 133, 388, 196, 168, 162, 138, 42], wt.ASTERISK_ENCODING = 148;\r\n    class At extends gt {\r\n        constructor() {\r\n            super(...arguments), this.narrowLineWidth = -1\r\n        }\r\n        decodeRow(t, e, r) {\r\n            let n = this.decodeStart(e),\r\n                    i = this.decodeEnd(e),\r\n                    s = new p;\r\n            At.decodeMiddle(e, n[1], i[0], s);\r\n            let o = s.toString(),\r\n                    a = null;\r\n            null != r && (a = r.get(C.ALLOWED_LENGTHS)), null == a && (a = At.DEFAULT_ALLOWED_LENGTHS);\r\n            let l = o.length,\r\n                    h = !1,\r\n                    c = 0;\r\n            for (let t of a) {\r\n                if (l === t) {\r\n                    h = !0;\r\n                    break\r\n                }\r\n                t > c && (c = t)\r\n            }\r\n            if (!h && l > c && (h = !0), !h) throw new E;\r\n            const u = [new rt(n[1], t), new rt(i[0], t)];\r\n            return new F(o, null, 0, u, k.ITF, (new Date).getTime())\r\n        }\r\n        static decodeMiddle(t, e, r, n) {\r\n            let i = new Int32Array(10),\r\n                    s = new Int32Array(5),\r\n                    o = new Int32Array(5);\r\n            for (i.fill(0), s.fill(0), o.fill(0); e < r;) {\r\n                gt.recordPattern(t, e, i);\r\n                for (let t = 0; t < 5; t++) {\r\n                    let e = 2 * t;\r\n                    s[t] = i[e], o[t] = i[e + 1]\r\n                }\r\n                let r = At.decodeDigit(s);\r\n                n.append(r.toString()), r = this.decodeDigit(o), n.append(r.toString()), i.forEach(function(t) {\r\n                    e += t\r\n                })\r\n            }\r\n        }\r\n        decodeStart(t) {\r\n            let e = At.skipWhiteSpace(t),\r\n                    r = At.findGuardPattern(t, e, At.START_PATTERN);\r\n            return this.narrowLineWidth = (r[1] - r[0]) / 4, this.validateQuietZone(t, r[0]), r\r\n        }\r\n        validateQuietZone(t, e) {\r\n            let r = 10 * this.narrowLineWidth;\r\n            r = r < e ? r : e;\r\n            for (let n = e - 1; r > 0 && n >= 0 && !t.get(n); n--) r--;\r\n            if (0 !== r) throw new R\r\n        }\r\n        static skipWhiteSpace(t) {\r\n            const e = t.getSize(),\r\n                    r = t.getNextSet(0);\r\n            if (r === e) throw new R;\r\n            return r\r\n        }\r\n        decodeEnd(t) {\r\n            t.reverse();\r\n            try {\r\n                let e, r = At.skipWhiteSpace(t);\r\n                try {\r\n                    e = At.findGuardPattern(t, r, At.END_PATTERN_REVERSED[0])\r\n                } catch (n) {\r\n                    n instanceof R && (e = At.findGuardPattern(t, r, At.END_PATTERN_REVERSED[1]))\r\n                }\r\n                this.validateQuietZone(t, e[0]);\r\n                let n = e[0];\r\n                return e[0] = t.getSize() - e[1], e[1] = t.getSize() - n, e\r\n            } finally {\r\n                t.reverse()\r\n            }\r\n        }\r\n        static findGuardPattern(t, e, r) {\r\n            let n = r.length,\r\n                    i = new Int32Array(n),\r\n                    s = t.getSize(),\r\n                    o = !1,\r\n                    a = 0,\r\n                    l = e;\r\n            i.fill(0);\r\n            for (let h = e; h < s; h++)\r\n                if (t.get(h) !== o) i[a]++;\r\n                else {\r\n                    if (a === n - 1) {\r\n                        if (gt.patternMatchVariance(i, r, At.MAX_INDIVIDUAL_VARIANCE) < At.MAX_AVG_VARIANCE) return [l, h];\r\n                        l += i[0] + i[1], c.arraycopy(i, 2, i, 0, a - 1), i[a - 1] = 0, i[a] = 0, a--\r\n                    } else a++;\r\n                    i[a] = 1, o = !o\r\n                } throw new R\r\n        }\r\n        static decodeDigit(t) {\r\n            let e = At.MAX_AVG_VARIANCE,\r\n                    r = -1,\r\n                    n = At.PATTERNS.length;\r\n            for (let i = 0; i < n; i++) {\r\n                let n = At.PATTERNS[i],\r\n                        s = gt.patternMatchVariance(t, n, At.MAX_INDIVIDUAL_VARIANCE);\r\n                s < e ? (e = s, r = i) : s === e && (r = -1)\r\n            }\r\n            if (r >= 0) return r % 10;\r\n            throw new R\r\n        }\r\n    }\r\n    At.PATTERNS = [Int32Array.from([1, 1, 2, 2, 1]), Int32Array.from([2, 1, 1, 1, 2]), Int32Array.from([1, 2, 1, 1, 2]), Int32Array.from([2, 2, 1, 1, 1]), Int32Array.from([1, 1, 2, 1, 2]), Int32Array.from([2, 1, 2, 1, 1]), Int32Array.from([1, 2, 2, 1, 1]), Int32Array.from([1, 1, 1, 2, 2]), Int32Array.from([2, 1, 1, 2, 1]), Int32Array.from([1, 2, 1, 2, 1]), Int32Array.from([1, 1, 3, 3, 1]), Int32Array.from([3, 1, 1, 1, 3]), Int32Array.from([1, 3, 1, 1, 3]), Int32Array.from([3, 3, 1, 1, 1]), Int32Array.from([1, 1, 3, 1, 3]), Int32Array.from([3, 1, 3, 1, 1]), Int32Array.from([1, 3, 3, 1, 1]), Int32Array.from([1, 1, 1, 3, 3]), Int32Array.from([3, 1, 1, 3, 1]), Int32Array.from([1, 3, 1, 3, 1])], At.MAX_AVG_VARIANCE = .38, At.MAX_INDIVIDUAL_VARIANCE = .5, At.DEFAULT_ALLOWED_LENGTHS = [6, 8, 10, 12, 14], At.START_PATTERN = Int32Array.from([1, 1, 1, 1]), At.END_PATTERN_REVERSED = [Int32Array.from([1, 1, 2]), Int32Array.from([1, 1, 3])];\r\n    class Ct extends gt {\r\n        constructor() {\r\n            super(...arguments), this.decodeRowStringBuffer = \"\"\r\n        }\r\n        static findStartGuardPattern(t) {\r\n            let e, r = !1,\r\n                    n = 0,\r\n                    i = Int32Array.from([0, 0, 0]);\r\n            for (; !r;) {\r\n                i = Int32Array.from([0, 0, 0]);\r\n                let s = (e = Ct.findGuardPattern(t, n, !1, this.START_END_PATTERN, i))[0],\r\n                        o = s - ((n = e[1]) - s);\r\n                o >= 0 && (r = t.isRange(o, s, !1))\r\n            }\r\n            return e\r\n        }\r\n        static checkChecksum(t) {\r\n            return Ct.checkStandardUPCEANChecksum(t)\r\n        }\r\n        static checkStandardUPCEANChecksum(t) {\r\n            let e = t.length;\r\n            if (0 === e) return !1;\r\n            let r = parseInt(t.charAt(e - 1), 10);\r\n            return Ct.getStandardUPCEANChecksum(t.substring(0, e - 1)) === r\r\n        }\r\n        static getStandardUPCEANChecksum(t) {\r\n            let e = t.length,\r\n                    r = 0;\r\n            for (let n = e - 1; n >= 0; n -= 2) {\r\n                let e = t.charAt(n).charCodeAt(0) - \"0\".charCodeAt(0);\r\n                if (e < 0 || e > 9) throw new E;\r\n                r += e\r\n            }\r\n            r *= 3;\r\n            for (let n = e - 2; n >= 0; n -= 2) {\r\n                let e = t.charAt(n).charCodeAt(0) - \"0\".charCodeAt(0);\r\n                if (e < 0 || e > 9) throw new E;\r\n                r += e\r\n            }\r\n            return (1e3 - r) % 10\r\n        }\r\n        static decodeEnd(t, e) {\r\n            return Ct.findGuardPattern(t, e, !1, Ct.START_END_PATTERN, new Int32Array(Ct.START_END_PATTERN.length).fill(0))\r\n        }\r\n        static findGuardPatternWithoutCounters(t, e, r, n) {\r\n            return this.findGuardPattern(t, e, r, n, new Int32Array(n.length))\r\n        }\r\n        static findGuardPattern(t, e, r, n, i) {\r\n            let s = t.getSize(),\r\n                    o = 0,\r\n                    a = e = r ? t.getNextUnset(e) : t.getNextSet(e),\r\n                    l = n.length,\r\n                    h = r;\r\n            for (let r = e; r < s; r++)\r\n                if (t.get(r) !== h) i[o]++;\r\n                else {\r\n                    if (o === l - 1) {\r\n                        if (gt.patternMatchVariance(i, n, Ct.MAX_INDIVIDUAL_VARIANCE) < Ct.MAX_AVG_VARIANCE) return Int32Array.from([a, r]);\r\n                        a += i[0] + i[1];\r\n                        let t = i.slice(2, i.length - 1);\r\n                        for (let e = 0; e < o - 1; e++) i[e] = t[e];\r\n                        i[o - 1] = 0, i[o] = 0, o--\r\n                    } else o++;\r\n                    i[o] = 1, h = !h\r\n                } throw new R\r\n        }\r\n        static decodeDigit(t, e, r, n) {\r\n            this.recordPattern(t, r, e);\r\n            let i = this.MAX_AVG_VARIANCE,\r\n                    s = -1,\r\n                    o = n.length;\r\n            for (let t = 0; t < o; t++) {\r\n                let r = n[t],\r\n                        o = gt.patternMatchVariance(e, r, Ct.MAX_INDIVIDUAL_VARIANCE);\r\n                o < i && (i = o, s = t)\r\n            }\r\n            if (s >= 0) return s;\r\n            throw new R\r\n        }\r\n    }\r\n    Ct.MAX_AVG_VARIANCE = .48, Ct.MAX_INDIVIDUAL_VARIANCE = .7, Ct.START_END_PATTERN = Int32Array.from([1, 1, 1]), Ct.MIDDLE_PATTERN = Int32Array.from([1, 1, 1, 1, 1]), Ct.END_PATTERN = Int32Array.from([1, 1, 1, 1, 1, 1]), Ct.L_PATTERNS = [Int32Array.from([3, 2, 1, 1]), Int32Array.from([2, 2, 2, 1]), Int32Array.from([2, 1, 2, 2]), Int32Array.from([1, 4, 1, 1]), Int32Array.from([1, 1, 3, 2]), Int32Array.from([1, 2, 3, 1]), Int32Array.from([1, 1, 1, 4]), Int32Array.from([1, 3, 1, 2]), Int32Array.from([1, 2, 1, 3]), Int32Array.from([3, 1, 1, 2])];\r\n    class Et {\r\n        constructor() {\r\n            this.CHECK_DIGIT_ENCODINGS = [24, 20, 18, 17, 12, 6, 3, 10, 9, 5], this.decodeMiddleCounters = Int32Array.from([0, 0, 0, 0]), this.decodeRowStringBuffer = \"\"\r\n        }\r\n        decodeRow(t, e, r) {\r\n            let n = this.decodeRowStringBuffer,\r\n                    i = this.decodeMiddle(e, r, n),\r\n                    s = n.toString(),\r\n                    o = Et.parseExtensionString(s),\r\n                    a = [new rt((r[0] + r[1]) / 2, t), new rt(i, t)],\r\n                    l = new F(s, null, 0, a, k.UPC_EAN_EXTENSION, (new Date).getTime());\r\n            return null != o && l.putAllMetadata(o), l\r\n        }\r\n        decodeMiddle(t, e, r) {\r\n            let n = this.decodeMiddleCounters;\r\n            n[0] = 0, n[1] = 0, n[2] = 0, n[3] = 0;\r\n            let i = t.getSize(),\r\n                    s = e[1],\r\n                    o = 0;\r\n            for (let e = 0; e < 5 && s < i; e++) {\r\n                let i = Ct.decodeDigit(t, n, s, Ct.L_AND_G_PATTERNS);\r\n                r += String.fromCharCode(\"0\".charCodeAt(0) + i % 10);\r\n                for (let t of n) s += t;\r\n                i >= 10 && (o |= 1 << 4 - e), 4 !== e && (s = t.getNextSet(s), s = t.getNextUnset(s))\r\n            }\r\n            if (5 !== r.length) throw new R;\r\n            let a = this.determineCheckDigit(o);\r\n            if (Et.extensionChecksum(r.toString()) !== a) throw new R;\r\n            return s\r\n        }\r\n        static extensionChecksum(t) {\r\n            let e = t.length,\r\n                    r = 0;\r\n            for (let n = e - 2; n >= 0; n -= 2) r += t.charAt(n).charCodeAt(0) - \"0\".charCodeAt(0);\r\n            r *= 3;\r\n            for (let n = e - 1; n >= 0; n -= 2) r += t.charAt(n).charCodeAt(0) - \"0\".charCodeAt(0);\r\n            return (r *= 3) % 10\r\n        }\r\n        determineCheckDigit(t) {\r\n            for (let e = 0; e < 10; e++)\r\n                if (t === this.CHECK_DIGIT_ENCODINGS[e]) return e;\r\n            throw new R\r\n        }\r\n        static parseExtensionString(t) {\r\n            if (5 !== t.length) return null;\r\n            let e = Et.parseExtension5String(t);\r\n            return null == e ? null : new Map([\r\n                                                  [W.SUGGESTED_PRICE, e]\r\n                                              ])\r\n        }\r\n        static parseExtension5String(t) {\r\n            let e;\r\n            switch (t.charAt(0)) {\r\n                case \"0\":\r\n                    e = \"Ã‚Â£\";\r\n                    break;\r\n                case \"5\":\r\n                    e = \"$\";\r\n                    break;\r\n                case \"9\":\r\n                    switch (t) {\r\n                        case \"90000\":\r\n                            return null;\r\n                        case \"99991\":\r\n                            return \"0.00\";\r\n                        case \"99990\":\r\n                            return \"Used\"\r\n                    }\r\n                    e = \"\";\r\n                    break;\r\n                default:\r\n                    e = \"\"\r\n            }\r\n            let r = parseInt(t.substring(1)),\r\n                    n = r % 100;\r\n            return e + (r / 100).toString() + \".\" + (n < 10 ? \"0\" + n : n.toString())\r\n        }\r\n    }\r\n    class mt {\r\n        constructor() {\r\n            this.decodeMiddleCounters = Int32Array.from([0, 0, 0, 0]), this.decodeRowStringBuffer = \"\"\r\n        }\r\n        decodeRow(t, e, r) {\r\n            let n = this.decodeRowStringBuffer,\r\n                    i = this.decodeMiddle(e, r, n),\r\n                    s = n.toString(),\r\n                    o = mt.parseExtensionString(s),\r\n                    a = [new rt((r[0] + r[1]) / 2, t), new rt(i, t)],\r\n                    l = new F(s, null, 0, a, k.UPC_EAN_EXTENSION, (new Date).getTime());\r\n            return null != o && l.putAllMetadata(o), l\r\n        }\r\n        decodeMiddle(t, e, r) {\r\n            let n = this.decodeMiddleCounters;\r\n            n[0] = 0, n[1] = 0, n[2] = 0, n[3] = 0;\r\n            let i = t.getSize(),\r\n                    s = e[1],\r\n                    o = 0;\r\n            for (let e = 0; e < 2 && s < i; e++) {\r\n                let i = Ct.decodeDigit(t, n, s, Ct.L_AND_G_PATTERNS);\r\n                r += String.fromCharCode(\"0\".charCodeAt(0) + i % 10);\r\n                for (let t of n) s += t;\r\n                i >= 10 && (o |= 1 << 1 - e), 1 !== e && (s = t.getNextSet(s), s = t.getNextUnset(s))\r\n            }\r\n            if (2 !== r.length) throw new R;\r\n            if (parseInt(r.toString()) % 4 !== o) throw new R;\r\n            return s\r\n        }\r\n        static parseExtensionString(t) {\r\n            return 2 !== t.length ? null : new Map([\r\n                                                       [W.ISSUE_NUMBER, parseInt(t)]\r\n                                                   ])\r\n        }\r\n    }\r\n    class _t {\r\n        static decodeRow(t, e, r) {\r\n            let n = Ct.findGuardPattern(e, r, !1, this.EXTENSION_START_PATTERN, new Int32Array(this.EXTENSION_START_PATTERN.length).fill(0));\r\n            try {\r\n                return (new Et).decodeRow(t, e, n)\r\n            } catch (r) {\r\n                return (new mt).decodeRow(t, e, n)\r\n            }\r\n        }\r\n    }\r\n    _t.EXTENSION_START_PATTERN = Int32Array.from([1, 1, 2]);\r\n    class It extends Ct {\r\n        constructor() {\r\n            super(), this.decodeRowStringBuffer = \"\", It.L_AND_G_PATTERNS = It.L_PATTERNS.map(t => Int32Array.from(t));\r\n            for (let t = 10; t < 20; t++) {\r\n                let e = It.L_PATTERNS[t - 10],\r\n                        r = new Int32Array(e.length);\r\n                for (let t = 0; t < e.length; t++) r[t] = e[e.length - t - 1];\r\n                It.L_AND_G_PATTERNS[t] = r\r\n            }\r\n        }\r\n        decodeRow(t, e, r) {\r\n            let n = It.findStartGuardPattern(e),\r\n                    i = null == r ? null : r.get(C.NEED_RESULT_POINT_CALLBACK);\r\n            if (null != i) {\r\n                const e = new rt((n[0] + n[1]) / 2, t);\r\n                i.foundPossibleResultPoint(e)\r\n            }\r\n            let s = this.decodeMiddle(e, n, this.decodeRowStringBuffer),\r\n                    o = s.rowOffset,\r\n                    a = s.resultString;\r\n            if (null != i) {\r\n                const e = new rt(o, t);\r\n                i.foundPossibleResultPoint(e)\r\n            }\r\n            let h = It.decodeEnd(e, o);\r\n            if (null != i) {\r\n                const e = new rt((h[0] + h[1]) / 2, t);\r\n                i.foundPossibleResultPoint(e)\r\n            }\r\n            let c = h[1],\r\n                    u = c + (c - h[0]);\r\n            if (u >= e.getSize() || !e.isRange(c, u, !1)) throw new R;\r\n            let d = a.toString();\r\n            if (d.length < 8) throw new E;\r\n            if (!It.checkChecksum(d)) throw new l;\r\n            let g = (n[1] + n[0]) / 2,\r\n                    f = (h[1] + h[0]) / 2,\r\n                    w = this.getBarcodeFormat(),\r\n                    A = [new rt(g, t), new rt(f, t)],\r\n                    m = new F(d, null, 0, A, w, (new Date).getTime()),\r\n                    _ = 0;\r\n            try {\r\n                let r = _t.decodeRow(t, e, h[1]);\r\n                m.putMetadata(W.UPC_EAN_EXTENSION, r.getText()), m.putAllMetadata(r.getResultMetadata()), m.addResultPoints(r.getResultPoints()), _ = r.getText().length\r\n            } catch (t) {}\r\n            let I = null == r ? null : r.get(C.ALLOWED_EAN_EXTENSIONS);\r\n            if (null != I) {\r\n                let t = !1;\r\n                for (let e in I)\r\n                    if (_.toString() === e) {\r\n                        t = !0;\r\n                        break\r\n                    } if (!t) throw new R\r\n            }\r\n            return w === k.EAN_13 || k.UPC_A, m\r\n        }\r\n        static checkChecksum(t) {\r\n            return It.checkStandardUPCEANChecksum(t)\r\n        }\r\n        static checkStandardUPCEANChecksum(t) {\r\n            let e = t.length;\r\n            if (0 === e) return !1;\r\n            let r = parseInt(t.charAt(e - 1), 10);\r\n            return It.getStandardUPCEANChecksum(t.substring(0, e - 1)) === r\r\n        }\r\n        static getStandardUPCEANChecksum(t) {\r\n            let e = t.length,\r\n                    r = 0;\r\n            for (let n = e - 1; n >= 0; n -= 2) {\r\n                let e = t.charAt(n).charCodeAt(0) - \"0\".charCodeAt(0);\r\n                if (e < 0 || e > 9) throw new E;\r\n                r += e\r\n            }\r\n            r *= 3;\r\n            for (let n = e - 2; n >= 0; n -= 2) {\r\n                let e = t.charAt(n).charCodeAt(0) - \"0\".charCodeAt(0);\r\n                if (e < 0 || e > 9) throw new E;\r\n                r += e\r\n            }\r\n            return (1e3 - r) % 10\r\n        }\r\n        static decodeEnd(t, e) {\r\n            return It.findGuardPattern(t, e, !1, It.START_END_PATTERN, new Int32Array(It.START_END_PATTERN.length).fill(0))\r\n        }\r\n    }\r\n    class St extends It {\r\n        constructor() {\r\n            super(), this.decodeMiddleCounters = Int32Array.from([0, 0, 0, 0])\r\n        }\r\n        decodeMiddle(t, e, r) {\r\n            let n = this.decodeMiddleCounters;\r\n            n[0] = 0, n[1] = 0, n[2] = 0, n[3] = 0;\r\n            let i = t.getSize(),\r\n                    s = e[1],\r\n                    o = 0;\r\n            for (let e = 0; e < 6 && s < i; e++) {\r\n                let i = It.decodeDigit(t, n, s, It.L_AND_G_PATTERNS);\r\n                r += String.fromCharCode(\"0\".charCodeAt(0) + i % 10);\r\n                for (let t of n) s += t;\r\n                i >= 10 && (o |= 1 << 5 - e)\r\n            }\r\n            r = St.determineFirstDigit(r, o), s = It.findGuardPattern(t, s, !0, It.MIDDLE_PATTERN, new Int32Array(It.MIDDLE_PATTERN.length).fill(0))[1];\r\n            for (let e = 0; e < 6 && s < i; e++) {\r\n                let e = It.decodeDigit(t, n, s, It.L_PATTERNS);\r\n                r += String.fromCharCode(\"0\".charCodeAt(0) + e);\r\n                for (let t of n) s += t\r\n            }\r\n            return {\r\n                rowOffset: s,\r\n                resultString: r\r\n            }\r\n        }\r\n        getBarcodeFormat() {\r\n            return k.EAN_13\r\n        }\r\n        static determineFirstDigit(t, e) {\r\n            for (let r = 0; r < 10; r++)\r\n                if (e === this.FIRST_DIGIT_ENCODINGS[r]) return t = String.fromCharCode(\"0\".charCodeAt(0) + r) + t;\r\n            throw new R\r\n        }\r\n    }\r\n    St.FIRST_DIGIT_ENCODINGS = [0, 11, 13, 14, 19, 25, 28, 21, 22, 26];\r\n    class pt extends It {\r\n        constructor() {\r\n            super(), this.decodeMiddleCounters = Int32Array.from([0, 0, 0, 0])\r\n        }\r\n        decodeMiddle(t, e, r) {\r\n            const n = this.decodeMiddleCounters;\r\n            n[0] = 0, n[1] = 0, n[2] = 0, n[3] = 0;\r\n            let i = t.getSize(),\r\n                    s = e[1];\r\n            for (let e = 0; e < 4 && s < i; e++) {\r\n                let e = It.decodeDigit(t, n, s, It.L_PATTERNS);\r\n                r += String.fromCharCode(\"0\".charCodeAt(0) + e);\r\n                for (let t of n) s += t\r\n            }\r\n            s = It.findGuardPattern(t, s, !0, It.MIDDLE_PATTERN, new Int32Array(It.MIDDLE_PATTERN.length).fill(0))[1];\r\n            for (let e = 0; e < 4 && s < i; e++) {\r\n                let e = It.decodeDigit(t, n, s, It.L_PATTERNS);\r\n                r += String.fromCharCode(\"0\".charCodeAt(0) + e);\r\n                for (let t of n) s += t\r\n            }\r\n            return {\r\n                rowOffset: s,\r\n                resultString: r\r\n            }\r\n        }\r\n        getBarcodeFormat() {\r\n            return k.EAN_8\r\n        }\r\n    }\r\n    class Tt extends It {\r\n        constructor() {\r\n            super(...arguments), this.ean13Reader = new St\r\n        }\r\n        getBarcodeFormat() {\r\n            return k.UPC_A\r\n        }\r\n        decode(t, e) {\r\n            return this.maybeReturnResult(this.ean13Reader.decode(t))\r\n        }\r\n        decodeRow(t, e, r) {\r\n            return this.maybeReturnResult(this.ean13Reader.decodeRow(t, e, r))\r\n        }\r\n        decodeMiddle(t, e, r) {\r\n            return this.ean13Reader.decodeMiddle(t, e, r)\r\n        }\r\n        maybeReturnResult(t) {\r\n            let e = t.getText();\r\n            if (\"0\" === e.charAt(0)) {\r\n                let r = new F(e.substring(1), null, null, t.getResultPoints(), k.UPC_A);\r\n                return null != t.getResultMetadata() && r.putAllMetadata(t.getResultMetadata()), r\r\n            }\r\n            throw new R\r\n        }\r\n        reset() {\r\n            this.ean13Reader.reset()\r\n        }\r\n    }\r\n    class Rt extends It {\r\n        constructor() {\r\n            super(), this.decodeMiddleCounters = new Int32Array(4)\r\n        }\r\n        decodeMiddle(t, e, r) {\r\n            const n = this.decodeMiddleCounters.map(t => t);\r\n            n[0] = 0, n[1] = 0, n[2] = 0, n[3] = 0;\r\n            const i = t.getSize();\r\n            let s = e[1],\r\n                    o = 0;\r\n            for (let e = 0; e < 6 && s < i; e++) {\r\n                const i = Rt.decodeDigit(t, n, s, Rt.L_AND_G_PATTERNS);\r\n                r += String.fromCharCode(\"0\".charCodeAt(0) + i % 10);\r\n                for (let t of n) s += t;\r\n                i >= 10 && (o |= 1 << 5 - e)\r\n            }\r\n            return Rt.determineNumSysAndCheckDigit(new p(r), o), s\r\n        }\r\n        decodeEnd(t, e) {\r\n            return Rt.findGuardPatternWithoutCounters(t, e, !0, Rt.MIDDLE_END_PATTERN)\r\n        }\r\n        checkChecksum(t) {\r\n            return It.checkChecksum(Rt.convertUPCEtoUPCA(t))\r\n        }\r\n        static determineNumSysAndCheckDigit(t, e) {\r\n            for (let r = 0; r <= 1; r++)\r\n                for (let n = 0; n < 10; n++)\r\n                    if (e === this.NUMSYS_AND_CHECK_DIGIT_PATTERNS[r][n]) return t.insert(0, \"0\" + r), void t.append(\"0\" + n);\r\n            throw R.getNotFoundInstance()\r\n        }\r\n        getBarcodeFormat() {\r\n            return k.UPC_E\r\n        }\r\n        static convertUPCEtoUPCA(t) {\r\n            const e = t.slice(1, 7).split(\"\").map(t => t.charCodeAt(0)),\r\n                    r = new p;\r\n            r.append(t.charAt(0));\r\n            let n = e[5];\r\n            switch (n) {\r\n                case 0:\r\n                case 1:\r\n                case 2:\r\n                    r.appendChars(e, 0, 2), r.append(n), r.append(\"0000\"), r.appendChars(e, 2, 3);\r\n                    break;\r\n                case 3:\r\n                    r.appendChars(e, 0, 3), r.append(\"00000\"), r.appendChars(e, 3, 2);\r\n                    break;\r\n                case 4:\r\n                    r.appendChars(e, 0, 4), r.append(\"00000\"), r.append(e[4]);\r\n                    break;\r\n                default:\r\n                    r.appendChars(e, 0, 5), r.append(\"0000\"), r.append(n)\r\n            }\r\n            return t.length >= 8 && r.append(t.charAt(7)), r.toString()\r\n        }\r\n    }\r\n    Rt.MIDDLE_END_PATTERN = Int32Array.from([1, 1, 1, 1, 1, 1]), Rt.NUMSYS_AND_CHECK_DIGIT_PATTERNS = [Int32Array.from([56, 52, 50, 49, 44, 38, 35, 42, 41, 37]), Int32Array.from([7, 11, 13, 14, 19, 25, 28, 21, 22, 1])];\r\n    class Nt extends gt {\r\n        constructor(t) {\r\n            super();\r\n            let e = null == t ? null : t.get(C.POSSIBLE_FORMATS),\r\n                    r = [];\r\n            null != e && (e.indexOf(k.EAN_13) > -1 ? r.push(new St) : e.indexOf(k.UPC_A) > -1 && r.push(new Tt), e.indexOf(k.EAN_8) > -1 && r.push(new pt), e.indexOf(k.UPC_E) > -1 && r.push(new Rt)), 0 === r.length && (r.push(new St), r.push(new pt), r.push(new Rt)), this.readers = r\r\n        }\r\n        decodeRow(t, e, r) {\r\n            for (let n of this.readers) try {\r\n                const i = n.decodeRow(t, e, r),\r\n                        s = i.getBarcodeFormat() === k.EAN_13 && \"0\" === i.getText().charAt(0),\r\n                        o = null == r ? null : r.get(C.POSSIBLE_FORMATS),\r\n                        a = null == o || o.includes(k.UPC_A);\r\n                if (s && a) {\r\n                    const t = i.getRawBytes(),\r\n                            e = new F(i.getText().substring(1), t, t.length, i.getResultPoints(), k.UPC_A);\r\n                    return e.putAllMetadata(i.getResultMetadata()), e\r\n                }\r\n                return i\r\n            } catch (t) {}\r\n            throw new R\r\n        }\r\n        reset() {\r\n            for (let t of this.readers) t.reset()\r\n        }\r\n    }\r\n    class Dt extends gt {\r\n        constructor() {\r\n            super(), this.decodeFinderCounters = new Int32Array(4), this.dataCharacterCounters = new Int32Array(8), this.oddRoundingErrors = new Array(4), this.evenRoundingErrors = new Array(4), this.oddCounts = new Array(this.dataCharacterCounters.length / 2), this.evenCounts = new Array(this.dataCharacterCounters.length / 2)\r\n        }\r\n        getDecodeFinderCounters() {\r\n            return this.decodeFinderCounters\r\n        }\r\n        getDataCharacterCounters() {\r\n            return this.dataCharacterCounters\r\n        }\r\n        getOddRoundingErrors() {\r\n            return this.oddRoundingErrors\r\n        }\r\n        getEvenRoundingErrors() {\r\n            return this.evenRoundingErrors\r\n        }\r\n        getOddCounts() {\r\n            return this.oddCounts\r\n        }\r\n        getEvenCounts() {\r\n            return this.evenCounts\r\n        }\r\n        parseFinderValue(t, e) {\r\n            for (let r = 0; r < e.length; r++)\r\n                if (gt.patternMatchVariance(t, e[r], Dt.MAX_INDIVIDUAL_VARIANCE) < Dt.MAX_AVG_VARIANCE) return r;\r\n            throw new R\r\n        }\r\n        static count(t) {\r\n            return tt.sum(new Int32Array(t))\r\n        }\r\n        static increment(t, e) {\r\n            let r = 0,\r\n                    n = e[0];\r\n            for (let i = 1; i < t.length; i++) e[i] > n && (n = e[i], r = i);\r\n            t[r]++\r\n        }\r\n        static decrement(t, e) {\r\n            let r = 0,\r\n                    n = e[0];\r\n            for (let i = 1; i < t.length; i++) e[i] < n && (n = e[i], r = i);\r\n            t[r]--\r\n        }\r\n        static isFinderPattern(t) {\r\n            let e = t[0] + t[1],\r\n                    r = e / (e + t[2] + t[3]);\r\n            if (r >= Dt.MIN_FINDER_PATTERN_RATIO && r <= Dt.MAX_FINDER_PATTERN_RATIO) {\r\n                let e = Number.MAX_SAFE_INTEGER,\r\n                        r = Number.MIN_SAFE_INTEGER;\r\n                for (let n of t) n > r && (r = n), n < e && (e = n);\r\n                return r < 10 * e\r\n            }\r\n            return !1\r\n        }\r\n    }\r\n    Dt.MAX_AVG_VARIANCE = .2, Dt.MAX_INDIVIDUAL_VARIANCE = .45, Dt.MIN_FINDER_PATTERN_RATIO = 9.5 / 12, Dt.MAX_FINDER_PATTERN_RATIO = 12.5 / 14;\r\n    class yt {\r\n        constructor(t, e) {\r\n            this.value = t, this.checksumPortion = e\r\n        }\r\n        getValue() {\r\n            return this.value\r\n        }\r\n        getChecksumPortion() {\r\n            return this.checksumPortion\r\n        }\r\n        toString() {\r\n            return this.value + \"(\" + this.checksumPortion + \")\"\r\n        }\r\n        equals(t) {\r\n            if (!(t instanceof yt)) return !1;\r\n            const e = t;\r\n            return this.value === e.value && this.checksumPortion === e.checksumPortion\r\n        }\r\n        hashCode() {\r\n            return this.value ^ this.checksumPortion\r\n        }\r\n    }\r\n    class Ot {\r\n        constructor(t, e, r, n, i) {\r\n            this.value = t, this.startEnd = e, this.value = t, this.startEnd = e, this.resultPoints = new Array, this.resultPoints.push(new rt(r, i)), this.resultPoints.push(new rt(n, i))\r\n        }\r\n        getValue() {\r\n            return this.value\r\n        }\r\n        getStartEnd() {\r\n            return this.startEnd\r\n        }\r\n        getResultPoints() {\r\n            return this.resultPoints\r\n        }\r\n        equals(t) {\r\n            if (!(t instanceof Ot)) return !1;\r\n            const e = t;\r\n            return this.value === e.value\r\n        }\r\n        hashCode() {\r\n            return this.value\r\n        }\r\n    }\r\n    class Mt {\r\n        constructor() {}\r\n        static getRSSvalue(t, e, r) {\r\n            let n = 0;\r\n            for (let e of t) n += e;\r\n            let i = 0,\r\n                    s = 0,\r\n                    o = t.length;\r\n            for (let a = 0; a < o - 1; a++) {\r\n                let l;\r\n                for (l = 1, s |= 1 << a; l < t[a]; l++, s &= ~(1 << a)) {\r\n                    let t = Mt.combins(n - l - 1, o - a - 2);\r\n                    if (r && 0 === s && n - l - (o - a - 1) >= o - a - 1 && (t -= Mt.combins(n - l - (o - a), o - a - 2)), o - a - 1 > 1) {\r\n                        let r = 0;\r\n                        for (let t = n - l - (o - a - 2); t > e; t--) r += Mt.combins(n - l - t - 1, o - a - 3);\r\n                        t -= r * (o - 1 - a)\r\n                    } else n - l > e && t--;\r\n                    i += t\r\n                }\r\n                n -= l\r\n            }\r\n            return i\r\n        }\r\n        static combins(t, e) {\r\n            let r, n;\r\n            t - e > e ? (n = e, r = t - e) : (n = t - e, r = e);\r\n            let i = 1,\r\n                    s = 1;\r\n            for (let e = t; e > r; e--) i *= e, s <= n && (i /= s, s++);\r\n            for (; s <= n;) i /= s, s++;\r\n            return i\r\n        }\r\n    }\r\n    class bt {\r\n        static buildBitArray(t) {\r\n            let e = 2 * t.length - 1;\r\n            null == t[t.length - 1].getRightChar() && (e -= 1);\r\n            let r = new w(12 * e),\r\n                    n = 0,\r\n                    i = t[0].getRightChar().getValue();\r\n            for (let t = 11; t >= 0; --t) 0 != (i & 1 << t) && r.set(n), n++;\r\n            for (let e = 1; e < t.length; ++e) {\r\n                let i = t[e],\r\n                        s = i.getLeftChar().getValue();\r\n                for (let t = 11; t >= 0; --t) 0 != (s & 1 << t) && r.set(n), n++;\r\n                if (null != i.getRightChar()) {\r\n                    let t = i.getRightChar().getValue();\r\n                    for (let e = 11; e >= 0; --e) 0 != (t & 1 << e) && r.set(n), n++\r\n                }\r\n            }\r\n            return r\r\n        }\r\n    }\r\n    class Bt {\r\n        constructor(t, e) {\r\n            e ? this.decodedInformation = null : (this.finished = t, this.decodedInformation = e)\r\n        }\r\n        getDecodedInformation() {\r\n            return this.decodedInformation\r\n        }\r\n        isFinished() {\r\n            return this.finished\r\n        }\r\n    }\r\n    class Pt {\r\n        constructor(t) {\r\n            this.newPosition = t\r\n        }\r\n        getNewPosition() {\r\n            return this.newPosition\r\n        }\r\n    }\r\n    class Lt extends Pt {\r\n        constructor(t, e) {\r\n            super(t), this.value = e\r\n        }\r\n        getValue() {\r\n            return this.value\r\n        }\r\n        isFNC1() {\r\n            return this.value === Lt.FNC1\r\n        }\r\n    }\r\n    Lt.FNC1 = \"$\";\r\n    class Ft extends Pt {\r\n        constructor(t, e, r) {\r\n            super(t), r ? (this.remaining = !0, this.remainingValue = this.remainingValue) : (this.remaining = !1, this.remainingValue = 0), this.newString = e\r\n        }\r\n        getNewString() {\r\n            return this.newString\r\n        }\r\n        isRemaining() {\r\n            return this.remaining\r\n        }\r\n        getRemainingValue() {\r\n            return this.remainingValue\r\n        }\r\n    }\r\n    class vt extends Pt {\r\n        constructor(t, e, r) {\r\n            if (super(t), e < 0 || e > 10 || r < 0 || r > 10) throw new E;\r\n            this.firstDigit = e, this.secondDigit = r\r\n        }\r\n        getFirstDigit() {\r\n            return this.firstDigit\r\n        }\r\n        getSecondDigit() {\r\n            return this.secondDigit\r\n        }\r\n        getValue() {\r\n            return 10 * this.firstDigit + this.secondDigit\r\n        }\r\n        isFirstDigitFNC1() {\r\n            return this.firstDigit === vt.FNC1\r\n        }\r\n        isSecondDigitFNC1() {\r\n            return this.secondDigit === vt.FNC1\r\n        }\r\n        isAnyFNC1() {\r\n            return this.firstDigit === vt.FNC1 || this.secondDigit === vt.FNC1\r\n        }\r\n    }\r\n    vt.FNC1 = 10;\r\n    class kt {\r\n        constructor() {}\r\n        static parseFieldsInGeneralPurpose(t) {\r\n            if (!t) return null;\r\n            if (t.length < 2) throw new R;\r\n            let e = t.substring(0, 2);\r\n            for (let r of kt.TWO_DIGIT_DATA_LENGTH)\r\n                if (r[0] === e) return r[1] === kt.VARIABLE_LENGTH ? kt.processVariableAI(2, r[2], t) : kt.processFixedAI(2, r[1], t);\r\n            if (t.length < 3) throw new R;\r\n            let r = t.substring(0, 3);\r\n            for (let e of kt.THREE_DIGIT_DATA_LENGTH)\r\n                if (e[0] === r) return e[1] === kt.VARIABLE_LENGTH ? kt.processVariableAI(3, e[2], t) : kt.processFixedAI(3, e[1], t);\r\n            for (let e of kt.THREE_DIGIT_PLUS_DIGIT_DATA_LENGTH)\r\n                if (e[0] === r) return e[1] === kt.VARIABLE_LENGTH ? kt.processVariableAI(4, e[2], t) : kt.processFixedAI(4, e[1], t);\r\n            if (t.length < 4) throw new R;\r\n            let n = t.substring(0, 4);\r\n            for (let e of kt.FOUR_DIGIT_DATA_LENGTH)\r\n                if (e[0] === n) return e[1] === kt.VARIABLE_LENGTH ? kt.processVariableAI(4, e[2], t) : kt.processFixedAI(4, e[1], t);\r\n            throw new R\r\n        }\r\n        static processFixedAI(t, e, r) {\r\n            if (r.length < t) throw new R;\r\n            let n = r.substring(0, t);\r\n            if (r.length < t + e) throw new R;\r\n            let i = r.substring(t, t + e),\r\n                    s = r.substring(t + e),\r\n                    o = \"(\" + n + \")\" + i,\r\n                    a = kt.parseFieldsInGeneralPurpose(s);\r\n            return null == a ? o : o + a\r\n        }\r\n        static processVariableAI(t, e, r) {\r\n            let n, i = r.substring(0, t);\r\n            n = r.length < t + e ? r.length : t + e;\r\n            let s = r.substring(t, n),\r\n                    o = r.substring(n),\r\n                    a = \"(\" + i + \")\" + s,\r\n                    l = kt.parseFieldsInGeneralPurpose(o);\r\n            return null == l ? a : a + l\r\n        }\r\n    }\r\n    kt.VARIABLE_LENGTH = [], kt.TWO_DIGIT_DATA_LENGTH = [\r\n        [\"00\", 18],\r\n        [\"01\", 14],\r\n        [\"02\", 14],\r\n        [\"10\", kt.VARIABLE_LENGTH, 20],\r\n        [\"11\", 6],\r\n        [\"12\", 6],\r\n        [\"13\", 6],\r\n        [\"15\", 6],\r\n        [\"17\", 6],\r\n        [\"20\", 2],\r\n        [\"21\", kt.VARIABLE_LENGTH, 20],\r\n        [\"22\", kt.VARIABLE_LENGTH, 29],\r\n        [\"30\", kt.VARIABLE_LENGTH, 8],\r\n        [\"37\", kt.VARIABLE_LENGTH, 8],\r\n        [\"90\", kt.VARIABLE_LENGTH, 30],\r\n        [\"91\", kt.VARIABLE_LENGTH, 30],\r\n        [\"92\", kt.VARIABLE_LENGTH, 30],\r\n        [\"93\", kt.VARIABLE_LENGTH, 30],\r\n        [\"94\", kt.VARIABLE_LENGTH, 30],\r\n        [\"95\", kt.VARIABLE_LENGTH, 30],\r\n        [\"96\", kt.VARIABLE_LENGTH, 30],\r\n        [\"97\", kt.VARIABLE_LENGTH, 3],\r\n        [\"98\", kt.VARIABLE_LENGTH, 30],\r\n        [\"99\", kt.VARIABLE_LENGTH, 30]\r\n    ], kt.THREE_DIGIT_DATA_LENGTH = [\r\n        [\"240\", kt.VARIABLE_LENGTH, 30],\r\n        [\"241\", kt.VARIABLE_LENGTH, 30],\r\n        [\"242\", kt.VARIABLE_LENGTH, 6],\r\n        [\"250\", kt.VARIABLE_LENGTH, 30],\r\n        [\"251\", kt.VARIABLE_LENGTH, 30],\r\n        [\"253\", kt.VARIABLE_LENGTH, 17],\r\n        [\"254\", kt.VARIABLE_LENGTH, 20],\r\n        [\"400\", kt.VARIABLE_LENGTH, 30],\r\n        [\"401\", kt.VARIABLE_LENGTH, 30],\r\n        [\"402\", 17],\r\n        [\"403\", kt.VARIABLE_LENGTH, 30],\r\n        [\"410\", 13],\r\n        [\"411\", 13],\r\n        [\"412\", 13],\r\n        [\"413\", 13],\r\n        [\"414\", 13],\r\n        [\"420\", kt.VARIABLE_LENGTH, 20],\r\n        [\"421\", kt.VARIABLE_LENGTH, 15],\r\n        [\"422\", 3],\r\n        [\"423\", kt.VARIABLE_LENGTH, 15],\r\n        [\"424\", 3],\r\n        [\"425\", 3],\r\n        [\"426\", 3]\r\n    ], kt.THREE_DIGIT_PLUS_DIGIT_DATA_LENGTH = [\r\n        [\"310\", 6],\r\n        [\"311\", 6],\r\n        [\"312\", 6],\r\n        [\"313\", 6],\r\n        [\"314\", 6],\r\n        [\"315\", 6],\r\n        [\"316\", 6],\r\n        [\"320\", 6],\r\n        [\"321\", 6],\r\n        [\"322\", 6],\r\n        [\"323\", 6],\r\n        [\"324\", 6],\r\n        [\"325\", 6],\r\n        [\"326\", 6],\r\n        [\"327\", 6],\r\n        [\"328\", 6],\r\n        [\"329\", 6],\r\n        [\"330\", 6],\r\n        [\"331\", 6],\r\n        [\"332\", 6],\r\n        [\"333\", 6],\r\n        [\"334\", 6],\r\n        [\"335\", 6],\r\n        [\"336\", 6],\r\n        [\"340\", 6],\r\n        [\"341\", 6],\r\n        [\"342\", 6],\r\n        [\"343\", 6],\r\n        [\"344\", 6],\r\n        [\"345\", 6],\r\n        [\"346\", 6],\r\n        [\"347\", 6],\r\n        [\"348\", 6],\r\n        [\"349\", 6],\r\n        [\"350\", 6],\r\n        [\"351\", 6],\r\n        [\"352\", 6],\r\n        [\"353\", 6],\r\n        [\"354\", 6],\r\n        [\"355\", 6],\r\n        [\"356\", 6],\r\n        [\"357\", 6],\r\n        [\"360\", 6],\r\n        [\"361\", 6],\r\n        [\"362\", 6],\r\n        [\"363\", 6],\r\n        [\"364\", 6],\r\n        [\"365\", 6],\r\n        [\"366\", 6],\r\n        [\"367\", 6],\r\n        [\"368\", 6],\r\n        [\"369\", 6],\r\n        [\"390\", kt.VARIABLE_LENGTH, 15],\r\n        [\"391\", kt.VARIABLE_LENGTH, 18],\r\n        [\"392\", kt.VARIABLE_LENGTH, 15],\r\n        [\"393\", kt.VARIABLE_LENGTH, 18],\r\n        [\"703\", kt.VARIABLE_LENGTH, 30]\r\n    ], kt.FOUR_DIGIT_DATA_LENGTH = [\r\n        [\"7001\", 13],\r\n        [\"7002\", kt.VARIABLE_LENGTH, 30],\r\n        [\"7003\", 10],\r\n        [\"8001\", 14],\r\n        [\"8002\", kt.VARIABLE_LENGTH, 20],\r\n        [\"8003\", kt.VARIABLE_LENGTH, 30],\r\n        [\"8004\", kt.VARIABLE_LENGTH, 30],\r\n        [\"8005\", 6],\r\n        [\"8006\", 18],\r\n        [\"8007\", kt.VARIABLE_LENGTH, 30],\r\n        [\"8008\", kt.VARIABLE_LENGTH, 12],\r\n        [\"8018\", 18],\r\n        [\"8020\", kt.VARIABLE_LENGTH, 25],\r\n        [\"8100\", 6],\r\n        [\"8101\", 10],\r\n        [\"8102\", 2],\r\n        [\"8110\", kt.VARIABLE_LENGTH, 70],\r\n        [\"8200\", kt.VARIABLE_LENGTH, 70]\r\n    ];\r\n    class xt {\r\n        constructor(t) {\r\n            this.buffer = new p, this.information = t\r\n        }\r\n        decodeAllCodes(t, e) {\r\n            let r = e,\r\n                    n = null;\r\n            for (;;) {\r\n                let e = this.decodeGeneralPurposeField(r, n),\r\n                        i = kt.parseFieldsInGeneralPurpose(e.getNewString());\r\n                if (null != i && t.append(i), n = e.isRemaining() ? \"\" + e.getRemainingValue() : null, r === e.getNewPosition()) break;\r\n                r = e.getNewPosition()\r\n            }\r\n            return t.toString()\r\n        }\r\n        isStillNumeric(t) {\r\n            if (t + 7 > this.information.getSize()) return t + 4 <= this.information.getSize();\r\n            for (let e = t; e < t + 3; ++e)\r\n                if (this.information.get(e)) return !0;\r\n            return this.information.get(t + 3)\r\n        }\r\n        decodeNumeric(t) {\r\n            if (t + 7 > this.information.getSize()) {\r\n                let e = this.extractNumericValueFromBitArray(t, 4);\r\n                return new vt(this.information.getSize(), 0 === e ? vt.FNC1 : e - 1, vt.FNC1)\r\n            }\r\n            let e = this.extractNumericValueFromBitArray(t, 7);\r\n            return new vt(t + 7, (e - 8) / 11, (e - 8) % 11)\r\n        }\r\n        extractNumericValueFromBitArray(t, e) {\r\n            return xt.extractNumericValueFromBitArray(this.information, t, e)\r\n        }\r\n        static extractNumericValueFromBitArray(t, e, r) {\r\n            let n = 0;\r\n            for (let i = 0; i < r; ++i) t.get(e + i) && (n |= 1 << r - i - 1);\r\n            return n\r\n        }\r\n        decodeGeneralPurposeField(t, e) {\r\n            this.buffer.setLengthToZero(), null != e && this.buffer.append(e), this.current.setPosition(t);\r\n            let r = this.parseBlocks();\r\n            return null != r && r.isRemaining() ? new Ft(this.current.getPosition(), this.buffer.toString(), r.getRemainingValue()) : new Ft(this.current.getPosition(), this.buffer.toString())\r\n        }\r\n        parseBlocks() {\r\n            let t, e;\r\n            do {\r\n                let r = this.current.getPosition();\r\n                if (t = this.current.isAlpha() ? (e = this.parseAlphaBlock()).isFinished() : this.current.isIsoIec646() ? (e = this.parseIsoIec646Block()).isFinished() : (e = this.parseNumericBlock()).isFinished(), !(r !== this.current.getPosition()) && !t) break\r\n            } while (!t);\r\n            return e.getDecodedInformation()\r\n        }\r\n        parseNumericBlock() {\r\n            for (; this.isStillNumeric(this.current.getPosition());) {\r\n                let t = this.decodeNumeric(this.current.getPosition());\r\n                if (this.current.setPosition(t.getNewPosition()), t.isFirstDigitFNC1()) {\r\n                    let e;\r\n                    return e = t.isSecondDigitFNC1() ? new Ft(this.current.getPosition(), this.buffer.toString()) : new Ft(this.current.getPosition(), this.buffer.toString(), t.getSecondDigit()), new Bt(!0, e)\r\n                }\r\n                if (this.buffer.append(t.getFirstDigit()), t.isSecondDigitFNC1()) {\r\n                    let t = new Ft(this.current.getPosition(), this.buffer.toString());\r\n                    return new Bt(!0, t)\r\n                }\r\n                this.buffer.append(t.getSecondDigit())\r\n            }\r\n            return this.isNumericToAlphaNumericLatch(this.current.getPosition()) && (this.current.setAlpha(), this.current.incrementPosition(4)), new Bt(!1)\r\n        }\r\n        parseIsoIec646Block() {\r\n            for (; this.isStillIsoIec646(this.current.getPosition());) {\r\n                let t = this.decodeIsoIec646(this.current.getPosition());\r\n                if (this.current.setPosition(t.getNewPosition()), t.isFNC1()) {\r\n                    let t = new Ft(this.current.getPosition(), this.buffer.toString());\r\n                    return new Bt(!0, t)\r\n                }\r\n                this.buffer.append(t.getValue())\r\n            }\r\n            return this.isAlphaOr646ToNumericLatch(this.current.getPosition()) ? (this.current.incrementPosition(3), this.current.setNumeric()) : this.isAlphaTo646ToAlphaLatch(this.current.getPosition()) && (this.current.getPosition() + 5 < this.information.getSize() ? this.current.incrementPosition(5) : this.current.setPosition(this.information.getSize()), this.current.setAlpha()), new Bt(!1)\r\n        }\r\n        parseAlphaBlock() {\r\n            for (; this.isStillAlpha(this.current.getPosition());) {\r\n                let t = this.decodeAlphanumeric(this.current.getPosition());\r\n                if (this.current.setPosition(t.getNewPosition()), t.isFNC1()) {\r\n                    let t = new Ft(this.current.getPosition(), this.buffer.toString());\r\n                    return new Bt(!0, t)\r\n                }\r\n                this.buffer.append(t.getValue())\r\n            }\r\n            return this.isAlphaOr646ToNumericLatch(this.current.getPosition()) ? (this.current.incrementPosition(3), this.current.setNumeric()) : this.isAlphaTo646ToAlphaLatch(this.current.getPosition()) && (this.current.getPosition() + 5 < this.information.getSize() ? this.current.incrementPosition(5) : this.current.setPosition(this.information.getSize()), this.current.setIsoIec646()), new Bt(!1)\r\n        }\r\n        isStillIsoIec646(t) {\r\n            if (t + 5 > this.information.getSize()) return !1;\r\n            let e = this.extractNumericValueFromBitArray(t, 5);\r\n            if (e >= 5 && e < 16) return !0;\r\n            if (t + 7 > this.information.getSize()) return !1;\r\n            let r = this.extractNumericValueFromBitArray(t, 7);\r\n            if (r >= 64 && r < 116) return !0;\r\n            if (t + 8 > this.information.getSize()) return !1;\r\n            let n = this.extractNumericValueFromBitArray(t, 8);\r\n            return n >= 232 && n < 253\r\n        }\r\n        decodeIsoIec646(t) {\r\n            let e = this.extractNumericValueFromBitArray(t, 5);\r\n            if (15 === e) return new Lt(t + 5, Lt.FNC1);\r\n            if (e >= 5 && e < 15) return new Lt(t + 5, \"0\" + (e - 5));\r\n            let r, n = this.extractNumericValueFromBitArray(t, 7);\r\n            if (n >= 64 && n < 90) return new Lt(t + 7, \"\" + (n + 1));\r\n            if (n >= 90 && n < 116) return new Lt(t + 7, \"\" + (n + 7));\r\n            switch (this.extractNumericValueFromBitArray(t, 8)) {\r\n                case 232:\r\n                    r = \"!\";\r\n                    break;\r\n                case 233:\r\n                    r = '\"';\r\n                    break;\r\n                case 234:\r\n                    r = \"%\";\r\n                    break;\r\n                case 235:\r\n                    r = \"&\";\r\n                    break;\r\n                case 236:\r\n                    r = \"'\";\r\n                    break;\r\n                case 237:\r\n                    r = \"(\";\r\n                    break;\r\n                case 238:\r\n                    r = \")\";\r\n                    break;\r\n                case 239:\r\n                    r = \"*\";\r\n                    break;\r\n                case 240:\r\n                    r = \"+\";\r\n                    break;\r\n                case 241:\r\n                    r = \",\";\r\n                    break;\r\n                case 242:\r\n                    r = \"-\";\r\n                    break;\r\n                case 243:\r\n                    r = \".\";\r\n                    break;\r\n                case 244:\r\n                    r = \"/\";\r\n                    break;\r\n                case 245:\r\n                    r = \":\";\r\n                    break;\r\n                case 246:\r\n                    r = \";\";\r\n                    break;\r\n                case 247:\r\n                    r = \"<\";\r\n                    break;\r\n                case 248:\r\n                    r = \"=\";\r\n                    break;\r\n                case 249:\r\n                    r = \">\";\r\n                    break;\r\n                case 250:\r\n                    r = \"?\";\r\n                    break;\r\n                case 251:\r\n                    r = \"_\";\r\n                    break;\r\n                case 252:\r\n                    r = \" \";\r\n                    break;\r\n                default:\r\n                    throw new E\r\n            }\r\n            return new Lt(t + 8, r)\r\n        }\r\n        isStillAlpha(t) {\r\n            if (t + 5 > this.information.getSize()) return !1;\r\n            let e = this.extractNumericValueFromBitArray(t, 5);\r\n            if (e >= 5 && e < 16) return !0;\r\n            if (t + 6 > this.information.getSize()) return !1;\r\n            let r = this.extractNumericValueFromBitArray(t, 6);\r\n            return r >= 16 && r < 63\r\n        }\r\n        decodeAlphanumeric(t) {\r\n            let e = this.extractNumericValueFromBitArray(t, 5);\r\n            if (15 === e) return new Lt(t + 5, Lt.FNC1);\r\n            if (e >= 5 && e < 15) return new Lt(t + 5, \"0\" + (e - 5));\r\n            let r, n = this.extractNumericValueFromBitArray(t, 6);\r\n            if (n >= 32 && n < 58) return new Lt(t + 6, \"\" + (n + 33));\r\n            switch (n) {\r\n                case 58:\r\n                    r = \"*\";\r\n                    break;\r\n                case 59:\r\n                    r = \",\";\r\n                    break;\r\n                case 60:\r\n                    r = \"-\";\r\n                    break;\r\n                case 61:\r\n                    r = \".\";\r\n                    break;\r\n                case 62:\r\n                    r = \"/\";\r\n                    break;\r\n                default:\r\n                    throw new j(\"Decoding invalid alphanumeric value: \" + n)\r\n            }\r\n            return new Lt(t + 6, r)\r\n        }\r\n        isAlphaTo646ToAlphaLatch(t) {\r\n            if (t + 1 > this.information.getSize()) return !1;\r\n            for (let e = 0; e < 5 && e + t < this.information.getSize(); ++e)\r\n                if (2 === e) {\r\n                    if (!this.information.get(t + 2)) return !1\r\n                } else if (this.information.get(t + e)) return !1;\r\n            return !0\r\n        }\r\n        isAlphaOr646ToNumericLatch(t) {\r\n            if (t + 3 > this.information.getSize()) return !1;\r\n            for (let e = t; e < t + 3; ++e)\r\n                if (this.information.get(e)) return !1;\r\n            return !0\r\n        }\r\n        isNumericToAlphaNumericLatch(t) {\r\n            if (t + 1 > this.information.getSize()) return !1;\r\n            for (let e = 0; e < 4 && e + t < this.information.getSize(); ++e)\r\n                if (this.information.get(t + e)) return !1;\r\n            return !0\r\n        }\r\n    }\r\n    class Vt {\r\n        constructor(t) {\r\n            this.information = t, this.generalDecoder = new xt(t)\r\n        }\r\n        getInformation() {\r\n            return this.information\r\n        }\r\n        getGeneralDecoder() {\r\n            return this.generalDecoder\r\n        }\r\n    }\r\n    class Ut extends Vt {\r\n        constructor(t) {\r\n            super(t)\r\n        }\r\n        encodeCompressedGtin(t, e) {\r\n            t.append(\"(01)\");\r\n            let r = t.length();\r\n            t.append(\"9\"), this.encodeCompressedGtinWithoutAI(t, e, r)\r\n        }\r\n        encodeCompressedGtinWithoutAI(t, e, r) {\r\n            for (let r = 0; r < 4; ++r) {\r\n                let n = this.getGeneralDecoder().extractNumericValueFromBitArray(e + 10 * r, 10);\r\n                n / 100 == 0 && t.append(\"0\"), n / 10 == 0 && t.append(\"0\"), t.append(n)\r\n            }\r\n            Ut.appendCheckDigit(t, r)\r\n        }\r\n        static appendCheckDigit(t, e) {\r\n            let r = 0;\r\n            for (let n = 0; n < 13; n++) {\r\n                let i = t.charAt(n + e).charCodeAt(0) - \"0\".charCodeAt(0);\r\n                r += 0 == (1 & n) ? 3 * i : i\r\n            }\r\n            10 === (r = 10 - r % 10) && (r = 0), t.append(r)\r\n        }\r\n    }\r\n    Ut.GTIN_SIZE = 40;\r\n    class Ht extends Ut {\r\n        constructor(t) {\r\n            super(t)\r\n        }\r\n        parseInformation() {\r\n            let t = new p;\r\n            t.append(\"(01)\");\r\n            let e = t.length(),\r\n                    r = this.getGeneralDecoder().extractNumericValueFromBitArray(Ht.HEADER_SIZE, 4);\r\n            return t.append(r), this.encodeCompressedGtinWithoutAI(t, Ht.HEADER_SIZE + 4, e), this.getGeneralDecoder().decodeAllCodes(t, Ht.HEADER_SIZE + 44)\r\n        }\r\n    }\r\n    Ht.HEADER_SIZE = 4;\r\n    class Gt extends Vt {\r\n        constructor(t) {\r\n            super(t)\r\n        }\r\n        parseInformation() {\r\n            let t = new p;\r\n            return this.getGeneralDecoder().decodeAllCodes(t, Gt.HEADER_SIZE)\r\n        }\r\n    }\r\n    Gt.HEADER_SIZE = 5;\r\n    class Xt extends Ut {\r\n        constructor(t) {\r\n            super(t)\r\n        }\r\n        encodeCompressedWeight(t, e, r) {\r\n            let n = this.getGeneralDecoder().extractNumericValueFromBitArray(e, r);\r\n            this.addWeightCode(t, n);\r\n            let i = this.checkWeight(n),\r\n                    s = 1e5;\r\n            for (let e = 0; e < 5; ++e) i / s == 0 && t.append(\"0\"), s /= 10;\r\n            t.append(i)\r\n        }\r\n    }\r\n    class Wt extends Xt {\r\n        constructor(t) {\r\n            super(t)\r\n        }\r\n        parseInformation() {\r\n            if (this.getInformation().getSize() != Wt.HEADER_SIZE + Xt.GTIN_SIZE + Wt.WEIGHT_SIZE) throw new R;\r\n            let t = new p;\r\n            return this.encodeCompressedGtin(t, Wt.HEADER_SIZE), this.encodeCompressedWeight(t, Wt.HEADER_SIZE + Xt.GTIN_SIZE, Wt.WEIGHT_SIZE), t.toString()\r\n        }\r\n    }\r\n    Wt.HEADER_SIZE = 5, Wt.WEIGHT_SIZE = 15;\r\n    class zt extends Wt {\r\n        constructor(t) {\r\n            super(t)\r\n        }\r\n        addWeightCode(t, e) {\r\n            t.append(\"(3103)\")\r\n        }\r\n        checkWeight(t) {\r\n            return t\r\n        }\r\n    }\r\n    class Yt extends Wt {\r\n        constructor(t) {\r\n            super(t)\r\n        }\r\n        addWeightCode(t, e) {\r\n            e < 1e4 ? t.append(\"(3202)\") : t.append(\"(3203)\")\r\n        }\r\n        checkWeight(t) {\r\n            return t < 1e4 ? t : t - 1e4\r\n        }\r\n    }\r\n    class Zt extends Ut {\r\n        constructor(t) {\r\n            super(t)\r\n        }\r\n        parseInformation() {\r\n            if (this.getInformation().getSize() < Zt.HEADER_SIZE + Ut.GTIN_SIZE) throw new R;\r\n            let t = new p;\r\n            this.encodeCompressedGtin(t, Zt.HEADER_SIZE);\r\n            let e = this.getGeneralDecoder().extractNumericValueFromBitArray(Zt.HEADER_SIZE + Ut.GTIN_SIZE, Zt.LAST_DIGIT_SIZE);\r\n            t.append(\"(392\"), t.append(e), t.append(\")\");\r\n            let r = this.getGeneralDecoder().decodeGeneralPurposeField(Zt.HEADER_SIZE + Ut.GTIN_SIZE + Zt.LAST_DIGIT_SIZE, null);\r\n            return t.append(r.getNewString()), t.toString()\r\n        }\r\n    }\r\n    Zt.HEADER_SIZE = 8, Zt.LAST_DIGIT_SIZE = 2;\r\n    class Kt extends Ut {\r\n        constructor(t) {\r\n            super(t)\r\n        }\r\n        parseInformation() {\r\n            if (this.getInformation().getSize() < Kt.HEADER_SIZE + Ut.GTIN_SIZE) throw new R;\r\n            let t = new p;\r\n            this.encodeCompressedGtin(t, Kt.HEADER_SIZE);\r\n            let e = this.getGeneralDecoder().extractNumericValueFromBitArray(Kt.HEADER_SIZE + Ut.GTIN_SIZE, Kt.LAST_DIGIT_SIZE);\r\n            t.append(\"(393\"), t.append(e), t.append(\")\");\r\n            let r = this.getGeneralDecoder().extractNumericValueFromBitArray(Kt.HEADER_SIZE + Ut.GTIN_SIZE + Kt.LAST_DIGIT_SIZE, Kt.FIRST_THREE_DIGITS_SIZE);\r\n            r / 100 == 0 && t.append(\"0\"), r / 10 == 0 && t.append(\"0\"), t.append(r);\r\n            let n = this.getGeneralDecoder().decodeGeneralPurposeField(Kt.HEADER_SIZE + Ut.GTIN_SIZE + Kt.LAST_DIGIT_SIZE + Kt.FIRST_THREE_DIGITS_SIZE, null);\r\n            return t.append(n.getNewString()), t.toString()\r\n        }\r\n    }\r\n    Kt.HEADER_SIZE = 8, Kt.LAST_DIGIT_SIZE = 2, Kt.FIRST_THREE_DIGITS_SIZE = 10;\r\n    class qt extends Xt {\r\n        constructor(t, e, r) {\r\n            super(t), this.dateCode = r, this.firstAIdigits = e\r\n        }\r\n        parseInformation() {\r\n            if (this.getInformation().getSize() != qt.HEADER_SIZE + qt.GTIN_SIZE + qt.WEIGHT_SIZE + qt.DATE_SIZE) throw new R;\r\n            let t = new p;\r\n            return this.encodeCompressedGtin(t, qt.HEADER_SIZE), this.encodeCompressedWeight(t, qt.HEADER_SIZE + qt.GTIN_SIZE, qt.WEIGHT_SIZE), this.encodeCompressedDate(t, qt.HEADER_SIZE + qt.GTIN_SIZE + qt.WEIGHT_SIZE), t.toString()\r\n        }\r\n        encodeCompressedDate(t, e) {\r\n            let r = this.getGeneralDecoder().extractNumericValueFromBitArray(e, qt.DATE_SIZE);\r\n            if (38400 == r) return;\r\n            t.append(\"(\"), t.append(this.dateCode), t.append(\")\");\r\n            let n = r % 32,\r\n                    i = (r /= 32) % 12 + 1,\r\n                    s = r /= 12;\r\n            s / 10 == 0 && t.append(\"0\"), t.append(s), i / 10 == 0 && t.append(\"0\"), t.append(i), n / 10 == 0 && t.append(\"0\"), t.append(n)\r\n        }\r\n        addWeightCode(t, e) {\r\n            t.append(\"(\"), t.append(this.firstAIdigits), t.append(e / 1e5), t.append(\")\")\r\n        }\r\n        checkWeight(t) {\r\n            return t % 1e5\r\n        }\r\n    }\r\n    qt.HEADER_SIZE = 8, qt.WEIGHT_SIZE = 20, qt.DATE_SIZE = 16;\r\n    class Qt {\r\n        constructor(t, e, r, n) {\r\n            this.leftchar = t, this.rightchar = e, this.finderpattern = r, this.maybeLast = n\r\n        }\r\n        mayBeLast() {\r\n            return this.maybeLast\r\n        }\r\n        getLeftChar() {\r\n            return this.leftchar\r\n        }\r\n        getRightChar() {\r\n            return this.rightchar\r\n        }\r\n        getFinderPattern() {\r\n            return this.finderpattern\r\n        }\r\n        mustBeLast() {\r\n            return null == this.rightchar\r\n        }\r\n        toString() {\r\n            return \"[ \" + this.leftchar + \", \" + this.rightchar + \" : \" + (null == this.finderpattern ? \"null\" : this.finderpattern.getValue()) + \" ]\"\r\n        }\r\n        static equals(t, e) {\r\n            return t instanceof Qt && (Qt.equalsOrNull(t.leftchar, e.leftchar) && Qt.equalsOrNull(t.rightchar, e.rightchar) && Qt.equalsOrNull(t.finderpattern, e.finderpattern))\r\n        }\r\n        static equalsOrNull(t, e) {\r\n            return null === t ? null === e : Qt.equals(t, e)\r\n        }\r\n        hashCode() {\r\n            return this.leftchar.getValue() ^ this.rightchar.getValue() ^ this.finderpattern.getValue()\r\n        }\r\n    }\r\n    class jt {\r\n        constructor(t, e, r) {\r\n            this.pairs = t, this.rowNumber = e, this.wasReversed = r\r\n        }\r\n        getPairs() {\r\n            return this.pairs\r\n        }\r\n        getRowNumber() {\r\n            return this.rowNumber\r\n        }\r\n        isReversed() {\r\n            return this.wasReversed\r\n        }\r\n        isEquivalent(t) {\r\n            return this.checkEqualitity(this, t)\r\n        }\r\n        toString() {\r\n            return \"{ \" + this.pairs + \" }\"\r\n        }\r\n        equals(t, e) {\r\n            return t instanceof jt && (this.checkEqualitity(t, e) && t.wasReversed === e.wasReversed)\r\n        }\r\n        checkEqualitity(t, e) {\r\n            if (!t || !e) return;\r\n            let r;\r\n            return t.forEach((t, n) => {\r\n                e.forEach(e => {\r\n                    t.getLeftChar().getValue() === e.getLeftChar().getValue() && t.getRightChar().getValue() === e.getRightChar().getValue() && t.getFinderPatter().getValue() === e.getFinderPatter().getValue() && (r = !0)\r\n                })\r\n            }), r\r\n        }\r\n    }\r\n    class Jt extends Dt {\r\n        constructor(t) {\r\n            super(...arguments), this.pairs = new Array(Jt.MAX_PAIRS), this.rows = new Array, this.startEnd = [2], this.verbose = !0 === t\r\n        }\r\n        decodeRow(t, e, r) {\r\n            this.pairs.length = 0, this.startFromEven = !1;\r\n            try {\r\n                return Jt.constructResult(this.decodeRow2pairs(t, e))\r\n            } catch (t) {\r\n                this.verbose && console.log(t)\r\n            }\r\n            return this.pairs.length = 0, this.startFromEven = !0, Jt.constructResult(this.decodeRow2pairs(t, e))\r\n        }\r\n        reset() {\r\n            this.pairs.length = 0, this.rows.length = 0\r\n        }\r\n        decodeRow2pairs(t, e) {\r\n            let r, n = !1;\r\n            for (; !n;) try {\r\n                this.pairs.push(this.retrieveNextPair(e, this.pairs, t))\r\n            } catch (t) {\r\n                if (t instanceof R) {\r\n                    if (!this.pairs.length) throw new R;\r\n                    n = !0\r\n                }\r\n            }\r\n            if (this.checkChecksum()) return this.pairs;\r\n            if (r = !!this.rows.length, this.storeRow(t, !1), r) {\r\n                let t = this.checkRowsBoolean(!1);\r\n                if (null != t) return t;\r\n                if (null != (t = this.checkRowsBoolean(!0))) return t\r\n            }\r\n            throw new R\r\n        }\r\n        checkRowsBoolean(t) {\r\n            if (this.rows.length > 25) return this.rows.length = 0, null;\r\n            this.pairs.length = 0, t && (this.rows = this.rows.reverse());\r\n            let e = null;\r\n            try {\r\n                e = this.checkRows(new Array, 0)\r\n            } catch (t) {\r\n                this.verbose && console.log(t)\r\n            }\r\n            return t && (this.rows = this.rows.reverse()), e\r\n        }\r\n        checkRows(t, e) {\r\n            for (let r = e; r < this.rows.length; r++) {\r\n                let e = this.rows[r];\r\n                this.pairs.length = 0;\r\n                for (let e of t) this.pairs.push(e.getPairs());\r\n                if (this.pairs.push(e.getPairs()), !Jt.isValidSequence(this.pairs)) continue;\r\n                if (this.checkChecksum()) return this.pairs;\r\n                let n = new Array(t);\r\n                n.push(e);\r\n                try {\r\n                    return this.checkRows(n, r + 1)\r\n                } catch (t) {\r\n                    this.verbose && console.log(t)\r\n                }\r\n            }\r\n            throw new R\r\n        }\r\n        static isValidSequence(t) {\r\n            for (let e of Jt.FINDER_PATTERN_SEQUENCES) {\r\n                if (t.length > e.length) continue;\r\n                let r = !0;\r\n                for (let n = 0; n < t.length; n++)\r\n                    if (t[n].getFinderPattern().getValue() != e[n]) {\r\n                        r = !1;\r\n                        break\r\n                    } if (r) return !0\r\n            }\r\n            return !1\r\n        }\r\n        storeRow(t, e) {\r\n            let r = 0,\r\n                    n = !1,\r\n                    i = !1;\r\n            for (; r < this.rows.length;) {\r\n                let e = this.rows[r];\r\n                if (e.getRowNumber() > t) {\r\n                    i = e.isEquivalent(this.pairs);\r\n                    break\r\n                }\r\n                n = e.isEquivalent(this.pairs), r++\r\n            }\r\n            i || n || Jt.isPartialRow(this.pairs, this.rows) || (this.rows.push(r, new jt(this.pairs, t, e)), this.removePartialRows(this.pairs, this.rows))\r\n        }\r\n        removePartialRows(t, e) {\r\n            for (let r of e)\r\n                if (r.getPairs().length !== t.length)\r\n                    for (let e of r.getPairs())\r\n                        for (let r of t)\r\n                            if (Qt.equals(e, r)) break\r\n        }\r\n        static isPartialRow(t, e) {\r\n            for (let r of e) {\r\n                let e = !0;\r\n                for (let n of t) {\r\n                    let t = !1;\r\n                    for (let e of r.getPairs())\r\n                        if (n.equals(e)) {\r\n                            t = !0;\r\n                            break\r\n                        } if (!t) {\r\n                        e = !1;\r\n                        break\r\n                    }\r\n                }\r\n                if (e) return !0\r\n            }\r\n            return !1\r\n        }\r\n        getRows() {\r\n            return this.rows\r\n        }\r\n        static constructResult(t) {\r\n            let e = function(t) {\r\n                        try {\r\n                            if (t.get(1)) return new Ht(t);\r\n                            if (!t.get(2)) return new Gt(t);\r\n                            switch (xt.extractNumericValueFromBitArray(t, 1, 4)) {\r\n                                case 4:\r\n                                    return new zt(t);\r\n                                case 5:\r\n                                    return new Yt(t)\r\n                            }\r\n                            switch (xt.extractNumericValueFromBitArray(t, 1, 5)) {\r\n                                case 12:\r\n                                    return new Zt(t);\r\n                                case 13:\r\n                                    return new Kt(t)\r\n                            }\r\n                            switch (xt.extractNumericValueFromBitArray(t, 1, 7)) {\r\n                                case 56:\r\n                                    return new qt(t, \"310\", \"11\");\r\n                                case 57:\r\n                                    return new qt(t, \"320\", \"11\");\r\n                                case 58:\r\n                                    return new qt(t, \"310\", \"13\");\r\n                                case 59:\r\n                                    return new qt(t, \"320\", \"13\");\r\n                                case 60:\r\n                                    return new qt(t, \"310\", \"15\");\r\n                                case 61:\r\n                                    return new qt(t, \"320\", \"15\");\r\n                                case 62:\r\n                                    return new qt(t, \"310\", \"17\");\r\n                                case 63:\r\n                                    return new qt(t, \"320\", \"17\")\r\n                            }\r\n                        } catch (e) {\r\n                            throw console.log(e), new j(\"unknown decoder: \" + t)\r\n                        }\r\n                    }(bt.buildBitArray(t)).parseInformation(),\r\n                    r = t[0].getFinderPattern().getResultPoints(),\r\n                    n = t[t.length - 1].getFinderPattern().getResultPoints(),\r\n                    i = [r[0], r[1], n[0], n[1]];\r\n            return new F(e, null, null, i, k.RSS_EXPANDED, null)\r\n        }\r\n        checkChecksum() {\r\n            let t = this.pairs.get(0),\r\n                    e = t.getLeftChar(),\r\n                    r = t.getRightChar();\r\n            if (null == r) return !1;\r\n            let n = r.getChecksumPortion(),\r\n                    i = 2;\r\n            for (let t = 1; t < this.pairs.size(); ++t) {\r\n                let e = this.pairs.get(t);\r\n                n += e.getLeftChar().getChecksumPortion(), i++;\r\n                let r = e.getRightChar();\r\n                null != r && (n += r.getChecksumPortion(), i++)\r\n            }\r\n            return 211 * (i - 4) + (n %= 211) == e.getValue()\r\n        }\r\n        static getNextSecondBar(t, e) {\r\n            let r;\r\n            return t.get(e) ? (r = t.getNextUnset(e), r = t.getNextSet(r)) : (r = t.getNextSet(e), r = t.getNextUnset(r)), r\r\n        }\r\n        retrieveNextPair(t, e, r) {\r\n            let n, i = e.length % 2 == 0;\r\n            this.startFromEven && (i = !i);\r\n            let s = !0,\r\n                    o = -1;\r\n            do {\r\n                this.findNextPair(t, e, o), null == (n = this.parseFoundFinderPattern(t, r, i)) ? o = Jt.getNextSecondBar(t, this.startEnd[0]) : s = !1\r\n            } while (s);\r\n            let a, l = this.decodeDataCharacter(t, n, i, !0);\r\n            if (!this.isEmptyPair(e) && e[e.length - 1].mustBeLast()) throw new R;\r\n            try {\r\n                a = this.decodeDataCharacter(t, n, i, !1)\r\n            } catch (t) {\r\n                a = null, this.verbose && console.log(t)\r\n            }\r\n            return new Qt(l, a, n, !0)\r\n        }\r\n        isEmptyPair(t) {\r\n            return 0 === t.length\r\n        }\r\n        findNextPair(t, e, r) {\r\n            let n = this.getDecodeFinderCounters();\r\n            n[0] = 0, n[1] = 0, n[2] = 0, n[3] = 0;\r\n            let i, s = t.getSize();\r\n            if (r >= 0) i = r;\r\n            else if (this.isEmptyPair(e)) i = 0;\r\n            else {\r\n                i = e[e.length - 1].getFinderPattern().getStartEnd()[1]\r\n            }\r\n            let o = e.length % 2 != 0;\r\n            this.startFromEven && (o = !o);\r\n            let a = !1;\r\n            for (; i < s && (a = !t.get(i));) i++;\r\n            let l = 0,\r\n                    h = i;\r\n            for (let e = i; e < s; e++)\r\n                if (t.get(e) != a) n[l]++;\r\n                else {\r\n                    if (3 == l) {\r\n                        if (o && Jt.reverseCounters(n), Jt.isFinderPattern(n)) return this.startEnd[0] = h, void(this.startEnd[1] = e);\r\n                        o && Jt.reverseCounters(n), h += n[0] + n[1], n[0] = n[2], n[1] = n[3], n[2] = 0, n[3] = 0, l--\r\n                    } else l++;\r\n                    n[l] = 1, a = !a\r\n                } throw new R\r\n        }\r\n        static reverseCounters(t) {\r\n            let e = t.length;\r\n            for (let r = 0; r < e / 2; ++r) {\r\n                let n = t[r];\r\n                t[r] = t[e - r - 1], t[e - r - 1] = n\r\n            }\r\n        }\r\n        parseFoundFinderPattern(t, e, r) {\r\n            let n, i, s;\r\n            if (r) {\r\n                let e = this.startEnd[0] - 1;\r\n                for (; e >= 0 && !t.get(e);) e--;\r\n                e++, n = this.startEnd[0] - e, i = e, s = this.startEnd[1]\r\n            } else i = this.startEnd[0], n = (s = t.getNextUnset(this.startEnd[1] + 1)) - this.startEnd[1];\r\n            let o, a = this.getDecodeFinderCounters();\r\n            c.arraycopy(a, 0, a, 1, a.length - 1), a[0] = n;\r\n            try {\r\n                o = this.parseFinderValue(a, Jt.FINDER_PATTERNS)\r\n            } catch (t) {\r\n                return null\r\n            }\r\n            return new Ot(o, [i, s], i, s, e)\r\n        }\r\n        decodeDataCharacter(t, e, r, n) {\r\n            let i = this.getDataCharacterCounters();\r\n            for (let t = 0; t < i.length; t++) i[t] = 0;\r\n            if (n) Jt.recordPatternInReverse(t, e.getStartEnd()[0], i);\r\n            else {\r\n                Jt.recordPattern(t, e.getStartEnd()[1], i);\r\n                for (let t = 0, e = i.length - 1; t < e; t++, e--) {\r\n                    let r = i[t];\r\n                    i[t] = i[e], i[e] = r\r\n                }\r\n            }\r\n            let s = tt.sum(new Int32Array(i)) / 17,\r\n                    o = (e.getStartEnd()[1] - e.getStartEnd()[0]) / 15;\r\n            if (Math.abs(s - o) / o > .3) throw new R;\r\n            let a = this.getOddCounts(),\r\n                    l = this.getEvenCounts(),\r\n                    h = this.getOddRoundingErrors(),\r\n                    c = this.getEvenRoundingErrors();\r\n            for (let t = 0; t < i.length; t++) {\r\n                let e = 1 * i[t] / s,\r\n                        r = e + .5;\r\n                if (r < 1) {\r\n                    if (e < .3) throw new R;\r\n                    r = 1\r\n                } else if (r > 8) {\r\n                    if (e > 8.7) throw new R;\r\n                    r = 8\r\n                }\r\n                let n = t / 2;\r\n                0 == (1 & t) ? (a[n] = r, h[n] = e - r) : (l[n] = r, c[n] = e - r)\r\n            }\r\n            this.adjustOddEvenCounts(17);\r\n            let u = 4 * e.getValue() + (r ? 0 : 2) + (n ? 0 : 1) - 1,\r\n                    d = 0,\r\n                    g = 0;\r\n            for (let t = a.length - 1; t >= 0; t--) {\r\n                if (Jt.isNotA1left(e, r, n)) {\r\n                    let e = Jt.WEIGHTS[u][2 * t];\r\n                    g += a[t] * e\r\n                }\r\n                d += a[t]\r\n            }\r\n            let f = 0;\r\n            for (let t = l.length - 1; t >= 0; t--)\r\n                if (Jt.isNotA1left(e, r, n)) {\r\n                    let e = Jt.WEIGHTS[u][2 * t + 1];\r\n                    f += l[t] * e\r\n                } let w = g + f;\r\n            if (0 != (1 & d) || d > 13 || d < 4) throw new R;\r\n            let A = (13 - d) / 2,\r\n                    C = Jt.SYMBOL_WIDEST[A],\r\n                    E = 9 - C,\r\n                    m = Mt.getRSSvalue(a, C, !0),\r\n                    _ = Mt.getRSSvalue(l, E, !1),\r\n                    I = Jt.EVEN_TOTAL_SUBSET[A],\r\n                    S = Jt.GSUM[A];\r\n            return new yt(m * I + _ + S, w)\r\n        }\r\n        static isNotA1left(t, e, r) {\r\n            return !(0 == t.getValue() && e && r)\r\n        }\r\n        adjustOddEvenCounts(t) {\r\n            let e = tt.sum(new Int32Array(this.getOddCounts())),\r\n                    r = tt.sum(new Int32Array(this.getEvenCounts())),\r\n                    n = !1,\r\n                    i = !1;\r\n            e > 13 ? i = !0 : e < 4 && (n = !0);\r\n            let s = !1,\r\n                    o = !1;\r\n            r > 13 ? o = !0 : r < 4 && (s = !0);\r\n            let a = e + r - t,\r\n                    l = 1 == (1 & e),\r\n                    h = 0 == (1 & r);\r\n            if (1 == a)\r\n                if (l) {\r\n                    if (h) throw new R;\r\n                    i = !0\r\n                } else {\r\n                    if (!h) throw new R;\r\n                    o = !0\r\n                }\r\n            else if (-1 == a)\r\n                if (l) {\r\n                    if (h) throw new R;\r\n                    n = !0\r\n                } else {\r\n                    if (!h) throw new R;\r\n                    s = !0\r\n                }\r\n            else {\r\n                if (0 != a) throw new R;\r\n                if (l) {\r\n                    if (!h) throw new R;\r\n                    e < r ? (n = !0, o = !0) : (i = !0, s = !0)\r\n                } else if (h) throw new R\r\n            }\r\n            if (n) {\r\n                if (i) throw new R;\r\n                Jt.increment(this.getOddCounts(), this.getOddRoundingErrors())\r\n            }\r\n            if (i && Jt.decrement(this.getOddCounts(), this.getOddRoundingErrors()), s) {\r\n                if (o) throw new R;\r\n                Jt.increment(this.getEvenCounts(), this.getOddRoundingErrors())\r\n            }\r\n            o && Jt.decrement(this.getEvenCounts(), this.getEvenRoundingErrors())\r\n        }\r\n    }\r\n    Jt.SYMBOL_WIDEST = [7, 5, 4, 3, 1], Jt.EVEN_TOTAL_SUBSET = [4, 20, 52, 104, 204], Jt.GSUM = [0, 348, 1388, 2948, 3988], Jt.FINDER_PATTERNS = [Int32Array.from([1, 8, 4, 1]), Int32Array.from([3, 6, 4, 1]), Int32Array.from([3, 4, 6, 1]), Int32Array.from([3, 2, 8, 1]), Int32Array.from([2, 6, 5, 1]), Int32Array.from([2, 2, 9, 1])], Jt.WEIGHTS = [\r\n        [1, 3, 9, 27, 81, 32, 96, 77],\r\n        [20, 60, 180, 118, 143, 7, 21, 63],\r\n        [189, 145, 13, 39, 117, 140, 209, 205],\r\n        [193, 157, 49, 147, 19, 57, 171, 91],\r\n        [62, 186, 136, 197, 169, 85, 44, 132],\r\n        [185, 133, 188, 142, 4, 12, 36, 108],\r\n        [113, 128, 173, 97, 80, 29, 87, 50],\r\n        [150, 28, 84, 41, 123, 158, 52, 156],\r\n        [46, 138, 203, 187, 139, 206, 196, 166],\r\n        [76, 17, 51, 153, 37, 111, 122, 155],\r\n        [43, 129, 176, 106, 107, 110, 119, 146],\r\n        [16, 48, 144, 10, 30, 90, 59, 177],\r\n        [109, 116, 137, 200, 178, 112, 125, 164],\r\n        [70, 210, 208, 202, 184, 130, 179, 115],\r\n        [134, 191, 151, 31, 93, 68, 204, 190],\r\n        [148, 22, 66, 198, 172, 94, 71, 2],\r\n        [6, 18, 54, 162, 64, 192, 154, 40],\r\n        [120, 149, 25, 75, 14, 42, 126, 167],\r\n        [79, 26, 78, 23, 69, 207, 199, 175],\r\n        [103, 98, 83, 38, 114, 131, 182, 124],\r\n        [161, 61, 183, 127, 170, 88, 53, 159],\r\n        [55, 165, 73, 8, 24, 72, 5, 15],\r\n        [45, 135, 194, 160, 58, 174, 100, 89]\r\n    ], Jt.FINDER_PAT_A = 0, Jt.FINDER_PAT_B = 1, Jt.FINDER_PAT_C = 2, Jt.FINDER_PAT_D = 3, Jt.FINDER_PAT_E = 4, Jt.FINDER_PAT_F = 5, Jt.FINDER_PATTERN_SEQUENCES = [\r\n        [Jt.FINDER_PAT_A, Jt.FINDER_PAT_A],\r\n        [Jt.FINDER_PAT_A, Jt.FINDER_PAT_B, Jt.FINDER_PAT_B],\r\n        [Jt.FINDER_PAT_A, Jt.FINDER_PAT_C, Jt.FINDER_PAT_B, Jt.FINDER_PAT_D],\r\n        [Jt.FINDER_PAT_A, Jt.FINDER_PAT_E, Jt.FINDER_PAT_B, Jt.FINDER_PAT_D, Jt.FINDER_PAT_C],\r\n        [Jt.FINDER_PAT_A, Jt.FINDER_PAT_E, Jt.FINDER_PAT_B, Jt.FINDER_PAT_D, Jt.FINDER_PAT_D, Jt.FINDER_PAT_F],\r\n        [Jt.FINDER_PAT_A, Jt.FINDER_PAT_E, Jt.FINDER_PAT_B, Jt.FINDER_PAT_D, Jt.FINDER_PAT_E, Jt.FINDER_PAT_F, Jt.FINDER_PAT_F],\r\n        [Jt.FINDER_PAT_A, Jt.FINDER_PAT_A, Jt.FINDER_PAT_B, Jt.FINDER_PAT_B, Jt.FINDER_PAT_C, Jt.FINDER_PAT_C, Jt.FINDER_PAT_D, Jt.FINDER_PAT_D],\r\n        [Jt.FINDER_PAT_A, Jt.FINDER_PAT_A, Jt.FINDER_PAT_B, Jt.FINDER_PAT_B, Jt.FINDER_PAT_C, Jt.FINDER_PAT_C, Jt.FINDER_PAT_D, Jt.FINDER_PAT_E, Jt.FINDER_PAT_E],\r\n        [Jt.FINDER_PAT_A, Jt.FINDER_PAT_A, Jt.FINDER_PAT_B, Jt.FINDER_PAT_B, Jt.FINDER_PAT_C, Jt.FINDER_PAT_C, Jt.FINDER_PAT_D, Jt.FINDER_PAT_E, Jt.FINDER_PAT_F, Jt.FINDER_PAT_F],\r\n        [Jt.FINDER_PAT_A, Jt.FINDER_PAT_A, Jt.FINDER_PAT_B, Jt.FINDER_PAT_B, Jt.FINDER_PAT_C, Jt.FINDER_PAT_D, Jt.FINDER_PAT_D, Jt.FINDER_PAT_E, Jt.FINDER_PAT_E, Jt.FINDER_PAT_F, Jt.FINDER_PAT_F]\r\n    ], Jt.MAX_PAIRS = 11;\r\n    class $t extends yt {\r\n        constructor(t, e, r) {\r\n            super(t, e), this.count = 0, this.finderPattern = r\r\n        }\r\n        getFinderPattern() {\r\n            return this.finderPattern\r\n        }\r\n        getCount() {\r\n            return this.count\r\n        }\r\n        incrementCount() {\r\n            this.count++\r\n        }\r\n    }\r\n    class te extends Dt {\r\n        constructor() {\r\n            super(...arguments), this.possibleLeftPairs = [], this.possibleRightPairs = []\r\n        }\r\n        decodeRow(t, e, r) {\r\n            const n = this.decodePair(e, !1, t, r);\r\n            te.addOrTally(this.possibleLeftPairs, n), e.reverse();\r\n            let i = this.decodePair(e, !0, t, r);\r\n            te.addOrTally(this.possibleRightPairs, i), e.reverse();\r\n            for (let t of this.possibleLeftPairs)\r\n                if (t.getCount() > 1)\r\n                    for (let e of this.possibleRightPairs)\r\n                        if (e.getCount() > 1 && te.checkChecksum(t, e)) return te.constructResult(t, e);\r\n            throw new R\r\n        }\r\n        static addOrTally(t, e) {\r\n            if (null == e) return;\r\n            let r = !1;\r\n            for (let n of t)\r\n                if (n.getValue() === e.getValue()) {\r\n                    n.incrementCount(), r = !0;\r\n                    break\r\n                } r || t.push(e)\r\n        }\r\n        reset() {\r\n            this.possibleLeftPairs.length = 0, this.possibleRightPairs.length = 0\r\n        }\r\n        static constructResult(t, e) {\r\n            let r = 4537077 * t.getValue() + e.getValue(),\r\n                    n = new String(r).toString(),\r\n                    i = new p;\r\n            for (let t = 13 - n.length; t > 0; t--) i.append(\"0\");\r\n            i.append(n);\r\n            let s = 0;\r\n            for (let t = 0; t < 13; t++) {\r\n                let e = i.charAt(t).charCodeAt(0) - \"0\".charCodeAt(0);\r\n                s += 0 == (1 & t) ? 3 * e : e\r\n            }\r\n            10 === (s = 10 - s % 10) && (s = 0), i.append(s.toString());\r\n            let o = t.getFinderPattern().getResultPoints(),\r\n                    a = e.getFinderPattern().getResultPoints();\r\n            return new F(i.toString(), null, 0, [o[0], o[1], a[0], a[1]], k.RSS_14, (new Date).getTime())\r\n        }\r\n        static checkChecksum(t, e) {\r\n            let r = (t.getChecksumPortion() + 16 * e.getChecksumPortion()) % 79,\r\n                    n = 9 * t.getFinderPattern().getValue() + e.getFinderPattern().getValue();\r\n            return n > 72 && n--, n > 8 && n--, r === n\r\n        }\r\n        decodePair(t, e, r, n) {\r\n            try {\r\n                let i = this.findFinderPattern(t, e),\r\n                        s = this.parseFoundFinderPattern(t, r, e, i),\r\n                        o = null == n ? null : n.get(C.NEED_RESULT_POINT_CALLBACK);\r\n                if (null != o) {\r\n                    let n = (i[0] + i[1]) / 2;\r\n                    e && (n = t.getSize() - 1 - n), o.foundPossibleResultPoint(new rt(n, r))\r\n                }\r\n                let a = this.decodeDataCharacter(t, s, !0),\r\n                        l = this.decodeDataCharacter(t, s, !1);\r\n                return new $t(1597 * a.getValue() + l.getValue(), a.getChecksumPortion() + 4 * l.getChecksumPortion(), s)\r\n            } catch (t) {\r\n                return null\r\n            }\r\n        }\r\n        decodeDataCharacter(t, e, r) {\r\n            let n = this.getDataCharacterCounters();\r\n            for (let t = 0; t < n.length; t++) n[t] = 0;\r\n            if (r) gt.recordPatternInReverse(t, e.getStartEnd()[0], n);\r\n            else {\r\n                gt.recordPattern(t, e.getStartEnd()[1] + 1, n);\r\n                for (let t = 0, e = n.length - 1; t < e; t++, e--) {\r\n                    let r = n[t];\r\n                    n[t] = n[e], n[e] = r\r\n                }\r\n            }\r\n            let i = r ? 16 : 15,\r\n                    s = tt.sum(new Int32Array(n)) / i,\r\n                    o = this.getOddCounts(),\r\n                    a = this.getEvenCounts(),\r\n                    l = this.getOddRoundingErrors(),\r\n                    h = this.getEvenRoundingErrors();\r\n            for (let t = 0; t < n.length; t++) {\r\n                let e = n[t] / s,\r\n                        r = Math.floor(e + .5);\r\n                r < 1 ? r = 1 : r > 8 && (r = 8);\r\n                let i = Math.floor(t / 2);\r\n                0 == (1 & t) ? (o[i] = r, l[i] = e - r) : (a[i] = r, h[i] = e - r)\r\n            }\r\n            this.adjustOddEvenCounts(r, i);\r\n            let c = 0,\r\n                    u = 0;\r\n            for (let t = o.length - 1; t >= 0; t--) u *= 9, u += o[t], c += o[t];\r\n            let d = 0,\r\n                    g = 0;\r\n            for (let t = a.length - 1; t >= 0; t--) d *= 9, d += a[t], g += a[t];\r\n            let f = u + 3 * d;\r\n            if (r) {\r\n                if (0 != (1 & c) || c > 12 || c < 4) throw new R;\r\n                let t = (12 - c) / 2,\r\n                        e = te.OUTSIDE_ODD_WIDEST[t],\r\n                        r = 9 - e,\r\n                        n = Mt.getRSSvalue(o, e, !1),\r\n                        i = Mt.getRSSvalue(a, r, !0),\r\n                        s = te.OUTSIDE_EVEN_TOTAL_SUBSET[t],\r\n                        l = te.OUTSIDE_GSUM[t];\r\n                return new yt(n * s + i + l, f)\r\n            } {\r\n                if (0 != (1 & g) || g > 10 || g < 4) throw new R;\r\n                let t = (10 - g) / 2,\r\n                        e = te.INSIDE_ODD_WIDEST[t],\r\n                        r = 9 - e,\r\n                        n = Mt.getRSSvalue(o, e, !0),\r\n                        i = Mt.getRSSvalue(a, r, !1),\r\n                        s = te.INSIDE_ODD_TOTAL_SUBSET[t],\r\n                        l = te.INSIDE_GSUM[t];\r\n                return new yt(i * s + n + l, f)\r\n            }\r\n        }\r\n        findFinderPattern(t, e) {\r\n            let r = this.getDecodeFinderCounters();\r\n            r[0] = 0, r[1] = 0, r[2] = 0, r[3] = 0;\r\n            let n = t.getSize(),\r\n                    i = !1,\r\n                    s = 0;\r\n            for (; s < n && e !== (i = !t.get(s));) s++;\r\n            let o = 0,\r\n                    a = s;\r\n            for (let e = s; e < n; e++)\r\n                if (t.get(e) !== i) r[o]++;\r\n                else {\r\n                    if (3 === o) {\r\n                        if (Dt.isFinderPattern(r)) return [a, e];\r\n                        a += r[0] + r[1], r[0] = r[2], r[1] = r[3], r[2] = 0, r[3] = 0, o--\r\n                    } else o++;\r\n                    r[o] = 1, i = !i\r\n                } throw new R\r\n        }\r\n        parseFoundFinderPattern(t, e, r, n) {\r\n            let i = t.get(n[0]),\r\n                    s = n[0] - 1;\r\n            for (; s >= 0 && i !== t.get(s);) s--;\r\n            s++;\r\n            const o = n[0] - s,\r\n                    a = this.getDecodeFinderCounters(),\r\n                    l = new Int32Array(a.length);\r\n            c.arraycopy(a, 0, l, 1, a.length - 1), l[0] = o;\r\n            const h = this.parseFinderValue(l, te.FINDER_PATTERNS);\r\n            let u = s,\r\n                    d = n[1];\r\n            return r && (u = t.getSize() - 1 - u, d = t.getSize() - 1 - d), new Ot(h, [s, n[1]], u, d, e)\r\n        }\r\n        adjustOddEvenCounts(t, e) {\r\n            let r = tt.sum(new Int32Array(this.getOddCounts())),\r\n                    n = tt.sum(new Int32Array(this.getEvenCounts())),\r\n                    i = !1,\r\n                    s = !1,\r\n                    o = !1,\r\n                    a = !1;\r\n            t ? (r > 12 ? s = !0 : r < 4 && (i = !0), n > 12 ? a = !0 : n < 4 && (o = !0)) : (r > 11 ? s = !0 : r < 5 && (i = !0), n > 10 ? a = !0 : n < 4 && (o = !0));\r\n            let l = r + n - e,\r\n                    h = (1 & r) == (t ? 1 : 0),\r\n                    c = 1 == (1 & n);\r\n            if (1 === l)\r\n                if (h) {\r\n                    if (c) throw new R;\r\n                    s = !0\r\n                } else {\r\n                    if (!c) throw new R;\r\n                    a = !0\r\n                }\r\n            else if (-1 === l)\r\n                if (h) {\r\n                    if (c) throw new R;\r\n                    i = !0\r\n                } else {\r\n                    if (!c) throw new R;\r\n                    o = !0\r\n                }\r\n            else {\r\n                if (0 !== l) throw new R;\r\n                if (h) {\r\n                    if (!c) throw new R;\r\n                    r < n ? (i = !0, a = !0) : (s = !0, o = !0)\r\n                } else if (c) throw new R\r\n            }\r\n            if (i) {\r\n                if (s) throw new R;\r\n                Dt.increment(this.getOddCounts(), this.getOddRoundingErrors())\r\n            }\r\n            if (s && Dt.decrement(this.getOddCounts(), this.getOddRoundingErrors()), o) {\r\n                if (a) throw new R;\r\n                Dt.increment(this.getEvenCounts(), this.getOddRoundingErrors())\r\n            }\r\n            a && Dt.decrement(this.getEvenCounts(), this.getEvenRoundingErrors())\r\n        }\r\n    }\r\n    te.OUTSIDE_EVEN_TOTAL_SUBSET = [1, 10, 34, 70, 126], te.INSIDE_ODD_TOTAL_SUBSET = [4, 20, 48, 81], te.OUTSIDE_GSUM = [0, 161, 961, 2015, 2715], te.INSIDE_GSUM = [0, 336, 1036, 1516], te.OUTSIDE_ODD_WIDEST = [8, 6, 4, 3, 1], te.INSIDE_ODD_WIDEST = [2, 4, 6, 8], te.FINDER_PATTERNS = [Int32Array.from([3, 8, 2, 1]), Int32Array.from([3, 5, 5, 1]), Int32Array.from([3, 3, 7, 1]), Int32Array.from([3, 1, 9, 1]), Int32Array.from([2, 7, 4, 1]), Int32Array.from([2, 5, 6, 1]), Int32Array.from([2, 3, 8, 1]), Int32Array.from([1, 5, 7, 1]), Int32Array.from([1, 3, 9, 1])];\r\n    class ee extends gt {\r\n        constructor(t, e) {\r\n            super(), this.readers = [], this.verbose = !0 === e;\r\n            const r = t ? t.get(C.POSSIBLE_FORMATS) : null,\r\n                    n = t && void 0 !== t.get(C.ASSUME_CODE_39_CHECK_DIGIT);\r\n            r && ((r.includes(k.EAN_13) || r.includes(k.UPC_A) || r.includes(k.EAN_8) || r.includes(k.UPC_E)) && this.readers.push(new Nt(t)), r.includes(k.CODE_39) && this.readers.push(new wt(n)), r.includes(k.CODE_128) && this.readers.push(new ft), r.includes(k.ITF) && this.readers.push(new At), r.includes(k.RSS_14) && this.readers.push(new te), r.includes(k.RSS_EXPANDED) && this.readers.push(new Jt(this.verbose))), 0 === this.readers.length && (this.readers.push(new Nt(t)), this.readers.push(new wt), this.readers.push(new Nt(t)), this.readers.push(new ft), this.readers.push(new At), this.readers.push(new te), this.readers.push(new Jt(this.verbose)))\r\n        }\r\n        decodeRow(t, e, r) {\r\n            for (let n = 0; n < this.readers.length; n++) try {\r\n                return this.readers[n].decodeRow(t, e, r)\r\n            } catch (t) {}\r\n            throw new R\r\n        }\r\n        reset() {\r\n            this.readers.forEach(t => t.reset())\r\n        }\r\n    }\r\n    class re {\r\n        constructor(t, e, r) {\r\n            this.ecCodewords = t, this.ecBlocks = [e], r && this.ecBlocks.push(r)\r\n        }\r\n        getECCodewords() {\r\n            return this.ecCodewords\r\n        }\r\n        getECBlocks() {\r\n            return this.ecBlocks\r\n        }\r\n    }\r\n    class ne {\r\n        constructor(t, e) {\r\n            this.count = t, this.dataCodewords = e\r\n        }\r\n        getCount() {\r\n            return this.count\r\n        }\r\n        getDataCodewords() {\r\n            return this.dataCodewords\r\n        }\r\n    }\r\n    class ie {\r\n        constructor(t, e, r, n, i, s) {\r\n            this.versionNumber = t, this.symbolSizeRows = e, this.symbolSizeColumns = r, this.dataRegionSizeRows = n, this.dataRegionSizeColumns = i, this.ecBlocks = s;\r\n            let o = 0;\r\n            const a = s.getECCodewords(),\r\n                    l = s.getECBlocks();\r\n            for (let t of l) o += t.getCount() * (t.getDataCodewords() + a);\r\n            this.totalCodewords = o\r\n        }\r\n        getVersionNumber() {\r\n            return this.versionNumber\r\n        }\r\n        getSymbolSizeRows() {\r\n            return this.symbolSizeRows\r\n        }\r\n        getSymbolSizeColumns() {\r\n            return this.symbolSizeColumns\r\n        }\r\n        getDataRegionSizeRows() {\r\n            return this.dataRegionSizeRows\r\n        }\r\n        getDataRegionSizeColumns() {\r\n            return this.dataRegionSizeColumns\r\n        }\r\n        getTotalCodewords() {\r\n            return this.totalCodewords\r\n        }\r\n        getECBlocks() {\r\n            return this.ecBlocks\r\n        }\r\n        static getVersionForDimensions(t, e) {\r\n            if (0 != (1 & t) || 0 != (1 & e)) throw new E;\r\n            for (let r of ie.VERSIONS)\r\n                if (r.symbolSizeRows === t && r.symbolSizeColumns === e) return r;\r\n            throw new E\r\n        }\r\n        toString() {\r\n            return \"\" + this.versionNumber\r\n        }\r\n        static buildVersions() {\r\n            return [new ie(1, 10, 10, 8, 8, new re(5, new ne(1, 3))), new ie(2, 12, 12, 10, 10, new re(7, new ne(1, 5))), new ie(3, 14, 14, 12, 12, new re(10, new ne(1, 8))), new ie(4, 16, 16, 14, 14, new re(12, new ne(1, 12))), new ie(5, 18, 18, 16, 16, new re(14, new ne(1, 18))), new ie(6, 20, 20, 18, 18, new re(18, new ne(1, 22))), new ie(7, 22, 22, 20, 20, new re(20, new ne(1, 30))), new ie(8, 24, 24, 22, 22, new re(24, new ne(1, 36))), new ie(9, 26, 26, 24, 24, new re(28, new ne(1, 44))), new ie(10, 32, 32, 14, 14, new re(36, new ne(1, 62))), new ie(11, 36, 36, 16, 16, new re(42, new ne(1, 86))), new ie(12, 40, 40, 18, 18, new re(48, new ne(1, 114))), new ie(13, 44, 44, 20, 20, new re(56, new ne(1, 144))), new ie(14, 48, 48, 22, 22, new re(68, new ne(1, 174))), new ie(15, 52, 52, 24, 24, new re(42, new ne(2, 102))), new ie(16, 64, 64, 14, 14, new re(56, new ne(2, 140))), new ie(17, 72, 72, 16, 16, new re(36, new ne(4, 92))), new ie(18, 80, 80, 18, 18, new re(48, new ne(4, 114))), new ie(19, 88, 88, 20, 20, new re(56, new ne(4, 144))), new ie(20, 96, 96, 22, 22, new re(68, new ne(4, 174))), new ie(21, 104, 104, 24, 24, new re(56, new ne(6, 136))), new ie(22, 120, 120, 18, 18, new re(68, new ne(6, 175))), new ie(23, 132, 132, 20, 20, new re(62, new ne(8, 163))), new ie(24, 144, 144, 22, 22, new re(62, new ne(8, 156), new ne(2, 155))), new ie(25, 8, 18, 6, 16, new re(7, new ne(1, 5))), new ie(26, 8, 32, 6, 14, new re(11, new ne(1, 10))), new ie(27, 12, 26, 10, 24, new re(14, new ne(1, 16))), new ie(28, 12, 36, 10, 16, new re(18, new ne(1, 22))), new ie(29, 16, 36, 14, 16, new re(24, new ne(1, 32))), new ie(30, 16, 48, 14, 22, new re(28, new ne(1, 49)))]\r\n        }\r\n    }\r\n    ie.VERSIONS = ie.buildVersions();\r\n    class se {\r\n        constructor(t) {\r\n            const e = t.getHeight();\r\n            if (e < 8 || e > 144 || 0 != (1 & e)) throw new E;\r\n            this.version = se.readVersion(t), this.mappingBitMatrix = this.extractDataRegion(t), this.readMappingMatrix = new T(this.mappingBitMatrix.getWidth(), this.mappingBitMatrix.getHeight())\r\n        }\r\n        getVersion() {\r\n            return this.version\r\n        }\r\n        static readVersion(t) {\r\n            const e = t.getHeight(),\r\n                    r = t.getWidth();\r\n            return ie.getVersionForDimensions(e, r)\r\n        }\r\n        readCodewords() {\r\n            const t = new Int8Array(this.version.getTotalCodewords());\r\n            let e = 0,\r\n                    r = 4,\r\n                    n = 0;\r\n            const i = this.mappingBitMatrix.getHeight(),\r\n                    s = this.mappingBitMatrix.getWidth();\r\n            let o = !1,\r\n                    a = !1,\r\n                    l = !1,\r\n                    h = !1;\r\n            do {\r\n                if (r !== i || 0 !== n || o)\r\n                    if (r !== i - 2 || 0 !== n || 0 == (3 & s) || a)\r\n                        if (r !== i + 4 || 2 !== n || 0 != (7 & s) || l)\r\n                            if (r !== i - 2 || 0 !== n || 4 != (7 & s) || h) {\r\n                                do {\r\n                                    r < i && n >= 0 && !this.readMappingMatrix.get(n, r) && (t[e++] = 255 & this.readUtah(r, n, i, s)), r -= 2, n += 2\r\n                                } while (r >= 0 && n < s);\r\n                                r += 1, n += 3;\r\n                                do {\r\n                                    r >= 0 && n < s && !this.readMappingMatrix.get(n, r) && (t[e++] = 255 & this.readUtah(r, n, i, s)), r += 2, n -= 2\r\n                                } while (r < i && n >= 0);\r\n                                r += 3, n += 1\r\n                            } else t[e++] = 255 & this.readCorner4(i, s), r -= 2, n += 2, h = !0;\r\n                        else t[e++] = 255 & this.readCorner3(i, s), r -= 2, n += 2, l = !0;\r\n                    else t[e++] = 255 & this.readCorner2(i, s), r -= 2, n += 2, a = !0;\r\n                else t[e++] = 255 & this.readCorner1(i, s), r -= 2, n += 2, o = !0\r\n            } while (r < i || n < s);\r\n            if (e !== this.version.getTotalCodewords()) throw new E;\r\n            return t\r\n        }\r\n        readModule(t, e, r, n) {\r\n            return t < 0 && (t += r, e += 4 - (r + 4 & 7)), e < 0 && (e += n, t += 4 - (n + 4 & 7)), this.readMappingMatrix.set(e, t), this.mappingBitMatrix.get(e, t)\r\n        }\r\n        readUtah(t, e, r, n) {\r\n            let i = 0;\r\n            return this.readModule(t - 2, e - 2, r, n) && (i |= 1), i <<= 1, this.readModule(t - 2, e - 1, r, n) && (i |= 1), i <<= 1, this.readModule(t - 1, e - 2, r, n) && (i |= 1), i <<= 1, this.readModule(t - 1, e - 1, r, n) && (i |= 1), i <<= 1, this.readModule(t - 1, e, r, n) && (i |= 1), i <<= 1, this.readModule(t, e - 2, r, n) && (i |= 1), i <<= 1, this.readModule(t, e - 1, r, n) && (i |= 1), i <<= 1, this.readModule(t, e, r, n) && (i |= 1), i\r\n        }\r\n        readCorner1(t, e) {\r\n            let r = 0;\r\n            return this.readModule(t - 1, 0, t, e) && (r |= 1), r <<= 1, this.readModule(t - 1, 1, t, e) && (r |= 1), r <<= 1, this.readModule(t - 1, 2, t, e) && (r |= 1), r <<= 1, this.readModule(0, e - 2, t, e) && (r |= 1), r <<= 1, this.readModule(0, e - 1, t, e) && (r |= 1), r <<= 1, this.readModule(1, e - 1, t, e) && (r |= 1), r <<= 1, this.readModule(2, e - 1, t, e) && (r |= 1), r <<= 1, this.readModule(3, e - 1, t, e) && (r |= 1), r\r\n        }\r\n        readCorner2(t, e) {\r\n            let r = 0;\r\n            return this.readModule(t - 3, 0, t, e) && (r |= 1), r <<= 1, this.readModule(t - 2, 0, t, e) && (r |= 1), r <<= 1, this.readModule(t - 1, 0, t, e) && (r |= 1), r <<= 1, this.readModule(0, e - 4, t, e) && (r |= 1), r <<= 1, this.readModule(0, e - 3, t, e) && (r |= 1), r <<= 1, this.readModule(0, e - 2, t, e) && (r |= 1), r <<= 1, this.readModule(0, e - 1, t, e) && (r |= 1), r <<= 1, this.readModule(1, e - 1, t, e) && (r |= 1), r\r\n        }\r\n        readCorner3(t, e) {\r\n            let r = 0;\r\n            return this.readModule(t - 1, 0, t, e) && (r |= 1), r <<= 1, this.readModule(t - 1, e - 1, t, e) && (r |= 1), r <<= 1, this.readModule(0, e - 3, t, e) && (r |= 1), r <<= 1, this.readModule(0, e - 2, t, e) && (r |= 1), r <<= 1, this.readModule(0, e - 1, t, e) && (r |= 1), r <<= 1, this.readModule(1, e - 3, t, e) && (r |= 1), r <<= 1, this.readModule(1, e - 2, t, e) && (r |= 1), r <<= 1, this.readModule(1, e - 1, t, e) && (r |= 1), r\r\n        }\r\n        readCorner4(t, e) {\r\n            let r = 0;\r\n            return this.readModule(t - 3, 0, t, e) && (r |= 1), r <<= 1, this.readModule(t - 2, 0, t, e) && (r |= 1), r <<= 1, this.readModule(t - 1, 0, t, e) && (r |= 1), r <<= 1, this.readModule(0, e - 2, t, e) && (r |= 1), r <<= 1, this.readModule(0, e - 1, t, e) && (r |= 1), r <<= 1, this.readModule(1, e - 1, t, e) && (r |= 1), r <<= 1, this.readModule(2, e - 1, t, e) && (r |= 1), r <<= 1, this.readModule(3, e - 1, t, e) && (r |= 1), r\r\n        }\r\n        extractDataRegion(t) {\r\n            const e = this.version.getSymbolSizeRows(),\r\n                    r = this.version.getSymbolSizeColumns();\r\n            if (t.getHeight() !== e) throw new o(\"Dimension of bitMatrix must match the version size\");\r\n            const n = this.version.getDataRegionSizeRows(),\r\n                    i = this.version.getDataRegionSizeColumns(),\r\n                    s = e / n | 0,\r\n                    a = r / i | 0,\r\n                    l = new T(a * i, s * n);\r\n            for (let e = 0; e < s; ++e) {\r\n                const r = e * n;\r\n                for (let s = 0; s < a; ++s) {\r\n                    const o = s * i;\r\n                    for (let a = 0; a < n; ++a) {\r\n                        const h = e * (n + 2) + 1 + a,\r\n                                c = r + a;\r\n                        for (let e = 0; e < i; ++e) {\r\n                            const r = s * (i + 2) + 1 + e;\r\n                            if (t.get(r, h)) {\r\n                                const t = o + e;\r\n                                l.set(t, c)\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n            return l\r\n        }\r\n    }\r\n    class oe {\r\n        constructor(t, e) {\r\n            this.numDataCodewords = t, this.codewords = e\r\n        }\r\n        static getDataBlocks(t, e) {\r\n            const r = e.getECBlocks();\r\n            let n = 0;\r\n            const i = r.getECBlocks();\r\n            for (let t of i) n += t.getCount();\r\n            const s = new Array(n);\r\n            let a = 0;\r\n            for (let t of i)\r\n                for (let e = 0; e < t.getCount(); e++) {\r\n                    const e = t.getDataCodewords(),\r\n                            n = r.getECCodewords() + e;\r\n                    s[a++] = new oe(e, new Uint8Array(n))\r\n                }\r\n            const l = s[0].codewords.length - r.getECCodewords(),\r\n                    h = l - 1;\r\n            let c = 0;\r\n            for (let e = 0; e < h; e++)\r\n                for (let r = 0; r < a; r++) s[r].codewords[e] = t[c++];\r\n            const u = 24 === e.getVersionNumber(),\r\n                    d = u ? 8 : a;\r\n            for (let e = 0; e < d; e++) s[e].codewords[l - 1] = t[c++];\r\n            const g = s[0].codewords.length;\r\n            for (let e = l; e < g; e++)\r\n                for (let r = 0; r < a; r++) {\r\n                    const n = u ? (r + 8) % a : r,\r\n                            i = u && n > 7 ? e - 1 : e;\r\n                    s[n].codewords[i] = t[c++]\r\n                }\r\n            if (c !== t.length) throw new o;\r\n            return s\r\n        }\r\n        getNumDataCodewords() {\r\n            return this.numDataCodewords\r\n        }\r\n        getCodewords() {\r\n            return this.codewords\r\n        }\r\n    }\r\n    class ae {\r\n        constructor(t) {\r\n            this.bytes = t, this.byteOffset = 0, this.bitOffset = 0\r\n        }\r\n        getBitOffset() {\r\n            return this.bitOffset\r\n        }\r\n        getByteOffset() {\r\n            return this.byteOffset\r\n        }\r\n        readBits(t) {\r\n            if (t < 1 || t > 32 || t > this.available()) throw new o(\"\" + t);\r\n            let e = 0,\r\n                    r = this.bitOffset,\r\n                    n = this.byteOffset;\r\n            const i = this.bytes;\r\n            if (r > 0) {\r\n                const s = 8 - r,\r\n                        o = t < s ? t : s,\r\n                        a = s - o,\r\n                        l = 255 >> 8 - o << a;\r\n                e = (i[n] & l) >> a, t -= o, 8 === (r += o) && (r = 0, n++)\r\n            }\r\n            if (t > 0) {\r\n                for (; t >= 8;) e = e << 8 | 255 & i[n], n++, t -= 8;\r\n                if (t > 0) {\r\n                    const s = 8 - t,\r\n                            o = 255 >> s << s;\r\n                    e = e << t | (i[n] & o) >> s, r += t\r\n                }\r\n            }\r\n            return this.bitOffset = r, this.byteOffset = n, e\r\n        }\r\n        available() {\r\n            return 8 * (this.bytes.length - this.byteOffset) - this.bitOffset\r\n        }\r\n    }! function(t) {\r\n        t[t.PAD_ENCODE = 0] = \"PAD_ENCODE\", t[t.ASCII_ENCODE = 1] = \"ASCII_ENCODE\", t[t.C40_ENCODE = 2] = \"C40_ENCODE\", t[t.TEXT_ENCODE = 3] = \"TEXT_ENCODE\", t[t.ANSIX12_ENCODE = 4] = \"ANSIX12_ENCODE\", t[t.EDIFACT_ENCODE = 5] = \"EDIFACT_ENCODE\", t[t.BASE256_ENCODE = 6] = \"BASE256_ENCODE\"\r\n    }(V || (V = {}));\r\n    class le {\r\n        static decode(t) {\r\n            const e = new ae(t),\r\n                    r = new p,\r\n                    n = new p,\r\n                    i = new Array;\r\n            let s = V.ASCII_ENCODE;\r\n            do {\r\n                if (s === V.ASCII_ENCODE) s = this.decodeAsciiSegment(e, r, n);\r\n                else {\r\n                    switch (s) {\r\n                        case V.C40_ENCODE:\r\n                            this.decodeC40Segment(e, r);\r\n                            break;\r\n                        case V.TEXT_ENCODE:\r\n                            this.decodeTextSegment(e, r);\r\n                            break;\r\n                        case V.ANSIX12_ENCODE:\r\n                            this.decodeAnsiX12Segment(e, r);\r\n                            break;\r\n                        case V.EDIFACT_ENCODE:\r\n                            this.decodeEdifactSegment(e, r);\r\n                            break;\r\n                        case V.BASE256_ENCODE:\r\n                            this.decodeBase256Segment(e, r, i);\r\n                            break;\r\n                        default:\r\n                            throw new E\r\n                    }\r\n                    s = V.ASCII_ENCODE\r\n                }\r\n            } while (s !== V.PAD_ENCODE && e.available() > 0);\r\n            return n.length() > 0 && r.append(n.toString()), new z(t, r.toString(), 0 === i.length ? null : i, null)\r\n        }\r\n        static decodeAsciiSegment(t, e, r) {\r\n            let n = !1;\r\n            do {\r\n                let i = t.readBits(8);\r\n                if (0 === i) throw new E;\r\n                if (i <= 128) return n && (i += 128), e.append(String.fromCharCode(i - 1)), V.ASCII_ENCODE;\r\n                if (129 === i) return V.PAD_ENCODE;\r\n                if (i <= 229) {\r\n                    const t = i - 130;\r\n                    t < 10 && e.append(\"0\"), e.append(\"\" + t)\r\n                } else switch (i) {\r\n                    case 230:\r\n                        return V.C40_ENCODE;\r\n                    case 231:\r\n                        return V.BASE256_ENCODE;\r\n                    case 232:\r\n                        e.append(String.fromCharCode(29));\r\n                        break;\r\n                    case 233:\r\n                    case 234:\r\n                        break;\r\n                    case 235:\r\n                        n = !0;\r\n                        break;\r\n                    case 236:\r\n                        e.append(\"[)>\u001e05\u001d\"), r.insert(0, \"\u001e\u0004\");\r\n                        break;\r\n                    case 237:\r\n                        e.append(\"[)>\u001e06\u001d\"), r.insert(0, \"\u001e\u0004\");\r\n                        break;\r\n                    case 238:\r\n                        return V.ANSIX12_ENCODE;\r\n                    case 239:\r\n                        return V.TEXT_ENCODE;\r\n                    case 240:\r\n                        return V.EDIFACT_ENCODE;\r\n                    case 241:\r\n                        break;\r\n                    default:\r\n                        if (254 !== i || 0 !== t.available()) throw new E\r\n                }\r\n            } while (t.available() > 0);\r\n            return V.ASCII_ENCODE\r\n        }\r\n        static decodeC40Segment(t, e) {\r\n            let r = !1;\r\n            const n = [];\r\n            let i = 0;\r\n            do {\r\n                if (8 === t.available()) return;\r\n                const s = t.readBits(8);\r\n                if (254 === s) return;\r\n                this.parseTwoBytes(s, t.readBits(8), n);\r\n                for (let t = 0; t < 3; t++) {\r\n                    const s = n[t];\r\n                    switch (i) {\r\n                        case 0:\r\n                            if (s < 3) i = s + 1;\r\n                            else {\r\n                                if (!(s < this.C40_BASIC_SET_CHARS.length)) throw new E;\r\n                                {\r\n                                    const t = this.C40_BASIC_SET_CHARS[s];\r\n                                    r ? (e.append(String.fromCharCode(t.charCodeAt(0) + 128)), r = !1) : e.append(t)\r\n                                }\r\n                            }\r\n                            break;\r\n                        case 1:\r\n                            r ? (e.append(String.fromCharCode(s + 128)), r = !1) : e.append(String.fromCharCode(s)), i = 0;\r\n                            break;\r\n                        case 2:\r\n                            if (s < this.C40_SHIFT2_SET_CHARS.length) {\r\n                                const t = this.C40_SHIFT2_SET_CHARS[s];\r\n                                r ? (e.append(String.fromCharCode(t.charCodeAt(0) + 128)), r = !1) : e.append(t)\r\n                            } else switch (s) {\r\n                                case 27:\r\n                                    e.append(String.fromCharCode(29));\r\n                                    break;\r\n                                case 30:\r\n                                    r = !0;\r\n                                    break;\r\n                                default:\r\n                                    throw new E\r\n                            }\r\n                            i = 0;\r\n                            break;\r\n                        case 3:\r\n                            r ? (e.append(String.fromCharCode(s + 224)), r = !1) : e.append(String.fromCharCode(s + 96)), i = 0;\r\n                            break;\r\n                        default:\r\n                            throw new E\r\n                    }\r\n                }\r\n            } while (t.available() > 0)\r\n        }\r\n        static decodeTextSegment(t, e) {\r\n            let r = !1,\r\n                    n = [],\r\n                    i = 0;\r\n            do {\r\n                if (8 === t.available()) return;\r\n                const s = t.readBits(8);\r\n                if (254 === s) return;\r\n                this.parseTwoBytes(s, t.readBits(8), n);\r\n                for (let t = 0; t < 3; t++) {\r\n                    const s = n[t];\r\n                    switch (i) {\r\n                        case 0:\r\n                            if (s < 3) i = s + 1;\r\n                            else {\r\n                                if (!(s < this.TEXT_BASIC_SET_CHARS.length)) throw new E;\r\n                                {\r\n                                    const t = this.TEXT_BASIC_SET_CHARS[s];\r\n                                    r ? (e.append(String.fromCharCode(t.charCodeAt(0) + 128)), r = !1) : e.append(t)\r\n                                }\r\n                            }\r\n                            break;\r\n                        case 1:\r\n                            r ? (e.append(String.fromCharCode(s + 128)), r = !1) : e.append(String.fromCharCode(s)), i = 0;\r\n                            break;\r\n                        case 2:\r\n                            if (s < this.TEXT_SHIFT2_SET_CHARS.length) {\r\n                                const t = this.TEXT_SHIFT2_SET_CHARS[s];\r\n                                r ? (e.append(String.fromCharCode(t.charCodeAt(0) + 128)), r = !1) : e.append(t)\r\n                            } else switch (s) {\r\n                                case 27:\r\n                                    e.append(String.fromCharCode(29));\r\n                                    break;\r\n                                case 30:\r\n                                    r = !0;\r\n                                    break;\r\n                                default:\r\n                                    throw new E\r\n                            }\r\n                            i = 0;\r\n                            break;\r\n                        case 3:\r\n                            if (!(s < this.TEXT_SHIFT3_SET_CHARS.length)) throw new E;\r\n                        {\r\n                            const t = this.TEXT_SHIFT3_SET_CHARS[s];\r\n                            r ? (e.append(String.fromCharCode(t.charCodeAt(0) + 128)), r = !1) : e.append(t), i = 0\r\n                        }\r\n                            break;\r\n                        default:\r\n                            throw new E\r\n                    }\r\n                }\r\n            } while (t.available() > 0)\r\n        }\r\n        static decodeAnsiX12Segment(t, e) {\r\n            const r = [];\r\n            do {\r\n                if (8 === t.available()) return;\r\n                const n = t.readBits(8);\r\n                if (254 === n) return;\r\n                this.parseTwoBytes(n, t.readBits(8), r);\r\n                for (let t = 0; t < 3; t++) {\r\n                    const n = r[t];\r\n                    switch (n) {\r\n                        case 0:\r\n                            e.append(\"\\r\");\r\n                            break;\r\n                        case 1:\r\n                            e.append(\"*\");\r\n                            break;\r\n                        case 2:\r\n                            e.append(\">\");\r\n                            break;\r\n                        case 3:\r\n                            e.append(\" \");\r\n                            break;\r\n                        default:\r\n                            if (n < 14) e.append(String.fromCharCode(n + 44));\r\n                            else {\r\n                                if (!(n < 40)) throw new E;\r\n                                e.append(String.fromCharCode(n + 51))\r\n                            }\r\n                    }\r\n                }\r\n            } while (t.available() > 0)\r\n        }\r\n        static parseTwoBytes(t, e, r) {\r\n            let n = (t << 8) + e - 1,\r\n                    i = Math.floor(n / 1600);\r\n            r[0] = i, n -= 1600 * i, i = Math.floor(n / 40), r[1] = i, r[2] = n - 40 * i\r\n        }\r\n        static decodeEdifactSegment(t, e) {\r\n            do {\r\n                if (t.available() <= 16) return;\r\n                for (let r = 0; r < 4; r++) {\r\n                    let r = t.readBits(6);\r\n                    if (31 === r) {\r\n                        const e = 8 - t.getBitOffset();\r\n                        return void(8 !== e && t.readBits(e))\r\n                    }\r\n                    0 == (32 & r) && (r |= 64), e.append(String.fromCharCode(r))\r\n                }\r\n            } while (t.available() > 0)\r\n        }\r\n        static decodeBase256Segment(t, e, r) {\r\n            let n = 1 + t.getByteOffset();\r\n            const i = this.unrandomize255State(t.readBits(8), n++);\r\n            let s;\r\n            if ((s = 0 === i ? t.available() / 8 | 0 : i < 250 ? i : 250 * (i - 249) + this.unrandomize255State(t.readBits(8), n++)) < 0) throw new E;\r\n            const o = new Uint8Array(s);\r\n            for (let e = 0; e < s; e++) {\r\n                if (t.available() < 8) throw new E;\r\n                o[e] = this.unrandomize255State(t.readBits(8), n++)\r\n            }\r\n            r.push(o);\r\n            try {\r\n                e.append(I.decode(o, S.ISO88591))\r\n            } catch (t) {\r\n                throw new j(\"Platform does not support required encoding: \" + t.message)\r\n            }\r\n        }\r\n        static unrandomize255State(t, e) {\r\n            const r = t - (149 * e % 255 + 1);\r\n            return r >= 0 ? r : r + 256\r\n        }\r\n    }\r\n    le.C40_BASIC_SET_CHARS = [\"*\", \"*\", \"*\", \" \", \"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\", \"H\", \"I\", \"J\", \"K\", \"L\", \"M\", \"N\", \"O\", \"P\", \"Q\", \"R\", \"S\", \"T\", \"U\", \"V\", \"W\", \"X\", \"Y\", \"Z\"], le.C40_SHIFT2_SET_CHARS = [\"!\", '\"', \"#\", \"$\", \"%\", \"&\", \"'\", \"(\", \")\", \"*\", \"+\", \",\", \"-\", \".\", \"/\", \":\", \";\", \"<\", \"=\", \">\", \"?\", \"@\", \"[\", \"\\\\\", \"]\", \"^\", \"_\"], le.TEXT_BASIC_SET_CHARS = [\"*\", \"*\", \"*\", \" \", \"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"a\", \"b\", \"c\", \"d\", \"e\", \"f\", \"g\", \"h\", \"i\", \"j\", \"k\", \"l\", \"m\", \"n\", \"o\", \"p\", \"q\", \"r\", \"s\", \"t\", \"u\", \"v\", \"w\", \"x\", \"y\", \"z\"], le.TEXT_SHIFT2_SET_CHARS = le.C40_SHIFT2_SET_CHARS, le.TEXT_SHIFT3_SET_CHARS = [\"`\", \"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\", \"H\", \"I\", \"J\", \"K\", \"L\", \"M\", \"N\", \"O\", \"P\", \"Q\", \"R\", \"S\", \"T\", \"U\", \"V\", \"W\", \"X\", \"Y\", \"Z\", \"{\", \"|\", \"}\", \"~\", String.fromCharCode(127)];\r\n    class he {\r\n        constructor() {\r\n            this.rsDecoder = new J(q.DATA_MATRIX_FIELD_256)\r\n        }\r\n        decode(t) {\r\n            const e = new se(t),\r\n                    r = e.getVersion(),\r\n                    n = e.readCodewords(),\r\n                    i = oe.getDataBlocks(n, r);\r\n            let s = 0;\r\n            for (let t of i) s += t.getNumDataCodewords();\r\n            const o = new Uint8Array(s),\r\n                    a = i.length;\r\n            for (let t = 0; t < a; t++) {\r\n                const e = i[t],\r\n                        r = e.getCodewords(),\r\n                        n = e.getNumDataCodewords();\r\n                this.correctErrors(r, n);\r\n                for (let e = 0; e < n; e++) o[e * a + t] = r[e]\r\n            }\r\n            return le.decode(o)\r\n        }\r\n        correctErrors(t, e) {\r\n            const r = new Int32Array(t);\r\n            try {\r\n                this.rsDecoder.decode(r, t.length - e)\r\n            } catch (t) {\r\n                throw new l\r\n            }\r\n            for (let n = 0; n < e; n++) t[n] = r[n]\r\n        }\r\n    }\r\n    class ce {\r\n        constructor(t) {\r\n            this.image = t, this.rectangleDetector = new st(this.image)\r\n        }\r\n        detect() {\r\n            const t = this.rectangleDetector.detect();\r\n            let e = this.detectSolid1(t);\r\n            if ((e = this.detectSolid2(e))[3] = this.correctTopRight(e), !e[3]) throw new R;\r\n            const r = (e = this.shiftToModuleCenter(e))[0],\r\n                    n = e[1],\r\n                    i = e[2],\r\n                    s = e[3];\r\n            let o = this.transitionsBetween(r, s) + 1,\r\n                    a = this.transitionsBetween(i, s) + 1;\r\n            1 == (1 & o) && (o += 1), 1 == (1 & a) && (a += 1), 4 * o < 7 * a && 4 * a < 7 * o && (o = a = Math.max(o, a));\r\n            let l = ce.sampleGrid(this.image, r, n, i, s, o, a);\r\n            return new nt(l, [r, n, i, s])\r\n        }\r\n        static shiftPoint(t, e, r) {\r\n            let n = (e.getX() - t.getX()) / (r + 1),\r\n                    i = (e.getY() - t.getY()) / (r + 1);\r\n            return new rt(t.getX() + n, t.getY() + i)\r\n        }\r\n        static moveAway(t, e, r) {\r\n            let n = t.getX(),\r\n                    i = t.getY();\r\n            return n < e ? n -= 1 : n += 1, i < r ? i -= 1 : i += 1, new rt(n, i)\r\n        }\r\n        detectSolid1(t) {\r\n            let e = t[0],\r\n                    r = t[1],\r\n                    n = t[3],\r\n                    i = t[2],\r\n                    s = this.transitionsBetween(e, r),\r\n                    o = this.transitionsBetween(r, n),\r\n                    a = this.transitionsBetween(n, i),\r\n                    l = this.transitionsBetween(i, e),\r\n                    h = s,\r\n                    c = [i, e, r, n];\r\n            return h > o && (h = o, c[0] = e, c[1] = r, c[2] = n, c[3] = i), h > a && (h = a, c[0] = r, c[1] = n, c[2] = i, c[3] = e), h > l && (c[0] = n, c[1] = i, c[2] = e, c[3] = r), c\r\n        }\r\n        detectSolid2(t) {\r\n            let e = t[0],\r\n                    r = t[1],\r\n                    n = t[2],\r\n                    i = t[3],\r\n                    s = this.transitionsBetween(e, i),\r\n                    o = ce.shiftPoint(r, n, 4 * (s + 1)),\r\n                    a = ce.shiftPoint(n, r, 4 * (s + 1));\r\n            return this.transitionsBetween(o, e) < this.transitionsBetween(a, i) ? (t[0] = e, t[1] = r, t[2] = n, t[3] = i) : (t[0] = r, t[1] = n, t[2] = i, t[3] = e), t\r\n        }\r\n        correctTopRight(t) {\r\n            let e = t[0],\r\n                    r = t[1],\r\n                    n = t[2],\r\n                    i = t[3],\r\n                    s = this.transitionsBetween(e, i),\r\n                    o = this.transitionsBetween(r, i),\r\n                    a = ce.shiftPoint(e, r, 4 * (o + 1)),\r\n                    l = ce.shiftPoint(n, r, 4 * (s + 1));\r\n            s = this.transitionsBetween(a, i), o = this.transitionsBetween(l, i);\r\n            let h = new rt(i.getX() + (n.getX() - r.getX()) / (s + 1), i.getY() + (n.getY() - r.getY()) / (s + 1)),\r\n                    c = new rt(i.getX() + (e.getX() - r.getX()) / (o + 1), i.getY() + (e.getY() - r.getY()) / (o + 1));\r\n            return this.isValid(h) ? this.isValid(c) ? this.transitionsBetween(a, h) + this.transitionsBetween(l, h) > this.transitionsBetween(a, c) + this.transitionsBetween(l, c) ? h : c : h : this.isValid(c) ? c : null\r\n        }\r\n        shiftToModuleCenter(t) {\r\n            let e = t[0],\r\n                    r = t[1],\r\n                    n = t[2],\r\n                    i = t[3],\r\n                    s = this.transitionsBetween(e, i) + 1,\r\n                    o = this.transitionsBetween(n, i) + 1,\r\n                    a = ce.shiftPoint(e, r, 4 * o),\r\n                    l = ce.shiftPoint(n, r, 4 * s);\r\n            1 == (1 & (s = this.transitionsBetween(a, i) + 1)) && (s += 1), 1 == (1 & (o = this.transitionsBetween(l, i) + 1)) && (o += 1);\r\n            let h, c, u = (e.getX() + r.getX() + n.getX() + i.getX()) / 4,\r\n                    d = (e.getY() + r.getY() + n.getY() + i.getY()) / 4;\r\n            return e = ce.moveAway(e, u, d), r = ce.moveAway(r, u, d), n = ce.moveAway(n, u, d), i = ce.moveAway(i, u, d), a = ce.shiftPoint(e, r, 4 * o), a = ce.shiftPoint(a, i, 4 * s), h = ce.shiftPoint(r, e, 4 * o), h = ce.shiftPoint(h, n, 4 * s), l = ce.shiftPoint(n, i, 4 * o), l = ce.shiftPoint(l, r, 4 * s), c = ce.shiftPoint(i, n, 4 * o), [a, h, l, c = ce.shiftPoint(c, e, 4 * s)]\r\n        }\r\n        isValid(t) {\r\n            return t.getX() >= 0 && t.getX() < this.image.getWidth() && t.getY() > 0 && t.getY() < this.image.getHeight()\r\n        }\r\n        static sampleGrid(t, e, r, n, i, s, o) {\r\n            return ht.getInstance().sampleGrid(t, s, o, .5, .5, s - .5, .5, s - .5, o - .5, .5, o - .5, e.getX(), e.getY(), i.getX(), i.getY(), n.getX(), n.getY(), r.getX(), r.getY())\r\n        }\r\n        transitionsBetween(t, e) {\r\n            let r = Math.trunc(t.getX()),\r\n                    n = Math.trunc(t.getY()),\r\n                    i = Math.trunc(e.getX()),\r\n                    s = Math.trunc(e.getY()),\r\n                    o = Math.abs(s - n) > Math.abs(i - r);\r\n            if (o) {\r\n                let t = r;\r\n                r = n, n = t, t = i, i = s, s = t\r\n            }\r\n            let a = Math.abs(i - r),\r\n                    l = Math.abs(s - n),\r\n                    h = -a / 2,\r\n                    c = n < s ? 1 : -1,\r\n                    u = r < i ? 1 : -1,\r\n                    d = 0,\r\n                    g = this.image.get(o ? n : r, o ? r : n);\r\n            for (let t = r, e = n; t !== i; t += u) {\r\n                let r = this.image.get(o ? e : t, o ? t : e);\r\n                if (r !== g && (d++, g = r), (h += l) > 0) {\r\n                    if (e === s) break;\r\n                    e += c, h -= a\r\n                }\r\n            }\r\n            return d\r\n        }\r\n    }\r\n    class ue {\r\n        constructor() {\r\n            this.decoder = new he\r\n        }\r\n        decode(t, e = null) {\r\n            let r, n;\r\n            if (null != e && e.has(C.PURE_BARCODE)) {\r\n                const e = ue.extractPureBits(t.getBlackMatrix());\r\n                r = this.decoder.decode(e), n = ue.NO_POINTS\r\n            } else {\r\n                const e = new ce(t.getBlackMatrix()).detect();\r\n                r = this.decoder.decode(e.getBits()), n = e.getPoints()\r\n            }\r\n            const i = r.getRawBytes(),\r\n                    s = new F(r.getText(), i, 8 * i.length, n, k.DATA_MATRIX, c.currentTimeMillis()),\r\n                    o = r.getByteSegments();\r\n            null != o && s.putMetadata(W.BYTE_SEGMENTS, o);\r\n            const a = r.getECLevel();\r\n            return null != a && s.putMetadata(W.ERROR_CORRECTION_LEVEL, a), s\r\n        }\r\n        reset() {}\r\n        static extractPureBits(t) {\r\n            const e = t.getTopLeftOnBit(),\r\n                    r = t.getBottomRightOnBit();\r\n            if (null == e || null == r) throw new R;\r\n            const n = this.moduleSize(e, t);\r\n            let i = e[1];\r\n            const s = r[1];\r\n            let o = e[0];\r\n            const a = (r[0] - o + 1) / n,\r\n                    l = (s - i + 1) / n;\r\n            if (a <= 0 || l <= 0) throw new R;\r\n            const h = n / 2;\r\n            i += h, o += h;\r\n            const c = new T(a, l);\r\n            for (let e = 0; e < l; e++) {\r\n                const r = i + e * n;\r\n                for (let i = 0; i < a; i++) t.get(o + i * n, r) && c.set(i, e)\r\n            }\r\n            return c\r\n        }\r\n        static moduleSize(t, e) {\r\n            const r = e.getWidth();\r\n            let n = t[0];\r\n            const i = t[1];\r\n            for (; n < r && e.get(n, i);) n++;\r\n            if (n === r) throw new R;\r\n            const s = n - t[0];\r\n            if (0 === s) throw new R;\r\n            return s\r\n        }\r\n    }\r\n    ue.NO_POINTS = [];\r\n    ! function(t) {\r\n        t[t.L = 0] = \"L\", t[t.M = 1] = \"M\", t[t.Q = 2] = \"Q\", t[t.H = 3] = \"H\"\r\n    }(U || (U = {}));\r\n    class de {\r\n        constructor(t, e, r) {\r\n            this.value = t, this.stringValue = e, this.bits = r, de.FOR_BITS.set(r, this), de.FOR_VALUE.set(t, this)\r\n        }\r\n        getValue() {\r\n            return this.value\r\n        }\r\n        getBits() {\r\n            return this.bits\r\n        }\r\n        static fromString(t) {\r\n            switch (t) {\r\n                case \"L\":\r\n                    return de.L;\r\n                case \"M\":\r\n                    return de.M;\r\n                case \"Q\":\r\n                    return de.Q;\r\n                case \"H\":\r\n                    return de.H;\r\n                default:\r\n                    throw new s(t + \"not available\")\r\n            }\r\n        }\r\n        toString() {\r\n            return this.stringValue\r\n        }\r\n        equals(t) {\r\n            if (!(t instanceof de)) return !1;\r\n            const e = t;\r\n            return this.value === e.value\r\n        }\r\n        static forBits(t) {\r\n            if (t < 0 || t >= de.FOR_BITS.size) throw new o;\r\n            return de.FOR_BITS.get(t)\r\n        }\r\n    }\r\n    de.FOR_BITS = new Map, de.FOR_VALUE = new Map, de.L = new de(U.L, \"L\", 1), de.M = new de(U.M, \"M\", 0), de.Q = new de(U.Q, \"Q\", 3), de.H = new de(U.H, \"H\", 2);\r\n    class ge {\r\n        constructor(t) {\r\n            this.errorCorrectionLevel = de.forBits(t >> 3 & 3), this.dataMask = 7 & t\r\n        }\r\n        static numBitsDiffering(t, e) {\r\n            return f.bitCount(t ^ e)\r\n        }\r\n        static decodeFormatInformation(t, e) {\r\n            const r = ge.doDecodeFormatInformation(t, e);\r\n            return null !== r ? r : ge.doDecodeFormatInformation(t ^ ge.FORMAT_INFO_MASK_QR, e ^ ge.FORMAT_INFO_MASK_QR)\r\n        }\r\n        static doDecodeFormatInformation(t, e) {\r\n            let r = Number.MAX_SAFE_INTEGER,\r\n                    n = 0;\r\n            for (const i of ge.FORMAT_INFO_DECODE_LOOKUP) {\r\n                const s = i[0];\r\n                if (s === t || s === e) return new ge(i[1]);\r\n                let o = ge.numBitsDiffering(t, s);\r\n                o < r && (n = i[1], r = o), t !== e && (o = ge.numBitsDiffering(e, s)) < r && (n = i[1], r = o)\r\n            }\r\n            return r <= 3 ? new ge(n) : null\r\n        }\r\n        getErrorCorrectionLevel() {\r\n            return this.errorCorrectionLevel\r\n        }\r\n        getDataMask() {\r\n            return this.dataMask\r\n        }\r\n        hashCode() {\r\n            return this.errorCorrectionLevel.getBits() << 3 | this.dataMask\r\n        }\r\n        equals(t) {\r\n            if (!(t instanceof ge)) return !1;\r\n            const e = t;\r\n            return this.errorCorrectionLevel === e.errorCorrectionLevel && this.dataMask === e.dataMask\r\n        }\r\n    }\r\n    ge.FORMAT_INFO_MASK_QR = 21522, ge.FORMAT_INFO_DECODE_LOOKUP = [Int32Array.from([21522, 0]), Int32Array.from([20773, 1]), Int32Array.from([24188, 2]), Int32Array.from([23371, 3]), Int32Array.from([17913, 4]), Int32Array.from([16590, 5]), Int32Array.from([20375, 6]), Int32Array.from([19104, 7]), Int32Array.from([30660, 8]), Int32Array.from([29427, 9]), Int32Array.from([32170, 10]), Int32Array.from([30877, 11]), Int32Array.from([26159, 12]), Int32Array.from([25368, 13]), Int32Array.from([27713, 14]), Int32Array.from([26998, 15]), Int32Array.from([5769, 16]), Int32Array.from([5054, 17]), Int32Array.from([7399, 18]), Int32Array.from([6608, 19]), Int32Array.from([1890, 20]), Int32Array.from([597, 21]), Int32Array.from([3340, 22]), Int32Array.from([2107, 23]), Int32Array.from([13663, 24]), Int32Array.from([12392, 25]), Int32Array.from([16177, 26]), Int32Array.from([14854, 27]), Int32Array.from([9396, 28]), Int32Array.from([8579, 29]), Int32Array.from([11994, 30]), Int32Array.from([11245, 31])];\r\n    class fe {\r\n        constructor(t, ...e) {\r\n            this.ecCodewordsPerBlock = t, this.ecBlocks = e\r\n        }\r\n        getECCodewordsPerBlock() {\r\n            return this.ecCodewordsPerBlock\r\n        }\r\n        getNumBlocks() {\r\n            let t = 0;\r\n            const e = this.ecBlocks;\r\n            for (const r of e) t += r.getCount();\r\n            return t\r\n        }\r\n        getTotalECCodewords() {\r\n            return this.ecCodewordsPerBlock * this.getNumBlocks()\r\n        }\r\n        getECBlocks() {\r\n            return this.ecBlocks\r\n        }\r\n    }\r\n    class we {\r\n        constructor(t, e) {\r\n            this.count = t, this.dataCodewords = e\r\n        }\r\n        getCount() {\r\n            return this.count\r\n        }\r\n        getDataCodewords() {\r\n            return this.dataCodewords\r\n        }\r\n    }\r\n    class Ae {\r\n        constructor(t, e, ...r) {\r\n            this.versionNumber = t, this.alignmentPatternCenters = e, this.ecBlocks = r;\r\n            let n = 0;\r\n            const i = r[0].getECCodewordsPerBlock(),\r\n                    s = r[0].getECBlocks();\r\n            for (const t of s) n += t.getCount() * (t.getDataCodewords() + i);\r\n            this.totalCodewords = n\r\n        }\r\n        getVersionNumber() {\r\n            return this.versionNumber\r\n        }\r\n        getAlignmentPatternCenters() {\r\n            return this.alignmentPatternCenters\r\n        }\r\n        getTotalCodewords() {\r\n            return this.totalCodewords\r\n        }\r\n        getDimensionForVersion() {\r\n            return 17 + 4 * this.versionNumber\r\n        }\r\n        getECBlocksForLevel(t) {\r\n            return this.ecBlocks[t.getValue()]\r\n        }\r\n        static getProvisionalVersionForDimension(t) {\r\n            if (t % 4 != 1) throw new E;\r\n            try {\r\n                return this.getVersionForNumber((t - 17) / 4)\r\n            } catch (t) {\r\n                throw new E\r\n            }\r\n        }\r\n        static getVersionForNumber(t) {\r\n            if (t < 1 || t > 40) throw new o;\r\n            return Ae.VERSIONS[t - 1]\r\n        }\r\n        static decodeVersionInformation(t) {\r\n            let e = Number.MAX_SAFE_INTEGER,\r\n                    r = 0;\r\n            for (let n = 0; n < Ae.VERSION_DECODE_INFO.length; n++) {\r\n                const i = Ae.VERSION_DECODE_INFO[n];\r\n                if (i === t) return Ae.getVersionForNumber(n + 7);\r\n                const s = ge.numBitsDiffering(t, i);\r\n                s < e && (r = n + 7, e = s)\r\n            }\r\n            return e <= 3 ? Ae.getVersionForNumber(r) : null\r\n        }\r\n        buildFunctionPattern() {\r\n            const t = this.getDimensionForVersion(),\r\n                    e = new T(t);\r\n            e.setRegion(0, 0, 9, 9), e.setRegion(t - 8, 0, 8, 9), e.setRegion(0, t - 8, 9, 8);\r\n            const r = this.alignmentPatternCenters.length;\r\n            for (let t = 0; t < r; t++) {\r\n                const n = this.alignmentPatternCenters[t] - 2;\r\n                for (let i = 0; i < r; i++) 0 === t && (0 === i || i === r - 1) || t === r - 1 && 0 === i || e.setRegion(this.alignmentPatternCenters[i] - 2, n, 5, 5)\r\n            }\r\n            return e.setRegion(6, 9, 1, t - 17), e.setRegion(9, 6, t - 17, 1), this.versionNumber > 6 && (e.setRegion(t - 11, 0, 3, 6), e.setRegion(0, t - 11, 6, 3)), e\r\n        }\r\n        toString() {\r\n            return \"\" + this.versionNumber\r\n        }\r\n    }\r\n    Ae.VERSION_DECODE_INFO = Int32Array.from([31892, 34236, 39577, 42195, 48118, 51042, 55367, 58893, 63784, 68472, 70749, 76311, 79154, 84390, 87683, 92361, 96236, 102084, 102881, 110507, 110734, 117786, 119615, 126325, 127568, 133589, 136944, 141498, 145311, 150283, 152622, 158308, 161089, 167017]), Ae.VERSIONS = [new Ae(1, new Int32Array(0), new fe(7, new we(1, 19)), new fe(10, new we(1, 16)), new fe(13, new we(1, 13)), new fe(17, new we(1, 9))), new Ae(2, Int32Array.from([6, 18]), new fe(10, new we(1, 34)), new fe(16, new we(1, 28)), new fe(22, new we(1, 22)), new fe(28, new we(1, 16))), new Ae(3, Int32Array.from([6, 22]), new fe(15, new we(1, 55)), new fe(26, new we(1, 44)), new fe(18, new we(2, 17)), new fe(22, new we(2, 13))), new Ae(4, Int32Array.from([6, 26]), new fe(20, new we(1, 80)), new fe(18, new we(2, 32)), new fe(26, new we(2, 24)), new fe(16, new we(4, 9))), new Ae(5, Int32Array.from([6, 30]), new fe(26, new we(1, 108)), new fe(24, new we(2, 43)), new fe(18, new we(2, 15), new we(2, 16)), new fe(22, new we(2, 11), new we(2, 12))), new Ae(6, Int32Array.from([6, 34]), new fe(18, new we(2, 68)), new fe(16, new we(4, 27)), new fe(24, new we(4, 19)), new fe(28, new we(4, 15))), new Ae(7, Int32Array.from([6, 22, 38]), new fe(20, new we(2, 78)), new fe(18, new we(4, 31)), new fe(18, new we(2, 14), new we(4, 15)), new fe(26, new we(4, 13), new we(1, 14))), new Ae(8, Int32Array.from([6, 24, 42]), new fe(24, new we(2, 97)), new fe(22, new we(2, 38), new we(2, 39)), new fe(22, new we(4, 18), new we(2, 19)), new fe(26, new we(4, 14), new we(2, 15))), new Ae(9, Int32Array.from([6, 26, 46]), new fe(30, new we(2, 116)), new fe(22, new we(3, 36), new we(2, 37)), new fe(20, new we(4, 16), new we(4, 17)), new fe(24, new we(4, 12), new we(4, 13))), new Ae(10, Int32Array.from([6, 28, 50]), new fe(18, new we(2, 68), new we(2, 69)), new fe(26, new we(4, 43), new we(1, 44)), new fe(24, new we(6, 19), new we(2, 20)), new fe(28, new we(6, 15), new we(2, 16))), new Ae(11, Int32Array.from([6, 30, 54]), new fe(20, new we(4, 81)), new fe(30, new we(1, 50), new we(4, 51)), new fe(28, new we(4, 22), new we(4, 23)), new fe(24, new we(3, 12), new we(8, 13))), new Ae(12, Int32Array.from([6, 32, 58]), new fe(24, new we(2, 92), new we(2, 93)), new fe(22, new we(6, 36), new we(2, 37)), new fe(26, new we(4, 20), new we(6, 21)), new fe(28, new we(7, 14), new we(4, 15))), new Ae(13, Int32Array.from([6, 34, 62]), new fe(26, new we(4, 107)), new fe(22, new we(8, 37), new we(1, 38)), new fe(24, new we(8, 20), new we(4, 21)), new fe(22, new we(12, 11), new we(4, 12))), new Ae(14, Int32Array.from([6, 26, 46, 66]), new fe(30, new we(3, 115), new we(1, 116)), new fe(24, new we(4, 40), new we(5, 41)), new fe(20, new we(11, 16), new we(5, 17)), new fe(24, new we(11, 12), new we(5, 13))), new Ae(15, Int32Array.from([6, 26, 48, 70]), new fe(22, new we(5, 87), new we(1, 88)), new fe(24, new we(5, 41), new we(5, 42)), new fe(30, new we(5, 24), new we(7, 25)), new fe(24, new we(11, 12), new we(7, 13))), new Ae(16, Int32Array.from([6, 26, 50, 74]), new fe(24, new we(5, 98), new we(1, 99)), new fe(28, new we(7, 45), new we(3, 46)), new fe(24, new we(15, 19), new we(2, 20)), new fe(30, new we(3, 15), new we(13, 16))), new Ae(17, Int32Array.from([6, 30, 54, 78]), new fe(28, new we(1, 107), new we(5, 108)), new fe(28, new we(10, 46), new we(1, 47)), new fe(28, new we(1, 22), new we(15, 23)), new fe(28, new we(2, 14), new we(17, 15))), new Ae(18, Int32Array.from([6, 30, 56, 82]), new fe(30, new we(5, 120), new we(1, 121)), new fe(26, new we(9, 43), new we(4, 44)), new fe(28, new we(17, 22), new we(1, 23)), new fe(28, new we(2, 14), new we(19, 15))), new Ae(19, Int32Array.from([6, 30, 58, 86]), new fe(28, new we(3, 113), new we(4, 114)), new fe(26, new we(3, 44), new we(11, 45)), new fe(26, new we(17, 21), new we(4, 22)), new fe(26, new we(9, 13), new we(16, 14))), new Ae(20, Int32Array.from([6, 34, 62, 90]), new fe(28, new we(3, 107), new we(5, 108)), new fe(26, new we(3, 41), new we(13, 42)), new fe(30, new we(15, 24), new we(5, 25)), new fe(28, new we(15, 15), new we(10, 16))), new Ae(21, Int32Array.from([6, 28, 50, 72, 94]), new fe(28, new we(4, 116), new we(4, 117)), new fe(26, new we(17, 42)), new fe(28, new we(17, 22), new we(6, 23)), new fe(30, new we(19, 16), new we(6, 17))), new Ae(22, Int32Array.from([6, 26, 50, 74, 98]), new fe(28, new we(2, 111), new we(7, 112)), new fe(28, new we(17, 46)), new fe(30, new we(7, 24), new we(16, 25)), new fe(24, new we(34, 13))), new Ae(23, Int32Array.from([6, 30, 54, 78, 102]), new fe(30, new we(4, 121), new we(5, 122)), new fe(28, new we(4, 47), new we(14, 48)), new fe(30, new we(11, 24), new we(14, 25)), new fe(30, new we(16, 15), new we(14, 16))), new Ae(24, Int32Array.from([6, 28, 54, 80, 106]), new fe(30, new we(6, 117), new we(4, 118)), new fe(28, new we(6, 45), new we(14, 46)), new fe(30, new we(11, 24), new we(16, 25)), new fe(30, new we(30, 16), new we(2, 17))), new Ae(25, Int32Array.from([6, 32, 58, 84, 110]), new fe(26, new we(8, 106), new we(4, 107)), new fe(28, new we(8, 47), new we(13, 48)), new fe(30, new we(7, 24), new we(22, 25)), new fe(30, new we(22, 15), new we(13, 16))), new Ae(26, Int32Array.from([6, 30, 58, 86, 114]), new fe(28, new we(10, 114), new we(2, 115)), new fe(28, new we(19, 46), new we(4, 47)), new fe(28, new we(28, 22), new we(6, 23)), new fe(30, new we(33, 16), new we(4, 17))), new Ae(27, Int32Array.from([6, 34, 62, 90, 118]), new fe(30, new we(8, 122), new we(4, 123)), new fe(28, new we(22, 45), new we(3, 46)), new fe(30, new we(8, 23), new we(26, 24)), new fe(30, new we(12, 15), new we(28, 16))), new Ae(28, Int32Array.from([6, 26, 50, 74, 98, 122]), new fe(30, new we(3, 117), new we(10, 118)), new fe(28, new we(3, 45), new we(23, 46)), new fe(30, new we(4, 24), new we(31, 25)), new fe(30, new we(11, 15), new we(31, 16))), new Ae(29, Int32Array.from([6, 30, 54, 78, 102, 126]), new fe(30, new we(7, 116), new we(7, 117)), new fe(28, new we(21, 45), new we(7, 46)), new fe(30, new we(1, 23), new we(37, 24)), new fe(30, new we(19, 15), new we(26, 16))), new Ae(30, Int32Array.from([6, 26, 52, 78, 104, 130]), new fe(30, new we(5, 115), new we(10, 116)), new fe(28, new we(19, 47), new we(10, 48)), new fe(30, new we(15, 24), new we(25, 25)), new fe(30, new we(23, 15), new we(25, 16))), new Ae(31, Int32Array.from([6, 30, 56, 82, 108, 134]), new fe(30, new we(13, 115), new we(3, 116)), new fe(28, new we(2, 46), new we(29, 47)), new fe(30, new we(42, 24), new we(1, 25)), new fe(30, new we(23, 15), new we(28, 16))), new Ae(32, Int32Array.from([6, 34, 60, 86, 112, 138]), new fe(30, new we(17, 115)), new fe(28, new we(10, 46), new we(23, 47)), new fe(30, new we(10, 24), new we(35, 25)), new fe(30, new we(19, 15), new we(35, 16))), new Ae(33, Int32Array.from([6, 30, 58, 86, 114, 142]), new fe(30, new we(17, 115), new we(1, 116)), new fe(28, new we(14, 46), new we(21, 47)), new fe(30, new we(29, 24), new we(19, 25)), new fe(30, new we(11, 15), new we(46, 16))), new Ae(34, Int32Array.from([6, 34, 62, 90, 118, 146]), new fe(30, new we(13, 115), new we(6, 116)), new fe(28, new we(14, 46), new we(23, 47)), new fe(30, new we(44, 24), new we(7, 25)), new fe(30, new we(59, 16), new we(1, 17))), new Ae(35, Int32Array.from([6, 30, 54, 78, 102, 126, 150]), new fe(30, new we(12, 121), new we(7, 122)), new fe(28, new we(12, 47), new we(26, 48)), new fe(30, new we(39, 24), new we(14, 25)), new fe(30, new we(22, 15), new we(41, 16))), new Ae(36, Int32Array.from([6, 24, 50, 76, 102, 128, 154]), new fe(30, new we(6, 121), new we(14, 122)), new fe(28, new we(6, 47), new we(34, 48)), new fe(30, new we(46, 24), new we(10, 25)), new fe(30, new we(2, 15), new we(64, 16))), new Ae(37, Int32Array.from([6, 28, 54, 80, 106, 132, 158]), new fe(30, new we(17, 122), new we(4, 123)), new fe(28, new we(29, 46), new we(14, 47)), new fe(30, new we(49, 24), new we(10, 25)), new fe(30, new we(24, 15), new we(46, 16))), new Ae(38, Int32Array.from([6, 32, 58, 84, 110, 136, 162]), new fe(30, new we(4, 122), new we(18, 123)), new fe(28, new we(13, 46), new we(32, 47)), new fe(30, new we(48, 24), new we(14, 25)), new fe(30, new we(42, 15), new we(32, 16))), new Ae(39, Int32Array.from([6, 26, 54, 82, 110, 138, 166]), new fe(30, new we(20, 117), new we(4, 118)), new fe(28, new we(40, 47), new we(7, 48)), new fe(30, new we(43, 24), new we(22, 25)), new fe(30, new we(10, 15), new we(67, 16))), new Ae(40, Int32Array.from([6, 30, 58, 86, 114, 142, 170]), new fe(30, new we(19, 118), new we(6, 119)), new fe(28, new we(18, 47), new we(31, 48)), new fe(30, new we(34, 24), new we(34, 25)), new fe(30, new we(20, 15), new we(61, 16)))],\r\n            function(t) {\r\n                t[t.DATA_MASK_000 = 0] = \"DATA_MASK_000\", t[t.DATA_MASK_001 = 1] = \"DATA_MASK_001\", t[t.DATA_MASK_010 = 2] = \"DATA_MASK_010\", t[t.DATA_MASK_011 = 3] = \"DATA_MASK_011\", t[t.DATA_MASK_100 = 4] = \"DATA_MASK_100\", t[t.DATA_MASK_101 = 5] = \"DATA_MASK_101\", t[t.DATA_MASK_110 = 6] = \"DATA_MASK_110\", t[t.DATA_MASK_111 = 7] = \"DATA_MASK_111\"\r\n            }(H || (H = {}));\r\n    class Ce {\r\n        constructor(t, e) {\r\n            this.value = t, this.isMasked = e\r\n        }\r\n        unmaskBitMatrix(t, e) {\r\n            for (let r = 0; r < e; r++)\r\n                for (let n = 0; n < e; n++) this.isMasked(r, n) && t.flip(n, r)\r\n        }\r\n    }\r\n    Ce.values = new Map([\r\n                            [H.DATA_MASK_000, new Ce(H.DATA_MASK_000, (t, e) => 0 == (t + e & 1))],\r\n                            [H.DATA_MASK_001, new Ce(H.DATA_MASK_001, (t, e) => 0 == (1 & t))],\r\n                            [H.DATA_MASK_010, new Ce(H.DATA_MASK_010, (t, e) => e % 3 == 0)],\r\n                            [H.DATA_MASK_011, new Ce(H.DATA_MASK_011, (t, e) => (t + e) % 3 == 0)],\r\n                            [H.DATA_MASK_100, new Ce(H.DATA_MASK_100, (t, e) => 0 == (Math.floor(t / 2) + Math.floor(e / 3) & 1))],\r\n                            [H.DATA_MASK_101, new Ce(H.DATA_MASK_101, (t, e) => t * e % 6 == 0)],\r\n                            [H.DATA_MASK_110, new Ce(H.DATA_MASK_110, (t, e) => t * e % 6 < 3)],\r\n                            [H.DATA_MASK_111, new Ce(H.DATA_MASK_111, (t, e) => 0 == (t + e + t * e % 3 & 1))]\r\n                        ]);\r\n    class Ee {\r\n        constructor(t) {\r\n            const e = t.getHeight();\r\n            if (e < 21 || 1 != (3 & e)) throw new E;\r\n            this.bitMatrix = t\r\n        }\r\n        readFormatInformation() {\r\n            if (null !== this.parsedFormatInfo && void 0 !== this.parsedFormatInfo) return this.parsedFormatInfo;\r\n            let t = 0;\r\n            for (let e = 0; e < 6; e++) t = this.copyBit(e, 8, t);\r\n            t = this.copyBit(7, 8, t), t = this.copyBit(8, 8, t), t = this.copyBit(8, 7, t);\r\n            for (let e = 5; e >= 0; e--) t = this.copyBit(8, e, t);\r\n            const e = this.bitMatrix.getHeight();\r\n            let r = 0;\r\n            const n = e - 7;\r\n            for (let t = e - 1; t >= n; t--) r = this.copyBit(8, t, r);\r\n            for (let t = e - 8; t < e; t++) r = this.copyBit(t, 8, r);\r\n            if (this.parsedFormatInfo = ge.decodeFormatInformation(t, r), null !== this.parsedFormatInfo) return this.parsedFormatInfo;\r\n            throw new E\r\n        }\r\n        readVersion() {\r\n            if (null !== this.parsedVersion && void 0 !== this.parsedVersion) return this.parsedVersion;\r\n            const t = this.bitMatrix.getHeight(),\r\n                    e = Math.floor((t - 17) / 4);\r\n            if (e <= 6) return Ae.getVersionForNumber(e);\r\n            let r = 0;\r\n            const n = t - 11;\r\n            for (let e = 5; e >= 0; e--)\r\n                for (let i = t - 9; i >= n; i--) r = this.copyBit(i, e, r);\r\n            let i = Ae.decodeVersionInformation(r);\r\n            if (null !== i && i.getDimensionForVersion() === t) return this.parsedVersion = i, i;\r\n            r = 0;\r\n            for (let e = 5; e >= 0; e--)\r\n                for (let i = t - 9; i >= n; i--) r = this.copyBit(e, i, r);\r\n            if (null !== (i = Ae.decodeVersionInformation(r)) && i.getDimensionForVersion() === t) return this.parsedVersion = i, i;\r\n            throw new E\r\n        }\r\n        copyBit(t, e, r) {\r\n            return (this.isMirror ? this.bitMatrix.get(e, t) : this.bitMatrix.get(t, e)) ? r << 1 | 1 : r << 1\r\n        }\r\n        readCodewords() {\r\n            const t = this.readFormatInformation(),\r\n                    e = this.readVersion(),\r\n                    r = Ce.values.get(t.getDataMask()),\r\n                    n = this.bitMatrix.getHeight();\r\n            r.unmaskBitMatrix(this.bitMatrix, n);\r\n            const i = e.buildFunctionPattern();\r\n            let s = !0;\r\n            const o = new Uint8Array(e.getTotalCodewords());\r\n            let a = 0,\r\n                    l = 0,\r\n                    h = 0;\r\n            for (let t = n - 1; t > 0; t -= 2) {\r\n                6 === t && t--;\r\n                for (let e = 0; e < n; e++) {\r\n                    const r = s ? n - 1 - e : e;\r\n                    for (let e = 0; e < 2; e++) i.get(t - e, r) || (h++, l <<= 1, this.bitMatrix.get(t - e, r) && (l |= 1), 8 === h && (o[a++] = l, h = 0, l = 0))\r\n                }\r\n                s = !s\r\n            }\r\n            if (a !== e.getTotalCodewords()) throw new E;\r\n            return o\r\n        }\r\n        remask() {\r\n            if (null === this.parsedFormatInfo) return;\r\n            const t = Ce.values[this.parsedFormatInfo.getDataMask()],\r\n                    e = this.bitMatrix.getHeight();\r\n            t.unmaskBitMatrix(this.bitMatrix, e)\r\n        }\r\n        setMirror(t) {\r\n            this.parsedVersion = null, this.parsedFormatInfo = null, this.isMirror = t\r\n        }\r\n        mirror() {\r\n            const t = this.bitMatrix;\r\n            for (let e = 0, r = t.getWidth(); e < r; e++)\r\n                for (let r = e + 1, n = t.getHeight(); r < n; r++) t.get(e, r) !== t.get(r, e) && (t.flip(r, e), t.flip(e, r))\r\n        }\r\n    }\r\n    class me {\r\n        constructor(t, e) {\r\n            this.numDataCodewords = t, this.codewords = e\r\n        }\r\n        static getDataBlocks(t, e, r) {\r\n            if (t.length !== e.getTotalCodewords()) throw new o;\r\n            const n = e.getECBlocksForLevel(r);\r\n            let i = 0;\r\n            const s = n.getECBlocks();\r\n            for (const t of s) i += t.getCount();\r\n            const a = new Array(i);\r\n            let l = 0;\r\n            for (const t of s)\r\n                for (let e = 0; e < t.getCount(); e++) {\r\n                    const e = t.getDataCodewords(),\r\n                            r = n.getECCodewordsPerBlock() + e;\r\n                    a[l++] = new me(e, new Uint8Array(r))\r\n                }\r\n            const h = a[0].codewords.length;\r\n            let c = a.length - 1;\r\n            for (; c >= 0;) {\r\n                if (a[c].codewords.length === h) break;\r\n                c--\r\n            }\r\n            c++;\r\n            const u = h - n.getECCodewordsPerBlock();\r\n            let d = 0;\r\n            for (let e = 0; e < u; e++)\r\n                for (let r = 0; r < l; r++) a[r].codewords[e] = t[d++];\r\n            for (let e = c; e < l; e++) a[e].codewords[u] = t[d++];\r\n            const g = a[0].codewords.length;\r\n            for (let e = u; e < g; e++)\r\n                for (let r = 0; r < l; r++) {\r\n                    const n = r < c ? e : e + 1;\r\n                    a[r].codewords[n] = t[d++]\r\n                }\r\n            return a\r\n        }\r\n        getNumDataCodewords() {\r\n            return this.numDataCodewords\r\n        }\r\n        getCodewords() {\r\n            return this.codewords\r\n        }\r\n    }! function(t) {\r\n        t[t.TERMINATOR = 0] = \"TERMINATOR\", t[t.NUMERIC = 1] = \"NUMERIC\", t[t.ALPHANUMERIC = 2] = \"ALPHANUMERIC\", t[t.STRUCTURED_APPEND = 3] = \"STRUCTURED_APPEND\", t[t.BYTE = 4] = \"BYTE\", t[t.ECI = 5] = \"ECI\", t[t.KANJI = 6] = \"KANJI\", t[t.FNC1_FIRST_POSITION = 7] = \"FNC1_FIRST_POSITION\", t[t.FNC1_SECOND_POSITION = 8] = \"FNC1_SECOND_POSITION\", t[t.HANZI = 9] = \"HANZI\"\r\n    }(G || (G = {}));\r\n    class _e {\r\n        constructor(t, e, r, n) {\r\n            this.value = t, this.stringValue = e, this.characterCountBitsForVersions = r, this.bits = n, _e.FOR_BITS.set(n, this), _e.FOR_VALUE.set(t, this)\r\n        }\r\n        static forBits(t) {\r\n            const e = _e.FOR_BITS.get(t);\r\n            if (void 0 === e) throw new o;\r\n            return e\r\n        }\r\n        getCharacterCountBits(t) {\r\n            const e = t.getVersionNumber();\r\n            let r;\r\n            return r = e <= 9 ? 0 : e <= 26 ? 1 : 2, this.characterCountBitsForVersions[r]\r\n        }\r\n        getValue() {\r\n            return this.value\r\n        }\r\n        getBits() {\r\n            return this.bits\r\n        }\r\n        equals(t) {\r\n            if (!(t instanceof _e)) return !1;\r\n            const e = t;\r\n            return this.value === e.value\r\n        }\r\n        toString() {\r\n            return this.stringValue\r\n        }\r\n    }\r\n    _e.FOR_BITS = new Map, _e.FOR_VALUE = new Map, _e.TERMINATOR = new _e(G.TERMINATOR, \"TERMINATOR\", Int32Array.from([0, 0, 0]), 0), _e.NUMERIC = new _e(G.NUMERIC, \"NUMERIC\", Int32Array.from([10, 12, 14]), 1), _e.ALPHANUMERIC = new _e(G.ALPHANUMERIC, \"ALPHANUMERIC\", Int32Array.from([9, 11, 13]), 2), _e.STRUCTURED_APPEND = new _e(G.STRUCTURED_APPEND, \"STRUCTURED_APPEND\", Int32Array.from([0, 0, 0]), 3), _e.BYTE = new _e(G.BYTE, \"BYTE\", Int32Array.from([8, 16, 16]), 4), _e.ECI = new _e(G.ECI, \"ECI\", Int32Array.from([0, 0, 0]), 7), _e.KANJI = new _e(G.KANJI, \"KANJI\", Int32Array.from([8, 10, 12]), 8), _e.FNC1_FIRST_POSITION = new _e(G.FNC1_FIRST_POSITION, \"FNC1_FIRST_POSITION\", Int32Array.from([0, 0, 0]), 5), _e.FNC1_SECOND_POSITION = new _e(G.FNC1_SECOND_POSITION, \"FNC1_SECOND_POSITION\", Int32Array.from([0, 0, 0]), 9), _e.HANZI = new _e(G.HANZI, \"HANZI\", Int32Array.from([8, 10, 12]), 13);\r\n    class Ie {\r\n        static decode(t, e, r, n) {\r\n            const i = new ae(t);\r\n            let s = new p;\r\n            const o = new Array;\r\n            let a = -1,\r\n                    l = -1;\r\n            try {\r\n                let t, r = null,\r\n                        h = !1;\r\n                do {\r\n                    if (i.available() < 4) t = _e.TERMINATOR;\r\n                    else {\r\n                        const e = i.readBits(4);\r\n                        t = _e.forBits(e)\r\n                    }\r\n                    switch (t) {\r\n                        case _e.TERMINATOR:\r\n                            break;\r\n                        case _e.FNC1_FIRST_POSITION:\r\n                        case _e.FNC1_SECOND_POSITION:\r\n                            h = !0;\r\n                            break;\r\n                        case _e.STRUCTURED_APPEND:\r\n                            if (i.available() < 16) throw new E;\r\n                            a = i.readBits(8), l = i.readBits(8);\r\n                            break;\r\n                        case _e.ECI:\r\n                            const c = Ie.parseECIValue(i);\r\n                            if (null === (r = m.getCharacterSetECIByValue(c))) throw new E;\r\n                            break;\r\n                        case _e.HANZI:\r\n                            const u = i.readBits(4),\r\n                                    d = i.readBits(t.getCharacterCountBits(e));\r\n                            u === Ie.GB2312_SUBSET && Ie.decodeHanziSegment(i, s, d);\r\n                            break;\r\n                        default:\r\n                            const g = i.readBits(t.getCharacterCountBits(e));\r\n                            switch (t) {\r\n                                case _e.NUMERIC:\r\n                                    Ie.decodeNumericSegment(i, s, g);\r\n                                    break;\r\n                                case _e.ALPHANUMERIC:\r\n                                    Ie.decodeAlphanumericSegment(i, s, g, h);\r\n                                    break;\r\n                                case _e.BYTE:\r\n                                    Ie.decodeByteSegment(i, s, g, r, o, n);\r\n                                    break;\r\n                                case _e.KANJI:\r\n                                    Ie.decodeKanjiSegment(i, s, g);\r\n                                    break;\r\n                                default:\r\n                                    throw new E\r\n                            }\r\n                    }\r\n                } while (t !== _e.TERMINATOR)\r\n            } catch (t) {\r\n                throw new E\r\n            }\r\n            return new z(t, s.toString(), 0 === o.length ? null : o, null === r ? null : r.toString(), a, l)\r\n        }\r\n        static decodeHanziSegment(t, e, r) {\r\n            if (13 * r > t.available()) throw new E;\r\n            const n = new Uint8Array(2 * r);\r\n            let i = 0;\r\n            for (; r > 0;) {\r\n                const e = t.readBits(13);\r\n                let s = e / 96 << 8 & 4294967295 | e % 96;\r\n                s += s < 959 ? 41377 : 42657, n[i] = s >> 8 & 255, n[i + 1] = 255 & s, i += 2, r--\r\n            }\r\n            try {\r\n                e.append(I.decode(n, S.GB2312))\r\n            } catch (t) {\r\n                throw new E(t)\r\n            }\r\n        }\r\n        static decodeKanjiSegment(t, e, r) {\r\n            if (13 * r > t.available()) throw new E;\r\n            const n = new Uint8Array(2 * r);\r\n            let i = 0;\r\n            for (; r > 0;) {\r\n                const e = t.readBits(13);\r\n                let s = e / 192 << 8 & 4294967295 | e % 192;\r\n                s += s < 7936 ? 33088 : 49472, n[i] = s >> 8, n[i + 1] = s, i += 2, r--\r\n            }\r\n            try {\r\n                e.append(I.decode(n, S.SHIFT_JIS))\r\n            } catch (t) {\r\n                throw new E(t)\r\n            }\r\n        }\r\n        static decodeByteSegment(t, e, r, n, i, s) {\r\n            if (8 * r > t.available()) throw new E;\r\n            const o = new Uint8Array(r);\r\n            for (let e = 0; e < r; e++) o[e] = t.readBits(8);\r\n            let a;\r\n            a = null === n ? S.guessEncoding(o, s) : n.getName();\r\n            try {\r\n                e.append(I.decode(o, a))\r\n            } catch (t) {\r\n                throw new E(t)\r\n            }\r\n            i.push(o)\r\n        }\r\n        static toAlphaNumericChar(t) {\r\n            if (t >= Ie.ALPHANUMERIC_CHARS.length) throw new E;\r\n            return Ie.ALPHANUMERIC_CHARS[t]\r\n        }\r\n        static decodeAlphanumericSegment(t, e, r, n) {\r\n            const i = e.length();\r\n            for (; r > 1;) {\r\n                if (t.available() < 11) throw new E;\r\n                const n = t.readBits(11);\r\n                e.append(Ie.toAlphaNumericChar(Math.floor(n / 45))), e.append(Ie.toAlphaNumericChar(n % 45)), r -= 2\r\n            }\r\n            if (1 === r) {\r\n                if (t.available() < 6) throw new E;\r\n                e.append(Ie.toAlphaNumericChar(t.readBits(6)))\r\n            }\r\n            if (n)\r\n                for (let t = i; t < e.length(); t++) \"%\" === e.charAt(t) && (t < e.length() - 1 && \"%\" === e.charAt(t + 1) ? e.deleteCharAt(t + 1) : e.setCharAt(t, String.fromCharCode(29)))\r\n        }\r\n        static decodeNumericSegment(t, e, r) {\r\n            for (; r >= 3;) {\r\n                if (t.available() < 10) throw new E;\r\n                const n = t.readBits(10);\r\n                if (n >= 1e3) throw new E;\r\n                e.append(Ie.toAlphaNumericChar(Math.floor(n / 100))), e.append(Ie.toAlphaNumericChar(Math.floor(n / 10) % 10)), e.append(Ie.toAlphaNumericChar(n % 10)), r -= 3\r\n            }\r\n            if (2 === r) {\r\n                if (t.available() < 7) throw new E;\r\n                const r = t.readBits(7);\r\n                if (r >= 100) throw new E;\r\n                e.append(Ie.toAlphaNumericChar(Math.floor(r / 10))), e.append(Ie.toAlphaNumericChar(r % 10))\r\n            } else if (1 === r) {\r\n                if (t.available() < 4) throw new E;\r\n                const r = t.readBits(4);\r\n                if (r >= 10) throw new E;\r\n                e.append(Ie.toAlphaNumericChar(r))\r\n            }\r\n        }\r\n        static parseECIValue(t) {\r\n            const e = t.readBits(8);\r\n            if (0 == (128 & e)) return 127 & e;\r\n            if (128 == (192 & e)) {\r\n                return (63 & e) << 8 & 4294967295 | t.readBits(8)\r\n            }\r\n            if (192 == (224 & e)) {\r\n                return (31 & e) << 16 & 4294967295 | t.readBits(16)\r\n            }\r\n            throw new E\r\n        }\r\n    }\r\n    Ie.ALPHANUMERIC_CHARS = \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:\", Ie.GB2312_SUBSET = 1;\r\n    class Se {\r\n        constructor(t) {\r\n            this.mirrored = t\r\n        }\r\n        isMirrored() {\r\n            return this.mirrored\r\n        }\r\n        applyMirroredCorrection(t) {\r\n            if (!this.mirrored || null === t || t.length < 3) return;\r\n            const e = t[0];\r\n            t[0] = t[2], t[2] = e\r\n        }\r\n    }\r\n    class pe {\r\n        constructor() {\r\n            this.rsDecoder = new J(q.QR_CODE_FIELD_256)\r\n        }\r\n        decodeBooleanArray(t, e) {\r\n            return this.decodeBitMatrix(T.parseFromBooleanArray(t), e)\r\n        }\r\n        decodeBitMatrix(t, e) {\r\n            const r = new Ee(t);\r\n            let n = null;\r\n            try {\r\n                return this.decodeBitMatrixParser(r, e)\r\n            } catch (t) {\r\n                n = t\r\n            }\r\n            try {\r\n                r.remask(), r.setMirror(!0), r.readVersion(), r.readFormatInformation(), r.mirror();\r\n                const t = this.decodeBitMatrixParser(r, e);\r\n                return t.setOther(new Se(!0)), t\r\n            } catch (t) {\r\n                if (null !== n) throw n;\r\n                throw t\r\n            }\r\n        }\r\n        decodeBitMatrixParser(t, e) {\r\n            const r = t.readVersion(),\r\n                    n = t.readFormatInformation().getErrorCorrectionLevel(),\r\n                    i = t.readCodewords(),\r\n                    s = me.getDataBlocks(i, r, n);\r\n            let o = 0;\r\n            for (const t of s) o += t.getNumDataCodewords();\r\n            const a = new Uint8Array(o);\r\n            let l = 0;\r\n            for (const t of s) {\r\n                const e = t.getCodewords(),\r\n                        r = t.getNumDataCodewords();\r\n                this.correctErrors(e, r);\r\n                for (let t = 0; t < r; t++) a[l++] = e[t]\r\n            }\r\n            return Ie.decode(a, r, n, e)\r\n        }\r\n        correctErrors(t, e) {\r\n            const r = new Int32Array(t);\r\n            try {\r\n                this.rsDecoder.decode(r, t.length - e)\r\n            } catch (t) {\r\n                throw new l\r\n            }\r\n            for (let n = 0; n < e; n++) t[n] = r[n]\r\n        }\r\n    }\r\n    class Te extends rt {\r\n        constructor(t, e, r) {\r\n            super(t, e), this.estimatedModuleSize = r\r\n        }\r\n        aboutEquals(t, e, r) {\r\n            if (Math.abs(e - this.getY()) <= t && Math.abs(r - this.getX()) <= t) {\r\n                const e = Math.abs(t - this.estimatedModuleSize);\r\n                return e <= 1 || e <= this.estimatedModuleSize\r\n            }\r\n            return !1\r\n        }\r\n        combineEstimate(t, e, r) {\r\n            const n = (this.getX() + e) / 2,\r\n                    i = (this.getY() + t) / 2,\r\n                    s = (this.estimatedModuleSize + r) / 2;\r\n            return new Te(n, i, s)\r\n        }\r\n    }\r\n    class Re {\r\n        constructor(t, e, r, n, i, s, o) {\r\n            this.image = t, this.startX = e, this.startY = r, this.width = n, this.height = i, this.moduleSize = s, this.resultPointCallback = o, this.possibleCenters = [], this.crossCheckStateCount = new Int32Array(3)\r\n        }\r\n        find() {\r\n            const t = this.startX,\r\n                    e = this.height,\r\n                    r = t + this.width,\r\n                    n = this.startY + e / 2,\r\n                    i = new Int32Array(3),\r\n                    s = this.image;\r\n            for (let o = 0; o < e; o++) {\r\n                const e = n + (0 == (1 & o) ? Math.floor((o + 1) / 2) : -Math.floor((o + 1) / 2));\r\n                i[0] = 0, i[1] = 0, i[2] = 0;\r\n                let a = t;\r\n                for (; a < r && !s.get(a, e);) a++;\r\n                let l = 0;\r\n                for (; a < r;) {\r\n                    if (s.get(a, e))\r\n                        if (1 === l) i[1]++;\r\n                        else if (2 === l) {\r\n                            if (this.foundPatternCross(i)) {\r\n                                const t = this.handlePossibleCenter(i, e, a);\r\n                                if (null !== t) return t\r\n                            }\r\n                            i[0] = i[2], i[1] = 1, i[2] = 0, l = 1\r\n                        } else i[++l]++;\r\n                    else 1 === l && l++, i[l]++;\r\n                    a++\r\n                }\r\n                if (this.foundPatternCross(i)) {\r\n                    const t = this.handlePossibleCenter(i, e, r);\r\n                    if (null !== t) return t\r\n                }\r\n            }\r\n            if (0 !== this.possibleCenters.length) return this.possibleCenters[0];\r\n            throw new R\r\n        }\r\n        static centerFromEnd(t, e) {\r\n            return e - t[2] - t[1] / 2\r\n        }\r\n        foundPatternCross(t) {\r\n            const e = this.moduleSize,\r\n                    r = e / 2;\r\n            for (let n = 0; n < 3; n++)\r\n                if (Math.abs(e - t[n]) >= r) return !1;\r\n            return !0\r\n        }\r\n        crossCheckVertical(t, e, r, n) {\r\n            const i = this.image,\r\n                    s = i.getHeight(),\r\n                    o = this.crossCheckStateCount;\r\n            o[0] = 0, o[1] = 0, o[2] = 0;\r\n            let a = t;\r\n            for (; a >= 0 && i.get(e, a) && o[1] <= r;) o[1]++, a--;\r\n            if (a < 0 || o[1] > r) return NaN;\r\n            for (; a >= 0 && !i.get(e, a) && o[0] <= r;) o[0]++, a--;\r\n            if (o[0] > r) return NaN;\r\n            for (a = t + 1; a < s && i.get(e, a) && o[1] <= r;) o[1]++, a++;\r\n            if (a === s || o[1] > r) return NaN;\r\n            for (; a < s && !i.get(e, a) && o[2] <= r;) o[2]++, a++;\r\n            if (o[2] > r) return NaN;\r\n            const l = o[0] + o[1] + o[2];\r\n            return 5 * Math.abs(l - n) >= 2 * n ? NaN : this.foundPatternCross(o) ? Re.centerFromEnd(o, a) : NaN\r\n        }\r\n        handlePossibleCenter(t, e, r) {\r\n            const n = t[0] + t[1] + t[2],\r\n                    i = Re.centerFromEnd(t, r),\r\n                    s = this.crossCheckVertical(e, i, 2 * t[1], n);\r\n            if (!isNaN(s)) {\r\n                const e = (t[0] + t[1] + t[2]) / 3;\r\n                for (const t of this.possibleCenters)\r\n                    if (t.aboutEquals(e, s, i)) return t.combineEstimate(s, i, e);\r\n                const r = new Te(i, s, e);\r\n                this.possibleCenters.push(r), null !== this.resultPointCallback && void 0 !== this.resultPointCallback && this.resultPointCallback.foundPossibleResultPoint(r)\r\n            }\r\n            return null\r\n        }\r\n    }\r\n    class Ne extends rt {\r\n        constructor(t, e, r, n) {\r\n            super(t, e), this.estimatedModuleSize = r, this.count = n, void 0 === n && (this.count = 1)\r\n        }\r\n        getEstimatedModuleSize() {\r\n            return this.estimatedModuleSize\r\n        }\r\n        getCount() {\r\n            return this.count\r\n        }\r\n        aboutEquals(t, e, r) {\r\n            if (Math.abs(e - this.getY()) <= t && Math.abs(r - this.getX()) <= t) {\r\n                const e = Math.abs(t - this.estimatedModuleSize);\r\n                return e <= 1 || e <= this.estimatedModuleSize\r\n            }\r\n            return !1\r\n        }\r\n        combineEstimate(t, e, r) {\r\n            const n = this.count + 1,\r\n                    i = (this.count * this.getX() + e) / n,\r\n                    s = (this.count * this.getY() + t) / n,\r\n                    o = (this.count * this.estimatedModuleSize + r) / n;\r\n            return new Ne(i, s, o, n)\r\n        }\r\n    }\r\n    class De {\r\n        constructor(t) {\r\n            this.bottomLeft = t[0], this.topLeft = t[1], this.topRight = t[2]\r\n        }\r\n        getBottomLeft() {\r\n            return this.bottomLeft\r\n        }\r\n        getTopLeft() {\r\n            return this.topLeft\r\n        }\r\n        getTopRight() {\r\n            return this.topRight\r\n        }\r\n    }\r\n    class ye {\r\n        constructor(t, e) {\r\n            this.image = t, this.resultPointCallback = e, this.possibleCenters = [], this.crossCheckStateCount = new Int32Array(5), this.resultPointCallback = e\r\n        }\r\n        getImage() {\r\n            return this.image\r\n        }\r\n        getPossibleCenters() {\r\n            return this.possibleCenters\r\n        }\r\n        find(t) {\r\n            const e = null != t && void 0 !== t.get(C.TRY_HARDER),\r\n                    r = null != t && void 0 !== t.get(C.PURE_BARCODE),\r\n                    n = this.image,\r\n                    i = n.getHeight(),\r\n                    s = n.getWidth();\r\n            let o = Math.floor(3 * i / (4 * ye.MAX_MODULES));\r\n            (o < ye.MIN_SKIP || e) && (o = ye.MIN_SKIP);\r\n            let a = !1;\r\n            const l = new Int32Array(5);\r\n            for (let t = o - 1; t < i && !a; t += o) {\r\n                l[0] = 0, l[1] = 0, l[2] = 0, l[3] = 0, l[4] = 0;\r\n                let e = 0;\r\n                for (let i = 0; i < s; i++)\r\n                    if (n.get(i, t)) 1 == (1 & e) && e++, l[e]++;\r\n                    else if (0 == (1 & e))\r\n                        if (4 === e)\r\n                            if (ye.foundPatternCross(l)) {\r\n                                if (!0 !== this.handlePossibleCenter(l, t, i, r)) {\r\n                                    l[0] = l[2], l[1] = l[3], l[2] = l[4], l[3] = 1, l[4] = 0, e = 3;\r\n                                    continue\r\n                                }\r\n                                if (o = 2, !0 === this.hasSkipped) a = this.haveMultiplyConfirmedCenters();\r\n                                else {\r\n                                    const e = this.findRowSkip();\r\n                                    e > l[2] && (t += e - l[2] - o, i = s - 1)\r\n                                }\r\n                                e = 0, l[0] = 0, l[1] = 0, l[2] = 0, l[3] = 0, l[4] = 0\r\n                            } else l[0] = l[2], l[1] = l[3], l[2] = l[4], l[3] = 1, l[4] = 0, e = 3;\r\n                        else l[++e]++;\r\n                    else l[e]++;\r\n                if (ye.foundPatternCross(l)) {\r\n                    !0 === this.handlePossibleCenter(l, t, s, r) && (o = l[0], this.hasSkipped && (a = this.haveMultiplyConfirmedCenters()))\r\n                }\r\n            }\r\n            const h = this.selectBestPatterns();\r\n            return rt.orderBestPatterns(h), new De(h)\r\n        }\r\n        static centerFromEnd(t, e) {\r\n            return e - t[4] - t[3] - t[2] / 2\r\n        }\r\n        static foundPatternCross(t) {\r\n            let e = 0;\r\n            for (let r = 0; r < 5; r++) {\r\n                const n = t[r];\r\n                if (0 === n) return !1;\r\n                e += n\r\n            }\r\n            if (e < 7) return !1;\r\n            const r = e / 7,\r\n                    n = r / 2;\r\n            return Math.abs(r - t[0]) < n && Math.abs(r - t[1]) < n && Math.abs(3 * r - t[2]) < 3 * n && Math.abs(r - t[3]) < n && Math.abs(r - t[4]) < n\r\n        }\r\n        getCrossCheckStateCount() {\r\n            const t = this.crossCheckStateCount;\r\n            return t[0] = 0, t[1] = 0, t[2] = 0, t[3] = 0, t[4] = 0, t\r\n        }\r\n        crossCheckDiagonal(t, e, r, n) {\r\n            const i = this.getCrossCheckStateCount();\r\n            let s = 0;\r\n            const o = this.image;\r\n            for (; t >= s && e >= s && o.get(e - s, t - s);) i[2]++, s++;\r\n            if (t < s || e < s) return !1;\r\n            for (; t >= s && e >= s && !o.get(e - s, t - s) && i[1] <= r;) i[1]++, s++;\r\n            if (t < s || e < s || i[1] > r) return !1;\r\n            for (; t >= s && e >= s && o.get(e - s, t - s) && i[0] <= r;) i[0]++, s++;\r\n            if (i[0] > r) return !1;\r\n            const a = o.getHeight(),\r\n                    l = o.getWidth();\r\n            for (s = 1; t + s < a && e + s < l && o.get(e + s, t + s);) i[2]++, s++;\r\n            if (t + s >= a || e + s >= l) return !1;\r\n            for (; t + s < a && e + s < l && !o.get(e + s, t + s) && i[3] < r;) i[3]++, s++;\r\n            if (t + s >= a || e + s >= l || i[3] >= r) return !1;\r\n            for (; t + s < a && e + s < l && o.get(e + s, t + s) && i[4] < r;) i[4]++, s++;\r\n            if (i[4] >= r) return !1;\r\n            const h = i[0] + i[1] + i[2] + i[3] + i[4];\r\n            return Math.abs(h - n) < 2 * n && ye.foundPatternCross(i)\r\n        }\r\n        crossCheckVertical(t, e, r, n) {\r\n            const i = this.image,\r\n                    s = i.getHeight(),\r\n                    o = this.getCrossCheckStateCount();\r\n            let a = t;\r\n            for (; a >= 0 && i.get(e, a);) o[2]++, a--;\r\n            if (a < 0) return NaN;\r\n            for (; a >= 0 && !i.get(e, a) && o[1] <= r;) o[1]++, a--;\r\n            if (a < 0 || o[1] > r) return NaN;\r\n            for (; a >= 0 && i.get(e, a) && o[0] <= r;) o[0]++, a--;\r\n            if (o[0] > r) return NaN;\r\n            for (a = t + 1; a < s && i.get(e, a);) o[2]++, a++;\r\n            if (a === s) return NaN;\r\n            for (; a < s && !i.get(e, a) && o[3] < r;) o[3]++, a++;\r\n            if (a === s || o[3] >= r) return NaN;\r\n            for (; a < s && i.get(e, a) && o[4] < r;) o[4]++, a++;\r\n            if (o[4] >= r) return NaN;\r\n            const l = o[0] + o[1] + o[2] + o[3] + o[4];\r\n            return 5 * Math.abs(l - n) >= 2 * n ? NaN : ye.foundPatternCross(o) ? ye.centerFromEnd(o, a) : NaN\r\n        }\r\n        crossCheckHorizontal(t, e, r, n) {\r\n            const i = this.image,\r\n                    s = i.getWidth(),\r\n                    o = this.getCrossCheckStateCount();\r\n            let a = t;\r\n            for (; a >= 0 && i.get(a, e);) o[2]++, a--;\r\n            if (a < 0) return NaN;\r\n            for (; a >= 0 && !i.get(a, e) && o[1] <= r;) o[1]++, a--;\r\n            if (a < 0 || o[1] > r) return NaN;\r\n            for (; a >= 0 && i.get(a, e) && o[0] <= r;) o[0]++, a--;\r\n            if (o[0] > r) return NaN;\r\n            for (a = t + 1; a < s && i.get(a, e);) o[2]++, a++;\r\n            if (a === s) return NaN;\r\n            for (; a < s && !i.get(a, e) && o[3] < r;) o[3]++, a++;\r\n            if (a === s || o[3] >= r) return NaN;\r\n            for (; a < s && i.get(a, e) && o[4] < r;) o[4]++, a++;\r\n            if (o[4] >= r) return NaN;\r\n            const l = o[0] + o[1] + o[2] + o[3] + o[4];\r\n            return 5 * Math.abs(l - n) >= n ? NaN : ye.foundPatternCross(o) ? ye.centerFromEnd(o, a) : NaN\r\n        }\r\n        handlePossibleCenter(t, e, r, n) {\r\n            const i = t[0] + t[1] + t[2] + t[3] + t[4];\r\n            let s = ye.centerFromEnd(t, r),\r\n                    o = this.crossCheckVertical(e, Math.floor(s), t[2], i);\r\n            if (!isNaN(o) && (s = this.crossCheckHorizontal(Math.floor(s), Math.floor(o), t[2], i), !isNaN(s) && (!n || this.crossCheckDiagonal(Math.floor(o), Math.floor(s), t[2], i)))) {\r\n                const t = i / 7;\r\n                let e = !1;\r\n                const r = this.possibleCenters;\r\n                for (let n = 0, i = r.length; n < i; n++) {\r\n                    const i = r[n];\r\n                    if (i.aboutEquals(t, o, s)) {\r\n                        r[n] = i.combineEstimate(o, s, t), e = !0;\r\n                        break\r\n                    }\r\n                }\r\n                if (!e) {\r\n                    const e = new Ne(s, o, t);\r\n                    r.push(e), null !== this.resultPointCallback && void 0 !== this.resultPointCallback && this.resultPointCallback.foundPossibleResultPoint(e)\r\n                }\r\n                return !0\r\n            }\r\n            return !1\r\n        }\r\n        findRowSkip() {\r\n            if (this.possibleCenters.length <= 1) return 0;\r\n            let t = null;\r\n            for (const e of this.possibleCenters)\r\n                if (e.getCount() >= ye.CENTER_QUORUM) {\r\n                    if (null != t) return this.hasSkipped = !0, Math.floor((Math.abs(t.getX() - e.getX()) - Math.abs(t.getY() - e.getY())) / 2);\r\n                    t = e\r\n                } return 0\r\n        }\r\n        haveMultiplyConfirmedCenters() {\r\n            let t = 0,\r\n                    e = 0;\r\n            const r = this.possibleCenters.length;\r\n            for (const r of this.possibleCenters) r.getCount() >= ye.CENTER_QUORUM && (t++, e += r.getEstimatedModuleSize());\r\n            if (t < 3) return !1;\r\n            const n = e / r;\r\n            let i = 0;\r\n            for (const t of this.possibleCenters) i += Math.abs(t.getEstimatedModuleSize() - n);\r\n            return i <= .05 * e\r\n        }\r\n        selectBestPatterns() {\r\n            const t = this.possibleCenters.length;\r\n            if (t < 3) throw new R;\r\n            const e = this.possibleCenters;\r\n            let r;\r\n            if (t > 3) {\r\n                let n = 0,\r\n                        i = 0;\r\n                for (const t of this.possibleCenters) {\r\n                    const e = t.getEstimatedModuleSize();\r\n                    n += e, i += e * e\r\n                }\r\n                r = n / t;\r\n                let s = Math.sqrt(i / t - r * r);\r\n                e.sort((t, e) => {\r\n                    const n = Math.abs(e.getEstimatedModuleSize() - r),\r\n                            i = Math.abs(t.getEstimatedModuleSize() - r);\r\n                    return n < i ? -1 : n > i ? 1 : 0\r\n                });\r\n                const o = Math.max(.2 * r, s);\r\n                for (let t = 0; t < e.length && e.length > 3; t++) {\r\n                    const n = e[t];\r\n                    Math.abs(n.getEstimatedModuleSize() - r) > o && (e.splice(t, 1), t--)\r\n                }\r\n            }\r\n            if (e.length > 3) {\r\n                let t = 0;\r\n                for (const r of e) t += r.getEstimatedModuleSize();\r\n                r = t / e.length, e.sort((t, e) => {\r\n                    if (e.getCount() === t.getCount()) {\r\n                        const n = Math.abs(e.getEstimatedModuleSize() - r),\r\n                                i = Math.abs(t.getEstimatedModuleSize() - r);\r\n                        return n < i ? 1 : n > i ? -1 : 0\r\n                    }\r\n                    return e.getCount() - t.getCount()\r\n                }), e.splice(3)\r\n            }\r\n            return [e[0], e[1], e[2]]\r\n        }\r\n    }\r\n    ye.CENTER_QUORUM = 2, ye.MIN_SKIP = 3, ye.MAX_MODULES = 57;\r\n    class Oe {\r\n        constructor(t) {\r\n            this.image = t\r\n        }\r\n        getImage() {\r\n            return this.image\r\n        }\r\n        getResultPointCallback() {\r\n            return this.resultPointCallback\r\n        }\r\n        detect(t) {\r\n            this.resultPointCallback = null == t ? null : t.get(C.NEED_RESULT_POINT_CALLBACK);\r\n            const e = new ye(this.image, this.resultPointCallback).find(t);\r\n            return this.processFinderPatternInfo(e)\r\n        }\r\n        processFinderPatternInfo(t) {\r\n            const e = t.getTopLeft(),\r\n                    r = t.getTopRight(),\r\n                    n = t.getBottomLeft(),\r\n                    i = this.calculateModuleSize(e, r, n);\r\n            if (i < 1) throw new R(\"No pattern found in proccess finder.\");\r\n            const s = Oe.computeDimension(e, r, n, i),\r\n                    o = Ae.getProvisionalVersionForDimension(s),\r\n                    a = o.getDimensionForVersion() - 7;\r\n            let l = null;\r\n            if (o.getAlignmentPatternCenters().length > 0) {\r\n                const t = r.getX() - e.getX() + n.getX(),\r\n                        s = r.getY() - e.getY() + n.getY(),\r\n                        o = 1 - 3 / a,\r\n                        h = Math.floor(e.getX() + o * (t - e.getX())),\r\n                        c = Math.floor(e.getY() + o * (s - e.getY()));\r\n                for (let t = 4; t <= 16; t <<= 1) try {\r\n                    l = this.findAlignmentInRegion(i, h, c, t);\r\n                    break\r\n                } catch (t) {\r\n                    if (!(t instanceof R)) throw t\r\n                }\r\n            }\r\n            const h = Oe.createTransform(e, r, n, l, s),\r\n                    c = Oe.sampleGrid(this.image, h, s);\r\n            let u;\r\n            return new nt(c, u = null === l ? [n, e, r] : [n, e, r, l])\r\n        }\r\n        static createTransform(t, e, r, n, i) {\r\n            const s = i - 3.5;\r\n            let o, a, l, h;\r\n            return null !== n ? (o = n.getX(), a = n.getY(), h = l = s - 3) : (o = e.getX() - t.getX() + r.getX(), a = e.getY() - t.getY() + r.getY(), l = s, h = s), at.quadrilateralToQuadrilateral(3.5, 3.5, s, 3.5, l, h, 3.5, s, t.getX(), t.getY(), e.getX(), e.getY(), o, a, r.getX(), r.getY())\r\n        }\r\n        static sampleGrid(t, e, r) {\r\n            return ht.getInstance().sampleGridWithTransform(t, r, r, e)\r\n        }\r\n        static computeDimension(t, e, r, n) {\r\n            const i = tt.round(rt.distance(t, e) / n),\r\n                    s = tt.round(rt.distance(t, r) / n);\r\n            let o = Math.floor((i + s) / 2) + 7;\r\n            switch (3 & o) {\r\n                case 0:\r\n                    o++;\r\n                    break;\r\n                case 2:\r\n                    o--;\r\n                    break;\r\n                case 3:\r\n                    throw new R(\"Dimensions could be not found.\")\r\n            }\r\n            return o\r\n        }\r\n        calculateModuleSize(t, e, r) {\r\n            return (this.calculateModuleSizeOneWay(t, e) + this.calculateModuleSizeOneWay(t, r)) / 2\r\n        }\r\n        calculateModuleSizeOneWay(t, e) {\r\n            const r = this.sizeOfBlackWhiteBlackRunBothWays(Math.floor(t.getX()), Math.floor(t.getY()), Math.floor(e.getX()), Math.floor(e.getY())),\r\n                    n = this.sizeOfBlackWhiteBlackRunBothWays(Math.floor(e.getX()), Math.floor(e.getY()), Math.floor(t.getX()), Math.floor(t.getY()));\r\n            return isNaN(r) ? n / 7 : isNaN(n) ? r / 7 : (r + n) / 14\r\n        }\r\n        sizeOfBlackWhiteBlackRunBothWays(t, e, r, n) {\r\n            let i = this.sizeOfBlackWhiteBlackRun(t, e, r, n),\r\n                    s = 1,\r\n                    o = t - (r - t);\r\n            o < 0 ? (s = t / (t - o), o = 0) : o >= this.image.getWidth() && (s = (this.image.getWidth() - 1 - t) / (o - t), o = this.image.getWidth() - 1);\r\n            let a = Math.floor(e - (n - e) * s);\r\n            return s = 1, a < 0 ? (s = e / (e - a), a = 0) : a >= this.image.getHeight() && (s = (this.image.getHeight() - 1 - e) / (a - e), a = this.image.getHeight() - 1), o = Math.floor(t + (o - t) * s), (i += this.sizeOfBlackWhiteBlackRun(t, e, o, a)) - 1\r\n        }\r\n        sizeOfBlackWhiteBlackRun(t, e, r, n) {\r\n            const i = Math.abs(n - e) > Math.abs(r - t);\r\n            if (i) {\r\n                let i = t;\r\n                t = e, e = i, i = r, r = n, n = i\r\n            }\r\n            const s = Math.abs(r - t),\r\n                    o = Math.abs(n - e);\r\n            let a = -s / 2;\r\n            const l = t < r ? 1 : -1,\r\n                    h = e < n ? 1 : -1;\r\n            let c = 0;\r\n            const u = r + l;\r\n            for (let r = t, d = e; r !== u; r += l) {\r\n                const l = i ? d : r,\r\n                        u = i ? r : d;\r\n                if (1 === c === this.image.get(l, u)) {\r\n                    if (2 === c) return tt.distance(r, d, t, e);\r\n                    c++\r\n                }\r\n                if ((a += o) > 0) {\r\n                    if (d === n) break;\r\n                    d += h, a -= s\r\n                }\r\n            }\r\n            return 2 === c ? tt.distance(r + l, n, t, e) : NaN\r\n        }\r\n        findAlignmentInRegion(t, e, r, n) {\r\n            const i = Math.floor(n * t),\r\n                    s = Math.max(0, e - i),\r\n                    o = Math.min(this.image.getWidth() - 1, e + i);\r\n            if (o - s < 3 * t) throw new R(\"Alignment top exceeds estimated module size.\");\r\n            const a = Math.max(0, r - i),\r\n                    l = Math.min(this.image.getHeight() - 1, r + i);\r\n            if (l - a < 3 * t) throw new R(\"Alignment bottom exceeds estimated module size.\");\r\n            return new Re(this.image, s, a, o - s, l - a, t, this.resultPointCallback).find()\r\n        }\r\n    }\r\n    class Me {\r\n        constructor() {\r\n            this.decoder = new pe\r\n        }\r\n        getDecoder() {\r\n            return this.decoder\r\n        }\r\n        decode(t, e) {\r\n            let r, n;\r\n            if (null != e && void 0 !== e.get(C.PURE_BARCODE)) {\r\n                const i = Me.extractPureBits(t.getBlackMatrix());\r\n                r = this.decoder.decodeBitMatrix(i, e), n = Me.NO_POINTS\r\n            } else {\r\n                const i = new Oe(t.getBlackMatrix()).detect(e);\r\n                r = this.decoder.decodeBitMatrix(i.getBits(), e), n = i.getPoints()\r\n            }\r\n            r.getOther() instanceof Se && r.getOther().applyMirroredCorrection(n);\r\n            const i = new F(r.getText(), r.getRawBytes(), void 0, n, k.QR_CODE, void 0),\r\n                    s = r.getByteSegments();\r\n            null !== s && i.putMetadata(W.BYTE_SEGMENTS, s);\r\n            const o = r.getECLevel();\r\n            return null !== o && i.putMetadata(W.ERROR_CORRECTION_LEVEL, o), r.hasStructuredAppend() && (i.putMetadata(W.STRUCTURED_APPEND_SEQUENCE, r.getStructuredAppendSequenceNumber()), i.putMetadata(W.STRUCTURED_APPEND_PARITY, r.getStructuredAppendParity())), i\r\n        }\r\n        reset() {}\r\n        static extractPureBits(t) {\r\n            const e = t.getTopLeftOnBit(),\r\n                    r = t.getBottomRightOnBit();\r\n            if (null === e || null === r) throw new R;\r\n            const n = this.moduleSize(e, t);\r\n            let i = e[1],\r\n                    s = r[1],\r\n                    o = e[0],\r\n                    a = r[0];\r\n            if (o >= a || i >= s) throw new R;\r\n            if (s - i != a - o && (a = o + (s - i)) >= t.getWidth()) throw new R;\r\n            const l = Math.round((a - o + 1) / n),\r\n                    h = Math.round((s - i + 1) / n);\r\n            if (l <= 0 || h <= 0) throw new R;\r\n            if (h !== l) throw new R;\r\n            const c = Math.floor(n / 2);\r\n            i += c;\r\n            const u = (o += c) + Math.floor((l - 1) * n) - a;\r\n            if (u > 0) {\r\n                if (u > c) throw new R;\r\n                o -= u\r\n            }\r\n            const d = i + Math.floor((h - 1) * n) - s;\r\n            if (d > 0) {\r\n                if (d > c) throw new R;\r\n                i -= d\r\n            }\r\n            const g = new T(l, h);\r\n            for (let e = 0; e < h; e++) {\r\n                const r = i + Math.floor(e * n);\r\n                for (let i = 0; i < l; i++) t.get(o + Math.floor(i * n), r) && g.set(i, e)\r\n            }\r\n            return g\r\n        }\r\n        static moduleSize(t, e) {\r\n            const r = e.getHeight(),\r\n                    n = e.getWidth();\r\n            let i = t[0],\r\n                    s = t[1],\r\n                    o = !0,\r\n                    a = 0;\r\n            for (; i < n && s < r;) {\r\n                if (o !== e.get(i, s)) {\r\n                    if (5 == ++a) break;\r\n                    o = !o\r\n                }\r\n                i++, s++\r\n            }\r\n            if (i === n || s === r) throw new R;\r\n            return (i - t[0]) / 7\r\n        }\r\n    }\r\n    Me.NO_POINTS = new Array;\r\n    class be {\r\n        PDF417Common() {}\r\n        static getBitCountSum(t) {\r\n            return tt.sum(t)\r\n        }\r\n        static toIntArray(t) {\r\n            if (null == t || !t.length) return be.EMPTY_INT_ARRAY;\r\n            const e = new Int32Array(t.length);\r\n            let r = 0;\r\n            for (const n of t) e[r++] = n;\r\n            return e\r\n        }\r\n        static getCodeword(t) {\r\n            const e = g.binarySearch(be.SYMBOL_TABLE, 262143 & t);\r\n            return e < 0 ? -1 : (be.CODEWORD_TABLE[e] - 1) % be.NUMBER_OF_CODEWORDS\r\n        }\r\n    }\r\n    be.NUMBER_OF_CODEWORDS = 929, be.MAX_CODEWORDS_IN_BARCODE = be.NUMBER_OF_CODEWORDS - 1, be.MIN_ROWS_IN_BARCODE = 3, be.MAX_ROWS_IN_BARCODE = 90, be.MODULES_IN_CODEWORD = 17, be.MODULES_IN_STOP_PATTERN = 18, be.BARS_IN_MODULE = 8, be.EMPTY_INT_ARRAY = new Int32Array([]), be.SYMBOL_TABLE = Int32Array.from([66142, 66170, 66206, 66236, 66290, 66292, 66350, 66382, 66396, 66454, 66470, 66476, 66594, 66600, 66614, 66626, 66628, 66632, 66640, 66654, 66662, 66668, 66682, 66690, 66718, 66720, 66748, 66758, 66776, 66798, 66802, 66804, 66820, 66824, 66832, 66846, 66848, 66876, 66880, 66936, 66950, 66956, 66968, 66992, 67006, 67022, 67036, 67042, 67044, 67048, 67062, 67118, 67150, 67164, 67214, 67228, 67256, 67294, 67322, 67350, 67366, 67372, 67398, 67404, 67416, 67438, 67474, 67476, 67490, 67492, 67496, 67510, 67618, 67624, 67650, 67656, 67664, 67678, 67686, 67692, 67706, 67714, 67716, 67728, 67742, 67744, 67772, 67782, 67788, 67800, 67822, 67826, 67828, 67842, 67848, 67870, 67872, 67900, 67904, 67960, 67974, 67992, 68016, 68030, 68046, 68060, 68066, 68068, 68072, 68086, 68104, 68112, 68126, 68128, 68156, 68160, 68216, 68336, 68358, 68364, 68376, 68400, 68414, 68448, 68476, 68494, 68508, 68536, 68546, 68548, 68552, 68560, 68574, 68582, 68588, 68654, 68686, 68700, 68706, 68708, 68712, 68726, 68750, 68764, 68792, 68802, 68804, 68808, 68816, 68830, 68838, 68844, 68858, 68878, 68892, 68920, 68976, 68990, 68994, 68996, 69e3, 69008, 69022, 69024, 69052, 69062, 69068, 69080, 69102, 69106, 69108, 69142, 69158, 69164, 69190, 69208, 69230, 69254, 69260, 69272, 69296, 69310, 69326, 69340, 69386, 69394, 69396, 69410, 69416, 69430, 69442, 69444, 69448, 69456, 69470, 69478, 69484, 69554, 69556, 69666, 69672, 69698, 69704, 69712, 69726, 69754, 69762, 69764, 69776, 69790, 69792, 69820, 69830, 69836, 69848, 69870, 69874, 69876, 69890, 69918, 69920, 69948, 69952, 70008, 70022, 70040, 70064, 70078, 70094, 70108, 70114, 70116, 70120, 70134, 70152, 70174, 70176, 70264, 70384, 70412, 70448, 70462, 70496, 70524, 70542, 70556, 70584, 70594, 70600, 70608, 70622, 70630, 70636, 70664, 70672, 70686, 70688, 70716, 70720, 70776, 70896, 71136, 71180, 71192, 71216, 71230, 71264, 71292, 71360, 71416, 71452, 71480, 71536, 71550, 71554, 71556, 71560, 71568, 71582, 71584, 71612, 71622, 71628, 71640, 71662, 71726, 71732, 71758, 71772, 71778, 71780, 71784, 71798, 71822, 71836, 71864, 71874, 71880, 71888, 71902, 71910, 71916, 71930, 71950, 71964, 71992, 72048, 72062, 72066, 72068, 72080, 72094, 72096, 72124, 72134, 72140, 72152, 72174, 72178, 72180, 72206, 72220, 72248, 72304, 72318, 72416, 72444, 72456, 72464, 72478, 72480, 72508, 72512, 72568, 72588, 72600, 72624, 72638, 72654, 72668, 72674, 72676, 72680, 72694, 72726, 72742, 72748, 72774, 72780, 72792, 72814, 72838, 72856, 72880, 72894, 72910, 72924, 72930, 72932, 72936, 72950, 72966, 72972, 72984, 73008, 73022, 73056, 73084, 73102, 73116, 73144, 73156, 73160, 73168, 73182, 73190, 73196, 73210, 73226, 73234, 73236, 73250, 73252, 73256, 73270, 73282, 73284, 73296, 73310, 73318, 73324, 73346, 73348, 73352, 73360, 73374, 73376, 73404, 73414, 73420, 73432, 73454, 73498, 73518, 73522, 73524, 73550, 73564, 73570, 73572, 73576, 73590, 73800, 73822, 73858, 73860, 73872, 73886, 73888, 73916, 73944, 73970, 73972, 73992, 74014, 74016, 74044, 74048, 74104, 74118, 74136, 74160, 74174, 74210, 74212, 74216, 74230, 74244, 74256, 74270, 74272, 74360, 74480, 74502, 74508, 74544, 74558, 74592, 74620, 74638, 74652, 74680, 74690, 74696, 74704, 74726, 74732, 74782, 74784, 74812, 74992, 75232, 75288, 75326, 75360, 75388, 75456, 75512, 75576, 75632, 75646, 75650, 75652, 75664, 75678, 75680, 75708, 75718, 75724, 75736, 75758, 75808, 75836, 75840, 75896, 76016, 76256, 76736, 76824, 76848, 76862, 76896, 76924, 76992, 77048, 77296, 77340, 77368, 77424, 77438, 77536, 77564, 77572, 77576, 77584, 77600, 77628, 77632, 77688, 77702, 77708, 77720, 77744, 77758, 77774, 77788, 77870, 77902, 77916, 77922, 77928, 77966, 77980, 78008, 78018, 78024, 78032, 78046, 78060, 78074, 78094, 78136, 78192, 78206, 78210, 78212, 78224, 78238, 78240, 78268, 78278, 78284, 78296, 78322, 78324, 78350, 78364, 78448, 78462, 78560, 78588, 78600, 78622, 78624, 78652, 78656, 78712, 78726, 78744, 78768, 78782, 78798, 78812, 78818, 78820, 78824, 78838, 78862, 78876, 78904, 78960, 78974, 79072, 79100, 79296, 79352, 79368, 79376, 79390, 79392, 79420, 79424, 79480, 79600, 79628, 79640, 79664, 79678, 79712, 79740, 79772, 79800, 79810, 79812, 79816, 79824, 79838, 79846, 79852, 79894, 79910, 79916, 79942, 79948, 79960, 79982, 79988, 80006, 80024, 80048, 80062, 80078, 80092, 80098, 80100, 80104, 80134, 80140, 80176, 80190, 80224, 80252, 80270, 80284, 80312, 80328, 80336, 80350, 80358, 80364, 80378, 80390, 80396, 80408, 80432, 80446, 80480, 80508, 80576, 80632, 80654, 80668, 80696, 80752, 80766, 80776, 80784, 80798, 80800, 80828, 80844, 80856, 80878, 80882, 80884, 80914, 80916, 80930, 80932, 80936, 80950, 80962, 80968, 80976, 80990, 80998, 81004, 81026, 81028, 81040, 81054, 81056, 81084, 81094, 81100, 81112, 81134, 81154, 81156, 81160, 81168, 81182, 81184, 81212, 81216, 81272, 81286, 81292, 81304, 81328, 81342, 81358, 81372, 81380, 81384, 81398, 81434, 81454, 81458, 81460, 81486, 81500, 81506, 81508, 81512, 81526, 81550, 81564, 81592, 81602, 81604, 81608, 81616, 81630, 81638, 81644, 81702, 81708, 81722, 81734, 81740, 81752, 81774, 81778, 81780, 82050, 82078, 82080, 82108, 82180, 82184, 82192, 82206, 82208, 82236, 82240, 82296, 82316, 82328, 82352, 82366, 82402, 82404, 82408, 82440, 82448, 82462, 82464, 82492, 82496, 82552, 82672, 82694, 82700, 82712, 82736, 82750, 82784, 82812, 82830, 82882, 82884, 82888, 82896, 82918, 82924, 82952, 82960, 82974, 82976, 83004, 83008, 83064, 83184, 83424, 83468, 83480, 83504, 83518, 83552, 83580, 83648, 83704, 83740, 83768, 83824, 83838, 83842, 83844, 83848, 83856, 83872, 83900, 83910, 83916, 83928, 83950, 83984, 84e3, 84028, 84032, 84088, 84208, 84448, 84928, 85040, 85054, 85088, 85116, 85184, 85240, 85488, 85560, 85616, 85630, 85728, 85756, 85764, 85768, 85776, 85790, 85792, 85820, 85824, 85880, 85894, 85900, 85912, 85936, 85966, 85980, 86048, 86080, 86136, 86256, 86496, 86976, 88160, 88188, 88256, 88312, 88560, 89056, 89200, 89214, 89312, 89340, 89536, 89592, 89608, 89616, 89632, 89664, 89720, 89840, 89868, 89880, 89904, 89952, 89980, 89998, 90012, 90040, 90190, 90204, 90254, 90268, 90296, 90306, 90308, 90312, 90334, 90382, 90396, 90424, 90480, 90494, 90500, 90504, 90512, 90526, 90528, 90556, 90566, 90572, 90584, 90610, 90612, 90638, 90652, 90680, 90736, 90750, 90848, 90876, 90884, 90888, 90896, 90910, 90912, 90940, 90944, 91e3, 91014, 91020, 91032, 91056, 91070, 91086, 91100, 91106, 91108, 91112, 91126, 91150, 91164, 91192, 91248, 91262, 91360, 91388, 91584, 91640, 91664, 91678, 91680, 91708, 91712, 91768, 91888, 91928, 91952, 91966, 92e3, 92028, 92046, 92060, 92088, 92098, 92100, 92104, 92112, 92126, 92134, 92140, 92188, 92216, 92272, 92384, 92412, 92608, 92664, 93168, 93200, 93214, 93216, 93244, 93248, 93304, 93424, 93664, 93720, 93744, 93758, 93792, 93820, 93888, 93944, 93980, 94008, 94064, 94078, 94084, 94088, 94096, 94110, 94112, 94140, 94150, 94156, 94168, 94246, 94252, 94278, 94284, 94296, 94318, 94342, 94348, 94360, 94384, 94398, 94414, 94428, 94440, 94470, 94476, 94488, 94512, 94526, 94560, 94588, 94606, 94620, 94648, 94658, 94660, 94664, 94672, 94686, 94694, 94700, 94714, 94726, 94732, 94744, 94768, 94782, 94816, 94844, 94912, 94968, 94990, 95004, 95032, 95088, 95102, 95112, 95120, 95134, 95136, 95164, 95180, 95192, 95214, 95218, 95220, 95244, 95256, 95280, 95294, 95328, 95356, 95424, 95480, 95728, 95758, 95772, 95800, 95856, 95870, 95968, 95996, 96008, 96016, 96030, 96032, 96060, 96064, 96120, 96152, 96176, 96190, 96220, 96226, 96228, 96232, 96290, 96292, 96296, 96310, 96322, 96324, 96328, 96336, 96350, 96358, 96364, 96386, 96388, 96392, 96400, 96414, 96416, 96444, 96454, 96460, 96472, 96494, 96498, 96500, 96514, 96516, 96520, 96528, 96542, 96544, 96572, 96576, 96632, 96646, 96652, 96664, 96688, 96702, 96718, 96732, 96738, 96740, 96744, 96758, 96772, 96776, 96784, 96798, 96800, 96828, 96832, 96888, 97008, 97030, 97036, 97048, 97072, 97086, 97120, 97148, 97166, 97180, 97208, 97220, 97224, 97232, 97246, 97254, 97260, 97326, 97330, 97332, 97358, 97372, 97378, 97380, 97384, 97398, 97422, 97436, 97464, 97474, 97476, 97480, 97488, 97502, 97510, 97516, 97550, 97564, 97592, 97648, 97666, 97668, 97672, 97680, 97694, 97696, 97724, 97734, 97740, 97752, 97774, 97830, 97836, 97850, 97862, 97868, 97880, 97902, 97906, 97908, 97926, 97932, 97944, 97968, 97998, 98012, 98018, 98020, 98024, 98038, 98618, 98674, 98676, 98838, 98854, 98874, 98892, 98904, 98926, 98930, 98932, 98968, 99006, 99042, 99044, 99048, 99062, 99166, 99194, 99246, 99286, 99350, 99366, 99372, 99386, 99398, 99416, 99438, 99442, 99444, 99462, 99504, 99518, 99534, 99548, 99554, 99556, 99560, 99574, 99590, 99596, 99608, 99632, 99646, 99680, 99708, 99726, 99740, 99768, 99778, 99780, 99784, 99792, 99806, 99814, 99820, 99834, 99858, 99860, 99874, 99880, 99894, 99906, 99920, 99934, 99962, 99970, 99972, 99976, 99984, 99998, 1e5, 100028, 100038, 100044, 100056, 100078, 100082, 100084, 100142, 100174, 100188, 100246, 100262, 100268, 100306, 100308, 100390, 100396, 100410, 100422, 100428, 100440, 100462, 100466, 100468, 100486, 100504, 100528, 100542, 100558, 100572, 100578, 100580, 100584, 100598, 100620, 100656, 100670, 100704, 100732, 100750, 100792, 100802, 100808, 100816, 100830, 100838, 100844, 100858, 100888, 100912, 100926, 100960, 100988, 101056, 101112, 101148, 101176, 101232, 101246, 101250, 101252, 101256, 101264, 101278, 101280, 101308, 101318, 101324, 101336, 101358, 101362, 101364, 101410, 101412, 101416, 101430, 101442, 101448, 101456, 101470, 101478, 101498, 101506, 101508, 101520, 101534, 101536, 101564, 101580, 101618, 101620, 101636, 101640, 101648, 101662, 101664, 101692, 101696, 101752, 101766, 101784, 101838, 101858, 101860, 101864, 101934, 101938, 101940, 101966, 101980, 101986, 101988, 101992, 102030, 102044, 102072, 102082, 102084, 102088, 102096, 102138, 102166, 102182, 102188, 102214, 102220, 102232, 102254, 102282, 102290, 102292, 102306, 102308, 102312, 102326, 102444, 102458, 102470, 102476, 102488, 102514, 102516, 102534, 102552, 102576, 102590, 102606, 102620, 102626, 102632, 102646, 102662, 102668, 102704, 102718, 102752, 102780, 102798, 102812, 102840, 102850, 102856, 102864, 102878, 102886, 102892, 102906, 102936, 102974, 103008, 103036, 103104, 103160, 103224, 103280, 103294, 103298, 103300, 103312, 103326, 103328, 103356, 103366, 103372, 103384, 103406, 103410, 103412, 103472, 103486, 103520, 103548, 103616, 103672, 103920, 103992, 104048, 104062, 104160, 104188, 104194, 104196, 104200, 104208, 104224, 104252, 104256, 104312, 104326, 104332, 104344, 104368, 104382, 104398, 104412, 104418, 104420, 104424, 104482, 104484, 104514, 104520, 104528, 104542, 104550, 104570, 104578, 104580, 104592, 104606, 104608, 104636, 104652, 104690, 104692, 104706, 104712, 104734, 104736, 104764, 104768, 104824, 104838, 104856, 104910, 104930, 104932, 104936, 104968, 104976, 104990, 104992, 105020, 105024, 105080, 105200, 105240, 105278, 105312, 105372, 105410, 105412, 105416, 105424, 105446, 105518, 105524, 105550, 105564, 105570, 105572, 105576, 105614, 105628, 105656, 105666, 105672, 105680, 105702, 105722, 105742, 105756, 105784, 105840, 105854, 105858, 105860, 105864, 105872, 105888, 105932, 105970, 105972, 106006, 106022, 106028, 106054, 106060, 106072, 106100, 106118, 106124, 106136, 106160, 106174, 106190, 106210, 106212, 106216, 106250, 106258, 106260, 106274, 106276, 106280, 106306, 106308, 106312, 106320, 106334, 106348, 106394, 106414, 106418, 106420, 106566, 106572, 106610, 106612, 106630, 106636, 106648, 106672, 106686, 106722, 106724, 106728, 106742, 106758, 106764, 106776, 106800, 106814, 106848, 106876, 106894, 106908, 106936, 106946, 106948, 106952, 106960, 106974, 106982, 106988, 107032, 107056, 107070, 107104, 107132, 107200, 107256, 107292, 107320, 107376, 107390, 107394, 107396, 107400, 107408, 107422, 107424, 107452, 107462, 107468, 107480, 107502, 107506, 107508, 107544, 107568, 107582, 107616, 107644, 107712, 107768, 108016, 108060, 108088, 108144, 108158, 108256, 108284, 108290, 108292, 108296, 108304, 108318, 108320, 108348, 108352, 108408, 108422, 108428, 108440, 108464, 108478, 108494, 108508, 108514, 108516, 108520, 108592, 108640, 108668, 108736, 108792, 109040, 109536, 109680, 109694, 109792, 109820, 110016, 110072, 110084, 110088, 110096, 110112, 110140, 110144, 110200, 110320, 110342, 110348, 110360, 110384, 110398, 110432, 110460, 110478, 110492, 110520, 110532, 110536, 110544, 110558, 110658, 110686, 110714, 110722, 110724, 110728, 110736, 110750, 110752, 110780, 110796, 110834, 110836, 110850, 110852, 110856, 110864, 110878, 110880, 110908, 110912, 110968, 110982, 111e3, 111054, 111074, 111076, 111080, 111108, 111112, 111120, 111134, 111136, 111164, 111168, 111224, 111344, 111372, 111422, 111456, 111516, 111554, 111556, 111560, 111568, 111590, 111632, 111646, 111648, 111676, 111680, 111736, 111856, 112096, 112152, 112224, 112252, 112320, 112440, 112514, 112516, 112520, 112528, 112542, 112544, 112588, 112686, 112718, 112732, 112782, 112796, 112824, 112834, 112836, 112840, 112848, 112870, 112890, 112910, 112924, 112952, 113008, 113022, 113026, 113028, 113032, 113040, 113054, 113056, 113100, 113138, 113140, 113166, 113180, 113208, 113264, 113278, 113376, 113404, 113416, 113424, 113440, 113468, 113472, 113560, 113614, 113634, 113636, 113640, 113686, 113702, 113708, 113734, 113740, 113752, 113778, 113780, 113798, 113804, 113816, 113840, 113854, 113870, 113890, 113892, 113896, 113926, 113932, 113944, 113968, 113982, 114016, 114044, 114076, 114114, 114116, 114120, 114128, 114150, 114170, 114194, 114196, 114210, 114212, 114216, 114242, 114244, 114248, 114256, 114270, 114278, 114306, 114308, 114312, 114320, 114334, 114336, 114364, 114380, 114420, 114458, 114478, 114482, 114484, 114510, 114524, 114530, 114532, 114536, 114842, 114866, 114868, 114970, 114994, 114996, 115042, 115044, 115048, 115062, 115130, 115226, 115250, 115252, 115278, 115292, 115298, 115300, 115304, 115318, 115342, 115394, 115396, 115400, 115408, 115422, 115430, 115436, 115450, 115478, 115494, 115514, 115526, 115532, 115570, 115572, 115738, 115758, 115762, 115764, 115790, 115804, 115810, 115812, 115816, 115830, 115854, 115868, 115896, 115906, 115912, 115920, 115934, 115942, 115948, 115962, 115996, 116024, 116080, 116094, 116098, 116100, 116104, 116112, 116126, 116128, 116156, 116166, 116172, 116184, 116206, 116210, 116212, 116246, 116262, 116268, 116282, 116294, 116300, 116312, 116334, 116338, 116340, 116358, 116364, 116376, 116400, 116414, 116430, 116444, 116450, 116452, 116456, 116498, 116500, 116514, 116520, 116534, 116546, 116548, 116552, 116560, 116574, 116582, 116588, 116602, 116654, 116694, 116714, 116762, 116782, 116786, 116788, 116814, 116828, 116834, 116836, 116840, 116854, 116878, 116892, 116920, 116930, 116936, 116944, 116958, 116966, 116972, 116986, 117006, 117048, 117104, 117118, 117122, 117124, 117136, 117150, 117152, 117180, 117190, 117196, 117208, 117230, 117234, 117236, 117304, 117360, 117374, 117472, 117500, 117506, 117508, 117512, 117520, 117536, 117564, 117568, 117624, 117638, 117644, 117656, 117680, 117694, 117710, 117724, 117730, 117732, 117736, 117750, 117782, 117798, 117804, 117818, 117830, 117848, 117874, 117876, 117894, 117936, 117950, 117966, 117986, 117988, 117992, 118022, 118028, 118040, 118064, 118078, 118112, 118140, 118172, 118210, 118212, 118216, 118224, 118238, 118246, 118266, 118306, 118312, 118338, 118352, 118366, 118374, 118394, 118402, 118404, 118408, 118416, 118430, 118432, 118460, 118476, 118514, 118516, 118574, 118578, 118580, 118606, 118620, 118626, 118628, 118632, 118678, 118694, 118700, 118730, 118738, 118740, 118830, 118834, 118836, 118862, 118876, 118882, 118884, 118888, 118902, 118926, 118940, 118968, 118978, 118980, 118984, 118992, 119006, 119014, 119020, 119034, 119068, 119096, 119152, 119166, 119170, 119172, 119176, 119184, 119198, 119200, 119228, 119238, 119244, 119256, 119278, 119282, 119284, 119324, 119352, 119408, 119422, 119520, 119548, 119554, 119556, 119560, 119568, 119582, 119584, 119612, 119616, 119672, 119686, 119692, 119704, 119728, 119742, 119758, 119772, 119778, 119780, 119784, 119798, 119920, 119934, 120032, 120060, 120256, 120312, 120324, 120328, 120336, 120352, 120384, 120440, 120560, 120582, 120588, 120600, 120624, 120638, 120672, 120700, 120718, 120732, 120760, 120770, 120772, 120776, 120784, 120798, 120806, 120812, 120870, 120876, 120890, 120902, 120908, 120920, 120946, 120948, 120966, 120972, 120984, 121008, 121022, 121038, 121058, 121060, 121064, 121078, 121100, 121112, 121136, 121150, 121184, 121212, 121244, 121282, 121284, 121288, 121296, 121318, 121338, 121356, 121368, 121392, 121406, 121440, 121468, 121536, 121592, 121656, 121730, 121732, 121736, 121744, 121758, 121760, 121804, 121842, 121844, 121890, 121922, 121924, 121928, 121936, 121950, 121958, 121978, 121986, 121988, 121992, 122e3, 122014, 122016, 122044, 122060, 122098, 122100, 122116, 122120, 122128, 122142, 122144, 122172, 122176, 122232, 122246, 122264, 122318, 122338, 122340, 122344, 122414, 122418, 122420, 122446, 122460, 122466, 122468, 122472, 122510, 122524, 122552, 122562, 122564, 122568, 122576, 122598, 122618, 122646, 122662, 122668, 122694, 122700, 122712, 122738, 122740, 122762, 122770, 122772, 122786, 122788, 122792, 123018, 123026, 123028, 123042, 123044, 123048, 123062, 123098, 123146, 123154, 123156, 123170, 123172, 123176, 123190, 123202, 123204, 123208, 123216, 123238, 123244, 123258, 123290, 123314, 123316, 123402, 123410, 123412, 123426, 123428, 123432, 123446, 123458, 123464, 123472, 123486, 123494, 123500, 123514, 123522, 123524, 123528, 123536, 123552, 123580, 123590, 123596, 123608, 123630, 123634, 123636, 123674, 123698, 123700, 123740, 123746, 123748, 123752, 123834, 123914, 123922, 123924, 123938, 123944, 123958, 123970, 123976, 123984, 123998, 124006, 124012, 124026, 124034, 124036, 124048, 124062, 124064, 124092, 124102, 124108, 124120, 124142, 124146, 124148, 124162, 124164, 124168, 124176, 124190, 124192, 124220, 124224, 124280, 124294, 124300, 124312, 124336, 124350, 124366, 124380, 124386, 124388, 124392, 124406, 124442, 124462, 124466, 124468, 124494, 124508, 124514, 124520, 124558, 124572, 124600, 124610, 124612, 124616, 124624, 124646, 124666, 124694, 124710, 124716, 124730, 124742, 124748, 124760, 124786, 124788, 124818, 124820, 124834, 124836, 124840, 124854, 124946, 124948, 124962, 124964, 124968, 124982, 124994, 124996, 125e3, 125008, 125022, 125030, 125036, 125050, 125058, 125060, 125064, 125072, 125086, 125088, 125116, 125126, 125132, 125144, 125166, 125170, 125172, 125186, 125188, 125192, 125200, 125216, 125244, 125248, 125304, 125318, 125324, 125336, 125360, 125374, 125390, 125404, 125410, 125412, 125416, 125430, 125444, 125448, 125456, 125472, 125504, 125560, 125680, 125702, 125708, 125720, 125744, 125758, 125792, 125820, 125838, 125852, 125880, 125890, 125892, 125896, 125904, 125918, 125926, 125932, 125978, 125998, 126002, 126004, 126030, 126044, 126050, 126052, 126056, 126094, 126108, 126136, 126146, 126148, 126152, 126160, 126182, 126202, 126222, 126236, 126264, 126320, 126334, 126338, 126340, 126344, 126352, 126366, 126368, 126412, 126450, 126452, 126486, 126502, 126508, 126522, 126534, 126540, 126552, 126574, 126578, 126580, 126598, 126604, 126616, 126640, 126654, 126670, 126684, 126690, 126692, 126696, 126738, 126754, 126756, 126760, 126774, 126786, 126788, 126792, 126800, 126814, 126822, 126828, 126842, 126894, 126898, 126900, 126934, 127126, 127142, 127148, 127162, 127178, 127186, 127188, 127254, 127270, 127276, 127290, 127302, 127308, 127320, 127342, 127346, 127348, 127370, 127378, 127380, 127394, 127396, 127400, 127450, 127510, 127526, 127532, 127546, 127558, 127576, 127598, 127602, 127604, 127622, 127628, 127640, 127664, 127678, 127694, 127708, 127714, 127716, 127720, 127734, 127754, 127762, 127764, 127778, 127784, 127810, 127812, 127816, 127824, 127838, 127846, 127866, 127898, 127918, 127922, 127924, 128022, 128038, 128044, 128058, 128070, 128076, 128088, 128110, 128114, 128116, 128134, 128140, 128152, 128176, 128190, 128206, 128220, 128226, 128228, 128232, 128246, 128262, 128268, 128280, 128304, 128318, 128352, 128380, 128398, 128412, 128440, 128450, 128452, 128456, 128464, 128478, 128486, 128492, 128506, 128522, 128530, 128532, 128546, 128548, 128552, 128566, 128578, 128580, 128584, 128592, 128606, 128614, 128634, 128642, 128644, 128648, 128656, 128670, 128672, 128700, 128716, 128754, 128756, 128794, 128814, 128818, 128820, 128846, 128860, 128866, 128868, 128872, 128886, 128918, 128934, 128940, 128954, 128978, 128980, 129178, 129198, 129202, 129204, 129238, 129258, 129306, 129326, 129330, 129332, 129358, 129372, 129378, 129380, 129384, 129398, 129430, 129446, 129452, 129466, 129482, 129490, 129492, 129562, 129582, 129586, 129588, 129614, 129628, 129634, 129636, 129640, 129654, 129678, 129692, 129720, 129730, 129732, 129736, 129744, 129758, 129766, 129772, 129814, 129830, 129836, 129850, 129862, 129868, 129880, 129902, 129906, 129908, 129930, 129938, 129940, 129954, 129956, 129960, 129974, 130010]), be.CODEWORD_TABLE = Int32Array.from([2627, 1819, 2622, 2621, 1813, 1812, 2729, 2724, 2723, 2779, 2774, 2773, 902, 896, 908, 868, 865, 861, 859, 2511, 873, 871, 1780, 835, 2493, 825, 2491, 842, 837, 844, 1764, 1762, 811, 810, 809, 2483, 807, 2482, 806, 2480, 815, 814, 813, 812, 2484, 817, 816, 1745, 1744, 1742, 1746, 2655, 2637, 2635, 2626, 2625, 2623, 2628, 1820, 2752, 2739, 2737, 2728, 2727, 2725, 2730, 2785, 2783, 2778, 2777, 2775, 2780, 787, 781, 747, 739, 736, 2413, 754, 752, 1719, 692, 689, 681, 2371, 678, 2369, 700, 697, 694, 703, 1688, 1686, 642, 638, 2343, 631, 2341, 627, 2338, 651, 646, 643, 2345, 654, 652, 1652, 1650, 1647, 1654, 601, 599, 2322, 596, 2321, 594, 2319, 2317, 611, 610, 608, 606, 2324, 603, 2323, 615, 614, 612, 1617, 1616, 1614, 1612, 616, 1619, 1618, 2575, 2538, 2536, 905, 901, 898, 909, 2509, 2507, 2504, 870, 867, 864, 860, 2512, 875, 872, 1781, 2490, 2489, 2487, 2485, 1748, 836, 834, 832, 830, 2494, 827, 2492, 843, 841, 839, 845, 1765, 1763, 2701, 2676, 2674, 2653, 2648, 2656, 2634, 2633, 2631, 2629, 1821, 2638, 2636, 2770, 2763, 2761, 2750, 2745, 2753, 2736, 2735, 2733, 2731, 1848, 2740, 2738, 2786, 2784, 591, 588, 576, 569, 566, 2296, 1590, 537, 534, 526, 2276, 522, 2274, 545, 542, 539, 548, 1572, 1570, 481, 2245, 466, 2242, 462, 2239, 492, 485, 482, 2249, 496, 494, 1534, 1531, 1528, 1538, 413, 2196, 406, 2191, 2188, 425, 419, 2202, 415, 2199, 432, 430, 427, 1472, 1467, 1464, 433, 1476, 1474, 368, 367, 2160, 365, 2159, 362, 2157, 2155, 2152, 378, 377, 375, 2166, 372, 2165, 369, 2162, 383, 381, 379, 2168, 1419, 1418, 1416, 1414, 385, 1411, 384, 1423, 1422, 1420, 1424, 2461, 802, 2441, 2439, 790, 786, 783, 794, 2409, 2406, 2403, 750, 742, 738, 2414, 756, 753, 1720, 2367, 2365, 2362, 2359, 1663, 693, 691, 684, 2373, 680, 2370, 702, 699, 696, 704, 1690, 1687, 2337, 2336, 2334, 2332, 1624, 2329, 1622, 640, 637, 2344, 634, 2342, 630, 2340, 650, 648, 645, 2346, 655, 653, 1653, 1651, 1649, 1655, 2612, 2597, 2595, 2571, 2568, 2565, 2576, 2534, 2529, 2526, 1787, 2540, 2537, 907, 904, 900, 910, 2503, 2502, 2500, 2498, 1768, 2495, 1767, 2510, 2508, 2506, 869, 866, 863, 2513, 876, 874, 1782, 2720, 2713, 2711, 2697, 2694, 2691, 2702, 2672, 2670, 2664, 1828, 2678, 2675, 2647, 2646, 2644, 2642, 1823, 2639, 1822, 2654, 2652, 2650, 2657, 2771, 1855, 2765, 2762, 1850, 1849, 2751, 2749, 2747, 2754, 353, 2148, 344, 342, 336, 2142, 332, 2140, 345, 1375, 1373, 306, 2130, 299, 2128, 295, 2125, 319, 314, 311, 2132, 1354, 1352, 1349, 1356, 262, 257, 2101, 253, 2096, 2093, 274, 273, 267, 2107, 263, 2104, 280, 278, 275, 1316, 1311, 1308, 1320, 1318, 2052, 202, 2050, 2044, 2040, 219, 2063, 212, 2060, 208, 2055, 224, 221, 2066, 1260, 1258, 1252, 231, 1248, 229, 1266, 1264, 1261, 1268, 155, 1998, 153, 1996, 1994, 1991, 1988, 165, 164, 2007, 162, 2006, 159, 2003, 2e3, 172, 171, 169, 2012, 166, 2010, 1186, 1184, 1182, 1179, 175, 1176, 173, 1192, 1191, 1189, 1187, 176, 1194, 1193, 2313, 2307, 2305, 592, 589, 2294, 2292, 2289, 578, 572, 568, 2297, 580, 1591, 2272, 2267, 2264, 1547, 538, 536, 529, 2278, 525, 2275, 547, 544, 541, 1574, 1571, 2237, 2235, 2229, 1493, 2225, 1489, 478, 2247, 470, 2244, 465, 2241, 493, 488, 484, 2250, 498, 495, 1536, 1533, 1530, 1539, 2187, 2186, 2184, 2182, 1432, 2179, 1430, 2176, 1427, 414, 412, 2197, 409, 2195, 405, 2193, 2190, 426, 424, 421, 2203, 418, 2201, 431, 429, 1473, 1471, 1469, 1466, 434, 1477, 1475, 2478, 2472, 2470, 2459, 2457, 2454, 2462, 803, 2437, 2432, 2429, 1726, 2443, 2440, 792, 789, 785, 2401, 2399, 2393, 1702, 2389, 1699, 2411, 2408, 2405, 745, 741, 2415, 758, 755, 1721, 2358, 2357, 2355, 2353, 1661, 2350, 1660, 2347, 1657, 2368, 2366, 2364, 2361, 1666, 690, 687, 2374, 683, 2372, 701, 698, 705, 1691, 1689, 2619, 2617, 2610, 2608, 2605, 2613, 2593, 2588, 2585, 1803, 2599, 2596, 2563, 2561, 2555, 1797, 2551, 1795, 2573, 2570, 2567, 2577, 2525, 2524, 2522, 2520, 1786, 2517, 1785, 2514, 1783, 2535, 2533, 2531, 2528, 1788, 2541, 2539, 906, 903, 911, 2721, 1844, 2715, 2712, 1838, 1836, 2699, 2696, 2693, 2703, 1827, 1826, 1824, 2673, 2671, 2669, 2666, 1829, 2679, 2677, 1858, 1857, 2772, 1854, 1853, 1851, 1856, 2766, 2764, 143, 1987, 139, 1986, 135, 133, 131, 1984, 128, 1983, 125, 1981, 138, 137, 136, 1985, 1133, 1132, 1130, 112, 110, 1974, 107, 1973, 104, 1971, 1969, 122, 121, 119, 117, 1977, 114, 1976, 124, 1115, 1114, 1112, 1110, 1117, 1116, 84, 83, 1953, 81, 1952, 78, 1950, 1948, 1945, 94, 93, 91, 1959, 88, 1958, 85, 1955, 99, 97, 95, 1961, 1086, 1085, 1083, 1081, 1078, 100, 1090, 1089, 1087, 1091, 49, 47, 1917, 44, 1915, 1913, 1910, 1907, 59, 1926, 56, 1925, 53, 1922, 1919, 66, 64, 1931, 61, 1929, 1042, 1040, 1038, 71, 1035, 70, 1032, 68, 1048, 1047, 1045, 1043, 1050, 1049, 12, 10, 1869, 1867, 1864, 1861, 21, 1880, 19, 1877, 1874, 1871, 28, 1888, 25, 1886, 22, 1883, 982, 980, 977, 974, 32, 30, 991, 989, 987, 984, 34, 995, 994, 992, 2151, 2150, 2147, 2146, 2144, 356, 355, 354, 2149, 2139, 2138, 2136, 2134, 1359, 343, 341, 338, 2143, 335, 2141, 348, 347, 346, 1376, 1374, 2124, 2123, 2121, 2119, 1326, 2116, 1324, 310, 308, 305, 2131, 302, 2129, 298, 2127, 320, 318, 316, 313, 2133, 322, 321, 1355, 1353, 1351, 1357, 2092, 2091, 2089, 2087, 1276, 2084, 1274, 2081, 1271, 259, 2102, 256, 2100, 252, 2098, 2095, 272, 269, 2108, 266, 2106, 281, 279, 277, 1317, 1315, 1313, 1310, 282, 1321, 1319, 2039, 2037, 2035, 2032, 1203, 2029, 1200, 1197, 207, 2053, 205, 2051, 201, 2049, 2046, 2043, 220, 218, 2064, 215, 2062, 211, 2059, 228, 226, 223, 2069, 1259, 1257, 1254, 232, 1251, 230, 1267, 1265, 1263, 2316, 2315, 2312, 2311, 2309, 2314, 2304, 2303, 2301, 2299, 1593, 2308, 2306, 590, 2288, 2287, 2285, 2283, 1578, 2280, 1577, 2295, 2293, 2291, 579, 577, 574, 571, 2298, 582, 581, 1592, 2263, 2262, 2260, 2258, 1545, 2255, 1544, 2252, 1541, 2273, 2271, 2269, 2266, 1550, 535, 532, 2279, 528, 2277, 546, 543, 549, 1575, 1573, 2224, 2222, 2220, 1486, 2217, 1485, 2214, 1482, 1479, 2238, 2236, 2234, 2231, 1496, 2228, 1492, 480, 477, 2248, 473, 2246, 469, 2243, 490, 487, 2251, 497, 1537, 1535, 1532, 2477, 2476, 2474, 2479, 2469, 2468, 2466, 2464, 1730, 2473, 2471, 2453, 2452, 2450, 2448, 1729, 2445, 1728, 2460, 2458, 2456, 2463, 805, 804, 2428, 2427, 2425, 2423, 1725, 2420, 1724, 2417, 1722, 2438, 2436, 2434, 2431, 1727, 2444, 2442, 793, 791, 788, 795, 2388, 2386, 2384, 1697, 2381, 1696, 2378, 1694, 1692, 2402, 2400, 2398, 2395, 1703, 2392, 1701, 2412, 2410, 2407, 751, 748, 744, 2416, 759, 757, 1807, 2620, 2618, 1806, 1805, 2611, 2609, 2607, 2614, 1802, 1801, 1799, 2594, 2592, 2590, 2587, 1804, 2600, 2598, 1794, 1793, 1791, 1789, 2564, 2562, 2560, 2557, 1798, 2554, 1796, 2574, 2572, 2569, 2578, 1847, 1846, 2722, 1843, 1842, 1840, 1845, 2716, 2714, 1835, 1834, 1832, 1830, 1839, 1837, 2700, 2698, 2695, 2704, 1817, 1811, 1810, 897, 862, 1777, 829, 826, 838, 1760, 1758, 808, 2481, 1741, 1740, 1738, 1743, 2624, 1818, 2726, 2776, 782, 740, 737, 1715, 686, 679, 695, 1682, 1680, 639, 628, 2339, 647, 644, 1645, 1643, 1640, 1648, 602, 600, 597, 595, 2320, 593, 2318, 609, 607, 604, 1611, 1610, 1608, 1606, 613, 1615, 1613, 2328, 926, 924, 892, 886, 899, 857, 850, 2505, 1778, 824, 823, 821, 819, 2488, 818, 2486, 833, 831, 828, 840, 1761, 1759, 2649, 2632, 2630, 2746, 2734, 2732, 2782, 2781, 570, 567, 1587, 531, 527, 523, 540, 1566, 1564, 476, 467, 463, 2240, 486, 483, 1524, 1521, 1518, 1529, 411, 403, 2192, 399, 2189, 423, 416, 1462, 1457, 1454, 428, 1468, 1465, 2210, 366, 363, 2158, 360, 2156, 357, 2153, 376, 373, 370, 2163, 1410, 1409, 1407, 1405, 382, 1402, 380, 1417, 1415, 1412, 1421, 2175, 2174, 777, 774, 771, 784, 732, 725, 722, 2404, 743, 1716, 676, 674, 668, 2363, 665, 2360, 685, 1684, 1681, 626, 624, 622, 2335, 620, 2333, 617, 2330, 641, 635, 649, 1646, 1644, 1642, 2566, 928, 925, 2530, 2527, 894, 891, 888, 2501, 2499, 2496, 858, 856, 854, 851, 1779, 2692, 2668, 2665, 2645, 2643, 2640, 2651, 2768, 2759, 2757, 2744, 2743, 2741, 2748, 352, 1382, 340, 337, 333, 1371, 1369, 307, 300, 296, 2126, 315, 312, 1347, 1342, 1350, 261, 258, 250, 2097, 246, 2094, 271, 268, 264, 1306, 1301, 1298, 276, 1312, 1309, 2115, 203, 2048, 195, 2045, 191, 2041, 213, 209, 2056, 1246, 1244, 1238, 225, 1234, 222, 1256, 1253, 1249, 1262, 2080, 2079, 154, 1997, 150, 1995, 147, 1992, 1989, 163, 160, 2004, 156, 2001, 1175, 1174, 1172, 1170, 1167, 170, 1164, 167, 1185, 1183, 1180, 1177, 174, 1190, 1188, 2025, 2024, 2022, 587, 586, 564, 559, 556, 2290, 573, 1588, 520, 518, 512, 2268, 508, 2265, 530, 1568, 1565, 461, 457, 2233, 450, 2230, 446, 2226, 479, 471, 489, 1526, 1523, 1520, 397, 395, 2185, 392, 2183, 389, 2180, 2177, 410, 2194, 402, 422, 1463, 1461, 1459, 1456, 1470, 2455, 799, 2433, 2430, 779, 776, 773, 2397, 2394, 2390, 734, 728, 724, 746, 1717, 2356, 2354, 2351, 2348, 1658, 677, 675, 673, 670, 667, 688, 1685, 1683, 2606, 2589, 2586, 2559, 2556, 2552, 927, 2523, 2521, 2518, 2515, 1784, 2532, 895, 893, 890, 2718, 2709, 2707, 2689, 2687, 2684, 2663, 2662, 2660, 2658, 1825, 2667, 2769, 1852, 2760, 2758, 142, 141, 1139, 1138, 134, 132, 129, 126, 1982, 1129, 1128, 1126, 1131, 113, 111, 108, 105, 1972, 101, 1970, 120, 118, 115, 1109, 1108, 1106, 1104, 123, 1113, 1111, 82, 79, 1951, 75, 1949, 72, 1946, 92, 89, 86, 1956, 1077, 1076, 1074, 1072, 98, 1069, 96, 1084, 1082, 1079, 1088, 1968, 1967, 48, 45, 1916, 42, 1914, 39, 1911, 1908, 60, 57, 54, 1923, 50, 1920, 1031, 1030, 1028, 1026, 67, 1023, 65, 1020, 62, 1041, 1039, 1036, 1033, 69, 1046, 1044, 1944, 1943, 1941, 11, 9, 1868, 7, 1865, 1862, 1859, 20, 1878, 16, 1875, 13, 1872, 970, 968, 966, 963, 29, 960, 26, 23, 983, 981, 978, 975, 33, 971, 31, 990, 988, 985, 1906, 1904, 1902, 993, 351, 2145, 1383, 331, 330, 328, 326, 2137, 323, 2135, 339, 1372, 1370, 294, 293, 291, 289, 2122, 286, 2120, 283, 2117, 309, 303, 317, 1348, 1346, 1344, 245, 244, 242, 2090, 239, 2088, 236, 2085, 2082, 260, 2099, 249, 270, 1307, 1305, 1303, 1300, 1314, 189, 2038, 186, 2036, 183, 2033, 2030, 2026, 206, 198, 2047, 194, 216, 1247, 1245, 1243, 1240, 227, 1237, 1255, 2310, 2302, 2300, 2286, 2284, 2281, 565, 563, 561, 558, 575, 1589, 2261, 2259, 2256, 2253, 1542, 521, 519, 517, 514, 2270, 511, 533, 1569, 1567, 2223, 2221, 2218, 2215, 1483, 2211, 1480, 459, 456, 453, 2232, 449, 474, 491, 1527, 1525, 1522, 2475, 2467, 2465, 2451, 2449, 2446, 801, 800, 2426, 2424, 2421, 2418, 1723, 2435, 780, 778, 775, 2387, 2385, 2382, 2379, 1695, 2375, 1693, 2396, 735, 733, 730, 727, 749, 1718, 2616, 2615, 2604, 2603, 2601, 2584, 2583, 2581, 2579, 1800, 2591, 2550, 2549, 2547, 2545, 1792, 2542, 1790, 2558, 929, 2719, 1841, 2710, 2708, 1833, 1831, 2690, 2688, 2686, 1815, 1809, 1808, 1774, 1756, 1754, 1737, 1736, 1734, 1739, 1816, 1711, 1676, 1674, 633, 629, 1638, 1636, 1633, 1641, 598, 1605, 1604, 1602, 1600, 605, 1609, 1607, 2327, 887, 853, 1775, 822, 820, 1757, 1755, 1584, 524, 1560, 1558, 468, 464, 1514, 1511, 1508, 1519, 408, 404, 400, 1452, 1447, 1444, 417, 1458, 1455, 2208, 364, 361, 358, 2154, 1401, 1400, 1398, 1396, 374, 1393, 371, 1408, 1406, 1403, 1413, 2173, 2172, 772, 726, 723, 1712, 672, 669, 666, 682, 1678, 1675, 625, 623, 621, 618, 2331, 636, 632, 1639, 1637, 1635, 920, 918, 884, 880, 889, 849, 848, 847, 846, 2497, 855, 852, 1776, 2641, 2742, 2787, 1380, 334, 1367, 1365, 301, 297, 1340, 1338, 1335, 1343, 255, 251, 247, 1296, 1291, 1288, 265, 1302, 1299, 2113, 204, 196, 192, 2042, 1232, 1230, 1224, 214, 1220, 210, 1242, 1239, 1235, 1250, 2077, 2075, 151, 148, 1993, 144, 1990, 1163, 1162, 1160, 1158, 1155, 161, 1152, 157, 1173, 1171, 1168, 1165, 168, 1181, 1178, 2021, 2020, 2018, 2023, 585, 560, 557, 1585, 516, 509, 1562, 1559, 458, 447, 2227, 472, 1516, 1513, 1510, 398, 396, 393, 390, 2181, 386, 2178, 407, 1453, 1451, 1449, 1446, 420, 1460, 2209, 769, 764, 720, 712, 2391, 729, 1713, 664, 663, 661, 659, 2352, 656, 2349, 671, 1679, 1677, 2553, 922, 919, 2519, 2516, 885, 883, 881, 2685, 2661, 2659, 2767, 2756, 2755, 140, 1137, 1136, 130, 127, 1125, 1124, 1122, 1127, 109, 106, 102, 1103, 1102, 1100, 1098, 116, 1107, 1105, 1980, 80, 76, 73, 1947, 1068, 1067, 1065, 1063, 90, 1060, 87, 1075, 1073, 1070, 1080, 1966, 1965, 46, 43, 40, 1912, 36, 1909, 1019, 1018, 1016, 1014, 58, 1011, 55, 1008, 51, 1029, 1027, 1024, 1021, 63, 1037, 1034, 1940, 1939, 1937, 1942, 8, 1866, 4, 1863, 1, 1860, 956, 954, 952, 949, 946, 17, 14, 969, 967, 964, 961, 27, 957, 24, 979, 976, 972, 1901, 1900, 1898, 1896, 986, 1905, 1903, 350, 349, 1381, 329, 327, 324, 1368, 1366, 292, 290, 287, 284, 2118, 304, 1341, 1339, 1337, 1345, 243, 240, 237, 2086, 233, 2083, 254, 1297, 1295, 1293, 1290, 1304, 2114, 190, 187, 184, 2034, 180, 2031, 177, 2027, 199, 1233, 1231, 1229, 1226, 217, 1223, 1241, 2078, 2076, 584, 555, 554, 552, 550, 2282, 562, 1586, 507, 506, 504, 502, 2257, 499, 2254, 515, 1563, 1561, 445, 443, 441, 2219, 438, 2216, 435, 2212, 460, 454, 475, 1517, 1515, 1512, 2447, 798, 797, 2422, 2419, 770, 768, 766, 2383, 2380, 2376, 721, 719, 717, 714, 731, 1714, 2602, 2582, 2580, 2548, 2546, 2543, 923, 921, 2717, 2706, 2705, 2683, 2682, 2680, 1771, 1752, 1750, 1733, 1732, 1731, 1735, 1814, 1707, 1670, 1668, 1631, 1629, 1626, 1634, 1599, 1598, 1596, 1594, 1603, 1601, 2326, 1772, 1753, 1751, 1581, 1554, 1552, 1504, 1501, 1498, 1509, 1442, 1437, 1434, 401, 1448, 1445, 2206, 1392, 1391, 1389, 1387, 1384, 359, 1399, 1397, 1394, 1404, 2171, 2170, 1708, 1672, 1669, 619, 1632, 1630, 1628, 1773, 1378, 1363, 1361, 1333, 1328, 1336, 1286, 1281, 1278, 248, 1292, 1289, 2111, 1218, 1216, 1210, 197, 1206, 193, 1228, 1225, 1221, 1236, 2073, 2071, 1151, 1150, 1148, 1146, 152, 1143, 149, 1140, 145, 1161, 1159, 1156, 1153, 158, 1169, 1166, 2017, 2016, 2014, 2019, 1582, 510, 1556, 1553, 452, 448, 1506, 1500, 394, 391, 387, 1443, 1441, 1439, 1436, 1450, 2207, 765, 716, 713, 1709, 662, 660, 657, 1673, 1671, 916, 914, 879, 878, 877, 882, 1135, 1134, 1121, 1120, 1118, 1123, 1097, 1096, 1094, 1092, 103, 1101, 1099, 1979, 1059, 1058, 1056, 1054, 77, 1051, 74, 1066, 1064, 1061, 1071, 1964, 1963, 1007, 1006, 1004, 1002, 999, 41, 996, 37, 1017, 1015, 1012, 1009, 52, 1025, 1022, 1936, 1935, 1933, 1938, 942, 940, 938, 935, 932, 5, 2, 955, 953, 950, 947, 18, 943, 15, 965, 962, 958, 1895, 1894, 1892, 1890, 973, 1899, 1897, 1379, 325, 1364, 1362, 288, 285, 1334, 1332, 1330, 241, 238, 234, 1287, 1285, 1283, 1280, 1294, 2112, 188, 185, 181, 178, 2028, 1219, 1217, 1215, 1212, 200, 1209, 1227, 2074, 2072, 583, 553, 551, 1583, 505, 503, 500, 513, 1557, 1555, 444, 442, 439, 436, 2213, 455, 451, 1507, 1505, 1502, 796, 763, 762, 760, 767, 711, 710, 708, 706, 2377, 718, 715, 1710, 2544, 917, 915, 2681, 1627, 1597, 1595, 2325, 1769, 1749, 1747, 1499, 1438, 1435, 2204, 1390, 1388, 1385, 1395, 2169, 2167, 1704, 1665, 1662, 1625, 1623, 1620, 1770, 1329, 1282, 1279, 2109, 1214, 1207, 1222, 2068, 2065, 1149, 1147, 1144, 1141, 146, 1157, 1154, 2013, 2011, 2008, 2015, 1579, 1549, 1546, 1495, 1487, 1433, 1431, 1428, 1425, 388, 1440, 2205, 1705, 658, 1667, 1664, 1119, 1095, 1093, 1978, 1057, 1055, 1052, 1062, 1962, 1960, 1005, 1003, 1e3, 997, 38, 1013, 1010, 1932, 1930, 1927, 1934, 941, 939, 936, 933, 6, 930, 3, 951, 948, 944, 1889, 1887, 1884, 1881, 959, 1893, 1891, 35, 1377, 1360, 1358, 1327, 1325, 1322, 1331, 1277, 1275, 1272, 1269, 235, 1284, 2110, 1205, 1204, 1201, 1198, 182, 1195, 179, 1213, 2070, 2067, 1580, 501, 1551, 1548, 440, 437, 1497, 1494, 1490, 1503, 761, 709, 707, 1706, 913, 912, 2198, 1386, 2164, 2161, 1621, 1766, 2103, 1208, 2058, 2054, 1145, 1142, 2005, 2002, 1999, 2009, 1488, 1429, 1426, 2200, 1698, 1659, 1656, 1975, 1053, 1957, 1954, 1001, 998, 1924, 1921, 1918, 1928, 937, 934, 931, 1879, 1876, 1873, 1870, 945, 1885, 1882, 1323, 1273, 1270, 2105, 1202, 1199, 1196, 1211, 2061, 2057, 1576, 1543, 1540, 1484, 1481, 1478, 1491, 1700]);\r\n    class Be {\r\n        constructor(t, e) {\r\n            this.bits = t, this.points = e\r\n        }\r\n        getBits() {\r\n            return this.bits\r\n        }\r\n        getPoints() {\r\n            return this.points\r\n        }\r\n    }\r\n    class Pe {\r\n        static detectMultiple(t, e, r) {\r\n            let n = t.getBlackMatrix(),\r\n                    i = Pe.detect(r, n);\r\n            return i.length || ((n = n.clone()).rotate180(), i = Pe.detect(r, n)), new Be(n, i)\r\n        }\r\n        static detect(t, e) {\r\n            const r = new Array;\r\n            let n = 0,\r\n                    i = 0,\r\n                    s = !1;\r\n            for (; n < e.getHeight();) {\r\n                const o = Pe.findVertices(e, n, i);\r\n                if (null != o[0] || null != o[3]) {\r\n                    if (s = !0, r.push(o), !t) break;\r\n                    null != o[2] ? (i = Math.trunc(o[2].getX()), n = Math.trunc(o[2].getY())) : (i = Math.trunc(o[4].getX()), n = Math.trunc(o[4].getY()))\r\n                } else {\r\n                    if (!s) break;\r\n                    s = !1, i = 0;\r\n                    for (const t of r) null != t[1] && (n = Math.trunc(Math.max(n, t[1].getY()))), null != t[3] && (n = Math.max(n, Math.trunc(t[3].getY())));\r\n                    n += Pe.ROW_STEP\r\n                }\r\n            }\r\n            return r\r\n        }\r\n        static findVertices(t, e, r) {\r\n            const n = t.getHeight(),\r\n                    i = t.getWidth(),\r\n                    s = new Array(8);\r\n            return Pe.copyToResult(s, Pe.findRowsWithPattern(t, n, i, e, r, Pe.START_PATTERN), Pe.INDEXES_START_PATTERN), null != s[4] && (r = Math.trunc(s[4].getX()), e = Math.trunc(s[4].getY())), Pe.copyToResult(s, Pe.findRowsWithPattern(t, n, i, e, r, Pe.STOP_PATTERN), Pe.INDEXES_STOP_PATTERN), s\r\n        }\r\n        static copyToResult(t, e, r) {\r\n            for (let n = 0; n < r.length; n++) t[r[n]] = e[n]\r\n        }\r\n        static findRowsWithPattern(t, e, r, n, i, s) {\r\n            const o = new Array(4);\r\n            let a = !1;\r\n            const l = new Int32Array(s.length);\r\n            for (; n < e; n += Pe.ROW_STEP) {\r\n                let e = Pe.findGuardPattern(t, i, n, r, !1, s, l);\r\n                if (null != e) {\r\n                    for (; n > 0;) {\r\n                        const o = Pe.findGuardPattern(t, i, --n, r, !1, s, l);\r\n                        if (null == o) {\r\n                            n++;\r\n                            break\r\n                        }\r\n                        e = o\r\n                    }\r\n                    o[0] = new rt(e[0], n), o[1] = new rt(e[1], n), a = !0;\r\n                    break\r\n                }\r\n            }\r\n            let h = n + 1;\r\n            if (a) {\r\n                let n = 0,\r\n                        i = Int32Array.from([Math.trunc(o[0].getX()), Math.trunc(o[1].getX())]);\r\n                for (; h < e; h++) {\r\n                    const e = Pe.findGuardPattern(t, i[0], h, r, !1, s, l);\r\n                    if (null != e && Math.abs(i[0] - e[0]) < Pe.MAX_PATTERN_DRIFT && Math.abs(i[1] - e[1]) < Pe.MAX_PATTERN_DRIFT) i = e, n = 0;\r\n                    else {\r\n                        if (n > Pe.SKIPPED_ROW_COUNT_MAX) break;\r\n                        n++\r\n                    }\r\n                }\r\n                h -= n + 1, o[2] = new rt(i[0], h), o[3] = new rt(i[1], h)\r\n            }\r\n            return h - n < Pe.BARCODE_MIN_HEIGHT && g.fill(o, null), o\r\n        }\r\n        static findGuardPattern(t, e, r, n, i, s, o) {\r\n            g.fillWithin(o, 0, o.length, 0);\r\n            let a = e,\r\n                    l = 0;\r\n            for (; t.get(a, r) && a > 0 && l++ < Pe.MAX_PIXEL_DRIFT;) a--;\r\n            let h = a,\r\n                    u = 0,\r\n                    d = s.length;\r\n            for (let e = i; h < n; h++) {\r\n                if (t.get(h, r) !== e) o[u]++;\r\n                else {\r\n                    if (u === d - 1) {\r\n                        if (Pe.patternMatchVariance(o, s, Pe.MAX_INDIVIDUAL_VARIANCE) < Pe.MAX_AVG_VARIANCE) return new Int32Array([a, h]);\r\n                        a += o[0] + o[1], c.arraycopy(o, 2, o, 0, u - 1), o[u - 1] = 0, o[u] = 0, u--\r\n                    } else u++;\r\n                    o[u] = 1, e = !e\r\n                }\r\n            }\r\n            return u === d - 1 && Pe.patternMatchVariance(o, s, Pe.MAX_INDIVIDUAL_VARIANCE) < Pe.MAX_AVG_VARIANCE ? new Int32Array([a, h - 1]) : null\r\n        }\r\n        static patternMatchVariance(t, e, r) {\r\n            let n = t.length,\r\n                    i = 0,\r\n                    s = 0;\r\n            for (let r = 0; r < n; r++) i += t[r], s += e[r];\r\n            if (i < s) return 1 / 0;\r\n            let o = i / s;\r\n            r *= o;\r\n            let a = 0;\r\n            for (let i = 0; i < n; i++) {\r\n                let n = t[i],\r\n                        s = e[i] * o,\r\n                        l = n > s ? n - s : s - n;\r\n                if (l > r) return 1 / 0;\r\n                a += l\r\n            }\r\n            return a / i\r\n        }\r\n    }\r\n    Pe.INDEXES_START_PATTERN = Int32Array.from([0, 4, 1, 5]), Pe.INDEXES_STOP_PATTERN = Int32Array.from([6, 2, 7, 3]), Pe.MAX_AVG_VARIANCE = .42, Pe.MAX_INDIVIDUAL_VARIANCE = .8, Pe.START_PATTERN = Int32Array.from([8, 1, 1, 1, 1, 1, 1, 3]), Pe.STOP_PATTERN = Int32Array.from([7, 1, 1, 3, 1, 1, 1, 2, 1]), Pe.MAX_PIXEL_DRIFT = 3, Pe.MAX_PATTERN_DRIFT = 5, Pe.SKIPPED_ROW_COUNT_MAX = 25, Pe.ROW_STEP = 5, Pe.BARCODE_MIN_HEIGHT = 10;\r\n    class Le {\r\n        constructor(t, e) {\r\n            if (0 === e.length) throw new o;\r\n            this.field = t;\r\n            let r = e.length;\r\n            if (r > 1 && 0 === e[0]) {\r\n                let t = 1;\r\n                for (; t < r && 0 === e[t];) t++;\r\n                t === r ? this.coefficients = new Int32Array([0]) : (this.coefficients = new Int32Array(r - t), c.arraycopy(e, t, this.coefficients, 0, this.coefficients.length))\r\n            } else this.coefficients = e\r\n        }\r\n        getCoefficients() {\r\n            return this.coefficients\r\n        }\r\n        getDegree() {\r\n            return this.coefficients.length - 1\r\n        }\r\n        isZero() {\r\n            return 0 === this.coefficients[0]\r\n        }\r\n        getCoefficient(t) {\r\n            return this.coefficients[this.coefficients.length - 1 - t]\r\n        }\r\n        evaluateAt(t) {\r\n            if (0 === t) return this.getCoefficient(0);\r\n            if (1 === t) {\r\n                let t = 0;\r\n                for (let e of this.coefficients) t = this.field.add(t, e);\r\n                return t\r\n            }\r\n            let e = this.coefficients[0],\r\n                    r = this.coefficients.length;\r\n            for (let n = 1; n < r; n++) e = this.field.add(this.field.multiply(t, e), this.coefficients[n]);\r\n            return e\r\n        }\r\n        add(t) {\r\n            if (!this.field.equals(t.field)) throw new o(\"ModulusPolys do not have same ModulusGF field\");\r\n            if (this.isZero()) return t;\r\n            if (t.isZero()) return this;\r\n            let e = this.coefficients,\r\n                    r = t.coefficients;\r\n            if (e.length > r.length) {\r\n                let t = e;\r\n                e = r, r = t\r\n            }\r\n            let n = new Int32Array(r.length),\r\n                    i = r.length - e.length;\r\n            c.arraycopy(r, 0, n, 0, i);\r\n            for (let t = i; t < r.length; t++) n[t] = this.field.add(e[t - i], r[t]);\r\n            return new Le(this.field, n)\r\n        }\r\n        subtract(t) {\r\n            if (!this.field.equals(t.field)) throw new o(\"ModulusPolys do not have same ModulusGF field\");\r\n            return t.isZero() ? this : this.add(t.negative())\r\n        }\r\n        multiply(t) {\r\n            return t instanceof Le ? this.multiplyOther(t) : this.multiplyScalar(t)\r\n        }\r\n        multiplyOther(t) {\r\n            if (!this.field.equals(t.field)) throw new o(\"ModulusPolys do not have same ModulusGF field\");\r\n            if (this.isZero() || t.isZero()) return new Le(this.field, new Int32Array([0]));\r\n            let e = this.coefficients,\r\n                    r = e.length,\r\n                    n = t.coefficients,\r\n                    i = n.length,\r\n                    s = new Int32Array(r + i - 1);\r\n            for (let t = 0; t < r; t++) {\r\n                let r = e[t];\r\n                for (let e = 0; e < i; e++) s[t + e] = this.field.add(s[t + e], this.field.multiply(r, n[e]))\r\n            }\r\n            return new Le(this.field, s)\r\n        }\r\n        negative() {\r\n            let t = this.coefficients.length,\r\n                    e = new Int32Array(t);\r\n            for (let r = 0; r < t; r++) e[r] = this.field.subtract(0, this.coefficients[r]);\r\n            return new Le(this.field, e)\r\n        }\r\n        multiplyScalar(t) {\r\n            if (0 === t) return new Le(this.field, new Int32Array([0]));\r\n            if (1 === t) return this;\r\n            let e = this.coefficients.length,\r\n                    r = new Int32Array(e);\r\n            for (let n = 0; n < e; n++) r[n] = this.field.multiply(this.coefficients[n], t);\r\n            return new Le(this.field, r)\r\n        }\r\n        multiplyByMonomial(t, e) {\r\n            if (t < 0) throw new o;\r\n            if (0 === e) return new Le(this.field, new Int32Array([0]));\r\n            let r = this.coefficients.length,\r\n                    n = new Int32Array(r + t);\r\n            for (let t = 0; t < r; t++) n[t] = this.field.multiply(this.coefficients[t], e);\r\n            return new Le(this.field, n)\r\n        }\r\n        toString() {\r\n            let t = new p;\r\n            for (let e = this.getDegree(); e >= 0; e--) {\r\n                let r = this.getCoefficient(e);\r\n                0 !== r && (r < 0 ? (t.append(\" - \"), r = -r) : t.length() > 0 && t.append(\" + \"), 0 !== e && 1 === r || t.append(r), 0 !== e && (1 === e ? t.append(\"x\") : (t.append(\"x^\"), t.append(e))))\r\n            }\r\n            return t.toString()\r\n        }\r\n    }\r\n    class Fe {\r\n        add(t, e) {\r\n            return (t + e) % this.modulus\r\n        }\r\n        subtract(t, e) {\r\n            return (this.modulus + t - e) % this.modulus\r\n        }\r\n        exp(t) {\r\n            return this.expTable[t]\r\n        }\r\n        log(t) {\r\n            if (0 === t) throw new o;\r\n            return this.logTable[t]\r\n        }\r\n        inverse(t) {\r\n            if (0 === t) throw new K;\r\n            return this.expTable[this.modulus - this.logTable[t] - 1]\r\n        }\r\n        multiply(t, e) {\r\n            return 0 === t || 0 === e ? 0 : this.expTable[(this.logTable[t] + this.logTable[e]) % (this.modulus - 1)]\r\n        }\r\n        getSize() {\r\n            return this.modulus\r\n        }\r\n        equals(t) {\r\n            return t === this\r\n        }\r\n    }\r\n    class ve extends Fe {\r\n        constructor(t, e) {\r\n            super(), this.modulus = t, this.expTable = new Int32Array(t), this.logTable = new Int32Array(t);\r\n            let r = 1;\r\n            for (let n = 0; n < t; n++) this.expTable[n] = r, r = r * e % t;\r\n            for (let e = 0; e < t - 1; e++) this.logTable[this.expTable[e]] = e;\r\n            this.zero = new Le(this, new Int32Array([0])), this.one = new Le(this, new Int32Array([1]))\r\n        }\r\n        getZero() {\r\n            return this.zero\r\n        }\r\n        getOne() {\r\n            return this.one\r\n        }\r\n        buildMonomial(t, e) {\r\n            if (t < 0) throw new o;\r\n            if (0 === e) return this.zero;\r\n            let r = new Int32Array(t + 1);\r\n            return r[0] = e, new Le(this, r)\r\n        }\r\n    }\r\n    ve.PDF417_GF = new ve(be.NUMBER_OF_CODEWORDS, 3);\r\n    class ke {\r\n        constructor() {\r\n            this.field = ve.PDF417_GF\r\n        }\r\n        decode(t, e, r) {\r\n            let n = new Le(this.field, t),\r\n                    i = new Int32Array(e),\r\n                    s = !1;\r\n            for (let t = e; t > 0; t--) {\r\n                let r = n.evaluateAt(this.field.exp(t));\r\n                i[e - t] = r, 0 !== r && (s = !0)\r\n            }\r\n            if (!s) return 0;\r\n            let o = this.field.getOne();\r\n            if (null != r)\r\n                for (const e of r) {\r\n                    let r = this.field.exp(t.length - 1 - e),\r\n                            n = new Le(this.field, new Int32Array([this.field.subtract(0, r), 1]));\r\n                    o = o.multiply(n)\r\n                }\r\n            let a = new Le(this.field, i),\r\n                    h = this.runEuclideanAlgorithm(this.field.buildMonomial(e, 1), a, e),\r\n                    c = h[0],\r\n                    u = h[1],\r\n                    d = this.findErrorLocations(c),\r\n                    g = this.findErrorMagnitudes(u, c, d);\r\n            for (let e = 0; e < d.length; e++) {\r\n                let r = t.length - 1 - this.field.log(d[e]);\r\n                if (r < 0) throw l.getChecksumInstance();\r\n                t[r] = this.field.subtract(t[r], g[e])\r\n            }\r\n            return d.length\r\n        }\r\n        runEuclideanAlgorithm(t, e, r) {\r\n            if (t.getDegree() < e.getDegree()) {\r\n                let r = t;\r\n                t = e, e = r\r\n            }\r\n            let n = t,\r\n                    i = e,\r\n                    s = this.field.getZero(),\r\n                    o = this.field.getOne();\r\n            for (; i.getDegree() >= Math.round(r / 2);) {\r\n                let t = n,\r\n                        e = s;\r\n                if (s = o, (n = i).isZero()) throw l.getChecksumInstance();\r\n                i = t;\r\n                let r = this.field.getZero(),\r\n                        a = n.getCoefficient(n.getDegree()),\r\n                        h = this.field.inverse(a);\r\n                for (; i.getDegree() >= n.getDegree() && !i.isZero();) {\r\n                    let t = i.getDegree() - n.getDegree(),\r\n                            e = this.field.multiply(i.getCoefficient(i.getDegree()), h);\r\n                    r = r.add(this.field.buildMonomial(t, e)), i = i.subtract(n.multiplyByMonomial(t, e))\r\n                }\r\n                o = r.multiply(s).subtract(e).negative()\r\n            }\r\n            let a = o.getCoefficient(0);\r\n            if (0 === a) throw l.getChecksumInstance();\r\n            let h = this.field.inverse(a);\r\n            return [o.multiply(h), i.multiply(h)]\r\n        }\r\n        findErrorLocations(t) {\r\n            let e = t.getDegree(),\r\n                    r = new Int32Array(e),\r\n                    n = 0;\r\n            for (let i = 1; i < this.field.getSize() && n < e; i++) 0 === t.evaluateAt(i) && (r[n] = this.field.inverse(i), n++);\r\n            if (n !== e) throw l.getChecksumInstance();\r\n            return r\r\n        }\r\n        findErrorMagnitudes(t, e, r) {\r\n            let n = e.getDegree(),\r\n                    i = new Int32Array(n);\r\n            for (let t = 1; t <= n; t++) i[n - t] = this.field.multiply(t, e.getCoefficient(t));\r\n            let s = new Le(this.field, i),\r\n                    o = r.length,\r\n                    a = new Int32Array(o);\r\n            for (let e = 0; e < o; e++) {\r\n                let n = this.field.inverse(r[e]),\r\n                        i = this.field.subtract(0, t.evaluateAt(n)),\r\n                        o = this.field.inverse(s.evaluateAt(n));\r\n                a[e] = this.field.multiply(i, o)\r\n            }\r\n            return a\r\n        }\r\n    }\r\n    class xe {\r\n        constructor(t, e, r, n, i) {\r\n            t instanceof xe ? this.constructor_2(t) : this.constructor_1(t, e, r, n, i)\r\n        }\r\n        constructor_1(t, e, r, n, i) {\r\n            const s = null == e || null == r,\r\n                    o = null == n || null == i;\r\n            if (s && o) throw new R;\r\n            s ? (e = new rt(0, n.getY()), r = new rt(0, i.getY())) : o && (n = new rt(t.getWidth() - 1, e.getY()), i = new rt(t.getWidth() - 1, r.getY())), this.image = t, this.topLeft = e, this.bottomLeft = r, this.topRight = n, this.bottomRight = i, this.minX = Math.trunc(Math.min(e.getX(), r.getX())), this.maxX = Math.trunc(Math.max(n.getX(), i.getX())), this.minY = Math.trunc(Math.min(e.getY(), n.getY())), this.maxY = Math.trunc(Math.max(r.getY(), i.getY()))\r\n        }\r\n        constructor_2(t) {\r\n            this.image = t.image, this.topLeft = t.getTopLeft(), this.bottomLeft = t.getBottomLeft(), this.topRight = t.getTopRight(), this.bottomRight = t.getBottomRight(), this.minX = t.getMinX(), this.maxX = t.getMaxX(), this.minY = t.getMinY(), this.maxY = t.getMaxY()\r\n        }\r\n        static merge(t, e) {\r\n            return null == t ? e : null == e ? t : new xe(t.image, t.topLeft, t.bottomLeft, e.topRight, e.bottomRight)\r\n        }\r\n        addMissingRows(t, e, r) {\r\n            let n = this.topLeft,\r\n                    i = this.bottomLeft,\r\n                    s = this.topRight,\r\n                    o = this.bottomRight;\r\n            if (t > 0) {\r\n                let e = r ? this.topLeft : this.topRight,\r\n                        i = Math.trunc(e.getY() - t);\r\n                i < 0 && (i = 0);\r\n                let o = new rt(e.getX(), i);\r\n                r ? n = o : s = o\r\n            }\r\n            if (e > 0) {\r\n                let t = r ? this.bottomLeft : this.bottomRight,\r\n                        n = Math.trunc(t.getY() + e);\r\n                n >= this.image.getHeight() && (n = this.image.getHeight() - 1);\r\n                let s = new rt(t.getX(), n);\r\n                r ? i = s : o = s\r\n            }\r\n            return new xe(this.image, n, i, s, o)\r\n        }\r\n        getMinX() {\r\n            return this.minX\r\n        }\r\n        getMaxX() {\r\n            return this.maxX\r\n        }\r\n        getMinY() {\r\n            return this.minY\r\n        }\r\n        getMaxY() {\r\n            return this.maxY\r\n        }\r\n        getTopLeft() {\r\n            return this.topLeft\r\n        }\r\n        getTopRight() {\r\n            return this.topRight\r\n        }\r\n        getBottomLeft() {\r\n            return this.bottomLeft\r\n        }\r\n        getBottomRight() {\r\n            return this.bottomRight\r\n        }\r\n    }\r\n    class Ve {\r\n        constructor(t, e, r, n) {\r\n            this.columnCount = t, this.errorCorrectionLevel = n, this.rowCountUpperPart = e, this.rowCountLowerPart = r, this.rowCount = e + r\r\n        }\r\n        getColumnCount() {\r\n            return this.columnCount\r\n        }\r\n        getErrorCorrectionLevel() {\r\n            return this.errorCorrectionLevel\r\n        }\r\n        getRowCount() {\r\n            return this.rowCount\r\n        }\r\n        getRowCountUpperPart() {\r\n            return this.rowCountUpperPart\r\n        }\r\n        getRowCountLowerPart() {\r\n            return this.rowCountLowerPart\r\n        }\r\n    }\r\n    class Ue {\r\n        constructor() {\r\n            this.buffer = \"\"\r\n        }\r\n        static form(t, e) {\r\n            let r = -1;\r\n            return t.replace(/%(-)?(0?[0-9]+)?([.][0-9]+)?([#][0-9]+)?([scfpexd%])/g, function(t, n, i, s, o, a) {\r\n                if (\"%%\" === t) return \"%\";\r\n                if (void 0 === e[++r]) return;\r\n                t = s ? parseInt(s.substr(1)) : void 0;\r\n                let l, h = o ? parseInt(o.substr(1)) : void 0;\r\n                switch (a) {\r\n                    case \"s\":\r\n                        l = e[r];\r\n                        break;\r\n                    case \"c\":\r\n                        l = e[r][0];\r\n                        break;\r\n                    case \"f\":\r\n                        l = parseFloat(e[r]).toFixed(t);\r\n                        break;\r\n                    case \"p\":\r\n                        l = parseFloat(e[r]).toPrecision(t);\r\n                        break;\r\n                    case \"e\":\r\n                        l = parseFloat(e[r]).toExponential(t);\r\n                        break;\r\n                    case \"x\":\r\n                        l = parseInt(e[r]).toString(h || 16);\r\n                        break;\r\n                    case \"d\":\r\n                        l = parseFloat(parseInt(e[r], h || 10).toPrecision(t)).toFixed(0)\r\n                }\r\n                l = \"object\" == typeof l ? JSON.stringify(l) : (+l).toString(h);\r\n                let c = parseInt(i),\r\n                        u = i && i[0] + \"\" == \"0\" ? \"0\" : \" \";\r\n                for (; l.length < c;) l = void 0 !== n ? l + u : u + l;\r\n                return l\r\n            })\r\n        }\r\n        format(t, ...e) {\r\n            this.buffer += Ue.form(t, e)\r\n        }\r\n        toString() {\r\n            return this.buffer\r\n        }\r\n    }\r\n    class He {\r\n        constructor(t) {\r\n            this.boundingBox = new xe(t), this.codewords = new Array(t.getMaxY() - t.getMinY() + 1)\r\n        }\r\n        getCodewordNearby(t) {\r\n            let e = this.getCodeword(t);\r\n            if (null != e) return e;\r\n            for (let r = 1; r < He.MAX_NEARBY_DISTANCE; r++) {\r\n                let n = this.imageRowToCodewordIndex(t) - r;\r\n                if (n >= 0 && null != (e = this.codewords[n])) return e;\r\n                if ((n = this.imageRowToCodewordIndex(t) + r) < this.codewords.length && null != (e = this.codewords[n])) return e\r\n            }\r\n            return null\r\n        }\r\n        imageRowToCodewordIndex(t) {\r\n            return t - this.boundingBox.getMinY()\r\n        }\r\n        setCodeword(t, e) {\r\n            this.codewords[this.imageRowToCodewordIndex(t)] = e\r\n        }\r\n        getCodeword(t) {\r\n            return this.codewords[this.imageRowToCodewordIndex(t)]\r\n        }\r\n        getBoundingBox() {\r\n            return this.boundingBox\r\n        }\r\n        getCodewords() {\r\n            return this.codewords\r\n        }\r\n        toString() {\r\n            const t = new Ue;\r\n            let e = 0;\r\n            for (const r of this.codewords) null != r ? t.format(\"%3d: %3d|%3d%n\", e++, r.getRowNumber(), r.getValue()) : t.format(\"%3d:    |   %n\", e++);\r\n            return t.toString()\r\n        }\r\n    }\r\n    He.MAX_NEARBY_DISTANCE = 5;\r\n    class Ge {\r\n        constructor() {\r\n            this.values = new Map\r\n        }\r\n        setValue(t) {\r\n            t = Math.trunc(t);\r\n            let e = this.values.get(t);\r\n            null == e && (e = 0), e++, this.values.set(t, e)\r\n        }\r\n        getValue() {\r\n            let t = -1,\r\n                    e = new Array;\r\n            for (const [r, n] of this.values.entries()) {\r\n                const i = {\r\n                    getKey: () => r,\r\n                    getValue: () => n\r\n                };\r\n                i.getValue() > t ? (t = i.getValue(), (e = []).push(i.getKey())) : i.getValue() === t && e.push(i.getKey())\r\n            }\r\n            return be.toIntArray(e)\r\n        }\r\n        getConfidence(t) {\r\n            return this.values.get(t)\r\n        }\r\n    }\r\n    class Xe extends He {\r\n        constructor(t, e) {\r\n            super(t), this._isLeft = e\r\n        }\r\n        setRowNumbers() {\r\n            for (let t of this.getCodewords()) null != t && t.setRowNumberAsRowIndicatorColumn()\r\n        }\r\n        adjustCompleteIndicatorColumnRowNumbers(t) {\r\n            let e = this.getCodewords();\r\n            this.setRowNumbers(), this.removeIncorrectCodewords(e, t);\r\n            let r = this.getBoundingBox(),\r\n                    n = this._isLeft ? r.getTopLeft() : r.getTopRight(),\r\n                    i = this._isLeft ? r.getBottomLeft() : r.getBottomRight(),\r\n                    s = this.imageRowToCodewordIndex(Math.trunc(n.getY())),\r\n                    o = this.imageRowToCodewordIndex(Math.trunc(i.getY())),\r\n                    a = -1,\r\n                    l = 1,\r\n                    h = 0;\r\n            for (let r = s; r < o; r++) {\r\n                if (null == e[r]) continue;\r\n                let n = e[r],\r\n                        i = n.getRowNumber() - a;\r\n                if (0 === i) h++;\r\n                else if (1 === i) l = Math.max(l, h), h = 1, a = n.getRowNumber();\r\n                else if (i < 0 || n.getRowNumber() >= t.getRowCount() || i > r) e[r] = null;\r\n                else {\r\n                    let t, s = (t = l > 2 ? (l - 2) * i : i) >= r;\r\n                    for (let n = 1; n <= t && !s; n++) s = null != e[r - n];\r\n                    s ? e[r] = null : (a = n.getRowNumber(), h = 1)\r\n                }\r\n            }\r\n        }\r\n        getRowHeights() {\r\n            let t = this.getBarcodeMetadata();\r\n            if (null == t) return null;\r\n            this.adjustIncompleteIndicatorColumnRowNumbers(t);\r\n            let e = new Int32Array(t.getRowCount());\r\n            for (let t of this.getCodewords())\r\n                if (null != t) {\r\n                    let r = t.getRowNumber();\r\n                    if (r >= e.length) continue;\r\n                    e[r]++\r\n                } return e\r\n        }\r\n        adjustIncompleteIndicatorColumnRowNumbers(t) {\r\n            let e = this.getBoundingBox(),\r\n                    r = this._isLeft ? e.getTopLeft() : e.getTopRight(),\r\n                    n = this._isLeft ? e.getBottomLeft() : e.getBottomRight(),\r\n                    i = this.imageRowToCodewordIndex(Math.trunc(r.getY())),\r\n                    s = this.imageRowToCodewordIndex(Math.trunc(n.getY())),\r\n                    o = this.getCodewords(),\r\n                    a = -1;\r\n            for (let e = i; e < s; e++) {\r\n                if (null == o[e]) continue;\r\n                let r = o[e];\r\n                r.setRowNumberAsRowIndicatorColumn();\r\n                let n = r.getRowNumber() - a;\r\n                0 === n || (1 === n ? a = r.getRowNumber() : r.getRowNumber() >= t.getRowCount() ? o[e] = null : a = r.getRowNumber())\r\n            }\r\n        }\r\n        getBarcodeMetadata() {\r\n            let t = this.getCodewords(),\r\n                    e = new Ge,\r\n                    r = new Ge,\r\n                    n = new Ge,\r\n                    i = new Ge;\r\n            for (let s of t) {\r\n                if (null == s) continue;\r\n                s.setRowNumberAsRowIndicatorColumn();\r\n                let t = s.getValue() % 30,\r\n                        o = s.getRowNumber();\r\n                switch (this._isLeft || (o += 2), o % 3) {\r\n                    case 0:\r\n                        r.setValue(3 * t + 1);\r\n                        break;\r\n                    case 1:\r\n                        i.setValue(t / 3), n.setValue(t % 3);\r\n                        break;\r\n                    case 2:\r\n                        e.setValue(t + 1)\r\n                }\r\n            }\r\n            if (0 === e.getValue().length || 0 === r.getValue().length || 0 === n.getValue().length || 0 === i.getValue().length || e.getValue()[0] < 1 || r.getValue()[0] + n.getValue()[0] < be.MIN_ROWS_IN_BARCODE || r.getValue()[0] + n.getValue()[0] > be.MAX_ROWS_IN_BARCODE) return null;\r\n            let s = new Ve(e.getValue()[0], r.getValue()[0], n.getValue()[0], i.getValue()[0]);\r\n            return this.removeIncorrectCodewords(t, s), s\r\n        }\r\n        removeIncorrectCodewords(t, e) {\r\n            for (let r = 0; r < t.length; r++) {\r\n                let n = t[r];\r\n                if (null == t[r]) continue;\r\n                let i = n.getValue() % 30,\r\n                        s = n.getRowNumber();\r\n                if (s > e.getRowCount()) t[r] = null;\r\n                else switch (this._isLeft || (s += 2), s % 3) {\r\n                    case 0:\r\n                        3 * i + 1 !== e.getRowCountUpperPart() && (t[r] = null);\r\n                        break;\r\n                    case 1:\r\n                        Math.trunc(i / 3) === e.getErrorCorrectionLevel() && i % 3 === e.getRowCountLowerPart() || (t[r] = null);\r\n                        break;\r\n                    case 2:\r\n                        i + 1 !== e.getColumnCount() && (t[r] = null)\r\n                }\r\n            }\r\n        }\r\n        isLeft() {\r\n            return this._isLeft\r\n        }\r\n        toString() {\r\n            return \"IsLeft: \" + this._isLeft + \"\\n\" + super.toString()\r\n        }\r\n    }\r\n    class We {\r\n        constructor(t, e) {\r\n            this.ADJUST_ROW_NUMBER_SKIP = 2, this.barcodeMetadata = t, this.barcodeColumnCount = t.getColumnCount(), this.boundingBox = e, this.detectionResultColumns = new Array(this.barcodeColumnCount + 2)\r\n        }\r\n        getDetectionResultColumns() {\r\n            this.adjustIndicatorColumnRowNumbers(this.detectionResultColumns[0]), this.adjustIndicatorColumnRowNumbers(this.detectionResultColumns[this.barcodeColumnCount + 1]);\r\n            let t, e = be.MAX_CODEWORDS_IN_BARCODE;\r\n            do {\r\n                t = e, e = this.adjustRowNumbersAndGetCount()\r\n            } while (e > 0 && e < t);\r\n            return this.detectionResultColumns\r\n        }\r\n        adjustIndicatorColumnRowNumbers(t) {\r\n            null != t && t.adjustCompleteIndicatorColumnRowNumbers(this.barcodeMetadata)\r\n        }\r\n        adjustRowNumbersAndGetCount() {\r\n            let t = this.adjustRowNumbersByRow();\r\n            if (0 === t) return 0;\r\n            for (let t = 1; t < this.barcodeColumnCount + 1; t++) {\r\n                let e = this.detectionResultColumns[t].getCodewords();\r\n                for (let r = 0; r < e.length; r++) null != e[r] && (e[r].hasValidRowNumber() || this.adjustRowNumbers(t, r, e))\r\n            }\r\n            return t\r\n        }\r\n        adjustRowNumbersByRow() {\r\n            return this.adjustRowNumbersFromBothRI(), this.adjustRowNumbersFromLRI() + this.adjustRowNumbersFromRRI()\r\n        }\r\n        adjustRowNumbersFromBothRI() {\r\n            if (null == this.detectionResultColumns[0] || null == this.detectionResultColumns[this.barcodeColumnCount + 1]) return;\r\n            let t = this.detectionResultColumns[0].getCodewords(),\r\n                    e = this.detectionResultColumns[this.barcodeColumnCount + 1].getCodewords();\r\n            for (let r = 0; r < t.length; r++)\r\n                if (null != t[r] && null != e[r] && t[r].getRowNumber() === e[r].getRowNumber())\r\n                    for (let e = 1; e <= this.barcodeColumnCount; e++) {\r\n                        let n = this.detectionResultColumns[e].getCodewords()[r];\r\n                        null != n && (n.setRowNumber(t[r].getRowNumber()), n.hasValidRowNumber() || (this.detectionResultColumns[e].getCodewords()[r] = null))\r\n                    }\r\n        }\r\n        adjustRowNumbersFromRRI() {\r\n            if (null == this.detectionResultColumns[this.barcodeColumnCount + 1]) return 0;\r\n            let t = 0,\r\n                    e = this.detectionResultColumns[this.barcodeColumnCount + 1].getCodewords();\r\n            for (let r = 0; r < e.length; r++) {\r\n                if (null == e[r]) continue;\r\n                let n = e[r].getRowNumber(),\r\n                        i = 0;\r\n                for (let e = this.barcodeColumnCount + 1; e > 0 && i < this.ADJUST_ROW_NUMBER_SKIP; e--) {\r\n                    let s = this.detectionResultColumns[e].getCodewords()[r];\r\n                    null != s && (i = We.adjustRowNumberIfValid(n, i, s), s.hasValidRowNumber() || t++)\r\n                }\r\n            }\r\n            return t\r\n        }\r\n        adjustRowNumbersFromLRI() {\r\n            if (null == this.detectionResultColumns[0]) return 0;\r\n            let t = 0,\r\n                    e = this.detectionResultColumns[0].getCodewords();\r\n            for (let r = 0; r < e.length; r++) {\r\n                if (null == e[r]) continue;\r\n                let n = e[r].getRowNumber(),\r\n                        i = 0;\r\n                for (let e = 1; e < this.barcodeColumnCount + 1 && i < this.ADJUST_ROW_NUMBER_SKIP; e++) {\r\n                    let s = this.detectionResultColumns[e].getCodewords()[r];\r\n                    null != s && (i = We.adjustRowNumberIfValid(n, i, s), s.hasValidRowNumber() || t++)\r\n                }\r\n            }\r\n            return t\r\n        }\r\n        static adjustRowNumberIfValid(t, e, r) {\r\n            return null == r ? e : (r.hasValidRowNumber() || (r.isValidRowNumber(t) ? (r.setRowNumber(t), e = 0) : ++e), e)\r\n        }\r\n        adjustRowNumbers(t, e, r) {\r\n            let n = r[e],\r\n                    i = this.detectionResultColumns[t - 1].getCodewords(),\r\n                    s = i;\r\n            null != this.detectionResultColumns[t + 1] && (s = this.detectionResultColumns[t + 1].getCodewords());\r\n            let o = new Array(14);\r\n            o[2] = i[e], o[3] = s[e], e > 0 && (o[0] = r[e - 1], o[4] = i[e - 1], o[5] = s[e - 1]), e > 1 && (o[8] = r[e - 2], o[10] = i[e - 2], o[11] = s[e - 2]), e < r.length - 1 && (o[1] = r[e + 1], o[6] = i[e + 1], o[7] = s[e + 1]), e < r.length - 2 && (o[9] = r[e + 2], o[12] = i[e + 2], o[13] = s[e + 2]);\r\n            for (let t of o)\r\n                if (We.adjustRowNumber(n, t)) return\r\n        }\r\n        static adjustRowNumber(t, e) {\r\n            return null != e && (!(!e.hasValidRowNumber() || e.getBucket() !== t.getBucket()) && (t.setRowNumber(e.getRowNumber()), !0))\r\n        }\r\n        getBarcodeColumnCount() {\r\n            return this.barcodeColumnCount\r\n        }\r\n        getBarcodeRowCount() {\r\n            return this.barcodeMetadata.getRowCount()\r\n        }\r\n        getBarcodeECLevel() {\r\n            return this.barcodeMetadata.getErrorCorrectionLevel()\r\n        }\r\n        setBoundingBox(t) {\r\n            this.boundingBox = t\r\n        }\r\n        getBoundingBox() {\r\n            return this.boundingBox\r\n        }\r\n        setDetectionResultColumn(t, e) {\r\n            this.detectionResultColumns[t] = e\r\n        }\r\n        getDetectionResultColumn(t) {\r\n            return this.detectionResultColumns[t]\r\n        }\r\n        toString() {\r\n            let t = this.detectionResultColumns[0];\r\n            null == t && (t = this.detectionResultColumns[this.barcodeColumnCount + 1]);\r\n            let e = new Ue;\r\n            for (let r = 0; r < t.getCodewords().length; r++) {\r\n                e.format(\"CW %3d:\", r);\r\n                for (let t = 0; t < this.barcodeColumnCount + 2; t++) {\r\n                    if (null == this.detectionResultColumns[t]) {\r\n                        e.format(\"    |   \");\r\n                        continue\r\n                    }\r\n                    let n = this.detectionResultColumns[t].getCodewords()[r];\r\n                    null != n ? e.format(\" %3d|%3d\", n.getRowNumber(), n.getValue()) : e.format(\"    |   \")\r\n                }\r\n                e.format(\"%n\")\r\n            }\r\n            return e.toString()\r\n        }\r\n    }\r\n    class ze {\r\n        constructor(t, e, r, n) {\r\n            this.rowNumber = ze.BARCODE_ROW_UNKNOWN, this.startX = Math.trunc(t), this.endX = Math.trunc(e), this.bucket = Math.trunc(r), this.value = Math.trunc(n)\r\n        }\r\n        hasValidRowNumber() {\r\n            return this.isValidRowNumber(this.rowNumber)\r\n        }\r\n        isValidRowNumber(t) {\r\n            return t !== ze.BARCODE_ROW_UNKNOWN && this.bucket === t % 3 * 3\r\n        }\r\n        setRowNumberAsRowIndicatorColumn() {\r\n            this.rowNumber = Math.trunc(3 * Math.trunc(this.value / 30) + Math.trunc(this.bucket / 3))\r\n        }\r\n        getWidth() {\r\n            return this.endX - this.startX\r\n        }\r\n        getStartX() {\r\n            return this.startX\r\n        }\r\n        getEndX() {\r\n            return this.endX\r\n        }\r\n        getBucket() {\r\n            return this.bucket\r\n        }\r\n        getValue() {\r\n            return this.value\r\n        }\r\n        getRowNumber() {\r\n            return this.rowNumber\r\n        }\r\n        setRowNumber(t) {\r\n            this.rowNumber = t\r\n        }\r\n        toString() {\r\n            return this.rowNumber + \"|\" + this.value\r\n        }\r\n    }\r\n    ze.BARCODE_ROW_UNKNOWN = -1;\r\n    class Ye {\r\n        static initialize() {\r\n            for (let t = 0; t < be.SYMBOL_TABLE.length; t++) {\r\n                let e = be.SYMBOL_TABLE[t],\r\n                        r = 1 & e;\r\n                for (let n = 0; n < be.BARS_IN_MODULE; n++) {\r\n                    let i = 0;\r\n                    for (;\r\n                            (1 & e) === r;) i += 1, e >>= 1;\r\n                    r = 1 & e, Ye.RATIOS_TABLE[t] || (Ye.RATIOS_TABLE[t] = new Array(be.BARS_IN_MODULE)), Ye.RATIOS_TABLE[t][be.BARS_IN_MODULE - n - 1] = Math.fround(i / be.MODULES_IN_CODEWORD)\r\n                }\r\n            }\r\n            this.bSymbolTableReady = !0\r\n        }\r\n        static getDecodedValue(t) {\r\n            let e = Ye.getDecodedCodewordValue(Ye.sampleBitCounts(t));\r\n            return -1 !== e ? e : Ye.getClosestDecodedValue(t)\r\n        }\r\n        static sampleBitCounts(t) {\r\n            let e = tt.sum(t),\r\n                    r = new Int32Array(be.BARS_IN_MODULE),\r\n                    n = 0,\r\n                    i = 0;\r\n            for (let s = 0; s < be.MODULES_IN_CODEWORD; s++) {\r\n                let o = e / (2 * be.MODULES_IN_CODEWORD) + s * e / be.MODULES_IN_CODEWORD;\r\n                i + t[n] <= o && (i += t[n], n++), r[n]++\r\n            }\r\n            return r\r\n        }\r\n        static getDecodedCodewordValue(t) {\r\n            let e = Ye.getBitValue(t);\r\n            return -1 === be.getCodeword(e) ? -1 : e\r\n        }\r\n        static getBitValue(t) {\r\n            let e = 0;\r\n            for (let r = 0; r < t.length; r++)\r\n                for (let n = 0; n < t[r]; n++) e = e << 1 | (r % 2 == 0 ? 1 : 0);\r\n            return Math.trunc(e)\r\n        }\r\n        static getClosestDecodedValue(t) {\r\n            let e = tt.sum(t),\r\n                    r = new Array(be.BARS_IN_MODULE);\r\n            if (e > 1)\r\n                for (let n = 0; n < r.length; n++) r[n] = Math.fround(t[n] / e);\r\n            let n = et.MAX_VALUE,\r\n                    i = -1;\r\n            this.bSymbolTableReady || Ye.initialize();\r\n            for (let t = 0; t < Ye.RATIOS_TABLE.length; t++) {\r\n                let e = 0,\r\n                        s = Ye.RATIOS_TABLE[t];\r\n                for (let t = 0; t < be.BARS_IN_MODULE; t++) {\r\n                    let i = Math.fround(s[t] - r[t]);\r\n                    if ((e += Math.fround(i * i)) >= n) break\r\n                }\r\n                e < n && (n = e, i = be.SYMBOL_TABLE[t])\r\n            }\r\n            return i\r\n        }\r\n    }\r\n    Ye.bSymbolTableReady = !1, Ye.RATIOS_TABLE = new Array(be.SYMBOL_TABLE.length).map(t => new Array(be.BARS_IN_MODULE));\r\n    class Ze {\r\n        constructor() {\r\n            this.segmentCount = -1, this.fileSize = -1, this.timestamp = -1, this.checksum = -1\r\n        }\r\n        getSegmentIndex() {\r\n            return this.segmentIndex\r\n        }\r\n        setSegmentIndex(t) {\r\n            this.segmentIndex = t\r\n        }\r\n        getFileId() {\r\n            return this.fileId\r\n        }\r\n        setFileId(t) {\r\n            this.fileId = t\r\n        }\r\n        getOptionalData() {\r\n            return this.optionalData\r\n        }\r\n        setOptionalData(t) {\r\n            this.optionalData = t\r\n        }\r\n        isLastSegment() {\r\n            return this.lastSegment\r\n        }\r\n        setLastSegment(t) {\r\n            this.lastSegment = t\r\n        }\r\n        getSegmentCount() {\r\n            return this.segmentCount\r\n        }\r\n        setSegmentCount(t) {\r\n            this.segmentCount = t\r\n        }\r\n        getSender() {\r\n            return this.sender || null\r\n        }\r\n        setSender(t) {\r\n            this.sender = t\r\n        }\r\n        getAddressee() {\r\n            return this.addressee || null\r\n        }\r\n        setAddressee(t) {\r\n            this.addressee = t\r\n        }\r\n        getFileName() {\r\n            return this.fileName\r\n        }\r\n        setFileName(t) {\r\n            this.fileName = t\r\n        }\r\n        getFileSize() {\r\n            return this.fileSize\r\n        }\r\n        setFileSize(t) {\r\n            this.fileSize = t\r\n        }\r\n        getChecksum() {\r\n            return this.checksum\r\n        }\r\n        setChecksum(t) {\r\n            this.checksum = t\r\n        }\r\n        getTimestamp() {\r\n            return this.timestamp\r\n        }\r\n        setTimestamp(t) {\r\n            this.timestamp = t\r\n        }\r\n    }\r\n    class Ke {\r\n        static parseLong(t, e) {\r\n            return parseInt(t, e)\r\n        }\r\n    }\r\n    class qe extends i {}\r\n    qe.kind = \"NullPointerException\";\r\n    class Qe {\r\n        writeBytes(t) {\r\n            this.writeBytesOffset(t, 0, t.length)\r\n        }\r\n        writeBytesOffset(t, e, r) {\r\n            if (null == t) throw new qe;\r\n            if (e < 0 || e > t.length || r < 0 || e + r > t.length || e + r < 0) throw new u;\r\n            if (0 !== r)\r\n                for (let n = 0; n < r; n++) this.write(t[e + n])\r\n        }\r\n        flush() {}\r\n        close() {}\r\n    }\r\n    class je extends i {}\r\n    class Je extends Qe {\r\n        constructor(t = 32) {\r\n            if (super(), this.count = 0, t < 0) throw new o(\"Negative initial size: \" + t);\r\n            this.buf = new Uint8Array(t)\r\n        }\r\n        ensureCapacity(t) {\r\n            t - this.buf.length > 0 && this.grow(t)\r\n        }\r\n        grow(t) {\r\n            let e = this.buf.length << 1;\r\n            if (e - t < 0 && (e = t), e < 0) {\r\n                if (t < 0) throw new je;\r\n                e = f.MAX_VALUE\r\n            }\r\n            this.buf = g.copyOfUint8Array(this.buf, e)\r\n        }\r\n        write(t) {\r\n            this.ensureCapacity(this.count + 1), this.buf[this.count] = t, this.count += 1\r\n        }\r\n        writeBytesOffset(t, e, r) {\r\n            if (e < 0 || e > t.length || r < 0 || e + r - t.length > 0) throw new u;\r\n            this.ensureCapacity(this.count + r), c.arraycopy(t, e, this.buf, this.count, r), this.count += r\r\n        }\r\n        writeTo(t) {\r\n            t.writeBytesOffset(this.buf, 0, this.count)\r\n        }\r\n        reset() {\r\n            this.count = 0\r\n        }\r\n        toByteArray() {\r\n            return g.copyOfUint8Array(this.buf, this.count)\r\n        }\r\n        size() {\r\n            return this.count\r\n        }\r\n        toString(t) {\r\n            return t ? \"string\" == typeof t ? this.toString_string(t) : this.toString_number(t) : this.toString_void()\r\n        }\r\n        toString_void() {\r\n            return new String(this.buf).toString()\r\n        }\r\n        toString_string(t) {\r\n            return new String(this.buf).toString()\r\n        }\r\n        toString_number(t) {\r\n            return new String(this.buf).toString()\r\n        }\r\n        close() {}\r\n    }\r\n\r\n    function $e() {\r\n        if (\"undefined\" != typeof window) return window.BigInt || null;\r\n        if (\"undefined\" != typeof global) return global.BigInt || null;\r\n        if (\"undefined\" != typeof self) return self.BigInt || null;\r\n        throw new Error(\"Can't search globals for BigInt!\")\r\n    }\r\n    let tr;\r\n\r\n    function er(t) {\r\n        if (void 0 === tr && (tr = $e()), null === tr) throw new Error(\"BigInt is not supported!\");\r\n        return tr(t)\r\n    }! function(t) {\r\n        t[t.ALPHA = 0] = \"ALPHA\", t[t.LOWER = 1] = \"LOWER\", t[t.MIXED = 2] = \"MIXED\", t[t.PUNCT = 3] = \"PUNCT\", t[t.ALPHA_SHIFT = 4] = \"ALPHA_SHIFT\", t[t.PUNCT_SHIFT = 5] = \"PUNCT_SHIFT\"\r\n    }(X || (X = {}));\r\n    class rr {\r\n        static decode(t, e) {\r\n            let r = new p(\"\"),\r\n                    n = m.ISO8859_1;\r\n            r.enableDecoding(n);\r\n            let i = 1,\r\n                    s = t[i++],\r\n                    o = new Ze;\r\n            for (; i < t[0];) {\r\n                switch (s) {\r\n                    case rr.TEXT_COMPACTION_MODE_LATCH:\r\n                        i = rr.textCompaction(t, i, r);\r\n                        break;\r\n                    case rr.BYTE_COMPACTION_MODE_LATCH:\r\n                    case rr.BYTE_COMPACTION_MODE_LATCH_6:\r\n                        i = rr.byteCompaction(s, t, n, i, r);\r\n                        break;\r\n                    case rr.MODE_SHIFT_TO_BYTE_COMPACTION_MODE:\r\n                        r.append(t[i++]);\r\n                        break;\r\n                    case rr.NUMERIC_COMPACTION_MODE_LATCH:\r\n                        i = rr.numericCompaction(t, i, r);\r\n                        break;\r\n                    case rr.ECI_CHARSET:\r\n                        m.getCharacterSetECIByValue(t[i++]);\r\n                        break;\r\n                    case rr.ECI_GENERAL_PURPOSE:\r\n                        i += 2;\r\n                        break;\r\n                    case rr.ECI_USER_DEFINED:\r\n                        i++;\r\n                        break;\r\n                    case rr.BEGIN_MACRO_PDF417_CONTROL_BLOCK:\r\n                        i = rr.decodeMacroBlock(t, i, o);\r\n                        break;\r\n                    case rr.BEGIN_MACRO_PDF417_OPTIONAL_FIELD:\r\n                    case rr.MACRO_PDF417_TERMINATOR:\r\n                        throw new E;\r\n                    default:\r\n                        i--, i = rr.textCompaction(t, i, r)\r\n                }\r\n                if (!(i < t.length)) throw E.getFormatInstance();\r\n                s = t[i++]\r\n            }\r\n            if (0 === r.length()) throw E.getFormatInstance();\r\n            let a = new z(null, r.toString(), null, e);\r\n            return a.setOther(o), a\r\n        }\r\n        static decodeMacroBlock(t, e, r) {\r\n            if (e + rr.NUMBER_OF_SEQUENCE_CODEWORDS > t[0]) throw E.getFormatInstance();\r\n            let n = new Int32Array(rr.NUMBER_OF_SEQUENCE_CODEWORDS);\r\n            for (let r = 0; r < rr.NUMBER_OF_SEQUENCE_CODEWORDS; r++, e++) n[r] = t[e];\r\n            r.setSegmentIndex(f.parseInt(rr.decodeBase900toBase10(n, rr.NUMBER_OF_SEQUENCE_CODEWORDS)));\r\n            let i = new p;\r\n            e = rr.textCompaction(t, e, i), r.setFileId(i.toString());\r\n            let s = -1;\r\n            for (t[e] === rr.BEGIN_MACRO_PDF417_OPTIONAL_FIELD && (s = e + 1); e < t[0];) switch (t[e]) {\r\n                case rr.BEGIN_MACRO_PDF417_OPTIONAL_FIELD:\r\n                    switch (t[++e]) {\r\n                        case rr.MACRO_PDF417_OPTIONAL_FIELD_FILE_NAME:\r\n                            let n = new p;\r\n                            e = rr.textCompaction(t, e + 1, n), r.setFileName(n.toString());\r\n                            break;\r\n                        case rr.MACRO_PDF417_OPTIONAL_FIELD_SENDER:\r\n                            let i = new p;\r\n                            e = rr.textCompaction(t, e + 1, i), r.setSender(i.toString());\r\n                            break;\r\n                        case rr.MACRO_PDF417_OPTIONAL_FIELD_ADDRESSEE:\r\n                            let s = new p;\r\n                            e = rr.textCompaction(t, e + 1, s), r.setAddressee(s.toString());\r\n                            break;\r\n                        case rr.MACRO_PDF417_OPTIONAL_FIELD_SEGMENT_COUNT:\r\n                            let o = new p;\r\n                            e = rr.numericCompaction(t, e + 1, o), r.setSegmentCount(f.parseInt(o.toString()));\r\n                            break;\r\n                        case rr.MACRO_PDF417_OPTIONAL_FIELD_TIME_STAMP:\r\n                            let a = new p;\r\n                            e = rr.numericCompaction(t, e + 1, a), r.setTimestamp(Ke.parseLong(a.toString()));\r\n                            break;\r\n                        case rr.MACRO_PDF417_OPTIONAL_FIELD_CHECKSUM:\r\n                            let l = new p;\r\n                            e = rr.numericCompaction(t, e + 1, l), r.setChecksum(f.parseInt(l.toString()));\r\n                            break;\r\n                        case rr.MACRO_PDF417_OPTIONAL_FIELD_FILE_SIZE:\r\n                            let h = new p;\r\n                            e = rr.numericCompaction(t, e + 1, h), r.setFileSize(Ke.parseLong(h.toString()));\r\n                            break;\r\n                        default:\r\n                            throw E.getFormatInstance()\r\n                    }\r\n                    break;\r\n                case rr.MACRO_PDF417_TERMINATOR:\r\n                    e++, r.setLastSegment(!0);\r\n                    break;\r\n                default:\r\n                    throw E.getFormatInstance()\r\n            }\r\n            if (-1 !== s) {\r\n                let n = e - s;\r\n                r.isLastSegment() && n--, r.setOptionalData(g.copyOfRange(t, s, s + n))\r\n            }\r\n            return e\r\n        }\r\n        static textCompaction(t, e, r) {\r\n            let n = new Int32Array(2 * (t[0] - e)),\r\n                    i = new Int32Array(2 * (t[0] - e)),\r\n                    s = 0,\r\n                    o = !1;\r\n            for (; e < t[0] && !o;) {\r\n                let r = t[e++];\r\n                if (r < rr.TEXT_COMPACTION_MODE_LATCH) n[s] = r / 30, n[s + 1] = r % 30, s += 2;\r\n                else switch (r) {\r\n                    case rr.TEXT_COMPACTION_MODE_LATCH:\r\n                        n[s++] = rr.TEXT_COMPACTION_MODE_LATCH;\r\n                        break;\r\n                    case rr.BYTE_COMPACTION_MODE_LATCH:\r\n                    case rr.BYTE_COMPACTION_MODE_LATCH_6:\r\n                    case rr.NUMERIC_COMPACTION_MODE_LATCH:\r\n                    case rr.BEGIN_MACRO_PDF417_CONTROL_BLOCK:\r\n                    case rr.BEGIN_MACRO_PDF417_OPTIONAL_FIELD:\r\n                    case rr.MACRO_PDF417_TERMINATOR:\r\n                        e--, o = !0;\r\n                        break;\r\n                    case rr.MODE_SHIFT_TO_BYTE_COMPACTION_MODE:\r\n                        n[s] = rr.MODE_SHIFT_TO_BYTE_COMPACTION_MODE, r = t[e++], i[s] = r, s++\r\n                }\r\n            }\r\n            return rr.decodeTextCompaction(n, i, s, r), e\r\n        }\r\n        static decodeTextCompaction(t, e, r, n) {\r\n            let i = X.ALPHA,\r\n                    s = X.ALPHA,\r\n                    o = 0;\r\n            for (; o < r;) {\r\n                let r = t[o],\r\n                        a = \"\";\r\n                switch (i) {\r\n                    case X.ALPHA:\r\n                        if (r < 26) a = String.fromCharCode(65 + r);\r\n                        else switch (r) {\r\n                            case 26:\r\n                                a = \" \";\r\n                                break;\r\n                            case rr.LL:\r\n                                i = X.LOWER;\r\n                                break;\r\n                            case rr.ML:\r\n                                i = X.MIXED;\r\n                                break;\r\n                            case rr.PS:\r\n                                s = i, i = X.PUNCT_SHIFT;\r\n                                break;\r\n                            case rr.MODE_SHIFT_TO_BYTE_COMPACTION_MODE:\r\n                                n.append(e[o]);\r\n                                break;\r\n                            case rr.TEXT_COMPACTION_MODE_LATCH:\r\n                                i = X.ALPHA\r\n                        }\r\n                        break;\r\n                    case X.LOWER:\r\n                        if (r < 26) a = String.fromCharCode(97 + r);\r\n                        else switch (r) {\r\n                            case 26:\r\n                                a = \" \";\r\n                                break;\r\n                            case rr.AS:\r\n                                s = i, i = X.ALPHA_SHIFT;\r\n                                break;\r\n                            case rr.ML:\r\n                                i = X.MIXED;\r\n                                break;\r\n                            case rr.PS:\r\n                                s = i, i = X.PUNCT_SHIFT;\r\n                                break;\r\n                            case rr.MODE_SHIFT_TO_BYTE_COMPACTION_MODE:\r\n                                n.append(e[o]);\r\n                                break;\r\n                            case rr.TEXT_COMPACTION_MODE_LATCH:\r\n                                i = X.ALPHA\r\n                        }\r\n                        break;\r\n                    case X.MIXED:\r\n                        if (r < rr.PL) a = rr.MIXED_CHARS[r];\r\n                        else switch (r) {\r\n                            case rr.PL:\r\n                                i = X.PUNCT;\r\n                                break;\r\n                            case 26:\r\n                                a = \" \";\r\n                                break;\r\n                            case rr.LL:\r\n                                i = X.LOWER;\r\n                                break;\r\n                            case rr.AL:\r\n                                i = X.ALPHA;\r\n                                break;\r\n                            case rr.PS:\r\n                                s = i, i = X.PUNCT_SHIFT;\r\n                                break;\r\n                            case rr.MODE_SHIFT_TO_BYTE_COMPACTION_MODE:\r\n                                n.append(e[o]);\r\n                                break;\r\n                            case rr.TEXT_COMPACTION_MODE_LATCH:\r\n                                i = X.ALPHA\r\n                        }\r\n                        break;\r\n                    case X.PUNCT:\r\n                        if (r < rr.PAL) a = rr.PUNCT_CHARS[r];\r\n                        else switch (r) {\r\n                            case rr.PAL:\r\n                                i = X.ALPHA;\r\n                                break;\r\n                            case rr.MODE_SHIFT_TO_BYTE_COMPACTION_MODE:\r\n                                n.append(e[o]);\r\n                                break;\r\n                            case rr.TEXT_COMPACTION_MODE_LATCH:\r\n                                i = X.ALPHA\r\n                        }\r\n                        break;\r\n                    case X.ALPHA_SHIFT:\r\n                        if (i = s, r < 26) a = String.fromCharCode(65 + r);\r\n                        else switch (r) {\r\n                            case 26:\r\n                                a = \" \";\r\n                                break;\r\n                            case rr.TEXT_COMPACTION_MODE_LATCH:\r\n                                i = X.ALPHA\r\n                        }\r\n                        break;\r\n                    case X.PUNCT_SHIFT:\r\n                        if (i = s, r < rr.PAL) a = rr.PUNCT_CHARS[r];\r\n                        else switch (r) {\r\n                            case rr.PAL:\r\n                                i = X.ALPHA;\r\n                                break;\r\n                            case rr.MODE_SHIFT_TO_BYTE_COMPACTION_MODE:\r\n                                n.append(e[o]);\r\n                                break;\r\n                            case rr.TEXT_COMPACTION_MODE_LATCH:\r\n                                i = X.ALPHA\r\n                        }\r\n                }\r\n                \"\" !== a && n.append(a), o++\r\n            }\r\n        }\r\n        static byteCompaction(t, e, r, n, i) {\r\n            let s = new Je,\r\n                    o = 0,\r\n                    a = 0,\r\n                    l = !1;\r\n            switch (t) {\r\n                case rr.BYTE_COMPACTION_MODE_LATCH:\r\n                    let r = new Int32Array(6),\r\n                            i = e[n++];\r\n                    for (; n < e[0] && !l;) switch (r[o++] = i, a = 900 * a + i, i = e[n++]) {\r\n                        case rr.TEXT_COMPACTION_MODE_LATCH:\r\n                        case rr.BYTE_COMPACTION_MODE_LATCH:\r\n                        case rr.NUMERIC_COMPACTION_MODE_LATCH:\r\n                        case rr.BYTE_COMPACTION_MODE_LATCH_6:\r\n                        case rr.BEGIN_MACRO_PDF417_CONTROL_BLOCK:\r\n                        case rr.BEGIN_MACRO_PDF417_OPTIONAL_FIELD:\r\n                        case rr.MACRO_PDF417_TERMINATOR:\r\n                            n--, l = !0;\r\n                            break;\r\n                        default:\r\n                            if (o % 5 == 0 && o > 0) {\r\n                                for (let t = 0; t < 6; ++t) s.write(Number(er(a) >> er(8 * (5 - t))));\r\n                                a = 0, o = 0\r\n                            }\r\n                    }\r\n                    n === e[0] && i < rr.TEXT_COMPACTION_MODE_LATCH && (r[o++] = i);\r\n                    for (let t = 0; t < o; t++) s.write(r[t]);\r\n                    break;\r\n                case rr.BYTE_COMPACTION_MODE_LATCH_6:\r\n                    for (; n < e[0] && !l;) {\r\n                        let t = e[n++];\r\n                        if (t < rr.TEXT_COMPACTION_MODE_LATCH) o++, a = 900 * a + t;\r\n                        else switch (t) {\r\n                            case rr.TEXT_COMPACTION_MODE_LATCH:\r\n                            case rr.BYTE_COMPACTION_MODE_LATCH:\r\n                            case rr.NUMERIC_COMPACTION_MODE_LATCH:\r\n                            case rr.BYTE_COMPACTION_MODE_LATCH_6:\r\n                            case rr.BEGIN_MACRO_PDF417_CONTROL_BLOCK:\r\n                            case rr.BEGIN_MACRO_PDF417_OPTIONAL_FIELD:\r\n                            case rr.MACRO_PDF417_TERMINATOR:\r\n                                n--, l = !0\r\n                        }\r\n                        if (o % 5 == 0 && o > 0) {\r\n                            for (let t = 0; t < 6; ++t) s.write(Number(er(a) >> er(8 * (5 - t))));\r\n                            a = 0, o = 0\r\n                        }\r\n                    }\r\n            }\r\n            return i.append(I.decode(s.toByteArray(), r)), n\r\n        }\r\n        static numericCompaction(t, e, r) {\r\n            let n = 0,\r\n                    i = !1,\r\n                    s = new Int32Array(rr.MAX_NUMERIC_CODEWORDS);\r\n            for (; e < t[0] && !i;) {\r\n                let o = t[e++];\r\n                if (e === t[0] && (i = !0), o < rr.TEXT_COMPACTION_MODE_LATCH) s[n] = o, n++;\r\n                else switch (o) {\r\n                    case rr.TEXT_COMPACTION_MODE_LATCH:\r\n                    case rr.BYTE_COMPACTION_MODE_LATCH:\r\n                    case rr.BYTE_COMPACTION_MODE_LATCH_6:\r\n                    case rr.BEGIN_MACRO_PDF417_CONTROL_BLOCK:\r\n                    case rr.BEGIN_MACRO_PDF417_OPTIONAL_FIELD:\r\n                    case rr.MACRO_PDF417_TERMINATOR:\r\n                        e--, i = !0\r\n                }(n % rr.MAX_NUMERIC_CODEWORDS == 0 || o === rr.NUMERIC_COMPACTION_MODE_LATCH || i) && n > 0 && (r.append(rr.decodeBase900toBase10(s, n)), n = 0)\r\n            }\r\n            return e\r\n        }\r\n        static decodeBase900toBase10(t, e) {\r\n            let r = er(0);\r\n            for (let n = 0; n < e; n++) r += rr.EXP900[e - n - 1] * er(t[n]);\r\n            let n = r.toString();\r\n            if (\"1\" !== n.charAt(0)) throw new E;\r\n            return n.substring(1)\r\n        }\r\n    }\r\n    rr.TEXT_COMPACTION_MODE_LATCH = 900, rr.BYTE_COMPACTION_MODE_LATCH = 901, rr.NUMERIC_COMPACTION_MODE_LATCH = 902, rr.BYTE_COMPACTION_MODE_LATCH_6 = 924, rr.ECI_USER_DEFINED = 925, rr.ECI_GENERAL_PURPOSE = 926, rr.ECI_CHARSET = 927, rr.BEGIN_MACRO_PDF417_CONTROL_BLOCK = 928, rr.BEGIN_MACRO_PDF417_OPTIONAL_FIELD = 923, rr.MACRO_PDF417_TERMINATOR = 922, rr.MODE_SHIFT_TO_BYTE_COMPACTION_MODE = 913, rr.MAX_NUMERIC_CODEWORDS = 15, rr.MACRO_PDF417_OPTIONAL_FIELD_FILE_NAME = 0, rr.MACRO_PDF417_OPTIONAL_FIELD_SEGMENT_COUNT = 1, rr.MACRO_PDF417_OPTIONAL_FIELD_TIME_STAMP = 2, rr.MACRO_PDF417_OPTIONAL_FIELD_SENDER = 3, rr.MACRO_PDF417_OPTIONAL_FIELD_ADDRESSEE = 4, rr.MACRO_PDF417_OPTIONAL_FIELD_FILE_SIZE = 5, rr.MACRO_PDF417_OPTIONAL_FIELD_CHECKSUM = 6, rr.PL = 25, rr.LL = 27, rr.AS = 27, rr.ML = 28, rr.AL = 28, rr.PS = 29, rr.PAL = 29, rr.PUNCT_CHARS = \";<>@[\\\\]_`~!\\r\\t,:\\n-.$/\\\"|*()?{}'\", rr.MIXED_CHARS = \"0123456789&\\r\\t,:#-.$/+%*=^\", rr.EXP900 = $e() ? function() {\r\n        let t = [];\r\n        t[0] = er(1);\r\n        let e = er(900);\r\n        t[1] = e;\r\n        for (let r = 2; r < 16; r++) t[r] = t[r - 1] * e;\r\n        return t\r\n    }() : [], rr.NUMBER_OF_SEQUENCE_CODEWORDS = 2;\r\n    class nr {\r\n        constructor() {}\r\n        static decode(t, e, r, n, i, s, o) {\r\n            let a, l = new xe(t, e, r, n, i),\r\n                    h = null,\r\n                    c = null;\r\n            for (let r = !0;; r = !1) {\r\n                if (null != e && (h = nr.getRowIndicatorColumn(t, l, e, !0, s, o)), null != n && (c = nr.getRowIndicatorColumn(t, l, n, !1, s, o)), null == (a = nr.merge(h, c))) throw R.getNotFoundInstance();\r\n                let i = a.getBoundingBox();\r\n                if (!r || null == i || !(i.getMinY() < l.getMinY() || i.getMaxY() > l.getMaxY())) break;\r\n                l = i\r\n            }\r\n            a.setBoundingBox(l);\r\n            let u = a.getBarcodeColumnCount() + 1;\r\n            a.setDetectionResultColumn(0, h), a.setDetectionResultColumn(u, c);\r\n            let d = null != h;\r\n            for (let e = 1; e <= u; e++) {\r\n                let r, n = d ? e : u - e;\r\n                if (void 0 !== a.getDetectionResultColumn(n)) continue;\r\n                r = 0 === n || n === u ? new Xe(l, 0 === n) : new He(l), a.setDetectionResultColumn(n, r);\r\n                let i = -1,\r\n                        h = i;\r\n                for (let e = l.getMinY(); e <= l.getMaxY(); e++) {\r\n                    if ((i = nr.getStartColumn(a, n, e, d)) < 0 || i > l.getMaxX()) {\r\n                        if (-1 === h) continue;\r\n                        i = h\r\n                    }\r\n                    let c = nr.detectCodeword(t, l.getMinX(), l.getMaxX(), d, i, e, s, o);\r\n                    null != c && (r.setCodeword(e, c), h = i, s = Math.min(s, c.getWidth()), o = Math.max(o, c.getWidth()))\r\n                }\r\n            }\r\n            return nr.createDecoderResult(a)\r\n        }\r\n        static merge(t, e) {\r\n            if (null == t && null == e) return null;\r\n            let r = nr.getBarcodeMetadata(t, e);\r\n            if (null == r) return null;\r\n            let n = xe.merge(nr.adjustBoundingBox(t), nr.adjustBoundingBox(e));\r\n            return new We(r, n)\r\n        }\r\n        static adjustBoundingBox(t) {\r\n            if (null == t) return null;\r\n            let e = t.getRowHeights();\r\n            if (null == e) return null;\r\n            let r = nr.getMax(e),\r\n                    n = 0;\r\n            for (let t of e)\r\n                if (n += r - t, t > 0) break;\r\n            let i = t.getCodewords();\r\n            for (let t = 0; n > 0 && null == i[t]; t++) n--;\r\n            let s = 0;\r\n            for (let t = e.length - 1; t >= 0 && (s += r - e[t], !(e[t] > 0)); t--);\r\n            for (let t = i.length - 1; s > 0 && null == i[t]; t--) s--;\r\n            return t.getBoundingBox().addMissingRows(n, s, t.isLeft())\r\n        }\r\n        static getMax(t) {\r\n            let e = -1;\r\n            for (let r of t) e = Math.max(e, r);\r\n            return e\r\n        }\r\n        static getBarcodeMetadata(t, e) {\r\n            let r, n;\r\n            return null == t || null == (r = t.getBarcodeMetadata()) ? null == e ? null : e.getBarcodeMetadata() : null == e || null == (n = e.getBarcodeMetadata()) ? r : r.getColumnCount() !== n.getColumnCount() && r.getErrorCorrectionLevel() !== n.getErrorCorrectionLevel() && r.getRowCount() !== n.getRowCount() ? null : r\r\n        }\r\n        static getRowIndicatorColumn(t, e, r, n, i, s) {\r\n            let o = new Xe(e, n);\r\n            for (let a = 0; a < 2; a++) {\r\n                let l = 0 === a ? 1 : -1,\r\n                        h = Math.trunc(Math.trunc(r.getX()));\r\n                for (let a = Math.trunc(Math.trunc(r.getY())); a <= e.getMaxY() && a >= e.getMinY(); a += l) {\r\n                    let e = nr.detectCodeword(t, 0, t.getWidth(), n, h, a, i, s);\r\n                    null != e && (o.setCodeword(a, e), h = n ? e.getStartX() : e.getEndX())\r\n                }\r\n            }\r\n            return o\r\n        }\r\n        static adjustCodewordCount(t, e) {\r\n            let r = e[0][1],\r\n                    n = r.getValue(),\r\n                    i = t.getBarcodeColumnCount() * t.getBarcodeRowCount() - nr.getNumberOfECCodeWords(t.getBarcodeECLevel());\r\n            if (0 === n.length) {\r\n                if (i < 1 || i > be.MAX_CODEWORDS_IN_BARCODE) throw R.getNotFoundInstance();\r\n                r.setValue(i)\r\n            } else n[0] !== i && r.setValue(i)\r\n        }\r\n        static createDecoderResult(t) {\r\n            let e = nr.createBarcodeMatrix(t);\r\n            nr.adjustCodewordCount(t, e);\r\n            let r = new Array,\r\n                    n = new Int32Array(t.getBarcodeRowCount() * t.getBarcodeColumnCount()),\r\n                    i = [],\r\n                    s = new Array;\r\n            for (let o = 0; o < t.getBarcodeRowCount(); o++)\r\n                for (let a = 0; a < t.getBarcodeColumnCount(); a++) {\r\n                    let l = e[o][a + 1].getValue(),\r\n                            h = o * t.getBarcodeColumnCount() + a;\r\n                    0 === l.length ? r.push(h) : 1 === l.length ? n[h] = l[0] : (s.push(h), i.push(l))\r\n                }\r\n            let o = new Array(i.length);\r\n            for (let t = 0; t < o.length; t++) o[t] = i[t];\r\n            return nr.createDecoderResultFromAmbiguousValues(t.getBarcodeECLevel(), n, be.toIntArray(r), be.toIntArray(s), o)\r\n        }\r\n        static createDecoderResultFromAmbiguousValues(t, e, r, n, i) {\r\n            let s = new Int32Array(n.length),\r\n                    o = 100;\r\n            for (; o-- > 0;) {\r\n                for (let t = 0; t < s.length; t++) e[n[t]] = i[t][s[t]];\r\n                try {\r\n                    return nr.decodeCodewords(e, t, r)\r\n                } catch (t) {\r\n                    if (!(t instanceof l)) throw t\r\n                }\r\n                if (0 === s.length) throw l.getChecksumInstance();\r\n                for (let t = 0; t < s.length; t++) {\r\n                    if (s[t] < i[t].length - 1) {\r\n                        s[t]++;\r\n                        break\r\n                    }\r\n                    if (s[t] = 0, t === s.length - 1) throw l.getChecksumInstance()\r\n                }\r\n            }\r\n            throw l.getChecksumInstance()\r\n        }\r\n        static createBarcodeMatrix(t) {\r\n            let e = Array.from({\r\n                                   length: t.getBarcodeRowCount()\r\n                               }, () => new Array(t.getBarcodeColumnCount() + 2));\r\n            for (let t = 0; t < e.length; t++)\r\n                for (let r = 0; r < e[t].length; r++) e[t][r] = new Ge;\r\n            let r = 0;\r\n            for (let n of t.getDetectionResultColumns()) {\r\n                if (null != n)\r\n                    for (let t of n.getCodewords())\r\n                        if (null != t) {\r\n                            let n = t.getRowNumber();\r\n                            if (n >= 0) {\r\n                                if (n >= e.length) continue;\r\n                                e[n][r].setValue(t.getValue())\r\n                            }\r\n                        } r++\r\n            }\r\n            return e\r\n        }\r\n        static isValidBarcodeColumn(t, e) {\r\n            return e >= 0 && e <= t.getBarcodeColumnCount() + 1\r\n        }\r\n        static getStartColumn(t, e, r, n) {\r\n            let i = n ? 1 : -1,\r\n                    s = null;\r\n            if (nr.isValidBarcodeColumn(t, e - i) && (s = t.getDetectionResultColumn(e - i).getCodeword(r)), null != s) return n ? s.getEndX() : s.getStartX();\r\n            if (null != (s = t.getDetectionResultColumn(e).getCodewordNearby(r))) return n ? s.getStartX() : s.getEndX();\r\n            if (nr.isValidBarcodeColumn(t, e - i) && (s = t.getDetectionResultColumn(e - i).getCodewordNearby(r)), null != s) return n ? s.getEndX() : s.getStartX();\r\n            let o = 0;\r\n            for (; nr.isValidBarcodeColumn(t, e - i);) {\r\n                e -= i;\r\n                for (let r of t.getDetectionResultColumn(e).getCodewords())\r\n                    if (null != r) return (n ? r.getEndX() : r.getStartX()) + i * o * (r.getEndX() - r.getStartX());\r\n                o++\r\n            }\r\n            return n ? t.getBoundingBox().getMinX() : t.getBoundingBox().getMaxX()\r\n        }\r\n        static detectCodeword(t, e, r, n, i, s, o, a) {\r\n            i = nr.adjustCodewordStartColumn(t, e, r, n, i, s);\r\n            let l, h = nr.getModuleBitCount(t, e, r, n, i, s);\r\n            if (null == h) return null;\r\n            let c = tt.sum(h);\r\n            if (n) l = i + c;\r\n            else {\r\n                for (let t = 0; t < h.length / 2; t++) {\r\n                    let e = h[t];\r\n                    h[t] = h[h.length - 1 - t], h[h.length - 1 - t] = e\r\n                }\r\n                i = (l = i) - c\r\n            }\r\n            if (!nr.checkCodewordSkew(c, o, a)) return null;\r\n            let u = Ye.getDecodedValue(h),\r\n                    d = be.getCodeword(u);\r\n            return -1 === d ? null : new ze(i, l, nr.getCodewordBucketNumber(u), d)\r\n        }\r\n        static getModuleBitCount(t, e, r, n, i, s) {\r\n            let o = i,\r\n                    a = new Int32Array(8),\r\n                    l = 0,\r\n                    h = n ? 1 : -1,\r\n                    c = n;\r\n            for (;\r\n                    (n ? o < r : o >= e) && l < a.length;) t.get(o, s) === c ? (a[l]++, o += h) : (l++, c = !c);\r\n            return l === a.length || o === (n ? r : e) && l === a.length - 1 ? a : null\r\n        }\r\n        static getNumberOfECCodeWords(t) {\r\n            return 2 << t\r\n        }\r\n        static adjustCodewordStartColumn(t, e, r, n, i, s) {\r\n            let o = i,\r\n                    a = n ? -1 : 1;\r\n            for (let l = 0; l < 2; l++) {\r\n                for (;\r\n                        (n ? o >= e : o < r) && n === t.get(o, s);) {\r\n                    if (Math.abs(i - o) > nr.CODEWORD_SKEW_SIZE) return i;\r\n                    o += a\r\n                }\r\n                a = -a, n = !n\r\n            }\r\n            return o\r\n        }\r\n        static checkCodewordSkew(t, e, r) {\r\n            return e - nr.CODEWORD_SKEW_SIZE <= t && t <= r + nr.CODEWORD_SKEW_SIZE\r\n        }\r\n        static decodeCodewords(t, e, r) {\r\n            if (0 === t.length) throw E.getFormatInstance();\r\n            let n = 1 << e + 1,\r\n                    i = nr.correctErrors(t, r, n);\r\n            nr.verifyCodewordCount(t, n);\r\n            let s = rr.decode(t, \"\" + e);\r\n            return s.setErrorsCorrected(i), s.setErasures(r.length), s\r\n        }\r\n        static correctErrors(t, e, r) {\r\n            if (null != e && e.length > r / 2 + nr.MAX_ERRORS || r < 0 || r > nr.MAX_EC_CODEWORDS) throw l.getChecksumInstance();\r\n            return nr.errorCorrection.decode(t, r, e)\r\n        }\r\n        static verifyCodewordCount(t, e) {\r\n            if (t.length < 4) throw E.getFormatInstance();\r\n            let r = t[0];\r\n            if (r > t.length) throw E.getFormatInstance();\r\n            if (0 === r) {\r\n                if (!(e < t.length)) throw E.getFormatInstance();\r\n                t[0] = t.length - e\r\n            }\r\n        }\r\n        static getBitCountForCodeword(t) {\r\n            let e = new Int32Array(8),\r\n                    r = 0,\r\n                    n = e.length - 1;\r\n            for (; !((1 & t) !== r && (r = 1 & t, --n < 0));) e[n]++, t >>= 1;\r\n            return e\r\n        }\r\n        static getCodewordBucketNumber(t) {\r\n            return t instanceof Int32Array ? this.getCodewordBucketNumber_Int32Array(t) : this.getCodewordBucketNumber_number(t)\r\n        }\r\n        static getCodewordBucketNumber_number(t) {\r\n            return nr.getCodewordBucketNumber(nr.getBitCountForCodeword(t))\r\n        }\r\n        static getCodewordBucketNumber_Int32Array(t) {\r\n            return (t[0] - t[2] + t[4] - t[6] + 9) % 9\r\n        }\r\n        static toString(t) {\r\n            let e = new Ue;\r\n            for (let r = 0; r < t.length; r++) {\r\n                e.format(\"Row %2d: \", r);\r\n                for (let n = 0; n < t[r].length; n++) {\r\n                    let i = t[r][n];\r\n                    0 === i.getValue().length ? e.format(\"        \", null) : e.format(\"%4d(%2d)\", i.getValue()[0], i.getConfidence(i.getValue()[0]))\r\n                }\r\n                e.format(\"%n\")\r\n            }\r\n            return e.toString()\r\n        }\r\n    }\r\n    nr.CODEWORD_SKEW_SIZE = 2, nr.MAX_ERRORS = 3, nr.MAX_EC_CODEWORDS = 512, nr.errorCorrection = new ke;\r\n    class ir {\r\n        decode(t, e = null) {\r\n            let r = ir.decode(t, e, !1);\r\n            if (null == r || 0 === r.length || null == r[0]) throw R.getNotFoundInstance();\r\n            return r[0]\r\n        }\r\n        decodeMultiple(t, e = null) {\r\n            try {\r\n                return ir.decode(t, e, !0)\r\n            } catch (t) {\r\n                if (t instanceof E || t instanceof l) throw R.getNotFoundInstance();\r\n                throw t\r\n            }\r\n        }\r\n        static decode(t, e, r) {\r\n            const n = new Array,\r\n                    i = Pe.detectMultiple(t, e, r);\r\n            for (const t of i.getPoints()) {\r\n                const e = nr.decode(i.getBits(), t[4], t[5], t[6], t[7], ir.getMinCodewordWidth(t), ir.getMaxCodewordWidth(t)),\r\n                        r = new F(e.getText(), e.getRawBytes(), void 0, t, k.PDF_417);\r\n                r.putMetadata(W.ERROR_CORRECTION_LEVEL, e.getECLevel());\r\n                const s = e.getOther();\r\n                null != s && r.putMetadata(W.PDF417_EXTRA_METADATA, s), n.push(r)\r\n            }\r\n            return n.map(t => t)\r\n        }\r\n        static getMaxWidth(t, e) {\r\n            return null == t || null == e ? 0 : Math.trunc(Math.abs(t.getX() - e.getX()))\r\n        }\r\n        static getMinWidth(t, e) {\r\n            return null == t || null == e ? f.MAX_VALUE : Math.trunc(Math.abs(t.getX() - e.getX()))\r\n        }\r\n        static getMaxCodewordWidth(t) {\r\n            return Math.floor(Math.max(Math.max(ir.getMaxWidth(t[0], t[4]), ir.getMaxWidth(t[6], t[2]) * be.MODULES_IN_CODEWORD / be.MODULES_IN_STOP_PATTERN), Math.max(ir.getMaxWidth(t[1], t[5]), ir.getMaxWidth(t[7], t[3]) * be.MODULES_IN_CODEWORD / be.MODULES_IN_STOP_PATTERN)))\r\n        }\r\n        static getMinCodewordWidth(t) {\r\n            return Math.floor(Math.min(Math.min(ir.getMinWidth(t[0], t[4]), ir.getMinWidth(t[6], t[2]) * be.MODULES_IN_CODEWORD / be.MODULES_IN_STOP_PATTERN), Math.min(ir.getMinWidth(t[1], t[5]), ir.getMinWidth(t[7], t[3]) * be.MODULES_IN_CODEWORD / be.MODULES_IN_STOP_PATTERN)))\r\n        }\r\n        reset() {}\r\n    }\r\n    class sr extends i {}\r\n    sr.kind = \"ReaderException\";\r\n    class or {\r\n        constructor(t, e) {\r\n            this.verbose = !0 === t, e && this.setHints(e)\r\n        }\r\n        decode(t, e) {\r\n            return e && this.setHints(e), this.decodeInternal(t)\r\n        }\r\n        decodeWithState(t) {\r\n            return null !== this.readers && void 0 !== this.readers || this.setHints(null), this.decodeInternal(t)\r\n        }\r\n        setHints(t) {\r\n            this.hints = t;\r\n            const e = null != t && void 0 !== t.get(C.TRY_HARDER),\r\n                    r = null == t ? null : t.get(C.POSSIBLE_FORMATS),\r\n                    n = new Array;\r\n            if (null != r) {\r\n                const i = r.some(t => t === k.UPC_A || t === k.UPC_E || t === k.EAN_13 || t === k.EAN_8 || t === k.CODABAR || t === k.CODE_39 || t === k.CODE_93 || t === k.CODE_128 || t === k.ITF || t === k.RSS_14 || t === k.RSS_EXPANDED);\r\n                i && !e && n.push(new ee(t, this.verbose)), r.includes(k.QR_CODE) && n.push(new Me), r.includes(k.DATA_MATRIX) && n.push(new ue), r.includes(k.AZTEC) && n.push(new dt), r.includes(k.PDF_417) && n.push(new ir), i && e && n.push(new ee(t, this.verbose))\r\n            }\r\n            0 === n.length && (e || n.push(new ee(t, this.verbose)), n.push(new Me), n.push(new ue), n.push(new dt), n.push(new ir), e && n.push(new ee(t, this.verbose))), this.readers = n\r\n        }\r\n        reset() {\r\n            if (null !== this.readers)\r\n                for (const t of this.readers) t.reset()\r\n        }\r\n        decodeInternal(t) {\r\n            if (null === this.readers) throw new sr(\"No readers where selected, nothing can be read.\");\r\n            for (const e of this.readers) try {\r\n                return e.decode(t, this.hints)\r\n            } catch (t) {\r\n                if (t instanceof sr) continue\r\n            }\r\n            throw new R(\"No MultiFormat Readers were able to detect the code.\")\r\n        }\r\n    }\r\n    var ar;\r\n    ! function(t) {\r\n        t[t.ERROR_CORRECTION = 0] = \"ERROR_CORRECTION\", t[t.CHARACTER_SET = 1] = \"CHARACTER_SET\", t[t.DATA_MATRIX_SHAPE = 2] = \"DATA_MATRIX_SHAPE\", t[t.MIN_SIZE = 3] = \"MIN_SIZE\", t[t.MAX_SIZE = 4] = \"MAX_SIZE\", t[t.MARGIN = 5] = \"MARGIN\", t[t.PDF417_COMPACT = 6] = \"PDF417_COMPACT\", t[t.PDF417_COMPACTION = 7] = \"PDF417_COMPACTION\", t[t.PDF417_DIMENSIONS = 8] = \"PDF417_DIMENSIONS\", t[t.AZTEC_LAYERS = 9] = \"AZTEC_LAYERS\", t[t.QR_VERSION = 10] = \"QR_VERSION\"\r\n    }(ar || (ar = {}));\r\n    var lr = ar;\r\n    class hr {\r\n        constructor(t) {\r\n            this.field = t, this.cachedGenerators = [], this.cachedGenerators.push(new Z(t, Int32Array.from([1])))\r\n        }\r\n        buildGenerator(t) {\r\n            const e = this.cachedGenerators;\r\n            if (t >= e.length) {\r\n                let r = e[e.length - 1];\r\n                const n = this.field;\r\n                for (let i = e.length; i <= t; i++) {\r\n                    const t = r.multiply(new Z(n, Int32Array.from([1, n.exp(i - 1 + n.getGeneratorBase())])));\r\n                    e.push(t), r = t\r\n                }\r\n            }\r\n            return e[t]\r\n        }\r\n        encode(t, e) {\r\n            if (0 === e) throw new o(\"No error correction bytes\");\r\n            const r = t.length - e;\r\n            if (r <= 0) throw new o(\"No data bytes provided\");\r\n            const n = this.buildGenerator(e),\r\n                    i = new Int32Array(r);\r\n            c.arraycopy(t, 0, i, 0, r);\r\n            let s = new Z(this.field, i);\r\n            const a = (s = s.multiplyByMonomial(e, 1)).divide(n)[1].getCoefficients(),\r\n                    l = e - a.length;\r\n            for (let e = 0; e < l; e++) t[r + e] = 0;\r\n            c.arraycopy(a, 0, t, r + l, a.length)\r\n        }\r\n    }\r\n    class cr {\r\n        constructor() {}\r\n        static applyMaskPenaltyRule1(t) {\r\n            return cr.applyMaskPenaltyRule1Internal(t, !0) + cr.applyMaskPenaltyRule1Internal(t, !1)\r\n        }\r\n        static applyMaskPenaltyRule2(t) {\r\n            let e = 0;\r\n            const r = t.getArray(),\r\n                    n = t.getWidth(),\r\n                    i = t.getHeight();\r\n            for (let t = 0; t < i - 1; t++) {\r\n                const i = r[t];\r\n                for (let s = 0; s < n - 1; s++) {\r\n                    const n = i[s];\r\n                    n === i[s + 1] && n === r[t + 1][s] && n === r[t + 1][s + 1] && e++\r\n                }\r\n            }\r\n            return cr.N2 * e\r\n        }\r\n        static applyMaskPenaltyRule3(t) {\r\n            let e = 0;\r\n            const r = t.getArray(),\r\n                    n = t.getWidth(),\r\n                    i = t.getHeight();\r\n            for (let t = 0; t < i; t++)\r\n                for (let s = 0; s < n; s++) {\r\n                    const o = r[t];\r\n                    s + 6 < n && 1 === o[s] && 0 === o[s + 1] && 1 === o[s + 2] && 1 === o[s + 3] && 1 === o[s + 4] && 0 === o[s + 5] && 1 === o[s + 6] && (cr.isWhiteHorizontal(o, s - 4, s) || cr.isWhiteHorizontal(o, s + 7, s + 11)) && e++, t + 6 < i && 1 === r[t][s] && 0 === r[t + 1][s] && 1 === r[t + 2][s] && 1 === r[t + 3][s] && 1 === r[t + 4][s] && 0 === r[t + 5][s] && 1 === r[t + 6][s] && (cr.isWhiteVertical(r, s, t - 4, t) || cr.isWhiteVertical(r, s, t + 7, t + 11)) && e++\r\n                }\r\n            return e * cr.N3\r\n        }\r\n        static isWhiteHorizontal(t, e, r) {\r\n            e = Math.max(e, 0), r = Math.min(r, t.length);\r\n            for (let n = e; n < r; n++)\r\n                if (1 === t[n]) return !1;\r\n            return !0\r\n        }\r\n        static isWhiteVertical(t, e, r, n) {\r\n            r = Math.max(r, 0), n = Math.min(n, t.length);\r\n            for (let i = r; i < n; i++)\r\n                if (1 === t[i][e]) return !1;\r\n            return !0\r\n        }\r\n        static applyMaskPenaltyRule4(t) {\r\n            let e = 0;\r\n            const r = t.getArray(),\r\n                    n = t.getWidth(),\r\n                    i = t.getHeight();\r\n            for (let t = 0; t < i; t++) {\r\n                const i = r[t];\r\n                for (let t = 0; t < n; t++) 1 === i[t] && e++\r\n            }\r\n            const s = t.getHeight() * t.getWidth();\r\n            return Math.floor(10 * Math.abs(2 * e - s) / s) * cr.N4\r\n        }\r\n        static getDataMaskBit(t, e, r) {\r\n            let n, i;\r\n            switch (t) {\r\n                case 0:\r\n                    n = r + e & 1;\r\n                    break;\r\n                case 1:\r\n                    n = 1 & r;\r\n                    break;\r\n                case 2:\r\n                    n = e % 3;\r\n                    break;\r\n                case 3:\r\n                    n = (r + e) % 3;\r\n                    break;\r\n                case 4:\r\n                    n = Math.floor(r / 2) + Math.floor(e / 3) & 1;\r\n                    break;\r\n                case 5:\r\n                    n = (1 & (i = r * e)) + i % 3;\r\n                    break;\r\n                case 6:\r\n                    n = (1 & (i = r * e)) + i % 3 & 1;\r\n                    break;\r\n                case 7:\r\n                    n = (i = r * e) % 3 + (r + e & 1) & 1;\r\n                    break;\r\n                default:\r\n                    throw new o(\"Invalid mask pattern: \" + t)\r\n            }\r\n            return 0 === n\r\n        }\r\n        static applyMaskPenaltyRule1Internal(t, e) {\r\n            let r = 0;\r\n            const n = e ? t.getHeight() : t.getWidth(),\r\n                    i = e ? t.getWidth() : t.getHeight(),\r\n                    s = t.getArray();\r\n            for (let t = 0; t < n; t++) {\r\n                let n = 0,\r\n                        o = -1;\r\n                for (let a = 0; a < i; a++) {\r\n                    const i = e ? s[t][a] : s[a][t];\r\n                    i === o ? n++ : (n >= 5 && (r += cr.N1 + (n - 5)), n = 1, o = i)\r\n                }\r\n                n >= 5 && (r += cr.N1 + (n - 5))\r\n            }\r\n            return r\r\n        }\r\n    }\r\n    cr.N1 = 3, cr.N2 = 3, cr.N3 = 40, cr.N4 = 10;\r\n    class ur {\r\n        constructor(t, e) {\r\n            this.width = t, this.height = e;\r\n            const r = new Array(e);\r\n            for (let n = 0; n !== e; n++) r[n] = new Uint8Array(t);\r\n            this.bytes = r\r\n        }\r\n        getHeight() {\r\n            return this.height\r\n        }\r\n        getWidth() {\r\n            return this.width\r\n        }\r\n        get(t, e) {\r\n            return this.bytes[e][t]\r\n        }\r\n        getArray() {\r\n            return this.bytes\r\n        }\r\n        setNumber(t, e, r) {\r\n            this.bytes[e][t] = r\r\n        }\r\n        setBoolean(t, e, r) {\r\n            this.bytes[e][t] = r ? 1 : 0\r\n        }\r\n        clear(t) {\r\n            for (const e of this.bytes) g.fill(e, t)\r\n        }\r\n        equals(t) {\r\n            if (!(t instanceof ur)) return !1;\r\n            const e = t;\r\n            if (this.width !== e.width) return !1;\r\n            if (this.height !== e.height) return !1;\r\n            for (let t = 0, r = this.height; t < r; ++t) {\r\n                const r = this.bytes[t],\r\n                        n = e.bytes[t];\r\n                for (let t = 0, e = this.width; t < e; ++t)\r\n                    if (r[t] !== n[t]) return !1\r\n            }\r\n            return !0\r\n        }\r\n        toString() {\r\n            const t = new p;\r\n            for (let e = 0, r = this.height; e < r; ++e) {\r\n                const r = this.bytes[e];\r\n                for (let e = 0, n = this.width; e < n; ++e) switch (r[e]) {\r\n                    case 0:\r\n                        t.append(\" 0\");\r\n                        break;\r\n                    case 1:\r\n                        t.append(\" 1\");\r\n                        break;\r\n                    default:\r\n                        t.append(\"  \")\r\n                }\r\n                t.append(\"\\n\")\r\n            }\r\n            return t.toString()\r\n        }\r\n    }\r\n    class dr {\r\n        constructor() {\r\n            this.maskPattern = -1\r\n        }\r\n        getMode() {\r\n            return this.mode\r\n        }\r\n        getECLevel() {\r\n            return this.ecLevel\r\n        }\r\n        getVersion() {\r\n            return this.version\r\n        }\r\n        getMaskPattern() {\r\n            return this.maskPattern\r\n        }\r\n        getMatrix() {\r\n            return this.matrix\r\n        }\r\n        toString() {\r\n            const t = new p;\r\n            return t.append(\"<<\\n\"), t.append(\" mode: \"), t.append(this.mode ? this.mode.toString() : \"null\"), t.append(\"\\n ecLevel: \"), t.append(this.ecLevel ? this.ecLevel.toString() : \"null\"), t.append(\"\\n version: \"), t.append(this.version ? this.version.toString() : \"null\"), t.append(\"\\n maskPattern: \"), t.append(this.maskPattern.toString()), this.matrix ? (t.append(\"\\n matrix:\\n\"), t.append(this.matrix.toString())) : t.append(\"\\n matrix: null\\n\"), t.append(\">>\\n\"), t.toString()\r\n        }\r\n        setMode(t) {\r\n            this.mode = t\r\n        }\r\n        setECLevel(t) {\r\n            this.ecLevel = t\r\n        }\r\n        setVersion(t) {\r\n            this.version = t\r\n        }\r\n        setMaskPattern(t) {\r\n            this.maskPattern = t\r\n        }\r\n        setMatrix(t) {\r\n            this.matrix = t\r\n        }\r\n        static isValidMaskPattern(t) {\r\n            return t >= 0 && t < dr.NUM_MASK_PATTERNS\r\n        }\r\n    }\r\n    dr.NUM_MASK_PATTERNS = 8;\r\n    class gr extends i {}\r\n    gr.kind = \"WriterException\";\r\n    class fr {\r\n        constructor() {}\r\n        static clearMatrix(t) {\r\n            t.clear(255)\r\n        }\r\n        static buildMatrix(t, e, r, n, i) {\r\n            fr.clearMatrix(i), fr.embedBasicPatterns(r, i), fr.embedTypeInfo(e, n, i), fr.maybeEmbedVersionInfo(r, i), fr.embedDataBits(t, n, i)\r\n        }\r\n        static embedBasicPatterns(t, e) {\r\n            fr.embedPositionDetectionPatternsAndSeparators(e), fr.embedDarkDotAtLeftBottomCorner(e), fr.maybeEmbedPositionAdjustmentPatterns(t, e), fr.embedTimingPatterns(e)\r\n        }\r\n        static embedTypeInfo(t, e, r) {\r\n            const n = new w;\r\n            fr.makeTypeInfoBits(t, e, n);\r\n            for (let t = 0, e = n.getSize(); t < e; ++t) {\r\n                const e = n.get(n.getSize() - 1 - t),\r\n                        i = fr.TYPE_INFO_COORDINATES[t],\r\n                        s = i[0],\r\n                        o = i[1];\r\n                if (r.setBoolean(s, o, e), t < 8) {\r\n                    const n = r.getWidth() - t - 1,\r\n                            i = 8;\r\n                    r.setBoolean(n, i, e)\r\n                } else {\r\n                    const n = 8,\r\n                            i = r.getHeight() - 7 + (t - 8);\r\n                    r.setBoolean(n, i, e)\r\n                }\r\n            }\r\n        }\r\n        static maybeEmbedVersionInfo(t, e) {\r\n            if (t.getVersionNumber() < 7) return;\r\n            const r = new w;\r\n            fr.makeVersionInfoBits(t, r);\r\n            let n = 17;\r\n            for (let t = 0; t < 6; ++t)\r\n                for (let i = 0; i < 3; ++i) {\r\n                    const s = r.get(n);\r\n                    n--, e.setBoolean(t, e.getHeight() - 11 + i, s), e.setBoolean(e.getHeight() - 11 + i, t, s)\r\n                }\r\n        }\r\n        static embedDataBits(t, e, r) {\r\n            let n = 0,\r\n                    i = -1,\r\n                    s = r.getWidth() - 1,\r\n                    o = r.getHeight() - 1;\r\n            for (; s > 0;) {\r\n                for (6 === s && (s -= 1); o >= 0 && o < r.getHeight();) {\r\n                    for (let i = 0; i < 2; ++i) {\r\n                        const a = s - i;\r\n                        if (!fr.isEmpty(r.get(a, o))) continue;\r\n                        let l;\r\n                        n < t.getSize() ? (l = t.get(n), ++n) : l = !1, 255 !== e && cr.getDataMaskBit(e, a, o) && (l = !l), r.setBoolean(a, o, l)\r\n                    }\r\n                    o += i\r\n                }\r\n                o += i = -i, s -= 2\r\n            }\r\n            if (n !== t.getSize()) throw new gr(\"Not all bits consumed: \" + n + \"/\" + t.getSize())\r\n        }\r\n        static findMSBSet(t) {\r\n            return 32 - f.numberOfLeadingZeros(t)\r\n        }\r\n        static calculateBCHCode(t, e) {\r\n            if (0 === e) throw new o(\"0 polynomial\");\r\n            const r = fr.findMSBSet(e);\r\n            for (t <<= r - 1; fr.findMSBSet(t) >= r;) t ^= e << fr.findMSBSet(t) - r;\r\n            return t\r\n        }\r\n        static makeTypeInfoBits(t, e, r) {\r\n            if (!dr.isValidMaskPattern(e)) throw new gr(\"Invalid mask pattern\");\r\n            const n = t.getBits() << 3 | e;\r\n            r.appendBits(n, 5);\r\n            const i = fr.calculateBCHCode(n, fr.TYPE_INFO_POLY);\r\n            r.appendBits(i, 10);\r\n            const s = new w;\r\n            if (s.appendBits(fr.TYPE_INFO_MASK_PATTERN, 15), r.xor(s), 15 !== r.getSize()) throw new gr(\"should not happen but we got: \" + r.getSize())\r\n        }\r\n        static makeVersionInfoBits(t, e) {\r\n            e.appendBits(t.getVersionNumber(), 6);\r\n            const r = fr.calculateBCHCode(t.getVersionNumber(), fr.VERSION_INFO_POLY);\r\n            if (e.appendBits(r, 12), 18 !== e.getSize()) throw new gr(\"should not happen but we got: \" + e.getSize())\r\n        }\r\n        static isEmpty(t) {\r\n            return 255 === t\r\n        }\r\n        static embedTimingPatterns(t) {\r\n            for (let e = 8; e < t.getWidth() - 8; ++e) {\r\n                const r = (e + 1) % 2;\r\n                fr.isEmpty(t.get(e, 6)) && t.setNumber(e, 6, r), fr.isEmpty(t.get(6, e)) && t.setNumber(6, e, r)\r\n            }\r\n        }\r\n        static embedDarkDotAtLeftBottomCorner(t) {\r\n            if (0 === t.get(8, t.getHeight() - 8)) throw new gr;\r\n            t.setNumber(8, t.getHeight() - 8, 1)\r\n        }\r\n        static embedHorizontalSeparationPattern(t, e, r) {\r\n            for (let n = 0; n < 8; ++n) {\r\n                if (!fr.isEmpty(r.get(t + n, e))) throw new gr;\r\n                r.setNumber(t + n, e, 0)\r\n            }\r\n        }\r\n        static embedVerticalSeparationPattern(t, e, r) {\r\n            for (let n = 0; n < 7; ++n) {\r\n                if (!fr.isEmpty(r.get(t, e + n))) throw new gr;\r\n                r.setNumber(t, e + n, 0)\r\n            }\r\n        }\r\n        static embedPositionAdjustmentPattern(t, e, r) {\r\n            for (let n = 0; n < 5; ++n) {\r\n                const i = fr.POSITION_ADJUSTMENT_PATTERN[n];\r\n                for (let s = 0; s < 5; ++s) r.setNumber(t + s, e + n, i[s])\r\n            }\r\n        }\r\n        static embedPositionDetectionPattern(t, e, r) {\r\n            for (let n = 0; n < 7; ++n) {\r\n                const i = fr.POSITION_DETECTION_PATTERN[n];\r\n                for (let s = 0; s < 7; ++s) r.setNumber(t + s, e + n, i[s])\r\n            }\r\n        }\r\n        static embedPositionDetectionPatternsAndSeparators(t) {\r\n            const e = fr.POSITION_DETECTION_PATTERN[0].length;\r\n            fr.embedPositionDetectionPattern(0, 0, t), fr.embedPositionDetectionPattern(t.getWidth() - e, 0, t), fr.embedPositionDetectionPattern(0, t.getWidth() - e, t);\r\n            fr.embedHorizontalSeparationPattern(0, 7, t), fr.embedHorizontalSeparationPattern(t.getWidth() - 8, 7, t), fr.embedHorizontalSeparationPattern(0, t.getWidth() - 8, t);\r\n            fr.embedVerticalSeparationPattern(7, 0, t), fr.embedVerticalSeparationPattern(t.getHeight() - 7 - 1, 0, t), fr.embedVerticalSeparationPattern(7, t.getHeight() - 7, t)\r\n        }\r\n        static maybeEmbedPositionAdjustmentPatterns(t, e) {\r\n            if (t.getVersionNumber() < 2) return;\r\n            const r = t.getVersionNumber() - 1,\r\n                    n = fr.POSITION_ADJUSTMENT_PATTERN_COORDINATE_TABLE[r];\r\n            for (let t = 0, r = n.length; t !== r; t++) {\r\n                const i = n[t];\r\n                if (i >= 0)\r\n                    for (let t = 0; t !== r; t++) {\r\n                        const r = n[t];\r\n                        r >= 0 && fr.isEmpty(e.get(r, i)) && fr.embedPositionAdjustmentPattern(r - 2, i - 2, e)\r\n                    }\r\n            }\r\n        }\r\n    }\r\n    fr.POSITION_DETECTION_PATTERN = Array.from([Int32Array.from([1, 1, 1, 1, 1, 1, 1]), Int32Array.from([1, 0, 0, 0, 0, 0, 1]), Int32Array.from([1, 0, 1, 1, 1, 0, 1]), Int32Array.from([1, 0, 1, 1, 1, 0, 1]), Int32Array.from([1, 0, 1, 1, 1, 0, 1]), Int32Array.from([1, 0, 0, 0, 0, 0, 1]), Int32Array.from([1, 1, 1, 1, 1, 1, 1])]), fr.POSITION_ADJUSTMENT_PATTERN = Array.from([Int32Array.from([1, 1, 1, 1, 1]), Int32Array.from([1, 0, 0, 0, 1]), Int32Array.from([1, 0, 1, 0, 1]), Int32Array.from([1, 0, 0, 0, 1]), Int32Array.from([1, 1, 1, 1, 1])]), fr.POSITION_ADJUSTMENT_PATTERN_COORDINATE_TABLE = Array.from([Int32Array.from([-1, -1, -1, -1, -1, -1, -1]), Int32Array.from([6, 18, -1, -1, -1, -1, -1]), Int32Array.from([6, 22, -1, -1, -1, -1, -1]), Int32Array.from([6, 26, -1, -1, -1, -1, -1]), Int32Array.from([6, 30, -1, -1, -1, -1, -1]), Int32Array.from([6, 34, -1, -1, -1, -1, -1]), Int32Array.from([6, 22, 38, -1, -1, -1, -1]), Int32Array.from([6, 24, 42, -1, -1, -1, -1]), Int32Array.from([6, 26, 46, -1, -1, -1, -1]), Int32Array.from([6, 28, 50, -1, -1, -1, -1]), Int32Array.from([6, 30, 54, -1, -1, -1, -1]), Int32Array.from([6, 32, 58, -1, -1, -1, -1]), Int32Array.from([6, 34, 62, -1, -1, -1, -1]), Int32Array.from([6, 26, 46, 66, -1, -1, -1]), Int32Array.from([6, 26, 48, 70, -1, -1, -1]), Int32Array.from([6, 26, 50, 74, -1, -1, -1]), Int32Array.from([6, 30, 54, 78, -1, -1, -1]), Int32Array.from([6, 30, 56, 82, -1, -1, -1]), Int32Array.from([6, 30, 58, 86, -1, -1, -1]), Int32Array.from([6, 34, 62, 90, -1, -1, -1]), Int32Array.from([6, 28, 50, 72, 94, -1, -1]), Int32Array.from([6, 26, 50, 74, 98, -1, -1]), Int32Array.from([6, 30, 54, 78, 102, -1, -1]), Int32Array.from([6, 28, 54, 80, 106, -1, -1]), Int32Array.from([6, 32, 58, 84, 110, -1, -1]), Int32Array.from([6, 30, 58, 86, 114, -1, -1]), Int32Array.from([6, 34, 62, 90, 118, -1, -1]), Int32Array.from([6, 26, 50, 74, 98, 122, -1]), Int32Array.from([6, 30, 54, 78, 102, 126, -1]), Int32Array.from([6, 26, 52, 78, 104, 130, -1]), Int32Array.from([6, 30, 56, 82, 108, 134, -1]), Int32Array.from([6, 34, 60, 86, 112, 138, -1]), Int32Array.from([6, 30, 58, 86, 114, 142, -1]), Int32Array.from([6, 34, 62, 90, 118, 146, -1]), Int32Array.from([6, 30, 54, 78, 102, 126, 150]), Int32Array.from([6, 24, 50, 76, 102, 128, 154]), Int32Array.from([6, 28, 54, 80, 106, 132, 158]), Int32Array.from([6, 32, 58, 84, 110, 136, 162]), Int32Array.from([6, 26, 54, 82, 110, 138, 166]), Int32Array.from([6, 30, 58, 86, 114, 142, 170])]), fr.TYPE_INFO_COORDINATES = Array.from([Int32Array.from([8, 0]), Int32Array.from([8, 1]), Int32Array.from([8, 2]), Int32Array.from([8, 3]), Int32Array.from([8, 4]), Int32Array.from([8, 5]), Int32Array.from([8, 7]), Int32Array.from([8, 8]), Int32Array.from([7, 8]), Int32Array.from([5, 8]), Int32Array.from([4, 8]), Int32Array.from([3, 8]), Int32Array.from([2, 8]), Int32Array.from([1, 8]), Int32Array.from([0, 8])]), fr.VERSION_INFO_POLY = 7973, fr.TYPE_INFO_POLY = 1335, fr.TYPE_INFO_MASK_PATTERN = 21522;\r\n    class wr {\r\n        constructor(t, e) {\r\n            this.dataBytes = t, this.errorCorrectionBytes = e\r\n        }\r\n        getDataBytes() {\r\n            return this.dataBytes\r\n        }\r\n        getErrorCorrectionBytes() {\r\n            return this.errorCorrectionBytes\r\n        }\r\n    }\r\n    class Ar {\r\n        constructor() {}\r\n        static calculateMaskPenalty(t) {\r\n            return cr.applyMaskPenaltyRule1(t) + cr.applyMaskPenaltyRule2(t) + cr.applyMaskPenaltyRule3(t) + cr.applyMaskPenaltyRule4(t)\r\n        }\r\n        static encode(t, e, r = null) {\r\n            let n = Ar.DEFAULT_BYTE_MODE_ENCODING;\r\n            const i = null !== r && void 0 !== r.get(lr.CHARACTER_SET);\r\n            i && (n = r.get(lr.CHARACTER_SET).toString());\r\n            const s = this.chooseMode(t, n),\r\n                    o = new w;\r\n            if (s === _e.BYTE && (i || Ar.DEFAULT_BYTE_MODE_ENCODING !== n)) {\r\n                const t = m.getCharacterSetECIByName(n);\r\n                void 0 !== t && this.appendECI(t, o)\r\n            }\r\n            this.appendModeInfo(s, o);\r\n            const a = new w;\r\n            let l;\r\n            if (this.appendBytes(t, s, a, n), null !== r && void 0 !== r.get(lr.QR_VERSION)) {\r\n                const t = Number.parseInt(r.get(lr.QR_VERSION).toString(), 10);\r\n                l = Ae.getVersionForNumber(t);\r\n                const n = this.calculateBitsNeeded(s, o, a, l);\r\n                if (!this.willFit(n, l, e)) throw new gr(\"Data too big for requested version\")\r\n            } else l = this.recommendVersion(e, s, o, a);\r\n            const h = new w;\r\n            h.appendBitArray(o);\r\n            const c = s === _e.BYTE ? a.getSizeInBytes() : t.length;\r\n            this.appendLengthInfo(c, l, s, h), h.appendBitArray(a);\r\n            const u = l.getECBlocksForLevel(e),\r\n                    d = l.getTotalCodewords() - u.getTotalECCodewords();\r\n            this.terminateBits(d, h);\r\n            const g = this.interleaveWithECBytes(h, l.getTotalCodewords(), d, u.getNumBlocks()),\r\n                    f = new dr;\r\n            f.setECLevel(e), f.setMode(s), f.setVersion(l);\r\n            const A = l.getDimensionForVersion(),\r\n                    C = new ur(A, A),\r\n                    E = this.chooseMaskPattern(g, e, l, C);\r\n            return f.setMaskPattern(E), fr.buildMatrix(g, e, l, E, C), f.setMatrix(C), f\r\n        }\r\n        static recommendVersion(t, e, r, n) {\r\n            const i = this.calculateBitsNeeded(e, r, n, Ae.getVersionForNumber(1)),\r\n                    s = this.chooseVersion(i, t),\r\n                    o = this.calculateBitsNeeded(e, r, n, s);\r\n            return this.chooseVersion(o, t)\r\n        }\r\n        static calculateBitsNeeded(t, e, r, n) {\r\n            return e.getSize() + t.getCharacterCountBits(n) + r.getSize()\r\n        }\r\n        static getAlphanumericCode(t) {\r\n            return t < Ar.ALPHANUMERIC_TABLE.length ? Ar.ALPHANUMERIC_TABLE[t] : -1\r\n        }\r\n        static chooseMode(t, e = null) {\r\n            if (m.SJIS.getName() === e && this.isOnlyDoubleByteKanji(t)) return _e.KANJI;\r\n            let r = !1,\r\n                    n = !1;\r\n            for (let e = 0, i = t.length; e < i; ++e) {\r\n                const i = t.charAt(e);\r\n                if (Ar.isDigit(i)) r = !0;\r\n                else {\r\n                    if (-1 === this.getAlphanumericCode(i.charCodeAt(0))) return _e.BYTE;\r\n                    n = !0\r\n                }\r\n            }\r\n            return n ? _e.ALPHANUMERIC : r ? _e.NUMERIC : _e.BYTE\r\n        }\r\n        static isOnlyDoubleByteKanji(t) {\r\n            let e;\r\n            try {\r\n                e = I.encode(t, m.SJIS)\r\n            } catch (t) {\r\n                return !1\r\n            }\r\n            const r = e.length;\r\n            if (r % 2 != 0) return !1;\r\n            for (let t = 0; t < r; t += 2) {\r\n                const r = 255 & e[t];\r\n                if ((r < 129 || r > 159) && (r < 224 || r > 235)) return !1\r\n            }\r\n            return !0\r\n        }\r\n        static chooseMaskPattern(t, e, r, n) {\r\n            let i = Number.MAX_SAFE_INTEGER,\r\n                    s = -1;\r\n            for (let o = 0; o < dr.NUM_MASK_PATTERNS; o++) {\r\n                fr.buildMatrix(t, e, r, o, n);\r\n                let a = this.calculateMaskPenalty(n);\r\n                a < i && (i = a, s = o)\r\n            }\r\n            return s\r\n        }\r\n        static chooseVersion(t, e) {\r\n            for (let r = 1; r <= 40; r++) {\r\n                const n = Ae.getVersionForNumber(r);\r\n                if (Ar.willFit(t, n, e)) return n\r\n            }\r\n            throw new gr(\"Data too big\")\r\n        }\r\n        static willFit(t, e, r) {\r\n            return e.getTotalCodewords() - e.getECBlocksForLevel(r).getTotalECCodewords() >= (t + 7) / 8\r\n        }\r\n        static terminateBits(t, e) {\r\n            const r = 8 * t;\r\n            if (e.getSize() > r) throw new gr(\"data bits cannot fit in the QR Code\" + e.getSize() + \" > \" + r);\r\n            for (let t = 0; t < 4 && e.getSize() < r; ++t) e.appendBit(!1);\r\n            const n = 7 & e.getSize();\r\n            if (n > 0)\r\n                for (let t = n; t < 8; t++) e.appendBit(!1);\r\n            const i = t - e.getSizeInBytes();\r\n            for (let t = 0; t < i; ++t) e.appendBits(0 == (1 & t) ? 236 : 17, 8);\r\n            if (e.getSize() !== r) throw new gr(\"Bits size does not equal capacity\")\r\n        }\r\n        static getNumDataBytesAndNumECBytesForBlockID(t, e, r, n, i, s) {\r\n            if (n >= r) throw new gr(\"Block ID too large\");\r\n            const o = t % r,\r\n                    a = r - o,\r\n                    l = Math.floor(t / r),\r\n                    h = l + 1,\r\n                    c = Math.floor(e / r),\r\n                    u = c + 1,\r\n                    d = l - c,\r\n                    g = h - u;\r\n            if (d !== g) throw new gr(\"EC bytes mismatch\");\r\n            if (r !== a + o) throw new gr(\"RS blocks mismatch\");\r\n            if (t !== (c + d) * a + (u + g) * o) throw new gr(\"Total bytes mismatch\");\r\n            n < a ? (i[0] = c, s[0] = d) : (i[0] = u, s[0] = g)\r\n        }\r\n        static interleaveWithECBytes(t, e, r, n) {\r\n            if (t.getSizeInBytes() !== r) throw new gr(\"Number of bits and data bytes does not match\");\r\n            let i = 0,\r\n                    s = 0,\r\n                    o = 0;\r\n            const a = new Array;\r\n            for (let l = 0; l < n; ++l) {\r\n                const h = new Int32Array(1),\r\n                        c = new Int32Array(1);\r\n                Ar.getNumDataBytesAndNumECBytesForBlockID(e, r, n, l, h, c);\r\n                const u = h[0],\r\n                        d = new Uint8Array(u);\r\n                t.toBytes(8 * i, d, 0, u);\r\n                const g = Ar.generateECBytes(d, c[0]);\r\n                a.push(new wr(d, g)), s = Math.max(s, u), o = Math.max(o, g.length), i += h[0]\r\n            }\r\n            if (r !== i) throw new gr(\"Data bytes does not match offset\");\r\n            const l = new w;\r\n            for (let t = 0; t < s; ++t)\r\n                for (const e of a) {\r\n                    const r = e.getDataBytes();\r\n                    t < r.length && l.appendBits(r[t], 8)\r\n                }\r\n            for (let t = 0; t < o; ++t)\r\n                for (const e of a) {\r\n                    const r = e.getErrorCorrectionBytes();\r\n                    t < r.length && l.appendBits(r[t], 8)\r\n                }\r\n            if (e !== l.getSizeInBytes()) throw new gr(\"Interleaving error: \" + e + \" and \" + l.getSizeInBytes() + \" differ.\");\r\n            return l\r\n        }\r\n        static generateECBytes(t, e) {\r\n            const r = t.length,\r\n                    n = new Int32Array(r + e);\r\n            for (let e = 0; e < r; e++) n[e] = 255 & t[e];\r\n            new hr(q.QR_CODE_FIELD_256).encode(n, e);\r\n            const i = new Uint8Array(e);\r\n            for (let t = 0; t < e; t++) i[t] = n[r + t];\r\n            return i\r\n        }\r\n        static appendModeInfo(t, e) {\r\n            e.appendBits(t.getBits(), 4)\r\n        }\r\n        static appendLengthInfo(t, e, r, n) {\r\n            const i = r.getCharacterCountBits(e);\r\n            if (t >= 1 << i) throw new gr(t + \" is bigger than \" + ((1 << i) - 1));\r\n            n.appendBits(t, i)\r\n        }\r\n        static appendBytes(t, e, r, n) {\r\n            switch (e) {\r\n                case _e.NUMERIC:\r\n                    Ar.appendNumericBytes(t, r);\r\n                    break;\r\n                case _e.ALPHANUMERIC:\r\n                    Ar.appendAlphanumericBytes(t, r);\r\n                    break;\r\n                case _e.BYTE:\r\n                    Ar.append8BitBytes(t, r, n);\r\n                    break;\r\n                case _e.KANJI:\r\n                    Ar.appendKanjiBytes(t, r);\r\n                    break;\r\n                default:\r\n                    throw new gr(\"Invalid mode: \" + e)\r\n            }\r\n        }\r\n        static getDigit(t) {\r\n            return t.charCodeAt(0) - 48\r\n        }\r\n        static isDigit(t) {\r\n            const e = Ar.getDigit(t);\r\n            return e >= 0 && e <= 9\r\n        }\r\n        static appendNumericBytes(t, e) {\r\n            const r = t.length;\r\n            let n = 0;\r\n            for (; n < r;) {\r\n                const i = Ar.getDigit(t.charAt(n));\r\n                if (n + 2 < r) {\r\n                    const r = Ar.getDigit(t.charAt(n + 1)),\r\n                            s = Ar.getDigit(t.charAt(n + 2));\r\n                    e.appendBits(100 * i + 10 * r + s, 10), n += 3\r\n                } else if (n + 1 < r) {\r\n                    const r = Ar.getDigit(t.charAt(n + 1));\r\n                    e.appendBits(10 * i + r, 7), n += 2\r\n                } else e.appendBits(i, 4), n++\r\n            }\r\n        }\r\n        static appendAlphanumericBytes(t, e) {\r\n            const r = t.length;\r\n            let n = 0;\r\n            for (; n < r;) {\r\n                const i = Ar.getAlphanumericCode(t.charCodeAt(n));\r\n                if (-1 === i) throw new gr;\r\n                if (n + 1 < r) {\r\n                    const r = Ar.getAlphanumericCode(t.charCodeAt(n + 1));\r\n                    if (-1 === r) throw new gr;\r\n                    e.appendBits(45 * i + r, 11), n += 2\r\n                } else e.appendBits(i, 6), n++\r\n            }\r\n        }\r\n        static append8BitBytes(t, e, r) {\r\n            let n;\r\n            try {\r\n                n = I.encode(t, r)\r\n            } catch (t) {\r\n                throw new gr(t)\r\n            }\r\n            for (let t = 0, r = n.length; t !== r; t++) {\r\n                const r = n[t];\r\n                e.appendBits(r, 8)\r\n            }\r\n        }\r\n        static appendKanjiBytes(t, e) {\r\n            let r;\r\n            try {\r\n                r = I.encode(t, m.SJIS)\r\n            } catch (t) {\r\n                throw new gr(t)\r\n            }\r\n            const n = r.length;\r\n            for (let t = 0; t < n; t += 2) {\r\n                const n = (255 & r[t]) << 8 & 4294967295 | 255 & r[t + 1];\r\n                let i = -1;\r\n                if (n >= 33088 && n <= 40956 ? i = n - 33088 : n >= 57408 && n <= 60351 && (i = n - 49472), -1 === i) throw new gr(\"Invalid byte sequence\");\r\n                const s = 192 * (i >> 8) + (255 & i);\r\n                e.appendBits(s, 13)\r\n            }\r\n        }\r\n        static appendECI(t, e) {\r\n            e.appendBits(_e.ECI.getBits(), 4), e.appendBits(t.getValue(), 8)\r\n        }\r\n    }\r\n    Ar.ALPHANUMERIC_TABLE = Int32Array.from([-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 36, -1, -1, -1, 37, 38, -1, -1, -1, -1, 39, 40, -1, 41, 42, 43, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 44, -1, -1, -1, -1, -1, -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, -1, -1, -1, -1, -1]), Ar.DEFAULT_BYTE_MODE_ENCODING = m.UTF8.getName();\r\n    class Cr {\r\n        write(t, e, r, n = null) {\r\n            if (0 === t.length) throw new o(\"Found empty contents\");\r\n            if (e < 0 || r < 0) throw new o(\"Requested dimensions are too small: \" + e + \"x\" + r);\r\n            let i = de.L,\r\n                    s = Cr.QUIET_ZONE_SIZE;\r\n            null !== n && (void 0 !== n.get(lr.ERROR_CORRECTION) && (i = de.fromString(n.get(lr.ERROR_CORRECTION).toString())), void 0 !== n.get(lr.MARGIN) && (s = Number.parseInt(n.get(lr.MARGIN).toString(), 10)));\r\n            const a = Ar.encode(t, i, n);\r\n            return this.renderResult(a, e, r, s)\r\n        }\r\n        writeToDom(t, e, r, n, i = null) {\r\n            \"string\" == typeof t && (t = document.querySelector(t));\r\n            const s = this.write(e, r, n, i);\r\n            t && t.appendChild(s)\r\n        }\r\n        renderResult(t, e, r, n) {\r\n            const i = t.getMatrix();\r\n            if (null === i) throw new j;\r\n            const s = i.getWidth(),\r\n                    o = i.getHeight(),\r\n                    a = s + 2 * n,\r\n                    l = o + 2 * n,\r\n                    h = Math.max(e, a),\r\n                    c = Math.max(r, l),\r\n                    u = Math.min(Math.floor(h / a), Math.floor(c / l)),\r\n                    d = Math.floor((h - s * u) / 2),\r\n                    g = Math.floor((c - o * u) / 2),\r\n                    f = this.createSVGElement(h, c);\r\n            for (let t = 0, e = g; t < o; t++, e += u)\r\n                for (let r = 0, n = d; r < s; r++, n += u)\r\n                    if (1 === i.get(r, t)) {\r\n                        const t = this.createSvgRectElement(n, e, u, u);\r\n                        f.appendChild(t)\r\n                    } return f\r\n        }\r\n        createSVGElement(t, e) {\r\n            const r = document.createElementNS(Cr.SVG_NS, \"svg\");\r\n            return r.setAttributeNS(null, \"height\", t.toString()), r.setAttributeNS(null, \"width\", e.toString()), r\r\n        }\r\n        createSvgRectElement(t, e, r, n) {\r\n            const i = document.createElementNS(Cr.SVG_NS, \"rect\");\r\n            return i.setAttributeNS(null, \"x\", t.toString()), i.setAttributeNS(null, \"y\", e.toString()), i.setAttributeNS(null, \"height\", r.toString()), i.setAttributeNS(null, \"width\", n.toString()), i.setAttributeNS(null, \"fill\", \"#000000\"), i\r\n        }\r\n    }\r\n    Cr.QUIET_ZONE_SIZE = 4, Cr.SVG_NS = \"http://www.w3.org/2000/svg\";\r\n    class Er {\r\n        encode(t, e, r, n, i) {\r\n            if (0 === t.length) throw new o(\"Found empty contents\");\r\n            if (e !== k.QR_CODE) throw new o(\"Can only encode QR_CODE, but got \" + e);\r\n            if (r < 0 || n < 0) throw new o(`Requested dimensions are too small: ${r}x${n}`);\r\n            let s = de.L,\r\n                    a = Er.QUIET_ZONE_SIZE;\r\n            null !== i && (void 0 !== i.get(lr.ERROR_CORRECTION) && (s = de.fromString(i.get(lr.ERROR_CORRECTION).toString())), void 0 !== i.get(lr.MARGIN) && (a = Number.parseInt(i.get(lr.MARGIN).toString(), 10)));\r\n            const l = Ar.encode(t, s, i);\r\n            return Er.renderResult(l, r, n, a)\r\n        }\r\n        static renderResult(t, e, r, n) {\r\n            const i = t.getMatrix();\r\n            if (null === i) throw new j;\r\n            const s = i.getWidth(),\r\n                    o = i.getHeight(),\r\n                    a = s + 2 * n,\r\n                    l = o + 2 * n,\r\n                    h = Math.max(e, a),\r\n                    c = Math.max(r, l),\r\n                    u = Math.min(Math.floor(h / a), Math.floor(c / l)),\r\n                    d = Math.floor((h - s * u) / 2),\r\n                    g = Math.floor((c - o * u) / 2),\r\n                    f = new T(h, c);\r\n            for (let t = 0, e = g; t < o; t++, e += u)\r\n                for (let r = 0, n = d; r < s; r++, n += u) 1 === i.get(r, t) && f.setRegion(n, e, u, u);\r\n            return f\r\n        }\r\n    }\r\n    Er.QUIET_ZONE_SIZE = 4;\r\n    class mr extends y {\r\n        constructor(t, e, r, n, i, s, a, l) {\r\n            if (super(s, a), this.yuvData = t, this.dataWidth = e, this.dataHeight = r, this.left = n, this.top = i, n + s > e || i + a > r) throw new o(\"Crop rectangle does not fit within image data.\");\r\n            l && this.reverseHorizontal(s, a)\r\n        }\r\n        getRow(t, e) {\r\n            if (t < 0 || t >= this.getHeight()) throw new o(\"Requested row is outside the image: \" + t);\r\n            const r = this.getWidth();\r\n            (null == e || e.length < r) && (e = new Uint8ClampedArray(r));\r\n            const n = (t + this.top) * this.dataWidth + this.left;\r\n            return c.arraycopy(this.yuvData, n, e, 0, r), e\r\n        }\r\n        getMatrix() {\r\n            const t = this.getWidth(),\r\n                    e = this.getHeight();\r\n            if (t === this.dataWidth && e === this.dataHeight) return this.yuvData;\r\n            const r = t * e,\r\n                    n = new Uint8ClampedArray(r);\r\n            let i = this.top * this.dataWidth + this.left;\r\n            if (t === this.dataWidth) return c.arraycopy(this.yuvData, i, n, 0, r), n;\r\n            for (let r = 0; r < e; r++) {\r\n                const e = r * t;\r\n                c.arraycopy(this.yuvData, i, n, e, t), i += this.dataWidth\r\n            }\r\n            return n\r\n        }\r\n        isCropSupported() {\r\n            return !0\r\n        }\r\n        crop(t, e, r, n) {\r\n            return new mr(this.yuvData, this.dataWidth, this.dataHeight, this.left + t, this.top + e, r, n, !1)\r\n        }\r\n        renderThumbnail() {\r\n            const t = this.getWidth() / mr.THUMBNAIL_SCALE_FACTOR,\r\n                    e = this.getHeight() / mr.THUMBNAIL_SCALE_FACTOR,\r\n                    r = new Int32Array(t * e),\r\n                    n = this.yuvData;\r\n            let i = this.top * this.dataWidth + this.left;\r\n            for (let s = 0; s < e; s++) {\r\n                const e = s * t;\r\n                for (let s = 0; s < t; s++) {\r\n                    const t = 255 & n[i + s * mr.THUMBNAIL_SCALE_FACTOR];\r\n                    r[e + s] = 4278190080 | 65793 * t\r\n                }\r\n                i += this.dataWidth * mr.THUMBNAIL_SCALE_FACTOR\r\n            }\r\n            return r\r\n        }\r\n        getThumbnailWidth() {\r\n            return this.getWidth() / mr.THUMBNAIL_SCALE_FACTOR\r\n        }\r\n        getThumbnailHeight() {\r\n            return this.getHeight() / mr.THUMBNAIL_SCALE_FACTOR\r\n        }\r\n        reverseHorizontal(t, e) {\r\n            const r = this.yuvData;\r\n            for (let n = 0, i = this.top * this.dataWidth + this.left; n < e; n++, i += this.dataWidth) {\r\n                const e = i + t / 2;\r\n                for (let n = i, s = i + t - 1; n < e; n++, s--) {\r\n                    const t = r[n];\r\n                    r[n] = r[s], r[s] = t\r\n                }\r\n            }\r\n        }\r\n        invert() {\r\n            return new O(this)\r\n        }\r\n    }\r\n    mr.THUMBNAIL_SCALE_FACTOR = 2;\r\n    class _r extends y {\r\n        constructor(t, e, r, n, i, s, a) {\r\n            if (super(e, r), this.dataWidth = n, this.dataHeight = i, this.left = s, this.top = a, 4 === t.BYTES_PER_ELEMENT) {\r\n                const n = e * r,\r\n                        i = new Uint8ClampedArray(n);\r\n                for (let e = 0; e < n; e++) {\r\n                    const r = t[e],\r\n                            n = r >> 16 & 255,\r\n                            s = r >> 7 & 510,\r\n                            o = 255 & r;\r\n                    i[e] = (n + s + o) / 4 & 255\r\n                }\r\n                this.luminances = i\r\n            } else this.luminances = t;\r\n            if (void 0 === n && (this.dataWidth = e), void 0 === i && (this.dataHeight = r), void 0 === s && (this.left = 0), void 0 === a && (this.top = 0), this.left + e > this.dataWidth || this.top + r > this.dataHeight) throw new o(\"Crop rectangle does not fit within image data.\")\r\n        }\r\n        getRow(t, e) {\r\n            if (t < 0 || t >= this.getHeight()) throw new o(\"Requested row is outside the image: \" + t);\r\n            const r = this.getWidth();\r\n            (null == e || e.length < r) && (e = new Uint8ClampedArray(r));\r\n            const n = (t + this.top) * this.dataWidth + this.left;\r\n            return c.arraycopy(this.luminances, n, e, 0, r), e\r\n        }\r\n        getMatrix() {\r\n            const t = this.getWidth(),\r\n                    e = this.getHeight();\r\n            if (t === this.dataWidth && e === this.dataHeight) return this.luminances;\r\n            const r = t * e,\r\n                    n = new Uint8ClampedArray(r);\r\n            let i = this.top * this.dataWidth + this.left;\r\n            if (t === this.dataWidth) return c.arraycopy(this.luminances, i, n, 0, r), n;\r\n            for (let r = 0; r < e; r++) {\r\n                const e = r * t;\r\n                c.arraycopy(this.luminances, i, n, e, t), i += this.dataWidth\r\n            }\r\n            return n\r\n        }\r\n        isCropSupported() {\r\n            return !0\r\n        }\r\n        crop(t, e, r, n) {\r\n            return new _r(this.luminances, r, n, this.dataWidth, this.dataHeight, this.left + t, this.top + e)\r\n        }\r\n        invert() {\r\n            return new O(this)\r\n        }\r\n    }\r\n    class Ir extends m {\r\n        static forName(t) {\r\n            return this.getCharacterSetECIByName(t)\r\n        }\r\n    }\r\n    class Sr {}\r\n    Sr.ISO_8859_1 = m.ISO8859_1;\r\n    class pr {\r\n        isCompact() {\r\n            return this.compact\r\n        }\r\n        setCompact(t) {\r\n            this.compact = t\r\n        }\r\n        getSize() {\r\n            return this.size\r\n        }\r\n        setSize(t) {\r\n            this.size = t\r\n        }\r\n        getLayers() {\r\n            return this.layers\r\n        }\r\n        setLayers(t) {\r\n            this.layers = t\r\n        }\r\n        getCodeWords() {\r\n            return this.codeWords\r\n        }\r\n        setCodeWords(t) {\r\n            this.codeWords = t\r\n        }\r\n        getMatrix() {\r\n            return this.matrix\r\n        }\r\n        setMatrix(t) {\r\n            this.matrix = t\r\n        }\r\n    }\r\n    class Tr {\r\n        static singletonList(t) {\r\n            return [t]\r\n        }\r\n        static min(t, e) {\r\n            return t.sort(e)[0]\r\n        }\r\n    }\r\n    class Rr {\r\n        constructor(t) {\r\n            this.previous = t\r\n        }\r\n        getPrevious() {\r\n            return this.previous\r\n        }\r\n    }\r\n    class Nr extends Rr {\r\n        constructor(t, e, r) {\r\n            super(t), this.value = e, this.bitCount = r\r\n        }\r\n        appendTo(t, e) {\r\n            t.appendBits(this.value, this.bitCount)\r\n        }\r\n        add(t, e) {\r\n            return new Nr(this, t, e)\r\n        }\r\n        addBinaryShift(t, e) {\r\n            return console.warn(\"addBinaryShift on SimpleToken, this simply returns a copy of this token\"), new Nr(this, t, e)\r\n        }\r\n        toString() {\r\n            let t = this.value & (1 << this.bitCount) - 1;\r\n            return t |= 1 << this.bitCount, \"<\" + f.toBinaryString(t | 1 << this.bitCount).substring(1) + \">\"\r\n        }\r\n    }\r\n    class Dr extends Nr {\r\n        constructor(t, e, r) {\r\n            super(t, 0, 0), this.binaryShiftStart = e, this.binaryShiftByteCount = r\r\n        }\r\n        appendTo(t, e) {\r\n            for (let r = 0; r < this.binaryShiftByteCount; r++)(0 === r || 31 === r && this.binaryShiftByteCount <= 62) && (t.appendBits(31, 5), this.binaryShiftByteCount > 62 ? t.appendBits(this.binaryShiftByteCount - 31, 16) : 0 === r ? t.appendBits(Math.min(this.binaryShiftByteCount, 31), 5) : t.appendBits(this.binaryShiftByteCount - 31, 5)), t.appendBits(e[this.binaryShiftStart + r], 8)\r\n        }\r\n        addBinaryShift(t, e) {\r\n            return new Dr(this, t, e)\r\n        }\r\n        toString() {\r\n            return \"<\" + this.binaryShiftStart + \"::\" + (this.binaryShiftStart + this.binaryShiftByteCount - 1) + \">\"\r\n        }\r\n    }\r\n\r\n    function yr(t, e, r) {\r\n        return new Nr(t, e, r)\r\n    }\r\n    const Or = [\"UPPER\", \"LOWER\", \"DIGIT\", \"MIXED\", \"PUNCT\"],\r\n            Mr = 0,\r\n            br = 1,\r\n            Br = 2,\r\n            Pr = 3,\r\n            Lr = 4,\r\n            Fr = new Nr(null, 0, 0),\r\n            vr = [Int32Array.from([0, 327708, 327710, 327709, 656318]), Int32Array.from([590318, 0, 327710, 327709, 656318]), Int32Array.from([262158, 590300, 0, 590301, 932798]), Int32Array.from([327709, 327708, 656318, 0, 327710]), Int32Array.from([327711, 656380, 656382, 656381, 0])];\r\n    const kr = function(t) {\r\n        for (let e of t) g.fill(e, -1);\r\n        return t[Mr][Lr] = 0, t[br][Lr] = 0, t[br][Mr] = 28, t[Pr][Lr] = 0, t[Br][Lr] = 0, t[Br][Mr] = 15, t\r\n    }(g.createInt32Array(6, 6));\r\n    class xr {\r\n        constructor(t, e, r, n) {\r\n            this.token = t, this.mode = e, this.binaryShiftByteCount = r, this.bitCount = n\r\n        }\r\n        getMode() {\r\n            return this.mode\r\n        }\r\n        getToken() {\r\n            return this.token\r\n        }\r\n        getBinaryShiftByteCount() {\r\n            return this.binaryShiftByteCount\r\n        }\r\n        getBitCount() {\r\n            return this.bitCount\r\n        }\r\n        latchAndAppend(t, e) {\r\n            let r = this.bitCount,\r\n                    n = this.token;\r\n            if (t !== this.mode) {\r\n                let e = vr[this.mode][t];\r\n                n = yr(n, 65535 & e, e >> 16), r += e >> 16\r\n            }\r\n            let i = t === Br ? 4 : 5;\r\n            return n = yr(n, e, i), new xr(n, t, 0, r + i)\r\n        }\r\n        shiftAndAppend(t, e) {\r\n            let r = this.token,\r\n                    n = this.mode === Br ? 4 : 5;\r\n            return r = yr(r, kr[this.mode][t], n), r = yr(r, e, 5), new xr(r, this.mode, 0, this.bitCount + n + 5)\r\n        }\r\n        addBinaryShiftChar(t) {\r\n            let e = this.token,\r\n                    r = this.mode,\r\n                    n = this.bitCount;\r\n            if (this.mode === Lr || this.mode === Br) {\r\n                let t = vr[r][Mr];\r\n                e = yr(e, 65535 & t, t >> 16), n += t >> 16, r = Mr\r\n            }\r\n            let i = 0 === this.binaryShiftByteCount || 31 === this.binaryShiftByteCount ? 18 : 62 === this.binaryShiftByteCount ? 9 : 8,\r\n                    s = new xr(e, r, this.binaryShiftByteCount + 1, n + i);\r\n            return 2078 === s.binaryShiftByteCount && (s = s.endBinaryShift(t + 1)), s\r\n        }\r\n        endBinaryShift(t) {\r\n            if (0 === this.binaryShiftByteCount) return this;\r\n            let e = this.token;\r\n            return e = function(t, e, r) {\r\n                return new Dr(t, e, r)\r\n            }(e, t - this.binaryShiftByteCount, this.binaryShiftByteCount), new xr(e, this.mode, 0, this.bitCount)\r\n        }\r\n        isBetterThanOrEqualTo(t) {\r\n            let e = this.bitCount + (vr[this.mode][t.mode] >> 16);\r\n            return this.binaryShiftByteCount < t.binaryShiftByteCount ? e += xr.calculateBinaryShiftCost(t) - xr.calculateBinaryShiftCost(this) : this.binaryShiftByteCount > t.binaryShiftByteCount && t.binaryShiftByteCount > 0 && (e += 10), e <= t.bitCount\r\n        }\r\n        toBitArray(t) {\r\n            let e = [];\r\n            for (let r = this.endBinaryShift(t.length).token; null !== r; r = r.getPrevious()) e.unshift(r);\r\n            let r = new w;\r\n            for (const n of e) n.appendTo(r, t);\r\n            return r\r\n        }\r\n        toString() {\r\n            return S.format(\"%s bits=%d bytes=%d\", Or[this.mode], this.bitCount, this.binaryShiftByteCount)\r\n        }\r\n        static calculateBinaryShiftCost(t) {\r\n            return t.binaryShiftByteCount > 62 ? 21 : t.binaryShiftByteCount > 31 ? 20 : t.binaryShiftByteCount > 0 ? 10 : 0\r\n        }\r\n    }\r\n    xr.INITIAL_STATE = new xr(Fr, Mr, 0, 0);\r\n    const Vr = function(t) {\r\n        const e = S.getCharCode(\" \"),\r\n                r = S.getCharCode(\".\"),\r\n                n = S.getCharCode(\",\");\r\n        t[Mr][e] = 1;\r\n        const i = S.getCharCode(\"Z\"),\r\n                s = S.getCharCode(\"A\");\r\n        for (let e = s; e <= i; e++) t[Mr][e] = e - s + 2;\r\n        t[br][e] = 1;\r\n        const o = S.getCharCode(\"z\"),\r\n                a = S.getCharCode(\"a\");\r\n        for (let e = a; e <= o; e++) t[br][e] = e - a + 2;\r\n        t[Br][e] = 1;\r\n        const l = S.getCharCode(\"9\"),\r\n                h = S.getCharCode(\"0\");\r\n        for (let e = h; e <= l; e++) t[Br][e] = e - h + 2;\r\n        t[Br][n] = 12, t[Br][r] = 13;\r\n        const c = [\"\\0\", \" \", \"\u0001\", \"\u0002\", \"\u0003\", \"\u0004\", \"\u0005\", \"\u0006\", \"\u0007\", \"\\b\", \"\\t\", \"\\n\", \"\\v\", \"\\f\", \"\\r\", \"\u001b\", \"\u001c\", \"\u001d\", \"\u001e\", \"\u001f\", \"@\", \"\\\\\", \"^\", \"_\", \"`\", \"|\", \"~\", \"\"];\r\n        for (let e = 0; e < c.length; e++) t[Pr][S.getCharCode(c[e])] = e;\r\n        const u = [\"\\0\", \"\\r\", \"\\0\", \"\\0\", \"\\0\", \"\\0\", \"!\", \"'\", \"#\", \"$\", \"%\", \"&\", \"'\", \"(\", \")\", \"*\", \"+\", \",\", \"-\", \".\", \"/\", \":\", \";\", \"<\", \"=\", \">\", \"?\", \"[\", \"]\", \"{\", \"}\"];\r\n        for (let e = 0; e < u.length; e++) S.getCharCode(u[e]) > 0 && (t[Lr][S.getCharCode(u[e])] = e);\r\n        return t\r\n    }(g.createInt32Array(5, 256));\r\n    class Ur {\r\n        constructor(t) {\r\n            this.text = t\r\n        }\r\n        encode() {\r\n            const t = S.getCharCode(\" \"),\r\n                    e = S.getCharCode(\"\\n\");\r\n            let r = Tr.singletonList(xr.INITIAL_STATE);\r\n            for (let n = 0; n < this.text.length; n++) {\r\n                let i, s = n + 1 < this.text.length ? this.text[n + 1] : 0;\r\n                switch (this.text[n]) {\r\n                    case S.getCharCode(\"\\r\"):\r\n                        i = s === e ? 2 : 0;\r\n                        break;\r\n                    case S.getCharCode(\".\"):\r\n                        i = s === t ? 3 : 0;\r\n                        break;\r\n                    case S.getCharCode(\",\"):\r\n                        i = s === t ? 4 : 0;\r\n                        break;\r\n                    case S.getCharCode(\":\"):\r\n                        i = s === t ? 5 : 0;\r\n                        break;\r\n                    default:\r\n                        i = 0\r\n                }\r\n                i > 0 ? (r = Ur.updateStateListForPair(r, n, i), n++) : r = this.updateStateListForChar(r, n)\r\n            }\r\n            return Tr.min(r, (t, e) => t.getBitCount() - e.getBitCount()).toBitArray(this.text)\r\n        }\r\n        updateStateListForChar(t, e) {\r\n            const r = [];\r\n            for (let n of t) this.updateStateForChar(n, e, r);\r\n            return Ur.simplifyStates(r)\r\n        }\r\n        updateStateForChar(t, e, r) {\r\n            let n = 255 & this.text[e],\r\n                    i = Vr[t.getMode()][n] > 0,\r\n                    s = null;\r\n            for (let o = 0; o <= Lr; o++) {\r\n                let a = Vr[o][n];\r\n                if (a > 0) {\r\n                    if (null == s && (s = t.endBinaryShift(e)), !i || o === t.getMode() || o === Br) {\r\n                        const t = s.latchAndAppend(o, a);\r\n                        r.push(t)\r\n                    }\r\n                    if (!i && kr[t.getMode()][o] >= 0) {\r\n                        const t = s.shiftAndAppend(o, a);\r\n                        r.push(t)\r\n                    }\r\n                }\r\n            }\r\n            if (t.getBinaryShiftByteCount() > 0 || 0 === Vr[t.getMode()][n]) {\r\n                let n = t.addBinaryShiftChar(e);\r\n                r.push(n)\r\n            }\r\n        }\r\n        static updateStateListForPair(t, e, r) {\r\n            const n = [];\r\n            for (let i of t) this.updateStateForPair(i, e, r, n);\r\n            return this.simplifyStates(n)\r\n        }\r\n        static updateStateForPair(t, e, r, n) {\r\n            let i = t.endBinaryShift(e);\r\n            if (n.push(i.latchAndAppend(Lr, r)), t.getMode() !== Lr && n.push(i.shiftAndAppend(Lr, r)), 3 === r || 4 === r) {\r\n                let t = i.latchAndAppend(Br, 16 - r).latchAndAppend(Br, 1);\r\n                n.push(t)\r\n            }\r\n            if (t.getBinaryShiftByteCount() > 0) {\r\n                let r = t.addBinaryShiftChar(e).addBinaryShiftChar(e + 1);\r\n                n.push(r)\r\n            }\r\n        }\r\n        static simplifyStates(t) {\r\n            let e = [];\r\n            for (const r of t) {\r\n                let t = !0;\r\n                for (const n of e) {\r\n                    if (n.isBetterThanOrEqualTo(r)) {\r\n                        t = !1;\r\n                        break\r\n                    }\r\n                    r.isBetterThanOrEqualTo(n) && (e = e.filter(t => t !== n))\r\n                }\r\n                t && e.push(r)\r\n            }\r\n            return e\r\n        }\r\n    }\r\n    class Hr {\r\n        constructor() {}\r\n        static encodeBytes(t) {\r\n            return Hr.encode(t, Hr.DEFAULT_EC_PERCENT, Hr.DEFAULT_AZTEC_LAYERS)\r\n        }\r\n        static encode(t, e, r) {\r\n            let n, i, s, a, l, h = new Ur(t).encode(),\r\n                    c = f.truncDivision(h.getSize() * e, 100) + 11,\r\n                    u = h.getSize() + c;\r\n            if (r !== Hr.DEFAULT_AZTEC_LAYERS) {\r\n                if (n = r < 0, (i = Math.abs(r)) > (n ? Hr.MAX_NB_BITS_COMPACT : Hr.MAX_NB_BITS)) throw new o(S.format(\"Illegal value %s for layers\", r));\r\n                let t = (s = Hr.totalBitsInLayer(i, n)) - s % (a = Hr.WORD_SIZE[i]);\r\n                if ((l = Hr.stuffBits(h, a)).getSize() + c > t) throw new o(\"Data to large for user specified layer\");\r\n                if (n && l.getSize() > 64 * a) throw new o(\"Data to large for user specified layer\")\r\n            } else {\r\n                a = 0, l = null;\r\n                for (let t = 0;; t++) {\r\n                    if (t > Hr.MAX_NB_BITS) throw new o(\"Data too large for an Aztec code\");\r\n                    if (i = (n = t <= 3) ? t + 1 : t, u > (s = Hr.totalBitsInLayer(i, n))) continue;\r\n                    null != l && a === Hr.WORD_SIZE[i] || (a = Hr.WORD_SIZE[i], l = Hr.stuffBits(h, a));\r\n                    let e = s - s % a;\r\n                    if (!(n && l.getSize() > 64 * a) && l.getSize() + c <= e) break\r\n                }\r\n            }\r\n            let d, g = Hr.generateCheckWords(l, s, a),\r\n                    w = l.getSize() / a,\r\n                    A = Hr.generateModeMessage(n, i, w),\r\n                    C = (n ? 11 : 14) + 4 * i,\r\n                    E = new Int32Array(C);\r\n            if (n) {\r\n                d = C;\r\n                for (let t = 0; t < E.length; t++) E[t] = t\r\n            } else {\r\n                d = C + 1 + 2 * f.truncDivision(f.truncDivision(C, 2) - 1, 15);\r\n                let t = f.truncDivision(C, 2),\r\n                        e = f.truncDivision(d, 2);\r\n                for (let r = 0; r < t; r++) {\r\n                    let n = r + f.truncDivision(r, 15);\r\n                    E[t - r - 1] = e - n - 1, E[t + r] = e + n + 1\r\n                }\r\n            }\r\n            let m = new T(d);\r\n            for (let t = 0, e = 0; t < i; t++) {\r\n                let r = 4 * (i - t) + (n ? 9 : 12);\r\n                for (let n = 0; n < r; n++) {\r\n                    let i = 2 * n;\r\n                    for (let s = 0; s < 2; s++) g.get(e + i + s) && m.set(E[2 * t + s], E[2 * t + n]), g.get(e + 2 * r + i + s) && m.set(E[2 * t + n], E[C - 1 - 2 * t - s]), g.get(e + 4 * r + i + s) && m.set(E[C - 1 - 2 * t - s], E[C - 1 - 2 * t - n]), g.get(e + 6 * r + i + s) && m.set(E[C - 1 - 2 * t - n], E[2 * t + s])\r\n                }\r\n                e += 8 * r\r\n            }\r\n            if (Hr.drawModeMessage(m, n, d, A), n) Hr.drawBullsEye(m, f.truncDivision(d, 2), 5);\r\n            else {\r\n                Hr.drawBullsEye(m, f.truncDivision(d, 2), 7);\r\n                for (let t = 0, e = 0; t < f.truncDivision(C, 2) - 1; t += 15, e += 16)\r\n                    for (let t = 1 & f.truncDivision(d, 2); t < d; t += 2) m.set(f.truncDivision(d, 2) - e, t), m.set(f.truncDivision(d, 2) + e, t), m.set(t, f.truncDivision(d, 2) - e), m.set(t, f.truncDivision(d, 2) + e)\r\n            }\r\n            let _ = new pr;\r\n            return _.setCompact(n), _.setSize(d), _.setLayers(i), _.setCodeWords(w), _.setMatrix(m), _\r\n        }\r\n        static drawBullsEye(t, e, r) {\r\n            for (let n = 0; n < r; n += 2)\r\n                for (let r = e - n; r <= e + n; r++) t.set(r, e - n), t.set(r, e + n), t.set(e - n, r), t.set(e + n, r);\r\n            t.set(e - r, e - r), t.set(e - r + 1, e - r), t.set(e - r, e - r + 1), t.set(e + r, e - r), t.set(e + r, e - r + 1), t.set(e + r, e + r - 1)\r\n        }\r\n        static generateModeMessage(t, e, r) {\r\n            let n = new w;\r\n            return t ? (n.appendBits(e - 1, 2), n.appendBits(r - 1, 6), n = Hr.generateCheckWords(n, 28, 4)) : (n.appendBits(e - 1, 5), n.appendBits(r - 1, 11), n = Hr.generateCheckWords(n, 40, 4)), n\r\n        }\r\n        static drawModeMessage(t, e, r, n) {\r\n            let i = f.truncDivision(r, 2);\r\n            if (e)\r\n                for (let e = 0; e < 7; e++) {\r\n                    let r = i - 3 + e;\r\n                    n.get(e) && t.set(r, i - 5), n.get(e + 7) && t.set(i + 5, r), n.get(20 - e) && t.set(r, i + 5), n.get(27 - e) && t.set(i - 5, r)\r\n                } else\r\n                for (let e = 0; e < 10; e++) {\r\n                    let r = i - 5 + e + f.truncDivision(e, 5);\r\n                    n.get(e) && t.set(r, i - 7), n.get(e + 10) && t.set(i + 7, r), n.get(29 - e) && t.set(r, i + 7), n.get(39 - e) && t.set(i - 7, r)\r\n                }\r\n        }\r\n        static generateCheckWords(t, e, r) {\r\n            let n = t.getSize() / r,\r\n                    i = new hr(Hr.getGF(r)),\r\n                    s = f.truncDivision(e, r),\r\n                    o = Hr.bitsToWords(t, r, s);\r\n            i.encode(o, s - n);\r\n            let a = e % r,\r\n                    l = new w;\r\n            l.appendBits(0, a);\r\n            for (const t of Array.from(o)) l.appendBits(t, r);\r\n            return l\r\n        }\r\n        static bitsToWords(t, e, r) {\r\n            let n, i, s = new Int32Array(r);\r\n            for (n = 0, i = t.getSize() / e; n < i; n++) {\r\n                let r = 0;\r\n                for (let i = 0; i < e; i++) r |= t.get(n * e + i) ? 1 << e - i - 1 : 0;\r\n                s[n] = r\r\n            }\r\n            return s\r\n        }\r\n        static getGF(t) {\r\n            switch (t) {\r\n                case 4:\r\n                    return q.AZTEC_PARAM;\r\n                case 6:\r\n                    return q.AZTEC_DATA_6;\r\n                case 8:\r\n                    return q.AZTEC_DATA_8;\r\n                case 10:\r\n                    return q.AZTEC_DATA_10;\r\n                case 12:\r\n                    return q.AZTEC_DATA_12;\r\n                default:\r\n                    throw new o(\"Unsupported word size \" + t)\r\n            }\r\n        }\r\n        static stuffBits(t, e) {\r\n            let r = new w,\r\n                    n = t.getSize(),\r\n                    i = (1 << e) - 2;\r\n            for (let s = 0; s < n; s += e) {\r\n                let o = 0;\r\n                for (let r = 0; r < e; r++)(s + r >= n || t.get(s + r)) && (o |= 1 << e - 1 - r);\r\n                (o & i) === i ? (r.appendBits(o & i, e), s--) : 0 == (o & i) ? (r.appendBits(1 | o, e), s--) : r.appendBits(o, e)\r\n            }\r\n            return r\r\n        }\r\n        static totalBitsInLayer(t, e) {\r\n            return ((e ? 88 : 112) + 16 * t) * t\r\n        }\r\n    }\r\n    Hr.DEFAULT_EC_PERCENT = 33, Hr.DEFAULT_AZTEC_LAYERS = 0, Hr.MAX_NB_BITS = 32, Hr.MAX_NB_BITS_COMPACT = 4, Hr.WORD_SIZE = Int32Array.from([4, 6, 6, 8, 8, 8, 8, 8, 8, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12]);\r\n    class Gr {\r\n        encode(t, e, r, n) {\r\n            return this.encodeWithHints(t, e, r, n, null)\r\n        }\r\n        encodeWithHints(t, e, r, n, i) {\r\n            let s = Sr.ISO_8859_1,\r\n                    o = Hr.DEFAULT_EC_PERCENT,\r\n                    a = Hr.DEFAULT_AZTEC_LAYERS;\r\n            return null != i && (i.has(lr.CHARACTER_SET) && (s = Ir.forName(i.get(lr.CHARACTER_SET).toString())), i.has(lr.ERROR_CORRECTION) && (o = f.parseInt(i.get(lr.ERROR_CORRECTION).toString())), i.has(lr.AZTEC_LAYERS) && (a = f.parseInt(i.get(lr.AZTEC_LAYERS).toString()))), Gr.encodeLayers(t, e, r, n, s, o, a)\r\n        }\r\n        static encodeLayers(t, e, r, n, i, s, a) {\r\n            if (e !== k.AZTEC) throw new o(\"Can only encode AZTEC, but got \" + e);\r\n            let l = Hr.encode(S.getBytes(t, i), s, a);\r\n            return Gr.renderResult(l, r, n)\r\n        }\r\n        static renderResult(t, e, r) {\r\n            let n = t.getMatrix();\r\n            if (null == n) throw new j;\r\n            let i = n.getWidth(),\r\n                    s = n.getHeight(),\r\n                    o = Math.max(e, i),\r\n                    a = Math.max(r, s),\r\n                    l = Math.min(o / i, a / s),\r\n                    h = (o - i * l) / 2,\r\n                    c = (a - s * l) / 2,\r\n                    u = new T(o, a);\r\n            for (let t = 0, e = c; t < s; t++, e += l)\r\n                for (let r = 0, s = h; r < i; r++, s += l) n.get(r, t) && u.setRegion(s, e, l, l);\r\n            return u\r\n        }\r\n    }\r\n    t.ArgumentException = s, t.ArithmeticException = K, t.AztecCode = pr, t.AztecCodeReader = dt, t.AztecCodeWriter = Gr, t.AztecDecoder = $, t.AztecDetector = ut, t.AztecDetectorResult = it, t.AztecEncoder = Hr, t.AztecHighLevelEncoder = Ur, t.AztecPoint = ct, t.BarcodeFormat = k, t.Binarizer = h, t.BinaryBitmap = a, t.BitArray = w, t.BitMatrix = T, t.BitSource = ae, t.BrowserAztecCodeReader = class extends L {\r\n        constructor(t = 500) {\r\n            super(new dt, t)\r\n        }\r\n    }, t.BrowserBarcodeReader = class extends L {\r\n        constructor(t = 500, e) {\r\n            super(new ee(e), t, e)\r\n        }\r\n    }, t.BrowserCodeReader = L, t.BrowserDatamatrixCodeReader = class extends L {\r\n        constructor(t = 500) {\r\n            super(new ue, t)\r\n        }\r\n    }, t.BrowserMultiFormatReader = class extends L {\r\n        constructor(t = null, e = 500) {\r\n            const r = new or;\r\n            r.setHints(t), super(r, e)\r\n        }\r\n        decodeBitmap(t) {\r\n            return this.reader.decodeWithState(t)\r\n        }\r\n    }, t.BrowserPDF417Reader = class extends L {\r\n        constructor(t = 500) {\r\n            super(new ir, t)\r\n        }\r\n    }, t.BrowserQRCodeReader = class extends L {\r\n        constructor(t = 500) {\r\n            super(new Me, t)\r\n        }\r\n    }, t.BrowserQRCodeSvgWriter = Cr, t.CharacterSetECI = m, t.ChecksumException = l, t.Code128Reader = ft, t.Code39Reader = wt, t.DataMatrixDecodedBitStreamParser = le, t.DataMatrixReader = ue, t.DecodeHintType = C, t.DecoderResult = z, t.DefaultGridSampler = lt, t.DetectorResult = nt, t.EAN13Reader = St, t.EncodeHintType = lr, t.Exception = i, t.FormatException = E, t.GenericGF = q, t.GenericGFPoly = Z, t.GlobalHistogramBinarizer = N, t.GridSampler = ot, t.GridSamplerInstance = ht, t.HTMLCanvasElementLuminanceSource = M, t.HybridBinarizer = D, t.ITFReader = At, t.IllegalArgumentException = o, t.IllegalStateException = j, t.InvertedLuminanceSource = O, t.LuminanceSource = y, t.MathUtils = tt, t.MultiFormatOneDReader = ee, t.MultiFormatReader = or, t.MultiFormatWriter = class {\r\n        encode(t, e, r, n, i) {\r\n            let s;\r\n            switch (e) {\r\n                case k.QR_CODE:\r\n                    s = new Er;\r\n                    break;\r\n                default:\r\n                    throw new o(\"No encoder available for format \" + e)\r\n            }\r\n            return s.encode(t, e, r, n, i)\r\n        }\r\n    }, t.NotFoundException = R, t.OneDReader = gt, t.PDF417DecodedBitStreamParser = rr, t.PDF417DecoderErrorCorrection = ke, t.PDF417Reader = ir, t.PDF417ResultMetadata = Ze, t.PerspectiveTransform = at, t.PlanarYUVLuminanceSource = mr, t.QRCodeByteMatrix = ur, t.QRCodeDataMask = Ce, t.QRCodeDecodedBitStreamParser = Ie, t.QRCodeDecoderErrorCorrectionLevel = de, t.QRCodeDecoderFormatInformation = ge, t.QRCodeEncoder = Ar, t.QRCodeEncoderQRCode = dr, t.QRCodeMaskUtil = cr, t.QRCodeMatrixUtil = fr, t.QRCodeMode = _e, t.QRCodeReader = Me, t.QRCodeVersion = Ae, t.QRCodeWriter = Er, t.RGBLuminanceSource = _r, t.RSS14Reader = te, t.RSSExpandedReader = Jt, t.ReaderException = sr, t.ReedSolomonDecoder = J, t.ReedSolomonEncoder = hr, t.ReedSolomonException = Q, t.Result = F, t.ResultMetadataType = W, t.ResultPoint = rt, t.StringUtils = S, t.UnsupportedOperationException = _, t.VideoInputDevice = b, t.WhiteRectangleDetector = st, t.WriterException = gr, t.ZXingArrays = g, t.ZXingCharset = Ir, t.ZXingInteger = f, t.ZXingStandardCharsets = Sr, t.ZXingStringBuilder = p, t.ZXingStringEncoding = I, t.ZXingSystem = c, Object.defineProperty(t, \"__esModule\", {\r\n        value: !0\r\n    })\r\n});\r\n/** Html5Qrcode **/\r\nvar _;\r\n(() => {\r\n    \"use strict\";\r\n    var e, t = {\r\n                d: (e, n) => {\r\n                    for (var r in n) t.o(n, r) && !t.o(e, r) && Object.defineProperty(e, r, {\r\n                        enumerable: !0,\r\n                        get: n[r]\r\n                    })\r\n                },\r\n                o: (e, t) => Object.prototype.hasOwnProperty.call(e, t),\r\n                r: e => {\r\n                    \"undefined\" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(e, Symbol.toStringTag, {\r\n                        value: \"Module\"\r\n                    }), Object.defineProperty(e, \"__esModule\", {\r\n                        value: !0\r\n                    })\r\n                }\r\n            },\r\n            n = {};\r\n    t.r(n), t.d(n, {\r\n        Html5Qrcode: () => b,\r\n        Html5QrcodeScanner: () => A,\r\n        Html5QrcodeSupportedFormats: () => e\r\n    }),\r\n            function(e) {\r\n                e[e.QR_CODE = 0] = \"QR_CODE\", e[e.AZTEC = 1] = \"AZTEC\", e[e.CODABAR = 2] = \"CODABAR\", e[e.CODE_39 = 3] = \"CODE_39\", e[e.CODE_93 = 4] = \"CODE_93\", e[e.CODE_128 = 5] = \"CODE_128\", e[e.DATA_MATRIX = 6] = \"DATA_MATRIX\", e[e.MAXICODE = 7] = \"MAXICODE\", e[e.ITF = 8] = \"ITF\", e[e.EAN_13 = 9] = \"EAN_13\", e[e.EAN_8 = 10] = \"EAN_8\", e[e.PDF_417 = 11] = \"PDF_417\", e[e.RSS_14 = 12] = \"RSS_14\", e[e.RSS_EXPANDED = 13] = \"RSS_EXPANDED\", e[e.UPC_A = 14] = \"UPC_A\", e[e.UPC_E = 15] = \"UPC_E\", e[e.UPC_EAN_EXTENSION = 16] = \"UPC_EAN_EXTENSION\"\r\n            }(e || (e = {}));\r\n    var r, i, o = new Map([\r\n                              [e.QR_CODE, \"QR_CODE\"],\r\n                              [e.AZTEC, \"AZTEC\"],\r\n                              [e.CODABAR, \"CODABAR\"],\r\n                              [e.CODE_39, \"CODE_39\"],\r\n                              [e.CODE_93, \"CODE_93\"],\r\n                              [e.CODE_128, \"CODE_128\"],\r\n                              [e.DATA_MATRIX, \"DATA_MATRIX\"],\r\n                              [e.MAXICODE, \"MAXICODE\"],\r\n                              [e.ITF, \"ITF\"],\r\n                              [e.EAN_13, \"EAN_13\"],\r\n                              [e.EAN_8, \"EAN_8\"],\r\n                              [e.PDF_417, \"PDF_417\"],\r\n                              [e.RSS_14, \"RSS_14\"],\r\n                              [e.RSS_EXPANDED, \"RSS_EXPANDED\"],\r\n                              [e.UPC_A, \"UPC_A\"],\r\n                              [e.UPC_E, \"UPC_E\"],\r\n                              [e.UPC_EAN_EXTENSION, \"UPC_EAN_EXTENSION\"]\r\n                          ]);\r\n\r\n    function a(t) {\r\n        return Object.values(e).includes(t)\r\n    }! function(e) {\r\n        e[e.UNKNOWN = 0] = \"UNKNOWN\", e[e.URL = 1] = \"URL\"\r\n    }(r || (r = {})),\r\n            function(e) {\r\n                e[e.SCAN_TYPE_CAMERA = 0] = \"SCAN_TYPE_CAMERA\", e[e.SCAN_TYPE_FILE = 1] = \"SCAN_TYPE_FILE\"\r\n            }(i || (i = {}));\r\n    var s, c = function() {\r\n                function e() {}\r\n                return e.ASSET_FILE_SCAN = \"\", e.ASSET_CAMERA_SCAN = \"\", e.GITHUB_PROJECT_URL = \"\", e.SCAN_DEFAULT_FPS = 2, e.DEFAULT_DISABLE_FLIP = !1, e\r\n            }(),\r\n            d = function() {\r\n                function e(e, t) {\r\n                    this.format = e, this.formatName = t\r\n                }\r\n                return e.prototype.toString = function() {\r\n                    return this.formatName\r\n                }, e.create = function(t) {\r\n                    if (!o.has(t)) throw t + \" not in html5QrcodeSupportedFormatsTextMap\";\r\n                    return new e(t, o.get(t))\r\n                }, e\r\n            }(),\r\n            l = function() {\r\n                function e() {}\r\n                return e.createFromText = function(e) {\r\n                    return {\r\n                        decodedText: e,\r\n                        result: {\r\n                            text: e\r\n                        }\r\n                    }\r\n                }, e.createFromQrcodeResult = function(e) {\r\n                    return {\r\n                        decodedText: e.text,\r\n                        result: e\r\n                    }\r\n                }, e\r\n            }();\r\n    ! function(e) {\r\n        e[e.UNKWOWN_ERROR = 0] = \"UNKWOWN_ERROR\", e[e.IMPLEMENTATION_ERROR = 1] = \"IMPLEMENTATION_ERROR\", e[e.NO_CODE_FOUND_ERROR = 2] = \"NO_CODE_FOUND_ERROR\"\r\n    }(s || (s = {}));\r\n    var h, u, p = function() {\r\n                function e() {}\r\n                return e.createFrom = function(e) {\r\n                    return {\r\n                        errorMessage: e,\r\n                        type: s.UNKWOWN_ERROR\r\n                    }\r\n                }, e\r\n            }(),\r\n            g = function() {\r\n                function e(e) {\r\n                    this.verbose = e\r\n                }\r\n                return e.prototype.log = function(e) {\r\n                    this.verbose && console.log(e)\r\n                }, e.prototype.warn = function(e) {\r\n                    this.verbose && console.warn(e)\r\n                }, e.prototype.logError = function(e, t) {\r\n                    (this.verbose || !0 === t) && console.error(e)\r\n                }, e.prototype.logErrors = function(e) {\r\n                    if (0 == e.length) throw \"Logger#logError called without arguments\";\r\n                    this.verbose && console.error(e)\r\n                }, e\r\n            }(),\r\n            S = function() {\r\n                function e() {}\r\n                return e.codeParseError = function(e) {\r\n                    return \"QR code parse error, error = \" + e\r\n                }, e.errorGettingUserMedia = function(e) {\r\n                    return \"Error getting userMedia, error = \" + e\r\n                }, e.onlyDeviceSupportedError = function() {\r\n                    return \"The device doesn't support navigator.mediaDevices , only supported cameraIdOrConfig in this case is deviceId parameter (string).\"\r\n                }, e.cameraStreamingNotSupported = function() {\r\n                    return \"Camera streaming not supported by the browser.\"\r\n                }, e.unableToQuerySupportedDevices = function() {\r\n                    return \"Unable to query supported devices, unknown error.\"\r\n                }, e.insecureContextCameraQueryError = function() {\r\n                    return \"Camera access is only supported in secure context like https or localhost.\"\r\n                }, e\r\n            }(),\r\n            m = function() {\r\n                function e() {}\r\n                return e.scanningStatus = function() {\r\n                    return \"Scanning\"\r\n                }, e.idleStatus = function() {\r\n                    return \"Idle\"\r\n                }, e.errorStatus = function() {\r\n                    return \"Error\"\r\n                }, e.permissionStatus = function() {\r\n                    return \"Permission\"\r\n                }, e.noCameraFoundErrorStatus = function() {\r\n                    return \"No Cameras\"\r\n                }, e.lastMatch = function(e) {\r\n                    return \"Last Match: \" + e\r\n                }, e.codeScannerTitle = function() {\r\n                    return \"Code Scanner\"\r\n                }, e.cameraPermissionTitle = function() {\r\n                    return \"Request Camera Permissions\"\r\n                }, e.cameraPermissionRequesting = function() {\r\n                    return \"Requesting camera permissions...\"\r\n                }, e.scanButtonStopScanningText = function() {\r\n                    return \"Stop Scanning\"\r\n                }, e.scanButtonStartScanningText = function() {\r\n                    return \"Start Scanning\"\r\n                }, e.textIfCameraScanSelected = function() {\r\n                    return \"Scan an Image File\"\r\n                }, e.textIfFileScanSelected = function() {\r\n                    return \"Scan using camera directly\"\r\n                }, e\r\n            }(),\r\n            f = function() {\r\n                function e() {}\r\n                return e.isMediaStreamConstraintsValid = function(e, t) {\r\n                    if (\"object\" != typeof e) {\r\n                        var n = typeof e;\r\n                        return t.logError(\"videoConstraints should be of type object, the object passed is of type \" + n + \".\", !0), !1\r\n                    }\r\n                    for (var r = new Set([\"autoGainControl\", \"channelCount\", \"echoCancellation\", \"latency\", \"noiseSuppression\", \"sampleRate\", \"sampleSize\", \"volume\"]), i = 0, o = Object.keys(e); i < o.length; i++) {\r\n                        var a = o[i];\r\n                        if (r.has(a)) return t.logError(a + \" is not supported videoConstaints.\", !0), !1\r\n                    }\r\n                    return !0\r\n                }, e\r\n            }(),\r\n            E = function() {\r\n                function t(t, n, r) {\r\n                    if (this.formatMap = new Map([\r\n                                                     [e.QR_CODE, ZXing.BarcodeFormat.QR_CODE],\r\n                                                     [e.AZTEC, ZXing.BarcodeFormat.AZTEC],\r\n                                                     [e.CODABAR, ZXing.BarcodeFormat.CODABAR],\r\n                                                     [e.CODE_39, ZXing.BarcodeFormat.CODE_39],\r\n                                                     [e.CODE_93, ZXing.BarcodeFormat.CODE_93],\r\n                                                     [e.CODE_128, ZXing.BarcodeFormat.CODE_128],\r\n                                                     [e.DATA_MATRIX, ZXing.BarcodeFormat.DATA_MATRIX],\r\n                                                     [e.MAXICODE, ZXing.BarcodeFormat.MAXICODE],\r\n                                                     [e.ITF, ZXing.BarcodeFormat.ITF],\r\n                                                     [e.EAN_13, ZXing.BarcodeFormat.EAN_13],\r\n                                                     [e.EAN_8, ZXing.BarcodeFormat.EAN_8],\r\n                                                     [e.PDF_417, ZXing.BarcodeFormat.PDF_417],\r\n                                                     [e.RSS_14, ZXing.BarcodeFormat.RSS_14],\r\n                                                     [e.RSS_EXPANDED, ZXing.BarcodeFormat.RSS_EXPANDED],\r\n                                                     [e.UPC_A, ZXing.BarcodeFormat.UPC_A],\r\n                                                     [e.UPC_E, ZXing.BarcodeFormat.UPC_E],\r\n                                                     [e.UPC_EAN_EXTENSION, ZXing.BarcodeFormat.UPC_EAN_EXTENSION]\r\n                                                 ]), this.reverseFormatMap = this.createReverseFormatMap(), !ZXing) throw \"Use html5qrcode.min.js without edit, ZXing not found.\";\r\n                    this.verbose = n, this.logger = r;\r\n                    var i = this.createZXingFormats(t),\r\n                            o = new Map;\r\n                    o.set(ZXing.DecodeHintType.POSSIBLE_FORMATS, i), this.hints = o\r\n                }\r\n                return t.prototype.decode = function(e) {\r\n                    var t = new ZXing.MultiFormatReader(this.verbose, this.hints),\r\n                            n = new ZXing.HTMLCanvasElementLuminanceSource(e),\r\n                            r = new ZXing.BinaryBitmap(new ZXing.HybridBinarizer(n)),\r\n                            i = t.decode(r);\r\n                    return {\r\n                        text: i.text,\r\n                        format: d.create(this.toHtml5QrcodeSupportedFormats(i.format))\r\n                    }\r\n                }, t.prototype.createReverseFormatMap = function() {\r\n                    var e = new Map;\r\n                    return this.formatMap.forEach((function(t, n, r) {\r\n                        e.set(t, n)\r\n                    })), e\r\n                }, t.prototype.toHtml5QrcodeSupportedFormats = function(e) {\r\n                    if (!this.reverseFormatMap.has(e)) throw \"reverseFormatMap doesn't have \" + e;\r\n                    return this.reverseFormatMap.get(e)\r\n                }, t.prototype.createZXingFormats = function(e) {\r\n                    for (var t = [], n = 0, r = e; n < r.length; n++) {\r\n                        var i = r[n];\r\n                        this.formatMap.has(i) ? t.push(this.formatMap.get(i)) : this.logger.logError(i + \" is not supported byZXingHtml5QrcodeShim\")\r\n                    }\r\n                    return t\r\n                }, t\r\n            }(),\r\n            y = function() {\r\n                function e(e, t, n) {\r\n                    this.EXECUTIONS_TO_REPORT_PERFORMANCE = 100, this.executions = 0, this.executionResults = [], this.verbose = t, this.zxingDecorderDelegate = new E(e, t, n)\r\n                }\r\n                return e.prototype.decode = function(e) {\r\n                    var t = performance.now();\r\n                    try {\r\n                        return this.zxingDecorderDelegate.decode(e)\r\n                    } catch (e) {\r\n                        throw e\r\n                    } finally {\r\n                        if (this.verbose) {\r\n                            var n = performance.now() - t;\r\n                            this.executionResults.push(n), this.executions++, this.possiblyFlushPerformanceReport()\r\n                        }\r\n                    }\r\n                }, e.prototype.possiblyFlushPerformanceReport = function() {\r\n                    if (!(this.executions < this.EXECUTIONS_TO_REPORT_PERFORMANCE)) {\r\n                        for (var e = 0, t = 0, n = this.executionResults; t < n.length; t++) e += n[t];\r\n                        var r = e / this.executionResults.length;\r\n                        console.log(r + \" ms for \" + this.executionResults.length + \" last runs.\"), this.executions = 0, this.executionResults = []\r\n                    }\r\n                }, e\r\n            }(),\r\n            v = (h = function(e, t) {\r\n                return (h = Object.setPrototypeOf || {\r\n                            __proto__: []\r\n                        }\r\n                            instanceof Array && function(e, t) {\r\n                            e.__proto__ = t\r\n                        } || function(e, t) {\r\n                            for (var n in t) Object.prototype.hasOwnProperty.call(t, n) && (e[n] = t[n])\r\n                        })(e, t)\r\n            }, function(e, t) {\r\n                function n() {\r\n                    this.constructor = e\r\n                }\r\n                h(e, t), e.prototype = null === t ? Object.create(t) : (n.prototype = t.prototype, new n)\r\n            }),\r\n            C = function(e) {\r\n                function t() {\r\n                    return null !== e && e.apply(this, arguments) || this\r\n                }\r\n                return v(t, e), t.DEFAULT_WIDTH = 300, t.DEFAULT_WIDTH_OFFSET = 2, t.FILE_SCAN_MIN_HEIGHT = 300, t.MIN_QR_BOX_SIZE = 50, t.SHADED_LEFT = 1, t.SHADED_RIGHT = 2, t.SHADED_TOP = 3, t.SHADED_BOTTOM = 4, t.SHADED_REGION_CLASSNAME = \"qr-shaded-region\", t.VERBOSE = !1, t.BORDER_SHADER_DEFAULT_COLOR = \"#ffffff\", t.BORDER_SHADER_MATCH_COLOR = \"rgb(90, 193, 56)\", t\r\n            }(c),\r\n            T = function() {\r\n                function e(e, t) {\r\n                    this.logger = t, this.fps = C.SCAN_DEFAULT_FPS, e ? (e.fps && (this.fps = e.fps), this.disableFlip = !0 === e.disableFlip, this.qrbox = e.qrbox, this.aspectRatio = e.aspectRatio, this.videoConstraints = e.videoConstraints) : this.disableFlip = C.DEFAULT_DISABLE_FLIP\r\n                }\r\n                return e.prototype.isMediaStreamConstraintsValid = function() {\r\n                    return this.videoConstraints ? f.isMediaStreamConstraintsValid(this.videoConstraints, this.logger) : (this.logger.logError(\"Empty videoConstraints\", !0), !1)\r\n                }, e.prototype.isShadedBoxEnabled = function() {\r\n                    return void 0 !== this.qrbox\r\n                }, e.create = function(t, n) {\r\n                    return new e(t, n)\r\n                }, e\r\n            }(),\r\n            b = function() {\r\n                function t(e, t) {\r\n                    if (!document.getElementById(e)) throw \"HTML Element with id=\" + e + \" not found\";\r\n                    this.elementId = e, this.verbose = !1, \"boolean\" == typeof t ? this.verbose = !0 === t : t && (this.verbose = !0 === t.verbose), this.logger = new g(this.verbose), this.qrcode = new y(this.getSupportedFormats(t), this.verbose, this.logger), this.foreverScanTimeout, this.localMediaStream, this.shouldScan = !0, this.isScanning = !1\r\n                }\r\n                return t.prototype.start = function(e, t, n, r) {\r\n                    if (!e) throw \"cameraIdOrConfig is required\";\r\n                    if (!n || \"function\" != typeof n) throw \"qrCodeSuccessCallback is required and should be a function.\";\r\n                    r || (r = this.verbose ? this.logger.log : function() {});\r\n                    var i = T.create(t, this.logger);\r\n                    this.clearElement();\r\n                    var o = !1;\r\n                    i.videoConstraints && (i.isMediaStreamConstraintsValid() ? o = !0 : this.logger.logError(\"'videoConstraints' is not valid 'MediaStreamConstraints, it will be ignored.'\", !0));\r\n                    var a = o,\r\n                            s = i.isShadedBoxEnabled(),\r\n                            c = document.getElementById(this.elementId),\r\n                            d = c.clientWidth ? c.clientWidth : C.DEFAULT_WIDTH;\r\n                    if (c.style.position = \"relative\", this.shouldScan = !0, this.element = c, s) {\r\n                        var l = i.qrbox;\r\n                        if (l < C.MIN_QR_BOX_SIZE) throw \"minimum size of 'config.qrbox' is \" + C.MIN_QR_BOX_SIZE + \"px.\";\r\n                        if (l > d) throw \"'config.qrbox' should not be greater than the width of the HTML element.\"\r\n                    }\r\n                    var h = this;\r\n                    return new Promise((function(t, o) {\r\n                        var s = a ? i.videoConstraints : h.createVideoConstraints(e);\r\n                        if (s)\r\n                            if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) navigator.mediaDevices.getUserMedia({\r\n                                                                                                                                       audio: !1,\r\n                                                                                                                                       video: s\r\n                                                                                                                                   }).then((function(e) {\r\n                                h.onMediaStreamReceived(e, i, a, d, n, r).then((function(e) {\r\n                                    h.isScanning = !0, t(null)\r\n                                })).catch(o)\r\n                            })).catch((function(e) {\r\n                                o(S.errorGettingUserMedia(e))\r\n                            }));\r\n                            else if (navigator.getUserMedia) {\r\n                                if (\"string\" != typeof e) throw S.onlyDeviceSupportedError();\r\n                                var c = {\r\n                                    video: s\r\n                                };\r\n                                navigator.getUserMedia(c, (function(e) {\r\n                                    h.onMediaStreamReceived(e, i, a, d, n, r).then((function(e) {\r\n                                        h.isScanning = !0, t(null)\r\n                                    })).catch((function(e) {\r\n                                        o(S.errorGettingUserMedia(e))\r\n                                    }))\r\n                                }), (function(e) {\r\n                                    o(S.errorGettingUserMedia(e))\r\n                                }))\r\n                            } else o(S.cameraStreamingNotSupported());\r\n                        else o(\"videoConstraints should be defined\")\r\n                    }))\r\n                }, t.prototype.stop = function() {\r\n                    var e = this;\r\n                    return this.shouldScan = !1, this.foreverScanTimeout && clearTimeout(this.foreverScanTimeout), new Promise((function(t, n) {\r\n                        var r = function() {\r\n                            e.localMediaStream = void 0, e.element && (e.element.removeChild(e.videoElement), e.element.removeChild(e.canvasElement)),\r\n                                    function() {\r\n                                        if (e.element)\r\n                                            for (; e.element.getElementsByClassName(C.SHADED_REGION_CLASSNAME).length;) {\r\n                                                var t = e.element.getElementsByClassName(C.SHADED_REGION_CLASSNAME)[0];\r\n                                                e.element.removeChild(t)\r\n                                            }\r\n                                    }(), e.isScanning = !1, e.qrRegion && (e.qrRegion = void 0), e.context && (e.context = void 0), t()\r\n                        };\r\n                        e.localMediaStream || r();\r\n                        var i = e.localMediaStream.getVideoTracks().length,\r\n                                o = 0;\r\n                        e.localMediaStream.getVideoTracks().forEach((function(t) {\r\n                            e.localMediaStream.removeTrack(t), t.stop(), ++o >= i && r()\r\n                        }))\r\n                    }))\r\n                }, t.prototype.scanFile = function(e, t) {\r\n                    return this.scanFileV2(e, t).then((function(e) {\r\n                        return e.decodedText\r\n                    }))\r\n                }, t.prototype.scanFileV2 = function(e, t) {\r\n                    var n = this;\r\n                    if (!(e && e instanceof File)) throw \"imageFile argument is mandatory and should be instance of File. Use 'event.target.files[0]'.\";\r\n                    if (void 0 === t && (t = !0), this.isScanning) throw \"Close ongoing scan before scanning a file.\";\r\n                    return new Promise((function(r, i) {\r\n                        n.possiblyCloseLastScanImageFile(), n.clearElement(), n.lastScanImageFile = URL.createObjectURL(e);\r\n                        var o = new Image;\r\n                        o.onload = function() {\r\n                            var e = o.width,\r\n                                    a = o.height,\r\n                                    s = document.getElementById(n.elementId),\r\n                                    c = s.clientWidth ? s.clientWidth : C.DEFAULT_WIDTH,\r\n                                    d = Math.max(s.clientHeight ? s.clientHeight : a, C.FILE_SCAN_MIN_HEIGHT),\r\n                                    h = n.computeCanvasDrawConfig(e, a, c, d);\r\n                            if (t) {\r\n                                var u = n.createCanvasElement(c, d, \"qr-canvas-visible\");\r\n                                u.style.display = \"inline-block\", s.appendChild(u);\r\n                                var p = u.getContext(\"2d\");\r\n                                if (!p) throw \"Unable to get 2d context from canvas\";\r\n                                p.canvas.width = c, p.canvas.height = d, p.drawImage(o, 0, 0, e, a, h.x, h.y, h.width, h.height)\r\n                            }\r\n                            var g = n.createCanvasElement(h.width, h.height);\r\n                            s.appendChild(g);\r\n                            var S = g.getContext(\"2d\");\r\n                            if (!S) throw \"Unable to get 2d context from canvas\";\r\n                            S.canvas.width = h.width, S.canvas.height = h.height, S.drawImage(o, 0, 0, e, a, 0, 0, h.width, h.height);\r\n                            try {\r\n                                var m = n.qrcode.decode(g);\r\n                                r(l.createFromQrcodeResult(m))\r\n                            } catch (e) {\r\n                                i(\"QR code parse error, error = \" + e)\r\n                            }\r\n                        }, o.onerror = i, o.onabort = i, o.onstalled = i, o.onsuspend = i, o.src = URL.createObjectURL(e)\r\n                    }))\r\n                }, t.prototype.clear = function() {\r\n                    this.clearElement()\r\n                }, t.getCameras = function() {\r\n                    if (navigator.mediaDevices) return t.getCamerasFromMediaDevices();\r\n                    var e = MediaStreamTrack;\r\n                    if (MediaStreamTrack && e.getSources) return t.getCamerasFrmoMediaStreamTrack();\r\n                    var n = S.unableToQuerySupportedDevices();\r\n                    return function() {\r\n                        if (\"https:\" === location.protocol) return !0;\r\n                        var e = location.host.split(\":\")[0];\r\n                        return \"127.0.0.1\" === e || \"localhost\" === e\r\n                    }() || (n = S.insecureContextCameraQueryError()), Promise.reject(n)\r\n                }, t.prototype.getRunningTrackCapabilities = function() {\r\n                    if (null == this.localMediaStream) throw \"Scanning is not in running state, call this API only when QR code scanning using camera is in running state.\";\r\n                    if (0 === this.localMediaStream.getVideoTracks().length) throw \"No video tracks found\";\r\n                    return this.localMediaStream.getVideoTracks()[0].getCapabilities()\r\n                }, t.prototype.applyVideoConstraints = function(e) {\r\n                    var t = this;\r\n                    if (!e) throw \"videoConstaints is required argument.\";\r\n                    if (!f.isMediaStreamConstraintsValid(e, this.logger)) throw \"invalid videoConstaints passed, check logs for more details\";\r\n                    if (null == this.localMediaStream) throw \"Scanning is not in running state, call this API only when QR code scanning using camera is in running state.\";\r\n                    if (0 == this.localMediaStream.getVideoTracks().length) throw \"No video tracks found\";\r\n                    return new Promise((function(n, r) {\r\n                        \"aspectRatio\" in e ? r(\"Chaning 'aspectRatio' in run-time is not yet supported.\") : t.localMediaStream.getVideoTracks()[0].applyConstraints(e).then((function(e) {\r\n                            n(e)\r\n                        })).catch((function(e) {\r\n                            r(e)\r\n                        }))\r\n                    }))\r\n                }, t.getCamerasFromMediaDevices = function() {\r\n                    return new Promise((function(e, t) {\r\n                        navigator.mediaDevices.getUserMedia({\r\n                                                                audio: !1,\r\n                                                                video: !0\r\n                                                            }).then((function(n) {\r\n                            navigator.mediaDevices.enumerateDevices().then((function(t) {\r\n                                for (var r = [], i = 0, o = t; i < o.length; i++) {\r\n                                    var a = o[i];\r\n                                    \"videoinput\" === a.kind && r.push({\r\n                                                                          id: a.deviceId,\r\n                                                                          label: a.label\r\n                                                                      })\r\n                                }! function(e) {\r\n                                    for (var t = 0, n = e.getVideoTracks(); t < n.length; t++) {\r\n                                        var r = n[t];\r\n                                        r.enabled = !1, r.stop(), e.removeTrack(r)\r\n                                    }\r\n                                }(n), e(r)\r\n                            })).catch((function(e) {\r\n                                t(e.name + \" : \" + e.message)\r\n                            }))\r\n                        })).catch((function(e) {\r\n                            t(e.name + \" : \" + e.message)\r\n                        }))\r\n                    }))\r\n                }, t.getCamerasFrmoMediaStreamTrack = function() {\r\n                    return new Promise((function(e, t) {\r\n                        MediaStreamTrack.getSources((function(t) {\r\n                            for (var n = [], r = 0, i = t; r < i.length; r++) {\r\n                                var o = i[r];\r\n                                \"video\" === o.kind && n.push({\r\n                                                                 id: o.id,\r\n                                                                 label: o.label\r\n                                                             })\r\n                            }\r\n                            e(n)\r\n                        }))\r\n                    }))\r\n                }, t.prototype.getSupportedFormats = function(t) {\r\n                    var n = [e.QR_CODE, e.AZTEC, e.CODABAR, e.CODE_39, e.CODE_93, e.CODE_128, e.DATA_MATRIX, e.MAXICODE, e.ITF, e.EAN_13, e.EAN_8, e.PDF_417, e.RSS_14, e.RSS_EXPANDED, e.UPC_A, e.UPC_E, e.UPC_EAN_EXTENSION];\r\n                    if (!t || \"boolean\" == typeof t) return n;\r\n                    if (!t.formatsToSupport) return n;\r\n                    if (!Array.isArray(t.formatsToSupport)) throw \"configOrVerbosityFlag.formatsToSupport should be undefined or an array.\";\r\n                    if (0 === t.formatsToSupport.length) throw \"Atleast 1 formatsToSupport is needed.\";\r\n                    for (var r = [], i = 0, o = t.formatsToSupport; i < o.length; i++) {\r\n                        var s = o[i];\r\n                        a(s) ? r.push(s) : this.logger.warn(\"Invalid format: \" + s + \" passed in config, ignoring.\")\r\n                    }\r\n                    if (0 === r.length) throw \"None of formatsToSupport match supported values.\";\r\n                    return r\r\n                }, t.prototype.setupUi = function(e, t, n) {\r\n                    var r = n.qrbox;\r\n                    r > t && this.logger.warn(\"[Html5Qrcode] config.qrboxsize is greater than video height. Shading will be ignored\");\r\n                    var i = n.isShadedBoxEnabled() && r <= t,\r\n                            o = {\r\n                                x: 0,\r\n                                y: 0,\r\n                                width: e,\r\n                                height: t\r\n                            },\r\n                            a = i ? this.getShadedRegionBounds(e, t, r) : o,\r\n                            s = this.createCanvasElement(a.width, a.height),\r\n                            c = s.getContext(\"2d\");\r\n                    c.canvas.width = a.width, c.canvas.height = a.height, this.element.append(s), i && this.possiblyInsertShadingElement(this.element, e, t, r), this.qrRegion = a, this.context = c, this.canvasElement = s\r\n                }, t.prototype.scanContext = function(e, t) {\r\n                    try {\r\n                        var n = this.qrcode.decode(this.canvasElement);\r\n                        return e(n.text, l.createFromQrcodeResult(n)), this.possiblyUpdateShaders(!0), !0\r\n                    } catch (e) {\r\n                        this.possiblyUpdateShaders(!1);\r\n                        var r = S.codeParseError(e);\r\n                        return t(r, p.createFrom(r)), !1\r\n                    }\r\n                }, t.prototype.foreverScan = function(e, t, n) {\r\n                    var r = this;\r\n                    if (this.shouldScan) {\r\n                        if (this.localMediaStream) {\r\n                            var i = this.videoElement,\r\n                                    o = i.videoWidth / i.clientWidth,\r\n                                    a = i.videoHeight / i.clientHeight;\r\n                            if (!this.qrRegion) throw \"qrRegion undefined when localMediaStream is ready.\";\r\n                            var s = this.qrRegion.width * o,\r\n                                    c = this.qrRegion.height * a,\r\n                                    d = this.qrRegion.x * o,\r\n                                    l = this.qrRegion.y * a;\r\n                            this.context.drawImage(i, d, l, s, c, 0, 0, this.qrRegion.width, this.qrRegion.height), this.scanContext(t, n) || !0 === e.disableFlip || (this.context.translate(this.context.canvas.width, 0), this.context.scale(-1, 1), this.scanContext(t, n))\r\n                        }\r\n                        this.foreverScanTimeout = setTimeout((function() {\r\n                            r.foreverScan(e, t, n)\r\n                        }), this.getTimeoutFps(e.fps))\r\n                    }\r\n                }, t.prototype.onMediaStreamReceived = function(e, t, n, r, i, o) {\r\n                    var a = this,\r\n                            s = this;\r\n                    return new Promise((function(c, d) {\r\n                        var l = function() {\r\n                            var n = a.createVideoElement(r);\r\n                            s.element.append(n), n.onabort = d, n.onerror = d, n.onplaying = function() {\r\n                                var e = n.clientWidth,\r\n                                        r = n.clientHeight;\r\n                                s.setupUi(e, r, t), s.foreverScan(t, i, o), c(null)\r\n                            }, n.srcObject = e, n.play(), s.videoElement = n\r\n                        };\r\n                        if (s.localMediaStream = e, n || !t.aspectRatio) l();\r\n                        else {\r\n                            var h = {\r\n                                aspectRatio: t.aspectRatio\r\n                            };\r\n                            e.getVideoTracks()[0].applyConstraints(h).then((function(e) {\r\n                                return l()\r\n                            })).catch((function(e) {\r\n                                s.logger.logErrors([\"[Html5Qrcode] Constriants could not be satisfied, ignoring constraints\", e]), l()\r\n                            }))\r\n                        }\r\n                    }))\r\n                }, t.prototype.createVideoConstraints = function(e) {\r\n                    if (\"string\" == typeof e) return {\r\n                        deviceId: {\r\n                            exact: e\r\n                        }\r\n                    };\r\n                    if (\"object\" == typeof e) {\r\n                        var t = \"facingMode\",\r\n                                n = {\r\n                                    user: !0,\r\n                                    environment: !0\r\n                                },\r\n                                r = \"exact\",\r\n                                i = function(e) {\r\n                                    if (e in n) return !0;\r\n                                    throw \"config has invalid 'facingMode' value = '\" + e + \"'\"\r\n                                },\r\n                                o = Object.keys(e);\r\n                        if (1 !== o.length) throw \"'cameraIdOrConfig' object should have exactly 1 key, if passed as an object, found \" + o.length + \" keys\";\r\n                        var a = Object.keys(e)[0];\r\n                        if (a !== t && \"deviceId\" !== a) throw \"Only 'facingMode' and 'deviceId'  are supported for 'cameraIdOrConfig'\";\r\n                        if (a !== t) {\r\n                            var s = e.deviceId;\r\n                            if (\"string\" == typeof s) return {\r\n                                deviceId: s\r\n                            };\r\n                            if (\"object\" == typeof s) {\r\n                                if (r in s) return {\r\n                                    deviceId: {\r\n                                        exact: s.exact\r\n                                    }\r\n                                };\r\n                                throw \"'deviceId' should be string or object with exact as key.\"\r\n                            }\r\n                            throw \"Invalid type of 'deviceId' = \" + typeof s\r\n                        }\r\n                        var c = e.facingMode;\r\n                        if (\"string\" == typeof c) {\r\n                            if (i(c)) return {\r\n                                facingMode: c\r\n                            }\r\n                        } else {\r\n                            if (\"object\" != typeof c) throw \"Invalid type of 'facingMode' = \" + typeof c;\r\n                            if (!(r in c)) throw \"'facingMode' should be string or object with exact as key.\";\r\n                            if (i(c.exact)) return {\r\n                                facingMode: {\r\n                                    exact: c.exact\r\n                                }\r\n                            }\r\n                        }\r\n                    }\r\n                    throw \"Invalid type of 'cameraIdOrConfig' = \" + typeof e\r\n                }, t.prototype.computeCanvasDrawConfig = function(e, t, n, r) {\r\n                    if (e <= n && t <= r) return {\r\n                        x: (n - e) / 2,\r\n                        y: (r - t) / 2,\r\n                        width: e,\r\n                        height: t\r\n                    };\r\n                    var i = e,\r\n                            o = t;\r\n                    return e > n && (t *= n / e, e = n), t > r && (e *= r / t, t = r), this.logger.log(\"Image downsampled from \" + i + \"X\" + o + \" to \" + e + \"X\" + t + \".\"), this.computeCanvasDrawConfig(e, t, n, r)\r\n                }, t.prototype.clearElement = function() {\r\n                    if (this.isScanning) throw \"Cannot clear while scan is ongoing, close it first.\";\r\n                    var e = document.getElementById(this.elementId);\r\n                    e && (e.innerHTML = \"\")\r\n                }, t.prototype.createVideoElement = function(e) {\r\n                    var t = document.createElement(\"video\");\r\n                    return t.style.width = e + \"px\", t.muted = !0, t.setAttribute(\"muted\", \"true\"), t.playsInline = !0, t\r\n                }, t.prototype.possiblyUpdateShaders = function(e) {\r\n                    this.qrMatch !== e && (this.hasBorderShaders && this.borderShaders && this.borderShaders.length && this.borderShaders.forEach((function(t) {\r\n                        t.style.backgroundColor = e ? C.BORDER_SHADER_MATCH_COLOR : C.BORDER_SHADER_DEFAULT_COLOR\r\n                    })), this.qrMatch = e)\r\n                }, t.prototype.possiblyCloseLastScanImageFile = function() {\r\n                    this.lastScanImageFile && (URL.revokeObjectURL(this.lastScanImageFile), this.lastScanImageFile = void 0)\r\n                }, t.prototype.createCanvasElement = function(e, t, n) {\r\n                    var r = e,\r\n                            i = t,\r\n                            o = document.createElement(\"canvas\");\r\n                    return o.style.width = r + \"px\", o.style.height = i + \"px\", o.style.display = \"none\", o.id = null == n ? \"qr-canvas\" : n, o\r\n                }, t.prototype.getShadedRegionBounds = function(e, t, n) {\r\n                    if (n > e || n > t) throw \"'config.qrbox' should not be greater than the width and height of the HTML element.\";\r\n                    return {\r\n                        x: (e - n) / 2,\r\n                        y: (t - n) / 2,\r\n                        width: n,\r\n                        height: n\r\n                    }\r\n                }, t.prototype.possiblyInsertShadingElement = function(e, t, n, r) {\r\n                    if (!(t - r < 1 || n - r < 1)) {\r\n                        var i = document.createElement(\"div\");\r\n                        if (i.style.position = \"absolute\", i.style.borderLeft = (t - r) / 2 + \"px solid #0000007a\", i.style.borderRight = (t - r) / 2 + \"px solid #0000007a\", i.style.borderTop = (n - r) / 2 + \"px solid #0000007a\", i.style.borderBottom = (n - r) / 2 + \"px solid #0000007a\", i.style.boxSizing = \"border-box\", i.style.top = \"0px\", i.style.bottom = \"0px\", i.style.left = \"0px\", i.style.right = \"0px\", i.id = \"\" + C.SHADED_REGION_CLASSNAME, t - r < 11 || n - r < 11) this.hasBorderShaders = !1;\r\n                        else {\r\n                            var o = 40;\r\n                            this.insertShaderBorders(i, o, 5, -5, 0, !0), this.insertShaderBorders(i, o, 5, -5, 0, !1), this.insertShaderBorders(i, o, 5, r + 5, 0, !0), this.insertShaderBorders(i, o, 5, r + 5, 0, !1), this.insertShaderBorders(i, 5, 45, -5, -5, !0), this.insertShaderBorders(i, 5, 45, r + 5 - o, -5, !0), this.insertShaderBorders(i, 5, 45, -5, -5, !1), this.insertShaderBorders(i, 5, 45, r + 5 - o, -5, !1), this.hasBorderShaders = !0\r\n                        }\r\n                        e.append(i)\r\n                    }\r\n                }, t.prototype.insertShaderBorders = function(e, t, n, r, i, o) {\r\n                    var a = document.createElement(\"div\");\r\n                    a.style.position = \"absolute\", a.style.backgroundColor = C.BORDER_SHADER_DEFAULT_COLOR, a.style.width = t + \"px\", a.style.height = n + \"px\", a.style.top = r + \"px\", o ? a.style.left = i + \"px\" : a.style.right = i + \"px\", this.borderShaders || (this.borderShaders = []), this.borderShaders.push(a), e.appendChild(a)\r\n                }, t.prototype.getTimeoutFps = function(e) {\r\n                    return 1e3 / e\r\n                }, t\r\n            }();\r\n    ! function(e) {\r\n        e[e.STATUS_DEFAULT = 0] = \"STATUS_DEFAULT\", e[e.STATUS_SUCCESS = 1] = \"STATUS_SUCCESS\", e[e.STATUS_WARNING = 2] = \"STATUS_WARNING\"\r\n    }(u || (u = {}));\r\n    var A = function() {\r\n        function e(e, t, n) {\r\n            if (this.elementId = e, this.config = this.createConfig(t), this.verbose = !0 === n, !document.getElementById(e)) throw \"HTML Element with id=\" + e + \" not found\";\r\n            this.currentScanType = i.SCAN_TYPE_CAMERA, this.sectionSwapAllowed = !0, this.logger = new g(this.verbose)\r\n        }\r\n        return e.prototype.render = function(e, t) {\r\n            var n = this;\r\n            this.lastMatchFound = void 0, this.qrCodeSuccessCallback = function(t, r) {\r\n                if (e) e(t, r);\r\n                else {\r\n                    if (n.lastMatchFound === t) return;\r\n                    n.lastMatchFound = t, n.setHeaderMessage(m.lastMatch(t), u.STATUS_SUCCESS)\r\n                }\r\n            }, this.qrCodeErrorCallback = function(e, r) {\r\n                n.setStatus(m.scanningStatus()), t && t(e, r)\r\n            };\r\n            var r, i, o = document.getElementById(this.elementId);\r\n            if (!o) throw \"HTML Element with id=\" + this.elementId + \" not found\";\r\n            o.innerHTML = \"\", this.createBasicLayout(o), this.html5Qrcode = new b(this.getScanRegionId(), (r = this.config, i = this.verbose, {\r\n                formatsToSupport: r.formatsToSupport,\r\n                verbose: i\r\n            }))\r\n        }, e.prototype.clear = function() {\r\n            var e = this;\r\n            return this.html5Qrcode ? new Promise((function(t, n) {\r\n                e.html5Qrcode ? e.html5Qrcode.isScanning && e.html5Qrcode.stop().then((function(n) {\r\n                    var r;\r\n                    e.html5Qrcode ? (e.html5Qrcode.clear(), (r = document.getElementById(e.elementId)) && (r.innerHTML = \"\", e.resetBasicLayout(r)), t()) : t()\r\n                })).catch((function(t) {\r\n                    e.verbose && e.logger.logError(\"Unable to stop qrcode scanner\", t), n(t)\r\n                })) : t()\r\n            })) : Promise.resolve()\r\n        }, e.prototype.createConfig = function(e) {\r\n            return e ? (e.fps || (e.fps = c.SCAN_DEFAULT_FPS), e) : {\r\n                fps: c.SCAN_DEFAULT_FPS\r\n            }\r\n        }, e.prototype.createBasicLayout = function(e) {\r\n            e.style.position = \"relative\", e.style.padding = \"0px\", e.style.border = \"1px solid silver\", this.createHeader(e);\r\n            var t = document.createElement(\"div\"),\r\n                    n = this.getScanRegionId();\r\n            t.id = n, t.style.width = \"100%\", t.style.minHeight = \"100px\", t.style.textAlign = \"center\", e.appendChild(t), this.insertCameraScanImageToScanRegion();\r\n            var r = document.createElement(\"div\"),\r\n                    i = this.getDashboardId();\r\n            r.id = i, r.style.width = \"100%\", e.appendChild(r), this.setupInitialDashboard(r)\r\n        }, e.prototype.resetBasicLayout = function(e) {\r\n            e.style.border = \"none\"\r\n        }, e.prototype.setupInitialDashboard = function(e) {\r\n            this.createSection(e), this.createSectionControlPanel(), this.createSectionSwap()\r\n        }, e.prototype.createHeader = function(e) {\r\n            /*  var t = document.createElement(\"div\");\r\n              t.style.textAlign = \"left\", t.style.margin = \"0px\", t.style.padding = \"5px\", t.style.fontSize = \"20px\", t.style.borderBottom = \"1px solid rgba(192, 192, 192, 0.18)\", e.appendChild(t);\r\n              var n = document.createElement(\"span\"),\r\n                      r = document.createElement(\"a\");\r\n              r.innerHTML = /!*m.codeScannerTitle(), *!/r.href = c.GITHUB_PROJECT_URL, n.appendChild(r), t.appendChild(n);\r\n              var i = document.createElement(\"span\");\r\n              i.id = this.getStatusSpanId(), i.style.float = \"right\", i.style.padding = \"5px 7px\", i.style.fontSize = \"14px\", i.style.background = \"#dedede6b\", i.style.border = \"1px solid red\", i.style.color = \"rgb(17, 17, 17)\", t.appendChild(i), this.setStatus(m.idleStatus());*/\r\n            var o = document.createElement(\"div\");\r\n            o.id = this.getHeaderMessageContainerId(), o.style.display = \"none\", o.style.fontSize = \"12px\", o.style.padding = \"2px 10px\", e.appendChild(o)\r\n        }, e.prototype.createSection = function(e) {\r\n            var t = document.createElement(\"div\");\r\n            t.id = this.getDashboardSectionId(), t.style.width = \"100%\", t.style.padding = \"10px\", t.style.textAlign = \"left\", e.appendChild(t)\r\n        }, e.prototype.createSectionControlPanel = function() {\r\n            var e = document.getElementById(this.getDashboardSectionId()),\r\n                    t = document.createElement(\"div\");\r\n            e.appendChild(t);\r\n            var n = document.createElement(\"div\");\r\n            n.id = this.getDashboardSectionCameraScanRegionId(), n.style.display = this.currentScanType === i.SCAN_TYPE_CAMERA ? \"block\" : \"none\", t.appendChild(n);\r\n            var r = document.createElement(\"div\");\r\n            r.style.textAlign = \"center\";\r\n            var a = this;\r\n            setTimeout(function() {\r\n                a.setHeaderMessage(m.cameraPermissionRequesting()), b.getCameras().then((function(e) {\r\n                    a.resetHeaderMessage(), e && 0 !== e.length ? (a.renderCameraSelection(e)) : a.setStatus(m.noCameraFoundErrorStatus(), u.STATUS_WARNING)\r\n                })).catch((function(e) {\r\n                    o.disabled = !1, a.setHeaderMessage(e, u.STATUS_WARNING)\r\n                }))\r\n            });\r\n           /* var o = document.createElement(\"button\");\r\n            o.innerHTML = m.cameraPermissionTitle();\r\n            var a = this;\r\n            o.addEventListener(\"click\", (function() {\r\n                o.disabled = !0, a.setStatus(m.permissionStatus()), a.setHeaderMessage(m.cameraPermissionRequesting()), b.getCameras().then((function(e) {\r\n                    a.setStatus(m.idleStatus()), a.resetHeaderMessage(), e && 0 !== e.length ? (n.removeChild(r), a.renderCameraSelection(e)) : a.setStatus(m.noCameraFoundErrorStatus(), u.STATUS_WARNING)\r\n                })).catch((function(e) {\r\n                    o.disabled = !1, a.setStatus(m.idleStatus()), a.setHeaderMessage(e, u.STATUS_WARNING)\r\n                }))\r\n            })), r.appendChild(o), n.appendChild(r);*/\r\n            var s = document.createElement(\"div\");\r\n            s.id = this.getDashboardSectionFileScanRegionId(), s.style.textAlign = \"center\", s.style.display = this.currentScanType == i.SCAN_TYPE_CAMERA ? \"none\" : \"block\", t.appendChild(s);\r\n            var c = document.createElement(\"input\");\r\n            c.id = this.getFileScanInputId(), c.accept = \"image/*\", c.type = \"file\", c.style.width = \"200px\", c.disabled = this.currentScanType === i.SCAN_TYPE_CAMERA;\r\n            var d = document.createElement(\"span\");\r\n            d.innerHTML = \"&nbsp; Select Image\", s.appendChild(c), s.appendChild(d), c.addEventListener(\"change\", (function(e) {\r\n                if (!a.html5Qrcode) throw \"html5Qrcode not defined\";\r\n                if (null != e && null != e.target && a.currentScanType === i.SCAN_TYPE_FILE && 0 !== e.target.files.length) {\r\n                    var t = e.target.files[0];\r\n                    a.html5Qrcode.scanFileV2(t, !0).then((function(e) {\r\n                        a.resetHeaderMessage(), a.qrCodeSuccessCallback(e.decodedText, e)\r\n                    })).catch((function(e) {\r\n                        a.setStatus(m.errorStatus(), u.STATUS_WARNING), a.setHeaderMessage(e, u.STATUS_WARNING), a.qrCodeErrorCallback(e, p.createFrom(e))\r\n                    }))\r\n                }\r\n            }))\r\n        }, e.prototype.renderCameraSelection = function(e) {\r\n            var t = this,\r\n                    n = document.getElementById(this.getDashboardSectionCameraScanRegionId());\r\n            n.style.textAlign = \"center\";\r\n            var r = document.createElement(\"span\");\r\n            r.innerHTML = \"\", r.style.marginRight = \"10px\";\r\n            var i = document.createElement(\"select\");\r\n            i.id = this.getCameraSelectionId();\r\n            for (var o = 0, a = e; o < a.length; o++) {\r\n                var s = a[o],\r\n                        c = s.id,\r\n                        d = null == s.label ? c : s.label,\r\n                        l = document.createElement(\"option\");\r\n                l.value = c, l.innerHTML = d, i.appendChild(l)\r\n            }\r\n            r.appendChild(i), n.appendChild(r);\r\n            var h = document.createElement(\"span\"),\r\n                    p = document.createElement(\"button\");\r\n            p.innerHTML = m.scanButtonStartScanningText(), h.appendChild(p);\r\n            var g = document.createElement(\"button\");\r\n            setTimeout(function() { p.click() }, 100);  // Scannen gleich starten\r\n            g.innerHTML = m.scanButtonStopScanningText(), g.style.display = \"none\", g.disabled = !0, h.appendChild(g), n.appendChild(h), p.addEventListener(\"click\", (function(e) {\r\n                i.disabled = !0, p.disabled = !0, t.showHideScanTypeSwapLink(!1);\r\n                var n, r = i.value;\r\n                t.html5Qrcode.start({ facingMode: \"environment\" }, (n = t.config, {\r\n                    fps: n.fps,\r\n                    qrbox: n.qrbox,\r\n                    aspectRatio: n.aspectRatio,\r\n                    disableFlip: n.disableFlip,\r\n                    videoConstraints: n.videoConstraints\r\n                }), t.qrCodeSuccessCallback, t.qrCodeErrorCallback).then((function(e) {\r\n                    g.disabled = !1, g.style.display = \"inline-block\", p.style.display = \"none\", t.setStatus(m.scanningStatus())\r\n                })).catch((function(e) {\r\n                    t.showHideScanTypeSwapLink(!0), i.disabled = !1, p.disabled = !1, t.setStatus(m.idleStatus()), t.setHeaderMessage(e, u.STATUS_WARNING)\r\n                }))\r\n            })), g.addEventListener(\"click\", (function(e) {\r\n                if (!t.html5Qrcode) throw \"html5Qrcode not defined\";\r\n                g.disabled = !0, t.html5Qrcode.stop().then((function(e) {\r\n                    t.showHideScanTypeSwapLink(!0), i.disabled = !1, p.disabled = !1, g.style.display = \"none\", p.style.display = \"inline-block\", t.setStatus(m.idleStatus()), t.insertCameraScanImageToScanRegion()\r\n                })).catch((function(e) {\r\n                    g.disabled = !1, t.setStatus(m.errorStatus(), u.STATUS_WARNING), t.setHeaderMessage(e, u.STATUS_WARNING)\r\n                }))\r\n            }))\r\n        }, e.prototype.createSectionSwap = function() {\r\n            var e = this,\r\n                    t = m.textIfCameraScanSelected(),\r\n                    n = m.textIfFileScanSelected(),\r\n                    r = document.getElementById(this.getDashboardSectionId()),\r\n                    o = document.createElement(\"div\");\r\n            o.style.textAlign = \"center\";\r\n            var a = document.createElement(\"a\");\r\n            a.style.textDecoration = \"underline\", a.id = this.getDashboardSectionSwapLinkId(), a.innerHTML = this.currentScanType == i.SCAN_TYPE_CAMERA ? \"\" : n, a.href = \"#scan-using-file\", a.addEventListener(\"click\", (function() {\r\n                e.sectionSwapAllowed ? (e.setStatus(m.idleStatus()), e.resetHeaderMessage(), e.getFileScanInput().value = \"\", e.sectionSwapAllowed = !1, e.currentScanType === i.SCAN_TYPE_CAMERA ? (e.clearScanRegion(), e.getFileScanInput().disabled = !1, e.getCameraScanRegion().style.display = \"none\", e.getFileScanRegion().style.display = \"block\", a.innerHTML = n, e.currentScanType = i.SCAN_TYPE_FILE, e.insertFileScanImageToScanRegion()) : (e.clearScanRegion(), e.getFileScanInput().disabled = !0, e.getCameraScanRegion().style.display = \"block\", e.getFileScanRegion().style.display = \"none\", a.innerHTML = t, e.currentScanType = i.SCAN_TYPE_CAMERA, e.insertCameraScanImageToScanRegion()), e.sectionSwapAllowed = !0) : e.verbose && e.logger.logError(\"Section swap called when not allowed\")\r\n            })), o.appendChild(a), r.appendChild(o)\r\n        }, e.prototype.resetHeaderMessage = function() {\r\n            document.getElementById(this.getHeaderMessageContainerId()).style.display = \"none\"\r\n        }, e.prototype.setStatus = function(e, t) {\r\n        /*    t || (t = u.STATUS_DEFAULT);\r\n            var n = this.getStatusSpan();\r\n            switch (n.innerHTML = e, t) {\r\n                case u.STATUS_SUCCESS:\r\n                    n.style.background = \"#6aaf5042\", n.style.color = \"#477735\";\r\n                    break;\r\n                case u.STATUS_WARNING:\r\n                    n.style.background = \"#cb243124\", n.style.color = \"#cb2431\";\r\n                    break;\r\n                case u.STATUS_DEFAULT:\r\n                default:\r\n                    n.style.background = \"#eef\", n.style.color = \"rgb(17, 17, 17)\"\r\n            } */\r\n        }, e.prototype.setHeaderMessage = function(e, t) {\r\n            t || (t = u.STATUS_DEFAULT);\r\n            var n = this.getHeaderMessageDiv();\r\n            switch (n.innerHTML = e, n.style.display = \"block\", t) {\r\n                case u.STATUS_SUCCESS:\r\n                    n.style.background = \"#6aaf5042\", n.style.color = \"#477735\";\r\n                    break;\r\n                case u.STATUS_WARNING:\r\n                    n.style.background = \"#cb243124\", n.style.color = \"#cb2431\";\r\n                    break;\r\n                case u.STATUS_DEFAULT:\r\n                default:\r\n                    n.style.background = \"#00000000\", n.style.color = \"rgb(17, 17, 17)\"\r\n            }\r\n        }, e.prototype.showHideScanTypeSwapLink = function(e) {\r\n        //    !0 !== e && (e = !1), this.sectionSwapAllowed = e, this.getDashboardSectionSwapLink().style.display = e ? \"inline-block\" : \"none\"\r\n        }, e.prototype.insertCameraScanImageToScanRegion = function() {\r\n            var e = this,\r\n                    t = document.getElementById(this.getScanRegionId());\r\n            if (this.cameraScanImage) return t.innerHTML = \"<br>\", void t.appendChild(this.cameraScanImage);\r\n            this.cameraScanImage = new Image, this.cameraScanImage.onload = function(n) {\r\n                t.innerHTML = \"<br>\", t.appendChild(e.cameraScanImage)\r\n            }, this.cameraScanImage.width = 64, this.cameraScanImage.style.opacity = \"0.3\", this.cameraScanImage.src = c.ASSET_CAMERA_SCAN\r\n        }, e.prototype.insertFileScanImageToScanRegion = function() {\r\n            var e = this,\r\n                    t = document.getElementById(this.getScanRegionId());\r\n            if (this.fileScanImage) return t.innerHTML = \"<br>\", void t.appendChild(this.fileScanImage);\r\n            this.fileScanImage = new Image, this.fileScanImage.onload = function(n) {\r\n                t.innerHTML = \"<br>\", t.appendChild(e.fileScanImage)\r\n            }, this.fileScanImage.width = 64, this.fileScanImage.style.opacity = \"0.3\", this.fileScanImage.src = c.ASSET_FILE_SCAN\r\n        }, e.prototype.clearScanRegion = function() {\r\n            document.getElementById(this.getScanRegionId()).innerHTML = \"\"\r\n        }, e.prototype.getDashboardSectionId = function() {\r\n            return this.elementId + \"__dashboard_section\"\r\n        }, e.prototype.getDashboardSectionCameraScanRegionId = function() {\r\n            return this.elementId + \"__dashboard_section_csr\"\r\n        }, e.prototype.getDashboardSectionFileScanRegionId = function() {\r\n            return this.elementId + \"__dashboard_section_fsr\"\r\n        }, e.prototype.getDashboardSectionSwapLinkId = function() {\r\n            return this.elementId + \"__dashboard_section_swaplink\"\r\n        }, e.prototype.getScanRegionId = function() {\r\n            return this.elementId + \"__scan_region\"\r\n        }, e.prototype.getDashboardId = function() {\r\n            return this.elementId + \"__dashboard\"\r\n        }, e.prototype.getFileScanInputId = function() {\r\n            return this.elementId + \"__filescan_input\"\r\n        }, e.prototype.getStatusSpanId = function() {\r\n            return this.elementId + \"__status_span\"\r\n        }, e.prototype.getHeaderMessageContainerId = function() {\r\n            return this.elementId + \"__header_message\"\r\n        }, e.prototype.getCameraSelectionId = function() {\r\n            return this.elementId + \"__camera_selection\"\r\n        }, e.prototype.getCameraScanRegion = function() {\r\n            return document.getElementById(this.getDashboardSectionCameraScanRegionId())\r\n        }, e.prototype.getFileScanRegion = function() {\r\n            return document.getElementById(this.getDashboardSectionFileScanRegionId())\r\n        }, e.prototype.getFileScanInput = function() {\r\n            return document.getElementById(this.getFileScanInputId())\r\n        }, e.prototype.getDashboardSectionSwapLink = function() {\r\n            return document.getElementById(this.getDashboardSectionSwapLinkId())\r\n        }, e.prototype.getStatusSpan = function() {\r\n            return document.getElementById(this.getStatusSpanId())\r\n        }, e.prototype.getHeaderMessageDiv = function() {\r\n            return document.getElementById(this.getHeaderMessageContainerId())\r\n        }, e\r\n    }();\r\n    _ = n\r\n})();\r\n/**ref**/\r\n;\r\nvar Html5Qrcode = window._.Html5Qrcode;;\r\nvar Html5QrcodeScanner = window._.Html5QrcodeScanner;;\r\nvar Html5QrcodeSupportedFormats = window._.Html5QrcodeSupportedFormats;\n"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": -1,
          "_transferSize": 109356,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:09.559Z",
        "time": 285.15600005630404,
        "timings": {
          "blocked": 25.554000017374754,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0.8739999999999997,
          "wait": 213.24799995093792,
          "receive": 45.48000008799136,
          "_blocked_queueing": 20.856000017374754,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_connectionId": "1726423",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "parser",
          "url": "https://ekat.festool.de/login/app?__bk_&__windowid=IRW3104379&__rid=FOE1787216989423",
          "lineNumber": 1
        },
        "_priority": "High",
        "_resourceType": "script",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/login/WEB-RES/js/cropper.js_shop_7.26.1.5.js",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": ":authority",
              "value": "ekat.festool.de"
            },
            {
              "name": ":method",
              "value": "GET"
            },
            {
              "name": ":path",
              "value": "/login/WEB-RES/js/cropper.js_shop_7.26.1.5.js"
            },
            {
              "name": ":scheme",
              "value": "https"
            },
            {
              "name": "accept",
              "value": "*/*"
            },
            {
              "name": "accept-encoding",
              "value": "gzip, deflate, br, zstd"
            },
            {
              "name": "accept-language",
              "value": "en-GB,en-US;q=0.9,en;q=0.8"
            },
            {
              "name": "if-modified-since",
              "value": "Thu, 20 Aug 2026 07:47:25 GMT"
            },
            {
              "name": "if-none-match",
              "value": "W/\"150899-1787216828331\""
            },
            {
              "name": "priority",
              "value": "u=1"
            },
            {
              "name": "referer",
              "value": "https://ekat.festool.de/login/app?__bk_&__windowid=IRW3104379&__rid=FOE1787216989423"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            },
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "sec-fetch-dest",
              "value": "script"
            },
            {
              "name": "sec-fetch-mode",
              "value": "no-cors"
            },
            {
              "name": "sec-fetch-site",
              "value": "same-origin"
            },
            {
              "name": "user-agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            }
          ],
          "queryString": [],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "cache-control",
              "value": "public"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "content-length",
              "value": "26967"
            },
            {
              "name": "content-type",
              "value": "text/javascript"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 09:09:49 GMT"
            },
            {
              "name": "etag",
              "value": "W/\"150899-1787216989611\""
            },
            {
              "name": "expires",
              "value": "Thu, 20 Aug 2026 09:11:49 GMT"
            },
            {
              "name": "last-modified",
              "value": "Thu, 20 Aug 2026 07:47:25 GMT"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "pragma",
              "value": "cache"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "x-robots-tag",
              "value": "noindex"
            }
          ],
          "cookies": [],
          "content": {
            "size": 150899,
            "mimeType": "text/javascript",
            "text": "/*!\r\n * Cropper.js v1.6.1\r\n * https://fengyuanchen.github.io/cropperjs\r\n *\r\n * Copyright 2015-present Chen Fengyuan\r\n * Released under the MIT license\r\n *\r\n * Date: 2023-09-17T03:44:19.860Z\r\n */\r\n\r\n(function(global, factory) {\r\n    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\r\n    typeof define === 'function' && define.amd ? define(factory) :\r\n    (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Cropper = factory());\r\n})(this, (function() {\r\n    'use strict';\r\n\r\n    function ownKeys(e, r) {\r\n        var t = Object.keys(e);\r\n        if (Object.getOwnPropertySymbols) {\r\n            var o = Object.getOwnPropertySymbols(e);\r\n            r && (o = o.filter(function(r) {\r\n                return Object.getOwnPropertyDescriptor(e, r).enumerable;\r\n            })), t.push.apply(t, o);\r\n        }\r\n        return t;\r\n    }\r\n\r\n    function _objectSpread2(e) {\r\n        for (var r = 1; r < arguments.length; r++) {\r\n            var t = null != arguments[r] ? arguments[r] : {};\r\n            r % 2 ? ownKeys(Object(t), !0).forEach(function(r) {\r\n                _defineProperty(e, r, t[r]);\r\n            }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function(r) {\r\n                Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\r\n            });\r\n        }\r\n        return e;\r\n    }\r\n\r\n    function _typeof(o) {\r\n        \"@babel/helpers - typeof\";\r\n\r\n        return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function(o) {\r\n            return typeof o;\r\n        } : function(o) {\r\n            return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\r\n        }, _typeof(o);\r\n    }\r\n\r\n    function _classCallCheck(instance, Constructor) {\r\n        if (!(instance instanceof Constructor)) {\r\n            throw new TypeError(\"Cannot call a class as a function\");\r\n        }\r\n    }\r\n\r\n    function _defineProperties(target, props) {\r\n        for (var i = 0; i < props.length; i++) {\r\n            var descriptor = props[i];\r\n            descriptor.enumerable = descriptor.enumerable || false;\r\n            descriptor.configurable = true;\r\n            if (\"value\" in descriptor) {\r\n                descriptor.writable = true;\r\n            }\r\n            Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor);\r\n        }\r\n    }\r\n\r\n    function _createClass(Constructor, protoProps, staticProps) {\r\n        if (protoProps) {\r\n            _defineProperties(Constructor.prototype, protoProps);\r\n        }\r\n        if (staticProps) {\r\n            _defineProperties(Constructor, staticProps);\r\n        }\r\n        Object.defineProperty(Constructor, \"prototype\", {\r\n            writable: false\r\n        });\r\n        return Constructor;\r\n    }\r\n\r\n    function _defineProperty(obj, key, value) {\r\n        key = _toPropertyKey(key);\r\n        if (key in obj) {\r\n            Object.defineProperty(obj, key, {\r\n                value: value,\r\n                enumerable: true,\r\n                configurable: true,\r\n                writable: true\r\n            });\r\n        } else {\r\n            obj[key] = value;\r\n        }\r\n        return obj;\r\n    }\r\n\r\n    function _toConsumableArray(arr) {\r\n        return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\r\n    }\r\n\r\n    function _arrayWithoutHoles(arr) {\r\n        if (Array.isArray(arr)) {\r\n            return _arrayLikeToArray(arr);\r\n        }\r\n    }\r\n\r\n    function _iterableToArray(iter) {\r\n        if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) {\r\n            return Array.from(iter);\r\n        }\r\n    }\r\n\r\n    function _unsupportedIterableToArray(o, minLen) {\r\n        if (!o) {\r\n            return;\r\n        }\r\n        if (typeof o === \"string\") {\r\n            return _arrayLikeToArray(o, minLen);\r\n        }\r\n        var n = Object.prototype.toString.call(o).slice(8, -1);\r\n        if (n === \"Object\" && o.constructor) {\r\n            n = o.constructor.name;\r\n        }\r\n        if (n === \"Map\" || n === \"Set\") {\r\n            return Array.from(o);\r\n        }\r\n        if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) {\r\n            return _arrayLikeToArray(o, minLen);\r\n        }\r\n    }\r\n\r\n    function _arrayLikeToArray(arr, len) {\r\n        if (len == null || len > arr.length) {\r\n            len = arr.length;\r\n        }\r\n        for (var i = 0, arr2 = new Array(len); i < len; i++) {\r\n            arr2[i] = arr[i];\r\n        }\r\n        return arr2;\r\n    }\r\n\r\n    function _nonIterableSpread() {\r\n        throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\r\n    }\r\n\r\n    function _toPrimitive(input, hint) {\r\n        if (typeof input !== \"object\" || input === null) {\r\n            return input;\r\n        }\r\n        var prim = input[Symbol.toPrimitive];\r\n        if (prim !== undefined) {\r\n            var res = prim.call(input, hint || \"default\");\r\n            if (typeof res !== \"object\") {\r\n                return res;\r\n            }\r\n            throw new TypeError(\"@@toPrimitive must return a primitive value.\");\r\n        }\r\n        return (hint === \"string\" ? String : Number)(input);\r\n    }\r\n\r\n    function _toPropertyKey(arg) {\r\n        var key = _toPrimitive(arg, \"string\");\r\n        return typeof key === \"symbol\" ? key : String(key);\r\n    }\r\n\r\n    var IS_BROWSER = typeof window !== 'undefined' && typeof window.document !== 'undefined';\r\n    var WINDOW = IS_BROWSER ? window : {};\r\n    var IS_TOUCH_DEVICE = IS_BROWSER && WINDOW.document.documentElement ? 'ontouchstart' in WINDOW.document.documentElement : false;\r\n    var HAS_POINTER_EVENT = IS_BROWSER ? 'PointerEvent' in WINDOW : false;\r\n    var NAMESPACE = 'cropper';\r\n\r\n    // Actions\r\n    var ACTION_ALL = 'all';\r\n    var ACTION_CROP = 'crop';\r\n    var ACTION_MOVE = 'move';\r\n    var ACTION_ZOOM = 'zoom';\r\n    var ACTION_EAST = 'e';\r\n    var ACTION_WEST = 'w';\r\n    var ACTION_SOUTH = 's';\r\n    var ACTION_NORTH = 'n';\r\n    var ACTION_NORTH_EAST = 'ne';\r\n    var ACTION_NORTH_WEST = 'nw';\r\n    var ACTION_SOUTH_EAST = 'se';\r\n    var ACTION_SOUTH_WEST = 'sw';\r\n\r\n    // Classes\r\n    var CLASS_CROP = \"\".concat(NAMESPACE, \"-crop\");\r\n    var CLASS_DISABLED = \"\".concat(NAMESPACE, \"-disabled\");\r\n    var CLASS_HIDDEN = \"\".concat(NAMESPACE, \"-hidden\");\r\n    var CLASS_HIDE = \"\".concat(NAMESPACE, \"-hide\");\r\n    var CLASS_INVISIBLE = \"\".concat(NAMESPACE, \"-invisible\");\r\n    var CLASS_MODAL = \"\".concat(NAMESPACE, \"-modal\");\r\n    var CLASS_MOVE = \"\".concat(NAMESPACE, \"-move\");\r\n\r\n    // Data keys\r\n    var DATA_ACTION = \"\".concat(NAMESPACE, \"Action\");\r\n    var DATA_PREVIEW = \"\".concat(NAMESPACE, \"Preview\");\r\n\r\n    // Drag modes\r\n    var DRAG_MODE_CROP = 'crop';\r\n    var DRAG_MODE_MOVE = 'move';\r\n    var DRAG_MODE_NONE = 'none';\r\n\r\n    // Events\r\n    var EVENT_CROP = 'crop';\r\n    var EVENT_CROP_END = 'cropend';\r\n    var EVENT_CROP_MOVE = 'cropmove';\r\n    var EVENT_CROP_START = 'cropstart';\r\n    var EVENT_DBLCLICK = 'dblclick';\r\n    var EVENT_TOUCH_START = IS_TOUCH_DEVICE ? 'touchstart' : 'mousedown';\r\n    var EVENT_TOUCH_MOVE = IS_TOUCH_DEVICE ? 'touchmove' : 'mousemove';\r\n    var EVENT_TOUCH_END = IS_TOUCH_DEVICE ? 'touchend touchcancel' : 'mouseup';\r\n    var EVENT_POINTER_DOWN = HAS_POINTER_EVENT ? 'pointerdown' : EVENT_TOUCH_START;\r\n    var EVENT_POINTER_MOVE = HAS_POINTER_EVENT ? 'pointermove' : EVENT_TOUCH_MOVE;\r\n    var EVENT_POINTER_UP = HAS_POINTER_EVENT ? 'pointerup pointercancel' : EVENT_TOUCH_END;\r\n    var EVENT_READY = 'ready';\r\n    var EVENT_RESIZE = 'resize';\r\n    var EVENT_WHEEL = 'wheel';\r\n    var EVENT_ZOOM = 'zoom';\r\n\r\n    // Mime types\r\n    var MIME_TYPE_JPEG = 'image/jpeg';\r\n\r\n    // RegExps\r\n    var REGEXP_ACTIONS = /^e|w|s|n|se|sw|ne|nw|all|crop|move|zoom$/;\r\n    var REGEXP_DATA_URL = /^data:/;\r\n    var REGEXP_DATA_URL_JPEG = /^data:image\\/jpeg;base64,/;\r\n    var REGEXP_TAG_NAME = /^img|canvas$/i;\r\n\r\n    // Misc\r\n    // Inspired by the default width and height of a canvas element.\r\n    var MIN_CONTAINER_WIDTH = 200;\r\n    var MIN_CONTAINER_HEIGHT = 100;\r\n\r\n    var DEFAULTS = {\r\n        // Define the view mode of the cropper\r\n        viewMode: 0,\r\n        // 0, 1, 2, 3\r\n\r\n        // Define the dragging mode of the cropper\r\n        dragMode: DRAG_MODE_CROP,\r\n        // 'crop', 'move' or 'none'\r\n\r\n        // Define the initial aspect ratio of the crop box\r\n        initialAspectRatio: NaN,\r\n        // Define the aspect ratio of the crop box\r\n        aspectRatio: NaN,\r\n        // An object with the previous cropping result data\r\n        data: null,\r\n        // A selector for adding extra containers to preview\r\n        preview: '',\r\n        // Re-render the cropper when resize the window\r\n        responsive: true,\r\n        // Restore the cropped area after resize the window\r\n        restore: true,\r\n        // Check if the current image is a cross-origin image\r\n        checkCrossOrigin: true,\r\n        // Check the current image's Exif Orientation information\r\n        checkOrientation: true,\r\n        // Show the black modal\r\n        modal: true,\r\n        // Show the dashed lines for guiding\r\n        guides: true,\r\n        // Show the center indicator for guiding\r\n        center: true,\r\n        // Show the white modal to highlight the crop box\r\n        highlight: true,\r\n        // Show the grid background\r\n        background: true,\r\n        // Enable to crop the image automatically when initialize\r\n        autoCrop: true,\r\n        // Define the percentage of automatic cropping area when initializes\r\n        autoCropArea: 0.8,\r\n        // Enable to move the image\r\n        movable: true,\r\n        // Enable to rotate the image\r\n        rotatable: true,\r\n        // Enable to scale the image\r\n        scalable: true,\r\n        // Enable to zoom the image\r\n        zoomable: true,\r\n        // Enable to zoom the image by dragging touch\r\n        zoomOnTouch: true,\r\n        // Enable to zoom the image by wheeling mouse\r\n        zoomOnWheel: true,\r\n        // Define zoom ratio when zoom the image by wheeling mouse\r\n        wheelZoomRatio: 0.1,\r\n        // Enable to move the crop box\r\n        cropBoxMovable: true,\r\n        // Enable to resize the crop box\r\n        cropBoxResizable: true,\r\n        // Toggle drag mode between \"crop\" and \"move\" when click twice on the cropper\r\n        toggleDragModeOnDblclick: true,\r\n        // Size limitation\r\n        minCanvasWidth: 0,\r\n        minCanvasHeight: 0,\r\n        minCropBoxWidth: 0,\r\n        minCropBoxHeight: 0,\r\n        minContainerWidth: MIN_CONTAINER_WIDTH,\r\n        minContainerHeight: MIN_CONTAINER_HEIGHT,\r\n        // Shortcuts of events\r\n        ready: null,\r\n        cropstart: null,\r\n        cropmove: null,\r\n        cropend: null,\r\n        crop: null,\r\n        zoom: null\r\n    };\r\n\r\n    var TEMPLATE = '<div class=\"cropper-container\" touch-action=\"none\">' + '<div class=\"cropper-wrap-box\">' + '<div class=\"cropper-canvas\"></div>' + '</div>' + '<div class=\"cropper-drag-box\"></div>' + '<div class=\"cropper-crop-box\">' + '<span class=\"cropper-view-box\"></span>' + '<span class=\"cropper-dashed dashed-h\"></span>' + '<span class=\"cropper-dashed dashed-v\"></span>' + '<span class=\"cropper-center\"></span>' + '<span class=\"cropper-face\"></span>' + '<span class=\"cropper-line line-e\" data-cropper-action=\"e\"></span>' + '<span class=\"cropper-line line-n\" data-cropper-action=\"n\"></span>' + '<span class=\"cropper-line line-w\" data-cropper-action=\"w\"></span>' + '<span class=\"cropper-line line-s\" data-cropper-action=\"s\"></span>' + '<span class=\"cropper-point point-e\" data-cropper-action=\"e\"></span>' + '<span class=\"cropper-point point-n\" data-cropper-action=\"n\"></span>' + '<span class=\"cropper-point point-w\" data-cropper-action=\"w\"></span>' + '<span class=\"cropper-point point-s\" data-cropper-action=\"s\"></span>' + '<span class=\"cropper-point point-ne\" data-cropper-action=\"ne\"></span>' + '<span class=\"cropper-point point-nw\" data-cropper-action=\"nw\"></span>' + '<span class=\"cropper-point point-sw\" data-cropper-action=\"sw\"></span>' + '<span class=\"cropper-point point-se\" data-cropper-action=\"se\"></span>' + '</div>' + '</div>';\r\n\r\n    /**\r\n     * Check if the given value is not a number.\r\n     */\r\n    var isNaN = Number.isNaN || WINDOW.isNaN;\r\n\r\n    /**\r\n     * Check if the given value is a number.\r\n     * @param {*} value - The value to check.\r\n     * @returns {boolean} Returns `true` if the given value is a number, else `false`.\r\n     */\r\n    function isNumber(value) {\r\n        return typeof value === 'number' && !isNaN(value);\r\n    }\r\n\r\n    /**\r\n     * Check if the given value is a positive number.\r\n     * @param {*} value - The value to check.\r\n     * @returns {boolean} Returns `true` if the given value is a positive number, else `false`.\r\n     */\r\n    var isPositiveNumber = function isPositiveNumber(value) {\r\n        return value > 0 && value < Infinity;\r\n    };\r\n\r\n    /**\r\n     * Check if the given value is undefined.\r\n     * @param {*} value - The value to check.\r\n     * @returns {boolean} Returns `true` if the given value is undefined, else `false`.\r\n     */\r\n    function isUndefined(value) {\r\n        return typeof value === 'undefined';\r\n    }\r\n\r\n    /**\r\n     * Check if the given value is an object.\r\n     * @param {*} value - The value to check.\r\n     * @returns {boolean} Returns `true` if the given value is an object, else `false`.\r\n     */\r\n    function isObject(value) {\r\n        return _typeof(value) === 'object' && value !== null;\r\n    }\r\n\r\n    var hasOwnProperty = Object.prototype.hasOwnProperty;\r\n\r\n    /**\r\n     * Check if the given value is a plain object.\r\n     * @param {*} value - The value to check.\r\n     * @returns {boolean} Returns `true` if the given value is a plain object, else `false`.\r\n     */\r\n    function isPlainObject(value) {\r\n        if (!isObject(value)) {\r\n            return false;\r\n        }\r\n        try {\r\n            var _constructor = value.constructor;\r\n            var prototype = _constructor.prototype;\r\n            return _constructor && prototype && hasOwnProperty.call(prototype, 'isPrototypeOf');\r\n        } catch (error) {\r\n            return false;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Check if the given value is a function.\r\n     * @param {*} value - The value to check.\r\n     * @returns {boolean} Returns `true` if the given value is a function, else `false`.\r\n     */\r\n    function isFunction(value) {\r\n        return typeof value === 'function';\r\n    }\r\n\r\n    var slice = Array.prototype.slice;\r\n\r\n    /**\r\n     * Convert array-like or iterable object to an array.\r\n     * @param {*} value - The value to convert.\r\n     * @returns {Array} Returns a new array.\r\n     */\r\n    function toArray(value) {\r\n        return Array.from ? Array.from(value) : slice.call(value);\r\n    }\r\n\r\n    /**\r\n     * Iterate the given data.\r\n     * @param {*} data - The data to iterate.\r\n     * @param {Function} callback - The process function for each element.\r\n     * @returns {*} The original data.\r\n     */\r\n    function forEach(data, callback) {\r\n        if (data && isFunction(callback)) {\r\n            if (Array.isArray(data) || isNumber(data.length) /* array-like */) {\r\n                toArray(data).forEach(function(value, key) {\r\n                    callback.call(data, value, key, data);\r\n                });\r\n            } else if (isObject(data)) {\r\n                Object.keys(data).forEach(function(key) {\r\n                    callback.call(data, data[key], key, data);\r\n                });\r\n            }\r\n        }\r\n        return data;\r\n    }\r\n\r\n    /**\r\n     * Extend the given object.\r\n     * @param {*} target - The target object to extend.\r\n     * @param {*} args - The rest objects for merging to the target object.\r\n     * @returns {Object} The extended object.\r\n     */\r\n    var assign = Object.assign || function assign(target) {\r\n        for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\r\n            args[_key - 1] = arguments[_key];\r\n        }\r\n        if (isObject(target) && args.length > 0) {\r\n            args.forEach(function(arg) {\r\n                if (isObject(arg)) {\r\n                    Object.keys(arg).forEach(function(key) {\r\n                        target[key] = arg[key];\r\n                    });\r\n                }\r\n            });\r\n        }\r\n        return target;\r\n    };\r\n    var REGEXP_DECIMALS = /\\.\\d*(?:0|9){12}\\d*$/;\r\n\r\n    /**\r\n     * Normalize decimal number.\r\n     * Check out {@link https://0.30000000000000004.com/}\r\n     * @param {number} value - The value to normalize.\r\n     * @param {number} [times=100000000000] - The times for normalizing.\r\n     * @returns {number} Returns the normalized number.\r\n     */\r\n    function normalizeDecimalNumber(value) {\r\n        var times = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 100000000000;\r\n        return REGEXP_DECIMALS.test(value) ? Math.round(value * times) / times : value;\r\n    }\r\n\r\n    var REGEXP_SUFFIX = /^width|height|left|top|marginLeft|marginTop$/;\r\n\r\n    /**\r\n     * Apply styles to the given element.\r\n     * @param {Element} element - The target element.\r\n     * @param {Object} styles - The styles for applying.\r\n     */\r\n    function setStyle(element, styles) {\r\n        var style = element.style;\r\n        forEach(styles, function(value, property) {\r\n            if (REGEXP_SUFFIX.test(property) && isNumber(value)) {\r\n                value = \"\".concat(value, \"px\");\r\n            }\r\n            style[property] = value;\r\n        });\r\n    }\r\n\r\n    /**\r\n     * Check if the given element has a special class.\r\n     * @param {Element} element - The element to check.\r\n     * @param {string} value - The class to search.\r\n     * @returns {boolean} Returns `true` if the special class was found.\r\n     */\r\n    function hasClass(element, value) {\r\n        return element.classList ? element.classList.contains(value) : element.className.indexOf(value) > -1;\r\n    }\r\n\r\n    /**\r\n     * Add classes to the given element.\r\n     * @param {Element} element - The target element.\r\n     * @param {string} value - The classes to be added.\r\n     */\r\n    function addClass(element, value) {\r\n        if (!value) {\r\n            return;\r\n        }\r\n        if (isNumber(element.length)) {\r\n            forEach(element, function(elem) {\r\n                addClass(elem, value);\r\n            });\r\n            return;\r\n        }\r\n        if (element.classList) {\r\n            element.classList.add(value);\r\n            return;\r\n        }\r\n        var className = element.className.trim();\r\n        if (!className) {\r\n            element.className = value;\r\n        } else if (className.indexOf(value) < 0) {\r\n            element.className = \"\".concat(className, \" \").concat(value);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Remove classes from the given element.\r\n     * @param {Element} element - The target element.\r\n     * @param {string} value - The classes to be removed.\r\n     */\r\n    function removeClass(element, value) {\r\n        if (!value) {\r\n            return;\r\n        }\r\n        if (isNumber(element.length)) {\r\n            forEach(element, function(elem) {\r\n                removeClass(elem, value);\r\n            });\r\n            return;\r\n        }\r\n        if (element.classList) {\r\n            element.classList.remove(value);\r\n            return;\r\n        }\r\n        if (element.className.indexOf(value) >= 0) {\r\n            element.className = element.className.replace(value, '');\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Add or remove classes from the given element.\r\n     * @param {Element} element - The target element.\r\n     * @param {string} value - The classes to be toggled.\r\n     * @param {boolean} added - Add only.\r\n     */\r\n    function toggleClass(element, value, added) {\r\n        if (!value) {\r\n            return;\r\n        }\r\n        if (isNumber(element.length)) {\r\n            forEach(element, function(elem) {\r\n                toggleClass(elem, value, added);\r\n            });\r\n            return;\r\n        }\r\n\r\n        // IE10-11 doesn't support the second parameter of `classList.toggle`\r\n        if (added) {\r\n            addClass(element, value);\r\n        } else {\r\n            removeClass(element, value);\r\n        }\r\n    }\r\n\r\n    var REGEXP_CAMEL_CASE = /([a-z\\d])([A-Z])/g;\r\n\r\n    /**\r\n     * Transform the given string from camelCase to kebab-case\r\n     * @param {string} value - The value to transform.\r\n     * @returns {string} The transformed value.\r\n     */\r\n    function toParamCase(value) {\r\n        return value.replace(REGEXP_CAMEL_CASE, '$1-$2').toLowerCase();\r\n    }\r\n\r\n    /**\r\n     * Get data from the given element.\r\n     * @param {Element} element - The target element.\r\n     * @param {string} name - The data key to get.\r\n     * @returns {string} The data value.\r\n     */\r\n    function getData(element, name) {\r\n        if (isObject(element[name])) {\r\n            return element[name];\r\n        }\r\n        if (element.dataset) {\r\n            return element.dataset[name];\r\n        }\r\n        return element.getAttribute(\"data-\".concat(toParamCase(name)));\r\n    }\r\n\r\n    /**\r\n     * Set data to the given element.\r\n     * @param {Element} element - The target element.\r\n     * @param {string} name - The data key to set.\r\n     * @param {string} data - The data value.\r\n     */\r\n    function setData(element, name, data) {\r\n        if (isObject(data)) {\r\n            element[name] = data;\r\n        } else if (element.dataset) {\r\n            element.dataset[name] = data;\r\n        } else {\r\n            element.setAttribute(\"data-\".concat(toParamCase(name)), data);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Remove data from the given element.\r\n     * @param {Element} element - The target element.\r\n     * @param {string} name - The data key to remove.\r\n     */\r\n    function removeData(element, name) {\r\n        if (isObject(element[name])) {\r\n            try {\r\n                delete element[name];\r\n            } catch (error) {\r\n                element[name] = undefined;\r\n            }\r\n        } else if (element.dataset) {\r\n            // #128 Safari not allows to delete dataset property\r\n            try {\r\n                delete element.dataset[name];\r\n            } catch (error) {\r\n                element.dataset[name] = undefined;\r\n            }\r\n        } else {\r\n            element.removeAttribute(\"data-\".concat(toParamCase(name)));\r\n        }\r\n    }\r\n\r\n    var REGEXP_SPACES = /\\s\\s*/;\r\n    var onceSupported = function() {\r\n        var supported = false;\r\n        if (IS_BROWSER) {\r\n            var once = false;\r\n            var listener = function listener() {\r\n            };\r\n            var options = Object.defineProperty({}, 'once', {\r\n                get: function get() {\r\n                    supported = true;\r\n                    return once;\r\n                },\r\n                /**\r\n                 * This setter can fix a `TypeError` in strict mode\r\n                 * {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Getter_only}\r\n                 * @param {boolean} value - The value to set\r\n                 */\r\n                set: function set(value) {\r\n                    once = value;\r\n                }\r\n            });\r\n            WINDOW.addEventListener('test', listener, options);\r\n            WINDOW.removeEventListener('test', listener, options);\r\n        }\r\n        return supported;\r\n    }();\r\n\r\n    /**\r\n     * Remove event listener from the target element.\r\n     * @param {Element} element - The event target.\r\n     * @param {string} type - The event type(s).\r\n     * @param {Function} listener - The event listener.\r\n     * @param {Object} options - The event options.\r\n     */\r\n    function removeListener(element, type, listener) {\r\n        var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\r\n        var handler = listener;\r\n        type.trim().split(REGEXP_SPACES).forEach(function(event) {\r\n            if (!onceSupported) {\r\n                var listeners = element.listeners;\r\n                if (listeners && listeners[event] && listeners[event][listener]) {\r\n                    handler = listeners[event][listener];\r\n                    delete listeners[event][listener];\r\n                    if (Object.keys(listeners[event]).length === 0) {\r\n                        delete listeners[event];\r\n                    }\r\n                    if (Object.keys(listeners).length === 0) {\r\n                        delete element.listeners;\r\n                    }\r\n                }\r\n            }\r\n            element.removeEventListener(event, handler, options);\r\n        });\r\n    }\r\n\r\n    /**\r\n     * Add event listener to the target element.\r\n     * @param {Element} element - The event target.\r\n     * @param {string} type - The event type(s).\r\n     * @param {Function} listener - The event listener.\r\n     * @param {Object} options - The event options.\r\n     */\r\n    function addListener(element, type, listener) {\r\n        var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\r\n        var _handler = listener;\r\n        type.trim().split(REGEXP_SPACES).forEach(function(event) {\r\n            if (options.once && !onceSupported) {\r\n                var _element$listeners = element.listeners,\r\n                        listeners = _element$listeners === void 0 ? {} : _element$listeners;\r\n                _handler = function handler() {\r\n                    delete listeners[event][listener];\r\n                    element.removeEventListener(event, _handler, options);\r\n                    for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\r\n                        args[_key2] = arguments[_key2];\r\n                    }\r\n                    listener.apply(element, args);\r\n                };\r\n                if (!listeners[event]) {\r\n                    listeners[event] = {};\r\n                }\r\n                if (listeners[event][listener]) {\r\n                    element.removeEventListener(event, listeners[event][listener], options);\r\n                }\r\n                listeners[event][listener] = _handler;\r\n                element.listeners = listeners;\r\n            }\r\n            element.addEventListener(event, _handler, options);\r\n        });\r\n    }\r\n\r\n    /**\r\n     * Dispatch event on the target element.\r\n     * @param {Element} element - The event target.\r\n     * @param {string} type - The event type(s).\r\n     * @param {Object} data - The additional event data.\r\n     * @returns {boolean} Indicate if the event is default prevented or not.\r\n     */\r\n    function dispatchEvent(element, type, data) {\r\n        var event;\r\n\r\n        // Event and CustomEvent on IE9-11 are global objects, not constructors\r\n        if (isFunction(Event) && isFunction(CustomEvent)) {\r\n            event = new CustomEvent(type, {\r\n                detail: data,\r\n                bubbles: true,\r\n                cancelable: true\r\n            });\r\n        } else {\r\n            event = document.createEvent('CustomEvent');\r\n            event.initCustomEvent(type, true, true, data);\r\n        }\r\n        return element.dispatchEvent(event);\r\n    }\r\n\r\n    /**\r\n     * Get the offset base on the document.\r\n     * @param {Element} element - The target element.\r\n     * @returns {Object} The offset data.\r\n     */\r\n    function getOffset(element) {\r\n        var box = element.getBoundingClientRect();\r\n        return {\r\n            left: box.left + (window.pageXOffset - document.documentElement.clientLeft),\r\n            top: box.top + (window.pageYOffset - document.documentElement.clientTop)\r\n        };\r\n    }\r\n\r\n    var location = WINDOW.location;\r\n    var REGEXP_ORIGINS = /^(\\w+:)\\/\\/([^:/?#]*):?(\\d*)/i;\r\n\r\n    /**\r\n     * Check if the given URL is a cross origin URL.\r\n     * @param {string} url - The target URL.\r\n     * @returns {boolean} Returns `true` if the given URL is a cross origin URL, else `false`.\r\n     */\r\n    function isCrossOriginURL(url) {\r\n        var parts = url.match(REGEXP_ORIGINS);\r\n        return parts !== null && (parts[1] !== location.protocol || parts[2] !== location.hostname || parts[3] !== location.port);\r\n    }\r\n\r\n    /**\r\n     * Add timestamp to the given URL.\r\n     * @param {string} url - The target URL.\r\n     * @returns {string} The result URL.\r\n     */\r\n    function addTimestamp(url) {\r\n        var timestamp = \"timestamp=\".concat(new Date().getTime());\r\n        return url + (url.indexOf('?') === -1 ? '?' : '&') + timestamp;\r\n    }\r\n\r\n    /**\r\n     * Get transforms base on the given object.\r\n     * @param {Object} obj - The target object.\r\n     * @returns {string} A string contains transform values.\r\n     */\r\n    function getTransforms(_ref) {\r\n        var rotate = _ref.rotate,\r\n                scaleX = _ref.scaleX,\r\n                scaleY = _ref.scaleY,\r\n                translateX = _ref.translateX,\r\n                translateY = _ref.translateY;\r\n        var values = [];\r\n        if (isNumber(translateX) && translateX !== 0) {\r\n            values.push(\"translateX(\".concat(translateX, \"px)\"));\r\n        }\r\n        if (isNumber(translateY) && translateY !== 0) {\r\n            values.push(\"translateY(\".concat(translateY, \"px)\"));\r\n        }\r\n\r\n        // Rotate should come first before scale to match orientation transform\r\n        if (isNumber(rotate) && rotate !== 0) {\r\n            values.push(\"rotate(\".concat(rotate, \"deg)\"));\r\n        }\r\n        if (isNumber(scaleX) && scaleX !== 1) {\r\n            values.push(\"scaleX(\".concat(scaleX, \")\"));\r\n        }\r\n        if (isNumber(scaleY) && scaleY !== 1) {\r\n            values.push(\"scaleY(\".concat(scaleY, \")\"));\r\n        }\r\n        var transform = values.length ? values.join(' ') : 'none';\r\n        return {\r\n            WebkitTransform: transform,\r\n            msTransform: transform,\r\n            transform: transform\r\n        };\r\n    }\r\n\r\n    /**\r\n     * Get the max ratio of a group of pointers.\r\n     * @param {string} pointers - The target pointers.\r\n     * @returns {number} The result ratio.\r\n     */\r\n    function getMaxZoomRatio(pointers) {\r\n        var pointers2 = _objectSpread2({}, pointers);\r\n        var maxRatio = 0;\r\n        forEach(pointers, function(pointer, pointerId) {\r\n            delete pointers2[pointerId];\r\n            forEach(pointers2, function(pointer2) {\r\n                var x1 = Math.abs(pointer.startX - pointer2.startX);\r\n                var y1 = Math.abs(pointer.startY - pointer2.startY);\r\n                var x2 = Math.abs(pointer.endX - pointer2.endX);\r\n                var y2 = Math.abs(pointer.endY - pointer2.endY);\r\n                var z1 = Math.sqrt(x1 * x1 + y1 * y1);\r\n                var z2 = Math.sqrt(x2 * x2 + y2 * y2);\r\n                var ratio = (z2 - z1) / z1;\r\n                if (Math.abs(ratio) > Math.abs(maxRatio)) {\r\n                    maxRatio = ratio;\r\n                }\r\n            });\r\n        });\r\n        return maxRatio;\r\n    }\r\n\r\n    /**\r\n     * Get a pointer from an event object.\r\n     * @param {Object} event - The target event object.\r\n     * @param {boolean} endOnly - Indicates if only returns the end point coordinate or not.\r\n     * @returns {Object} The result pointer contains start and/or end point coordinates.\r\n     */\r\n    function getPointer(_ref2, endOnly) {\r\n        var pageX = _ref2.pageX,\r\n                pageY = _ref2.pageY;\r\n        var end = {\r\n            endX: pageX,\r\n            endY: pageY\r\n        };\r\n        return endOnly ? end : _objectSpread2({\r\n                                                  startX: pageX,\r\n                                                  startY: pageY\r\n                                              }, end);\r\n    }\r\n\r\n    /**\r\n     * Get the center point coordinate of a group of pointers.\r\n     * @param {Object} pointers - The target pointers.\r\n     * @returns {Object} The center point coordinate.\r\n     */\r\n    function getPointersCenter(pointers) {\r\n        var pageX = 0;\r\n        var pageY = 0;\r\n        var count = 0;\r\n        forEach(pointers, function(_ref3) {\r\n            var startX = _ref3.startX,\r\n                    startY = _ref3.startY;\r\n            pageX += startX;\r\n            pageY += startY;\r\n            count += 1;\r\n        });\r\n        pageX /= count;\r\n        pageY /= count;\r\n        return {\r\n            pageX: pageX,\r\n            pageY: pageY\r\n        };\r\n    }\r\n\r\n    /**\r\n     * Get the max sizes in a rectangle under the given aspect ratio.\r\n     * @param {Object} data - The original sizes.\r\n     * @param {string} [type='contain'] - The adjust type.\r\n     * @returns {Object} The result sizes.\r\n     */\r\n    function getAdjustedSizes(_ref4) {\r\n        var aspectRatio = _ref4.aspectRatio,\r\n                height = _ref4.height,\r\n                width = _ref4.width;\r\n        var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'contain';\r\n        var isValidWidth = isPositiveNumber(width);\r\n        var isValidHeight = isPositiveNumber(height);\r\n        if (isValidWidth && isValidHeight) {\r\n            var adjustedWidth = height * aspectRatio;\r\n            if (type === 'contain' && adjustedWidth > width || type === 'cover' && adjustedWidth < width) {\r\n                height = width / aspectRatio;\r\n            } else {\r\n                width = height * aspectRatio;\r\n            }\r\n        } else if (isValidWidth) {\r\n            height = width / aspectRatio;\r\n        } else if (isValidHeight) {\r\n            width = height * aspectRatio;\r\n        }\r\n        return {\r\n            width: width,\r\n            height: height\r\n        };\r\n    }\r\n\r\n    /**\r\n     * Get the new sizes of a rectangle after rotated.\r\n     * @param {Object} data - The original sizes.\r\n     * @returns {Object} The result sizes.\r\n     */\r\n    function getRotatedSizes(_ref5) {\r\n        var width = _ref5.width,\r\n                height = _ref5.height,\r\n                degree = _ref5.degree;\r\n        degree = Math.abs(degree) % 180;\r\n        if (degree === 90) {\r\n            return {\r\n                width: height,\r\n                height: width\r\n            };\r\n        }\r\n        var arc = degree % 90 * Math.PI / 180;\r\n        var sinArc = Math.sin(arc);\r\n        var cosArc = Math.cos(arc);\r\n        var newWidth = width * cosArc + height * sinArc;\r\n        var newHeight = width * sinArc + height * cosArc;\r\n        return degree > 90 ? {\r\n            width: newHeight,\r\n            height: newWidth\r\n        } : {\r\n            width: newWidth,\r\n            height: newHeight\r\n        };\r\n    }\r\n\r\n    /**\r\n     * Get a canvas which drew the given image.\r\n     * @param {HTMLImageElement} image - The image for drawing.\r\n     * @param {Object} imageData - The image data.\r\n     * @param {Object} canvasData - The canvas data.\r\n     * @param {Object} options - The options.\r\n     * @returns {HTMLCanvasElement} The result canvas.\r\n     */\r\n    function getSourceCanvas(image, _ref6, _ref7, _ref8) {\r\n        var imageAspectRatio = _ref6.aspectRatio,\r\n                imageNaturalWidth = _ref6.naturalWidth,\r\n                imageNaturalHeight = _ref6.naturalHeight,\r\n                _ref6$rotate = _ref6.rotate,\r\n                rotate = _ref6$rotate === void 0 ? 0 : _ref6$rotate,\r\n                _ref6$scaleX = _ref6.scaleX,\r\n                scaleX = _ref6$scaleX === void 0 ? 1 : _ref6$scaleX,\r\n                _ref6$scaleY = _ref6.scaleY,\r\n                scaleY = _ref6$scaleY === void 0 ? 1 : _ref6$scaleY;\r\n        var aspectRatio = _ref7.aspectRatio,\r\n                naturalWidth = _ref7.naturalWidth,\r\n                naturalHeight = _ref7.naturalHeight;\r\n        var _ref8$fillColor = _ref8.fillColor,\r\n                fillColor = _ref8$fillColor === void 0 ? 'transparent' : _ref8$fillColor,\r\n                _ref8$imageSmoothingE = _ref8.imageSmoothingEnabled,\r\n                imageSmoothingEnabled = _ref8$imageSmoothingE === void 0 ? true : _ref8$imageSmoothingE,\r\n                _ref8$imageSmoothingQ = _ref8.imageSmoothingQuality,\r\n                imageSmoothingQuality = _ref8$imageSmoothingQ === void 0 ? 'low' : _ref8$imageSmoothingQ,\r\n                _ref8$maxWidth = _ref8.maxWidth,\r\n                maxWidth = _ref8$maxWidth === void 0 ? Infinity : _ref8$maxWidth,\r\n                _ref8$maxHeight = _ref8.maxHeight,\r\n                maxHeight = _ref8$maxHeight === void 0 ? Infinity : _ref8$maxHeight,\r\n                _ref8$minWidth = _ref8.minWidth,\r\n                minWidth = _ref8$minWidth === void 0 ? 0 : _ref8$minWidth,\r\n                _ref8$minHeight = _ref8.minHeight,\r\n                minHeight = _ref8$minHeight === void 0 ? 0 : _ref8$minHeight;\r\n        var canvas = document.createElement('canvas');\r\n        var context = canvas.getContext('2d');\r\n        var maxSizes = getAdjustedSizes({\r\n                                            aspectRatio: aspectRatio,\r\n                                            width: maxWidth,\r\n                                            height: maxHeight\r\n                                        });\r\n        var minSizes = getAdjustedSizes({\r\n                                            aspectRatio: aspectRatio,\r\n                                            width: minWidth,\r\n                                            height: minHeight\r\n                                        }, 'cover');\r\n        var width = Math.min(maxSizes.width, Math.max(minSizes.width, naturalWidth));\r\n        var height = Math.min(maxSizes.height, Math.max(minSizes.height, naturalHeight));\r\n\r\n        // Note: should always use image's natural sizes for drawing as\r\n        // imageData.naturalWidth === canvasData.naturalHeight when rotate % 180 === 90\r\n        var destMaxSizes = getAdjustedSizes({\r\n                                                aspectRatio: imageAspectRatio,\r\n                                                width: maxWidth,\r\n                                                height: maxHeight\r\n                                            });\r\n        var destMinSizes = getAdjustedSizes({\r\n                                                aspectRatio: imageAspectRatio,\r\n                                                width: minWidth,\r\n                                                height: minHeight\r\n                                            }, 'cover');\r\n        var destWidth = Math.min(destMaxSizes.width, Math.max(destMinSizes.width, imageNaturalWidth));\r\n        var destHeight = Math.min(destMaxSizes.height, Math.max(destMinSizes.height, imageNaturalHeight));\r\n        var params = [-destWidth / 2, -destHeight / 2, destWidth, destHeight];\r\n        canvas.width = normalizeDecimalNumber(width);\r\n        canvas.height = normalizeDecimalNumber(height);\r\n        context.fillStyle = fillColor;\r\n        context.fillRect(0, 0, width, height);\r\n        context.save();\r\n        context.translate(width / 2, height / 2);\r\n        context.rotate(rotate * Math.PI / 180);\r\n        context.scale(scaleX, scaleY);\r\n        context.imageSmoothingEnabled = imageSmoothingEnabled;\r\n        context.imageSmoothingQuality = imageSmoothingQuality;\r\n        context.drawImage.apply(context, [image].concat(_toConsumableArray(params.map(function(param) {\r\n            return Math.floor(normalizeDecimalNumber(param));\r\n        }))));\r\n        context.restore();\r\n        return canvas;\r\n    }\r\n\r\n    var fromCharCode = String.fromCharCode;\r\n\r\n    /**\r\n     * Get string from char code in data view.\r\n     * @param {DataView} dataView - The data view for read.\r\n     * @param {number} start - The start index.\r\n     * @param {number} length - The read length.\r\n     * @returns {string} The read result.\r\n     */\r\n    function getStringFromCharCode(dataView, start, length) {\r\n        var str = '';\r\n        length += start;\r\n        for (var i = start; i < length; i += 1) {\r\n            str += fromCharCode(dataView.getUint8(i));\r\n        }\r\n        return str;\r\n    }\r\n\r\n    var REGEXP_DATA_URL_HEAD = /^data:.*,/;\r\n\r\n    /**\r\n     * Transform Data URL to array buffer.\r\n     * @param {string} dataURL - The Data URL to transform.\r\n     * @returns {ArrayBuffer} The result array buffer.\r\n     */\r\n    function dataURLToArrayBuffer(dataURL) {\r\n        var base64 = dataURL.replace(REGEXP_DATA_URL_HEAD, '');\r\n        var binary = atob(base64);\r\n        var arrayBuffer = new ArrayBuffer(binary.length);\r\n        var uint8 = new Uint8Array(arrayBuffer);\r\n        forEach(uint8, function(value, i) {\r\n            uint8[i] = binary.charCodeAt(i);\r\n        });\r\n        return arrayBuffer;\r\n    }\r\n\r\n    /**\r\n     * Transform array buffer to Data URL.\r\n     * @param {ArrayBuffer} arrayBuffer - The array buffer to transform.\r\n     * @param {string} mimeType - The mime type of the Data URL.\r\n     * @returns {string} The result Data URL.\r\n     */\r\n    function arrayBufferToDataURL(arrayBuffer, mimeType) {\r\n        var chunks = [];\r\n\r\n        // Chunk Typed Array for better performance (#435)\r\n        var chunkSize = 8192;\r\n        var uint8 = new Uint8Array(arrayBuffer);\r\n        while (uint8.length > 0) {\r\n            // XXX: Babel's `toConsumableArray` helper will throw error in IE or Safari 9\r\n            // eslint-disable-next-line prefer-spread\r\n            chunks.push(fromCharCode.apply(null, toArray(uint8.subarray(0, chunkSize))));\r\n            uint8 = uint8.subarray(chunkSize);\r\n        }\r\n        return \"data:\".concat(mimeType, \";base64,\").concat(btoa(chunks.join('')));\r\n    }\r\n\r\n    /**\r\n     * Get orientation value from given array buffer.\r\n     * @param {ArrayBuffer} arrayBuffer - The array buffer to read.\r\n     * @returns {number} The read orientation value.\r\n     */\r\n    function resetAndGetOrientation(arrayBuffer) {\r\n        var dataView = new DataView(arrayBuffer);\r\n        var orientation;\r\n\r\n        // Ignores range error when the image does not have correct Exif information\r\n        try {\r\n            var littleEndian;\r\n            var app1Start;\r\n            var ifdStart;\r\n\r\n            // Only handle JPEG image (start by 0xFFD8)\r\n            if (dataView.getUint8(0) === 0xFF && dataView.getUint8(1) === 0xD8) {\r\n                var length = dataView.byteLength;\r\n                var offset = 2;\r\n                while (offset + 1 < length) {\r\n                    if (dataView.getUint8(offset) === 0xFF && dataView.getUint8(offset + 1) === 0xE1) {\r\n                        app1Start = offset;\r\n                        break;\r\n                    }\r\n                    offset += 1;\r\n                }\r\n            }\r\n            if (app1Start) {\r\n                var exifIDCode = app1Start + 4;\r\n                var tiffOffset = app1Start + 10;\r\n                if (getStringFromCharCode(dataView, exifIDCode, 4) === 'Exif') {\r\n                    var endianness = dataView.getUint16(tiffOffset);\r\n                    littleEndian = endianness === 0x4949;\r\n                    if (littleEndian || endianness === 0x4D4D /* bigEndian */) {\r\n                        if (dataView.getUint16(tiffOffset + 2, littleEndian) === 0x002A) {\r\n                            var firstIFDOffset = dataView.getUint32(tiffOffset + 4, littleEndian);\r\n                            if (firstIFDOffset >= 0x00000008) {\r\n                                ifdStart = tiffOffset + firstIFDOffset;\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n            if (ifdStart) {\r\n                var _length = dataView.getUint16(ifdStart, littleEndian);\r\n                var _offset;\r\n                var i;\r\n                for (i = 0; i < _length; i += 1) {\r\n                    _offset = ifdStart + i * 12 + 2;\r\n                    if (dataView.getUint16(_offset, littleEndian) === 0x0112 /* Orientation */) {\r\n                        // 8 is the offset of the current tag's value\r\n                        _offset += 8;\r\n\r\n                        // Get the original orientation value\r\n                        orientation = dataView.getUint16(_offset, littleEndian);\r\n\r\n                        // Override the orientation with its default value\r\n                        dataView.setUint16(_offset, 1, littleEndian);\r\n                        break;\r\n                    }\r\n                }\r\n            }\r\n        } catch (error) {\r\n            orientation = 1;\r\n        }\r\n        return orientation;\r\n    }\r\n\r\n    /**\r\n     * Parse Exif Orientation value.\r\n     * @param {number} orientation - The orientation to parse.\r\n     * @returns {Object} The parsed result.\r\n     */\r\n    function parseOrientation(orientation) {\r\n        var rotate = 0;\r\n        var scaleX = 1;\r\n        var scaleY = 1;\r\n        switch (orientation) {\r\n                // Flip horizontal\r\n            case 2:\r\n                scaleX = -1;\r\n                break;\r\n\r\n                // Rotate left 180°\r\n            case 3:\r\n                rotate = -180;\r\n                break;\r\n\r\n                // Flip vertical\r\n            case 4:\r\n                scaleY = -1;\r\n                break;\r\n\r\n                // Flip vertical and rotate right 90°\r\n            case 5:\r\n                rotate = 90;\r\n                scaleY = -1;\r\n                break;\r\n\r\n                // Rotate right 90°\r\n            case 6:\r\n                rotate = 90;\r\n                break;\r\n\r\n                // Flip horizontal and rotate right 90°\r\n            case 7:\r\n                rotate = 90;\r\n                scaleX = -1;\r\n                break;\r\n\r\n                // Rotate left 90°\r\n            case 8:\r\n                rotate = -90;\r\n                break;\r\n        }\r\n        return {\r\n            rotate: rotate,\r\n            scaleX: scaleX,\r\n            scaleY: scaleY\r\n        };\r\n    }\r\n\r\n    var render = {\r\n        render: function render() {\r\n            this.initContainer();\r\n            this.initCanvas();\r\n            this.initCropBox();\r\n            this.renderCanvas();\r\n            if (this.cropped) {\r\n                this.renderCropBox();\r\n            }\r\n        },\r\n        initContainer: function initContainer() {\r\n            var element = this.element,\r\n                    options = this.options,\r\n                    container = this.container,\r\n                    cropper = this.cropper;\r\n            var minWidth = Number(options.minContainerWidth);\r\n            var minHeight = Number(options.minContainerHeight);\r\n            addClass(cropper, CLASS_HIDDEN);\r\n            removeClass(element, CLASS_HIDDEN);\r\n            var containerData = {\r\n                width: Math.max(container.offsetWidth, minWidth >= 0 ? minWidth : MIN_CONTAINER_WIDTH),\r\n                height: Math.max(container.offsetHeight, minHeight >= 0 ? minHeight : MIN_CONTAINER_HEIGHT)\r\n            };\r\n            this.containerData = containerData;\r\n            setStyle(cropper, {\r\n                width: containerData.width,\r\n                height: containerData.height\r\n            });\r\n            addClass(element, CLASS_HIDDEN);\r\n            removeClass(cropper, CLASS_HIDDEN);\r\n        },\r\n        // Canvas (image wrapper)\r\n        initCanvas: function initCanvas() {\r\n            var containerData = this.containerData,\r\n                    imageData = this.imageData;\r\n            var viewMode = this.options.viewMode;\r\n            var rotated = Math.abs(imageData.rotate) % 180 === 90;\r\n            var naturalWidth = rotated ? imageData.naturalHeight : imageData.naturalWidth;\r\n            var naturalHeight = rotated ? imageData.naturalWidth : imageData.naturalHeight;\r\n            var aspectRatio = naturalWidth / naturalHeight;\r\n            var canvasWidth = containerData.width;\r\n            var canvasHeight = containerData.height;\r\n            if (containerData.height * aspectRatio > containerData.width) {\r\n                if (viewMode === 3) {\r\n                    canvasWidth = containerData.height * aspectRatio;\r\n                } else {\r\n                    canvasHeight = containerData.width / aspectRatio;\r\n                }\r\n            } else if (viewMode === 3) {\r\n                canvasHeight = containerData.width / aspectRatio;\r\n            } else {\r\n                canvasWidth = containerData.height * aspectRatio;\r\n            }\r\n            var canvasData = {\r\n                aspectRatio: aspectRatio,\r\n                naturalWidth: naturalWidth,\r\n                naturalHeight: naturalHeight,\r\n                width: canvasWidth,\r\n                height: canvasHeight\r\n            };\r\n            this.canvasData = canvasData;\r\n            this.limited = viewMode === 1 || viewMode === 2;\r\n            this.limitCanvas(true, true);\r\n            canvasData.width = Math.min(Math.max(canvasData.width, canvasData.minWidth), canvasData.maxWidth);\r\n            canvasData.height = Math.min(Math.max(canvasData.height, canvasData.minHeight), canvasData.maxHeight);\r\n            canvasData.left = (containerData.width - canvasData.width) / 2;\r\n            canvasData.top = (containerData.height - canvasData.height) / 2;\r\n            canvasData.oldLeft = canvasData.left;\r\n            canvasData.oldTop = canvasData.top;\r\n            this.initialCanvasData = assign({}, canvasData);\r\n        },\r\n        limitCanvas: function limitCanvas(sizeLimited, positionLimited) {\r\n            var options = this.options,\r\n                    containerData = this.containerData,\r\n                    canvasData = this.canvasData,\r\n                    cropBoxData = this.cropBoxData;\r\n            var viewMode = options.viewMode;\r\n            var aspectRatio = canvasData.aspectRatio;\r\n            var cropped = this.cropped && cropBoxData;\r\n            if (sizeLimited) {\r\n                var minCanvasWidth = Number(options.minCanvasWidth) || 0;\r\n                var minCanvasHeight = Number(options.minCanvasHeight) || 0;\r\n                if (viewMode > 1) {\r\n                    minCanvasWidth = Math.max(minCanvasWidth, containerData.width);\r\n                    minCanvasHeight = Math.max(minCanvasHeight, containerData.height);\r\n                    if (viewMode === 3) {\r\n                        if (minCanvasHeight * aspectRatio > minCanvasWidth) {\r\n                            minCanvasWidth = minCanvasHeight * aspectRatio;\r\n                        } else {\r\n                            minCanvasHeight = minCanvasWidth / aspectRatio;\r\n                        }\r\n                    }\r\n                } else if (viewMode > 0) {\r\n                    if (minCanvasWidth) {\r\n                        minCanvasWidth = Math.max(minCanvasWidth, cropped ? cropBoxData.width : 0);\r\n                    } else if (minCanvasHeight) {\r\n                        minCanvasHeight = Math.max(minCanvasHeight, cropped ? cropBoxData.height : 0);\r\n                    } else if (cropped) {\r\n                        minCanvasWidth = cropBoxData.width;\r\n                        minCanvasHeight = cropBoxData.height;\r\n                        if (minCanvasHeight * aspectRatio > minCanvasWidth) {\r\n                            minCanvasWidth = minCanvasHeight * aspectRatio;\r\n                        } else {\r\n                            minCanvasHeight = minCanvasWidth / aspectRatio;\r\n                        }\r\n                    }\r\n                }\r\n                var _getAdjustedSizes = getAdjustedSizes({\r\n                                                             aspectRatio: aspectRatio,\r\n                                                             width: minCanvasWidth,\r\n                                                             height: minCanvasHeight\r\n                                                         });\r\n                minCanvasWidth = _getAdjustedSizes.width;\r\n                minCanvasHeight = _getAdjustedSizes.height;\r\n                canvasData.minWidth = minCanvasWidth;\r\n                canvasData.minHeight = minCanvasHeight;\r\n                canvasData.maxWidth = Infinity;\r\n                canvasData.maxHeight = Infinity;\r\n            }\r\n            if (positionLimited) {\r\n                if (viewMode > (cropped ? 0 : 1)) {\r\n                    var newCanvasLeft = containerData.width - canvasData.width;\r\n                    var newCanvasTop = containerData.height - canvasData.height;\r\n                    canvasData.minLeft = Math.min(0, newCanvasLeft);\r\n                    canvasData.minTop = Math.min(0, newCanvasTop);\r\n                    canvasData.maxLeft = Math.max(0, newCanvasLeft);\r\n                    canvasData.maxTop = Math.max(0, newCanvasTop);\r\n                    if (cropped && this.limited) {\r\n                        canvasData.minLeft = Math.min(cropBoxData.left, cropBoxData.left + (cropBoxData.width - canvasData.width));\r\n                        canvasData.minTop = Math.min(cropBoxData.top, cropBoxData.top + (cropBoxData.height - canvasData.height));\r\n                        canvasData.maxLeft = cropBoxData.left;\r\n                        canvasData.maxTop = cropBoxData.top;\r\n                        if (viewMode === 2) {\r\n                            if (canvasData.width >= containerData.width) {\r\n                                canvasData.minLeft = Math.min(0, newCanvasLeft);\r\n                                canvasData.maxLeft = Math.max(0, newCanvasLeft);\r\n                            }\r\n                            if (canvasData.height >= containerData.height) {\r\n                                canvasData.minTop = Math.min(0, newCanvasTop);\r\n                                canvasData.maxTop = Math.max(0, newCanvasTop);\r\n                            }\r\n                        }\r\n                    }\r\n                } else {\r\n                    canvasData.minLeft = -canvasData.width;\r\n                    canvasData.minTop = -canvasData.height;\r\n                    canvasData.maxLeft = containerData.width;\r\n                    canvasData.maxTop = containerData.height;\r\n                }\r\n            }\r\n        },\r\n        renderCanvas: function renderCanvas(changed, transformed) {\r\n            var canvasData = this.canvasData,\r\n                    imageData = this.imageData;\r\n            if (transformed) {\r\n                var _getRotatedSizes = getRotatedSizes({\r\n                                                           width: imageData.naturalWidth * Math.abs(imageData.scaleX || 1),\r\n                                                           height: imageData.naturalHeight * Math.abs(imageData.scaleY || 1),\r\n                                                           degree: imageData.rotate || 0\r\n                                                       }),\r\n                        naturalWidth = _getRotatedSizes.width,\r\n                        naturalHeight = _getRotatedSizes.height;\r\n                var width = canvasData.width * (naturalWidth / canvasData.naturalWidth);\r\n                var height = canvasData.height * (naturalHeight / canvasData.naturalHeight);\r\n                canvasData.left -= (width - canvasData.width) / 2;\r\n                canvasData.top -= (height - canvasData.height) / 2;\r\n                canvasData.width = width;\r\n                canvasData.height = height;\r\n                canvasData.aspectRatio = naturalWidth / naturalHeight;\r\n                canvasData.naturalWidth = naturalWidth;\r\n                canvasData.naturalHeight = naturalHeight;\r\n                this.limitCanvas(true, false);\r\n            }\r\n            if (canvasData.width > canvasData.maxWidth || canvasData.width < canvasData.minWidth) {\r\n                canvasData.left = canvasData.oldLeft;\r\n            }\r\n            if (canvasData.height > canvasData.maxHeight || canvasData.height < canvasData.minHeight) {\r\n                canvasData.top = canvasData.oldTop;\r\n            }\r\n            canvasData.width = Math.min(Math.max(canvasData.width, canvasData.minWidth), canvasData.maxWidth);\r\n            canvasData.height = Math.min(Math.max(canvasData.height, canvasData.minHeight), canvasData.maxHeight);\r\n            this.limitCanvas(false, true);\r\n            canvasData.left = Math.min(Math.max(canvasData.left, canvasData.minLeft), canvasData.maxLeft);\r\n            canvasData.top = Math.min(Math.max(canvasData.top, canvasData.minTop), canvasData.maxTop);\r\n            canvasData.oldLeft = canvasData.left;\r\n            canvasData.oldTop = canvasData.top;\r\n            setStyle(this.canvas, assign({\r\n                                             width: canvasData.width,\r\n                                             height: canvasData.height\r\n                                         }, getTransforms({\r\n                                                              translateX: canvasData.left,\r\n                                                              translateY: canvasData.top\r\n                                                          })));\r\n            this.renderImage(changed);\r\n            if (this.cropped && this.limited) {\r\n                this.limitCropBox(true, true);\r\n            }\r\n        },\r\n        renderImage: function renderImage(changed) {\r\n            var canvasData = this.canvasData,\r\n                    imageData = this.imageData;\r\n            var width = imageData.naturalWidth * (canvasData.width / canvasData.naturalWidth);\r\n            var height = imageData.naturalHeight * (canvasData.height / canvasData.naturalHeight);\r\n            assign(imageData, {\r\n                width: width,\r\n                height: height,\r\n                left: (canvasData.width - width) / 2,\r\n                top: (canvasData.height - height) / 2\r\n            });\r\n            setStyle(this.image, assign({\r\n                                            width: imageData.width,\r\n                                            height: imageData.height\r\n                                        }, getTransforms(assign({\r\n                                                                    translateX: imageData.left,\r\n                                                                    translateY: imageData.top\r\n                                                                }, imageData))));\r\n            if (changed) {\r\n                this.output();\r\n            }\r\n        },\r\n        initCropBox: function initCropBox() {\r\n            var options = this.options,\r\n                    canvasData = this.canvasData;\r\n            var aspectRatio = options.aspectRatio || options.initialAspectRatio;\r\n            var autoCropArea = Number(options.autoCropArea) || 0.8;\r\n            var cropBoxData = {\r\n                width: canvasData.width,\r\n                height: canvasData.height\r\n            };\r\n            if (aspectRatio) {\r\n                if (canvasData.height * aspectRatio > canvasData.width) {\r\n                    cropBoxData.height = cropBoxData.width / aspectRatio;\r\n                } else {\r\n                    cropBoxData.width = cropBoxData.height * aspectRatio;\r\n                }\r\n            }\r\n            this.cropBoxData = cropBoxData;\r\n            this.limitCropBox(true, true);\r\n\r\n            // Initialize auto crop area\r\n            cropBoxData.width = Math.min(Math.max(cropBoxData.width, cropBoxData.minWidth), cropBoxData.maxWidth);\r\n            cropBoxData.height = Math.min(Math.max(cropBoxData.height, cropBoxData.minHeight), cropBoxData.maxHeight);\r\n\r\n            // The width/height of auto crop area must large than \"minWidth/Height\"\r\n            cropBoxData.width = Math.max(cropBoxData.minWidth, cropBoxData.width * autoCropArea);\r\n            cropBoxData.height = Math.max(cropBoxData.minHeight, cropBoxData.height * autoCropArea);\r\n            cropBoxData.left = canvasData.left + (canvasData.width - cropBoxData.width) / 2;\r\n            cropBoxData.top = canvasData.top + (canvasData.height - cropBoxData.height) / 2;\r\n            cropBoxData.oldLeft = cropBoxData.left;\r\n            cropBoxData.oldTop = cropBoxData.top;\r\n            this.initialCropBoxData = assign({}, cropBoxData);\r\n        },\r\n        limitCropBox: function limitCropBox(sizeLimited, positionLimited) {\r\n            var options = this.options,\r\n                    containerData = this.containerData,\r\n                    canvasData = this.canvasData,\r\n                    cropBoxData = this.cropBoxData,\r\n                    limited = this.limited;\r\n            var aspectRatio = options.aspectRatio;\r\n            if (sizeLimited) {\r\n                var minCropBoxWidth = Number(options.minCropBoxWidth) || 0;\r\n                var minCropBoxHeight = Number(options.minCropBoxHeight) || 0;\r\n                var maxCropBoxWidth = limited ? Math.min(containerData.width, canvasData.width, canvasData.width + canvasData.left, containerData.width - canvasData.left) : containerData.width;\r\n                var maxCropBoxHeight = limited ? Math.min(containerData.height, canvasData.height, canvasData.height + canvasData.top, containerData.height - canvasData.top) : containerData.height;\r\n\r\n                // The min/maxCropBoxWidth/Height must be less than container's width/height\r\n                minCropBoxWidth = Math.min(minCropBoxWidth, containerData.width);\r\n                minCropBoxHeight = Math.min(minCropBoxHeight, containerData.height);\r\n                if (aspectRatio) {\r\n                    if (minCropBoxWidth && minCropBoxHeight) {\r\n                        if (minCropBoxHeight * aspectRatio > minCropBoxWidth) {\r\n                            minCropBoxHeight = minCropBoxWidth / aspectRatio;\r\n                        } else {\r\n                            minCropBoxWidth = minCropBoxHeight * aspectRatio;\r\n                        }\r\n                    } else if (minCropBoxWidth) {\r\n                        minCropBoxHeight = minCropBoxWidth / aspectRatio;\r\n                    } else if (minCropBoxHeight) {\r\n                        minCropBoxWidth = minCropBoxHeight * aspectRatio;\r\n                    }\r\n                    if (maxCropBoxHeight * aspectRatio > maxCropBoxWidth) {\r\n                        maxCropBoxHeight = maxCropBoxWidth / aspectRatio;\r\n                    } else {\r\n                        maxCropBoxWidth = maxCropBoxHeight * aspectRatio;\r\n                    }\r\n                }\r\n\r\n                // The minWidth/Height must be less than maxWidth/Height\r\n                cropBoxData.minWidth = Math.min(minCropBoxWidth, maxCropBoxWidth);\r\n                cropBoxData.minHeight = Math.min(minCropBoxHeight, maxCropBoxHeight);\r\n                cropBoxData.maxWidth = maxCropBoxWidth;\r\n                cropBoxData.maxHeight = maxCropBoxHeight;\r\n            }\r\n            if (positionLimited) {\r\n                if (limited) {\r\n                    cropBoxData.minLeft = Math.max(0, canvasData.left);\r\n                    cropBoxData.minTop = Math.max(0, canvasData.top);\r\n                    cropBoxData.maxLeft = Math.min(containerData.width, canvasData.left + canvasData.width) - cropBoxData.width;\r\n                    cropBoxData.maxTop = Math.min(containerData.height, canvasData.top + canvasData.height) - cropBoxData.height;\r\n                } else {\r\n                    cropBoxData.minLeft = 0;\r\n                    cropBoxData.minTop = 0;\r\n                    cropBoxData.maxLeft = containerData.width - cropBoxData.width;\r\n                    cropBoxData.maxTop = containerData.height - cropBoxData.height;\r\n                }\r\n            }\r\n        },\r\n        renderCropBox: function renderCropBox() {\r\n            var options = this.options,\r\n                    containerData = this.containerData,\r\n                    cropBoxData = this.cropBoxData;\r\n            if (cropBoxData.width > cropBoxData.maxWidth || cropBoxData.width < cropBoxData.minWidth) {\r\n                cropBoxData.left = cropBoxData.oldLeft;\r\n            }\r\n            if (cropBoxData.height > cropBoxData.maxHeight || cropBoxData.height < cropBoxData.minHeight) {\r\n                cropBoxData.top = cropBoxData.oldTop;\r\n            }\r\n            cropBoxData.width = Math.min(Math.max(cropBoxData.width, cropBoxData.minWidth), cropBoxData.maxWidth);\r\n            cropBoxData.height = Math.min(Math.max(cropBoxData.height, cropBoxData.minHeight), cropBoxData.maxHeight);\r\n            this.limitCropBox(false, true);\r\n            cropBoxData.left = Math.min(Math.max(cropBoxData.left, cropBoxData.minLeft), cropBoxData.maxLeft);\r\n            cropBoxData.top = Math.min(Math.max(cropBoxData.top, cropBoxData.minTop), cropBoxData.maxTop);\r\n            cropBoxData.oldLeft = cropBoxData.left;\r\n            cropBoxData.oldTop = cropBoxData.top;\r\n            if (options.movable && options.cropBoxMovable) {\r\n                // Turn to move the canvas when the crop box is equal to the container\r\n                setData(this.face, DATA_ACTION, cropBoxData.width >= containerData.width && cropBoxData.height >= containerData.height ? ACTION_MOVE : ACTION_ALL);\r\n            }\r\n            setStyle(this.cropBox, assign({\r\n                                              width: cropBoxData.width,\r\n                                              height: cropBoxData.height\r\n                                          }, getTransforms({\r\n                                                               translateX: cropBoxData.left,\r\n                                                               translateY: cropBoxData.top\r\n                                                           })));\r\n            if (this.cropped && this.limited) {\r\n                this.limitCanvas(true, true);\r\n            }\r\n            if (!this.disabled) {\r\n                this.output();\r\n            }\r\n        },\r\n        output: function output() {\r\n            this.preview();\r\n            dispatchEvent(this.element, EVENT_CROP, this.getData());\r\n        }\r\n    };\r\n\r\n    var preview = {\r\n        initPreview: function initPreview() {\r\n            var element = this.element,\r\n                    crossOrigin = this.crossOrigin;\r\n            var preview = this.options.preview;\r\n            var url = crossOrigin ? this.crossOriginUrl : this.url;\r\n            var alt = element.alt || 'The image to preview';\r\n            var image = document.createElement('img');\r\n            if (crossOrigin) {\r\n                image.crossOrigin = crossOrigin;\r\n            }\r\n            image.src = url;\r\n            image.alt = alt;\r\n            this.viewBox.appendChild(image);\r\n            this.viewBoxImage = image;\r\n            if (!preview) {\r\n                return;\r\n            }\r\n            var previews = preview;\r\n            if (typeof preview === 'string') {\r\n                previews = element.ownerDocument.querySelectorAll(preview);\r\n            } else if (preview.querySelector) {\r\n                previews = [preview];\r\n            }\r\n            this.previews = previews;\r\n            forEach(previews, function(el) {\r\n                var img = document.createElement('img');\r\n\r\n                // Save the original size for recover\r\n                setData(el, DATA_PREVIEW, {\r\n                    width: el.offsetWidth,\r\n                    height: el.offsetHeight,\r\n                    html: el.innerHTML\r\n                });\r\n                if (crossOrigin) {\r\n                    img.crossOrigin = crossOrigin;\r\n                }\r\n                img.src = url;\r\n                img.alt = alt;\r\n\r\n                /**\r\n                 * Override img element styles\r\n                 * Add `display:block` to avoid margin top issue\r\n                 * Add `height:auto` to override `height` attribute on IE8\r\n                 * (Occur only when margin-top <= -height)\r\n                 */\r\n                img.style.cssText = 'display:block;' + 'width:100%;' + 'height:auto;' + 'min-width:0!important;' + 'min-height:0!important;' + 'max-width:none!important;' + 'max-height:none!important;' + 'image-orientation:0deg!important;\"';\r\n                el.innerHTML = '';\r\n                el.appendChild(img);\r\n            });\r\n        },\r\n        resetPreview: function resetPreview() {\r\n            forEach(this.previews, function(element) {\r\n                var data = getData(element, DATA_PREVIEW);\r\n                setStyle(element, {\r\n                    width: data.width,\r\n                    height: data.height\r\n                });\r\n                element.innerHTML = data.html;\r\n                removeData(element, DATA_PREVIEW);\r\n            });\r\n        },\r\n        preview: function preview() {\r\n            var imageData = this.imageData,\r\n                    canvasData = this.canvasData,\r\n                    cropBoxData = this.cropBoxData;\r\n            var cropBoxWidth = cropBoxData.width,\r\n                    cropBoxHeight = cropBoxData.height;\r\n            var width = imageData.width,\r\n                    height = imageData.height;\r\n            var left = cropBoxData.left - canvasData.left - imageData.left;\r\n            var top = cropBoxData.top - canvasData.top - imageData.top;\r\n            if (!this.cropped || this.disabled) {\r\n                return;\r\n            }\r\n            setStyle(this.viewBoxImage, assign({\r\n                                                   width: width,\r\n                                                   height: height\r\n                                               }, getTransforms(assign({\r\n                                                                           translateX: -left,\r\n                                                                           translateY: -top\r\n                                                                       }, imageData))));\r\n            forEach(this.previews, function(element) {\r\n                var data = getData(element, DATA_PREVIEW);\r\n                var originalWidth = data.width;\r\n                var originalHeight = data.height;\r\n                var newWidth = originalWidth;\r\n                var newHeight = originalHeight;\r\n                var ratio = 1;\r\n                if (cropBoxWidth) {\r\n                    ratio = originalWidth / cropBoxWidth;\r\n                    newHeight = cropBoxHeight * ratio;\r\n                }\r\n                if (cropBoxHeight && newHeight > originalHeight) {\r\n                    ratio = originalHeight / cropBoxHeight;\r\n                    newWidth = cropBoxWidth * ratio;\r\n                    newHeight = originalHeight;\r\n                }\r\n                setStyle(element, {\r\n                    width: newWidth,\r\n                    height: newHeight\r\n                });\r\n                setStyle(element.getElementsByTagName('img')[0], assign({\r\n                                                                            width: width * ratio,\r\n                                                                            height: height * ratio\r\n                                                                        }, getTransforms(assign({\r\n                                                                                                    translateX: -left * ratio,\r\n                                                                                                    translateY: -top * ratio\r\n                                                                                                }, imageData))));\r\n            });\r\n        }\r\n    };\r\n\r\n    var events = {\r\n        bind: function bind() {\r\n            var element = this.element,\r\n                    options = this.options,\r\n                    cropper = this.cropper;\r\n            if (isFunction(options.cropstart)) {\r\n                addListener(element, EVENT_CROP_START, options.cropstart);\r\n            }\r\n            if (isFunction(options.cropmove)) {\r\n                addListener(element, EVENT_CROP_MOVE, options.cropmove);\r\n            }\r\n            if (isFunction(options.cropend)) {\r\n                addListener(element, EVENT_CROP_END, options.cropend);\r\n            }\r\n            if (isFunction(options.crop)) {\r\n                addListener(element, EVENT_CROP, options.crop);\r\n            }\r\n            if (isFunction(options.zoom)) {\r\n                addListener(element, EVENT_ZOOM, options.zoom);\r\n            }\r\n            addListener(cropper, EVENT_POINTER_DOWN, this.onCropStart = this.cropStart.bind(this));\r\n            if (options.zoomable && options.zoomOnWheel) {\r\n                addListener(cropper, EVENT_WHEEL, this.onWheel = this.wheel.bind(this), {\r\n                    passive: false,\r\n                    capture: true\r\n                });\r\n            }\r\n            if (options.toggleDragModeOnDblclick) {\r\n                addListener(cropper, EVENT_DBLCLICK, this.onDblclick = this.dblclick.bind(this));\r\n            }\r\n            addListener(element.ownerDocument, EVENT_POINTER_MOVE, this.onCropMove = this.cropMove.bind(this));\r\n            addListener(element.ownerDocument, EVENT_POINTER_UP, this.onCropEnd = this.cropEnd.bind(this));\r\n            if (options.responsive) {\r\n                addListener(window, EVENT_RESIZE, this.onResize = this.resize.bind(this));\r\n            }\r\n        },\r\n        unbind: function unbind() {\r\n            var element = this.element,\r\n                    options = this.options,\r\n                    cropper = this.cropper;\r\n            if (isFunction(options.cropstart)) {\r\n                removeListener(element, EVENT_CROP_START, options.cropstart);\r\n            }\r\n            if (isFunction(options.cropmove)) {\r\n                removeListener(element, EVENT_CROP_MOVE, options.cropmove);\r\n            }\r\n            if (isFunction(options.cropend)) {\r\n                removeListener(element, EVENT_CROP_END, options.cropend);\r\n            }\r\n            if (isFunction(options.crop)) {\r\n                removeListener(element, EVENT_CROP, options.crop);\r\n            }\r\n            if (isFunction(options.zoom)) {\r\n                removeListener(element, EVENT_ZOOM, options.zoom);\r\n            }\r\n            removeListener(cropper, EVENT_POINTER_DOWN, this.onCropStart);\r\n            if (options.zoomable && options.zoomOnWheel) {\r\n                removeListener(cropper, EVENT_WHEEL, this.onWheel, {\r\n                    passive: false,\r\n                    capture: true\r\n                });\r\n            }\r\n            if (options.toggleDragModeOnDblclick) {\r\n                removeListener(cropper, EVENT_DBLCLICK, this.onDblclick);\r\n            }\r\n            removeListener(element.ownerDocument, EVENT_POINTER_MOVE, this.onCropMove);\r\n            removeListener(element.ownerDocument, EVENT_POINTER_UP, this.onCropEnd);\r\n            if (options.responsive) {\r\n                removeListener(window, EVENT_RESIZE, this.onResize);\r\n            }\r\n        }\r\n    };\r\n\r\n    var handlers = {\r\n        resize: function resize() {\r\n            if (this.disabled) {\r\n                return;\r\n            }\r\n            var options = this.options,\r\n                    container = this.container,\r\n                    containerData = this.containerData;\r\n            var ratioX = container.offsetWidth / containerData.width;\r\n            var ratioY = container.offsetHeight / containerData.height;\r\n            var ratio = Math.abs(ratioX - 1) > Math.abs(ratioY - 1) ? ratioX : ratioY;\r\n\r\n            // Resize when width changed or height changed\r\n            if (ratio !== 1) {\r\n                var canvasData;\r\n                var cropBoxData;\r\n                if (options.restore) {\r\n                    canvasData = this.getCanvasData();\r\n                    cropBoxData = this.getCropBoxData();\r\n                }\r\n                this.render();\r\n                if (options.restore) {\r\n                    this.setCanvasData(forEach(canvasData, function(n, i) {\r\n                        canvasData[i] = n * ratio;\r\n                    }));\r\n                    this.setCropBoxData(forEach(cropBoxData, function(n, i) {\r\n                        cropBoxData[i] = n * ratio;\r\n                    }));\r\n                }\r\n            }\r\n        },\r\n        dblclick: function dblclick() {\r\n            if (this.disabled || this.options.dragMode === DRAG_MODE_NONE) {\r\n                return;\r\n            }\r\n            this.setDragMode(hasClass(this.dragBox, CLASS_CROP) ? DRAG_MODE_MOVE : DRAG_MODE_CROP);\r\n        },\r\n        wheel: function wheel(event) {\r\n            var _this = this;\r\n            var ratio = Number(this.options.wheelZoomRatio) || 0.1;\r\n            var delta = 1;\r\n            if (this.disabled) {\r\n                return;\r\n            }\r\n            event.preventDefault();\r\n\r\n            // Limit wheel speed to prevent zoom too fast (#21)\r\n            if (this.wheeling) {\r\n                return;\r\n            }\r\n            this.wheeling = true;\r\n            setTimeout(function() {\r\n                _this.wheeling = false;\r\n            }, 50);\r\n            if (event.deltaY) {\r\n                delta = event.deltaY > 0 ? 1 : -1;\r\n            } else if (event.wheelDelta) {\r\n                delta = -event.wheelDelta / 120;\r\n            } else if (event.detail) {\r\n                delta = event.detail > 0 ? 1 : -1;\r\n            }\r\n            this.zoom(-delta * ratio, event);\r\n        },\r\n        cropStart: function cropStart(event) {\r\n            var buttons = event.buttons,\r\n                    button = event.button;\r\n            if (this.disabled\r\n\r\n                // Handle mouse event and pointer event and ignore touch event\r\n                || (event.type === 'mousedown' || event.type === 'pointerdown' && event.pointerType === 'mouse') && (\r\n                        // No primary button (Usually the left button)\r\n                isNumber(buttons) && buttons !== 1 || isNumber(button) && button !== 0\r\n\r\n                // Open context menu\r\n                || event.ctrlKey)) {\r\n                return;\r\n            }\r\n            var options = this.options,\r\n                    pointers = this.pointers;\r\n            var action;\r\n            if (event.changedTouches) {\r\n                // Handle touch event\r\n                forEach(event.changedTouches, function(touch) {\r\n                    pointers[touch.identifier] = getPointer(touch);\r\n                });\r\n            } else {\r\n                // Handle mouse event and pointer event\r\n                pointers[event.pointerId || 0] = getPointer(event);\r\n            }\r\n            if (Object.keys(pointers).length > 1 && options.zoomable && options.zoomOnTouch) {\r\n                action = ACTION_ZOOM;\r\n            } else {\r\n                action = getData(event.target, DATA_ACTION);\r\n            }\r\n            if (!REGEXP_ACTIONS.test(action)) {\r\n                return;\r\n            }\r\n            if (dispatchEvent(this.element, EVENT_CROP_START, {\r\n                originalEvent: event,\r\n                action: action\r\n            }) === false) {\r\n                return;\r\n            }\r\n\r\n            // This line is required for preventing page zooming in iOS browsers\r\n            event.preventDefault();\r\n            this.action = action;\r\n            this.cropping = false;\r\n            if (action === ACTION_CROP) {\r\n                this.cropping = true;\r\n                addClass(this.dragBox, CLASS_MODAL);\r\n            }\r\n        },\r\n        cropMove: function cropMove(event) {\r\n            var action = this.action;\r\n            if (this.disabled || !action) {\r\n                return;\r\n            }\r\n            var pointers = this.pointers;\r\n            event.preventDefault();\r\n            if (dispatchEvent(this.element, EVENT_CROP_MOVE, {\r\n                originalEvent: event,\r\n                action: action\r\n            }) === false) {\r\n                return;\r\n            }\r\n            if (event.changedTouches) {\r\n                forEach(event.changedTouches, function(touch) {\r\n                    // The first parameter should not be undefined (#432)\r\n                    assign(pointers[touch.identifier] || {}, getPointer(touch, true));\r\n                });\r\n            } else {\r\n                assign(pointers[event.pointerId || 0] || {}, getPointer(event, true));\r\n            }\r\n            this.change(event);\r\n        },\r\n        cropEnd: function cropEnd(event) {\r\n            if (this.disabled) {\r\n                return;\r\n            }\r\n            var action = this.action,\r\n                    pointers = this.pointers;\r\n            if (event.changedTouches) {\r\n                forEach(event.changedTouches, function(touch) {\r\n                    delete pointers[touch.identifier];\r\n                });\r\n            } else {\r\n                delete pointers[event.pointerId || 0];\r\n            }\r\n            if (!action) {\r\n                return;\r\n            }\r\n            event.preventDefault();\r\n            if (!Object.keys(pointers).length) {\r\n                this.action = '';\r\n            }\r\n            if (this.cropping) {\r\n                this.cropping = false;\r\n                toggleClass(this.dragBox, CLASS_MODAL, this.cropped && this.options.modal);\r\n            }\r\n            dispatchEvent(this.element, EVENT_CROP_END, {\r\n                originalEvent: event,\r\n                action: action\r\n            });\r\n        }\r\n    };\r\n\r\n    var change = {\r\n        change: function change(event) {\r\n            var options = this.options,\r\n                    canvasData = this.canvasData,\r\n                    containerData = this.containerData,\r\n                    cropBoxData = this.cropBoxData,\r\n                    pointers = this.pointers;\r\n            var action = this.action;\r\n            var aspectRatio = options.aspectRatio;\r\n            var left = cropBoxData.left,\r\n                    top = cropBoxData.top,\r\n                    width = cropBoxData.width,\r\n                    height = cropBoxData.height;\r\n            var right = left + width;\r\n            var bottom = top + height;\r\n            var minLeft = 0;\r\n            var minTop = 0;\r\n            var maxWidth = containerData.width;\r\n            var maxHeight = containerData.height;\r\n            var renderable = true;\r\n            var offset;\r\n\r\n            // Locking aspect ratio in \"free mode\" by holding shift key\r\n            if (!aspectRatio && event.shiftKey) {\r\n                aspectRatio = width && height ? width / height : 1;\r\n            }\r\n            if (this.limited) {\r\n                minLeft = cropBoxData.minLeft;\r\n                minTop = cropBoxData.minTop;\r\n                maxWidth = minLeft + Math.min(containerData.width, canvasData.width, canvasData.left + canvasData.width);\r\n                maxHeight = minTop + Math.min(containerData.height, canvasData.height, canvasData.top + canvasData.height);\r\n            }\r\n            var pointer = pointers[Object.keys(pointers)[0]];\r\n            var range = {\r\n                x: pointer.endX - pointer.startX,\r\n                y: pointer.endY - pointer.startY\r\n            };\r\n            var check = function check(side) {\r\n                switch (side) {\r\n                    case ACTION_EAST:\r\n                        if (right + range.x > maxWidth) {\r\n                            range.x = maxWidth - right;\r\n                        }\r\n                        break;\r\n                    case ACTION_WEST:\r\n                        if (left + range.x < minLeft) {\r\n                            range.x = minLeft - left;\r\n                        }\r\n                        break;\r\n                    case ACTION_NORTH:\r\n                        if (top + range.y < minTop) {\r\n                            range.y = minTop - top;\r\n                        }\r\n                        break;\r\n                    case ACTION_SOUTH:\r\n                        if (bottom + range.y > maxHeight) {\r\n                            range.y = maxHeight - bottom;\r\n                        }\r\n                        break;\r\n                }\r\n            };\r\n            switch (action) {\r\n                    // Move crop box\r\n                case ACTION_ALL:\r\n                    left += range.x;\r\n                    top += range.y;\r\n                    break;\r\n\r\n                    // Resize crop box\r\n                case ACTION_EAST:\r\n                    if (range.x >= 0 && (right >= maxWidth || aspectRatio && (top <= minTop || bottom >= maxHeight))) {\r\n                        renderable = false;\r\n                        break;\r\n                    }\r\n                    check(ACTION_EAST);\r\n                    width += range.x;\r\n                    if (width < 0) {\r\n                        action = ACTION_WEST;\r\n                        width = -width;\r\n                        left -= width;\r\n                    }\r\n                    if (aspectRatio) {\r\n                        height = width / aspectRatio;\r\n                        top += (cropBoxData.height - height) / 2;\r\n                    }\r\n                    break;\r\n                case ACTION_NORTH:\r\n                    if (range.y <= 0 && (top <= minTop || aspectRatio && (left <= minLeft || right >= maxWidth))) {\r\n                        renderable = false;\r\n                        break;\r\n                    }\r\n                    check(ACTION_NORTH);\r\n                    height -= range.y;\r\n                    top += range.y;\r\n                    if (height < 0) {\r\n                        action = ACTION_SOUTH;\r\n                        height = -height;\r\n                        top -= height;\r\n                    }\r\n                    if (aspectRatio) {\r\n                        width = height * aspectRatio;\r\n                        left += (cropBoxData.width - width) / 2;\r\n                    }\r\n                    break;\r\n                case ACTION_WEST:\r\n                    if (range.x <= 0 && (left <= minLeft || aspectRatio && (top <= minTop || bottom >= maxHeight))) {\r\n                        renderable = false;\r\n                        break;\r\n                    }\r\n                    check(ACTION_WEST);\r\n                    width -= range.x;\r\n                    left += range.x;\r\n                    if (width < 0) {\r\n                        action = ACTION_EAST;\r\n                        width = -width;\r\n                        left -= width;\r\n                    }\r\n                    if (aspectRatio) {\r\n                        height = width / aspectRatio;\r\n                        top += (cropBoxData.height - height) / 2;\r\n                    }\r\n                    break;\r\n                case ACTION_SOUTH:\r\n                    if (range.y >= 0 && (bottom >= maxHeight || aspectRatio && (left <= minLeft || right >= maxWidth))) {\r\n                        renderable = false;\r\n                        break;\r\n                    }\r\n                    check(ACTION_SOUTH);\r\n                    height += range.y;\r\n                    if (height < 0) {\r\n                        action = ACTION_NORTH;\r\n                        height = -height;\r\n                        top -= height;\r\n                    }\r\n                    if (aspectRatio) {\r\n                        width = height * aspectRatio;\r\n                        left += (cropBoxData.width - width) / 2;\r\n                    }\r\n                    break;\r\n                case ACTION_NORTH_EAST:\r\n                    if (aspectRatio) {\r\n                        if (range.y <= 0 && (top <= minTop || right >= maxWidth)) {\r\n                            renderable = false;\r\n                            break;\r\n                        }\r\n                        check(ACTION_NORTH);\r\n                        height -= range.y;\r\n                        top += range.y;\r\n                        width = height * aspectRatio;\r\n                    } else {\r\n                        check(ACTION_NORTH);\r\n                        check(ACTION_EAST);\r\n                        if (range.x >= 0) {\r\n                            if (right < maxWidth) {\r\n                                width += range.x;\r\n                            } else if (range.y <= 0 && top <= minTop) {\r\n                                renderable = false;\r\n                            }\r\n                        } else {\r\n                            width += range.x;\r\n                        }\r\n                        if (range.y <= 0) {\r\n                            if (top > minTop) {\r\n                                height -= range.y;\r\n                                top += range.y;\r\n                            }\r\n                        } else {\r\n                            height -= range.y;\r\n                            top += range.y;\r\n                        }\r\n                    }\r\n                    if (width < 0 && height < 0) {\r\n                        action = ACTION_SOUTH_WEST;\r\n                        height = -height;\r\n                        width = -width;\r\n                        top -= height;\r\n                        left -= width;\r\n                    } else if (width < 0) {\r\n                        action = ACTION_NORTH_WEST;\r\n                        width = -width;\r\n                        left -= width;\r\n                    } else if (height < 0) {\r\n                        action = ACTION_SOUTH_EAST;\r\n                        height = -height;\r\n                        top -= height;\r\n                    }\r\n                    break;\r\n                case ACTION_NORTH_WEST:\r\n                    if (aspectRatio) {\r\n                        if (range.y <= 0 && (top <= minTop || left <= minLeft)) {\r\n                            renderable = false;\r\n                            break;\r\n                        }\r\n                        check(ACTION_NORTH);\r\n                        height -= range.y;\r\n                        top += range.y;\r\n                        width = height * aspectRatio;\r\n                        left += cropBoxData.width - width;\r\n                    } else {\r\n                        check(ACTION_NORTH);\r\n                        check(ACTION_WEST);\r\n                        if (range.x <= 0) {\r\n                            if (left > minLeft) {\r\n                                width -= range.x;\r\n                                left += range.x;\r\n                            } else if (range.y <= 0 && top <= minTop) {\r\n                                renderable = false;\r\n                            }\r\n                        } else {\r\n                            width -= range.x;\r\n                            left += range.x;\r\n                        }\r\n                        if (range.y <= 0) {\r\n                            if (top > minTop) {\r\n                                height -= range.y;\r\n                                top += range.y;\r\n                            }\r\n                        } else {\r\n                            height -= range.y;\r\n                            top += range.y;\r\n                        }\r\n                    }\r\n                    if (width < 0 && height < 0) {\r\n                        action = ACTION_SOUTH_EAST;\r\n                        height = -height;\r\n                        width = -width;\r\n                        top -= height;\r\n                        left -= width;\r\n                    } else if (width < 0) {\r\n                        action = ACTION_NORTH_EAST;\r\n                        width = -width;\r\n                        left -= width;\r\n                    } else if (height < 0) {\r\n                        action = ACTION_SOUTH_WEST;\r\n                        height = -height;\r\n                        top -= height;\r\n                    }\r\n                    break;\r\n                case ACTION_SOUTH_WEST:\r\n                    if (aspectRatio) {\r\n                        if (range.x <= 0 && (left <= minLeft || bottom >= maxHeight)) {\r\n                            renderable = false;\r\n                            break;\r\n                        }\r\n                        check(ACTION_WEST);\r\n                        width -= range.x;\r\n                        left += range.x;\r\n                        height = width / aspectRatio;\r\n                    } else {\r\n                        check(ACTION_SOUTH);\r\n                        check(ACTION_WEST);\r\n                        if (range.x <= 0) {\r\n                            if (left > minLeft) {\r\n                                width -= range.x;\r\n                                left += range.x;\r\n                            } else if (range.y >= 0 && bottom >= maxHeight) {\r\n                                renderable = false;\r\n                            }\r\n                        } else {\r\n                            width -= range.x;\r\n                            left += range.x;\r\n                        }\r\n                        if (range.y >= 0) {\r\n                            if (bottom < maxHeight) {\r\n                                height += range.y;\r\n                            }\r\n                        } else {\r\n                            height += range.y;\r\n                        }\r\n                    }\r\n                    if (width < 0 && height < 0) {\r\n                        action = ACTION_NORTH_EAST;\r\n                        height = -height;\r\n                        width = -width;\r\n                        top -= height;\r\n                        left -= width;\r\n                    } else if (width < 0) {\r\n                        action = ACTION_SOUTH_EAST;\r\n                        width = -width;\r\n                        left -= width;\r\n                    } else if (height < 0) {\r\n                        action = ACTION_NORTH_WEST;\r\n                        height = -height;\r\n                        top -= height;\r\n                    }\r\n                    break;\r\n                case ACTION_SOUTH_EAST:\r\n                    if (aspectRatio) {\r\n                        if (range.x >= 0 && (right >= maxWidth || bottom >= maxHeight)) {\r\n                            renderable = false;\r\n                            break;\r\n                        }\r\n                        check(ACTION_EAST);\r\n                        width += range.x;\r\n                        height = width / aspectRatio;\r\n                    } else {\r\n                        check(ACTION_SOUTH);\r\n                        check(ACTION_EAST);\r\n                        if (range.x >= 0) {\r\n                            if (right < maxWidth) {\r\n                                width += range.x;\r\n                            } else if (range.y >= 0 && bottom >= maxHeight) {\r\n                                renderable = false;\r\n                            }\r\n                        } else {\r\n                            width += range.x;\r\n                        }\r\n                        if (range.y >= 0) {\r\n                            if (bottom < maxHeight) {\r\n                                height += range.y;\r\n                            }\r\n                        } else {\r\n                            height += range.y;\r\n                        }\r\n                    }\r\n                    if (width < 0 && height < 0) {\r\n                        action = ACTION_NORTH_WEST;\r\n                        height = -height;\r\n                        width = -width;\r\n                        top -= height;\r\n                        left -= width;\r\n                    } else if (width < 0) {\r\n                        action = ACTION_SOUTH_WEST;\r\n                        width = -width;\r\n                        left -= width;\r\n                    } else if (height < 0) {\r\n                        action = ACTION_NORTH_EAST;\r\n                        height = -height;\r\n                        top -= height;\r\n                    }\r\n                    break;\r\n\r\n                    // Move canvas\r\n                case ACTION_MOVE:\r\n                    this.move(range.x, range.y);\r\n                    renderable = false;\r\n                    break;\r\n\r\n                    // Zoom canvas\r\n                case ACTION_ZOOM:\r\n                    this.zoom(getMaxZoomRatio(pointers), event);\r\n                    renderable = false;\r\n                    break;\r\n\r\n                    // Create crop box\r\n                case ACTION_CROP:\r\n                    if (!range.x || !range.y) {\r\n                        renderable = false;\r\n                        break;\r\n                    }\r\n                    offset = getOffset(this.cropper);\r\n                    left = pointer.startX - offset.left;\r\n                    top = pointer.startY - offset.top;\r\n                    width = cropBoxData.minWidth;\r\n                    height = cropBoxData.minHeight;\r\n                    if (range.x > 0) {\r\n                        action = range.y > 0 ? ACTION_SOUTH_EAST : ACTION_NORTH_EAST;\r\n                    } else if (range.x < 0) {\r\n                        left -= width;\r\n                        action = range.y > 0 ? ACTION_SOUTH_WEST : ACTION_NORTH_WEST;\r\n                    }\r\n                    if (range.y < 0) {\r\n                        top -= height;\r\n                    }\r\n\r\n                    // Show the crop box if is hidden\r\n                    if (!this.cropped) {\r\n                        removeClass(this.cropBox, CLASS_HIDDEN);\r\n                        this.cropped = true;\r\n                        if (this.limited) {\r\n                            this.limitCropBox(true, true);\r\n                        }\r\n                    }\r\n                    break;\r\n            }\r\n            if (renderable) {\r\n                cropBoxData.width = width;\r\n                cropBoxData.height = height;\r\n                cropBoxData.left = left;\r\n                cropBoxData.top = top;\r\n                this.action = action;\r\n                this.renderCropBox();\r\n            }\r\n\r\n            // Override\r\n            forEach(pointers, function(p) {\r\n                p.startX = p.endX;\r\n                p.startY = p.endY;\r\n            });\r\n        }\r\n    };\r\n\r\n    var methods = {\r\n        // Show the crop box manually\r\n        crop: function crop() {\r\n            if (this.ready && !this.cropped && !this.disabled) {\r\n                this.cropped = true;\r\n                this.limitCropBox(true, true);\r\n                if (this.options.modal) {\r\n                    addClass(this.dragBox, CLASS_MODAL);\r\n                }\r\n                removeClass(this.cropBox, CLASS_HIDDEN);\r\n                this.setCropBoxData(this.initialCropBoxData);\r\n            }\r\n            return this;\r\n        },\r\n        // Reset the image and crop box to their initial states\r\n        reset: function reset() {\r\n            if (this.ready && !this.disabled) {\r\n                this.imageData = assign({}, this.initialImageData);\r\n                this.canvasData = assign({}, this.initialCanvasData);\r\n                this.cropBoxData = assign({}, this.initialCropBoxData);\r\n                this.renderCanvas();\r\n                if (this.cropped) {\r\n                    this.renderCropBox();\r\n                }\r\n            }\r\n            return this;\r\n        },\r\n        // Clear the crop box\r\n        clear: function clear() {\r\n            if (this.cropped && !this.disabled) {\r\n                assign(this.cropBoxData, {\r\n                    left: 0,\r\n                    top: 0,\r\n                    width: 0,\r\n                    height: 0\r\n                });\r\n                this.cropped = false;\r\n                this.renderCropBox();\r\n                this.limitCanvas(true, true);\r\n\r\n                // Render canvas after crop box rendered\r\n                this.renderCanvas();\r\n                removeClass(this.dragBox, CLASS_MODAL);\r\n                addClass(this.cropBox, CLASS_HIDDEN);\r\n            }\r\n            return this;\r\n        },\r\n        /**\r\n         * Replace the image's src and rebuild the cropper\r\n         * @param {string} url - The new URL.\r\n         * @param {boolean} [hasSameSize] - Indicate if the new image has the same size as the old one.\r\n         * @returns {Cropper} this\r\n         */\r\n        replace: function replace(url) {\r\n            var hasSameSize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\r\n            if (!this.disabled && url) {\r\n                if (this.isImg) {\r\n                    this.element.src = url;\r\n                }\r\n                if (hasSameSize) {\r\n                    this.url = url;\r\n                    this.image.src = url;\r\n                    if (this.ready) {\r\n                        this.viewBoxImage.src = url;\r\n                        forEach(this.previews, function(element) {\r\n                            element.getElementsByTagName('img')[0].src = url;\r\n                        });\r\n                    }\r\n                } else {\r\n                    if (this.isImg) {\r\n                        this.replaced = true;\r\n                    }\r\n                    this.options.data = null;\r\n                    this.uncreate();\r\n                    this.load(url);\r\n                }\r\n            }\r\n            return this;\r\n        },\r\n        // Enable (unfreeze) the cropper\r\n        enable: function enable() {\r\n            if (this.ready && this.disabled) {\r\n                this.disabled = false;\r\n                removeClass(this.cropper, CLASS_DISABLED);\r\n            }\r\n            return this;\r\n        },\r\n        // Disable (freeze) the cropper\r\n        disable: function disable() {\r\n            if (this.ready && !this.disabled) {\r\n                this.disabled = true;\r\n                addClass(this.cropper, CLASS_DISABLED);\r\n            }\r\n            return this;\r\n        },\r\n        /**\r\n         * Destroy the cropper and remove the instance from the image\r\n         * @returns {Cropper} this\r\n         */\r\n        destroy: function destroy() {\r\n            var element = this.element;\r\n            if (!element[NAMESPACE]) {\r\n                return this;\r\n            }\r\n            element[NAMESPACE] = undefined;\r\n            if (this.isImg && this.replaced) {\r\n                element.src = this.originalUrl;\r\n            }\r\n            this.uncreate();\r\n            return this;\r\n        },\r\n        /**\r\n         * Move the canvas with relative offsets\r\n         * @param {number} offsetX - The relative offset distance on the x-axis.\r\n         * @param {number} [offsetY=offsetX] - The relative offset distance on the y-axis.\r\n         * @returns {Cropper} this\r\n         */\r\n        move: function move(offsetX) {\r\n            var offsetY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : offsetX;\r\n            var _this$canvasData = this.canvasData,\r\n                    left = _this$canvasData.left,\r\n                    top = _this$canvasData.top;\r\n            return this.moveTo(isUndefined(offsetX) ? offsetX : left + Number(offsetX), isUndefined(offsetY) ? offsetY : top + Number(offsetY));\r\n        },\r\n        /**\r\n         * Move the canvas to an absolute point\r\n         * @param {number} x - The x-axis coordinate.\r\n         * @param {number} [y=x] - The y-axis coordinate.\r\n         * @returns {Cropper} this\r\n         */\r\n        moveTo: function moveTo(x) {\r\n            var y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : x;\r\n            var canvasData = this.canvasData;\r\n            var changed = false;\r\n            x = Number(x);\r\n            y = Number(y);\r\n            if (this.ready && !this.disabled && this.options.movable) {\r\n                if (isNumber(x)) {\r\n                    canvasData.left = x;\r\n                    changed = true;\r\n                }\r\n                if (isNumber(y)) {\r\n                    canvasData.top = y;\r\n                    changed = true;\r\n                }\r\n                if (changed) {\r\n                    this.renderCanvas(true);\r\n                }\r\n            }\r\n            return this;\r\n        },\r\n        /**\r\n         * Zoom the canvas with a relative ratio\r\n         * @param {number} ratio - The target ratio.\r\n         * @param {Event} _originalEvent - The original event if any.\r\n         * @returns {Cropper} this\r\n         */\r\n        zoom: function zoom(ratio, _originalEvent) {\r\n            var canvasData = this.canvasData;\r\n            ratio = Number(ratio);\r\n            if (ratio < 0) {\r\n                ratio = 1 / (1 - ratio);\r\n            } else {\r\n                ratio = 1 + ratio;\r\n            }\r\n            return this.zoomTo(canvasData.width * ratio / canvasData.naturalWidth, null, _originalEvent);\r\n        },\r\n        /**\r\n         * Zoom the canvas to an absolute ratio\r\n         * @param {number} ratio - The target ratio.\r\n         * @param {Object} pivot - The zoom pivot point coordinate.\r\n         * @param {Event} _originalEvent - The original event if any.\r\n         * @returns {Cropper} this\r\n         */\r\n        zoomTo: function zoomTo(ratio, pivot, _originalEvent) {\r\n            var options = this.options,\r\n                    canvasData = this.canvasData;\r\n            var width = canvasData.width,\r\n                    height = canvasData.height,\r\n                    naturalWidth = canvasData.naturalWidth,\r\n                    naturalHeight = canvasData.naturalHeight;\r\n            ratio = Number(ratio);\r\n            if (ratio >= 0 && this.ready && !this.disabled && options.zoomable) {\r\n                var newWidth = naturalWidth * ratio;\r\n                var newHeight = naturalHeight * ratio;\r\n                if (dispatchEvent(this.element, EVENT_ZOOM, {\r\n                    ratio: ratio,\r\n                    oldRatio: width / naturalWidth,\r\n                    originalEvent: _originalEvent\r\n                }) === false) {\r\n                    return this;\r\n                }\r\n                if (_originalEvent) {\r\n                    var pointers = this.pointers;\r\n                    var offset = getOffset(this.cropper);\r\n                    var center = pointers && Object.keys(pointers).length ? getPointersCenter(pointers) : {\r\n                        pageX: _originalEvent.pageX,\r\n                        pageY: _originalEvent.pageY\r\n                    };\r\n\r\n                    // Zoom from the triggering point of the event\r\n                    canvasData.left -= (newWidth - width) * ((center.pageX - offset.left - canvasData.left) / width);\r\n                    canvasData.top -= (newHeight - height) * ((center.pageY - offset.top - canvasData.top) / height);\r\n                } else if (isPlainObject(pivot) && isNumber(pivot.x) && isNumber(pivot.y)) {\r\n                    canvasData.left -= (newWidth - width) * ((pivot.x - canvasData.left) / width);\r\n                    canvasData.top -= (newHeight - height) * ((pivot.y - canvasData.top) / height);\r\n                } else {\r\n                    // Zoom from the center of the canvas\r\n                    canvasData.left -= (newWidth - width) / 2;\r\n                    canvasData.top -= (newHeight - height) / 2;\r\n                }\r\n                canvasData.width = newWidth;\r\n                canvasData.height = newHeight;\r\n                this.renderCanvas(true);\r\n            }\r\n            return this;\r\n        },\r\n        /**\r\n         * Rotate the canvas with a relative degree\r\n         * @param {number} degree - The rotate degree.\r\n         * @returns {Cropper} this\r\n         */\r\n        rotate: function rotate(degree) {\r\n            return this.rotateTo((this.imageData.rotate || 0) + Number(degree));\r\n        },\r\n        /**\r\n         * Rotate the canvas to an absolute degree\r\n         * @param {number} degree - The rotate degree.\r\n         * @returns {Cropper} this\r\n         */\r\n        rotateTo: function rotateTo(degree) {\r\n            degree = Number(degree);\r\n            if (isNumber(degree) && this.ready && !this.disabled && this.options.rotatable) {\r\n                this.imageData.rotate = degree % 360;\r\n                this.renderCanvas(true, true);\r\n            }\r\n            return this;\r\n        },\r\n        /**\r\n         * Scale the image on the x-axis.\r\n         * @param {number} scaleX - The scale ratio on the x-axis.\r\n         * @returns {Cropper} this\r\n         */\r\n        scaleX: function scaleX(_scaleX) {\r\n            var scaleY = this.imageData.scaleY;\r\n            return this.scale(_scaleX, isNumber(scaleY) ? scaleY : 1);\r\n        },\r\n        /**\r\n         * Scale the image on the y-axis.\r\n         * @param {number} scaleY - The scale ratio on the y-axis.\r\n         * @returns {Cropper} this\r\n         */\r\n        scaleY: function scaleY(_scaleY) {\r\n            var scaleX = this.imageData.scaleX;\r\n            return this.scale(isNumber(scaleX) ? scaleX : 1, _scaleY);\r\n        },\r\n        /**\r\n         * Scale the image\r\n         * @param {number} scaleX - The scale ratio on the x-axis.\r\n         * @param {number} [scaleY=scaleX] - The scale ratio on the y-axis.\r\n         * @returns {Cropper} this\r\n         */\r\n        scale: function scale(scaleX) {\r\n            var scaleY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : scaleX;\r\n            var imageData = this.imageData;\r\n            var transformed = false;\r\n            scaleX = Number(scaleX);\r\n            scaleY = Number(scaleY);\r\n            if (this.ready && !this.disabled && this.options.scalable) {\r\n                if (isNumber(scaleX)) {\r\n                    imageData.scaleX = scaleX;\r\n                    transformed = true;\r\n                }\r\n                if (isNumber(scaleY)) {\r\n                    imageData.scaleY = scaleY;\r\n                    transformed = true;\r\n                }\r\n                if (transformed) {\r\n                    this.renderCanvas(true, true);\r\n                }\r\n            }\r\n            return this;\r\n        },\r\n        /**\r\n         * Get the cropped area position and size data (base on the original image)\r\n         * @param {boolean} [rounded=false] - Indicate if round the data values or not.\r\n         * @returns {Object} The result cropped data.\r\n         */\r\n        getData: function getData() {\r\n            var rounded = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\r\n            var options = this.options,\r\n                    imageData = this.imageData,\r\n                    canvasData = this.canvasData,\r\n                    cropBoxData = this.cropBoxData;\r\n            var data;\r\n            if (this.ready && this.cropped) {\r\n                data = {\r\n                    x: cropBoxData.left - canvasData.left,\r\n                    y: cropBoxData.top - canvasData.top,\r\n                    width: cropBoxData.width,\r\n                    height: cropBoxData.height\r\n                };\r\n                var ratio = imageData.width / imageData.naturalWidth;\r\n                forEach(data, function(n, i) {\r\n                    data[i] = n / ratio;\r\n                });\r\n                if (rounded) {\r\n                    // In case rounding off leads to extra 1px in right or bottom border\r\n                    // we should round the top-left corner and the dimension (#343).\r\n                    var bottom = Math.round(data.y + data.height);\r\n                    var right = Math.round(data.x + data.width);\r\n                    data.x = Math.round(data.x);\r\n                    data.y = Math.round(data.y);\r\n                    data.width = right - data.x;\r\n                    data.height = bottom - data.y;\r\n                }\r\n            } else {\r\n                data = {\r\n                    x: 0,\r\n                    y: 0,\r\n                    width: 0,\r\n                    height: 0\r\n                };\r\n            }\r\n            if (options.rotatable) {\r\n                data.rotate = imageData.rotate || 0;\r\n            }\r\n            if (options.scalable) {\r\n                data.scaleX = imageData.scaleX || 1;\r\n                data.scaleY = imageData.scaleY || 1;\r\n            }\r\n            return data;\r\n        },\r\n        /**\r\n         * Set the cropped area position and size with new data\r\n         * @param {Object} data - The new data.\r\n         * @returns {Cropper} this\r\n         */\r\n        setData: function setData(data) {\r\n            var options = this.options,\r\n                    imageData = this.imageData,\r\n                    canvasData = this.canvasData;\r\n            var cropBoxData = {};\r\n            if (this.ready && !this.disabled && isPlainObject(data)) {\r\n                var transformed = false;\r\n                if (options.rotatable) {\r\n                    if (isNumber(data.rotate) && data.rotate !== imageData.rotate) {\r\n                        imageData.rotate = data.rotate;\r\n                        transformed = true;\r\n                    }\r\n                }\r\n                if (options.scalable) {\r\n                    if (isNumber(data.scaleX) && data.scaleX !== imageData.scaleX) {\r\n                        imageData.scaleX = data.scaleX;\r\n                        transformed = true;\r\n                    }\r\n                    if (isNumber(data.scaleY) && data.scaleY !== imageData.scaleY) {\r\n                        imageData.scaleY = data.scaleY;\r\n                        transformed = true;\r\n                    }\r\n                }\r\n                if (transformed) {\r\n                    this.renderCanvas(true, true);\r\n                }\r\n                var ratio = imageData.width / imageData.naturalWidth;\r\n                if (isNumber(data.x)) {\r\n                    cropBoxData.left = data.x * ratio + canvasData.left;\r\n                }\r\n                if (isNumber(data.y)) {\r\n                    cropBoxData.top = data.y * ratio + canvasData.top;\r\n                }\r\n                if (isNumber(data.width)) {\r\n                    cropBoxData.width = data.width * ratio;\r\n                }\r\n                if (isNumber(data.height)) {\r\n                    cropBoxData.height = data.height * ratio;\r\n                }\r\n                this.setCropBoxData(cropBoxData);\r\n            }\r\n            return this;\r\n        },\r\n        /**\r\n         * Get the container size data.\r\n         * @returns {Object} The result container data.\r\n         */\r\n        getContainerData: function getContainerData() {\r\n            return this.ready ? assign({}, this.containerData) : {};\r\n        },\r\n        /**\r\n         * Get the image position and size data.\r\n         * @returns {Object} The result image data.\r\n         */\r\n        getImageData: function getImageData() {\r\n            return this.sized ? assign({}, this.imageData) : {};\r\n        },\r\n        /**\r\n         * Get the canvas position and size data.\r\n         * @returns {Object} The result canvas data.\r\n         */\r\n        getCanvasData: function getCanvasData() {\r\n            var canvasData = this.canvasData;\r\n            var data = {};\r\n            if (this.ready) {\r\n                forEach(['left', 'top', 'width', 'height', 'naturalWidth', 'naturalHeight'], function(n) {\r\n                    data[n] = canvasData[n];\r\n                });\r\n            }\r\n            return data;\r\n        },\r\n        /**\r\n         * Set the canvas position and size with new data.\r\n         * @param {Object} data - The new canvas data.\r\n         * @returns {Cropper} this\r\n         */\r\n        setCanvasData: function setCanvasData(data) {\r\n            var canvasData = this.canvasData;\r\n            var aspectRatio = canvasData.aspectRatio;\r\n            if (this.ready && !this.disabled && isPlainObject(data)) {\r\n                if (isNumber(data.left)) {\r\n                    canvasData.left = data.left;\r\n                }\r\n                if (isNumber(data.top)) {\r\n                    canvasData.top = data.top;\r\n                }\r\n                if (isNumber(data.width)) {\r\n                    canvasData.width = data.width;\r\n                    canvasData.height = data.width / aspectRatio;\r\n                } else if (isNumber(data.height)) {\r\n                    canvasData.height = data.height;\r\n                    canvasData.width = data.height * aspectRatio;\r\n                }\r\n                this.renderCanvas(true);\r\n            }\r\n            return this;\r\n        },\r\n        /**\r\n         * Get the crop box position and size data.\r\n         * @returns {Object} The result crop box data.\r\n         */\r\n        getCropBoxData: function getCropBoxData() {\r\n            var cropBoxData = this.cropBoxData;\r\n            var data;\r\n            if (this.ready && this.cropped) {\r\n                data = {\r\n                    left: cropBoxData.left,\r\n                    top: cropBoxData.top,\r\n                    width: cropBoxData.width,\r\n                    height: cropBoxData.height\r\n                };\r\n            }\r\n            return data || {};\r\n        },\r\n        /**\r\n         * Set the crop box position and size with new data.\r\n         * @param {Object} data - The new crop box data.\r\n         * @returns {Cropper} this\r\n         */\r\n        setCropBoxData: function setCropBoxData(data) {\r\n            var cropBoxData = this.cropBoxData;\r\n            var aspectRatio = this.options.aspectRatio;\r\n            var widthChanged;\r\n            var heightChanged;\r\n            if (this.ready && this.cropped && !this.disabled && isPlainObject(data)) {\r\n                if (isNumber(data.left)) {\r\n                    cropBoxData.left = data.left;\r\n                }\r\n                if (isNumber(data.top)) {\r\n                    cropBoxData.top = data.top;\r\n                }\r\n                if (isNumber(data.width) && data.width !== cropBoxData.width) {\r\n                    widthChanged = true;\r\n                    cropBoxData.width = data.width;\r\n                }\r\n                if (isNumber(data.height) && data.height !== cropBoxData.height) {\r\n                    heightChanged = true;\r\n                    cropBoxData.height = data.height;\r\n                }\r\n                if (aspectRatio) {\r\n                    if (widthChanged) {\r\n                        cropBoxData.height = cropBoxData.width / aspectRatio;\r\n                    } else if (heightChanged) {\r\n                        cropBoxData.width = cropBoxData.height * aspectRatio;\r\n                    }\r\n                }\r\n                this.renderCropBox();\r\n            }\r\n            return this;\r\n        },\r\n        /**\r\n         * Get a canvas drawn the cropped image.\r\n         * @param {Object} [options={}] - The config options.\r\n         * @returns {HTMLCanvasElement} - The result canvas.\r\n         */\r\n        getCroppedCanvas: function getCroppedCanvas() {\r\n            var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\r\n            if (!this.ready || !window.HTMLCanvasElement) {\r\n                return null;\r\n            }\r\n            var canvasData = this.canvasData;\r\n            var source = getSourceCanvas(this.image, this.imageData, canvasData, options);\r\n\r\n            // Returns the source canvas if it is not cropped.\r\n            if (!this.cropped) {\r\n                return source;\r\n            }\r\n            var _this$getData = this.getData(options.rounded),\r\n                    initialX = _this$getData.x,\r\n                    initialY = _this$getData.y,\r\n                    initialWidth = _this$getData.width,\r\n                    initialHeight = _this$getData.height;\r\n            var ratio = source.width / Math.floor(canvasData.naturalWidth);\r\n            if (ratio !== 1) {\r\n                initialX *= ratio;\r\n                initialY *= ratio;\r\n                initialWidth *= ratio;\r\n                initialHeight *= ratio;\r\n            }\r\n            var aspectRatio = initialWidth / initialHeight;\r\n            var maxSizes = getAdjustedSizes({\r\n                                                aspectRatio: aspectRatio,\r\n                                                width: options.maxWidth || Infinity,\r\n                                                height: options.maxHeight || Infinity\r\n                                            });\r\n            var minSizes = getAdjustedSizes({\r\n                                                aspectRatio: aspectRatio,\r\n                                                width: options.minWidth || 0,\r\n                                                height: options.minHeight || 0\r\n                                            }, 'cover');\r\n            var _getAdjustedSizes = getAdjustedSizes({\r\n                                                         aspectRatio: aspectRatio,\r\n                                                         width: options.width || (ratio !== 1 ? source.width : initialWidth),\r\n                                                         height: options.height || (ratio !== 1 ? source.height : initialHeight)\r\n                                                     }),\r\n                    width = _getAdjustedSizes.width,\r\n                    height = _getAdjustedSizes.height;\r\n            width = Math.min(maxSizes.width, Math.max(minSizes.width, width));\r\n            height = Math.min(maxSizes.height, Math.max(minSizes.height, height));\r\n            var canvas = document.createElement('canvas');\r\n            var context = canvas.getContext('2d');\r\n            canvas.width = normalizeDecimalNumber(width);\r\n            canvas.height = normalizeDecimalNumber(height);\r\n            context.fillStyle = options.fillColor || 'transparent';\r\n            context.fillRect(0, 0, width, height);\r\n            var _options$imageSmoothi = options.imageSmoothingEnabled,\r\n                    imageSmoothingEnabled = _options$imageSmoothi === void 0 ? true : _options$imageSmoothi,\r\n                    imageSmoothingQuality = options.imageSmoothingQuality;\r\n            context.imageSmoothingEnabled = imageSmoothingEnabled;\r\n            if (imageSmoothingQuality) {\r\n                context.imageSmoothingQuality = imageSmoothingQuality;\r\n            }\r\n\r\n            // https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.drawImage\r\n            var sourceWidth = source.width;\r\n            var sourceHeight = source.height;\r\n\r\n            // Source canvas parameters\r\n            var srcX = initialX;\r\n            var srcY = initialY;\r\n            var srcWidth;\r\n            var srcHeight;\r\n\r\n            // Destination canvas parameters\r\n            var dstX;\r\n            var dstY;\r\n            var dstWidth;\r\n            var dstHeight;\r\n            if (srcX <= -initialWidth || srcX > sourceWidth) {\r\n                srcX = 0;\r\n                srcWidth = 0;\r\n                dstX = 0;\r\n                dstWidth = 0;\r\n            } else if (srcX <= 0) {\r\n                dstX = -srcX;\r\n                srcX = 0;\r\n                srcWidth = Math.min(sourceWidth, initialWidth + srcX);\r\n                dstWidth = srcWidth;\r\n            } else if (srcX <= sourceWidth) {\r\n                dstX = 0;\r\n                srcWidth = Math.min(initialWidth, sourceWidth - srcX);\r\n                dstWidth = srcWidth;\r\n            }\r\n            if (srcWidth <= 0 || srcY <= -initialHeight || srcY > sourceHeight) {\r\n                srcY = 0;\r\n                srcHeight = 0;\r\n                dstY = 0;\r\n                dstHeight = 0;\r\n            } else if (srcY <= 0) {\r\n                dstY = -srcY;\r\n                srcY = 0;\r\n                srcHeight = Math.min(sourceHeight, initialHeight + srcY);\r\n                dstHeight = srcHeight;\r\n            } else if (srcY <= sourceHeight) {\r\n                dstY = 0;\r\n                srcHeight = Math.min(initialHeight, sourceHeight - srcY);\r\n                dstHeight = srcHeight;\r\n            }\r\n            var params = [srcX, srcY, srcWidth, srcHeight];\r\n\r\n            // Avoid \"IndexSizeError\"\r\n            if (dstWidth > 0 && dstHeight > 0) {\r\n                var scale = width / initialWidth;\r\n                params.push(dstX * scale, dstY * scale, dstWidth * scale, dstHeight * scale);\r\n            }\r\n\r\n            // All the numerical parameters should be integer for `drawImage`\r\n            // https://github.com/fengyuanchen/cropper/issues/476\r\n            context.drawImage.apply(context, [source].concat(_toConsumableArray(params.map(function(param) {\r\n                return Math.floor(normalizeDecimalNumber(param));\r\n            }))));\r\n            return canvas;\r\n        },\r\n        /**\r\n         * Change the aspect ratio of the crop box.\r\n         * @param {number} aspectRatio - The new aspect ratio.\r\n         * @returns {Cropper} this\r\n         */\r\n        setAspectRatio: function setAspectRatio(aspectRatio) {\r\n            var options = this.options;\r\n            if (!this.disabled && !isUndefined(aspectRatio)) {\r\n                // 0 -> NaN\r\n                options.aspectRatio = Math.max(0, aspectRatio) || NaN;\r\n                if (this.ready) {\r\n                    this.initCropBox();\r\n                    if (this.cropped) {\r\n                        this.renderCropBox();\r\n                    }\r\n                }\r\n            }\r\n            return this;\r\n        },\r\n        /**\r\n         * Change the drag mode.\r\n         * @param {string} mode - The new drag mode.\r\n         * @returns {Cropper} this\r\n         */\r\n        setDragMode: function setDragMode(mode) {\r\n            var options = this.options,\r\n                    dragBox = this.dragBox,\r\n                    face = this.face;\r\n            if (this.ready && !this.disabled) {\r\n                var croppable = mode === DRAG_MODE_CROP;\r\n                var movable = options.movable && mode === DRAG_MODE_MOVE;\r\n                mode = croppable || movable ? mode : DRAG_MODE_NONE;\r\n                options.dragMode = mode;\r\n                setData(dragBox, DATA_ACTION, mode);\r\n                toggleClass(dragBox, CLASS_CROP, croppable);\r\n                toggleClass(dragBox, CLASS_MOVE, movable);\r\n                if (!options.cropBoxMovable) {\r\n                    // Sync drag mode to crop box when it is not movable\r\n                    setData(face, DATA_ACTION, mode);\r\n                    toggleClass(face, CLASS_CROP, croppable);\r\n                    toggleClass(face, CLASS_MOVE, movable);\r\n                }\r\n            }\r\n            return this;\r\n        }\r\n    };\r\n\r\n    var AnotherCropper = WINDOW.Cropper;\r\n    var Cropper = /*#__PURE__*/function() {\r\n        /**\r\n         * Create a new Cropper.\r\n         * @param {Element} element - The target element for cropping.\r\n         * @param {Object} [options={}] - The configuration options.\r\n         */\r\n        function Cropper(element) {\r\n            var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\r\n            _classCallCheck(this, Cropper);\r\n            if (!element || !REGEXP_TAG_NAME.test(element.tagName)) {\r\n                throw new Error('The first argument is required and must be an <img> or <canvas> element.');\r\n            }\r\n            this.element = element;\r\n            this.options = assign({}, DEFAULTS, isPlainObject(options) && options);\r\n            this.cropped = false;\r\n            this.disabled = false;\r\n            this.pointers = {};\r\n            this.ready = false;\r\n            this.reloading = false;\r\n            this.replaced = false;\r\n            this.sized = false;\r\n            this.sizing = false;\r\n            this.init();\r\n        }\r\n\r\n        _createClass(Cropper, [{\r\n            key: \"init\",\r\n            value: function init() {\r\n                var element = this.element;\r\n                var tagName = element.tagName.toLowerCase();\r\n                var url;\r\n                if (element[NAMESPACE]) {\r\n                    return;\r\n                }\r\n                element[NAMESPACE] = this;\r\n                if (tagName === 'img') {\r\n                    this.isImg = true;\r\n\r\n                    // e.g.: \"img/picture.jpg\"\r\n                    url = element.getAttribute('src') || '';\r\n                    this.originalUrl = url;\r\n\r\n                    // Stop when it's a blank image\r\n                    if (!url) {\r\n                        return;\r\n                    }\r\n\r\n                    // e.g.: \"https://example.com/img/picture.jpg\"\r\n                    url = element.src;\r\n                } else if (tagName === 'canvas' && window.HTMLCanvasElement) {\r\n                    url = element.toDataURL();\r\n                }\r\n                this.load(url);\r\n            }\r\n        }, {\r\n            key: \"load\",\r\n            value: function load(url) {\r\n                var _this = this;\r\n                if (!url) {\r\n                    return;\r\n                }\r\n                this.url = url;\r\n                this.imageData = {};\r\n                var element = this.element,\r\n                        options = this.options;\r\n                if (!options.rotatable && !options.scalable) {\r\n                    options.checkOrientation = false;\r\n                }\r\n\r\n                // Only IE10+ supports Typed Arrays\r\n                if (!options.checkOrientation || !window.ArrayBuffer) {\r\n                    this.clone();\r\n                    return;\r\n                }\r\n\r\n                // Detect the mime type of the image directly if it is a Data URL\r\n                if (REGEXP_DATA_URL.test(url)) {\r\n                    // Read ArrayBuffer from Data URL of JPEG images directly for better performance\r\n                    if (REGEXP_DATA_URL_JPEG.test(url)) {\r\n                        this.read(dataURLToArrayBuffer(url));\r\n                    } else {\r\n                        // Only a JPEG image may contains Exif Orientation information,\r\n                        // the rest types of Data URLs are not necessary to check orientation at all.\r\n                        this.clone();\r\n                    }\r\n                    return;\r\n                }\r\n\r\n                // 1. Detect the mime type of the image by a XMLHttpRequest.\r\n                // 2. Load the image as ArrayBuffer for reading orientation if its a JPEG image.\r\n                var xhr = new XMLHttpRequest();\r\n                var clone = this.clone.bind(this);\r\n                this.reloading = true;\r\n                this.xhr = xhr;\r\n\r\n                // 1. Cross origin requests are only supported for protocol schemes:\r\n                // http, https, data, chrome, chrome-extension.\r\n                // 2. Access to XMLHttpRequest from a Data URL will be blocked by CORS policy\r\n                // in some browsers as IE11 and Safari.\r\n                xhr.onabort = clone;\r\n                xhr.onerror = clone;\r\n                xhr.ontimeout = clone;\r\n                xhr.onprogress = function() {\r\n                    // Abort the request directly if it not a JPEG image for better performance\r\n                    if (xhr.getResponseHeader('content-type') !== MIME_TYPE_JPEG) {\r\n                        xhr.abort();\r\n                    }\r\n                };\r\n                xhr.onload = function() {\r\n                    _this.read(xhr.response);\r\n                };\r\n                xhr.onloadend = function() {\r\n                    _this.reloading = false;\r\n                    _this.xhr = null;\r\n                };\r\n\r\n                // Bust cache when there is a \"crossOrigin\" property to avoid browser cache error\r\n                if (options.checkCrossOrigin && isCrossOriginURL(url) && element.crossOrigin) {\r\n                    url = addTimestamp(url);\r\n                }\r\n\r\n                // The third parameter is required for avoiding side-effect (#682)\r\n                xhr.open('GET', url, true);\r\n                xhr.responseType = 'arraybuffer';\r\n                xhr.withCredentials = element.crossOrigin === 'use-credentials';\r\n                xhr.send();\r\n            }\r\n        }, {\r\n            key: \"read\",\r\n            value: function read(arrayBuffer) {\r\n                var options = this.options,\r\n                        imageData = this.imageData;\r\n\r\n                // Reset the orientation value to its default value 1\r\n                // as some iOS browsers will render image with its orientation\r\n                var orientation = resetAndGetOrientation(arrayBuffer);\r\n                var rotate = 0;\r\n                var scaleX = 1;\r\n                var scaleY = 1;\r\n                if (orientation > 1) {\r\n                    // Generate a new URL which has the default orientation value\r\n                    this.url = arrayBufferToDataURL(arrayBuffer, MIME_TYPE_JPEG);\r\n                    var _parseOrientation = parseOrientation(orientation);\r\n                    rotate = _parseOrientation.rotate;\r\n                    scaleX = _parseOrientation.scaleX;\r\n                    scaleY = _parseOrientation.scaleY;\r\n                }\r\n                if (options.rotatable) {\r\n                    imageData.rotate = rotate;\r\n                }\r\n                if (options.scalable) {\r\n                    imageData.scaleX = scaleX;\r\n                    imageData.scaleY = scaleY;\r\n                }\r\n                this.clone();\r\n            }\r\n        }, {\r\n            key: \"clone\",\r\n            value: function clone() {\r\n                var element = this.element,\r\n                        url = this.url;\r\n                var crossOrigin = element.crossOrigin;\r\n                var crossOriginUrl = url;\r\n                if (this.options.checkCrossOrigin && isCrossOriginURL(url)) {\r\n                    if (!crossOrigin) {\r\n                        crossOrigin = 'anonymous';\r\n                    }\r\n\r\n                    // Bust cache when there is not a \"crossOrigin\" property (#519)\r\n                    crossOriginUrl = addTimestamp(url);\r\n                }\r\n                this.crossOrigin = crossOrigin;\r\n                this.crossOriginUrl = crossOriginUrl;\r\n                var image = document.createElement('img');\r\n                if (crossOrigin) {\r\n                    image.crossOrigin = crossOrigin;\r\n                }\r\n                image.src = crossOriginUrl || url;\r\n                image.alt = element.alt || 'The image to crop';\r\n                this.image = image;\r\n                image.onload = this.start.bind(this);\r\n                image.onerror = this.stop.bind(this);\r\n                addClass(image, CLASS_HIDE);\r\n                element.parentNode.insertBefore(image, element.nextSibling);\r\n            }\r\n        }, {\r\n            key: \"start\",\r\n            value: function start() {\r\n                var _this2 = this;\r\n                var image = this.image;\r\n                image.onload = null;\r\n                image.onerror = null;\r\n                this.sizing = true;\r\n\r\n                // Match all browsers that use WebKit as the layout engine in iOS devices,\r\n                // such as Safari for iOS, Chrome for iOS, and in-app browsers.\r\n                var isIOSWebKit = WINDOW.navigator && /(?:iPad|iPhone|iPod).*?AppleWebKit/i.test(WINDOW.navigator.userAgent);\r\n                var done = function done(naturalWidth, naturalHeight) {\r\n                    assign(_this2.imageData, {\r\n                        naturalWidth: naturalWidth,\r\n                        naturalHeight: naturalHeight,\r\n                        aspectRatio: naturalWidth / naturalHeight\r\n                    });\r\n                    _this2.initialImageData = assign({}, _this2.imageData);\r\n                    _this2.sizing = false;\r\n                    _this2.sized = true;\r\n                    _this2.build();\r\n                };\r\n\r\n                // Most modern browsers (excepts iOS WebKit)\r\n                if (image.naturalWidth && !isIOSWebKit) {\r\n                    done(image.naturalWidth, image.naturalHeight);\r\n                    return;\r\n                }\r\n                var sizingImage = document.createElement('img');\r\n                var body = document.body || document.documentElement;\r\n                this.sizingImage = sizingImage;\r\n                sizingImage.onload = function() {\r\n                    done(sizingImage.width, sizingImage.height);\r\n                    if (!isIOSWebKit) {\r\n                        body.removeChild(sizingImage);\r\n                    }\r\n                };\r\n                sizingImage.src = image.src;\r\n\r\n                // iOS WebKit will convert the image automatically\r\n                // with its orientation once append it into DOM (#279)\r\n                if (!isIOSWebKit) {\r\n                    sizingImage.style.cssText = 'left:0;' + 'max-height:none!important;' + 'max-width:none!important;' + 'min-height:0!important;' + 'min-width:0!important;' + 'opacity:0;' + 'position:absolute;' + 'top:0;' + 'z-index:-1;';\r\n                    body.appendChild(sizingImage);\r\n                }\r\n            }\r\n        }, {\r\n            key: \"stop\",\r\n            value: function stop() {\r\n                var image = this.image;\r\n                image.onload = null;\r\n                image.onerror = null;\r\n                image.parentNode.removeChild(image);\r\n                this.image = null;\r\n            }\r\n        }, {\r\n            key: \"build\",\r\n            value: function build() {\r\n                if (!this.sized || this.ready) {\r\n                    return;\r\n                }\r\n                var element = this.element,\r\n                        options = this.options,\r\n                        image = this.image;\r\n\r\n                // Create cropper elements\r\n                var container = element.parentNode;\r\n                var template = document.createElement('div');\r\n                template.innerHTML = TEMPLATE;\r\n                var cropper = template.querySelector(\".\".concat(NAMESPACE, \"-container\"));\r\n                var canvas = cropper.querySelector(\".\".concat(NAMESPACE, \"-canvas\"));\r\n                var dragBox = cropper.querySelector(\".\".concat(NAMESPACE, \"-drag-box\"));\r\n                var cropBox = cropper.querySelector(\".\".concat(NAMESPACE, \"-crop-box\"));\r\n                var face = cropBox.querySelector(\".\".concat(NAMESPACE, \"-face\"));\r\n                this.container = container;\r\n                this.cropper = cropper;\r\n                this.canvas = canvas;\r\n                this.dragBox = dragBox;\r\n                this.cropBox = cropBox;\r\n                this.viewBox = cropper.querySelector(\".\".concat(NAMESPACE, \"-view-box\"));\r\n                this.face = face;\r\n                canvas.appendChild(image);\r\n\r\n                // Hide the original image\r\n                addClass(element, CLASS_HIDDEN);\r\n\r\n                // Inserts the cropper after to the current image\r\n                container.insertBefore(cropper, element.nextSibling);\r\n\r\n                // Show the hidden image\r\n                removeClass(image, CLASS_HIDE);\r\n                this.initPreview();\r\n                this.bind();\r\n                options.initialAspectRatio = Math.max(0, options.initialAspectRatio) || NaN;\r\n                options.aspectRatio = Math.max(0, options.aspectRatio) || NaN;\r\n                options.viewMode = Math.max(0, Math.min(3, Math.round(options.viewMode))) || 0;\r\n                addClass(cropBox, CLASS_HIDDEN);\r\n                if (!options.guides) {\r\n                    addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-dashed\")), CLASS_HIDDEN);\r\n                }\r\n                if (!options.center) {\r\n                    addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-center\")), CLASS_HIDDEN);\r\n                }\r\n                if (options.background) {\r\n                    addClass(cropper, \"\".concat(NAMESPACE, \"-bg\"));\r\n                }\r\n                if (!options.highlight) {\r\n                    addClass(face, CLASS_INVISIBLE);\r\n                }\r\n                if (options.cropBoxMovable) {\r\n                    addClass(face, CLASS_MOVE);\r\n                    setData(face, DATA_ACTION, ACTION_ALL);\r\n                }\r\n                if (!options.cropBoxResizable) {\r\n                    addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-line\")), CLASS_HIDDEN);\r\n                    addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-point\")), CLASS_HIDDEN);\r\n                }\r\n                this.render();\r\n                this.ready = true;\r\n                this.setDragMode(options.dragMode);\r\n                if (options.autoCrop) {\r\n                    this.crop();\r\n                }\r\n                this.setData(options.data);\r\n                if (isFunction(options.ready)) {\r\n                    addListener(element, EVENT_READY, options.ready, {\r\n                        once: true\r\n                    });\r\n                }\r\n                dispatchEvent(element, EVENT_READY);\r\n            }\r\n        }, {\r\n            key: \"unbuild\",\r\n            value: function unbuild() {\r\n                if (!this.ready) {\r\n                    return;\r\n                }\r\n                this.ready = false;\r\n                this.unbind();\r\n                this.resetPreview();\r\n                var parentNode = this.cropper.parentNode;\r\n                if (parentNode) {\r\n                    parentNode.removeChild(this.cropper);\r\n                }\r\n                removeClass(this.element, CLASS_HIDDEN);\r\n            }\r\n        }, {\r\n            key: \"uncreate\",\r\n            value: function uncreate() {\r\n                if (this.ready) {\r\n                    this.unbuild();\r\n                    this.ready = false;\r\n                    this.cropped = false;\r\n                } else if (this.sizing) {\r\n                    this.sizingImage.onload = null;\r\n                    this.sizing = false;\r\n                    this.sized = false;\r\n                } else if (this.reloading) {\r\n                    this.xhr.onabort = null;\r\n                    this.xhr.abort();\r\n                } else if (this.image) {\r\n                    this.stop();\r\n                }\r\n            }\r\n\r\n            /**\r\n             * Get the no conflict cropper class.\r\n             * @returns {Cropper} The cropper class.\r\n             */\r\n        }], [{\r\n            key: \"noConflict\",\r\n            value: function noConflict() {\r\n                window.Cropper = AnotherCropper;\r\n                return Cropper;\r\n            }\r\n\r\n            /**\r\n             * Change the default options.\r\n             * @param {Object} options - The new default options.\r\n             */\r\n        }, {\r\n            key: \"setDefaults\",\r\n            value: function setDefaults(options) {\r\n                assign(DEFAULTS, isPlainObject(options) && options);\r\n            }\r\n        }]);\r\n        return Cropper;\r\n    }();\r\n    assign(Cropper.prototype, render, preview, events, handlers, change, methods);\r\n\r\n    return Cropper;\r\n\r\n}));\r\n\n/*\r\n * Copyright (c) 2025 Quanos Solutions GmbH\r\n */\r\n\r\nvar vidW = 1280;    // Defaultwerte, falls keine Kamera vorhanden oder Fehler aufgetreten\r\nvar vidH = 768;\r\n\r\nvar cameraView;   // Zur Anzeige des Videostreams\r\nvar userPhoto;    // hier wird das von der Camera gemachte Foto gespeichert\r\nvar photoImg;     // Bild zum Croppen (Ausschnitt wählen)\r\nvar cropper;      // zur Auswahl eines Ausschnitts und zur Rotation\r\n\r\nvar uniqueId;\r\nvar transactionId;\r\n\r\nfunction dwCameraStartVideo(uniqueId, transactionId, errorText) {\r\n    this.uniqueId = uniqueId;\r\n    this.transactionId = transactionId;\r\n\r\n    setTimeout(function() {\r\n        cameraView = $(\"camera-view\");\r\n        userPhoto = $(\"user-photo\");\r\n        cameraDiv = $(\"camera\");\r\n        photoImg = $(\"photoImg\");\r\n        cropper = null;     // neuen Cropper erstellen bei jedem Öffnen des Fensters\r\n\r\n        //Webcam Setup and usage\r\n        var constraints = {\r\n            video: {\r\n                width: {\r\n                    ideal: 2048\r\n                },\r\n                height: {\r\n                    ideal: 2048\r\n                },\r\n                facingMode: \"environment\"\r\n            },\r\n            audio: false\r\n        };\r\n\r\n        //Sets up all the divs to be the same size\r\n        function SetupSizes() {\r\n            var width = cameraDiv.parentElement.offsetWidth;\r\n            var height = cameraDiv.parentElement.offsetHeight;\r\n\r\n            var st = 'width:' + width + 'px; height:' + height + 'px;';\r\n            cameraView.setAttribute(\"style\", st);\r\n            userPhoto.setAttribute(\"style\", st);\r\n            photoImg.setAttribute(\"style\", st);\r\n            photoImg.setAttribute(\"style\", st + \"display: none;\")\r\n        }\r\n\r\n        SetupSizes();\r\n\r\n        //Resizes the canvases\r\n        function ResizeCanvases() {\r\n            var cvs = document.getElementsByTagName(\"canvas\");\r\n            for (var c = 0; c < cvs.length; c++) {\r\n                cvs[c].height = vidH;\r\n                cvs[c].width = vidW;\r\n            }\r\n        }\r\n\r\n        function WebcamSetup() {\r\n            var startCameraText = $(\"startCamera\");\r\n\r\n            if (!navigator || !navigator.mediaDevices) {\r\n                let text = \"Can't enumerate devices, navigator is not present.\";\r\n                if (\"https:\" !== location.protocol) {\r\n                    var e = location.host.split(\":\")[0];\r\n                    if (((\"127.0.0.1\" !== e) && (\"localhost\" !== e))) {\r\n                        text = \"Camera can only be accessed in secure context (https or localhost)\";\r\n                    }\r\n                }\r\n                startCameraText.textContent = text;\r\n                ResizeCanvases();\r\n                dwAjaxAddUpdate(uniqueId + \"@DW@\" + uniqueId + \"@DW@__custom_CameraStartErrorEvent\", true, true);\r\n            } else {\r\n                navigator.mediaDevices\r\n                        .getUserMedia(constraints)\r\n                        .then(function(stream) {\r\n                            let track = stream.getTracks()[0];\r\n                            if (track.getSettings) {\r\n                                let {\r\n                                    width,\r\n                                    height\r\n                                } = track.getSettings();\r\n                                vidW = width;\r\n                                vidH = height;\r\n                                cameraView.width = (vidW > vidH) ? vidW : vidH;\r\n                                cameraView.height = (vidH < vidW) ? vidH : vidW;\r\n                            }\r\n                            cameraView.srcObject = stream;\r\n                            startCameraText.style.display = \"none\";\r\n                            ResizeCanvases();\r\n                            dwAjaxAddUpdate(uniqueId + \"@DW@\" + uniqueId + \"@DW@__custom_CameraStartedEvent\", true, true);\r\n                        })\r\n                        .catch(function(error) {\r\n                            console.error(\"An error occurred: \", error);\r\n                            startCameraText.textContent = errorText;\r\n                            ResizeCanvases();\r\n                            dwAjaxAddUpdate(uniqueId + \"@DW@\" + uniqueId + \"@DW@__custom_CameraStartErrorEvent\", true, true);\r\n                        });\r\n            }\r\n        }\r\n\r\n        WebcamSetup();\r\n\r\n    }, 100);\r\n}\r\n\r\n/**\r\n * Berechnet die neue Größe des Bildes, wenn es kleiner/größer ist, als der zur Verfüung stehende Platz. Und bei kleineren\r\n * Bildern als der verfügbar Platz wird eine x/y-Koordinate zurückgegeben, damit das Bild in der Mitte angezeigt wird.\r\n * @param img\r\n * @returns {{newWidth: number, newHeight: number, x: number, y: number}}\r\n */\r\nfunction calculateDimensionAndCoordinates(img) {\r\n    var newWidth = vidW;\r\n    var newHeight = vidH;\r\n    var width = img.width;\r\n    var height = img.height;\r\n\r\n    if ((width <= vidW) && (height <= vidH)) {\r\n        newWidth = width;\r\n        newHeight = height;\r\n    } else if (width > vidW || height > vidH) {\r\n        var scale = Math.min(vidW / width, vidH / height);\r\n        newWidth = width * scale;\r\n        newHeight = height * scale;\r\n    }\r\n    var x = (vidW - newWidth) / 2;\r\n    var y = (vidH - newHeight) / 2;\r\n\r\n    return {x, y, newWidth, newHeight};\r\n}\r\n\r\n/**\r\n * Funktion wird nur von außen aufgerufen um ein manuell hochgeladenes Bild zu setzen, damit man es croppen kann.\r\n * Also dann kein mit der Kamera live gemachtes Bild\r\n * @param imgData\r\n */\r\nfunction dwCameraSetImage(imgData) {\r\n    var ctx = userPhoto.getContext(\"2d\");\r\n    // Das Canvas muss gecleared werden, da sonst wenn vorher schon ein Bild hochgeladen wurde das Bild nur überlagert wird\r\n    // und das alte Bild evtl an den Kanten des neuen Bildes drüber hinausschaut.\r\n    ctx.clearRect(0, 0, userPhoto.width, userPhoto.height);\r\n\r\n    var img = new Image();\r\n    img.src = \"data:image/jpeg;base64,\" + imgData;\r\n    img.onload = function() {\r\n        var {x, y, newWidth, newHeight} = calculateDimensionAndCoordinates(img);\r\n        ctx.drawImage(img, x, y, newWidth, newHeight);\r\n        cameraDiv.style.display = \"none\";\r\n        dwCameraStopVideo();\r\n        dwCameraStartCrop()\r\n    };\r\n}\r\n\r\nfunction dwCameraTakeSnapshot() {\r\n    userPhoto.getContext(\"2d\").drawImage(cameraView, 0, 0, vidW, vidH, 0, 0, vidW, vidH);\r\n\r\n    cameraDiv.style.display = \"none\";\r\n    dwCameraStopVideo();\r\n}\r\n\r\n//Removes the video and stops the stream\r\nfunction dwCameraStopVideo() {\r\n    stream = cameraView.srcObject;\r\n    if (stream != null) {\r\n        stream.getTracks().forEach(track => track.stop());\r\n        cameraView.srcObject = null;\r\n    }\r\n}\r\n\r\nfunction dwCameraStartCrop() {\r\n    userPhoto.style.display = \"none\";\r\n\r\n    photoImg.style.display = \"visible\";\r\n    photoImg.src = userPhoto.toDataURL('image/jpeg', 0.8);\r\n    // Wenn der Nutzer erneut ein Bild hochlädt muss das Bild replaced werden, anstatt einen neuen Cropper zu erzeugen\r\n    if (cropper != null) {\r\n        cropper.replace(photoImg.src)\r\n    } else {\r\n        cropper = new Cropper(photoImg, {\r\n            minCropBoxWidth: 100,\r\n            minCropBoxHeight: 100\r\n        });\r\n    }\r\n}\r\n\r\nfunction dwCameraRotatePicture() {\r\n    if (cropper != null) {\r\n        cropper.rotate(45);\r\n    }\r\n}\r\n\r\nfunction dwCameraSavePicture() {\r\n    var canvas = cropper.getCroppedCanvas();\r\n    var dataURL = canvas.toDataURL('image/jpeg', 0.8);\r\n    var dataURLsize = dataURL.length;\r\n    var imgWidth = canvas.width;\r\n    var imgHeight = canvas.height;\r\n\r\n    var context = canvas.getContext('2d');\r\n    var factor = imgWidth > imgHeight ? (imgWidth / 800) : (imgHeight / 800);\r\n    if (factor < 1) {   // Bild ist schon kleiner als 800 Pixel breit/hoch\r\n        dwAjaxAddUpdate(uniqueId + \"@DW@\" + uniqueId + \"@DW@__custom_CameraCropFinishedEvent@DW@dataURL=\" + dataURL + \"@DWSUB@imageWidth=\" + imgWidth + \"@DWSUB@transactionId=\" + transactionId, true, true)\r\n        cropper = null;\r\n    } else {\r\n        canvas.width = imgWidth / factor;\r\n        canvas.height = imgHeight / factor;\r\n\r\n        var img = new Image();\r\n        img.src = dataURL;\r\n        img.onload = function() {\r\n            context.drawImage(img, 0, 0, canvas.width, canvas.height);\r\n\r\n            var resizedDataURL = canvas.toDataURL('image/jpeg', 0.8);\r\n            // auskommentierte Code, falls man auf Fehlersuche gehen muss\r\n            /*var resizedDataURLsize = resizedDataURL.length;\r\n              console.log(\"old size: \" + imgWidth + \"x\" + imgHeight);\r\n              console.log(dataURLsize);\r\n              console.log(\"new size: \" + canvas.width + \"x\" + canvas.height);\r\n              console.log(resizedDataURLsize)*/\r\n\r\n            dwAjaxAddUpdate(uniqueId + \"@DW@\" + uniqueId + \"@DW@__custom_CameraCropFinishedEvent@DW@dataURL=\" + resizedDataURL + \"@DWSUB@imageWidth=\" + imgWidth + \"@DWSUB@transactionId=\" + transactionId, true, true)\r\n            cropper = null;\r\n        };\r\n    }\r\n}\n"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": -1,
          "_transferSize": 27077,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:09.559Z",
        "time": 282.5070000253618,
        "timings": {
          "blocked": 25.53799998676032,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0.798,
          "wait": 211.94999999120085,
          "receive": 44.221000047400594,
          "_blocked_queueing": 20.95899998676032,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_connectionId": "1726423",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "parser",
          "url": "https://ekat.festool.de/login/app?__bk_&__windowid=IRW3104379&__rid=FOE1787216989423",
          "lineNumber": 1
        },
        "_priority": "High",
        "_resourceType": "script",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/login/WEB-RES/js/components.js_shop_7.26.1.5.js",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": ":authority",
              "value": "ekat.festool.de"
            },
            {
              "name": ":method",
              "value": "GET"
            },
            {
              "name": ":path",
              "value": "/login/WEB-RES/js/components.js_shop_7.26.1.5.js"
            },
            {
              "name": ":scheme",
              "value": "https"
            },
            {
              "name": "accept",
              "value": "*/*"
            },
            {
              "name": "accept-encoding",
              "value": "gzip, deflate, br, zstd"
            },
            {
              "name": "accept-language",
              "value": "en-GB,en-US;q=0.9,en;q=0.8"
            },
            {
              "name": "if-modified-since",
              "value": "Wed, 31 Dec 1969 23:59:59 GMT"
            },
            {
              "name": "if-none-match",
              "value": "W/\"0-1787216828343\""
            },
            {
              "name": "priority",
              "value": "u=1"
            },
            {
              "name": "referer",
              "value": "https://ekat.festool.de/login/app?__bk_&__windowid=IRW3104379&__rid=FOE1787216989423"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            },
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "sec-fetch-dest",
              "value": "script"
            },
            {
              "name": "sec-fetch-mode",
              "value": "no-cors"
            },
            {
              "name": "sec-fetch-site",
              "value": "same-origin"
            },
            {
              "name": "user-agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            }
          ],
          "queryString": [],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "cache-control",
              "value": "public"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "content-length",
              "value": "20"
            },
            {
              "name": "content-type",
              "value": "text/javascript"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 09:09:49 GMT"
            },
            {
              "name": "etag",
              "value": "W/\"0-1787216989637\""
            },
            {
              "name": "expires",
              "value": "Thu, 20 Aug 2026 09:11:49 GMT"
            },
            {
              "name": "last-modified",
              "value": "Wed, 31 Dec 1969 23:59:59 GMT"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "pragma",
              "value": "cache"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "x-robots-tag",
              "value": "noindex"
            }
          ],
          "cookies": [],
          "content": {
            "size": 0,
            "mimeType": "text/javascript",
            "text": ""
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": -1,
          "_transferSize": 127,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:09.559Z",
        "time": 172.32999997213483,
        "timings": {
          "blocked": 25.516999895229937,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0.7160000000000002,
          "wait": 142.9799999748394,
          "receive": 3.1170001020655036,
          "_blocked_queueing": 21.053999895229936,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_connectionId": "1726423",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "parser",
          "url": "https://ekat.festool.de/login/app?__bk_&__windowid=IRW3104379&__rid=FOE1787216989423",
          "lineNumber": 12
        },
        "_priority": "High",
        "_resourceType": "script",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/login/WEB-RES/js/html2pdf.bundle.min.js_shop_7.26.1.5.js",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": ":authority",
              "value": "ekat.festool.de"
            },
            {
              "name": ":method",
              "value": "GET"
            },
            {
              "name": ":path",
              "value": "/login/WEB-RES/js/html2pdf.bundle.min.js_shop_7.26.1.5.js"
            },
            {
              "name": ":scheme",
              "value": "https"
            },
            {
              "name": "accept",
              "value": "*/*"
            },
            {
              "name": "accept-encoding",
              "value": "gzip, deflate, br, zstd"
            },
            {
              "name": "accept-language",
              "value": "en-GB,en-US;q=0.9,en;q=0.8"
            },
            {
              "name": "if-modified-since",
              "value": "Thu, 20 Aug 2026 07:47:26 GMT"
            },
            {
              "name": "if-none-match",
              "value": "W/\"482447-1787216828344\""
            },
            {
              "name": "priority",
              "value": "u=1"
            },
            {
              "name": "referer",
              "value": "https://ekat.festool.de/login/app?__bk_&__windowid=IRW3104379&__rid=FOE1787216989423"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            },
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "sec-fetch-dest",
              "value": "script"
            },
            {
              "name": "sec-fetch-mode",
              "value": "no-cors"
            },
            {
              "name": "sec-fetch-site",
              "value": "same-origin"
            },
            {
              "name": "user-agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            }
          ],
          "queryString": [],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "cache-control",
              "value": "public"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "content-length",
              "value": "139373"
            },
            {
              "name": "content-type",
              "value": "text/javascript"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 09:09:49 GMT"
            },
            {
              "name": "etag",
              "value": "W/\"482447-1787216989637\""
            },
            {
              "name": "expires",
              "value": "Thu, 20 Aug 2026 09:11:49 GMT"
            },
            {
              "name": "last-modified",
              "value": "Thu, 20 Aug 2026 07:47:26 GMT"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "pragma",
              "value": "cache"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "x-robots-tag",
              "value": "noindex"
            }
          ],
          "cookies": [],
          "content": {
            "size": 482447,
            "mimeType": "text/javascript",
            "text": "/**\r\n * html2pdf.js v0.9.2\r\n * Copyright (c) 2020 Erik Koopmans\r\n * Released under the MIT License.\r\n */\r\n!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):t.html2pdf=e()}(this,function(){\"use strict\";function t(){throw new Error(\"Dynamic requires are not currently supported by rollup-plugin-commonjs\")}function e(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,\"default\")?t.default:t}function A(t,e){return e={exports:{}},t(e,e.exports),e.exports}var r=\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:{},n=A(function(e,A){e.exports=function(){function n(t){var e=0;if(71!==t[e++]||73!==t[e++]||70!==t[e++]||56!==t[e++]||56!=(t[e++]+1&253)||97!==t[e++])throw\"Invalid GIF 87a/89a header.\";var A=t[e++]|t[e++]<<8,r=t[e++]|t[e++]<<8,n=t[e++],o=n>>7,a=1<<1+(7&n);t[e++],t[e++];var s=null;o&&(s=e,e+=3*a);var c=!0,l=[],u=0,h=null,d=0,f=null;for(this.width=A,this.height=r;c&&e<t.length;)switch(t[e++]){case 33:switch(t[e++]){case 255:if(11!==t[e]||78==t[e+1]&&69==t[e+2]&&84==t[e+3]&&83==t[e+4]&&67==t[e+5]&&65==t[e+6]&&80==t[e+7]&&69==t[e+8]&&50==t[e+9]&&46==t[e+10]&&48==t[e+11]&&3==t[e+12]&&1==t[e+13]&&0==t[e+16])e+=14,f=t[e++]|t[e++]<<8,e++;else for(e+=12;0!==(b=t[e++]);)e+=b;break;case 249:if(4!==t[e++]||0!==t[e+4])throw\"Invalid graphics extension block.\";var p=t[e++];u=t[e++]|t[e++]<<8,h=t[e++],0==(1&p)&&(h=null),d=p>>2&7,e++;break;case 254:for(;0!==(b=t[e++]);)e+=b;break;default:throw\"Unknown graphic control label: 0x\"+t[e-1].toString(16)}break;case 44:var g=t[e++]|t[e++]<<8,B=t[e++]|t[e++]<<8,w=t[e++]|t[e++]<<8,m=t[e++]|t[e++]<<8,y=t[e++],v=y>>6&1,Q=s,C=!1;y>>7&&(C=!0,Q=e,e+=3*(1<<1+(7&y)));var U=e;for(e++;;){var b;if(0===(b=t[e++]))break;e+=b}l.push({x:g,y:B,width:w,height:m,has_local_palette:C,palette_offset:Q,data_offset:U,data_length:e-U,transparent_index:h,interlaced:!!v,delay:u,disposal:d});break;case 59:c=!1;break;default:throw\"Unknown gif block: 0x\"+t[e-1].toString(16)}this.numFrames=function(){return l.length},this.loopCount=function(){return f},this.frameInfo=function(t){if(t<0||t>=l.length)throw\"Frame index out of range.\";return l[t]},this.decodeAndBlitFrameBGRA=function(e,r){var n=this.frameInfo(e),o=n.width*n.height,a=new Uint8Array(o);i(t,n.data_offset,a,o);var s=n.palette_offset,c=n.transparent_index;null===c&&(c=256);var l=n.width,u=A-l,h=l,d=4*(n.y*A+n.x),f=4*((n.y+n.height)*A+n.x),p=d,g=4*u;!0===n.interlaced&&(g+=4*(l+u)*7);for(var B=8,w=0,m=a.length;w<m;++w){var y=a[w];if(0===h&&(h=l,f<=(p+=g)&&(g=u+4*(l+u)*(B-1),p=d+(l+u)*(B<<1),B>>=1)),y===c)p+=4;else{var v=t[s+3*y],Q=t[s+3*y+1],C=t[s+3*y+2];r[p++]=C,r[p++]=Q,r[p++]=v,r[p++]=255}--h}},this.decodeAndBlitFrameRGBA=function(e,r){var n=this.frameInfo(e),o=n.width*n.height,a=new Uint8Array(o);i(t,n.data_offset,a,o);var s=n.palette_offset,c=n.transparent_index;null===c&&(c=256);var l=n.width,u=A-l,h=l,d=4*(n.y*A+n.x),f=4*((n.y+n.height)*A+n.x),p=d,g=4*u;!0===n.interlaced&&(g+=4*(l+u)*7);for(var B=8,w=0,m=a.length;w<m;++w){var y=a[w];if(0===h&&(h=l,f<=(p+=g)&&(g=u+4*(l+u)*(B-1),p=d+(l+u)*(B<<1),B>>=1)),y===c)p+=4;else{var v=t[s+3*y],Q=t[s+3*y+1],C=t[s+3*y+2];r[p++]=v,r[p++]=Q,r[p++]=C,r[p++]=255}--h}}}function i(t,e,A,r){for(var n=t[e++],i=1<<n,o=i+1,a=o+1,s=n+1,c=(1<<s)-1,l=0,u=0,h=0,d=t[e++],f=new Int32Array(4096),p=null;;){for(;l<16&&0!==d;)u|=t[e++]<<l,l+=8,1===d?d=t[e++]:--d;if(l<s)break;var g=u&c;if(u>>=s,l-=s,g!==i){if(g===o)break;for(var B=g<a?g:p,w=0,m=B;i<m;)m=f[m]>>8,++w;var y=m;if(r<h+w+(B!==g?1:0))return void console.log(\"Warning, gif stream longer than expected.\");A[h++]=y;var v=h+=w;for(B!==g&&(A[h++]=y),m=B;w--;)m=f[m],A[--v]=255&m,m>>=8;null!==p&&a<4096&&(f[a++]=p<<8|y,c+1<=a&&s<12&&(++s,c=c<<1|1)),p=g}else a=o+1,c=(1<<(s=n+1))-1,p=null}return h!==r&&console.log(\"Warning, gif stream shorter than expected.\"),A}function o(t){function e(t,e){for(var A=0,r=0,n=new Array,i=1;i<=16;i++){for(var o=1;o<=t[i];o++)n[e[r]]=[],n[e[r]][0]=A,n[e[r]][1]=i,r++,A++;A*=2}return n}function A(t){for(var e=t[0],A=t[1]-1;0<=A;)e&1<<A&&(Q|=1<<C),A--,--C<0&&(255==Q?(r(255),r(0)):r(Q),C=7,Q=0)}function r(t){v.push(t)}function n(t){r(t>>8&255),r(255&t)}function i(t,e,r,n,i){for(var o,a=i[0],s=i[240],c=function(t,e){var A,r,n,i,o,a,s,c,l,u,h=0;for(l=0;l<8;++l){A=t[h],r=t[h+1],n=t[h+2],i=t[h+3],o=t[h+4],a=t[h+5],s=t[h+6];var d=A+(c=t[h+7]),f=A-c,p=r+s,g=r-s,B=n+a,w=n-a,y=i+o,v=i-o,Q=d+y,C=d-y,U=p+B,b=p-B;t[h]=Q+U,t[h+4]=Q-U;var F=.707106781*(b+C);t[h+2]=C+F,t[h+6]=C-F;var E=.382683433*((Q=v+w)-(b=g+f)),x=.5411961*Q+E,H=1.306562965*b+E,I=.707106781*(U=w+g),S=f+I,_=f-I;t[h+5]=_+x,t[h+3]=_-x,t[h+1]=S+H,t[h+7]=S-H,h+=8}for(l=h=0;l<8;++l){A=t[h],r=t[h+8],n=t[h+16],i=t[h+24],o=t[h+32],a=t[h+40],s=t[h+48];var T=A+(c=t[h+56]),N=A-c,k=r+s,O=r-s,P=n+a,D=n-a,L=i+o,R=i-o,M=T+L,K=T-L,z=k+P,q=k-P;t[h]=M+z,t[h+32]=M-z;var j=.707106781*(q+K);t[h+16]=K+j,t[h+48]=K-j;var X=.382683433*((M=R+D)-(q=O+N)),V=.5411961*M+X,G=1.306562965*q+X,W=.707106781*(z=D+O),Y=N+W,J=N-W;t[h+40]=J+V,t[h+24]=J-V,t[h+8]=Y+G,t[h+56]=Y-G,h++}for(l=0;l<64;++l)u=t[l]*e[l],m[l]=0<u?u+.5|0:u-.5|0;return m}(t,e),l=0;l<64;++l)y[H[l]]=c[l];var u=y[0]-r;r=y[0],0==u?A(n[0]):(A(n[w[o=32767+u]]),A(B[o]));for(var h=63;0<h&&0==y[h];h--);if(0==h)return A(a),r;for(var d,f=1;f<=h;){for(var p=f;0==y[f]&&f<=h;++f);var g=f-p;if(16<=g){d=g>>4;for(var v=1;v<=d;++v)A(s);g&=15}o=32767+y[f],A(i[(g<<4)+w[o]]),A(B[o]),f++}return 63!=h&&A(a),r}function o(t){t<=0&&(t=1),100<t&&(t=100),u!=t&&(function(t){for(var e=[16,11,10,16,24,40,51,61,12,12,14,19,26,58,60,55,14,13,16,24,40,57,69,56,14,17,22,29,51,87,80,62,18,22,37,56,68,109,103,77,24,35,55,64,81,104,113,92,49,64,78,87,103,121,120,101,72,92,95,98,112,100,103,99],A=0;A<64;A++){var r=h((e[A]*t+50)/100);r<1?r=1:255<r&&(r=255),d[H[A]]=r}for(var n=[17,18,24,47,99,99,99,99,18,21,26,66,99,99,99,99,24,26,56,99,99,99,99,99,47,66,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99],i=0;i<64;i++){var o=h((n[i]*t+50)/100);o<1?o=1:255<o&&(o=255),f[H[i]]=o}for(var a=[1,1.387039845,1.306562965,1.175875602,1,.785694958,.5411961,.275899379],s=0,c=0;c<8;c++)for(var l=0;l<8;l++)p[s]=1/(d[H[s]]*a[c]*a[l]*8),g[s]=1/(f[H[s]]*a[c]*a[l]*8),s++}(t<50?Math.floor(5e3/t):Math.floor(200-2*t)),u=t)}var a,s,c,l,u,h=Math.floor,d=new Array(64),f=new Array(64),p=new Array(64),g=new Array(64),B=new Array(65535),w=new Array(65535),m=new Array(64),y=new Array(64),v=[],Q=0,C=7,U=new Array(64),b=new Array(64),F=new Array(64),E=new Array(256),x=new Array(2048),H=[0,1,5,6,14,15,27,28,2,4,7,13,16,26,29,42,3,8,12,17,25,30,41,43,9,11,18,24,31,40,44,53,10,19,23,32,39,45,52,54,20,22,33,38,46,51,55,60,21,34,37,47,50,56,59,61,35,36,48,49,57,58,62,63],I=[0,0,1,5,1,1,1,1,1,1,0,0,0,0,0,0,0],S=[0,1,2,3,4,5,6,7,8,9,10,11],_=[0,0,2,1,3,3,2,4,3,5,5,4,4,0,0,1,125],T=[1,2,3,0,4,17,5,18,33,49,65,6,19,81,97,7,34,113,20,50,129,145,161,8,35,66,177,193,21,82,209,240,36,51,98,114,130,9,10,22,23,24,25,26,37,38,39,40,41,42,52,53,54,55,56,57,58,67,68,69,70,71,72,73,74,83,84,85,86,87,88,89,90,99,100,101,102,103,104,105,106,115,116,117,118,119,120,121,122,131,132,133,134,135,136,137,138,146,147,148,149,150,151,152,153,154,162,163,164,165,166,167,168,169,170,178,179,180,181,182,183,184,185,186,194,195,196,197,198,199,200,201,202,210,211,212,213,214,215,216,217,218,225,226,227,228,229,230,231,232,233,234,241,242,243,244,245,246,247,248,249,250],N=[0,0,3,1,1,1,1,1,1,1,1,1,0,0,0,0,0],k=[0,1,2,3,4,5,6,7,8,9,10,11],O=[0,0,2,1,2,4,4,3,4,7,5,4,4,0,1,2,119],P=[0,1,2,3,17,4,5,33,49,6,18,65,81,7,97,113,19,34,50,129,8,20,66,145,161,177,193,9,35,51,82,240,21,98,114,209,10,22,36,52,225,37,241,23,24,25,26,38,39,40,41,42,53,54,55,56,57,58,67,68,69,70,71,72,73,74,83,84,85,86,87,88,89,90,99,100,101,102,103,104,105,106,115,116,117,118,119,120,121,122,130,131,132,133,134,135,136,137,138,146,147,148,149,150,151,152,153,154,162,163,164,165,166,167,168,169,170,178,179,180,181,182,183,184,185,186,194,195,196,197,198,199,200,201,202,210,211,212,213,214,215,216,217,218,226,227,228,229,230,231,232,233,234,242,243,244,245,246,247,248,249,250];this.encode=function(t,e){var u,h;(new Date).getTime(),e&&o(e),v=new Array,Q=0,C=7,n(65496),n(65504),n(16),r(74),r(70),r(73),r(70),r(0),r(1),r(1),r(0),n(1),n(1),r(0),r(0),function(){n(65499),n(132),r(0);for(var t=0;t<64;t++)r(d[t]);r(1);for(var e=0;e<64;e++)r(f[e])}(),u=t.width,h=t.height,n(65472),n(17),r(8),n(h),n(u),r(3),r(1),r(17),r(0),r(2),r(17),r(1),r(3),r(17),r(1),function(){n(65476),n(418),r(0);for(var t=0;t<16;t++)r(I[t+1]);for(var e=0;e<=11;e++)r(S[e]);r(16);for(var A=0;A<16;A++)r(_[A+1]);for(var i=0;i<=161;i++)r(T[i]);r(1);for(var o=0;o<16;o++)r(N[o+1]);for(var a=0;a<=11;a++)r(k[a]);r(17);for(var s=0;s<16;s++)r(O[s+1]);for(var c=0;c<=161;c++)r(P[c])}(),n(65498),n(12),r(3),r(1),r(0),r(2),r(17),r(3),r(17),r(0),r(63),r(0);var B=0,w=0,m=0;Q=0,C=7,this.encode.displayName=\"_encode_\";for(var y,E,H,D,L,R,M,K,z,q=t.data,j=t.width,X=t.height,V=4*j,G=0;G<X;){for(y=0;y<V;){for(R=L=V*G+y,M=-1,z=K=0;z<64;z++)R=L+(K=z>>3)*V+(M=4*(7&z)),X<=G+K&&(R-=V*(G+1+K-X)),V<=y+M&&(R-=y+M-V+4),E=q[R++],H=q[R++],D=q[R++],U[z]=(x[E]+x[H+256>>0]+x[D+512>>0]>>16)-128,b[z]=(x[E+768>>0]+x[H+1024>>0]+x[D+1280>>0]>>16)-128,F[z]=(x[E+1280>>0]+x[H+1536>>0]+x[D+1792>>0]>>16)-128;B=i(U,p,B,a,c),w=i(b,g,w,s,l),m=i(F,g,m,s,l),y+=32}G+=8}if(0<=C){var W=[];W[1]=C+1,W[0]=(1<<C+1)-1,A(W)}return n(65497),new Uint8Array(v)},(new Date).getTime(),t||(t=50),function(){for(var t=String.fromCharCode,e=0;e<256;e++)E[e]=t(e)}(),a=e(I,S),s=e(N,k),c=e(_,T),l=e(O,P),function(){for(var t=1,e=2,A=1;A<=15;A++){for(var r=t;r<e;r++)w[32767+r]=A,B[32767+r]=[],B[32767+r][1]=A,B[32767+r][0]=r;for(var n=-(e-1);n<=-t;n++)w[32767+n]=A,B[32767+n]=[],B[32767+n][1]=A,B[32767+n][0]=e-1+n;t<<=1,e<<=1}}(),function(){for(var t=0;t<256;t++)x[t]=19595*t,x[t+256>>0]=38470*t,x[t+512>>0]=7471*t+32768,x[t+768>>0]=-11059*t,x[t+1024>>0]=-21709*t,x[t+1280>>0]=32768*t+8421375,x[t+1536>>0]=-27439*t,x[t+1792>>0]=-5329*t}(),o(t),(new Date).getTime()}function a(t,e){if(this.pos=0,this.buffer=t,this.datav=new DataView(t.buffer),this.is_with_alpha=!!e,this.bottom_up=!0,this.flag=String.fromCharCode(this.buffer[0])+String.fromCharCode(this.buffer[1]),this.pos+=2,-1===[\"BM\",\"BA\",\"CI\",\"CP\",\"IC\",\"PT\"].indexOf(this.flag))throw new Error(\"Invalid BMP File\");this.parseHeader(),this.parseBGR()}var s,c,l,u,h,d,f,p,g,B,w,m,y,v,Q,C,U,b,F,E,x,H,I,S,_,T,N,k,O,P,D,L,R,M,K,z,q,j,X,V,G,W,Y,J,Z,$,tt,et,At,rt,nt,it,ot,at=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},st=function(t){function A(e,i,o,a){var s={};\"object\"===(void 0===e?\"undefined\":at(e))&&(e=(s=e).orientation,i=s.unit||i,o=s.format||o,a=s.compress||s.compressPdf||a),i=i||\"mm\",o=o||\"a4\",e=(\"\"+(e||\"P\")).toLowerCase(),(\"\"+o).toLowerCase();var c,l,u,h,d,f,p,g,B,w,m,y=!!a&&\"function\"==typeof Uint8Array,v=s.textColor||\"0 g\",Q=s.drawColor||\"0 G\",C=s.fontSize||16,U=s.charSpace||0,b=s.R2L||!1,F=s.lineHeight||1.15,E=s.lineWidth||.200025,x=\"00000000000000000000000000000000\",H=2,I=!1,S=[],_={},T={},N=0,k=[],O=[],P=[],D=[],L=[],R=0,M=0,K=0,z={title:\"\",subject:\"\",author:\"\",keywords:\"\",creator:\"\"},q={},j=new function(e){var A={};this.subscribe=function(t,e,r){if(\"function\"!=typeof e)return!1;A.hasOwnProperty(t)||(A[t]={});var n=Math.random().toString(35);return A[t][n]=[e,!!r],n},this.unsubscribe=function(t){for(var e in A)if(A[e][t])return delete A[e][t],!0;return!1},this.publish=function(r){if(A.hasOwnProperty(r)){var n=Array.prototype.slice.call(arguments,1),i=[];for(var o in A[r]){var a=A[r][o];try{a[0].apply(e,n)}catch(r){t.console&&console.error(\"jsPDF PubSub Error\",r.message,r)}a[1]&&i.push(o)}i.length&&i.forEach(this.unsubscribe)}}}(q),X=s.hotfixes||[],V=function(t){var e,A=t.ch1,r=t.ch2,n=t.ch3,i=t.ch4,o=(t.precision,\"draw\"===t.pdfColorType?[\"G\",\"RG\",\"K\"]:[\"g\",\"rg\",\"k\"]);if(\"string\"==typeof A&&\"#\"!==A.charAt(0)){var a=new RGBColor(A);a.ok&&(A=a.toHex())}if(\"string\"==typeof A&&/^#[0-9A-Fa-f]{3}$/.test(A)&&(A=\"#\"+A[1]+A[1]+A[2]+A[2]+A[3]+A[3]),\"string\"==typeof A&&/^#[0-9A-Fa-f]{6}$/.test(A)){var s=parseInt(A.substr(1),16);A=s>>16&255,r=s>>8&255,n=255&s}if(void 0===r||void 0===i&&A===r&&r===n)if(\"string\"==typeof A)e=A+\" \"+o[0];else switch(t.precision){case 2:e=J(A/255)+\" \"+o[0];break;case 3:default:e=Z(A/255)+\" \"+o[0]}else if(void 0===i||\"object\"===(void 0===i?\"undefined\":at(i))){if(\"string\"==typeof A)e=[A,r,n,o[1]].join(\" \");else switch(t.precision){case 2:e=[J(A/255),J(r/255),J(n/255),o[1]].join(\" \");break;default:case 3:e=[Z(A/255),Z(r/255),Z(n/255),o[1]].join(\" \")}i&&0===i.a&&(e=[\"255\",\"255\",\"255\",o[1]].join(\" \"))}else if(\"string\"==typeof A)e=[A,r,n,i,o[2]].join(\" \");else switch(t.precision){case 2:e=[J(A),J(r),J(n),J(i),o[2]].join(\" \");break;case 3:default:e=[Z(A),Z(r),Z(n),Z(i),o[2]].join(\" \")}return e},G=function(t){var e=function(t){return(\"0\"+parseInt(t)).slice(-2)},A=t.getTimezoneOffset(),r=A<0?\"+\":\"-\",n=Math.floor(Math.abs(A/60)),i=Math.abs(A%60),o=[r,e(n),\"'\",e(i),\"'\"].join(\"\");return[\"D:\",t.getFullYear(),e(t.getMonth()+1),e(t.getDate()),e(t.getHours()),e(t.getMinutes()),e(t.getSeconds()),o].join(\"\")},W=function(t){var e;return void 0===(void 0===t?\"undefined\":at(t))&&(t=new Date),e=\"object\"===(void 0===t?\"undefined\":at(t))&&\"[object Date]\"===Object.prototype.toString.call(t)?G(t):/^D:(20[0-2][0-9]|203[0-7]|19[7-9][0-9])(0[0-9]|1[0-2])([0-2][0-9]|3[0-1])(0[0-9]|1[0-9]|2[0-3])(0[0-9]|[1-5][0-9])(0[0-9]|[1-5][0-9])(\\+0[0-9]|\\+1[0-4]|\\-0[0-9]|\\-1[0-1])\\'(0[0-9]|[1-5][0-9])\\'?$/.test(t)?t:G(new Date),w=e},Y=function(t){return t=t||\"12345678901234567890123456789012\".split(\"\").map(function(){return\"ABCDEF0123456789\".charAt(Math.floor(16*Math.random()))}).join(\"\"),x=t},J=function(t){return t.toFixed(2)},Z=function(t){return t.toFixed(3)},$=function(t){t=\"string\"==typeof t?t:t.toString(),I?k[h].push(t):(K+=t.length+1,D.push(t))},tt=function(){return S[++H]=K,$(H+\" 0 obj\"),H},et=function(t){$(\"stream\"),$(t),$(\"endstream\")},At=function(){!function(){for(var t in _)_.hasOwnProperty(t)&&(e=_[t],j.publish(\"putFont\",{font:e,out:$,newObject:tt}),!0!==e.isAlreadyPutted&&(e.objectNumber=tt(),$(\"<<\"),$(\"/Type /Font\"),$(\"/BaseFont /\"+e.postScriptName),$(\"/Subtype /Type1\"),\"string\"==typeof e.encoding&&$(\"/Encoding /\"+e.encoding),$(\"/FirstChar 32\"),$(\"/LastChar 255\"),$(\">>\"),$(\"endobj\")));var e}(),j.publish(\"putResources\"),S[2]=K,$(\"2 0 obj\"),$(\"<<\"),function(){for(var t in $(\"/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]\"),$(\"/Font <<\"),_)_.hasOwnProperty(t)&&$(\"/\"+t+\" \"+_[t].objectNumber+\" 0 R\");$(\">>\"),$(\"/XObject <<\"),j.publish(\"putXobjectDict\"),$(\">>\")}(),$(\">>\"),$(\"endobj\"),j.publish(\"postPutResources\")},rt=function(t,e,A){T.hasOwnProperty(e)||(T[e]={}),T[e][A]=t},nt=function(t,e,A,r){var n=\"F\"+(Object.keys(_).length+1).toString(10),i=_[n]={id:n,postScriptName:t,fontName:e,fontStyle:A,encoding:r,metadata:{}};return rt(n,e,A),j.publish(\"addFont\",i),n},it=function(t,e){return function(t,e){var A,r,n,i,o,a,s,l,u;if(n=(e=e||{}).sourceEncoding||\"Unicode\",o=e.outputEncoding,(e.autoencode||o)&&_[c].metadata&&_[c].metadata[n]&&_[c].metadata[n].encoding&&(i=_[c].metadata[n].encoding,!o&&_[c].encoding&&(o=_[c].encoding),!o&&i.codePages&&(o=i.codePages[0]),\"string\"==typeof o&&(o=i[o]),o)){for(s=!1,a=[],A=0,r=t.length;A<r;A++)(l=o[t.charCodeAt(A)])?a.push(String.fromCharCode(l)):a.push(t[A]),a[A].charCodeAt(0)>>8&&(s=!0);t=a.join(\"\")}for(A=t.length;void 0===s&&0!==A;)t.charCodeAt(A-1)>>8&&(s=!0),A--;if(!s)return t;for(a=e.noBOM?[]:[254,255],A=0,r=t.length;A<r;A++){if((u=(l=t.charCodeAt(A))>>8)>>8)throw new Error(\"Character at position \"+A+\" of string '\"+t+\"' exceeds 16bits. Cannot be encoded into UCS-2 BE\");a.push(u),a.push(l-(u<<8))}return String.fromCharCode.apply(void 0,a)}(t,e).replace(/\\\\/g,\"\\\\\\\\\").replace(/\\(/g,\"\\\\(\").replace(/\\)/g,\"\\\\)\")},ot=function(){(function(t,e){var A=\"string\"==typeof e&&e.toLowerCase();if(\"string\"==typeof t){var r=t.toLowerCase();n.hasOwnProperty(r)&&(t=n[r][0]/l,e=n[r][1]/l)}if(Array.isArray(t)&&(e=t[1],t=t[0]),A){switch(A.substr(0,1)){case\"l\":t<e&&(A=\"s\");break;case\"p\":e<t&&(A=\"s\")}\"s\"===A&&(u=t,t=e,e=u)}I=!0,k[++N]=[],P[N]={width:Number(t)||d,height:Number(e)||f},O[N]={},st(N)}).apply(this,arguments),$(J(E*l)+\" w\"),$(Q),0!==R&&$(R+\" J\"),0!==M&&$(M+\" j\"),j.publish(\"addPage\",{pageNumber:N})},st=function(t){0<t&&t<=N&&(d=P[h=t].width,f=P[t].height)},ct=function(t,e,A){var r,n=void 0;return A=A||{},t=void 0!==t?t:_[c].fontName,e=void 0!==e?e:_[c].fontStyle,r=t.toLowerCase(),void 0!==T[r]&&void 0!==T[r][e]?n=T[r][e]:void 0!==T[t]&&void 0!==T[t][e]?n=T[t][e]:!1===A.disableWarning&&console.warn(\"Unable to look up font label for font '\"+t+\"', '\"+e+\"'. Refer to getFontList() for available fonts.\"),n||A.noFallback||null==(n=T.times[e])&&(n=T.times.normal),n},lt=function(){I=!1,H=2,K=0,D=[],S=[],L=[],j.publish(\"buildDocument\"),$(\"%PDF-\"+r),$(\"%ÂºÃŸÂ¬Ã \"),function(){var e,r,n,i,o,a,s,c,u,h=[];for(s=t.adler32cs||A.API.adler32cs,y&&void 0===s&&(y=!1),e=1;e<=N;e++){if(h.push(tt()),c=(d=P[e].width)*l,u=(f=P[e].height)*l,$(\"<</Type /Page\"),$(\"/Parent 1 0 R\"),$(\"/Resources 2 0 R\"),$(\"/MediaBox [0 0 \"+J(c)+\" \"+J(u)+\"]\"),j.publish(\"putPage\",{pageNumber:e,page:k[e]}),$(\"/Contents \"+(H+1)+\" 0 R\"),$(\">>\"),$(\"endobj\"),r=k[e].join(\"\\n\"),tt(),y){for(n=[],i=r.length;i--;)n[i]=r.charCodeAt(i);a=s.from(r),(o=new Deflater(6)).append(new Uint8Array(n)),r=o.flush(),(n=new Uint8Array(r.length+6)).set(new Uint8Array([120,156])),n.set(r,2),n.set(new Uint8Array([255&a,a>>8&255,a>>16&255,a>>24&255]),r.length+2),r=String.fromCharCode.apply(null,n),$(\"<</Length \"+r.length+\" /Filter [/FlateDecode]>>\")}else $(\"<</Length \"+r.length+\">>\");et(r),$(\"endobj\")}S[1]=K,$(\"1 0 obj\"),$(\"<</Type /Pages\");var p=\"/Kids [\";for(i=0;i<N;i++)p+=h[i]+\" 0 R \";$(p+\"]\"),$(\"/Count \"+N),$(\">>\"),$(\"endobj\"),j.publish(\"postPutPages\")}(),function(){j.publish(\"putAdditionalObjects\");for(var t=0;t<L.length;t++){var e=L[t];S[e.objId]=K,$(e.objId+\" 0 obj\"),$(e.content),$(\"endobj\")}H+=L.length,j.publish(\"postPutAdditionalObjects\")}(),At(),tt(),$(\"<<\"),function(){for(var t in $(\"/Producer (jsPDF \"+A.version+\")\"),z)z.hasOwnProperty(t)&&z[t]&&$(\"/\"+t.substr(0,1).toUpperCase()+t.substr(1)+\" (\"+it(z[t])+\")\");$(\"/CreationDate (\"+w+\")\")}(),$(\">>\"),$(\"endobj\"),tt(),$(\"<<\"),function(){switch($(\"/Type /Catalog\"),$(\"/Pages 1 0 R\"),g||(g=\"fullwidth\"),g){case\"fullwidth\":$(\"/OpenAction [3 0 R /FitH null]\");break;case\"fullheight\":$(\"/OpenAction [3 0 R /FitV null]\");break;case\"fullpage\":$(\"/OpenAction [3 0 R /Fit]\");break;case\"original\":$(\"/OpenAction [3 0 R /XYZ null null 1]\");break;default:var t=\"\"+g;\"%\"===t.substr(t.length-1)&&(g=parseInt(g)/100),\"number\"==typeof g&&$(\"/OpenAction [3 0 R /XYZ null null \"+J(g)+\"]\")}switch(B||(B=\"continuous\"),B){case\"continuous\":$(\"/PageLayout /OneColumn\");break;case\"single\":$(\"/PageLayout /SinglePage\");break;case\"two\":case\"twoleft\":$(\"/PageLayout /TwoColumnLeft\");break;case\"tworight\":$(\"/PageLayout /TwoColumnRight\")}p&&$(\"/PageMode /\"+p),j.publish(\"putCatalog\")}(),$(\">>\"),$(\"endobj\");var e,n=K,i=\"0000000000\";for($(\"xref\"),$(\"0 \"+(H+1)),$(i+\" 65535 f \"),e=1;e<=H;e++){var o=S[e];$(\"function\"==typeof o?(i+S[e]()).slice(-10)+\" 00000 n \":(i+S[e]).slice(-10)+\" 00000 n \")}return $(\"trailer\"),$(\"<<\"),$(\"/Size \"+(H+1)),$(\"/Root \"+H+\" 0 R\"),$(\"/Info \"+(H-1)+\" 0 R\"),$(\"/ID [ <\"+x+\"> <\"+x+\"> ]\"),$(\">>\"),$(\"startxref\"),$(\"\"+n),$(\"%%EOF\"),I=!0,D.join(\"\\n\")},ut=function(t){var e=\"S\";return\"F\"===t?e=\"f\":\"FD\"===t||\"DF\"===t?e=\"B\":\"f\"!==t&&\"f*\"!==t&&\"B\"!==t&&\"B*\"!==t||(e=t),e},ht=function(){for(var t=lt(),e=t.length,A=new ArrayBuffer(e),r=new Uint8Array(A);e--;)r[e]=t.charCodeAt(e);return A},dt=function(){return new Blob([ht()],{type:\"application/pdf\"})},ft=((m=function(e,A){var r=\"dataur\"===(\"\"+e).substr(0,6)?\"data:application/pdf;base64,\"+btoa(lt()):0;switch(e){case void 0:return lt();case\"save\":if(\"object\"===(\"undefined\"==typeof navigator?\"undefined\":at(navigator))&&navigator.getUserMedia&&(void 0===t.URL||void 0===t.URL.createObjectURL))return q.output(\"dataurlnewwindow\");bt(dt(),A),\"function\"==typeof bt.unload&&t.setTimeout&&setTimeout(bt.unload,911);break;case\"arraybuffer\":return ht();case\"blob\":return dt();case\"bloburi\":case\"bloburl\":return t.URL&&t.URL.createObjectURL(dt())||void 0;case\"datauristring\":case\"dataurlstring\":return r;case\"dataurlnewwindow\":var n=t.open(r);if(n||\"undefined\"==typeof safari)return n;case\"datauri\":case\"dataurl\":return t.document.location.href=r;default:throw new Error('Output type \"'+e+'\" is not supported.')}}).foo=function(){try{return m.apply(this,arguments)}catch(r){var e=r.stack||\"\";~e.indexOf(\" at \")&&(e=e.split(\" at \")[1]);var A=\"Error in function \"+e.split(\"\\n\")[0].split(\"<\")[0]+\": \"+r.message;if(!t.console)throw new Error(A);t.console.error(A,r),t.alert&&alert(A)}},(m.foo.bar=m).foo),pt=function(t){return!0===Array.isArray(X)&&-1<X.indexOf(t)};switch(i){case\"pt\":l=1;break;case\"mm\":l=72/25.4;break;case\"cm\":l=72/2.54;break;case\"in\":l=72;break;case\"px\":l=1==pt(\"px_scaling\")?.75:96/72;break;case\"pc\":case\"em\":l=12;break;case\"ex\":l=6;break;default:throw\"Invalid unit: \"+i}for(var gt in W(),Y(),q.internal={pdfEscape:it,getStyle:ut,getFont:function(){return _[ct.apply(q,arguments)]},getFontSize:function(){return C},getCharSpace:function(){return U},getTextColor:function(){var t=v.split(\" \");if(2===t.length&&\"g\"===t[1]){var e=parseFloat(t[0]);t=[e,e,e,\"r\"]}for(var A=\"#\",r=0;r<3;r++)A+=(\"0\"+Math.floor(255*parseFloat(t[r])).toString(16)).slice(-2);return A},getLineHeight:function(){return C*F},write:function(t){$(1===arguments.length?t:Array.prototype.join.call(arguments,\" \"))},getCoordinateString:function(t){return J(t*l)},getVerticalCoordinateString:function(t){return J((f-t)*l)},collections:{},newObject:tt,newAdditionalObject:function(){var t=2*k.length+1,e={objId:t+=L.length,content:\"\"};return L.push(e),e},newObjectDeferred:function(){return S[++H]=function(){return K},H},newObjectDeferredBegin:function(t){S[t]=K},putStream:et,events:j,scaleFactor:l,pageSize:{getWidth:function(){return d},getHeight:function(){return f}},output:function(t,e){return ft(t,e)},getNumberOfPages:function(){return k.length-1},pages:k,out:$,f2:J,getPageInfo:function(t){return{objId:2*(t-1)+3,pageNumber:t,pageContext:O[t]}},getCurrentPageInfo:function(){return{objId:2*(h-1)+3,pageNumber:h,pageContext:O[h]}},getPDFVersion:function(){return r},hasHotfix:pt},q.addPage=function(){return ot.apply(this,arguments),this},q.setPage=function(){return st.apply(this,arguments),this},q.insertPage=function(t){return this.addPage(),this.movePage(h,t),this},q.movePage=function(t,e){if(e<t){for(var A=k[t],r=P[t],n=O[t],i=t;e<i;i--)k[i]=k[i-1],P[i]=P[i-1],O[i]=O[i-1];k[e]=A,P[e]=r,O[e]=n,this.setPage(e)}else if(t<e){for(A=k[t],r=P[t],n=O[t],i=t;i<e;i++)k[i]=k[i+1],P[i]=P[i+1],O[i]=O[i+1];k[e]=A,P[e]=r,O[e]=n,this.setPage(e)}return this},q.deletePage=function(){return function(t){0<t&&t<=N&&(k.splice(t,1),P.splice(t,1),--N<h&&(h=N),this.setPage(h))}.apply(this,arguments),this},q.setCreationDate=function(t){return W(t),this},q.getCreationDate=function(t){return function(t){var e=w;return\"jsDate\"===t&&(e=function(t){var e=parseInt(t.substr(2,4),10),A=parseInt(t.substr(6,2),10)-1,r=parseInt(t.substr(8,2),10),n=parseInt(t.substr(10,2),10),i=parseInt(t.substr(12,2),10),o=parseInt(t.substr(14,2),10);return parseInt(t.substr(16,2),10),parseInt(t.substr(20,2),10),new Date(e,A,r,n,i,o,0)}(w)),e}(t)},q.setFileId=function(t){return Y(t),this},q.getFileId=function(){return x},q.setDisplayMode=function(t,e,A){if(g=t,B=e,-1==[void 0,null,\"UseNone\",\"UseOutlines\",\"UseThumbs\",\"FullScreen\"].indexOf(p=A))throw new Error('Page mode must be one of UseNone, UseOutlines, UseThumbs, or FullScreen. \"'+A+'\" is not recognized.');return this},q.text=function(t,e,A,r){function n(t){for(var e,A=t.concat(),r=[],n=A.length;n--;)\"string\"==typeof(e=A.shift())?r.push(e):\"[object Array]\"===Object.prototype.toString.call(t)&&1===e.length?r.push(e[0]):r.push([e[0],e[1],e[2]]);return r}function i(t,e){var A;if(\"string\"==typeof t)A=e(t)[0];else if(\"[object Array]\"===Object.prototype.toString.call(t)){for(var r,n,i=t.concat(),o=[],a=i.length;a--;)\"string\"==typeof(r=i.shift())?o.push(e(r)[0]):\"[object Array]\"===Object.prototype.toString.call(r)&&\"string\"===r[0]&&(n=e(r[0],r[1],r[2]),o.push([n[0],n[1],n[2]]));A=o}return A}var o,a,s=\"\",l=F,u=this;\"number\"==typeof t&&(a=A,A=e,e=t,t=a);var h=r,d=arguments[4],f=arguments[5];\"object\"===(void 0===h?\"undefined\":at(h))&&null!==h||(\"string\"==typeof d&&(f=d,d=null),\"string\"==typeof h&&(f=h,h=null),\"number\"==typeof h&&(d=h,h=null),r={flags:h,angle:d,align:f});var p=!1,g=!0;if(\"string\"==typeof t)p=!0;else if(\"[object Array]\"===Object.prototype.toString.call(t)){for(var B,w=t.concat(),m=[],y=w.length;y--;)(\"string\"!=typeof(B=w.shift())||\"[object Array]\"===Object.prototype.toString.call(B)&&\"string\"!=typeof B[0])&&(g=!1);p=g}if(!1===p)throw new Error('Type of text must be string or Array. \"'+t+'\" is not recognized.');var Q=_[c].encoding;\"WinAnsiEncoding\"!==Q&&\"StandardEncoding\"!==Q||(t=i(t,function(t,e,A){return[(n=t,n=n.split(\"\\t\").join(Array(r.TabLen||9).join(\" \")),it(n,h)),e,A];var n})),\"string\"==typeof t&&(t=t.match(/[\\r?\\n]/)?t.split(/\\r\\n|\\r|\\n/g):[t]),0<(z=r.maxWidth||0)&&(\"string\"==typeof t?t=u.splitTextToSize(t,z):\"[object Array]\"===Object.prototype.toString.call(t)&&(t=u.splitTextToSize(t.join(\" \"),z)));var E={text:t,x:e,y:A,options:r,mutex:{pdfEscape:it,activeFontKey:c,fonts:_,activeFontSize:C}};j.publish(\"preProcessText\",E),t=E.text,d=(r=E.options).angle;var x=u.internal.scaleFactor,H=(u.internal.pageSize.getHeight(),[]);if(d){d*=Math.PI/180;var I=Math.cos(d),S=Math.sin(d),T=function(t){return t.toFixed(2)};H=[T(I),T(S),T(-1*S),T(I)]}void 0!==(K=r.charSpace)&&(s+=K+\" Tc\\n\"),r.lang;var N=-1,k=r.renderingMode||r.stroke,O=u.internal.getCurrentPageInfo().pageContext;switch(k){case 0:case!1:case\"fill\":N=0;break;case 1:case!0:case\"stroke\":N=1;break;case 2:case\"fillThenStroke\":N=2;break;case 3:case\"invisible\":N=3;break;case 4:case\"fillAndAddForClipping\":N=4;break;case 5:case\"strokeAndAddPathForClipping\":N=5;break;case 6:case\"fillThenStrokeAndAddToPathForClipping\":N=6;break;case 7:case\"addToPathForClipping\":N=7}var P=O.usedRenderingMode||-1;-1!==N?s+=N+\" Tr\\n\":-1!==P&&(s+=\"0 Tr\\n\"),-1!==N&&(O.usedRenderingMode=N),f=r.align||\"left\";var D=C*l,L=u.internal.pageSize.getHeight(),R=u.internal.pageSize.getWidth(),M=(x=u.internal.scaleFactor,_[c]),K=r.charSpace||U,z=r.maxWidth||0,q=(h={},[]);if(\"[object Array]\"===Object.prototype.toString.call(t)){var X,V;m=n(t),\"left\"!==f&&(V=m.map(function(t){return u.getStringUnitWidth(t,{font:M,charSpace:K,fontSize:C})*C/x}));Math.max.apply(Math,V);var G,W=0;if(\"right\"===f){e-=V[0],t=[];var Y=0;for(y=m.length;Y<y;Y++)V[Y],0===Y?(G=e*x,X=(L-A)*x):(G=(W-V[Y])*x,X=-D),t.push([m[Y],G,X]),W=V[Y]}else if(\"center\"===f)for(e-=V[0]/2,t=[],Y=0,y=m.length;Y<y;Y++)V[Y],0===Y?(G=e*x,X=(L-A)*x):(G=(W-V[Y])/2*x,X=-D),t.push([m[Y],G,X]),W=V[Y];else if(\"left\"===f)for(t=[],Y=0,y=m.length;Y<y;Y++)X=0===Y?(L-A)*x:-D,G=0===Y?e*x:0,t.push(m[Y]);else{if(\"justify\"!==f)throw new Error('Unrecognized alignment option, use \"left\", \"center\", \"right\" or \"justify\".');for(t=[],z=0!==z?z:R,Y=0,y=m.length;Y<y;Y++)X=0===Y?(L-A)*x:-D,G=0===Y?e*x:0,Y<y-1&&q.push(((z-V[Y])/(m[Y].split(\" \").length-1)*x).toFixed(2)),t.push([m[Y],G,X])}}!0===(\"boolean\"==typeof r.R2L?r.R2L:b)&&(t=i(t,function(t,e,A){return[t.split(\"\").reverse().join(\"\"),e,A]})),E={text:t,x:e,y:A,options:r,mutex:{pdfEscape:it,activeFontKey:c,fonts:_,activeFontSize:C}},j.publish(\"postProcessText\",E),t=E.text,o=E.mutex.isHex,m=n(t),t=[];var J,Z,tt,et=0,At=(y=m.length,\"\");for(Y=0;Y<y;Y++)At=\"\",\"[object Array]\"!==Object.prototype.toString.call(m[Y])?(J=parseFloat(e*x).toFixed(2),Z=parseFloat((L-A)*x).toFixed(2),tt=(o?\"<\":\"(\")+m[Y]+(o?\">\":\")\")):\"[object Array]\"===Object.prototype.toString.call(m[Y])&&(J=parseFloat(m[Y][1]).toFixed(2),Z=parseFloat(m[Y][2]).toFixed(2),tt=(o?\"<\":\"(\")+m[Y][0]+(o?\">\":\")\"),et=1),void 0!==q&&void 0!==q[Y]&&(At=q[Y]+\" Tw\\n\"),0!==H.length&&0===Y?t.push(At+H.join(\" \")+\" \"+J+\" \"+Z+\" Tm\\n\"+tt):1===et||0===et&&0===Y?t.push(At+J+\" \"+Z+\" Td\\n\"+tt):t.push(At+tt);t=0===et?t.join(\" Tj\\nT* \"):t.join(\" Tj\\n\"),t+=\" Tj\\n\";var rt=\"BT\\n/\"+c+\" \"+C+\" Tf\\n\"+(C*l).toFixed(2)+\" TL\\n\"+v+\"\\n\";return rt+=s,rt+=t,$(rt+=\"ET\"),u},q.lstext=function(t,e,A,r){console.warn(\"jsPDF.lstext is deprecated\");for(var n=0,i=t.length;n<i;n++,e+=r)this.text(t[n],e,A);return this},q.line=function(t,e,A,r){return this.lines([[A-t,r-e]],t,e)},q.clip=function(){$(\"W\"),$(\"S\")},q.clip_fixed=function(t){$(\"evenodd\"===t?\"W*\":\"W\"),$(\"n\")},q.lines=function(t,e,A,r,n,i){var o,a,s,c,h,d,p,g,B,w,m;for(\"number\"==typeof t&&(u=A,A=e,e=t,t=u),r=r||[1,1],$(Z(e*l)+\" \"+Z((f-A)*l)+\" m \"),o=r[0],a=r[1],c=t.length,w=e,m=A,s=0;s<c;s++)2===(h=t[s]).length?(w=h[0]*o+w,m=h[1]*a+m,$(Z(w*l)+\" \"+Z((f-m)*l)+\" l\")):(d=h[0]*o+w,p=h[1]*a+m,g=h[2]*o+w,B=h[3]*a+m,w=h[4]*o+w,m=h[5]*a+m,$(Z(d*l)+\" \"+Z((f-p)*l)+\" \"+Z(g*l)+\" \"+Z((f-B)*l)+\" \"+Z(w*l)+\" \"+Z((f-m)*l)+\" c\"));return i&&$(\" h\"),null!==n&&$(ut(n)),this},q.rect=function(t,e,A,r,n){return ut(n),$([J(t*l),J((f-e)*l),J(A*l),J(-r*l),\"re\"].join(\" \")),null!==n&&$(ut(n)),this},q.triangle=function(t,e,A,r,n,i,o){return this.lines([[A-t,r-e],[n-A,i-r],[t-n,e-i]],t,e,[1,1],o,!0),this},q.roundedRect=function(t,e,A,r,n,i,o){var a=4/3*(Math.SQRT2-1);return this.lines([[A-2*n,0],[n*a,0,n,i-i*a,n,i],[0,r-2*i],[0,i*a,-n*a,i,-n,i],[2*n-A,0],[-n*a,0,-n,-i*a,-n,-i],[0,2*i-r],[0,-i*a,n*a,-i,n,-i]],t+n,e,[1,1],o),this},q.ellipse=function(t,e,A,r,n){var i=4/3*(Math.SQRT2-1)*A,o=4/3*(Math.SQRT2-1)*r;return $([J((t+A)*l),J((f-e)*l),\"m\",J((t+A)*l),J((f-(e-o))*l),J((t+i)*l),J((f-(e-r))*l),J(t*l),J((f-(e-r))*l),\"c\"].join(\" \")),$([J((t-i)*l),J((f-(e-r))*l),J((t-A)*l),J((f-(e-o))*l),J((t-A)*l),J((f-e)*l),\"c\"].join(\" \")),$([J((t-A)*l),J((f-(e+o))*l),J((t-i)*l),J((f-(e+r))*l),J(t*l),J((f-(e+r))*l),\"c\"].join(\" \")),$([J((t+i)*l),J((f-(e+r))*l),J((t+A)*l),J((f-(e+o))*l),J((t+A)*l),J((f-e)*l),\"c\"].join(\" \")),null!==n&&$(ut(n)),this},q.circle=function(t,e,A,r){return this.ellipse(t,e,A,A,r)},q.setProperties=function(t){for(var e in z)z.hasOwnProperty(e)&&t[e]&&(z[e]=t[e]);return this},q.setFontSize=function(t){return C=t,this},q.setFont=function(t,e){return c=ct(t,e),this},q.setFontStyle=q.setFontType=function(t){return c=ct(void 0,t),this},q.getFontList=function(){var t,e,A,r={};for(t in T)if(T.hasOwnProperty(t))for(e in r[t]=A=[],T[t])T[t].hasOwnProperty(e)&&A.push(e);return r},q.addFont=function(t,e,A,r){nt(t,e,A,r=r||\"Identity-H\")},q.setLineWidth=function(t){return $((t*l).toFixed(2)+\" w\"),this},q.setDrawColor=function(t,e,A,r){return $(V({ch1:t,ch2:e,ch3:A,ch4:r,pdfColorType:\"draw\",precision:2})),this},q.setFillColor=function(t,e,A,r){return $(V({ch1:t,ch2:e,ch3:A,ch4:r,pdfColorType:\"fill\",precision:2})),this},q.setTextColor=function(t,e,A,r){return v=V({ch1:t,ch2:e,ch3:A,ch4:r,pdfColorType:\"text\",precision:3}),this},q.setCharSpace=function(t){return U=t,this},q.setR2L=function(t){return b=t,this},q.CapJoinStyles={0:0,butt:0,but:0,miter:0,1:1,round:1,rounded:1,circle:1,2:2,projecting:2,project:2,square:2,bevel:2},q.setLineCap=function(t){var e=this.CapJoinStyles[t];if(void 0===e)throw new Error(\"Line cap style of '\"+t+\"' is not recognized. See or extend .CapJoinStyles property for valid styles\");return $((R=e)+\" J\"),this},q.setLineJoin=function(t){var e=this.CapJoinStyles[t];if(void 0===e)throw new Error(\"Line join style of '\"+t+\"' is not recognized. See or extend .CapJoinStyles property for valid styles\");return $((M=e)+\" j\"),this},q.output=ft,q.save=function(t){q.output(\"save\",t)},A.API)A.API.hasOwnProperty(gt)&&(\"events\"===gt&&A.API.events.length?function(t,e){var A,r,n;for(n=e.length-1;-1!==n;n--)A=e[n][0],r=e[n][1],t.subscribe.apply(t,[A].concat(\"function\"==typeof r?[r]:r))}(j,A.API.events):q[gt]=A.API[gt]);return function(){for(var t=\"helvetica\",e=\"times\",A=\"courier\",r=\"normal\",n=\"bold\",i=\"italic\",o=\"bolditalic\",a=[[\"Helvetica\",t,r,\"WinAnsiEncoding\"],[\"Helvetica-Bold\",t,n,\"WinAnsiEncoding\"],[\"Helvetica-Oblique\",t,i,\"WinAnsiEncoding\"],[\"Helvetica-BoldOblique\",t,o,\"WinAnsiEncoding\"],[\"Courier\",A,r,\"WinAnsiEncoding\"],[\"Courier-Bold\",A,n,\"WinAnsiEncoding\"],[\"Courier-Oblique\",A,i,\"WinAnsiEncoding\"],[\"Courier-BoldOblique\",A,o,\"WinAnsiEncoding\"],[\"Times-Roman\",e,r,\"WinAnsiEncoding\"],[\"Times-Bold\",e,n,\"WinAnsiEncoding\"],[\"Times-Italic\",e,i,\"WinAnsiEncoding\"],[\"Times-BoldItalic\",e,o,\"WinAnsiEncoding\"],[\"ZapfDingbats\",\"zapfdingbats\",r,null],[\"Symbol\",\"symbol\",r,null]],s=0,c=a.length;s<c;s++){var l=nt(a[s][0],a[s][1],a[s][2],a[s][3]),u=a[s][0].split(\"-\");rt(l,u[0],u[1]||\"\")}j.publish(\"addFonts\",{fonts:_,dictionary:T})}(),c=\"F1\",ot(o,e),j.publish(\"initialized\"),q}var r=\"1.3\",n={a0:[2383.94,3370.39],a1:[1683.78,2383.94],a2:[1190.55,1683.78],a3:[841.89,1190.55],a4:[595.28,841.89],a5:[419.53,595.28],a6:[297.64,419.53],a7:[209.76,297.64],a8:[147.4,209.76],a9:[104.88,147.4],a10:[73.7,104.88],b0:[2834.65,4008.19],b1:[2004.09,2834.65],b2:[1417.32,2004.09],b3:[1000.63,1417.32],b4:[708.66,1000.63],b5:[498.9,708.66],b6:[354.33,498.9],b7:[249.45,354.33],b8:[175.75,249.45],b9:[124.72,175.75],b10:[87.87,124.72],c0:[2599.37,3676.54],c1:[1836.85,2599.37],c2:[1298.27,1836.85],c3:[918.43,1298.27],c4:[649.13,918.43],c5:[459.21,649.13],c6:[323.15,459.21],c7:[229.61,323.15],c8:[161.57,229.61],c9:[113.39,161.57],c10:[79.37,113.39],dl:[311.81,623.62],letter:[612,792],\"government-letter\":[576,756],legal:[612,1008],\"junior-legal\":[576,360],ledger:[1224,792],tabloid:[792,1224],\"credit-card\":[153,243]};return A.API={events:[]},A.version=\"0.0.0\",e.exports?(e.exports=A,e.exports.jsPDF=A):t.jsPDF=A,A}(\"undefined\"!=typeof self&&self||\"undefined\"!=typeof window&&window||void 0!==r&&r||Function('return typeof this === \"object\" && this.content')()||Function(\"return this\")());!function(t,e){var A,r,n=1,i=function(t,e){t.prototype=Object.create(e.prototype),t.prototype.constructor=t},o=function(t){return t*(n/1)},a=function(t){var e=new F,A=R.internal.getHeight(t)||0,r=R.internal.getWidth(t)||0;return e.BBox=[0,0,r.toFixed(2),A.toFixed(2)],e},s=function(t,e,A){t=t||0;var r=1;return r<<=e-1,1==(A=A||1)?t|=r:t&=~r,t},c=function(t,e,A){return A=A||1.3,t=t||0,1==e.readOnly&&(t=s(t,1)),1==e.required&&(t=s(t,2)),1==e.noExport&&(t=s(t,3)),1==e.multiline&&(t=s(t,13)),e.password&&(t=s(t,14)),e.noToggleToOff&&(t=s(t,15)),e.radio&&(t=s(t,16)),e.pushbutton&&(t=s(t,17)),e.combo&&(t=s(t,18)),e.edit&&(t=s(t,19)),e.sort&&(t=s(t,20)),e.fileSelect&&1.4<=A&&(t=s(t,21)),e.multiSelect&&1.4<=A&&(t=s(t,22)),e.doNotSpellCheck&&1.4<=A&&(t=s(t,23)),1==e.doNotScroll&&1.4<=A&&(t=s(t,24)),e.richText&&1.4<=A&&(t=s(t,25)),t},l=function(t){var e=t[0],A=t[1],n=t[2],i=t[3],a={};return Array.isArray(e)?(e[0]=o(e[0]),e[1]=o(e[1]),e[2]=o(e[2]),e[3]=o(e[3])):(e=o(e),A=o(A),n=o(n),i=o(i)),a.lowerLeft_X=e||0,a.lowerLeft_Y=o(r)-A-i||0,a.upperRight_X=e+n||0,a.upperRight_Y=o(r)-A||0,[a.lowerLeft_X.toFixed(2),a.lowerLeft_Y.toFixed(2),a.upperRight_X.toFixed(2),a.upperRight_Y.toFixed(2)]},u=function(t){if(t.appearanceStreamContent)return t.appearanceStreamContent;if(t.V||t.DV){var e=[],A=t.V||t.DV,r=h(t,A);e.push(\"/Tx BMC\"),e.push(\"q\"),e.push(\"/F1 \"+r.fontSize.toFixed(2)+\" Tf\"),e.push(\"1 0 0 1 0 0 Tm\"),e.push(\"BT\"),e.push(r.text),e.push(\"ET\"),e.push(\"Q\"),e.push(\"EMC\");var n=new a(t);return n.stream=e.join(\"\\n\"),n}},h=function(t,e,A,r){r=r||12,A=A||\"helvetica\";var n={text:\"\",fontSize:\"\"},i=(e=\")\"==(e=\"(\"==e.substr(0,1)?e.substr(1):e).substr(e.length-1)?e.substr(0,e.length-1):e).split(\" \"),o=r,a=R.internal.getHeight(t)||0;a=a<0?-a:a;var s=R.internal.getWidth(t)||0;s=s<0?-s:s;var c=function(t,e,r){if(t+1<i.length){var n=e+\" \"+i[t+1];return d(n,r+\"px\",A).width<=s-4}return!1};o++;t:for(;;){e=\"\";var l=d(\"3\",--o+\"px\",A).height,u=t.multiline?a-o:(a-l)/2,h=-2,f=u+=2,p=0,g=0,B=0;if(o<=0){o=12,e=\"(...) Tj\\n\",e+=\"% Width of Text: \"+d(e,\"1px\").width+\", FieldWidth:\"+s+\"\\n\";break}B=d(i[0]+\" \",o+\"px\",A).width;var w=\"\",m=0;for(var y in i){w=\" \"==(w+=i[y]+\" \").substr(w.length-1)?w.substr(0,w.length-1):w;var v=parseInt(y);B=d(w+\" \",o+\"px\",A).width;var Q=c(v,w,o),C=y>=i.length-1;if(!Q||C){if(Q||C){if(C)g=v;else if(t.multiline&&a<(l+2)*(m+2)+2)continue t}else{if(!t.multiline)continue t;if(a<(l+2)*(m+2)+2)continue t;g=v}for(var U=\"\",b=p;b<=g;b++)U+=i[b]+\" \";switch(U=\" \"==U.substr(U.length-1)?U.substr(0,U.length-1):U,B=d(U,o+\"px\",A).width,t.Q){case 2:h=s-B-2;break;case 1:h=(s-B)/2;break;case 0:default:h=2}e+=h.toFixed(2)+\" \"+f.toFixed(2)+\" Td\\n\",e+=\"(\"+U+\") Tj\\n\",e+=-h.toFixed(2)+\" 0 Td\\n\",f=-(o+2),B=0,p=g+1,m++,w=\"\"}else w+=\" \"}break}return n.text=e,n.fontSize=o,n},d=function(t,e,r){r=r||\"helvetica\";var n=A.internal.getFont(r),i=A.getStringUnitWidth(t,{font:n,fontSize:parseFloat(e),charSpace:0})*parseFloat(e);return{height:A.getStringUnitWidth(\"3\",{font:n,fontSize:parseFloat(e),charSpace:0})*parseFloat(e)*1.5,width:i}},f={fields:[],xForms:[],acroFormDictionaryRoot:null,printedOut:!1,internal:null,isInitialized:!1},p=function(){for(var t in A.internal.acroformPlugin.acroFormDictionaryRoot.Fields){var e=A.internal.acroformPlugin.acroFormDictionaryRoot.Fields[t];e.hasAnnotation&&B.call(A,e)}},g=function(t){A.internal.acroformPlugin.printedOut&&(A.internal.acroformPlugin.printedOut=!1,A.internal.acroformPlugin.acroFormDictionaryRoot=null),A.internal.acroformPlugin.acroFormDictionaryRoot||Q.call(A),A.internal.acroformPlugin.acroFormDictionaryRoot.Fields.push(t)},B=function(t){var e={type:\"reference\",object:t};A.annotationPlugin.annotations[A.internal.getPageInfo(t.page).pageNumber].push(e)},w=function(){void 0!==A.internal.acroformPlugin.acroFormDictionaryRoot?A.internal.write(\"/AcroForm \"+A.internal.acroformPlugin.acroFormDictionaryRoot.objId+\" 0 R\"):console.log(\"Root missing...\")},m=function(){A.internal.events.unsubscribe(A.internal.acroformPlugin.acroFormDictionaryRoot._eventID),delete A.internal.acroformPlugin.acroFormDictionaryRoot._eventID,A.internal.acroformPlugin.printedOut=!0},y=function(t){var e=!t;t||(A.internal.newObjectDeferredBegin(A.internal.acroformPlugin.acroFormDictionaryRoot.objId),A.internal.out(A.internal.acroformPlugin.acroFormDictionaryRoot.getString())),t=t||A.internal.acroformPlugin.acroFormDictionaryRoot.Kids;for(var r in t){var n=t[r],i=n.Rect;n.Rect&&(n.Rect=l.call(this,n.Rect)),A.internal.newObjectDeferredBegin(n.objId);var o=n.objId+\" 0 obj\\n<<\\n\";if(\"object\"===(void 0===n?\"undefined\":at(n))&&\"function\"==typeof n.getContent&&(o+=n.getContent()),n.Rect=i,n.hasAppearanceStream&&!n.appearanceStreamContent){var a=u.call(this,n);o+=\"/AP << /N \"+a+\" >>\\n\",A.internal.acroformPlugin.xForms.push(a)}if(n.appearanceStreamContent){for(var s in o+=\"/AP << \",n.appearanceStreamContent){var c=n.appearanceStreamContent[s];if(o+=\"/\"+s+\" \",o+=\"<< \",1<=Object.keys(c).length||Array.isArray(c))for(var r in c){var h;\"function\"==typeof(h=c[r])&&(h=h.call(this,n)),o+=\"/\"+r+\" \"+h+\" \",0<=A.internal.acroformPlugin.xForms.indexOf(h)||A.internal.acroformPlugin.xForms.push(h)}else\"function\"==typeof(h=c)&&(h=h.call(this,n)),o+=\"/\"+r+\" \"+h+\" \\n\",0<=A.internal.acroformPlugin.xForms.indexOf(h)||A.internal.acroformPlugin.xForms.push(h);o+=\" >>\\n\"}o+=\">>\\n\"}o+=\">>\\nendobj\\n\",A.internal.out(o)}e&&v.call(this,A.internal.acroformPlugin.xForms)},v=function(t){for(var e in t){var r=e,n=t[e];A.internal.newObjectDeferredBegin(n&&n.objId);var i=\"\";\"object\"===(void 0===n?\"undefined\":at(n))&&\"function\"==typeof n.getString&&(i=n.getString()),A.internal.out(i),delete t[r]}},Q=function(){if(void 0!==this.internal&&(void 0===this.internal.acroformPlugin||!1===this.internal.acroformPlugin.isInitialized)){if(A=this,x.FieldNum=0,this.internal.acroformPlugin=JSON.parse(JSON.stringify(f)),this.internal.acroformPlugin.acroFormDictionaryRoot)throw new Error(\"Exception while creating AcroformDictionary\");n=A.internal.scaleFactor,r=A.internal.pageSize.getHeight(),A.internal.acroformPlugin.acroFormDictionaryRoot=new E,A.internal.acroformPlugin.acroFormDictionaryRoot._eventID=A.internal.events.subscribe(\"postPutResources\",m),A.internal.events.subscribe(\"buildDocument\",p),A.internal.events.subscribe(\"putCatalog\",w),A.internal.events.subscribe(\"postPutPages\",y),A.internal.acroformPlugin.isInitialized=!0}},C=function(t){if(Array.isArray(t)){var e=\" [\";for(var A in t)e+=t[A].toString(),e+=A<t.length-1?\" \":\"\";return e+=\"]\"}},U=function(t){return 0!==(t=t||\"\").indexOf(\"(\")&&(t=\"(\"+t),\")\"!=t.substring(t.length-1)&&(t+=\")\"),t},b=function(){var t;Object.defineProperty(this,\"objId\",{get:function(){return t||(t=A.internal.newObjectDeferred()),t||console.log(\"Couldn't create Object ID\"),t},configurable:!1})};b.prototype.toString=function(){return this.objId+\" 0 R\"},b.prototype.getString=function(){var t=this.objId+\" 0 obj\\n<<\";return t+=this.getContent()+\">>\\n\",this.stream&&(t+=\"stream\\n\",t+=this.stream,t+=\"\\nendstream\\n\"),t+=\"endobj\\n\"},b.prototype.getContent=function(){var t=\"\";return t+=function(t){var e=\"\",A=Object.keys(t).filter(function(t){return\"content\"!=t&&\"appearanceStreamContent\"!=t&&\"_\"!=t.substring(0,1)});for(var r in A){var n=A[r],i=t[n];i&&(Array.isArray(i)?e+=\"/\"+n+\" \"+C(i)+\"\\n\":e+=i instanceof b?\"/\"+n+\" \"+i.objId+\" 0 R\\n\":\"/\"+n+\" \"+i+\"\\n\")}return e}(this)};var F=function(){var t;b.call(this),this.Type=\"/XObject\",this.Subtype=\"/Form\",this.FormType=1,this.BBox,this.Matrix,this.Resources=\"2 0 R\",this.PieceInfo,Object.defineProperty(this,\"Length\",{enumerable:!0,get:function(){return void 0!==t?t.length:0}}),Object.defineProperty(this,\"stream\",{enumerable:!1,set:function(e){t=e.trim()},get:function(){return t||null}})};i(F,b);var E=function(){b.call(this);var t=[];Object.defineProperty(this,\"Kids\",{enumerable:!1,configurable:!0,get:function(){return 0<t.length?t:void 0}}),Object.defineProperty(this,\"Fields\",{enumerable:!0,configurable:!0,get:function(){return t}}),this.DA};i(E,b);var x=function t(){var e;b.call(this),Object.defineProperty(this,\"Rect\",{enumerable:!0,configurable:!1,get:function(){if(e)return e},set:function(t){e=t}});var A,r,n,i,o=\"\";Object.defineProperty(this,\"FT\",{enumerable:!0,set:function(t){o=t},get:function(){return o}}),Object.defineProperty(this,\"T\",{enumerable:!0,configurable:!1,set:function(t){A=t},get:function(){if(!A||A.length<1){if(this instanceof O)return;return\"(FieldObject\"+t.FieldNum+++\")\"}return\"(\"==A.substring(0,1)&&A.substring(A.length-1)?A:\"(\"+A+\")\"}}),Object.defineProperty(this,\"DA\",{enumerable:!0,get:function(){if(r)return\"(\"+r+\")\"},set:function(t){r=t}}),Object.defineProperty(this,\"DV\",{enumerable:!0,configurable:!0,get:function(){if(n)return n},set:function(t){n=t}}),Object.defineProperty(this,\"V\",{enumerable:!0,configurable:!0,get:function(){if(i)return i},set:function(t){i=t}}),Object.defineProperty(this,\"Type\",{enumerable:!0,get:function(){return this.hasAnnotation?\"/Annot\":null}}),Object.defineProperty(this,\"Subtype\",{enumerable:!0,get:function(){return this.hasAnnotation?\"/Widget\":null}}),this.BG,Object.defineProperty(this,\"hasAnnotation\",{enumerable:!1,get:function(){return!!(this.Rect||this.BC||this.BG)}}),Object.defineProperty(this,\"hasAppearanceStream\",{enumerable:!1,configurable:!0,writable:!0}),Object.defineProperty(this,\"page\",{enumerable:!1,configurable:!0,writable:!0})};i(x,b);var H=function(){x.call(this),this.FT=\"/Ch\",this.Opt=[],this.V=\"()\",this.TI=0;var t=!1;Object.defineProperty(this,\"combo\",{enumerable:!1,get:function(){return t},set:function(e){t=e}}),Object.defineProperty(this,\"edit\",{enumerable:!0,set:function(t){1==t?(this._edit=!0,this.combo=!0):this._edit=!1},get:function(){return!!this._edit&&this._edit},configurable:!1}),this.hasAppearanceStream=!0};i(H,x);var I=function(){H.call(this),this.combo=!1};i(I,H);var S=function(){I.call(this),this.combo=!0};i(S,I);var _=function(){S.call(this),this.edit=!0};i(_,S);var T=function(){x.call(this),this.FT=\"/Btn\"};i(T,x);var N=function(){T.call(this);var t=!0;Object.defineProperty(this,\"pushbutton\",{enumerable:!1,get:function(){return t},set:function(e){t=e}})};i(N,T);var k=function(){T.call(this);var t=!0;Object.defineProperty(this,\"radio\",{enumerable:!1,get:function(){return t},set:function(e){t=e}});var e,A=[];Object.defineProperty(this,\"Kids\",{enumerable:!0,get:function(){if(0<A.length)return A}}),Object.defineProperty(this,\"__Kids\",{get:function(){return A}}),Object.defineProperty(this,\"noToggleToOff\",{enumerable:!1,get:function(){return e},set:function(t){e=t}})};i(k,T);var O=function(t,e){x.call(this),this.Parent=t,this._AppearanceType=R.RadioButton.Circle,this.appearanceStreamContent=this._AppearanceType.createAppearanceStream(e),this.F=s(this.F,3,1),this.MK=this._AppearanceType.createMK(),this.AS=\"/Off\",this._Name=e};i(O,x),k.prototype.setAppearance=function(t){if(\"createAppearanceStream\"in t&&\"createMK\"in t)for(var e in this.__Kids){var A=this.__Kids[e];A.appearanceStreamContent=t.createAppearanceStream(A._Name),A.MK=t.createMK()}else console.log(\"Couldn't assign Appearance to RadioButton. Appearance was Invalid!\")},k.prototype.createOption=function(e){this.__Kids.length;var A=new O(this,e);return this.__Kids.push(A),t.addField(A),A};var P=function(){T.call(this),this.appearanceStreamContent=R.CheckBox.createAppearanceStream(),this.MK=R.CheckBox.createMK(),this.AS=\"/On\",this.V=\"/On\"};i(P,T);var D=function(){var t,e;x.call(this),this.DA=R.createDefaultAppearanceStream(),this.F=4,Object.defineProperty(this,\"V\",{get:function(){return t?U(t):t},enumerable:!0,set:function(e){t=e}}),Object.defineProperty(this,\"DV\",{get:function(){return e?U(e):e},enumerable:!0,set:function(t){e=t}});var A=!1;Object.defineProperty(this,\"multiline\",{enumerable:!1,get:function(){return A},set:function(t){A=t}});var r=!1;Object.defineProperty(this,\"fileSelect\",{enumerable:!1,get:function(){return r},set:function(t){r=t}});var n=!1;Object.defineProperty(this,\"doNotSpellCheck\",{enumerable:!1,get:function(){return n},set:function(t){n=t}});var i=!1;Object.defineProperty(this,\"doNotScroll\",{enumerable:!1,get:function(){return i},set:function(t){i=t}});var o=!1;Object.defineProperty(this,\"MaxLen\",{enumerable:!0,get:function(){return o},set:function(t){o=t}}),Object.defineProperty(this,\"hasAppearanceStream\",{enumerable:!1,get:function(){return this.V||this.DV}})};i(D,x);var L=function(){D.call(this);var t=!0;Object.defineProperty(this,\"password\",{enumerable:!1,get:function(){return t},set:function(e){t=e}})};i(L,D);var R={CheckBox:{createAppearanceStream:function(){return{N:{On:R.CheckBox.YesNormal},D:{On:R.CheckBox.YesPushDown,Off:R.CheckBox.OffPushDown}}},createMK:function(){return\"<< /CA (3)>>\"},YesPushDown:function(t){var e=a(t),r=[],n=A.internal.getFont(\"zapfdingbats\",\"normal\").id;t.Q=1;var i=h(t,\"3\",\"ZapfDingbats\",50);return r.push(\"0.749023 g\"),r.push(\"0 0 \"+R.internal.getWidth(t).toFixed(2)+\" \"+R.internal.getHeight(t).toFixed(2)+\" re\"),r.push(\"f\"),r.push(\"BMC\"),r.push(\"q\"),r.push(\"0 0 1 rg\"),r.push(\"/\"+n+\" \"+i.fontSize.toFixed(2)+\" Tf 0 g\"),r.push(\"BT\"),r.push(i.text),r.push(\"ET\"),r.push(\"Q\"),r.push(\"EMC\"),e.stream=r.join(\"\\n\"),e},YesNormal:function(t){var e=a(t),r=A.internal.getFont(\"zapfdingbats\",\"normal\").id,n=[];t.Q=1;var i=R.internal.getHeight(t),o=R.internal.getWidth(t),s=h(t,\"3\",\"ZapfDingbats\",.9*i);return n.push(\"1 g\"),n.push(\"0 0 \"+o.toFixed(2)+\" \"+i.toFixed(2)+\" re\"),n.push(\"f\"),n.push(\"q\"),n.push(\"0 0 1 rg\"),n.push(\"0 0 \"+(o-1).toFixed(2)+\" \"+(i-1).toFixed(2)+\" re\"),n.push(\"W\"),n.push(\"n\"),n.push(\"0 g\"),n.push(\"BT\"),n.push(\"/\"+r+\" \"+s.fontSize.toFixed(2)+\" Tf 0 g\"),n.push(s.text),n.push(\"ET\"),n.push(\"Q\"),e.stream=n.join(\"\\n\"),e},OffPushDown:function(t){var e=a(t),A=[];return A.push(\"0.749023 g\"),A.push(\"0 0 \"+R.internal.getWidth(t).toFixed(2)+\" \"+R.internal.getHeight(t).toFixed(2)+\" re\"),A.push(\"f\"),e.stream=A.join(\"\\n\"),e}},RadioButton:{Circle:{createAppearanceStream:function(t){var e={D:{Off:R.RadioButton.Circle.OffPushDown},N:{}};return e.N[t]=R.RadioButton.Circle.YesNormal,e.D[t]=R.RadioButton.Circle.YesPushDown,e},createMK:function(){return\"<< /CA (l)>>\"},YesNormal:function(t){var e=a(t),A=[],r=R.internal.getWidth(t)<=R.internal.getHeight(t)?R.internal.getWidth(t)/4:R.internal.getHeight(t)/4;r*=.9;var n=R.internal.Bezier_C;return A.push(\"q\"),A.push(\"1 0 0 1 \"+R.internal.getWidth(t)/2+\" \"+R.internal.getHeight(t)/2+\" cm\"),A.push(r+\" 0 m\"),A.push(r+\" \"+r*n+\" \"+r*n+\" \"+r+\" 0 \"+r+\" c\"),A.push(\"-\"+r*n+\" \"+r+\" -\"+r+\" \"+r*n+\" -\"+r+\" 0 c\"),A.push(\"-\"+r+\" -\"+r*n+\" -\"+r*n+\" -\"+r+\" 0 -\"+r+\" c\"),A.push(r*n+\" -\"+r+\" \"+r+\" -\"+r*n+\" \"+r+\" 0 c\"),A.push(\"f\"),A.push(\"Q\"),e.stream=A.join(\"\\n\"),e},YesPushDown:function(t){var e=a(t),A=[],r=R.internal.getWidth(t)<=R.internal.getHeight(t)?R.internal.getWidth(t)/4:R.internal.getHeight(t)/4,n=2*(r*=.9),i=n*R.internal.Bezier_C,o=r*R.internal.Bezier_C;return A.push(\"0.749023 g\"),A.push(\"q\"),A.push(\"1 0 0 1 \"+(R.internal.getWidth(t)/2).toFixed(2)+\" \"+(R.internal.getHeight(t)/2).toFixed(2)+\" cm\"),A.push(n+\" 0 m\"),A.push(n+\" \"+i+\" \"+i+\" \"+n+\" 0 \"+n+\" c\"),A.push(\"-\"+i+\" \"+n+\" -\"+n+\" \"+i+\" -\"+n+\" 0 c\"),A.push(\"-\"+n+\" -\"+i+\" -\"+i+\" -\"+n+\" 0 -\"+n+\" c\"),A.push(i+\" -\"+n+\" \"+n+\" -\"+i+\" \"+n+\" 0 c\"),A.push(\"f\"),A.push(\"Q\"),A.push(\"0 g\"),A.push(\"q\"),A.push(\"1 0 0 1 \"+(R.internal.getWidth(t)/2).toFixed(2)+\" \"+(R.internal.getHeight(t)/2).toFixed(2)+\" cm\"),A.push(r+\" 0 m\"),A.push(r+\" \"+o+\" \"+o+\" \"+r+\" 0 \"+r+\" c\"),A.push(\"-\"+o+\" \"+r+\" -\"+r+\" \"+o+\" -\"+r+\" 0 c\"),A.push(\"-\"+r+\" -\"+o+\" -\"+o+\" -\"+r+\" 0 -\"+r+\" c\"),A.push(o+\" -\"+r+\" \"+r+\" -\"+o+\" \"+r+\" 0 c\"),A.push(\"f\"),A.push(\"Q\"),e.stream=A.join(\"\\n\"),e},OffPushDown:function(t){var e=a(t),A=[],r=R.internal.getWidth(t)<=R.internal.getHeight(t)?R.internal.getWidth(t)/4:R.internal.getHeight(t)/4,n=2*(r*=.9),i=n*R.internal.Bezier_C;return A.push(\"0.749023 g\"),A.push(\"q\"),A.push(\"1 0 0 1 \"+(R.internal.getWidth(t)/2).toFixed(2)+\" \"+(R.internal.getHeight(t)/2).toFixed(2)+\" cm\"),A.push(n+\" 0 m\"),A.push(n+\" \"+i+\" \"+i+\" \"+n+\" 0 \"+n+\" c\"),A.push(\"-\"+i+\" \"+n+\" -\"+n+\" \"+i+\" -\"+n+\" 0 c\"),A.push(\"-\"+n+\" -\"+i+\" -\"+i+\" -\"+n+\" 0 -\"+n+\" c\"),A.push(i+\" -\"+n+\" \"+n+\" -\"+i+\" \"+n+\" 0 c\"),A.push(\"f\"),A.push(\"Q\"),e.stream=A.join(\"\\n\"),e}},Cross:{createAppearanceStream:function(t){var e={D:{Off:R.RadioButton.Cross.OffPushDown},N:{}};return e.N[t]=R.RadioButton.Cross.YesNormal,e.D[t]=R.RadioButton.Cross.YesPushDown,e},createMK:function(){return\"<< /CA (8)>>\"},YesNormal:function(t){var e=a(t),A=[],r=R.internal.calculateCross(t);return A.push(\"q\"),A.push(\"1 1 \"+(R.internal.getWidth(t)-2).toFixed(2)+\" \"+(R.internal.getHeight(t)-2).toFixed(2)+\" re\"),A.push(\"W\"),A.push(\"n\"),A.push(r.x1.x.toFixed(2)+\" \"+r.x1.y.toFixed(2)+\" m\"),A.push(r.x2.x.toFixed(2)+\" \"+r.x2.y.toFixed(2)+\" l\"),A.push(r.x4.x.toFixed(2)+\" \"+r.x4.y.toFixed(2)+\" m\"),A.push(r.x3.x.toFixed(2)+\" \"+r.x3.y.toFixed(2)+\" l\"),A.push(\"s\"),A.push(\"Q\"),e.stream=A.join(\"\\n\"),e},YesPushDown:function(t){var e=a(t),A=R.internal.calculateCross(t),r=[];return r.push(\"0.749023 g\"),r.push(\"0 0 \"+R.internal.getWidth(t).toFixed(2)+\" \"+R.internal.getHeight(t).toFixed(2)+\" re\"),r.push(\"f\"),r.push(\"q\"),r.push(\"1 1 \"+(R.internal.getWidth(t)-2).toFixed(2)+\" \"+(R.internal.getHeight(t)-2).toFixed(2)+\" re\"),r.push(\"W\"),r.push(\"n\"),r.push(A.x1.x.toFixed(2)+\" \"+A.x1.y.toFixed(2)+\" m\"),r.push(A.x2.x.toFixed(2)+\" \"+A.x2.y.toFixed(2)+\" l\"),r.push(A.x4.x.toFixed(2)+\" \"+A.x4.y.toFixed(2)+\" m\"),r.push(A.x3.x.toFixed(2)+\" \"+A.x3.y.toFixed(2)+\" l\"),r.push(\"s\"),r.push(\"Q\"),e.stream=r.join(\"\\n\"),e},OffPushDown:function(t){var e=a(t),A=[];return A.push(\"0.749023 g\"),A.push(\"0 0 \"+R.internal.getWidth(t).toFixed(2)+\" \"+R.internal.getHeight(t).toFixed(2)+\" re\"),A.push(\"f\"),e.stream=A.join(\"\\n\"),e}}},createDefaultAppearanceStream:function(t){return\"/F1 0 Tf 0 g\"}};R.internal={Bezier_C:.551915024494,calculateCross:function(t){var e,A,r=R.internal.getWidth(t),n=R.internal.getHeight(t),i=(A=n)<(e=r)?A:e;return{x1:{x:(r-i)/2,y:(n-i)/2+i},x2:{x:(r-i)/2+i,y:(n-i)/2},x3:{x:(r-i)/2,y:(n-i)/2},x4:{x:(r-i)/2+i,y:(n-i)/2+i}}}},R.internal.getWidth=function(t){var e=0;return\"object\"===(void 0===t?\"undefined\":at(t))&&(e=o(t.Rect[2])),e},R.internal.getHeight=function(t){var e=0;return\"object\"===(void 0===t?\"undefined\":at(t))&&(e=o(t.Rect[3])),e},t.addField=function(t){return Q.call(this),t instanceof D?this.addTextField.call(this,t):t instanceof H?this.addChoiceField.call(this,t):t instanceof T?this.addButton.call(this,t):t instanceof O?g.call(this,t):t&&g.call(this,t),t.page=A.internal.getCurrentPageInfo().pageNumber,this},t.addButton=function(t){Q.call(this);var e=t||new x;e.FT=\"/Btn\",e.Ff=c(e.Ff,t,A.internal.getPDFVersion()),g.call(this,e)},t.addTextField=function(t){Q.call(this);var e=t||new x;e.FT=\"/Tx\",e.Ff=c(e.Ff,t,A.internal.getPDFVersion()),g.call(this,e)},t.addChoiceField=function(t){Q.call(this);var e=t||new x;e.FT=\"/Ch\",e.Ff=c(e.Ff,t,A.internal.getPDFVersion()),g.call(this,e)},\"object\"==(void 0===e?\"undefined\":at(e))&&(e.ChoiceField=H,e.ListBox=I,e.ComboBox=S,e.EditBox=_,e.Button=T,e.PushButton=N,e.RadioButton=k,e.CheckBox=P,e.TextField=D,e.PasswordField=L,e.AcroForm={Appearance:R}),t.AcroFormChoiceField=H,t.AcroFormListBox=I,t.AcroFormComboBox=S,t.AcroFormEditBox=_,t.AcroFormButton=T,t.AcroFormPushButton=N,t.AcroFormRadioButton=k,t.AcroFormCheckBox=P,t.AcroFormTextField=D,t.AcroFormPasswordField=L,t.AcroForm={ChoiceField:H,ListBox:I,ComboBox:S,EditBox:_,Button:T,PushButton:N,RadioButton:k,CheckBox:P,TextField:D,PasswordField:L}}(st.API,\"undefined\"!=typeof window&&window||void 0!==r&&r),st.API.addHTML=function(t,e,A,r,n){if(\"undefined\"==typeof html2canvas&&\"undefined\"==typeof rasterizeHTML)throw new Error(\"You need either https://github.com/niklasvh/html2canvas or https://github.com/cburgmer/rasterizeHTML.js\");\"number\"!=typeof e&&(r=e,n=A),\"function\"==typeof r&&(n=r,r=null),\"function\"!=typeof n&&(n=function(){});var i=this.internal,o=i.scaleFactor,a=i.pageSize.getWidth(),s=i.pageSize.getHeight();if((r=r||{}).onrendered=function(t){e=parseInt(e)||0,A=parseInt(A)||0;var i=r.dim||{},c=Object.assign({top:0,right:0,bottom:0,left:0,useFor:\"content\"},r.margin),l=i.h||Math.min(s,t.height/o),u=i.w||Math.min(a,t.width/o)-e,h=r.format||\"JPEG\",d=r.imageCompression||\"SLOW\";if(t.height>s-c.top-c.bottom&&r.pagesplit){var f=function(t,e,A,n,i){var o=document.createElement(\"canvas\");o.height=i,o.width=n;var a=o.getContext(\"2d\");return a.mozImageSmoothingEnabled=!1,a.webkitImageSmoothingEnabled=!1,a.msImageSmoothingEnabled=!1,a.imageSmoothingEnabled=!1,a.fillStyle=r.backgroundColor||\"#ffffff\",a.fillRect(0,0,n,i),a.drawImage(t,e,A,n,i,0,0,n,i),o},p=function(){for(var r,i,l=0,p=0,g={},B=!1;;){var w;if(p=0,g.top=0!==l?c.top:A,g.left=0!==l?c.left:e,B=(a-c.left-c.right)*o<t.width,\"content\"===c.useFor?0===l?(r=Math.min((a-c.left)*o,t.width),i=Math.min((s-c.top)*o,t.height-l)):(r=Math.min(a*o,t.width),i=Math.min(s*o,t.height-l),g.top=0):(r=Math.min((a-c.left-c.right)*o,t.width),i=Math.min((s-c.bottom-c.top)*o,t.height-l)),B)for(;;){\"content\"===c.useFor&&(0===p?r=Math.min((a-c.left)*o,t.width):(r=Math.min(a*o,t.width-p),g.left=0));var m=[w=f(t,p,l,r,i),g.left,g.top,w.width/o,w.height/o,h,null,d];if(this.addImage.apply(this,m),(p+=r)>=t.width)break;this.addPage()}else m=[w=f(t,0,l,r,i),g.left,g.top,w.width/o,w.height/o,h,null,d],this.addImage.apply(this,m);if((l+=i)>=t.height)break;this.addPage()}n(u,l,null,m)}.bind(this);if(\"CANVAS\"===t.nodeName){var g=new Image;g.onload=p,g.src=t.toDataURL(\"image/png\"),t=g}else p()}else{var B=Math.random().toString(35),w=[t,e,A,u,l,h,B,d];this.addImage.apply(this,w),n(u,l,B,w)}}.bind(this),\"undefined\"!=typeof html2canvas&&!r.rstz)return html2canvas(t,r);if(\"undefined\"!=typeof rasterizeHTML){var c=\"drawDocument\";return\"string\"==typeof t&&(c=/^http/.test(t)?\"drawURL\":\"drawHTML\"),r.width=r.width||a*o,rasterizeHTML[c](t,void 0,r).then(function(t){r.onrendered(t.image)},function(t){n(null,t)})}return null},function(t){var e=\"addImage_\",A={PNG:[[137,80,78,71]],TIFF:[[77,77,0,42],[73,73,42,0]],JPEG:[[255,216,255,224,void 0,void 0,74,70,73,70,0],[255,216,255,225,void 0,void 0,69,120,105,102,0,0]],JPEG2000:[[0,0,0,12,106,80,32,32]],GIF87a:[[71,73,70,56,55,97]],GIF89a:[[71,73,70,56,57,97]],BMP:[[66,77],[66,65],[67,73],[67,80],[73,67],[80,84]]};t.getImageFileTypeByImageData=function(t,e){var r,n;e=e||\"UNKNOWN\";var i,o,a,s=\"UNKNOWN\";for(a in A)for(i=A[a],r=0;r<i.length;r+=1){for(o=!0,n=0;n<i[r].length;n+=1)if(void 0!==i[r][n]&&i[r][n]!==t.charCodeAt(n)){o=!1;break}if(!0===o){s=a;break}}return\"UNKOWN\"===s&&\"UNKNOWN\"!==e&&(console.warn('FileType of Image not recognized. Processing image as \"'+e+'\".'),s=e),s};var r=function t(e){var A=this.internal.newObject(),r=this.internal.write,n=this.internal.putStream;if(e.n=A,r(\"<</Type /XObject\"),r(\"/Subtype /Image\"),r(\"/Width \"+e.w),r(\"/Height \"+e.h),e.cs===this.color_spaces.INDEXED?r(\"/ColorSpace [/Indexed /DeviceRGB \"+(e.pal.length/3-1)+\" \"+(\"smask\"in e?A+2:A+1)+\" 0 R]\"):(r(\"/ColorSpace /\"+e.cs),e.cs===this.color_spaces.DEVICE_CMYK&&r(\"/Decode [1 0 1 0 1 0 1 0]\")),r(\"/BitsPerComponent \"+e.bpc),\"f\"in e&&r(\"/Filter /\"+e.f),\"dp\"in e&&r(\"/DecodeParms <<\"+e.dp+\">>\"),\"trns\"in e&&e.trns.constructor==Array){for(var i=\"\",o=0,a=e.trns.length;o<a;o++)i+=e.trns[o]+\" \"+e.trns[o]+\" \";r(\"/Mask [\"+i+\"]\")}if(\"smask\"in e&&r(\"/SMask \"+(A+1)+\" 0 R\"),r(\"/Length \"+e.data.length+\">>\"),n(e.data),r(\"endobj\"),\"smask\"in e){var s=\"/Predictor \"+e.p+\" /Colors 1 /BitsPerComponent \"+e.bpc+\" /Columns \"+e.w,c={w:e.w,h:e.h,cs:\"DeviceGray\",bpc:e.bpc,dp:s,data:e.smask};\"f\"in e&&(c.f=e.f),t.call(this,c)}e.cs===this.color_spaces.INDEXED&&(this.internal.newObject(),r(\"<< /Length \"+e.pal.length+\">>\"),n(this.arrayBufferToBinaryString(new Uint8Array(e.pal))),r(\"endobj\"))},n=function(){var t=this.internal.collections[e+\"images\"];for(var A in t)r.call(this,t[A])},i=function(){var t,A=this.internal.collections[e+\"images\"],r=this.internal.write;for(var n in A)r(\"/I\"+(t=A[n]).i,t.n,\"0\",\"R\")},o=function(e){return\"function\"==typeof t[\"process\"+e.toUpperCase()]},a=function(t){return\"object\"===(void 0===t?\"undefined\":at(t))&&1===t.nodeType},s=function(t,e){if(\"IMG\"===t.nodeName&&t.hasAttribute(\"src\")){var A=\"\"+t.getAttribute(\"src\");if(0===A.indexOf(\"data:image/\"))return A;!e&&/\\.png(?:[?#].*)?$/i.test(A)&&(e=\"png\")}if(\"CANVAS\"===t.nodeName)var r=t;else{(r=document.createElement(\"canvas\")).width=t.clientWidth||t.width,r.height=t.clientHeight||t.height;var n=r.getContext(\"2d\");if(!n)throw\"addImage requires canvas to be supported by browser.\";n.drawImage(t,0,0,r.width,r.height)}return r.toDataURL(\"png\"==(\"\"+e).toLowerCase()?\"image/png\":\"image/jpeg\")},c=function(t,e){var A;if(e)for(var r in e)if(t===e[r].alias){A=e[r];break}return A};t.color_spaces={DEVICE_RGB:\"DeviceRGB\",DEVICE_GRAY:\"DeviceGray\",DEVICE_CMYK:\"DeviceCMYK\",CAL_GREY:\"CalGray\",CAL_RGB:\"CalRGB\",LAB:\"Lab\",ICC_BASED:\"ICCBased\",INDEXED:\"Indexed\",PATTERN:\"Pattern\",SEPARATION:\"Separation\",DEVICE_N:\"DeviceN\"},t.decode={DCT_DECODE:\"DCTDecode\",FLATE_DECODE:\"FlateDecode\",LZW_DECODE:\"LZWDecode\",JPX_DECODE:\"JPXDecode\",JBIG2_DECODE:\"JBIG2Decode\",ASCII85_DECODE:\"ASCII85Decode\",ASCII_HEX_DECODE:\"ASCIIHexDecode\",RUN_LENGTH_DECODE:\"RunLengthDecode\",CCITT_FAX_DECODE:\"CCITTFaxDecode\"},t.image_compression={NONE:\"NONE\",FAST:\"FAST\",MEDIUM:\"MEDIUM\",SLOW:\"SLOW\"},t.sHashCode=function(t){return t=t||\"\",Array.prototype.reduce&&t.split(\"\").reduce(function(t,e){return(t=(t<<5)-t+e.charCodeAt(0))&t},0)},t.isString=function(t){return\"string\"==typeof t},t.validateStringAsBase64=function(t){var e=!0;return(t=t||\"\").length%4!=0&&(e=!1),!1===/[A-Za-z0-9\\/]+/.test(t.substr(0,t.length-2))&&(e=!1),!1===/[A-Za-z0-9\\/][A-Za-z0-9+\\/]|[A-Za-z0-9+\\/]=|==/.test(t.substr(-2))&&(e=!1),e},t.extractInfoFromBase64DataURI=function(t){return/^data:([\\w]+?\\/([\\w]+?));base64,(.+)$/g.exec(t)},t.supportsArrayBuffer=function(){return\"undefined\"!=typeof ArrayBuffer&&\"undefined\"!=typeof Uint8Array},t.isArrayBuffer=function(t){return!!this.supportsArrayBuffer()&&t instanceof ArrayBuffer},t.isArrayBufferView=function(t){return!!this.supportsArrayBuffer()&&\"undefined\"!=typeof Uint32Array&&(t instanceof Int8Array||t instanceof Uint8Array||\"undefined\"!=typeof Uint8ClampedArray&&t instanceof Uint8ClampedArray||t instanceof Int16Array||t instanceof Uint16Array||t instanceof Int32Array||t instanceof Uint32Array||t instanceof Float32Array||t instanceof Float64Array)},t.binaryStringToUint8Array=function(t){for(var e=t.length,A=new Uint8Array(e),r=0;r<e;r++)A[r]=t.charCodeAt(r);return A},t.arrayBufferToBinaryString=function(t){if(\"function\"==typeof atob)return atob(this.arrayBufferToBase64(t));if(\"function\"==typeof TextDecoder){var e=new TextDecoder(\"ascii\");if(\"ascii\"===e.encoding)return e.decode(t)}for(var A=this.isArrayBuffer(t)?t:new Uint8Array(t),r=20480,n=\"\",i=Math.ceil(A.byteLength/r),o=0;o<i;o++)n+=String.fromCharCode.apply(null,A.slice(o*r,o*r+r));return n},t.arrayBufferToBase64=function(t){for(var e,A=\"\",r=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",n=new Uint8Array(t),i=n.byteLength,o=i%3,a=i-o,s=0;s<a;s+=3)A+=r[(16515072&(e=n[s]<<16|n[s+1]<<8|n[s+2]))>>18]+r[(258048&e)>>12]+r[(4032&e)>>6]+r[63&e];return 1==o?A+=r[(252&(e=n[a]))>>2]+r[(3&e)<<4]+\"==\":2==o&&(A+=r[(64512&(e=n[a]<<8|n[a+1]))>>10]+r[(1008&e)>>4]+r[(15&e)<<2]+\"=\"),A},t.createImageInfo=function(t,e,A,r,n,i,o,a,s,c,l,u,h){var d={alias:a,w:e,h:A,cs:r,bpc:n,i:o,data:t};return i&&(d.f=i),s&&(d.dp=s),c&&(d.trns=c),l&&(d.pal=l),u&&(d.smask=u),h&&(d.p=h),d},t.addImage=function(A,r,l,u,h,d,f,p,g){var B=\"\";if(\"string\"!=typeof r){var w=d;d=h,h=u,u=l,l=r,r=w}if(\"object\"===(void 0===A?\"undefined\":at(A))&&!a(A)&&\"imageData\"in A){var m=A;A=m.imageData,r=m.format||r,l=m.x||l||0,u=m.y||u||0,h=m.w||h,d=m.h||d,f=m.alias||f,p=m.compression||p,g=m.rotation||m.angle||g}if(isNaN(l)||isNaN(u))throw console.error(\"jsPDF.addImage: Invalid coordinates\",arguments),new Error(\"Invalid coordinates passed to jsPDF.addImage\");var y,v,Q,C,U,b,F,E=function(){var t=this.internal.collections[e+\"images\"];return t||(this.internal.collections[e+\"images\"]=t={},this.internal.events.subscribe(\"putResources\",n),this.internal.events.subscribe(\"putXobjectDict\",i)),t}.call(this);if(!((y=c(A,E))||(a(A)&&(A=s(A,r)),(null==(F=f)||0===F.length)&&(f=\"string\"==typeof(b=A)&&t.sHashCode(b)),y=c(f,E)))){if(this.isString(A)&&(\"\"!==(B=this.convertStringToImageData(A))?A=B:void 0!==(B=this.loadImageFile(A))&&(A=B)),r=this.getImageFileTypeByImageData(A,r),!o(r))throw new Error(\"addImage does not support files of type '\"+r+\"', please ensure that a plugin for '\"+r+\"' support is added.\");if(this.supportsArrayBuffer()&&(A instanceof Uint8Array||(v=A,A=this.binaryStringToUint8Array(A))),!(y=this[\"process\"+r.toUpperCase()](A,(U=0,(C=E)&&(U=Object.keys?Object.keys(C).length:function(t){var e=0;for(var A in t)t.hasOwnProperty(A)&&e++;return e}(C)),U),f,((Q=p)&&\"string\"==typeof Q&&(Q=Q.toUpperCase()),Q in t.image_compression?Q:t.image_compression.NONE),v)))throw new Error(\"An unkwown error occurred whilst processing the image\")}return function(t,e,A,r,n,i,o,a){var s=function(t,e,A){return t||e||(e=t=-96),t<0&&(t=-1*A.w*72/t/this.internal.scaleFactor),e<0&&(e=-1*A.h*72/e/this.internal.scaleFactor),0===t&&(t=e*A.w/A.h),0===e&&(e=t*A.h/A.w),[t,e]}.call(this,A,r,n),c=this.internal.getCoordinateString,l=this.internal.getVerticalCoordinateString;if(A=s[0],r=s[1],o[i]=n,a){a*=Math.PI/180;var u=Math.cos(a),h=Math.sin(a),d=function(t){return t.toFixed(4)},f=[d(u),d(h),d(-1*h),d(u),0,0,\"cm\"]}this.internal.write(\"q\"),a?(this.internal.write([1,\"0\",\"0\",1,c(t),l(e+r),\"cm\"].join(\" \")),this.internal.write(f.join(\" \")),this.internal.write([c(A),\"0\",\"0\",c(r),\"0\",\"0\",\"cm\"].join(\" \"))):this.internal.write([c(A),\"0\",\"0\",c(r),c(t),l(e+r),\"cm\"].join(\" \")),this.internal.write(\"/I\"+n.i+\" Do\"),this.internal.write(\"Q\")}.call(this,l,u,h,d,y,y.i,E,g),this},t.convertStringToImageData=function(e){var A,r=\"\";return this.isString(e)&&(null!==(A=this.extractInfoFromBase64DataURI(e))?t.validateStringAsBase64(A[3])&&(r=atob(A[3])):t.validateStringAsBase64(e)&&(r=atob(e))),r};var l=function(t,e){return t.subarray(e,e+5)};t.processJPEG=function(t,e,A,r,n,i){var o,a=this.decode.DCT_DECODE;if(!this.isString(t)&&!this.isArrayBuffer(t)&&!this.isArrayBufferView(t))return null;if(this.isString(t)&&(o=function(t){var e;if(255===!t.charCodeAt(0)||216===!t.charCodeAt(1)||255===!t.charCodeAt(2)||224===!t.charCodeAt(3)||!t.charCodeAt(6)===\"J\".charCodeAt(0)||!t.charCodeAt(7)===\"F\".charCodeAt(0)||!t.charCodeAt(8)===\"I\".charCodeAt(0)||!t.charCodeAt(9)===\"F\".charCodeAt(0)||0===!t.charCodeAt(10))throw new Error(\"getJpegSize requires a binary string jpeg file\");for(var A=256*t.charCodeAt(4)+t.charCodeAt(5),r=4,n=t.length;r<n;){if(r+=A,255!==t.charCodeAt(r))throw new Error(\"getJpegSize could not find the size of the image\");if(192===t.charCodeAt(r+1)||193===t.charCodeAt(r+1)||194===t.charCodeAt(r+1)||195===t.charCodeAt(r+1)||196===t.charCodeAt(r+1)||197===t.charCodeAt(r+1)||198===t.charCodeAt(r+1)||199===t.charCodeAt(r+1))return e=256*t.charCodeAt(r+5)+t.charCodeAt(r+6),[256*t.charCodeAt(r+7)+t.charCodeAt(r+8),e,t.charCodeAt(r+9)];r+=2,A=256*t.charCodeAt(r)+t.charCodeAt(r+1)}}(t)),this.isArrayBuffer(t)&&(t=new Uint8Array(t)),this.isArrayBufferView(t)&&(o=function(t){if(65496!=(t[0]<<8|t[1]))throw new Error(\"Supplied data is not a JPEG\");for(var e,A=t.length,r=(t[4]<<8)+t[5],n=4;n<A;){if(r=((e=l(t,n+=r))[2]<<8)+e[3],(192===e[1]||194===e[1])&&255===e[0]&&7<r)return{width:((e=l(t,n+5))[2]<<8)+e[3],height:(e[0]<<8)+e[1],numcomponents:e[4]};n+=2}throw new Error(\"getJpegSizeFromBytes could not find the size of the image\")}(t),t=n||this.arrayBufferToBinaryString(t)),void 0===i)switch(o.numcomponents){case 1:i=this.color_spaces.DEVICE_GRAY;break;case 4:i=this.color_spaces.DEVICE_CMYK;break;default:case 3:i=this.color_spaces.DEVICE_RGB}return this.createImageInfo(t,o.width,o.height,i,8,a,e,A)},t.processJPG=function(){return this.processJPEG.apply(this,arguments)},t.loadImageFile=function(t,e,A){if(e=e||!0,A=A||function(){},Object.prototype.toString.call(\"undefined\"!=typeof process?process:0),void 0!==(\"undefined\"==typeof window?\"undefined\":at(window))&&\"object\"===(\"undefined\"==typeof location?\"undefined\":at(location))&&\"http\"===location.protocol.substr(0,4))return function(t,e,A){var r=new XMLHttpRequest,n=[],i=0,o=function(t){var e=t.length,A=String.fromCharCode;for(i=0;i<e;i+=1)n.push(A(255&t.charCodeAt(i)));return n.join(\"\")};if(r.open(\"GET\",t,!e),r.overrideMimeType(\"text/plain; charset=x-user-defined\"),!1===e&&(r.onload=function(){return o(this.responseText)}),r.send(null),200===r.status)return e?o(r.responseText):void 0;console.warn('Unable to load file \"'+t+'\"')}(t,e)},t.getImageProperties=function(t){var e,A,r=\"\";if(a(t)&&(t=s(t)),this.isString(t)&&(\"\"!==(r=this.convertStringToImageData(t))?t=r:void 0!==(r=this.loadImageFile(t))&&(t=r)),A=this.getImageFileTypeByImageData(t),!o(A))throw new Error(\"addImage does not support files of type '\"+A+\"', please ensure that a plugin for '\"+A+\"' support is added.\");if(this.supportsArrayBuffer()&&(t instanceof Uint8Array||(t=this.binaryStringToUint8Array(t))),!(e=this[\"process\"+A.toUpperCase()](t)))throw new Error(\"An unkwown error occurred whilst processing the image\");return{fileType:A,width:e.w,height:e.h,colorSpace:e.cs,compressionMode:e.f,bitsPerComponent:e.bpc}}}(st.API),s=st.API,c={annotations:[],f2:function(t){return t.toFixed(2)},notEmpty:function(t){if(void 0!==t&&\"\"!=t)return!0}},st.API.annotationPlugin=c,st.API.events.push([\"addPage\",function(t){this.annotationPlugin.annotations[t.pageNumber]=[]}]),s.events.push([\"putPage\",function(t){for(var e=this.annotationPlugin.annotations[t.pageNumber],A=!1,r=0;r<e.length&&!A;r++)switch((s=e[r]).type){case\"link\":if(c.notEmpty(s.options.url)||c.notEmpty(s.options.pageNumber)){A=!0;break}case\"reference\":case\"text\":case\"freetext\":A=!0}if(0!=A){this.internal.write(\"/Annots [\");var n=this.annotationPlugin.f2,i=this.internal.scaleFactor,o=this.internal.pageSize.getHeight(),a=this.internal.getPageInfo(t.pageNumber);for(r=0;r<e.length;r++){var s;switch((s=e[r]).type){case\"reference\":this.internal.write(\" \"+s.object.objId+\" 0 R \");break;case\"text\":var l=this.internal.newAdditionalObject(),u=this.internal.newAdditionalObject(),h=s.title||\"Note\";B=\"<</Type /Annot /Subtype /Text \"+(f=\"/Rect [\"+n(s.bounds.x*i)+\" \"+n(o-(s.bounds.y+s.bounds.h)*i)+\" \"+n((s.bounds.x+s.bounds.w)*i)+\" \"+n((o-s.bounds.y)*i)+\"] \")+\"/Contents (\"+s.contents+\")\",B+=\" /Popup \"+u.objId+\" 0 R\",B+=\" /P \"+a.objId+\" 0 R\",B+=\" /T (\"+h+\") >>\",l.content=B;var d=l.objId+\" 0 R\";B=\"<</Type /Annot /Subtype /Popup \"+(f=\"/Rect [\"+n((s.bounds.x+30)*i)+\" \"+n(o-(s.bounds.y+s.bounds.h)*i)+\" \"+n((s.bounds.x+s.bounds.w+30)*i)+\" \"+n((o-s.bounds.y)*i)+\"] \")+\" /Parent \"+d,s.open&&(B+=\" /Open true\"),B+=\" >>\",u.content=B,this.internal.write(l.objId,\"0 R\",u.objId,\"0 R\");break;case\"freetext\":var f=\"/Rect [\"+n(s.bounds.x*i)+\" \"+n((o-s.bounds.y)*i)+\" \"+n(s.bounds.x+s.bounds.w*i)+\" \"+n(o-(s.bounds.y+s.bounds.h)*i)+\"] \",p=s.color||\"#000000\";B=\"<</Type /Annot /Subtype /FreeText \"+f+\"/Contents (\"+s.contents+\")\",B+=\" /DS(font: Helvetica,sans-serif 12.0pt; text-align:left; color:#\"+p+\")\",B+=\" /Border [0 0 0]\",B+=\" >>\",this.internal.write(B);break;case\"link\":if(s.options.name){var g=this.annotations._nameMap[s.options.name];s.options.pageNumber=g.page,s.options.top=g.y}else s.options.top||(s.options.top=0);f=\"/Rect [\"+n(s.x*i)+\" \"+n((o-s.y)*i)+\" \"+n((s.x+s.w)*i)+\" \"+n((o-(s.y+s.h))*i)+\"] \";var B=\"\";if(s.options.url)B=\"<</Type /Annot /Subtype /Link \"+f+\"/Border [0 0 0] /A <</S /URI /URI (\"+s.options.url+\") >>\";else if(s.options.pageNumber)switch(B=\"<</Type /Annot /Subtype /Link \"+f+\"/Border [0 0 0] /Dest [\"+(t=this.internal.getPageInfo(s.options.pageNumber)).objId+\" 0 R\",s.options.magFactor=s.options.magFactor||\"XYZ\",s.options.magFactor){case\"Fit\":B+=\" /Fit]\";break;case\"FitH\":B+=\" /FitH \"+s.options.top+\"]\";break;case\"FitV\":s.options.left=s.options.left||0,B+=\" /FitV \"+s.options.left+\"]\";break;case\"XYZ\":default:var w=n((o-s.options.top)*i);s.options.left=s.options.left||0,void 0===s.options.zoom&&(s.options.zoom=0),B+=\" /XYZ \"+s.options.left+\" \"+w+\" \"+s.options.zoom+\"]\"}\"\"!=B&&(B+=\" >>\",this.internal.write(B))}}this.internal.write(\"]\")}}]),s.createAnnotation=function(t){switch(t.type){case\"link\":this.link(t.bounds.x,t.bounds.y,t.bounds.w,t.bounds.h,t);break;case\"text\":case\"freetext\":this.annotationPlugin.annotations[this.internal.getCurrentPageInfo().pageNumber].push(t)}},s.link=function(t,e,A,r,n){this.annotationPlugin.annotations[this.internal.getCurrentPageInfo().pageNumber].push({x:t,y:e,w:A,h:r,options:n,type:\"link\"})},s.textWithLink=function(t,e,A,r){var n=this.getTextWidth(t),i=this.internal.getLineHeight()/this.internal.scaleFactor;return this.text(t,e,A),A+=.2*i,this.link(e,A-i,n,i,r),n},s.getTextWidth=function(t){var e=this.internal.getFontSize();return this.getStringUnitWidth(t)*e/this.internal.scaleFactor},s.getLineHeight=function(){return this.internal.getLineHeight()},function(t){function e(t){return void 0!==t&&void 0!==a[t.charCodeAt(0)]}function A(t){return void 0!==t&&0<=h.indexOf(t.charCodeAt(0))}function r(t){return void 0!==t&&0<=u.indexOf(t.charCodeAt(0))}function n(t){return e(t)&&2<=a[t.charCodeAt(0)].length}function i(t,i,o,s){return e(t)?(s=s||{},a=Object.assign(a,s),!n(t)||!e(i)&&!e(o)||!e(o)&&A(i)||A(t)&&!e(i)||A(t)&&r(i)||A(t)&&A(i)?(a=Object.assign(a,c),d):e(l=t)&&4==a[l.charCodeAt(0)].length&&e(i)&&!A(i)&&e(o)&&n(o)?(a=Object.assign(a,c),g):A(t)||!e(o)?(a=Object.assign(a,c),f):(a=Object.assign(a,c),p)):-1;var l}var o=Object.keys({ar:\"Arabic (Standard)\",\"ar-DZ\":\"Arabic (Algeria)\",\"ar-BH\":\"Arabic (Bahrain)\",\"ar-EG\":\"Arabic (Egypt)\",\"ar-IQ\":\"Arabic (Iraq)\",\"ar-JO\":\"Arabic (Jordan)\",\"ar-KW\":\"Arabic (Kuwait)\",\"ar-LB\":\"Arabic (Lebanon)\",\"ar-LY\":\"Arabic (Libya)\",\"ar-MA\":\"Arabic (Morocco)\",\"ar-OM\":\"Arabic (Oman)\",\"ar-QA\":\"Arabic (Qatar)\",\"ar-SA\":\"Arabic (Saudi Arabia)\",\"ar-SY\":\"Arabic (Syria)\",\"ar-TN\":\"Arabic (Tunisia)\",\"ar-AE\":\"Arabic (U.A.E.)\",\"ar-YE\":\"Arabic (Yemen)\",fa:\"Persian\",\"fa-IR\":\"Persian/Iran\",ur:\"Urdu\"}),a={1569:[65152],1570:[65153,65154,65153,65154],1571:[65155,65156,65155,65156],1572:[65157,65158],1573:[65159,65160,65159,65160],1574:[65161,65162,65163,65164],1575:[65165,65166,65165,65166],1576:[65167,65168,65169,65170],1577:[65171,65172],1578:[65173,65174,65175,65176],1579:[65177,65178,65179,65180],1580:[65181,65182,65183,65184],1581:[65185,65186,65187,65188],1582:[65189,65190,65191,65192],1583:[65193,65194,65193],1584:[65195,65196,65195],1585:[65197,65198,65197],1586:[65199,65200,65199],1587:[65201,65202,65203,65204],1588:[65205,65206,65207,65208],1589:[65209,65210,65211,65212],1590:[65213,65214,65215,65216],1591:[65217,65218,65219,65220],1592:[65221,65222,65223,65224],1593:[65225,65226,65227,65228],1594:[65229,65230,65231,65232],1601:[65233,65234,65235,65236],1602:[65237,65238,65239,65240],1603:[65241,65242,65243,65244],1604:[65245,65246,65247,65248],1605:[65249,65250,65251,65252],1606:[65253,65254,65255,65256],1607:[65257,65258,65259,65260],1608:[65261,65262,65261],1609:[65263,65264,64488,64489],1610:[65265,65266,65267,65268],1649:[64336,64337],1655:[64477],1657:[64358,64359,64360,64361],1658:[64350,64351,64352,64353],1659:[64338,64339,64340,64341],1662:[64342,64343,64344,64345],1663:[64354,64355,64356,64357],1664:[64346,64347,64348,64349],1667:[64374,64375,64376,64377],1668:[64370,64371,64372,64373],1670:[64378,64379,64380,64381],1671:[64382,64383,64384,64385],1672:[64392,64393],1676:[64388,64389],1677:[64386,64387],1678:[64390,64391],1681:[64396,64397],1688:[64394,64395,64394],1700:[64362,64363,64364,64365],1702:[64366,64367,64368,64369],1705:[64398,64399,64400,64401],1709:[64467,64468,64469,64470],1711:[64402,64403,64404,64405],1713:[64410,64411,64412,64413],1715:[64406,64407,64408,64409],1722:[64414,64415],1723:[64416,64417,64418,64419],1726:[64426,64427,64428,64429],1728:[64420,64421],1729:[64422,64423,64424,64425],1733:[64480,64481],1734:[64473,64474],1735:[64471,64472],1736:[64475,64476],1737:[64482,64483],1739:[64478,64479],1740:[64508,64509,64510,64511],1744:[64484,64485,64486,64487],1746:[64430,64431],1747:[64432,64433]},s={1570:[65269,65270,65269,65270],1571:[65271,65272,65271,65272],1573:[65273,65274,65273,65274],1575:[65275,65276,65275,65276]},c={1570:[65153,65154,65153,65154],1571:[65155,65156,65155,65156],1573:[65159,65160,65159,65160],1575:[65165,65166,65165,65166]},l={1612:64606,1613:64607,1614:64608,1615:64609,1616:64610},u=[1570,1571,1573,1575],h=[1569,1570,1571,1572,1573,1575,1577,1583,1584,1585,1586,1608,1688],d=0,f=1,p=2,g=3,B=t.processArabic=function(t,A){t=t||\"\",A=A||!1;var n,o,u,h=\"\",d=0,f=0,p=\"\",g=\"\",B=\"\";for(d=0;d<t.length;d+=1)p=t[d],g=t[d-1],B=t[d+1],e(p)?void 0!==g&&1604===g.charCodeAt(0)&&r(p)?(f=i(p,t[d-2],t[d+1],s),n=String.fromCharCode(s[p.charCodeAt(0)][f]),h=h.substr(0,h.length-1)+n):void 0!==g&&1617===g.charCodeAt(0)&&void 0!==(o=p)&&void 0!==l[o.charCodeAt(0)]?(f=i(p,t[d-2],t[d+1],c),n=String.fromCharCode(l[p.charCodeAt(0)][f]),h=h.substr(0,h.length-1)+n):(f=i(p,g,B,c),h+=String.fromCharCode(a[p.charCodeAt(0)][f])):h+=A?{\"(\":\")\",\")\":\"(\"}[u=p]||u:p;return A?h.split(\"\").reverse().join(\"\"):h};t.events.push([\"preProcessText\",function(t){var e=t.text,A=(t.x,t.y,t.options||{}),r=(t.mutex,A.lang),n=[];if(0<=o.indexOf(r)){if(\"[object Array]\"===Object.prototype.toString.call(e)){var i=0;for(n=[],i=0;i<e.length;i+=1)\"[object Array]\"===Object.prototype.toString.call(e[i])?n.push([B(e[i][0],!0),e[i][1],e[i][2]]):n.push([B(e[i],!0)]);t.text=n}else t.text=B(e,!0);void 0===A.charSpace&&(t.options.charSpace=0),!0===A.R2L&&(t.options.R2L=!1)}}])}(st.API),st.API.autoPrint=function(t){var e;switch((t=t||{}).variant=t.variant||\"non-conform\",t.variant){case\"javascript\":this.addJS(\"print({});\");break;case\"non-conform\":default:this.internal.events.subscribe(\"postPutResources\",function(){e=this.internal.newObject(),this.internal.out(\"<<\"),this.internal.out(\"/S /Named\"),this.internal.out(\"/Type /Action\"),this.internal.out(\"/N /Print\"),this.internal.out(\">>\"),this.internal.out(\"endobj\")}),this.internal.events.subscribe(\"putCatalog\",function(){this.internal.out(\"/OpenAction \"+e+\" 0 R\")})}return this},(l=st.API).events.push([\"initialized\",function(){this.canvas.pdf=this}]),l.canvas={getContext:function(t){return(this.pdf.context2d._canvas=this).pdf.context2d},childNodes:[]},Object.defineProperty(l.canvas,\"width\",{get:function(){return this._width},set:function(t){this._width=t,this.getContext(\"2d\").pageWrapX=t+1}}),Object.defineProperty(l.canvas,\"height\",{get:function(){return this._height},set:function(t){this._height=t,this.getContext(\"2d\").pageWrapY=t+1}}),u=st.API,g={x:void 0,y:void 0,w:void 0,h:void 0,ln:void 0},B=1,w=function(t,e,A,r,n){g={x:t,y:e,w:A,h:r,ln:n}},m=function(){return g},y={left:0,top:0,bottom:0},u.setHeaderFunction=function(t){p=t},u.getTextDimensions=function(t){h=this.internal.getFont().fontName,d=this.table_font_size||this.internal.getFontSize(),f=this.internal.getFont().fontStyle;var e,A,r=19.049976/25.4;(A=document.createElement(\"font\")).id=\"jsPDFCell\";try{A.style.fontStyle=f}catch(e){A.style.fontWeight=f}A.style.fontSize=d+\"pt\",A.style.fontFamily=h;try{A.textContent=t}catch(e){A.innerText=t}return document.body.appendChild(A),e={w:(A.offsetWidth+1)*r,h:(A.offsetHeight+1)*r},document.body.removeChild(A),e},u.cellAddPage=function(){var t=this.margins||y;this.addPage(),w(t.left,t.top,void 0,void 0),B+=1},u.cellInitialize=function(){g={x:void 0,y:void 0,w:void 0,h:void 0,ln:void 0},B=1},u.cell=function(t,e,A,r,n,i,o){var a=m(),s=!1;if(void 0!==a.ln)if(a.ln===i)t=a.x+a.w,e=a.y;else{var c=this.margins||y;a.y+a.h+r+13>=this.internal.pageSize.getHeight()-c.bottom&&(this.cellAddPage(),s=!0,this.printHeaders&&this.tableHeaderRow&&this.printHeaderRow(i,!0)),e=m().y+m().h,s&&(e=23)}if(void 0!==n[0])if(this.printingHeaderRow?this.rect(t,e,A,r,\"FD\"):this.rect(t,e,A,r),\"right\"===o){n instanceof Array||(n=[n]);for(var l=0;l<n.length;l++){var u=n[l],h=this.getStringUnitWidth(u)*this.internal.getFontSize();this.text(u,t+A-h-3,e+this.internal.getLineHeight()*(l+1))}}else this.text(n,t+3,e+this.internal.getLineHeight());return w(t,e,A,r,i),this},u.arrayMax=function(t,e){var A,r,n,i=t[0];for(A=0,r=t.length;A<r;A+=1)n=t[A],e?-1===e(i,n)&&(i=n):i<n&&(i=n);return i},u.table=function(t,e,A,r,n){if(!A)throw\"No data for PDF table\";var i,o,a,s,c,l,h,d,f,p,w=[],m=[],v={},Q={},C=[],U=[],b=!1,F=!0,E=12,x=y;if(x.width=this.internal.pageSize.getWidth(),n&&(!0===n.autoSize&&(b=!0),!1===n.printHeaders&&(F=!1),n.fontSize&&(E=n.fontSize),n.css&&void 0!==n.css[\"font-size\"]&&(E=16*n.css[\"font-size\"]),n.margins&&(x=n.margins)),this.lnMod=0,g={x:void 0,y:void 0,w:void 0,h:void 0,ln:void 0},B=1,this.printHeaders=F,this.margins=x,this.setFontSize(E),this.table_font_size=E,null==r)w=Object.keys(A[0]);else if(r[0]&&\"string\"!=typeof r[0])for(o=0,a=r.length;o<a;o+=1)i=r[o],w.push(i.name),m.push(i.prompt),Q[i.name]=i.width*(19.049976/25.4);else w=r;if(b)for(p=function(t){return t[i]},o=0,a=w.length;o<a;o+=1){for(v[i=w[o]]=A.map(p),C.push(this.getTextDimensions(m[o]||i).w),h=0,s=(l=v[i]).length;h<s;h+=1)c=l[h],C.push(this.getTextDimensions(c).w);Q[i]=u.arrayMax(C),C=[]}if(F){var H=this.calculateLineHeight(w,Q,m.length?m:w);for(o=0,a=w.length;o<a;o+=1)i=w[o],U.push([t,e,Q[i],H,String(m.length?m[o]:i)]);this.setTableHeaderRow(U),this.printHeaderRow(1,!1)}for(o=0,a=A.length;o<a;o+=1)for(d=A[o],H=this.calculateLineHeight(w,Q,d),h=0,f=w.length;h<f;h+=1)i=w[h],this.cell(t,e,Q[i],H,d[i],o+2,i.align);return this.lastCellPos=g,this.table_x=t,this.table_y=e,this},u.calculateLineHeight=function(t,e,A){for(var r,n=0,i=0;i<t.length;i++){A[r=t[i]]=this.splitTextToSize(String(A[r]),e[r]-3);var o=this.internal.getLineHeight()*A[r].length+3;n<o&&(n=o)}return n},u.setTableHeaderRow=function(t){this.tableHeaderRow=t},u.printHeaderRow=function(t,e){if(!this.tableHeaderRow)throw\"Property tableHeaderRow does not exist.\";var A,r,n,i;if(this.printingHeaderRow=!0,void 0!==p){var o=p(this,B);w(o[0],o[1],o[2],o[3],-1)}this.setFontStyle(\"bold\");var a=[];for(n=0,i=this.tableHeaderRow.length;n<i;n+=1)this.setFillColor(200,200,200),A=this.tableHeaderRow[n],e&&(this.margins.top=13,A[1]=this.margins&&this.margins.top||0,a.push(A)),r=[].concat(A),this.cell.apply(this,r.concat(t));0<a.length&&this.setTableHeaderRow(a),this.setFontStyle(\"normal\"),this.printingHeaderRow=!1},function(t){function e(){this._isStrokeTransparent=!1,this._strokeOpacity=1,this.strokeStyle=\"#000000\",this.fillStyle=\"#000000\",this._isFillTransparent=!1,this._fillOpacity=1,this.font=\"12pt times\",this.textBaseline=\"alphabetic\",this.textAlign=\"start\",this.lineWidth=1,this.lineJoin=\"miter\",this.lineCap=\"butt\",this._transform=[1,0,0,1,0,0],this.globalCompositeOperation=\"normal\",this.globalAlpha=1,this._clip_path=[],this.ignoreClearRect=!1,this.copy=function(t){this._isStrokeTransparent=t._isStrokeTransparent,this._strokeOpacity=t._strokeOpacity,this.strokeStyle=t.strokeStyle,this._isFillTransparent=t._isFillTransparent,this._fillOpacity=t._fillOpacity,this.fillStyle=t.fillStyle,this.font=t.font,this.lineWidth=t.lineWidth,this.lineJoin=t.lineJoin,this.lineCap=t.lineCap,this.textBaseline=t.textBaseline,this.textAlign=t.textAlign,this._fontSize=t._fontSize,this._transform=t._transform.slice(0),this.globalCompositeOperation=t.globalCompositeOperation,this.globalAlpha=t.globalAlpha,this._clip_path=t._clip_path.slice(0),this.ignoreClearRect=t.ignoreClearRect}}t.events.push([\"initialized\",function(){((this.context2d.pdf=this).context2d.internal.pdf=this).context2d.ctx=new e,this.context2d.ctxStack=[],this.context2d.path=[]}]),t.context2d={pageWrapXEnabled:!1,pageWrapYEnabled:!1,pageWrapX:9999999,pageWrapY:9999999,ctx:new e,f2:function(t){return t.toFixed(2)},fillRect:function(t,e,A,r){if(!this._isFillTransparent()){t=this._wrapX(t),e=this._wrapY(e);var n=this._matrix_map_rect(this.ctx._transform,{x:t,y:e,w:A,h:r});this.pdf.rect(n.x,n.y,n.w,n.h,\"f\")}},strokeRect:function(t,e,A,r){if(!this._isStrokeTransparent()){t=this._wrapX(t),e=this._wrapY(e);var n=this._matrix_map_rect(this.ctx._transform,{x:t,y:e,w:A,h:r});this.pdf.rect(n.x,n.y,n.w,n.h,\"s\")}},clearRect:function(t,e,A,r){if(!this.ctx.ignoreClearRect){t=this._wrapX(t),e=this._wrapY(e);var n=this._matrix_map_rect(this.ctx._transform,{x:t,y:e,w:A,h:r});this.save(),this.setFillStyle(\"#ffffff\"),this.pdf.rect(n.x,n.y,n.w,n.h,\"f\"),this.restore()}},save:function(){this.ctx._fontSize=this.pdf.internal.getFontSize();var t=new e;t.copy(this.ctx),this.ctxStack.push(this.ctx),this.ctx=t},restore:function(){this.ctx=this.ctxStack.pop(),this.setFillStyle(this.ctx.fillStyle),this.setStrokeStyle(this.ctx.strokeStyle),this.setFont(this.ctx.font),this.pdf.setFontSize(this.ctx._fontSize),this.setLineCap(this.ctx.lineCap),this.setLineWidth(this.ctx.lineWidth),this.setLineJoin(this.ctx.lineJoin)},rect:function(t,e,A,r){this.moveTo(t,e),this.lineTo(t+A,e),this.lineTo(t+A,e+r),this.lineTo(t,e+r),this.lineTo(t,e),this.closePath()},beginPath:function(){this.path=[]},closePath:function(){this.path.push({type:\"close\"})},_getRGBA:function(t){var e,A,r,n,i=new RGBColor(t);if(!t)return{r:0,g:0,b:0,a:0,style:t};if(this.internal.rxTransparent.test(t))n=r=A=e=0;else{var o=this.internal.rxRgb.exec(t);null!=o?(e=parseInt(o[1]),A=parseInt(o[2]),r=parseInt(o[3]),n=1):null!=(o=this.internal.rxRgba.exec(t))?(e=parseInt(o[1]),A=parseInt(o[2]),r=parseInt(o[3]),n=parseFloat(o[4])):(n=1,\"#\"!=t.charAt(0)&&(t=i.ok?i.toHex():\"#000000\"),4===t.length?(e=t.substring(1,2),e+=e,A=t.substring(2,3),A+=A,r=t.substring(3,4),r+=r):(e=t.substring(1,3),A=t.substring(3,5),r=t.substring(5,7)),e=parseInt(e,16),A=parseInt(A,16),r=parseInt(r,16))}return{r:e,g:A,b:r,a:n,style:t}},setFillStyle:function(t){var e=this._getRGBA(t);this.ctx.fillStyle=t,this.ctx._isFillTransparent=0===e.a,this.ctx._fillOpacity=e.a,this.pdf.setFillColor(e.r,e.g,e.b,{a:e.a}),this.pdf.setTextColor(e.r,e.g,e.b,{a:e.a})},setStrokeStyle:function(t){var e=this._getRGBA(t);this.ctx.strokeStyle=e.style,this.ctx._isStrokeTransparent=0===e.a,this.ctx._strokeOpacity=e.a,0===e.a?this.pdf.setDrawColor(255,255,255):(e.a,this.pdf.setDrawColor(e.r,e.g,e.b))},fillText:function(t,e,A,r){if(!this._isFillTransparent()){e=this._wrapX(e),A=this._wrapY(A);var n=this._matrix_map_point(this.ctx._transform,[e,A]);e=n[0],A=n[1];var i=57.2958*this._matrix_rotation(this.ctx._transform);if(0<this.ctx._clip_path.length){var o;(o=window.outIntercept?\"group\"===window.outIntercept.type?window.outIntercept.stream:window.outIntercept:this.internal.getCurrentPage()).push(\"q\");var a=this.path;this.path=this.ctx._clip_path,this.ctx._clip_path=[],this._fill(null,!0),this.ctx._clip_path=this.path,this.path=a}var s=1;try{s=this._matrix_decompose(this._getTransform()).scale[0]}catch(t){console.warn(t)}if(s<.01)this.pdf.text(t,e,this._getBaseline(A),null,i);else{var c=this.pdf.internal.getFontSize();this.pdf.setFontSize(c*s),this.pdf.text(t,e,this._getBaseline(A),null,i),this.pdf.setFontSize(c)}0<this.ctx._clip_path.length&&o.push(\"Q\")}},strokeText:function(t,e,A,r){if(!this._isStrokeTransparent()){e=this._wrapX(e),A=this._wrapY(A);var n=this._matrix_map_point(this.ctx._transform,[e,A]);e=n[0],A=n[1];var i=57.2958*this._matrix_rotation(this.ctx._transform);if(0<this.ctx._clip_path.length){var o;(o=window.outIntercept?\"group\"===window.outIntercept.type?window.outIntercept.stream:window.outIntercept:this.internal.getCurrentPage()).push(\"q\");var a=this.path;this.path=this.ctx._clip_path,this.ctx._clip_path=[],this._fill(null,!0),this.ctx._clip_path=this.path,this.path=a}var s=1;try{s=this._matrix_decompose(this._getTransform()).scale[0]}catch(t){console.warn(t)}if(1===s)this.pdf.text(t,e,this._getBaseline(A),{stroke:!0},i);else{var c=this.pdf.internal.getFontSize();this.pdf.setFontSize(c*s),this.pdf.text(t,e,this._getBaseline(A),{stroke:!0},i),this.pdf.setFontSize(c)}0<this.ctx._clip_path.length&&o.push(\"Q\")}},setFont:function(t){if(this.ctx.font=t,null!=(c=/\\s*(\\w+)\\s+(\\w+)\\s+(\\w+)\\s+([\\d\\.]+)(px|pt|em)\\s+(.*)?/.exec(t))){var e=c[1],A=(c[2],c[3]),r=c[4],n=c[5],i=c[6];r=\"px\"===n?Math.floor(parseFloat(r)):\"em\"===n?Math.floor(parseFloat(r)*this.pdf.getFontSize()):Math.floor(parseFloat(r)),this.pdf.setFontSize(r),\"bold\"===A||\"700\"===A?this.pdf.setFontStyle(\"bold\"):\"italic\"===e?this.pdf.setFontStyle(\"italic\"):this.pdf.setFontStyle(\"normal\"),l=\"bold\"===A||\"700\"===A?\"italic\"===e?\"bolditalic\":\"bold\":\"italic\"===e?\"italic\":\"normal\";for(var o=i.toLowerCase().split(/\\s*,\\s*/),a=\"Times\",s=0;s<o.length;s++){if(void 0!==this.pdf.internal.getFont(o[s],l,{noFallback:!0,disableWarning:!0})){a=o[s];break}if(\"bolditalic\"===l&&void 0!==this.pdf.internal.getFont(o[s],\"bold\",{noFallback:!0,disableWarning:!0}))a=o[s],l=\"bold\";else if(void 0!==this.pdf.internal.getFont(o[s],\"normal\",{noFallback:!0,disableWarning:!0})){a=o[s],l=\"normal\";break}}this.pdf.setFont(a,l)}else{var c=/\\s*(\\d+)(pt|px|em)\\s+([\\w \"]+)\\s*([\\w \"]+)?/.exec(t);if(null!=c){var l,u=c[1],h=(c[2],c[3]);(l=c[4])||(l=\"normal\"),u=\"em\"===n?Math.floor(parseFloat(r)*this.pdf.getFontSize()):Math.floor(parseFloat(u)),this.pdf.setFontSize(u),this.pdf.setFont(h,l)}}},setTextBaseline:function(t){this.ctx.textBaseline=t},getTextBaseline:function(){return this.ctx.textBaseline},setTextAlign:function(t){this.ctx.textAlign=t},getTextAlign:function(){return this.ctx.textAlign},setLineWidth:function(t){this.ctx.lineWidth=t,this.pdf.setLineWidth(t)},setLineCap:function(t){this.ctx.lineCap=t,this.pdf.setLineCap(t)},setLineJoin:function(t){this.ctx.lineJoin=t,this.pdf.setLineJoin(t)},moveTo:function(t,e){t=this._wrapX(t),e=this._wrapY(e);var A=this._matrix_map_point(this.ctx._transform,[t,e]),r={type:\"mt\",x:t=A[0],y:e=A[1]};this.path.push(r)},_wrapX:function(t){return this.pageWrapXEnabled?t%this.pageWrapX:t},_wrapY:function(t){return this.pageWrapYEnabled?(this._gotoPage(this._page(t)),(t-this.lastBreak)%this.pageWrapY):t},transform:function(t,e,A,r,n,i){this.ctx._transform=this._matrix_multiply(this.ctx._transform,[t,e,A,r,n,i])},setTransform:function(t,e,A,r,n,i){this.ctx._transform=[t,e,A,r,n,i]},_getTransform:function(){return this.ctx._transform},lastBreak:0,pageBreaks:[],_page:function(t){if(this.pageWrapYEnabled){for(var e=this.lastBreak=0,A=0,r=0;r<this.pageBreaks.length;r++)if(t>=this.pageBreaks[r]){e++,0===this.lastBreak&&A++;var n=this.pageBreaks[r]-this.lastBreak;this.lastBreak=this.pageBreaks[r],A+=Math.floor(n/this.pageWrapY)}return 0===this.lastBreak&&(A+=Math.floor(t/this.pageWrapY)+1),A+e}return this.pdf.internal.getCurrentPageInfo().pageNumber},_gotoPage:function(t){},lineTo:function(t,e){t=this._wrapX(t),e=this._wrapY(e);var A=this._matrix_map_point(this.ctx._transform,[t,e]),r={type:\"lt\",x:t=A[0],y:e=A[1]};this.path.push(r)},bezierCurveTo:function(t,e,A,r,n,i){var o;t=this._wrapX(t),e=this._wrapY(e),A=this._wrapX(A),r=this._wrapY(r),n=this._wrapX(n),i=this._wrapY(i),n=(o=this._matrix_map_point(this.ctx._transform,[n,i]))[0],i=o[1];var a={type:\"bct\",x1:t=(o=this._matrix_map_point(this.ctx._transform,[t,e]))[0],y1:e=o[1],x2:A=(o=this._matrix_map_point(this.ctx._transform,[A,r]))[0],y2:r=o[1],x:n,y:i};this.path.push(a)},quadraticCurveTo:function(t,e,A,r){var n;t=this._wrapX(t),e=this._wrapY(e),A=this._wrapX(A),r=this._wrapY(r),A=(n=this._matrix_map_point(this.ctx._transform,[A,r]))[0],r=n[1];var i={type:\"qct\",x1:t=(n=this._matrix_map_point(this.ctx._transform,[t,e]))[0],y1:e=n[1],x:A,y:r};this.path.push(i)},arc:function(t,e,A,r,n,i){if(t=this._wrapX(t),e=this._wrapY(e),!this._matrix_is_identity(this.ctx._transform)){var o=this._matrix_map_point(this.ctx._transform,[t,e]);t=o[0],e=o[1];var a=this._matrix_map_point(this.ctx._transform,[0,0]),s=this._matrix_map_point(this.ctx._transform,[0,A]);A=Math.sqrt(Math.pow(s[0]-a[0],2)+Math.pow(s[1]-a[1],2))}var c={type:\"arc\",x:t,y:e,radius:A,startAngle:r,endAngle:n,anticlockwise:i};this.path.push(c)},drawImage:function(t,e,A,r,n,i,o,a,s){void 0!==i&&(e=i,A=o,r=a,n=s),e=this._wrapX(e),A=this._wrapY(A);var c,l=this._matrix_map_rect(this.ctx._transform,{x:e,y:A,w:r,h:n}),u=(this._matrix_map_rect(this.ctx._transform,{x:i,y:o,w:a,h:s}),/data:image\\/(\\w+).*/i.exec(t));c=null!=u?u[1]:\"png\",this.pdf.addImage(t,c,l.x,l.y,l.w,l.h)},_matrix_multiply:function(t,e){var A=e[0],r=e[1],n=e[2],i=e[3],o=e[4],a=e[5],s=A*t[0]+r*t[2],c=n*t[0]+i*t[2],l=o*t[0]+a*t[2]+t[4];return r=A*t[1]+r*t[3],i=n*t[1]+i*t[3],a=o*t[1]+a*t[3]+t[5],[A=s,r,n=c,i,o=l,a]},_matrix_rotation:function(t){return Math.atan2(t[2],t[0])},_matrix_decompose:function(t){var e=t[0],A=t[1],r=t[2],n=t[3],i=Math.sqrt(e*e+A*A),o=(e/=i)*r+(A/=i)*n;r-=e*o,n-=A*o;var a=Math.sqrt(r*r+n*n);return o/=a,e*(n/=a)<A*(r/=a)&&(e=-e,A=-A,o=-o,i=-i),{scale:[i,0,0,a,0,0],translate:[1,0,0,1,t[4],t[5]],rotate:[e,A,-A,e,0,0],skew:[1,0,o,1,0,0]}},_matrix_map_point:function(t,e){var A=t[0],r=t[1],n=t[2],i=t[3],o=t[4],a=t[5],s=e[0],c=e[1];return[s*A+c*n+o,s*r+c*i+a]},_matrix_map_point_obj:function(t,e){var A=this._matrix_map_point(t,[e.x,e.y]);return{x:A[0],y:A[1]}},_matrix_map_rect:function(t,e){var A=this._matrix_map_point(t,[e.x,e.y]),r=this._matrix_map_point(t,[e.x+e.w,e.y+e.h]);return{x:A[0],y:A[1],w:r[0]-A[0],h:r[1]-A[1]}},_matrix_is_identity:function(t){return 1==t[0]&&0==t[1]&&0==t[2]&&1==t[3]&&0==t[4]&&0==t[5]},rotate:function(t){var e=[Math.cos(t),Math.sin(t),-Math.sin(t),Math.cos(t),0,0];this.ctx._transform=this._matrix_multiply(this.ctx._transform,e)},scale:function(t,e){var A=[t,0,0,e,0,0];this.ctx._transform=this._matrix_multiply(this.ctx._transform,A)},translate:function(t,e){var A=[1,0,0,1,t,e];this.ctx._transform=this._matrix_multiply(this.ctx._transform,A)},stroke:function(){if(0<this.ctx._clip_path.length){var t;(t=window.outIntercept?\"group\"===window.outIntercept.type?window.outIntercept.stream:window.outIntercept:this.internal.getCurrentPage()).push(\"q\");var e=this.path;this.path=this.ctx._clip_path,this.ctx._clip_path=[],this._stroke(!0),this.ctx._clip_path=this.path,this.path=e,this._stroke(!1),t.push(\"Q\")}else this._stroke(!1)},_stroke:function(t){if(t||!this._isStrokeTransparent()){for(var e=[],A=this.path,r=0;r<A.length;r++){var n=A[r];switch(n.type){case\"mt\":e.push({start:n,deltas:[],abs:[]});break;case\"lt\":var i=[n.x-A[r-1].x,n.y-A[r-1].y];e[e.length-1].deltas.push(i),e[e.length-1].abs.push(n);break;case\"bct\":i=[n.x1-A[r-1].x,n.y1-A[r-1].y,n.x2-A[r-1].x,n.y2-A[r-1].y,n.x-A[r-1].x,n.y-A[r-1].y],e[e.length-1].deltas.push(i);break;case\"qct\":var o=A[r-1].x+2/3*(n.x1-A[r-1].x),a=A[r-1].y+2/3*(n.y1-A[r-1].y),s=n.x+2/3*(n.x1-n.x),c=n.y+2/3*(n.y1-n.y),l=n.x,u=n.y;i=[o-A[r-1].x,a-A[r-1].y,s-A[r-1].x,c-A[r-1].y,l-A[r-1].x,u-A[r-1].y],e[e.length-1].deltas.push(i);break;case\"arc\":0==e.length&&e.push({start:{x:0,y:0},deltas:[],abs:[]}),e[e.length-1].arc=!0,Array.isArray(e[e.length-1].abs)&&e[e.length-1].abs.push(n)}}for(r=0;r<e.length;r++){var h;if(h=r==e.length-1?\"s\":null,e[r].arc)for(var d=e[r].abs,f=0;f<d.length;f++){var p=d[f],g=360*p.startAngle/(2*Math.PI),B=360*p.endAngle/(2*Math.PI),w=p.x,m=p.y;this.internal.arc2(this,w,m,p.radius,g,B,p.anticlockwise,h,t)}else w=e[r].start.x,m=e[r].start.y,t?(this.pdf.lines(e[r].deltas,w,m,null,null),this.pdf.clip_fixed()):this.pdf.lines(e[r].deltas,w,m,null,h)}}},_isFillTransparent:function(){return this.ctx._isFillTransparent||0==this.globalAlpha},_isStrokeTransparent:function(){return this.ctx._isStrokeTransparent||0==this.globalAlpha},fill:function(t){if(0<this.ctx._clip_path.length){var e;(e=window.outIntercept?\"group\"===window.outIntercept.type?window.outIntercept.stream:window.outIntercept:this.internal.getCurrentPage()).push(\"q\");var A=this.path;this.path=this.ctx._clip_path,this.ctx._clip_path=[],this._fill(t,!0),this.ctx._clip_path=this.path,this.path=A,this._fill(t,!1),e.push(\"Q\")}else this._fill(t,!1)},_fill:function(t,e){if(!this._isFillTransparent()){var r,n=\"function\"==typeof this.pdf.internal.newObject2;r=window.outIntercept?\"group\"===window.outIntercept.type?window.outIntercept.stream:window.outIntercept:this.internal.getCurrentPage();var i=[],o=window.outIntercept;if(n)switch(this.ctx.globalCompositeOperation){case\"normal\":case\"source-over\":break;case\"destination-in\":case\"destination-out\":var a=this.pdf.internal.newStreamObject(),s=this.pdf.internal.newObject2();s.push(\"<</Type /ExtGState\"),s.push(\"/SMask <</S /Alpha /G \"+a.objId+\" 0 R>>\"),s.push(\">>\");var c=\"MASK\"+s.objId;this.pdf.internal.addGraphicsState(c,s.objId);var l=\"/\"+c+\" gs\";r.splice(0,0,\"q\"),r.splice(1,0,l),r.push(\"Q\"),window.outIntercept=a;break;default:var u=\"/\"+this.pdf.internal.blendModeMap[this.ctx.globalCompositeOperation.toUpperCase()];u&&this.pdf.internal.out(u+\" gs\")}var h=this.ctx.globalAlpha;if(this.ctx._fillOpacity<1&&(h=this.ctx._fillOpacity),n){var d=this.pdf.internal.newObject2();d.push(\"<</Type /ExtGState\"),d.push(\"/CA \"+h),d.push(\"/ca \"+h),d.push(\">>\"),c=\"GS_O_\"+d.objId,this.pdf.internal.addGraphicsState(c,d.objId),this.pdf.internal.out(\"/\"+c+\" gs\")}for(var f=this.path,p=0;p<f.length;p++){var g=f[p];switch(g.type){case\"mt\":i.push({start:g,deltas:[],abs:[]});break;case\"lt\":var B=[g.x-f[p-1].x,g.y-f[p-1].y];i[i.length-1].deltas.push(B),i[i.length-1].abs.push(g);break;case\"bct\":B=[g.x1-f[p-1].x,g.y1-f[p-1].y,g.x2-f[p-1].x,g.y2-f[p-1].y,g.x-f[p-1].x,g.y-f[p-1].y],i[i.length-1].deltas.push(B);break;case\"qct\":var w=f[p-1].x+2/3*(g.x1-f[p-1].x),m=f[p-1].y+2/3*(g.y1-f[p-1].y),y=g.x+2/3*(g.x1-g.x),v=g.y+2/3*(g.y1-g.y),Q=g.x,C=g.y;B=[w-f[p-1].x,m-f[p-1].y,y-f[p-1].x,v-f[p-1].y,Q-f[p-1].x,C-f[p-1].y],i[i.length-1].deltas.push(B);break;case\"arc\":0===i.length&&i.push({deltas:[],abs:[]}),i[i.length-1].arc=!0,Array.isArray(i[i.length-1].abs)&&i[i.length-1].abs.push(g);break;case\"close\":i.push({close:!0})}}for(p=0;p<i.length;p++){var U;if(p==i.length-1?(U=\"f\",\"evenodd\"===t&&(U+=\"*\")):U=null,i[p].close)this.pdf.internal.out(\"h\"),U&&this.pdf.internal.out(U);else if(i[p].arc){i[p].start&&this.internal.move2(this,i[p].start.x,i[p].start.y);for(var b=i[p].abs,F=0;F<b.length;F++){var E=b[F];if(void 0!==E.startAngle){var x=360*E.startAngle/(2*Math.PI),H=360*E.endAngle/(2*Math.PI),I=E.x,S=E.y;0===F&&this.internal.move2(this,I,S),this.internal.arc2(this,I,S,E.radius,x,H,E.anticlockwise,null,e),F===b.length-1&&i[p].start&&(I=i[p].start.x,S=i[p].start.y,this.internal.line2(A,I,S))}else this.internal.line2(A,E.x,E.y)}}else I=i[p].start.x,S=i[p].start.y,e?(this.pdf.lines(i[p].deltas,I,S,null,null),this.pdf.clip_fixed()):this.pdf.lines(i[p].deltas,I,S,null,U)}window.outIntercept=o}},pushMask:function(){if(\"function\"==typeof this.pdf.internal.newObject2){var t=this.pdf.internal.newStreamObject(),e=this.pdf.internal.newObject2();e.push(\"<</Type /ExtGState\"),e.push(\"/SMask <</S /Alpha /G \"+t.objId+\" 0 R>>\"),e.push(\">>\");var A=\"MASK\"+e.objId;this.pdf.internal.addGraphicsState(A,e.objId);var r=\"/\"+A+\" gs\";this.pdf.internal.out(r)}else console.log(\"jsPDF v2 not enabled\")},clip:function(){if(0<this.ctx._clip_path.length)for(var t=0;t<this.path.length;t++)this.ctx._clip_path.push(this.path[t]);else this.ctx._clip_path=this.path;this.path=[]},measureText:function(t){var e=this.pdf;return{getWidth:function(){var A=e.internal.getFontSize(),r=e.getStringUnitWidth(t)*A/e.internal.scaleFactor;return r*=1.3333},get width(){return this.getWidth(t)}}},_getBaseline:function(t){var e=parseInt(this.pdf.internal.getFontSize()),A=.25*e;switch(this.ctx.textBaseline){case\"bottom\":return t-A;case\"top\":return t+e;case\"hanging\":return t+e-A;case\"middle\":return t+e/2-A;case\"ideographic\":return t;case\"alphabetic\":default:return t}}};var A=t.context2d;Object.defineProperty(A,\"fillStyle\",{set:function(t){this.setFillStyle(t)},get:function(){return this.ctx.fillStyle}}),Object.defineProperty(A,\"strokeStyle\",{set:function(t){this.setStrokeStyle(t)},get:function(){return this.ctx.strokeStyle}}),Object.defineProperty(A,\"lineWidth\",{set:function(t){this.setLineWidth(t)},get:function(){return this.ctx.lineWidth}}),Object.defineProperty(A,\"lineCap\",{set:function(t){this.setLineCap(t)},get:function(){return this.ctx.lineCap}}),Object.defineProperty(A,\"lineJoin\",{set:function(t){this.setLineJoin(t)},get:function(){return this.ctx.lineJoin}}),Object.defineProperty(A,\"miterLimit\",{set:function(t){this.ctx.miterLimit=t},get:function(){return this.ctx.miterLimit}}),Object.defineProperty(A,\"textBaseline\",{set:function(t){this.setTextBaseline(t)},get:function(){return this.getTextBaseline()}}),Object.defineProperty(A,\"textAlign\",{set:function(t){this.setTextAlign(t)},get:function(){return this.getTextAlign()}}),Object.defineProperty(A,\"font\",{set:function(t){this.setFont(t)},get:function(){return this.ctx.font}}),Object.defineProperty(A,\"globalCompositeOperation\",{set:function(t){this.ctx.globalCompositeOperation=t},get:function(){return this.ctx.globalCompositeOperation}}),Object.defineProperty(A,\"globalAlpha\",{set:function(t){this.ctx.globalAlpha=t},get:function(){return this.ctx.globalAlpha}}),Object.defineProperty(A,\"canvas\",{get:function(){return{parentNode:!1,style:!1}}}),Object.defineProperty(A,\"ignoreClearRect\",{set:function(t){this.ctx.ignoreClearRect=t},get:function(){return this.ctx.ignoreClearRect}}),A.internal={},A.internal.rxRgb=/rgb\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)/,A.internal.rxRgba=/rgba\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*([\\d\\.]+)\\s*\\)/,A.internal.rxTransparent=/transparent|rgba\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*0+\\s*\\)/,A.internal.arc=function(t,e,A,r,n,i,o,a){for(var s=this.pdf.internal.scaleFactor,c=this.pdf.internal.pageSize.getHeight(),l=this.pdf.internal.f2,u=n*(Math.PI/180),h=i*(Math.PI/180),d=this.createArc(r,u,h,o),f=0;f<d.length;f++){var p=d[f];0===f?this.pdf.internal.out([l((p.x1+e)*s),l((c-(p.y1+A))*s),\"m\",l((p.x2+e)*s),l((c-(p.y2+A))*s),l((p.x3+e)*s),l((c-(p.y3+A))*s),l((p.x4+e)*s),l((c-(p.y4+A))*s),\"c\"].join(\" \")):this.pdf.internal.out([l((p.x2+e)*s),l((c-(p.y2+A))*s),l((p.x3+e)*s),l((c-(p.y3+A))*s),l((p.x4+e)*s),l((c-(p.y4+A))*s),\"c\"].join(\" \")),t._lastPoint={x:e,y:A}}null!==a&&this.pdf.internal.out(this.pdf.internal.getStyle(a))},A.internal.arc2=function(t,e,A,r,n,i,o,a,s){var c=e,l=A;s?(this.arc(t,c,l,r,n,i,o,null),this.pdf.clip_fixed()):this.arc(t,c,l,r,n,i,o,a)},A.internal.move2=function(t,e,A){var r=this.pdf.internal.scaleFactor,n=this.pdf.internal.pageSize.getHeight(),i=this.pdf.internal.f2;this.pdf.internal.out([i(e*r),i((n-A)*r),\"m\"].join(\" \")),t._lastPoint={x:e,y:A}},A.internal.line2=function(t,e,A){var r=this.pdf.internal.scaleFactor,n=this.pdf.internal.pageSize.getHeight(),i=this.pdf.internal.f2,o={x:e,y:A};this.pdf.internal.out([i(o.x*r),i((n-o.y)*r),\"l\"].join(\" \")),t._lastPoint=o},A.internal.createArc=function(t,e,A,r){var n=2*Math.PI,i=Math.PI/2,o=e;for((o<n||n<o)&&(o%=n),o<0&&(o=n+o);A<e;)e-=n;var a=Math.abs(A-e);a<n&&r&&(a=n-a);for(var s=[],c=r?-1:1,l=o;1e-5<a;){var u=l+c*Math.min(a,i);s.push(this.createSmallArc(t,l,u)),a-=Math.abs(u-l),l=u}return s},A.internal.getCurrentPage=function(){return this.pdf.internal.pages[this.pdf.internal.getCurrentPageInfo().pageNumber]},A.internal.createSmallArc=function(t,e,A){var r=(A-e)/2,n=t*Math.cos(r),i=t*Math.sin(r),o=n,a=-i,s=o*o+a*a,c=s+o*n+a*i,l=4/3*(Math.sqrt(2*s*c)-c)/(o*i-a*n),u=o-l*a,h=a+l*o,d=u,f=-h,p=r+e,g=Math.cos(p),B=Math.sin(p);return{x1:t*Math.cos(e),y1:t*Math.sin(e),x2:u*g-h*B,y2:u*B+h*g,x3:d*g-f*B,y3:d*B+f*g,x4:t*Math.cos(A),y4:t*Math.sin(A)}}}(st.API,\"undefined\"!=typeof self&&self||\"undefined\"!=typeof window&&window||void 0!==r&&r||Function('return typeof this === \"object\" && this.content')()||Function(\"return this\")()),function(t){var e,A,r,n,i,o,a,s,c,l,u,h,d,f,p,g,B,w,m,y;e=function(){function t(){}return function(e){return t.prototype=e,new t}}(),l=function(t){var e,A,r,n,i,o,a;for(A=0,r=t.length,e=void 0,o=n=!1;!n&&A!==r;)(e=t[A]=t[A].trimLeft())&&(n=!0),A++;for(A=r-1;r&&!o&&-1!==A;)(e=t[A]=t[A].trimRight())&&(o=!0),A--;for(i=/\\s+$/g,a=!0,A=0;A!==r;)\"\\u2028\"!=t[A]&&(e=t[A].replace(/\\s+/g,\" \"),a&&(e=e.trimLeft()),e&&(a=i.test(e)),t[A]=e),A++;return t},h=function(t){var e,A,n;for(e=void 0,A=(n=t.split(\",\")).shift();!e&&A;)e=r[A.trim().toLowerCase()],A=n.shift();return e},d=function(t){var e;return-1<(t=\"auto\"===t?\"0px\":t).indexOf(\"em\")&&!isNaN(Number(t.replace(\"em\",\"\")))&&(t=18.719*Number(t.replace(\"em\",\"\"))+\"px\"),-1<t.indexOf(\"pt\")&&!isNaN(Number(t.replace(\"pt\",\"\")))&&(t=1.333*Number(t.replace(\"pt\",\"\"))+\"px\"),(e=f[t])?e:void 0!==(e={\"xx-small\":9,\"x-small\":11,small:13,medium:16,large:19,\"x-large\":23,\"xx-large\":28,auto:0}[t])?f[t]=e/16:(e=parseFloat(t))?f[t]=e/16:(e=t.match(/([\\d\\.]+)(px)/),Array.isArray(e)&&3===e.length?f[t]=parseFloat(e[1])/16:f[t]=1)},c=function(t){var e,A,r,c,l;return l=t,c=document.defaultView&&document.defaultView.getComputedStyle?document.defaultView.getComputedStyle(l,null):l.currentStyle?l.currentStyle:l.style,A=void 0,(e={})[\"font-family\"]=h((r=function(t){return t=t.replace(/-\\D/g,function(t){return t.charAt(1).toUpperCase()}),c[t]})(\"font-family\"))||\"times\",e[\"font-style\"]=n[r(\"font-style\")]||\"normal\",e[\"text-align\"]=i[r(\"text-align\")]||\"left\",\"bold\"===(A=o[r(\"font-weight\")]||\"normal\")&&(\"normal\"===e[\"font-style\"]?e[\"font-style\"]=A:e[\"font-style\"]=A+e[\"font-style\"]),e[\"font-size\"]=d(r(\"font-size\"))||1,e[\"line-height\"]=d(r(\"line-height\"))||1,e.display=\"inline\"===r(\"display\")?\"inline\":\"block\",A=\"block\"===e.display,e[\"margin-top\"]=A&&d(r(\"margin-top\"))||0,e[\"margin-bottom\"]=A&&d(r(\"margin-bottom\"))||0,e[\"padding-top\"]=A&&d(r(\"padding-top\"))||0,e[\"padding-bottom\"]=A&&d(r(\"padding-bottom\"))||0,e[\"margin-left\"]=A&&d(r(\"margin-left\"))||0,e[\"margin-right\"]=A&&d(r(\"margin-right\"))||0,e[\"padding-left\"]=A&&d(r(\"padding-left\"))||0,e[\"padding-right\"]=A&&d(r(\"padding-right\"))||0,e[\"page-break-before\"]=r(\"page-break-before\")||\"auto\",e.float=a[r(\"cssFloat\")]||\"none\",e.clear=s[r(\"clear\")]||\"none\",e.color=r(\"color\"),e},p=function(t,e,A){var r,n,i,o,a;if(i=!1,o=n=void 0,r=A[\"#\"+t.id])if(\"function\"==typeof r)i=r(t,e);else for(n=0,o=r.length;!i&&n!==o;)i=r[n](t,e),n++;if(r=A[t.nodeName],!i&&r)if(\"function\"==typeof r)i=r(t,e);else for(n=0,o=r.length;!i&&n!==o;)i=r[n](t,e),n++;for(a=\"string\"==typeof t.className?t.className.split(\" \"):[],n=0;n<a.length;n++)if(r=A[\".\"+a[n]],!i&&r)if(\"function\"==typeof r)i=r(t,e);else for(n=0,o=r.length;!i&&n!==o;)i=r[n](t,e),n++;return i},y=function(t,e){var A,r,n,i,o,a,s,c,l;for(A=[],r=[],n=0,l=t.rows[0].cells.length,s=t.clientWidth;n<l;)c=t.rows[0].cells[n],r[n]={name:c.textContent.toLowerCase().replace(/\\s+/g,\"\"),prompt:c.textContent.replace(/\\r?\\n/g,\"\"),width:c.clientWidth/s*e.pdf.internal.pageSize.getWidth()},n++;for(n=1;n<t.rows.length;){for(a=t.rows[n],o={},i=0;i<a.cells.length;)o[r[i].name]=a.cells[i].textContent.replace(/\\r?\\n/g,\"\"),i++;A.push(o),n++}return{rows:A,headers:r}};var v={SCRIPT:1,STYLE:1,NOSCRIPT:1,OBJECT:1,EMBED:1,SELECT:1},Q=1;A=function(t,r,n){var i,o,a,s,l,u,h,d;for(o=t.childNodes,i=void 0,(l=\"block\"===(a=c(t)).display)&&(r.setBlockBoundary(),r.setBlockStyle(a)),s=0,u=o.length;s<u;){if(\"object\"===(void 0===(i=o[s])?\"undefined\":at(i))){if(r.executeWatchFunctions(i),1===i.nodeType&&\"HEADER\"===i.nodeName){var f=i,B=r.pdf.margins_doc.top;r.pdf.internal.events.subscribe(\"addPage\",function(t){r.y=B,A(f,r,n),r.pdf.margins_doc.top=r.y+10,r.y+=10},!1)}if(8===i.nodeType&&\"#comment\"===i.nodeName)~i.textContent.indexOf(\"ADD_PAGE\")&&(r.pdf.addPage(),r.y=r.pdf.margins_doc.top);else if(1!==i.nodeType||v[i.nodeName])if(3===i.nodeType){var w=i.nodeValue;if(i.nodeValue&&\"LI\"===i.parentNode.nodeName)if(\"OL\"===i.parentNode.parentNode.nodeName)w=Q+++\". \"+w;else{var m=a[\"font-size\"],C=(3-.75*m)*r.pdf.internal.scaleFactor,U=.75*m*r.pdf.internal.scaleFactor,b=1.74*m/r.pdf.internal.scaleFactor;d=function(t,e){this.pdf.circle(t+C,e+U,b,\"FD\")}}16&i.ownerDocument.body.compareDocumentPosition(i)&&r.addText(w,a)}else\"string\"==typeof i&&r.addText(i,a);else{var F;if(\"IMG\"===i.nodeName){var E=i.getAttribute(\"src\");F=g[r.pdf.sHashCode(E)||E]}if(F){r.pdf.internal.pageSize.getHeight()-r.pdf.margins_doc.bottom<r.y+i.height&&r.y>r.pdf.margins_doc.top&&(r.pdf.addPage(),r.y=r.pdf.margins_doc.top,r.executeWatchFunctions(i));var x=c(i),H=r.x,I=12/r.pdf.internal.scaleFactor,S=(x[\"margin-left\"]+x[\"padding-left\"])*I,_=(x[\"margin-right\"]+x[\"padding-right\"])*I,T=(x[\"margin-top\"]+x[\"padding-top\"])*I,N=(x[\"margin-bottom\"]+x[\"padding-bottom\"])*I;void 0!==x.float&&\"right\"===x.float?H+=r.settings.width-i.width-_:H+=S,r.pdf.addImage(F,H,r.y+T,i.width,i.height),F=void 0,\"right\"===x.float||\"left\"===x.float?(r.watchFunctions.push(function(t,e,A,n){return r.y>=e?(r.x+=t,r.settings.width+=A,!0):!!(n&&1===n.nodeType&&!v[n.nodeName]&&r.x+n.width>r.pdf.margins_doc.left+r.pdf.margins_doc.width)&&(r.x+=t,r.y=e,r.settings.width+=A,!0)}.bind(this,\"left\"===x.float?-i.width-S-_:0,r.y+i.height+T+N,i.width)),r.watchFunctions.push(function(t,e,A){return!(r.y<t&&e===r.pdf.internal.getNumberOfPages())||1===A.nodeType&&\"both\"===c(A).clear&&(r.y=t,!0)}.bind(this,r.y+i.height,r.pdf.internal.getNumberOfPages())),r.settings.width-=i.width+S+_,\"left\"===x.float&&(r.x+=i.width+S+_)):r.y+=i.height+T+N}else if(\"TABLE\"===i.nodeName)h=y(i,r),r.y+=10,r.pdf.table(r.x,r.y,h.rows,h.headers,{autoSize:!1,printHeaders:n.printHeaders,margins:r.pdf.margins_doc,css:c(i)}),r.y=r.pdf.lastCellPos.y+r.pdf.lastCellPos.h+20;else if(\"OL\"===i.nodeName||\"UL\"===i.nodeName)Q=1,p(i,r,n)||A(i,r,n),r.y+=10;else if(\"LI\"===i.nodeName){var k=r.x;r.x+=20/r.pdf.internal.scaleFactor,r.y+=3,p(i,r,n)||A(i,r,n),r.x=k}else\"BR\"===i.nodeName?(r.y+=a[\"font-size\"]*r.pdf.internal.scaleFactor,r.addText(\"\\u2028\",e(a))):p(i,r,n)||A(i,r,n)}}s++}if(n.outY=r.y,l)return r.setBlockBoundary(d)},g={},B=function(t,e,A,r){function n(){e.pdf.internal.events.publish(\"imagesLoaded\"),r(o)}function i(t,A,r){if(t){var i=new Image;o=++c,i.crossOrigin=\"\",i.onerror=i.onload=function(){if(i.complete&&(0===i.src.indexOf(\"data:image/\")&&(i.width=A||i.width||0,i.height=r||i.height||0),i.width+i.height)){var o=e.pdf.sHashCode(t)||t;g[o]=g[o]||i}--c||n()},i.src=t}}for(var o,a=t.getElementsByTagName(\"img\"),s=a.length,c=0;s--;)i(a[s].getAttribute(\"src\"),a[s].width,a[s].height);return c||n()},w=function(t,e,r){var n=t.getElementsByTagName(\"footer\");if(0<n.length){n=n[0];var i=e.pdf.internal.write,o=e.y;e.pdf.internal.write=function(){},A(n,e,r);var a=Math.ceil(e.y-o)+5;e.y=o,e.pdf.internal.write=i,e.pdf.margins_doc.bottom+=a;for(var s=function(t){var i=void 0!==t?t.pageNumber:1,o=e.y;e.y=e.pdf.internal.pageSize.getHeight()-e.pdf.margins_doc.bottom,e.pdf.margins_doc.bottom-=a;for(var s=n.getElementsByTagName(\"span\"),c=0;c<s.length;++c)-1<(\" \"+s[c].className+\" \").replace(/[\\n\\t]/g,\" \").indexOf(\" pageCounter \")&&(s[c].innerHTML=i),-1<(\" \"+s[c].className+\" \").replace(/[\\n\\t]/g,\" \").indexOf(\" totalPages \")&&(s[c].innerHTML=\"###jsPDFVarTotalPages###\");A(n,e,r),e.pdf.margins_doc.bottom+=a,e.y=o},c=n.getElementsByTagName(\"span\"),l=0;l<c.length;++l)-1<(\" \"+c[l].className+\" \").replace(/[\\n\\t]/g,\" \").indexOf(\" totalPages \")&&e.pdf.internal.events.subscribe(\"htmlRenderingFinished\",e.pdf.putTotalPages.bind(e.pdf,\"###jsPDFVarTotalPages###\"),!0);e.pdf.internal.events.subscribe(\"addPage\",s,!1),s(),v.FOOTER=1}},m=function(t,e,r,n,i,o){if(!e)return!1;var a,s,c,l;\"string\"==typeof e||e.parentNode||(e=\"\"+e.innerHTML),\"string\"==typeof e&&(a=e.replace(/<\\/?script[^>]*?>/gi,\"\"),l=\"jsPDFhtmlText\"+Date.now().toString()+(1e3*Math.random()).toFixed(0),(c=document.createElement(\"div\")).style.cssText=\"position: absolute !important;clip: rect(1px 1px 1px 1px); /* IE6, IE7 */clip: rect(1px, 1px, 1px, 1px);padding:0 !important;border:0 !important;height: 1px !important;width: 1px !important; top:auto;left:-100px;overflow: hidden;\",c.innerHTML='<iframe style=\"height:1px;width:1px\" name=\"'+l+'\" />',document.body.appendChild(c),(s=window.frames[l]).document.open(),s.document.writeln(a),s.document.close(),e=s.document.body);var h,d=new u(t,r,n,i);return B.call(this,e,d,i.elementHandlers,function(t){w(e,d,i.elementHandlers),A(e,d,i.elementHandlers),d.pdf.internal.events.publish(\"htmlRenderingFinished\"),h=d.dispose(),\"function\"==typeof o?o(h):t&&console.error(\"jsPDF Warning: rendering issues? provide a callback to fromHTML!\")}),h||{x:d.x,y:d.y}},(u=function(t,e,A,r){return this.pdf=t,this.x=e,this.y=A,this.settings=r,this.watchFunctions=[],this.init(),this}).prototype.init=function(){return this.paragraph={text:[],style:[]},this.pdf.internal.write(\"q\")},u.prototype.dispose=function(){return this.pdf.internal.write(\"Q\"),{x:this.x,y:this.y,ready:!0}},u.prototype.executeWatchFunctions=function(t){var e=!1,A=[];if(0<this.watchFunctions.length){for(var r=0;r<this.watchFunctions.length;++r)!0===this.watchFunctions[r](t)?e=!0:A.push(this.watchFunctions[r]);this.watchFunctions=A}return e},u.prototype.splitFragmentsIntoLines=function(t,A){var r,n,i,o,a,s,c,l,u,h,d,f,p,g;for(h=this.pdf.internal.scaleFactor,o={},s=c=l=g=a=i=u=n=void 0,f=[d=[]],r=0,p=this.settings.width;t.length;)if(a=t.shift(),g=A.shift(),a)if((i=o[(n=g[\"font-family\"])+(u=g[\"font-style\"])])||(i=this.pdf.internal.getFont(n,u).metadata.Unicode,o[n+u]=i),l={widths:i.widths,kerning:i.kerning,fontSize:12*g[\"font-size\"],textIndent:r},c=this.pdf.getStringUnitWidth(a,l)*l.fontSize/h,\"\\u2028\"==a)d=[],f.push(d);else if(p<r+c){for(s=this.pdf.splitTextToSize(a,p,l),d.push([s.shift(),g]);s.length;)d=[[s.shift(),g]],f.push(d);r=this.pdf.getStringUnitWidth(d[0][0],l)*l.fontSize/h}else d.push([a,g]),r+=c;if(void 0!==g[\"text-align\"]&&(\"center\"===g[\"text-align\"]||\"right\"===g[\"text-align\"]||\"justify\"===g[\"text-align\"]))for(var B=0;B<f.length;++B){var w=this.pdf.getStringUnitWidth(f[B][0][0],l)*l.fontSize/h;0<B&&(f[B][0][1]=e(f[B][0][1]));var m=p-w;if(\"right\"===g[\"text-align\"])f[B][0][1][\"margin-left\"]=m;else if(\"center\"===g[\"text-align\"])f[B][0][1][\"margin-left\"]=m/2;else if(\"justify\"===g[\"text-align\"]){var y=f[B][0][0].split(\" \").length-1;f[B][0][1][\"word-spacing\"]=m/y,B===f.length-1&&(f[B][0][1][\"word-spacing\"]=0)}}return f},u.prototype.RenderTextFragment=function(t,e){var A,r;r=0,this.pdf.internal.pageSize.getHeight()-this.pdf.margins_doc.bottom<this.y+this.pdf.internal.getFontSize()&&(this.pdf.internal.write(\"ET\",\"Q\"),this.pdf.addPage(),this.y=this.pdf.margins_doc.top,this.pdf.internal.write(\"q\",\"BT\",this.getPdfColor(e.color),this.pdf.internal.getCoordinateString(this.x),this.pdf.internal.getVerticalCoordinateString(this.y),\"Td\"),r=Math.max(r,e[\"line-height\"],e[\"font-size\"]),this.pdf.internal.write(0,(-12*r).toFixed(2),\"Td\")),A=this.pdf.internal.getFont(e[\"font-family\"],e[\"font-style\"]);var n=this.getPdfColor(e.color);n!==this.lastTextColor&&(this.pdf.internal.write(n),this.lastTextColor=n),void 0!==e[\"word-spacing\"]&&0<e[\"word-spacing\"]&&this.pdf.internal.write(e[\"word-spacing\"].toFixed(2),\"Tw\"),this.pdf.internal.write(\"/\"+A.id,(12*e[\"font-size\"]).toFixed(2),\"Tf\",\"(\"+this.pdf.internal.pdfEscape(t)+\") Tj\"),void 0!==e[\"word-spacing\"]&&this.pdf.internal.write(0,\"Tw\")},u.prototype.getPdfColor=function(t){var e,A,r,n=new RGBColor(t),i=/rgb\\s*\\(\\s*(\\d+),\\s*(\\d+),\\s*(\\d+\\s*)\\)/.exec(t);if(null!=i?(e=parseInt(i[1]),A=parseInt(i[2]),r=parseInt(i[3])):(\"#\"!=t.charAt(0)&&(t=n.ok?n.toHex():\"#000000\"),e=t.substring(1,3),e=parseInt(e,16),A=t.substring(3,5),A=parseInt(A,16),r=t.substring(5,7),r=parseInt(r,16)),\"string\"==typeof e&&/^#[0-9A-Fa-f]{6}$/.test(e)){var o=parseInt(e.substr(1),16);e=o>>16&255,A=o>>8&255,r=255&o}var a=this.f3;return 0===e&&0===A&&0===r||void 0===A?a(e/255)+\" g\":[a(e/255),a(A/255),a(r/255),\"rg\"].join(\" \")},u.prototype.f3=function(t){return t.toFixed(3)},u.prototype.renderParagraph=function(t){var e,A,r,n,i,o,a,s,c,u,h,d,f;if(r=l(this.paragraph.text),d=this.paragraph.style,e=this.paragraph.blockstyle,this.paragraph.priorblockstyle,this.paragraph={text:[],style:[],blockstyle:{},priorblockstyle:e},r.join(\"\").trim()){a=this.splitFragmentsIntoLines(r,d),s=o=void 0,A=12/this.pdf.internal.scaleFactor,this.priorMarginBottom=this.priorMarginBottom||0,h=(Math.max((e[\"margin-top\"]||0)-this.priorMarginBottom,0)+(e[\"padding-top\"]||0))*A,u=((e[\"margin-bottom\"]||0)+(e[\"padding-bottom\"]||0))*A,this.priorMarginBottom=e[\"margin-bottom\"]||0,\"always\"===e[\"page-break-before\"]&&(this.pdf.addPage(),this.y=0,h=((e[\"margin-top\"]||0)+(e[\"padding-top\"]||0))*A),c=this.pdf.internal.write,i=n=void 0,this.y+=h,c(\"q\",\"BT 0 g\",this.pdf.internal.getCoordinateString(this.x),this.pdf.internal.getVerticalCoordinateString(this.y),\"Td\");for(var p=0;a.length;){for(n=s=0,i=(o=a.shift()).length;n!==i;)o[n][0].trim()&&(s=Math.max(s,o[n][1][\"line-height\"],o[n][1][\"font-size\"]),f=7*o[n][1][\"font-size\"]),n++;var g=0,B=0;for(void 0!==o[0][1][\"margin-left\"]&&0<o[0][1][\"margin-left\"]&&(g=(B=this.pdf.internal.getCoordinateString(o[0][1][\"margin-left\"]))-p,p=B),c(g+Math.max(e[\"margin-left\"]||0,0)*A,(-12*s).toFixed(2),\"Td\"),n=0,i=o.length;n!==i;)o[n][0]&&this.RenderTextFragment(o[n][0],o[n][1]),n++;if(this.y+=s*A,this.executeWatchFunctions(o[0][1])&&0<a.length){var w=[],m=[];a.forEach(function(t){for(var e=0,A=t.length;e!==A;)t[e][0]&&(w.push(t[e][0]+\" \"),m.push(t[e][1])),++e}),a=this.splitFragmentsIntoLines(l(w),m),c(\"ET\",\"Q\"),c(\"q\",\"BT 0 g\",this.pdf.internal.getCoordinateString(this.x),this.pdf.internal.getVerticalCoordinateString(this.y),\"Td\")}}return t&&\"function\"==typeof t&&t.call(this,this.x-9,this.y-f/2),c(\"ET\",\"Q\"),this.y+=u}},u.prototype.setBlockBoundary=function(t){return this.renderParagraph(t)},u.prototype.setBlockStyle=function(t){return this.paragraph.blockstyle=t},u.prototype.addText=function(t,e){return this.paragraph.text.push(t),this.paragraph.style.push(e)},r={helvetica:\"helvetica\",\"sans-serif\":\"helvetica\",\"times new roman\":\"times\",serif:\"times\",times:\"times\",monospace:\"courier\",courier:\"courier\"},o={100:\"normal\",200:\"normal\",300:\"normal\",400:\"normal\",500:\"bold\",600:\"bold\",700:\"bold\",800:\"bold\",900:\"bold\",normal:\"normal\",bold:\"bold\",bolder:\"bold\",lighter:\"normal\"},n={normal:\"normal\",italic:\"italic\",oblique:\"italic\"},i={left:\"left\",right:\"right\",center:\"center\",justify:\"justify\"},a={none:\"none\",right:\"right\",left:\"left\"},s={none:\"none\",both:\"both\"},f={normal:1},t.fromHTML=function(t,e,A,r,n,i){return this.margins_doc=i||{top:0,bottom:0},r||(r={}),r.elementHandlers||(r.elementHandlers={}),m(this,t,isNaN(e)?4:e,isNaN(A)?4:A,r,n)}}(st.API),st.API.addJS=function(t){return C=t,this.internal.events.subscribe(\"postPutResources\",function(t){v=this.internal.newObject(),this.internal.out(\"<<\"),this.internal.out(\"/Names [(EmbeddedJS) \"+(v+1)+\" 0 R]\"),this.internal.out(\">>\"),this.internal.out(\"endobj\"),Q=this.internal.newObject(),this.internal.out(\"<<\"),this.internal.out(\"/S /JavaScript\"),this.internal.out(\"/JS (\"+C+\")\"),this.internal.out(\">>\"),this.internal.out(\"endobj\")}),this.internal.events.subscribe(\"putCatalog\",function(){void 0!==v&&void 0!==Q&&this.internal.out(\"/Names <</JavaScript \"+v+\" 0 R>>\")}),this},(U=st.API).events.push([\"postPutResources\",function(){var t=this,e=/^(\\d+) 0 obj$/;if(0<this.outline.root.children.length)for(var A=t.outline.render().split(/\\r\\n/),r=0;r<A.length;r++){var n=A[r],i=e.exec(n);if(null!=i){var o=i[1];t.internal.newObjectDeferredBegin(o)}t.internal.write(n)}if(this.outline.createNamedDestinations){var a=this.internal.pages.length,s=[];for(r=0;r<a;r++){var c=t.internal.newObject();s.push(c);var l=t.internal.getPageInfo(r+1);t.internal.write(\"<< /D[\"+l.objId+\" 0 R /XYZ null null null]>> endobj\")}var u=t.internal.newObject();for(t.internal.write(\"<< /Names [ \"),r=0;r<s.length;r++)t.internal.write(\"(page_\"+(r+1)+\")\"+s[r]+\" 0 R\");t.internal.write(\" ] >>\",\"endobj\"),t.internal.newObject(),t.internal.write(\"<< /Dests \"+u+\" 0 R\"),t.internal.write(\">>\",\"endobj\")}}]),U.events.push([\"putCatalog\",function(){0<this.outline.root.children.length&&(this.internal.write(\"/Outlines\",this.outline.makeRef(this.outline.root)),this.outline.createNamedDestinations&&this.internal.write(\"/Names \"+namesOid+\" 0 R\"))}]),U.events.push([\"initialized\",function(){var t=this;t.outline={createNamedDestinations:!1,root:{children:[]}},t.outline.add=function(t,e,A){var r={title:e,options:A,children:[]};return null==t&&(t=this.root),t.children.push(r),r},t.outline.render=function(){return this.ctx={},this.ctx.val=\"\",this.ctx.pdf=t,this.genIds_r(this.root),this.renderRoot(this.root),this.renderItems(this.root),this.ctx.val},t.outline.genIds_r=function(e){e.id=t.internal.newObjectDeferred();for(var A=0;A<e.children.length;A++)this.genIds_r(e.children[A])},t.outline.renderRoot=function(t){this.objStart(t),this.line(\"/Type /Outlines\"),0<t.children.length&&(this.line(\"/First \"+this.makeRef(t.children[0])),this.line(\"/Last \"+this.makeRef(t.children[t.children.length-1]))),this.line(\"/Count \"+this.count_r({count:0},t)),this.objEnd()},t.outline.renderItems=function(e){for(var A=0;A<e.children.length;A++){var r=e.children[A];this.objStart(r),this.line(\"/Title \"+this.makeString(r.title)),this.line(\"/Parent \"+this.makeRef(e)),0<A&&this.line(\"/Prev \"+this.makeRef(e.children[A-1])),A<e.children.length-1&&this.line(\"/Next \"+this.makeRef(e.children[A+1])),0<r.children.length&&(this.line(\"/First \"+this.makeRef(r.children[0])),this.line(\"/Last \"+this.makeRef(r.children[r.children.length-1])));var n=this.count=this.count_r({count:0},r);if(0<n&&this.line(\"/Count \"+n),r.options&&r.options.pageNumber){var i=t.internal.getPageInfo(r.options.pageNumber);this.line(\"/Dest [\"+i.objId+\" 0 R /XYZ 0 \"+this.ctx.pdf.internal.pageSize.getHeight()*this.ctx.pdf.internal.scaleFactor+\" 0]\")}this.objEnd()}for(A=0;A<e.children.length;A++)r=e.children[A],this.renderItems(r)},t.outline.line=function(t){this.ctx.val+=t+\"\\r\\n\"},t.outline.makeRef=function(t){return t.id+\" 0 R\"},t.outline.makeString=function(e){return\"(\"+t.internal.pdfEscape(e)+\")\"},t.outline.objStart=function(t){this.ctx.val+=\"\\r\\n\"+t.id+\" 0 obj\\r\\n<<\\r\\n\"},t.outline.objEnd=function(t){this.ctx.val+=\">> \\r\\nendobj\\r\\n\"},t.outline.count_r=function(t,e){for(var A=0;A<e.children.length;A++)t.count++,this.count_r(t,e.children[A]);return t.count}}]),b=st.API,F=function(){var t=\"function\"==typeof Deflater;if(!t)throw new Error(\"requires deflate.js for compression\");return t},E=function(t,e,A,r){var n=5,i=T;switch(r){case b.image_compression.FAST:n=3,i=_;break;case b.image_compression.MEDIUM:n=6,i=N;break;case b.image_compression.SLOW:n=9,i=k}t=I(t,e,A,i);var o=new Uint8Array(x(n)),a=H(t),s=new Deflater(n),c=s.append(t),l=s.flush(),u=o.length+c.length+l.length,h=new Uint8Array(u+4);return h.set(o),h.set(c,o.length),h.set(l,o.length+c.length),h[u++]=a>>>24&255,h[u++]=a>>>16&255,h[u++]=a>>>8&255,h[u++]=255&a,b.arrayBufferToBinaryString(h)},x=function(t,e){var A=Math.LOG2E*Math.log(32768)-8<<4|8,r=A<<8;return r|=Math.min(3,(e-1&255)>>1)<<6,r|=0,[A,255&(r+=31-r%31)]},H=function(t,e){for(var A,r=1,n=0,i=t.length,o=0;0<i;){for(i-=A=e<i?e:i;n+=r+=t[o++],--A;);r%=65521,n%=65521}return(n<<16|r)>>>0},I=function(t,e,A,r){for(var n,i,o,a=t.length/e,s=new Uint8Array(t.length+a),c=P(),l=0;l<a;l++){if(o=l*e,n=t.subarray(o,o+e),r)s.set(r(n,A,i),o+l);else{for(var u=0,h=c.length,d=[];u<h;u++)d[u]=c[u](n,A,i);var f=D(d.concat());s.set(d[f],o+l)}i=n}return s},S=function(t,e,A){var r=Array.apply([],t);return r.unshift(0),r},_=function(t,e,A){var r,n=[],i=0,o=t.length;for(n[0]=1;i<o;i++)r=t[i-e]||0,n[i+1]=t[i]-r+256&255;return n},T=function(t,e,A){var r,n=[],i=0,o=t.length;for(n[0]=2;i<o;i++)r=A&&A[i]||0,n[i+1]=t[i]-r+256&255;return n},N=function(t,e,A){var r,n,i=[],o=0,a=t.length;for(i[0]=3;o<a;o++)r=t[o-e]||0,n=A&&A[o]||0,i[o+1]=t[o]+256-(r+n>>>1)&255;return i},k=function(t,e,A){var r,n,i,o,a=[],s=0,c=t.length;for(a[0]=4;s<c;s++)r=t[s-e]||0,n=A&&A[s]||0,i=A&&A[s-e]||0,o=O(r,n,i),a[s+1]=t[s]-o+256&255;return a},O=function(t,e,A){var r=t+e-A,n=Math.abs(r-t),i=Math.abs(r-e),o=Math.abs(r-A);return n<=i&&n<=o?t:i<=o?e:A},P=function(){return[S,_,T,N,k]},D=function(t){for(var e,A,r,n=0,i=t.length;n<i;)((e=L(t[n].slice(1)))<A||!A)&&(A=e,r=n),n++;return r},L=function(t){for(var e=0,A=t.length,r=0;e<A;)r+=Math.abs(t[e++]);return r},b.processPNG=function(t,e,A,r,n){var i,o,a,s,c,l,u=this.color_spaces.DEVICE_RGB,h=this.decode.FLATE_DECODE,d=8;if(this.isArrayBuffer(t)&&(t=new Uint8Array(t)),this.isArrayBufferView(t)){if(\"function\"!=typeof PNG||\"function\"!=typeof Et)throw new Error(\"PNG support requires png.js and zlib.js\");if(t=(i=new PNG(t)).imgData,d=i.bits,u=i.colorSpace,s=i.colors,-1!==[4,6].indexOf(i.colorType)){if(8===i.bits)for(var f,p=(H=32==i.pixelBitlength?new Uint32Array(i.decodePixels().buffer):16==i.pixelBitlength?new Uint16Array(i.decodePixels().buffer):new Uint8Array(i.decodePixels().buffer)).length,g=new Uint8Array(p*i.colors),B=new Uint8Array(p),w=i.pixelBitlength-i.bits,m=0,y=0;m<p;m++){for(v=H[m],f=0;f<w;)g[y++]=v>>>f&255,f+=i.bits;B[m]=v>>>f&255}if(16===i.bits){p=(H=new Uint32Array(i.decodePixels().buffer)).length,g=new Uint8Array(p*(32/i.pixelBitlength)*i.colors),B=new Uint8Array(p*(32/i.pixelBitlength));for(var v,Q=1<i.colors,C=y=m=0;m<p;)v=H[m++],g[y++]=v>>>0&255,Q&&(g[y++]=v>>>16&255,v=H[m++],g[y++]=v>>>0&255),B[C++]=v>>>16&255;d=8}r!==b.image_compression.NONE&&F()?(t=E(g,i.width*i.colors,i.colors,r),l=E(B,i.width,1,r)):(t=g,l=B,h=null)}if(3===i.colorType&&(u=this.color_spaces.INDEXED,c=i.palette,i.transparency.indexed)){var U=i.transparency.indexed,x=0;for(m=0,p=U.length;m<p;++m)x+=U[m];if((x/=255)==p-1&&-1!==U.indexOf(0))a=[U.indexOf(0)];else if(x!==p){var H=i.decodePixels();for(B=new Uint8Array(H.length),m=0,p=H.length;m<p;m++)B[m]=U[H[m]];l=E(B,i.width,1)}}var I=function(t){var e;switch(r){case b.image_compression.FAST:e=11;break;case b.image_compression.MEDIUM:e=13;break;case b.image_compression.SLOW:e=14;break;default:e=12}return e}();return o=h===this.decode.FLATE_DECODE?\"/Predictor \"+I+\" /Colors \"+s+\" /BitsPerComponent \"+d+\" /Columns \"+i.width:\"/Colors \"+s+\" /BitsPerComponent \"+d+\" /Columns \"+i.width,(this.isArrayBuffer(t)||this.isArrayBufferView(t))&&(t=this.arrayBufferToBinaryString(t)),(l&&this.isArrayBuffer(l)||this.isArrayBufferView(l))&&(l=this.arrayBufferToBinaryString(l)),this.createImageInfo(t,i.width,i.height,u,d,h,e,A,o,a,c,l,I)}throw new Error(\"Unsupported PNG image data, try using JPEG instead.\")},(R=st.API).processGIF89A=function(t,e,A,r,i){var a=new n(t),s=a.width,c=a.height,l=[];a.decodeAndBlitFrameRGBA(0,l);var u={data:l,width:s,height:c},h=new o(100).encode(u,100);return R.processJPEG.call(this,h,e,A,r)},R.processGIF87A=R.processGIF89A,(M=st.API).processBMP=function(t,e,A,r,n){var i=new a(t,!1),s=i.width,c=i.height,l={data:i.getData(),width:s,height:c},u=new o(100).encode(l,100);return M.processJPEG.call(this,u,e,A,r)},st.API.setLanguage=function(t){return void 0===this.internal.languageSettings&&(this.internal.languageSettings={},this.internal.languageSettings.isSubscribed=!1),void 0!=={af:\"Afrikaans\",sq:\"Albanian\",ar:\"Arabic (Standard)\",\"ar-DZ\":\"Arabic (Algeria)\",\"ar-BH\":\"Arabic (Bahrain)\",\"ar-EG\":\"Arabic (Egypt)\",\"ar-IQ\":\"Arabic (Iraq)\",\"ar-JO\":\"Arabic (Jordan)\",\"ar-KW\":\"Arabic (Kuwait)\",\"ar-LB\":\"Arabic (Lebanon)\",\"ar-LY\":\"Arabic (Libya)\",\"ar-MA\":\"Arabic (Morocco)\",\"ar-OM\":\"Arabic (Oman)\",\"ar-QA\":\"Arabic (Qatar)\",\"ar-SA\":\"Arabic (Saudi Arabia)\",\"ar-SY\":\"Arabic (Syria)\",\"ar-TN\":\"Arabic (Tunisia)\",\"ar-AE\":\"Arabic (U.A.E.)\",\"ar-YE\":\"Arabic (Yemen)\",an:\"Aragonese\",hy:\"Armenian\",as:\"Assamese\",ast:\"Asturian\",az:\"Azerbaijani\",eu:\"Basque\",be:\"Belarusian\",bn:\"Bengali\",bs:\"Bosnian\",br:\"Breton\",bg:\"Bulgarian\",my:\"Burmese\",ca:\"Catalan\",ch:\"Chamorro\",ce:\"Chechen\",zh:\"Chinese\",\"zh-HK\":\"Chinese (Hong Kong)\",\"zh-CN\":\"Chinese (PRC)\",\"zh-SG\":\"Chinese (Singapore)\",\"zh-TW\":\"Chinese (Taiwan)\",cv:\"Chuvash\",co:\"Corsican\",cr:\"Cree\",hr:\"Croatian\",cs:\"Czech\",da:\"Danish\",nl:\"Dutch (Standard)\",\"nl-BE\":\"Dutch (Belgian)\",en:\"English\",\"en-AU\":\"English (Australia)\",\"en-BZ\":\"English (Belize)\",\"en-CA\":\"English (Canada)\",\"en-IE\":\"English (Ireland)\",\"en-JM\":\"English (Jamaica)\",\"en-NZ\":\"English (New Zealand)\",\"en-PH\":\"English (Philippines)\",\"en-ZA\":\"English (South Africa)\",\"en-TT\":\"English (Trinidad & Tobago)\",\"en-GB\":\"English (United Kingdom)\",\"en-US\":\"English (United States)\",\"en-ZW\":\"English (Zimbabwe)\",eo:\"Esperanto\",et:\"Estonian\",fo:\"Faeroese\",fj:\"Fijian\",fi:\"Finnish\",fr:\"French (Standard)\",\"fr-BE\":\"French (Belgium)\",\"fr-CA\":\"French (Canada)\",\"fr-FR\":\"French (France)\",\"fr-LU\":\"French (Luxembourg)\",\"fr-MC\":\"French (Monaco)\",\"fr-CH\":\"French (Switzerland)\",fy:\"Frisian\",fur:\"Friulian\",gd:\"Gaelic (Scots)\",\"gd-IE\":\"Gaelic (Irish)\",gl:\"Galacian\",ka:\"Georgian\",de:\"German (Standard)\",\"de-AT\":\"German (Austria)\",\"de-DE\":\"German (Germany)\",\"de-LI\":\"German (Liechtenstein)\",\"de-LU\":\"German (Luxembourg)\",\"de-CH\":\"German (Switzerland)\",el:\"Greek\",gu:\"Gujurati\",ht:\"Haitian\",he:\"Hebrew\",hi:\"Hindi\",hu:\"Hungarian\",is:\"Icelandic\",id:\"Indonesian\",iu:\"Inuktitut\",ga:\"Irish\",it:\"Italian (Standard)\",\"it-CH\":\"Italian (Switzerland)\",ja:\"Japanese\",kn:\"Kannada\",ks:\"Kashmiri\",kk:\"Kazakh\",km:\"Khmer\",ky:\"Kirghiz\",tlh:\"Klingon\",ko:\"Korean\",\"ko-KP\":\"Korean (North Korea)\",\"ko-KR\":\"Korean (South Korea)\",la:\"Latin\",lv:\"Latvian\",lt:\"Lithuanian\",lb:\"Luxembourgish\",mk:\"FYRO Macedonian\",ms:\"Malay\",ml:\"Malayalam\",mt:\"Maltese\",mi:\"Maori\",mr:\"Marathi\",mo:\"Moldavian\",nv:\"Navajo\",ng:\"Ndonga\",ne:\"Nepali\",no:\"Norwegian\",nb:\"Norwegian (Bokmal)\",nn:\"Norwegian (Nynorsk)\",oc:\"Occitan\",or:\"Oriya\",om:\"Oromo\",fa:\"Persian\",\"fa-IR\":\"Persian/Iran\",pl:\"Polish\",pt:\"Portuguese\",\"pt-BR\":\"Portuguese (Brazil)\",pa:\"Punjabi\",\"pa-IN\":\"Punjabi (India)\",\"pa-PK\":\"Punjabi (Pakistan)\",qu:\"Quechua\",rm:\"Rhaeto-Romanic\",ro:\"Romanian\",\"ro-MO\":\"Romanian (Moldavia)\",ru:\"Russian\",\"ru-MO\":\"Russian (Moldavia)\",sz:\"Sami (Lappish)\",sg:\"Sango\",sa:\"Sanskrit\",sc:\"Sardinian\",sd:\"Sindhi\",si:\"Singhalese\",sr:\"Serbian\",sk:\"Slovak\",sl:\"Slovenian\",so:\"Somani\",sb:\"Sorbian\",es:\"Spanish\",\"es-AR\":\"Spanish (Argentina)\",\"es-BO\":\"Spanish (Bolivia)\",\"es-CL\":\"Spanish (Chile)\",\"es-CO\":\"Spanish (Colombia)\",\"es-CR\":\"Spanish (Costa Rica)\",\"es-DO\":\"Spanish (Dominican Republic)\",\"es-EC\":\"Spanish (Ecuador)\",\"es-SV\":\"Spanish (El Salvador)\",\"es-GT\":\"Spanish (Guatemala)\",\"es-HN\":\"Spanish (Honduras)\",\"es-MX\":\"Spanish (Mexico)\",\"es-NI\":\"Spanish (Nicaragua)\",\"es-PA\":\"Spanish (Panama)\",\"es-PY\":\"Spanish (Paraguay)\",\"es-PE\":\"Spanish (Peru)\",\"es-PR\":\"Spanish (Puerto Rico)\",\"es-ES\":\"Spanish (Spain)\",\"es-UY\":\"Spanish (Uruguay)\",\"es-VE\":\"Spanish (Venezuela)\",sx:\"Sutu\",sw:\"Swahili\",sv:\"Swedish\",\"sv-FI\":\"Swedish (Finland)\",\"sv-SV\":\"Swedish (Sweden)\",ta:\"Tamil\",tt:\"Tatar\",te:\"Teluga\",th:\"Thai\",tig:\"Tigre\",ts:\"Tsonga\",tn:\"Tswana\",tr:\"Turkish\",tk:\"Turkmen\",uk:\"Ukrainian\",hsb:\"Upper Sorbian\",ur:\"Urdu\",ve:\"Venda\",vi:\"Vietnamese\",vo:\"Volapuk\",wa:\"Walloon\",cy:\"Welsh\",xh:\"Xhosa\",ji:\"Yiddish\",zu:\"Zulu\"}[t]&&(this.internal.languageSettings.languageCode=t,!1===this.internal.languageSettings.isSubscribed&&(this.internal.events.subscribe(\"putCatalog\",function(){this.internal.write(\"/Lang (\"+this.internal.languageSettings.languageCode+\")\")}),this.internal.languageSettings.isSubscribed=!0)),this},K=st.API,z=K.getCharWidthsArray=function(t,e){var A,r,n,i=(e=e||{}).font||this.internal.getFont(),o=e.fontSize||this.internal.getFontSize(),a=e.charSpace||this.internal.getCharSpace(),s=e.widths?e.widths:i.metadata.Unicode.widths,c=s.fof?s.fof:1,l=e.kerning?e.kerning:i.metadata.Unicode.kerning,u=l.fof?l.fof:1,h=0,d=s[0]||c,f=[];for(A=0,r=t.length;A<r;A++)n=t.charCodeAt(A),\"function\"==typeof i.metadata.widthOfString?f.push((i.metadata.widthOfGlyph(i.metadata.characterToGlyph(n))+a*(1e3/o)||0)/1e3):f.push((s[n]||d)/c+(l[n]&&l[n][h]||0)/u),h=n;return f},q=K.getArraySum=function(t){for(var e=t.length,A=0;e;)A+=t[--e];return A},j=K.getStringUnitWidth=function(t,e){var A=(e=e||{}).fontSize||this.internal.getFontSize(),r=e.font||this.internal.getFont(),n=e.charSpace||this.internal.getCharSpace();return\"function\"==typeof r.metadata.widthOfString?r.metadata.widthOfString(t,A,n)/A:q(z.apply(this,arguments))},X=function(t,e,A,r){for(var n=[],i=0,o=t.length,a=0;i!==o&&a+e[i]<A;)a+=e[i],i++;n.push(t.slice(0,i));var s=i;for(a=0;i!==o;)a+e[i]>r&&(n.push(t.slice(s,i)),a=0,s=i),a+=e[i],i++;return s!==i&&n.push(t.slice(s,i)),n},V=function(t,e,A){A||(A={});var r,n,i,o,a,s,c=[],l=[c],u=A.textIndent||0,h=0,d=0,f=t.split(\" \"),p=z.apply(this,[\" \",A])[0];if(s=-1===A.lineIndent?f[0].length+2:A.lineIndent||0){var g=Array(s).join(\" \"),B=[];f.map(function(t){1<(t=t.split(/\\s*\\n/)).length?B=B.concat(t.map(function(t,e){return(e&&t.length?\"\\n\":\"\")+t})):B.push(t[0])}),f=B,s=j.apply(this,[g,A])}for(i=0,o=f.length;i<o;i++){var w=0;if(r=f[i],s&&\"\\n\"==r[0]&&(r=r.substr(1),w=1),n=z.apply(this,[r,A]),e<u+h+(d=q(n))||w){if(e<d){for(a=X.apply(this,[r,n,e-(u+h),e]),c.push(a.shift()),c=[a.pop()];a.length;)l.push([a.shift()]);d=q(n.slice(r.length-(c[0]?c[0].length:0)))}else c=[r];l.push(c),u=d+s,h=p}else c.push(r),u+=h+d,h=p}if(s)var m=function(t,e){return(e?g:\"\")+t.join(\" \")};else m=function(t){return t.join(\" \")};return l.map(m)},K.splitTextToSize=function(t,e,A){var r,n=(A=A||{}).fontSize||this.internal.getFontSize(),i=function(t){if(t.widths&&t.kerning)return{widths:t.widths,kerning:t.kerning};var e=this.internal.getFont(t.fontName,t.fontStyle),A=\"Unicode\";return e.metadata[A]?{widths:e.metadata[A].widths||{0:1},kerning:e.metadata[A].kerning||{}}:{font:e.metadata,fontSize:this.internal.getFontSize(),charSpace:this.internal.getCharSpace()}}.call(this,A);r=Array.isArray(t)?t:t.split(/\\r?\\n/);var o=1*this.internal.scaleFactor*e/n;i.textIndent=A.textIndent?1*A.textIndent*this.internal.scaleFactor/n:0,i.lineIndent=A.lineIndent;var a,s,c=[];for(a=0,s=r.length;a<s;a++)c=c.concat(V.apply(this,[r[a],o,i]));return c},G=st.API,Y={codePages:[\"WinAnsiEncoding\"],WinAnsiEncoding:(W=function(t){for(var e=\"klmnopqrstuvwxyz\",A={},r=0;r<e.length;r++)A[e[r]]=\"0123456789abcdef\"[r];var n,i,o,a,s,c={},l=1,u=c,h=[],d=\"\",f=\"\",p=t.length-1;for(r=1;r!=p;)s=t[r],r+=1,\"'\"==s?i?(a=i.join(\"\"),i=n):i=[]:i?i.push(s):\"{\"==s?(h.push([u,a]),u={},a=n):\"}\"==s?((o=h.pop())[0][o[1]]=u,a=n,u=o[0]):\"-\"==s?l=-1:a===n?A.hasOwnProperty(s)?(d+=A[s],a=parseInt(d,16)*l,l=1,d=\"\"):d+=s:A.hasOwnProperty(s)?(f+=A[s],u[a]=parseInt(f,16)*l,l=1,a=n,f=\"\"):f+=s;return c})(\"{19m8n201n9q201o9r201s9l201t9m201u8m201w9n201x9o201y8o202k8q202l8r202m9p202q8p20aw8k203k8t203t8v203u9v2cq8s212m9t15m8w15n9w2dw9s16k8u16l9u17s9z17x8y17y9y}\")},J={Unicode:{Courier:Y,\"Courier-Bold\":Y,\"Courier-BoldOblique\":Y,\"Courier-Oblique\":Y,Helvetica:Y,\"Helvetica-Bold\":Y,\"Helvetica-BoldOblique\":Y,\"Helvetica-Oblique\":Y,\"Times-Roman\":Y,\"Times-Bold\":Y,\"Times-BoldItalic\":Y,\"Times-Italic\":Y}},Z={Unicode:{\"Courier-Oblique\":W(\"{'widths'{k3w'fof'6o}'kerning'{'fof'-6o}}\"),\"Times-BoldItalic\":W(\"{'widths'{k3o2q4ycx2r201n3m201o6o201s2l201t2l201u2l201w3m201x3m201y3m2k1t2l2r202m2n2n3m2o3m2p5n202q6o2r1w2s2l2t2l2u3m2v3t2w1t2x2l2y1t2z1w3k3m3l3m3m3m3n3m3o3m3p3m3q3m3r3m3s3m203t2l203u2l3v2l3w3t3x3t3y3t3z3m4k5n4l4m4m4m4n4m4o4s4p4m4q4m4r4s4s4y4t2r4u3m4v4m4w3x4x5t4y4s4z4s5k3x5l4s5m4m5n3r5o3x5p4s5q4m5r5t5s4m5t3x5u3x5v2l5w1w5x2l5y3t5z3m6k2l6l3m6m3m6n2w6o3m6p2w6q2l6r3m6s3r6t1w6u1w6v3m6w1w6x4y6y3r6z3m7k3m7l3m7m2r7n2r7o1w7p3r7q2w7r4m7s3m7t2w7u2r7v2n7w1q7x2n7y3t202l3mcl4mal2ram3man3mao3map3mar3mas2lat4uau1uav3maw3way4uaz2lbk2sbl3t'fof'6obo2lbp3tbq3mbr1tbs2lbu1ybv3mbz3mck4m202k3mcm4mcn4mco4mcp4mcq5ycr4mcs4mct4mcu4mcv4mcw2r2m3rcy2rcz2rdl4sdm4sdn4sdo4sdp4sdq4sds4sdt4sdu4sdv4sdw4sdz3mek3mel3mem3men3meo3mep3meq4ser2wes2wet2weu2wev2wew1wex1wey1wez1wfl3rfm3mfn3mfo3mfp3mfq3mfr3tfs3mft3rfu3rfv3rfw3rfz2w203k6o212m6o2dw2l2cq2l3t3m3u2l17s3x19m3m}'kerning'{cl{4qu5kt5qt5rs17ss5ts}201s{201ss}201t{cks4lscmscnscoscpscls2wu2yu201ts}201x{2wu2yu}2k{201ts}2w{4qx5kx5ou5qx5rs17su5tu}2x{17su5tu5ou}2y{4qx5kx5ou5qx5rs17ss5ts}'fof'-6ofn{17sw5tw5ou5qw5rs}7t{cksclscmscnscoscps4ls}3u{17su5tu5os5qs}3v{17su5tu5os5qs}7p{17su5tu}ck{4qu5kt5qt5rs17ss5ts}4l{4qu5kt5qt5rs17ss5ts}cm{4qu5kt5qt5rs17ss5ts}cn{4qu5kt5qt5rs17ss5ts}co{4qu5kt5qt5rs17ss5ts}cp{4qu5kt5qt5rs17ss5ts}6l{4qu5ou5qw5rt17su5tu}5q{ckuclucmucnucoucpu4lu}5r{ckuclucmucnucoucpu4lu}7q{cksclscmscnscoscps4ls}6p{4qu5ou5qw5rt17sw5tw}ek{4qu5ou5qw5rt17su5tu}el{4qu5ou5qw5rt17su5tu}em{4qu5ou5qw5rt17su5tu}en{4qu5ou5qw5rt17su5tu}eo{4qu5ou5qw5rt17su5tu}ep{4qu5ou5qw5rt17su5tu}es{17ss5ts5qs4qu}et{4qu5ou5qw5rt17sw5tw}eu{4qu5ou5qw5rt17ss5ts}ev{17ss5ts5qs4qu}6z{17sw5tw5ou5qw5rs}fm{17sw5tw5ou5qw5rs}7n{201ts}fo{17sw5tw5ou5qw5rs}fp{17sw5tw5ou5qw5rs}fq{17sw5tw5ou5qw5rs}7r{cksclscmscnscoscps4ls}fs{17sw5tw5ou5qw5rs}ft{17su5tu}fu{17su5tu}fv{17su5tu}fw{17su5tu}fz{cksclscmscnscoscps4ls}}}\"),\"Helvetica-Bold\":W(\"{'widths'{k3s2q4scx1w201n3r201o6o201s1w201t1w201u1w201w3m201x3m201y3m2k1w2l2l202m2n2n3r2o3r2p5t202q6o2r1s2s2l2t2l2u2r2v3u2w1w2x2l2y1w2z1w3k3r3l3r3m3r3n3r3o3r3p3r3q3r3r3r3s3r203t2l203u2l3v2l3w3u3x3u3y3u3z3x4k6l4l4s4m4s4n4s4o4s4p4m4q3x4r4y4s4s4t1w4u3r4v4s4w3x4x5n4y4s4z4y5k4m5l4y5m4s5n4m5o3x5p4s5q4m5r5y5s4m5t4m5u3x5v2l5w1w5x2l5y3u5z3r6k2l6l3r6m3x6n3r6o3x6p3r6q2l6r3x6s3x6t1w6u1w6v3r6w1w6x5t6y3x6z3x7k3x7l3x7m2r7n3r7o2l7p3x7q3r7r4y7s3r7t3r7u3m7v2r7w1w7x2r7y3u202l3rcl4sal2lam3ran3rao3rap3rar3ras2lat4tau2pav3raw3uay4taz2lbk2sbl3u'fof'6obo2lbp3xbq3rbr1wbs2lbu2obv3rbz3xck4s202k3rcm4scn4sco4scp4scq6ocr4scs4mct4mcu4mcv4mcw1w2m2zcy1wcz1wdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3xek3rel3rem3ren3reo3rep3req5ter3res3ret3reu3rev3rew1wex1wey1wez1wfl3xfm3xfn3xfo3xfp3xfq3xfr3ufs3xft3xfu3xfv3xfw3xfz3r203k6o212m6o2dw2l2cq2l3t3r3u2l17s4m19m3r}'kerning'{cl{4qs5ku5ot5qs17sv5tv}201t{2ww4wy2yw}201w{2ks}201x{2ww4wy2yw}2k{201ts201xs}2w{7qs4qu5kw5os5qw5rs17su5tu7tsfzs}2x{5ow5qs}2y{7qs4qu5kw5os5qw5rs17su5tu7tsfzs}'fof'-6o7p{17su5tu5ot}ck{4qs5ku5ot5qs17sv5tv}4l{4qs5ku5ot5qs17sv5tv}cm{4qs5ku5ot5qs17sv5tv}cn{4qs5ku5ot5qs17sv5tv}co{4qs5ku5ot5qs17sv5tv}cp{4qs5ku5ot5qs17sv5tv}6l{17st5tt5os}17s{2kwclvcmvcnvcovcpv4lv4wwckv}5o{2kucltcmtcntcotcpt4lt4wtckt}5q{2ksclscmscnscoscps4ls4wvcks}5r{2ks4ws}5t{2kwclvcmvcnvcovcpv4lv4wwckv}eo{17st5tt5os}fu{17su5tu5ot}6p{17ss5ts}ek{17st5tt5os}el{17st5tt5os}em{17st5tt5os}en{17st5tt5os}6o{201ts}ep{17st5tt5os}es{17ss5ts}et{17ss5ts}eu{17ss5ts}ev{17ss5ts}6z{17su5tu5os5qt}fm{17su5tu5os5qt}fn{17su5tu5os5qt}fo{17su5tu5os5qt}fp{17su5tu5os5qt}fq{17su5tu5os5qt}fs{17su5tu5os5qt}ft{17su5tu5ot}7m{5os}fv{17su5tu5ot}fw{17su5tu5ot}}}\"),Courier:W(\"{'widths'{k3w'fof'6o}'kerning'{'fof'-6o}}\"),\"Courier-BoldOblique\":W(\"{'widths'{k3w'fof'6o}'kerning'{'fof'-6o}}\"),\"Times-Bold\":W(\"{'widths'{k3q2q5ncx2r201n3m201o6o201s2l201t2l201u2l201w3m201x3m201y3m2k1t2l2l202m2n2n3m2o3m2p6o202q6o2r1w2s2l2t2l2u3m2v3t2w1t2x2l2y1t2z1w3k3m3l3m3m3m3n3m3o3m3p3m3q3m3r3m3s3m203t2l203u2l3v2l3w3t3x3t3y3t3z3m4k5x4l4s4m4m4n4s4o4s4p4m4q3x4r4y4s4y4t2r4u3m4v4y4w4m4x5y4y4s4z4y5k3x5l4y5m4s5n3r5o4m5p4s5q4s5r6o5s4s5t4s5u4m5v2l5w1w5x2l5y3u5z3m6k2l6l3m6m3r6n2w6o3r6p2w6q2l6r3m6s3r6t1w6u2l6v3r6w1w6x5n6y3r6z3m7k3r7l3r7m2w7n2r7o2l7p3r7q3m7r4s7s3m7t3m7u2w7v2r7w1q7x2r7y3o202l3mcl4sal2lam3man3mao3map3mar3mas2lat4uau1yav3maw3tay4uaz2lbk2sbl3t'fof'6obo2lbp3rbr1tbs2lbu2lbv3mbz3mck4s202k3mcm4scn4sco4scp4scq6ocr4scs4mct4mcu4mcv4mcw2r2m3rcy2rcz2rdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3rek3mel3mem3men3meo3mep3meq4ser2wes2wet2weu2wev2wew1wex1wey1wez1wfl3rfm3mfn3mfo3mfp3mfq3mfr3tfs3mft3rfu3rfv3rfw3rfz3m203k6o212m6o2dw2l2cq2l3t3m3u2l17s4s19m3m}'kerning'{cl{4qt5ks5ot5qy5rw17sv5tv}201t{cks4lscmscnscoscpscls4wv}2k{201ts}2w{4qu5ku7mu5os5qx5ru17su5tu}2x{17su5tu5ou5qs}2y{4qv5kv7mu5ot5qz5ru17su5tu}'fof'-6o7t{cksclscmscnscoscps4ls}3u{17su5tu5os5qu}3v{17su5tu5os5qu}fu{17su5tu5ou5qu}7p{17su5tu5ou5qu}ck{4qt5ks5ot5qy5rw17sv5tv}4l{4qt5ks5ot5qy5rw17sv5tv}cm{4qt5ks5ot5qy5rw17sv5tv}cn{4qt5ks5ot5qy5rw17sv5tv}co{4qt5ks5ot5qy5rw17sv5tv}cp{4qt5ks5ot5qy5rw17sv5tv}6l{17st5tt5ou5qu}17s{ckuclucmucnucoucpu4lu4wu}5o{ckuclucmucnucoucpu4lu4wu}5q{ckzclzcmzcnzcozcpz4lz4wu}5r{ckxclxcmxcnxcoxcpx4lx4wu}5t{ckuclucmucnucoucpu4lu4wu}7q{ckuclucmucnucoucpu4lu}6p{17sw5tw5ou5qu}ek{17st5tt5qu}el{17st5tt5ou5qu}em{17st5tt5qu}en{17st5tt5qu}eo{17st5tt5qu}ep{17st5tt5ou5qu}es{17ss5ts5qu}et{17sw5tw5ou5qu}eu{17sw5tw5ou5qu}ev{17ss5ts5qu}6z{17sw5tw5ou5qu5rs}fm{17sw5tw5ou5qu5rs}fn{17sw5tw5ou5qu5rs}fo{17sw5tw5ou5qu5rs}fp{17sw5tw5ou5qu5rs}fq{17sw5tw5ou5qu5rs}7r{cktcltcmtcntcotcpt4lt5os}fs{17sw5tw5ou5qu5rs}ft{17su5tu5ou5qu}7m{5os}fv{17su5tu5ou5qu}fw{17su5tu5ou5qu}fz{cksclscmscnscoscps4ls}}}\"),Symbol:W(\"{'widths'{k3uaw4r19m3m2k1t2l2l202m2y2n3m2p5n202q6o3k3m2s2l2t2l2v3r2w1t3m3m2y1t2z1wbk2sbl3r'fof'6o3n3m3o3m3p3m3q3m3r3m3s3m3t3m3u1w3v1w3w3r3x3r3y3r3z2wbp3t3l3m5v2l5x2l5z3m2q4yfr3r7v3k7w1o7x3k}'kerning'{'fof'-6o}}\"),Helvetica:W(\"{'widths'{k3p2q4mcx1w201n3r201o6o201s1q201t1q201u1q201w2l201x2l201y2l2k1w2l1w202m2n2n3r2o3r2p5t202q6o2r1n2s2l2t2l2u2r2v3u2w1w2x2l2y1w2z1w3k3r3l3r3m3r3n3r3o3r3p3r3q3r3r3r3s3r203t2l203u2l3v1w3w3u3x3u3y3u3z3r4k6p4l4m4m4m4n4s4o4s4p4m4q3x4r4y4s4s4t1w4u3m4v4m4w3r4x5n4y4s4z4y5k4m5l4y5m4s5n4m5o3x5p4s5q4m5r5y5s4m5t4m5u3x5v1w5w1w5x1w5y2z5z3r6k2l6l3r6m3r6n3m6o3r6p3r6q1w6r3r6s3r6t1q6u1q6v3m6w1q6x5n6y3r6z3r7k3r7l3r7m2l7n3m7o1w7p3r7q3m7r4s7s3m7t3m7u3m7v2l7w1u7x2l7y3u202l3rcl4mal2lam3ran3rao3rap3rar3ras2lat4tau2pav3raw3uay4taz2lbk2sbl3u'fof'6obo2lbp3rbr1wbs2lbu2obv3rbz3xck4m202k3rcm4mcn4mco4mcp4mcq6ocr4scs4mct4mcu4mcv4mcw1w2m2ncy1wcz1wdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3xek3rel3rem3ren3reo3rep3req5ter3mes3ret3reu3rev3rew1wex1wey1wez1wfl3rfm3rfn3rfo3rfp3rfq3rfr3ufs3xft3rfu3rfv3rfw3rfz3m203k6o212m6o2dw2l2cq2l3t3r3u1w17s4m19m3r}'kerning'{5q{4wv}cl{4qs5kw5ow5qs17sv5tv}201t{2wu4w1k2yu}201x{2wu4wy2yu}17s{2ktclucmucnu4otcpu4lu4wycoucku}2w{7qs4qz5k1m17sy5ow5qx5rsfsu5ty7tufzu}2x{17sy5ty5oy5qs}2y{7qs4qz5k1m17sy5ow5qx5rsfsu5ty7tufzu}'fof'-6o7p{17sv5tv5ow}ck{4qs5kw5ow5qs17sv5tv}4l{4qs5kw5ow5qs17sv5tv}cm{4qs5kw5ow5qs17sv5tv}cn{4qs5kw5ow5qs17sv5tv}co{4qs5kw5ow5qs17sv5tv}cp{4qs5kw5ow5qs17sv5tv}6l{17sy5ty5ow}do{17st5tt}4z{17st5tt}7s{fst}dm{17st5tt}dn{17st5tt}5o{ckwclwcmwcnwcowcpw4lw4wv}dp{17st5tt}dq{17st5tt}7t{5ow}ds{17st5tt}5t{2ktclucmucnu4otcpu4lu4wycoucku}fu{17sv5tv5ow}6p{17sy5ty5ow5qs}ek{17sy5ty5ow}el{17sy5ty5ow}em{17sy5ty5ow}en{5ty}eo{17sy5ty5ow}ep{17sy5ty5ow}es{17sy5ty5qs}et{17sy5ty5ow5qs}eu{17sy5ty5ow5qs}ev{17sy5ty5ow5qs}6z{17sy5ty5ow5qs}fm{17sy5ty5ow5qs}fn{17sy5ty5ow5qs}fo{17sy5ty5ow5qs}fp{17sy5ty5qs}fq{17sy5ty5ow5qs}7r{5ow}fs{17sy5ty5ow5qs}ft{17sv5tv5ow}7m{5ow}fv{17sv5tv5ow}fw{17sv5tv5ow}}}\"),\"Helvetica-BoldOblique\":W(\"{'widths'{k3s2q4scx1w201n3r201o6o201s1w201t1w201u1w201w3m201x3m201y3m2k1w2l2l202m2n2n3r2o3r2p5t202q6o2r1s2s2l2t2l2u2r2v3u2w1w2x2l2y1w2z1w3k3r3l3r3m3r3n3r3o3r3p3r3q3r3r3r3s3r203t2l203u2l3v2l3w3u3x3u3y3u3z3x4k6l4l4s4m4s4n4s4o4s4p4m4q3x4r4y4s4s4t1w4u3r4v4s4w3x4x5n4y4s4z4y5k4m5l4y5m4s5n4m5o3x5p4s5q4m5r5y5s4m5t4m5u3x5v2l5w1w5x2l5y3u5z3r6k2l6l3r6m3x6n3r6o3x6p3r6q2l6r3x6s3x6t1w6u1w6v3r6w1w6x5t6y3x6z3x7k3x7l3x7m2r7n3r7o2l7p3x7q3r7r4y7s3r7t3r7u3m7v2r7w1w7x2r7y3u202l3rcl4sal2lam3ran3rao3rap3rar3ras2lat4tau2pav3raw3uay4taz2lbk2sbl3u'fof'6obo2lbp3xbq3rbr1wbs2lbu2obv3rbz3xck4s202k3rcm4scn4sco4scp4scq6ocr4scs4mct4mcu4mcv4mcw1w2m2zcy1wcz1wdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3xek3rel3rem3ren3reo3rep3req5ter3res3ret3reu3rev3rew1wex1wey1wez1wfl3xfm3xfn3xfo3xfp3xfq3xfr3ufs3xft3xfu3xfv3xfw3xfz3r203k6o212m6o2dw2l2cq2l3t3r3u2l17s4m19m3r}'kerning'{cl{4qs5ku5ot5qs17sv5tv}201t{2ww4wy2yw}201w{2ks}201x{2ww4wy2yw}2k{201ts201xs}2w{7qs4qu5kw5os5qw5rs17su5tu7tsfzs}2x{5ow5qs}2y{7qs4qu5kw5os5qw5rs17su5tu7tsfzs}'fof'-6o7p{17su5tu5ot}ck{4qs5ku5ot5qs17sv5tv}4l{4qs5ku5ot5qs17sv5tv}cm{4qs5ku5ot5qs17sv5tv}cn{4qs5ku5ot5qs17sv5tv}co{4qs5ku5ot5qs17sv5tv}cp{4qs5ku5ot5qs17sv5tv}6l{17st5tt5os}17s{2kwclvcmvcnvcovcpv4lv4wwckv}5o{2kucltcmtcntcotcpt4lt4wtckt}5q{2ksclscmscnscoscps4ls4wvcks}5r{2ks4ws}5t{2kwclvcmvcnvcovcpv4lv4wwckv}eo{17st5tt5os}fu{17su5tu5ot}6p{17ss5ts}ek{17st5tt5os}el{17st5tt5os}em{17st5tt5os}en{17st5tt5os}6o{201ts}ep{17st5tt5os}es{17ss5ts}et{17ss5ts}eu{17ss5ts}ev{17ss5ts}6z{17su5tu5os5qt}fm{17su5tu5os5qt}fn{17su5tu5os5qt}fo{17su5tu5os5qt}fp{17su5tu5os5qt}fq{17su5tu5os5qt}fs{17su5tu5os5qt}ft{17su5tu5ot}7m{5os}fv{17su5tu5ot}fw{17su5tu5ot}}}\"),ZapfDingbats:W(\"{'widths'{k4u2k1w'fof'6o}'kerning'{'fof'-6o}}\"),\"Courier-Bold\":W(\"{'widths'{k3w'fof'6o}'kerning'{'fof'-6o}}\"),\"Times-Italic\":W(\"{'widths'{k3n2q4ycx2l201n3m201o5t201s2l201t2l201u2l201w3r201x3r201y3r2k1t2l2l202m2n2n3m2o3m2p5n202q5t2r1p2s2l2t2l2u3m2v4n2w1t2x2l2y1t2z1w3k3m3l3m3m3m3n3m3o3m3p3m3q3m3r3m3s3m203t2l203u2l3v2l3w4n3x4n3y4n3z3m4k5w4l3x4m3x4n4m4o4s4p3x4q3x4r4s4s4s4t2l4u2w4v4m4w3r4x5n4y4m4z4s5k3x5l4s5m3x5n3m5o3r5p4s5q3x5r5n5s3x5t3r5u3r5v2r5w1w5x2r5y2u5z3m6k2l6l3m6m3m6n2w6o3m6p2w6q1w6r3m6s3m6t1w6u1w6v2w6w1w6x4s6y3m6z3m7k3m7l3m7m2r7n2r7o1w7p3m7q2w7r4m7s2w7t2w7u2r7v2s7w1v7x2s7y3q202l3mcl3xal2ram3man3mao3map3mar3mas2lat4wau1vav3maw4nay4waz2lbk2sbl4n'fof'6obo2lbp3mbq3obr1tbs2lbu1zbv3mbz3mck3x202k3mcm3xcn3xco3xcp3xcq5tcr4mcs3xct3xcu3xcv3xcw2l2m2ucy2lcz2ldl4mdm4sdn4sdo4sdp4sdq4sds4sdt4sdu4sdv4sdw4sdz3mek3mel3mem3men3meo3mep3meq4mer2wes2wet2weu2wev2wew1wex1wey1wez1wfl3mfm3mfn3mfo3mfp3mfq3mfr4nfs3mft3mfu3mfv3mfw3mfz2w203k6o212m6m2dw2l2cq2l3t3m3u2l17s3r19m3m}'kerning'{cl{5kt4qw}201s{201sw}201t{201tw2wy2yy6q-t}201x{2wy2yy}2k{201tw}2w{7qs4qy7rs5ky7mw5os5qx5ru17su5tu}2x{17ss5ts5os}2y{7qs4qy7rs5ky7mw5os5qx5ru17su5tu}'fof'-6o6t{17ss5ts5qs}7t{5os}3v{5qs}7p{17su5tu5qs}ck{5kt4qw}4l{5kt4qw}cm{5kt4qw}cn{5kt4qw}co{5kt4qw}cp{5kt4qw}6l{4qs5ks5ou5qw5ru17su5tu}17s{2ks}5q{ckvclvcmvcnvcovcpv4lv}5r{ckuclucmucnucoucpu4lu}5t{2ks}6p{4qs5ks5ou5qw5ru17su5tu}ek{4qs5ks5ou5qw5ru17su5tu}el{4qs5ks5ou5qw5ru17su5tu}em{4qs5ks5ou5qw5ru17su5tu}en{4qs5ks5ou5qw5ru17su5tu}eo{4qs5ks5ou5qw5ru17su5tu}ep{4qs5ks5ou5qw5ru17su5tu}es{5ks5qs4qs}et{4qs5ks5ou5qw5ru17su5tu}eu{4qs5ks5qw5ru17su5tu}ev{5ks5qs4qs}ex{17ss5ts5qs}6z{4qv5ks5ou5qw5ru17su5tu}fm{4qv5ks5ou5qw5ru17su5tu}fn{4qv5ks5ou5qw5ru17su5tu}fo{4qv5ks5ou5qw5ru17su5tu}fp{4qv5ks5ou5qw5ru17su5tu}fq{4qv5ks5ou5qw5ru17su5tu}7r{5os}fs{4qv5ks5ou5qw5ru17su5tu}ft{17su5tu5qs}fu{17su5tu5qs}fv{17su5tu5qs}fw{17su5tu5qs}}}\"),\"Times-Roman\":W(\"{'widths'{k3n2q4ycx2l201n3m201o6o201s2l201t2l201u2l201w2w201x2w201y2w2k1t2l2l202m2n2n3m2o3m2p5n202q6o2r1m2s2l2t2l2u3m2v3s2w1t2x2l2y1t2z1w3k3m3l3m3m3m3n3m3o3m3p3m3q3m3r3m3s3m203t2l203u2l3v1w3w3s3x3s3y3s3z2w4k5w4l4s4m4m4n4m4o4s4p3x4q3r4r4s4s4s4t2l4u2r4v4s4w3x4x5t4y4s4z4s5k3r5l4s5m4m5n3r5o3x5p4s5q4s5r5y5s4s5t4s5u3x5v2l5w1w5x2l5y2z5z3m6k2l6l2w6m3m6n2w6o3m6p2w6q2l6r3m6s3m6t1w6u1w6v3m6w1w6x4y6y3m6z3m7k3m7l3m7m2l7n2r7o1w7p3m7q3m7r4s7s3m7t3m7u2w7v3k7w1o7x3k7y3q202l3mcl4sal2lam3man3mao3map3mar3mas2lat4wau1vav3maw3say4waz2lbk2sbl3s'fof'6obo2lbp3mbq2xbr1tbs2lbu1zbv3mbz2wck4s202k3mcm4scn4sco4scp4scq5tcr4mcs3xct3xcu3xcv3xcw2l2m2tcy2lcz2ldl4sdm4sdn4sdo4sdp4sdq4sds4sdt4sdu4sdv4sdw4sdz3mek2wel2wem2wen2weo2wep2weq4mer2wes2wet2weu2wev2wew1wex1wey1wez1wfl3mfm3mfn3mfo3mfp3mfq3mfr3sfs3mft3mfu3mfv3mfw3mfz3m203k6o212m6m2dw2l2cq2l3t3m3u1w17s4s19m3m}'kerning'{cl{4qs5ku17sw5ou5qy5rw201ss5tw201ws}201s{201ss}201t{ckw4lwcmwcnwcowcpwclw4wu201ts}2k{201ts}2w{4qs5kw5os5qx5ru17sx5tx}2x{17sw5tw5ou5qu}2y{4qs5kw5os5qx5ru17sx5tx}'fof'-6o7t{ckuclucmucnucoucpu4lu5os5rs}3u{17su5tu5qs}3v{17su5tu5qs}7p{17sw5tw5qs}ck{4qs5ku17sw5ou5qy5rw201ss5tw201ws}4l{4qs5ku17sw5ou5qy5rw201ss5tw201ws}cm{4qs5ku17sw5ou5qy5rw201ss5tw201ws}cn{4qs5ku17sw5ou5qy5rw201ss5tw201ws}co{4qs5ku17sw5ou5qy5rw201ss5tw201ws}cp{4qs5ku17sw5ou5qy5rw201ss5tw201ws}6l{17su5tu5os5qw5rs}17s{2ktclvcmvcnvcovcpv4lv4wuckv}5o{ckwclwcmwcnwcowcpw4lw4wu}5q{ckyclycmycnycoycpy4ly4wu5ms}5r{cktcltcmtcntcotcpt4lt4ws}5t{2ktclvcmvcnvcovcpv4lv4wuckv}7q{cksclscmscnscoscps4ls}6p{17su5tu5qw5rs}ek{5qs5rs}el{17su5tu5os5qw5rs}em{17su5tu5os5qs5rs}en{17su5qs5rs}eo{5qs5rs}ep{17su5tu5os5qw5rs}es{5qs}et{17su5tu5qw5rs}eu{17su5tu5qs5rs}ev{5qs}6z{17sv5tv5os5qx5rs}fm{5os5qt5rs}fn{17sv5tv5os5qx5rs}fo{17sv5tv5os5qx5rs}fp{5os5qt5rs}fq{5os5qt5rs}7r{ckuclucmucnucoucpu4lu5os}fs{17sv5tv5os5qx5rs}ft{17ss5ts5qs}fu{17sw5tw5qs}fv{17sw5tw5qs}fw{17ss5ts5qs}fz{ckuclucmucnucoucpu4lu5os5rs}}}\"),\"Helvetica-Oblique\":W(\"{'widths'{k3p2q4mcx1w201n3r201o6o201s1q201t1q201u1q201w2l201x2l201y2l2k1w2l1w202m2n2n3r2o3r2p5t202q6o2r1n2s2l2t2l2u2r2v3u2w1w2x2l2y1w2z1w3k3r3l3r3m3r3n3r3o3r3p3r3q3r3r3r3s3r203t2l203u2l3v1w3w3u3x3u3y3u3z3r4k6p4l4m4m4m4n4s4o4s4p4m4q3x4r4y4s4s4t1w4u3m4v4m4w3r4x5n4y4s4z4y5k4m5l4y5m4s5n4m5o3x5p4s5q4m5r5y5s4m5t4m5u3x5v1w5w1w5x1w5y2z5z3r6k2l6l3r6m3r6n3m6o3r6p3r6q1w6r3r6s3r6t1q6u1q6v3m6w1q6x5n6y3r6z3r7k3r7l3r7m2l7n3m7o1w7p3r7q3m7r4s7s3m7t3m7u3m7v2l7w1u7x2l7y3u202l3rcl4mal2lam3ran3rao3rap3rar3ras2lat4tau2pav3raw3uay4taz2lbk2sbl3u'fof'6obo2lbp3rbr1wbs2lbu2obv3rbz3xck4m202k3rcm4mcn4mco4mcp4mcq6ocr4scs4mct4mcu4mcv4mcw1w2m2ncy1wcz1wdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3xek3rel3rem3ren3reo3rep3req5ter3mes3ret3reu3rev3rew1wex1wey1wez1wfl3rfm3rfn3rfo3rfp3rfq3rfr3ufs3xft3rfu3rfv3rfw3rfz3m203k6o212m6o2dw2l2cq2l3t3r3u1w17s4m19m3r}'kerning'{5q{4wv}cl{4qs5kw5ow5qs17sv5tv}201t{2wu4w1k2yu}201x{2wu4wy2yu}17s{2ktclucmucnu4otcpu4lu4wycoucku}2w{7qs4qz5k1m17sy5ow5qx5rsfsu5ty7tufzu}2x{17sy5ty5oy5qs}2y{7qs4qz5k1m17sy5ow5qx5rsfsu5ty7tufzu}'fof'-6o7p{17sv5tv5ow}ck{4qs5kw5ow5qs17sv5tv}4l{4qs5kw5ow5qs17sv5tv}cm{4qs5kw5ow5qs17sv5tv}cn{4qs5kw5ow5qs17sv5tv}co{4qs5kw5ow5qs17sv5tv}cp{4qs5kw5ow5qs17sv5tv}6l{17sy5ty5ow}do{17st5tt}4z{17st5tt}7s{fst}dm{17st5tt}dn{17st5tt}5o{ckwclwcmwcnwcowcpw4lw4wv}dp{17st5tt}dq{17st5tt}7t{5ow}ds{17st5tt}5t{2ktclucmucnu4otcpu4lu4wycoucku}fu{17sv5tv5ow}6p{17sy5ty5ow5qs}ek{17sy5ty5ow}el{17sy5ty5ow}em{17sy5ty5ow}en{5ty}eo{17sy5ty5ow}ep{17sy5ty5ow}es{17sy5ty5qs}et{17sy5ty5ow5qs}eu{17sy5ty5ow5qs}ev{17sy5ty5ow5qs}6z{17sy5ty5ow5qs}fm{17sy5ty5ow5qs}fn{17sy5ty5ow5qs}fo{17sy5ty5ow5qs}fp{17sy5ty5qs}fq{17sy5ty5ow5qs}7r{5ow}fs{17sy5ty5ow5qs}ft{17sv5tv5ow}7m{5ow}fv{17sv5tv5ow}fw{17sv5tv5ow}}}\")}},G.events.push([\"addFont\",function(t){var e,A,r,n=\"Unicode\";(e=Z[n][t.postScriptName])&&((A=t.metadata[n]?t.metadata[n]:t.metadata[n]={}).widths=e.widths,A.kerning=e.kerning),(r=J[n][t.postScriptName])&&((A=t.metadata[n]?t.metadata[n]:t.metadata[n]={}).encoding=r).codePages&&r.codePages.length&&(t.encoding=r.codePages[0])}]),$=st,\"undefined\"!=typeof self&&self||void 0!==r&&r||\"undefined\"!=typeof window&&window||Function(\"return this\")(),$.API.events.push([\"addFont\",function(t){$.API.existsFileInVFS(t.postScriptName)?(t.metadata=$.API.TTFFont.open(t.postScriptName,t.fontName,$.API.getFileFromVFS(t.postScriptName),t.encoding),t.metadata.Unicode=t.metadata.Unicode||{encoding:{},kerning:{},widths:[]}):14<t.id.slice(1)&&console.error(\"Font does not exist in FileInVFS, import fonts or remove declaration doc.addFont('\"+t.postScriptName+\"').\")}]),(tt=st.API).addSvg=function(t,e,A,r,n){function i(t){for(var e=parseFloat(t[1]),A=parseFloat(t[2]),r=[],n=3,i=t.length;n<i;)\"c\"===t[n]?(r.push([parseFloat(t[n+1]),parseFloat(t[n+2]),parseFloat(t[n+3]),parseFloat(t[n+4]),parseFloat(t[n+5]),parseFloat(t[n+6])]),n+=7):\"l\"===t[n]?(r.push([parseFloat(t[n+1]),parseFloat(t[n+2])]),n+=3):n+=1;return[e,A,r]}if(void 0===e||void 0===A)throw new Error(\"addSVG needs values for 'x' and 'y'\");var o,a,s,c,l,u,h,d,f=(c=document,d=c.createElement(\"iframe\"),l=\".jsPDF_sillysvg_iframe {display:none;position:absolute;}\",(h=(u=c).createElement(\"style\")).type=\"text/css\",h.styleSheet?h.styleSheet.cssText=l:h.appendChild(u.createTextNode(l)),u.getElementsByTagName(\"head\")[0].appendChild(h),d.name=\"childframe\",d.setAttribute(\"width\",0),d.setAttribute(\"height\",0),d.setAttribute(\"frameborder\",\"0\"),d.setAttribute(\"scrolling\",\"no\"),d.setAttribute(\"seamless\",\"seamless\"),d.setAttribute(\"class\",\"jsPDF_sillysvg_iframe\"),c.body.appendChild(d),d),p=(o=t,(s=((a=f).contentWindow||a.contentDocument).document).write(o),s.close(),s.getElementsByTagName(\"svg\")[0]),g=[1,1],B=parseFloat(p.getAttribute(\"width\")),w=parseFloat(p.getAttribute(\"height\"));B&&w&&(r&&n?g=[r/B,n/w]:r?g=[r/B,r/B]:n&&(g=[n/w,n/w]));var m,y,v,Q,C=p.childNodes;for(m=0,y=C.length;m<y;m++)(v=C[m]).tagName&&\"PATH\"===v.tagName.toUpperCase()&&((Q=i(v.getAttribute(\"d\").split(\" \")))[0]=Q[0]*g[0]+e,Q[1]=Q[1]*g[1]+A,this.lines.call(this,Q[2],Q[0],Q[1],g));return this},tt.addSVG=tt.addSvg,tt.addSvgAsImage=function(t,e,A,r,n,i,o,a){if(isNaN(e)||isNaN(A))throw console.error(\"jsPDF.addSvgAsImage: Invalid coordinates\",arguments),new Error(\"Invalid coordinates passed to jsPDF.addSvgAsImage\");if(isNaN(r)||isNaN(n))throw console.error(\"jsPDF.addSvgAsImage: Invalid measurements\",arguments),new Error(\"Invalid measurements (width and/or height) passed to jsPDF.addSvgAsImage\");var s=document.createElement(\"canvas\");s.width=r,s.height=n;var c=s.getContext(\"2d\");return c.fillStyle=\"#fff\",c.fillRect(0,0,s.width,s.height),canvg(s,t,{ignoreMouse:!0,ignoreAnimation:!0,ignoreDimensions:!0,ignoreClear:!0}),this.addImage(s.toDataURL(\"image/jpeg\",1),e,A,r,n,o,a),this},st.API.putTotalPages=function(t){for(var e=new RegExp(t,\"g\"),A=1;A<=this.internal.getNumberOfPages();A++)for(var r=0;r<this.internal.pages[A].length;r++)this.internal.pages[A][r]=this.internal.pages[A][r].replace(e,this.internal.getNumberOfPages());return this},st.API.viewerPreferences=function(t,e){function A(t,e){var A,r=!1;for(A=0;A<t.length;A+=1)t[A]===e&&(r=!0);return r}var r;t=t||{},e=e||!1;var n,i,o={HideToolbar:{defaultValue:!1,value:!1,type:\"boolean\",explicitSet:!1,valueSet:[!0,!1],pdfVersion:1.3},HideMenubar:{defaultValue:!1,value:!1,type:\"boolean\",explicitSet:!1,valueSet:[!0,!1],pdfVersion:1.3},HideWindowUI:{defaultValue:!1,value:!1,type:\"boolean\",explicitSet:!1,valueSet:[!0,!1],pdfVersion:1.3},FitWindow:{defaultValue:!1,value:!1,type:\"boolean\",explicitSet:!1,valueSet:[!0,!1],pdfVersion:1.3},CenterWindow:{defaultValue:!1,value:!1,type:\"boolean\",explicitSet:!1,valueSet:[!0,!1],pdfVersion:1.3},DisplayDocTitle:{defaultValue:!1,value:!1,type:\"boolean\",explicitSet:!1,valueSet:[!0,!1],pdfVersion:1.4},NonFullScreenPageMode:{defaultValue:\"UseNone\",value:\"UseNone\",type:\"name\",explicitSet:!1,valueSet:[\"UseNone\",\"UseOutlines\",\"UseThumbs\",\"UseOC\"],pdfVersion:1.3},Direction:{defaultValue:\"L2R\",value:\"L2R\",type:\"name\",explicitSet:!1,valueSet:[\"L2R\",\"R2L\"],pdfVersion:1.3},ViewArea:{defaultValue:\"CropBox\",value:\"CropBox\",type:\"name\",explicitSet:!1,valueSet:[\"MediaBox\",\"CropBox\",\"TrimBox\",\"BleedBox\",\"ArtBox\"],pdfVersion:1.4},ViewClip:{defaultValue:\"CropBox\",value:\"CropBox\",type:\"name\",explicitSet:!1,valueSet:[\"MediaBox\",\"CropBox\",\"TrimBox\",\"BleedBox\",\"ArtBox\"],pdfVersion:1.4},PrintArea:{defaultValue:\"CropBox\",value:\"CropBox\",type:\"name\",explicitSet:!1,valueSet:[\"MediaBox\",\"CropBox\",\"TrimBox\",\"BleedBox\",\"ArtBox\"],pdfVersion:1.4},PrintClip:{defaultValue:\"CropBox\",value:\"CropBox\",type:\"name\",explicitSet:!1,valueSet:[\"MediaBox\",\"CropBox\",\"TrimBox\",\"BleedBox\",\"ArtBox\"],pdfVersion:1.4},PrintScaling:{defaultValue:\"AppDefault\",value:\"AppDefault\",type:\"name\",explicitSet:!1,valueSet:[\"AppDefault\",\"None\"],pdfVersion:1.6},Duplex:{defaultValue:\"\",value:\"none\",type:\"name\",explicitSet:!1,valueSet:[\"Simplex\",\"DuplexFlipShortEdge\",\"DuplexFlipLongEdge\",\"none\"],pdfVersion:1.7},PickTrayByPDFSize:{defaultValue:!1,value:!1,type:\"boolean\",explicitSet:!1,valueSet:[!0,!1],pdfVersion:1.7},PrintPageRange:{defaultValue:\"\",value:\"\",type:\"array\",explicitSet:!1,valueSet:null,pdfVersion:1.7},NumCopies:{defaultValue:1,value:1,type:\"integer\",explicitSet:!1,valueSet:null,pdfVersion:1.7}},a=Object.keys(o),s=[],c=0,l=0,u=0,h=!0;if(void 0===this.internal.viewerpreferences&&(this.internal.viewerpreferences={},this.internal.viewerpreferences.configuration=JSON.parse(JSON.stringify(o)),this.internal.viewerpreferences.isSubscribed=!1),r=this.internal.viewerpreferences.configuration,\"reset\"===t||!0===e){var d=a.length;for(u=0;u<d;u+=1)r[a[u]].value=r[a[u]].defaultValue,r[a[u]].explicitSet=!1}if(\"object\"===(void 0===t?\"undefined\":at(t)))for(n in t)if(i=t[n],A(a,n)&&void 0!==i){if(\"boolean\"===r[n].type&&\"boolean\"==typeof i)r[n].value=i;else if(\"name\"===r[n].type&&A(r[n].valueSet,i))r[n].value=i;else if(\"integer\"===r[n].type&&Number.isInteger(i))r[n].value=i;else if(\"array\"===r[n].type){for(c=0;c<i.length;c+=1)if(h=!0,1===i[c].length&&\"number\"==typeof i[c][0])s.push(String(i[c]));else if(1<i[c].length){for(l=0;l<i[c].length;l+=1)\"number\"!=typeof i[c][l]&&(h=!1);!0===h&&s.push(String(i[c].join(\"-\")))}r[n].value=String(s)}else r[n].value=r[n].defaultValue;r[n].explicitSet=!0}return!1===this.internal.viewerpreferences.isSubscribed&&(this.internal.events.subscribe(\"putCatalog\",function(){var t,e=[];for(t in r)!0===r[t].explicitSet&&(\"name\"===r[t].type?e.push(\"/\"+t+\" /\"+r[t].value):e.push(\"/\"+t+\" \"+r[t].value));0!==e.length&&this.internal.write(\"/ViewerPreferences\\n<<\\n\"+e.join(\"\\n\")+\"\\n>>\")}),this.internal.viewerpreferences.isSubscribed=!0),this.internal.viewerpreferences.configuration=r,this},et=st.API,nt=rt=At=\"\",et.addMetadata=function(t,e){return rt=e||\"http://jspdf.default.namespaceuri/\",At=t,this.internal.events.subscribe(\"postPutResources\",function(){if(At){var t='<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"><rdf:Description rdf:about=\"\" xmlns:jspdf=\"'+rt+'\"><jspdf:metadata>',e=unescape(encodeURIComponent('<x:xmpmeta xmlns:x=\"adobe:ns:meta/\">')),A=unescape(encodeURIComponent(t)),r=unescape(encodeURIComponent(At)),n=unescape(encodeURIComponent(\"</jspdf:metadata></rdf:Description></rdf:RDF>\")),i=unescape(encodeURIComponent(\"</x:xmpmeta>\")),o=A.length+r.length+n.length+e.length+i.length;nt=this.internal.newObject(),this.internal.write(\"<< /Type /Metadata /Subtype /XML /Length \"+o+\" >>\"),this.internal.write(\"stream\"),this.internal.write(e+A+r+n+i),this.internal.write(\"endstream\"),this.internal.write(\"endobj\")}else nt=\"\"}),this.internal.events.subscribe(\"putCatalog\",function(){nt&&this.internal.write(\"/Metadata \"+nt+\" 0 R\")}),this},function(t,e){var A=t.API,r=[0];A.events.push([\"putFont\",function(e){!function(e,A,n){if(e.metadata instanceof t.API.TTFFont&&\"Identity-H\"===e.encoding){for(var i=e.metadata.Unicode.widths,o=e.metadata.subset.encode(r),a=\"\",s=0;s<o.length;s++)a+=String.fromCharCode(o[s]);var c=n();A(\"<<\"),A(\"/Length \"+a.length),A(\"/Length1 \"+a.length),A(\">>\"),A(\"stream\"),A(a),A(\"endstream\"),A(\"endobj\");var l=n();A(\"<<\"),A(\"/Type /FontDescriptor\"),A(\"/FontName /\"+e.fontName),A(\"/FontFile2 \"+c+\" 0 R\"),A(\"/FontBBox \"+t.API.PDFObject.convert(e.metadata.bbox)),A(\"/Flags \"+e.metadata.flags),A(\"/StemV \"+e.metadata.stemV),A(\"/ItalicAngle \"+e.metadata.italicAngle),A(\"/Ascent \"+e.metadata.ascender),A(\"/Descent \"+e.metadata.decender),A(\"/CapHeight \"+e.metadata.capHeight),A(\">>\"),A(\"endobj\");var u=n();A(\"<<\"),A(\"/Type /Font\"),A(\"/BaseFont /\"+e.fontName),A(\"/FontDescriptor \"+l+\" 0 R\"),A(\"/W \"+t.API.PDFObject.convert(i)),A(\"/CIDToGIDMap /Identity\"),A(\"/DW 1000\"),A(\"/Subtype /CIDFontType2\"),A(\"/CIDSystemInfo\"),A(\"<<\"),A(\"/Supplement 0\"),A(\"/Registry (Adobe)\"),A(\"/Ordering (\"+e.encoding+\")\"),A(\">>\"),A(\">>\"),A(\"endobj\"),e.objectNumber=n(),A(\"<<\"),A(\"/Type /Font\"),A(\"/Subtype /Type0\"),A(\"/BaseFont /\"+e.fontName),A(\"/Encoding /\"+e.encoding),A(\"/DescendantFonts [\"+u+\" 0 R]\"),A(\">>\"),A(\"endobj\"),e.isAlreadyPutted=!0}}(e.font,e.out,e.newObject)}]),A.events.push([\"putFont\",function(e){!function(e,A,r){if(e.metadata instanceof t.API.TTFFont&&\"WinAnsiEncoding\"===e.encoding){e.metadata.Unicode.widths;for(var n=e.metadata.rawData,i=\"\",o=0;o<n.length;o++)i+=String.fromCharCode(n[o]);var a=r();A(\"<<\"),A(\"/Length \"+i.length),A(\"/Length1 \"+i.length),A(\">>\"),A(\"stream\"),A(i),A(\"endstream\"),A(\"endobj\");var s=r();for(A(\"<<\"),A(\"/Descent \"+e.metadata.decender),A(\"/CapHeight \"+e.metadata.capHeight),A(\"/StemV \"+e.metadata.stemV),A(\"/Type /FontDescriptor\"),A(\"/FontFile2 \"+a+\" 0 R\"),A(\"/Flags 96\"),A(\"/FontBBox \"+t.API.PDFObject.convert(e.metadata.bbox)),A(\"/FontName /\"+e.fontName),A(\"/ItalicAngle \"+e.metadata.italicAngle),A(\"/Ascent \"+e.metadata.ascender),A(\">>\"),A(\"endobj\"),e.objectNumber=r(),o=0;o<e.metadata.hmtx.widths.length;o++)e.metadata.hmtx.widths[o]=parseInt(e.metadata.hmtx.widths[o]*(1e3/e.metadata.head.unitsPerEm));A(\"<</Subtype/TrueType/Type/Font/BaseFont/\"+e.fontName+\"/FontDescriptor \"+s+\" 0 R/Encoding/\"+e.encoding+\" /FirstChar 29 /LastChar 255 /Widths \"+t.API.PDFObject.convert(e.metadata.hmtx.widths)+\">>\"),A(\"endobj\"),e.isAlreadyPutted=!0}}(e.font,e.out,e.newObject)}]);var n=function(t){var e,A,n=t.text||\"\",i=t.x,o=t.y,a=t.options||{},s=t.mutex||{},c=s.pdfEscape,l=s.activeFontKey,u=s.fonts,h=(s.activeFontSize,\"\"),d=0,f=\"\",p=u[A=l].encoding;if(\"Identity-H\"!==u[A].encoding)return{text:n,x:i,y:o,options:a,mutex:s};for(f=n,A=l,\"[object Array]\"===Object.prototype.toString.call(n)&&(f=n[0]),d=0;d<f.length;d+=1)u[A].metadata.hasOwnProperty(\"cmap\")&&(e=u[A].metadata.cmap.unicode.codeMap[f[d].charCodeAt(0)]),e?h+=f[d]:f[d].charCodeAt(0)<256&&u[A].metadata.hasOwnProperty(\"Unicode\")?h+=f[d]:h+=\"\";var g=\"\";return parseInt(A.slice(1))<14||\"WinAnsiEncoding\"===p?g=function(t){for(var e=\"\",A=0;A<t.length;A++)e+=\"\"+t.charCodeAt(A).toString(16);return e}(c(h,A)):\"Identity-H\"===p&&(g=function(t,e){for(var A,n=e.metadata.Unicode.widths,i=[\"\",\"0\",\"00\",\"000\",\"0000\"],o=[\"\"],a=0,s=t.length;a<s;++a){if(A=e.metadata.characterToGlyph(t.charCodeAt(a)),r.push(A),-1==n.indexOf(A)&&(n.push(A),n.push([parseInt(e.metadata.widthOfGlyph(A),10)])),\"0\"==A)return o.join(\"\");A=A.toString(16),o.push(i[4-A.length],A)}return o.join(\"\")}(h,u[A])),s.isHex=!0,{text:g,x:i,y:o,options:a,mutex:s}};A.events.push([\"postProcessText\",function(t){var e=t.text||\"\",A=t.x,r=t.y,i=t.options,o=t.mutex,a=(i.lang,[]),s={text:e,x:A,y:r,options:i,mutex:o};if(\"[object Array]\"===Object.prototype.toString.call(e)){var c=0;for(c=0;c<e.length;c+=1)\"[object Array]\"===Object.prototype.toString.call(e[c])&&3===e[c].length?a.push([n(Object.assign({},s,{text:e[c][0]})).text,e[c][1],e[c][2]]):a.push(n(Object.assign({},s,{text:e[c]})).text);t.text=a}else t.text=n(Object.assign({},s,{text:e})).text}])}(st,\"undefined\"!=typeof self&&self||void 0!==r&&r||\"undefined\"!=typeof window&&window||Function(\"return this\")()),it=st.API,ot={},it.existsFileInVFS=function(t){return ot.hasOwnProperty(t)},it.addFileToVFS=function(t,e){return ot[t]=e,this},it.getFileFromVFS=function(t){return ot.hasOwnProperty(t)?ot[t]:null},function(t){if(t.URL=t.URL||t.webkitURL,t.Blob&&t.URL)try{return new Blob}catch(t){}var e=t.BlobBuilder||t.WebKitBlobBuilder||t.MozBlobBuilder||function(t){var e=function(t){return Object.prototype.toString.call(t).match(/^\\[object\\s(.*)\\]$/)[1]},A=function(){this.data=[]},r=function(t,e,A){this.data=t,this.size=t.length,this.type=e,this.encoding=A},n=A.prototype,i=r.prototype,o=t.FileReaderSync,a=function(t){this.code=this[this.name=t]},s=\"NOT_FOUND_ERR SECURITY_ERR ABORT_ERR NOT_READABLE_ERR ENCODING_ERR NO_MODIFICATION_ALLOWED_ERR INVALID_STATE_ERR SYNTAX_ERR\".split(\" \"),c=s.length,l=t.URL||t.webkitURL||t,u=l.createObjectURL,h=l.revokeObjectURL,d=l,f=t.btoa,p=t.atob,g=t.ArrayBuffer,B=t.Uint8Array,w=/^[\\w-]+:\\/*\\[?[\\w\\.:-]+\\]?(?::[0-9]+)?/;for(r.fake=i.fake=!0;c--;)a.prototype[s[c]]=c+1;return l.createObjectURL||(d=t.URL=function(t){var e,A=document.createElementNS(\"http://www.w3.org/1999/xhtml\",\"a\");return A.href=t,\"origin\"in A||(\"data:\"===A.protocol.toLowerCase()?A.origin=null:(e=t.match(w),A.origin=e&&e[1])),A}),d.createObjectURL=function(t){var e,A=t.type;return null===A&&(A=\"application/octet-stream\"),t instanceof r?(e=\"data:\"+A,\"base64\"===t.encoding?e+\";base64,\"+t.data:\"URI\"===t.encoding?e+\",\"+decodeURIComponent(t.data):f?e+\";base64,\"+f(t.data):e+\",\"+encodeURIComponent(t.data)):u?u.call(l,t):void 0},d.revokeObjectURL=function(t){\"data:\"!==t.substring(0,5)&&h&&h.call(l,t)},n.append=function(t){var A=this.data;if(B&&(t instanceof g||t instanceof B)){for(var n=\"\",i=new B(t),s=0,c=i.length;s<c;s++)n+=String.fromCharCode(i[s]);A.push(n)}else if(\"Blob\"===e(t)||\"File\"===e(t)){if(!o)throw new a(\"NOT_READABLE_ERR\");var l=new o;A.push(l.readAsBinaryString(t))}else t instanceof r?\"base64\"===t.encoding&&p?A.push(p(t.data)):\"URI\"===t.encoding?A.push(decodeURIComponent(t.data)):\"raw\"===t.encoding&&A.push(t.data):(\"string\"!=typeof t&&(t+=\"\"),A.push(unescape(encodeURIComponent(t))))},n.getBlob=function(t){return arguments.length||(t=null),new r(this.data.join(\"\"),t,\"raw\")},n.toString=function(){return\"[object BlobBuilder]\"},i.slice=function(t,e,A){var n=arguments.length;return n<3&&(A=null),new r(this.data.slice(t,1<n?e:this.data.length),A,this.encoding)},i.toString=function(){return\"[object Blob]\"},i.close=function(){this.size=0,delete this.data},A}(t);t.Blob=function(t,A){var r=A&&A.type||\"\",n=new e;if(t)for(var i=0,o=t.length;i<o;i++)Uint8Array&&t[i]instanceof Uint8Array?n.append(t[i].buffer):n.append(t[i]);var a=n.getBlob(r);return!a.slice&&a.webkitSlice&&(a.slice=a.webkitSlice),a};var A=Object.getPrototypeOf||function(t){return t.__proto__};t.Blob.prototype=A(new t.Blob)}(\"undefined\"!=typeof self&&self||\"undefined\"!=typeof window&&window||window.content||window);var ct,lt,ut,ht,dt,ft,pt,gt,Bt,wt,mt,yt,vt,Qt,Ct,Ut,bt=bt||function(t){if(!(void 0===t||\"undefined\"!=typeof navigator&&/MSIE [1-9]\\./.test(navigator.userAgent))){var e=function(){return t.URL||t.webkitURL||t},A=t.document.createElementNS(\"http://www.w3.org/1999/xhtml\",\"a\"),r=\"download\"in A,n=/constructor/i.test(t.HTMLElement)||t.safari,i=/CriOS\\/[\\d]+/.test(navigator.userAgent),o=function(e){(t.setImmediate||t.setTimeout)(function(){throw e},0)},a=function(t){setTimeout(function(){\"string\"==typeof t?e().revokeObjectURL(t):t.remove()},4e4)},s=function(t){return/^\\s*(?:text\\/\\S*|application\\/xml|\\S*\\/\\S*\\+xml)\\s*;.*charset\\s*=\\s*utf-8/i.test(t.type)?new Blob([String.fromCharCode(65279),t],{type:t.type}):t},c=function(c,l,u){u||(c=s(c));var h,d=this,f=\"application/octet-stream\"===c.type,p=function(){!function(t,e,A){for(var r=(e=[].concat(e)).length;r--;){var n=t[\"on\"+e[r]];if(\"function\"==typeof n)try{n.call(t,t)}catch(t){o(t)}}}(d,\"writestart progress write writeend\".split(\" \"))};if(d.readyState=d.INIT,r)return h=e().createObjectURL(c),void setTimeout(function(){var t,e;A.href=h,A.download=l,t=A,e=new MouseEvent(\"click\"),t.dispatchEvent(e),p(),a(h),d.readyState=d.DONE});!function(){if((i||f&&n)&&t.FileReader){var A=new FileReader;return A.onloadend=function(){var e=i?A.result:A.result.replace(/^data:[^;]*;/,\"data:attachment/file;\");t.open(e,\"_blank\")||(t.location.href=e),e=void 0,d.readyState=d.DONE,p()},A.readAsDataURL(c),d.readyState=d.INIT}h||(h=e().createObjectURL(c)),f?t.location.href=h:t.open(h,\"_blank\")||(t.location.href=h),d.readyState=d.DONE,p(),a(h)}()},l=c.prototype;return\"undefined\"!=typeof navigator&&navigator.msSaveOrOpenBlob?function(t,e,A){return e=e||t.name||\"download\",A||(t=s(t)),navigator.msSaveOrOpenBlob(t,e)}:(l.abort=function(){},l.readyState=l.INIT=0,l.WRITING=1,l.DONE=2,l.error=l.onwritestart=l.onprogress=l.onwrite=l.onabort=l.onerror=l.onwriteend=null,function(t,e,A){return new c(t,e||t.name||\"download\",A)})}}(\"undefined\"!=typeof self&&self||\"undefined\"!=typeof window&&window||window.content);!!e.exports&&(e.exports.saveAs=bt),st.API.adler32cs=(ft=\"function\"==typeof ArrayBuffer&&\"function\"==typeof Uint8Array,pt=null,gt=function(){if(!ft)return function(){return!1};try{var t={};\"function\"==typeof t.Buffer&&(pt=t.Buffer)}catch(t){}return function(t){return t instanceof ArrayBuffer||null!==pt&&t instanceof pt}}(),Bt=null!==pt?function(t){return new pt(t,\"utf8\").toString(\"binary\")}:function(t){return unescape(encodeURIComponent(t))},wt=65521,mt=function(t,e){for(var A=65535&t,r=t>>>16,n=0,i=e.length;n<i;n++)A=(A+(255&e.charCodeAt(n)))%wt,r=(r+A)%wt;return(r<<16|A)>>>0},yt=function(t,e){for(var A=65535&t,r=t>>>16,n=0,i=e.length;n<i;n++)A=(A+e[n])%wt,r=(r+A)%wt;return(r<<16|A)>>>0},Qt=(vt={}).Adler32=(((dt=(ht=function(t){if(!(this instanceof ht))throw new TypeError(\"Constructor cannot called be as a function.\");if(!isFinite(t=null==t?1:+t))throw new Error(\"First arguments needs to be a finite number.\");this.checksum=t>>>0}).prototype={}).constructor=ht).from=((ct=function(t){if(!(this instanceof ht))throw new TypeError(\"Constructor cannot called be as a function.\");if(null==t)throw new Error(\"First argument needs to be a string.\");this.checksum=mt(1,t.toString())}).prototype=dt,ct),ht.fromUtf8=((lt=function(t){if(!(this instanceof ht))throw new TypeError(\"Constructor cannot called be as a function.\");if(null==t)throw new Error(\"First argument needs to be a string.\");var e=Bt(t.toString());this.checksum=mt(1,e)}).prototype=dt,lt),ft&&(ht.fromBuffer=((ut=function(t){if(!(this instanceof ht))throw new TypeError(\"Constructor cannot called be as a function.\");if(!gt(t))throw new Error(\"First argument needs to be ArrayBuffer.\");var e=new Uint8Array(t);return this.checksum=yt(1,e)}).prototype=dt,ut)),dt.update=function(t){if(null==t)throw new Error(\"First argument needs to be a string.\");return t=t.toString(),this.checksum=mt(this.checksum,t)},dt.updateUtf8=function(t){if(null==t)throw new Error(\"First argument needs to be a string.\");var e=Bt(t.toString());return this.checksum=mt(this.checksum,e)},ft&&(dt.updateBuffer=function(t){if(!gt(t))throw new Error(\"First argument needs to be ArrayBuffer.\");var e=new Uint8Array(t);return this.checksum=yt(this.checksum,e)}),dt.clone=function(){return new Qt(this.checksum)},ht),vt.from=function(t){if(null==t)throw new Error(\"First argument needs to be a string.\");return mt(1,t.toString())},vt.fromUtf8=function(t){if(null==t)throw new Error(\"First argument needs to be a string.\");var e=Bt(t.toString());return mt(1,e)},ft&&(vt.fromBuffer=function(t){if(!gt(t))throw new Error(\"First argument need to be ArrayBuffer.\");var e=new Uint8Array(t);return yt(1,e)}),vt);try{A.GifWriter=function(t,e,A,r){function n(t){var e=t.length;if(e<2||256<e||e&e-1)throw\"Invalid code/color length, must be power of 2 and 2 .. 256.\";return e}var i=0,o=void 0===(r=void 0===r?{}:r).loop?null:r.loop,a=void 0===r.palette?null:r.palette;if(e<=0||A<=0||65535<e||65535<A)throw\"Width/Height invalid.\";t[i++]=71,t[i++]=73,t[i++]=70,t[i++]=56,t[i++]=57,t[i++]=97;var s=0,c=0;if(null!==a){for(var l=n(a);l>>=1;)++s;if(l=1<<s,--s,void 0!==r.background){if(l<=(c=r.background))throw\"Background index out of range.\";if(0===c)throw\"Background index explicitly passed as 0.\"}}if(t[i++]=255&e,t[i++]=e>>8&255,t[i++]=255&A,t[i++]=A>>8&255,t[i++]=(null!==a?128:0)|s,t[i++]=c,t[i++]=0,null!==a)for(var u=0,h=a.length;u<h;++u){var d=a[u];t[i++]=d>>16&255,t[i++]=d>>8&255,t[i++]=255&d}if(null!==o){if(o<0||65535<o)throw\"Loop count invalid.\";t[i++]=33,t[i++]=255,t[i++]=11,t[i++]=78,t[i++]=69,t[i++]=84,t[i++]=83,t[i++]=67,t[i++]=65,t[i++]=80,t[i++]=69,t[i++]=50,t[i++]=46,t[i++]=48,t[i++]=3,t[i++]=1,t[i++]=255&o,t[i++]=o>>8&255,t[i++]=0}var f=!1;this.addFrame=function(e,A,r,o,s,c){if(!0===f&&(--i,f=!1),c=void 0===c?{}:c,e<0||A<0||65535<e||65535<A)throw\"x/y invalid.\";if(r<=0||o<=0||65535<r||65535<o)throw\"Width/Height invalid.\";if(s.length<r*o)throw\"Not enough pixels for the frame size.\";var l=!0,u=c.palette;if(null==u&&(l=!1,u=a),null==u)throw\"Must supply either a local or global palette.\";for(var h=n(u),d=0;h>>=1;)++d;h=1<<d;var p=void 0===c.delay?0:c.delay,g=void 0===c.disposal?0:c.disposal;if(g<0||3<g)throw\"Disposal out of range.\";var B=!1,w=0;if(void 0!==c.transparent&&null!==c.transparent&&(B=!0,(w=c.transparent)<0||h<=w))throw\"Transparent color index.\";if((0!==g||B||0!==p)&&(t[i++]=33,t[i++]=249,t[i++]=4,t[i++]=g<<2|(!0===B?1:0),t[i++]=255&p,t[i++]=p>>8&255,t[i++]=w,t[i++]=0),t[i++]=44,t[i++]=255&e,t[i++]=e>>8&255,t[i++]=255&A,t[i++]=A>>8&255,t[i++]=255&r,t[i++]=r>>8&255,t[i++]=255&o,t[i++]=o>>8&255,t[i++]=!0===l?128|d-1:0,!0===l)for(var m=0,y=u.length;m<y;++m){var v=u[m];t[i++]=v>>16&255,t[i++]=v>>8&255,t[i++]=255&v}i=function(t,e,A,r){function n(A){for(;A<=h;)t[e++]=255&d,d>>=8,h-=8,e===o+256&&(t[o]=255,o=e++)}function i(t){d|=t<<h,h+=u,n(8)}t[e++]=A;var o=e++,a=1<<A,s=a-1,c=a+1,l=c+1,u=A+1,h=0,d=0,f=r[0]&s,p={};i(a);for(var g=1,B=r.length;g<B;++g){var w=r[g]&s,m=f<<8|w,y=p[m];if(void 0===y){for(d|=f<<h,h+=u;8<=h;)t[e++]=255&d,d>>=8,h-=8,e===o+256&&(t[o]=255,o=e++);4096===l?(i(a),l=c+1,u=A+1,p={}):(1<<u<=l&&++u,p[m]=l++),f=w}else f=y}return i(f),i(c),n(1),o+1===e?t[o]=0:(t[o]=e-o-1,t[e++]=0),e}(t,i,d<2?2:d,s)},this.end=function(){return!1===f&&(t[i++]=59,f=!0),i}},A.GifReader=n}catch(s){}try{e.exports=o}catch(s){}a.prototype.parseHeader=function(){if(this.fileSize=this.datav.getUint32(this.pos,!0),this.pos+=4,this.reserved=this.datav.getUint32(this.pos,!0),this.pos+=4,this.offset=this.datav.getUint32(this.pos,!0),this.pos+=4,this.headerSize=this.datav.getUint32(this.pos,!0),this.pos+=4,this.width=this.datav.getUint32(this.pos,!0),this.pos+=4,this.height=this.datav.getInt32(this.pos,!0),this.pos+=4,this.planes=this.datav.getUint16(this.pos,!0),this.pos+=2,this.bitPP=this.datav.getUint16(this.pos,!0),this.pos+=2,this.compress=this.datav.getUint32(this.pos,!0),this.pos+=4,this.rawSize=this.datav.getUint32(this.pos,!0),this.pos+=4,this.hr=this.datav.getUint32(this.pos,!0),this.pos+=4,this.vr=this.datav.getUint32(this.pos,!0),this.pos+=4,this.colors=this.datav.getUint32(this.pos,!0),this.pos+=4,this.importantColors=this.datav.getUint32(this.pos,!0),this.pos+=4,16===this.bitPP&&this.is_with_alpha&&(this.bitPP=15),this.bitPP<15){var t=0===this.colors?1<<this.bitPP:this.colors;this.palette=new Array(t);for(var e=0;e<t;e++){var A=this.datav.getUint8(this.pos++,!0),r=this.datav.getUint8(this.pos++,!0),n=this.datav.getUint8(this.pos++,!0),i=this.datav.getUint8(this.pos++,!0);this.palette[e]={red:n,green:r,blue:A,quad:i}}}this.height<0&&(this.height*=-1,this.bottom_up=!1)},a.prototype.parseBGR=function(){this.pos=this.offset;try{var t=\"bit\"+this.bitPP,e=this.width*this.height*4;this.data=new Uint8Array(e),this[t]()}catch(t){console.log(\"bit decode error:\"+t)}},a.prototype.bit1=function(){var t=Math.ceil(this.width/8),e=t%4,A=0<=this.height?this.height-1:-this.height;for(A=this.height-1;0<=A;A--){for(var r=this.bottom_up?A:this.height-1-A,n=0;n<t;n++)for(var i=this.datav.getUint8(this.pos++,!0),o=r*this.width*4+8*n*4,a=0;a<8&&8*n+a<this.width;a++){var s=this.palette[i>>7-a&1];this.data[o+4*a]=s.blue,this.data[o+4*a+1]=s.green,this.data[o+4*a+2]=s.red,this.data[o+4*a+3]=255}0!=e&&(this.pos+=4-e)}},a.prototype.bit4=function(){for(var t=Math.ceil(this.width/2),e=t%4,A=this.height-1;0<=A;A--){for(var r=this.bottom_up?A:this.height-1-A,n=0;n<t;n++){var i=this.datav.getUint8(this.pos++,!0),o=r*this.width*4+2*n*4,a=i>>4,s=15&i,c=this.palette[a];if(this.data[o]=c.blue,this.data[o+1]=c.green,this.data[o+2]=c.red,this.data[o+3]=255,2*n+1>=this.width)break;c=this.palette[s],this.data[o+4]=c.blue,this.data[o+4+1]=c.green,this.data[o+4+2]=c.red,this.data[o+4+3]=255}0!=e&&(this.pos+=4-e)}},a.prototype.bit8=function(){for(var t=this.width%4,e=this.height-1;0<=e;e--){for(var A=this.bottom_up?e:this.height-1-e,r=0;r<this.width;r++){var n=this.datav.getUint8(this.pos++,!0),i=A*this.width*4+4*r;if(n<this.palette.length){var o=this.palette[n];this.data[i]=o.red,this.data[i+1]=o.green,this.data[i+2]=o.blue,this.data[i+3]=255}else this.data[i]=255,this.data[i+1]=255,this.data[i+2]=255,this.data[i+3]=255}0!=t&&(this.pos+=4-t)}},a.prototype.bit15=function(){for(var t=this.width%3,e=parseInt(\"11111\",2),A=this.height-1;0<=A;A--){for(var r=this.bottom_up?A:this.height-1-A,n=0;n<this.width;n++){var i=this.datav.getUint16(this.pos,!0);this.pos+=2;var o=(i&e)/e*255|0,a=(i>>5&e)/e*255|0,s=(i>>10&e)/e*255|0,c=i>>15?255:0,l=r*this.width*4+4*n;this.data[l]=s,this.data[l+1]=a,this.data[l+2]=o,this.data[l+3]=c}this.pos+=t}},a.prototype.bit16=function(){for(var t=this.width%3,e=parseInt(\"11111\",2),A=parseInt(\"111111\",2),r=this.height-1;0<=r;r--){for(var n=this.bottom_up?r:this.height-1-r,i=0;i<this.width;i++){var o=this.datav.getUint16(this.pos,!0);this.pos+=2;var a=(o&e)/e*255|0,s=(o>>5&A)/A*255|0,c=(o>>11)/e*255|0,l=n*this.width*4+4*i;this.data[l]=c,this.data[l+1]=s,this.data[l+2]=a,this.data[l+3]=255}this.pos+=t}},a.prototype.bit24=function(){for(var t=this.height-1;0<=t;t--){for(var e=this.bottom_up?t:this.height-1-t,A=0;A<this.width;A++){var r=this.datav.getUint8(this.pos++,!0),n=this.datav.getUint8(this.pos++,!0),i=this.datav.getUint8(this.pos++,!0),o=e*this.width*4+4*A;this.data[o]=i,this.data[o+1]=n,this.data[o+2]=r,this.data[o+3]=255}this.pos+=this.width%4}},a.prototype.bit32=function(){for(var t=this.height-1;0<=t;t--)for(var e=this.bottom_up?t:this.height-1-t,A=0;A<this.width;A++){var r=this.datav.getUint8(this.pos++,!0),n=this.datav.getUint8(this.pos++,!0),i=this.datav.getUint8(this.pos++,!0),o=this.datav.getUint8(this.pos++,!0),a=e*this.width*4+4*A;this.data[a]=i,this.data[a+1]=n,this.data[a+2]=r,this.data[a+3]=o}},a.prototype.getData=function(){return this.data};try{e.exports=function(t){var e=new a(t);return{data:e.getData(),width:e.width,height:e.height}}}catch(s){}!function(t){function e(){function t(t,e){for(var A=0;A|=1&t,t>>>=1,A<<=1,0<--e;);return A>>>1}var e=this;e.build_tree=function(A){var r,n,i,o=e.dyn_tree,c=e.stat_desc.static_tree,l=e.stat_desc.elems,u=-1;for(A.heap_len=0,A.heap_max=s,r=0;r<l;r++)0!==o[2*r]?(A.heap[++A.heap_len]=u=r,A.depth[r]=0):o[2*r+1]=0;for(;A.heap_len<2;)o[2*(i=A.heap[++A.heap_len]=u<2?++u:0)]=1,A.depth[i]=0,A.opt_len--,c&&(A.static_len-=c[2*i+1]);for(e.max_code=u,r=Math.floor(A.heap_len/2);1<=r;r--)A.pqdownheap(o,r);for(i=l;r=A.heap[1],A.heap[1]=A.heap[A.heap_len--],A.pqdownheap(o,1),n=A.heap[1],A.heap[--A.heap_max]=r,A.heap[--A.heap_max]=n,o[2*i]=o[2*r]+o[2*n],A.depth[i]=Math.max(A.depth[r],A.depth[n])+1,o[2*r+1]=o[2*n+1]=i,A.heap[1]=i++,A.pqdownheap(o,1),2<=A.heap_len;);A.heap[--A.heap_max]=A.heap[1],function(t){var A,r,n,i,o,c,l=e.dyn_tree,u=e.stat_desc.static_tree,h=e.stat_desc.extra_bits,d=e.stat_desc.extra_base,f=e.stat_desc.max_length,p=0;for(i=0;i<=a;i++)t.bl_count[i]=0;for(l[2*t.heap[t.heap_max]+1]=0,A=t.heap_max+1;A<s;A++)f<(i=l[2*l[2*(r=t.heap[A])+1]+1]+1)&&(i=f,p++),l[2*r+1]=i,r>e.max_code||(t.bl_count[i]++,o=0,d<=r&&(o=h[r-d]),c=l[2*r],t.opt_len+=c*(i+o),u&&(t.static_len+=c*(u[2*r+1]+o)));if(0!==p){do{for(i=f-1;0===t.bl_count[i];)i--;t.bl_count[i]--,t.bl_count[i+1]+=2,t.bl_count[f]--,p-=2}while(0<p);for(i=f;0!==i;i--)for(r=t.bl_count[i];0!==r;)(n=t.heap[--A])>e.max_code||(l[2*n+1]!=i&&(t.opt_len+=(i-l[2*n+1])*l[2*n],l[2*n+1]=i),r--)}}(A),function(e,A,r){var n,i,o,s=[],c=0;for(n=1;n<=a;n++)s[n]=c=c+r[n-1]<<1;for(i=0;i<=A;i++)0!==(o=e[2*i+1])&&(e[2*i]=t(s[o]++,o))}(o,e.max_code,A.bl_count)}}function A(t,e,A,r,n){var i=this;i.static_tree=t,i.extra_bits=e,i.extra_base=A,i.elems=r,i.max_length=n}function r(t,e,A,r,n){var i=this;i.good_length=t,i.max_lazy=e,i.nice_length=A,i.max_chain=r,i.func=n}function n(t,e,A,r){var n=t[2*e],i=t[2*A];return n<i||n==i&&r[e]<=r[A]}function i(){function t(){var t;for(t=0;t<286;t++)Z[2*t]=0;for(t=0;t<30;t++)$[2*t]=0;for(t=0;t<19;t++)tt[2*t]=0;Z[512]=1,ct.opt_len=ct.static_len=0,rt=it=0}function r(t,e){var A,r,n=-1,i=t[1],o=0,a=7,s=4;for(0===i&&(a=138,s=3),t[2*(e+1)+1]=65535,A=0;A<=e;A++)r=i,i=t[2*(A+1)+1],++o<a&&r==i||(o<s?tt[2*r]+=o:0!==r?(r!=n&&tt[2*r]++,tt[32]++):o<=10?tt[34]++:tt[36]++,n=r,(o=0)===i?(a=138,s=3):r==i?(a=6,s=3):(a=7,s=4))}function i(t){ct.pending_buf[ct.pending++]=t}function o(t){i(255&t),i(t>>>8&255)}function a(t,e){var A,r=e;16-r<st?(o(at|=(A=t)<<st&65535),at=A>>>16-st,st+=r-16):(at|=t<<st&65535,st+=r)}function s(t,e){var A=2*t;a(65535&e[A],65535&e[A+1])}function c(t,e){var A,r,n=-1,i=t[1],o=0,c=7,l=4;for(0===i&&(c=138,l=3),A=0;A<=e;A++)if(r=i,i=t[2*(A+1)+1],!(++o<c&&r==i)){if(o<l)for(;s(r,tt),0!=--o;);else 0!==r?(r!=n&&(s(r,tt),o--),s(16,tt),a(o-3,2)):o<=10?(s(17,tt),a(o-3,3)):(s(18,tt),a(o-11,7));n=r,(o=0)===i?(c=138,l=3):r==i?(c=6,l=3):(c=7,l=4)}}function d(){16==st?(o(at),st=at=0):8<=st&&(i(255&at),at>>>=8,st-=8)}function f(t,A){var r,n,i;if(ct.pending_buf[nt+2*rt]=t>>>8&255,ct.pending_buf[nt+2*rt+1]=255&t,ct.pending_buf[et+rt]=255&A,rt++,0===t?Z[2*A]++:(it++,t--,Z[2*(e._length_code[A]+256+1)]++,$[2*e.d_code(t)]++),0==(8191&rt)&&2<G){for(r=8*rt,n=K-D,i=0;i<30;i++)r+=$[2*i]*(5+e.extra_dbits[i]);if(r>>>=3,it<Math.floor(rt/2)&&r<Math.floor(n/2))return!0}return rt==At-1}function p(t,A){var r,n,i,o,c=0;if(0!==rt)for(;r=ct.pending_buf[nt+2*c]<<8&65280|255&ct.pending_buf[nt+2*c+1],n=255&ct.pending_buf[et+c],c++,0===r?s(n,t):(s((i=e._length_code[n])+256+1,t),0!==(o=e.extra_lbits[i])&&a(n-=e.base_length[i],o),s(i=e.d_code(--r),A),0!==(o=e.extra_dbits[i])&&a(r-=e.base_dist[i],o)),c<rt;);s(256,t),ot=t[513]}function g(){8<st?o(at):0<st&&i(255&at),st=at=0}function B(t,e,A){var r,n;a(0+(A?1:0),3),r=t,n=e,g(),ot=8,o(n),o(~n),ct.pending_buf.set(H.subarray(r,r+n),ct.pending),ct.pending+=n}function w(n){(function(n,i,o){var s,l,u=0;0<G?(lt.build_tree(ct),ut.build_tree(ct),u=function(){var t;for(r(Z,lt.max_code),r($,ut.max_code),ht.build_tree(ct),t=18;3<=t&&0===tt[2*e.bl_order[t]+1];t--);return ct.opt_len+=3*(t+1)+5+5+4,t}(),s=ct.opt_len+3+7>>>3,(l=ct.static_len+3+7>>>3)<=s&&(s=l)):s=l=i+5,i+4<=s&&-1!=n?B(n,i,o):l==s?(a(2+(o?1:0),3),p(A.static_ltree,A.static_dtree)):(a(4+(o?1:0),3),function(t,A,r){var n;for(a(t-257,5),a(A-1,5),a(r-4,4),n=0;n<r;n++)a(tt[2*e.bl_order[n]+1],3);c(Z,t-1),c($,A-1)}(lt.max_code+1,ut.max_code+1,u+1),p(Z,$)),t(),o&&g()})(0<=D?D:-1,K-D,n),D=K,Q.flush_pending()}function m(){var t,e,A,r;do{if(0==(r=I-q-K)&&0===K&&0===q)r=F;else if(-1==r)r--;else if(F+F-h<=K){for(H.set(H.subarray(F,F+F),0),z-=F,K-=F,D-=F,A=t=N;e=65535&_[--A],_[A]=F<=e?e-F:0,0!=--t;);for(A=t=F;e=65535&S[--A],S[A]=F<=e?e-F:0,0!=--t;);r+=F}if(0===Q.avail_in)return;t=Q.read_buf(H,K+q,r),3<=(q+=t)&&(T=((T=255&H[K])<<P^255&H[K+1])&O)}while(q<h&&0!==Q.avail_in)}function y(t){var e,A,r=X,n=K,i=j,o=F-h<K?K-(F-h):0,a=J,s=x,c=K+258,l=H[n+i-1],u=H[n+i];Y<=j&&(r>>=2),q<a&&(a=q);do{if(H[(e=t)+i]==u&&H[e+i-1]==l&&H[e]==H[n]&&H[++e]==H[n+1]){n+=2,e++;do{}while(H[++n]==H[++e]&&H[++n]==H[++e]&&H[++n]==H[++e]&&H[++n]==H[++e]&&H[++n]==H[++e]&&H[++n]==H[++e]&&H[++n]==H[++e]&&H[++n]==H[++e]&&n<c);if(A=258-(c-n),n=c-258,i<A){if(z=t,a<=(i=A))break;l=H[n+i-1],u=H[n+i]}}}while((t=65535&S[t&s])>o&&0!=--r);return i<=q?i:q}function v(e){return e.total_in=e.total_out=0,e.msg=null,ct.pending=0,ct.pending_out=0,C=113,b=0,lt.dyn_tree=Z,lt.stat_desc=A.static_l_desc,ut.dyn_tree=$,ut.stat_desc=A.static_d_desc,ht.dyn_tree=tt,ht.stat_desc=A.static_bl_desc,st=at=0,ot=8,t(),function(){var t;for(I=2*F,t=_[N-1]=0;t<N-1;t++)_[t]=0;V=l[G].max_lazy,Y=l[G].good_length,J=l[G].nice_length,X=l[G].max_chain,L=j=2,T=M=q=D=K=0}(),0}var Q,C,U,b,F,E,x,H,I,S,_,T,N,k,O,P,D,L,R,M,K,z,q,j,X,V,G,W,Y,J,Z,$,tt,et,At,rt,nt,it,ot,at,st,ct=this,lt=new e,ut=new e,ht=new e;ct.depth=[],ct.bl_count=[],ct.heap=[],Z=[],$=[],tt=[],ct.pqdownheap=function(t,e){for(var A=ct.heap,r=A[e],i=e<<1;i<=ct.heap_len&&(i<ct.heap_len&&n(t,A[i+1],A[i],ct.depth)&&i++,!n(t,r,A[i],ct.depth));)A[e]=A[i],e=i,i<<=1;A[e]=r},ct.deflateInit=function(t,e,A,r,n,i){return r||(r=8),n||(n=8),i||(i=0),t.msg=null,-1==e&&(e=6),n<1||9<n||8!=r||A<9||15<A||e<0||9<e||i<0||2<i?-2:(t.dstate=ct,x=(F=1<<(E=A))-1,O=(N=1<<(k=n+7))-1,P=Math.floor((k+3-1)/3),H=new Uint8Array(2*F),S=[],_=[],At=1<<n+6,ct.pending_buf=new Uint8Array(4*At),U=4*At,nt=Math.floor(At/2),et=3*At,G=e,W=i,v(t))},ct.deflateEnd=function(){return 42!=C&&113!=C&&666!=C?-2:(ct.pending_buf=null,H=S=_=null,ct.dstate=null,113==C?-3:0)},ct.deflateParams=function(t,e,A){var r=0;return-1==e&&(e=6),e<0||9<e||A<0||2<A?-2:(l[G].func!=l[e].func&&0!==t.total_in&&(r=t.deflate(1)),G!=e&&(V=l[G=e].max_lazy,Y=l[G].good_length,J=l[G].nice_length,X=l[G].max_chain),W=A,r)},ct.deflateSetDictionary=function(t,e,A){var r,n=A,i=0;if(!e||42!=C)return-2;if(n<3)return 0;for(F-h<n&&(i=A-(n=F-h)),H.set(e.subarray(i,i+n),0),D=K=n,T=((T=255&H[0])<<P^255&H[1])&O,r=0;r<=n-3;r++)T=(T<<P^255&H[r+2])&O,S[r&x]=_[T],_[T]=r;return 0},ct.deflate=function(t,e){var r,n,o,c,p,g;if(4<e||e<0)return-2;if(!t.next_out||!t.next_in&&0!==t.avail_in||666==C&&4!=e)return t.msg=u[4],-2;if(0===t.avail_out)return t.msg=u[7],-5;if(Q=t,c=b,b=e,42==C&&(n=8+(E-8<<4)<<8,3<(o=(G-1&255)>>1)&&(o=3),n|=o<<6,0!==K&&(n|=32),C=113,i((g=n+=31-n%31)>>8&255),i(255&g)),0!==ct.pending){if(Q.flush_pending(),0===Q.avail_out)return b=-1,0}else if(0===Q.avail_in&&e<=c&&4!=e)return Q.msg=u[7],-5;if(666==C&&0!==Q.avail_in)return t.msg=u[7],-5;if(0!==Q.avail_in||0!==q||0!=e&&666!=C){switch(p=-1,l[G].func){case 0:p=function(t){var e,A=65535;for(U-5<A&&(A=U-5);;){if(q<=1){if(m(),0===q&&0==t)return 0;if(0===q)break}if(K+=q,e=D+A,((q=0)===K||e<=K)&&(q=K-e,K=e,w(!1),0===Q.avail_out))return 0;if(F-h<=K-D&&(w(!1),0===Q.avail_out))return 0}return w(4==t),0===Q.avail_out?4==t?2:0:4==t?3:1}(e);break;case 1:p=function(t){for(var e,A=0;;){if(q<h){if(m(),q<h&&0==t)return 0;if(0===q)break}if(3<=q&&(T=(T<<P^255&H[K+2])&O,A=65535&_[T],S[K&x]=_[T],_[T]=K),0!==A&&(K-A&65535)<=F-h&&2!=W&&(L=y(A)),3<=L)if(e=f(K-z,L-3),q-=L,L<=V&&3<=q){for(L--;T=(T<<P^255&H[++K+2])&O,A=65535&_[T],S[K&x]=_[T],_[T]=K,0!=--L;);K++}else K+=L,L=0,T=((T=255&H[K])<<P^255&H[K+1])&O;else e=f(0,255&H[K]),q--,K++;if(e&&(w(!1),0===Q.avail_out))return 0}return w(4==t),0===Q.avail_out?4==t?2:0:4==t?3:1}(e);break;case 2:p=function(t){for(var e,A,r=0;;){if(q<h){if(m(),q<h&&0==t)return 0;if(0===q)break}if(3<=q&&(T=(T<<P^255&H[K+2])&O,r=65535&_[T],S[K&x]=_[T],_[T]=K),j=L,R=z,L=2,0!==r&&j<V&&(K-r&65535)<=F-h&&(2!=W&&(L=y(r)),L<=5&&(1==W||3==L&&4096<K-z)&&(L=2)),3<=j&&L<=j){for(A=K+q-3,e=f(K-1-R,j-3),q-=j-1,j-=2;++K<=A&&(T=(T<<P^255&H[K+2])&O,r=65535&_[T],S[K&x]=_[T],_[T]=K),0!=--j;);if(M=0,L=2,K++,e&&(w(!1),0===Q.avail_out))return 0}else if(0!==M){if((e=f(0,255&H[K-1]))&&w(!1),K++,q--,0===Q.avail_out)return 0}else M=1,K++,q--}return 0!==M&&(e=f(0,255&H[K-1]),M=0),w(4==t),0===Q.avail_out?4==t?2:0:4==t?3:1}(e)}if(2!=p&&3!=p||(C=666),0==p||2==p)return 0===Q.avail_out&&(b=-1),0;if(1==p){if(1==e)a(2,3),s(256,A.static_ltree),d(),1+ot+10-st<9&&(a(2,3),s(256,A.static_ltree),d()),ot=7;else if(B(0,0,!1),3==e)for(r=0;r<N;r++)_[r]=0;if(Q.flush_pending(),0===Q.avail_out)return b=-1,0}}return 4!=e?0:1}}function o(){var t=this;t.next_in_index=0,t.next_out_index=0,t.avail_in=0,t.total_in=0,t.avail_out=0,t.total_out=0}var a=15,s=573,c=[0,1,2,3,4,4,5,5,6,6,6,6,7,7,7,7,8,8,8,8,8,8,8,8,9,9,9,9,9,9,9,9,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,0,0,16,17,18,18,19,19,20,20,20,20,21,21,21,21,22,22,22,22,22,22,22,22,23,23,23,23,23,23,23,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29];e._length_code=[0,1,2,3,4,5,6,7,8,8,9,9,10,10,11,11,12,12,12,12,13,13,13,13,14,14,14,14,15,15,15,15,16,16,16,16,16,16,16,16,17,17,17,17,17,17,17,17,18,18,18,18,18,18,18,18,19,19,19,19,19,19,19,19,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,28],e.base_length=[0,1,2,3,4,5,6,7,8,10,12,14,16,20,24,28,32,40,48,56,64,80,96,112,128,160,192,224,0],e.base_dist=[0,1,2,3,4,6,8,12,16,24,32,48,64,96,128,192,256,384,512,768,1024,1536,2048,3072,4096,6144,8192,12288,16384,24576],e.d_code=function(t){return t<256?c[t]:c[256+(t>>>7)]},e.extra_lbits=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],e.extra_dbits=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],e.extra_blbits=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],e.bl_order=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],A.static_ltree=[12,8,140,8,76,8,204,8,44,8,172,8,108,8,236,8,28,8,156,8,92,8,220,8,60,8,188,8,124,8,252,8,2,8,130,8,66,8,194,8,34,8,162,8,98,8,226,8,18,8,146,8,82,8,210,8,50,8,178,8,114,8,242,8,10,8,138,8,74,8,202,8,42,8,170,8,106,8,234,8,26,8,154,8,90,8,218,8,58,8,186,8,122,8,250,8,6,8,134,8,70,8,198,8,38,8,166,8,102,8,230,8,22,8,150,8,86,8,214,8,54,8,182,8,118,8,246,8,14,8,142,8,78,8,206,8,46,8,174,8,110,8,238,8,30,8,158,8,94,8,222,8,62,8,190,8,126,8,254,8,1,8,129,8,65,8,193,8,33,8,161,8,97,8,225,8,17,8,145,8,81,8,209,8,49,8,177,8,113,8,241,8,9,8,137,8,73,8,201,8,41,8,169,8,105,8,233,8,25,8,153,8,89,8,217,8,57,8,185,8,121,8,249,8,5,8,133,8,69,8,197,8,37,8,165,8,101,8,229,8,21,8,149,8,85,8,213,8,53,8,181,8,117,8,245,8,13,8,141,8,77,8,205,8,45,8,173,8,109,8,237,8,29,8,157,8,93,8,221,8,61,8,189,8,125,8,253,8,19,9,275,9,147,9,403,9,83,9,339,9,211,9,467,9,51,9,307,9,179,9,435,9,115,9,371,9,243,9,499,9,11,9,267,9,139,9,395,9,75,9,331,9,203,9,459,9,43,9,299,9,171,9,427,9,107,9,363,9,235,9,491,9,27,9,283,9,155,9,411,9,91,9,347,9,219,9,475,9,59,9,315,9,187,9,443,9,123,9,379,9,251,9,507,9,7,9,263,9,135,9,391,9,71,9,327,9,199,9,455,9,39,9,295,9,167,9,423,9,103,9,359,9,231,9,487,9,23,9,279,9,151,9,407,9,87,9,343,9,215,9,471,9,55,9,311,9,183,9,439,9,119,9,375,9,247,9,503,9,15,9,271,9,143,9,399,9,79,9,335,9,207,9,463,9,47,9,303,9,175,9,431,9,111,9,367,9,239,9,495,9,31,9,287,9,159,9,415,9,95,9,351,9,223,9,479,9,63,9,319,9,191,9,447,9,127,9,383,9,255,9,511,9,0,7,64,7,32,7,96,7,16,7,80,7,48,7,112,7,8,7,72,7,40,7,104,7,24,7,88,7,56,7,120,7,4,7,68,7,36,7,100,7,20,7,84,7,52,7,116,7,3,8,131,8,67,8,195,8,35,8,163,8,99,8,227,8],A.static_dtree=[0,5,16,5,8,5,24,5,4,5,20,5,12,5,28,5,2,5,18,5,10,5,26,5,6,5,22,5,14,5,30,5,1,5,17,5,9,5,25,5,5,5,21,5,13,5,29,5,3,5,19,5,11,5,27,5,7,5,23,5],A.static_l_desc=new A(A.static_ltree,e.extra_lbits,257,286,a),A.static_d_desc=new A(A.static_dtree,e.extra_dbits,0,30,a),A.static_bl_desc=new A(null,e.extra_blbits,0,19,7);var l=[new r(0,0,0,0,0),new r(4,4,8,4,1),new r(4,5,16,8,1),new r(4,6,32,32,1),new r(4,4,16,16,2),new r(8,16,32,32,2),new r(8,16,128,128,2),new r(8,32,128,256,2),new r(32,128,258,1024,2),new r(32,258,258,4096,2)],u=[\"need dictionary\",\"stream end\",\"\",\"\",\"stream error\",\"data error\",\"\",\"buffer error\",\"\",\"\"],h=262;o.prototype={deflateInit:function(t,e){return this.dstate=new i,e||(e=a),this.dstate.deflateInit(this,t,e)},deflate:function(t){return this.dstate?this.dstate.deflate(this,t):-2},deflateEnd:function(){if(!this.dstate)return-2;var t=this.dstate.deflateEnd();return this.dstate=null,t},deflateParams:function(t,e){return this.dstate?this.dstate.deflateParams(this,t,e):-2},deflateSetDictionary:function(t,e){return this.dstate?this.dstate.deflateSetDictionary(this,t,e):-2},read_buf:function(t,e,A){var r=this,n=r.avail_in;return A<n&&(n=A),0===n?0:(r.avail_in-=n,t.set(r.next_in.subarray(r.next_in_index,r.next_in_index+n),e),r.next_in_index+=n,r.total_in+=n,n)},flush_pending:function(){var t=this,e=t.dstate.pending;e>t.avail_out&&(e=t.avail_out),0!==e&&(t.next_out.set(t.dstate.pending_buf.subarray(t.dstate.pending_out,t.dstate.pending_out+e),t.next_out_index),t.next_out_index+=e,t.dstate.pending_out+=e,t.total_out+=e,t.avail_out-=e,t.dstate.pending-=e,0===t.dstate.pending&&(t.dstate.pending_out=0))}};var d=t.zip||t;d.Deflater=d._jzlib_Deflater=function(t){var e=new o,A=new Uint8Array(512),r=t?t.level:-1;void 0===r&&(r=-1),e.deflateInit(r),e.next_out=A,this.append=function(t,r){var n,i=[],o=0,a=0,s=0;if(t.length){e.next_in_index=0,e.next_in=t,e.avail_in=t.length;do{if(e.next_out_index=0,e.avail_out=512,0!=e.deflate(0))throw new Error(\"deflating: \"+e.msg);e.next_out_index&&(512==e.next_out_index?i.push(new Uint8Array(A)):i.push(new Uint8Array(A.subarray(0,e.next_out_index)))),s+=e.next_out_index,r&&0<e.next_in_index&&e.next_in_index!=o&&(r(e.next_in_index),o=e.next_in_index)}while(0<e.avail_in||0===e.avail_out);return n=new Uint8Array(s),i.forEach(function(t){n.set(t,a),a+=t.length}),n}},this.flush=function(){var t,r,n=[],i=0,o=0;do{if(e.next_out_index=0,e.avail_out=512,1!=(t=e.deflate(4))&&0!=t)throw new Error(\"deflating: \"+e.msg);0<512-e.avail_out&&n.push(new Uint8Array(A.subarray(0,e.next_out_index))),o+=e.next_out_index}while(0<e.avail_in||0===e.avail_out);return e.deflateEnd(),r=new Uint8Array(o),n.forEach(function(t){r.set(t,i),i+=t.length}),r}}}(\"undefined\"!=typeof self&&self||\"undefined\"!=typeof window&&window||void 0!==r&&r||Function('return typeof this === \"object\" && this.content')()||Function(\"return this\")()),function(t){function A(t){var e;this.ok=!1,\"#\"==t.charAt(0)&&(t=t.substr(1,6)),t=(t=t.replace(/ /g,\"\")).toLowerCase();var r={aliceblue:\"f0f8ff\",antiquewhite:\"faebd7\",aqua:\"00ffff\",aquamarine:\"7fffd4\",azure:\"f0ffff\",beige:\"f5f5dc\",bisque:\"ffe4c4\",black:\"000000\",blanchedalmond:\"ffebcd\",blue:\"0000ff\",blueviolet:\"8a2be2\",brown:\"a52a2a\",burlywood:\"deb887\",cadetblue:\"5f9ea0\",chartreuse:\"7fff00\",chocolate:\"d2691e\",coral:\"ff7f50\",cornflowerblue:\"6495ed\",cornsilk:\"fff8dc\",crimson:\"dc143c\",cyan:\"00ffff\",darkblue:\"00008b\",darkcyan:\"008b8b\",darkgoldenrod:\"b8860b\",darkgray:\"a9a9a9\",darkgreen:\"006400\",darkkhaki:\"bdb76b\",darkmagenta:\"8b008b\",darkolivegreen:\"556b2f\",darkorange:\"ff8c00\",darkorchid:\"9932cc\",darkred:\"8b0000\",darksalmon:\"e9967a\",darkseagreen:\"8fbc8f\",darkslateblue:\"483d8b\",darkslategray:\"2f4f4f\",darkturquoise:\"00ced1\",darkviolet:\"9400d3\",deeppink:\"ff1493\",deepskyblue:\"00bfff\",dimgray:\"696969\",dodgerblue:\"1e90ff\",feldspar:\"d19275\",firebrick:\"b22222\",floralwhite:\"fffaf0\",forestgreen:\"228b22\",fuchsia:\"ff00ff\",gainsboro:\"dcdcdc\",ghostwhite:\"f8f8ff\",gold:\"ffd700\",goldenrod:\"daa520\",gray:\"808080\",green:\"008000\",greenyellow:\"adff2f\",honeydew:\"f0fff0\",hotpink:\"ff69b4\",indianred:\"cd5c5c\",indigo:\"4b0082\",ivory:\"fffff0\",khaki:\"f0e68c\",lavender:\"e6e6fa\",lavenderblush:\"fff0f5\",lawngreen:\"7cfc00\",lemonchiffon:\"fffacd\",lightblue:\"add8e6\",lightcoral:\"f08080\",lightcyan:\"e0ffff\",lightgoldenrodyellow:\"fafad2\",lightgrey:\"d3d3d3\",lightgreen:\"90ee90\",lightpink:\"ffb6c1\",lightsalmon:\"ffa07a\",lightseagreen:\"20b2aa\",lightskyblue:\"87cefa\",lightslateblue:\"8470ff\",lightslategray:\"778899\",lightsteelblue:\"b0c4de\",lightyellow:\"ffffe0\",lime:\"00ff00\",limegreen:\"32cd32\",linen:\"faf0e6\",magenta:\"ff00ff\",maroon:\"800000\",mediumaquamarine:\"66cdaa\",mediumblue:\"0000cd\",mediumorchid:\"ba55d3\",mediumpurple:\"9370d8\",mediumseagreen:\"3cb371\",mediumslateblue:\"7b68ee\",mediumspringgreen:\"00fa9a\",mediumturquoise:\"48d1cc\",mediumvioletred:\"c71585\",midnightblue:\"191970\",mintcream:\"f5fffa\",mistyrose:\"ffe4e1\",moccasin:\"ffe4b5\",navajowhite:\"ffdead\",navy:\"000080\",oldlace:\"fdf5e6\",olive:\"808000\",olivedrab:\"6b8e23\",orange:\"ffa500\",orangered:\"ff4500\",orchid:\"da70d6\",palegoldenrod:\"eee8aa\",palegreen:\"98fb98\",paleturquoise:\"afeeee\",palevioletred:\"d87093\",papayawhip:\"ffefd5\",peachpuff:\"ffdab9\",peru:\"cd853f\",pink:\"ffc0cb\",plum:\"dda0dd\",powderblue:\"b0e0e6\",purple:\"800080\",red:\"ff0000\",rosybrown:\"bc8f8f\",royalblue:\"4169e1\",saddlebrown:\"8b4513\",salmon:\"fa8072\",sandybrown:\"f4a460\",seagreen:\"2e8b57\",seashell:\"fff5ee\",sienna:\"a0522d\",silver:\"c0c0c0\",skyblue:\"87ceeb\",slateblue:\"6a5acd\",slategray:\"708090\",snow:\"fffafa\",springgreen:\"00ff7f\",steelblue:\"4682b4\",tan:\"d2b48c\",teal:\"008080\",thistle:\"d8bfd8\",tomato:\"ff6347\",turquoise:\"40e0d0\",violet:\"ee82ee\",violetred:\"d02090\",wheat:\"f5deb3\",white:\"ffffff\",whitesmoke:\"f5f5f5\",yellow:\"ffff00\",yellowgreen:\"9acd32\"};for(var n in r)t==n&&(t=r[n]);for(var i=[{re:/^rgb\\((\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d{1,3})\\)$/,example:[\"rgb(123, 234, 45)\",\"rgb(255,234,245)\"],process:function(t){return[parseInt(t[1]),parseInt(t[2]),parseInt(t[3])]}},{re:/^(\\w{2})(\\w{2})(\\w{2})$/,example:[\"#00ff00\",\"336699\"],process:function(t){return[parseInt(t[1],16),parseInt(t[2],16),parseInt(t[3],16)]}},{re:/^(\\w{1})(\\w{1})(\\w{1})$/,example:[\"#fb0\",\"f0f\"],process:function(t){return[parseInt(t[1]+t[1],16),parseInt(t[2]+t[2],16),parseInt(t[3]+t[3],16)]}}],o=0;o<i.length;o++){var a=i[o].re,s=i[o].process,c=a.exec(t);c&&(e=s(c),this.r=e[0],this.g=e[1],this.b=e[2],this.ok=!0)}this.r=this.r<0||isNaN(this.r)?0:255<this.r?255:this.r,this.g=this.g<0||isNaN(this.g)?0:255<this.g?255:this.g,this.b=this.b<0||isNaN(this.b)?0:255<this.b?255:this.b,this.toRGB=function(){return\"rgb(\"+this.r+\", \"+this.g+\", \"+this.b+\")\"},this.toHex=function(){var t=this.r.toString(16),e=this.g.toString(16),A=this.b.toString(16);return 1==t.length&&(t=\"0\"+t),1==e.length&&(e=\"0\"+e),1==A.length&&(A=\"0\"+A),\"#\"+t+e+A},this.getHelpXML=function(){for(var t=new Array,e=0;e<i.length;e++)for(var n=i[e].example,o=0;o<n.length;o++)t[t.length]=n[o];for(var a in r)t[t.length]=a;var s=document.createElement(\"ul\");for(s.setAttribute(\"id\",\"rgbcolor-examples\"),e=0;e<t.length;e++)try{var c=document.createElement(\"li\"),l=new A(t[e]),u=document.createElement(\"div\");u.style.cssText=\"margin: 3px; border: 1px solid black; background:\"+l.toHex()+\"; color:\"+l.toHex(),u.appendChild(document.createTextNode(\"test\"));var h=document.createTextNode(\" \"+t[e]+\" -> \"+l.toRGB()+\" -> \"+l.toHex());c.appendChild(u),c.appendChild(h),s.appendChild(c)}catch(t){}return s}}e.exports&&(e.exports=A),t.RGBColor=A}(\"undefined\"!=typeof self&&self||\"undefined\"!=typeof window&&window||void 0!==r&&r||Function('return typeof this === \"object\" && this.content')()||Function(\"return this\")()),e.exports=function e(A,r,n){function i(a,s){if(!r[a]){if(!A[a]){var c=\"function\"==typeof t&&t;if(!s&&c)return c(a,!0);if(o)return o(a,!0);var l=new Error(\"Cannot find module '\"+a+\"'\");throw l.code=\"MODULE_NOT_FOUND\",l}var u=r[a]={exports:{}};A[a][0].call(u.exports,function(t){return i(A[a][1][t]||t)},u,u.exports,e,A,r,n)}return r[a].exports}for(var o=\"function\"==typeof t&&t,a=0;a<n.length;a++)i(n[a]);return i}({1:[function(t,e,A){(function(t){!function(r){function n(t){throw RangeError(I[t])}function i(t,e){for(var A=t.length;A--;)t[A]=e(t[A]);return t}function o(t,e){return i(t.split(H),e).join(\".\")}function a(t){for(var e,A,r=[],n=0,i=t.length;n<i;)55296<=(e=t.charCodeAt(n++))&&e<=56319&&n<i?56320==(64512&(A=t.charCodeAt(n++)))?r.push(((1023&e)<<10)+(1023&A)+65536):(r.push(e),n--):r.push(e);return r}function s(t){return i(t,function(t){var e=\"\";return 65535<t&&(e+=T((t-=65536)>>>10&1023|55296),t=56320|1023&t),e+=T(t)}).join(\"\")}function c(t,e){return t+22+75*(t<26)-((0!=e)<<5)}function l(t,e,A){var r=0;for(t=A?_(t/C):t>>1,t+=_(t/e);S*v>>1<t;r+=m)t=_(t/S);return _(r+(S+1)*t/(t+Q))}function u(t){var e,A,r,i,o,a,c,u,h,d,f,p=[],g=t.length,B=0,Q=b,C=U;for((A=t.lastIndexOf(F))<0&&(A=0),r=0;r<A;++r)128<=t.charCodeAt(r)&&n(\"not-basic\"),p.push(t.charCodeAt(r));for(i=0<A?A+1:0;i<g;){for(o=B,a=1,c=m;g<=i&&n(\"invalid-input\"),f=t.charCodeAt(i++),(m<=(u=f-48<10?f-22:f-65<26?f-65:f-97<26?f-97:m)||u>_((w-B)/a))&&n(\"overflow\"),B+=u*a,!(u<(h=c<=C?y:C+v<=c?v:c-C));c+=m)a>_(w/(d=m-h))&&n(\"overflow\"),a*=d;C=l(B-o,e=p.length+1,0==o),_(B/e)>w-Q&&n(\"overflow\"),Q+=_(B/e),B%=e,p.splice(B++,0,Q)}return s(p)}function h(t){var e,A,r,i,o,s,u,h,d,f,p,g,B,Q,C,E=[];for(g=(t=a(t)).length,e=b,o=U,s=A=0;s<g;++s)(p=t[s])<128&&E.push(T(p));for(r=i=E.length,i&&E.push(F);r<g;){for(u=w,s=0;s<g;++s)e<=(p=t[s])&&p<u&&(u=p);for(u-e>_((w-A)/(B=r+1))&&n(\"overflow\"),A+=(u-e)*B,e=u,s=0;s<g;++s)if((p=t[s])<e&&++A>w&&n(\"overflow\"),p==e){for(h=A,d=m;!(h<(f=d<=o?y:o+v<=d?v:d-o));d+=m)C=h-f,Q=m-f,E.push(T(c(f+C%Q,0))),h=_(C/Q);E.push(T(c(h,0))),o=l(A,B,r==i),A=0,++r}++A,++e}return E.join(\"\")}var d=\"object\"==typeof A&&A,f=\"object\"==typeof e&&e&&e.exports==d&&e,p=\"object\"==typeof t&&t;p.global!==p&&p.window!==p||(r=p);var g,B,w=2147483647,m=36,y=1,v=26,Q=38,C=700,U=72,b=128,F=\"-\",E=/^xn--/,x=/[^ -~]/,H=/\\x2E|\\u3002|\\uFF0E|\\uFF61/g,I={overflow:\"Overflow: input needs wider integers to process\",\"not-basic\":\"Illegal input >= 0x80 (not a basic code point)\",\"invalid-input\":\"Invalid input\"},S=m-y,_=Math.floor,T=String.fromCharCode;if(g={version:\"1.2.4\",ucs2:{decode:a,encode:s},decode:u,encode:h,toASCII:function(t){return o(t,function(t){return x.test(t)?\"xn--\"+h(t):t})},toUnicode:function(t){return o(t,function(t){return E.test(t)?u(t.slice(4).toLowerCase()):t})}},d&&!d.nodeType)if(f)f.exports=g;else for(B in g)g.hasOwnProperty(B)&&(d[B]=g[B]);else r.punycode=g}(this)}).call(this,void 0!==r?r:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{}],2:[function(t,e,A){function r(t,e){for(var A=3===t.nodeType?document.createTextNode(t.nodeValue):t.cloneNode(!1),i=t.firstChild;i;)!0!==e&&1===i.nodeType&&\"SCRIPT\"===i.nodeName||A.appendChild(r(i,e)),i=i.nextSibling;return 1===t.nodeType&&(A._scrollTop=t.scrollTop,A._scrollLeft=t.scrollLeft,\"CANVAS\"===t.nodeName?function(t,e){try{e&&(e.width=t.width,e.height=t.height,e.getContext(\"2d\").putImageData(t.getContext(\"2d\").getImageData(0,0,t.width,t.height),0,0))}catch(e){n(\"Unable to copy canvas content from\",t,e)}}(t,A):\"TEXTAREA\"!==t.nodeName&&\"SELECT\"!==t.nodeName||(A.value=t.value)),A}var n=t(\"./log\");e.exports=function(t,e,A,n,i,o,a){var s=r(t.documentElement,i.javascriptEnabled),c=e.createElement(\"iframe\");return c.className=\"html2canvas-container\",c.style.visibility=\"hidden\",c.style.position=\"fixed\",c.style.left=\"-10000px\",c.style.top=\"0px\",c.style.border=\"0\",c.width=A,c.height=n,c.scrolling=\"no\",e.body.appendChild(c),new Promise(function(e){var A,r,n,l=c.contentWindow.document;c.contentWindow.onload=c.onload=function(){var t=setInterval(function(){0<l.body.childNodes.length&&(function t(e){if(1===e.nodeType){e.scrollTop=e._scrollTop,e.scrollLeft=e._scrollLeft;for(var A=e.firstChild;A;)t(A),A=A.nextSibling}}(l.documentElement),clearInterval(t),\"view\"===i.type&&(c.contentWindow.scrollTo(o,a),!/(iPad|iPhone|iPod)/g.test(navigator.userAgent)||c.contentWindow.scrollY===a&&c.contentWindow.scrollX===o||(l.documentElement.style.top=-a+\"px\",l.documentElement.style.left=-o+\"px\",l.documentElement.style.position=\"absolute\")),e(c))},50)},l.open(),l.write(\"<!DOCTYPE html><html></html>\"),r=o,n=a,!(A=t).defaultView||r===A.defaultView.pageXOffset&&n===A.defaultView.pageYOffset||A.defaultView.scrollTo(r,n),l.replaceChild(l.adoptNode(s),l.documentElement),l.close()})}},{\"./log\":13}],3:[function(t,e,A){function r(t){this.r=0,this.g=0,this.b=0,this.a=null,this.fromArray(t)||this.namedColor(t)||this.rgb(t)||this.rgba(t)||this.hex6(t)||this.hex3(t)}r.prototype.darken=function(t){var e=1-t;return new r([Math.round(this.r*e),Math.round(this.g*e),Math.round(this.b*e),this.a])},r.prototype.isTransparent=function(){return 0===this.a},r.prototype.isBlack=function(){return 0===this.r&&0===this.g&&0===this.b},r.prototype.fromArray=function(t){return Array.isArray(t)&&(this.r=Math.min(t[0],255),this.g=Math.min(t[1],255),this.b=Math.min(t[2],255),3<t.length&&(this.a=t[3])),Array.isArray(t)};var n=/^#([a-f0-9]{3})$/i;r.prototype.hex3=function(t){var e;return null!==(e=t.match(n))&&(this.r=parseInt(e[1][0]+e[1][0],16),this.g=parseInt(e[1][1]+e[1][1],16),this.b=parseInt(e[1][2]+e[1][2],16)),null!==e};var i=/^#([a-f0-9]{6})$/i;r.prototype.hex6=function(t){var e=null;return null!==(e=t.match(i))&&(this.r=parseInt(e[1].substring(0,2),16),this.g=parseInt(e[1].substring(2,4),16),this.b=parseInt(e[1].substring(4,6),16)),null!==e};var o=/^rgb\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*\\)$/;r.prototype.rgb=function(t){var e;return null!==(e=t.match(o))&&(this.r=Number(e[1]),this.g=Number(e[2]),this.b=Number(e[3])),null!==e};var a=/^rgba\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d?\\.?\\d+)\\s*\\)$/;r.prototype.rgba=function(t){var e;return null!==(e=t.match(a))&&(this.r=Number(e[1]),this.g=Number(e[2]),this.b=Number(e[3]),this.a=Number(e[4])),null!==e},r.prototype.toString=function(){return null!==this.a&&1!==this.a?\"rgba(\"+[this.r,this.g,this.b,this.a].join(\",\")+\")\":\"rgb(\"+[this.r,this.g,this.b].join(\",\")+\")\"},r.prototype.namedColor=function(t){t=t.toLowerCase();var e=s[t];if(e)this.r=e[0],this.g=e[1],this.b=e[2];else if(\"transparent\"===t)return this.r=this.g=this.b=this.a=0,!0;return!!e},r.prototype.isColor=!0;var s={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]};e.exports=r},{}],4:[function(t,e,A){function r(t,e){var A,r,i=B++;if((e=e||{}).logging&&(u.options.logging=!0,u.options.start=Date.now()),e.async=void 0===e.async||e.async,e.allowTaint=void 0!==e.allowTaint&&e.allowTaint,e.removeContainer=void 0===e.removeContainer||e.removeContainer,e.javascriptEnabled=void 0!==e.javascriptEnabled&&e.javascriptEnabled,e.imageTimeout=void 0===e.imageTimeout?1e4:e.imageTimeout,e.renderer=\"function\"==typeof e.renderer?e.renderer:a,e.strict=!!e.strict,\"string\"==typeof t){if(\"string\"!=typeof e.proxy)return Promise.reject(\"Proxy must be used when rendering url\");var o=null!=e.width?e.width:window.innerWidth,s=null!=e.height?e.height:window.innerHeight;return f((A=t,r=document.createElement(\"a\"),r.href=A,r.href=r.href,r),e.proxy,document,o,s,e).then(function(t){return n(t.contentWindow.document.documentElement,t,e,o,s)})}var c,l,h,p,w,m=(void 0===t?[document.documentElement]:t.length?t:[t])[0];return m.setAttribute(g+i,i),(c=m.ownerDocument,l=e,h=m.ownerDocument.defaultView.innerWidth,p=m.ownerDocument.defaultView.innerHeight,w=i,d(c,c,h,p,l,c.defaultView.pageXOffset,c.defaultView.pageYOffset).then(function(t){u(\"Document cloned\");var e=g+w,A=\"[\"+e+\"='\"+w+\"']\";c.querySelector(A).removeAttribute(e);var r=t.contentWindow,i=r.document.querySelector(A);return(\"function\"==typeof l.onclone?Promise.resolve(l.onclone(r.document)):Promise.resolve(!0)).then(function(){return n(i,t,l,h,p)})})).then(function(t){return\"function\"==typeof e.onrendered&&(u(\"options.onrendered is deprecated, html2canvas returns a Promise containing the canvas\"),e.onrendered(t)),t})}function n(t,e,A,r,n){var a,l,h=e.contentWindow,d=new o(h.document),f=new s(A,d),g=p(t),B=\"view\"===A.type?r:(a=h.document,Math.max(Math.max(a.body.scrollWidth,a.documentElement.scrollWidth),Math.max(a.body.offsetWidth,a.documentElement.offsetWidth),Math.max(a.body.clientWidth,a.documentElement.clientWidth))),w=\"view\"===A.type?n:(l=h.document,Math.max(Math.max(l.body.scrollHeight,l.documentElement.scrollHeight),Math.max(l.body.offsetHeight,l.documentElement.offsetHeight),Math.max(l.body.clientHeight,l.documentElement.clientHeight))),m=new A.renderer(B,w,f,A,document);return new c(t,m,d,f,A).ready.then(function(){var r,n;return u(\"Finished rendering\"),r=\"view\"===A.type?i(m.canvas,{width:m.canvas.width,height:m.canvas.height,top:0,left:0,x:0,y:0}):t===h.document.body||t===h.document.documentElement||null!=A.canvas?m.canvas:i(m.canvas,{width:null!=A.width?A.width:g.width,height:null!=A.height?A.height:g.height,top:g.top,left:g.left,x:0,y:0}),n=e,A.removeContainer&&(n.parentNode.removeChild(n),u(\"Cleaned up container\")),r})}function i(t,e){var A=document.createElement(\"canvas\"),r=Math.min(t.width-1,Math.max(0,e.left)),n=Math.min(t.width,Math.max(1,e.left+e.width)),i=Math.min(t.height-1,Math.max(0,e.top)),o=Math.min(t.height,Math.max(1,e.top+e.height));A.width=e.width,A.height=e.height;var a=n-r,s=o-i;return u(\"Cropping canvas at:\",\"left:\",e.left,\"top:\",e.top,\"width:\",a,\"height:\",s),u(\"Resulting crop with width\",e.width,\"and height\",e.height,\"with x\",r,\"and y\",i),A.getContext(\"2d\").drawImage(t,r,i,a,s,e.x,e.y,a,s),A}var o=t(\"./support\"),a=t(\"./renderers/canvas\"),s=t(\"./imageloader\"),c=t(\"./nodeparser\"),l=t(\"./nodecontainer\"),u=t(\"./log\"),h=t(\"./utils\"),d=t(\"./clone\"),f=t(\"./proxy\").loadUrlDocument,p=h.getBounds,g=\"data-html2canvas-node\",B=0;r.CanvasRenderer=a,r.NodeContainer=l,r.log=u,r.utils=h;var w=\"undefined\"==typeof document||\"function\"!=typeof Object.create||\"function\"!=typeof document.createElement(\"canvas\").getContext?function(){return Promise.reject(\"No canvas support\")}:r;e.exports=w},{\"./clone\":2,\"./imageloader\":11,\"./log\":13,\"./nodecontainer\":14,\"./nodeparser\":15,\"./proxy\":16,\"./renderers/canvas\":20,\"./support\":22,\"./utils\":26}],5:[function(t,e,A){var r=t(\"./log\"),n=t(\"./utils\").smallImage;e.exports=function t(e){if(this.src=e,r(\"DummyImageContainer for\",e),!this.promise||!this.image){r(\"Initiating DummyImageContainer\"),t.prototype.image=new Image;var A=this.image;t.prototype.promise=new Promise(function(t,e){A.onload=t,A.onerror=e,A.src=n(),!0===A.complete&&t(A)})}}},{\"./log\":13,\"./utils\":26}],6:[function(t,e,A){var r=t(\"./utils\").smallImage;e.exports=function(t,e){var A,n,i=document.createElement(\"div\"),o=document.createElement(\"img\"),a=document.createElement(\"span\"),s=\"Hidden Text\";i.style.visibility=\"hidden\",i.style.fontFamily=t,i.style.fontSize=e,i.style.margin=0,i.style.padding=0,document.body.appendChild(i),o.src=r(),o.width=1,o.height=1,o.style.margin=0,o.style.padding=0,o.style.verticalAlign=\"baseline\",a.style.fontFamily=t,a.style.fontSize=e,a.style.margin=0,a.style.padding=0,a.appendChild(document.createTextNode(s)),i.appendChild(a),i.appendChild(o),A=o.offsetTop-a.offsetTop+1,i.removeChild(a),i.appendChild(document.createTextNode(s)),i.style.lineHeight=\"normal\",o.style.verticalAlign=\"super\",n=o.offsetTop-i.offsetTop+1,document.body.removeChild(i),this.baseline=A,this.lineWidth=1,this.middle=n}},{\"./utils\":26}],7:[function(t,e,A){function r(){this.data={}}var n=t(\"./font\");r.prototype.getMetrics=function(t,e){return void 0===this.data[t+\"-\"+e]&&(this.data[t+\"-\"+e]=new n(t,e)),this.data[t+\"-\"+e]},e.exports=r},{\"./font\":6}],8:[function(t,e,A){function r(e,A,r){this.image=null,this.src=e;var i=this,o=n(e);this.promise=(A?new Promise(function(t){\"about:blank\"===e.contentWindow.document.URL||null==e.contentWindow.document.documentElement?e.contentWindow.onload=e.onload=function(){t(e)}:t(e)}):this.proxyLoad(r.proxy,o,r)).then(function(e){return t(\"./core\")(e.contentWindow.document.documentElement,{type:\"view\",width:e.width,height:e.height,proxy:r.proxy,javascriptEnabled:r.javascriptEnabled,removeContainer:r.removeContainer,allowTaint:r.allowTaint,imageTimeout:r.imageTimeout/2})}).then(function(t){return i.image=t})}var n=t(\"./utils\").getBounds,i=t(\"./proxy\").loadUrlDocument;r.prototype.proxyLoad=function(t,e,A){var r=this.src;return i(r.src,t,r.ownerDocument,e.width,e.height,A)},e.exports=r},{\"./core\":4,\"./proxy\":16,\"./utils\":26}],9:[function(t,e,A){function r(t){this.src=t.value,this.colorStops=[],this.type=null,this.x0=.5,this.y0=.5,this.x1=.5,this.y1=.5,this.promise=Promise.resolve(!0)}r.TYPES={LINEAR:1,RADIAL:2},r.REGEXP_COLORSTOP=/^\\s*(rgba?\\(\\s*\\d{1,3},\\s*\\d{1,3},\\s*\\d{1,3}(?:,\\s*[0-9\\.]+)?\\s*\\)|[a-z]{3,20}|#[a-f0-9]{3,6})(?:\\s+(\\d{1,3}(?:\\.\\d+)?)(%|px)?)?(?:\\s|$)/i,e.exports=r},{}],10:[function(t,e,A){e.exports=function(t,e){this.src=t,this.image=new Image;var A=this;this.tainted=null,this.promise=new Promise(function(r,n){A.image.onload=r,A.image.onerror=n,e&&(A.image.crossOrigin=\"anonymous\"),A.image.src=t,!0===A.image.complete&&r(A.image)})}},{}],11:[function(t,e,A){function r(t,e){this.link=null,this.options=t,this.support=e,this.origin=this.getOrigin(window.location.href)}var n=t(\"./log\"),i=t(\"./imagecontainer\"),o=t(\"./dummyimagecontainer\"),a=t(\"./proxyimagecontainer\"),s=t(\"./framecontainer\"),c=t(\"./svgcontainer\"),l=t(\"./svgnodecontainer\"),u=t(\"./lineargradientcontainer\"),h=t(\"./webkitgradientcontainer\"),d=t(\"./utils\").bind;r.prototype.findImages=function(t){var e=[];return t.reduce(function(t,e){switch(e.node.nodeName){case\"IMG\":return t.concat([{args:[e.node.src],method:\"url\"}]);case\"svg\":case\"IFRAME\":return t.concat([{args:[e.node],method:e.node.nodeName}])}return t},[]).forEach(this.addImage(e,this.loadImage),this),e},r.prototype.findBackgroundImage=function(t,e){return e.parseBackgroundImages().filter(this.hasImageBackground).forEach(this.addImage(t,this.loadImage),this),t},r.prototype.addImage=function(t,e){return function(A){A.args.forEach(function(r){this.imageExists(t,r)||(t.splice(0,0,e.call(this,A)),n(\"Added image #\"+t.length,\"string\"==typeof r?r.substring(0,100):r))},this)}},r.prototype.hasImageBackground=function(t){return\"none\"!==t.method},r.prototype.loadImage=function(t){if(\"url\"===t.method){var e=t.args[0];return!this.isSVG(e)||this.support.svg||this.options.allowTaint?e.match(/data:image\\/.*;base64,/i)?new i(e.replace(/url\\(['\"]{0,}|['\"]{0,}\\)$/gi,\"\"),!1):this.isSameOrigin(e)||!0===this.options.allowTaint||this.isSVG(e)?new i(e,!1):this.support.cors&&!this.options.allowTaint&&this.options.useCORS?new i(e,!0):this.options.proxy?new a(e,this.options.proxy):new o(e):new c(e)}return\"linear-gradient\"===t.method?new u(t):\"gradient\"===t.method?new h(t):\"svg\"===t.method?new l(t.args[0],this.support.svg):\"IFRAME\"===t.method?new s(t.args[0],this.isSameOrigin(t.args[0].src),this.options):new o(t)},r.prototype.isSVG=function(t){return\"svg\"===t.substring(t.length-3).toLowerCase()||c.prototype.isInline(t)},r.prototype.imageExists=function(t,e){return t.some(function(t){return t.src===e})},r.prototype.isSameOrigin=function(t){return this.getOrigin(t)===this.origin},r.prototype.getOrigin=function(t){var e=this.link||(this.link=document.createElement(\"a\"));return e.href=t,e.href=e.href,e.protocol+e.hostname+e.port},r.prototype.getPromise=function(t){return this.timeout(t,this.options.imageTimeout).catch(function(){return new o(t.src).promise.then(function(e){t.image=e})})},r.prototype.get=function(t){var e=null;return this.images.some(function(A){return(e=A).src===t})?e:null},r.prototype.fetch=function(t){return this.images=t.reduce(d(this.findBackgroundImage,this),this.findImages(t)),this.images.forEach(function(t,e){t.promise.then(function(){n(\"Succesfully loaded image #\"+(e+1),t)},function(A){n(\"Failed loading image #\"+(e+1),t,A)})}),this.ready=Promise.all(this.images.map(this.getPromise,this)),n(\"Finished searching images\"),this},r.prototype.timeout=function(t,e){var A,r=Promise.race([t.promise,new Promise(function(r,i){A=setTimeout(function(){n(\"Timed out loading image\",t),i(t)},e)})]).then(function(t){return clearTimeout(A),t});return r.catch(function(){clearTimeout(A)}),r},e.exports=r},{\"./dummyimagecontainer\":5,\"./framecontainer\":8,\"./imagecontainer\":10,\"./lineargradientcontainer\":12,\"./log\":13,\"./proxyimagecontainer\":17,\"./svgcontainer\":23,\"./svgnodecontainer\":24,\"./utils\":26,\"./webkitgradientcontainer\":27}],12:[function(t,e,A){function r(t){n.apply(this,arguments),this.type=n.TYPES.LINEAR;var e=r.REGEXP_DIRECTION.test(t.args[0])||!n.REGEXP_COLORSTOP.test(t.args[0]);e?t.args[0].split(/\\s+/).reverse().forEach(function(t,e){switch(t){case\"left\":this.x0=0,this.x1=1;break;case\"top\":this.y0=0,this.y1=1;break;case\"right\":this.x0=1,this.x1=0;break;case\"bottom\":this.y0=1,this.y1=0;break;case\"to\":var A=this.y0,r=this.x0;this.y0=this.y1,this.x0=this.x1,this.x1=r,this.y1=A;break;case\"center\":break;default:var n=.01*parseFloat(t,10);if(isNaN(n))break;0===e?(this.y0=n,this.y1=1-this.y0):(this.x0=n,this.x1=1-this.x0)}},this):(this.y0=0,this.y1=1),this.colorStops=t.args.slice(e?1:0).map(function(t){var e=t.match(n.REGEXP_COLORSTOP),A=+e[2],r=0===A?\"%\":e[3];return{color:new i(e[1]),stop:\"%\"===r?A/100:null}}),null===this.colorStops[0].stop&&(this.colorStops[0].stop=0),null===this.colorStops[this.colorStops.length-1].stop&&(this.colorStops[this.colorStops.length-1].stop=1),this.colorStops.forEach(function(t,e){null===t.stop&&this.colorStops.slice(e).some(function(A,r){return null!==A.stop&&(t.stop=(A.stop-this.colorStops[e-1].stop)/(r+1)+this.colorStops[e-1].stop,!0)},this)},this)}var n=t(\"./gradientcontainer\"),i=t(\"./color\");r.prototype=Object.create(n.prototype),r.REGEXP_DIRECTION=/^\\s*(?:to|left|right|top|bottom|center|\\d{1,3}(?:\\.\\d+)?%?)(?:\\s|$)/i,e.exports=r},{\"./color\":3,\"./gradientcontainer\":9}],13:[function(t,e,A){var r=function(){r.options.logging&&window.console&&window.console.log&&Function.prototype.bind.call(window.console.log,window.console).apply(window.console,[Date.now()-r.options.start+\"ms\",\"html2canvas:\"].concat([].slice.call(arguments,0)))};r.options={logging:!1},e.exports=r},{}],14:[function(t,e,A){function r(t,e){this.node=t,this.parent=e,this.stack=null,this.bounds=null,this.borders=null,this.clip=[],this.backgroundClip=[],this.offsetBounds=null,this.visible=null,this.computedStyles=null,this.colors={},this.styles={},this.backgroundImages=null,this.transformData=null,this.transformMatrix=null,this.isPseudoElement=!1,this.opacity=null}function n(t){return-1!==t.toString().indexOf(\"%\")}function i(t){return t.replace(\"px\",\"\")}function o(t){return parseFloat(t)}var a=t(\"./color\"),s=t(\"./utils\"),c=s.getBounds,l=s.parseBackgrounds,u=s.offsetBounds;r.prototype.cloneTo=function(t){t.visible=this.visible,t.borders=this.borders,t.bounds=this.bounds,t.clip=this.clip,t.backgroundClip=this.backgroundClip,t.computedStyles=this.computedStyles,t.styles=this.styles,t.backgroundImages=this.backgroundImages,t.opacity=this.opacity},r.prototype.getOpacity=function(){return null===this.opacity?this.opacity=this.cssFloat(\"opacity\"):this.opacity},r.prototype.assignStack=function(t){(this.stack=t).children.push(this)},r.prototype.isElementVisible=function(){return this.node.nodeType===Node.TEXT_NODE?this.parent.visible:\"none\"!==this.css(\"display\")&&\"hidden\"!==this.css(\"visibility\")&&!this.node.hasAttribute(\"data-html2canvas-ignore\")&&(\"INPUT\"!==this.node.nodeName||\"hidden\"!==this.node.getAttribute(\"type\"))},r.prototype.css=function(t){return this.computedStyles||(this.computedStyles=this.isPseudoElement?this.parent.computedStyle(this.before?\":before\":\":after\"):this.computedStyle(null)),this.styles[t]||(this.styles[t]=this.computedStyles[t])},r.prototype.prefixedCss=function(t){var e=this.css(t);return void 0===e&&[\"webkit\",\"moz\",\"ms\",\"o\"].some(function(A){return void 0!==(e=this.css(A+t.substr(0,1).toUpperCase()+t.substr(1)))},this),void 0===e?null:e},r.prototype.computedStyle=function(t){return this.node.ownerDocument.defaultView.getComputedStyle(this.node,t)},r.prototype.cssInt=function(t){var e=parseInt(this.css(t),10);return isNaN(e)?0:e},r.prototype.color=function(t){return this.colors[t]||(this.colors[t]=new a(this.css(t)))},r.prototype.cssFloat=function(t){var e=parseFloat(this.css(t));return isNaN(e)?0:e},r.prototype.fontWeight=function(){var t=this.css(\"fontWeight\");switch(parseInt(t,10)){case 401:t=\"bold\";break;case 400:t=\"normal\"}return t},r.prototype.parseClip=function(){var t=this.css(\"clip\").match(this.CLIP);return t?{top:parseInt(t[1],10),right:parseInt(t[2],10),bottom:parseInt(t[3],10),left:parseInt(t[4],10)}:null},r.prototype.parseBackgroundImages=function(){return this.backgroundImages||(this.backgroundImages=l(this.css(\"backgroundImage\")))},r.prototype.cssList=function(t,e){var A=(this.css(t)||\"\").split(\",\");return 1===(A=(A=A[e||0]||A[0]||\"auto\").trim().split(\" \")).length&&(A=[A[0],n(A[0])?\"auto\":A[0]]),A},r.prototype.parseBackgroundSize=function(t,e,A){var r,i,o=this.cssList(\"backgroundSize\",A);if(n(o[0]))r=t.width*parseFloat(o[0])/100;else{if(/contain|cover/.test(o[0])){var a=t.width/t.height,s=e.width/e.height;return a<s^\"contain\"===o[0]?{width:t.height*s,height:t.height}:{width:t.width,height:t.width/s}}r=parseInt(o[0],10)}return i=\"auto\"===o[0]&&\"auto\"===o[1]?e.height:\"auto\"===o[1]?r/e.width*e.height:n(o[1])?t.height*parseFloat(o[1])/100:parseInt(o[1],10),\"auto\"===o[0]&&(r=i/e.height*e.width),{width:r,height:i}},r.prototype.parseBackgroundPosition=function(t,e,A,r){var i,o,a=this.cssList(\"backgroundPosition\",A);return i=n(a[0])?(t.width-(r||e).width)*(parseFloat(a[0])/100):parseInt(a[0],10),o=\"auto\"===a[1]?i/e.width*e.height:n(a[1])?(t.height-(r||e).height)*parseFloat(a[1])/100:parseInt(a[1],10),\"auto\"===a[0]&&(i=o/e.height*e.width),{left:i,top:o}},r.prototype.parseBackgroundRepeat=function(t){return this.cssList(\"backgroundRepeat\",t)[0]},r.prototype.parseTextShadows=function(){var t=this.css(\"textShadow\"),e=[];if(t&&\"none\"!==t)for(var A=t.match(this.TEXT_SHADOW_PROPERTY),r=0;A&&r<A.length;r++){var n=A[r].match(this.TEXT_SHADOW_VALUES);e.push({color:new a(n[0]),offsetX:n[1]?parseFloat(n[1].replace(\"px\",\"\")):0,offsetY:n[2]?parseFloat(n[2].replace(\"px\",\"\")):0,blur:n[3]?n[3].replace(\"px\",\"\"):0})}return e},r.prototype.parseTransform=function(){if(!this.transformData)if(this.hasTransform()){var t=this.parseBounds(),e=this.prefixedCss(\"transformOrigin\").split(\" \").map(i).map(o);e[0]+=t.left,e[1]+=t.top,this.transformData={origin:e,matrix:this.parseTransformMatrix()}}else this.transformData={origin:[0,0],matrix:[1,0,0,1,0,0]};return this.transformData},r.prototype.parseTransformMatrix=function(){if(!this.transformMatrix){var t=this.prefixedCss(\"transform\"),e=t?function(t){if(t&&\"matrix\"===t[1])return t[2].split(\",\").map(function(t){return parseFloat(t.trim())});if(t&&\"matrix3d\"===t[1]){var e=t[2].split(\",\").map(function(t){return parseFloat(t.trim())});return[e[0],e[1],e[4],e[5],e[12],e[13]]}}(t.match(this.MATRIX_PROPERTY)):null;this.transformMatrix=e||[1,0,0,1,0,0]}return this.transformMatrix},r.prototype.parseBounds=function(){return this.bounds||(this.bounds=this.hasTransform()?u(this.node):c(this.node))},r.prototype.hasTransform=function(){return\"1,0,0,1,0,0\"!==this.parseTransformMatrix().join(\",\")||this.parent&&this.parent.hasTransform()},r.prototype.getValue=function(){var t,e,A=this.node.value||\"\";return\"SELECT\"===this.node.tagName?(t=this.node,A=(e=t.options[t.selectedIndex||0])&&e.text||\"\"):\"password\"===this.node.type&&(A=Array(A.length+1).join(\"â€¢\")),0===A.length?this.node.placeholder||\"\":A},r.prototype.MATRIX_PROPERTY=/(matrix|matrix3d)\\((.+)\\)/,r.prototype.TEXT_SHADOW_PROPERTY=/((rgba|rgb)\\([^\\)]+\\)(\\s-?\\d+px){0,})/g,r.prototype.TEXT_SHADOW_VALUES=/(-?\\d+px)|(#.+)|(rgb\\(.+\\))|(rgba\\(.+\\))/g,r.prototype.CLIP=/^rect\\((\\d+)px,? (\\d+)px,? (\\d+)px,? (\\d+)px\\)$/,e.exports=r},{\"./color\":3,\"./utils\":26}],15:[function(t,e,A){function r(t,e,A,r,n){H(\"Starting NodeParser\"),this.renderer=e,this.options=n,this.range=null,this.support=A,this.renderQueue=[],this.stack=new O(!0,1,t.ownerDocument,null);var i=new S(t,null);if(n.background&&e.rectangle(0,0,e.width,e.height,new k(n.background)),t===t.ownerDocument.documentElement){var o=new S(i.color(\"backgroundColor\").isTransparent()?t.ownerDocument.body:t.ownerDocument.documentElement,null);e.rectangle(0,0,e.width,e.height,o.color(\"backgroundColor\"))}i.visibile=i.isElementVisible(),this.createPseudoHideStyles(t.ownerDocument),this.disableAnimations(t.ownerDocument),this.nodes=x([i].concat(this.getChildren(i)).filter(function(t){return t.visible=t.isElementVisible()}).map(this.getPseudoElements,this)),this.fontMetrics=new N,H(\"Fetched nodes, total:\",this.nodes.length),H(\"Calculate overflow clips\"),this.calculateOverflowClips(),H(\"Start fetching images\"),this.images=r.fetch(this.nodes.filter(Q)),this.ready=this.images.ready.then(D(function(){return H(\"Images loaded, starting parsing\"),H(\"Creating stacking contexts\"),this.createStackingContexts(),H(\"Sorting stacking contexts\"),this.sortStackingContexts(this.stack),this.parse(this.stack),H(\"Render queue created with \"+this.renderQueue.length+\" items\"),new Promise(D(function(t){n.async?\"function\"==typeof n.async?n.async.call(this,this.renderQueue,t):0<this.renderQueue.length?(this.renderIndex=0,this.asyncRenderer(this.renderQueue,t)):t():(this.renderQueue.forEach(this.paint,this),t())},this))},this))}function n(t){return t.parent&&t.parent.clip.length}function i(){}function o(t,e,A,r){return t.map(function(n,i){if(0<n.width){var o=e.left,a=e.top,s=e.width,c=e.height-t[2].width;switch(i){case 0:c=t[0].width,n.args=l({c1:[o,a],c2:[o+s,a],c3:[o+s-t[1].width,a+c],c4:[o+t[3].width,a+c]},r[0],r[1],A.topLeftOuter,A.topLeftInner,A.topRightOuter,A.topRightInner);break;case 1:o=e.left+e.width-t[1].width,s=t[1].width,n.args=l({c1:[o+s,a],c2:[o+s,a+c+t[2].width],c3:[o,a+c],c4:[o,a+t[0].width]},r[1],r[2],A.topRightOuter,A.topRightInner,A.bottomRightOuter,A.bottomRightInner);break;case 2:a=a+e.height-t[2].width,c=t[2].width,n.args=l({c1:[o+s,a+c],c2:[o,a+c],c3:[o+t[3].width,a],c4:[o+s-t[3].width,a]},r[2],r[3],A.bottomRightOuter,A.bottomRightInner,A.bottomLeftOuter,A.bottomLeftInner);break;case 3:s=t[3].width,n.args=l({c1:[o,a+c+t[2].width],c2:[o,a],c3:[o+s,a+t[0].width],c4:[o+s,a+c]},r[3],r[0],A.bottomLeftOuter,A.bottomLeftInner,A.topLeftOuter,A.topLeftInner)}}return n})}function a(t,e,A,r){var n=(Math.sqrt(2)-1)/3*4,i=A*n,o=r*n,a=t+A,s=e+r;return{topLeft:c({x:t,y:s},{x:t,y:s-o},{x:a-i,y:e},{x:a,y:e}),topRight:c({x:t,y:e},{x:t+i,y:e},{x:a,y:s-o},{x:a,y:s}),bottomRight:c({x:a,y:e},{x:a,y:e+o},{x:t+i,y:s},{x:t,y:s}),bottomLeft:c({x:a,y:s},{x:a-i,y:s},{x:t,y:e+o},{x:t,y:e})}}function s(t,e,A){var r=t.left,n=t.top,i=t.width,o=t.height,s=e[0][0]<i/2?e[0][0]:i/2,c=e[0][1]<o/2?e[0][1]:o/2,l=e[1][0]<i/2?e[1][0]:i/2,u=e[1][1]<o/2?e[1][1]:o/2,h=e[2][0]<i/2?e[2][0]:i/2,d=e[2][1]<o/2?e[2][1]:o/2,f=e[3][0]<i/2?e[3][0]:i/2,p=e[3][1]<o/2?e[3][1]:o/2,g=i-l,B=o-d,w=i-h,m=o-p;return{topLeftOuter:a(r,n,s,c).topLeft.subdivide(.5),topLeftInner:a(r+A[3].width,n+A[0].width,Math.max(0,s-A[3].width),Math.max(0,c-A[0].width)).topLeft.subdivide(.5),topRightOuter:a(r+g,n,l,u).topRight.subdivide(.5),topRightInner:a(r+Math.min(g,i+A[3].width),n+A[0].width,g>i+A[3].width?0:l-A[3].width,u-A[0].width).topRight.subdivide(.5),bottomRightOuter:a(r+w,n+B,h,d).bottomRight.subdivide(.5),bottomRightInner:a(r+Math.min(w,i-A[3].width),n+Math.min(B,o+A[0].width),Math.max(0,h-A[1].width),d-A[2].width).bottomRight.subdivide(.5),bottomLeftOuter:a(r,n+m,f,p).bottomLeft.subdivide(.5),bottomLeftInner:a(r+A[3].width,n+m,Math.max(0,f-A[3].width),p-A[2].width).bottomLeft.subdivide(.5)}}function c(t,e,A,r){var n=function(t,e,A){return{x:t.x+(e.x-t.x)*A,y:t.y+(e.y-t.y)*A}};return{start:t,startControl:e,endControl:A,end:r,subdivide:function(i){var o=n(t,e,i),a=n(e,A,i),s=n(A,r,i),l=n(o,a,i),u=n(a,s,i),h=n(l,u,i);return[c(t,o,l,h),c(h,u,s,r)]},curveTo:function(t){t.push([\"bezierCurve\",e.x,e.y,A.x,A.y,r.x,r.y])},curveToReversed:function(r){r.push([\"bezierCurve\",A.x,A.y,e.x,e.y,t.x,t.y])}}}function l(t,e,A,r,n,i,o){var a=[];return 0<e[0]||0<e[1]?(a.push([\"line\",r[1].start.x,r[1].start.y]),r[1].curveTo(a)):a.push([\"line\",t.c1[0],t.c1[1]]),0<A[0]||0<A[1]?(a.push([\"line\",i[0].start.x,i[0].start.y]),i[0].curveTo(a),a.push([\"line\",o[0].end.x,o[0].end.y]),o[0].curveToReversed(a)):(a.push([\"line\",t.c2[0],t.c2[1]]),a.push([\"line\",t.c3[0],t.c3[1]])),0<e[0]||0<e[1]?(a.push([\"line\",n[1].end.x,n[1].end.y]),n[1].curveToReversed(a)):a.push([\"line\",t.c4[0],t.c4[1]]),a}function u(t,e,A,r,n,i,o){0<e[0]||0<e[1]?(t.push([\"line\",r[0].start.x,r[0].start.y]),r[0].curveTo(t),r[1].curveTo(t)):t.push([\"line\",i,o]),(0<A[0]||0<A[1])&&t.push([\"line\",n[0].start.x,n[0].start.y])}function h(t){return t.cssInt(\"zIndex\")<0}function d(t){return 0<t.cssInt(\"zIndex\")}function f(t){return 0===t.cssInt(\"zIndex\")}function p(t){return-1!==[\"inline\",\"inline-block\",\"inline-table\"].indexOf(t.css(\"display\"))}function g(t){return t instanceof O}function B(t){return 0<t.node.data.trim().length}function w(t){return t.nodeType===Node.TEXT_NODE||t.nodeType===Node.ELEMENT_NODE}function m(t){return\"static\"!==t.css(\"position\")}function y(t){return\"none\"!==t.css(\"float\")}function v(t){var e=this;return function(){return!t.apply(e,arguments)}}function Q(t){return t.node.nodeType===Node.ELEMENT_NODE}function C(t){return!0===t.isPseudoElement}function U(t){return t.node.nodeType===Node.TEXT_NODE}function b(t){return parseInt(t,10)}function F(t){return t.width}function E(t){return t.node.nodeType!==Node.ELEMENT_NODE||-1===[\"SCRIPT\",\"HEAD\",\"TITLE\",\"OBJECT\",\"BR\",\"OPTION\"].indexOf(t.node.nodeName)}function x(t){return[].concat.apply([],t)}var H=t(\"./log\"),I=t(\"punycode\"),S=t(\"./nodecontainer\"),_=t(\"./textcontainer\"),T=t(\"./pseudoelementcontainer\"),N=t(\"./fontmetrics\"),k=t(\"./color\"),O=t(\"./stackingcontext\"),P=t(\"./utils\"),D=P.bind,L=P.getBounds,R=P.parseBackgrounds,M=P.offsetBounds;r.prototype.calculateOverflowClips=function(){this.nodes.forEach(function(t){if(Q(t)){C(t)&&t.appendToDOM(),t.borders=this.parseBorders(t);var e=\"hidden\"===t.css(\"overflow\")?[t.borders.clip]:[],A=t.parseClip();A&&-1!==[\"absolute\",\"fixed\"].indexOf(t.css(\"position\"))&&e.push([[\"rect\",t.bounds.left+A.left,t.bounds.top+A.top,A.right-A.left,A.bottom-A.top]]),t.clip=n(t)?t.parent.clip.concat(e):e,t.backgroundClip=\"hidden\"!==t.css(\"overflow\")?t.clip.concat([t.borders.clip]):t.clip,C(t)&&t.cleanDOM()}else U(t)&&(t.clip=n(t)?t.parent.clip:[]);C(t)||(t.bounds=null)},this)},r.prototype.asyncRenderer=function(t,e,A){A=A||Date.now(),this.paint(t[this.renderIndex++]),t.length===this.renderIndex?e():A+20>Date.now()?this.asyncRenderer(t,e,A):setTimeout(D(function(){this.asyncRenderer(t,e)},this),0)},r.prototype.createPseudoHideStyles=function(t){this.createStyles(t,\".\"+T.prototype.PSEUDO_HIDE_ELEMENT_CLASS_BEFORE+':before { content: \"\" !important; display: none !important; }.'+T.prototype.PSEUDO_HIDE_ELEMENT_CLASS_AFTER+':after { content: \"\" !important; display: none !important; }')},r.prototype.disableAnimations=function(t){this.createStyles(t,\"* { -webkit-animation: none !important; -moz-animation: none !important; -o-animation: none !important; animation: none !important; -webkit-transition: none !important; -moz-transition: none !important; -o-transition: none !important; transition: none !important;}\")},r.prototype.createStyles=function(t,e){var A=t.createElement(\"style\");A.innerHTML=e,t.body.appendChild(A)},r.prototype.getPseudoElements=function(t){var e=[[t]];if(t.node.nodeType===Node.ELEMENT_NODE){var A=this.getPseudoElement(t,\":before\"),r=this.getPseudoElement(t,\":after\");A&&e.push(A),r&&e.push(r)}return x(e)},r.prototype.getPseudoElement=function(t,e){var A=t.computedStyle(e);if(!A||!A.content||\"none\"===A.content||\"-moz-alt-content\"===A.content||\"none\"===A.display)return null;for(var r,n,i=(r=A.content,(n=r.substr(0,1))===r.substr(r.length-1)&&n.match(/'|\"/)?r.substr(1,r.length-2):r),o=\"url\"===i.substr(0,3),a=document.createElement(o?\"img\":\"html2canvaspseudoelement\"),s=new T(a,t,e),c=A.length-1;0<=c;c--){var l=A.item(c).replace(/(\\-[a-z])/g,function(t){return t.toUpperCase().replace(\"-\",\"\")});a.style[l]=A[l]}if(a.className=T.prototype.PSEUDO_HIDE_ELEMENT_CLASS_BEFORE+\" \"+T.prototype.PSEUDO_HIDE_ELEMENT_CLASS_AFTER,o)return a.src=R(i)[0].args[0],[s];var u=document.createTextNode(i);return a.appendChild(u),[s,new _(u,s)]},r.prototype.getChildren=function(t){return x([].filter.call(t.node.childNodes,w).map(function(e){var A=[e.nodeType===Node.TEXT_NODE?new _(e,t):new S(e,t)].filter(E);return e.nodeType===Node.ELEMENT_NODE&&A.length&&\"TEXTAREA\"!==e.tagName?A[0].isElementVisible()?A.concat(this.getChildren(A[0])):[]:A},this))},r.prototype.newStackingContext=function(t,e){var A=new O(e,t.getOpacity(),t.node,t.parent);t.cloneTo(A),(e?A.getParentStack(this):A.parent.stack).contexts.push(A),t.stack=A},r.prototype.createStackingContexts=function(){this.nodes.forEach(function(t){var e,A;Q(t)&&(this.isRootElement(t)||t.getOpacity()<1||(A=(e=t).css(\"position\"),\"auto\"!==(-1!==[\"absolute\",\"relative\",\"fixed\"].indexOf(A)?e.css(\"zIndex\"):\"auto\"))||this.isBodyWithTransparentRoot(t)||t.hasTransform())?this.newStackingContext(t,!0):Q(t)&&(m(t)&&f(t)||-1!==[\"inline-block\",\"inline-table\"].indexOf(t.css(\"display\"))||y(t))?this.newStackingContext(t,!1):t.assignStack(t.parent.stack)},this)},r.prototype.isBodyWithTransparentRoot=function(t){return\"BODY\"===t.node.nodeName&&t.parent.color(\"backgroundColor\").isTransparent()},r.prototype.isRootElement=function(t){return null===t.parent},r.prototype.sortStackingContexts=function(t){var e;t.contexts.sort((e=t.contexts.slice(0),function(t,A){return t.cssInt(\"zIndex\")+e.indexOf(t)/e.length-(A.cssInt(\"zIndex\")+e.indexOf(A)/e.length)})),t.contexts.forEach(this.sortStackingContexts,this)},r.prototype.parseTextBounds=function(t){return function(e,A,r){if(\"none\"!==t.parent.css(\"textDecoration\").substr(0,4)||0!==e.trim().length){if(this.support.rangeBounds&&!t.parent.hasTransform()){var n=r.slice(0,A).join(\"\").length;return this.getRangeBounds(t.node,n,e.length)}if(t.node&&\"string\"==typeof t.node.data){var i=t.node.splitText(e.length),o=this.getWrapperBounds(t.node,t.parent.hasTransform());return t.node=i,o}}else this.support.rangeBounds&&!t.parent.hasTransform()||(t.node=t.node.splitText(e.length));return{}}},r.prototype.getWrapperBounds=function(t,e){var A=t.ownerDocument.createElement(\"html2canvaswrapper\"),r=t.parentNode,n=t.cloneNode(!0);A.appendChild(t.cloneNode(!0)),r.replaceChild(A,t);var i=e?M(A):L(A);return r.replaceChild(n,A),i},r.prototype.getRangeBounds=function(t,e,A){var r=this.range||(this.range=t.ownerDocument.createRange());return r.setStart(t,e),r.setEnd(t,e+A),r.getBoundingClientRect()},r.prototype.parse=function(t){var e=t.contexts.filter(h),A=t.children.filter(Q),r=A.filter(v(y)),n=r.filter(v(m)).filter(v(p)),o=A.filter(v(m)).filter(y),a=r.filter(v(m)).filter(p),s=t.contexts.concat(r.filter(m)).filter(f),c=t.children.filter(U).filter(B),l=t.contexts.filter(d);e.concat(n).concat(o).concat(a).concat(s).concat(c).concat(l).forEach(function(t){this.renderQueue.push(t),g(t)&&(this.parse(t),this.renderQueue.push(new i))},this)},r.prototype.paint=function(t){try{t instanceof i?this.renderer.ctx.restore():U(t)?(C(t.parent)&&t.parent.appendToDOM(),this.paintText(t),C(t.parent)&&t.parent.cleanDOM()):this.paintNode(t)}catch(t){if(H(t),this.options.strict)throw t}},r.prototype.paintNode=function(t){g(t)&&(this.renderer.setOpacity(t.opacity),this.renderer.ctx.save(),t.hasTransform()&&this.renderer.setTransform(t.parseTransform())),\"INPUT\"===t.node.nodeName&&\"checkbox\"===t.node.type?this.paintCheckbox(t):\"INPUT\"===t.node.nodeName&&\"radio\"===t.node.type?this.paintRadio(t):this.paintElement(t)},r.prototype.paintElement=function(t){var e=t.parseBounds();this.renderer.clip(t.backgroundClip,function(){this.renderer.renderBackground(t,e,t.borders.borders.map(F))},this),this.renderer.clip(t.clip,function(){this.renderer.renderBorders(t.borders.borders)},this),this.renderer.clip(t.backgroundClip,function(){switch(t.node.nodeName){case\"svg\":case\"IFRAME\":var A=this.images.get(t.node);A?this.renderer.renderImage(t,e,t.borders,A):H(\"Error loading <\"+t.node.nodeName+\">\",t.node);break;case\"IMG\":var r=this.images.get(t.node.src);r?this.renderer.renderImage(t,e,t.borders,r):H(\"Error loading <img>\",t.node.src);break;case\"CANVAS\":this.renderer.renderImage(t,e,t.borders,{image:t.node});break;case\"SELECT\":case\"INPUT\":case\"TEXTAREA\":this.paintFormValue(t)}},this)},r.prototype.paintCheckbox=function(t){var e=t.parseBounds(),A=Math.min(e.width,e.height),r={width:A-1,height:A-1,top:e.top,left:e.left},n=[3,3],i=[n,n,n,n],a=[1,1,1,1].map(function(t){return{color:new k(\"#A5A5A5\"),width:t}}),c=s(r,i,a);this.renderer.clip(t.backgroundClip,function(){this.renderer.rectangle(r.left+1,r.top+1,r.width-2,r.height-2,new k(\"#DEDEDE\")),this.renderer.renderBorders(o(a,r,c,i)),t.node.checked&&(this.renderer.font(new k(\"#424242\"),\"normal\",\"normal\",\"bold\",A-3+\"px\",\"arial\"),this.renderer.text(\"âœ”\",r.left+A/6,r.top+A-1))},this)},r.prototype.paintRadio=function(t){var e=t.parseBounds(),A=Math.min(e.width,e.height)-2;this.renderer.clip(t.backgroundClip,function(){this.renderer.circleStroke(e.left+1,e.top+1,A,new k(\"#DEDEDE\"),1,new k(\"#A5A5A5\")),t.node.checked&&this.renderer.circle(Math.ceil(e.left+A/4)+1,Math.ceil(e.top+A/4)+1,Math.floor(A/2),new k(\"#424242\"))},this)},r.prototype.paintFormValue=function(t){var e=t.getValue();if(0<e.length){var A=t.node.ownerDocument,r=A.createElement(\"html2canvaswrapper\");[\"lineHeight\",\"textAlign\",\"fontFamily\",\"fontWeight\",\"fontSize\",\"color\",\"paddingLeft\",\"paddingTop\",\"paddingRight\",\"paddingBottom\",\"width\",\"height\",\"borderLeftStyle\",\"borderTopStyle\",\"borderLeftWidth\",\"borderTopWidth\",\"boxSizing\",\"whiteSpace\",\"wordWrap\"].forEach(function(e){try{r.style[e]=t.css(e)}catch(e){H(\"html2canvas: Parse: Exception caught in renderFormValue: \"+e.message)}});var n=t.parseBounds();r.style.position=\"fixed\",r.style.left=n.left+\"px\",r.style.top=n.top+\"px\",r.textContent=e,A.body.appendChild(r),this.paintText(new _(r.firstChild,t)),A.body.removeChild(r)}},r.prototype.paintText=function(t){t.applyTextTransform();var e,A=I.ucs2.decode(t.node.data),r=this.options.letterRendering&&!/^(normal|none|0px)$/.test(t.parent.css(\"letterSpacing\"))||(e=t.node.data,/[^\\u0000-\\u00ff]/.test(e))?A.map(function(t){return I.ucs2.encode([t])}):function(t){for(var e,A=[],r=0,n=!1;t.length;)i=t[r],-1!==[32,13,10,9,45].indexOf(i)===n?((e=t.splice(0,r)).length&&A.push(I.ucs2.encode(e)),n=!n,r=0):r++,r>=t.length&&(e=t.splice(0,r)).length&&A.push(I.ucs2.encode(e));var i;return A}(A),n=t.parent.fontWeight(),i=t.parent.css(\"fontSize\"),o=t.parent.css(\"fontFamily\"),a=t.parent.parseTextShadows();this.renderer.font(t.parent.color(\"color\"),t.parent.css(\"fontStyle\"),t.parent.css(\"fontVariant\"),n,i,o),a.length?this.renderer.fontShadow(a[0].color,a[0].offsetX,a[0].offsetY,a[0].blur):this.renderer.clearShadow(),this.renderer.clip(t.parent.clip,function(){r.map(this.parseTextBounds(t),this).forEach(function(e,A){e&&!1===/^\\s*$/.test(r[A])&&(this.renderer.text(r[A],e.left,e.bottom),this.renderTextDecoration(t.parent,e,this.fontMetrics.getMetrics(o,i)))},this)},this)},r.prototype.renderTextDecoration=function(t,e,A){switch(t.css(\"textDecoration\").split(\" \")[0]){case\"underline\":this.renderer.rectangle(e.left,Math.round(e.top+A.baseline+A.lineWidth),e.width,1,t.color(\"color\"));break;case\"overline\":this.renderer.rectangle(e.left,Math.round(e.top),e.width,1,t.color(\"color\"));break;case\"line-through\":this.renderer.rectangle(e.left,Math.ceil(e.top+A.middle+A.lineWidth),e.width,1,t.color(\"color\"))}};var K={inset:[[\"darken\",.6],[\"darken\",.1],[\"darken\",.1],[\"darken\",.6]]};r.prototype.parseBorders=function(t){var e,A=t.parseBounds(),r=(e=t,[\"TopLeft\",\"TopRight\",\"BottomRight\",\"BottomLeft\"].map(function(t){var A=e.css(\"border\"+t+\"Radius\").split(\" \");return A.length<=1&&(A[1]=A[0]),A.map(b)})),n=[\"Top\",\"Right\",\"Bottom\",\"Left\"].map(function(e,A){var r=t.css(\"border\"+e+\"Style\"),n=t.color(\"border\"+e+\"Color\");\"inset\"===r&&n.isBlack()&&(n=new k([255,255,255,n.a]));var i=K[r]?K[r][A]:null;return{width:t.cssInt(\"border\"+e+\"Width\"),color:i?n[i[0]](i[1]):n,args:null}}),i=s(A,r,n);return{clip:this.parseBackgroundClip(t,i,n,r,A),borders:o(n,A,i,r)}},r.prototype.parseBackgroundClip=function(t,e,A,r,n){var i=[];switch(t.css(\"backgroundClip\")){case\"content-box\":case\"padding-box\":u(i,r[0],r[1],e.topLeftInner,e.topRightInner,n.left+A[3].width,n.top+A[0].width),u(i,r[1],r[2],e.topRightInner,e.bottomRightInner,n.left+n.width-A[1].width,n.top+A[0].width),u(i,r[2],r[3],e.bottomRightInner,e.bottomLeftInner,n.left+n.width-A[1].width,n.top+n.height-A[2].width),u(i,r[3],r[0],e.bottomLeftInner,e.topLeftInner,n.left+A[3].width,n.top+n.height-A[2].width);break;default:u(i,r[0],r[1],e.topLeftOuter,e.topRightOuter,n.left,n.top),u(i,r[1],r[2],e.topRightOuter,e.bottomRightOuter,n.left+n.width,n.top),u(i,r[2],r[3],e.bottomRightOuter,e.bottomLeftOuter,n.left+n.width,n.top+n.height),u(i,r[3],r[0],e.bottomLeftOuter,e.topLeftOuter,n.left,n.top+n.height)}return i},e.exports=r},{\"./color\":3,\"./fontmetrics\":7,\"./log\":13,\"./nodecontainer\":14,\"./pseudoelementcontainer\":18,\"./stackingcontext\":21,\"./textcontainer\":25,\"./utils\":26,punycode:1}],16:[function(t,e,A){function r(t,e,A){var r=\"withCredentials\"in new XMLHttpRequest;if(!e)return Promise.reject(\"No proxy configured\");var s=i(r),c=o(e,t,s);return r?a(c):n(A,c,s).then(function(t){return u(t.content)})}function n(t,e,A){return new Promise(function(r,n){var i=t.createElement(\"script\"),o=function(){delete window.html2canvas.proxy[A],t.body.removeChild(i)};window.html2canvas.proxy[A]=function(t){o(),r(t)},i.src=e,i.onerror=function(t){o(),n(t)},t.body.appendChild(i)})}function i(t){return t?\"\":\"html2canvas_\"+Date.now()+\"_\"+ ++h+\"_\"+Math.round(1e5*Math.random())}function o(t,e,A){return t+\"?url=\"+encodeURIComponent(e)+(A.length?\"&callback=html2canvas.proxy.\"+A:\"\")}var a=t(\"./xhr\"),s=t(\"./utils\"),c=t(\"./log\"),l=t(\"./clone\"),u=s.decode64,h=0;A.Proxy=r,A.ProxyURL=function(t,e,A){var r=\"crossOrigin\"in new Image,a=i(r),s=o(e,t,a);return r?Promise.resolve(s):n(A,s,a).then(function(t){return\"data:\"+t.type+\";base64,\"+t.content})},A.loadUrlDocument=function(t,e,A,n,i,o){return new r(t,e,window.document).then((a=t,function(t){var e,A=new DOMParser;try{e=A.parseFromString(t,\"text/html\")}catch(A){c(\"DOMParser not supported, falling back to createHTMLDocument\"),e=document.implementation.createHTMLDocument(\"\");try{e.open(),e.write(t),e.close()}catch(A){c(\"createHTMLDocument write not supported, falling back to document.body.innerHTML\"),e.body.innerHTML=t}}var r=e.querySelector(\"base\");if(!r||!r.href.host){var n=e.createElement(\"base\");n.href=a,e.head.insertBefore(n,e.head.firstChild)}return e})).then(function(t){return l(t,A,n,i,o,0,0)});var a}},{\"./clone\":2,\"./log\":13,\"./utils\":26,\"./xhr\":28}],17:[function(t,e,A){var r=t(\"./proxy\").ProxyURL;e.exports=function(t,e){var A=document.createElement(\"a\");A.href=t,t=A.href,this.src=t,this.image=new Image;var n=this;this.promise=new Promise(function(A,i){n.image.crossOrigin=\"Anonymous\",n.image.onload=A,n.image.onerror=i,new r(t,e,document).then(function(t){n.image.src=t}).catch(i)})}},{\"./proxy\":16}],18:[function(t,e,A){function r(t,e,A){n.call(this,t,e),this.isPseudoElement=!0,this.before=\":before\"===A}var n=t(\"./nodecontainer\");r.prototype.cloneTo=function(t){r.prototype.cloneTo.call(this,t),t.isPseudoElement=!0,t.before=this.before},(r.prototype=Object.create(n.prototype)).appendToDOM=function(){this.before?this.parent.node.insertBefore(this.node,this.parent.node.firstChild):this.parent.node.appendChild(this.node),this.parent.node.className+=\" \"+this.getHideClass()},r.prototype.cleanDOM=function(){this.node.parentNode.removeChild(this.node),this.parent.node.className=this.parent.node.className.replace(this.getHideClass(),\"\")},r.prototype.getHideClass=function(){return this[\"PSEUDO_HIDE_ELEMENT_CLASS_\"+(this.before?\"BEFORE\":\"AFTER\")]},r.prototype.PSEUDO_HIDE_ELEMENT_CLASS_BEFORE=\"___html2canvas___pseudoelement_before\",r.prototype.PSEUDO_HIDE_ELEMENT_CLASS_AFTER=\"___html2canvas___pseudoelement_after\",e.exports=r},{\"./nodecontainer\":14}],19:[function(t,e,A){function r(t,e,A,r,n){this.width=t,this.height=e,this.images=A,this.options=r,this.document=n}var n=t(\"./log\");r.prototype.renderImage=function(t,e,A,r){var n=t.cssInt(\"paddingLeft\"),i=t.cssInt(\"paddingTop\"),o=t.cssInt(\"paddingRight\"),a=t.cssInt(\"paddingBottom\"),s=A.borders,c=e.width-(s[1].width+s[3].width+n+o),l=e.height-(s[0].width+s[2].width+i+a);this.drawImage(r,0,0,r.image.width||c,r.image.height||l,e.left+n+s[3].width,e.top+i+s[0].width,c,l)},r.prototype.renderBackground=function(t,e,A){0<e.height&&0<e.width&&(this.renderBackgroundColor(t,e),this.renderBackgroundImage(t,e,A))},r.prototype.renderBackgroundColor=function(t,e){var A=t.color(\"backgroundColor\");A.isTransparent()||this.rectangle(e.left,e.top,e.width,e.height,A)},r.prototype.renderBorders=function(t){t.forEach(this.renderBorder,this)},r.prototype.renderBorder=function(t){t.color.isTransparent()||null===t.args||this.drawShape(t.args,t.color)},r.prototype.renderBackgroundImage=function(t,e,A){t.parseBackgroundImages().reverse().forEach(function(r,i,o){switch(r.method){case\"url\":var a=this.images.get(r.args[0]);a?this.renderBackgroundRepeating(t,e,a,o.length-(i+1),A):n(\"Error loading background-image\",r.args[0]);break;case\"linear-gradient\":case\"gradient\":var s=this.images.get(r.value);s?this.renderBackgroundGradient(s,e,A):n(\"Error loading background-image\",r.args[0]);break;case\"none\":break;default:n(\"Unknown background-image type\",r.args[0])}},this)},r.prototype.renderBackgroundRepeating=function(t,e,A,r,n){var i=t.parseBackgroundSize(e,A.image,r),o=t.parseBackgroundPosition(e,A.image,r,i);switch(t.parseBackgroundRepeat(r)){case\"repeat-x\":case\"repeat no-repeat\":this.backgroundRepeatShape(A,o,i,e,e.left+n[3],e.top+o.top+n[0],99999,i.height,n);break;case\"repeat-y\":case\"no-repeat repeat\":this.backgroundRepeatShape(A,o,i,e,e.left+o.left+n[3],e.top+n[0],i.width,99999,n);break;case\"no-repeat\":this.backgroundRepeatShape(A,o,i,e,e.left+o.left+n[3],e.top+o.top+n[0],i.width,i.height,n);break;default:this.renderBackgroundRepeat(A,o,i,{top:e.top,left:e.left},n[3],n[0])}},e.exports=r},{\"./log\":13}],20:[function(t,e,A){function r(t,e){i.apply(this,arguments),this.canvas=this.options.canvas||this.document.createElement(\"canvas\"),this.options.canvas||(this.canvas.width=t,this.canvas.height=e),this.ctx=this.canvas.getContext(\"2d\"),this.taintCtx=this.document.createElement(\"canvas\").getContext(\"2d\"),this.ctx.textBaseline=\"bottom\",this.variables={},a(\"Initialized CanvasRenderer with size\",t,\"x\",e)}function n(t){return 0<t.length}var i=t(\"../renderer\"),o=t(\"../lineargradientcontainer\"),a=t(\"../log\");(r.prototype=Object.create(i.prototype)).setFillStyle=function(t){return this.ctx.fillStyle=\"object\"==typeof t&&t.isColor?t.toString():t,this.ctx},r.prototype.rectangle=function(t,e,A,r,n){this.setFillStyle(n).fillRect(t,e,A,r)},r.prototype.circle=function(t,e,A,r){this.setFillStyle(r),this.ctx.beginPath(),this.ctx.arc(t+A/2,e+A/2,A/2,0,2*Math.PI,!0),this.ctx.closePath(),this.ctx.fill()},r.prototype.circleStroke=function(t,e,A,r,n,i){this.circle(t,e,A,r),this.ctx.strokeStyle=i.toString(),this.ctx.stroke()},r.prototype.drawShape=function(t,e){this.shape(t),this.setFillStyle(e).fill()},r.prototype.taints=function(t){if(null===t.tainted){this.taintCtx.drawImage(t.image,0,0);try{this.taintCtx.getImageData(0,0,1,1),t.tainted=!1}catch(e){this.taintCtx=document.createElement(\"canvas\").getContext(\"2d\"),t.tainted=!0}}return t.tainted},r.prototype.drawImage=function(t,e,A,r,n,i,o,a,s){this.taints(t)&&!this.options.allowTaint||this.ctx.drawImage(t.image,e,A,r,n,i,o,a,s)},r.prototype.clip=function(t,e,A){this.ctx.save(),t.filter(n).forEach(function(t){this.shape(t).clip()},this),e.call(A),this.ctx.restore()},r.prototype.shape=function(t){return this.ctx.beginPath(),t.forEach(function(t,e){\"rect\"===t[0]?this.ctx.rect.apply(this.ctx,t.slice(1)):this.ctx[0===e?\"moveTo\":t[0]+\"To\"].apply(this.ctx,t.slice(1))},this),this.ctx.closePath(),this.ctx},r.prototype.font=function(t,e,A,r,n,i){this.setFillStyle(t).font=[e,A,r,n,i].join(\" \").split(\",\")[0]},r.prototype.fontShadow=function(t,e,A,r){this.setVariable(\"shadowColor\",t.toString()).setVariable(\"shadowOffsetY\",e).setVariable(\"shadowOffsetX\",A).setVariable(\"shadowBlur\",r)},r.prototype.clearShadow=function(){this.setVariable(\"shadowColor\",\"rgba(0,0,0,0)\")},r.prototype.setOpacity=function(t){this.ctx.globalAlpha=t},r.prototype.setTransform=function(t){this.ctx.translate(t.origin[0],t.origin[1]),this.ctx.transform.apply(this.ctx,t.matrix),this.ctx.translate(-t.origin[0],-t.origin[1])},r.prototype.setVariable=function(t,e){return this.variables[t]!==e&&(this.variables[t]=this.ctx[t]=e),this},r.prototype.text=function(t,e,A){this.ctx.fillText(t,e,A)},r.prototype.backgroundRepeatShape=function(t,e,A,r,n,i,o,a,s){var c=[[\"line\",Math.round(n),Math.round(i)],[\"line\",Math.round(n+o),Math.round(i)],[\"line\",Math.round(n+o),Math.round(a+i)],[\"line\",Math.round(n),Math.round(a+i)]];this.clip([c],function(){this.renderBackgroundRepeat(t,e,A,r,s[3],s[0])},this)},r.prototype.renderBackgroundRepeat=function(t,e,A,r,n,i){var o=Math.round(r.left+e.left+n),a=Math.round(r.top+e.top+i);this.setFillStyle(this.ctx.createPattern(this.resizeImage(t,A),\"repeat\")),this.ctx.translate(o,a),this.ctx.fill(),this.ctx.translate(-o,-a)},r.prototype.renderBackgroundGradient=function(t,e){if(t instanceof o){var A=this.ctx.createLinearGradient(e.left+e.width*t.x0,e.top+e.height*t.y0,e.left+e.width*t.x1,e.top+e.height*t.y1);t.colorStops.forEach(function(t){A.addColorStop(t.stop,t.color.toString())}),this.rectangle(e.left,e.top,e.width,e.height,A)}},r.prototype.resizeImage=function(t,e){var A=t.image;if(A.width===e.width&&A.height===e.height)return A;var r=document.createElement(\"canvas\");return r.width=e.width,r.height=e.height,r.getContext(\"2d\").drawImage(A,0,0,A.width,A.height,0,0,e.width,e.height),r},e.exports=r},{\"../lineargradientcontainer\":12,\"../log\":13,\"../renderer\":19}],21:[function(t,e,A){function r(t,e,A,r){n.call(this,A,r),this.ownStacking=t,this.contexts=[],this.children=[],this.opacity=(this.parent?this.parent.stack.opacity:1)*e}var n=t(\"./nodecontainer\");(r.prototype=Object.create(n.prototype)).getParentStack=function(t){var e=this.parent?this.parent.stack:null;return e?e.ownStacking?e:e.getParentStack(t):t.stack},e.exports=r},{\"./nodecontainer\":14}],22:[function(t,e,A){function r(t){this.rangeBounds=this.testRangeBounds(t),this.cors=this.testCORS(),this.svg=this.testSVG()}r.prototype.testRangeBounds=function(t){var e,A,r=!1;return t.createRange&&(e=t.createRange()).getBoundingClientRect&&((A=t.createElement(\"boundtest\")).style.height=\"123px\",A.style.display=\"block\",t.body.appendChild(A),e.selectNode(A),123===e.getBoundingClientRect().height&&(r=!0),t.body.removeChild(A)),r},r.prototype.testCORS=function(){return void 0!==(new Image).crossOrigin},r.prototype.testSVG=function(){var t=new Image,e=document.createElement(\"canvas\"),A=e.getContext(\"2d\");t.src=\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg'></svg>\";try{A.drawImage(t,0,0),e.toDataURL()}catch(t){return!1}return!0},e.exports=r},{}],23:[function(t,e,A){function r(t){this.src=t,this.image=null;var e=this;this.promise=this.hasFabric().then(function(){return e.isInline(t)?Promise.resolve(e.inlineFormatting(t)):n(t)}).then(function(t){return new Promise(function(A){window.html2canvas.svg.fabric.loadSVGFromString(t,e.createCanvas.call(e,A))})})}var n=t(\"./xhr\"),i=t(\"./utils\").decode64;r.prototype.hasFabric=function(){return window.html2canvas.svg&&window.html2canvas.svg.fabric?Promise.resolve():Promise.reject(new Error(\"html2canvas.svg.js is not loaded, cannot render svg\"))},r.prototype.inlineFormatting=function(t){return/^data:image\\/svg\\+xml;base64,/.test(t)?this.decode64(this.removeContentType(t)):this.removeContentType(t)},r.prototype.removeContentType=function(t){return t.replace(/^data:image\\/svg\\+xml(;base64)?,/,\"\")},r.prototype.isInline=function(t){return/^data:image\\/svg\\+xml/i.test(t)},r.prototype.createCanvas=function(t){var e=this;return function(A,r){var n=new window.html2canvas.svg.fabric.StaticCanvas(\"c\");e.image=n.lowerCanvasEl,n.setWidth(r.width).setHeight(r.height).add(window.html2canvas.svg.fabric.util.groupSVGElements(A,r)).renderAll(),t(n.lowerCanvasEl)}},r.prototype.decode64=function(t){return\"function\"==typeof window.atob?window.atob(t):i(t)},e.exports=r},{\"./utils\":26,\"./xhr\":28}],24:[function(t,e,A){function r(t,e){this.src=t,this.image=null;var A=this;this.promise=e?new Promise(function(e,r){A.image=new Image,A.image.onload=e,A.image.onerror=r,A.image.src=\"data:image/svg+xml,\"+(new XMLSerializer).serializeToString(t),!0===A.image.complete&&e(A.image)}):this.hasFabric().then(function(){return new Promise(function(e){window.html2canvas.svg.fabric.parseSVGDocument(t,A.createCanvas.call(A,e))})})}var n=t(\"./svgcontainer\");r.prototype=Object.create(n.prototype),e.exports=r},{\"./svgcontainer\":23}],25:[function(t,e,A){function r(t,e){i.call(this,t,e)}function n(t,e,A){if(0<t.length)return e+A.toUpperCase()}var i=t(\"./nodecontainer\");(r.prototype=Object.create(i.prototype)).applyTextTransform=function(){this.node.data=this.transform(this.parent.css(\"textTransform\"))},r.prototype.transform=function(t){var e=this.node.data;switch(t){case\"lowercase\":return e.toLowerCase();case\"capitalize\":return e.replace(/(^|\\s|:|-|\\(|\\))([a-z])/g,n);case\"uppercase\":return e.toUpperCase();default:return e}},e.exports=r},{\"./nodecontainer\":14}],26:[function(t,e,A){A.smallImage=function(){return\"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\"},A.bind=function(t,e){return function(){return t.apply(e,arguments)}},A.decode64=function(t){var e,A,r,n,i,o,a,s=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",c=t.length,l=\"\";for(e=0;e<c;e+=4)i=s.indexOf(t[e])<<2|(A=s.indexOf(t[e+1]))>>4,o=(15&A)<<4|(r=s.indexOf(t[e+2]))>>2,a=(3&r)<<6|(n=s.indexOf(t[e+3])),l+=64===r?String.fromCharCode(i):64===n||-1===n?String.fromCharCode(i,o):String.fromCharCode(i,o,a);return l},A.getBounds=function(t){if(t.getBoundingClientRect){var e=t.getBoundingClientRect(),A=null==t.offsetWidth?e.width:t.offsetWidth;return{top:e.top,bottom:e.bottom||e.top+e.height,right:e.left+A,left:e.left,width:A,height:null==t.offsetHeight?e.height:t.offsetHeight}}return{}},A.offsetBounds=function(t){var e=t.offsetParent?A.offsetBounds(t.offsetParent):{top:0,left:0};return{top:t.offsetTop+e.top,bottom:t.offsetTop+t.offsetHeight+e.top,right:t.offsetLeft+e.left+t.offsetWidth,left:t.offsetLeft+e.left,width:t.offsetWidth,height:t.offsetHeight}},A.parseBackgrounds=function(t){var e,A,r,n,i,o,a,s=[],c=0,l=0,u=function(){e&&('\"'===A.substr(0,1)&&(A=A.substr(1,A.length-2)),A&&a.push(A),\"-\"===e.substr(0,1)&&0<(n=e.indexOf(\"-\",1)+1)&&(r=e.substr(0,n),e=e.substr(n)),s.push({prefix:r,method:e.toLowerCase(),value:i,args:a,image:null})),a=[],e=r=A=i=\"\"};return a=[],e=r=A=i=\"\",t.split(\"\").forEach(function(t){if(!(0===c&&-1<\" \\r\\n\\t\".indexOf(t))){switch(t){case'\"':o?o===t&&(o=null):o=t;break;case\"(\":if(o)break;if(0===c)return c=1,void(i+=t);l++;break;case\")\":if(o)break;if(1===c){if(0===l)return c=0,i+=t,void u();l--}break;case\",\":if(o)break;if(0===c)return void u();if(1===c&&0===l&&!e.match(/^url$/i))return a.push(A),A=\"\",void(i+=t)}i+=t,0===c?e+=t:A+=t}}),u(),s}},{}],27:[function(t,e,A){function r(t){n.apply(this,arguments),this.type=\"linear\"===t.args[0]?n.TYPES.LINEAR:n.TYPES.RADIAL}var n=t(\"./gradientcontainer\");r.prototype=Object.create(n.prototype),e.exports=r},{\"./gradientcontainer\":9}],28:[function(t,e,A){e.exports=function(t){return new Promise(function(e,A){var r=new XMLHttpRequest;r.open(\"GET\",t),r.onload=function(){200===r.status?e(r.responseText):A(new Error(r.statusText))},r.onerror=function(){A(new Error(\"Network Error\"))},r.send()})}},{}]},{},[4])(4),function(t){var e=\"+\".charCodeAt(0),A=\"/\".charCodeAt(0),r=\"0\".charCodeAt(0),n=\"a\".charCodeAt(0),i=\"A\".charCodeAt(0),o=\"-\".charCodeAt(0),a=\"_\".charCodeAt(0),s=function(t){var s=t.charCodeAt(0);return s===e||s===o?62:s===A||s===a?63:s<r?-1:s<r+10?s-r+26+26:s<i+26?s-i:s<n+26?s-n+26:void 0};t.API.TTFFont=function(){function t(t,e,A){var r;if(this.rawData=t,r=this.contents=new l(t),this.contents.pos=4,\"ttcf\"===r.readString(4)){if(!e)throw new Error(\"Must specify a font name for TTC files.\");throw new Error(\"Font \"+e+\" not found in TTC file.\")}r.pos=0,this.parse(),this.subset=new H(this),this.registerTTF()}return t.open=function(e,A,r,n){return new t(function(t){function e(t){a[l++]=t}var A,r,n,i,o,a;if(0<t.length%4)throw new Error(\"Invalid string. Length must be a multiple of 4\");var c=t.length;o=\"=\"===t.charAt(c-2)?2:\"=\"===t.charAt(c-1)?1:0,a=new Uint8Array(3*t.length/4-o),n=0<o?t.length-4:t.length;var l=0;for(r=A=0;A<n;A+=4,r+=3)e((16711680&(i=s(t.charAt(A))<<18|s(t.charAt(A+1))<<12|s(t.charAt(A+2))<<6|s(t.charAt(A+3))))>>16),e((65280&i)>>8),e(255&i);return 2===o?e(255&(i=s(t.charAt(A))<<2|s(t.charAt(A+1))>>4)):1===o&&(e((i=s(t.charAt(A))<<10|s(t.charAt(A+1))<<4|s(t.charAt(A+2))>>2)>>8&255),e(255&i)),a}(r),A,n)},t.prototype.parse=function(){return this.directory=new u(this.contents),this.head=new f(this),this.name=new v(this),this.cmap=new g(this),this.hhea=new B(this),this.maxp=new Q(this),this.hmtx=new C(this),this.post=new m(this),this.os2=new w(this),this.loca=new x(this),this.glyf=new b(this),this.ascender=this.os2.exists&&this.os2.ascender||this.hhea.ascender,this.decender=this.os2.exists&&this.os2.decender||this.hhea.decender,this.lineGap=this.os2.exists&&this.os2.lineGap||this.hhea.lineGap,this.bbox=[this.head.xMin,this.head.yMin,this.head.xMax,this.head.yMax]},t.prototype.registerTTF=function(){var t,e,A,r,n;if(this.scaleFactor=1e3/this.head.unitsPerEm,this.bbox=function(){var e,A,r,n;for(n=[],e=0,A=(r=this.bbox).length;e<A;e++)t=r[e],n.push(Math.round(t*this.scaleFactor));return n}.call(this),this.stemV=0,this.post.exists?(A=255&(r=this.post.italic_angle),!0&(e=r>>16)&&(e=-(1+(65535^e))),this.italicAngle=+(e+\".\"+A)):this.italicAngle=0,this.ascender=Math.round(this.ascender*this.scaleFactor),this.decender=Math.round(this.decender*this.scaleFactor),this.lineGap=Math.round(this.lineGap*this.scaleFactor),this.capHeight=this.os2.exists&&this.os2.capHeight||this.ascender,this.xHeight=this.os2.exists&&this.os2.xHeight||0,this.familyClass=(this.os2.exists&&this.os2.familyClass||0)>>8,this.isSerif=1===(n=this.familyClass)||2===n||3===n||4===n||5===n||7===n,this.isScript=10===this.familyClass,this.flags=0,this.post.isFixedPitch&&(this.flags|=1),this.isSerif&&(this.flags|=2),this.isScript&&(this.flags|=8),0!==this.italicAngle&&(this.flags|=64),this.flags|=32,!this.cmap.unicode)throw new Error(\"No unicode cmap for font\")},t.prototype.characterToGlyph=function(t){var e;return(null!=(e=this.cmap.unicode)?e.codeMap[t]:void 0)||0},t.prototype.widthOfGlyph=function(t){var e;return e=1e3/this.head.unitsPerEm,this.hmtx.forGlyph(t).advance*e},t.prototype.widthOfString=function(t,e,A){var r,n,i,o,a;for(n=o=i=0,a=(t=\"\"+t).length;0<=a?o<a:a<o;n=0<=a?++o:--o)r=t.charCodeAt(n),i+=this.widthOfGlyph(this.characterToGlyph(r))+A*(1e3/e)||0;return i*(e/1e3)},t.prototype.lineHeight=function(t,e){var A;return null==e&&(e=!1),A=e?this.lineGap:0,(this.ascender+A-this.decender)/1e3*t},t}();var c,l=function(){function t(t){this.data=null!=t?t:[],this.pos=0,this.length=this.data.length}return t.prototype.readByte=function(){return this.data[this.pos++]},t.prototype.writeByte=function(t){return this.data[this.pos++]=t},t.prototype.readUInt32=function(){return 16777216*this.readByte()+(this.readByte()<<16)+(this.readByte()<<8)+this.readByte()},t.prototype.writeUInt32=function(t){return this.writeByte(t>>>24&255),this.writeByte(t>>16&255),this.writeByte(t>>8&255),this.writeByte(255&t)},t.prototype.readInt32=function(){var t;return 2147483648<=(t=this.readUInt32())?t-4294967296:t},t.prototype.writeInt32=function(t){return t<0&&(t+=4294967296),this.writeUInt32(t)},t.prototype.readUInt16=function(){return this.readByte()<<8|this.readByte()},t.prototype.writeUInt16=function(t){return this.writeByte(t>>8&255),this.writeByte(255&t)},t.prototype.readInt16=function(){var t;return 32768<=(t=this.readUInt16())?t-65536:t},t.prototype.writeInt16=function(t){return t<0&&(t+=65536),this.writeUInt16(t)},t.prototype.readString=function(t){var e,A,r;for(A=[],e=r=0;0<=t?r<t:t<r;e=0<=t?++r:--r)A[e]=String.fromCharCode(this.readByte());return A.join(\"\")},t.prototype.writeString=function(t){var e,A,r,n;for(n=[],e=A=0,r=t.length;0<=r?A<r:r<A;e=0<=r?++A:--A)n.push(this.writeByte(t.charCodeAt(e)));return n},t.prototype.readShort=function(){return this.readInt16()},t.prototype.writeShort=function(t){return this.writeInt16(t)},t.prototype.readLongLong=function(){var t,e,A,r,n,i,o,a;return t=this.readByte(),e=this.readByte(),A=this.readByte(),r=this.readByte(),n=this.readByte(),i=this.readByte(),o=this.readByte(),a=this.readByte(),128&t?-1*(72057594037927940*(255^t)+281474976710656*(255^e)+1099511627776*(255^A)+4294967296*(255^r)+16777216*(255^n)+65536*(255^i)+256*(255^o)+(255^a)+1):72057594037927940*t+281474976710656*e+1099511627776*A+4294967296*r+16777216*n+65536*i+256*o+a},t.prototype.readInt=function(){return this.readInt32()},t.prototype.writeInt=function(t){return this.writeInt32(t)},t.prototype.read=function(t){var e,A;for(e=[],A=0;0<=t?A<t:t<A;0<=t?++A:--A)e.push(this.readByte());return e},t.prototype.write=function(t){var e,A,r,n;for(n=[],A=0,r=t.length;A<r;A++)e=t[A],n.push(this.writeByte(e));return n},t}(),u=function(){function t(t){var e,A,r;for(this.scalarType=t.readInt(),this.tableCount=t.readShort(),this.searchRange=t.readShort(),this.entrySelector=t.readShort(),this.rangeShift=t.readShort(),this.tables={},A=0,r=this.tableCount;0<=r?A<r:r<A;0<=r?++A:--A)e={tag:t.readString(4),checksum:t.readInt(),offset:t.readInt(),length:t.readInt()},this.tables[e.tag]=e}var e;return t.prototype.encode=function(t){var A,r,n,i,o,a,s,c,u,h,d,f,p;for(p in d=Object.keys(t).length,a=Math.log(2),u=16*Math.floor(Math.log(d)/a),i=Math.floor(u/a),c=16*d-u,(r=new l).writeInt(this.scalarType),r.writeShort(d),r.writeShort(u),r.writeShort(i),r.writeShort(c),n=16*d,s=r.pos+n,o=null,f=[],t)for(h=t[p],r.writeString(p),r.writeInt(e(h)),r.writeInt(s),r.writeInt(h.length),f=f.concat(h),\"head\"===p&&(o=s),s+=h.length;s%4;)f.push(0),s++;return r.write(f),A=2981146554-e(r.data),r.pos=o+8,r.writeUInt32(A),r.data},e=function(t){var e,A,r,n;for(t=U.call(t);t.length%4;)t.push(0);for(A=new l(t),r=e=0,n=t.length;r<n;r+=4)e+=A.readUInt32();return 4294967295&e},t}(),h={}.hasOwnProperty,d=function(t,e){function A(){this.constructor=t}for(var r in e)h.call(e,r)&&(t[r]=e[r]);return A.prototype=e.prototype,t.prototype=new A,t.__super__=e.prototype,t};c=function(){function t(t){var e;this.file=t,e=this.file.directory.tables[this.tag],this.exists=!!e,e&&(this.offset=e.offset,this.length=e.length,this.parse(this.file.contents))}return t.prototype.parse=function(){},t.prototype.encode=function(){},t.prototype.raw=function(){return this.exists?(this.file.contents.pos=this.offset,this.file.contents.read(this.length)):null},t}();var f=function(t){function e(){return e.__super__.constructor.apply(this,arguments)}return d(e,c),e.prototype.tag=\"head\",e.prototype.parse=function(t){return t.pos=this.offset,this.version=t.readInt(),this.revision=t.readInt(),this.checkSumAdjustment=t.readInt(),this.magicNumber=t.readInt(),this.flags=t.readShort(),this.unitsPerEm=t.readShort(),this.created=t.readLongLong(),this.modified=t.readLongLong(),this.xMin=t.readShort(),this.yMin=t.readShort(),this.xMax=t.readShort(),this.yMax=t.readShort(),this.macStyle=t.readShort(),this.lowestRecPPEM=t.readShort(),this.fontDirectionHint=t.readShort(),this.indexToLocFormat=t.readShort(),this.glyphDataFormat=t.readShort()},e}(),p=function(){function t(t,e){var A,r,n,i,o,a,s,c,l,u,h,d,f,p,g,B,w,m;switch(this.platformID=t.readUInt16(),this.encodingID=t.readShort(),this.offset=e+t.readInt(),l=t.pos,t.pos=this.offset,this.format=t.readUInt16(),this.length=t.readUInt16(),this.language=t.readUInt16(),this.isUnicode=3===this.platformID&&1===this.encodingID&&4===this.format||0===this.platformID&&4===this.format,this.codeMap={},this.format){case 0:for(a=g=0;g<256;a=++g)this.codeMap[a]=t.readByte();break;case 4:for(h=t.readUInt16(),u=h/2,t.pos+=6,n=function(){var e,A;for(A=[],a=e=0;0<=u?e<u:u<e;a=0<=u?++e:--e)A.push(t.readUInt16());return A}(),t.pos+=2,f=function(){var e,A;for(A=[],a=e=0;0<=u?e<u:u<e;a=0<=u?++e:--e)A.push(t.readUInt16());return A}(),s=function(){var e,A;for(A=[],a=e=0;0<=u?e<u:u<e;a=0<=u?++e:--e)A.push(t.readUInt16());return A}(),c=function(){var e,A;for(A=[],a=e=0;0<=u?e<u:u<e;a=0<=u?++e:--e)A.push(t.readUInt16());return A}(),r=(this.length-t.pos+this.offset)/2,o=function(){var e,A;for(A=[],a=e=0;0<=r?e<r:r<e;a=0<=r?++e:--e)A.push(t.readUInt16());return A}(),a=B=0,m=n.length;B<m;a=++B)for(p=n[a],A=w=d=f[a];d<=p?w<=p:p<=w;A=d<=p?++w:--w)0===c[a]?i=A+s[a]:0!==(i=o[c[a]/2+(A-d)-(u-a)]||0)&&(i+=s[a]),this.codeMap[A]=65535&i}t.pos=l}return t.encode=function(t,e){var A,r,n,i,o,a,s,c,u,h,d,f,p,g,B,w,m,y,v,Q,C,U,b,F,E,x,H,I,S,_,T,N,k,O,P,D,L,R,M,K,z,q,j,X,V,G;switch(I=new l,i=Object.keys(t).sort(function(t,e){return t-e}),e){case\"macroman\":for(p=0,g=function(){var t,e;for(e=[],f=t=0;t<256;f=++t)e.push(0);return e}(),w={0:0},n={},S=0,k=i.length;S<k;S++)null==w[j=t[r=i[S]]]&&(w[j]=++p),n[r]={old:t[r],new:w[t[r]]},g[r]=w[t[r]];return I.writeUInt16(1),I.writeUInt16(0),I.writeUInt32(12),I.writeUInt16(0),I.writeUInt16(262),I.writeUInt16(0),I.write(g),{charMap:n,subtable:I.data,maxGlyphID:p+1};case\"unicode\":for(x=[],u=[],w={},A={},B=s=null,_=m=0,O=i.length;_<O;_++)null==w[v=t[r=i[_]]]&&(w[v]=++m),A[r]={old:v,new:w[v]},o=w[v]-r,null!=B&&o===s||(B&&u.push(B),x.push(r),s=o),B=r;for(B&&u.push(B),u.push(65535),x.push(65535),F=2*(b=x.length),U=2*Math.pow(Math.log(b)/Math.LN2,2),h=Math.log(U/2)/Math.LN2,C=2*b-U,a=[],Q=[],d=[],f=T=0,P=x.length;T<P;f=++T){if(E=x[f],c=u[f],65535===E){a.push(0),Q.push(0);break}if(32768<=E-(H=A[E].new))for(a.push(0),Q.push(2*(d.length+b-f)),r=N=E;E<=c?N<=c:c<=N;r=E<=c?++N:--N)d.push(A[r].new);else a.push(H-E),Q.push(0)}for(I.writeUInt16(3),I.writeUInt16(1),I.writeUInt32(12),I.writeUInt16(4),I.writeUInt16(16+8*b+2*d.length),I.writeUInt16(0),I.writeUInt16(F),I.writeUInt16(U),I.writeUInt16(h),I.writeUInt16(C),z=0,D=u.length;z<D;z++)r=u[z],I.writeUInt16(r);for(I.writeUInt16(0),q=0,L=x.length;q<L;q++)r=x[q],I.writeUInt16(r);for(X=0,R=a.length;X<R;X++)o=a[X],I.writeUInt16(o);for(V=0,M=Q.length;V<M;V++)y=Q[V],I.writeUInt16(y);for(G=0,K=d.length;G<K;G++)p=d[G],I.writeUInt16(p);return{charMap:A,subtable:I.data,maxGlyphID:m+1}}},t}(),g=function(t){function e(){return e.__super__.constructor.apply(this,arguments)}return d(e,c),e.prototype.tag=\"cmap\",e.prototype.parse=function(t){var e,A,r;for(t.pos=this.offset,this.version=t.readUInt16(),A=t.readUInt16(),this.tables=[],this.unicode=null,r=0;0<=A?r<A:A<r;0<=A?++r:--r)e=new p(t,this.offset),this.tables.push(e),e.isUnicode&&null==this.unicode&&(this.unicode=e);return!0},e.encode=function(t,e){var A,r;return null==e&&(e=\"macroman\"),A=p.encode(t,e),(r=new l).writeUInt16(0),r.writeUInt16(1),A.table=r.data.concat(A.subtable),A},e}(),B=function(t){function e(){return e.__super__.constructor.apply(this,arguments)}return d(e,c),e.prototype.tag=\"hhea\",e.prototype.parse=function(t){return t.pos=this.offset,this.version=t.readInt(),this.ascender=t.readShort(),this.decender=t.readShort(),this.lineGap=t.readShort(),this.advanceWidthMax=t.readShort(),this.minLeftSideBearing=t.readShort(),this.minRightSideBearing=t.readShort(),this.xMaxExtent=t.readShort(),this.caretSlopeRise=t.readShort(),this.caretSlopeRun=t.readShort(),this.caretOffset=t.readShort(),t.pos+=8,this.metricDataFormat=t.readShort(),this.numberOfMetrics=t.readUInt16()},e}(),w=function(t){function e(){return e.__super__.constructor.apply(this,arguments)}return d(e,c),e.prototype.tag=\"OS/2\",e.prototype.parse=function(t){if(t.pos=this.offset,this.version=t.readUInt16(),this.averageCharWidth=t.readShort(),this.weightClass=t.readUInt16(),this.widthClass=t.readUInt16(),this.type=t.readShort(),this.ySubscriptXSize=t.readShort(),this.ySubscriptYSize=t.readShort(),this.ySubscriptXOffset=t.readShort(),this.ySubscriptYOffset=t.readShort(),this.ySuperscriptXSize=t.readShort(),this.ySuperscriptYSize=t.readShort(),this.ySuperscriptXOffset=t.readShort(),this.ySuperscriptYOffset=t.readShort(),this.yStrikeoutSize=t.readShort(),this.yStrikeoutPosition=t.readShort(),this.familyClass=t.readShort(),this.panose=function(){var e,A;for(A=[],e=0;e<10;++e)A.push(t.readByte());return A}(),this.charRange=function(){var e,A;for(A=[],e=0;e<4;++e)A.push(t.readInt());return A}(),this.vendorID=t.readString(4),this.selection=t.readShort(),this.firstCharIndex=t.readShort(),this.lastCharIndex=t.readShort(),0<this.version&&(this.ascent=t.readShort(),this.descent=t.readShort(),this.lineGap=t.readShort(),this.winAscent=t.readShort(),this.winDescent=t.readShort(),this.codePageRange=function(){var e,A;for(A=[],e=0;e<2;++e)A.push(t.readInt());return A}(),1<this.version))return this.xHeight=t.readShort(),this.capHeight=t.readShort(),this.defaultChar=t.readShort(),this.breakChar=t.readShort(),this.maxContext=t.readShort()},e}(),m=function(t){function e(){return e.__super__.constructor.apply(this,arguments)}return d(e,c),e.prototype.tag=\"post\",e.prototype.parse=function(t){var e,A,r,n;switch(t.pos=this.offset,this.format=t.readInt(),this.italicAngle=t.readInt(),this.underlinePosition=t.readShort(),this.underlineThickness=t.readShort(),this.isFixedPitch=t.readInt(),this.minMemType42=t.readInt(),this.maxMemType42=t.readInt(),this.minMemType1=t.readInt(),this.maxMemType1=t.readInt(),this.format){case 65536:break;case 131072:for(A=t.readUInt16(),this.glyphNameIndex=[],r=0;0<=A?r<A:A<r;0<=A?++r:--r)this.glyphNameIndex.push(t.readUInt16());for(this.names=[],n=[];t.pos<this.offset+this.length;)e=t.readByte(),n.push(this.names.push(t.readString(e)));return n;case 151552:return A=t.readUInt16(),this.offsets=t.read(A);case 196608:break;case 262144:return this.map=function(){var e,A,r;for(r=[],e=0,A=this.file.maxp.numGlyphs;0<=A?e<A:A<e;0<=A?++e:--e)r.push(t.readUInt32());return r}.call(this)}},e}(),y=function(t,e){this.raw=t,this.length=t.length,this.platformID=e.platformID,this.encodingID=e.encodingID,this.languageID=e.languageID},v=function(t){function e(){return e.__super__.constructor.apply(this,arguments)}return d(e,c),e.prototype.tag=\"name\",e.prototype.parse=function(t){var e,A,r,n,i,o,a,s,c,l,u,h;for(t.pos=this.offset,t.readShort(),e=t.readShort(),o=t.readShort(),A=[],n=c=0;0<=e?c<e:e<c;n=0<=e?++c:--c)A.push({platformID:t.readShort(),encodingID:t.readShort(),languageID:t.readShort(),nameID:t.readShort(),length:t.readShort(),offset:this.offset+o+t.readShort()});for(a={},n=l=0,u=A.length;l<u;n=++l)r=A[n],t.pos=r.offset,s=t.readString(r.length),i=new y(s,r),null==a[h=r.nameID]&&(a[h]=[]),a[r.nameID].push(i);return this.strings=a,this.copyright=a[0],this.fontFamily=a[1],this.fontSubfamily=a[2],this.uniqueSubfamily=a[3],this.fontName=a[4],this.version=a[5],this.postscriptName=a[6][0].raw.replace(/[\\x00-\\x19\\x80-\\xff]/g,\"\"),this.trademark=a[7],this.manufacturer=a[8],this.designer=a[9],this.description=a[10],this.vendorUrl=a[11],this.designerUrl=a[12],this.license=a[13],this.licenseUrl=a[14],this.preferredFamily=a[15],this.preferredSubfamily=a[17],this.compatibleFull=a[18],this.sampleText=a[19]},e}(),Q=function(t){function e(){return e.__super__.constructor.apply(this,arguments)}return d(e,c),e.prototype.tag=\"maxp\",e.prototype.parse=function(t){return t.pos=this.offset,this.version=t.readInt(),this.numGlyphs=t.readUInt16(),this.maxPoints=t.readUInt16(),this.maxContours=t.readUInt16(),this.maxCompositePoints=t.readUInt16(),this.maxComponentContours=t.readUInt16(),this.maxZones=t.readUInt16(),this.maxTwilightPoints=t.readUInt16(),this.maxStorage=t.readUInt16(),this.maxFunctionDefs=t.readUInt16(),this.maxInstructionDefs=t.readUInt16(),this.maxStackElements=t.readUInt16(),this.maxSizeOfInstructions=t.readUInt16(),this.maxComponentElements=t.readUInt16(),this.maxComponentDepth=t.readUInt16()},e}(),C=function(t){function e(){return e.__super__.constructor.apply(this,arguments)}return d(e,c),e.prototype.tag=\"hmtx\",e.prototype.parse=function(t){var e,A,r,n,i,o,a;for(t.pos=this.offset,this.metrics=[],n=0,o=this.file.hhea.numberOfMetrics;0<=o?n<o:o<n;0<=o?++n:--n)this.metrics.push({advance:t.readUInt16(),lsb:t.readInt16()});for(A=this.file.maxp.numGlyphs-this.file.hhea.numberOfMetrics,this.leftSideBearings=function(){var e,r;for(r=[],e=0;0<=A?e<A:A<e;0<=A?++e:--e)r.push(t.readInt16());return r}(),this.widths=function(){var t,e,A,n;for(n=[],t=0,e=(A=this.metrics).length;t<e;t++)r=A[t],n.push(r.advance);return n}.call(this),e=this.widths[this.widths.length-1],a=[],i=0;0<=A?i<A:A<i;0<=A?++i:--i)a.push(this.widths.push(e));return a},e.prototype.forGlyph=function(t){return t in this.metrics?this.metrics[t]:{advance:this.metrics[this.metrics.length-1].advance,lsb:this.leftSideBearings[t-this.metrics.length]}},e}(),U=[].slice,b=function(t){function e(){return e.__super__.constructor.apply(this,arguments)}return d(e,c),e.prototype.tag=\"glyf\",e.prototype.parse=function(t){return this.cache={}},e.prototype.glyphFor=function(t){var e,A,r,n,i,o,a,s,c,u;return(t=t)in this.cache?this.cache[t]:(n=this.file.loca,e=this.file.contents,A=n.indexOf(t),0===(r=n.lengthOf(t))?this.cache[t]=null:(e.pos=this.offset+A,i=(o=new l(e.read(r))).readShort(),s=o.readShort(),u=o.readShort(),a=o.readShort(),c=o.readShort(),this.cache[t]=-1===i?new E(o,s,u,a,c):new F(o,i,s,u,a,c),this.cache[t]))},e.prototype.encode=function(t,e,A){var r,n,i,o,a;for(i=[],n=[],o=0,a=e.length;o<a;o++)r=t[e[o]],n.push(i.length),r&&(i=i.concat(r.encode(A)));return n.push(i.length),{table:i,offsets:n}},e}(),F=function(){function t(t,e,A,r,n,i){this.raw=t,this.numberOfContours=e,this.xMin=A,this.yMin=r,this.xMax=n,this.yMax=i,this.compound=!1}return t.prototype.encode=function(){return this.raw.data},t}(),E=function(){function t(t,e,A,r,n){var i,o;for(this.raw=t,this.xMin=e,this.yMin=A,this.xMax=r,this.yMax=n,this.compound=!0,this.glyphIDs=[],this.glyphOffsets=[],i=this.raw;o=i.readShort(),this.glyphOffsets.push(i.pos),this.glyphIDs.push(i.readShort()),32&o;)i.pos+=1&o?4:2,128&o?i.pos+=8:64&o?i.pos+=4:8&o&&(i.pos+=2)}return t.prototype.encode=function(t){var e,A,r,n,i;for(A=new l(U.call(this.raw.data)),e=r=0,n=(i=this.glyphIDs).length;r<n;e=++r)i[e],A.pos=this.glyphOffsets[e];return A.data},t}(),x=function(t){function e(){return e.__super__.constructor.apply(this,arguments)}return d(e,c),e.prototype.tag=\"loca\",e.prototype.parse=function(t){var e;return t.pos=this.offset,e=this.file.head.indexToLocFormat,this.offsets=0===e?function(){var e,A,r;for(r=[],e=0,A=this.length;e<A;e+=2)r.push(2*t.readUInt16());return r}.call(this):function(){var e,A,r;for(r=[],e=0,A=this.length;e<A;e+=4)r.push(t.readUInt32());return r}.call(this)},e.prototype.indexOf=function(t){return this.offsets[t]},e.prototype.lengthOf=function(t){return this.offsets[t+1]-this.offsets[t]},e.prototype.encode=function(t,e){for(var A=new Uint32Array(this.offsets.length),r=0,n=0,i=0;i<A.length;++i)if(A[i]=r,n<e.length&&e[n]==i){++n,A[i]=r;var o=this.offsets[i],a=this.offsets[i+1]-o;0<a&&(r+=a)}for(var s=new Array(4*A.length),c=0;c<A.length;++c)s[4*c+3]=255&A[c],s[4*c+2]=(65280&A[c])>>8,s[4*c+1]=(16711680&A[c])>>16,s[4*c]=(4278190080&A[c])>>24;return s},e}(),H=function(){function t(t){this.font=t,this.subset={},this.unicodes={},this.next=33}return t.prototype.generateCmap=function(){var t,e,A,r,n;for(e in r=this.font.cmap.tables[0].codeMap,t={},n=this.subset)A=n[e],t[e]=r[A];return t},t.prototype.glyphsFor=function(t){var e,A,r,n,i,o,a;for(r={},i=0,o=t.length;i<o;i++)r[n=t[i]]=this.font.glyf.glyphFor(n);for(n in e=[],r)(null!=(A=r[n])?A.compound:void 0)&&e.push.apply(e,A.glyphIDs);if(0<e.length)for(n in a=this.glyphsFor(e))A=a[n],r[n]=A;return r},t.prototype.encode=function(t){var e,A,r,n,i,o,a,s,c,l,u,h,d,f,p;for(A in e=g.encode(this.generateCmap(),\"unicode\"),n=this.glyphsFor(t),u={0:0},p=e.charMap)u[(o=p[A]).old]=o.new;for(h in l=e.maxGlyphID,n)h in u||(u[h]=l++);return s=function(t){var e,A;for(e in A={},t)A[t[e]]=e;return A}(u),c=Object.keys(s).sort(function(t,e){return t-e}),d=function(){var t,e,A;for(A=[],t=0,e=c.length;t<e;t++)i=c[t],A.push(s[i]);return A}(),r=this.font.glyf.encode(n,d,u),a=this.font.loca.encode(r.offsets,d),f={cmap:this.font.cmap.raw(),glyf:r.table,loca:a,hmtx:this.font.hmtx.raw(),hhea:this.font.hhea.raw(),maxp:this.font.maxp.raw(),post:this.font.post.raw(),name:this.font.name.raw(),head:this.font.head.raw()},this.font.os2.exists&&(f[\"OS/2\"]=this.font.os2.raw()),this.font.directory.encode(f)},t}();t.API.PDFObject=function(){function t(){}var e;return e=function(t,e){return(Array(e+1).join(\"0\")+t).slice(-e)},t.convert=function(A){var r,n,i,o;if(Array.isArray(A))return\"[\"+function(){var e,n,i;for(i=[],e=0,n=A.length;e<n;e++)r=A[e],i.push(t.convert(r));return i}().join(\" \")+\"]\";if(\"string\"==typeof A)return\"/\"+A;if(null!=A?A.isString:void 0)return\"(\"+A+\")\";if(A instanceof Date)return\"(D:\"+e(A.getUTCFullYear(),4)+e(A.getUTCMonth(),2)+e(A.getUTCDate(),2)+e(A.getUTCHours(),2)+e(A.getUTCMinutes(),2)+e(A.getUTCSeconds(),2)+\"Z)\";if(\"[object Object]\"==={}.toString.call(A)){for(n in i=[\"<<\"],A)o=A[n],i.push(\"/\"+n+\" \"+t.convert(o));return i.push(\">>\"),i.join(\"\\n\")}return\"\"+A},t}()}(st),Ct=\"undefined\"!=typeof self&&self||\"undefined\"!=typeof window&&window||void 0!==r&&r||Function('return typeof this === \"object\" && this.content')()||Function(\"return this\")(),Ut=function(){function t(t){var e,A,r,n,i,o,a,s,c,l,u,h,d,f;for(this.data=t,this.pos=8,this.palette=[],this.imgData=[],this.transparency={},this.animation=null,this.text={},o=null;;){switch(e=this.readUInt32(),c=function(){var t,e;for(e=[],t=0;t<4;++t)e.push(String.fromCharCode(this.data[this.pos++]));return e}.call(this).join(\"\")){case\"IHDR\":this.width=this.readUInt32(),this.height=this.readUInt32(),this.bits=this.data[this.pos++],this.colorType=this.data[this.pos++],this.compressionMethod=this.data[this.pos++],this.filterMethod=this.data[this.pos++],this.interlaceMethod=this.data[this.pos++];break;case\"acTL\":this.animation={numFrames:this.readUInt32(),numPlays:this.readUInt32()||1/0,frames:[]};break;case\"PLTE\":this.palette=this.read(e);break;case\"fcTL\":o&&this.animation.frames.push(o),this.pos+=4,o={width:this.readUInt32(),height:this.readUInt32(),xOffset:this.readUInt32(),yOffset:this.readUInt32()},i=this.readUInt16(),n=this.readUInt16()||100,o.delay=1e3*i/n,o.disposeOp=this.data[this.pos++],o.blendOp=this.data[this.pos++],o.data=[];break;case\"IDAT\":case\"fdAT\":for(\"fdAT\"===c&&(this.pos+=4,e-=4),t=(null!=o?o.data:void 0)||this.imgData,h=0;0<=e?h<e:e<h;0<=e?++h:--h)t.push(this.data[this.pos++]);break;case\"tRNS\":switch(this.transparency={},this.colorType){case 3:if(r=this.palette.length/3,this.transparency.indexed=this.read(e),this.transparency.indexed.length>r)throw new Error(\"More transparent colors than palette size\");if(0<(l=r-this.transparency.indexed.length))for(d=0;0<=l?d<l:l<d;0<=l?++d:--d)this.transparency.indexed.push(255);break;case 0:this.transparency.grayscale=this.read(e)[0];break;case 2:this.transparency.rgb=this.read(e)}break;case\"tEXt\":a=(u=this.read(e)).indexOf(0),s=String.fromCharCode.apply(String,u.slice(0,a)),this.text[s]=String.fromCharCode.apply(String,u.slice(a+1));break;case\"IEND\":return o&&this.animation.frames.push(o),this.colors=function(){switch(this.colorType){case 0:case 3:case 4:return 1;case 2:case 6:return 3}}.call(this),this.hasAlphaChannel=4===(f=this.colorType)||6===f,A=this.colors+(this.hasAlphaChannel?1:0),this.pixelBitlength=this.bits*A,this.colorSpace=function(){switch(this.colors){case 1:return\"DeviceGray\";case 3:return\"DeviceRGB\"}}.call(this),void(this.imgData=new Uint8Array(this.imgData));default:this.pos+=e}if(this.pos+=4,this.pos>this.data.length)throw new Error(\"Incomplete or corrupt PNG file\")}}var e,A,r;t.load=function(e,A,r){var n;return\"function\"==typeof A&&(r=A),(n=new XMLHttpRequest).open(\"GET\",e,!0),n.responseType=\"arraybuffer\",n.onload=function(){var e;return e=new t(new Uint8Array(n.response||n.mozResponseArrayBuffer)),\"function\"==typeof(null!=A?A.getContext:void 0)&&e.render(A),\"function\"==typeof r?r(e):void 0},n.send(null)},t.prototype.read=function(t){var e,A;for(A=[],e=0;0<=t?e<t:t<e;0<=t?++e:--e)A.push(this.data[this.pos++]);return A},t.prototype.readUInt32=function(){return this.data[this.pos++]<<24|this.data[this.pos++]<<16|this.data[this.pos++]<<8|this.data[this.pos++]},t.prototype.readUInt16=function(){return this.data[this.pos++]<<8|this.data[this.pos++]},t.prototype.decodePixels=function(t){function e(e,o,a,s){var c,l,u,h,d,f,p,g,B,w,m,y,v,Q,C,U,b,F,E,x,H,I=Math.ceil((i.width-e)/a),S=Math.ceil((i.height-o)/s),_=i.width==I&&i.height==S;for(Q=A*I,y=_?r:new Uint8Array(Q*S),f=t.length,l=v=0;v<S&&n<f;){switch(t[n++]){case 0:for(h=b=0;b<Q;h=b+=1)y[l++]=t[n++];break;case 1:for(h=F=0;F<Q;h=F+=1)c=t[n++],d=h<A?0:y[l-A],y[l++]=(c+d)%256;break;case 2:for(h=E=0;E<Q;h=E+=1)c=t[n++],u=(h-h%A)/A,C=v&&y[(v-1)*Q+u*A+h%A],y[l++]=(C+c)%256;break;case 3:for(h=x=0;x<Q;h=x+=1)c=t[n++],u=(h-h%A)/A,d=h<A?0:y[l-A],C=v&&y[(v-1)*Q+u*A+h%A],y[l++]=(c+Math.floor((d+C)/2))%256;break;case 4:for(h=H=0;H<Q;h=H+=1)c=t[n++],u=(h-h%A)/A,d=h<A?0:y[l-A],0===v?C=U=0:(C=y[(v-1)*Q+u*A+h%A],U=u&&y[(v-1)*Q+(u-1)*A+h%A]),p=d+C-U,g=Math.abs(p-d),w=Math.abs(p-C),m=Math.abs(p-U),B=g<=w&&g<=m?d:w<=m?C:U,y[l++]=(c+B)%256;break;default:throw new Error(\"Invalid filter algorithm: \"+t[n-1])}if(!_){var T=((o+v*s)*i.width+e)*A,N=v*Q;for(h=0;h<I;h+=1){for(var k=0;k<A;k+=1)r[T++]=y[N++];T+=(a-1)*A}}v++}}var A=this.pixelBitlength/8,r=new Uint8Array(this.width*this.height*A),n=0,i=this;return null==t&&(t=this.imgData),0===t.length?new Uint8Array(0):(t=(t=new Et(t)).getBytes(),1==i.interlaceMethod?(e(0,0,8,8),e(4,0,8,8),e(0,4,4,8),e(2,0,4,4),e(0,2,2,4),e(1,0,2,2),e(0,1,1,2)):e(0,0,1,1),r)},t.prototype.decodePalette=function(){var t,e,A,r,n,i,o,a,s;for(A=this.palette,i=this.transparency.indexed||[],n=new Uint8Array((i.length||0)+A.length),r=0,A.length,e=o=t=0,a=A.length;o<a;e=o+=3)n[r++]=A[e],n[r++]=A[e+1],n[r++]=A[e+2],n[r++]=null!=(s=i[t++])?s:255;return n},t.prototype.copyToImageData=function(t,e){var A,r,n,i,o,a,s,c,l,u,h;if(r=this.colors,l=null,A=this.hasAlphaChannel,this.palette.length&&(l=null!=(h=this._decodedPalette)?h:this._decodedPalette=this.decodePalette(),r=4,A=!0),c=(n=t.data||t).length,o=l||e,i=a=0,1===r)for(;i<c;)s=l?4*e[i/4]:a,u=o[s++],n[i++]=u,n[i++]=u,n[i++]=u,n[i++]=A?o[s++]:255,a=s;else for(;i<c;)s=l?4*e[i/4]:a,n[i++]=o[s++],n[i++]=o[s++],n[i++]=o[s++],n[i++]=A?o[s++]:255,a=s},t.prototype.decode=function(){var t;return t=new Uint8Array(this.width*this.height*4),this.copyToImageData(t,this.decodePixels()),t};try{A=Ct.document.createElement(\"canvas\"),r=A.getContext(\"2d\")}catch(t){return-1}return e=function(t){var e;return r.width=t.width,r.height=t.height,r.clearRect(0,0,t.width,t.height),r.putImageData(t,0,0),(e=new Image).src=A.toDataURL(),e},t.prototype.decodeFrames=function(t){var A,r,n,i,o,a,s,c;if(this.animation){for(c=[],r=o=0,a=(s=this.animation.frames).length;o<a;r=++o)A=s[r],n=t.createImageData(A.width,A.height),i=this.decodePixels(new Uint8Array(A.data)),this.copyToImageData(n,i),A.imageData=n,c.push(A.image=e(n));return c}},t.prototype.renderFrame=function(t,e){var A,r,n;return A=(r=this.animation.frames)[e],n=r[e-1],0===e&&t.clearRect(0,0,this.width,this.height),1===(null!=n?n.disposeOp:void 0)?t.clearRect(n.xOffset,n.yOffset,n.width,n.height):2===(null!=n?n.disposeOp:void 0)&&t.putImageData(n.imageData,n.xOffset,n.yOffset),0===A.blendOp&&t.clearRect(A.xOffset,A.yOffset,A.width,A.height),t.drawImage(A.image,A.xOffset,A.yOffset)},t.prototype.animate=function(t){var e,A,r,n,i,o,a=this;return A=0,o=this.animation,n=o.numFrames,r=o.frames,i=o.numPlays,(e=function(){var o,s;if(o=A++%n,s=r[o],a.renderFrame(t,o),1<n&&A/n<i)return a.animation._timeout=setTimeout(e,s.delay)})()},t.prototype.stopAnimation=function(){var t;return clearTimeout(null!=(t=this.animation)?t._timeout:void 0)},t.prototype.render=function(t){var e,A;return t._png&&t._png.stopAnimation(),t._png=this,t.width=this.width,t.height=this.height,e=t.getContext(\"2d\"),this.animation?(this.decodeFrames(e),this.animate(e)):(A=e.createImageData(this.width,this.height),this.copyToImageData(A,this.decodePixels()),e.putImageData(A,0,0))},t}(),Ct.PNG=Ut;var Ft=function(){function t(){this.pos=0,this.bufferLength=0,this.eof=!1,this.buffer=null}return t.prototype={ensureBuffer:function(t){var e=this.buffer,A=e?e.byteLength:0;if(t<A)return e;for(var r=512;r<t;)r<<=1;for(var n=new Uint8Array(r),i=0;i<A;++i)n[i]=e[i];return this.buffer=n},getByte:function(){for(var t=this.pos;this.bufferLength<=t;){if(this.eof)return null;this.readBlock()}return this.buffer[this.pos++]},getBytes:function(t){var e=this.pos;if(t){this.ensureBuffer(e+t);for(var A=e+t;!this.eof&&this.bufferLength<A;)this.readBlock();var r=this.bufferLength;r<A&&(A=r)}else{for(;!this.eof;)this.readBlock();A=this.bufferLength}return this.pos=A,this.buffer.subarray(e,A)},lookChar:function(){for(var t=this.pos;this.bufferLength<=t;){if(this.eof)return null;this.readBlock()}return String.fromCharCode(this.buffer[this.pos])},getChar:function(){for(var t=this.pos;this.bufferLength<=t;){if(this.eof)return null;this.readBlock()}return String.fromCharCode(this.buffer[this.pos++])},makeSubStream:function(t,e,A){for(var r=t+e;this.bufferLength<=r&&!this.eof;)this.readBlock();return new Stream(this.buffer,t,e,A)},skip:function(t){t||(t=1),this.pos+=t},reset:function(){this.pos=0}},t}(),Et=function(){function t(t){throw new Error(t)}function e(e){var A=0,r=e[A++],n=e[A++];-1!=r&&-1!=n||t(\"Invalid header in flate stream\"),8!=(15&r)&&t(\"Unknown compression method in flate stream\"),((r<<8)+n)%31!=0&&t(\"Bad FCHECK in flate stream\"),32&n&&t(\"FDICT bit set in flate stream\"),this.bytes=e,this.bytesPos=2,this.codeSize=0,this.codeBuf=0,Ft.call(this)}if(\"undefined\"!=typeof Uint32Array){var A=new Uint32Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),r=new Uint32Array([3,4,5,6,7,8,9,10,65547,65549,65551,65553,131091,131095,131099,131103,196643,196651,196659,196667,262211,262227,262243,262259,327811,327843,327875,327907,258,258,258]),n=new Uint32Array([1,2,3,4,65541,65543,131081,131085,196625,196633,262177,262193,327745,327777,393345,393409,459009,459137,524801,525057,590849,591361,657409,658433,724993,727041,794625,798721,868353,876545]),i=[new Uint32Array([459008,524368,524304,524568,459024,524400,524336,590016,459016,524384,524320,589984,524288,524416,524352,590048,459012,524376,524312,589968,459028,524408,524344,590032,459020,524392,524328,59e4,524296,524424,524360,590064,459010,524372,524308,524572,459026,524404,524340,590024,459018,524388,524324,589992,524292,524420,524356,590056,459014,524380,524316,589976,459030,524412,524348,590040,459022,524396,524332,590008,524300,524428,524364,590072,459009,524370,524306,524570,459025,524402,524338,590020,459017,524386,524322,589988,524290,524418,524354,590052,459013,524378,524314,589972,459029,524410,524346,590036,459021,524394,524330,590004,524298,524426,524362,590068,459011,524374,524310,524574,459027,524406,524342,590028,459019,524390,524326,589996,524294,524422,524358,590060,459015,524382,524318,589980,459031,524414,524350,590044,459023,524398,524334,590012,524302,524430,524366,590076,459008,524369,524305,524569,459024,524401,524337,590018,459016,524385,524321,589986,524289,524417,524353,590050,459012,524377,524313,589970,459028,524409,524345,590034,459020,524393,524329,590002,524297,524425,524361,590066,459010,524373,524309,524573,459026,524405,524341,590026,459018,524389,524325,589994,524293,524421,524357,590058,459014,524381,524317,589978,459030,524413,524349,590042,459022,524397,524333,590010,524301,524429,524365,590074,459009,524371,524307,524571,459025,524403,524339,590022,459017,524387,524323,589990,524291,524419,524355,590054,459013,524379,524315,589974,459029,524411,524347,590038,459021,524395,524331,590006,524299,524427,524363,590070,459011,524375,524311,524575,459027,524407,524343,590030,459019,524391,524327,589998,524295,524423,524359,590062,459015,524383,524319,589982,459031,524415,524351,590046,459023,524399,524335,590014,524303,524431,524367,590078,459008,524368,524304,524568,459024,524400,524336,590017,459016,524384,524320,589985,524288,524416,524352,590049,459012,524376,524312,589969,459028,524408,524344,590033,459020,524392,524328,590001,524296,524424,524360,590065,459010,524372,524308,524572,459026,524404,524340,590025,459018,524388,524324,589993,524292,524420,524356,590057,459014,524380,524316,589977,459030,524412,524348,590041,459022,524396,524332,590009,524300,524428,524364,590073,459009,524370,524306,524570,459025,524402,524338,590021,459017,524386,524322,589989,524290,524418,524354,590053,459013,524378,524314,589973,459029,524410,524346,590037,459021,524394,524330,590005,524298,524426,524362,590069,459011,524374,524310,524574,459027,524406,524342,590029,459019,524390,524326,589997,524294,524422,524358,590061,459015,524382,524318,589981,459031,524414,524350,590045,459023,524398,524334,590013,524302,524430,524366,590077,459008,524369,524305,524569,459024,524401,524337,590019,459016,524385,524321,589987,524289,524417,524353,590051,459012,524377,524313,589971,459028,524409,524345,590035,459020,524393,524329,590003,524297,524425,524361,590067,459010,524373,524309,524573,459026,524405,524341,590027,459018,524389,524325,589995,524293,524421,524357,590059,459014,524381,524317,589979,459030,524413,524349,590043,459022,524397,524333,590011,524301,524429,524365,590075,459009,524371,524307,524571,459025,524403,524339,590023,459017,524387,524323,589991,524291,524419,524355,590055,459013,524379,524315,589975,459029,524411,524347,590039,459021,524395,524331,590007,524299,524427,524363,590071,459011,524375,524311,524575,459027,524407,524343,590031,459019,524391,524327,589999,524295,524423,524359,590063,459015,524383,524319,589983,459031,524415,524351,590047,459023,524399,524335,590015,524303,524431,524367,590079]),9],o=[new Uint32Array([327680,327696,327688,327704,327684,327700,327692,327708,327682,327698,327690,327706,327686,327702,327694,0,327681,327697,327689,327705,327685,327701,327693,327709,327683,327699,327691,327707,327687,327703,327695,0]),5];return(e.prototype=Object.create(Ft.prototype)).getBits=function(e){for(var A,r=this.codeSize,n=this.codeBuf,i=this.bytes,o=this.bytesPos;r<e;)void 0===(A=i[o++])&&t(\"Bad encoding in flate stream\"),n|=A<<r,r+=8;return A=n&(1<<e)-1,this.codeBuf=n>>e,this.codeSize=r-=e,this.bytesPos=o,A},e.prototype.getCode=function(e){for(var A=e[0],r=e[1],n=this.codeSize,i=this.codeBuf,o=this.bytes,a=this.bytesPos;n<r;){var s;void 0===(s=o[a++])&&t(\"Bad encoding in flate stream\"),i|=s<<n,n+=8}var c=A[i&(1<<r)-1],l=c>>16,u=65535&c;return(0==n||n<l||0==l)&&t(\"Bad encoding in flate stream\"),this.codeBuf=i>>l,this.codeSize=n-l,this.bytesPos=a,u},e.prototype.generateHuffmanTable=function(t){for(var e=t.length,A=0,r=0;r<e;++r)t[r]>A&&(A=t[r]);for(var n=1<<A,i=new Uint32Array(n),o=1,a=0,s=2;o<=A;++o,a<<=1,s<<=1)for(var c=0;c<e;++c)if(t[c]==o){var l=0,u=a;for(r=0;r<o;++r)l=l<<1|1&u,u>>=1;for(r=l;r<n;r+=s)i[r]=o<<16|c;++a}return[i,A]},e.prototype.readBlock=function(){function e(t,e,A,r,n){for(var i=t.getBits(A)+r;0<i--;)e[f++]=n}var a=this.getBits(3);if(1&a&&(this.eof=!0),0!=(a>>=1)){var s,c;if(1==a)s=i,c=o;else if(2==a){for(var l=this.getBits(5)+257,u=this.getBits(5)+1,h=this.getBits(4)+4,d=Array(A.length),f=0;f<h;)d[A[f++]]=this.getBits(3);for(var p=this.generateHuffmanTable(d),g=0,B=(f=0,l+u),w=new Array(B);f<B;){var m=this.getCode(p);16==m?e(this,w,2,3,g):17==m?e(this,w,3,3,g=0):18==m?e(this,w,7,11,g=0):w[f++]=g=m}s=this.generateHuffmanTable(w.slice(0,l)),c=this.generateHuffmanTable(w.slice(l,B))}else t(\"Unknown block type in flate stream\");for(var y=(_=this.buffer)?_.length:0,v=this.bufferLength;;){var Q=this.getCode(s);if(Q<256)y<=v+1&&(y=(_=this.ensureBuffer(v+1)).length),_[v++]=Q;else{if(256==Q)return void(this.bufferLength=v);var C=(Q=r[Q-=257])>>16;0<C&&(C=this.getBits(C)),g=(65535&Q)+C,Q=this.getCode(c),0<(C=(Q=n[Q])>>16)&&(C=this.getBits(C));var U=(65535&Q)+C;y<=v+g&&(y=(_=this.ensureBuffer(v+g)).length);for(var b=0;b<g;++b,++v)_[v]=_[v-U]}}}else{var F,E=this.bytes,x=this.bytesPos;void 0===(F=E[x++])&&t(\"Bad block header in flate stream\");var H=F;void 0===(F=E[x++])&&t(\"Bad block header in flate stream\"),H|=F<<8,void 0===(F=E[x++])&&t(\"Bad block header in flate stream\");var I=F;void 0===(F=E[x++])&&t(\"Bad block header in flate stream\"),(I|=F<<8)!=(65535&~H)&&t(\"Bad uncompressed block length in flate stream\"),this.codeBuf=0,this.codeSize=0;var S=this.bufferLength,_=this.ensureBuffer(S+H),T=S+H;this.bufferLength=T;for(var N=S;N<T;++N){if(void 0===(F=E[x++])){this.eof=!0;break}_[N]=F}this.bytesPos=x}},e}}();return function(t){if(\"object\"!=typeof t.console){t.console={};for(var e,A,r=t.console,n=function(){},i=[\"memory\"],o=\"assert,clear,count,debug,dir,dirxml,error,exception,group,groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn\".split(\",\");e=i.pop();)r[e]||(r[e]={});for(;A=o.pop();)r[A]||(r[A]=n)}var a,s,c,l,u=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";void 0===t.btoa&&(t.btoa=function(t){var e,A,r,n,i,o=0,a=0,s=\"\",c=[];if(!t)return t;for(;e=(i=t.charCodeAt(o++)<<16|t.charCodeAt(o++)<<8|t.charCodeAt(o++))>>18&63,A=i>>12&63,r=i>>6&63,n=63&i,c[a++]=u.charAt(e)+u.charAt(A)+u.charAt(r)+u.charAt(n),o<t.length;);s=c.join(\"\");var l=t.length%3;return(l?s.slice(0,l-3):s)+\"===\".slice(l||3)}),void 0===t.atob&&(t.atob=function(t){var e,A,r,n,i,o,a=0,s=0,c=[];if(!t)return t;for(t+=\"\";e=(o=u.indexOf(t.charAt(a++))<<18|u.indexOf(t.charAt(a++))<<12|(n=u.indexOf(t.charAt(a++)))<<6|(i=u.indexOf(t.charAt(a++))))>>16&255,A=o>>8&255,r=255&o,c[s++]=64==n?String.fromCharCode(e):64==i?String.fromCharCode(e,A):String.fromCharCode(e,A,r),a<t.length;);return c.join(\"\")}),Array.prototype.map||(Array.prototype.map=function(t){if(null==this||\"function\"!=typeof t)throw new TypeError;for(var e=Object(this),A=e.length>>>0,r=new Array(A),n=1<arguments.length?arguments[1]:void 0,i=0;i<A;i++)i in e&&(r[i]=t.call(n,e[i],i,e));return r}),Array.isArray||(Array.isArray=function(t){return\"[object Array]\"===Object.prototype.toString.call(t)}),Array.prototype.forEach||(Array.prototype.forEach=function(t,e){if(null==this||\"function\"!=typeof t)throw new TypeError;for(var A=Object(this),r=A.length>>>0,n=0;n<r;n++)n in A&&t.call(e,A[n],n,A)}),Object.keys||(Object.keys=(a=Object.prototype.hasOwnProperty,s=!{toString:null}.propertyIsEnumerable(\"toString\"),l=(c=[\"toString\",\"toLocaleString\",\"valueOf\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"constructor\"]).length,function(t){if(\"object\"!=typeof t&&(\"function\"!=typeof t||null===t))throw new TypeError;var e,A,r=[];for(e in t)a.call(t,e)&&r.push(e);if(s)for(A=0;A<l;A++)a.call(t,c[A])&&r.push(c[A]);return r})),\"function\"!=typeof Object.assign&&(Object.assign=function(t){if(null==t)throw new TypeError(\"Cannot convert undefined or null to object\");t=Object(t);for(var e=1;e<arguments.length;e++){var A=arguments[e];if(null!=A)for(var r in A)Object.prototype.hasOwnProperty.call(A,r)&&(t[r]=A[r])}return t}),String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^\\s+|\\s+$/g,\"\")}),String.prototype.trimLeft||(String.prototype.trimLeft=function(){return this.replace(/^\\s+/g,\"\")}),String.prototype.trimRight||(String.prototype.trimRight=function(){return this.replace(/\\s+$/g,\"\")})}(\"undefined\"!=typeof self&&self||\"undefined\"!=typeof window&&window||void 0!==r&&r||Function('return typeof this === \"object\" && this.content')()||Function(\"return this\")()),st}()}),i=(n.jsPDF,n.saveAs,n.GifWriter,n.GifReader,A(function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0});e.PATH={VECTOR:0,BEZIER_CURVE:1,CIRCLE:2}}));e(i);i.PATH;var o=A(function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0});var A=function(){return function(t,e){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return function(t,e){var A=[],r=!0,n=!1,i=void 0;try{for(var o,a=t[Symbol.iterator]();!(r=(o=a.next()).done)&&(A.push(o.value),!e||A.length!==e);r=!0);}catch(t){n=!0,i=t}finally{try{!r&&a.return&&a.return()}finally{if(n)throw i}}return A}(t,e);throw new TypeError(\"Invalid attempt to destructure non-iterable instance\")}}(),r=function(){function t(t,e){for(var A=0;A<e.length;A++){var r=e[A];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,A,r){return A&&t(e.prototype,A),r&&t(e,r),e}}(),n=/^#([a-f0-9]{3})$/i,i=function(t){var e=t.match(n);return!!e&&[parseInt(e[1][0]+e[1][0],16),parseInt(e[1][1]+e[1][1],16),parseInt(e[1][2]+e[1][2],16),null]},o=/^#([a-f0-9]{6})$/i,a=function(t){var e=t.match(o);return!!e&&[parseInt(e[1].substring(0,2),16),parseInt(e[1].substring(2,4),16),parseInt(e[1].substring(4,6),16),null]},s=/^rgb\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*\\)$/,c=function(t){var e=t.match(s);return!!e&&[Number(e[1]),Number(e[2]),Number(e[3]),null]},l=/^rgba\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d?\\.?\\d+)\\s*\\)$/,u=function(t){var e=t.match(l);return!!(e&&e.length>4)&&[Number(e[1]),Number(e[2]),Number(e[3]),Number(e[4])]},h=function(t){return[Math.min(t[0],255),Math.min(t[1],255),Math.min(t[2],255),t.length>3?t[3]:null]},d=function(t){var e=p[t.toLowerCase()];return e||!1},f=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t);var r=Array.isArray(e)?h(e):i(e)||c(e)||u(e)||d(e)||a(e)||[0,0,0,null],n=A(r,4),o=n[0],s=n[1],l=n[2],f=n[3];this.r=o,this.g=s,this.b=l,this.a=f}return r(t,[{key:\"isTransparent\",value:function(){return 0===this.a}},{key:\"toString\",value:function(){return null!==this.a&&1!==this.a?\"rgba(\"+this.r+\",\"+this.g+\",\"+this.b+\",\"+this.a+\")\":\"rgb(\"+this.r+\",\"+this.g+\",\"+this.b+\")\"}}]),t}();e.default=f;var p={transparent:[0,0,0,0],aliceblue:[240,248,255,null],antiquewhite:[250,235,215,null],aqua:[0,255,255,null],aquamarine:[127,255,212,null],azure:[240,255,255,null],beige:[245,245,220,null],bisque:[255,228,196,null],black:[0,0,0,null],blanchedalmond:[255,235,205,null],blue:[0,0,255,null],blueviolet:[138,43,226,null],brown:[165,42,42,null],burlywood:[222,184,135,null],cadetblue:[95,158,160,null],chartreuse:[127,255,0,null],chocolate:[210,105,30,null],coral:[255,127,80,null],cornflowerblue:[100,149,237,null],cornsilk:[255,248,220,null],crimson:[220,20,60,null],cyan:[0,255,255,null],darkblue:[0,0,139,null],darkcyan:[0,139,139,null],darkgoldenrod:[184,134,11,null],darkgray:[169,169,169,null],darkgreen:[0,100,0,null],darkgrey:[169,169,169,null],darkkhaki:[189,183,107,null],darkmagenta:[139,0,139,null],darkolivegreen:[85,107,47,null],darkorange:[255,140,0,null],darkorchid:[153,50,204,null],darkred:[139,0,0,null],darksalmon:[233,150,122,null],darkseagreen:[143,188,143,null],darkslateblue:[72,61,139,null],darkslategray:[47,79,79,null],darkslategrey:[47,79,79,null],darkturquoise:[0,206,209,null],darkviolet:[148,0,211,null],deeppink:[255,20,147,null],deepskyblue:[0,191,255,null],dimgray:[105,105,105,null],dimgrey:[105,105,105,null],dodgerblue:[30,144,255,null],firebrick:[178,34,34,null],floralwhite:[255,250,240,null],forestgreen:[34,139,34,null],fuchsia:[255,0,255,null],gainsboro:[220,220,220,null],ghostwhite:[248,248,255,null],gold:[255,215,0,null],goldenrod:[218,165,32,null],gray:[128,128,128,null],green:[0,128,0,null],greenyellow:[173,255,47,null],grey:[128,128,128,null],honeydew:[240,255,240,null],hotpink:[255,105,180,null],indianred:[205,92,92,null],indigo:[75,0,130,null],ivory:[255,255,240,null],khaki:[240,230,140,null],lavender:[230,230,250,null],lavenderblush:[255,240,245,null],lawngreen:[124,252,0,null],lemonchiffon:[255,250,205,null],lightblue:[173,216,230,null],lightcoral:[240,128,128,null],lightcyan:[224,255,255,null],lightgoldenrodyellow:[250,250,210,null],lightgray:[211,211,211,null],lightgreen:[144,238,144,null],lightgrey:[211,211,211,null],lightpink:[255,182,193,null],lightsalmon:[255,160,122,null],lightseagreen:[32,178,170,null],lightskyblue:[135,206,250,null],lightslategray:[119,136,153,null],lightslategrey:[119,136,153,null],lightsteelblue:[176,196,222,null],lightyellow:[255,255,224,null],lime:[0,255,0,null],limegreen:[50,205,50,null],linen:[250,240,230,null],magenta:[255,0,255,null],maroon:[128,0,0,null],mediumaquamarine:[102,205,170,null],mediumblue:[0,0,205,null],mediumorchid:[186,85,211,null],mediumpurple:[147,112,219,null],mediumseagreen:[60,179,113,null],mediumslateblue:[123,104,238,null],mediumspringgreen:[0,250,154,null],mediumturquoise:[72,209,204,null],mediumvioletred:[199,21,133,null],midnightblue:[25,25,112,null],mintcream:[245,255,250,null],mistyrose:[255,228,225,null],moccasin:[255,228,181,null],navajowhite:[255,222,173,null],navy:[0,0,128,null],oldlace:[253,245,230,null],olive:[128,128,0,null],olivedrab:[107,142,35,null],orange:[255,165,0,null],orangered:[255,69,0,null],orchid:[218,112,214,null],palegoldenrod:[238,232,170,null],palegreen:[152,251,152,null],paleturquoise:[175,238,238,null],palevioletred:[219,112,147,null],papayawhip:[255,239,213,null],peachpuff:[255,218,185,null],peru:[205,133,63,null],pink:[255,192,203,null],plum:[221,160,221,null],powderblue:[176,224,230,null],purple:[128,0,128,null],rebeccapurple:[102,51,153,null],red:[255,0,0,null],rosybrown:[188,143,143,null],royalblue:[65,105,225,null],saddlebrown:[139,69,19,null],salmon:[250,128,114,null],sandybrown:[244,164,96,null],seagreen:[46,139,87,null],seashell:[255,245,238,null],sienna:[160,82,45,null],silver:[192,192,192,null],skyblue:[135,206,235,null],slateblue:[106,90,205,null],slategray:[112,128,144,null],slategrey:[112,128,144,null],snow:[255,250,250,null],springgreen:[0,255,127,null],steelblue:[70,130,180,null],tan:[210,180,140,null],teal:[0,128,128,null],thistle:[216,191,216,null],tomato:[255,99,71,null],turquoise:[64,224,208,null],violet:[238,130,238,null],wheat:[245,222,179,null],white:[255,255,255,null],whitesmoke:[245,245,245,null],yellow:[255,255,0,null],yellowgreen:[154,205,50,null]};e.TRANSPARENT=new f([0,0,0,0])});e(o);o.TRANSPARENT;var a=A(function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.parseTextDecoration=e.TEXT_DECORATION_LINE=e.TEXT_DECORATION=e.TEXT_DECORATION_STYLE=void 0;var A=function(t){return t&&t.__esModule?t:{default:t}}(o),r=e.TEXT_DECORATION_STYLE={SOLID:0,DOUBLE:1,DOTTED:2,DASHED:3,WAVY:4},n=e.TEXT_DECORATION={NONE:null},i=e.TEXT_DECORATION_LINE={UNDERLINE:1,OVERLINE:2,LINE_THROUGH:3,BLINK:4},a=function(t){switch(t){case\"underline\":return i.UNDERLINE;case\"overline\":return i.OVERLINE;case\"line-through\":return i.LINE_THROUGH}return i.BLINK};e.parseTextDecoration=function(t){var e=function(t){return\"none\"===t?null:t.split(\" \").map(a)}(t.textDecorationLine?t.textDecorationLine:t.textDecoration);if(null===e)return n.NONE;return{textDecorationLine:e,textDecorationColor:t.textDecorationColor?new A.default(t.textDecorationColor):null,textDecorationStyle:function(t){switch(t){case\"double\":return r.DOUBLE;case\"dotted\":return r.DOTTED;case\"dashed\":return r.DASHED;case\"wavy\":return r.WAVY}return r.SOLID}(t.textDecorationStyle)}}});e(a);a.parseTextDecoration,a.TEXT_DECORATION_LINE,a.TEXT_DECORATION,a.TEXT_DECORATION_STYLE;var s=A(function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0});var A=function(){function t(t,e){for(var A=0;A<e.length;A++){var r=e[A];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,A,r){return A&&t(e.prototype,A),r&&t(e,r),e}}(),r=function(t,e){var A=Math.max.apply(null,t.colorStops.map(function(t){return t.stop})),r=1/Math.max(1,A);t.colorStops.forEach(function(t){e.addColorStop(r*t.stop,t.color.toString())})},n=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.canvas=e||document.createElement(\"canvas\")}return A(t,[{key:\"render\",value:function(t){this.ctx=this.canvas.getContext(\"2d\"),this.options=t,this.canvas.width=Math.floor(t.width*t.scale),this.canvas.height=Math.floor(t.height*t.scale),this.canvas.style.width=t.width+\"px\",this.canvas.style.height=t.height+\"px\",this.ctx.scale(this.options.scale,this.options.scale),this.ctx.translate(-t.x,-t.y),this.ctx.textBaseline=\"bottom\",t.logger.log(\"Canvas renderer initialized (\"+t.width+\"x\"+t.height+\" at \"+t.x+\",\"+t.y+\") with scale \"+this.options.scale)}},{key:\"clip\",value:function(t,e){var A=this;t.length&&(this.ctx.save(),t.forEach(function(t){A.path(t),A.ctx.clip()})),e(),t.length&&this.ctx.restore()}},{key:\"drawImage\",value:function(t,e,A){this.ctx.drawImage(t,e.left,e.top,e.width,e.height,A.left,A.top,A.width,A.height)}},{key:\"drawShape\",value:function(t,e){this.path(t),this.ctx.fillStyle=e.toString(),this.ctx.fill()}},{key:\"fill\",value:function(t){this.ctx.fillStyle=t.toString(),this.ctx.fill()}},{key:\"getTarget\",value:function(){return this.canvas.getContext(\"2d\").setTransform(1,0,0,1,0,0),Promise.resolve(this.canvas)}},{key:\"path\",value:function(t){var e=this;this.ctx.beginPath(),Array.isArray(t)?t.forEach(function(t,A){var r=t.type===i.PATH.VECTOR?t:t.start;0===A?e.ctx.moveTo(r.x,r.y):e.ctx.lineTo(r.x,r.y),t.type===i.PATH.BEZIER_CURVE&&e.ctx.bezierCurveTo(t.startControl.x,t.startControl.y,t.endControl.x,t.endControl.y,t.end.x,t.end.y)}):this.ctx.arc(t.x+t.radius,t.y+t.radius,t.radius,0,2*Math.PI,!0),this.ctx.closePath()}},{key:\"rectangle\",value:function(t,e,A,r,n){this.ctx.fillStyle=n.toString(),this.ctx.fillRect(t,e,A,r)}},{key:\"renderLinearGradient\",value:function(t,e){var A=this.ctx.createLinearGradient(t.left+e.direction.x1,t.top+e.direction.y1,t.left+e.direction.x0,t.top+e.direction.y0);r(e,A),this.ctx.fillStyle=A,this.ctx.fillRect(t.left,t.top,t.width,t.height)}},{key:\"renderRadialGradient\",value:function(t,e){var A=this,n=t.left+e.center.x,i=t.top+e.center.y,o=this.ctx.createRadialGradient(n,i,0,n,i,e.radius.x);if(o)if(r(e,o),this.ctx.fillStyle=o,e.radius.x!==e.radius.y){var a=t.left+.5*t.width,s=t.top+.5*t.height,c=e.radius.y/e.radius.x,l=1/c;this.transform(a,s,[1,0,0,c,0,0],function(){return A.ctx.fillRect(t.left,l*(t.top-s)+s,t.width,t.height*l)})}else this.ctx.fillRect(t.left,t.top,t.width,t.height)}},{key:\"renderRepeat\",value:function(t,e,A,r,n){this.path(t),this.ctx.fillStyle=this.ctx.createPattern(this.resizeImage(e,A),\"repeat\"),this.ctx.translate(r,n),this.ctx.fill(),this.ctx.translate(-r,-n)}},{key:\"renderTextNode\",value:function(t,e,A,r,n){var i=this;this.ctx.font=[A.fontStyle,A.fontVariant,A.fontWeight,A.fontSize,A.fontFamily].join(\" \"),t.forEach(function(t){if(i.ctx.fillStyle=e.toString(),n&&t.text.trim().length?n.slice(0).reverse().forEach(function(e){i.ctx.shadowColor=e.color.toString(),i.ctx.shadowOffsetX=e.offsetX*i.options.scale,i.ctx.shadowOffsetY=e.offsetY*i.options.scale,i.ctx.shadowBlur=e.blur,i.ctx.fillText(t.text,t.bounds.left,t.bounds.top+t.bounds.height)}):i.ctx.fillText(t.text,t.bounds.left,t.bounds.top+t.bounds.height),null!==r){var o=r.textDecorationColor||e;r.textDecorationLine.forEach(function(e){switch(e){case a.TEXT_DECORATION_LINE.UNDERLINE:var r=i.options.fontMetrics.getMetrics(A).baseline;i.rectangle(t.bounds.left,Math.round(t.bounds.top+r),t.bounds.width,1,o);break;case a.TEXT_DECORATION_LINE.OVERLINE:i.rectangle(t.bounds.left,Math.round(t.bounds.top),t.bounds.width,1,o);break;case a.TEXT_DECORATION_LINE.LINE_THROUGH:var n=i.options.fontMetrics.getMetrics(A).middle;i.rectangle(t.bounds.left,Math.ceil(t.bounds.top+n),t.bounds.width,1,o)}})}})}},{key:\"resizeImage\",value:function(t,e){if(t.width===e.width&&t.height===e.height)return t;var A=this.canvas.ownerDocument.createElement(\"canvas\");A.width=e.width,A.height=e.height;return A.getContext(\"2d\").drawImage(t,0,0,t.width,t.height,0,0,e.width,e.height),A}},{key:\"setOpacity\",value:function(t){this.ctx.globalAlpha=t}},{key:\"transform\",value:function(t,e,A,r){this.ctx.save(),this.ctx.translate(t,e),this.ctx.transform(A[0],A[1],A[2],A[3],A[4],A[5]),this.ctx.translate(-t,-e),r(),this.ctx.restore()}}]),t}();e.default=n});e(s);var c=A(function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0});var A=function(){function t(t,e){for(var A=0;A<e.length;A++){var r=e[A];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,A,r){return A&&t(e.prototype,A),r&&t(e,r),e}}(),r=function(){function t(e,A,r){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.enabled=\"undefined\"!=typeof window&&e,this.start=r||Date.now(),this.id=A}return A(t,[{key:\"child\",value:function(e){return new t(this.enabled,e,this.start)}},{key:\"log\",value:function(){if(this.enabled&&window.console&&window.console.log){for(var t=arguments.length,e=Array(t),A=0;A<t;A++)e[A]=arguments[A];Function.prototype.bind.call(window.console.log,window.console).apply(window.console,[Date.now()-this.start+\"ms\",this.id?\"html2canvas (\"+this.id+\"):\":\"html2canvas:\"].concat([].slice.call(e,0)))}}},{key:\"error\",value:function(){if(this.enabled&&window.console&&window.console.error){for(var t=arguments.length,e=Array(t),A=0;A<t;A++)e[A]=arguments[A];Function.prototype.bind.call(window.console.error,window.console).apply(window.console,[Date.now()-this.start+\"ms\",this.id?\"html2canvas (\"+this.id+\"):\":\"html2canvas:\"].concat([].slice.call(e,0)))}}}]),t}();e.default=r});e(c);var l=A(function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0});e.contains=function(t,e){return 0!=(t&e)},e.distance=function(t,e){return Math.sqrt(t*t+e*e)},e.copyCSSStyles=function(t,e){for(var A=t.length-1;A>=0;A--){var r=t.item(A);\"content\"!==r&&e.style.setProperty(r,t.getPropertyValue(r))}return e},e.SMALL_IMAGE=\"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\"});e(l);l.contains,l.distance,l.copyCSSStyles,l.SMALL_IMAGE;var u=A(function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.calculateLengthFromValueWithUnit=e.LENGTH_TYPE=void 0;var A=function(){function t(t,e){for(var A=0;A<e.length;A++){var r=e[A];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,A,r){return A&&t(e.prototype,A),r&&t(e,r),e}}(),r=(function(t){t&&t.__esModule}(G),e.LENGTH_TYPE={PX:0,PERCENTAGE:1}),n=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.type=\"%\"===e.substr(e.length-1)?r.PERCENTAGE:r.PX;var A=parseFloat(e);this.value=isNaN(A)?0:A}return A(t,[{key:\"isPercentage\",value:function(){return this.type===r.PERCENTAGE}},{key:\"getAbsoluteValue\",value:function(t){return this.isPercentage()?t*(this.value/100):this.value}}],[{key:\"create\",value:function(e){return new t(e)}}]),t}();e.default=n;e.calculateLengthFromValueWithUnit=function(t,e,A){switch(A){case\"px\":case\"%\":return new n(e+A);case\"em\":case\"rem\":var r=new n(e);return r.value*=\"em\"===A?parseFloat(t.style.font.fontSize):function t(e){var A=e.parent;return A?t(A):parseFloat(e.style.font.fontSize)}(t),r;default:return new n(\"0\")}}});e(u);u.calculateLengthFromValueWithUnit,u.LENGTH_TYPE;var h=A(function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0});e.default=function t(e,A){!function(e,A){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this),this.width=e,this.height=A}});e(h);var d=A(function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0});e.default=function t(e,A){!function(e,A){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this),this.type=i.PATH.VECTOR,this.x=e,this.y=A}});e(d);var f=A(function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0});var A=function(){function t(t,e){for(var A=0;A<e.length;A++){var r=e[A];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,A,r){return A&&t(e.prototype,A),r&&t(e,r),e}}(),r=function(t){return t&&t.__esModule?t:{default:t}}(d),n=function(t,e,A){return new r.default(t.x+(e.x-t.x)*A,t.y+(e.y-t.y)*A)},o=function(){function t(e,A,r,n){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.type=i.PATH.BEZIER_CURVE,this.start=e,this.startControl=A,this.endControl=r,this.end=n}return A(t,[{key:\"subdivide\",value:function(e,A){var r=n(this.start,this.startControl,e),i=n(this.startControl,this.endControl,e),o=n(this.endControl,this.end,e),a=n(r,i,e),s=n(i,o,e),c=n(a,s,e);return A?new t(this.start,r,a,c):new t(c,s,o,this.end)}},{key:\"reverse\",value:function(){return new t(this.end,this.endControl,this.startControl,this.start)}}]),t}();e.default=o});e(f);var p=A(function(t,e){function A(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,\"__esModule\",{value:!0}),e.parseBoundCurves=e.calculatePaddingBoxPath=e.calculateBorderBoxPath=e.parsePathForBorder=e.parseDocumentSize=e.calculateContentBox=e.calculatePaddingBox=e.parseBounds=e.Bounds=void 0;var r=function(){function t(t,e){for(var A=0;A<e.length;A++){var r=e[A];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,A,r){return A&&t(e.prototype,A),r&&t(e,r),e}}(),n=A(d),i=A(f),o=e.Bounds=function(){function t(e,A,r,n){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.left=e,this.top=A,this.width=r,this.height=n}return r(t,null,[{key:\"fromClientRect\",value:function(e,A,r){return new t(e.left+A,e.top+r,e.width,e.height)}}]),t}(),a=(e.parseBounds=function(t,e,A){return o.fromClientRect(t.getBoundingClientRect(),e,A)},e.calculatePaddingBox=function(t,e){return new o(t.left+e[3].borderWidth,t.top+e[0].borderWidth,t.width-(e[1].borderWidth+e[3].borderWidth),t.height-(e[0].borderWidth+e[2].borderWidth))},e.calculateContentBox=function(t,e,A){var r=e[0].value,n=e[1].value,i=e[2].value,a=e[3].value;return new o(t.left+a+A[3].borderWidth,t.top+r+A[0].borderWidth,t.width-(A[1].borderWidth+A[3].borderWidth+a+n),t.height-(A[0].borderWidth+A[2].borderWidth+r+i))},e.parseDocumentSize=function(t){var e=t.body,A=t.documentElement;if(!e||!A)throw new Error(\"\");var r=Math.max(Math.max(e.scrollWidth,A.scrollWidth),Math.max(e.offsetWidth,A.offsetWidth),Math.max(e.clientWidth,A.clientWidth)),n=Math.max(Math.max(e.scrollHeight,A.scrollHeight),Math.max(e.offsetHeight,A.offsetHeight),Math.max(e.clientHeight,A.clientHeight));return new o(0,0,r,n)},e.parsePathForBorder=function(t,e){switch(e){case 0:return a(t.topLeftOuter,t.topLeftInner,t.topRightOuter,t.topRightInner);case 1:return a(t.topRightOuter,t.topRightInner,t.bottomRightOuter,t.bottomRightInner);case 2:return a(t.bottomRightOuter,t.bottomRightInner,t.bottomLeftOuter,t.bottomLeftInner);case 3:default:return a(t.bottomLeftOuter,t.bottomLeftInner,t.topLeftOuter,t.topLeftInner)}},function(t,e,A,r){var n=[];return t instanceof i.default?n.push(t.subdivide(.5,!1)):n.push(t),A instanceof i.default?n.push(A.subdivide(.5,!0)):n.push(A),r instanceof i.default?n.push(r.subdivide(.5,!0).reverse()):n.push(r),e instanceof i.default?n.push(e.subdivide(.5,!1).reverse()):n.push(e),n}),s=(e.calculateBorderBoxPath=function(t){return[t.topLeftOuter,t.topRightOuter,t.bottomRightOuter,t.bottomLeftOuter]},e.calculatePaddingBoxPath=function(t){return[t.topLeftInner,t.topRightInner,t.bottomRightInner,t.bottomLeftInner]},e.parseBoundCurves=function(t,e,A){var r=A[s.TOP_LEFT][0].getAbsoluteValue(t.width),i=A[s.TOP_LEFT][1].getAbsoluteValue(t.height),o=A[s.TOP_RIGHT][0].getAbsoluteValue(t.width),a=A[s.TOP_RIGHT][1].getAbsoluteValue(t.height),l=A[s.BOTTOM_RIGHT][0].getAbsoluteValue(t.width),u=A[s.BOTTOM_RIGHT][1].getAbsoluteValue(t.height),h=A[s.BOTTOM_LEFT][0].getAbsoluteValue(t.width),d=A[s.BOTTOM_LEFT][1].getAbsoluteValue(t.height),f=[];f.push((r+o)/t.width),f.push((h+l)/t.width),f.push((i+d)/t.height),f.push((a+u)/t.height);var p=Math.max.apply(Math,f);p>1&&(r/=p,i/=p,o/=p,a/=p,l/=p,u/=p,h/=p,d/=p);var g=t.width-o,B=t.height-u,w=t.width-l,m=t.height-d;return{topLeftOuter:r>0||i>0?c(t.left,t.top,r,i,s.TOP_LEFT):new n.default(t.left,t.top),topLeftInner:r>0||i>0?c(t.left+e[3].borderWidth,t.top+e[0].borderWidth,Math.max(0,r-e[3].borderWidth),Math.max(0,i-e[0].borderWidth),s.TOP_LEFT):new n.default(t.left+e[3].borderWidth,t.top+e[0].borderWidth),topRightOuter:o>0||a>0?c(t.left+g,t.top,o,a,s.TOP_RIGHT):new n.default(t.left+t.width,t.top),topRightInner:o>0||a>0?c(t.left+Math.min(g,t.width+e[3].borderWidth),t.top+e[0].borderWidth,g>t.width+e[3].borderWidth?0:o-e[3].borderWidth,a-e[0].borderWidth,s.TOP_RIGHT):new n.default(t.left+t.width-e[1].borderWidth,t.top+e[0].borderWidth),bottomRightOuter:l>0||u>0?c(t.left+w,t.top+B,l,u,s.BOTTOM_RIGHT):new n.default(t.left+t.width,t.top+t.height),bottomRightInner:l>0||u>0?c(t.left+Math.min(w,t.width-e[3].borderWidth),t.top+Math.min(B,t.height+e[0].borderWidth),Math.max(0,l-e[1].borderWidth),u-e[2].borderWidth,s.BOTTOM_RIGHT):new n.default(t.left+t.width-e[1].borderWidth,t.top+t.height-e[2].borderWidth),bottomLeftOuter:h>0||d>0?c(t.left,t.top+m,h,d,s.BOTTOM_LEFT):new n.default(t.left,t.top+t.height),bottomLeftInner:h>0||d>0?c(t.left+e[3].borderWidth,t.top+m,Math.max(0,h-e[3].borderWidth),d-e[2].borderWidth,s.BOTTOM_LEFT):new n.default(t.left+e[3].borderWidth,t.top+t.height-e[2].borderWidth)}},{TOP_LEFT:0,TOP_RIGHT:1,BOTTOM_RIGHT:2,BOTTOM_LEFT:3}),c=function(t,e,A,r,o){var a=(Math.sqrt(2)-1)/3*4,c=A*a,l=r*a,u=t+A,h=e+r;switch(o){case s.TOP_LEFT:return new i.default(new n.default(t,h),new n.default(t,h-l),new n.default(u-c,e),new n.default(u,e));case s.TOP_RIGHT:return new i.default(new n.default(t,e),new n.default(t+c,e),new n.default(u,h-l),new n.default(u,h));case s.BOTTOM_RIGHT:return new i.default(new n.default(u,e),new n.default(u,e+l),new n.default(t+c,h),new n.default(t,h));case s.BOTTOM_LEFT:default:return new i.default(new n.default(u,h),new n.default(u-c,h),new n.default(t,e+l),new n.default(t,e))}}});e(p);p.parseBoundCurves,p.calculatePaddingBoxPath,p.calculateBorderBoxPath,p.parsePathForBorder,p.parseDocumentSize,p.calculateContentBox,p.calculatePaddingBox,p.parseBounds,p.Bounds;var g=A(function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.parsePadding=e.PADDING_SIDES=void 0;var A=function(t){return t&&t.__esModule?t:{default:t}}(u),r=(e.PADDING_SIDES={TOP:0,RIGHT:1,BOTTOM:2,LEFT:3},[\"top\",\"right\",\"bottom\",\"left\"]);e.parsePadding=function(t){return r.map(function(e){return new A.default(t.getPropertyValue(\"padding-\"+e))})}});e(g);g.parsePadding,g.PADDING_SIDES;var B=A(function(t,e){function A(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,\"__esModule\",{value:!0}),e.parseBackgroundImage=e.parseBackground=e.calculateBackgroundRepeatPath=e.calculateBackgroundPosition=e.calculateBackgroungPositioningArea=e.calculateBackgroungPaintingArea=e.calculateGradientBackgroundSize=e.calculateBackgroundSize=e.BACKGROUND_ORIGIN=e.BACKGROUND_CLIP=e.BACKGROUND_SIZE=e.BACKGROUND_REPEAT=void 0;var r=A(o),n=A(u),i=A(h),a=A(d),s=e.BACKGROUND_REPEAT={REPEAT:0,NO_REPEAT:1,REPEAT_X:2,REPEAT_Y:3},c=e.BACKGROUND_SIZE={AUTO:0,CONTAIN:1,COVER:2,LENGTH:3},l=e.BACKGROUND_CLIP={BORDER_BOX:0,PADDING_BOX:1,CONTENT_BOX:2},f=e.BACKGROUND_ORIGIN=l,B=function t(e){switch(function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),e){case\"contain\":this.size=c.CONTAIN;break;case\"cover\":this.size=c.COVER;break;case\"auto\":this.size=c.AUTO;break;default:this.value=new n.default(e)}},w=(e.calculateBackgroundSize=function(t,e,A){var r=0,n=0,o=t.size;if(o[0].size===c.CONTAIN||o[0].size===c.COVER){var a=A.width/A.height,s=e.width/e.height;return a<s!=(o[0].size===c.COVER)?new i.default(A.width,A.width/s):new i.default(A.height*s,A.height)}return o[0].value&&(r=o[0].value.getAbsoluteValue(A.width)),o[0].size===c.AUTO&&o[1].size===c.AUTO?n=e.height:o[1].size===c.AUTO?n=r/e.width*e.height:o[1].value&&(n=o[1].value.getAbsoluteValue(A.height)),o[0].size===c.AUTO&&(r=n/e.height*e.width),new i.default(r,n)},e.calculateGradientBackgroundSize=function(t,e){var A=t.size,r=A[0].value?A[0].value.getAbsoluteValue(e.width):e.width,n=A[1].value?A[1].value.getAbsoluteValue(e.height):A[0].value?r:e.height;return new i.default(r,n)},new B(\"auto\")),m=(e.calculateBackgroungPaintingArea=function(t,e){switch(e){case l.BORDER_BOX:return(0,p.calculateBorderBoxPath)(t);case l.PADDING_BOX:default:return(0,p.calculatePaddingBoxPath)(t)}},e.calculateBackgroungPositioningArea=function(t,e,A,r){var n=(0,p.calculatePaddingBox)(e,r);switch(t){case f.BORDER_BOX:return e;case f.CONTENT_BOX:var i=A[g.PADDING_SIDES.LEFT].getAbsoluteValue(e.width),o=A[g.PADDING_SIDES.RIGHT].getAbsoluteValue(e.width),a=A[g.PADDING_SIDES.TOP].getAbsoluteValue(e.width),s=A[g.PADDING_SIDES.BOTTOM].getAbsoluteValue(e.width);return new p.Bounds(n.left+i,n.top+a,n.width-i-o,n.height-a-s);case f.PADDING_BOX:default:return n}},e.calculateBackgroundPosition=function(t,e,A){return new a.default(t[0].getAbsoluteValue(A.width-e.width),t[1].getAbsoluteValue(A.height-e.height))},e.calculateBackgroundRepeatPath=function(t,e,A,r,n){switch(t.repeat){case s.REPEAT_X:return[new a.default(Math.round(n.left),Math.round(r.top+e.y)),new a.default(Math.round(n.left+n.width),Math.round(r.top+e.y)),new a.default(Math.round(n.left+n.width),Math.round(A.height+r.top+e.y)),new a.default(Math.round(n.left),Math.round(A.height+r.top+e.y))];case s.REPEAT_Y:return[new a.default(Math.round(r.left+e.x),Math.round(n.top)),new a.default(Math.round(r.left+e.x+A.width),Math.round(n.top)),new a.default(Math.round(r.left+e.x+A.width),Math.round(n.height+n.top)),new a.default(Math.round(r.left+e.x),Math.round(n.height+n.top))];case s.NO_REPEAT:return[new a.default(Math.round(r.left+e.x),Math.round(r.top+e.y)),new a.default(Math.round(r.left+e.x+A.width),Math.round(r.top+e.y)),new a.default(Math.round(r.left+e.x+A.width),Math.round(r.top+e.y+A.height)),new a.default(Math.round(r.left+e.x),Math.round(r.top+e.y+A.height))];default:return[new a.default(Math.round(n.left),Math.round(n.top)),new a.default(Math.round(n.left+n.width),Math.round(n.top)),new a.default(Math.round(n.left+n.width),Math.round(n.height+n.top)),new a.default(Math.round(n.left),Math.round(n.height+n.top))]}},e.parseBackground=function(t,e){return{backgroundColor:new r.default(t.backgroundColor),backgroundImage:v(t,e),backgroundClip:m(t.backgroundClip),backgroundOrigin:y(t.backgroundOrigin)}},function(t){switch(t){case\"padding-box\":return l.PADDING_BOX;case\"content-box\":return l.CONTENT_BOX}return l.BORDER_BOX}),y=function(t){switch(t){case\"padding-box\":return f.PADDING_BOX;case\"content-box\":return f.CONTENT_BOX}return f.BORDER_BOX},v=function(t,e){var A=U(t.backgroundImage).map(function(t){if(\"url\"===t.method){var A=e.loadImage(t.args[0]);t.args=A?[A]:[]}return t}),r=t.backgroundPosition.split(\",\"),n=t.backgroundRepeat.split(\",\"),i=t.backgroundSize.split(\",\");return A.map(function(t,e){var A=(i[e]||\"auto\").trim().split(\" \").map(Q),o=(r[e]||\"auto\").trim().split(\" \").map(C);return{source:t,repeat:function(t){switch(t.trim()){case\"no-repeat\":return s.NO_REPEAT;case\"repeat-x\":case\"repeat no-repeat\":return s.REPEAT_X;case\"repeat-y\":case\"no-repeat repeat\":return s.REPEAT_Y;case\"repeat\":return s.REPEAT}return s.REPEAT}(\"string\"==typeof n[e]?n[e]:n[0]),size:A.length<2?[A[0],w]:[A[0],A[1]],position:o.length<2?[o[0],o[0]]:[o[0],o[1]]}})},Q=function(t){return\"auto\"===t?w:new B(t)},C=function(t){switch(t){case\"bottom\":case\"right\":return new n.default(\"100%\");case\"left\":case\"top\":return new n.default(\"0%\");case\"auto\":return new n.default(\"0\")}return new n.default(t)},U=e.parseBackgroundImage=function(t){var e=/^\\s$/,A=[],r=[],n=\"\",i=null,o=\"\",a=0,s=0,c=function(){var t=\"\";if(n){'\"'===o.substr(0,1)&&(o=o.substr(1,o.length-2)),o&&r.push(o.trim());var e=n.indexOf(\"-\",1)+1;\"-\"===n.substr(0,1)&&e>0&&(t=n.substr(0,e).toLowerCase(),n=n.substr(e)),\"none\"!==(n=n.toLowerCase())&&A.push({prefix:t,method:n,args:r})}r=[],n=o=\"\"};return t.split(\"\").forEach(function(t){if(0!==a||!e.test(t)){switch(t){case'\"':i?i===t&&(i=null):i=t;break;case\"(\":if(i)break;if(0===a)return void(a=1);s++;break;case\")\":if(i)break;if(1===a){if(0===s)return a=0,void c();s--}break;case\",\":if(i)break;if(0===a)return void c();if(1===a&&0===s&&!n.match(/^url$/i))return r.push(o.trim()),void(o=\"\")}0===a?n+=t:o+=t}}),c(),A}});e(B);B.parseBackgroundImage,B.parseBackground,B.calculateBackgroundRepeatPath,B.calculateBackgroundPosition,B.calculateBackgroungPositioningArea,B.calculateBackgroungPaintingArea,B.calculateGradientBackgroundSize,B.calculateBackgroundSize,B.BACKGROUND_ORIGIN,B.BACKGROUND_CLIP,B.BACKGROUND_SIZE,B.BACKGROUND_REPEAT;var w=A(function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.parseBorder=e.BORDER_SIDES=e.BORDER_STYLE=void 0;var A=function(t){return t&&t.__esModule?t:{default:t}}(o),r=e.BORDER_STYLE={NONE:0,SOLID:1},n=e.BORDER_SIDES={TOP:0,RIGHT:1,BOTTOM:2,LEFT:3},i=Object.keys(n).map(function(t){return t.toLowerCase()});e.parseBorder=function(t){return i.map(function(e){var n=new A.default(t.getPropertyValue(\"border-\"+e+\"-color\")),i=function(t){switch(t){case\"none\":return r.NONE}return r.SOLID}(t.getPropertyValue(\"border-\"+e+\"-style\")),o=parseFloat(t.getPropertyValue(\"border-\"+e+\"-width\"));return{borderColor:n,borderStyle:i,borderWidth:isNaN(o)?0:o}})}});e(w);w.parseBorder,w.BORDER_SIDES,w.BORDER_STYLE;var m=A(function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.parseBorderRadius=void 0;var A=function(){return function(t,e){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return function(t,e){var A=[],r=!0,n=!1,i=void 0;try{for(var o,a=t[Symbol.iterator]();!(r=(o=a.next()).done)&&(A.push(o.value),!e||A.length!==e);r=!0);}catch(t){n=!0,i=t}finally{try{!r&&a.return&&a.return()}finally{if(n)throw i}}return A}(t,e);throw new TypeError(\"Invalid attempt to destructure non-iterable instance\")}}(),r=function(t){return t&&t.__esModule?t:{default:t}}(u),n=[\"top-left\",\"top-right\",\"bottom-right\",\"bottom-left\"];e.parseBorderRadius=function(t){return n.map(function(e){var n=t.getPropertyValue(\"border-\"+e+\"-radius\").split(\" \").map(r.default.create),i=A(n,2),o=i[0],a=i[1];return void 0===a?[o,o]:[o,a]})}});e(m);m.parseBorderRadius;var y=A(function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0});var A=e.DISPLAY={NONE:1,BLOCK:2,INLINE:4,RUN_IN:8,FLOW:16,FLOW_ROOT:32,TABLE:64,FLEX:128,GRID:256,RUBY:512,SUBGRID:1024,LIST_ITEM:2048,TABLE_ROW_GROUP:4096,TABLE_HEADER_GROUP:8192,TABLE_FOOTER_GROUP:16384,TABLE_ROW:32768,TABLE_CELL:65536,TABLE_COLUMN_GROUP:1<<17,TABLE_COLUMN:1<<18,TABLE_CAPTION:1<<19,RUBY_BASE:1<<20,RUBY_TEXT:1<<21,RUBY_BASE_CONTAINER:1<<22,RUBY_TEXT_CONTAINER:1<<23,CONTENTS:1<<24,INLINE_BLOCK:1<<25,INLINE_LIST_ITEM:1<<26,INLINE_TABLE:1<<27,INLINE_FLEX:1<<28,INLINE_GRID:1<<29},r=function(t,e){return t|function(t){switch(t){case\"block\":return A.BLOCK;case\"inline\":return A.INLINE;case\"run-in\":return A.RUN_IN;case\"flow\":return A.FLOW;case\"flow-root\":return A.FLOW_ROOT;case\"table\":return A.TABLE;case\"flex\":return A.FLEX;case\"grid\":return A.GRID;case\"ruby\":return A.RUBY;case\"subgrid\":return A.SUBGRID;case\"list-item\":return A.LIST_ITEM;case\"table-row-group\":return A.TABLE_ROW_GROUP;case\"table-header-group\":return A.TABLE_HEADER_GROUP;case\"table-footer-group\":return A.TABLE_FOOTER_GROUP;case\"table-row\":return A.TABLE_ROW;case\"table-cell\":return A.TABLE_CELL;case\"table-column-group\":return A.TABLE_COLUMN_GROUP;case\"table-column\":return A.TABLE_COLUMN;case\"table-caption\":return A.TABLE_CAPTION;case\"ruby-base\":return A.RUBY_BASE;case\"ruby-text\":return A.RUBY_TEXT;case\"ruby-base-container\":return A.RUBY_BASE_CONTAINER;case\"ruby-text-container\":return A.RUBY_TEXT_CONTAINER;case\"contents\":return A.CONTENTS;case\"inline-block\":return A.INLINE_BLOCK;case\"inline-list-item\":return A.INLINE_LIST_ITEM;case\"inline-table\":return A.INLINE_TABLE;case\"inline-flex\":return A.INLINE_FLEX;case\"inline-grid\":return A.INLINE_GRID}return A.NONE}(e)};e.parseDisplay=function(t){return t.split(\" \").reduce(r,0)}});e(y);y.DISPLAY,y.parseDisplay;var v=A(function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0});var A=e.FLOAT={NONE:0,LEFT:1,RIGHT:2,INLINE_START:3,INLINE_END:4};e.parseCSSFloat=function(t){switch(t){case\"left\":return A.LEFT;case\"right\":return A.RIGHT;case\"inline-start\":return A.INLINE_START;case\"inline-end\":return A.INLINE_END}return A.NONE}});e(v);v.FLOAT,v.parseCSSFloat;var Q=A(function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0});e.parseFont=function(t){return{fontFamily:t.fontFamily,fontSize:t.fontSize,fontStyle:t.fontStyle,fontVariant:t.fontVariant,fontWeight:function(t){switch(t){case\"normal\":return 400;case\"bold\":return 700}var e=parseInt(t,10);return isNaN(e)?400:e}(t.fontWeight)}}});e(Q);Q.parseFont;var C=A(function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0});e.parseLetterSpacing=function(t){if(\"normal\"===t)return 0;var e=parseFloat(t);return isNaN(e)?0:e}});e(C);C.parseLetterSpacing;var U=A(function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0});var A=e.LINE_BREAK={NORMAL:\"normal\",STRICT:\"strict\"};e.parseLineBreak=function(t){switch(t){case\"strict\":return A.STRICT;case\"normal\":default:return A.NORMAL}}});e(U);U.LINE_BREAK,U.parseLineBreak;var b=A(function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.parseListStyle=e.parseListStyleType=e.LIST_STYLE_TYPE=e.LIST_STYLE_POSITION=void 0;var A=e.LIST_STYLE_POSITION={INSIDE:0,OUTSIDE:1},r=e.LIST_STYLE_TYPE={NONE:-1,DISC:0,CIRCLE:1,SQUARE:2,DECIMAL:3,CJK_DECIMAL:4,DECIMAL_LEADING_ZERO:5,LOWER_ROMAN:6,UPPER_ROMAN:7,LOWER_GREEK:8,LOWER_ALPHA:9,UPPER_ALPHA:10,ARABIC_INDIC:11,ARMENIAN:12,BENGALI:13,CAMBODIAN:14,CJK_EARTHLY_BRANCH:15,CJK_HEAVENLY_STEM:16,CJK_IDEOGRAPHIC:17,DEVANAGARI:18,ETHIOPIC_NUMERIC:19,GEORGIAN:20,GUJARATI:21,GURMUKHI:22,HEBREW:22,HIRAGANA:23,HIRAGANA_IROHA:24,JAPANESE_FORMAL:25,JAPANESE_INFORMAL:26,KANNADA:27,KATAKANA:28,KATAKANA_IROHA:29,KHMER:30,KOREAN_HANGUL_FORMAL:31,KOREAN_HANJA_FORMAL:32,KOREAN_HANJA_INFORMAL:33,LAO:34,LOWER_ARMENIAN:35,MALAYALAM:36,MONGOLIAN:37,MYANMAR:38,ORIYA:39,PERSIAN:40,SIMP_CHINESE_FORMAL:41,SIMP_CHINESE_INFORMAL:42,TAMIL:43,TELUGU:44,THAI:45,TIBETAN:46,TRAD_CHINESE_FORMAL:47,TRAD_CHINESE_INFORMAL:48,UPPER_ARMENIAN:49,DISCLOSURE_OPEN:50,DISCLOSURE_CLOSED:51},n=e.parseListStyleType=function(t){switch(t){case\"disc\":return r.DISC;case\"circle\":return r.CIRCLE;case\"square\":return r.SQUARE;case\"decimal\":return r.DECIMAL;case\"cjk-decimal\":return r.CJK_DECIMAL;case\"decimal-leading-zero\":return r.DECIMAL_LEADING_ZERO;case\"lower-roman\":return r.LOWER_ROMAN;case\"upper-roman\":return r.UPPER_ROMAN;case\"lower-greek\":return r.LOWER_GREEK;case\"lower-alpha\":return r.LOWER_ALPHA;case\"upper-alpha\":return r.UPPER_ALPHA;case\"arabic-indic\":return r.ARABIC_INDIC;case\"armenian\":return r.ARMENIAN;case\"bengali\":return r.BENGALI;case\"cambodian\":return r.CAMBODIAN;case\"cjk-earthly-branch\":return r.CJK_EARTHLY_BRANCH;case\"cjk-heavenly-stem\":return r.CJK_HEAVENLY_STEM;case\"cjk-ideographic\":return r.CJK_IDEOGRAPHIC;case\"devanagari\":return r.DEVANAGARI;case\"ethiopic-numeric\":return r.ETHIOPIC_NUMERIC;case\"georgian\":return r.GEORGIAN;case\"gujarati\":return r.GUJARATI;case\"gurmukhi\":return r.GURMUKHI;case\"hebrew\":return r.HEBREW;case\"hiragana\":return r.HIRAGANA;case\"hiragana-iroha\":return r.HIRAGANA_IROHA;case\"japanese-formal\":return r.JAPANESE_FORMAL;case\"japanese-informal\":return r.JAPANESE_INFORMAL;case\"kannada\":return r.KANNADA;case\"katakana\":return r.KATAKANA;case\"katakana-iroha\":return r.KATAKANA_IROHA;case\"khmer\":return r.KHMER;case\"korean-hangul-formal\":return r.KOREAN_HANGUL_FORMAL;case\"korean-hanja-formal\":return r.KOREAN_HANJA_FORMAL;case\"korean-hanja-informal\":return r.KOREAN_HANJA_INFORMAL;case\"lao\":return r.LAO;case\"lower-armenian\":return r.LOWER_ARMENIAN;case\"malayalam\":return r.MALAYALAM;case\"mongolian\":return r.MONGOLIAN;case\"myanmar\":return r.MYANMAR;case\"oriya\":return r.ORIYA;case\"persian\":return r.PERSIAN;case\"simp-chinese-formal\":return r.SIMP_CHINESE_FORMAL;case\"simp-chinese-informal\":return r.SIMP_CHINESE_INFORMAL;case\"tamil\":return r.TAMIL;case\"telugu\":return r.TELUGU;case\"thai\":return r.THAI;case\"tibetan\":return r.TIBETAN;case\"trad-chinese-formal\":return r.TRAD_CHINESE_FORMAL;case\"trad-chinese-informal\":return r.TRAD_CHINESE_INFORMAL;case\"upper-armenian\":return r.UPPER_ARMENIAN;case\"disclosure-open\":return r.DISCLOSURE_OPEN;case\"disclosure-closed\":return r.DISCLOSURE_CLOSED;case\"none\":default:return r.NONE}},i=(e.parseListStyle=function(t){var e=(0,B.parseBackgroundImage)(t.getPropertyValue(\"list-style-image\"));return{listStyleType:n(t.getPropertyValue(\"list-style-type\")),listStyleImage:e.length?e[0]:null,listStylePosition:i(t.getPropertyValue(\"list-style-position\"))}},function(t){switch(t){case\"inside\":return A.INSIDE;case\"outside\":default:return A.OUTSIDE}})});e(b);b.parseListStyle,b.parseListStyleType,b.LIST_STYLE_TYPE,b.LIST_STYLE_POSITION;var F=A(function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.parseMargin=void 0;var A=function(t){return t&&t.__esModule?t:{default:t}}(u),r=[\"top\",\"right\",\"bottom\",\"left\"];e.parseMargin=function(t){return r.map(function(e){return new A.default(t.getPropertyValue(\"margin-\"+e))})}});e(F);F.parseMargin;var E=A(function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0});var A=e.OVERFLOW={VISIBLE:0,HIDDEN:1,SCROLL:2,AUTO:3};e.parseOverflow=function(t){switch(t){case\"hidden\":return A.HIDDEN;case\"scroll\":return A.SCROLL;case\"auto\":return A.AUTO;case\"visible\":default:return A.VISIBLE}}});e(E);E.OVERFLOW,E.parseOverflow;var x=A(function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0});var A=e.OVERFLOW_WRAP={NORMAL:0,BREAK_WORD:1};e.parseOverflowWrap=function(t){switch(t){case\"break-word\":return A.BREAK_WORD;case\"normal\":default:return A.NORMAL}}});e(x);x.OVERFLOW_WRAP,x.parseOverflowWrap;var H=A(function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0});var A=e.POSITION={STATIC:0,RELATIVE:1,ABSOLUTE:2,FIXED:3,STICKY:4};e.parsePosition=function(t){switch(t){case\"relative\":return A.RELATIVE;case\"absolute\":return A.ABSOLUTE;case\"fixed\":return A.FIXED;case\"sticky\":return A.STICKY}return A.STATIC}});e(H);H.POSITION,H.parsePosition;var I=A(function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.parseTextShadow=void 0;var A=function(t){return t&&t.__esModule?t:{default:t}}(o),r=/^([+-]|\\d|\\.)$/i;e.parseTextShadow=function(t){if(\"none\"===t||\"string\"!=typeof t)return null;for(var e=\"\",n=!1,i=[],o=[],a=0,s=null,c=function(){e.length&&(n?i.push(parseFloat(e)):s=new A.default(e)),n=!1,e=\"\"},l=function(){i.length&&null!==s&&o.push({color:s,offsetX:i[0]||0,offsetY:i[1]||0,blur:i[2]||0}),i.splice(0,i.length),s=null},u=0;u<t.length;u++){var h=t[u];switch(h){case\"(\":e+=h,a++;break;case\")\":e+=h,a--;break;case\",\":0===a?(c(),l()):e+=h;break;case\" \":0===a?c():e+=h;break;default:0===e.length&&r.test(h)&&(n=!0),e+=h}}return c(),l(),0===o.length?null:o}});e(I);I.parseTextShadow;var S=A(function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0});var A=e.TEXT_TRANSFORM={NONE:0,LOWERCASE:1,UPPERCASE:2,CAPITALIZE:3};e.parseTextTransform=function(t){switch(t){case\"uppercase\":return A.UPPERCASE;case\"lowercase\":return A.LOWERCASE;case\"capitalize\":return A.CAPITALIZE}return A.NONE}});e(S);S.TEXT_TRANSFORM,S.parseTextTransform;var _=A(function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.parseTransform=void 0;var A=function(t){return t&&t.__esModule?t:{default:t}}(u),r=function(t){return parseFloat(t.trim())},n=/(matrix|matrix3d)\\((.+)\\)/,i=(e.parseTransform=function(t){var e=o(t.transform||t.webkitTransform||t.mozTransform||t.msTransform||t.oTransform);return null===e?null:{transform:e,transformOrigin:i(t.transformOrigin||t.webkitTransformOrigin||t.mozTransformOrigin||t.msTransformOrigin||t.oTransformOrigin)}},function(t){if(\"string\"!=typeof t){var e=new A.default(\"0\");return[e,e]}var r=t.split(\" \").map(A.default.create);return[r[0],r[1]]}),o=function(t){if(\"none\"===t||\"string\"!=typeof t)return null;var e=t.match(n);if(e){if(\"matrix\"===e[1]){var A=e[2].split(\",\").map(r);return[A[0],A[1],A[2],A[3],A[4],A[5]]}var i=e[2].split(\",\").map(r);return[i[0],i[1],i[4],i[5],i[12],i[13]]}return null}});e(_);_.parseTransform;var T=A(function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0});var A=e.VISIBILITY={VISIBLE:0,HIDDEN:1,COLLAPSE:2};e.parseVisibility=function(t){switch(t){case\"hidden\":return A.HIDDEN;case\"collapse\":return A.COLLAPSE;case\"visible\":default:return A.VISIBLE}}});e(T);T.VISIBILITY,T.parseVisibility;var N=A(function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0});var A=e.WORD_BREAK={NORMAL:\"normal\",BREAK_ALL:\"break-all\",KEEP_ALL:\"keep-all\"};e.parseWordBreak=function(t){switch(t){case\"break-all\":return A.BREAK_ALL;case\"keep-all\":return A.KEEP_ALL;case\"normal\":default:return A.NORMAL}}});e(N);N.WORD_BREAK,N.parseWordBreak;var k=A(function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0});e.parseZIndex=function(t){var e=\"auto\"===t;return{auto:e,order:e?0:parseInt(t,10)}}});e(k);k.parseZIndex;var O=A(function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0});var A=function(){function t(t,e){for(var A=0;A<e.length;A++){var r=e[A];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,A,r){return A&&t(e.prototype,A),r&&t(e,r),e}}(),r=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.element=e}return A(t,[{key:\"render\",value:function(t){var e=this;this.options=t,this.canvas=document.createElement(\"canvas\"),this.ctx=this.canvas.getContext(\"2d\"),this.canvas.width=Math.floor(t.width)*t.scale,this.canvas.height=Math.floor(t.height)*t.scale,this.canvas.style.width=t.width+\"px\",this.canvas.style.height=t.height+\"px\",t.logger.log(\"ForeignObject renderer initialized (\"+t.width+\"x\"+t.height+\" at \"+t.x+\",\"+t.y+\") with scale \"+t.scale);var A=n(Math.max(t.windowWidth,t.width)*t.scale,Math.max(t.windowHeight,t.height)*t.scale,t.scrollX*t.scale,t.scrollY*t.scale,this.element);return i(A).then(function(A){return t.backgroundColor&&(e.ctx.fillStyle=t.backgroundColor.toString(),e.ctx.fillRect(0,0,t.width*t.scale,t.height*t.scale)),e.ctx.drawImage(A,-t.x*t.scale,-t.y*t.scale),e.canvas})}}]),t}();e.default=r;var n=e.createForeignObjectSVG=function(t,e,A,r,n){var i=\"http://www.w3.org/2000/svg\",o=document.createElementNS(i,\"svg\"),a=document.createElementNS(i,\"foreignObject\");return o.setAttributeNS(null,\"width\",t),o.setAttributeNS(null,\"height\",e),a.setAttributeNS(null,\"width\",\"100%\"),a.setAttributeNS(null,\"height\",\"100%\"),a.setAttributeNS(null,\"x\",A),a.setAttributeNS(null,\"y\",r),a.setAttributeNS(null,\"externalResourcesRequired\",\"true\"),o.appendChild(a),a.appendChild(n),o},i=e.loadSerializedSVG=function(t){return new Promise(function(e,A){var r=new Image;r.onload=function(){return e(r)},r.onerror=A,r.src=\"data:image/svg+xml;charset=utf-8,\"+encodeURIComponent((new XMLSerializer).serializeToString(t))})}});e(O);O.createForeignObjectSVG,O.loadSerializedSVG;var P=A(function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0});var A=function(t){return 0===t[0]&&255===t[1]&&0===t[2]&&255===t[3]},r={get SUPPORT_RANGE_BOUNDS(){var t=function(t){if(t.createRange){var e=t.createRange();if(e.getBoundingClientRect){var A=t.createElement(\"boundtest\");A.style.height=\"123px\",A.style.display=\"block\",t.body.appendChild(A),e.selectNode(A);var r=e.getBoundingClientRect(),n=Math.round(r.height);if(t.body.removeChild(A),123===n)return!0}}return!1}(document);return Object.defineProperty(r,\"SUPPORT_RANGE_BOUNDS\",{value:t}),t},get SUPPORT_SVG_DRAWING(){var t=function(t){var e=new Image,A=t.createElement(\"canvas\"),r=A.getContext(\"2d\");e.src=\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg'></svg>\";try{r.drawImage(e,0,0),A.toDataURL()}catch(t){return!1}return!0}(document);return Object.defineProperty(r,\"SUPPORT_SVG_DRAWING\",{value:t}),t},get SUPPORT_BASE64_DRAWING(){return function(t){var e=function(t,e){var A=new Image,r=t.createElement(\"canvas\"),n=r.getContext(\"2d\");return new Promise(function(t){A.src=e;var i=function(){try{n.drawImage(A,0,0),r.toDataURL()}catch(e){return t(!1)}return t(!0)};A.onload=i,A.onerror=function(){return t(!1)},!0===A.complete&&setTimeout(function(){i()},500)})}(document,t);return Object.defineProperty(r,\"SUPPORT_BASE64_DRAWING\",{value:function(){return e}}),e}},get SUPPORT_FOREIGNOBJECT_DRAWING(){var t=\"function\"==typeof Array.from&&\"function\"==typeof window.fetch?function(t){var e=t.createElement(\"canvas\");e.width=100,e.height=100;var r=e.getContext(\"2d\");r.fillStyle=\"rgb(0, 255, 0)\",r.fillRect(0,0,100,100);var n=new Image,i=e.toDataURL();n.src=i;var o=(0,O.createForeignObjectSVG)(100,100,0,0,n);return r.fillStyle=\"red\",r.fillRect(0,0,100,100),(0,O.loadSerializedSVG)(o).then(function(e){r.drawImage(e,0,0);var n=r.getImageData(0,0,100,100).data;r.fillStyle=\"red\",r.fillRect(0,0,100,100);var o=t.createElement(\"div\");return o.style.backgroundImage=\"url(\"+i+\")\",o.style.height=\"100px\",A(n)?(0,O.loadSerializedSVG)((0,O.createForeignObjectSVG)(100,100,0,0,o)):Promise.reject(!1)}).then(function(t){return r.drawImage(t,0,0),A(r.getImageData(0,0,100,100).data)}).catch(function(t){return!1})}(document):Promise.resolve(!1);return Object.defineProperty(r,\"SUPPORT_FOREIGNOBJECT_DRAWING\",{value:t}),t},get SUPPORT_CORS_IMAGES(){var t=void 0!==(new Image).crossOrigin;return Object.defineProperty(r,\"SUPPORT_CORS_IMAGES\",{value:t}),t},get SUPPORT_RESPONSE_TYPE(){var t=\"string\"==typeof(new XMLHttpRequest).responseType;return Object.defineProperty(r,\"SUPPORT_RESPONSE_TYPE\",{value:t}),t},get SUPPORT_CORS_XHR(){var t=\"withCredentials\"in new XMLHttpRequest;return Object.defineProperty(r,\"SUPPORT_CORS_XHR\",{value:t}),t}};e.default=r});e(P);var D=A(function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0});e.toCodePoints=function(t){for(var e=[],A=0,r=t.length;A<r;){var n=t.charCodeAt(A++);if(n>=55296&&n<=56319&&A<r){var i=t.charCodeAt(A++);56320==(64512&i)?e.push(((1023&n)<<10)+(1023&i)+65536):(e.push(n),A--)}else e.push(n)}return e},e.fromCodePoint=function(){if(String.fromCodePoint)return String.fromCodePoint.apply(String,arguments);var t=arguments.length;if(!t)return\"\";for(var e=[],A=-1,r=\"\";++A<t;){var n=arguments.length<=A?void 0:arguments[A];n<=65535?e.push(n):(n-=65536,e.push(55296+(n>>10),n%1024+56320)),(A+1===t||e.length>16384)&&(r+=String.fromCharCode.apply(String,e),e.length=0)}return r};for(var A=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",r=\"undefined\"==typeof Uint8Array?[]:new Uint8Array(256),n=0;n<A.length;n++)r[A.charCodeAt(n)]=n;e.decode=function(t){var e=.75*t.length,A=t.length,n=void 0,i=0,o=void 0,a=void 0,s=void 0,c=void 0;\"=\"===t[t.length-1]&&(e--,\"=\"===t[t.length-2]&&e--);var l=\"undefined\"!=typeof ArrayBuffer&&\"undefined\"!=typeof Uint8Array&&void 0!==Uint8Array.prototype.slice?new ArrayBuffer(e):new Array(e),u=Array.isArray(l)?l:new Uint8Array(l);for(n=0;n<A;n+=4)o=r[t.charCodeAt(n)],a=r[t.charCodeAt(n+1)],s=r[t.charCodeAt(n+2)],c=r[t.charCodeAt(n+3)],u[i++]=o<<2|a>>4,u[i++]=(15&a)<<4|s>>2,u[i++]=(3&s)<<6|63&c;return l},e.polyUint16Array=function(t){for(var e=t.length,A=[],r=0;r<e;r+=2)A.push(t[r+1]<<8|t[r]);return A},e.polyUint32Array=function(t){for(var e=t.length,A=[],r=0;r<e;r+=4)A.push(t[r+3]<<24|t[r+2]<<16|t[r+1]<<8|t[r]);return A}});e(D);D.toCodePoints,D.fromCodePoint,D.decode,D.polyUint16Array,D.polyUint32Array;var L=A(function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.Trie=e.createTrieFromBase64=e.UTRIE2_INDEX_2_MASK=e.UTRIE2_INDEX_2_BLOCK_LENGTH=e.UTRIE2_OMITTED_BMP_INDEX_1_LENGTH=e.UTRIE2_INDEX_1_OFFSET=e.UTRIE2_UTF8_2B_INDEX_2_LENGTH=e.UTRIE2_UTF8_2B_INDEX_2_OFFSET=e.UTRIE2_INDEX_2_BMP_LENGTH=e.UTRIE2_LSCP_INDEX_2_LENGTH=e.UTRIE2_DATA_MASK=e.UTRIE2_DATA_BLOCK_LENGTH=e.UTRIE2_LSCP_INDEX_2_OFFSET=e.UTRIE2_SHIFT_1_2=e.UTRIE2_INDEX_SHIFT=e.UTRIE2_SHIFT_1=e.UTRIE2_SHIFT_2=void 0;var A=function(){function t(t,e){for(var A=0;A<e.length;A++){var r=e[A];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,A,r){return A&&t(e.prototype,A),r&&t(e,r),e}}(),r=e.UTRIE2_SHIFT_2=5,n=e.UTRIE2_SHIFT_1=11,i=e.UTRIE2_INDEX_SHIFT=2,o=e.UTRIE2_SHIFT_1_2=n-r,a=e.UTRIE2_LSCP_INDEX_2_OFFSET=65536>>r,s=e.UTRIE2_DATA_BLOCK_LENGTH=1<<r,c=e.UTRIE2_DATA_MASK=s-1,l=e.UTRIE2_LSCP_INDEX_2_LENGTH=1024>>r,u=e.UTRIE2_INDEX_2_BMP_LENGTH=a+l,h=e.UTRIE2_UTF8_2B_INDEX_2_OFFSET=u,d=e.UTRIE2_UTF8_2B_INDEX_2_LENGTH=32,f=e.UTRIE2_INDEX_1_OFFSET=h+d,p=e.UTRIE2_OMITTED_BMP_INDEX_1_LENGTH=65536>>n,g=e.UTRIE2_INDEX_2_BLOCK_LENGTH=1<<o,B=e.UTRIE2_INDEX_2_MASK=g-1,w=(e.createTrieFromBase64=function(t){var e=(0,D.decode)(t),A=Array.isArray(e)?(0,D.polyUint32Array)(e):new Uint32Array(e),r=Array.isArray(e)?(0,D.polyUint16Array)(e):new Uint16Array(e),n=r.slice(12,A[4]/2),i=2===A[5]?r.slice((24+A[4])/2):A.slice(Math.ceil((24+A[4])/4));return new w(A[0],A[1],A[2],A[3],n,i)},e.Trie=function(){function t(e,A,r,n,i,o){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.initialValue=e,this.errorValue=A,this.highStart=r,this.highValueIndex=n,this.index=i,this.data=o}return A(t,[{key:\"get\",value:function(t){var e=void 0;if(t>=0){if(t<55296||t>56319&&t<=65535)return e=this.index[t>>r],e=(e<<i)+(t&c),this.data[e];if(t<=65535)return e=this.index[a+(t-55296>>r)],e=(e<<i)+(t&c),this.data[e];if(t<this.highStart)return e=f-p+(t>>n),e=this.index[e],e+=t>>r&B,e=this.index[e],e=(e<<i)+(t&c),this.data[e];if(t<=1114111)return this.data[this.highValueIndex]}return this.errorValue}}]),t}())});e(L);L.Trie,L.createTrieFromBase64,L.UTRIE2_INDEX_2_MASK,L.UTRIE2_INDEX_2_BLOCK_LENGTH,L.UTRIE2_OMITTED_BMP_INDEX_1_LENGTH,L.UTRIE2_INDEX_1_OFFSET,L.UTRIE2_UTF8_2B_INDEX_2_LENGTH,L.UTRIE2_UTF8_2B_INDEX_2_OFFSET,L.UTRIE2_INDEX_2_BMP_LENGTH,L.UTRIE2_LSCP_INDEX_2_LENGTH,L.UTRIE2_DATA_MASK,L.UTRIE2_DATA_BLOCK_LENGTH,L.UTRIE2_LSCP_INDEX_2_OFFSET,L.UTRIE2_SHIFT_1_2,L.UTRIE2_INDEX_SHIFT,L.UTRIE2_SHIFT_1,L.UTRIE2_SHIFT_2;var R=A(function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.LineBreaker=e.inlineBreakOpportunities=e.lineBreakAtIndex=e.codePointsToCharacterClasses=e.UnicodeTrie=e.BREAK_ALLOWED=e.BREAK_NOT_ALLOWED=e.BREAK_MANDATORY=e.classes=e.LETTER_NUMBER_MODIFIER=void 0;var A=function(){function t(t,e){for(var A=0;A<e.length;A++){var r=e[A];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,A,r){return A&&t(e.prototype,A),r&&t(e,r),e}}(),r=function(){return function(t,e){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return function(t,e){var A=[],r=!0,n=!1,i=void 0;try{for(var o,a=t[Symbol.iterator]();!(r=(o=a.next()).done)&&(A.push(o.value),!e||A.length!==e);r=!0);}catch(t){n=!0,i=t}finally{try{!r&&a.return&&a.return()}finally{if(n)throw i}}return A}(t,e);throw new TypeError(\"Invalid attempt to destructure non-iterable instance\")}}(),n=function(t){return t&&t.__esModule?t:{default:t}}(\"KwAAAAAAAAAACA4AIDoAAPAfAAACAAAAAAAIABAAGABAAEgAUABYAF4AZgBeAGYAYABoAHAAeABeAGYAfACEAIAAiACQAJgAoACoAK0AtQC9AMUAXgBmAF4AZgBeAGYAzQDVAF4AZgDRANkA3gDmAOwA9AD8AAQBDAEUARoBIgGAAIgAJwEvATcBPwFFAU0BTAFUAVwBZAFsAXMBewGDATAAiwGTAZsBogGkAawBtAG8AcIBygHSAdoB4AHoAfAB+AH+AQYCDgIWAv4BHgImAi4CNgI+AkUCTQJTAlsCYwJrAnECeQKBAk0CiQKRApkCoQKoArACuALAAsQCzAIwANQC3ALkAjAA7AL0AvwCAQMJAxADGAMwACADJgMuAzYDPgOAAEYDSgNSA1IDUgNaA1oDYANiA2IDgACAAGoDgAByA3YDfgOAAIQDgACKA5IDmgOAAIAAogOqA4AAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAK8DtwOAAIAAvwPHA88D1wPfAyAD5wPsA/QD/AOAAIAABAQMBBIEgAAWBB4EJgQuBDMEIAM7BEEEXgBJBCADUQRZBGEEaQQwADAAcQQ+AXkEgQSJBJEEgACYBIAAoASoBK8EtwQwAL8ExQSAAIAAgACAAIAAgACgAM0EXgBeAF4AXgBeAF4AXgBeANUEXgDZBOEEXgDpBPEE+QQBBQkFEQUZBSEFKQUxBTUFPQVFBUwFVAVcBV4AYwVeAGsFcwV7BYMFiwWSBV4AmgWgBacFXgBeAF4AXgBeAKsFXgCyBbEFugW7BcIFwgXIBcIFwgXQBdQF3AXkBesF8wX7BQMGCwYTBhsGIwYrBjMGOwZeAD8GRwZNBl4AVAZbBl4AXgBeAF4AXgBeAF4AXgBeAF4AXgBeAGMGXgBqBnEGXgBeAF4AXgBeAF4AXgBeAF4AXgB5BoAG4wSGBo4GkwaAAIADHgR5AF4AXgBeAJsGgABGA4AAowarBrMGswagALsGwwbLBjAA0wbaBtoG3QbaBtoG2gbaBtoG2gblBusG8wb7BgMHCwcTBxsHCwcjBysHMAc1BzUHOgdCB9oGSgdSB1oHYAfaBloHaAfaBlIH2gbaBtoG2gbaBtoG2gbaBjUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHbQdeAF4ANQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQd1B30HNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1B4MH2gaKB68EgACAAIAAgACAAIAAgACAAI8HlwdeAJ8HpweAAIAArwe3B14AXgC/B8UHygcwANAH2AfgB4AA6AfwBz4B+AcACFwBCAgPCBcIogEYAR8IJwiAAC8INwg/CCADRwhPCFcIXwhnCEoDGgSAAIAAgABvCHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIhAiLCI4IMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlggwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAANQc1BzUHNQc1BzUHNQc1BzUHNQc1B54INQc1B6II2gaqCLIIugiAAIAAvgjGCIAAgACAAIAAgACAAIAAgACAAIAAywiHAYAA0wiAANkI3QjlCO0I9Aj8CIAAgACAAAIJCgkSCRoJIgknCTYHLwk3CZYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiAAIAAAAFAAXgBeAGAAcABeAHwAQACQAKAArQC9AJ4AXgBeAE0A3gBRAN4A7AD8AMwBGgEAAKcBNwEFAUwBXAF4QkhCmEKnArcCgAHHAsABz4LAAcABwAHAAd+C6ABoAG+C/4LAAcABwAHAAc+DF4MAAcAB54M3gweDV4Nng3eDaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAEeDqABVg6WDqABoQ6gAaABoAHXDvcONw/3DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DncPAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcAB7cPPwlGCU4JMACAAIAAgABWCV4JYQmAAGkJcAl4CXwJgAkwADAAMAAwAIgJgACLCZMJgACZCZ8JowmrCYAAswkwAF4AXgB8AIAAuwkABMMJyQmAAM4JgADVCTAAMAAwADAAgACAAIAAgACAAIAAgACAAIAAqwYWBNkIMAAwADAAMADdCeAJ6AnuCR4E9gkwAP4JBQoNCjAAMACAABUK0wiAAB0KJAosCjQKgAAwADwKQwqAAEsKvQmdCVMKWwowADAAgACAALcEMACAAGMKgABrCjAAMAAwADAAMAAwADAAMAAwADAAMAAeBDAAMAAwADAAMAAwADAAMAAwADAAMAAwAIkEPQFzCnoKiQSCCooKkAqJBJgKoAqkCokEGAGsCrQKvArBCjAAMADJCtEKFQHZCuEK/gHpCvEKMAAwADAAMACAAIwE+QowAIAAPwEBCzAAMAAwADAAMACAAAkLEQswAIAAPwEZCyELgAAOCCkLMAAxCzkLMAAwADAAMAAwADAAXgBeAEELMAAwADAAMAAwADAAMAAwAEkLTQtVC4AAXAtkC4AAiQkwADAAMAAwADAAMAAwADAAbAtxC3kLgAuFC4sLMAAwAJMLlwufCzAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAApwswADAAMACAAIAAgACvC4AAgACAAIAAgACAALcLMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAvwuAAMcLgACAAIAAgACAAIAAyguAAIAAgACAAIAA0QswADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAANkLgACAAIAA4AswADAAMAAwADAAMAAwADAAMAAwADAAMAAwAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACJCR4E6AswADAAhwHwC4AA+AsADAgMEAwwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMACAAIAAGAwdDCUMMAAwAC0MNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQw1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHPQwwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADUHNQc1BzUHNQc1BzUHNQc2BzAAMAA5DDUHNQc1BzUHNQc1BzUHNQc1BzUHNQdFDDAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAgACAAIAATQxSDFoMMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAF4AXgBeAF4AXgBeAF4AYgxeAGoMXgBxDHkMfwxeAIUMXgBeAI0MMAAwADAAMAAwAF4AXgCVDJ0MMAAwADAAMABeAF4ApQxeAKsMswy7DF4Awgy9DMoMXgBeAF4AXgBeAF4AXgBeAF4AXgDRDNkMeQBqCeAM3Ax8AOYM7Az0DPgMXgBeAF4AXgBeAF4AXgBeAF4AXgBeAF4AXgBeAF4AXgCgAAANoAAHDQ4NFg0wADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAeDSYNMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAIAAgACAAIAAgACAAC4NMABeAF4ANg0wADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAD4NRg1ODVYNXg1mDTAAbQ0wADAAMAAwADAAMAAwADAA2gbaBtoG2gbaBtoG2gbaBnUNeg3CBYANwgWFDdoGjA3aBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gaUDZwNpA2oDdoG2gawDbcNvw3HDdoG2gbPDdYN3A3fDeYN2gbsDfMN2gbaBvoN/g3aBgYODg7aBl4AXgBeABYOXgBeACUG2gYeDl4AJA5eACwO2w3aBtoGMQ45DtoG2gbaBtoGQQ7aBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gZJDjUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1B1EO2gY1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQdZDjUHNQc1BzUHNQc1B2EONQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHaA41BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1B3AO2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gY1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1B2EO2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gZJDtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBkkOeA6gAKAAoAAwADAAMAAwAKAAoACgAKAAoACgAKAAgA4wADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAD//wQABAAEAAQABAAEAAQABAAEAA0AAwABAAEAAgAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAKABMAFwAeABsAGgAeABcAFgASAB4AGwAYAA8AGAAcAEsASwBLAEsASwBLAEsASwBLAEsAGAAYAB4AHgAeABMAHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAFgAbABIAHgAeAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQABYADQARAB4ABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAAUABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAkAFgAaABsAGwAbAB4AHQAdAB4ATwAXAB4ADQAeAB4AGgAbAE8ATwAOAFAAHQAdAB0ATwBPABcATwBPAE8AFgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAB4AHgAeAB4AUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AHgAeAFAATwBAAE8ATwBPAEAATwBQAFAATwBQAB4AHgAeAB4AHgAeAB0AHQAdAB0AHgAdAB4ADgBQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgBQAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAJAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAkACQAJAAkACQAJAAkABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgAeAFAAHgAeAB4AKwArAFAAUABQAFAAGABQACsAKwArACsAHgAeAFAAHgBQAFAAUAArAFAAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAAQABAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAUAAeAB4AHgAeAB4AHgArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwAYAA0AKwArAB4AHgAbACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQADQAEAB4ABAAEAB4ABAAEABMABAArACsAKwArACsAKwArACsAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAKwArACsAKwArAFYAVgBWAB4AHgArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AGgAaABoAGAAYAB4AHgAEAAQABAAEAAQABAAEAAQABAAEAAQAEwAEACsAEwATAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABLAEsASwBLAEsASwBLAEsASwBLABoAGQAZAB4AUABQAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQABMAUAAEAAQABAAEAAQABAAEAB4AHgAEAAQABAAEAAQABABQAFAABAAEAB4ABAAEAAQABABQAFAASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUAAeAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAFAABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQAUABQAB4AHgAYABMAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAFAABAAEAAQABAAEAFAABAAEAAQAUAAEAAQABAAEAAQAKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAArACsAHgArAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAFAABAAEAAQABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAAQABAANAA0ASwBLAEsASwBLAEsASwBLAEsASwAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQAKwBQAFAAUABQAFAAUABQAFAAKwArAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUAArAFAAKwArACsAUABQAFAAUAArACsABABQAAQABAAEAAQABAAEAAQAKwArAAQABAArACsABAAEAAQAUAArACsAKwArACsAKwArACsABAArACsAKwArAFAAUAArAFAAUABQAAQABAArACsASwBLAEsASwBLAEsASwBLAEsASwBQAFAAGgAaAFAAUABQAFAAUABMAB4AGwBQAB4AKwArACsABAAEAAQAKwBQAFAAUABQAFAAUAArACsAKwArAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUAArAFAAUAArAFAAUAArAFAAUAArACsABAArAAQABAAEAAQABAArACsAKwArAAQABAArACsABAAEAAQAKwArACsABAArACsAKwArACsAKwArAFAAUABQAFAAKwBQACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwAEAAQAUABQAFAABAArACsAKwArACsAKwArACsAKwArACsABAAEAAQAKwBQAFAAUABQAFAAUABQAFAAUAArAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUAArAFAAUAArAFAAUABQAFAAUAArACsABABQAAQABAAEAAQABAAEAAQABAArAAQABAAEACsABAAEAAQAKwArAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAAQABAArACsASwBLAEsASwBLAEsASwBLAEsASwAeABsAKwArACsAKwArACsAKwBQAAQABAAEAAQABAAEACsABAAEAAQAKwBQAFAAUABQAFAAUABQAFAAKwArAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQAKwArAAQABAArACsABAAEAAQAKwArACsAKwArACsAKwArAAQABAArACsAKwArAFAAUAArAFAAUABQAAQABAArACsASwBLAEsASwBLAEsASwBLAEsASwAeAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwAEAFAAKwBQAFAAUABQAFAAUAArACsAKwBQAFAAUAArAFAAUABQAFAAKwArACsAUABQACsAUAArAFAAUAArACsAKwBQAFAAKwArACsAUABQAFAAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwAEAAQABAAEAAQAKwArACsABAAEAAQAKwAEAAQABAAEACsAKwBQACsAKwArACsAKwArAAQAKwArACsAKwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLAFAAUABQAB4AHgAeAB4AHgAeABsAHgArACsAKwArACsABAAEAAQABAArAFAAUABQAFAAUABQAFAAUAArAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAFAABAAEAAQABAAEAAQABAArAAQABAAEACsABAAEAAQABAArACsAKwArACsAKwArAAQABAArAFAAUABQACsAKwArACsAKwBQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAB4AUAAEAAQABAArAFAAUABQAFAAUABQAFAAUAArAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQACsAKwAEAFAABAAEAAQABAAEAAQABAArAAQABAAEACsABAAEAAQABAArACsAKwArACsAKwArAAQABAArACsAKwArACsAKwArAFAAKwBQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAFAABAAEAAQABAAEAAQABAArAAQABAAEACsABAAEAAQABABQAB4AKwArACsAKwBQAFAAUAAEAFAAUABQAFAAUABQAFAAUABQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLAFAAUABQAFAAUABQAFAAUABQABoAUABQAFAAUABQAFAAKwArAAQABAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQACsAUAArACsAUABQAFAAUABQAFAAUAArACsAKwAEACsAKwArACsABAAEAAQABAAEAAQAKwAEACsABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArAAQABAAeACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAAqAFwAXAAqACoAKgAqACoAKgAqACsAKwArACsAGwBcAFwAXABcAFwAXABcACoAKgAqACoAKgAqACoAKgAeAEsASwBLAEsASwBLAEsASwBLAEsADQANACsAKwArACsAKwBcAFwAKwBcACsAKwBcAFwAKwBcACsAKwBcACsAKwArACsAKwArAFwAXABcAFwAKwBcAFwAXABcAFwAXABcACsAXABcAFwAKwBcACsAXAArACsAXABcACsAXABcAFwAXAAqAFwAXAAqACoAKgAqACoAKgArACoAKgBcACsAKwBcAFwAXABcAFwAKwBcACsAKgAqACoAKgAqACoAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArAFwAXABcAFwAUAAOAA4ADgAOAB4ADgAOAAkADgAOAA0ACQATABMAEwATABMACQAeABMAHgAeAB4ABAAEAB4AHgAeAB4AHgAeAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAUABQAFAAUABQAFAAUAANAAQAHgAEAB4ABAAWABEAFgARAAQABABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAANAAQABAAEAAQABAANAAQABABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsADQANAB4AHgAeAB4AHgAeAAQAHgAeAB4AHgAeAB4AKwAeAB4ADgAOAA0ADgAeAB4AHgAeAB4ACQAJACsAKwArACsAKwBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqAFwASwBLAEsASwBLAEsASwBLAEsASwANAA0AHgAeAB4AHgBcAFwAXABcAFwAXAAqACoAKgAqAFwAXABcAFwAKgAqACoAXAAqACoAKgBcAFwAKgAqACoAKgAqACoAKgBcAFwAXAAqACoAKgAqAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAKgAqACoAKgAqACoAKgAqACoAXAAqAEsASwBLAEsASwBLAEsASwBLAEsAKgAqACoAKgAqACoAUABQAFAAUABQAFAAKwBQACsAKwArACsAKwBQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAFAAUABQAFAAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQACsAKwBQAFAAUABQAFAAUABQACsAUAArAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUAArACsAUABQAFAAUABQAFAAUAArAFAAKwBQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwAEAAQABAAeAA0AHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQACsAKwANAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQABYAEQArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAADQANAA0AUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAABAAEAAQAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAA0ADQArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQACsABAAEACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoADQANABUAXAANAB4ADQAbAFwAKgArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArAB4AHgATABMADQANAA4AHgATABMAHgAEAAQABAAJACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAUABQAFAAUABQAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABABQACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwAeACsAKwArABMAEwBLAEsASwBLAEsASwBLAEsASwBLAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACsAKwBcAFwAXABcAFwAKwArACsAKwArACsAKwArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcACsAKwArACsAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwBcACsAKwArACoAKgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEACsAKwAeAB4AXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAKgAqACoAKgAqACoAKgArACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgArACsABABLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAKgAqACoAKgAqACoAKgBcACoAKgAqACoAKgAqACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArAAQABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQAUABQAFAAUABQAFAAUAArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsADQANAB4ADQANAA0ADQAeAB4AHgAeAB4AHgAeAB4AHgAeAAQABAAEAAQABAAEAAQABAAEAB4AHgAeAB4AHgAeAB4AHgAeACsAKwArAAQABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAUABQAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArACsAKwArACsAHgAeAB4AHgBQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwANAA0ADQANAA0ASwBLAEsASwBLAEsASwBLAEsASwArACsAKwBQAFAAUABLAEsASwBLAEsASwBLAEsASwBLAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAANAA0AUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsABAAEAAQAHgAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAFAAUABQAFAABABQAFAAUABQAAQABAAEAFAAUAAEAAQABAArACsAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwAEAAQABAAEAAQAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUAArAFAAKwBQACsAUAArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAHgAeAB4AHgAeAB4AHgAeAFAAHgAeAB4AUABQAFAAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAKwArAB4AHgAeAB4AHgAeACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAUABQAFAAKwAeAB4AHgAeAB4AHgAeAA4AHgArAA0ADQANAA0ADQANAA0ACQANAA0ADQAIAAQACwAEAAQADQAJAA0ADQAMAB0AHQAeABcAFwAWABcAFwAXABYAFwAdAB0AHgAeABQAFAAUAA0AAQABAAQABAAEAAQABAAJABoAGgAaABoAGgAaABoAGgAeABcAFwAdABUAFQAeAB4AHgAeAB4AHgAYABYAEQAVABUAFQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgANAB4ADQANAA0ADQAeAA0ADQANAAcAHgAeAB4AHgArAAQABAAEAAQABAAEAAQABAAEAAQAUABQACsAKwBPAFAAUABQAFAAUAAeAB4AHgAWABEATwBQAE8ATwBPAE8AUABQAFAAUABQAB4AHgAeABYAEQArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAGwAbABsAGwAbABsAGwAaABsAGwAbABsAGwAbABsAGwAbABsAGwAbABsAGwAaABsAGwAbABsAGgAbABsAGgAbABsAGwAbABsAGwAbABsAGwAbABsAGwAbABsAGwAbABsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgBQABoAHgAdAB4AUAAeABoAHgAeAB4AHgAeAB4AHgAeAB4ATwAeAFAAGwAeAB4AUABQAFAAUABQAB4AHgAeAB0AHQAeAFAAHgBQAB4AUAAeAFAATwBQAFAAHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAB4AUABQAFAAUABPAE8AUABQAFAAUABQAE8AUABQAE8AUABPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBQAFAAUABQAE8ATwBPAE8ATwBPAE8ATwBPAE8AUABQAFAAUABQAFAAUABQAFAAHgAeAFAAUABQAFAATwAeAB4AKwArACsAKwAdAB0AHQAdAB0AHQAdAB0AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAeAB0AHQAeAB4AHgAdAB0AHgAeAB0AHgAeAB4AHQAeAB0AGwAbAB4AHQAeAB4AHgAeAB0AHgAeAB0AHQAdAB0AHgAeAB0AHgAdAB4AHQAdAB0AHQAdAB0AHgAdAB4AHgAeAB4AHgAdAB0AHQAdAB4AHgAeAB4AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAeAB4AHgAdAB4AHgAeAB4AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB4AHgAdAB0AHQAdAB4AHgAdAB0AHgAeAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHgAeAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AHQAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABQAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAWABEAFgARAB4AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAlACUAHgAeAB4AHgAeAB4AHgAeAB4AFgARAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBQAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB4AHgAeAB4AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHgAdAB0AHQAdAB0AHQAdAB4AHgAeAB4AHgAeAB4AHgAdAB0AHgAeAB0AHQAeAB4AHgAeAB0AHQAeAB4AHgAeAB0AHQAdAB4AHgAdAB4AHgAdAB0AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAeAB0AHQAeAB4AHQAeAB4AHgAeAB0AHQAeAB4AHgAeACUAJQAdAB0AJQAeACUAJQAlACAAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAHgAeAB4AHgAdAB4AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB4AHQAdAB0AHgAdACUAHQAdAB4AHQAdAB4AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAHQAdAB0AHQAlAB4AJQAlACUAHQAlACUAHQAdAB0AJQAlAB0AHQAlAB0AHQAlACUAJQAeAB0AHgAeAB4AHgAdAB0AJQAdAB0AHQAdAB0AHQAlACUAJQAlACUAHQAlACUAIAAlAB0AHQAlACUAJQAlACUAJQAlACUAHgAeAB4AJQAlACAAIAAgACAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHgAeABcAFwAXABcAFwAXAB4AEwATACUAHgAeAB4AFgARABYAEQAWABEAFgARABYAEQAWABEAFgARAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAWABEAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFgARABYAEQAWABEAFgARABYAEQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABYAEQAWABEAFgARABYAEQAWABEAFgARABYAEQAWABEAFgARABYAEQAWABEAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFgARABYAEQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABYAEQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB0AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAEAAQABAAeAB4AKwArACsAKwArABMADQANAA0AUAATAA0AUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAUAANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAA0ADQANAA0ADQANAA0ADQAeAA0AFgANAB4AHgAXABcAHgAeABcAFwAWABEAFgARABYAEQAWABEADQANAA0ADQATAFAADQANAB4ADQANAB4AHgAeAB4AHgAMAAwADQANAA0AHgANAA0AFgANAA0ADQANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAKwArACsAKwArACsAKwArACsAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArAA0AEQARACUAJQBHAFcAVwAWABEAFgARABYAEQAWABEAFgARACUAJQAWABEAFgARABYAEQAWABEAFQAWABEAEQAlAFcAVwBXAFcAVwBXAFcAVwBXAAQABAAEAAQABAAEACUAVwBXAFcAVwA2ACUAJQBXAFcAVwBHAEcAJQAlACUAKwBRAFcAUQBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFEAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBRAFcAUQBXAFEAVwBXAFcAVwBXAFcAUQBXAFcAVwBXAFcAVwBRAFEAKwArAAQABAAVABUARwBHAFcAFQBRAFcAUQBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBRAFcAVwBXAFcAVwBXAFEAUQBXAFcAVwBXABUAUQBHAEcAVwArACsAKwArACsAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwArAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwArACUAJQBXAFcAVwBXACUAJQAlACUAJQAlACUAJQAlACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwArACsAKwArACUAJQAlACUAKwArACsAKwArACsAKwArACsAKwArACsAUQBRAFEAUQBRAFEAUQBRAFEAUQBRAFEAUQBRAFEAUQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACsAVwBXAFcAVwBXAFcAVwBXAFcAVwAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAE8ATwBPAE8ATwBPAE8ATwAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQAlACUAJQAlACUAJQAlACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAEcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAADQATAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABLAEsASwBLAEsASwBLAEsASwBLAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAABAAEAAQABAAeAAQABAAEAAQABAAEAAQABAAEAAQAHgBQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AUABQAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAeAA0ADQANAA0ADQArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAB4AHgAeAB4AHgAeAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAAQAUABQAFAABABQAFAAUABQAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAeAB4AHgAeACsAKwArACsAUABQAFAAUABQAFAAHgAeABoAHgArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAADgAOABMAEwArACsAKwArACsAKwArACsABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwANAA0ASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAFAAUAAeAB4AHgBQAA4AUAArACsAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAA0ADQBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArACsAKwArACsAKwArAB4AWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYACsAKwArAAQAHgAeAB4AHgAeAB4ADQANAA0AHgAeAB4AHgArAFAASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArAB4AHgBcAFwAXABcAFwAKgBcAFwAXABcAFwAXABcAFwAXABcAEsASwBLAEsASwBLAEsASwBLAEsAXABcAFwAXABcACsAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArAFAAUABQAAQAUABQAFAAUABQAFAAUABQAAQABAArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAHgANAA0ADQBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAXAAqACoAKgBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAAqAFwAKgAqACoAXABcACoAKgBcAFwAXABcAFwAKgAqAFwAKgBcACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcACoAKgBQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAA0ADQBQAFAAUAAEAAQAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUAArACsAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQADQAEAAQAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAVABVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBUAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVACsAKwArACsAKwArACsAKwArACsAKwArAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAKwArACsAKwBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAKwArACsAKwAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAKwArACsAKwArAFYABABWAFYAVgBWAFYAVgBWAFYAVgBWAB4AVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgArAFYAVgBWAFYAVgArAFYAKwBWAFYAKwBWAFYAKwBWAFYAVgBWAFYAVgBWAFYAVgBWAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAEQAWAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUAAaAB4AKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAGAARABEAGAAYABMAEwAWABEAFAArACsAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACUAJQAlACUAJQAWABEAFgARABYAEQAWABEAFgARABYAEQAlACUAFgARACUAJQAlACUAJQAlACUAEQAlABEAKwAVABUAEwATACUAFgARABYAEQAWABEAJQAlACUAJQAlACUAJQAlACsAJQAbABoAJQArACsAKwArAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAcAKwATACUAJQAbABoAJQAlABYAEQAlACUAEQAlABEAJQBXAFcAVwBXAFcAVwBXAFcAVwBXABUAFQAlACUAJQATACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXABYAJQARACUAJQAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwAWACUAEQAlABYAEQARABYAEQARABUAVwBRAFEAUQBRAFEAUQBRAFEAUQBRAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAEcARwArACsAVwBXAFcAVwBXAFcAKwArAFcAVwBXAFcAVwBXACsAKwBXAFcAVwBXAFcAVwArACsAVwBXAFcAKwArACsAGgAbACUAJQAlABsAGwArAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwAEAAQABAAQAB0AKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsADQANAA0AKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsADQBQAFAAUABQACsAKwArACsAUABQAFAAUABQAFAAUABQAA0AUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUAArACsAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQACsAKwArAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgBQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsADQBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwBQAFAAUABQAFAABAAEAAQAKwAEAAQAKwArACsAKwArAAQABAAEAAQAUABQAFAAUAArAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsABAAEAAQAKwArACsAKwAEAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsADQANAA0ADQANAA0ADQANAB4AKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AUABQAFAAUABQAFAAUABQAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEACsAKwArACsAUABQAFAAUABQAA0ADQANAA0ADQANABQAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwANAA0ADQANAA0ADQANAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwBQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAA0ADQAeAB4AHgAeAB4AKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsASwBLAEsASwBLAEsASwBLAEsASwANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAeAA4AUAArACsAKwArACsAKwArACsAKwAEAFAAUABQAFAADQANAB4ADQAeAAQABAAEAB4AKwArAEsASwBLAEsASwBLAEsASwBLAEsAUAAOAFAADQANAA0AKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAANAA0AHgANAA0AHgAEACsAUABQAFAAUABQAFAAUAArAFAAKwBQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAA0AKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsABAAEAAQABAArAFAAUABQAFAAUABQAFAAUAArACsAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAArACsABAAEACsAKwAEAAQABAArACsAUAArACsAKwArACsAKwAEACsAKwArACsAKwBQAFAAUABQAFAABAAEACsAKwAEAAQABAAEAAQABAAEACsAKwArAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAAQABABQAFAAUABQAA0ADQANAA0AHgBLAEsASwBLAEsASwBLAEsASwBLACsADQArAB4AKwArAAQABAAEAAQAUABQAB4AUAArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEACsAKwAEAAQABAAEAAQABAAEAAQABAAOAA0ADQATABMAHgAeAB4ADQANAA0ADQANAA0ADQANAA0ADQANAA0ADQANAA0AUABQAFAAUAAEAAQAKwArAAQADQANAB4AUAArACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAArACsAKwAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAXABcAA0ADQANACoASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwBQAFAABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAFAABAAEAAQABAAOAB4ADQANAA0ADQAOAB4ABAArACsAKwArACsAKwArACsAUAAEAAQABAAEAAQABAAEAAQABAAEAAQAUABQAFAAUAArACsAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAA0ADQANACsADgAOAA4ADQANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEACsABAAEAAQABAAEAAQABAAEAFAADQANAA0ADQANACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwAOABMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQACsAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAArACsAKwAEACsABAAEACsABAAEAAQABAAEAAQABABQAAQAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsADQANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAASABIAEgAQwBDAEMAUABQAFAAUABDAFAAUABQAEgAQwBIAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAASABDAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABIAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwANAA0AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAQABAAEAAQABAANACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAA0ADQANAB4AHgAeAB4AHgAeAFAAUABQAFAADQAeACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAEcARwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwArACsAKwArACsAKwArACsAKwArACsAKwArAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQACsAKwAeAAQABAANAAQABAAEAAQAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAB4AHgAeAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAHgAeAAQABAAEAAQABAAEAAQAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAEAAQABAAEAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgAEAAQABAAeACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAFAAUAArACsAUAArACsAUABQACsAKwBQAFAAUABQACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwBQACsAUABQAFAAUABQAFAAUAArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAKwAeAB4AUABQAFAAUABQACsAUAArACsAKwBQAFAAUABQAFAAUABQACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AKwArAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAB4AHgAeAB4ABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAB4AHgAeAB4AHgAeAB4AHgAEAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAeAB4ADQANAA0ADQAeACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAAQABAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsABAAEAAQABAAEAAQABAArAAQABAArAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAEAAQABAAEAAQABAAEACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAFgAWAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUAArAFAAKwArAFAAKwBQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUAArAFAAKwBQACsAKwArACsAKwArAFAAKwArACsAKwBQACsAUAArAFAAKwBQAFAAUAArAFAAUAArAFAAKwArAFAAKwBQACsAUAArAFAAKwBQACsAUABQACsAUAArACsAUABQAFAAUAArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQACsAUABQAFAAUAArAFAAKwBQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwBQAFAAUAArAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArACsATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwAlACUAJQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAeACUAHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeACUAJQAlACUAHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQAlACUAJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAeACUAJQAlACUAJQAeACUAJQAlACUAJQAgACAAIAAlACUAIAAlACUAIAAgACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAIQAhACEAIQAhACUAJQAgACAAJQAlACAAIAAgACAAIAAgACAAIAAgACAAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAIAAgACAAIAAlACUAJQAlACAAJQAgACAAIAAgACAAIAAgACAAIAAlACUAJQAgACUAJQAlACUAIAAgACAAJQAgACAAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeACUAHgAlAB4AJQAlACUAJQAlACAAJQAlACUAJQAeACUAHgAeACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAIAAgACUAJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAIAAlACUAJQAlACAAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAIAAgACAAJQAlACUAIAAgACAAIAAgAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFwAXABcAFQAVABUAHgAeAB4AHgAlACUAJQAgACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAIAAgACAAJQAlACUAJQAlACUAJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAgACAAIAAlACAAIAAlACUAJQAlACUAJQAgACUAJQAlACUAJQAlACUAJQAlACAAIAAgACAAIAAgACAAIAAgACAAJQAlACUAIAAgACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACsAKwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAJQAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArAAQAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsA\"),i=e.LETTER_NUMBER_MODIFIER=50,o=10,a=13,s=15,c=17,l=18,u=19,h=20,d=21,f=22,p=24,g=25,B=26,w=27,m=28,y=30,v=32,Q=33,C=34,U=35,b=37,F=38,E=39,x=40,H=42,I=(e.classes={BK:1,CR:2,LF:3,CM:4,NL:5,SG:6,WJ:7,ZW:8,GL:9,SP:o,ZWJ:11,B2:12,BA:a,BB:14,HY:s,CB:16,CL:c,CP:l,EX:u,IN:h,NS:d,OP:f,QU:23,IS:p,NU:g,PO:B,PR:w,SY:m,AI:29,AL:y,CJ:31,EB:v,EM:Q,H2:C,H3:U,HL:36,ID:b,JL:F,JV:E,JT:x,RI:41,SA:H,XX:43},e.BREAK_MANDATORY=\"!\"),S=e.BREAK_NOT_ALLOWED=\"Ã—\",_=e.BREAK_ALLOWED=\"Ã·\",T=e.UnicodeTrie=(0,L.createTrieFromBase64)(n.default),N=[y,36],k=[1,2,3,5],O=[o,8],P=[w,B],R=k.concat(O),M=[F,E,x,C,U],K=[s,a],z=e.codePointsToCharacterClasses=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"strict\",A=[],r=[],n=[];return t.forEach(function(t,o){var a=T.get(t);if(a>i?(n.push(!0),a-=i):n.push(!1),-1!==[\"normal\",\"auto\",\"loose\"].indexOf(e)&&-1!==[8208,8211,12316,12448].indexOf(t))return r.push(o),A.push(16);if(4===a||11===a){if(0===o)return r.push(o),A.push(y);var s=A[o-1];return-1===R.indexOf(s)?(r.push(r[o-1]),A.push(s)):(r.push(o),A.push(y))}return r.push(o),31===a?A.push(\"strict\"===e?d:b):a===H?A.push(y):29===a?A.push(y):43===a?t>=131072&&t<=196605||t>=196608&&t<=262141?A.push(b):A.push(y):void A.push(a)}),[r,A,n]},q=function(t,e,A,r){var n=r[A];if(Array.isArray(t)?-1!==t.indexOf(n):t===n)for(var i=A;i<=r.length;){var a=r[++i];if(a===e)return!0;if(a!==o)break}if(n===o)for(var s=A;s>0;){var c=r[--s];if(Array.isArray(t)?-1!==t.indexOf(c):t===c)for(var l=A;l<=r.length;){var u=r[++l];if(u===e)return!0;if(u!==o)break}if(c!==o)break}return!1},j=function(t,e){for(var A=t;A>=0;){var r=e[A];if(r!==o)return r;A--}return 0},X=function(t,e,A,r,n){if(0===A[r])return S;var i=r-1;if(Array.isArray(n)&&!0===n[i])return S;var y=i-1,H=i+1,D=e[i],L=y>=0?e[y]:0,R=e[H];if(2===D&&3===R)return S;if(-1!==k.indexOf(D))return I;if(-1!==k.indexOf(R))return S;if(-1!==O.indexOf(R))return S;if(8===j(i,e))return _;if(11===T.get(t[i])&&(R===b||R===v||R===Q))return S;if(7===D||7===R)return S;if(9===D)return S;if(-1===[o,a,s].indexOf(D)&&9===R)return S;if(-1!==[c,l,u,p,m].indexOf(R))return S;if(j(i,e)===f)return S;if(q(23,f,i,e))return S;if(q([c,l],d,i,e))return S;if(q(12,12,i,e))return S;if(D===o)return _;if(23===D||23===R)return S;if(16===R||16===D)return _;if(-1!==[a,s,d].indexOf(R)||14===D)return S;if(36===L&&-1!==K.indexOf(D))return S;if(D===m&&36===R)return S;if(R===h&&-1!==N.concat(h,u,g,b,v,Q).indexOf(D))return S;if(-1!==N.indexOf(R)&&D===g||-1!==N.indexOf(D)&&R===g)return S;if(D===w&&-1!==[b,v,Q].indexOf(R)||-1!==[b,v,Q].indexOf(D)&&R===B)return S;if(-1!==N.indexOf(D)&&-1!==P.indexOf(R)||-1!==P.indexOf(D)&&-1!==N.indexOf(R))return S;if(-1!==[w,B].indexOf(D)&&(R===g||-1!==[f,s].indexOf(R)&&e[H+1]===g)||-1!==[f,s].indexOf(D)&&R===g||D===g&&-1!==[g,m,p].indexOf(R))return S;if(-1!==[g,m,p,c,l].indexOf(R))for(var z=i;z>=0;){var X=e[z];if(X===g)return S;if(-1===[m,p].indexOf(X))break;z--}if(-1!==[w,B].indexOf(R))for(var V=-1!==[c,l].indexOf(D)?y:i;V>=0;){var G=e[V];if(G===g)return S;if(-1===[m,p].indexOf(G))break;V--}if(F===D&&-1!==[F,E,C,U].indexOf(R)||-1!==[E,C].indexOf(D)&&-1!==[E,x].indexOf(R)||-1!==[x,U].indexOf(D)&&R===x)return S;if(-1!==M.indexOf(D)&&-1!==[h,B].indexOf(R)||-1!==M.indexOf(R)&&D===w)return S;if(-1!==N.indexOf(D)&&-1!==N.indexOf(R))return S;if(D===p&&-1!==N.indexOf(R))return S;if(-1!==N.concat(g).indexOf(D)&&R===f||-1!==N.concat(g).indexOf(R)&&D===l)return S;if(41===D&&41===R){for(var W=A[i],Y=1;W>0&&(W--,41===e[W]);)Y++;if(Y%2!=0)return S}return D===v&&R===Q?S:_},V=(e.lineBreakAtIndex=function(t,e){if(0===e)return S;if(e>=t.length)return I;var A=z(t),n=r(A,2),i=n[0],o=n[1];return X(t,o,i,e)},function(t,e){e||(e={lineBreak:\"normal\",wordBreak:\"normal\"});var A=z(t,e.lineBreak),n=r(A,3),i=n[0],o=n[1],a=n[2];\"break-all\"!==e.wordBreak&&\"break-word\"!==e.wordBreak||(o=o.map(function(t){return-1!==[g,y,H].indexOf(t)?b:t}));return[i,o,\"keep-all\"===e.wordBreak?a.map(function(e,A){return e&&t[A]>=19968&&t[A]<=40959}):null]}),G=(e.inlineBreakOpportunities=function(t,e){var A=(0,D.toCodePoints)(t),n=S,i=V(A,e),o=r(i,3),a=o[0],s=o[1],c=o[2];return A.forEach(function(t,e){n+=(0,D.fromCodePoint)(t)+(e>=A.length-1?I:X(A,s,a,e+1,c))}),n},function(){function t(e,A,r,n){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this._codePoints=e,this.required=A===I,this.start=r,this.end=n}return A(t,[{key:\"slice\",value:function(){return D.fromCodePoint.apply(void 0,function(t){if(Array.isArray(t)){for(var e=0,A=Array(t.length);e<t.length;e++)A[e]=t[e];return A}return Array.from(t)}(this._codePoints.slice(this.start,this.end)))}}]),t}());e.LineBreaker=function(t,e){var A=(0,D.toCodePoints)(t),n=V(A,e),i=r(n,3),o=i[0],a=i[1],s=i[2],c=A.length,l=0,u=0;return{next:function(){if(u>=c)return{done:!0};for(var t=S;u<c&&(t=X(A,a,o,++u,s))===S;);if(t!==S||u===c){var e=new G(A,t,l,u);return l=u,{value:e,done:!1}}return{done:!0}}}}});e(R);R.LineBreaker,R.inlineBreakOpportunities,R.lineBreakAtIndex,R.codePointsToCharacterClasses,R.UnicodeTrie,R.BREAK_ALLOWED,R.BREAK_NOT_ALLOWED,R.BREAK_MANDATORY,R.classes,R.LETTER_NUMBER_MODIFIER;var M=A(function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),Object.defineProperty(e,\"toCodePoints\",{enumerable:!0,get:function(){return D.toCodePoints}}),Object.defineProperty(e,\"fromCodePoint\",{enumerable:!0,get:function(){return D.fromCodePoint}}),Object.defineProperty(e,\"LineBreaker\",{enumerable:!0,get:function(){return R.LineBreaker}})});e(M);var K=A(function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.breakWords=e.fromCodePoint=e.toCodePoints=void 0,Object.defineProperty(e,\"toCodePoints\",{enumerable:!0,get:function(){return M.toCodePoints}}),Object.defineProperty(e,\"fromCodePoint\",{enumerable:!0,get:function(){return M.fromCodePoint}});(function(t){t&&t.__esModule})(G),e.breakWords=function(t,e){for(var A=(0,M.LineBreaker)(t,{lineBreak:e.style.lineBreak,wordBreak:e.style.overflowWrap===x.OVERFLOW_WRAP.BREAK_WORD?\"break-word\":e.style.wordBreak}),r=[],n=void 0;!(n=A.next()).done;)r.push(n.value.slice());return r}});e(K);K.breakWords,K.fromCodePoint,K.toCodePoints;var z=A(function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.parseTextBounds=e.TextBounds=void 0;var A=function(t){return t&&t.__esModule?t:{default:t}}(P),r=e.TextBounds=function t(e,A){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.text=e,this.bounds=A},n=(e.parseTextBounds=function(t,e,o){for(var s=0!==e.style.letterSpacing?(0,K.toCodePoints)(t).map(function(t){return(0,K.fromCodePoint)(t)}):(0,K.breakWords)(t,e),c=s.length,l=o.parentNode?o.parentNode.ownerDocument.defaultView:null,u=l?l.pageXOffset:0,h=l?l.pageYOffset:0,d=[],f=0,p=0;p<c;p++){var g=s[p];if(e.style.textDecoration!==a.TEXT_DECORATION.NONE||g.trim().length>0)if(A.default.SUPPORT_RANGE_BOUNDS)d.push(new r(g,i(o,f,g.length,u,h)));else{var B=o.splitText(g.length);d.push(new r(g,n(o,u,h))),o=B}else A.default.SUPPORT_RANGE_BOUNDS||(o=o.splitText(g.length));f+=g.length}return d},function(t,e,A){var r=t.ownerDocument.createElement(\"html2canvaswrapper\");r.appendChild(t.cloneNode(!0));var n=t.parentNode;if(n){n.replaceChild(r,t);var i=(0,p.parseBounds)(r,e,A);return r.firstChild&&n.replaceChild(r.firstChild,r),i}return new p.Bounds(0,0,0,0)}),i=function(t,e,A,r,n){var i=t.ownerDocument.createRange();return i.setStart(t,e),i.setEnd(t,e+A),p.Bounds.fromClientRect(i.getBoundingClientRect(),r,n)}});e(z);z.parseTextBounds,z.TextBounds;var q=A(function(t,e){function A(t,e,A){return t.length>0?e+A.toUpperCase():t}Object.defineProperty(e,\"__esModule\",{value:!0});var r=function(){function t(t,e){for(var A=0;A<e.length;A++){var r=e[A];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,A,r){return A&&t(e.prototype,A),r&&t(e,r),e}}(),n=function(){function t(e,A,r){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.text=e,this.parent=A,this.bounds=r}return r(t,null,[{key:\"fromTextNode\",value:function(e,A){var r=o(e.data,A.style.textTransform);return new t(r,A,(0,z.parseTextBounds)(r,A,e))}}]),t}();e.default=n;var i=/(^|\\s|:|-|\\(|\\))([a-z])/g,o=function(t,e){switch(e){case S.TEXT_TRANSFORM.LOWERCASE:return t.toLowerCase();case S.TEXT_TRANSFORM.CAPITALIZE:return t.replace(i,A);case S.TEXT_TRANSFORM.UPPERCASE:return t.toUpperCase();default:return t}}});e(q);var j=A(function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0});e.default=function t(e,A,r){!function(e,A){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this),this.type=i.PATH.CIRCLE,this.x=e,this.y=A,this.radius=r}});e(j);var X=A(function(t,e){function A(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,\"__esModule\",{value:!0}),e.reformatInputBounds=e.inlineSelectElement=e.inlineTextAreaElement=e.inlineInputElement=e.getInputBorderRadius=e.INPUT_BACKGROUND=e.INPUT_BORDERS=e.INPUT_COLOR=void 0;var r=A(q),n=A(j),i=A(d),a=A(o),s=A(u),c=(e.INPUT_COLOR=new a.default([42,42,42]),new a.default([165,165,165])),h=new a.default([222,222,222]),f={borderWidth:1,borderColor:c,borderStyle:w.BORDER_STYLE.SOLID},p=(e.INPUT_BORDERS=[f,f,f,f],e.INPUT_BACKGROUND={backgroundColor:h,backgroundImage:[],backgroundClip:B.BACKGROUND_CLIP.PADDING_BOX,backgroundOrigin:B.BACKGROUND_ORIGIN.PADDING_BOX},new s.default(\"50%\")),g=[p,p],m=[g,g,g,g],y=new s.default(\"3px\"),v=[y,y],Q=[v,v,v,v],C=(e.getInputBorderRadius=function(t){return\"radio\"===t.type?m:Q},e.inlineInputElement=function(t,e){if(\"radio\"===t.type||\"checkbox\"===t.type){if(t.checked){var A=Math.min(e.bounds.width,e.bounds.height);e.childNodes.push(\"checkbox\"===t.type?[new i.default(e.bounds.left+.39363*A,e.bounds.top+.79*A),new i.default(e.bounds.left+.16*A,e.bounds.top+.5549*A),new i.default(e.bounds.left+.27347*A,e.bounds.top+.44071*A),new i.default(e.bounds.left+.39694*A,e.bounds.top+.5649*A),new i.default(e.bounds.left+.72983*A,e.bounds.top+.23*A),new i.default(e.bounds.left+.84*A,e.bounds.top+.34085*A),new i.default(e.bounds.left+.39363*A,e.bounds.top+.79*A)]:new n.default(e.bounds.left+A/4,e.bounds.top+A/4,A/4))}}else C(U(t),t,e,!1)},e.inlineTextAreaElement=function(t,e){C(t.value,t,e,!0)},e.inlineSelectElement=function(t,e){var A=t.options[t.selectedIndex||0];C(A?A.text||\"\":\"\",t,e,!1)},e.reformatInputBounds=function(t){return t.width>t.height?(t.left+=(t.width-t.height)/2,t.width=t.height):t.width<t.height&&(t.top+=(t.height-t.width)/2,t.height=t.width),t},function(t,e,A,n){var i=e.ownerDocument.body;if(t.length>0&&i){var o=e.ownerDocument.createElement(\"html2canvaswrapper\");(0,l.copyCSSStyles)(e.ownerDocument.defaultView.getComputedStyle(e,null),o),o.style.position=\"absolute\",o.style.left=A.bounds.left+\"px\",o.style.top=A.bounds.top+\"px\",n||(o.style.whiteSpace=\"nowrap\");var a=e.ownerDocument.createTextNode(t);o.appendChild(a),i.appendChild(o),A.childNodes.push(r.default.fromTextNode(a,A)),i.removeChild(o)}}),U=function(t){var e=\"password\"===t.type?new Array(t.value.length+1).join(\"â€¢\"):t.value;return 0===e.length?t.placeholder||\"\":e}});e(X);X.reformatInputBounds,X.inlineSelectElement,X.inlineTextAreaElement,X.inlineInputElement,X.getInputBorderRadius,X.INPUT_BACKGROUND,X.INPUT_BORDERS,X.INPUT_COLOR;var V=A(function(t,e){function A(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,\"__esModule\",{value:!0}),e.createCounterText=e.inlineListItemElement=e.getListOwner=void 0;var r=A(G),n=A(q),i=[\"OL\",\"UL\",\"MENU\"],o=(e.getListOwner=function(t){var e=t.parent;if(!e)return null;do{if(-1!==i.indexOf(e.tagName))return e;e=e.parent}while(e);return t.parent},e.inlineListItemElement=function(t,e,A){var i=e.style.listStyle;if(i){var o=t.ownerDocument.defaultView.getComputedStyle(t,null),a=t.ownerDocument.createElement(\"html2canvaswrapper\");switch((0,l.copyCSSStyles)(o,a),a.style.position=\"absolute\",a.style.bottom=\"auto\",a.style.display=\"block\",a.style.letterSpacing=\"normal\",i.listStylePosition){case b.LIST_STYLE_POSITION.OUTSIDE:a.style.left=\"auto\",a.style.right=t.ownerDocument.defaultView.innerWidth-e.bounds.left-e.style.margin[1].getAbsoluteValue(e.bounds.width)+7+\"px\",a.style.textAlign=\"right\";break;case b.LIST_STYLE_POSITION.INSIDE:a.style.left=e.bounds.left-e.style.margin[3].getAbsoluteValue(e.bounds.width)+\"px\",a.style.right=\"auto\",a.style.textAlign=\"left\"}var s=void 0,c=e.style.margin[0].getAbsoluteValue(e.bounds.width),u=i.listStyleImage;if(u)if(\"url\"===u.method){var h=t.ownerDocument.createElement(\"img\");h.src=u.args[0],a.style.top=e.bounds.top-c+\"px\",a.style.width=\"auto\",a.style.height=\"auto\",a.appendChild(h)}else{var d=.5*parseFloat(e.style.font.fontSize);a.style.top=e.bounds.top-c+e.bounds.height-1.5*d+\"px\",a.style.width=d+\"px\",a.style.height=d+\"px\",a.style.backgroundImage=o.listStyleImage}else\"number\"==typeof e.listIndex&&(s=t.ownerDocument.createTextNode(g(e.listIndex,i.listStyleType,!0)),a.appendChild(s),a.style.top=e.bounds.top-c+\"px\");var f=t.ownerDocument.body;f.appendChild(a),s?(e.childNodes.push(n.default.fromTextNode(s,e)),f.removeChild(a)):e.childNodes.push(new r.default(a,e,A,0))}},{integers:[1e3,900,500,400,100,90,50,40,10,9,5,4,1],values:[\"M\",\"CM\",\"D\",\"CD\",\"C\",\"XC\",\"L\",\"XL\",\"X\",\"IX\",\"V\",\"IV\",\"I\"]}),a={integers:[9e3,8e3,7e3,6e3,5e3,4e3,3e3,2e3,1e3,900,800,700,600,500,400,300,200,100,90,80,70,60,50,40,30,20,10,9,8,7,6,5,4,3,2,1],values:[\"Õ”\",\"Õ“\",\"Õ’\",\"Õ‘\",\"Õ�\",\"Õ�\",\"ÕŽ\",\"Õ�\",\"ÕŒ\",\"Õ‹\",\"ÕŠ\",\"Õ‰\",\"Õˆ\",\"Õ‡\",\"Õ†\",\"Õ…\",\"Õ„\",\"Õƒ\",\"Õ‚\",\"Õ�\",\"Õ€\",\"Ô¿\",\"Ô¾\",\"Ô½\",\"Ô¼\",\"Ô»\",\"Ôº\",\"Ô¹\",\"Ô¸\",\"Ô·\",\"Ô¶\",\"Ôµ\",\"Ô´\",\"Ô³\",\"Ô²\",\"Ô±\"]},s={integers:[1e4,9e3,8e3,7e3,6e3,5e3,4e3,3e3,2e3,1e3,400,300,200,100,90,80,70,60,50,40,30,20,19,18,17,16,15,10,9,8,7,6,5,4,3,2,1],values:[\"×™×³\",\"×˜×³\",\"×—×³\",\"×–×³\",\"×•×³\",\"×”×³\",\"×“×³\",\"×’×³\",\"×‘×³\",\"×�×³\",\"×ª\",\"×©\",\"×¨\",\"×§\",\"×¦\",\"×¤\",\"×¢\",\"×¡\",\"× \",\"×ž\",\"×œ\",\"×›\",\"×™×˜\",\"×™×—\",\"×™×–\",\"×˜×–\",\"×˜×•\",\"×™\",\"×˜\",\"×—\",\"×–\",\"×•\",\"×”\",\"×“\",\"×’\",\"×‘\",\"×�\"]},c={integers:[1e4,9e3,8e3,7e3,6e3,5e3,4e3,3e3,2e3,1e3,900,800,700,600,500,400,300,200,100,90,80,70,60,50,40,30,20,10,9,8,7,6,5,4,3,2,1],values:[\"áƒµ\",\"áƒ°\",\"áƒ¯\",\"áƒ´\",\"áƒ®\",\"áƒ­\",\"áƒ¬\",\"áƒ«\",\"áƒª\",\"áƒ©\",\"áƒ¨\",\"áƒ§\",\"áƒ¦\",\"áƒ¥\",\"áƒ¤\",\"áƒ³\",\"áƒ¢\",\"áƒ¡\",\"áƒ \",\"áƒŸ\",\"áƒž\",\"áƒ�\",\"áƒ²\",\"áƒœ\",\"áƒ›\",\"áƒš\",\"áƒ™\",\"áƒ˜\",\"áƒ—\",\"áƒ±\",\"áƒ–\",\"áƒ•\",\"áƒ”\",\"áƒ“\",\"áƒ’\",\"áƒ‘\",\"áƒ�\"]},u=function(t,e,A,r,n,i){return t<e||t>A?g(t,n,i.length>0):r.integers.reduce(function(e,A,n){for(;t>=A;)t-=A,e+=r.values[n];return e},\"\")+i},h=function(t,e,A,r){var n=\"\";do{A||t--,n=r(t)+n,t/=e}while(t*e>=e);return n},d=function(t,e,A,r,n){var i=A-e+1;return(t<0?\"-\":\"\")+(h(Math.abs(t),i,r,function(t){return(0,K.fromCodePoint)(Math.floor(t%i)+e)})+n)},f=function(t,e){var A=arguments.length>2&&void 0!==arguments[2]?arguments[2]:\". \",r=e.length;return h(Math.abs(t),r,!1,function(t){return e[Math.floor(t%r)]})+A},p=function(t,e,A,r,n,i){if(t<-9999||t>9999)return g(t,b.LIST_STYLE_TYPE.CJK_DECIMAL,n.length>0);var o=Math.abs(t),a=n;if(0===o)return e[0]+a;for(var s=0;o>0&&s<=4;s++){var c=o%10;0===c&&(0,l.contains)(i,1)&&\"\"!==a?a=e[c]+a:c>1||1===c&&0===s||1===c&&1===s&&(0,l.contains)(i,2)||1===c&&1===s&&(0,l.contains)(i,4)&&t>100||1===c&&s>1&&(0,l.contains)(i,8)?a=e[c]+(s>0?A[s-1]:\"\")+a:1===c&&s>0&&(a=A[s-1]+a),o=Math.floor(o/10)}return(t<0?r:\"\")+a},g=e.createCounterText=function(t,e,A){var r=A?\". \":\"\",n=A?\"ã€�\":\"\",i=A?\", \":\"\";switch(e){case b.LIST_STYLE_TYPE.DISC:return\"â€¢\";case b.LIST_STYLE_TYPE.CIRCLE:return\"â—¦\";case b.LIST_STYLE_TYPE.SQUARE:return\"â—¾\";case b.LIST_STYLE_TYPE.DECIMAL_LEADING_ZERO:var l=d(t,48,57,!0,r);return l.length<4?\"0\"+l:l;case b.LIST_STYLE_TYPE.CJK_DECIMAL:return f(t,\"ã€‡ä¸€äºŒä¸‰å››äº”å…­ä¸ƒå…«ä¹�\",n);case b.LIST_STYLE_TYPE.LOWER_ROMAN:return u(t,1,3999,o,b.LIST_STYLE_TYPE.DECIMAL,r).toLowerCase();case b.LIST_STYLE_TYPE.UPPER_ROMAN:return u(t,1,3999,o,b.LIST_STYLE_TYPE.DECIMAL,r);case b.LIST_STYLE_TYPE.LOWER_GREEK:return d(t,945,969,!1,r);case b.LIST_STYLE_TYPE.LOWER_ALPHA:return d(t,97,122,!1,r);case b.LIST_STYLE_TYPE.UPPER_ALPHA:return d(t,65,90,!1,r);case b.LIST_STYLE_TYPE.ARABIC_INDIC:return d(t,1632,1641,!0,r);case b.LIST_STYLE_TYPE.ARMENIAN:case b.LIST_STYLE_TYPE.UPPER_ARMENIAN:return u(t,1,9999,a,b.LIST_STYLE_TYPE.DECIMAL,r);case b.LIST_STYLE_TYPE.LOWER_ARMENIAN:return u(t,1,9999,a,b.LIST_STYLE_TYPE.DECIMAL,r).toLowerCase();case b.LIST_STYLE_TYPE.BENGALI:return d(t,2534,2543,!0,r);case b.LIST_STYLE_TYPE.CAMBODIAN:case b.LIST_STYLE_TYPE.KHMER:return d(t,6112,6121,!0,r);case b.LIST_STYLE_TYPE.CJK_EARTHLY_BRANCH:return f(t,\"å­�ä¸‘å¯…å�¯è¾°å·³å�ˆæœªç”³é…‰æˆŒäº¥\",n);case b.LIST_STYLE_TYPE.CJK_HEAVENLY_STEM:return f(t,\"ç”²ä¹™ä¸™ä¸�æˆŠå·±åºšè¾›å£¬ç™¸\",n);case b.LIST_STYLE_TYPE.CJK_IDEOGRAPHIC:case b.LIST_STYLE_TYPE.TRAD_CHINESE_INFORMAL:return p(t,\"é›¶ä¸€äºŒä¸‰å››äº”å…­ä¸ƒå…«ä¹�\",\"å��ç™¾å�ƒè�¬\",\"è² \",n,14);case b.LIST_STYLE_TYPE.TRAD_CHINESE_FORMAL:return p(t,\"é›¶å£¹è²³å�ƒè‚†ä¼�é™¸æŸ’æ�ŒçŽ–\",\"æ‹¾ä½°ä»Ÿè�¬\",\"è² \",n,15);case b.LIST_STYLE_TYPE.SIMP_CHINESE_INFORMAL:return p(t,\"é›¶ä¸€äºŒä¸‰å››äº”å…­ä¸ƒå…«ä¹�\",\"å��ç™¾å�ƒè�¬\",\"è´Ÿ\",n,14);case b.LIST_STYLE_TYPE.SIMP_CHINESE_FORMAL:return p(t,\"é›¶å£¹è´°å��è‚†ä¼�é™†æŸ’æ�ŒçŽ–\",\"æ‹¾ä½°ä»Ÿè�¬\",\"è´Ÿ\",n,15);case b.LIST_STYLE_TYPE.JAPANESE_INFORMAL:return p(t,\"ã€‡ä¸€äºŒä¸‰å››äº”å…­ä¸ƒå…«ä¹�\",\"å��ç™¾å�ƒä¸‡\",\"ãƒžã‚¤ãƒŠã‚¹\",n,0);case b.LIST_STYLE_TYPE.JAPANESE_FORMAL:return p(t,\"é›¶å£±å¼�å�‚å››ä¼�å…­ä¸ƒå…«ä¹�\",\"æ‹¾ç™¾å�ƒä¸‡\",\"ãƒžã‚¤ãƒŠã‚¹\",n,7);case b.LIST_STYLE_TYPE.KOREAN_HANGUL_FORMAL:return p(t,\"ì˜�ì�¼ì�´ì‚¼ì‚¬ì˜¤ìœ¡ì¹ íŒ”êµ¬\",\"ì‹­ë°±ì²œë§Œ\",\"ë§ˆì�´ë„ˆìŠ¤ \",i,7);case b.LIST_STYLE_TYPE.KOREAN_HANJA_INFORMAL:return p(t,\"é›¶ä¸€äºŒä¸‰å››äº”å…­ä¸ƒå…«ä¹�\",\"å��ç™¾å�ƒè�¬\",\"ë§ˆì�´ë„ˆìŠ¤ \",i,0);case b.LIST_STYLE_TYPE.KOREAN_HANJA_FORMAL:return p(t,\"é›¶å£¹è²³å�ƒå››äº”å…­ä¸ƒå…«ä¹�\",\"æ‹¾ç™¾å�ƒ\",\"ë§ˆì�´ë„ˆìŠ¤ \",i,7);case b.LIST_STYLE_TYPE.DEVANAGARI:return d(t,2406,2415,!0,r);case b.LIST_STYLE_TYPE.GEORGIAN:return u(t,1,19999,c,b.LIST_STYLE_TYPE.DECIMAL,r);case b.LIST_STYLE_TYPE.GUJARATI:return d(t,2790,2799,!0,r);case b.LIST_STYLE_TYPE.GURMUKHI:return d(t,2662,2671,!0,r);case b.LIST_STYLE_TYPE.HEBREW:return u(t,1,10999,s,b.LIST_STYLE_TYPE.DECIMAL,r);case b.LIST_STYLE_TYPE.HIRAGANA:return f(t,\"ã�‚ã�„ã�†ã�ˆã�Šã�‹ã��ã��ã�‘ã�“ã�•ã�—ã�™ã�›ã��ã�Ÿã�¡ã�¤ã�¦ã�¨ã�ªã�«ã�¬ã�­ã�®ã�¯ã�²ã�µã�¸ã�»ã�¾ã�¿ã‚€ã‚�ã‚‚ã‚„ã‚†ã‚ˆã‚‰ã‚Šã‚‹ã‚Œã‚�ã‚�ã‚�ã‚‘ã‚’ã‚“\");case b.LIST_STYLE_TYPE.HIRAGANA_IROHA:return f(t,\"ã�„ã‚�ã�¯ã�«ã�»ã�¸ã�¨ã�¡ã‚Šã�¬ã‚‹ã‚’ã‚�ã�‹ã‚ˆã�Ÿã‚Œã��ã�¤ã�­ã�ªã‚‰ã‚€ã�†ã‚�ã�®ã�Šã��ã‚„ã�¾ã�‘ã�µã�“ã�ˆã�¦ã�‚ã�•ã��ã‚†ã‚�ã�¿ã�—ã‚‘ã�²ã‚‚ã�›ã�™\");case b.LIST_STYLE_TYPE.KANNADA:return d(t,3302,3311,!0,r);case b.LIST_STYLE_TYPE.KATAKANA:return f(t,\"ã‚¢ã‚¤ã‚¦ã‚¨ã‚ªã‚«ã‚­ã‚¯ã‚±ã‚³ã‚µã‚·ã‚¹ã‚»ã‚½ã‚¿ãƒ�ãƒ„ãƒ†ãƒˆãƒŠãƒ‹ãƒŒãƒ�ãƒŽãƒ�ãƒ’ãƒ•ãƒ˜ãƒ›ãƒžãƒŸãƒ ãƒ¡ãƒ¢ãƒ¤ãƒ¦ãƒ¨ãƒ©ãƒªãƒ«ãƒ¬ãƒ­ãƒ¯ãƒ°ãƒ±ãƒ²ãƒ³\",n);case b.LIST_STYLE_TYPE.KATAKANA_IROHA:return f(t,\"ã‚¤ãƒ­ãƒ�ãƒ‹ãƒ›ãƒ˜ãƒˆãƒ�ãƒªãƒŒãƒ«ãƒ²ãƒ¯ã‚«ãƒ¨ã‚¿ãƒ¬ã‚½ãƒ„ãƒ�ãƒŠãƒ©ãƒ ã‚¦ãƒ°ãƒŽã‚ªã‚¯ãƒ¤ãƒžã‚±ãƒ•ã‚³ã‚¨ãƒ†ã‚¢ã‚µã‚­ãƒ¦ãƒ¡ãƒŸã‚·ãƒ±ãƒ’ãƒ¢ã‚»ã‚¹\",n);case b.LIST_STYLE_TYPE.LAO:return d(t,3792,3801,!0,r);case b.LIST_STYLE_TYPE.MONGOLIAN:return d(t,6160,6169,!0,r);case b.LIST_STYLE_TYPE.MYANMAR:return d(t,4160,4169,!0,r);case b.LIST_STYLE_TYPE.ORIYA:return d(t,2918,2927,!0,r);case b.LIST_STYLE_TYPE.PERSIAN:return d(t,1776,1785,!0,r);case b.LIST_STYLE_TYPE.TAMIL:return d(t,3046,3055,!0,r);case b.LIST_STYLE_TYPE.TELUGU:return d(t,3174,3183,!0,r);case b.LIST_STYLE_TYPE.THAI:return d(t,3664,3673,!0,r);case b.LIST_STYLE_TYPE.TIBETAN:return d(t,3872,3881,!0,r);case b.LIST_STYLE_TYPE.DECIMAL:default:return d(t,48,57,!0,r)}}});e(V);V.createCounterText,V.inlineListItemElement,V.getListOwner;var G=A(function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0});var A=function(){function t(t,e){for(var A=0;A<e.length;A++){var r=e[A];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,A,r){return A&&t(e.prototype,A),r&&t(e,r),e}}(),r=function(t){return t&&t.__esModule?t:{default:t}}(o),n=[\"INPUT\",\"TEXTAREA\",\"SELECT\"],i=function(){function t(e,A,i,o){var c=this;!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.parent=A,this.tagName=e.tagName,this.index=o,this.childNodes=[],this.listItems=[],\"number\"==typeof e.start&&(this.listStart=e.start);var l=e.ownerDocument.defaultView,u=l.pageXOffset,h=l.pageYOffset,d=l.getComputedStyle(e,null),f=(0,y.parseDisplay)(d.display),O=\"radio\"===e.type||\"checkbox\"===e.type,P=(0,H.parsePosition)(d.position);if(this.style={background:O?X.INPUT_BACKGROUND:(0,B.parseBackground)(d,i),border:O?X.INPUT_BORDERS:(0,w.parseBorder)(d),borderRadius:(e instanceof l.HTMLInputElement||e instanceof HTMLInputElement)&&O?(0,X.getInputBorderRadius)(e):(0,m.parseBorderRadius)(d),color:O?X.INPUT_COLOR:new r.default(d.color),display:f,float:(0,v.parseCSSFloat)(d.float),font:(0,Q.parseFont)(d),letterSpacing:(0,C.parseLetterSpacing)(d.letterSpacing),listStyle:f===y.DISPLAY.LIST_ITEM?(0,b.parseListStyle)(d):null,lineBreak:(0,U.parseLineBreak)(d.lineBreak),margin:(0,F.parseMargin)(d),opacity:parseFloat(d.opacity),overflow:-1===n.indexOf(e.tagName)?(0,E.parseOverflow)(d.overflow):E.OVERFLOW.HIDDEN,overflowWrap:(0,x.parseOverflowWrap)(d.overflowWrap?d.overflowWrap:d.wordWrap),padding:(0,g.parsePadding)(d),position:P,textDecoration:(0,a.parseTextDecoration)(d),textShadow:(0,I.parseTextShadow)(d.textShadow),textTransform:(0,S.parseTextTransform)(d.textTransform),transform:(0,_.parseTransform)(d),visibility:(0,T.parseVisibility)(d.visibility),wordBreak:(0,N.parseWordBreak)(d.wordBreak),zIndex:(0,k.parseZIndex)(P!==H.POSITION.STATIC?d.zIndex:\"auto\")},this.isTransformed()&&(e.style.transform=\"matrix(1,0,0,1,0,0)\"),f===y.DISPLAY.LIST_ITEM){var D=(0,V.getListOwner)(this);if(D){var L=D.listItems.length;D.listItems.push(this),this.listIndex=e.hasAttribute(\"value\")&&\"number\"==typeof e.value?e.value:0===L?\"number\"==typeof D.listStart?D.listStart:1:D.listItems[L-1].listIndex+1}}\"IMG\"===e.tagName&&e.addEventListener(\"load\",function(){c.bounds=(0,p.parseBounds)(e,u,h),c.curvedBounds=(0,p.parseBoundCurves)(c.bounds,c.style.border,c.style.borderRadius)}),this.image=s(e,i),this.bounds=O?(0,X.reformatInputBounds)((0,p.parseBounds)(e,u,h)):(0,p.parseBounds)(e,u,h),this.curvedBounds=(0,p.parseBoundCurves)(this.bounds,this.style.border,this.style.borderRadius)}return A(t,[{key:\"getClipPaths\",value:function(){var t=this.parent?this.parent.getClipPaths():[];return this.style.overflow!==E.OVERFLOW.VISIBLE?t.concat([(0,p.calculatePaddingBoxPath)(this.curvedBounds)]):t}},{key:\"isInFlow\",value:function(){return this.isRootElement()&&!this.isFloating()&&!this.isAbsolutelyPositioned()}},{key:\"isVisible\",value:function(){return!(0,l.contains)(this.style.display,y.DISPLAY.NONE)&&this.style.opacity>0&&this.style.visibility===T.VISIBILITY.VISIBLE}},{key:\"isAbsolutelyPositioned\",value:function(){return this.style.position!==H.POSITION.STATIC&&this.style.position!==H.POSITION.RELATIVE}},{key:\"isPositioned\",value:function(){return this.style.position!==H.POSITION.STATIC}},{key:\"isFloating\",value:function(){return this.style.float!==v.FLOAT.NONE}},{key:\"isRootElement\",value:function(){return null===this.parent}},{key:\"isTransformed\",value:function(){return null!==this.style.transform}},{key:\"isPositionedWithZIndex\",value:function(){return this.isPositioned()&&!this.style.zIndex.auto}},{key:\"isInlineLevel\",value:function(){return(0,l.contains)(this.style.display,y.DISPLAY.INLINE)||(0,l.contains)(this.style.display,y.DISPLAY.INLINE_BLOCK)||(0,l.contains)(this.style.display,y.DISPLAY.INLINE_FLEX)||(0,l.contains)(this.style.display,y.DISPLAY.INLINE_GRID)||(0,l.contains)(this.style.display,y.DISPLAY.INLINE_LIST_ITEM)||(0,l.contains)(this.style.display,y.DISPLAY.INLINE_TABLE)}},{key:\"isInlineBlockOrInlineTable\",value:function(){return(0,l.contains)(this.style.display,y.DISPLAY.INLINE_BLOCK)||(0,l.contains)(this.style.display,y.DISPLAY.INLINE_TABLE)}}]),t}();e.default=i;var s=function(t,e){if(t instanceof t.ownerDocument.defaultView.SVGSVGElement||t instanceof SVGSVGElement){var A=new XMLSerializer;return e.loadImage(\"data:image/svg+xml,\"+encodeURIComponent(A.serializeToString(t)))}switch(t.tagName){case\"IMG\":var r=t;return e.loadImage(r.currentSrc||r.src);case\"CANVAS\":var n=t;return e.loadCanvas(n);case\"IFRAME\":var i=t.getAttribute(\"data-html2canvas-internal-iframe-key\");if(i)return i}return null}});e(G);var W=A(function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0});var A=function(){function t(t,e){for(var A=0;A<e.length;A++){var r=e[A];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,A,r){return A&&t(e.prototype,A),r&&t(e,r),e}}(),r=(function(t){t&&t.__esModule}(G),function(){function t(e,A,r){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.container=e,this.parent=A,this.contexts=[],this.children=[],this.treatAsRealStackingContext=r}return A(t,[{key:\"getOpacity\",value:function(){return this.parent?this.container.style.opacity*this.parent.getOpacity():this.container.style.opacity}},{key:\"getRealParentStackingContext\",value:function(){return!this.parent||this.treatAsRealStackingContext?this:this.parent.getRealParentStackingContext()}}]),t}());e.default=r});e(W);var Y=A(function(t,e){function A(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,\"__esModule\",{value:!0}),e.NodeParser=void 0;var r=A(W),n=A(G),i=A(q),o=(e.NodeParser=function(t,e,A){var i=0,o=new n.default(t,null,e,i++),s=new r.default(o,null,!0);return a(t,o,s,e,i),s},[\"SCRIPT\",\"HEAD\",\"TITLE\",\"OBJECT\",\"BR\",\"OPTION\"]),a=function t(e,A,a,l,u){for(var h,d=e.firstChild;d;d=h){h=d.nextSibling;var f=d.ownerDocument.defaultView;if(d instanceof f.Text||d instanceof Text||f.parent&&d instanceof f.parent.Text)d.data.trim().length>0&&A.childNodes.push(i.default.fromTextNode(d,A));else if(d instanceof f.HTMLElement||d instanceof HTMLElement||f.parent&&d instanceof f.parent.HTMLElement){if(-1===o.indexOf(d.nodeName)){var p=new n.default(d,A,l,u++);if(p.isVisible()){\"INPUT\"===d.tagName?(0,X.inlineInputElement)(d,p):\"TEXTAREA\"===d.tagName?(0,X.inlineTextAreaElement)(d,p):\"SELECT\"===d.tagName?(0,X.inlineSelectElement)(d,p):p.style.listStyle&&p.style.listStyle.listStyleType!==b.LIST_STYLE_TYPE.NONE&&(0,V.inlineListItemElement)(d,p,l);var g=\"TEXTAREA\"!==d.tagName,B=s(p,d);if(B||c(p)){var w=B||p.isPositioned()?a.getRealParentStackingContext():a,m=new r.default(p,w,B);w.contexts.push(m),g&&t(d,p,m,l,u)}else a.children.push(p),g&&t(d,p,a,l,u)}}}else if(d instanceof f.SVGSVGElement||d instanceof SVGSVGElement||f.parent&&d instanceof f.parent.SVGSVGElement){var y=new n.default(d,A,l,u++),v=s(y,d);if(v||c(y)){var Q=v||y.isPositioned()?a.getRealParentStackingContext():a,C=new r.default(y,Q,v);Q.contexts.push(C)}else a.children.push(y)}}},s=function(t,e){return t.isRootElement()||t.isPositionedWithZIndex()||t.style.opacity<1||t.isTransformed()||l(t,e)},c=function(t){return t.isPositioned()||t.isFloating()},l=function(t,e){return\"BODY\"===e.nodeName&&t.parent instanceof n.default&&t.parent.style.background.backgroundColor.isTransparent()}});e(Y);Y.NodeParser;var J=A(function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.FontMetrics=void 0;var A=function(){function t(t,e){for(var A=0;A<e.length;A++){var r=e[A];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,A,r){return A&&t(e.prototype,A),r&&t(e,r),e}}();e.FontMetrics=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this._data={},this._document=e}return A(t,[{key:\"_parseMetrics\",value:function(t){var e=this._document.createElement(\"div\"),A=this._document.createElement(\"img\"),r=this._document.createElement(\"span\"),n=this._document.body;if(!n)throw new Error(\"\");e.style.visibility=\"hidden\",e.style.fontFamily=t.fontFamily,e.style.fontSize=t.fontSize,e.style.margin=\"0\",e.style.padding=\"0\",n.appendChild(e),A.src=l.SMALL_IMAGE,A.width=1,A.height=1,A.style.margin=\"0\",A.style.padding=\"0\",A.style.verticalAlign=\"baseline\",r.style.fontFamily=t.fontFamily,r.style.fontSize=t.fontSize,r.style.margin=\"0\",r.style.padding=\"0\",r.appendChild(this._document.createTextNode(\"Hidden Text\")),e.appendChild(r),e.appendChild(A);var i=A.offsetTop-r.offsetTop+2;e.removeChild(r),e.appendChild(this._document.createTextNode(\"Hidden Text\")),e.style.lineHeight=\"normal\",A.style.verticalAlign=\"super\";var o=A.offsetTop-e.offsetTop+2;return n.removeChild(e),{baseline:i,middle:o}}},{key:\"getMetrics\",value:function(t){var e=t.fontFamily+\" \"+t.fontSize;return void 0===this._data[e]&&(this._data[e]=this._parseMetrics(t)),this._data[e]}}]),t}()});e(J);J.FontMetrics;var Z=A(function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0});var A=/([+-]?\\d*\\.?\\d+)(deg|grad|rad|turn)/i;e.parseAngle=function(t){var e=t.match(A);if(e){var r=parseFloat(e[1]);switch(e[2].toLowerCase()){case\"deg\":return Math.PI*r/180;case\"grad\":return Math.PI/200*r;case\"rad\":return r;case\"turn\":return 2*Math.PI*r}}return null}});e(Z);Z.parseAngle;var $=A(function(t,e){function A(t){return t&&t.__esModule?t:{default:t}}function r(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}Object.defineProperty(e,\"__esModule\",{value:!0}),e.transformWebkitRadialGradientArgs=e.parseGradient=e.RadialGradient=e.LinearGradient=e.RADIAL_GRADIENT_SHAPE=e.GRADIENT_TYPE=void 0;var n=function(){return function(t,e){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return function(t,e){var A=[],r=!0,n=!1,i=void 0;try{for(var o,a=t[Symbol.iterator]();!(r=(o=a.next()).done)&&(A.push(o.value),!e||A.length!==e);r=!0);}catch(t){n=!0,i=t}finally{try{!r&&a.return&&a.return()}finally{if(n)throw i}}return A}(t,e);throw new TypeError(\"Invalid attempt to destructure non-iterable instance\")}}(),i=(A(G),A(o)),a=A(u),s=/^(to )?(left|top|right|bottom)( (left|top|right|bottom))?$/i,c=/^([+-]?\\d*\\.?\\d+)% ([+-]?\\d*\\.?\\d+)%$/i,h=/(px)|%|( 0)$/i,d=/^(from|to|color-stop)\\((?:([\\d.]+)(%)?,\\s*)?(.+?)\\)$/i,f=/^\\s*(circle|ellipse)?\\s*((?:([\\d.]+)(px|r?em|%)\\s*(?:([\\d.]+)(px|r?em|%))?)|closest-side|closest-corner|farthest-side|farthest-corner)?\\s*(?:at\\s*(?:(left|center|right)|([\\d.]+)(px|r?em|%))\\s+(?:(top|center|bottom)|([\\d.]+)(px|r?em|%)))?(?:\\s|$)/i,p=e.GRADIENT_TYPE={LINEAR_GRADIENT:0,RADIAL_GRADIENT:1},g=e.RADIAL_GRADIENT_SHAPE={CIRCLE:0,ELLIPSE:1},B={left:new a.default(\"0%\"),top:new a.default(\"0%\"),center:new a.default(\"50%\"),right:new a.default(\"100%\"),bottom:new a.default(\"100%\")},w=e.LinearGradient=function t(e,A){r(this,t),this.type=p.LINEAR_GRADIENT,this.colorStops=e,this.direction=A},m=e.RadialGradient=function t(e,A,n,i){r(this,t),this.type=p.RADIAL_GRADIENT,this.colorStops=e,this.shape=A,this.center=n,this.radius=i},y=(e.parseGradient=function(t,e,A){var r=e.args,n=e.method,i=e.prefix;return\"linear-gradient\"===n?v(r,A,!!i):\"gradient\"===n&&\"linear\"===r[0]?v([\"to bottom\"].concat(I(r.slice(3))),A,!!i):\"radial-gradient\"===n?Q(t,\"-webkit-\"===i?H(r):r,A):\"gradient\"===n&&\"radial\"===r[0]?Q(t,I(H(r.slice(1))),A):void 0},function(t,e,A){for(var r=[],n=e;n<t.length;n++){var o=t[n],s=h.test(o),c=o.lastIndexOf(\" \"),l=new i.default(s?o.substring(0,c):o),u=s?new a.default(o.substring(c+1)):n===e?new a.default(\"0%\"):n===t.length-1?new a.default(\"100%\"):null;r.push({color:l,stop:u})}for(var d=r.map(function(t){var e=t.color,r=t.stop;return{color:e,stop:0===A?0:r?r.getAbsoluteValue(A)/A:null}}),f=d[0].stop,p=0;p<d.length;p++)if(null!==f){var g=d[p].stop;if(null===g){for(var B=p;null===d[B].stop;)B++;for(var w=B-p+1,m=(d[B].stop-f)/w;p<B;p++)f=d[p].stop=f+m}else f=g}return d}),v=function(t,e,A){var r=(0,Z.parseAngle)(t[0]),n=s.test(t[0]),i=n||null!==r||c.test(t[0]),o=i?null!==r?C(A?r-.5*Math.PI:r,e):n?b(t[0],e):F(t[0],e):C(Math.PI,e),a=i?1:0,u=Math.min((0,l.distance)(Math.abs(o.x0)+Math.abs(o.x1),Math.abs(o.y0)+Math.abs(o.y1)),2*e.width,2*e.height);return new w(y(t,a,u),o)},Q=function(t,e,A){var r=e[0].match(f),n=r&&(\"circle\"===r[1]||void 0!==r[3]&&void 0===r[5])?g.CIRCLE:g.ELLIPSE,i={},o={};r&&(void 0!==r[3]&&(i.x=(0,u.calculateLengthFromValueWithUnit)(t,r[3],r[4]).getAbsoluteValue(A.width)),void 0!==r[5]&&(i.y=(0,u.calculateLengthFromValueWithUnit)(t,r[5],r[6]).getAbsoluteValue(A.height)),r[7]?o.x=B[r[7].toLowerCase()]:void 0!==r[8]&&(o.x=(0,u.calculateLengthFromValueWithUnit)(t,r[8],r[9])),r[10]?o.y=B[r[10].toLowerCase()]:void 0!==r[11]&&(o.y=(0,u.calculateLengthFromValueWithUnit)(t,r[11],r[12])));var a={x:void 0===o.x?A.width/2:o.x.getAbsoluteValue(A.width),y:void 0===o.y?A.height/2:o.y.getAbsoluteValue(A.height)},s=x(r&&r[2]||\"farthest-corner\",n,a,i,A);return new m(y(e,r?1:0,Math.min(s.x,s.y)),n,a,s)},C=function(t,e){var A=e.width,r=e.height,n=.5*A,i=.5*r,o=(Math.abs(A*Math.sin(t))+Math.abs(r*Math.cos(t)))/2,a=n+Math.sin(t)*o,s=i-Math.cos(t)*o;return{x0:a,x1:A-a,y0:s,y1:r-s}},U=function(t){return Math.acos(t.width/2/((0,l.distance)(t.width,t.height)/2))},b=function(t,e){switch(t){case\"bottom\":case\"to top\":return C(0,e);case\"left\":case\"to right\":return C(Math.PI/2,e);case\"right\":case\"to left\":return C(3*Math.PI/2,e);case\"top right\":case\"right top\":case\"to bottom left\":case\"to left bottom\":return C(Math.PI+U(e),e);case\"top left\":case\"left top\":case\"to bottom right\":case\"to right bottom\":return C(Math.PI-U(e),e);case\"bottom left\":case\"left bottom\":case\"to top right\":case\"to right top\":return C(U(e),e);case\"bottom right\":case\"right bottom\":case\"to top left\":case\"to left top\":return C(2*Math.PI-U(e),e);case\"top\":case\"to bottom\":default:return C(Math.PI,e)}},F=function(t,e){var A=t.split(\" \").map(parseFloat),r=n(A,2),i=r[0],o=r[1],a=i/100*e.width/(o/100*e.height);return C(Math.atan(isNaN(a)?1:a)+Math.PI/2,e)},E=function(t,e,A,r){return[{x:0,y:0},{x:0,y:t.height},{x:t.width,y:0},{x:t.width,y:t.height}].reduce(function(t,n){var i=(0,l.distance)(e-n.x,A-n.y);return(r?i<t.optimumDistance:i>t.optimumDistance)?{optimumCorner:n,optimumDistance:i}:t},{optimumDistance:r?1/0:-1/0,optimumCorner:null}).optimumCorner},x=function(t,e,A,r,n){var i=A.x,o=A.y,a=0,s=0;switch(t){case\"closest-side\":e===g.CIRCLE?a=s=Math.min(Math.abs(i),Math.abs(i-n.width),Math.abs(o),Math.abs(o-n.height)):e===g.ELLIPSE&&(a=Math.min(Math.abs(i),Math.abs(i-n.width)),s=Math.min(Math.abs(o),Math.abs(o-n.height)));break;case\"closest-corner\":if(e===g.CIRCLE)a=s=Math.min((0,l.distance)(i,o),(0,l.distance)(i,o-n.height),(0,l.distance)(i-n.width,o),(0,l.distance)(i-n.width,o-n.height));else if(e===g.ELLIPSE){var c=Math.min(Math.abs(o),Math.abs(o-n.height))/Math.min(Math.abs(i),Math.abs(i-n.width)),u=E(n,i,o,!0);s=c*(a=(0,l.distance)(u.x-i,(u.y-o)/c))}break;case\"farthest-side\":e===g.CIRCLE?a=s=Math.max(Math.abs(i),Math.abs(i-n.width),Math.abs(o),Math.abs(o-n.height)):e===g.ELLIPSE&&(a=Math.max(Math.abs(i),Math.abs(i-n.width)),s=Math.max(Math.abs(o),Math.abs(o-n.height)));break;case\"farthest-corner\":if(e===g.CIRCLE)a=s=Math.max((0,l.distance)(i,o),(0,l.distance)(i,o-n.height),(0,l.distance)(i-n.width,o),(0,l.distance)(i-n.width,o-n.height));else if(e===g.ELLIPSE){var h=Math.max(Math.abs(o),Math.abs(o-n.height))/Math.max(Math.abs(i),Math.abs(i-n.width)),d=E(n,i,o,!1);s=h*(a=(0,l.distance)(d.x-i,(d.y-o)/h))}break;default:a=r.x||0,s=void 0!==r.y?r.y:a}return{x:a,y:s}},H=e.transformWebkitRadialGradientArgs=function(t){var e=\"\",A=\"\",r=\"\",n=\"\",i=0,o=/^(left|center|right|\\d+(?:px|r?em|%)?)(?:\\s+(top|center|bottom|\\d+(?:px|r?em|%)?))?$/i,a=/^\\d+(px|r?em|%)?(?:\\s+\\d+(px|r?em|%)?)?$/i,s=t[i].match(o);s&&i++;var c=t[i].match(/^(circle|ellipse)?\\s*(closest-side|closest-corner|farthest-side|farthest-corner|contain|cover)?$/i);c&&(e=c[1]||\"\",\"contain\"===(r=c[2]||\"\")?r=\"closest-side\":\"cover\"===r&&(r=\"farthest-corner\"),i++);var l=t[i].match(a);l&&i++;var u=t[i].match(o);u&&i++;var h=t[i].match(a);h&&i++;var d=u||s;d&&d[1]&&(n=d[1]+(/^\\d+$/.test(d[1])?\"px\":\"\"),d[2]&&(n+=\" \"+d[2]+(/^\\d+$/.test(d[2])?\"px\":\"\")));var f=h||l;return f&&(A=f[0],f[1]||(A+=\"px\")),!n||e||A||r||(A=n,n=\"\"),n&&(n=\"at \"+n),[[e,r,A,n].filter(function(t){return!!t}).join(\" \")].concat(t.slice(i))},I=function(t){return t.map(function(t){return t.match(d)}).map(function(e,A){if(!e)return t[A];switch(e[1]){case\"from\":return e[4]+\" 0%\";case\"to\":return e[4]+\" 100%\";case\"color-stop\":return\"%\"===e[3]?e[4]+\" \"+e[2]:e[4]+\" \"+100*parseFloat(e[2])+\"%\"}})}});e($);$.transformWebkitRadialGradientArgs,$.parseGradient,$.RadialGradient,$.LinearGradient,$.RADIAL_GRADIENT_SHAPE,$.GRADIENT_TYPE;var tt=A(function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0});var A=function(){return function(t,e){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return function(t,e){var A=[],r=!0,n=!1,i=void 0;try{for(var o,a=t[Symbol.iterator]();!(r=(o=a.next()).done)&&(A.push(o.value),!e||A.length!==e);r=!0);}catch(t){n=!0,i=t}finally{try{!r&&a.return&&a.return()}finally{if(n)throw i}}return A}(t,e);throw new TypeError(\"Invalid attempt to destructure non-iterable instance\")}}(),r=function(){function t(t,e){for(var A=0;A<e.length;A++){var r=e[A];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,A,r){return A&&t(e.prototype,A),r&&t(e,r),e}}(),n=function(t){return t&&t.__esModule?t:{default:t}}(q),i=function(){function t(e,A){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.target=e,this.options=A,e.render(A)}return r(t,[{key:\"renderNode\",value:function(t){t.isVisible()&&(this.renderNodeBackgroundAndBorders(t),this.renderNodeContent(t))}},{key:\"renderNodeContent\",value:function(t){var e=this,A=function(){if(t.childNodes.length&&t.childNodes.forEach(function(A){if(A instanceof n.default){var r=A.parent.style;e.target.renderTextNode(A.bounds,r.color,r.font,r.textDecoration,r.textShadow)}else e.target.drawShape(A,t.style.color)}),t.image){var A=e.options.imageStore.get(t.image);if(A){var r=(0,p.calculateContentBox)(t.bounds,t.style.padding,t.style.border),i=\"number\"==typeof A.width&&A.width>0?A.width:r.width,o=\"number\"==typeof A.height&&A.height>0?A.height:r.height;i>0&&o>0&&e.target.clip([(0,p.calculatePaddingBoxPath)(t.curvedBounds)],function(){e.target.drawImage(A,new p.Bounds(0,0,i,o),r)})}}},r=t.getClipPaths();r.length?this.target.clip(r,A):A()}},{key:\"renderNodeBackgroundAndBorders\",value:function(t){var e=this,A=!t.style.background.backgroundColor.isTransparent()||t.style.background.backgroundImage.length,r=t.style.border.some(function(t){return t.borderStyle!==w.BORDER_STYLE.NONE&&!t.borderColor.isTransparent()}),n=function(){var r=(0,B.calculateBackgroungPaintingArea)(t.curvedBounds,t.style.background.backgroundClip);A&&e.target.clip([r],function(){t.style.background.backgroundColor.isTransparent()||e.target.fill(t.style.background.backgroundColor),e.renderBackgroundImage(t)}),t.style.border.forEach(function(A,r){A.borderStyle===w.BORDER_STYLE.NONE||A.borderColor.isTransparent()||e.renderBorder(A,r,t.curvedBounds)})};if(A||r){var i=t.parent?t.parent.getClipPaths():[];i.length?this.target.clip(i,n):n()}}},{key:\"renderBackgroundImage\",value:function(t){var e=this;t.style.background.backgroundImage.slice(0).reverse().forEach(function(A){\"url\"===A.source.method&&A.source.args.length?e.renderBackgroundRepeat(t,A):/gradient/i.test(A.source.method)&&e.renderBackgroundGradient(t,A)})}},{key:\"renderBackgroundRepeat\",value:function(t,e){var A=this.options.imageStore.get(e.source.args[0]);if(A){var r=(0,B.calculateBackgroungPositioningArea)(t.style.background.backgroundOrigin,t.bounds,t.style.padding,t.style.border),n=(0,B.calculateBackgroundSize)(e,A,r),i=(0,B.calculateBackgroundPosition)(e.position,n,r),o=(0,B.calculateBackgroundRepeatPath)(e,i,n,r,t.bounds),a=Math.round(r.left+i.x),s=Math.round(r.top+i.y);this.target.renderRepeat(o,A,n,a,s)}}},{key:\"renderBackgroundGradient\",value:function(t,e){var A=(0,B.calculateBackgroungPositioningArea)(t.style.background.backgroundOrigin,t.bounds,t.style.padding,t.style.border),r=(0,B.calculateGradientBackgroundSize)(e,A),n=(0,B.calculateBackgroundPosition)(e.position,r,A),i=new p.Bounds(Math.round(A.left+n.x),Math.round(A.top+n.y),r.width,r.height),o=(0,$.parseGradient)(t,e.source,i);if(o)switch(o.type){case $.GRADIENT_TYPE.LINEAR_GRADIENT:this.target.renderLinearGradient(i,o);break;case $.GRADIENT_TYPE.RADIAL_GRADIENT:this.target.renderRadialGradient(i,o)}}},{key:\"renderBorder\",value:function(t,e,A){this.target.drawShape((0,p.parsePathForBorder)(A,e),t.borderColor)}},{key:\"renderStack\",value:function(t){var e=this;if(t.container.isVisible()){var A=t.getOpacity();A!==this._opacity&&(this.target.setOpacity(t.getOpacity()),this._opacity=A);var r=t.container.style.transform;null!==r?this.target.transform(t.container.bounds.left+r.transformOrigin[0].value,t.container.bounds.top+r.transformOrigin[1].value,r.transform,function(){return e.renderStackContent(t)}):this.renderStackContent(t)}}},{key:\"renderStackContent\",value:function(t){var e=a(t),r=A(e,5),n=r[0],i=r[1],c=r[2],l=r[3],u=r[4],h=o(t),d=A(h,2),f=d[0],p=d[1];this.renderNodeBackgroundAndBorders(t.container),n.sort(s).forEach(this.renderStack,this),this.renderNodeContent(t.container),p.forEach(this.renderNode,this),l.forEach(this.renderStack,this),u.forEach(this.renderStack,this),f.forEach(this.renderNode,this),i.forEach(this.renderStack,this),c.sort(s).forEach(this.renderStack,this)}},{key:\"render\",value:function(t){this.options.backgroundColor&&this.target.rectangle(this.options.x,this.options.y,this.options.width,this.options.height,this.options.backgroundColor),this.renderStack(t);return this.target.getTarget()}}]),t}();e.default=i;var o=function(t){for(var e=[],A=[],r=t.children.length,n=0;n<r;n++){var i=t.children[n];i.isInlineLevel()?e.push(i):A.push(i)}return[e,A]},a=function(t){for(var e=[],A=[],r=[],n=[],i=[],o=t.contexts.length,a=0;a<o;a++){var s=t.contexts[a];s.container.isPositioned()||s.container.style.opacity<1||s.container.isTransformed()?s.container.style.zIndex.order<0?e.push(s):s.container.style.zIndex.order>0?r.push(s):A.push(s):s.container.isFloating()?n.push(s):i.push(s)}return[e,A,r,n,i]},s=function(t,e){return t.container.style.zIndex.order>e.container.style.zIndex.order?1:t.container.style.zIndex.order<e.container.style.zIndex.order?-1:t.container.index>e.container.index?1:-1}});e(tt);var et=A(function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.Proxy=void 0;var A=function(t){return t&&t.__esModule?t:{default:t}}(P);e.Proxy=function(t,e){if(!e.proxy)return Promise.reject(null);var r=e.proxy;return new Promise(function(n,i){var o=A.default.SUPPORT_CORS_XHR&&A.default.SUPPORT_RESPONSE_TYPE?\"blob\":\"text\",a=A.default.SUPPORT_CORS_XHR?new XMLHttpRequest:new XDomainRequest;if(a.onload=function(){if(a instanceof XMLHttpRequest)if(200===a.status)if(\"text\"===o)n(a.response);else{var t=new FileReader;t.addEventListener(\"load\",function(){return n(t.result)},!1),t.addEventListener(\"error\",function(t){return i(t)},!1),t.readAsDataURL(a.response)}else i(\"\");else n(a.responseText)},a.onerror=i,a.open(\"GET\",r+\"?url=\"+encodeURIComponent(t)+\"&responseType=\"+o),\"text\"!==o&&a instanceof XMLHttpRequest&&(a.responseType=o),e.imageTimeout){var s=e.imageTimeout;a.timeout=s,a.ontimeout=function(){return i(\"\")}}a.send()})}});e(et);et.Proxy;var At=A(function(t,e){function A(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}Object.defineProperty(e,\"__esModule\",{value:!0}),e.ResourceStore=void 0;var r=function(){function t(t,e){for(var A=0;A<e.length;A++){var r=e[A];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,A,r){return A&&t(e.prototype,A),r&&t(e,r),e}}(),n=function(t){return t&&t.__esModule?t:{default:t}}(P),i=function(){function t(e,r,n){A(this,t),this.options=e,this._window=n,this.origin=this.getOrigin(n.location.href),this.cache={},this.logger=r,this._index=0}return r(t,[{key:\"loadImage\",value:function(t){var e=this;if(this.hasResourceInCache(t))return t;if(h(t))return this.cache[t]=f(t,this.options.imageTimeout||0),t;if(!d(t)||n.default.SUPPORT_SVG_DRAWING){if(!0===this.options.allowTaint||l(t)||this.isSameOrigin(t))return this.addImage(t,t,!1);if(!this.isSameOrigin(t)){if(\"string\"==typeof this.options.proxy)return this.cache[t]=(0,et.Proxy)(t,this.options).then(function(t){return f(t,e.options.imageTimeout||0)}),t;if(!0===this.options.useCORS&&n.default.SUPPORT_CORS_IMAGES)return this.addImage(t,t,!0)}}}},{key:\"inlineImage\",value:function(t){var e=this;return l(t)?f(t,this.options.imageTimeout||0):this.hasResourceInCache(t)?this.cache[t]:this.isSameOrigin(t)||\"string\"!=typeof this.options.proxy?this.xhrImage(t):this.cache[t]=(0,et.Proxy)(t,this.options).then(function(t){return f(t,e.options.imageTimeout||0)})}},{key:\"xhrImage\",value:function(t){var e=this;return this.cache[t]=new Promise(function(A,r){var n=new XMLHttpRequest;if(n.onreadystatechange=function(){if(4===n.readyState)if(200!==n.status)r(\"Failed to fetch image \"+t.substring(0,256)+\" with status code \"+n.status);else{var e=new FileReader;e.addEventListener(\"load\",function(){var t=e.result;A(t)},!1),e.addEventListener(\"error\",function(t){return r(t)},!1),e.readAsDataURL(n.response)}},n.responseType=\"blob\",e.options.imageTimeout){var i=e.options.imageTimeout;n.timeout=i,n.ontimeout=function(){return r(\"\")}}n.open(\"GET\",t,!0),n.send()}).then(function(t){return f(t,e.options.imageTimeout||0)}),this.cache[t]}},{key:\"loadCanvas\",value:function(t){var e=String(this._index++);return this.cache[e]=Promise.resolve(t),e}},{key:\"hasResourceInCache\",value:function(t){return void 0!==this.cache[t]}},{key:\"addImage\",value:function(t,e,A){var r=this,i=function(t){return new Promise(function(n,i){var o=new Image;if(o.onload=function(){return n(o)},t&&!A||(o.crossOrigin=\"anonymous\"),o.onerror=i,o.src=e,!0===o.complete&&setTimeout(function(){n(o)},500),r.options.imageTimeout){var a=r.options.imageTimeout;setTimeout(function(){return i(\"\")},a)}})};return this.cache[t]=u(e)&&!d(e)?n.default.SUPPORT_BASE64_DRAWING(e).then(i):i(!0),t}},{key:\"isSameOrigin\",value:function(t){return this.getOrigin(t)===this.origin}},{key:\"getOrigin\",value:function(t){var e=this._link||(this._link=this._window.document.createElement(\"a\"));return e.href=t,e.href=e.href,e.protocol+e.hostname+e.port}},{key:\"ready\",value:function(){var t=this,e=Object.keys(this.cache),A=e.map(function(e){return t.cache[e].catch(function(t){return null})});return Promise.all(A).then(function(t){return new o(e,t)})}}]),t}();e.default=i;var o=e.ResourceStore=function(){function t(e,r){A(this,t),this._keys=e,this._resources=r}return r(t,[{key:\"get\",value:function(t){var e=this._keys.indexOf(t);return-1===e?null:this._resources[e]}}]),t}(),a=/^data:image\\/svg\\+xml/i,s=/^data:image\\/.*;base64,/i,c=/^data:image\\/.*/i,l=function(t){return c.test(t)},u=function(t){return s.test(t)},h=function(t){return\"blob\"===t.substr(0,4)},d=function(t){return\"svg\"===t.substr(-3).toLowerCase()||a.test(t)},f=function(t,e){return new Promise(function(A,r){var n=new Image;n.onload=function(){return A(n)},n.onerror=r,n.src=t,!0===n.complete&&setTimeout(function(){A(n)},500),e&&setTimeout(function(){return r(\"\")},e)})}});e(At);At.ResourceStore;var rt=A(function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.parseContent=e.resolvePseudoContent=e.popCounters=e.parseCounterReset=e.TOKEN_TYPE=e.PSEUDO_CONTENT_ITEM_TYPE=void 0;var A=function(){return function(t,e){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return function(t,e){var A=[],r=!0,n=!1,i=void 0;try{for(var o,a=t[Symbol.iterator]();!(r=(o=a.next()).done)&&(A.push(o.value),!e||A.length!==e);r=!0);}catch(t){n=!0,i=t}finally{try{!r&&a.return&&a.return()}finally{if(n)throw i}}return A}(t,e);throw new TypeError(\"Invalid attempt to destructure non-iterable instance\")}}(),r=e.PSEUDO_CONTENT_ITEM_TYPE={TEXT:0,IMAGE:1},n=e.TOKEN_TYPE={STRING:0,ATTRIBUTE:1,URL:2,COUNTER:3,COUNTERS:4,OPENQUOTE:5,CLOSEQUOTE:6},i=(e.parseCounterReset=function(t,e){if(!t||!t.counterReset||\"none\"===t.counterReset)return[];for(var r=[],n=t.counterReset.split(/\\s*,\\s*/),i=n.length,o=0;o<i;o++){var a=n[o].split(/\\s+/),s=A(a,2),c=s[0],l=s[1];r.push(c);var u=e.counters[c];u||(u=e.counters[c]=[]),u.push(parseInt(l||0,10))}return r},e.popCounters=function(t,e){for(var A=t.length,r=0;r<A;r++)e.counters[t[r]].pop()},e.resolvePseudoContent=function(t,e,o){if(!e||!e.content||\"none\"===e.content||\"-moz-alt-content\"===e.content||\"none\"===e.display)return null;var c=i(e.content),l=c.length,u=[],h=\"\",d=e.counterIncrement;if(d&&\"none\"!==d){var f=d.split(/\\s+/),p=A(f,2),g=p[0],B=p[1],w=o.counters[g];w&&(w[w.length-1]+=void 0===B?1:parseInt(B,10))}for(var m=0;m<l;m++){var y=c[m];switch(y.type){case n.STRING:h+=y.value||\"\";break;case n.ATTRIBUTE:t instanceof HTMLElement&&y.value&&(h+=t.getAttribute(y.value)||\"\");break;case n.COUNTER:var v=o.counters[y.name||\"\"];v&&(h+=s([v[v.length-1]],\"\",y.format));break;case n.COUNTERS:var Q=o.counters[y.name||\"\"];Q&&(h+=s(Q,y.glue,y.format));break;case n.OPENQUOTE:h+=a(e,!0,o.quoteDepth),o.quoteDepth++;break;case n.CLOSEQUOTE:o.quoteDepth--,h+=a(e,!1,o.quoteDepth);break;case n.URL:h&&(u.push({type:r.TEXT,value:h}),h=\"\"),u.push({type:r.IMAGE,value:y.value||\"\"})}}return h&&u.push({type:r.TEXT,value:h}),u},e.parseContent=function(t,e){if(e&&e[t])return e[t];for(var A=[],r=t.length,i=!1,a=!1,s=!1,c=\"\",l=\"\",u=[],h=0;h<r;h++){var d=t.charAt(h);switch(d){case\"'\":case'\"':a?c+=d:(i=!i,s||i||(A.push({type:n.STRING,value:c}),c=\"\"));break;case\"\\\\\":a?(c+=d,a=!1):a=!0;break;case\"(\":i?c+=d:(s=!0,l=c,c=\"\",u=[]);break;case\")\":if(i)c+=d;else if(s){switch(c&&u.push(c),l){case\"attr\":u.length>0&&A.push({type:n.ATTRIBUTE,value:u[0]});break;case\"counter\":if(u.length>0){var f={type:n.COUNTER,name:u[0]};u.length>1&&(f.format=u[1]),A.push(f)}break;case\"counters\":if(u.length>0){var p={type:n.COUNTERS,name:u[0]};u.length>1&&(p.glue=u[1]),u.length>2&&(p.format=u[2]),A.push(p)}break;case\"url\":u.length>0&&A.push({type:n.URL,value:u[0]})}s=!1,c=\"\"}break;case\",\":i?c+=d:s&&(u.push(c),c=\"\");break;case\" \":case\"\\t\":i?c+=d:c&&(o(A,c),c=\"\");break;default:c+=d}\"\\\\\"!==d&&(a=!1)}return c&&o(A,c),e&&(e[t]=A),A}),o=function(t,e){switch(e){case\"open-quote\":t.push({type:n.OPENQUOTE});break;case\"close-quote\":t.push({type:n.CLOSEQUOTE})}},a=function(t,e,A){var r=t.quotes?t.quotes.split(/\\s+/):[\"'\\\"'\",\"'\\\"'\"],n=2*A;return n>=r.length&&(n=r.length-2),e||++n,r[n].replace(/^[\"']|[\"']$/g,\"\")},s=function(t,e,A){for(var r=t.length,n=\"\",i=0;i<r;i++)i>0&&(n+=e||\"\"),n+=(0,V.createCounterText)(t[i],(0,b.parseListStyleType)(A||\"decimal\"),!1);return n}});e(rt);rt.parseContent,rt.resolvePseudoContent,rt.popCounters,rt.parseCounterReset,rt.TOKEN_TYPE,rt.PSEUDO_CONTENT_ITEM_TYPE;var nt=A(function(t,e){function A(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,\"__esModule\",{value:!0}),e.cloneWindow=e.DocumentCloner=void 0;var r=function(){return function(t,e){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return function(t,e){var A=[],r=!0,n=!1,i=void 0;try{for(var o,a=t[Symbol.iterator]();!(r=(o=a.next()).done)&&(A.push(o.value),!e||A.length!==e);r=!0);}catch(t){n=!0,i=t}finally{try{!r&&a.return&&a.return()}finally{if(n)throw i}}return A}(t,e);throw new TypeError(\"Invalid attempt to destructure non-iterable instance\")}}(),n=function(){function t(t,e){for(var A=0;A<e.length;A++){var r=e[A];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,A,r){return A&&t(e.prototype,A),r&&t(e,r),e}}(),i=A(At),o=A(s),a=e.DocumentCloner=function(){function t(e,A,r,n,o){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.referenceElement=e,this.scrolledElements=[],this.copyStyles=n,this.inlineImages=n,this.logger=r,this.options=A,this.renderer=o,this.resourceLoader=new i.default(A,r,window),this.pseudoContentData={counters:{},quoteDepth:0},this.documentElement=this.cloneNode(e.ownerDocument.documentElement)}return n(t,[{key:\"inlineAllImages\",value:function(t){var e=this;if(this.inlineImages&&t){var A=t.style;Promise.all((0,B.parseBackgroundImage)(A.backgroundImage).map(function(t){return\"url\"===t.method?e.resourceLoader.inlineImage(t.args[0]).then(function(t){return t&&\"string\"==typeof t.src?'url(\"'+t.src+'\")':\"none\"}).catch(function(t){}):Promise.resolve(\"\"+t.prefix+t.method+\"(\"+t.args.join(\",\")+\")\")})).then(function(t){t.length>1&&(A.backgroundColor=\"\"),A.backgroundImage=t.join(\",\")}),t instanceof HTMLImageElement&&this.resourceLoader.inlineImage(t.src).then(function(e){if(e&&t instanceof HTMLImageElement&&t.parentNode){var A=t.parentNode,r=(0,l.copyCSSStyles)(t.style,e.cloneNode(!1));A.replaceChild(r,t)}}).catch(function(t){})}}},{key:\"inlineFonts\",value:function(t){var e=this;return Promise.all(Array.from(t.styleSheets).map(function(e){return e.href?fetch(e.href).then(function(t){return t.text()}).then(function(t){return u(t,e.href)}).catch(function(t){return[]}):c(e,t)})).then(function(t){return t.reduce(function(t,e){return t.concat(e)},[])}).then(function(t){return Promise.all(t.map(function(t){return fetch(t.formats[0].src).then(function(t){return t.blob()}).then(function(t){return new Promise(function(e,A){var r=new FileReader;r.onerror=A,r.onload=function(){var t=r.result;e(t)},r.readAsDataURL(t)})}).then(function(e){return t.fontFace.setProperty(\"src\",'url(\"'+e+'\")'),\"@font-face {\"+t.fontFace.cssText+\" \"})}))}).then(function(A){var r=t.createElement(\"style\");r.textContent=A.join(\"\\n\"),e.documentElement.appendChild(r)})}},{key:\"createElementClone\",value:function(t){var e=this;if(this.copyStyles&&t instanceof HTMLCanvasElement){var A=t.ownerDocument.createElement(\"img\");try{return A.src=t.toDataURL(),A}catch(t){}}if(t instanceof HTMLIFrameElement){var r=t.cloneNode(!1),n=C();r.setAttribute(\"data-html2canvas-internal-iframe-key\",n);var i=(0,p.parseBounds)(t,0,0),a=i.width,s=i.height;return this.resourceLoader.cache[n]=b(t,this.options).then(function(t){return e.renderer(t,{async:e.options.async,allowTaint:e.options.allowTaint,backgroundColor:\"#ffffff\",canvas:null,imageTimeout:e.options.imageTimeout,logging:e.options.logging,proxy:e.options.proxy,removeContainer:e.options.removeContainer,scale:e.options.scale,foreignObjectRendering:e.options.foreignObjectRendering,useCORS:e.options.useCORS,target:new o.default,width:a,height:s,x:0,y:0,windowWidth:t.ownerDocument.defaultView.innerWidth,windowHeight:t.ownerDocument.defaultView.innerHeight,scrollX:t.ownerDocument.defaultView.pageXOffset,scrollY:t.ownerDocument.defaultView.pageYOffset},e.logger.child(n))}).then(function(e){return new Promise(function(A,n){var i=document.createElement(\"img\");i.onload=function(){return A(e)},i.onerror=n,i.src=e.toDataURL(),r.parentNode&&r.parentNode.replaceChild((0,l.copyCSSStyles)(t.ownerDocument.defaultView.getComputedStyle(t),i),r)})}),r}if(t instanceof HTMLStyleElement&&t.sheet&&t.sheet.cssRules){var c=[].slice.call(t.sheet.cssRules,0).reduce(function(t,A){try{return A&&A.cssText?t+A.cssText:t}catch(r){return e.logger.log(\"Unable to access cssText property\",A.name),t}},\"\"),u=t.cloneNode(!1);return u.textContent=c,u}return t.cloneNode(!1)}},{key:\"cloneNode\",value:function(t){var e=t.nodeType===Node.TEXT_NODE?document.createTextNode(t.nodeValue):this.createElementClone(t),A=t.ownerDocument.defaultView,r=t instanceof A.HTMLElement?A.getComputedStyle(t):null,n=t instanceof A.HTMLElement?A.getComputedStyle(t,\":before\"):null,i=t instanceof A.HTMLElement?A.getComputedStyle(t,\":after\"):null;this.referenceElement===t&&e instanceof A.HTMLElement&&(this.clonedReferenceElement=e),e instanceof A.HTMLBodyElement&&y(e);for(var o=(0,rt.parseCounterReset)(r,this.pseudoContentData),a=(0,rt.resolvePseudoContent)(t,n,this.pseudoContentData),s=t.firstChild;s;s=s.nextSibling)s.nodeType===Node.ELEMENT_NODE&&(\"SCRIPT\"===s.nodeName||s.hasAttribute(\"data-html2canvas-ignore\")||\"function\"==typeof this.options.ignoreElements&&this.options.ignoreElements(s))||this.copyStyles&&\"STYLE\"===s.nodeName||e.appendChild(this.cloneNode(s));var c=(0,rt.resolvePseudoContent)(t,i,this.pseudoContentData);if((0,rt.popCounters)(o,this.pseudoContentData),t instanceof A.HTMLElement&&e instanceof A.HTMLElement)switch(n&&this.inlineAllImages(d(t,e,n,a,f)),i&&this.inlineAllImages(d(t,e,i,c,g)),!r||!this.copyStyles||t instanceof HTMLIFrameElement||(0,l.copyCSSStyles)(r,e),this.inlineAllImages(e),0===t.scrollTop&&0===t.scrollLeft||this.scrolledElements.push([e,t.scrollLeft,t.scrollTop]),t.nodeName){case\"CANVAS\":this.copyStyles||h(t,e);break;case\"TEXTAREA\":case\"SELECT\":e.value=t.value}return e}}]),t}(),c=function(t,e){return(t.cssRules?Array.from(t.cssRules):[]).filter(function(t){return t.type===CSSRule.FONT_FACE_RULE}).map(function(t){for(var A=(0,B.parseBackgroundImage)(t.style.getPropertyValue(\"src\")),r=[],n=0;n<A.length;n++)if(\"url\"===A[n].method&&A[n+1]&&\"format\"===A[n+1].method){var i=e.createElement(\"a\");i.href=A[n].args[0],e.body&&e.body.appendChild(i);var o={src:i.href,format:A[n+1].args[0]};r.push(o)}return{formats:r.filter(function(t){return/^woff/i.test(t.format)}),fontFace:t.style}}).filter(function(t){return t.formats.length})},u=function(t,e){var A=document.implementation.createHTMLDocument(\"\"),r=document.createElement(\"base\");r.href=e;var n=document.createElement(\"style\");return n.textContent=t,A.head&&A.head.appendChild(r),A.body&&A.body.appendChild(n),n.sheet?c(n.sheet,A):[]},h=function(t,e){try{if(e){e.width=t.width,e.height=t.height;var A=t.getContext(\"2d\"),r=e.getContext(\"2d\");A?r.putImageData(A.getImageData(0,0,t.width,t.height),0,0):r.drawImage(t,0,0)}}catch(t){}},d=function(t,e,A,r,n){if(A&&A.content&&\"none\"!==A.content&&\"-moz-alt-content\"!==A.content&&\"none\"!==A.display){var i=e.ownerDocument.createElement(\"html2canvaspseudoelement\");if((0,l.copyCSSStyles)(A,i),r)for(var o=r.length,a=0;a<o;a++){var s=r[a];switch(s.type){case rt.PSEUDO_CONTENT_ITEM_TYPE.IMAGE:var c=e.ownerDocument.createElement(\"img\");c.src=(0,B.parseBackgroundImage)(\"url(\"+s.value+\")\")[0].args[0],c.style.opacity=\"1\",i.appendChild(c);break;case rt.PSEUDO_CONTENT_ITEM_TYPE.TEXT:i.appendChild(e.ownerDocument.createTextNode(s.value))}}return i.className=w+\" \"+m,e.className+=n===f?\" \"+w:\" \"+m,n===f?e.insertBefore(i,e.firstChild):e.appendChild(i),i}},f=\":before\",g=\":after\",w=\"___html2canvas___pseudoelement_before\",m=\"___html2canvas___pseudoelement_after\",y=function(t){v(t,\".\"+w+f+'{\\n    content: \"\" !important;\\n    display: none !important;\\n}\\n         .'+m+g+'{\\n    content: \"\" !important;\\n    display: none !important;\\n}')},v=function(t,e){var A=t.ownerDocument.createElement(\"style\");A.innerHTML=e,t.appendChild(A)},Q=function(t){var e=r(t,3),A=e[0],n=e[1],i=e[2];A.scrollLeft=n,A.scrollTop=i},C=function(){return Math.ceil(Date.now()+1e7*Math.random()).toString(16)},U=/^data:text\\/(.+);(base64)?,(.*)$/i,b=function(t,e){try{return Promise.resolve(t.contentWindow.document.documentElement)}catch(A){return e.proxy?(0,et.Proxy)(t.src,e).then(function(t){var e=t.match(U);return e?\"base64\"===e[2]?window.atob(decodeURIComponent(e[3])):decodeURIComponent(e[3]):Promise.reject()}).then(function(e){return F(t.ownerDocument,(0,p.parseBounds)(t,0,0)).then(function(t){var A=t.contentWindow.document;A.open(),A.write(e);var r=E(t).then(function(){return A.documentElement});return A.close(),r})}):Promise.reject()}},F=function(t,e){var A=t.createElement(\"iframe\");return A.className=\"html2canvas-container\",A.style.visibility=\"hidden\",A.style.position=\"fixed\",A.style.left=\"-10000px\",A.style.top=\"0px\",A.style.border=\"0\",A.width=e.width.toString(),A.height=e.height.toString(),A.scrolling=\"no\",A.setAttribute(\"data-html2canvas-ignore\",\"true\"),t.body?(t.body.appendChild(A),Promise.resolve(A)):Promise.reject(\"\")},E=function(t){var e=t.contentWindow,A=e.document;return new Promise(function(r,n){e.onload=t.onload=A.onreadystatechange=function(){var e=setInterval(function(){A.body.childNodes.length>0&&\"complete\"===A.readyState&&(clearInterval(e),r(t))},50)}})},x=(e.cloneWindow=function(t,e,A,r,n,i){var o=new a(A,r,n,!1,i),s=t.defaultView.pageXOffset,c=t.defaultView.pageYOffset;return F(t,e).then(function(n){var i=n.contentWindow,a=i.document,l=E(n).then(function(){o.scrolledElements.forEach(Q),i.scrollTo(e.left,e.top),!/(iPad|iPhone|iPod)/g.test(navigator.userAgent)||i.scrollY===e.top&&i.scrollX===e.left||(a.documentElement.style.top=-e.top+\"px\",a.documentElement.style.left=-e.left+\"px\",a.documentElement.style.position=\"absolute\");var A=Promise.resolve([n,o.clonedReferenceElement,o.resourceLoader]),s=r.onclone;return o.clonedReferenceElement instanceof i.HTMLElement||o.clonedReferenceElement instanceof t.defaultView.HTMLElement||o.clonedReferenceElement instanceof HTMLElement?\"function\"==typeof s?Promise.resolve().then(function(){return s(a)}).then(function(){return A}):A:Promise.reject(\"\")});return a.open(),a.write(x(document.doctype)+\"<html></html>\"),function(t,e,A){!t.defaultView||e===t.defaultView.pageXOffset&&A===t.defaultView.pageYOffset||t.defaultView.scrollTo(e,A)}(A.ownerDocument,s,c),a.replaceChild(a.adoptNode(o.documentElement),a.documentElement),a.close(),l})},function(t){var e=\"\";return t&&(e+=\"<!DOCTYPE \",t.name&&(e+=t.name),t.internalSubset&&(e+=t.internalSubset),t.publicId&&(e+='\"'+t.publicId+'\"'),t.systemId&&(e+='\"'+t.systemId+'\"'),e+=\">\"),e})});e(nt);nt.cloneWindow,nt.DocumentCloner;var it=A(function(t,e){function A(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,\"__esModule\",{value:!0}),e.renderElement=void 0;var r=function(){return function(t,e){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return function(t,e){var A=[],r=!0,n=!1,i=void 0;try{for(var o,a=t[Symbol.iterator]();!(r=(o=a.next()).done)&&(A.push(o.value),!e||A.length!==e);r=!0);}catch(t){n=!0,i=t}finally{try{!r&&a.return&&a.return()}finally{if(n)throw i}}return A}(t,e);throw new TypeError(\"Invalid attempt to destructure non-iterable instance\")}}(),n=(A(c),A(tt)),i=A(O),a=A(P),s=A(o);e.renderElement=function t(e,A,c){var l=e.ownerDocument,u=new p.Bounds(A.scrollX,A.scrollY,A.windowWidth,A.windowHeight),h=l.documentElement?new s.default(getComputedStyle(l.documentElement).backgroundColor):o.TRANSPARENT,d=l.body?new s.default(getComputedStyle(l.body).backgroundColor):o.TRANSPARENT,f=e===l.documentElement?h.isTransparent()?d.isTransparent()?A.backgroundColor?new s.default(A.backgroundColor):null:d:h:A.backgroundColor?new s.default(A.backgroundColor):null;return(A.foreignObjectRendering?a.default.SUPPORT_FOREIGNOBJECT_DRAWING:Promise.resolve(!1)).then(function(a){return a?function(t){return t.inlineFonts(l).then(function(){return t.resourceLoader.ready()}).then(function(){var r=new i.default(t.documentElement),n=l.defaultView,o=n.pageXOffset,a=n.pageYOffset,s=\"HTML\"===e.tagName||\"BODY\"===e.tagName?(0,p.parseDocumentSize)(l):(0,p.parseBounds)(e,o,a),u=s.width,h=s.height,d=s.left,g=s.top;return r.render({backgroundColor:f,logger:c,scale:A.scale,x:\"number\"==typeof A.x?A.x:d,y:\"number\"==typeof A.y?A.y:g,width:\"number\"==typeof A.width?A.width:Math.ceil(u),height:\"number\"==typeof A.height?A.height:Math.ceil(h),windowWidth:A.windowWidth,windowHeight:A.windowHeight,scrollX:A.scrollX,scrollY:A.scrollY})})}(new nt.DocumentCloner(e,A,c,!0,t)):(0,nt.cloneWindow)(l,u,e,A,c,t).then(function(t){var e=r(t,3),i=e[0],a=e[1],s=e[2],u=(0,Y.NodeParser)(a,s,c),h=a.ownerDocument;return f===u.container.style.background.backgroundColor&&(u.container.style.background.backgroundColor=o.TRANSPARENT),s.ready().then(function(t){var e=new J.FontMetrics(h),r=h.defaultView,o=r.pageXOffset,s=r.pageYOffset,d=\"HTML\"===a.tagName||\"BODY\"===a.tagName?(0,p.parseDocumentSize)(l):(0,p.parseBounds)(a,o,s),g=d.width,B=d.height,w=d.left,m=d.top,y={backgroundColor:f,fontMetrics:e,imageStore:t,logger:c,scale:A.scale,x:\"number\"==typeof A.x?A.x:w,y:\"number\"==typeof A.y?A.y:m,width:\"number\"==typeof A.width?A.width:Math.ceil(g),height:\"number\"==typeof A.height?A.height:Math.ceil(B)};if(Array.isArray(A.target))return Promise.all(A.target.map(function(t){return new n.default(t,y).render(u)}));var v=new n.default(A.target,y).render(u);return!0===A.removeContainer&&i.parentNode&&i.parentNode.removeChild(i),v})})})}});e(it);it.renderElement;var ot=e(A(function(t){function e(t){return t&&t.__esModule?t:{default:t}}var A=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var A=arguments[e];for(var r in A)Object.prototype.hasOwnProperty.call(A,r)&&(t[r]=A[r])}return t},r=e(s),n=e(c),i=function(t,e){var i=e||{},o=new n.default(\"boolean\"!=typeof i.logging||i.logging);o.log(\"html2canvas $npm_package_version\");var a=t.ownerDocument;if(!a)return Promise.reject(\"Provided element is not within a Document\");var s=a.defaultView,c={async:!0,allowTaint:!1,backgroundColor:\"#ffffff\",imageTimeout:15e3,logging:!0,proxy:null,removeContainer:!0,foreignObjectRendering:!1,scale:s.devicePixelRatio||1,target:new r.default(i.canvas),useCORS:!1,windowWidth:s.innerWidth,windowHeight:s.innerHeight,scrollX:s.pageXOffset,scrollY:s.pageYOffset};return(0,it.renderElement)(t,A({},c,i),o)};i.CanvasRenderer=r.default,t.exports=i})),at=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},st=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var A=arguments[e];for(var r in A)Object.prototype.hasOwnProperty.call(A,r)&&(t[r]=A[r])}return t},ct=function(t){var e=void 0===t?\"undefined\":at(t);return\"undefined\"===e?\"undefined\":\"string\"===e||t instanceof String?\"string\":\"number\"===e||t instanceof Number?\"number\":\"function\"===e||t instanceof Function?\"function\":t&&t.constructor===Array?\"array\":t&&1===t.nodeType?\"element\":\"object\"===e?\"object\":\"unknown\"},lt=function(t,e){var A=document.createElement(t);if(e.className&&(A.className=e.className),e.innerHTML){A.innerHTML=e.innerHTML;for(var r=A.getElementsByTagName(\"script\"),n=r.length;n-- >0;null)r[n].parentNode.removeChild(r[n])}for(var i in e.style)A.style[i]=e.style[i];return A},ut=function(t,e){if(\"number\"===ct(t))return 72*t/96/e;var A={};for(var r in t)A[r]=72*t[r]/96/e;return A},ht=function(t,e){return Math.floor(t*e/72*96)},dt=A(function(e,A){e.exports=function(){function e(t){return\"function\"==typeof t}function A(){var t=setTimeout;return function(){return t(n,1)}}function n(){for(var t=0;t<y;t+=2){var e=H[t],A=H[t+1];e(A),H[t]=void 0,H[t+1]=void 0}y=0}function i(t,e){var A=this,r=new this.constructor(a);void 0===r[S]&&B(r);var n=A._state;if(n){var i=arguments[n-1];C(function(){return g(n,r,i,A._result)})}else f(A,r,t,e);return r}function o(t){if(t&&\"object\"==typeof t&&t.constructor===this)return t;var e=new this(a);return l(e,t),e}function a(){}function s(t){try{return t.then}catch(t){return k.error=t,k}}function c(t,A,r){A.constructor===t.constructor&&r===i&&A.constructor.resolve===o?function(t,e){e._state===T?h(t,e._result):e._state===N?d(t,e._result):f(e,void 0,function(e){return l(t,e)},function(e){return d(t,e)})}(t,A):r===k?(d(t,k.error),k.error=null):void 0===r?h(t,A):e(r)?function(t,e,A){C(function(t){var r=!1,n=function(t,e,A,r){try{t.call(e,A,r)}catch(t){return t}}(A,e,function(A){r||(r=!0,e!==A?l(t,A):h(t,A))},function(e){r||(r=!0,d(t,e))},t._label);!r&&n&&(r=!0,d(t,n))},t)}(t,A,r):h(t,A)}function l(t,e){t===e?d(t,new TypeError(\"You cannot resolve a promise with itself\")):!function(t){var e=typeof t;return null!==t&&(\"object\"===e||\"function\"===e)}(e)?h(t,e):c(t,e,s(e))}function u(t){t._onerror&&t._onerror(t._result),p(t)}function h(t,e){t._state===_&&(t._result=e,t._state=T,0!==t._subscribers.length&&C(p,t))}function d(t,e){t._state===_&&(t._state=N,t._result=e,C(u,t))}function f(t,e,A,r){var n=t._subscribers,i=n.length;t._onerror=null,n[i]=e,n[i+T]=A,n[i+N]=r,0===i&&t._state&&C(p,t)}function p(t){var e=t._subscribers,A=t._state;if(0!==e.length){for(var r=void 0,n=void 0,i=t._result,o=0;o<e.length;o+=3)r=e[o],n=e[o+A],r?g(A,r,n,i):n(i);t._subscribers.length=0}}function g(t,A,r,n){var i=e(r),o=void 0,a=void 0,s=void 0,c=void 0;if(i){if((o=function(t,e){try{return t(e)}catch(t){return k.error=t,k}}(r,n))===k?(c=!0,a=o.error,o.error=null):s=!0,A===o)return void d(A,new TypeError(\"A promises callback cannot return that same promise.\"))}else o=n,s=!0;A._state!==_||(i&&s?l(A,o):c?d(A,a):t===T?h(A,o):t===N&&d(A,o))}function B(t){t[S]=O++,t._state=void 0,t._result=void 0,t._subscribers=[]}var w=void 0;w=Array.isArray?Array.isArray:function(t){return\"[object Array]\"===Object.prototype.toString.call(t)};var m=w,y=0,v=void 0,Q=void 0,C=function(t,e){H[y]=t,H[y+1]=e,2===(y+=2)&&(Q?Q(n):I())};var U=\"undefined\"!=typeof window?window:void 0,b=U||{},F=b.MutationObserver||b.WebKitMutationObserver,E=\"undefined\"==typeof self&&\"undefined\"!=typeof process&&\"[object process]\"==={}.toString.call(process),x=\"undefined\"!=typeof Uint8ClampedArray&&\"undefined\"!=typeof importScripts&&\"undefined\"!=typeof MessageChannel;var H=new Array(1e3);var I=void 0;I=E?function(){return process.nextTick(n)}:F?function(){var t=0,e=new F(n),A=document.createTextNode(\"\");return e.observe(A,{characterData:!0}),function(){A.data=t=++t%2}}():x?function(){var t=new MessageChannel;return t.port1.onmessage=n,function(){return t.port2.postMessage(0)}}():void 0===U&&\"function\"==typeof t?function(){try{var t=Function(\"return this\")().require(\"vertx\");return v=t.runOnLoop||t.runOnContext,function(){if(void 0!==v)return function(){v(n)};return A()}()}catch(t){return A()}}():A();var S=Math.random().toString(36).substring(2);var _=void 0,T=1,N=2,k={error:null};var O=0;var P=function(){function t(t,e){this._instanceConstructor=t,this.promise=new t(a),this.promise[S]||B(this.promise),m(e)?(this.length=e.length,this._remaining=e.length,this._result=new Array(this.length),0===this.length?h(this.promise,this._result):(this.length=this.length||0,this._enumerate(e),0===this._remaining&&h(this.promise,this._result))):d(this.promise,new Error(\"Array Methods must be provided an Array\"))}return t.prototype._enumerate=function(t){for(var e=0;this._state===_&&e<t.length;e++)this._eachEntry(t[e],e)},t.prototype._eachEntry=function(t,e){var A=this._instanceConstructor,r=A.resolve;if(r===o){var n=s(t);if(n===i&&t._state!==_)this._settledAt(t._state,e,t._result);else if(\"function\"!=typeof n)this._remaining--,this._result[e]=t;else if(A===D){var l=new A(a);c(l,t,n),this._willSettleAt(l,e)}else this._willSettleAt(new A(function(e){return e(t)}),e)}else this._willSettleAt(r(t),e)},t.prototype._settledAt=function(t,e,A){var r=this.promise;r._state===_&&(this._remaining--,t===N?d(r,A):this._result[e]=A),0===this._remaining&&h(r,this._result)},t.prototype._willSettleAt=function(t,e){var A=this;f(t,void 0,function(t){return A._settledAt(T,e,t)},function(t){return A._settledAt(N,e,t)})},t}();var D=function(){function t(e){this[S]=O++,this._result=this._state=void 0,this._subscribers=[],a!==e&&(\"function\"!=typeof e&&function(){throw new TypeError(\"You must pass a resolver function as the first argument to the promise constructor\")}(),this instanceof t?function(t,e){try{e(function(e){l(t,e)},function(e){d(t,e)})}catch(e){d(t,e)}}(this,e):function(){throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\")}())}return t.prototype.catch=function(t){return this.then(null,t)},t.prototype.finally=function(t){var A=this.constructor;return e(t)?this.then(function(e){return A.resolve(t()).then(function(){return e})},function(e){return A.resolve(t()).then(function(){throw e})}):this.then(t,t)},t}();D.prototype.then=i,D.all=function(t){return new P(this,t).promise},D.race=function(t){var e=this;return new e(m(t)?function(A,r){for(var n=t.length,i=0;i<n;i++)e.resolve(t[i]).then(A,r)}:function(t,e){return e(new TypeError(\"You must pass an array to race.\"))})},D.resolve=o,D.reject=function(t){var e=new this(a);return d(e,t),e},D._setScheduler=function(t){Q=t},D._setAsap=function(t){C=t},D._asap=C;return D.polyfill=function(){var t=void 0;if(void 0!==r)t=r;else if(\"undefined\"!=typeof self)t=self;else try{t=Function(\"return this\")()}catch(t){throw new Error(\"polyfill failed because global object is unavailable in this environment\")}var e=t.Promise;if(e){var A=null;try{A=Object.prototype.toString.call(e.resolve())}catch(t){}if(\"[object Promise]\"===A&&!e.cast)return}t.Promise=D},D.Promise=D,D}()}).Promise,ft=function t(e){var A=st(t.convert(dt.resolve()),JSON.parse(JSON.stringify(t.template))),r=t.convert(dt.resolve(),A);return r=r.setProgress(1,t,1,[t]),r=r.set(e)};(ft.prototype=Object.create(dt.prototype)).constructor=ft,ft.convert=function(t,e){return t.__proto__=e||ft.prototype,t},ft.template={prop:{src:null,container:null,overlay:null,canvas:null,img:null,pdf:null,pageSize:null},progress:{val:0,state:null,n:0,stack:[]},opt:{filename:\"file.pdf\",margin:[0,0,0,0],image:{type:\"jpeg\",quality:.95},enableLinks:!0,html2canvas:{},jsPDF:{}}},ft.prototype.from=function(t,e){return this.then(function(){switch(e=e||function(t){switch(ct(t)){case\"string\":return\"string\";case\"element\":return\"canvas\"===t.nodeName.toLowerCase?\"canvas\":\"element\";default:return\"unknown\"}}(t)){case\"string\":return this.set({src:lt(\"div\",{innerHTML:t})});case\"element\":return this.set({src:t});case\"canvas\":return this.set({canvas:t});case\"img\":return this.set({img:t});default:return this.error(\"Unknown source type.\")}})},ft.prototype.to=function(t){switch(t){case\"container\":return this.toContainer();case\"canvas\":return this.toCanvas();case\"img\":return this.toImg();case\"pdf\":return this.toPdf();default:return this.error(\"Invalid target.\")}},ft.prototype.toContainer=function(){return this.thenList([function(){return this.prop.src||this.error(\"Cannot duplicate - no source HTML.\")},function(){return this.prop.pageSize||this.setPageSize()}]).then(function(){var t={position:\"fixed\",overflow:\"hidden\",zIndex:1e3,left:0,right:0,bottom:0,top:0,backgroundColor:\"rgba(0,0,0,0.8)\"},e={position:\"absolute\",width:this.prop.pageSize.inner.width+this.prop.pageSize.unit,left:0,right:0,top:0,height:\"auto\",margin:\"auto\",backgroundColor:\"white\"};t.opacity=0;var A=function t(e,A){for(var r=3===e.nodeType?document.createTextNode(e.nodeValue):e.cloneNode(!1),n=e.firstChild;n;n=n.nextSibling)!0!==A&&1===n.nodeType&&\"SCRIPT\"===n.nodeName||r.appendChild(t(n,A));return 1===e.nodeType&&(\"CANVAS\"===e.nodeName?(r.width=e.width,r.height=e.height,r.getContext(\"2d\").drawImage(e,0,0)):\"TEXTAREA\"!==e.nodeName&&\"SELECT\"!==e.nodeName||(r.value=e.value),r.addEventListener(\"load\",function(){r.scrollTop=e.scrollTop,r.scrollLeft=e.scrollLeft},!0)),r}(this.prop.src,this.opt.html2canvas.javascriptEnabled);this.prop.overlay=lt(\"div\",{className:\"html2pdf__overlay\",style:t}),this.prop.container=lt(\"div\",{className:\"html2pdf__container\",style:e}),this.prop.container.appendChild(A),this.prop.overlay.appendChild(this.prop.container),document.body.appendChild(this.prop.overlay)})},ft.prototype.toCanvas=function(){var t=[function(){return document.body.contains(this.prop.container)||this.toContainer()}];return this.thenList(t).then(function(){var t=st({},this.opt.html2canvas);return delete t.onrendered,ot(this.prop.container,t)}).then(function(t){(this.opt.html2canvas.onrendered||function(){})(t),this.prop.canvas=t,document.body.removeChild(this.prop.overlay)})},ft.prototype.toImg=function(){return this.thenList([function(){return this.prop.canvas||this.toCanvas()}]).then(function(){var t=this.prop.canvas.toDataURL(\"image/\"+this.opt.image.type,this.opt.image.quality);this.prop.img=document.createElement(\"img\"),this.prop.img.src=t})},ft.prototype.toPdf=function(){return this.thenList([function(){return this.prop.canvas||this.toCanvas()}]).then(function(){var t=this.prop.canvas,e=this.opt,A=t.height,r=Math.floor(t.width*this.prop.pageSize.inner.ratio),i=Math.ceil(A/r),o=this.prop.pageSize.inner.height,a=document.createElement(\"canvas\"),s=a.getContext(\"2d\");a.width=t.width,a.height=r,this.prop.pdf=this.prop.pdf||new n(e.jsPDF);for(var c=0;c<i;c++){c===i-1&&A%r!=0&&(a.height=A%r,o=a.height*this.prop.pageSize.inner.width/a.width);var l=a.width,u=a.height;s.fillStyle=\"white\",s.fillRect(0,0,l,u),s.drawImage(t,0,c*r,l,u,0,0,l,u),c&&this.prop.pdf.addPage();var h=a.toDataURL(\"image/\"+e.image.type,e.image.quality);this.prop.pdf.addImage(h,e.image.type,e.margin[1],e.margin[0],this.prop.pageSize.inner.width,o)}})},ft.prototype.output=function(t,e,A){return\"img\"===(A=A||\"pdf\").toLowerCase()||\"image\"===A.toLowerCase()?this.outputImg(t,e):this.outputPdf(t,e)},ft.prototype.outputPdf=function(t,e){return this.thenList([function(){return this.prop.pdf||this.toPdf()}]).then(function(){return this.prop.pdf.output(t,e)})},ft.prototype.outputImg=function(t,e){return this.thenList([function(){return this.prop.img||this.toImg()}]).then(function(){switch(t){case void 0:case\"img\":return this.prop.img;case\"datauristring\":case\"dataurlstring\":return this.prop.img.src;case\"datauri\":case\"dataurl\":return document.location.href=this.prop.img.src;default:throw'Image output type \"'+t+'\" is not supported.'}})},ft.prototype.save=function(t){return this.thenList([function(){return this.prop.pdf||this.toPdf()}]).set(t?{filename:t}:null).then(function(){this.prop.pdf.save(this.opt.filename)})},ft.prototype.set=function(t){if(\"object\"!==ct(t))return this;var e=Object.keys(t||{}).map(function(e){if(e in ft.template.prop)return function(){this.prop[e]=t[e]};switch(e){case\"margin\":return this.setMargin.bind(this,t.margin);case\"jsPDF\":return function(){return this.opt.jsPDF=t.jsPDF,this.setPageSize()};case\"pageSize\":return this.setPageSize.bind(this,t.pageSize);default:return function(){this.opt[e]=t[e]}}},this);return this.then(function(){return this.thenList(e)})},ft.prototype.get=function(t,e){return this.then(function(){var A=t in ft.template.prop?this.prop[t]:this.opt[t];return e?e(A):A})},ft.prototype.setMargin=function(t){return this.then(function(){switch(ct(t)){case\"number\":t=[t,t,t,t];case\"array\":if(2===t.length&&(t=[t[0],t[1],t[0],t[1]]),4===t.length)break;default:return this.error(\"Invalid margin array.\")}this.opt.margin=t}).then(this.setPageSize)},ft.prototype.setPageSize=function(t){return this.then(function(){(t=t||n.getPageSize(this.opt.jsPDF)).hasOwnProperty(\"inner\")||(t.inner={width:t.width-this.opt.margin[1]-this.opt.margin[3],height:t.height-this.opt.margin[0]-this.opt.margin[2]},t.inner.px={width:ht(t.inner.width,t.k),height:ht(t.inner.height,t.k)},t.inner.ratio=t.inner.height/t.inner.width),this.prop.pageSize=t})},ft.prototype.setProgress=function(t,e,A,r){return null!=t&&(this.progress.val=t),null!=e&&(this.progress.state=e),null!=A&&(this.progress.n=A),null!=r&&(this.progress.stack=r),this.progress.ratio=this.progress.val/this.progress.state,this},ft.prototype.updateProgress=function(t,e,A,r){return this.setProgress(t?this.progress.val+t:null,e||null,A?this.progress.n+A:null,r?this.progress.stack.concat(r):null)},ft.prototype.then=function(t,e){var A=this;return this.thenCore(t,e,function(t,e){return A.updateProgress(null,null,1,[t]),dt.prototype.then.call(this,function(e){return A.updateProgress(null,t),e}).then(t,e).then(function(t){return A.updateProgress(1),t})})},ft.prototype.thenCore=function(t,e,A){A=A||dt.prototype.then;t&&(t=t.bind(this)),e&&(e=e.bind(this));var r=-1!==dt.toString().indexOf(\"[native code]\")&&\"Promise\"===dt.name?this:ft.convert(st({},this),dt.prototype),n=A.call(r,t,e);return ft.convert(n,this.__proto__)},ft.prototype.thenExternal=function(t,e){return dt.prototype.then.call(this,t,e)},ft.prototype.thenList=function(t){var e=this;return t.forEach(function(t){e=e.thenCore(t)}),e},ft.prototype.catch=function(t){t&&(t=t.bind(this));var e=dt.prototype.catch.call(this,t);return ft.convert(e,this)},ft.prototype.catchExternal=function(t){return dt.prototype.catch.call(this,t)},ft.prototype.error=function(t){return this.then(function(){throw new Error(t)})},ft.prototype.using=ft.prototype.set,ft.prototype.saveAs=ft.prototype.save,ft.prototype.export=ft.prototype.output,ft.prototype.run=ft.prototype.then,n.getPageSize=function(t,e,A){if(\"object\"===(void 0===t?\"undefined\":at(t))){var r=t;t=r.orientation,e=r.unit||e,A=r.format||A}e=e||\"mm\",A=A||\"a4\",t=(\"\"+(t||\"P\")).toLowerCase();var n=(\"\"+A).toLowerCase(),i={a0:[2383.94,3370.39],a1:[1683.78,2383.94],a2:[1190.55,1683.78],a3:[841.89,1190.55],a4:[595.28,841.89],a5:[419.53,595.28],a6:[297.64,419.53],a7:[209.76,297.64],a8:[147.4,209.76],a9:[104.88,147.4],a10:[73.7,104.88],b0:[2834.65,4008.19],b1:[2004.09,2834.65],b2:[1417.32,2004.09],b3:[1000.63,1417.32],b4:[708.66,1000.63],b5:[498.9,708.66],b6:[354.33,498.9],b7:[249.45,354.33],b8:[175.75,249.45],b9:[124.72,175.75],b10:[87.87,124.72],c0:[2599.37,3676.54],c1:[1836.85,2599.37],c2:[1298.27,1836.85],c3:[918.43,1298.27],c4:[649.13,918.43],c5:[459.21,649.13],c6:[323.15,459.21],c7:[229.61,323.15],c8:[161.57,229.61],c9:[113.39,161.57],c10:[79.37,113.39],dl:[311.81,623.62],letter:[612,792],\"government-letter\":[576,756],legal:[612,1008],\"junior-legal\":[576,360],ledger:[1224,792],tabloid:[792,1224],\"credit-card\":[153,243]};switch(e){case\"pt\":o=1;break;case\"mm\":o=72/25.4;break;case\"cm\":o=72/2.54;break;case\"in\":o=72;break;case\"px\":o=.75;break;case\"pc\":case\"em\":o=12;break;case\"ex\":var o=6;break;default:throw\"Invalid unit: \"+e}if(i.hasOwnProperty(n))var a=i[n][1]/o,s=i[n][0]/o;else try{var a=A[1],s=A[0]}catch(t){throw new Error(\"Invalid format: \"+A)}if(\"p\"===t||\"portrait\"===t){if(t=\"p\",s>a){c=s;s=a,a=c}}else{if(\"l\"!==t&&\"landscape\"!==t)throw\"Invalid orientation: \"+t;if(t=\"l\",a>s){var c=s;s=a,a=c}}return{width:s,height:a,unit:e,k:o}};var pt={toContainer:ft.prototype.toContainer};ft.template.opt.pagebreak={mode:[\"css\",\"legacy\"],before:[],after:[],avoid:[]},ft.prototype.toContainer=function(){return pt.toContainer.call(this).then(function(){var t=this.prop.container,e=this.prop.pageSize.inner.px.height,A=[].concat(this.opt.pagebreak.mode),r={avoidAll:-1!==A.indexOf(\"avoid-all\"),css:-1!==A.indexOf(\"css\"),legacy:-1!==A.indexOf(\"legacy\")},n={},i=this;[\"before\",\"after\",\"avoid\"].forEach(function(e){var A=r.avoidAll&&\"avoid\"===e;n[e]=A?[]:[].concat(i.opt.pagebreak[e]||[]),n[e].length>0&&(n[e]=Array.prototype.slice.call(t.querySelectorAll(n[e].join(\", \"))))});var o=t.querySelectorAll(\".html2pdf__page-break\");o=Array.prototype.slice.call(o);var a=t.querySelectorAll(\"*\");Array.prototype.forEach.call(a,function(t){var A={before:!1,after:r.legacy&&-1!==o.indexOf(t),avoid:r.avoidAll};if(r.css){var i=window.getComputedStyle(t),a=[\"always\",\"page\",\"left\",\"right\"];A={before:A.before||-1!==a.indexOf(i.breakBefore||i.pageBreakBefore),after:A.after||-1!==a.indexOf(i.breakAfter||i.pageBreakAfter),avoid:A.avoid||-1!==[\"avoid\",\"avoid-page\"].indexOf(i.breakInside||i.pageBreakInside)}}Object.keys(A).forEach(function(e){A[e]=A[e]||-1!==n[e].indexOf(t)});var s=t.getBoundingClientRect();if(A.avoid&&!A.before){var c=Math.floor(s.top/e),l=Math.floor(s.bottom/e),u=Math.abs(s.bottom-s.top)/e;l!==c&&u<=1&&(A.before=!0)}if(A.before){h=lt(\"div\",{style:{display:\"block\",height:e-s.top%e+\"px\"}});t.parentNode.insertBefore(h,t)}if(A.after){var h=lt(\"div\",{style:{display:\"block\",height:e-s.bottom%e+\"px\"}});t.parentNode.insertBefore(h,t.nextSibling)}})})};var gt=[],Bt={toContainer:ft.prototype.toContainer,toPdf:ft.prototype.toPdf};ft.prototype.toContainer=function(){return Bt.toContainer.call(this).then(function(){if(this.opt.enableLinks){var t=this.prop.container,e=t.querySelectorAll(\"a\"),A=ut(t.getBoundingClientRect(),this.prop.pageSize.k);gt=[],Array.prototype.forEach.call(e,function(t){for(var e=t.getClientRects(),r=0;r<e.length;r++){var n=ut(e[r],this.prop.pageSize.k);n.left-=A.left,n.top-=A.top;var i=Math.floor(n.top/this.prop.pageSize.inner.height)+1,o=this.opt.margin[0]+n.top%this.prop.pageSize.inner.height,a=this.opt.margin[1]+n.left;gt.push({page:i,top:o,left:a,clientRect:n,link:t})}},this)}})},ft.prototype.toPdf=function(){return Bt.toPdf.call(this).then(function(){if(this.opt.enableLinks){gt.forEach(function(t){this.prop.pdf.setPage(t.page),this.prop.pdf.link(t.left,t.top,t.clientRect.width,t.clientRect.height,{url:t.link.href})},this);var t=this.prop.pdf.internal.getNumberOfPages();this.prop.pdf.setPage(t)}})};var wt=function t(e,A){var r=new t.Worker(A);return e?r.from(e).save():r};return wt.Worker=ft,wt});\r\n\n"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": -1,
          "_transferSize": 139570,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:09.559Z",
        "time": 324.50600003357977,
        "timings": {
          "blocked": 26.040000072404744,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0.1819999999999995,
          "wait": 180.17200002291054,
          "receive": 118.11199993826449,
          "_blocked_queueing": 21.169000072404742,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_connectionId": "1726423",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "parser",
          "url": "https://ekat.festool.de/login/app?__bk_&__windowid=IRW3104379&__rid=FOE1787216989423",
          "lineNumber": 12
        },
        "_priority": "Medium",
        "_resourceType": "image",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/login/WEB-RES/resource/resource?id=ba_image_85D689790F96B1A5E7BA4CF36E8E4AF0",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "Referer",
              "value": "https://ekat.festool.de/login/app?__bk_&__windowid=IRW3104379&__rid=FOE1787216989423"
            },
            {
              "name": "User-Agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            }
          ],
          "queryString": [
            {
              "name": "id",
              "value": "ba_image_85D689790F96B1A5E7BA4CF36E8E4AF0"
            }
          ],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "x-robots-tag",
              "value": "noindex"
            },
            {
              "name": "cache-control",
              "value": "public"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "pragma",
              "value": "cache"
            },
            {
              "name": "etag",
              "value": "W/\"507-1787216828331\""
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "expires",
              "value": "Thu, 20 Aug 2026 11:07:08 GMT"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "content-length",
              "value": "530"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 09:07:08 GMT"
            },
            {
              "name": "content-type",
              "value": "image/png"
            },
            {
              "name": "last-modified",
              "value": "Thu, 20 Aug 2026 07:47:29 GMT"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            }
          ],
          "cookies": [],
          "content": {
            "size": 507,
            "mimeType": "image/png",
            "text": "iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAABwklEQVR42r1XsZGEMAx0CZTgCm4ogehjSnAJlOAOKIESSD9zCZRACZTAw488o9mXjDHmgw2QD2utlVeH+fr+GIbuwHxgB8y0ZhTshTB8kynjhVFI3j0g0MVNRhZcDzja+MRyQWKg+JaoEGKjdwY8wVmFRqjKBBXqhN/MNwhEmSf+sCaSG1pbhWQx5m8Q8DEnbyCXSB7heAM9bMBfGKGsWnKUCwkMNyowSASmi+R4U1CCEqxSCaXkjXBN41pbSOJ8pzWC8WyUzBMmdm32jI5HghhfeBx1nSlpAHgg2mUSaKhxuZdYJIDaohE5KPF40WBcyo0O4LTK8Iex0Io5eiBgFWIigSfDSDpEjFmI9ykCNcCNLbCmvpSgBqzQSw0Qs28SCMpJm9Q1fEuC2FOagYkEfMZNcJkEVoIHaVQCbaaFbjC2tQO4XCdE/VYlgb2YF9K4znZCl1lifsK2lhPyfzqBMecdHSjWsMEUCp3QIQEvDJlAZesJC0voNFdTnBCJjUhgE3TFzXvYNCSqwLX27DaoEtwhYG8QiHt2V05YU4KgJEo6Yc0mtKVO+MY1vO2ENYxoTMjzL1bscr6I3x5GqT3+fL79ADPqd0I0TH2hAAAAAElFTkSuQmCC",
            "encoding": "base64"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": 0,
          "_transferSize": 0,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:09.559Z",
        "time": 27.350999996997416,
        "timings": {
          "blocked": 22.19199995803088,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0,
          "wait": 3.8319999462515115,
          "receive": 1.327000092715025,
          "_blocked_queueing": 21.26099995803088,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_fromCache": "disk",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "parser",
          "url": "https://ekat.festool.de/login/app?__bk_&__windowid=IRW3104379&__rid=FOE1787216989423",
          "lineNumber": 12
        },
        "_priority": "Medium",
        "_resourceType": "image",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/login/WEB-RES/resource/resource?id=ba_image_4A442C18BB9667967DFB206DCF66322C",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "Referer",
              "value": "https://ekat.festool.de/login/app?__bk_&__windowid=IRW3104379&__rid=FOE1787216989423"
            },
            {
              "name": "User-Agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            }
          ],
          "queryString": [
            {
              "name": "id",
              "value": "ba_image_4A442C18BB9667967DFB206DCF66322C"
            }
          ],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "x-robots-tag",
              "value": "noindex"
            },
            {
              "name": "cache-control",
              "value": "public"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "pragma",
              "value": "cache"
            },
            {
              "name": "etag",
              "value": "W/\"6305-1787216828331\""
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "expires",
              "value": "Thu, 20 Aug 2026 11:07:08 GMT"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "content-length",
              "value": "3275"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 09:07:08 GMT"
            },
            {
              "name": "content-type",
              "value": "image/png"
            },
            {
              "name": "last-modified",
              "value": "Thu, 20 Aug 2026 07:47:29 GMT"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            }
          ],
          "cookies": [],
          "content": {
            "size": 6305,
            "mimeType": "image/png",
            "text": "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eG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIgogICAgeG1sbnM6cGx1cz0iaHR0cDovL25zLnVzZXBsdXMub3JnL2xkZi94bXAvMS4wLyIKICAgIHhtbG5zOkdJTVA9Imh0dHA6Ly93d3cuZ2ltcC5vcmcveG1wLyIKICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIgogICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjkzQUY3QUM5RkQ1NzExRTg4Q0IwQTM2MjUwNTU0QjVFIgogICB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjc1YTZjYmFkLTY5YWYtNDJiZC1iNzZlLTMyYWQxYjE0ODA4NCIKICAgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjczZTA2NDMwLWExODYtYjg0Ny04NTBmLTNkNTNkODI4Njk3ZSIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iV2luZG93cyIKICAgR0lNUDpUaW1lU3RhbXA9IjE2MDg1MzQxMTY5MjE0ODQiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4yMiIKICAgZGM6Rm9ybWF0PSJpbWFnZS9wbmciCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPGlwdGNFeHQ6TG9jYXRpb25DcmVhdGVkPgogICAgPHJkZjpCYWcvPgogICA8L2lwdGNFeHQ6TG9jYXRpb25DcmVhdGVkPgogICA8aXB0Y0V4dDpMb2NhdGlvblNob3duPgogICAgPHJkZjpCYWcvPgogICA8L2lwdGNFeHQ6TG9jYXRpb25TaG93bj4KICAgPGlwdGNFeHQ6QXJ0d29ya09yT2JqZWN0PgogICAgPHJkZjpCYWcvPgogICA8L2lwdGNFeHQ6QXJ0d29ya09yT2JqZWN0PgogICA8aXB0Y0V4dDpSZWdpc3RyeUlkPgogICAgPHJkZjpCYWcvPgogICA8L2lwdGNFeHQ6UmVnaXN0cnlJZD4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ODZjYjY2YjctYTY4Mi00YjQ3LTk4ZWMtMDdkYzU3Mjk2MzAzIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKFdpbmRvd3MpIgogICAgICBzdEV2dDp3aGVuPSIyMDIwLTEyLTIxVDA4OjAxOjU2Ii8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICAgPHhtcE1NOkRlcml2ZWRGcm9tCiAgICBzdFJlZjpkb2N1bWVudElEPSJhZG9iZTpkb2NpZDpwaG90b3Nob3A6YWRjNmJjNjQtNDQ5OS0yZDQ5LWE2MGYtMzUwNjczNWI0MjNmIgogICAgc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDozOTQwMGYwMC1jZDYwLTQ1NGQtOTAyOS0xZjhmNzEzZmE3NzgiLz4KICAgPHBsdXM6SW1hZ2VTdXBwbGllcj4KICAgIDxyZGY6U2VxLz4KICAgPC9wbHVzOkltYWdlU3VwcGxpZXI+CiAgIDxwbHVzOkltYWdlQ3JlYXRvcj4KICAgIDxyZGY6U2VxLz4KICAgPC9wbHVzOkltYWdlQ3JlYXRvcj4KICAgPHBsdXM6Q29weXJpZ2h0T3duZXI+CiAgICA8cmRmOlNlcS8+CiAgIDwvcGx1czpDb3B5cmlnaHRPd25lcj4KICAgPHBsdXM6TGljZW5zb3I+CiAgICA8cmRmOlNlcS8+CiAgIDwvcGx1czpMaWNlbnNvcj4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/Pi8G4QoAAAAGYktHRACZAJkAmV5EVoEAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfkDBUHATjXYCbCAAACLUlEQVRYw82XIZPiQBCFv04Rg8Bg1iBAsAITcwZxJ9as2V+75gxiT+yJFReDAMEJzBoMIibinem5SqUgM1lyW9dVFDOpgX79+vV0x3CTdA8sGcZKMzumHMzceT6gc4BC0izl4Kj9wMyeP+pV0lMLBDEmMndaM6ydU5kYRSJ6AMa+3ZhZlQjgFVgDkxgTWde/mNnGozkD89TwndFfQB1jIoswMHWW3oCZizUVxNmZCCBWkia9AAABdeHfd32E0AKRA+s2iKwj+twdlsAO2AKLvmqMgegS4Vf/wczMSkkFMJZUmFnZoxzblrtAv3cCcAFe3XeU3yThXB5loFWCXVYFcGb20vOySmfgX9kQDNzUlP5rBp46wD0nMvRxBq51xgBsKIZGN7TeSwwkDyI3A7jEgKQ7SY/NOv8sBirgB7Dq43xQBnymDIBevAdE0xYbSNYJDFTAz8ZMebzkPGjE+wCSFmZ2GEWmmiQGJH3xZe1dE0mrRvesgDczO0k6AVNgKenYBaC4VueSwvLonzAn/Daz2tMx84grB7KWtPFnD66V5c03YSP6ysx2vp56Ko5+5gw8AhNnYe8pW9zaC8qe2h0Dp0F7gaTKUzCWdO8snIC5Rx5SUAPvksYNwR6G6IYb4N1BzCUdzGwnadSYJSvg1fXRFOx+kG4oaesAcr+MSjPbhopoTdlT3+7NrM4YwPyFZR8m6Uvjd2u6xswOFzUQGShT7VujVONvx4ESPs/++voDQQ0hWZnwNUEAAAAASUVORK5CYII=",
            "encoding": "base64"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": 0,
          "_transferSize": 0,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:09.559Z",
        "time": 27.495000045746565,
        "timings": {
          "blocked": 22.120999995946885,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0,
          "wait": 3.830999942168593,
          "receive": 1.5430001076310873,
          "_blocked_queueing": 21.372999995946884,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_fromCache": "disk",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "parser",
          "url": "https://ekat.festool.de/login/app?__bk_&__windowid=IRW3104379&__rid=FOE1787216989423",
          "lineNumber": 12
        },
        "_priority": "Medium",
        "_resourceType": "image",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/login/WEB-RES/resource/resource?id=bi_image_class_image_de.docware.framework.modules.gui.design.b_defaultimages_material_Catalogue_32px_normal.png_grayedOut_0B02CBCFF1642DE1C50343CC9A91644C",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "Referer",
              "value": "https://ekat.festool.de/login/app?__bk_&__windowid=IRW3104379&__rid=FOE1787216989423"
            },
            {
              "name": "User-Agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            }
          ],
          "queryString": [
            {
              "name": "id",
              "value": "bi_image_class_image_de.docware.framework.modules.gui.design.b_defaultimages_material_Catalogue_32px_normal.png_grayedOut_0B02CBCFF1642DE1C50343CC9A91644C"
            }
          ],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "x-robots-tag",
              "value": "noindex"
            },
            {
              "name": "cache-control",
              "value": "public"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "pragma",
              "value": "cache"
            },
            {
              "name": "etag",
              "value": "W/\"724-1787216828420\""
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "expires",
              "value": "Thu, 20 Aug 2026 11:07:08 GMT"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "content-length",
              "value": "747"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 09:07:08 GMT"
            },
            {
              "name": "content-type",
              "value": "image/png"
            },
            {
              "name": "last-modified",
              "value": "Thu, 20 Aug 2026 07:47:26 GMT"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            }
          ],
          "cookies": [],
          "content": {
            "size": 724,
            "mimeType": "image/png",
            "text": "iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAACm0lEQVR4Xq2Xu3IbMQxF3aRJkcaNGzVpVKRRk0ZNCjdu/P8/oNVrRt/g7Fnjci4hcnedCDMYL0E8LgASlJ+ejA6Hw/PpdPo9DMP7+XwujIw913XK+mu5cjIG2OHIORuMQH5VRp92zy1d595+SQrHCjoKX8e/GzajIn/mQFwul5/YHY/HN5fP0fV6fcMXtiWDCL77+Pj4JkXWgXSn7wp56GBLmyRbInTxMwLZTQtl3gvOmj10ogolWFSMBLaSLRG6kczrdICCN1JQVgpuhhvkGJusOjdiVSuvMxcHKmsveOyVdkmm9dTPlYRuC8DU515wSPsOwFowyznz4KoFBYgHhaL/1TXV3u12+7EGRCs4tuUQirlOEWwL843MdeZOvHSyXIG51tWG9zXAEHifeOtAdV5a5ACo3Pi98VkyJvM921S9jXKWQRTfpcR5EGUyP6ocCWwEIOsX8mnY4ijfbPBxsLwkACVbAZiGT4/IOJ8JGNlc2UWehGSAQG4AXtzm4WTAGVp7HerFFjyCyNZaMJ0ljffZQ/goIuPcAggQ3Wv4aHIAcZNK+RdbMHzOgLvT70xZs52TtyDasKXsiwAYizl4CwA/JvzZdkoJVEAXWzBE/0DdCuBZ9O4yQQWA9epJ6IYZuRMZytH0kDRIflZPQv3SCcO9ZGEoUHtkME5xNL7pk67Tmkl4lyBZmdE07QhI2XAI8y1wnk2eaq1JCKFnZ6Ae53pqQSwZa3euzLQm+14VBCCGEs85vyOn35LNFnwFgEq6BoB8qqoCcHcIQWkG/9UCdLwCks9Own85hK7r5G8B69WTkKws2Ow1lN6Ka/i1SUhGMuwNInPeHER+C3J7FgH0RnFmWtACCA11Je94FgA0NB6jBndbBC34uPv37S9iFK5lnVBeYQAAAABJRU5ErkJggg==",
            "encoding": "base64"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": 0,
          "_transferSize": 0,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:09.559Z",
        "time": 55.14600011520088,
        "timings": {
          "blocked": 54.25300000301004,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0,
          "wait": 0.24899998148530722,
          "receive": 0.6440001307055354,
          "_blocked_queueing": 52.257000003010035,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_fromCache": "disk",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "parser",
          "url": "https://ekat.festool.de/login/app?__bk_&__windowid=IRW3104379&__rid=FOE1787216989423",
          "lineNumber": 12
        },
        "_priority": "Medium",
        "_resourceType": "image",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/login/WEB-RES/resource/resource?id=ba_image_3BF40FA40647BDB9724ACB6BA862FB64",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "Referer",
              "value": "https://ekat.festool.de/login/app?__bk_&__windowid=IRW3104379&__rid=FOE1787216989423"
            },
            {
              "name": "User-Agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            }
          ],
          "queryString": [
            {
              "name": "id",
              "value": "ba_image_3BF40FA40647BDB9724ACB6BA862FB64"
            }
          ],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "x-robots-tag",
              "value": "noindex"
            },
            {
              "name": "cache-control",
              "value": "public"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "pragma",
              "value": "cache"
            },
            {
              "name": "etag",
              "value": "W/\"5987-1787216828420\""
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "expires",
              "value": "Thu, 20 Aug 2026 11:07:08 GMT"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "content-length",
              "value": "2935"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 09:07:08 GMT"
            },
            {
              "name": "content-type",
              "value": "image/png"
            },
            {
              "name": "last-modified",
              "value": "Thu, 20 Aug 2026 07:47:29 GMT"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            }
          ],
          "cookies": [],
          "content": {
            "size": 5987,
            "mimeType": "image/png",
            "text": "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Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RDNCMDI0OTJGRDU3MTFFOEE4NTJDQzg3RTA2MzMwMDEiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NDUxNDkwNDUtZWVjOC00ZDNiLWIwODgtYWFjN2FlMmU2ZmM0IgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6YjIzNTY4OGMtMTc4NS1lZTQwLWI3NDQtMzVlMmRkZDc4OGZjIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJXaW5kb3dzIgogICBHSU1QOlRpbWVTdGFtcD0iMTYwODUzNDE3NTU0NzM2NiIKICAgR0lNUDpWZXJzaW9uPSIyLjEwLjIyIgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiPgogICA8aXB0Y0V4dDpMb2NhdGlvbkNyZWF0ZWQ+CiAgICA8cmRmOkJhZy8+CiAgIDwvaXB0Y0V4dDpMb2NhdGlvbkNyZWF0ZWQ+CiAgIDxpcHRjRXh0OkxvY2F0aW9uU2hvd24+CiAgICA8cmRmOkJhZy8+CiAgIDwvaXB0Y0V4dDpMb2NhdGlvblNob3duPgogICA8aXB0Y0V4dDpBcnR3b3JrT3JPYmplY3Q+CiAgICA8cmRmOkJhZy8+CiAgIDwvaXB0Y0V4dDpBcnR3b3JrT3JPYmplY3Q+CiAgIDxpcHRjRXh0OlJlZ2lzdHJ5SWQ+CiAgICA8cmRmOkJhZy8+CiAgIDwvaXB0Y0V4dDpSZWdpc3RyeUlkPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDoxMzNjNDZmMi05OTUzLTQzMTYtYjQ1ZS02ZjdkODI3ZWQ4YzciCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoV2luZG93cykiCiAgICAgIHN0RXZ0OndoZW49IjIwMjAtMTItMjFUMDg6MDI6NTUiLz4KICAgIDwvcmRmOlNlcT4KICAgPC94bXBNTTpIaXN0b3J5PgogICA8eG1wTU06RGVyaXZlZEZyb20KICAgIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo4YWQ1MTMwOC1iMWUyLWE1NGUtYWFjZS0xY2E3MTYyYzIwODAiCiAgICBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOmNkMmI3MzkxLTA2YjAtNjE0Yi1hYjg0LTEzZjk4NTNjYmRiZSIvPgogICA8cGx1czpJbWFnZVN1cHBsaWVyPgogICAgPHJkZjpTZXEvPgogICA8L3BsdXM6SW1hZ2VTdXBwbGllcj4KICAgPHBsdXM6SW1hZ2VDcmVhdG9yPgogICAgPHJkZjpTZXEvPgogICA8L3BsdXM6SW1hZ2VDcmVhdG9yPgogICA8cGx1czpDb3B5cmlnaHRPd25lcj4KICAgIDxyZGY6U2VxLz4KICAgPC9wbHVzOkNvcHlyaWdodE93bmVyPgogICA8cGx1czpMaWNlbnNvcj4KICAgIDxyZGY6U2VxLz4KICAgPC9wbHVzOkxpY2Vuc29yPgogIDwvcmRmOkRlc2NyaXB0aW9uPgogPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8+RdkdqgAAAAZiS0dEAJkAmQCZXkRWgQAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB+QMFQcCN2zyaJAAAAHaSURBVFjDxZahc4NQDMa/cMMgmGhFDaIVNTU1M/3/b2YGg2jFEBjEKoqgAvEmFu6yHOXlUcZy1zu4oy+/JN9LQhgx51wCYAtgDSAd+OQKoAZQEVGHCUYjjg8ANsZzOgAlEZ2fBnDOZew8FodXHK2MMmFACdkAeA/JBg04PwrHFyL6NJRJZqtjiCYIQDlvAHwQUWuNZOD/pkxEKgr55zaolkQVgJxfU3GeH0DUvOPIpyn6B6Lm14wDGwfgj/r6XUIjH7BCPO8tGdj24vEJzpiFVmRhYwFY83OF+awHiJ1zqQ8gFV1tLmtVv/CKEKrJzGmv/w0AK0A847nyrC8rQDIjwEo8330AV+uVCbCsF6Ovr0Tyzlo6l2Em7EQJaosGKiHAw5POE9X9Si8A9/1SZCGb6DwG8CaiN7X1iNvnmacgABxDITjyk2hqjXU7IhWBPKQGUPii4Jrv1dUrrHOFBtJ4Ugtozb9W3fMVqz1WK1nFWsp5PAfvhDFHtAuUwaVPu9iOvBBkUPRmpEv2o7fUpZIQAOpHSw4ZRZYyxJqv7A3A3aAPuScOZuPFuGQ0E0e2bERH5xw0RPSXk47TniuILLgEM7RnWYpf5VgEYAxiMYCHEEtvQBpicQAF0XwDRQPS6cTotD4AAAAASUVORK5CYII=",
            "encoding": "base64"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": 0,
          "_transferSize": 0,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:09.559Z",
        "time": 55.213999934494495,
        "timings": {
          "blocked": 54.199000010319054,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0,
          "wait": 0.2449999981969595,
          "receive": 0.7699999259784818,
          "_blocked_queueing": 53.955000010319054,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_fromCache": "disk",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "parser",
          "url": "https://ekat.festool.de/login/app?__bk_&__windowid=IRW3104379&__rid=FOE1787216989423",
          "lineNumber": 12
        },
        "_priority": "Low",
        "_resourceType": "image",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/login/WEB-RES/resource/resource?id=bi_image_framework_transparent_56ABE4CBC175363DA0810882244B34FF",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "Referer",
              "value": "https://ekat.festool.de/login/app?__bk_&__windowid=IRW3104379&__rid=FOE1787216989423"
            },
            {
              "name": "User-Agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            }
          ],
          "queryString": [
            {
              "name": "id",
              "value": "bi_image_framework_transparent_56ABE4CBC175363DA0810882244B34FF"
            }
          ],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "x-robots-tag",
              "value": "noindex"
            },
            {
              "name": "cache-control",
              "value": "public"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "pragma",
              "value": "cache"
            },
            {
              "name": "etag",
              "value": "W/\"68-1787216828530\""
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "expires",
              "value": "Thu, 20 Aug 2026 11:07:08 GMT"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "content-length",
              "value": "80"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 09:07:08 GMT"
            },
            {
              "name": "content-type",
              "value": "image/png"
            },
            {
              "name": "last-modified",
              "value": "Thu, 20 Aug 2026 07:47:15 GMT"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            }
          ],
          "cookies": [],
          "content": {
            "size": 68,
            "mimeType": "image/png",
            "text": "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVR4XmNgAAIAAAUAAQYUdaMAAAAASUVORK5CYII=",
            "encoding": "base64"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": 0,
          "_transferSize": 0,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:09.559Z",
        "time": 331.304999999702,
        "timings": {
          "blocked": 329.8559999216646,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0,
          "wait": 0.32400001005083323,
          "receive": 1.125000067986548,
          "_blocked_queueing": 329.6129999216646,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_fromCache": "disk",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "parser",
          "url": "https://ekat.festool.de/login/app?__bk_&__windowid=IRW3104379&__rid=FOE1787216989423",
          "lineNumber": 1
        },
        "_priority": "Medium",
        "_resourceType": "manifest",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/login/manifest_Festool_en_GB.json",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": ":authority",
              "value": "ekat.festool.de"
            },
            {
              "name": ":method",
              "value": "GET"
            },
            {
              "name": ":path",
              "value": "/login/manifest_Festool_en_GB.json"
            },
            {
              "name": ":scheme",
              "value": "https"
            },
            {
              "name": "accept",
              "value": "*/*"
            },
            {
              "name": "accept-encoding",
              "value": "gzip, deflate, br, zstd"
            },
            {
              "name": "accept-language",
              "value": "en-GB,en-US;q=0.9,en;q=0.8"
            },
            {
              "name": "priority",
              "value": "u=2"
            },
            {
              "name": "referer",
              "value": "https://ekat.festool.de/login/app?__bk_&__windowid=IRW3104379&__rid=FOE1787216989423"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            },
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "sec-fetch-dest",
              "value": "manifest"
            },
            {
              "name": "sec-fetch-mode",
              "value": "cors"
            },
            {
              "name": "sec-fetch-site",
              "value": "same-origin"
            },
            {
              "name": "user-agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            }
          ],
          "queryString": [],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "content-length",
              "value": "360"
            },
            {
              "name": "content-type",
              "value": "application/json"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 09:09:49 GMT"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "x-robots-tag",
              "value": "noindex"
            }
          ],
          "cookies": [],
          "content": {
            "size": 360,
            "mimeType": "application/json",
            "text": "{\"theme_color\":\"white\",\"background_color\":\"#000\",\"display\":\"standalone\",\"name\":\"Quanos SIS.one Shop\",\"short_name\":\"Quanos SIS.one Shop\",\"icons\":[{\"sizes\":\"192x192\",\"src\":\"WEB-RES/RESOURCES/themes/Festool/android-chrome-192x192.png\",\"type\":\"image/png\"},{\"sizes\":\"512x512\",\"src\":\"WEB-RES/RESOURCES/themes/Festool/android-chrome-512x512.png\",\"type\":\"image/png\"}]}"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": -1,
          "_transferSize": 565,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:09.611Z",
        "time": 169.68300001953543,
        "timings": {
          "blocked": 12.176999924227596,
          "dns": 0.007000000000000006,
          "ssl": 40.809,
          "connect": 81.609,
          "send": 0.41200000000000614,
          "wait": 74.95200004820525,
          "receive": 0.5260000471025705,
          "_blocked_queueing": 11.639999924227595,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_connectionId": "1726535",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "parser",
          "url": "https://ekat.festool.de/login/WEB-RES/css/style_Festool.css_shop_7.26.1.5.css"
        },
        "_priority": "VeryHigh",
        "_resourceType": "font",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/login/WEB-RES/custom/designs/Festool/fonts/OpenSans-Regular.ttf",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": ":authority",
              "value": "ekat.festool.de"
            },
            {
              "name": ":method",
              "value": "GET"
            },
            {
              "name": ":path",
              "value": "/login/WEB-RES/custom/designs/Festool/fonts/OpenSans-Regular.ttf"
            },
            {
              "name": ":scheme",
              "value": "https"
            },
            {
              "name": "accept",
              "value": "*/*"
            },
            {
              "name": "accept-encoding",
              "value": "gzip, deflate, br, zstd"
            },
            {
              "name": "accept-language",
              "value": "en-GB,en-US;q=0.9,en;q=0.8"
            },
            {
              "name": "if-modified-since",
              "value": "Thu, 20 Aug 2026 08:51:01 GMT"
            },
            {
              "name": "if-none-match",
              "value": "W/\"217276-1787216721815\""
            },
            {
              "name": "origin",
              "value": "https://ekat.festool.de"
            },
            {
              "name": "priority",
              "value": "u=0"
            },
            {
              "name": "referer",
              "value": "https://ekat.festool.de/login/WEB-RES/css/style_Festool.css_shop_7.26.1.5.css"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            },
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "sec-fetch-dest",
              "value": "font"
            },
            {
              "name": "sec-fetch-mode",
              "value": "cors"
            },
            {
              "name": "sec-fetch-site",
              "value": "same-origin"
            },
            {
              "name": "user-agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            }
          ],
          "queryString": [],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://ekat.festool.de"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "cache-control",
              "value": "public"
            },
            {
              "name": "content-length",
              "value": "217276"
            },
            {
              "name": "content-type",
              "value": "font/ttf"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 09:09:49 GMT"
            },
            {
              "name": "etag",
              "value": "W/\"217276-1787216903542\""
            },
            {
              "name": "expires",
              "value": "Thu, 20 Aug 2026 09:10:23 GMT"
            },
            {
              "name": "last-modified",
              "value": "Thu, 20 Aug 2026 08:51:01 GMT"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "pragma",
              "value": "cache"
            },
            {
              "name": "vary",
              "value": "Origin"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "x-robots-tag",
              "value": "noindex"
            }
          ],
          "cookies": [],
          "content": {
            "size": 217276,
            "mimeType": "font/ttf",
            "text": "AAEAAAATAQAABAAwRFNJR54SRB0AAztIAAAVdEdERUYAJgOvAAM3KAAAAB5HUE9TCzcPNwADN0gAAAA4R1NVQg4rPbcAAzeAAAADxk9TLzKhNp7JAAABuAAAAGBjbWFwrrv1+wAAELQAAAOIY3Z0IA9NGKQAABz8AAAAomZwZ21+YbYRAAAUPAAAB7RnYXNwABUAIwADNxgAAAAQZ2x5ZnQ4mUsAACT4AAEvtGhlYWQCumNwAAABPAAAADZoaGVhDcwJcwAAAXQAAAAkaG10eOg1PN0AAAIYAAAOmmtlcm5UKwl+AAFUrAABtjZsb2NhKRTc8QAAHaAAAAdWbWF4cAVDAgoAAAGYAAAAIG5hbWVIjELvAAMK5AAABgZwb3N0AkPvbAADEOwAACYrcHJlcEO3lqQAABvwAAABCQABAAAAARnbV3f4KF8PPPUACQgAAAAAAMk1MYsAAAAA1SvM1fua/dUJoghiAAAACQACAAAAAAAAAAEAAAiN/agAAAms+5r+ewmiAAEAAAAAAAAAAAAAAAAAAAOjAAEAAAOqAIoAFgBWAAUAAgAQAC8AXAAAAQ4A+AADAAEAAwS2AZAABQAABZoFMwAAAR8FmgUzAAAD0QBmAfEIAgILBgYDBQQCAgTgAALvQAAgWwAAACgAAAAAMUFTQwBAACD//QYf/hQAhAiNAlggAAGfAAAAAARIBbYAAAAgAAMEzQDBAAAAAAQUAAACFAAAAiMAmAM1AIUFKwAzBJMAgwaWAGgF1wBxAcUAhQJeAFICXgA9BGoAVgSTAGgB9gA/ApMAVAIhAJgC8AAUBJMAZgSTALwEkwBkBJMAXgSTACsEkwCFBJMAdQSTAF4EkwBoBJMAagIhAJgCIQA/BJMAaASTAHcEkwBoA28AGwcxAHkFEAAABS8AyQUMAH0F1QDJBHMAyQQhAMkF0wB9BecAyQKqAFQCI/9gBOkAyQQnAMkHOQDJBggAyQY7AH0E0QDJBjsAfQTyAMkEZABqBG0AEgXTALoEwwAAB2gAGwSeAAgEewAABJEAUgKiAKYC8AAXAqIAMwRWADEDlv/8BJ4BiQRzAF4E5wCwA88AcwTnAHMEfQBzArYAHQRiACcE6QCwAgYAogIG/5EEMwCwAgYAsAdxALAE6QCwBNUAcwTnALAE5wBzA0QAsAPRAGoC0wAfBOkApAQCAAAGOQAXBDEAJwQIAAIDvgBSAwgAPQRoAe4DCABIBJMAaAIUAAACIwCYBJMAvgSTAD8EkwB7BJMAHwRoAe4EIQB7BJ4BNQaoAGQC1QBGA/oAUgSTAGgCkwBUBqgAZAQA//oDbQB/BJMAaALHADECxwAhBJ4BiQT0ALAFPQBxAiEAmAHRACUCxwBMAwAAQgP6AFAGPQBLBj0ALgY9ABoDbwAzBRAAAAUQAAAFEAAABRAAAAUQAAAFEAAABvz//gUMAH0EcwDJBHMAyQRzAMkEcwDJAqoAPAKqAFQCqv//AqoAPAXHAC8GCADJBjsAfQY7AH0GOwB9BjsAfQY7AH0EkwCFBjsAfQXTALoF0wC6BdMAugXTALoEewAABOMAyQT6ALAEcwBeBHMAXgRzAF4EcwBeBHMAXgRzAF4G3QBeA88AcwR9AHMEfQBzBH0AcwR9AHMCBv/aAgYAqQIG/7MCBv/sBMUAcQTpALAE1QBzBNUAcwTVAHME1QBzBNUAcwSTAGgE1QBzBOkApATpAKQE6QCkBOkApAQIAAIE5wCwBAgAAgUQAAAEcwBeBRAAAARzAF4FEAAABHMAXgUMAH0DzwBzBQwAfQPPAHMFDAB9A88AcwUMAH0DzwBzBdUAyQTnAHMFxwAvBOcAcwRzAMkEfQBzBHMAyQR9AHMEcwDJBH0AcwRzAMkEfQBzBHMAyQR9AHMF0wB9BGIAJwXTAH0EYgAnBdMAfQRiACcF0wB9BGIAJwXnAMkE6QCwBecAAATpABQCqv/iAgb/kAKqACoCBv/aAqoAHgIG/8wCqgBUAgYANQKqAFQCBgCwBM0AVAQMAKICI/9gAgb/kQTpAMkEMwCwBCUAsAQnAMkCBgCjBCcAyQIGAFkEJwDJAgYAsAQnAMkCgwCwBC8AHQIX//wGCADJBOkAsAYIAMkE6QCwBggAyQTpALAFcwABBggAyQTpALAGOwB9BNUAcwY7AH0E1QBzBjsAfQTVAHMHYgB9B4kAcQTyAMkDRACwBPIAyQNEAGAE8gDJA0QAggRkAGoD0QBqBGQAagPRAGoEZABqA9EAagRkAGoD0QBqBG0AEgLTAB8EbQASAtMAHwRtABIC0wAfBdMAugTpAKQF0wC6BOkApAXTALoE6QCkBdMAugTpAKQF0wC6BOkApAXTALoE6QCkB2gAGwY5ABcEewAABAgAAgR7AAAEkQBS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THdMhZj5q2YChjXW1KRk/X0z2wD//wCk/+wEOQYhAiYAWAAAAQYAQ8QAAAizARYRJgArNf//AKT/7AQ5BiECJgBYAAABBgB2cQAACLMBHhEmACs1//8ApP/sBDkGIQImAFgAAAEGAUsSAAAIswEjESYAKzX//wCk/+wEOQXTAiYAWAAAAQYAaiEAAAq0AgEqESYAKzU1//8AAv4UBAYGIQImAFwAAAEGAHYSAAAIswEfESYAKzUAAgCw/hQEdQYUABYAIgA+QB8gBhsUEBARBhEkIxIAERsMFgkDCR5GWQkWAxdGWQMQAD8rABg/KxESADk5GD8/ERIBOTkRMxEzMxEzMTABNjYzMhIREAIjIicjFxYVESMRMxEUByUiBgcVFBYzIBE0JgFYQqpq1/Dx1t56DAQIpqYGAUiomAKaqgEvlAO0WU/+1P71/vT+06EiTT/+NQgA/i40Whu4ySnnxwGw19H//wAC/hQEBgXTAiYAXAAAAQYAarUAAAq0AgErESYAKzU1//8AAAAABRAGtAImACQAAAEHAU0APwFSAAizAhIFJgArNf//AF7/7APNBWICJgBEAAABBgFN9QAACLMCKBEmACs1//8AAAAABRAHNwImACQAAAEHAU4AKwFSAAizAg8FJgArNf//AF7/7APNBeUCJgBEAAABBgFO5AAACLMCJREmACs1//8AAP5CBREFvAImACQAAAAHAVEDoAAA//8AXv5CBAAEWgImAEQAAAAHAVECjwAA//8Aff/sBM8HcwImACYAAAEHAHYBCAFSAAizASAFJgArNf//AHP/7AOLBiECJgBGAAABBgB2RAAACLMBIBEmACs1//8Aff/sBM8HcwImACYAAAEHAUsArAFSAAizASUFJgArNf//AHP/7AOLBiECJgBGAAABBgFL1AAACLMBJREmACs1//8Aff/sBM8HMQImACYAAAEHAU8CGwFSAAizASAFJgArNf//AHP/7AOLBd8CJgBGAAABBwFPAVAAAAAIswEgESYAKzX//wB9/+wEzwdzAiYAJgAAAQcBTADBAVIACLMBIgUmACs1//8Ac//sA6EGIQImAEYAAAEGAUzzAAAIswEiESYAKzX//wDJAAAFWAdzAiYAJwAAAQcBTABYAVIACLMCHQUmACs1//8Ac//sBYEGFAImAEcAAAEHAjgDDAAAAAeyAiMA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/8MABQBS/4UABQBT/8MABQBU/4UABQBV/8MABQBW/8MABQBY/8MABQCC/3EABQCD/3EABQCE/3EABQCF/3EABQCG/3EABQCH/3EABQCfABQABQCi/4UABQCj/64ABQCk/64ABQCl/64ABQCm/64ABQCn/64ABQCo/64ABQCp/4UABQCq/4UABQCr/4UABQCs/4UABQCt/4UABQC0/4UABQC1/4UABQC2/4UABQC3/4UABQC4/4UABQC6/4UABQC7/8MABQC8/8MABQC9/8MABQC+/8MABQDC/3EABQDD/64ABQDE/3EABQDF/64ABQDG/3EABQDH/64ABQDJ/4UABQDL/4UABQDN/4UABQDP/4UABQDR/4UABQDT/4UABQDV/4UABQDX/4UABQDZ/4UABQDb/4UABQDd/4UABQDf/8MABQDh/8MABQDj/8MABQDl/8MABQD6/8MABQEG/8MABQEI/8MABQEN/8MABQEP/4UABQER/4UABQET/4UABQEV/4UABQEX/8MABQEZ/8MABQEd/8MABQEh/8MABQEkACkABQEmACkABQEr/8MABQEt/8MABQEv/8MABQEx/8MABQEz/8MABQE1/8MABQE2ACkABQE4ABQABQE6ABQABQFD/3EABQFE/64ABQFG/64ABQFI/4UABQFK/8MABQFW/3EABQFf/3EABQFi/3EABQFp/3EABQF5/64ABQF6/9cABQF7/9cABQF+/64ABQGB/8MABQGC/9cABQGD/9cABQGE/9cABQGH/9cABQGJ/9cABQGM/64ABQGO/8MABQGP/64ABQGQ/64ABQGT/64ABQGZ/64ABQGk/4UABQGq/3EABQGu/4UABQG1/4UABQHK/9cABQHO/3EABQHP/4UABQHV/3EABQHY/4UABQHb/4UABQHe/4UABQHq/4UABQHt/4UABQHu/8MABQHy/3EABQH6ACkABQH8ACkABQH+ACkABQIAABQABQJX/8MABQJY/3EABQJZ/64ABQJg/4UABQJi/8MABQJq/4UABQJy/3EABQJz/3EABQJ9/+wABQJ//4UABQKF/4UABQKH/4UABQKJ/4UABQKN/4UABQKy/4UABQK0/4UABQLO/4UABQLP/3EABQLZ/3EABQLa/9cABQLb/3EABQLc/9cABQLd/3EABQLe/9cABQLg/4UABQLi/9cABQLk/9cABQLw/4UABQLy/4UABQL0/4UABQMJ/3EABQMK/4UABQML/3EABQMM/4UABQMR/4UABQMS/3EABQMW/4UABQMa/4UABQMb/4UABQMc/3EABQMd/3EABQMe/64ABQMf/3EABQMg/64ABQMh/3EABQMi/64ABQMj/3EABQMl/3EABQMm/64ABQMn/3EABQMo/64ABQMp/3EABQMq/64ABQMr/3EABQMs/64ABQMt/3EABQMu/64ABQMv/3EABQMw/64ABQMx/3EABQMy/64ABQMz/3EABQM0/64ABQM2/4UABQM4/4UABQM6/4UABQM8/4UABQNA/4UABQNC/4UABQNE/4UABQNK/4UABQNM/4UABQNO/4UABQNS/4UABQNU/4UABQNW/4UABQNY/4UABQNa/4UABQNc/4UABQNe/4UABQNg/4UABQNi/8MABQNk/8MABQNm/8MABQNo/8MABQNq/8MABQNs/8MABQNu/8MABQNvABQABQNxABQABQNzABQABQOPACkACgAk/3EACgA3ACkACgA5ACkACgA6ACkACgA8ABQACgBE/64ACgBG/4UACgBH/4UACgBI/4UACgBK/8MACgBQ/8MACgBR/8MACgBS/4UACgBT/8MACgBU/4UACgBV/8MACgBW/8MACgBY/8MACgCC/3EACgCD/3EACgCE/3EACgCF/3EACgCG/3EACgCH/3EACgCfABQACgCi/4UACgCj/64ACgCk/64ACgCl/64ACgCm/64ACgCn/64ACgCo/64ACgCp/4UACgCq/4UACgCr/4UACgCs/4UACgCt/4UACgC0/4UACgC1/4UACgC2/4UACgC3/4UACgC4/4UACgC6/4UACgC7/8MACgC8/8MACgC9/8MACgC+/8MACgDC/3EACgDD/64ACgDE/3EACgDF/64ACgDG/3EACgDH/64ACgDJ/4UACgDL/4UACgDN/4UACgDP/4UACgDR/4UACgDT/4UACgDV/4UACgDX/4UACgDZ/4UACgDb/4UACgDd/4UACgDf/8MACgDh/8MACgDj/8MACgDl/8MACgD6/8MACgEG/8MACgEI/8MACgEN/8MACgEP/4UACgER/4UACgET/4UACgEV/4UACgEX/8MACgEZ/8MACgEd/8MACgEh/8MACgEkACkACgEmACkACgEr/8MACgEt/8MACgEv/8MACgEx/8MACgEz/8MACgE1/8MACgE2ACkACgE4ABQACgE6ABQACgFD/3EACgFE/64ACgFG/64ACgFI/4UACgFK/8MACgFW/3EACgFf/3EACgFi/3EACgFp/3EACgF5/64ACgF6/9cACgF7/9cACgF+/64ACgGB/8MACgGC/9cACgGD/9cACgGE/9cACgGH/9cACgGJ/9cACgGM/64ACgGO/8MACgGP/64ACgGQ/64ACgGT/64ACgGZ/64ACgGk/4UACgGq/3EACgGu/4UACgG1/4UACgHK/9cACgHO/3EACgHP/4UACgHV/3EACgHY/4UACgHb/4UACgHe/4UACgHq/4UACgHt/4UACgHu/8MACgHy/3EACgH6ACkACgH8ACkACgH+ACkACgIAABQACgJX/8MACgJY/3EACgJZ/64ACgJg/4UACgJi/8MACgJq/4UACgJy/3EACgJz/3EACgJ9/+wACgJ//4UACgKF/4UACgKH/4UACgKJ/4UACgKN/4UACgKy/4UACgK0/4UACgLO/4UACgLP/3EACgLZ/3EACgLa/9cACgLb/3EACgLc/9cACgLd/3EACgLe/9cACgLg/4UACgLi/9cACgLk/9cACgLw/4UACgLy/4UACgL0/4UACgMJ/3EACgMK/4UACgML/3EACgMM/4UACgMR/4UACgMS/3EACgMW/4UACgMa/4UACgMb/4UACgMc/3EACgMd/3EACgMe/64ACgMf/3EACgMg/64ACgMh/3EACgMi/64ACgMj/3EACgMl/3EACgMm/64ACgMn/3EACgMo/64ACgMp/3EACgMq/64ACgMr/3EACgMs/64ACgMt/3EACgMu/64ACgMv/3EACgMw/64ACgMx/3EACgMy/64ACgMz/3EACgM0/64ACgM2/4UACgM4/4UACgM6/4UACgM8/4UACgNA/4UACgNC/4UACgNE/4UACgNK/4UACgNM/4UACgNO/4UACgNS/4UACgNU/4UACgNW/4UACgNY/4UACgNa/4UACgNc/4UACgNe/4UACgNg/4UACgNi/8MACgNk/8MACgNm/8MACgNo/8MACgNq/8MACgNs/8MACgNu/8MACgNvABQACgNxABQACgNzABQACgOPACkACwAtALgADwAm/5oADwAq/5oADwAy/5oADwA0/5oADwA3/3EADwA4/9cADwA5/4UADwA6/4UADwA8/4UADwCJ/5oADwCU/5oADwCV/5oADwCW/5oADwCX/5oADwCY/5oADwCa/5oADwCb/9cADwCc/9cADwCd/9cADwCe/9cADwCf/4UADwDI/5oADwDK/5oADwDM/5oADwDO/5oADwDe/5oADwDg/5oADwDi/5oADwDk/5oADwEO/5oADwEQ/5oADwES/5oADwEU/5oADwEk/3EADwEm/3EADwEq/9cADwEs/9cADwEu/9cADwEw/9cADwEy/9cADwE0/9cADwE2/4UADwE4/4UADwE6/4UADwFH/5oADwFm/64ADwFt/64ADwFx/3EADwFy/4UADwFz/5oADwF1/4UADwF4/4UADwGF/9cADwGd/3EADwGf/5oADwGm/3EADwG4/5oADwG7/5oADwG8/3EADwG+/64ADwHB/1wADwHE/3EADwHc/5oADwHh/4UADwHk/5oADwH6/4UADwH8/4UADwH+/4UADwIA/4UADwJU/4UADwJf/5oADwJh/9cADwJs/5oADwJ8/1wADwJ+/5oADwKA/4UADwKC/4UADwKE/5oADwKG/5oADwKI/5oADwKK/5oADwKM/5oADwKp/3EADwKq/5oADwKx/5oADwKz/5oADwK1/3EADwK2/5oADwK3/4UADwK5/4UADwK9/3EADwK+/5oADwK//1wADwLA/4UADwLB/1wADwLC/4UADwLF/4UADwLH/4UADwLU/1wADwLV/4UADwLv/5oADwLx/5oADwLz/5oADwL9/1wADwL+/4UADwMN/4UADwMO/5oADwMP/4UADwMQ/5oADwMV/5oADwMX/3EADwMY/5oADwNJ/5oADwNL/5oADwNN/5oADwNP/5oADwNR/5oADwNT/5oADwNV/5oADwNX/5oADwNZ/5oADwNb/5oADwNd/5oADwNf/5oADwNh/9cADwNj/9cADwNl/9cADwNn/9cADwNp/9cADwNr/9cADwNt/9cADwNv/4UADwNx/4UADwNz/4UADwOP/3EAEAA3/64AEAEk/64AEAEm/64AEAFx/64AEAGd/64AEAGm/64AEAG8/64AEAHE/64AEAHc/9cAEAHk/9cAEAKp/64AEAKq/9cAEAK1/64AEAK2/9cAEAK9/64AEAK+/9cAEAMX/64AEAMY/9cAEAOP/64AEQAm/5oAEQAq/5oAEQAy/5oAEQA0/5oAEQA3/3EAEQA4/9cAEQA5/4UAEQA6/4UAEQA8/4UAEQCJ/5oAEQCU/5oAEQCV/5oAEQCW/5oAEQCX/5oAEQCY/5oAEQCa/5oAEQCb/9cAEQCc/9cAEQCd/9cAEQCe/9cAEQCf/4UAEQDI/5oAEQDK/5oAEQDM/5oAEQDO/5oAEQDe/5oAEQDg/5oAEQDi/5oAEQDk/5oAEQEO/5oAEQEQ/5oAEQES/5oAEQEU/5oAEQEk/3EAEQEm/3EAEQEq/9cAEQEs/9cAEQEu/9cAEQEw/9cAEQEy/9cAEQE0/9cAEQE2/4UAEQE4/4UAEQE6/4UAEQFH/5oAEQFm/64AEQFt/64AEQFx/3EAEQFy/4UAEQFz/5oAEQF1/4UAEQF4/4UAEQGF/9cAEQGd/3EAEQGf/5oAEQGm/3EAEQG4/5oAEQG7/5oAEQG8/3EAEQG+/64AEQHB/1wAEQHE/3EAEQHc/5oAEQHh/4UAEQHk/5oAEQH6/4UAEQH8/4UAEQH+/4UAEQIA/4UAEQJU/4UAEQJf/5oAEQJh/9cAEQJs/5oAEQJ8/1wAEQJ+/5oAEQKA/4UAEQKC/4UAEQKE/5oAEQKG/5oAEQKI/5oAEQKK/5oAEQKM/5oAEQKp/3EAEQKq/5oAEQKx/5oAEQKz/5oAEQK1/3EAEQK2/5oAEQK3/4UAEQK5/4UAEQK9/3EAEQK+/5oAEQK//1wAEQLA/4UAEQLB/1wAEQLC/4UAEQLF/4UAEQLH/4UAEQLU/1wAEQLV/4UAEQLv/5oAEQLx/5oAEQLz/5oAEQL9/1wAEQL+/4UAEQMN/4UAEQMO/5oAEQMP/4UAEQMQ/5oAEQMV/5oAEQMX/3EAEQMY/5oAEQNJ/5oAEQNL/5oAEQNN/5oAEQNP/5oAEQNR/5oAEQNT/5oAEQNV/5oAEQNX/5oAEQNZ/5oAEQNb/5oAEQNd/5oAEQNf/5oAEQNh/9cAEQNj/9cAEQNl/9cAEQNn/9cAEQNp/9cAEQNr/9cAEQNt/9cAEQNv/4UAEQNx/4UAEQNz/4UAEQOP/3EAJAAF/3EAJAAK/3EAJAAm/9cAJAAq/9cAJAAtAQoAJAAy/9cAJAA0/9cAJAA3/3EAJAA5/64AJAA6/64AJAA8/4UAJACJ/9cAJACU/9cAJACV/9cAJACW/9cAJACX/9cAJACY/9cAJACa/9cAJACf/4UAJADI/9cAJADK/9cAJADM/9cAJADO/9cAJADe/9cAJADg/9cAJADi/9cAJADk/9cAJAEO/9cAJAEQ/9cAJAES/9cAJAEU/9cAJAEk/3EAJAEm/3EAJAE2/64AJAE4/4UAJAE6/4UAJAFH/9cAJAH6/64AJAH8/64AJAH+/64AJAIA/4UAJAIH/3EAJAIL/3EAJAJf/9cAJANJ/9cAJANL/9cAJANN/9cAJANP/9cAJANR/9cAJANT/9cAJANV/9cAJANX/9cAJANZ/9cAJANb/9cAJANd/9cAJANf/9cAJANv/4UAJANx/4UAJANz/4UAJAOP/3EAJQAP/64AJQAR/64AJQAk/9cAJQA3/8MAJQA5/+wAJQA6/+wAJQA7/9cAJQA8/+wAJQA9/+wAJQCC/9cAJQCD/9cAJQCE/9cAJQCF/9cAJQCG/9cAJQCH/9cAJQCf/+wAJQDC/9cAJQDE/9cAJQDG/9cAJQEk/8MAJQEm/8MAJQE2/+wAJQE4/+wAJQE6/+wAJQE7/+wAJQE9/+wAJQE//+wAJQFD/9cAJQGg/+wAJQH6/+wAJQH8/+wAJQH+/+wAJQIA/+wAJQII/64AJQIM/64AJQJY/9cAJQMd/9cAJQMf/9cAJQMh/9cAJQMj/9cAJQMl/9cAJQMn/9cAJQMp/9cAJQMr/9cAJQMt/9cAJQMv/9cAJQMx/9cAJQMz/9cAJQNv/+wAJQNx/+wAJQNz/+wAJQOP/8MAJgAm/9cAJgAq/9cAJgAy/9cAJgA0/9cAJgCJ/9cAJgCU/9cAJgCV/9cAJgCW/9cAJgCX/9cAJgCY/9cAJgCa/9cAJgDI/9cAJgDK/9cAJgDM/9cAJgDO/9cAJgDe/9cAJgDg/9cAJgDi/9cAJgDk/9cAJgEO/9cAJgEQ/9cAJgES/9cAJgEU/9cAJgFH/9cAJgJf/9cAJgNJ/9cAJgNL/9cAJgNN/9cAJgNP/9cAJgNR/9cAJgNT/9cAJgNV/9cAJgNX/9cAJgNZ/9cAJgNb/9cAJgNd/9cAJgNf/9cAJwAP/64AJwAR/64AJwAk/9cAJwA3/8MAJwA5/+wAJwA6/+wAJwA7/9cAJwA8/+wAJwA9/+wAJwCC/9cAJwCD/9cAJwCE/9cAJwCF/9cAJwCG/9cAJwCH/9cAJwCf/+wAJwDC/9cAJwDE/9cAJwDG/9cAJwEk/8MAJwEm/8MAJwE2/+wAJwE4/+wAJwE6/+wAJwE7/+wAJwE9/+wAJwE//+wAJwFD/9cAJwGg/+wAJwH6/+wAJwH8/+wAJwH+/+wAJwIA/+wAJwII/64AJwIM/64AJwJY/9cAJwMd/9cAJwMf/9cAJwMh/9cAJwMj/9cAJwMl/9cAJwMn/9cAJwMp/9cAJwMr/9cAJwMt/9cAJwMv/9cAJwMx/9cAJwMz/9cAJwNv/+wAJwNx/+wAJwNz/+wAJwOP/8MAKAAtAHsAKQAP/4UAKQAR/4UAKQAiACkAKQAk/9cAKQCC/9cAKQCD/9cAKQCE/9cAKQCF/9cAKQCG/9cAKQCH/9cAKQDC/9cAKQDE/9cAKQDG/9cAKQFD/9cAKQII/4UAKQIM/4UAKQJY/9cAKQMd/9cAKQMf/9cAKQMh/9cAKQMj/9cAKQMl/9cAKQMn/9cAKQMp/9cAKQMr/9cAKQMt/9cAKQMv/9cAKQMx/9cAKQMz/9cALgAm/9cALgAq/9cALgAy/9cALgA0/9cALgCJ/9cALgCU/9cALgCV/9cALgCW/9cALgCX/9cALgCY/9cALgCa/9cALgDI/9cALgDK/9cALgDM/9cALgDO/9cALgDe/9cALgDg/9cALgDi/9cALgDk/9cALgEO/9cALgEQ/9cALgES/9cALgEU/9cALgFH/9cALgJf/9cALgNJ/9cALgNL/9cALgNN/9cALgNP/9cALgNR/9cALgNT/9cALgNV/9cALgNX/9cALgNZ/9cALgNb/9cALgNd/9cALgNf/9cALwAF/1wALwAK/1wALwAm/9cALwAq/9cALwAy/9cALwA0/9cALwA3/9cALwA4/+wALwA5/9cALwA6/9cALwA8/8MALwCJ/9cALwCU/9cALwCV/9cALwCW/9cALwCX/9cALwCY/9cALwCa/9cALwCb/+wALwCc/+wALwCd/+wALwCe/+wALwCf/8MALwDI/9cALwDK/9cALwDM/9cALwDO/9cALwDe/9cALwDg/9cALwDi/9cALwDk/9cALwEO/9cALwEQ/9cALwES/9cALwEU/9cALwEk/9cALwEm/9cALwEq/+wALwEs/+wALwEu/+wALwEw/+wALwEy/+wALwE0/+wALwE2/9cALwE4/8MALwE6/8MALwFH/9cALwH6/9cALwH8/9cALwH+/9cALwIA/8MALwIH/1wALwIL/1wALwJf/9cALwJh/+wALwNJ/9cALwNL/9cALwNN/9cALwNP/9cALwNR/9cALwNT/9cALwNV/9cALwNX/9cALwNZ/9cALwNb/9cALwNd/9cALwNf/9cALwNh/+wALwNj/+wALwNl/+wALwNn/+wALwNp/+wALwNr/+wALwNt/+wALwNv/8MALwNx/8MALwNz/8MALwOP/9cAMgAP/64AMgAR/64AMgAk/9cAMgA3/8MAMgA5/+wAMgA6/+wAMgA7/9cAMgA8/+wAMgA9/+wAMgCC/9cAMgCD/9cAMgCE/9cAMgCF/9cAMgCG/9cAMgCH/9cAMgCf/+wAMgDC/9cAMgDE/9cAMgDG/9cAMgEk/8MAMgEm/8MAMgE2/+wAMgE4/+wAMgE6/+wAMgE7/+wAMgE9/+wAMgE//+wAMgFD/9cAMgGg/+wAMgH6/+wAMgH8/+wAMgH+/+wAMgIA/+wAMgII/64AMgIM/64AMgJY/9cAMgMd/9cAMgMf/9cAMgMh/9cAMgMj/9cAMgMl/9cAMgMn/9cAMgMp/9cAMgMr/9cAMgMt/9cAMgMv/9cAMgMx/9cAMgMz/9cAMgNv/+wAMgNx/+wAMgNz/+wAMgOP/8MAMwAP/vYAMwAR/vYAMwAk/5oAMwA7/9cAMwA9/+wAMwCC/5oAMwCD/5oAMwCE/5oAMwCF/5oAMwCG/5oAMwCH/5oAMwDC/5oAMwDE/5oAMwDG/5oAMwE7/+wAMwE9/+wAMwE//+wAMwFD/5oAMwII/vYAMwIM/vYAMwJY/5oAMwMd/5oAMwMf/5oAMwMh/5oAMwMj/5oAMwMl/5oAMwMn/5oAMwMp/5oAMwMr/5oAMwMt/5oAMwMv/5oAMwMx/5oAMwMz/5oANAAP/64ANAAR/64ANAAk/9cANAA3/8MANAA5/+wANAA6/+wANAA7/9cANAA8/+wANAA9/+wANACC/9cANACD/9cANACE/9cANACF/9cANACG/9cANACH/9cANACf/+wANADC/9cANADE/9cANADG/9cANAEk/8MANAEm/8MANAE2/+wANAE4/+wANAE6/+wANAE7/+wANAE9/+wANAE//+wANAFD/9cANAGg/+wANAH6/+wANAH8/+wANAH+/+wANAIA/+wANAII/64ANAIM/64ANAJY/9cANAMd/9cANAMf/9cANAMh/9cANAMj/9cANAMl/9cANAMn/9cANAMp/9cANAMr/9cANAMt/9cANAMv/9cANAMx/9cANAMz/9cANANv/+wANANx/+wANANz/+wANAOP/8MANwAP/4UANwAQ/64ANwAR/4UANwAiACkANwAk/3EANwAm/9cANwAq/9cANwAy/9cANwA0/9cANwA3ACkANwBE/1wANwBG/3EANwBH/3EANwBI/3EANwBK/3EANwBQ/5oANwBR/5oANwBS/3EANwBT/5oANwBU/3EANwBV/5oANwBW/4UANwBY/5oANwBZ/9cANwBa/9cANwBb/9cANwBc/9cANwBd/64ANwCC/3EANwCD/3EANwCE/3EANwCF/3EANwCG/3EANwCH/3EANwCJ/9cANwCU/9cANwCV/9cANwCW/9cANwCX/9cANwCY/9cANwCa/9cANwCi/3EANwCj/1wANwCk/1wANwCl/1wANwCm/1wANwCn/1wANwCo/1wANwCp/3EANwCq/3EANwCr/3EANwCs/3EANwCt/3EANwC0/3EANwC1/3EANwC2/3EANwC3/3EANwC4/3EANwC6/3EANwC7/5oANwC8/5oANwC9/5oANwC+/5oANwC//9cANwDC/3EANwDD/1wANwDE/3EANwDF/1wANwDG/3EANwDH/1wANwDI/9cANwDJ/3EANwDK/9cANwDL/3EANwDM/9cANwDN/3EANwDO/9cANwDP/3EANwDR/3EANwDT/3EANwDV/3EANwDX/3EANwDZ/3EANwDb/3EANwDd/3EANwDe/9cANwDf/3EANwDg/9cANwDh/3EANwDi/9cANwDj/3EANwDk/9cANwDl/3EANwD6/5oANwEG/5oANwEI/5oANwEN/5oANwEO/9cANwEP/3EANwEQ/9cANwER/3EANwES/9cANwET/3EANwEU/9cANwEV/3EANwEX/5oANwEZ/5oANwEd/4UANwEh/4UANwEkACkANwEmACkANwEr/5oANwEt/5oANwEv/5oANwEx/5oANwEz/5oANwE1/5oANwE3/9cANwE8/64ANwE+/64ANwFA/64ANwFD/3EANwFE/1wANwFG/1wANwFH/9cANwFI/3EANwFK/4UANwH7/9cANwH9/9cANwIC/64ANwID/64ANwIE/64ANwII/4UANwIM/4UANwJX/5oANwJY/3EANwJZ/1wANwJf/9cANwJg/3EANwJi/5oANwMd/3EANwMe/1wANwMf/3EANwMg/1wANwMh/3EANwMi/1wANwMj/3EANwMl/3EANwMm/1wANwMn/3EANwMo/1wANwMp/3EANwMq/1wANwMr/3EANwMs/1wANwMt/3EANwMu/1wANwMv/3EANwMw/1wANwMx/3EANwMy/1wANwMz/3EANwM0/1wANwM2/3EANwM4/3EANwM6/3EANwM8/3EANwNA/3EANwNC/3EANwNE/3EANwNJ/9cANwNK/3EANwNL/9cANwNM/3EANwNN/9cANwNO/3EANwNP/9cANwNR/9cANwNS/3EANwNT/9cANwNU/3EANwNV/9cANwNW/3EANwNX/9cANwNY/3EANwNZ/9cANwNa/3EANwNb/9cANwNc/3EANwNd/9cANwNe/3EANwNf/9cANwNg/3EANwNi/5oANwNk/5oANwNm/5oANwNo/5oANwNq/5oANwNs/5oANwNu/5oANwNw/9cANwOPACkAOAAP/9cAOAAR/9cAOAAk/+wAOACC/+wAOACD/+wAOACE/+wAOACF/+wAOACG/+wAOACH/+wAOADC/+wAOADE/+wAOADG/+wAOAFD/+wAOAII/9cAOAIM/9cAOAJY/+wAOAMd/+wAOAMf/+wAOAMh/+wAOAMj/+wAOAMl/+wAOAMn/+wAOAMp/+wAOAMr/+wAOAMt/+wAOAMv/+wAOAMx/+wAOAMz/+wAOQAP/5oAOQAR/5oAOQAiACkAOQAk/64AOQAm/+wAOQAq/+wAOQAy/+wAOQA0/+wAOQBE/9cAOQBG/9cAOQBH/9cAOQBI/9cAOQBK/+wAOQBQ/+wAOQBR/+wAOQBS/9cAOQBT/+wAOQBU/9cAOQBV/+wAOQBW/+wAOQBY/+wAOQCC/64AOQCD/64AOQCE/64AOQCF/64AOQCG/64AOQCH/64AOQCJ/+wAOQCU/+wAOQCV/+wAOQCW/+wAOQCX/+wAOQCY/+wAOQCa/+wAOQCi/9cAOQCj/9cAOQCk/9cAOQCl/9cAOQCm/9cAOQCn/9cAOQCo/9cAOQCp/9cAOQCq/9cAOQCr/9cAOQCs/9cAOQCt/9cAOQC0/9cAOQC1/9cAOQC2/9cAOQC3/9cAOQC4/9cAOQC6/9cAOQC7/+wAOQC8/+wAOQC9/+wAOQC+/+wAOQDC/64AOQDD/9cAOQDE/64AOQDF/9cAOQDG/64AOQDH/9cAOQDI/+wAOQDJ/9cAOQDK/+wAOQDL/9cAOQDM/+wAOQDN/9cAOQDO/+wAOQDP/9cAOQDR/9cAOQDT/9cAOQDV/9cAOQDX/9cAOQDZ/9cAOQDb/9cAOQDd/9cAOQDe/+wAOQDf/+wAOQDg/+wAOQDh/+wAOQDi/+wAOQDj/+wAOQDk/+wAOQDl/+wAOQD6/+wAOQEG/+wAOQEI/+wAOQEN/+wAOQEO/+wAOQEP/9cAOQEQ/+wAOQER/9cAOQES/+wAOQET/9cAOQEU/+wAOQEV/9cAOQEX/+wAOQEZ/+wAOQEd/+wAOQEh/+wAOQEr/+wAOQEt/+wAOQEv/+wAOQEx/+wAOQEz/+wAOQE1/+wAOQFD/64AOQFE/9cAOQFG/9cAOQFH/+wAOQFI/9cAOQFK/+wAOQII/5oAOQIM/5oAOQJX/+wAOQJY/64AOQJZ/9cAOQJf/+wAOQJg/9cAOQJi/+wAOQMd/64AOQMe/9cAOQMf/64AOQMg/9cAOQMh/64AOQMi/9cAOQMj/64AOQMl/64AOQMm/9cAOQMn/64AOQMo/9cAOQMp/64AOQMq/9cAOQMr/64AOQMs/9cAOQMt/64AOQMu/9cAOQMv/64AOQMw/9cAOQMx/64AOQMy/9cAOQMz/64AOQM0/9cAOQM2/9cAOQM4/9cAOQM6/9cAOQM8/9cAOQNA/9cAOQNC/9cAOQNE/9cAOQNJ/+wAOQNK/9cAOQNL/+wAOQNM/9cAOQNN/+wAOQNO/9cAOQNP/+wAOQNR/+wAOQNS/9cAOQNT/+wAOQNU/9cAOQNV/+wAOQNW/9cAOQNX/+wAOQNY/9cAOQNZ/+wAOQNa/9cAOQNb/+wAOQNc/9cAOQNd/+wAOQNe/9cAOQNf/+wAOQNg/9cAOQNi/+wAOQNk/+wAOQNm/+wAOQNo/+wAOQNq/+wAOQNs/+wAOQNu/+wAOgAP/5oAOgAR/5oAOgAiACkAOgAk/64AOgAm/+wAOgAq/+wAOgAy/+wAOgA0/+wAOgBE/9cAOgBG/9cAOgBH/9cAOgBI/9cAOgBK/+wAOgBQ/+wAOgBR/+wAOgBS/9cAOgBT/+wAOgBU/9cAOgBV/+wAOgBW/+wAOgBY/+wAOgCC/64AOgCD/64AOgCE/64AOgCF/64AOgCG/64AOgCH/64AOgCJ/+wAOgCU/+wAOgCV/+wAOgCW/+wAOgCX/+wAOgCY/+wAOgCa/+wAOgCi/9cAOgCj/9cAOgCk/9cAOgCl/9cAOgCm/9cAOgCn/9cAOgCo/9cAOgCp/9cAOgCq/9cAOgCr/9cAOgCs/9cAOgCt/9cAOgC0/9cAOgC1/9cAOgC2/9cAOgC3/9cAOgC4/9cAOgC6/9cAOgC7/+wAOgC8/+wAOgC9/+wAOgC+/+wAOgDC/64AOgDD/9cAOgDE/64AOgDF/9cAOgDG/64AOgDH/9cAOgDI/+wAOgDJ/9cAOgDK/+wAOgDL/9cAOgDM/+wAOgDN/9cAOgDO/+wAOgDP/9cAOgDR/9cAOgDT/9cAOgDV/9cAOgDX/9cAOgDZ/9cAOgDb/9cAOgDd/9cAOgDe/+wAOgDf/+wAOgDg/+wAOgDh/+wAOgDi/+wAOgDj/+wAOgDk/+wAOgDl/+wAOgD6/+wAOgEG/+wAOgEI/+wAOgEN/+wAOgEO/+wAOgEP/9cAOgEQ/+wAOgER/9cAOgES/+wAOgET/9cAOgEU/+wAOgEV/9cAOgEX/+wAOgEZ/+wAOgEd/+wAOgEh/+wAOgEr/+wAOgEt/+wAOgEv/+wAOgEx/+wAOgEz/+wAOgE1/+wAOgFD/64AOgFE/9cAOgFG/9cAOgFH/+wAOgFI/9cAOgFK/+wAOgII/5oAOgIM/5oAOgJX/+wAOgJY/64AOgJZ/9cAOgJf/+wAOgJg/9cAOgJi/+wAOgMd/64AOgMe/9cAOgMf/64AOgMg/9cAOgMh/64AOgMi/9cAOgMj/64AOgMl/64AOgMm/9cAOgMn/64AOgMo/9cAOgMp/64AOgMq/9cAOgMr/64AOgMs/9cAOgMt/64AOgMu/9cAOgMv/64AOgMw/9cAOgMx/64AOgMy/9cAOgMz/64AOgM0/9cAOgM2/9cAOgM4/9cAOgM6/9cAOgM8/9cAOgNA/9cAOgNC/9cAOgNE/9cAOgNJ/+wAOgNK/9cAOgNL/+wAOgNM/9cAOgNN/+wAOgNO/9cAOgNP/+wAOgNR/+wAOgNS/9cAOgNT/+wAOgNU/9cAOgNV/+wAOgNW/9cAOgNX/+wAOgNY/9cAOgNZ/+wAOgNa/9cAOgNb/+wAOgNc/9cAOgNd/+wAOgNe/9cAOgNf/+wAOgNg/9cAOgNi/+wAOgNk/+wAOgNm/+wAOgNo/+wAOgNq/+wAOgNs/+wAOgNu/+wAOwAm/9cAOwAq/9cAOwAy/9cAOwA0/9cAOwCJ/9cAOwCU/9cAOwCV/9cAOwCW/9cAOwCX/9cAOwCY/9cAOwCa/9cAOwDI/9cAOwDK/9cAOwDM/9cAOwDO/9cAOwDe/9cAOwDg/9cAOwDi/9cAOwDk/9cAOwEO/9cAOwEQ/9cAOwES/9cAOwEU/9cAOwFH/9cAOwJf/9cAOwNJ/9cAOwNL/9cAOwNN/9cAOwNP/9cAOwNR/9cAOwNT/9cAOwNV/9cAOwNX/9cAOwNZ/9cAOwNb/9cAOwNd/9cAOwNf/9cAPAAP/4UAPAAR/4UAPAAiACkAPAAk/4UAPAAm/9cAPAAq/9cAPAAy/9cAPAA0/9cAPABE/5oAPABG/5oAPABH/5oAPABI/5oAPABK/9cAPABQ/8MAPABR/8MAPABS/5oAPABT/8MAPABU/5oAPABV/8MAPABW/64APABY/8MAPABd/9cAPACC/4UAPACD/4UAPACE/4UAPACF/4UAPACG/4UAPACH/4UAPACJ/9cAPACU/9cAPACV/9cAPACW/9cAPACX/9cAPACY/9cAPACa/9cAPACi/5oAPACj/5oAPACk/5oAPACl/5oAPACm/5oAPACn/5oAPACo/5oAPACp/5oAPACq/5oAPACr/5oAPACs/5oAPACt/5oAPAC0/5oAPAC1/5oAPAC2/5oAPAC3/5oAPAC4/5oAPAC6/5oAPAC7/8MAPAC8/8MAPAC9/8MAPAC+/8MAPADC/4UAPADD/5oAPADE/4UAPADF/5oAPADG/4UAPADH/5oAPADI/9cAPADJ/5oAPADK/9cAPADL/5oAPADM/9cAPADN/5oAPADO/9cAPADP/5oAPADR/5oAPADT/5oAPADV/5oAPADX/5oAPADZ/5oAPADb/5oAPADd/5oAPADe/9cAPADf/9cAPADg/9cAPADh/9cAPADi/9cAPADj/9cAPADk/9cAPADl/9cAPAD6/8MAPAEG/8MAPAEI/8MAPAEN/8MAPAEO/9cAPAEP/5oAPAEQ/9cAPAER/5oAPAES/9cAPAET/5oAPAEU/9cAPAEV/5oAPAEX/8MAPAEZ/8MAPAEd/64APAEh/64APAEr/8MAPAEt/8MAPAEv/8MAPAEx/8MAPAEz/8MAPAE1/8MAPAE8/9cAPAE+/9cAPAFA/9cAPAFD/4UAPAFE/5oAPAFG/5oAPAFH/9cAPAFI/5oAPAFK/64APAII/4UAPAIM/4UAPAJX/8MAPAJY/4UAPAJZ/5oAPAJf/9cAPAJg/5oAPAJi/8MAPAMd/4UAPAMe/5oAPAMf/4UAPAMg/5oAPAMh/4UAPAMi/5oAPAMj/4UAPAMl/4UAPAMm/5oAPAMn/4UAPAMo/5oAPAMp/4UAPAMq/5oAPAMr/4UAPAMs/5oAPAMt/4UAPAMu/5oAPAMv/4UAPAMw/5oAPAMx/4UAPAMy/5oAPAMz/4UAPAM0/5oAPAM2/5oAPAM4/5oAPAM6/5oAPAM8/5oAPANA/5oAPANC/5oAPANE/5oAPANJ/9cAPANK/5oAPANL/9cAPANM/5oAPANN/9cAPANO/5oAPANP/9cAPANR/9cAPANS/5oAPANT/9cAPANU/5oAPANV/9cAPANW/5oAPANX/9cAPANY/5oAPANZ/9cAPANa/5oAPANb/9cAPANc/5oAPANd/9cAPANe/5oAPANf/9cAPANg/5oAPANi/8MAPANk/8MAPANm/8MAPANo/8MAPANq/8MAPANs/8MAPANu/8MAPQAm/+wAPQAq/+wAPQAy/+wAPQA0/+wAPQCJ/+wAPQCU/+wAPQCV/+wAPQCW/+wAPQCX/+wAPQCY/+wAPQCa/+wAPQDI/+wAPQDK/+wAPQDM/+wAPQDO/+wAPQDe/+wAPQDg/+wAPQDi/+wAPQDk/+wAPQEO/+wAPQEQ/+wAPQES/+wAPQEU/+wAPQFH/+wAPQJf/+wAPQNJ/+wAPQNL/+wAPQNN/+wAPQNP/+wAPQNR/+wAPQNT/+wAPQNV/+wAPQNX/+wAPQNZ/+wAPQNb/+wAPQNd/+wAPQNf/+wAPgAtALgARAAF/+wARAAK/+wARAIH/+wARAIL/+wARQAF/+wARQAK/+wARQBZ/9cARQBa/9cARQBb/9cARQBc/9cARQBd/+wARQC//9cARQE3/9cARQE8/+wARQE+/+wARQFA/+wARQH7/9cARQH9/9cARQIH/+wARQIL/+wARQNw/9cARgAFACkARgAKACkARgIHACkARgILACkASAAF/+wASAAK/+wASABZ/9cASABa/9cASABb/9cASABc/9cASABd/+wASAC//9cASAE3/9cASAE8/+wASAE+/+wASAFA/+wASAH7/9cASAH9/9cASAIH/+wASAIL/+wASANw/9cASQAFAHsASQAKAHsASQIHAHsASQILAHsASwAF/+wASwAK/+wASwIH/+wASwIL/+wATgBG/9cATgBH/9cATgBI/9cATgBS/9cATgBU/9cATgCi/9cATgCp/9cATgCq/9cATgCr/9cATgCs/9cATgCt/9cATgC0/9cATgC1/9cATgC2/9cATgC3/9cATgC4/9cATgC6/9cATgDJ/9cATgDL/9cATgDN/9cATgDP/9cATgDR/9cATgDT/9cATgDV/9cATgDX/9cATgDZ/9cATgDb/9cATgDd/9cATgEP/9cATgER/9cATgET/9cATgEV/9cATgFI/9cATgJg/9cATgM2/9cATgM4/9cATgM6/9cATgM8/9cATgNA/9cATgNC/9cATgNE/9cATgNK/9cATgNM/9cATgNO/9cATgNS/9cATgNU/9cATgNW/9cATgNY/9cATgNa/9cATgNc/9cATgNe/9cATgNg/9cAUAAF/+wAUAAK/+wAUAIH/+wAUAIL/+wAUQAF/+wAUQAK/+wAUQIH/+wAUQIL/+wAUgAF/+wAUgAK/+wAUgBZ/9cAUgBa/9cAUgBb/9cAUgBc/9cAUgBd/+wAUgC//9cAUgE3/9cAUgE8/+wAUgE+/+wAUgFA/+wAUgH7/9cAUgH9/9cAUgIH/+wAUgIL/+wAUgNw/9cAUwAF/+wAUwAK/+wAUwBZ/9cAUwBa/9cAUwBb/9cAUwBc/9cAUwBd/+wAUwC//9cAUwE3/9cAUwE8/+wAUwE+/+wAUwFA/+wAUwH7/9cAUwH9/9cAUwIH/+wAUwIL/+wAUwNw/9cAVQAFAFIAVQAKAFIAVQBE/9cAVQBG/9cAVQBH/9cAVQBI/9cAVQBK/+wAVQBS/9cAVQBU/9cAVQCi/9cAVQCj/9cAVQCk/9cAVQCl/9cAVQCm/9cAVQCn/9cAVQCo/9cAVQCp/9cAVQCq/9cAVQCr/9cAVQCs/9cAVQCt/9cAVQC0/9cAVQC1/9cAVQC2/9cAVQC3/9cAVQC4/9cAVQC6/9cAVQDD/9cAVQDF/9cAVQDH/9cAVQDJ/9cAVQDL/9cAVQDN/9cAVQDP/9cAVQDR/9cAVQDT/9cAVQDV/9cAVQDX/9cAVQDZ/9cAVQDb/9cAVQDd/9cAVQDf/+wAVQDh/+wAVQDj/+wAVQDl/+wAVQEP/9cAVQER/9cAVQET/9cAVQEV/9cAVQFE/9cAVQFG/9cAVQFI/9cAVQIHAFIAVQILAFIAVQJZ/9cAVQJg/9cAVQMe/9cAVQMg/9cAVQMi/9cAVQMm/9cAVQMo/9cAVQMq/9cAVQMs/9cAVQMu/9cAVQMw/9cAVQMy/9cAVQM0/9cAVQM2/9cAVQM4/9cAVQM6/9cAVQM8/9cAVQNA/9cAVQNC/9cAVQNE/9cAVQNK/9cAVQNM/9cAVQNO/9cAVQNS/9cAVQNU/9cAVQNW/9cAVQNY/9cAVQNa/9cAVQNc/9cAVQNe/9cAVQNg/9cAVwAFACkAVwAKACkAVwIHACkAVwILACkAWQAFAFIAWQAKAFIAWQAP/64AWQAR/64AWQAiACkAWQIHAFIAWQII/64AWQILAFIAWQIM/64AWgAFAFIAWgAKAFIAWgAP/64AWgAR/64AWgAiACkAWgIHAFIAWgII/64AWgILAFIAWgIM/64AWwBG/9cAWwBH/9cAWwBI/9cAWwBS/9cAWwBU/9cAWwCi/9cAWwCp/9cAWwCq/9cAWwCr/9cAWwCs/9cAWwCt/9cAWwC0/9cAWwC1/9cAWwC2/9cAWwC3/9cAWwC4/9cAWwC6/9cAWwDJ/9cAWwDL/9cAWwDN/9cAWwDP/9cAWwDR/9cAWwDT/9cAWwDV/9cAWwDX/9cAWwDZ/9cAWwDb/9cAWwDd/9cAWwEP/9cAWwER/9cAWwET/9cAWwEV/9cAWwFI/9cAWwJg/9cAWwM2/9cAWwM4/9cAWwM6/9cAWwM8/9cAWwNA/9cAWwNC/9cAWwNE/9cAWwNK/9cAWwNM/9cAWwNO/9cAWwNS/9cAWwNU/9cAWwNW/9cAWwNY/9cAWwNa/9cAWwNc/9cAWwNe/9cAWwNg/9cAXAAFAFIAXAAKAFIAXAAP/64AXAAR/64AXAAiACkAXAIHAFIAXAII/64AXAILAFIAXAIM/64AXgAtALgAggAF/3EAggAK/3EAggAm/9cAggAq/9cAggAtAQoAggAy/9cAggA0/9cAggA3/3EAggA5/64AggA6/64AggA8/4UAggCJ/9cAggCU/9cAggCV/9cAggCW/9cAggCX/9cAggCY/9cAggCa/9cAggCf/4UAggDI/9cAggDK/9cAggDM/9cAggDO/9cAggDe/9cAggDg/9cAggDi/9cAggDk/9cAggEO/9cAggEQ/9cAggES/9cAggEU/9cAggEk/3EAggEm/3EAggE2/64AggE4/4UAggE6/4UAggFH/9cAggH6/64AggH8/64AggH+/64AggIA/4UAggIH/3EAggIL/3EAggJf/9cAggNJ/9cAggNL/9cAggNN/9cAggNP/9cAggNR/9cAggNT/9cAggNV/9cAggNX/9cAggNZ/9cAggNb/9cAggNd/9cAggNf/9cAggNv/4UAggNx/4UAggNz/4UAggOP/3EAgwAF/3EAgwAK/3EAgwAm/9cAgwAq/9cAgwAtAQoAgwAy/9cAgwA0/9cAgwA3/3EAgwA5/64AgwA6/64AgwA8/4UAgwCJ/9cAgwCU/9cAgwCV/9cAgwCW/9cAgwCX/9cAgwCY/9cAgwCa/9cAgwCf/4UAgwDI/9cAgwDK/9cAgwDM/9cAgwDO/9cAgwDe/9cAgwDg/9cAgwDi/9cAgwDk/9cAgwEO/9cAgwEQ/9cAgwES/9cAgwEU/9cAgwEk/3EAgwEm/3EAgwE2/64AgwE4/4UAgwE6/4UAgwFH/9cAgwH6/64AgwH8/64AgwH+/64AgwIA/4UAgwIH/3EAgwIL/3EAgwJf/9cAgwNJ/9cAgwNL/9cAgwNN/9cAgwNP/9cAgwNR/9cAgwNT/9cAgwNV/9cAgwNX/9cAgwNZ/9cAgwNb/9cAgwNd/9cAgwNf/9cAgwNv/4UAgwNx/4UAgwNz/4UAgwOP/3EAhAAF/3EAhAAK/3EAhAAm/9cAhAAq/9cAhAAtAQoAhAAy/9cAhAA0/9cAhAA3/3EAhAA5/64AhAA6/64AhAA8/4UAhACJ/9cAhACU/9cAhACV/9cAhACW/9cAhACX/9cAhACY/9cAhACa/9cAhACf/4UAhADI/9cAhADK/9cAhADM/9cAhADO/9cAhADe/9cAhADg/9cAhADi/9cAhADk/9cAhAEO/9cAhAEQ/9cAhAES/9cAhAEU/9cAhAEk/3EAhAEm/3EAhAE2/64AhAE4/4UAhAE6/4UAhAFH/9cAhAH6/64AhAH8/64AhAH+/64AhAIA/4UAhAIH/3EAhAIL/3EAhAJf/9cAhANJ/9cAhANL/9cAhANN/9cAhANP/9cAhANR/9cAhANT/9cAhANV/9cAhANX/9cAhANZ/9cAhANb/9cAhANd/9cAhANf/9cAhANv/4UAhANx/4UAhANz/4UAhAOP/3EAhQAF/3EAhQAK/3EAhQAm/9cAhQAq/9cAhQAtAQoAhQAy/9cAhQA0/9cAhQA3/3EAhQA5/64AhQA6/64AhQA8/4UAhQCJ/9cAhQCU/9cAhQCV/9cAhQCW/9cAhQCX/9cAhQCY/9cAhQCa/9cAhQCf/4UAhQDI/9cAhQDK/9cAhQDM/9cAhQDO/9cAhQDe/9cAhQDg/9cAhQDi/9cAhQDk/9cAhQEO/9cAhQEQ/9cAhQES/9cAhQEU/9cAhQEk/3EAhQEm/3EAhQE2/64AhQE4/4UAhQE6/4UAhQFH/9cAhQH6/64AhQH8/64AhQH+/64AhQIA/4UAhQIH/3EAhQIL/3EAhQJf/9cAhQNJ/9cAhQNL/9cAhQNN/9cAhQNP/9cAhQNR/9cAhQNT/9cAhQNV/9cAhQNX/9cAhQNZ/9cAhQNb/9cAhQNd/9cAhQNf/9cAhQNv/4UAhQNx/4UAhQNz/4UAhQOP/3EAhgAF/3EAhgAK/3EAhgAm/9cAhgAq/9cAhgAtAQoAhgAy/9cAhgA0/9cAhgA3/3EAhgA5/64AhgA6/64AhgA8/4UAhgCJ/9cAhgCU/9cAhgCV/9cAhgCW/9cAhgCX/9cAhgCY/9cAhgCa/9cAhgCf/4UAhgDI/9cAhgDK/9cAhgDM/9cAhgDO/9cAhgDe/9cAhgDg/9cAhgDi/9cAhgDk/9cAhgEO/9cAhgEQ/9cAhgES/9cAhgEU/9cAhgEk/3EAhgEm/3EAhgE2/64AhgE4/4UAhgE6/4UAhgFH/9cAhgH6/64AhgH8/64AhgH+/64AhgIA/4UAhgIH/3EAhgIL/3EAhgJf/9cAhgNJ/9cAhgNL/9cAhgNN/9cAhgNP/9cAhgNR/9cAhgNT/9cAhgNV/9cAhgNX/9cAhgNZ/9cAhgNb/9cAhgNd/9cAhgNf/9cAhgNv/4UAhgNx/4UAhgNz/4UAhgOP/3EAhwAF/3EAhwAK/3EAhwAm/9cAhwAq/9cAhwAtAQoAhwAy/9cAhwA0/9cAhwA3/3EAhwA5/64AhwA6/64AhwA8/4UAhwCJ/9cAhwCU/9cAhwCV/9cAhwCW/9cAhwCX/9cAhwCY/9cAhwCa/9cAhwCf/4UAhwDI/9cAhwDK/9cAhwDM/9cAhwDO/9cAhwDe/9cAhwDg/9cAhwDi/9cAhwDk/9cAhwEO/9cAhwEQ/9cAhwES/9cAhwEU/9cAhwEk/3EAhwEm/3EAhwE2/64AhwE4/4UAhwE6/4UAhwFH/9cAhwH6/64AhwH8/64AhwH+/64AhwIA/4UAhwIH/3EAhwIL/3EAhwJf/9cAhwNJ/9cAhwNL/9cAhwNN/9cAhwNP/9cAhwNR/9cAhwNT/9cAhwNV/9cAhwNX/9cAhwNZ/9cAhwNb/9cAhwNd/9cAhwNf/9cAhwNv/4UAhwNx/4UAhwNz/4UAhwOP/3EAiAAtAHsAiQAm/9cAiQAq/9cAiQAy/9cAiQA0/9cAiQCJ/9cAiQCU/9cAiQCV/9cAiQCW/9cAiQCX/9cAiQCY/9cAiQCa/9cAiQDI/9cAiQDK/9cAiQDM/9cAiQDO/9cAiQDe/9cAiQDg/9cAiQDi/9cAiQDk/9cAiQEO/9cAiQEQ/9cAiQES/9cAiQEU/9cAiQFH/9cAiQJf/9cAiQNJ/9cAiQNL/9cAiQNN/9cAiQNP/9cAiQNR/9cAiQNT/9cAiQNV/9cAiQNX/9cAiQNZ/9cAiQNb/9cAiQNd/9cAiQNf/9cAigAtAHsAiwAtAHsAjAAtAHsAjQAtAHsAkgAP/64AkgAR/64AkgAk/9cAkgA3/8MAkgA5/+wAkgA6/+wAkgA7/9cAkgA8/+wAkgA9/+wAkgCC/9cAkgCD/9cAkgCE/9cAkgCF/9cAkgCG/9cAkgCH/9cAkgCf/+wAkgDC/9cAkgDE/9cAkgDG/9cAkgEk/8MAkgEm/8MAkgE2/+wAkgE4/+wAkgE6/+wAkgE7/+wAkgE9/+wAkgE//+wAkgFD/9cAkgGg/+wAkgH6/+wAkgH8/+wAkgH+/+wAkgIA/+wAkgII/64AkgIM/64AkgJY/9cAkgMd/9cAkgMf/9cAkgMh/9cAkgMj/9cAkgMl/9cAkgMn/9cAkgMp/9cAkgMr/9cAkgMt/9cAkgMv/9cAkgMx/9cAkgMz/9cAkgNv/+wAkgNx/+wAkgNz/+wAkgOP/8MAlAAP/64AlAAR/64AlAAk/9cAlAA3/8MAlAA5/+wAlAA6/+wAlAA7/9cAlAA8/+wAlAA9/+wAlACC/9cAlACD/9cAlACE/9cAlACF/9cAlACG/9cAlACH/9cAlACf/+wAlADC/9cAlADE/9cAlADG/9cAlAEk/8MAlAEm/8MAlAE2/+wAlAE4/+wAlAE6/+wAlAE7/+wAlAE9/+wAlAE//+wAlAFD/9cAlAGg/+wAlAH6/+wAlAH8/+wAlAH+/+wAlAIA/+wAlAII/64AlAIM/64AlAJY/9cAlAMd/9cAlAMf/9cAlAMh/9cAlAMj/9cAlAMl/9cAlAMn/9cAlAMp/9cAlAMr/9cAlAMt/9cAlAMv/9cAlAMx/9cAlAMz/9cAlANv/+wAlANx/+wAlANz/+wAlAOP/8MAlQAP/64AlQAR/64AlQAk/9cAlQA3/8MAlQA5/+wAlQA6/+wAlQA7/9cAlQA8/+wAlQA9/+wAlQCC/9cAlQCD/9cAlQCE/9cAlQCF/9cAlQCG/9cAlQCH/9cAlQCf/+wAlQDC/9cAlQDE/9cAlQDG/9cAlQEk/8MAlQEm/8MAlQE2/+wAlQE4/+wAlQE6/+wAlQE7/+wAlQE9/+wAlQE//+wAlQFD/9cAlQGg/+wAlQH6/+wAlQH8/+wAlQH+/+wAlQIA/+wAlQII/64AlQIM/64AlQJY/9cAlQMd/9cAlQMf/9cAlQMh/9cAlQMj/9cAlQMl/9cAlQMn/9cAlQMp/9cAlQMr/9cAlQMt/9cAlQMv/9cAlQMx/9cAlQMz/9cAlQNv/+wAlQNx/+wAlQNz/+wAlQOP/8MAlgAP/64AlgAR/64AlgAk/9cAlgA3/8MAlgA5/+wAlgA6/+wAlgA7/9cAlgA8/+wAlgA9/+wAlgCC/9cAlgCD/9cAlgCE/9cAlgCF/9cAlgCG/9cAlgCH/9cAlgCf/+wAlgDC/9cAlgDE/9cAlgDG/9cAlgEk/8MAlgEm/8MAlgE2/+wAlgE4/+wAlgE6/+wAlgE7/+wAlgE9/+wAlgE//+wAlgFD/9cAlgGg/+wAlgH6/+wAlgH8/+wAlgH+/+wAlgIA/+wAlgII/64AlgIM/64AlgJY/9cAlgMd/9cAlgMf/9cAlgMh/9cAlgMj/9cAlgMl/9cAlgMn/9cAlgMp/9cAlgMr/9cAlgMt/9cAlgMv/9cAlgMx/9cAlgMz/9cAlgNv/+wAlgNx/+wAlgNz/+wAlgOP/8MAlwAP/64AlwAR/64AlwAk/9cAlwA3/8MAlwA5/+wAlwA6/+wAlwA7/9cAlwA8/+wAlwA9/+wAlwCC/9cAlwCD/9cAlwCE/9cAlwCF/9cAlwCG/9cAlwCH/9cAlwCf/+wAlwDC/9cAlwDE/9cAlwDG/9cAlwEk/8MAlwEm/8MAlwE2/+wAlwE4/+wAlwE6/+wAlwE7/+wAlwE9/+wAlwE//+wAlwFD/9cAlwGg/+wAlwH6/+wAlwH8/+wAlwH+/+wAlwIA/+wAlwII/64AlwIM/64AlwJY/9cAlwMd/9cAlwMf/9cAlwMh/9cAlwMj/9cAlwMl/9cAlwMn/9cAlwMp/9cAlwMr/9cAlwMt/9cAlwMv/9cAlwMx/9cAlwMz/9cAlwNv/+wAlwNx/+wAlwNz/+wAlwOP/8MAmAAP/64AmAAR/64AmAAk/9cAmAA3/8MAmAA5/+wAmAA6/+wAmAA7/9cAmAA8/+wAmAA9/+wAmACC/9cAmACD/9cAmACE/9cAmACF/9cAmACG/9cAmACH/9cAmACf/+wAmADC/9cAmADE/9cAmADG/9cAmAEk/8MAmAEm/8MAmAE2/+wAmAE4/+wAmAE6/+wAmAE7/+wAmAE9/+wAmAE//+wAmAFD/9cAmAGg/+wAmAH6/+wAmAH8/+wAmAH+/+wAmAIA/+wAmAII/64AmAIM/64AmAJY/9cAmAMd/9cAmAMf/9cAmAMh/9cAmAMj/9cAmAMl/9cAmAMn/9cAmAMp/9cAmAMr/9cAmAMt/9cAmAMv/9cAmAMx/9cAmAMz/9cAmANv/+wAmANx/+wAmANz/+wAmAOP/8MAmgAP/64AmgAR/64AmgAk/9cAmgA3/8MAmgA5/+wAmgA6/+wAmgA7/9cAmgA8/+wAmgA9/+wAmgCC/9cAmgCD/9cAmgCE/9cAmgCF/9cAmgCG/9cAmgCH/9cAmgCf/+wAmgDC/9cAmgDE/9cAmgDG/9cAmgEk/8MAmgEm/8MAmgE2/+wAmgE4/+wAmgE6/+wAmgE7/+wAmgE9/+wAmgE//+wAmgFD/9cAmgGg/+wAmgH6/+wAmgH8/+wAmgH+/+wAmgIA/+wAmgII/64AmgIM/64AmgJY/9cAmgMd/9cAmgMf/9cAmgMh/9cAmgMj/9cAmgMl/9cAmgMn/9cAmgMp/9cAmgMr/9cAmgMt/9cAmgMv/9cAmgMx/9cAmgMz/9cAmgNv/+wAmgNx/+wAmgNz/+wAmgOP/8MAmwAP/9cAmwAR/9cAmwAk/+wAmwCC/+wAmwCD/+wAmwCE/+wAmwCF/+wAmwCG/+wAmwCH/+wAmwDC/+wAmwDE/+wAmwDG/+wAmwFD/+wAmwII/9cAmwIM/9cAmwJY/+wAmwMd/+wAmwMf/+wAmwMh/+wAmwMj/+wAmwMl/+wAmwMn/+wAmwMp/+wAmwMr/+wAmwMt/+wAmwMv/+wAmwMx/+wAmwMz/+wAnAAP/9cAnAAR/9cAnAAk/+wAnACC/+wAnACD/+wAnACE/+wAnACF/+wAnACG/+wAnACH/+wAnADC/+wAnADE/+wAnADG/+wAnAFD/+wAnAII/9cAnAIM/9cAnAJY/+wAnAMd/+wAnAMf/+wAnAMh/+wAnAMj/+wAnAMl/+wAnAMn/+wAnAMp/+wAnAMr/+wAnAMt/+wAnAMv/+wAnAMx/+wAnAMz/+wAnQAP/9cAnQAR/9cAnQAk/+wAnQCC/+wAnQCD/+wAnQCE/+wAnQCF/+wAnQCG/+wAnQCH/+wAnQDC/+wAnQDE/+wAnQDG/+wAnQFD/+wAnQII/9cAnQIM/9cAnQJY/+wAnQMd/+wAnQMf/+wAnQMh/+wAnQMj/+wAnQMl/+wAnQMn/+wAnQMp/+wAnQMr/+wAnQMt/+wAnQMv/+wAnQMx/+wAnQMz/+wAngAP/9cAngAR/9cAngAk/+wAngCC/+wAngCD/+wAngCE/+wAngCF/+wAngCG/+wAngCH/+wAngDC/+wAngDE/+wAngDG/+wAngFD/+wAngII/9cAngIM/9cAngJY/+wAngMd/+wAngMf/+wAngMh/+wAngMj/+wAngMl/+wAngMn/+wAngMp/+wAngMr/+wAngMt/+wAngMv/+wAngMx/+wAngMz/+wAnwAP/4UAnwAR/4UAnwAiACkAnwAk/4UAnwAm/9cAnwAq/9cAnwAy/9cAnwA0/9cAnwBE/5oAnwBG/5oAnwBH/5oAnwBI/5oAnwBK/9cAnwBQ/8MAnwBR/8MAnwBS/5oAnwBT/8MAnwBU/5oAnwBV/8MAnwBW/64AnwBY/8MAnwBd/9cAnwCC/4UAnwCD/4UAnwCE/4UAnwCF/4UAnwCG/4UAnwCH/4UAnwCJ/9cAnwCU/9cAnwCV/9cAnwCW/9cAnwCX/9cAnwCY/9cAnwCa/9cAnwCi/5oAnwCj/5oAnwCk/5oAnwCl/5oAnwCm/5oAnwCn/5oAnwCo/5oAnwCp/5oAnwCq/5oAnwCr/5oAnwCs/5oAnwCt/5oAnwC0/5oAnwC1/5oAnwC2/5oAnwC3/5oAnwC4/5oAnwC6/5oAnwC7/8MAnwC8/8MAnwC9/8MAnwC+/8MAnwDC/4UAnwDD/5oAnwDE/4UAnwDF/5oAnwDG/4UAnwDH/5oAnwDI/9cAnwDJ/5oAnwDK/9cAnwDL/5oAnwDM/9cAnwDN/5oAnwDO/9cAnwDP/5oAnwDR/5oAnwDT/5oAnwDV/5oAnwDX/5oAnwDZ/5oAnwDb/5oAnwDd/5oAnwDe/9cAnwDf/9cAnwDg/9cAnwDh/9cAnwDi/9cAnwDj/9cAnwDk/9cAnwDl/9cAnwD6/8MAnwEG/8MAnwEI/8MAnwEN/8MAnwEO/9cAnwEP/5oAnwEQ/9cAnwER/5oAnwES/9cAnwET/5oAnwEU/9cAnwEV/5oAnwEX/8MAnwEZ/8MAnwEd/64AnwEh/64AnwEr/8MAnwEt/8MAnwEv/8MAnwEx/8MAnwEz/8MAnwE1/8MAnwE8/9cAnwE+/9cAnwFA/9cAnwFD/4UAnwFE/5oAnwFG/5oAnwFH/9cAnwFI/5oAnwFK/64AnwII/4UAnwIM/4UAnwJX/8MAnwJY/4UAnwJZ/5oAnwJf/9cAnwJg/5oAnwJi/8MAnwMd/4UAnwMe/5oAnwMf/4UAnwMg/5oAnwMh/4UAnwMi/5oAnwMj/4UAnwMl/4UAnwMm/5oAnwMn/4UAnwMo/5oAnwMp/4UAnwMq/5oAnwMr/4UAnwMs/5oAnwMt/4UAnwMu/5oAnwMv/4UAnwMw/5oAnwMx/4UAnwMy/5oAnwMz/4UAnwM0/5oAnwM2/5oAnwM4/5oAnwM6/5oAnwM8/5oAnwNA/5oAnwNC/5oAnwNE/5oAnwNJ/9cAnwNK/5oAnwNL/9cAnwNM/5oAnwNN/9cAnwNO/5oAnwNP/9cAnwNR/9cAnwNS/5oAnwNT/9cAnwNU/5oAnwNV/9cAnwNW/5oAnwNX/9cAnwNY/5oAnwNZ/9cAnwNa/5oAnwNb/9cAnwNc/5oAnwNd/9cAnwNe/5oAnwNf/9cAnwNg/5oAnwNi/8MAnwNk/8MAnwNm/8MAnwNo/8MAnwNq/8MAnwNs/8MAnwNu/8MAoAAP/vYAoAAR/vYAoAAk/5oAoAA7/9cAoAA9/+wAoACC/5oAoACD/5oAoACE/5oAoACF/5oAoACG/5oAoACH/5oAoADC/5oAoADE/5oAoADG/5oAoAE7/+wAoAE9/+wAoAE//+wAoAFD/5oAoAII/vYAoAIM/vYAoAJY/5oAoAMd/5oAoAMf/5oAoAMh/5oAoAMj/5oAoAMl/5oAoAMn/5oAoAMp/5oAoAMr/5oAoAMt/5oAoAMv/5oAoAMx/5oAoAMz/5oAogAF/+wAogAK/+wAogIH/+wAogIL/+wAowAF/+wAowAK/+wAowIH/+wAowIL/+wApAAF/+wApAAK/+wApAIH/+wApAIL/+wApQAF/+wApQAK/+wApQIH/+wApQIL/+wApgAF/+wApgAK/+wApgIH/+wApgIL/+wApwAF/+wApwAK/+wApwIH/+wApwIL/+wAqgAF/+wAqgAK/+wAqgBZ/9cAqgBa/9cAqgBb/9cAqgBc/9cAqgBd/+wAqgC//9cAqgE3/9cAqgE8/+wAqgE+/+wAqgFA/+wAqgH7/9cAqgH9/9cAqgIH/+wAqgIL/+wAqgNw/9cAqwAF/+wAqwAK/+wAqwBZ/9cAqwBa/9cAqwBb/9cAqwBc/9cAqwBd/+wAqwC//9cAqwE3/9cAqwE8/+wAqwE+/+wAqwFA/+wAqwH7/9cAqwH9/9cAqwIH/+wAqwIL/+wAqwNw/9cArAAF/+wArAAK/+wArABZ/9cArABa/9cArABb/9cArABc/9cArABd/+wArAC//9cArAE3/9cArAE8/+wArAE+/+wArAFA/+wArAH7/9cArAH9/9cArAIH/+wArAIL/+wArANw/9cArQAF/+wArQAK/+wArQBZ/9cArQBa/9cArQBb/9cArQBc/9cArQBd/+wArQC//9cArQE3/9cArQE8/+wArQE+/+wArQFA/+wArQH7/9cArQH9/9cArQIH/+wArQIL/+wArQNw/9cAsgAF/+wAsgAK/+wAsgBZ/9cAsgBa/9cAsgBb/9cAsgBc/9cAsgBd/+wAsgC//9cAsgE3/9cAsgE8/+wAsgE+/+wAsgFA/+wAsgH7/9cAsgH9/9cAsgIH/+wAsgIL/+wAsgNw/9cAtAAF/+wAtAAK/+wAtABZ/9cAtABa/9cAtABb/9cAtABc/9cAtABd/+wAtAC//9cAtAE3/9cAtAE8/+wAtAE+/+wAtAFA/+wAtAH7/9cAtAH9/9cAtAIH/+wAtAIL/+wAtANw/9cAtQAF/+wAtQAK/+wAtQBZ/9cAtQBa/9cAtQBb/9cAtQBc/9cAtQBd/+wAtQC//9cAtQE3/9cAtQE8/+wAtQE+/+wAtQFA/+wAtQH7/9cAtQH9/9cAtQIH/+wAtQIL/+wAtQNw/9cAtgAF/+wAtgAK/+wAtgBZ/9cAtgBa/9cAtgBb/9cAtgBc/9cAtgBd/+wAtgC//9cAtgE3/9cAtgE8/+wAtgE+/+wAtgFA/+wAtgH7/9cAtgH9/9cAtgIH/+wAtgIL/+wAtgNw/9cAuAAF/9cAuAAK/9cAuAIH/9cAuAIL/9cAugAF/+wAugAK/+wAugBZ/9cAugBa/9cAugBb/9cAugBc/9cAugBd/+wAugC//9cAugE3/9cAugE8/+wAugE+/+wAugFA/+wAugH7/9cAugH9/9cAugIH/+wAugIL/+wAugNw/9cAvwAFAFIAvwAKAFIAvwAP/64AvwAR/64AvwAiACkAvwIHAFIAvwII/64AvwILAFIAvwIM/64AwAAF/+wAwAAK/+wAwABZ/9cAwABa/9cAwABb/9cAwABc/9cAwABd/+wAwAC//9cAwAE3/9cAwAE8/+wAwAE+/+wAwAFA/+wAwAH7/9cAwAH9/9cAwAIH/+wAwAIL/+wAwANw/9cAwQAFAFIAwQAKAFIAwQAP/64AwQAR/64AwQAiACkAwQIHAFIAwQII/64AwQILAFIAwQIM/64AwgAF/3EAwgAK/3EAwgAm/9cAwgAq/9cAwgAtAQoAwgAy/9cAwgA0/9cAwgA3/3EAwgA5/64AwgA6/64AwgA8/4UAwgCJ/9cAwgCU/9cAwgCV/9cAwgCW/9cAwgCX/9cAwgCY/9cAwgCa/9cAwgCf/4UAwgDI/9cAwgDK/9cAwgDM/9cAwgDO/9cAwgDe/9cAwgDg/9cAwgDi/9cAwgDk/9cAwgEO/9cAwgEQ/9cAwgES/9cAwgEU/9cAwgEk/3EAwgEm/3EAwgE2/64AwgE4/4UAwgE6/4UAwgFH/9cAwgH6/64AwgH8/64AwgH+/64AwgIA/4UAwgIH/3EAwgIL/3EAwgJf/9cAwgNJ/9cAwgNL/9cAwgNN/9cAwgNP/9cAwgNR/9cAwgNT/9cAwgNV/9cAwgNX/9cAwgNZ/9cAwgNb/9cAwgNd/9cAwgNf/9cAwgNv/4UAwgNx/4UAwgNz/4UAwgOP/3EAwwAF/+wAwwAK/+wAwwIH/+wAwwIL/+wAxAAF/3EAxAAK/3EAxAAm/9cAxAAq/9cAxAAtAQoAxAAy/9cAxAA0/9cAxAA3/3EAxAA5/64AxAA6/64AxAA8/4UAxACJ/9cAxACU/9cAxACV/9cAxACW/9cAxACX/9cAxACY/9cAxACa/9cAxACf/4UAxADI/9cAxADK/9cAxADM/9cAxADO/9cAxADe/9cAxADg/9cAxADi/9cAxADk/9cAxAEO/9cAxAEQ/9cAxAES/9cAxAEU/9cAxAEk/3EAxAEm/3EAxAE2/64AxAE4/4UAxAE6/4UAxAFH/9cAxAH6/64AxAH8/64AxAH+/64AxAIA/4UAxAIH/3EAxAIL/3EAxAJf/9cAxANJ/9cAxANL/9cAxANN/9cAxANP/9cAxANR/9cAxANT/9cAxANV/9cAxANX/9cAxANZ/9cAxANb/9cAxANd/9cAxANf/9cAxANv/4UAxANx/4UAxANz/4UAxAOP/3EAxQAF/+wAxQAK/+wAxQIH/+wAxQIL/+wAxgAF/3EAxgAK/3EAxgAm/9cAxgAq/9cAxgAtAQoAxgAy/9cAxgA0/9cAxgA3/3EAxgA5/64AxgA6/64AxgA8/4UAxgCJ/9cAxgCU/9cAxgCV/9cAxgCW/9cAxgCX/9cAxgCY/9cAxgCa/9cAxgCf/4UAxgDI/9cAxgDK/9cAxgDM/9cAxgDO/9cAxgDe/9cAxgDg/9cAxgDi/9cAxgDk/9cAxgEO/9cAxgEQ/9cAxgES/9cAxgEU/9cAxgEk/3EAxgEm/3EAxgE2/64AxgE4/4UAxgE6/4UAxgFH/9cAxgH6/64AxgH8/64AxgH+/64AxgIA/4UAxgIH/3EAxgIL/3EAxgJf/9cAxgNJ/9cAxgNL/9cAxgNN/9cAxgNP/9cAxgNR/9cAxgNT/9cAxgNV/9cAxgNX/9cAxgNZ/9cAxgNb/9cAxgNd/9cAxgNf/9cAxgNv/4UAxgNx/4UAxgNz/4UAxgOP/3EAxwAF/+wAxwAK/+wAxwIH/+wAxwIL/+wAyAAm/9cAyAAq/9cAyAAy/9cAyAA0/9cAyACJ/9cAyACU/9cAyACV/9cAyACW/9cAyACX/9cAyACY/9cAyACa/9cAyADI/9cAyADK/9cAyADM/9cAyADO/9cAyADe/9cAyADg/9cAyADi/9cAyADk/9cAyAEO/9cAyAEQ/9cAyAES/9cAyAEU/9cAyAFH/9cAyAJf/9cAyANJ/9cAyANL/9cAyANN/9cAyANP/9cAyANR/9cAyANT/9cAyANV/9cAyANX/9cAyANZ/9cAyANb/9cAyANd/9cAyANf/9cAygAm/9cAygAq/9cAygAy/9cAygA0/9cAygCJ/9cAygCU/9cAygCV/9cAygCW/9cAygCX/9cAygCY/9cAygCa/9cAygDI/9cAygDK/9cAygDM/9cAygDO/9cAygDe/9cAygDg/9cAygDi/9cAygDk/9cAygEO/9cAygEQ/9cAygES/9cAygEU/9cAygFH/9cAygJf/9cAygNJ/9cAygNL/9cAygNN/9cAygNP/9cAygNR/9cAygNT/9cAygNV/9cAygNX/9cAygNZ/9cAygNb/9cAygNd/9cAygNf/9cAzAAm/9cAzAAq/9cAzAAy/9cAzAA0/9cAzACJ/9cAzACU/9cAzACV/9cAzACW/9cAzACX/9cAzACY/9cAzACa/9cAzADI/9cAzADK/9cAzADM/9cAzADO/9cAzADe/9cAzADg/9cAzADi/9cAzADk/9cAzAEO/9cAzAEQ/9cAzAES/9cAzAEU/9cAzAFH/9cAzAJf/9cAzANJ/9cAzANL/9cAzANN/9cAzANP/9cAzANR/9cAzANT/9cAzANV/9cAzANX/9cAzANZ/9cAzANb/9cAzANd/9cAzANf/9cAzgAm/9cAzgAq/9cAzgAy/9cAzgA0/9cAzgCJ/9cAzgCU/9cAzgCV/9cAzgCW/9cAzgCX/9cAzgCY/9cAzgCa/9cAzgDI/9cAzgDK/9cAzgDM/9cAzgDO/9cAzgDe/9cAzgDg/9cAzgDi/9cAzgDk/9cAzgEO/9cAzgEQ/9cAzgES/9cAzgEU/9cAzgFH/9cAzgJf/9cAzgNJ/9cAzgNL/9cAzgNN/9cAzgNP/9cAzgNR/9cAzgNT/9cAzgNV/9cAzgNX/9cAzgNZ/9cAzgNb/9cAzgNd/9cAzgNf/9cA0AAP/64A0AAR/64A0AAk/9cA0AA3/8MA0AA5/+wA0AA6/+wA0AA7/9cA0AA8/+wA0AA9/+wA0ACC/9cA0ACD/9cA0ACE/9cA0ACF/9cA0ACG/9cA0ACH/9cA0ACf/+wA0ADC/9cA0ADE/9cA0ADG/9cA0AEk/8MA0AEm/8MA0AE2/+wA0AE4/+wA0AE6/+wA0AE7/+wA0AE9/+wA0AE//+wA0AFD/9cA0AGg/+wA0AH6/+wA0AH8/+wA0AH+/+wA0AIA/+wA0AII/64A0AIM/64A0AJY/9cA0AMd/9cA0AMf/9cA0AMh/9cA0AMj/9cA0AMl/9cA0AMn/9cA0AMp/9cA0AMr/9cA0AMt/9cA0AMv/9cA0AMx/9cA0AMz/9cA0ANv/+wA0ANx/+wA0ANz/+wA0AOP/8MA0QAFAFIA0QAKAFIA0QAMAI8A0QAiAKQA0QBAAI8A0QBFAD0A0QBLAD0A0QBOAD0A0QBPAD0A0QBgAI8A0QDnAD0A0QDpAHsA0QIHAFIA0QILAFIA0gAP/64A0gAR/64A0gAk/9cA0gA3/8MA0gA5/+wA0gA6/+wA0gA7/9cA0gA8/+wA0gA9/+wA0gCC/9cA0gCD/9cA0gCE/9cA0gCF/9cA0gCG/9cA0gCH/9cA0gCf/+wA0gDC/9cA0gDE/9cA0gDG/9cA0gEk/8MA0gEm/8MA0gE2/+wA0gE4/+wA0gE6/+wA0gE7/+wA0gE9/+wA0gE//+wA0gFD/9cA0gGg/+wA0gH6/+wA0gH8/+wA0gH+/+wA0gIA/+wA0gII/64A0gIM/64A0gJY/9cA0gMd/9cA0gMf/9cA0gMh/9cA0gMj/9cA0gMl/9cA0gMn/9cA0gMp/9cA0gMr/9cA0gMt/9cA0gMv/9cA0gMx/9cA0gMz/9cA0gNv/+wA0gNx/+wA0gNz/+wA0gOP/8MA1AAtAHsA1QAF/+wA1QAK/+wA1QBZ/9cA1QBa/9cA1QBb/9cA1QBc/9cA1QBd/+wA1QC//9cA1QE3/9cA1QE8/+wA1QE+/+wA1QFA/+wA1QH7/9cA1QH9/9cA1QIH/+wA1QIL/+wA1QNw/9cA1gAtAHsA1wAF/+wA1wAK/+wA1wBZ/9cA1wBa/9cA1wBb/9cA1wBc/9cA1wBd/+wA1wC//9cA1wE3/9cA1wE8/+wA1wE+/+wA1wFA/+wA1wH7/9cA1wH9/9cA1wIH/+wA1wIL/+wA1wNw/9cA2AAtAHsA2QAF/+wA2QAK/+wA2QBZ/9cA2QBa/9cA2QBb/9cA2QBc/9cA2QBd/+wA2QC//9cA2QE3/9cA2QE8/+wA2QE+/+wA2QFA/+wA2QH7/9cA2QH9/9cA2QIH/+wA2QIL/+wA2QNw/9cA2gAtAHsA2wAF/+wA2wAK/+wA2wBZ/9cA2wBa/9cA2wBb/9cA2wBc/9cA2wBd/+wA2wC//9cA2wE3/9cA2wE8/+wA2wE+/+wA2wFA/+wA2wH7/9cA2wH9/9cA2wIH/+wA2wIL/+wA2wNw/9cA3AAtAHsA3QAF/+wA3QAK/+wA3QBZ/9cA3QBa/9cA3QBb/9cA3QBc/9cA3QBd/+wA3QC//9cA3QE3/9cA3QE8/+wA3QE+/+wA3QFA/+wA3QH7/9cA3QH9/9cA3QIH/+wA3QIL/+wA3QNw/9cA5wAF/+wA5wAK/+wA5wIH/+wA5wIL/+wA+AAm/9cA+AAq/9cA+AAy/9cA+AA0/9cA+ACJ/9cA+ACU/9cA+ACV/9cA+ACW/9cA+ACX/9cA+ACY/9cA+ACa/9cA+ADI/9cA+ADK/9cA+ADM/9cA+ADO/9cA+ADe/9cA+ADg/9cA+ADi/9cA+ADk/9cA+AEO/9cA+AEQ/9cA+AES/9cA+AEU/9cA+AFH/9cA+AJf/9cA+ANJ/9cA+ANL/9cA+ANN/9cA+ANP/9cA+ANR/9cA+ANT/9cA+ANV/9cA+ANX/9cA+ANZ/9cA+ANb/9cA+ANd/9cA+ANf/9cA+QBG/9cA+QBH/9cA+QBI/9cA+QBS/9cA+QBU/9cA+QCi/9cA+QCp/9cA+QCq/9cA+QCr/9cA+QCs/9cA+QCt/9cA+QC0/9cA+QC1/9cA+QC2/9cA+QC3/9cA+QC4/9cA+QC6/9cA+QDJ/9cA+QDL/9cA+QDN/9cA+QDP/9cA+QDR/9cA+QDT/9cA+QDV/9cA+QDX/9cA+QDZ/9cA+QDb/9cA+QDd/9cA+QEP/9cA+QER/9cA+QET/9cA+QEV/9cA+QFI/9cA+QJg/9cA+QM2/9cA+QM4/9cA+QM6/9cA+QM8/9cA+QNA/9cA+QNC/9cA+QNE/9cA+QNK/9cA+QNM/9cA+QNO/9cA+QNS/9cA+QNU/9cA+QNW/9cA+QNY/9cA+QNa/9cA+QNc/9cA+QNe/9cA+QNg/9cA+gBG/9cA+gBH/9cA+gBI/9cA+gBS/9cA+gBU/9cA+gCi/9cA+gCp/9cA+gCq/9cA+gCr/9cA+gCs/9cA+gCt/9cA+gC0/9cA+gC1/9cA+gC2/9cA+gC3/9cA+gC4/9cA+gC6/9cA+gDJ/9cA+gDL/9cA+gDN/9cA+gDP/9cA+gDR/9cA+gDT/9cA+gDV/9cA+gDX/9cA+gDZ/9cA+gDb/9cA+gDd/9cA+gEP/9cA+gER/9cA+gET/9cA+gEV/9cA+gFI/9cA+gJg/9cA+gM2/9cA+gM4/9cA+gM6/9cA+gM8/9cA+gNA/9cA+gNC/9cA+gNE/9cA+gNK/9cA+gNM/9cA+gNO/9cA+gNS/9cA+gNU/9cA+gNW/9cA+gNY/9cA+gNa/9cA+gNc/9cA+gNe/9cA+gNg/9cA+wAF/1wA+wAK/1wA+wAm/9cA+wAq/9cA+wAy/9cA+wA0/9cA+wA3/9cA+wA4/+wA+wA5/9cA+wA6/9cA+wA8/8MA+wCJ/9cA+wCU/9cA+wCV/9cA+wCW/9cA+wCX/9cA+wCY/9cA+wCa/9cA+wCb/+wA+wCc/+wA+wCd/+wA+wCe/+wA+wCf/8MA+wDI/9cA+wDK/9cA+wDM/9cA+wDO/9cA+wDe/9cA+wDg/9cA+wDi/9cA+wDk/9cA+wEO/9cA+wEQ/9cA+wES/9cA+wEU/9cA+wEk/9cA+wEm/9cA+wEq/+wA+wEs/+wA+wEu/+wA+wEw/+wA+wEy/+wA+wE0/+wA+wE2/9cA+wE4/8MA+wE6/8MA+wFH/9cA+wH6/9cA+wH8/9cA+wH+/9cA+wIA/8MA+wIH/1wA+wIL/1wA+wJf/9cA+wJh/+wA+wNJ/9cA+wNL/9cA+wNN/9cA+wNP/9cA+wNR/9cA+wNT/9cA+wNV/9cA+wNX/9cA+wNZ/9cA+wNb/9cA+wNd/9cA+wNf/9cA+wNh/+wA+wNj/+wA+wNl/+wA+wNn/+wA+wNp/+wA+wNr/+wA+wNt/+wA+wNv/8MA+wNx/8MA+wNz/8MA+wOP/9cA/QAF/1wA/QAK/1wA/QAm/9cA/QAq/9cA/QAy/9cA/QA0/9cA/QA3/9cA/QA4/+wA/QA5/9cA/QA6/9cA/QA8/8MA/QCJ/9cA/QCU/9cA/QCV/9cA/QCW/9cA/QCX/9cA/QCY/9cA/QCa/9cA/QCb/+wA/QCc/+wA/QCd/+wA/QCe/+wA/QCf/8MA/QDI/9cA/QDK/9cA/QDM/9cA/QDO/9cA/QDe/9cA/QDg/9cA/QDi/9cA/QDk/9cA/QEO/9cA/QEQ/9cA/QES/9cA/QEU/9cA/QEk/9cA/QEm/9cA/QEq/+wA/QEs/+wA/QEu/+wA/QEw/+wA/QEy/+wA/QE0/+wA/QE2/9cA/QE4/8MA/QE6/8MA/QFH/9cA/QH6/9cA/QH8/9cA/QH+/9cA/QIA/8MA/QIH/1wA/QIL/1wA/QJf/9cA/QJh/+wA/QNJ/9cA/QNL/9cA/QNN/9cA/QNP/9cA/QNR/9cA/QNT/9cA/QNV/9cA/QNX/9cA/QNZ/9cA/QNb/9cA/QNd/9cA/QNf/9cA/QNh/+wA/QNj/+wA/QNl/+wA/QNn/+wA/QNp/+wA/QNr/+wA/QNt/+wA/QNv/8MA/QNx/8MA/QNz/8MA/QOP/9cA/wAF/1wA/wAK/1wA/wAm/9cA/wAq/9cA/wAy/9cA/wA0/9cA/wA3/9cA/wA4/+wA/wA5/9cA/wA6/9cA/wA8/8MA/wCJ/9cA/wCU/9cA/wCV/9cA/wCW/9cA/wCX/9cA/wCY/9cA/wCa/9cA/wCb/+wA/wCc/+wA/wCd/+wA/wCe/+wA/wCf/8MA/wDI/9cA/wDK/9cA/wDM/9cA/wDO/9cA/wDe/9cA/wDg/9cA/wDi/9cA/wDk/9cA/wEO/9cA/wEQ/9cA/wES/9cA/wEU/9cA/wEk/9cA/wEm/9cA/wEq/+wA/wEs/+wA/wEu/+wA/wEw/+wA/wEy/+wA/wE0/+wA/wE2/9cA/wE4/8MA/wE6/8MA/wFH/9cA/wH6/9cA/wH8/9cA/wH+/9cA/wIA/8MA/wIH/1wA/wIL/1wA/wJf/9cA/wJh/+wA/wNJ/9cA/wNL/9cA/wNN/9cA/wNP/9cA/wNR/9cA/wNT/9cA/wNV/9cA/wNX/9cA/wNZ/9cA/wNb/9cA/wNd/9cA/wNf/9cA/wNh/+wA/wNj/+wA/wNl/+wA/wNn/+wA/wNp/+wA/wNr/+wA/wNt/+wA/wNv/8MA/wNx/8MA/wNz/8MA/wOP/9cBAAAFAFIBAAAKAFIBAAAMAI8BAAAiAI8BAABAAI8BAABFAD0BAABLAD0BAABOAD0BAABPAD0BAABgAI8BAADnAD0BAADpAI8BAAIHAFIBAAILAFIBAQAF/1wBAQAK/1wBAQAm/9cBAQAq/9cBAQAy/9cBAQA0/9cBAQA3/9cBAQA4/+wBAQA5/9cBAQA6/9cBAQA8/8MBAQCJ/9cBAQCU/9cBAQCV/9cBAQCW/9cBAQCX/9cBAQCY/9cBAQCa/9cBAQCb/+wBAQCc/+wBAQCd/+wBAQCe/+wBAQCf/8MBAQDI/9cBAQDK/9cBAQDM/9cBAQDO/9cBAQDe/9cBAQDg/9cBAQDi/9cBAQDk/9cBAQEO/9cBAQEQ/9cBAQES/9cBAQEU/9cBAQEk/9cBAQEm/9cBAQEq/+wBAQEs/+wBAQEu/+wBAQEw/+wBAQEy/+wBAQE0/+wBAQE2/9cBAQE4/8MBAQE6/8MBAQFH/9cBAQH6/9cBAQH8/9cBAQH+/9cBAQIA/8MBAQIH/1wBAQIL/1wBAQJf/9cBAQJh/+wBAQNJ/9cBAQNL/9cBAQNN/9cBAQNP/9cBAQNR/9cBAQNT/9cBAQNV/9cBAQNX/9cBAQNZ/9cBAQNb/9cBAQNd/9cBAQNf/9cBAQNh/+wBAQNj/+wBAQNl/+wBAQNn/+wBAQNp/+wBAQNr/+wBAQNt/+wBAQNv/8MBAQNx/8MBAQNz/8MBAQOP/9cBAwAF/1wBAwAK/1wBAwAm/9cBAwAq/9cBAwAy/9cBAwA0/9cBAwA3/9cBAwA4/+wBAwA5/9cBAwA6/9cBAwA8/8MBAwCJ/9cBAwCU/9cBAwCV/9cBAwCW/9cBAwCX/9cBAwCY/9cBAwCa/9cBAwCb/+wBAwCc/+wBAwCd/+wBAwCe/+wBAwCf/8MBAwDI/9cBAwDK/9cBAwDM/9cBAwDO/9cBAwDe/9cBAwDg/9cBAwDi/9cBAwDk/9cBAwEO/9cBAwEQ/9cBAwES/9cBAwEU/9cBAwEk/9cBAwEm/9cBAwEq/+wBAwEs/+wBAwEu/+wBAwEw/+wBAwEy/+wBAwE0/+wBAwE2/9cBAwE4/8MBAwE6/8MBAwFH/9cBAwH6/9cBAwH8/9cBAwH+/9cBAwIA/8MBAwIH/1wBAwIL/1wBAwJf/9cBAwJh/+wBAwNJ/9cBAwNL/9cBAwNN/9cBAwNP/9cBAwNR/9cBAwNT/9cBAwNV/9cBAwNX/9cBAwNZ/9cBAwNb/9cBAwNd/9cBAwNf/9cBAwNh/+wBAwNj/+wBAwNl/+wBAwNn/+wBAwNp/+wBAwNr/+wBAwNt/+wBAwNv/8MBAwNx/8MBAwNz/8MBAwOP/9cBCAAF/+wBCAAK/+wBCAIH/+wBCAIL/+wBDgAP/64BDgAR/64BDgAk/9cBDgA3/8MBDgA5/+wBDgA6/+wBDgA7/9cBDgA8/+wBDgA9/+wBDgCC/9cBDgCD/9cBDgCE/9cBDgCF/9cBDgCG/9cBDgCH/9cBDgCf/+wBDgDC/9cBDgDE/9cBDgDG/9cBDgEk/8MBDgEm/8MBDgE2/+wBDgE4/+wBDgE6/+wBDgE7/+wBDgE9/+wBDgE//+wBDgFD/9cBDgGg/+wBDgH6/+wBDgH8/+wBDgH+/+wBDgIA/+wBDgII/64BDgIM/64BDgJY/9cBDgMd/9cBDgMf/9cBDgMh/9cBDgMj/9cBDgMl/9cBDgMn/9cBDgMp/9cBDgMr/9cBDgMt/9cBDgMv/9cBDgMx/9cBDgMz/9cBDgNv/+wBDgNx/+wBDgNz/+wBDgOP/8MBEAAP/64BEAAR/64BEAAk/9cBEAA3/8MBEAA5/+wBEAA6/+wBEAA7/9cBEAA8/+wBEAA9/+wBEACC/9cBEACD/9cBEACE/9cBEACF/9cBEACG/9cBEACH/9cBEACf/+wBEADC/9cBEADE/9cBEADG/9cBEAEk/8MBEAEm/8MBEAE2/+wBEAE4/+wBEAE6/+wBEAE7/+wBEAE9/+wBEAE//+wBEAFD/9cBEAGg/+wBEAH6/+wBEAH8/+wBEAH+/+wBEAIA/+wBEAII/64BEAIM/64BEAJY/9cBEAMd/9cBEAMf/9cBEAMh/9cBEAMj/9cBEAMl/9cBEAMn/9cBEAMp/9cBEAMr/9cBEAMt/9cBEAMv/9cBEAMx/9cBEAMz/9cBEANv/+wBEANx/+wBEANz/+wBEAOP/8MBEgAP/64BEgAR/64BEgAk/9cBEgA3/8MBEgA5/+wBEgA6/+wBEgA7/9cBEgA8/+wBEgA9/+wBEgCC/9cBEgCD/9cBEgCE/9cBEgCF/9cBEgCG/9cBEgCH/9cBEgCf/+wBEgDC/9cBEgDE/9cBEgDG/9cBEgEk/8MBEgEm/8MBEgE2/+wBEgE4/+wBEgE6/+wBEgE7/+wBEgE9/+wBEgE//+wBEgFD/9cBEgGg/+wBEgH6/+wBEgH8/+wBEgH+/+wBEgIA/+wBEgII/64BEgIM/64BEgJY/9cBEgMd/9cBEgMf/9cBEgMh/9cBEgMj/9cBEgMl/9cBEgMn/9cBEgMp/9cBEgMr/9cBEgMt/9cBEgMv/9cBEgMx/9cBEgMz/9cBEgNv/+wBEgNx/+wBEgNz/+wBEgOP/8MBFAAtAHsBFwAFAFIBFwAKAFIBFwBE/9cBFwBG/9cBFwBH/9cBFwBI/9cBFwBK/+wBFwBS/9cBFwBU/9cBFwCi/9cBFwCj/9cBFwCk/9cBFwCl/9cBFwCm/9cBFwCn/9cBFwCo/9cBFwCp/9cBFwCq/9cBFwCr/9cBFwCs/9cBFwCt/9cBFwC0/9cBFwC1/9cBFwC2/9cBFwC3/9cBFwC4/9cBFwC6/9cBFwDD/9cBFwDF/9cBFwDH/9cBFwDJ/9cBFwDL/9cBFwDN/9cBFwDP/9cBFwDR/9cBFwDT/9cBFwDV/9cBFwDX/9cBFwDZ/9cBFwDb/9cBFwDd/9cBFwDf/+wBFwDh/+wBFwDj/+wBFwDl/+wBFwEP/9cBFwER/9cBFwET/9cBFwEV/9cBFwFE/9cBFwFG/9cBFwFI/9cBFwIHAFIBFwILAFIBFwJZ/9cBFwJg/9cBFwMe/9cBFwMg/9cBFwMi/9cBFwMm/9cBFwMo/9cBFwMq/9cBFwMs/9cBFwMu/9cBFwMw/9cBFwMy/9cBFwM0/9cBFwM2/9cBFwM4/9cBFwM6/9cBFwM8/9cBFwNA/9cBFwNC/9cBFwNE/9cBFwNK/9cBFwNM/9cBFwNO/9cBFwNS/9cBFwNU/9cBFwNW/9cBFwNY/9cBFwNa/9cBFwNc/9cBFwNe/9cBFwNg/9cBGQAFAFIBGQAKAFIBGQBE/9cBGQBG/9cBGQBH/9cBGQBI/9cBGQBK/+wBGQBS/9cBGQBU/9cBGQCi/9cBGQCj/9cBGQCk/9cBGQCl/9cBGQCm/9cBGQCn/9cBGQCo/9cBGQCp/9cBGQCq/9cBGQCr/9cBGQCs/9cBGQCt/9cBGQC0/9cBGQC1/9cBGQC2/9cBGQC3/9cBGQC4/9cBGQC6/9cBGQDD/9cBGQDF/9cBGQDH/9cBGQDJ/9cBGQDL/9cBGQDN/9cBGQDP/9cBGQDR/9cBGQDT/9cBGQDV/9cBGQDX/9cBGQDZ/9cBGQDb/9cBGQDd/9cBGQDf/+wBGQDh/+wBGQDj/+wBGQDl/+wBGQEP/9cBGQER/9cBGQET/9cBGQEV/9cBGQFE/9cBGQFG/9cBGQFI/9cBGQIHAFIBGQILAFIBGQJZ/9cBGQJg/9cBGQMe/9cBGQMg/9cBGQMi/9cBGQMm/9cBGQMo/9cBGQMq/9cBGQMs/9cBGQMu/9cBGQMw/9cBGQMy/9cBGQM0/9cBGQM2/9cBGQM4/9cBGQM6/9cBGQM8/9cBGQNA/9cBGQNC/9cBGQNE/9cBGQNK/9cBGQNM/9cBGQNO/9cBGQNS/9cBGQNU/9cBGQNW/9cBGQNY/9cBGQNa/9cBGQNc/9cBGQNe/9cBGQNg/9cBGwAFAFIBGwAKAFIBGwBE/9cBGwBG/9cBGwBH/9cBGwBI/9cBGwBK/+wBGwBS/9cBGwBU/9cBGwCi/9cBGwCj/9cBGwCk/9cBGwCl/9cBGwCm/9cBGwCn/9cBGwCo/9cBGwCp/9cBGwCq/9cBGwCr/9cBGwCs/9cBGwCt/9cBGwC0/9cBGwC1/9cBGwC2/9cBGwC3/9cBGwC4/9cBGwC6/9cBGwDD/9cBGwDF/9cBGwDH/9cBGwDJ/9cBGwDL/9cBGwDN/9cBGwDP/9cBGwDR/9cBGwDT/9cBGwDV/9cBGwDX/9cBGwDZ/9cBGwDb/9cBGwDd/9cBGwDf/+wBGwDh/+wBGwDj/+wBGwDl/+wBGwEP/9cBGwER/9cBGwET/9cBGwEV/9cBGwFE/9cBGwFG/9cBGwFI/9cBGwIHAFIBGwILAFIBGwJZ/9cBGwJg/9cBGwMe/9cBGwMg/9cBGwMi/9cBGwMm/9cBGwMo/9cBGwMq/9cBGwMs/9cBGwMu/9cBGwMw/9cBGwMy/9cBGwM0/9cBGwM2/9cBGwM4/9cBGwM6/9cBGwM8/9cBGwNA/9cBGwNC/9cBGwNE/9cBGwNK/9cBGwNM/9cBGwNO/9cBGwNS/9cBGwNU/9cBGwNW/9cBGwNY/9cBGwNa/9cBGwNc/9cBGwNe/9cBGwNg/9cBJAAP/4UBJAAQ/64BJAAR/4UBJAAiACkBJAAk/3EBJAAm/9cBJAAq/9cBJAAy/9cBJAA0/9cBJAA3ACkBJABE/1wBJABG/3EBJABH/3EBJABI/3EBJABK/3EBJABQ/5oBJABR/5oBJABS/3EBJABT/5oBJABU/3EBJABV/5oBJABW/4UBJABY/5oBJABZ/9cBJABa/9cBJABb/9cBJABc/9cBJABd/64BJACC/3EBJACD/3EBJACE/3EBJACF/3EBJACG/3EBJACH/3EBJACJ/9cBJACU/9cBJACV/9cBJACW/9cBJACX/9cBJACY/9cBJACa/9cBJACi/3EBJACj/1wBJACk/1wBJACl/1wBJACm/1wBJACn/1wBJACo/1wBJACp/3EBJACq/3EBJACr/3EBJACs/3EBJACt/3EBJAC0/3EBJAC1/3EBJAC2/3EBJAC3/3EBJAC4/3EBJAC6/3EBJAC7/5oBJAC8/5oBJAC9/5oBJAC+/5oBJAC//9cBJADC/3EBJADD/1wBJADE/3EBJADF/1wBJADG/3EBJADH/1wBJADI/9cBJADJ/3EBJADK/9cBJADL/3EBJADM/9cBJADN/3EBJADO/9cBJADP/3EBJADR/3EBJADT/3EBJADV/3EBJADX/3EBJADZ/3EBJADb/3EBJADd/3EBJADe/9cBJADf/3EBJADg/9cBJADh/3EBJADi/9cBJADj/3EBJADk/9cBJADl/3EBJAD6/5oBJAEG/5oBJAEI/5oBJAEN/5oBJAEO/9cBJAEP/3EBJAEQ/9cBJAER/3EBJAES/9cBJAET/3EBJAEU/9cBJAEV/3EBJAEX/5oBJAEZ/5oBJAEd/4UBJAEh/4UBJAEkACkBJAEmACkBJAEr/5oBJAEt/5oBJAEv/5oBJAEx/5oBJAEz/5oBJAE1/5oBJAE3/9cBJAE8/64BJAE+/64BJAFA/64BJAFD/3EBJAFE/1wBJAFG/1wBJAFH/9cBJAFI/3EBJAFK/4UBJAH7/9cBJAH9/9cBJAIC/64BJAID/64BJAIE/64BJAII/4UBJAIM/4UBJAJX/5oBJAJY/3EBJAJZ/1wBJAJf/9cBJAJg/3EBJAJi/5oBJAMd/3EBJAMe/1wBJAMf/3EBJAMg/1wBJAMh/3EBJAMi/1wBJAMj/3EBJAMl/3EBJAMm/1wBJAMn/3EBJAMo/1wBJAMp/3EBJAMq/1wBJAMr/3EBJAMs/1wBJAMt/3EBJAMu/1wBJAMv/3EBJAMw/1wBJAMx/3EBJAMy/1wBJAMz/3EBJAM0/1wBJAM2/3EBJAM4/3EBJAM6/3EBJAM8/3EBJANA/3EBJANC/3EBJANE/3EBJANJ/9cBJANK/3EBJANL/9cBJANM/3EBJANN/9cBJANO/3EBJANP/9cBJANR/9cBJANS/3EBJANT/9cBJANU/3EBJANV/9cBJANW/3EBJANX/9cBJANY/3EBJANZ/9cBJANa/3EBJANb/9cBJANc/3EBJANd/9cBJANe/3EBJANf/9cBJANg/3EBJANi/5oBJANk/5oBJANm/5oBJANo/5oBJANq/5oBJANs/5oBJANu/5oBJANw/9cBJAOPACkBJQAFACkBJQAKACkBJQIHACkBJQILACkBJgAP/4UBJgAQ/64BJgAR/4UBJgAiACkBJgAk/3EBJgAm/9cBJgAq/9cBJgAy/9cBJgA0/9cBJgA3ACkBJgBE/1wBJgBG/3EBJgBH/3EBJgBI/3EBJgBK/3EBJgBQ/5oBJgBR/5oBJgBS/3EBJgBT/5oBJgBU/3EBJgBV/5oBJgBW/4UBJgBY/5oBJgBZ/9cBJgBa/9cBJgBb/9cBJgBc/9cBJgBd/64BJgCC/3EBJgCD/3EBJgCE/3EBJgCF/3EBJgCG/3EBJgCH/3EBJgCJ/9cBJgCU/9cBJgCV/9cBJgCW/9cBJgCX/9cBJgCY/9cBJgCa/9cBJgCi/3EBJgCj/1wBJgCk/1wBJgCl/1wBJgCm/1wBJgCn/1wBJgCo/1wBJgCp/3EBJgCq/3EBJgCr/3EBJgCs/3EBJgCt/3EBJgC0/3EBJgC1/3EBJgC2/3EBJgC3/3EBJgC4/3EBJgC6/3EBJgC7/5oBJgC8/5oBJgC9/5oBJgC+/5oBJgC//9cBJgDC/3EBJgDD/1wBJgDE/3EBJgDF/1wBJgDG/3EBJgDH/1wBJgDI/9cBJgDJ/3EBJgDK/9cBJgDL/3EBJgDM/9cBJgDN/3EBJgDO/9cBJgDP/3EBJgDR/3EBJgDT/3EBJgDV/3EBJgDX/3EBJgDZ/3EBJgDb/3EBJgDd/3EBJgDe/9cBJgDf/3EBJgDg/9cBJgDh/3EBJgDi/9cBJgDj/3EBJgDk/9cBJgDl/3EBJgD6/5oBJgEG/5oBJgEI/5oBJgEN/5oBJgEO/9cBJgEP/3EBJgEQ/9cBJgER/3EBJgES/9cBJgET/3EBJgEU/9cBJgEV/3EBJgEX/5oBJgEZ/5oBJgEd/4UBJgEh/4UBJgEkACkBJgEmACkBJgEr/5oBJgEt/5oBJgEv/5oBJgEx/5oBJgEz/5oBJgE1/5oBJgE3/9cBJgE8/64BJgE+/64BJgFA/64BJgFD/3EBJgFE/1wBJgFG/1wBJgFH/9cBJgFI/3EBJgFK/4UBJgH7/9cBJgH9/9cBJgIC/64BJgID/64BJgIE/64BJgII/4UBJgIM/4UBJgJX/5oBJgJY/3EBJgJZ/1wBJgJf/9cBJgJg/3EBJgJi/5oBJgMd/3EBJgMe/1wBJgMf/3EBJgMg/1wBJgMh/3EBJgMi/1wBJgMj/3EBJgMl/3EBJgMm/1wBJgMn/3EBJgMo/1wBJgMp/3EBJgMq/1wBJgMr/3EBJgMs/1wBJgMt/3EBJgMu/1wBJgMv/3EBJgMw/1wBJgMx/3EBJgMy/1wBJgMz/3EBJgM0/1wBJgM2/3EBJgM4/3EBJgM6/3EBJgM8/3EBJgNA/3EBJgNC/3EBJgNE/3EBJgNJ/9cBJgNK/3EBJgNL/9cBJgNM/3EBJgNN/9cBJgNO/3EBJgNP/9cBJgNR/9cBJgNS/3EBJgNT/9cBJgNU/3EBJgNV/9cBJgNW/3EBJgNX/9cBJgNY/3EBJgNZ/9cBJgNa/3EBJgNb/9cBJgNc/3EBJgNd/9cBJgNe/3EBJgNf/9cBJgNg/3EBJgNi/5oBJgNk/5oBJgNm/5oBJgNo/5oBJgNq/5oBJgNs/5oBJgNu/5oBJgNw/9cBJgOPACkBJwAFACkBJwAKACkBJwIHACkBJwILACkBKAAP/4UBKAAQ/64BKAAR/4UBKAAiACkBKAAk/3EBKAAm/9cBKAAq/9cBKAAy/9cBKAA0/9cBKAA3ACkBKABE/1wBKABG/3EBKABH/3EBKABI/3EBKABK/3EBKABQ/5oBKABR/5oBKABS/3EBKABT/5oBKABU/3EBKABV/5oBKABW/4UBKABY/5oBKABZ/9cBKABa/9cBKABb/9cBKABc/9cBKABd/64BKACC/3EBKACD/3EBKACE/3EBKACF/3EBKACG/3EBKACH/3EBKACJ/9cBKACU/9cBKACV/9cBKACW/9cBKACX/9cBKACY/9cBKACa/9cBKACi/3EBKACj/1wBKACk/1wBKACl/1wBKACm/1wBKACn/1wBKACo/1wBKACp/3EBKACq/3EBKACr/3EBKACs/3EBKACt/3EBKAC0/3EBKAC1/3EBKAC2/3EBKAC3/3EBKAC4/3EBKAC6/3EBKAC7/5oBKAC8/5oBKAC9/5oBKAC+/5oBKAC//9cBKADC/3EBKADD/1wBKADE/3EBKADF/1wBKADG/3EBKADH/1wBKADI/9cBKADJ/3EBKADK/9cBKADL/3EBKADM/9cBKADN/3EBKADO/9cBKADP/3EBKADR/3EBKADT/3EBKADV/3EBKADX/3EBKADZ/3EBKADb/3EBKADd/3EBKADe/9cBKADf/3EBKADg/9cBKADh/3EBKADi/9cBKADj/3EBKADk/9cBKADl/3EBKAD6/5oBKAEG/5oBKAEI/5oBKAEN/5oBKAEO/9cBKAEP/3EBKAEQ/9cBKAER/3EBKAES/9cBKAET/3EBKAEU/9cBKAEV/3EBKAEX/5oBKAEZ/5oBKAEd/4UBKAEh/4UBKAEkACkBKAEmACkBKAEr/5oBKAEt/5oBKAEv/5oBKAEx/5oBKAEz/5oBKAE1/5oBKAE3/9cBKAE8/64BKAE+/64BKAFA/64BKAFD/3EBKAFE/1wBKAFG/1wBKAFH/9cBKAFI/3EBKAFK/4UBKAH7/9cBKAH9/9cBKAIC/64BKAID/64BKAIE/64BKAII/4UBKAIM/4UBKAJX/5oBKAJY/3EBKAJZ/1wBKAJf/9cBKAJg/3EBKAJi/5oBKAMd/3EBKAMe/1wBKAMf/3EBKAMg/1wBKAMh/3EBKAMi/1wBKAMj/3EBKAMl/3EBKAMm/1wBKAMn/3EBKAMo/1wBKAMp/3EBKAMq/1wBKAMr/3EBKAMs/1wBKAMt/3EBKAMu/1wBKAMv/3EBKAMw/1wBKAMx/3EBKAMy/1wBKAMz/3EBKAM0/1wBKAM2/3EBKAM4/3EBKAM6/3EBKAM8/3EBKANA/3EBKANC/3EBKANE/3EBKANJ/9cBKANK/3EBKANL/9cBKANM/3EBKANN/9cBKANO/3EBKANP/9cBKANR/9cBKANS/3EBKANT/9cBKANU/3EBKANV/9cBKANW/3EBKANX/9cBKANY/3EBKANZ/9cBKANa/3EBKANb/9cBKANc/3EBKANd/9cBKANe/3EBKANf/9cBKANg/3EBKANi/5oBKANk/5oBKANm/5oBKANo/5oBKANq/5oBKANs/5oBKANu/5oBKANw/9cBKAOPACkBKgAP/9cBKgAR/9cBKgAk/+wBKgCC/+wBKgCD/+wBKgCE/+wBKgCF/+wBKgCG/+wBKgCH/+wBKgDC/+wBKgDE/+wBKgDG/+wBKgFD/+wBKgII/9cBKgIM/9cBKgJY/+wBKgMd/+wBKgMf/+wBKgMh/+wBKgMj/+wBKgMl/+wBKgMn/+wBKgMp/+wBKgMr/+wBKgMt/+wBKgMv/+wBKgMx/+wBKgMz/+wBLAAP/9cBLAAR/9cBLAAk/+wBLACC/+wBLACD/+wBLACE/+wBLACF/+wBLACG/+wBLACH/+wBLADC/+wBLADE/+wBLADG/+wBLAFD/+wBLAII/9cBLAIM/9cBLAJY/+wBLAMd/+wBLAMf/+wBLAMh/+wBLAMj/+wBLAMl/+wBLAMn/+wBLAMp/+wBLAMr/+wBLAMt/+wBLAMv/+wBLAMx/+wBLAMz/+wBLgAP/9cBLgAR/9cBLgAk/+wBLgCC/+wBLgCD/+wBLgCE/+wBLgCF/+wBLgCG/+wBLgCH/+wBLgDC/+wBLgDE/+wBLgDG/+wBLgFD/+wBLgII/9cBLgIM/9cBLgJY/+wBLgMd/+wBLgMf/+wBLgMh/+wBLgMj/+wBLgMl/+wBLgMn/+wBLgMp/+wBLgMr/+wBLgMt/+wBLgMv/+wBLgMx/+wBLgMz/+wBMAAP/9cBMAAR/9cBMAAk/+wBMACC/+wBMACD/+wBMACE/+wBMACF/+wBMACG/+wBMACH/+wBMADC/+wBMADE/+wBMADG/+wBMAFD/+wBMAII/9cBMAIM/9cBMAJY/+wBMAMd/+wBMAMf/+wBMAMh/+wBMAMj/+wBMAMl/+wBMAMn/+wBMAMp/+wBMAMr/+wBMAMt/+wBMAMv/+wBMAMx/+wBMAMz/+wBMgAP/9cBMgAR/9cBMgAk/+wBMgCC/+wBMgCD/+wBMgCE/+wBMgCF/+wBMgCG/+wBMgCH/+wBMgDC/+wBMgDE/+wBMgDG/+wBMgFD/+wBMgII/9cBMgIM/9cBMgJY/+wBMgMd/+wBMgMf/+wBMgMh/+wBMgMj/+wBMgMl/+wBMgMn/+wBMgMp/+wBMgMr/+wBMgMt/+wBMgMv/+wBMgMx/+wBMgMz/+wBNAAP/9cBNAAR/9cBNAAk/+wBNACC/+wBNACD/+wBNACE/+wBNACF/+wBNACG/+wBNACH/+wBNADC/+wBNADE/+wBNADG/+wBNAFD/+wBNAII/9cBNAIM/9cBNAJY/+wBNAMd/+wBNAMf/+wBNAMh/+wBNAMj/+wBNAMl/+wBNAMn/+wBNAMp/+wBNAMr/+wBNAMt/+wBNAMv/+wBNAMx/+wBNAMz/+wBNgAP/5oBNgAR/5oBNgAiACkBNgAk/64BNgAm/+wBNgAq/+wBNgAy/+wBNgA0/+wBNgBE/9cBNgBG/9cBNgBH/9cBNgBI/9cBNgBK/+wBNgBQ/+wBNgBR/+wBNgBS/9cBNgBT/+wBNgBU/9cBNgBV/+wBNgBW/+wBNgBY/+wBNgCC/64BNgCD/64BNgCE/64BNgCF/64BNgCG/64BNgCH/64BNgCJ/+wBNgCU/+wBNgCV/+wBNgCW/+wBNgCX/+wBNgCY/+wBNgCa/+wBNgCi/9cBNgCj/9cBNgCk/9cBNgCl/9cBNgCm/9cBNgCn/9cBNgCo/9cBNgCp/9cBNgCq/9cBNgCr/9cBNgCs/9cBNgCt/9cBNgC0/9cBNgC1/9cBNgC2/9cBNgC3/9cBNgC4/9cBNgC6/9cBNgC7/+wBNgC8/+wBNgC9/+wBNgC+/+wBNgDC/64BNgDD/9cBNgDE/64BNgDF/9cBNgDG/64BNgDH/9cBNgDI/+wBNgDJ/9cBNgDK/+wBNgDL/9cBNgDM/+wBNgDN/9cBNgDO/+wBNgDP/9cBNgDR/9cBNgDT/9cBNgDV/9cBNgDX/9cBNgDZ/9cBNgDb/9cBNgDd/9cBNgDe/+wBNgDf/+wBNgDg/+wBNgDh/+wBNgDi/+wBNgDj/+wBNgDk/+wBNgDl/+wBNgD6/+wBNgEG/+wBNgEI/+wBNgEN/+wBNgEO/+wBNgEP/9cBNgEQ/+wBNgER/9cBNgES/+wBNgET/9cBNgEU/+wBNgEV/9cBNgEX/+wBNgEZ/+wBNgEd/+wBNgEh/+wBNgEr/+wBNgEt/+wBNgEv/+wBNgEx/+wBNgEz/+wBNgE1/+wBNgFD/64BNgFE/9cBNgFG/9cBNgFH/+wBNgFI/9cBNgFK/+wBNgII/5oBNgIM/5oBNgJX/+wBNgJY/64BNgJZ/9cBNgJf/+wBNgJg/9cBNgJi/+wBNgMd/64BNgMe/9cBNgMf/64BNgMg/9cBNgMh/64BNgMi/9cBNgMj/64BNgMl/64BNgMm/9cBNgMn/64BNgMo/9cBNgMp/64BNgMq/9cBNgMr/64BNgMs/9cBNgMt/64BNgMu/9cBNgMv/64BNgMw/9cBNgMx/64BNgMy/9cBNgMz/64BNgM0/9cBNgM2/9cBNgM4/9cBNgM6/9cBNgM8/9cBNgNA/9cBNgNC/9cBNgNE/9cBNgNJ/+wBNgNK/9cBNgNL/+wBNgNM/9cBNgNN/+wBNgNO/9cBNgNP/+wBNgNR/+wBNgNS/9cBNgNT/+wBNgNU/9cBNgNV/+wBNgNW/9cBNgNX/+wBNgNY/9cBNgNZ/+wBNgNa/9cBNgNb/+wBNgNc/9cBNgNd/+wBNgNe/9cBNgNf/+wBNgNg/9cBNgNi/+wBNgNk/+wBNgNm/+wBNgNo/+wBNgNq/+wBNgNs/+wBNgNu/+wBNwAFAFIBNwAKAFIBNwAP/64BNwAR/64BNwAiACkBNwIHAFIBNwII/64BNwILAFIBNwIM/64BOAAP/4UBOAAR/4UBOAAiACkBOAAk/4UBOAAm/9cBOAAq/9cBOAAy/9cBOAA0/9cBOABE/5oBOABG/5oBOABH/5oBOABI/5oBOABK/9cBOABQ/8MBOABR/8MBOABS/5oBOABT/8MBOABU/5oBOABV/8MBOABW/64BOABY/8MBOABd/9cBOACC/4UBOACD/4UBOACE/4UBOACF/4UBOACG/4UBOACH/4UBOACJ/9cBOACU/9cBOACV/9cBOACW/9cBOACX/9cBOACY/9cBOACa/9cBOACi/5oBOACj/5oBOACk/5oBOACl/5oBOACm/5oBOACn/5oBOACo/5oBOACp/5oBOACq/5oBOACr/5oBOACs/5oBOACt/5oBOAC0/5oBOAC1/5oBOAC2/5oBOAC3/5oBOAC4/5oBOAC6/5oBOAC7/8MBOAC8/8MBOAC9/8MBOAC+/8MBOADC/4UBOADD/5oBOADE/4UBOADF/5oBOADG/4UBOADH/5oBOADI/9cBOADJ/5oBOADK/9cBOADL/5oBOADM/9cBOADN/5oBOADO/9cBOADP/5oBOADR/5oBOADT/5oBOADV/5oBOADX/5oBOADZ/5oBOADb/5oBOADd/5oBOADe/9cBOADf/9cBOADg/9cBOADh/9cBOADi/9cBOADj/9cBOADk/9cBOADl/9cBOAD6/8MBOAEG/8MBOAEI/8MBOAEN/8MBOAEO/9cBOAEP/5oBOAEQ/9cBOAER/5oBOAES/9cBOAET/5oBOAEU/9cBOAEV/5oBOAEX/8MBOAEZ/8MBOAEd/64BOAEh/64BOAEr/8MBOAEt/8MBOAEv/8MBOAEx/8MBOAEz/8MBOAE1/8MBOAE8/9cBOAE+/9cBOAFA/9cBOAFD/4UBOAFE/5oBOAFG/5oBOAFH/9cBOAFI/5oBOAFK/64BOAII/4UBOAIM/4UBOAJX/8MBOAJY/4UBOAJZ/5oBOAJf/9cBOAJg/5oBOAJi/8MBOAMd/4UBOAMe/5oBOAMf/4UBOAMg/5oBOAMh/4UBOAMi/5oBOAMj/4UBOAMl/4UBOAMm/5oBOAMn/4UBOAMo/5oBOAMp/4UBOAMq/5oBOAMr/4UBOAMs/5oBOAMt/4UBOAMu/5oBOAMv/4UBOAMw/5oBOAMx/4UBOAMy/5oBOAMz/4UBOAM0/5oBOAM2/5oBOAM4/5oBOAM6/5oBOAM8/5oBOANA/5oBOANC/5oBOANE/5oBOANJ/9cBOANK/5oBOANL/9cBOANM/5oBOANN/9cBOANO/5oBOANP/9cBOANR/9cBOANS/5oBOANT/9cBOANU/5oBOANV/9cBOANW/5oBOANX/9cBOANY/5oBOANZ/9cBOANa/5oBOANb/9cBOANc/5oBOANd/9cBOANe/5oBOANf/9cBOANg/5oBOANi/8MBOANk/8MBOANm/8MBOANo/8MBOANq/8MBOANs/8MBOANu/8MBOQAFAFIBOQAKAFIBOQAP/64BOQAR/64BOQAiACkBOQIHAFIBOQII/64BOQILAFIBOQIM/64BOgAP/4UBOgAR/4UBOgAiACkBOgAk/4UBOgAm/9cBOgAq/9cBOgAy/9cBOgA0/9cBOgBE/5oBOgBG/5oBOgBH/5oBOgBI/5oBOgBK/9cBOgBQ/8MBOgBR/8MBOgBS/5oBOgBT/8MBOgBU/5oBOgBV/8MBOgBW/64BOgBY/8MBOgBd/9cBOgCC/4UBOgCD/4UBOgCE/4UBOgCF/4UBOgCG/4UBOgCH/4UBOgCJ/9cBOgCU/9cBOgCV/9cBOgCW/9cBOgCX/9cBOgCY/9cBOgCa/9cBOgCi/5oBOgCj/5oBOgCk/5oBOgCl/5oBOgCm/5oBOgCn/5oBOgCo/5oBOgCp/5oBOgCq/5oBOgCr/5oBOgCs/5oBOgCt/5oBOgC0/5oBOgC1/5oBOgC2/5oBOgC3/5oBOgC4/5oBOgC6/5oBOgC7/8MBOgC8/8MBOgC9/8MBOgC+/8MBOgDC/4UBOgDD/5oBOgDE/4UBOgDF/5oBOgDG/4UBOgDH/5oBOgDI/9cBOgDJ/5oBOgDK/9cBOgDL/5oBOgDM/9cBOgDN/5oBOgDO/9cBOgDP/5oBOgDR/5oBOgDT/5oBOgDV/5oBOgDX/5oBOgDZ/5oBOgDb/5oBOgDd/5oBOgDe/9cBOgDf/9cBOgDg/9cBOgDh/9cBOgDi/9cBOgDj/9cBOgDk/9cBOgDl/9cBOgD6/8MBOgEG/8MBOgEI/8MBOgEN/8MBOgEO/9cBOgEP/5oBOgEQ/9cBOgER/5oBOgES/9cBOgET/5oBOgEU/9cBOgEV/5oBOgEX/8MBOgEZ/8MBOgEd/64BOgEh/64BOgEr/8MBOgEt/8MBOgEv/8MBOgEx/8MBOgEz/8MBOgE1/8MBOgE8/9cBOgE+/9cBOgFA/9cBOgFD/4UBOgFE/5oBOgFG/5oBOgFH/9cBOgFI/5oBOgFK/64BOgII/4UBOgIM/4UBOgJX/8MBOgJY/4UBOgJZ/5oBOgJf/9cBOgJg/5oBOgJi/8MBOgMd/4UBOgMe/5oBOgMf/4UBOgMg/5oBOgMh/4UBOgMi/5oBOgMj/4UBOgMl/4UBOgMm/5oBOgMn/4UBOgMo/5oBOgMp/4UBOgMq/5oBOgMr/4UBOgMs/5oBOgMt/4UBOgMu/5oBOgMv/4UBOgMw/5oBOgMx/4UBOgMy/5oBOgMz/4UBOgM0/5oBOgM2/5oBOgM4/5oBOgM6/5oBOgM8/5oBOgNA/5oBOgNC/5oBOgNE/5oBOgNJ/9cBOgNK/5oBOgNL/9cBOgNM/5oBOgNN/9cBOgNO/5oBOgNP/9cBOgNR/9cBOgNS/5oBOgNT/9cBOgNU/5oBOgNV/9cBOgNW/5oBOgNX/9cBOgNY/5oBOgNZ/9cBOgNa/5oBOgNb/9cBOgNc/5oBOgNd/9cBOgNe/5oBOgNf/9cBOgNg/5oBOgNi/8MBOgNk/8MBOgNm/8MBOgNo/8MBOgNq/8MBOgNs/8MBOgNu/8MBOwAm/+wBOwAq/+wBOwAy/+wBOwA0/+wBOwCJ/+wBOwCU/+wBOwCV/+wBOwCW/+wBOwCX/+wBOwCY/+wBOwCa/+wBOwDI/+wBOwDK/+wBOwDM/+wBOwDO/+wBOwDe/+wBOwDg/+wBOwDi/+wBOwDk/+wBOwEO/+wBOwEQ/+wBOwES/+wBOwEU/+wBOwFH/+wBOwJf/+wBOwNJ/+wBOwNL/+wBOwNN/+wBOwNP/+wBOwNR/+wBOwNT/+wBOwNV/+wBOwNX/+wBOwNZ/+wBOwNb/+wBOwNd/+wBOwNf/+wBPQAm/+wBPQAq/+wBPQAy/+wBPQA0/+wBPQCJ/+wBPQCU/+wBPQCV/+wBPQCW/+wBPQCX/+wBPQCY/+wBPQCa/+wBPQDI/+wBPQDK/+wBPQDM/+wBPQDO/+wBPQDe/+wBPQDg/+wBPQDi/+wBPQDk/+wBPQEO/+wBPQEQ/+wBPQES/+wBPQEU/+wBPQFH/+wBPQJf/+wBPQNJ/+wBPQNL/+wBPQNN/+wBPQNP/+wBPQNR/+wBPQNT/+wBPQNV/+wBPQNX/+wBPQNZ/+wBPQNb/+wBPQNd/+wBPQNf/+wBPwAm/+wBPwAq/+wBPwAy/+wBPwA0/+wBPwCJ/+wBPwCU/+wBPwCV/+wBPwCW/+wBPwCX/+wBPwCY/+wBPwCa/+wBPwDI/+wBPwDK/+wBPwDM/+wBPwDO/+wBPwDe/+wBPwDg/+wBPwDi/+wBPwDk/+wBPwEO/+wBPwEQ/+wBPwES/+wBPwEU/+wBPwFH/+wBPwJf/+wBPwNJ/+wBPwNL/+wBPwNN/+wBPwNP/+wBPwNR/+wBPwNT/+wBPwNV/+wBPwNX/+wBPwNZ/+wBPwNb/+wBPwNd/+wBPwNf/+wBQwAF/3EBQwAK/3EBQwAm/9cBQwAq/9cBQwAtAQoBQwAy/9cBQwA0/9cBQwA3/3EBQwA5/64BQwA6/64BQwA8/4UBQwCJ/9cBQwCU/9cBQwCV/9cBQwCW/9cBQwCX/9cBQwCY/9cBQwCa/9cBQwCf/4UBQwDI/9cBQwDK/9cBQwDM/9cBQwDO/9cBQwDe/9cBQwDg/9cBQwDi/9cBQwDk/9cBQwEO/9cBQwEQ/9cBQwES/9cBQwEU/9cBQwEk/3EBQwEm/3EBQwE2/64BQwE4/4UBQwE6/4UBQwFH/9cBQwH6/64BQwH8/64BQwH+/64BQwIA/4UBQwIH/3EBQwIL/3EBQwJf/9cBQwNJ/9cBQwNL/9cBQwNN/9cBQwNP/9cBQwNR/9cBQwNT/9cBQwNV/9cBQwNX/9cBQwNZ/9cBQwNb/9cBQwNd/9cBQwNf/9cBQwNv/4UBQwNx/4UBQwNz/4UBQwOP/3EBRAAF/+wBRAAK/+wBRAIH/+wBRAIL/+wBRQAtAHsBRwAP/64BRwAR/64BRwAk/9cBRwA3/8MBRwA5/+wBRwA6/+wBRwA7/9cBRwA8/+wBRwA9/+wBRwCC/9cBRwCD/9cBRwCE/9cBRwCF/9cBRwCG/9cBRwCH/9cBRwCf/+wBRwDC/9cBRwDE/9cBRwDG/9cBRwEk/8MBRwEm/8MBRwE2/+wBRwE4/+wBRwE6/+wBRwE7/+wBRwE9/+wBRwE//+wBRwFD/9cBRwGg/+wBRwH6/+wBRwH8/+wBRwH+/+wBRwIA/+wBRwII/64BRwIM/64BRwJY/9cBRwMd/9cBRwMf/9cBRwMh/9cBRwMj/9cBRwMl/9cBRwMn/9cBRwMp/9cBRwMr/9cBRwMt/9cBRwMv/9cBRwMx/9cBRwMz/9cBRwNv/+wBRwNx/+wBRwNz/+wBRwOP/8MBVgAF/3EBVgAK/3EBVgFm/9cBVgFt/9cBVgFx/3EBVgFy/4UBVgFz/9cBVgF1/64BVgF4/4UBVgIH/3EBVgIL/3EBVgJU/4UBWwAP/64BWwAR/64BWwFW/9cBWwFf/9cBWwFi/9cBWwFk/+wBWwFp/9cBWwFw/+wBWwFx/8MBWwFy/+wBWwF0/9cBWwF1/+wBWwF4/+wBWwGI/+wBWwII/64BWwIM/64BWwJU/+wBXAAP/4UBXAAR/4UBXAFW/4UBXAFf/4UBXAFi/4UBXAFm/9cBXAFp/4UBXAFt/9cBXAFz/8MBXAF2/+wBXAF5/5oBXAF6/64BXAF7/8MBXAF8/8MBXAF9/8MBXAF+/5oBXAGB/8MBXAGC/64BXAGE/8MBXAGG/8MBXAGH/8MBXAGJ/8MBXAGM/5oBXAGO/5oBXAGP/5oBXAGQ/5oBXAGS/8MBXAGT/5oBXAGV/8MBXAGW/8MBXAGY/8MBXAGZ/5oBXAGa/8MBXAGb/8MBXAII/4UBXAIM/4UBXAIh/+wBXQFx/9cBXQFy/+wBXQF4/+wBXQJU/+wBXgAF/9cBXgAK/9cBXgIH/9cBXgIL/9cBXwAF/3EBXwAK/3EBXwFm/9cBXwFt/9cBXwFx/3EBXwFy/4UBXwFz/9cBXwF1/64BXwF4/4UBXwIH/3EBXwIL/3EBXwJU/4UBYAAP/64BYAAR/64BYAFW/9cBYAFf/9cBYAFi/9cBYAFp/9cBYAF0/9cBYAII/64BYAIM/64BYQAP/4UBYQAQ/64BYQAR/4UBYQFW/1wBYQFf/1wBYQFi/1wBYQFm/8MBYQFp/1wBYQFt/8MBYQFz/5oBYQF2/8MBYQF5/3EBYQF6/5oBYQF7/5oBYQF8/64BYQF9/5oBYQF+/3EBYQGA/9cBYQGB/8MBYQGC/5oBYQGE/5oBYQGG/64BYQGH/5oBYQGJ/5oBYQGK/9cBYQGM/3EBYQGO/5oBYQGP/3EBYQGQ/3EBYQGS/5oBYQGT/3EBYQGU/9cBYQGV/5oBYQGW/5oBYQGY/5oBYQGZ/3EBYQGa/5oBYQGb/5oBYQIC/64BYQID/64BYQIE/64BYQII/4UBYQIM/4UBYQIh/8MBYQJT/9cBYgAF/3EBYgAK/3EBYgFm/9cBYgFt/9cBYgFx/3EBYgFy/4UBYgFz/9cBYgF1/64BYgF4/4UBYgIH/3EBYgIL/3EBYgJU/4UBZAFm/+wBZAFt/+wBZAFz/8MBZgAP/64BZgAR/64BZgFW/9cBZgFf/9cBZgFi/9cBZgFk/+wBZgFp/9cBZgFw/+wBZgFx/8MBZgFy/+wBZgF0/9cBZgF1/+wBZgF4/+wBZgGI/+wBZgII/64BZgIM/64BZgJU/+wBaAFm/9cBaAFt/9cBaAFz/8MBaAGN/+wBaAGR/+wBaQAF/3EBaQAK/3EBaQFm/9cBaQFt/9cBaQFx/3EBaQFy/4UBaQFz/9cBaQF1/64BaQF4/4UBaQIH/3EBaQIL/3EBaQJU/4UBbQAP/64BbQAR/64BbQFW/9cBbQFf/9cBbQFi/9cBbQFk/+wBbQFp/9cBbQFw/+wBbQFx/8MBbQFy/+wBbQF0/9cBbQF1/+wBbQF4/+wBbQGI/+wBbQII/64BbQIM/64BbQJU/+wBbwAP/vYBbwAR/vYBbwFW/5oBbwFf/5oBbwFi/5oBbwFk/+wBbwFp/5oBbwF0/9cBbwGI/9cBbwII/vYBbwIM/vYBcQAP/4UBcQAQ/64BcQAR/4UBcQFW/1wBcQFf/1wBcQFi/1wBcQFm/8MBcQFp/1wBcQFt/8MBcQFz/5oBcQF2/8MBcQF5/3EBcQF6/5oBcQF7/5oBcQF8/64BcQF9/5oBcQF+/3EBcQGA/9cBcQGB/8MBcQGC/5oBcQGE/5oBcQGG/64BcQGH/5oBcQGJ/5oBcQGK/9cBcQGM/3EBcQGO/5oBcQGP/3EBcQGQ/3EBcQGS/5oBcQGT/3EBcQGU/9cBcQGV/5oBcQGW/5oBcQGY/5oBcQGZ/3EBcQGa/5oBcQGb/5oBcQIC/64BcQID/64BcQIE/64BcQII/4UBcQIM/4UBcQIh/8MBcQJT/9cBcgAP/4UBcgAR/4UBcgFW/4UBcgFf/4UBcgFi/4UBcgFm/9cBcgFp/4UBcgFt/9cBcgFz/8MBcgF2/+wBcgF5/5oBcgF6/64BcgF7/8MBcgF8/8MBcgF9/8MBcgF+/5oBcgGB/8MBcgGC/64BcgGE/8MBcgGG/8MBcgGH/8MBcgGJ/8MBcgGM/5oBcgGO/5oBcgGP/5oBcgGQ/5oBcgGS/8MBcgGT/5oBcgGV/8MBcgGW/8MBcgGY/8MBcgGZ/5oBcgGa/8MBcgGb/8MBcgII/4UBcgIM/4UBcgIh/+wBcwAP/5oBcwAR/5oBcwFW/9cBcwFf/9cBcwFi/9cBcwFk/8MBcwFp/9cBcwFw/+wBcwFx/64BcwFy/8MBcwF0/+wBcwF4/8MBcwGI/+wBcwII/5oBcwIM/5oBcwJU/8MBdAFm/9cBdAFt/9cBdAFz/8MBdAGN/+wBdAGR/+wBdQAP/4UBdQAR/4UBdQFW/64BdQFf/64BdQFi/64BdQFm/+wBdQFp/64BdQFt/+wBdQII/4UBdQIM/4UBdgFx/9cBdgFy/+wBdgF4/+wBdgJU/+wBeAAP/4UBeAAR/4UBeAFW/4UBeAFf/4UBeAFi/4UBeAFm/9cBeAFp/4UBeAFt/9cBeAFz/8MBeAF2/+wBeAF5/5oBeAF6/64BeAF7/8MBeAF8/8MBeAF9/8MBeAF+/5oBeAGB/8MBeAGC/64BeAGE/8MBeAGG/8MBeAGH/8MBeAGJ/8MBeAGM/5oBeAGO/5oBeAGP/5oBeAGQ/5oBeAGS/8MBeAGT/5oBeAGV/8MBeAGW/8MBeAGY/8MBeAGZ/5oBeAGa/8MBeAGb/8MBeAII/4UBeAIM/4UBeAIh/+wBeQGIACkBewAF/+wBewAK/+wBewIH/+wBewIL/+wBfAAF/64BfAAK/64BfAGN/+wBfAGR/+wBfAIH/64BfAIL/64BfgGIACkBgAAP/64BgAAR/64BgAGI/+wBgAII/64BgAIM/64BgwAQ/5oBgwF5/9cBgwF+/9cBgwGB/9cBgwGM/9cBgwGN/9cBgwGP/9cBgwGQ/9cBgwGR/9cBgwGT/9cBgwGZ/9cBgwIC/5oBgwID/5oBgwIE/5oBhAAF/+wBhAAK/+wBhAIH/+wBhAIL/+wBhQAP/9cBhQAR/9cBhQII/9cBhQIM/9cBhgAF/64BhgAK/64BhgGN/+wBhgGR/+wBhgIH/64BhgIL/64BhwF5/9cBhwF+/9cBhwGM/9cBhwGP/9cBhwGQ/9cBhwGT/9cBhwGZ/9cBiAAF/4UBiAAK/4UBiAF5/+wBiAF+/+wBiAGA/9cBiAGK/9cBiAGM/+wBiAGN/9cBiAGP/+wBiAGQ/+wBiAGR/9cBiAGT/+wBiAGZ/+wBiAIH/4UBiAIL/4UBigAP/64BigAR/64BigGI/+wBigII/64BigIM/64BjAAF/+wBjAAK/+wBjAGA/9cBjAGK/9cBjAIH/+wBjAIL/+wBjgAF/+wBjgAK/+wBjgGA/9cBjgGK/9cBjgIH/+wBjgIL/+wBkAAP/+wBkAAR/+wBkAII/+wBkAIM/+wBkwAF/+wBkwAK/+wBkwGA/9cBkwGK/9cBkwIH/+wBkwIL/+wBlAAP/8MBlAAQ/9cBlAAR/8MBlAF5/9cBlAF+/9cBlAGB/9cBlAGM/9cBlAGP/9cBlAGQ/9cBlAGT/9cBlAGZ/9cBlAIC/9cBlAID/9cBlAIE/9cBlAII/8MBlAIM/8MBlwAF/9cBlwAK/9cBlwIH/9cBlwIL/9cBmQAF/+wBmQAK/+wBmQGA/9cBmQGK/9cBmQIH/+wBmQIL/+wBnQAF/64BnQAK/64BnQGd/4UBnQGm/4UBnQGo/9cBnQG8/5oBnQG9/9cBnQHB/5oBnQHE/4UBnQHc/9cBnQHd/9cBnQHh/9cBnQHk/9cBnQH2/9cBnQIH/64BnQIL/64BnQJu/64BnQJ8/5oBnQKA/64BnQKC/64BnQKX/64BnQKb/64BnQKn/64BnQKp/4UBnQKq/9cBnQK1/5oBnQK2/9cBnQK3/5oBnQK4/9cBnQK5/5oBnQK6/9cBnQK9/4UBnQK+/9cBnQK//5oBnQLA/9cBnQLB/5oBnQLC/9cBnQLU/5oBnQLV/9cBnQL3/9cBnQL4/9cBnQL5/9cBnQL6/9cBnQL7/9cBnQL8/9cBnQL9/5oBnQL+/9cBnQMD/64BnQMN/5oBnQMO/8MBnQMP/5oBnQMQ/8MBnQMX/4UBnQMY/9cBngAP/4UBngAQ/64BngAR/4UBngGf/9cBngGk/5oBngGq/3EBngGu/5oBngG1/5oBngG4/9cBngG7/9cBngG8ACkBngG+/64BngHM/5oBngHN/5oBngHO/4UBngHP/3EBngHQ/9cBngHR/9cBngHS/5oBngHT/5oBngHU/5oBngHV/4UBngHW/5oBngHX/5oBngHY/3EBngHZ/5oBngHa/5oBngHb/3EBngHc/64BngHd/64BngHe/3EBngHf/9cBngHg/5oBngHh/5oBngHi/5oBngHj/5oBngHk/64BngHl/5oBngHm/5oBngHn/9cBngHo/5oBngHp/8MBngHq/3EBngHs/5oBngHt/3EBngHu/4UBngHy/4UBngHz/5oBngH1/5oBngH2/64BngH3/5oBngH5/5oBngIC/64BngID/64BngIE/64BngII/4UBngIM/4UBngJq/3EBngJr/5oBngJs/9cBngJt/9cBngJx/5oBngJy/3EBngJz/4UBngJ1/5oBngJ3/5oBngJ5/5oBngJ9/5oBngJ+/9cBngJ//3EBngKB/9cBngKD/9cBngKE/9cBngKF/3EBngKG/9cBngKH/3EBngKI/9cBngKJ/3EBngKK/9cBngKL/9cBngKM/9cBngKN/3EBngKW/5oBngKa/5oBngKe/5oBngKg/9cBngKi/9cBngKk/5oBngKm/5oBngKq/64BngKs/5oBngKu/5oBngKw/5oBngKx/9cBngKy/3EBngKz/9cBngK0/3EBngK1ACkBngK2/64BngK4/64BngK6/64BngK8/9cBngK+/64BngLA/5oBngLC/5oBngLE/5oBngLF/5oBngLG/3EBngLH/5oBngLI/3EBngLL/9cBngLN/5oBngLO/5oBngLP/4UBngLR/5oBngLT/5oBngLV/5oBngLX/5oBngLZ/3EBngLb/3EBngLd/3EBngLg/3EBngLm/9cBngLo/9cBngLq/8MBngLs/5oBngLu/5oBngLv/9cBngLw/3EBngLx/9cBngLy/3EBngLz/9cBngL0/3EBngL2/9cBngL4/64BngL6/64BngL8/64BngL+/5oBngMA/5oBngMC/5oBngMG/9cBngMI/9cBngMJ/3EBngMK/3EBngML/3EBngMM/3EBngMO/5oBngMQ/5oBngMR/5oBngMS/4UBngMU/5oBngMV/9cBngMW/3EBngMY/64BngMa/3EBngMb/5oBngMc/4UBnwGf/9cBnwG4/9cBnwG7/9cBnwG+/9cBnwHh/9cBnwJs/9cBnwJ+/9cBnwKE/9cBnwKG/9cBnwKI/9cBnwKK/9cBnwKM/9cBnwKx/9cBnwKz/9cBnwLA/9cBnwLC/9cBnwLF/9cBnwLH/9cBnwLV/9cBnwLv/9cBnwLx/9cBnwLz/9cBnwL+/9cBnwMJ/9cBnwML/9cBnwMO/9cBnwMQ/9cBnwMV/9cBoAMO/9cBoAMQ/9cBpAAF/64BpAAK/64BpAGd/4UBpAGm/4UBpAGo/9cBpAG8/5oBpAG9/9cBpAHB/5oBpAHE/4UBpAHc/9cBpAHd/9cBpAHh/9cBpAHk/9cBpAH2/9cBpAIH/64BpAIL/64BpAJu/64BpAJ8/5oBpAKA/64BpAKC/64BpAKX/64BpAKb/64BpAKn/64BpAKp/4UBpAKq/9cBpAK1/5oBpAK2/9cBpAK3/5oBpAK4/9cBpAK5/5oBpAK6/9cBpAK9/4UBpAK+/9cBpAK//5oBpALA/9cBpALB/5oBpALC/9cBpALU/5oBpALV/9cBpAL3/9cBpAL4/9cBpAL5/9cBpAL6/9cBpAL7/9cBpAL8/9cBpAL9/5oBpAL+/9cBpAMD/64BpAMN/5oBpAMO/8MBpAMP/5oBpAMQ/8MBpAMX/4UBpAMY/9cBpQAF/64BpQAK/64BpQGd/4UBpQGm/4UBpQGo/9cBpQG8/5oBpQG9/9cBpQHB/5oBpQHE/4UBpQHc/9cBpQHd/9cBpQHh/9cBpQHk/9cBpQH2/9cBpQIH/64BpQIL/64BpQJu/64BpQJ8/5oBpQKA/64BpQKC/64BpQKX/64BpQKb/64BpQKn/64BpQKp/4UBpQKq/9cBpQK1/5oBpQK2/9cBpQK3/5oBpQK4/9cBpQK5/5oBpQK6/9cBpQK9/4UBpQK+/9cBpQK//5oBpQLA/9cBpQLB/5oBpQLC/9cBpQLU/5oBpQLV/9cBpQL3/9cBpQL4/9cBpQL5/9cBpQL6/9cBpQL7/9cBpQL8/9cBpQL9/5oBpQL+/9cBpQMD/64BpQMN/5oBpQMO/8MBpQMP/5oBpQMQ/8MBpQMX/4UBpQMY/9cBpgAF/64BpgAK/64BpgGd/4UBpgGm/4UBpgGo/9cBpgG8/5oBpgG9/9cBpgHB/5oBpgHE/4UBpgHc/9cBpgHd/9cBpgHh/9cBpgHk/9cBpgH2/9cBpgIH/64BpgIL/64BpgJu/64BpgJ8/5oBpgKA/64BpgKC/64BpgKX/64BpgKb/64BpgKn/64BpgKp/4UBpgKq/9cBpgK1/5oBpgK2/9cBpgK3/5oBpgK4/9cBpgK5/5oBpgK6/9cBpgK9/4UBpgK+/9cBpgK//5oBpgLA/9cBpgLB/5oBpgLC/9cBpgLU/5oBpgLV/9cBpgL3/9cBpgL4/9cBpgL5/9cBpgL6/9cBpgL7/9cBpgL8/9cBpgL9/5oBpgL+/9cBpgMD/64BpgMN/5oBpgMO/8MBpgMP/5oBpgMQ/8MBpgMX/4UBpgMY/9cBpwGf/9cBpwG4/9cBpwG7/9cBpwG+/9cBpwHB/9cBpwHh/9cBpwJs/9cBpwJ8/9cBpwJ+/9cBpwKE/9cBpwKG/9cBpwKI/9cBpwKK/9cBpwKM/9cBpwKx/9cBpwKz/9cBpwK//9cBpwLA/9cBpwLB/9cBpwLC/9cBpwLF/5oBpwLH/5oBpwLU/9cBpwLV/9cBpwLv/9cBpwLx/9cBpwLz/9cBpwL9/9cBpwL+/9cBpwMJ/9cBpwML/9cBpwMO/9cBpwMQ/9cBpwMV/9cBpwMZ/+wBqAAP/4UBqAAR/4UBqAGf/+wBqAGk/5oBqAGq/3EBqAGu/5oBqAG1/5oBqAG4/+wBqAG7/+wBqAG+/8MBqAHJ/+wBqAHO/64BqAHP/9cBqAHV/64BqAHY/9cBqAHb/9cBqAHe/9cBqAHh/9cBqAHq/9cBqAHrAGYBqAHt/9cBqAHu/+wBqAHy/64BqAH0AGYBqAII/4UBqAIM/4UBqAJq/9cBqAJs/+wBqAJy/3EBqAJz/64BqAJ+/+wBqAJ//9cBqAKE/+wBqAKF/9cBqAKG/+wBqAKH/9cBqAKI/+wBqAKJ/9cBqAKK/+wBqAKM/+wBqAKN/9cBqAKYAGYBqAKoAGYBqAKx/+wBqAKy/9cBqAKz/+wBqAK0/9cBqALA/9cBqALC/9cBqALF/9cBqALG/8MBqALH/9cBqALI/8MBqALO/5oBqALP/64BqALV/9cBqALZ/3EBqALb/3EBqALd/3EBqALg/9cBqALv/+wBqALw/9cBqALx/+wBqALy/9cBqALz/+wBqAL0/9cBqAL+/9cBqAMJ/3EBqAMK/9cBqAML/3EBqAMM/9cBqAMR/5oBqAMS/64BqAMV/+wBqAMW/9cBqAMa/9cBqAMb/5oBqAMc/64BqgAF/3EBqgAK/3EBqgGd/5oBqgGm/5oBqgG8/3EBqgG+/9cBqgHB/5oBqgHE/5oBqgHc/9cBqgHh/9cBqgHk/9cBqgIH/3EBqgIL/3EBqgJu/9cBqgJ8/5oBqgKA/64BqgKC/64BqgKX/9cBqgKb/9cBqgKn/9cBqgKp/5oBqgKq/9cBqgK1/3EBqgK2/9cBqgK3/4UBqgK5/4UBqgK9/5oBqgK+/9cBqgK//5oBqgLA/9cBqgLB/5oBqgLC/9cBqgLF/5oBqgLH/5oBqgLU/5oBqgLV/9cBqgLh/9cBqgLj/9cBqgL9/5oBqgL+/9cBqgMD/9cBqgMN/3EBqgMO/9cBqgMP/3EBqgMQ/9cBqgMX/5oBqgMY/9cBqwAF/9cBqwAK/9cBqwGq/+wBqwHB/9cBqwIH/9cBqwIL/9cBqwJy/+wBqwJ8/9cBqwK//9cBqwLB/9cBqwLF/9cBqwLH/9cBqwLU/9cBqwLZ/+wBqwLb/+wBqwLd/+wBqwL9/9cBrAAP/64BrAAR/64BrAII/64BrAIM/64BrAKA/+wBrAKC/+wBrAK3/+wBrAK5/+wBrAMN/9cBrAMP/9cBrQAP/4UBrQAQ/64BrQAR/4UBrQGf/9cBrQGk/5oBrQGq/3EBrQGu/5oBrQG1/5oBrQG4/9cBrQG7/9cBrQG8ACkBrQG+/64BrQHM/5oBrQHN/5oBrQHO/4UBrQHP/3EBrQHQ/9cBrQHR/9cBrQHS/5oBrQHT/5oBrQHU/5oBrQHV/4UBrQHW/5oBrQHX/5oBrQHY/3EBrQHZ/5oBrQHa/5oBrQHb/3EBrQHc/64BrQHd/64BrQHe/3EBrQHf/9cBrQHg/5oBrQHh/5oBrQHi/5oBrQHj/5oBrQHk/64BrQHl/5oBrQHm/5oBrQHn/9cBrQHo/5oBrQHp/8MBrQHq/3EBrQHs/5oBrQHt/3EBrQHu/4UBrQHy/4UBrQHz/5oBrQH1/5oBrQH2/64BrQH3/5oBrQH5/5oBrQIC/64BrQID/64BrQIE/64BrQII/4UBrQIM/4UBrQJq/3EBrQJr/5oBrQJs/9cBrQJt/9cBrQJx/5oBrQJy/3EBrQJz/4UBrQJ1/5oBrQJ3/5oBrQJ5/5oBrQJ9/5oBrQJ+/9cBrQJ//3EBrQKB/9cBrQKD/9cBrQKE/9cBrQKF/3EBrQKG/9cBrQKH/3EBrQKI/9cBrQKJ/3EBrQKK/9cBrQKL/9cBrQKM/9cBrQKN/3EBrQKW/5oBrQKa/5oBrQKe/5oBrQKg/9cBrQKi/9cBrQKk/5oBrQKm/5oBrQKq/64BrQKs/5oBrQKu/5oBrQKw/5oBrQKx/9cBrQKy/3EBrQKz/9cBrQK0/3EBrQK1ACkBrQK2/64BrQK4/64BrQK6/64BrQK8/9cBrQK+/64BrQLA/5oBrQLC/5oBrQLE/5oBrQLF/5oBrQLG/3EBrQLH/5oBrQLI/3EBrQLL/9cBrQLN/5oBrQLO/5oBrQLP/4UBrQLR/5oBrQLT/5oBrQLV/5oBrQLX/5oBrQLZ/3EBrQLb/3EBrQLd/3EBrQLg/3EBrQLm/9cBrQLo/9cBrQLq/8MBrQLs/5oBrQLu/5oBrQLv/9cBrQLw/3EBrQLx/9cBrQLy/3EBrQLz/9cBrQL0/3EBrQL2/9cBrQL4/64BrQL6/64BrQL8/64BrQL+/5oBrQMA/5oBrQMC/5oBrQMG/9cBrQMI/9cBrQMJ/3EBrQMK/3EBrQML/3EBrQMM/3EBrQMO/5oBrQMQ/5oBrQMR/5oBrQMS/4UBrQMU/5oBrQMV/9cBrQMW/3EBrQMY/64BrQMa/3EBrQMb/5oBrQMc/4UBrgGjAOEBrgLqACkBrgMO/9cBrgMQ/9cBsAGf/9cBsAG4/9cBsAG7/9cBsAG+/9cBsAHB/9cBsAHh/9cBsAJs/9cBsAJ8/9cBsAJ+/9cBsAKE/9cBsAKG/9cBsAKI/9cBsAKK/9cBsAKM/9cBsAKx/9cBsAKz/9cBsAK//9cBsALA/9cBsALB/9cBsALC/9cBsALF/5oBsALH/5oBsALU/9cBsALV/9cBsALv/9cBsALx/9cBsALz/9cBsAL9/9cBsAL+/9cBsAMJ/9cBsAML/9cBsAMO/9cBsAMQ/9cBsAMV/9cBsAMZ/+wBsQAP/64BsQAR/64BsQII/64BsQIM/64BsQKA/+wBsQKC/+wBsQK3/+wBsQK5/+wBsQMN/9cBsQMP/9cBtAGf/9cBtAG4/9cBtAG7/9cBtAG+/9cBtAHB/9cBtAHh/9cBtAJs/9cBtAJ8/9cBtAJ+/9cBtAKE/9cBtAKG/9cBtAKI/9cBtAKK/9cBtAKM/9cBtAKx/9cBtAKz/9cBtAK//9cBtALA/9cBtALB/9cBtALC/9cBtALF/5oBtALH/5oBtALU/9cBtALV/9cBtALv/9cBtALx/9cBtALz/9cBtAL9/9cBtAL+/9cBtAMJ/9cBtAML/9cBtAMO/9cBtAMQ/9cBtAMV/9cBtAMZ/+wBuAAP/64BuAAR/64BuAGd/+wBuAGk/9cBuAGm/+wBuAGo/9cBuAGq/9cBuAGu/9cBuAGw/9cBuAGx/+wBuAG1/9cBuAG8/8MBuAG9/9cBuAG//9cBuAHB/9cBuAHE/+wBuAHH/+wBuAHO/+wBuAHV/+wBuAHy/+wBuAII/64BuAIM/64BuAJy/9cBuAJz/+wBuAJ6/+wBuAJ8/9cBuAKA/+wBuAKC/+wBuAKf/9cBuAKh/+wBuAKp/+wBuAK1/8MBuAK3/+wBuAK5/+wBuAK7/9cBuAK9/+wBuAK//9cBuALB/9cBuALK/9cBuALO/9cBuALP/+wBuALU/9cBuALZ/9cBuALb/9cBuALd/9cBuALl/9cBuALn/+wBuAL1/+wBuAL3/9cBuAL5/9cBuAL7/9cBuAL9/9cBuAMF/9cBuAMH/9cBuAMN/9cBuAMP/9cBuAMR/9cBuAMS/+wBuAMX/+wBuAMb/9cBuAMc/+wBugAP/vYBugAR/vYBugGk/4UBugGq/5oBugGu/4UBugGw/9cBugG1/4UBugG//9cBugHO/5oBugHV/5oBugHy/5oBugII/vYBugIM/vYBugJy/5oBugJz/5oBugJ2/+wBugKf/9cBugK7/9cBugLK/9cBugLO/4UBugLP/5oBugLZ/5oBugLb/5oBugLd/5oBugLl/9cBugMF/9cBugMH/9cBugMJ/64BugML/64BugMR/4UBugMS/5oBugMb/4UBugMc/5oBuwGf/9cBuwG4/9cBuwG7/9cBuwG+/9cBuwHh/9cBuwJs/9cBuwJ+/9cBuwKE/9cBuwKG/9cBuwKI/9cBuwKK/9cBuwKM/9cBuwKx/9cBuwKz/9cBuwLA/9cBuwLC/9cBuwLF/9cBuwLH/9cBuwLV/9cBuwLv/9cBuwLx/9cBuwLz/9cBuwL+/9cBuwMJ/9cBuwML/9cBuwMO/9cBuwMQ/9cBuwMV/9cBvAAP/4UBvAAQ/64BvAAR/4UBvAGf/9cBvAGk/5oBvAGq/3EBvAGu/5oBvAG1/5oBvAG4/9cBvAG7/9cBvAG8ACkBvAG+/64BvAHM/5oBvAHN/5oBvAHO/4UBvAHP/3EBvAHQ/9cBvAHR/9cBvAHS/5oBvAHT/5oBvAHU/5oBvAHV/4UBvAHW/5oBvAHX/5oBvAHY/3EBvAHZ/5oBvAHa/5oBvAHb/3EBvAHc/64BvAHd/64BvAHe/3EBvAHf/9cBvAHg/5oBvAHh/5oBvAHi/5oBvAHj/5oBvAHk/64BvAHl/5oBvAHm/5oBvAHn/9cBvAHo/5oBvAHp/8MBvAHq/3EBvAHs/5oBvAHt/3EBvAHu/4UBvAHy/4UBvAHz/5oBvAH1/5oBvAH2/64BvAH3/5oBvAH5/5oBvAIC/64BvAID/64BvAIE/64BvAII/4UBvAIM/4UBvAJq/3EBvAJr/5oBvAJs/9cBvAJt/9cBvAJx/5oBvAJy/3EBvAJz/4UBvAJ1/5oBvAJ3/5oBvAJ5/5oBvAJ9/5oBvAJ+/9cBvAJ//3EBvAKB/9cBvAKD/9cBvAKE/9cBvAKF/3EBvAKG/9cBvAKH/3EBvAKI/9cBvAKJ/3EBvAKK/9cBvAKL/9cBvAKM/9cBvAKN/3EBvAKW/5oBvAKa/5oBvAKe/5oBvAKg/9cBvAKi/9cBvAKk/5oBvAKm/5oBvAKq/64BvAKs/5oBvAKu/5oBvAKw/5oBvAKx/9cBvAKy/3EBvAKz/9cBvAK0/3EBvAK1ACkBvAK2/64BvAK4/64BvAK6/64BvAK8/9cBvAK+/64BvALA/5oBvALC/5oBvALE/5oBvALF/5oBvALG/3EBvALH/5oBvALI/3EBvALL/9cBvALN/5oBvALO/5oBvALP/4UBvALR/5oBvALT/5oBvALV/5oBvALX/5oBvALZ/3EBvALb/3EBvALd/3EBvALg/3EBvALm/9cBvALo/9cBvALq/8MBvALs/5oBvALu/5oBvALv/9cBvALw/3EBvALx/9cBvALy/3EBvALz/9cBvAL0/3EBvAL2/9cBvAL4/64BvAL6/64BvAL8/64BvAL+/5oBvAMA/5oBvAMC/5oBvAMG/9cBvAMI/9cBvAMJ/3EBvAMK/3EBvAML/3EBvAMM/3EBvAMO/5oBvAMQ/5oBvAMR/5oBvAMS/4UBvAMU/5oBvAMV/9cBvAMW/3EBvAMY/64BvAMa/3EBvAMb/5oBvAMc/4UBvQAP/4UBvQAR/4UBvQGf/+wBvQGk/5oBvQGq/3EBvQGu/5oBvQG1/5oBvQG4/+wBvQG7/+wBvQG+/8MBvQHJ/+wBvQHO/64BvQHP/9cBvQHV/64BvQHY/9cBvQHb/9cBvQHe/9cBvQHh/9cBvQHq/9cBvQHrAGYBvQHt/9cBvQHu/+wBvQHy/64BvQH0AGYBvQII/4UBvQIM/4UBvQJq/9cBvQJs/+wBvQJy/3EBvQJz/64BvQJ+/+wBvQJ//9cBvQKE/+wBvQKF/9cBvQKG/+wBvQKH/9cBvQKI/+wBvQKJ/9cBvQKK/+wBvQKM/+wBvQKN/9cBvQKYAGYBvQKoAGYBvQKx/+wBvQKy/9cBvQKz/+wBvQK0/9cBvQLA/9cBvQLC/9cBvQLF/9cBvQLG/8MBvQLH/9cBvQLI/8MBvQLO/5oBvQLP/64BvQLV/9cBvQLZ/3EBvQLb/3EBvQLd/3EBvQLg/9cBvQLv/+wBvQLw/9cBvQLx/+wBvQLy/9cBvQLz/+wBvQL0/9cBvQL+/9cBvQMJ/3EBvQMK/9cBvQML/3EBvQMM/9cBvQMR/5oBvQMS/64BvQMV/+wBvQMW/9cBvQMa/9cBvQMb/5oBvQMc/64BvgAP/64BvgAR/64BvgGd/9cBvgGk/9cBvgGm/9cBvgGo/8MBvgGq/9cBvgGu/9cBvgGw/9cBvgGx/9cBvgG1/9cBvgG8/8MBvgG9/8MBvgG//9cBvgHE/9cBvgHH/9cBvgHO/+wBvgHV/+wBvgHy/+wBvgII/64BvgIM/64BvgJy/9cBvgJz/+wBvgJ6/9cBvgKA/+wBvgKC/+wBvgKf/9cBvgKh/9cBvgKp/9cBvgK1/8MBvgK3/8MBvgK5/8MBvgK7/9cBvgK9/9cBvgLK/9cBvgLO/9cBvgLP/+wBvgLZ/9cBvgLb/9cBvgLd/9cBvgLl/9cBvgLn/9cBvgL1/9cBvgL3/8MBvgL5/8MBvgL7/8MBvgMF/9cBvgMH/9cBvgMN/9cBvgMP/9cBvgMR/9cBvgMS/+wBvgMX/9cBvgMb/9cBvgMc/+wBvwGf/9cBvwG4/9cBvwG7/9cBvwG+/9cBvwHB/9cBvwHh/9cBvwJs/9cBvwJ8/9cBvwJ+/9cBvwKE/9cBvwKG/9cBvwKI/9cBvwKK/9cBvwKM/9cBvwKx/9cBvwKz/9cBvwK//9cBvwLA/9cBvwLB/9cBvwLC/9cBvwLF/5oBvwLH/5oBvwLU/9cBvwLV/9cBvwLv/9cBvwLx/9cBvwLz/9cBvwL9/9cBvwL+/9cBvwMJ/9cBvwML/9cBvwMO/9cBvwMQ/9cBvwMV/9cBvwMZ/+wBwAGjAOEBwALqACkBwAMO/9cBwAMQ/9cBwwGjAOEBwwLqACkBwwMO/9cBwwMQ/9cBxAAF/64BxAAK/64BxAGd/4UBxAGm/4UBxAGo/9cBxAG8/5oBxAG9/9cBxAHB/5oBxAHE/4UBxAHc/9cBxAHd/9cBxAHh/9cBxAHk/9cBxAH2/9cBxAIH/64BxAIL/64BxAJu/64BxAJ8/5oBxAKA/64BxAKC/64BxAKX/64BxAKb/64BxAKn/64BxAKp/4UBxAKq/9cBxAK1/5oBxAK2/9cBxAK3/5oBxAK4/9cBxAK5/5oBxAK6/9cBxAK9/4UBxAK+/9cBxAK//5oBxALA/9cBxALB/5oBxALC/9cBxALU/5oBxALV/9cBxAL3/9cBxAL4/9cBxAL5/9cBxAL6/9cBxAL7/9cBxAL8/9cBxAL9/5oBxAL+/9cBxAMD/64BxAMN/5oBxAMO/8MBxAMP/5oBxAMQ/8MBxAMX/4UBxAMY/9cBxgAF/64BxgAK/64BxgGd/4UBxgGm/4UBxgGo/9cBxgG8/5oBxgG9/9cBxgHB/5oBxgHE/4UBxgHc/9cBxgHd/9cBxgHh/9cBxgHk/9cBxgH2/9cBxgIH/64BxgIL/64BxgJu/64BxgJ8/5oBxgKA/64BxgKC/64BxgKX/64BxgKb/64BxgKn/64BxgKp/4UBxgKq/9cBxgK1/5oBxgK2/9cBxgK3/5oBxgK4/9cBxgK5/5oBxgK6/9cBxgK9/4UBxgK+/9cBxgK//5oBxgLA/9cBxgLB/5oBxgLC/9cBxgLU/5oBxgLV/9cBxgL3/9cBxgL4/9cBxgL5/9cBxgL6/9cBxgL7/9cBxgL8/9cBxgL9/5oBxgL+/9cBxgMD/64BxgMN/5oBxgMO/8MBxgMP/5oBxgMQ/8MBxgMX/4UBxgMY/9cBxwAP/64BxwAR/64BxwGd/+wBxwGk/9cBxwGm/+wBxwGo/9cBxwGq/9cBxwGu/9cBxwGw/9cBxwGx/+wBxwG1/9cBxwG8/8MBxwG9/9cBxwG//9cBxwHB/9cBxwHE/+wBxwHH/+wBxwHO/+wBxwHV/+wBxwHy/+wBxwII/64BxwIM/64BxwJy/9cBxwJz/+wBxwJ6/+wBxwJ8/9cBxwKA/+wBxwKC/+wBxwKf/9cBxwKh/+wBxwKp/+wBxwK1/8MBxwK3/+wBxwK5/+wBxwK7/9cBxwK9/+wBxwK//9cBxwLB/9cBxwLK/9cBxwLO/9cBxwLP/+wBxwLU/9cBxwLZ/9cBxwLb/9cBxwLd/9cBxwLl/9cBxwLn/+wBxwL1/+wBxwL3/9cBxwL5/9cBxwL7/9cBxwL9/9cBxwMF/9cBxwMH/9cBxwMN/9cBxwMP/9cBxwMR/9cBxwMS/+wBxwMX/+wBxwMb/9cBxwMc/+wByAAP/64ByAAR/64ByAGd/+wByAGk/9cByAGm/+wByAGo/9cByAGq/9cByAGu/9cByAGw/9cByAGx/+wByAG1/9cByAG8/8MByAG9/9cByAG//9cByAHB/9cByAHE/+wByAHH/+wByAHO/+wByAHV/+wByAHy/+wByAII/64ByAIM/64ByAJy/9cByAJz/+wByAJ6/+wByAJ8/9cByAKA/+wByAKC/+wByAKf/9cByAKh/+wByAKp/+wByAK1/8MByAK3/+wByAK5/+wByAK7/9cByAK9/+wByAK//9cByALB/9cByALK/9cByALO/9cByALP/+wByALU/9cByALZ/9cByALb/9cByALd/9cByALl/9cByALn/+wByAL1/+wByAL3/9cByAL5/9cByAL7/9cByAL9/9cByAMF/9cByAMH/9cByAMN/9cByAMP/9cByAMR/9cByAMS/+wByAMX/+wByAMb/9cByAMc/+wBygAF/+wBygAK/+wBygIH/+wBygIL/+wBzAHpACkBzQAP/5oBzQAQ/9cBzQAR/5oBzQHO/8MBzQHP/+wBzQHV/8MBzQHY/+wBzQHb/+wBzQHe/+wBzQHq/+wBzQHt/+wBzQHy/8MBzQIC/9cBzQID/9cBzQIE/9cBzQII/5oBzQIM/5oBzQJq/+wBzQJz/8MBzQJ//+wBzQKF/+wBzQKH/+wBzQKJ/+wBzQKN/+wBzQKy/+wBzQK0/+wBzQLP/8MBzQLg/+wBzQLw/+wBzQLy/+wBzQL0/+wBzQMK/+wBzQMM/+wBzQMS/8MBzQMW/+wBzQMa/+wBzQMc/8MBzgAF/+wBzgAK/+wBzgIH/+wBzgIL/+wBzwAF/+wBzwAK/+wBzwIH/+wBzwIL/+wB0AHP/9cB0AHY/9cB0AHb/9cB0AHe/9cB0AHh/9cB0AHq/9cB0AHt/9cB0AJq/9cB0AJ//9cB0AKF/9cB0AKH/9cB0AKJ/9cB0AKN/9cB0AKy/9cB0AK0/9cB0ALA/9cB0ALC/9cB0ALG/9cB0ALI/9cB0ALV/9cB0ALg/9cB0ALw/9cB0ALy/9cB0AL0/9cB0AL+/9cB0AMK/9cB0AMM/9cB0AMW/9cB0AMa/9cB0QHpACkB1AHP/9cB1AHY/9cB1AHb/9cB1AHe/9cB1AHh/9cB1AHq/9cB1AHt/9cB1AJq/9cB1AJ//9cB1AKF/9cB1AKH/9cB1AKJ/9cB1AKN/9cB1AKy/9cB1AK0/9cB1ALA/9cB1ALC/9cB1ALG/9cB1ALI/9cB1ALV/9cB1ALg/9cB1ALw/9cB1ALy/9cB1AL0/9cB1AL+/9cB1AMK/9cB1AMM/9cB1AMW/9cB1AMa/9cB2AAF/+wB2AAK/+wB2AHQ/9cB2AHc/+wB2AHd/+wB2AHf/9cB2AHh/+wB2AHk/+wB2AH2/+wB2AIH/+wB2AIL/+wB2AKg/9cB2AKq/+wB2AK2/+wB2AK8/9cB2AK+/+wB2ALA/+wB2ALC/+wB2ALL/9cB2ALV/+wB2ALm/9cB2AL4/+wB2AL6/+wB2AL8/+wB2AL+/+wB2AMG/9cB2AMI/9cB2AMO/+wB2AMQ/+wB2AMY/+wB2gAF/+wB2gAK/+wB2gHQ/9cB2gHc/+wB2gHd/+wB2gHf/9cB2gHh/+wB2gHk/+wB2gH2/+wB2gIH/+wB2gIL/+wB2gKg/9cB2gKq/+wB2gK2/+wB2gK8/9cB2gK+/+wB2gLA/+wB2gLC/+wB2gLL/9cB2gLV/+wB2gLm/9cB2gL4/+wB2gL6/+wB2gL8/+wB2gL+/+wB2gMG/9cB2gMI/9cB2gMO/+wB2gMQ/+wB2gMY/+wB3AAP/5oB3AAQ/9cB3AAR/5oB3AHO/8MB3AHP/+wB3AHV/8MB3AHY/+wB3AHb/+wB3AHe/+wB3AHq/+wB3AHt/+wB3AHy/8MB3AIC/9cB3AID/9cB3AIE/9cB3AII/5oB3AIM/5oB3AJq/+wB3AJz/8MB3AJ//+wB3AKF/+wB3AKH/+wB3AKJ/+wB3AKN/+wB3AKy/+wB3AK0/+wB3ALP/8MB3ALg/+wB3ALw/+wB3ALy/+wB3AL0/+wB3AMK/+wB3AMM/+wB3AMS/8MB3AMW/+wB3AMa/+wB3AMc/8MB3QAP/64B3QAR/64B3QHO/9cB3QHV/9cB3QHy/9cB3QII/64B3QIM/64B3QJz/9cB3QLP/9cB3QMS/9cB3QMc/9cB3gAF/+wB3gAK/+wB3gHQ/9cB3gHc/+wB3gHd/+wB3gHf/9cB3gHh/+wB3gHk/+wB3gH2/+wB3gIH/+wB3gIL/+wB3gKg/9cB3gKq/+wB3gK2/+wB3gK8/9cB3gK+/+wB3gLA/+wB3gLC/+wB3gLL/9cB3gLV/+wB3gLm/9cB3gL4/+wB3gL6/+wB3gL8/+wB3gL+/+wB3gMG/9cB3gMI/9cB3gMO/+wB3gMQ/+wB3gMY/+wB3wHP/9cB3wHY/9cB3wHb/9cB3wHe/9cB3wHh/9cB3wHq/9cB3wHt/9cB3wJq/9cB3wJ//9cB3wKF/9cB3wKH/9cB3wKJ/9cB3wKN/9cB3wKy/9cB3wK0/9cB3wLA/9cB3wLC/9cB3wLG/9cB3wLI/9cB3wLV/9cB3wLg/9cB3wLw/9cB3wLy/9cB3wL0/9cB3wL+/9cB3wMK/9cB3wMM/9cB3wMW/9cB3wMa/9cB4AAF/+wB4AAK/+wB4AIH/+wB4AIL/+wB4wAF/+wB4wAK/+wB4wIH/+wB4wIL/+wB5AAF/4UB5AAK/4UB5AHQ/9cB5AHc/5oB5AHd/8MB5AHf/9cB5AHh/64B5AHk/5oB5AH2/8MB5AIH/4UB5AIL/4UB5AJt/9cB5AKB/9cB5AKD/9cB5AKL/9cB5AKg/9cB5AKq/5oB5AK2/5oB5AK4/8MB5AK6/8MB5AK8/9cB5AK+/5oB5ALA/64B5ALC/64B5ALG/9cB5ALI/9cB5ALL/9cB5ALV/64B5ALm/9cB5ALq/9cB5AL4/8MB5AL6/8MB5AL8/8MB5AL+/64B5AMG/9cB5AMI/9cB5AMO/5oB5AMQ/5oB5AMY/5oB5gAF/4UB5gAK/4UB5gHQ/9cB5gHc/5oB5gHd/8MB5gHf/9cB5gHh/64B5gHk/5oB5gH2/8MB5gIH/4UB5gIL/4UB5gJt/9cB5gKB/9cB5gKD/9cB5gKL/9cB5gKg/9cB5gKq/5oB5gK2/5oB5gK4/8MB5gK6/8MB5gK8/9cB5gK+/5oB5gLA/64B5gLC/64B5gLG/9cB5gLI/9cB5gLL/9cB5gLV/64B5gLm/9cB5gLq/9cB5gL4/8MB5gL6/8MB5gL8/8MB5gL+/64B5gMG/9cB5gMI/9cB5gMO/5oB5gMQ/5oB5gMY/5oB5wAF/+wB5wAK/+wB5wHQ/9cB5wHc/+wB5wHd/+wB5wHf/9cB5wHh/+wB5wHk/+wB5wH2/+wB5wIH/+wB5wIL/+wB5wKg/9cB5wKq/+wB5wK2/+wB5wK8/9cB5wK+/+wB5wLA/+wB5wLC/+wB5wLL/9cB5wLV/+wB5wLm/9cB5wL4/+wB5wL6/+wB5wL8/+wB5wL+/+wB5wMG/9cB5wMI/9cB5wMO/+wB5wMQ/+wB5wMY/+wB6AAF/+wB6AAK/+wB6AHQ/9cB6AHc/+wB6AHd/+wB6AHf/9cB6AHh/+wB6AHk/+wB6AH2/+wB6AIH/+wB6AIL/+wB6AKg/9cB6AKq/+wB6AK2/+wB6AK8/9cB6AK+/+wB6ALA/+wB6ALC/+wB6ALL/9cB6ALV/+wB6ALm/9cB6AL4/+wB6AL6/+wB6AL8/+wB6AL+/+wB6AMG/9cB6AMI/9cB6AMO/+wB6AMQ/+wB6AMY/+wB6gAF/+wB6gAK/+wB6gIH/+wB6gIL/+wB6wAF/+wB6wAK/+wB6wIH/+wB6wIL/+wB6wMO/9cB6wMQ/9cB7AAP/5oB7AAQ/9cB7AAR/5oB7AHO/8MB7AHP/+wB7AHV/8MB7AHY/+wB7AHb/+wB7AHe/+wB7AHq/+wB7AHt/+wB7AHy/8MB7AIC/9cB7AID/9cB7AIE/9cB7AII/5oB7AIM/5oB7AJq/+wB7AJz/8MB7AJ//+wB7AKF/+wB7AKH/+wB7AKJ/+wB7AKN/+wB7AKy/+wB7AK0/+wB7ALP/8MB7ALg/+wB7ALw/+wB7ALy/+wB7AL0/+wB7AMK/+wB7AMM/+wB7AMS/8MB7AMW/+wB7AMa/+wB7AMc/8MB8gAF/4UB8gAK/4UB8gHQ/9cB8gHc/5oB8gHd/8MB8gHf/9cB8gHh/64B8gHk/5oB8gH2/8MB8gIH/4UB8gIL/4UB8gJt/9cB8gKB/9cB8gKD/9cB8gKL/9cB8gKg/9cB8gKq/5oB8gK2/5oB8gK4/8MB8gK6/8MB8gK8/9cB8gK+/5oB8gLA/64B8gLC/64B8gLG/9cB8gLI/9cB8gLL/9cB8gLV/64B8gLm/9cB8gLq/9cB8gL4/8MB8gL6/8MB8gL8/8MB8gL+/64B8gMG/9cB8gMI/9cB8gMO/5oB8gMQ/5oB8gMY/5oB8wAF/4UB8wAK/4UB8wHQ/9cB8wHc/5oB8wHd/8MB8wHf/9cB8wHh/64B8wHk/5oB8wH2/8MB8wIH/4UB8wIL/4UB8wJt/9cB8wKB/9cB8wKD/9cB8wKL/9cB8wKg/9cB8wKq/5oB8wK2/5oB8wK4/8MB8wK6/8MB8wK8/9cB8wK+/5oB8wLA/64B8wLC/64B8wLG/9cB8wLI/9cB8wLL/9cB8wLV/64B8wLm/9cB8wLq/9cB8wL4/8MB8wL6/8MB8wL8/8MB8wL+/64B8wMG/9cB8wMI/9cB8wMO/5oB8wMQ/5oB8wMY/5oB9AAF/+wB9AAK/+wB9AIH/+wB9AIL/+wB9AMO/9cB9AMQ/9cB9QHP/9cB9QHY/9cB9QHb/9cB9QHe/9cB9QHh/9cB9QHq/9cB9QHt/9cB9QJq/9cB9QJ//9cB9QKF/9cB9QKH/9cB9QKJ/9cB9QKN/9cB9QKy/9cB9QK0/9cB9QLA/9cB9QLC/9cB9QLG/9cB9QLI/9cB9QLV/9cB9QLg/9cB9QLw/9cB9QLy/9cB9QL0/9cB9QL+/9cB9QMK/9cB9QMM/9cB9QMW/9cB9QMa/9cB9gAP/64B9gAR/64B9gHO/9cB9gHV/9cB9gHy/9cB9gII/64B9gIM/64B9gJz/9cB9gLP/9cB9gMS/9cB9gMc/9cB+AAP/4UB+AAQ/64B+AAR/4UB+AGf/9cB+AGk/5oB+AGq/3EB+AGu/5oB+AG1/5oB+AG4/9cB+AG7/9cB+AG8ACkB+AG+/64B+AHM/5oB+AHN/5oB+AHO/4UB+AHP/3EB+AHQ/9cB+AHR/9cB+AHS/5oB+AHT/5oB+AHU/5oB+AHV/4UB+AHW/5oB+AHX/5oB+AHY/3EB+AHZ/5oB+AHa/5oB+AHb/3EB+AHc/64B+AHd/64B+AHe/3EB+AHf/9cB+AHg/5oB+AHh/5oB+AHi/5oB+AHj/5oB+AHk/64B+AHl/5oB+AHm/5oB+AHn/9cB+AHo/5oB+AHp/8MB+AHq/3EB+AHs/5oB+AHt/3EB+AHu/4UB+AHy/4UB+AHz/5oB+AH1/5oB+AH2/64B+AH3/5oB+AH5/5oB+AIC/64B+AID/64B+AIE/64B+AII/4UB+AIM/4UB+AJq/3EB+AJr/5oB+AJs/9cB+AJt/9cB+AJx/5oB+AJy/3EB+AJz/4UB+AJ1/5oB+AJ3/5oB+AJ5/5oB+AJ9/5oB+AJ+/9cB+AJ//3EB+AKB/9cB+AKD/9cB+AKE/9cB+AKF/3EB+AKG/9cB+AKH/3EB+AKI/9cB+AKJ/3EB+AKK/9cB+AKL/9cB+AKM/9cB+AKN/3EB+AKW/5oB+AKa/5oB+AKe/5oB+AKg/9cB+AKi/9cB+AKk/5oB+AKm/5oB+AKq/64B+AKs/5oB+AKu/5oB+AKw/5oB+AKx/9cB+AKy/3EB+AKz/9cB+AK0/3EB+AK1ACkB+AK2/64B+AK4/64B+AK6/64B+AK8/9cB+AK+/64B+ALA/5oB+ALC/5oB+ALE/5oB+ALF/5oB+ALG/3EB+ALH/5oB+ALI/3EB+ALL/9cB+ALN/5oB+ALO/5oB+ALP/4UB+ALR/5oB+ALT/5oB+ALV/5oB+ALX/5oB+ALZ/3EB+ALb/3EB+ALd/3EB+ALg/3EB+ALm/9cB+ALo/9cB+ALq/8MB+ALs/5oB+ALu/5oB+ALv/9cB+ALw/3EB+ALx/9cB+ALy/3EB+ALz/9cB+AL0/3EB+AL2/9cB+AL4/64B+AL6/64B+AL8/64B+AL+/5oB+AMA/5oB+AMC/5oB+AMG/9cB+AMI/9cB+AMJ/3EB+AMK/3EB+AML/3EB+AMM/3EB+AMO/5oB+AMQ/5oB+AMR/5oB+AMS/4UB+AMU/5oB+AMV/9cB+AMW/3EB+AMY/64B+AMa/3EB+AMb/5oB+AMc/4UB+QAP/5oB+QAQ/9cB+QAR/5oB+QHO/8MB+QHP/+wB+QHV/8MB+QHY/+wB+QHb/+wB+QHe/+wB+QHq/+wB+QHt/+wB+QHy/8MB+QIC/9cB+QID/9cB+QIE/9cB+QII/5oB+QIM/5oB+QJq/+wB+QJz/8MB+QJ//+wB+QKF/+wB+QKH/+wB+QKJ/+wB+QKN/+wB+QKy/+wB+QK0/+wB+QLP/8MB+QLg/+wB+QLw/+wB+QLy/+wB+QL0/+wB+QMK/+wB+QMM/+wB+QMS/8MB+QMW/+wB+QMa/+wB+QMc/8MB+gAP/5oB+gAR/5oB+gAiACkB+gAk/64B+gAm/+wB+gAq/+wB+gAy/+wB+gA0/+wB+gBE/9cB+gBG/9cB+gBH/9cB+gBI/9cB+gBK/+wB+gBQ/+wB+gBR/+wB+gBS/9cB+gBT/+wB+gBU/9cB+gBV/+wB+gBW/+wB+gBY/+wB+gCC/64B+gCD/64B+gCE/64B+gCF/64B+gCG/64B+gCH/64B+gCJ/+wB+gCU/+wB+gCV/+wB+gCW/+wB+gCX/+wB+gCY/+wB+gCa/+wB+gCi/9cB+gCj/9cB+gCk/9cB+gCl/9cB+gCm/9cB+gCn/9cB+gCo/9cB+gCp/9cB+gCq/9cB+gCr/9cB+gCs/9cB+gCt/9cB+gC0/9cB+gC1/9cB+gC2/9cB+gC3/9cB+gC4/9cB+gC6/9cB+gC7/+wB+gC8/+wB+gC9/+wB+gC+/+wB+gDC/64B+gDD/9cB+gDE/64B+gDF/9cB+gDG/64B+gDH/9cB+gDI/+wB+gDJ/9cB+gDK/+wB+gDL/9cB+gDM/+wB+gDN/9cB+gDO/+wB+gDP/9cB+gDR/9cB+gDT/9cB+gDV/9cB+gDX/9cB+gDZ/9cB+gDb/9cB+gDd/9cB+gDe/+wB+gDf/+wB+gDg/+wB+gDh/+wB+gDi/+wB+gDj/+wB+gDk/+wB+gDl/+wB+gD6/+wB+gEG/+wB+gEI/+wB+gEN/+wB+gEO/+wB+gEP/9cB+gEQ/+wB+gER/9cB+gES/+wB+gET/9cB+gEU/+wB+gEV/9cB+gEX/+wB+gEZ/+wB+gEd/+wB+gEh/+wB+gEr/+wB+gEt/+wB+gEv/+wB+gEx/+wB+gEz/+wB+gE1/+wB+gFD/64B+gFE/9cB+gFG/9cB+gFH/+wB+gFI/9cB+gFK/+wB+gII/5oB+gIM/5oB+gJX/+wB+gJY/64B+gJZ/9cB+gJf/+wB+gJg/9cB+gJi/+wB+gMd/64B+gMe/9cB+gMf/64B+gMg/9cB+gMh/64B+gMi/9cB+gMj/64B+gMl/64B+gMm/9cB+gMn/64B+gMo/9cB+gMp/64B+gMq/9cB+gMr/64B+gMs/9cB+gMt/64B+gMu/9cB+gMv/64B+gMw/9cB+gMx/64B+gMy/9cB+gMz/64B+gM0/9cB+gM2/9cB+gM4/9cB+gM6/9cB+gM8/9cB+gNA/9cB+gNC/9cB+gNE/9cB+gNJ/+wB+gNK/9cB+gNL/+wB+gNM/9cB+gNN/+wB+gNO/9cB+gNP/+wB+gNR/+wB+gNS/9cB+gNT/+wB+gNU/9cB+gNV/+wB+gNW/9cB+gNX/+wB+gNY/9cB+gNZ/+wB+gNa/9cB+gNb/+wB+gNc/9cB+gNd/+wB+gNe/9cB+gNf/+wB+gNg/9cB+gNi/+wB+gNk/+wB+gNm/+wB+gNo/+wB+gNq/+wB+gNs/+wB+gNu/+wB+wAFAFIB+wAKAFIB+wAP/64B+wAR/64B+wAiACkB+wIHAFIB+wII/64B+wILAFIB+wIM/64B/AAP/5oB/AAR/5oB/AAiACkB/AAk/64B/AAm/+wB/AAq/+wB/AAy/+wB/AA0/+wB/ABE/9cB/ABG/9cB/ABH/9cB/ABI/9cB/ABK/+wB/ABQ/+wB/ABR/+wB/ABS/9cB/ABT/+wB/ABU/9cB/ABV/+wB/ABW/+wB/ABY/+wB/ACC/64B/ACD/64B/ACE/64B/ACF/64B/ACG/64B/ACH/64B/ACJ/+wB/ACU/+wB/ACV/+wB/ACW/+wB/ACX/+wB/ACY/+wB/ACa/+wB/ACi/9cB/ACj/9cB/ACk/9cB/ACl/9cB/ACm/9cB/ACn/9cB/ACo/9cB/ACp/9cB/ACq/9cB/ACr/9cB/ACs/9cB/ACt/9cB/AC0/9cB/AC1/9cB/AC2/9cB/AC3/9cB/AC4/9cB/AC6/9cB/AC7/+wB/AC8/+wB/AC9/+wB/AC+/+wB/ADC/64B/ADD/9cB/ADE/64B/ADF/9cB/ADG/64B/ADH/9cB/ADI/+wB/ADJ/9cB/ADK/+wB/ADL/9cB/ADM/+wB/ADN/9cB/ADO/+wB/ADP/9cB/ADR/9cB/ADT/9cB/ADV/9cB/ADX/9cB/ADZ/9cB/ADb/9cB/ADd/9cB/ADe/+wB/ADf/+wB/ADg/+wB/ADh/+wB/ADi/+wB/ADj/+wB/ADk/+wB/ADl/+wB/AD6/+wB/AEG/+wB/AEI/+wB/AEN/+wB/AEO/+wB/AEP/9cB/AEQ/+wB/AER/9cB/AES/+wB/AET/9cB/AEU/+wB/AEV/9cB/AEX/+wB/AEZ/+wB/AEd/+wB/AEh/+wB/AEr/+wB/AEt/+wB/AEv/+wB/AEx/+wB/AEz/+wB/AE1/+wB/AFD/64B/AFE/9cB/AFG/9cB/AFH/+wB/AFI/9cB/AFK/+wB/AII/5oB/AIM/5oB/AJX/+wB/AJY/64B/AJZ/9cB/AJf/+wB/AJg/9cB/AJi/+wB/AMd/64B/AMe/9cB/AMf/64B/AMg/9cB/AMh/64B/AMi/9cB/AMj/64B/AMl/64B/AMm/9cB/AMn/64B/AMo/9cB/AMp/64B/AMq/9cB/AMr/64B/AMs/9cB/AMt/64B/AMu/9cB/AMv/64B/AMw/9cB/AMx/64B/AMy/9cB/AMz/64B/AM0/9cB/AM2/9cB/AM4/9cB/AM6/9cB/AM8/9cB/ANA/9cB/ANC/9cB/ANE/9cB/ANJ/+wB/ANK/9cB/ANL/+wB/ANM/9cB/ANN/+wB/ANO/9cB/ANP/+wB/ANR/+wB/ANS/9cB/ANT/+wB/ANU/9cB/ANV/+wB/ANW/9cB/ANX/+wB/ANY/9cB/ANZ/+wB/ANa/9cB/ANb/+wB/ANc/9cB/ANd/+wB/ANe/9cB/ANf/+wB/ANg/9cB/ANi/+wB/ANk/+wB/ANm/+wB/ANo/+wB/ANq/+wB/ANs/+wB/ANu/+wB/QAFAFIB/QAKAFIB/QAP/64B/QAR/64B/QAiACkB/QIHAFIB/QII/64B/QILAFIB/QIM/64B/gAP/5oB/gAR/5oB/gAiACkB/gAk/64B/gAm/+wB/gAq/+wB/gAy/+wB/gA0/+wB/gBE/9cB/gBG/9cB/gBH/9cB/gBI/9cB/gBK/+wB/gBQ/+wB/gBR/+wB/gBS/9cB/gBT/+wB/gBU/9cB/gBV/+wB/gBW/+wB/gBY/+wB/gCC/64B/gCD/64B/gCE/64B/gCF/64B/gCG/64B/gCH/64B/gCJ/+wB/gCU/+wB/gCV/+wB/gCW/+wB/gCX/+wB/gCY/+wB/gCa/+wB/gCi/9cB/gCj/9cB/gCk/9cB/gCl/9cB/gCm/9cB/gCn/9cB/gCo/9cB/gCp/9cB/gCq/9cB/gCr/9cB/gCs/9cB/gCt/9cB/gC0/9cB/gC1/9cB/gC2/9cB/gC3/9cB/gC4/9cB/gC6/9cB/gC7/+wB/gC8/+wB/gC9/+wB/gC+/+wB/gDC/64B/gDD/9cB/gDE/64B/gDF/9cB/gDG/64B/gDH/9cB/gDI/+wB/gDJ/9cB/gDK/+wB/gDL/9cB/gDM/+wB/gDN/9cB/gDO/+wB/gDP/9cB/gDR/9cB/gDT/9cB/gDV/9cB/gDX/9cB/gDZ/9cB/gDb/9cB/gDd/9cB/gDe/+wB/gDf/+wB/gDg/+wB/gDh/+wB/gDi/+wB/gDj/+wB/gDk/+wB/gDl/+wB/gD6/+wB/gEG/+wB/gEI/+wB/gEN/+wB/gEO/+wB/gEP/9cB/gEQ/+wB/gER/9cB/gES/+wB/gET/9cB/gEU/+wB/gEV/9cB/gEX/+wB/gEZ/+wB/gEd/+wB/gEh/+wB/gEr/+wB/gEt/+wB/gEv/+wB/gEx/+wB/gEz/+wB/gE1/+wB/gFD/64B/gFE/9cB/gFG/9cB/gFH/+wB/gFI/9cB/gFK/+wB/gII/5oB/gIM/5oB/gJX/+wB/gJY/64B/gJZ/9cB/gJf/+wB/gJg/9cB/gJi/+wB/gMd/64B/gMe/9cB/gMf/64B/gMg/9cB/gMh/64B/gMi/9cB/gMj/64B/gMl/64B/gMm/9cB/gMn/64B/gMo/9cB/gMp/64B/gMq/9cB/gMr/64B/gMs/9cB/gMt/64B/gMu/9cB/gMv/64B/gMw/9cB/gMx/64B/gMy/9cB/gMz/64B/gM0/9cB/gM2/9cB/gM4/9cB/gM6/9cB/gM8/9cB/gNA/9cB/gNC/9cB/gNE/9cB/gNJ/+wB/gNK/9cB/gNL/+wB/gNM/9cB/gNN/+wB/gNO/9cB/gNP/+wB/gNR/+wB/gNS/9cB/gNT/+wB/gNU/9cB/gNV/+wB/gNW/9cB/gNX/+wB/gNY/9cB/gNZ/+wB/gNa/9cB/gNb/+wB/gNc/9cB/gNd/+wB/gNe/9cB/gNf/+wB/gNg/9cB/gNi/+wB/gNk/+wB/gNm/+wB/gNo/+wB/gNq/+wB/gNs/+wB/gNu/+wB/wAFAFIB/wAKAFIB/wAP/64B/wAR/64B/wAiACkB/wIHAFIB/wII/64B/wILAFIB/wIM/64CAAAP/4UCAAAR/4UCAAAiACkCAAAk/4UCAAAm/9cCAAAq/9cCAAAy/9cCAAA0/9cCAABE/5oCAABG/5oCAABH/5oCAABI/5oCAABK/9cCAABQ/8MCAABR/8MCAABS/5oCAABT/8MCAABU/5oCAABV/8MCAABW/64CAABY/8MCAABd/9cCAACC/4UCAACD/4UCAACE/4UCAACF/4UCAACG/4UCAACH/4UCAACJ/9cCAACU/9cCAACV/9cCAACW/9cCAACX/9cCAACY/9cCAACa/9cCAACi/5oCAACj/5oCAACk/5oCAACl/5oCAACm/5oCAACn/5oCAACo/5oCAACp/5oCAACq/5oCAACr/5oCAACs/5oCAACt/5oCAAC0/5oCAAC1/5oCAAC2/5oCAAC3/5oCAAC4/5oCAAC6/5oCAAC7/8MCAAC8/8MCAAC9/8MCAAC+/8MCAADC/4UCAADD/5oCAADE/4UCAADF/5oCAADG/4UCAADH/5oCAADI/9cCAADJ/5oCAADK/9cCAADL/5oCAADM/9cCAADN/5oCAADO/9cCAADP/5oCAADR/5oCAADT/5oCAADV/5oCAADX/5oCAADZ/5oCAADb/5oCAADd/5oCAADe/9cCAADf/9cCAADg/9cCAADh/9cCAADi/9cCAADj/9cCAADk/9cCAADl/9cCAAD6/8MCAAEG/8MCAAEI/8MCAAEN/8MCAAEO/9cCAAEP/5oCAAEQ/9cCAAER/5oCAAES/9cCAAET/5oCAAEU/9cCAAEV/5oCAAEX/8MCAAEZ/8MCAAEd/64CAAEh/64CAAEr/8MCAAEt/8MCAAEv/8MCAAEx/8MCAAEz/8MCAAE1/8MCAAE8/9cCAAE+/9cCAAFA/9cCAAFD/4UCAAFE/5oCAAFG/5oCAAFH/9cCAAFI/5oCAAFK/64CAAII/4UCAAIM/4UCAAJX/8MCAAJY/4UCAAJZ/5oCAAJf/9cCAAJg/5oCAAJi/8MCAAMd/4UCAAMe/5oCAAMf/4UCAAMg/5oCAAMh/4UCAAMi/5oCAAMj/4UCAAMl/4UCAAMm/5oCAAMn/4UCAAMo/5oCAAMp/4UCAAMq/5oCAAMr/4UCAAMs/5oCAAMt/4UCAAMu/5oCAAMv/4UCAAMw/5oCAAMx/4UCAAMy/5oCAAMz/4UCAAM0/5oCAAM2/5oCAAM4/5oCAAM6/5oCAAM8/5oCAANA/5oCAANC/5oCAANE/5oCAANJ/9cCAANK/5oCAANL/9cCAANM/5oCAANN/9cCAANO/5oCAANP/9cCAANR/9cCAANS/5oCAANT/9cCAANU/5oCAANV/9cCAANW/5oCAANX/9cCAANY/5oCAANZ/9cCAANa/5oCAANb/9cCAANc/5oCAANd/9cCAANe/5oCAANf/9cCAANg/5oCAANi/8MCAANk/8MCAANm/8MCAANo/8MCAANq/8MCAANs/8MCAANu/8MCAQAFAFICAQAKAFICAQAP/64CAQAR/64CAQAiACkCAQIHAFICAQII/64CAQILAFICAQIM/64CAgA3/64CAgEk/64CAgEm/64CAgFx/64CAgGd/64CAgGm/64CAgG8/64CAgHE/64CAgHc/9cCAgHk/9cCAgKp/64CAgKq/9cCAgK1/64CAgK2/9cCAgK9/64CAgK+/9cCAgMX/64CAgMY/9cCAgOP/64CAwA3/64CAwEk/64CAwEm/64CAwFx/64CAwGd/64CAwGm/64CAwG8/64CAwHE/64CAwHc/9cCAwHk/9cCAwKp/64CAwKq/9cCAwK1/64CAwK2/9cCAwK9/64CAwK+/9cCAwMX/64CAwMY/9cCAwOP/64CBAA3/64CBAEk/64CBAEm/64CBAFx/64CBAGd/64CBAGm/64CBAG8/64CBAHE/64CBAHc/9cCBAHk/9cCBAKp/64CBAKq/9cCBAK1/64CBAK2/9cCBAK9/64CBAK+/9cCBAMX/64CBAMY/9cCBAOP/64CBgAk/3ECBgA3ACkCBgA5ACkCBgA6ACkCBgA8ABQCBgBE/64CBgBG/4UCBgBH/4UCBgBI/4UCBgBK/8MCBgBQ/8MCBgBR/8MCBgBS/4UCBgBT/8MCBgBU/4UCBgBV/8MCBgBW/8MCBgBY/8MCBgCC/3ECBgCD/3ECBgCE/3ECBgCF/3ECBgCG/3ECBgCH/3ECBgCfABQCBgCi/4UCBgCj/64CBgCk/64CBgCl/64CBgCm/64CBgCn/64CBgCo/64CBgCp/4UCBgCq/4UCBgCr/4UCBgCs/4UCBgCt/4UCBgC0/4UCBgC1/4UCBgC2/4UCBgC3/4UCBgC4/4UCBgC6/4UCBgC7/8MCBgC8/8MCBgC9/8MCBgC+/8MCBgDC/3ECBgDD/64CBgDE/3ECBgDF/64CBgDG/3ECBgDH/64CBgDJ/4UCBgDL/4UCBgDN/4UCBgDP/4UCBgDR/4UCBgDT/4UCBgDV/4UCBgDX/4UCBgDZ/4UCBgDb/4UCBgDd/4UCBgDf/8MCBgDh/8MCBgDj/8MCBgDl/8MCBgD6/8MCBgEG/8MCBgEI/8MCBgEN/8MCBgEP/4UCBgER/4UCBgET/4UCBgEV/4UCBgEX/8MCBgEZ/8MCBgEd/8MCBgEh/8MCBgEkACkCBgEmACkCBgEr/8MCBgEt/8MCBgEv/8MCBgEx/8MCBgEz/8MCBgE1/8MCBgE2ACkCBgE4ABQCBgE6ABQCBgFD/3ECBgFE/64CBgFG/64CBgFI/4UCBgFK/8MCBgFW/3ECBgFf/3ECBgFi/3ECBgFp/3ECBgF5/64CBgF6/9cCBgF7/9cCBgF+/64CBgGB/8MCBgGC/9cCBgGD/9cCBgGE/9cCBgGH/9cCBgGJ/9cCBgGM/64CBgGO/8MCBgGP/64CBgGQ/64CBgGT/64CBgGZ/64CBgGk/4UCBgGq/3ECBgGu/4UCBgG1/4UCBgHK/9cCBgHO/3ECBgHP/4UCBgHV/3ECBgHY/4UCBgHb/4UCBgHe/4UCBgHq/4UCBgHt/4UCBgHu/8MCBgHy/3ECBgH6ACkCBgH8ACkCBgH+ACkCBgIAABQCBgJX/8MCBgJY/3ECBgJZ/64CBgJg/4UCBgJi/8MCBgJq/4UCBgJy/3ECBgJz/3ECBgJ9/+wCBgJ//4UCBgKF/4UCBgKH/4UCBgKJ/4UCBgKN/4UCBgKy/4UCBgK0/4UCBgLO/4UCBgLP/3ECBgLZ/3ECBgLa/9cCBgLb/3ECBgLc/9cCBgLd/3ECBgLe/9cCBgLg/4UCBgLi/9cCBgLk/9cCBgLw/4UCBgLy/4UCBgL0/4UCBgMJ/3ECBgMK/4UCBgML/3ECBgMM/4UCBgMR/4UCBgMS/3ECBgMW/4UCBgMa/4UCBgMb/4UCBgMc/3ECBgMd/3ECBgMe/64CBgMf/3ECBgMg/64CBgMh/3ECBgMi/64CBgMj/3ECBgMl/3ECBgMm/64CBgMn/3ECBgMo/64CBgMp/3ECBgMq/64CBgMr/3ECBgMs/64CBgMt/3ECBgMu/64CBgMv/3ECBgMw/64CBgMx/3ECBgMy/64CBgMz/3ECBgM0/64CBgM2/4UCBgM4/4UCBgM6/4UCBgM8/4UCBgNA/4UCBgNC/4UCBgNE/4UCBgNK/4UCBgNM/4UCBgNO/4UCBgNS/4UCBgNU/4UCBgNW/4UCBgNY/4UCBgNa/4UCBgNc/4UCBgNe/4UCBgNg/4UCBgNi/8MCBgNk/8MCBgNm/8MCBgNo/8MCBgNq/8MCBgNs/8MCBgNu/8MCBgNvABQCBgNxABQCBgNzABQCBgOPACkCBwAk/3ECBwA3ACkCBwA5ACkCBwA6ACkCBwA8ABQCBwBE/64CBwBG/4UCBwBH/4UCBwBI/4UCBwBK/8MCBwBQ/8MCBwBR/8MCBwBS/4UCBwBT/8MCBwBU/4UCBwBV/8MCBwBW/8MCBwBY/8MCBwCC/3ECBwCD/3ECBwCE/3ECBwCF/3ECBwCG/3ECBwCH/3ECBwCfABQCBwCi/4UCBwCj/64CBwCk/64CBwCl/64CBwCm/64CBwCn/64CBwCo/64CBwCp/4UCBwCq/4UCBwCr/4UCBwCs/4UCBwCt/4UCBwC0/4UCBwC1/4UCBwC2/4UCBwC3/4UCBwC4/4UCBwC6/4UCBwC7/8MCBwC8/8MCBwC9/8MCBwC+/8MCBwDC/3ECBwDD/64CBwDE/3ECBwDF/64CBwDG/3ECBwDH/64CBwDJ/4UCBwDL/4UCBwDN/4UCBwDP/4UCBwDR/4UCBwDT/4UCBwDV/4UCBwDX/4UCBwDZ/4UCBwDb/4UCBwDd/4UCBwDf/8MCBwDh/8MCBwDj/8MCBwDl/8MCBwD6/8MCBwEG/8MCBwEI/8MCBwEN/8MCBwEP/4UCBwER/4UCBwET/4UCBwEV/4UCBwEX/8MCBwEZ/8MCBwEd/8MCBwEh/8MCBwEkACkCBwEmACkCBwEr/8MCBwEt/8MCBwEv/8MCBwEx/8MCBwEz/8MCBwE1/8MCBwE2ACkCBwE4ABQCBwE6ABQCBwFD/3ECBwFE/64CBwFG/64CBwFI/4UCBwFK/8MCBwFW/3ECBwFf/3ECBwFi/3ECBwFp/3ECBwF5/64CBwF6/9cCBwF7/9cCBwF+/64CBwGB/8MCBwGC/9cCBwGD/9cCBwGE/9cCBwGH/9cCBwGJ/9cCBwGM/64CBwGO/8MCBwGP/64CBwGQ/64CBwGT/64CBwGZ/64CBwGk/4UCBwGq/3ECBwGu/4UCBwG1/4UCBwHK/9cCBwHO/3ECBwHP/4UCBwHV/3ECBwHY/4UCBwHb/4UCBwHe/4UCBwHq/4UCBwHt/4UCBwHu/8MCBwHy/3ECBwH6ACkCBwH8ACkCBwH+ACkCBwIAABQCBwJX/8MCBwJY/3ECBwJZ/64CBwJg/4UCBwJi/8MCBwJq/4UCBwJy/3ECBwJz/3ECBwJ9/+wCBwJ//4UCBwKF/4UCBwKH/4UCBwKJ/4UCBwKN/4UCBwKy/4UCBwK0/4UCBwLO/4UCBwLP/3ECBwLZ/3ECBwLa/9cCBwLb/3ECBwLc/9cCBwLd/3ECBwLe/9cCBwLg/4UCBwLi/9cCBwLk/9cCBwLw/4UCBwLy/4UCBwL0/4UCBwMJ/3ECBwMK/4UCBwML/3ECBwMM/4UCBwMR/4UCBwMS/3ECBwMW/4UCBwMa/4UCBwMb/4UCBwMc/3ECBwMd/3ECBwMe/64CBwMf/3ECBwMg/64CBwMh/3ECBwMi/64CBwMj/3ECBwMl/3ECBwMm/64CBwMn/3ECBwMo/64CBwMp/3ECBwMq/64CBwMr/3ECBwMs/64CBwMt/3ECBwMu/64CBwMv/3ECBwMw/64CBwMx/3ECBwMy/64CBwMz/3ECBwM0/64CBwM2/4UCBwM4/4UCBwM6/4UCBwM8/4UCBwNA/4UCBwNC/4UCBwNE/4UCBwNK/4UCBwNM/4UCBwNO/4UCBwNS/4UCBwNU/4UCBwNW/4UCBwNY/4UCBwNa/4UCBwNc/4UCBwNe/4UCBwNg/4UCBwNi/8MCBwNk/8MCBwNm/8MCBwNo/8MCBwNq/8MCBwNs/8MCBwNu/8MCBwNvABQCBwNxABQCBwNzABQCBwOPACkCCAAm/5oCCAAq/5oCCAAy/5oCCAA0/5oCCAA3/3ECCAA4/9cCCAA5/4UCCAA6/4UCCAA8/4UCCACJ/5oCCACU/5oCCACV/5oCCACW/5oCCACX/5oCCACY/5oCCACa/5oCCACb/9cCCACc/9cCCACd/9cCCACe/9cCCACf/4UCCADI/5oCCADK/5oCCADM/5oCCADO/5oCCADe/5oCCADg/5oCCADi/5oCCADk/5oCCAEO/5oCCAEQ/5oCCAES/5oCCAEU/5oCCAEk/3ECCAEm/3ECCAEq/9cCCAEs/9cCCAEu/9cCCAEw/9cCCAEy/9cCCAE0/9cCCAE2/4UCCAE4/4UCCAE6/4UCCAFH/5oCCAFm/64CCAFt/64CCAFx/3ECCAFy/4UCCAFz/5oCCAF1/4UCCAF4/4UCCAGF/9cCCAGd/3ECCAGf/5oCCAGm/3ECCAG4/5oCCAG7/5oCCAG8/3ECCAG+/64CCAHB/1wCCAHE/3ECCAHc/5oCCAHh/4UCCAHk/5oCCAH6/4UCCAH8/4UCCAH+/4UCCAIA/4UCCAJU/4UCCAJf/5oCCAJh/9cCCAJs/5oCCAJ8/1wCCAJ+/5oCCAKA/4UCCAKC/4UCCAKE/5oCCAKG/5oCCAKI/5oCCAKK/5oCCAKM/5oCCAKp/3ECCAKq/5oCCAKx/5oCCAKz/5oCCAK1/3ECCAK2/5oCCAK3/4UCCAK5/4UCCAK9/3ECCAK+/5oCCAK//1wCCALA/4UCCALB/1wCCALC/4UCCALF/4UCCALH/4UCCALU/1wCCALV/4UCCALv/5oCCALx/5oCCALz/5oCCAL9/1wCCAL+/4UCCAMN/4UCCAMO/5oCCAMP/4UCCAMQ/5oCCAMV/5oCCAMX/3ECCAMY/5oCCANJ/5oCCANL/5oCCANN/5oCCANP/5oCCANR/5oCCANT/5oCCANV/5oCCANX/5oCCANZ/5oCCANb/5oCCANd/5oCCANf/5oCCANh/9cCCANj/9cCCANl/9cCCANn/9cCCANp/9cCCANr/9cCCANt/9cCCANv/4UCCANx/4UCCANz/4UCCAOP/3ECCgAk/3ECCgA3ACkCCgA5ACkCCgA6ACkCCgA8ABQCCgBE/64CCgBG/4UCCgBH/4UCCgBI/4UCCgBK/8MCCgBQ/8MCCgBR/8MCCgBS/4UCCgBT/8MCCgBU/4UCCgBV/8MCCgBW/8MCCgBY/8MCCgCC/3ECCgCD/3ECCgCE/3ECCgCF/3ECCgCG/3ECCgCH/3ECCgCfABQCCgCi/4UCCgCj/64CCgCk/64CCgCl/64CCgCm/64CCgCn/64CCgCo/64CCgCp/4UCCgCq/4UCCgCr/4UCCgCs/4UCCgCt/4UCCgC0/4UCCgC1/4UCCgC2/4UCCgC3/4UCCgC4/4UCCgC6/4UCCgC7/8MCCgC8/8MCCgC9/8MCCgC+/8MCCgDC/3ECCgDD/64CCgDE/3ECCgDF/64CCgDG/3ECCgDH/64CCgDJ/4UCCgDL/4UCCgDN/4UCCgDP/4UCCgDR/4UCCgDT/4UCCgDV/4UCCgDX/4UCCgDZ/4UCCgDb/4UCCgDd/4UCCgDf/8MCCgDh/8MCCgDj/8MCCgDl/8MCCgD6/8MCCgEG/8MCCgEI/8MCCgEN/8MCCgEP/4UCCgER/4UCCgET/4UCCgEV/4UCCgEX/8MCCgEZ/8MCCgEd/8MCCgEh/8MCCgEkACkCCgEmACkCCgEr/8MCCgEt/8MCCgEv/8MCCgEx/8MCCgEz/8MCCgE1/8MCCgE2ACkCCgE4ABQCCgE6ABQCCgFD/3ECCgFE/64CCgFG/64CCgFI/4UCCgFK/8MCCgFW/3ECCgFf/3ECCgFi/3ECCgFp/3ECCgF5/64CCgF6/9cCCgF7/9cCCgF+/64CCgGB/8MCCgGC/9cCCgGD/9cCCgGE/9cCCgGH/9cCCgGJ/9cCCgGM/64CCgGO/8MCCgGP/64CCgGQ/64CCgGT/64CCgGZ/64CCgGk/4UCCgGq/3ECCgGu/4UCCgG1/4UCCgHK/9cCCgHO/3ECCgHP/4UCCgHV/3ECCgHY/4UCCgHb/4UCCgHe/4UCCgHq/4UCCgHt/4UCCgHu/8MCCgHy/3ECCgH6ACkCCgH8ACkCCgH+ACkCCgIAABQCCgJX/8MCCgJY/3ECCgJZ/64CCgJg/4UCCgJi/8MCCgJq/4UCCgJy/3ECCgJz/3ECCgJ9/+wCCgJ//4UCCgKF/4UCCgKH/4UCCgKJ/4UCCgKN/4UCCgKy/4UCCgK0/4UCCgLO/4UCCgLP/3ECCgLZ/3ECCgLa/9cCCgLb/3ECCgLc/9cCCgLd/3ECCgLe/9cCCgLg/4UCCgLi/9cCCgLk/9cCCgLw/4UCCgLy/4UCCgL0/4UCCgMJ/3ECCgMK/4UCCgML/3ECCgMM/4UCCgMR/4UCCgMS/3ECCgMW/4UCCgMa/4UCCgMb/4UCCgMc/3ECCgMd/3ECCgMe/64CCgMf/3ECCgMg/64CCgMh/3ECCgMi/64CCgMj/3ECCgMl/3ECCgMm/64CCgMn/3ECCgMo/64CCgMp/3ECCgMq/64CCgMr/3ECCgMs/64CCgMt/3ECCgMu/64CCgMv/3ECCgMw/64CCgMx/3ECCgMy/64CCgMz/3ECCgM0/64CCgM2/4UCCgM4/4UCCgM6/4UCCgM8/4UCCgNA/4UCCgNC/4UCCgNE/4UCCgNK/4UCCgNM/4UCCgNO/4UCCgNS/4UCCgNU/4UCCgNW/4UCCgNY/4UCCgNa/4UCCgNc/4UCCgNe/4UCCgNg/4UCCgNi/8MCCgNk/8MCCgNm/8MCCgNo/8MCCgNq/8MCCgNs/8MCCgNu/8MCCgNvABQCCgNxABQCCgNzABQCCgOPACkCDAAm/5oCDAAq/5oCDAAy/5oCDAA0/5oCDAA3/3ECDAA4/9cCDAA5/4UCDAA6/4UCDAA8/4UCDACJ/5oCDACU/5oCDACV/5oCDACW/5oCDACX/5oCDACY/5oCDACa/5oCDACb/9cCDACc/9cCDACd/9cCDACe/9cCDACf/4UCDADI/5oCDADK/5oCDADM/5oCDADO/5oCDADe/5oCDADg/5oCDADi/5oCDADk/5oCDAEO/5oCDAEQ/5oCDAES/5oCDAEU/5oCDAEk/3ECDAEm/3ECDAEq/9cCDAEs/9cCDAEu/9cCDAEw/9cCDAEy/9cCDAE0/9cCDAE2/4UCDAE4/4UCDAE6/4UCDAFH/5oCDAFm/64CDAFt/64CDAFx/3ECDAFy/4UCDAFz/5oCDAF1/4UCDAF4/4UCDAGF/9cCDAGd/3ECDAGf/5oCDAGm/3ECDAG4/5oCDAG7/5oCDAG8/3ECDAG+/64CDAHB/1wCDAHE/3ECDAHc/5oCDAHh/4UCDAHk/5oCDAH6/4UCDAH8/4UCDAH+/4UCDAIA/4UCDAJU/4UCDAJf/5oCDAJh/9cCDAJs/5oCDAJ8/1wCDAJ+/5oCDAKA/4UCDAKC/4UCDAKE/5oCDAKG/5oCDAKI/5oCDAKK/5oCDAKM/5oCDAKp/3ECDAKq/5oCDAKx/5oCDAKz/5oCDAK1/3ECDAK2/5oCDAK3/4UCDAK5/4UCDAK9/3ECDAK+/5oCDAK//1wCDALA/4UCDALB/1wCDALC/4UCDALF/4UCDALH/4UCDALU/1wCDALV/4UCDALv/5oCDALx/5oCDALz/5oCDAL9/1wCDAL+/4UCDAMN/4UCDAMO/5oCDAMP/4UCDAMQ/5oCDAMV/5oCDAMX/3ECDAMY/5oCDANJ/5oCDANL/5oCDANN/5oCDANP/5oCDANR/5oCDANT/5oCDANV/5oCDANX/5oCDANZ/5oCDANb/5oCDANd/5oCDANf/5oCDANh/9cCDANj/9cCDANl/9cCDANn/9cCDANp/9cCDANr/9cCDANt/9cCDANv/4UCDANx/4UCDANz/4UCDAOP/3ECIQFx/9cCIQFy/+wCIQF4/+wCIQJU/+wCUwAP/8MCUwAR/8MCUwII/8MCUwIM/8MCVAAP/4UCVAAR/4UCVAFW/4UCVAFf/4UCVAFi/4UCVAFm/9cCVAFp/4UCVAFt/9cCVAFz/8MCVAF2/+wCVAF5/5oCVAF6/64CVAF7/8MCVAF8/8MCVAF9/8MCVAF+/5oCVAGB/8MCVAGC/64CVAGE/8MCVAGG/8MCVAGH/8MCVAGJ/8MCVAGM/5oCVAGO/5oCVAGP/5oCVAGQ/5oCVAGS/8MCVAGT/5oCVAGV/8MCVAGW/8MCVAGY/8MCVAGZ/5oCVAGa/8MCVAGb/8MCVAII/4UCVAIM/4UCVAIh/+wCWAAF/3ECWAAK/3ECWAAm/9cCWAAq/9cCWAAtAQoCWAAy/9cCWAA0/9cCWAA3/3ECWAA5/64CWAA6/64CWAA8/4UCWACJ/9cCWACU/9cCWACV/9cCWACW/9cCWACX/9cCWACY/9cCWACa/9cCWACf/4UCWADI/9cCWADK/9cCWADM/9cCWADO/9cCWADe/9cCWADg/9cCWADi/9cCWADk/9cCWAEO/9cCWAEQ/9cCWAES/9cCWAEU/9cCWAEk/3ECWAEm/3ECWAE2/64CWAE4/4UCWAE6/4UCWAFH/9cCWAH6/64CWAH8/64CWAH+/64CWAIA/4UCWAIH/3ECWAIL/3ECWAJf/9cCWANJ/9cCWANL/9cCWANN/9cCWANP/9cCWANR/9cCWANT/9cCWANV/9cCWANX/9cCWANZ/9cCWANb/9cCWANd/9cCWANf/9cCWANv/4UCWANx/4UCWANz/4UCWAOP/3ECWQAF/+wCWQAK/+wCWQIH/+wCWQIL/+wCWgAP/64CWgAR/64CWgFW/9cCWgFf/9cCWgFi/9cCWgFk/+wCWgFp/9cCWgFw/+wCWgFx/8MCWgFy/+wCWgF0/9cCWgF1/+wCWgF4/+wCWgGI/+wCWgII/64CWgIM/64CWgJU/+wCYABJAFICYABXAFICYABZAGYCYABaAGYCYABbAGYCYABcAGYCYAC/AGYCYAElAFICYAEnAFICYAE3AGYCYAH7AGYCYAH9AGYCYAI0AFICYAI1AFICYAJdAFICYAJeAFICYANwAGYCYAONAFICYAOQAFICYgBJAGYCYgBXAGYCYgBZAGYCYgBaAGYCYgBbAGYCYgBcAGYCYgC/AGYCYgElAGYCYgEnAGYCYgE3AGYCYgH7AGYCYgH9AGYCYgI0AGYCYgI1AGYCYgJdAGYCYgJeAGYCYgNwAGYCYgONAGYCYgOQAGYCagAF/+wCagAK/+wCagIH/+wCagIL/+wCbAAP/64CbAAR/64CbAGd/+wCbAGk/9cCbAGm/+wCbAGo/9cCbAGq/9cCbAGu/9cCbAGw/9cCbAGx/+wCbAG1/9cCbAG8/8MCbAG9/9cCbAG//9cCbAHB/9cCbAHE/+wCbAHH/+wCbAHO/+wCbAHV/+wCbAHy/+wCbAII/64CbAIM/64CbAJy/9cCbAJz/+wCbAJ6/+wCbAJ8/9cCbAKA/+wCbAKC/+wCbAKf/9cCbAKh/+wCbAKp/+wCbAK1/8MCbAK3/+wCbAK5/+wCbAK7/9cCbAK9/+wCbAK//9cCbALB/9cCbALK/9cCbALO/9cCbALP/+wCbALU/9cCbALZ/9cCbALb/9cCbALd/9cCbALl/9cCbALn/+wCbAL1/+wCbAL3/9cCbAL5/9cCbAL7/9cCbAL9/9cCbAMF/9cCbAMH/9cCbAMN/9cCbAMP/9cCbAMR/9cCbAMS/+wCbAMX/+wCbAMb/9cCbAMc/+wCbQAP/64CbQAR/64CbQHO/9cCbQHV/9cCbQHy/9cCbQII/64CbQIM/64CbQJz/9cCbQLP/9cCbQMS/9cCbQMc/9cCbgAF/64CbgAK/64CbgGd/9cCbgGm/9cCbgG8/64CbgHB/64CbgHE/9cCbgHc/9cCbgHk/9cCbgIH/64CbgIL/64CbgJ8/64CbgKA/8MCbgKC/8MCbgKp/9cCbgKq/9cCbgK1/64CbgK2/9cCbgK3/8MCbgK5/8MCbgK9/9cCbgK+/9cCbgK//64CbgLB/64CbgLU/64CbgL9/64CbgMN/5oCbgMP/5oCbgMX/9cCbgMY/9cCbwAF/4UCbwAK/4UCbwHQ/9cCbwHc/5oCbwHd/8MCbwHf/9cCbwHh/64CbwHk/5oCbwH2/8MCbwIH/4UCbwIL/4UCbwJt/9cCbwKB/9cCbwKD/9cCbwKL/9cCbwKg/9cCbwKq/5oCbwK2/5oCbwK4/8MCbwK6/8MCbwK8/9cCbwK+/5oCbwLA/64CbwLC/64CbwLG/9cCbwLI/9cCbwLL/9cCbwLV/64CbwLm/9cCbwLq/9cCbwL4/8MCbwL6/8MCbwL8/8MCbwL+/64CbwMG/9cCbwMI/9cCbwMO/5oCbwMQ/5oCbwMY/5oCcAGf/9cCcAG4/9cCcAG7/9cCcAG+/9cCcAHh/9cCcAJs/9cCcAJ+/9cCcAKE/9cCcAKG/9cCcAKI/9cCcAKK/9cCcAKM/9cCcAKx/9cCcAKz/9cCcALA/9cCcALC/9cCcALF/9cCcALH/9cCcALV/9cCcALv/9cCcALx/9cCcALz/9cCcAL+/9cCcAMJ/9cCcAML/9cCcAMO/9cCcAMQ/9cCcAMV/9cCcgAF/3ECcgAK/3ECcgGd/5oCcgGm/5oCcgG8/3ECcgG+/9cCcgHB/5oCcgHE/5oCcgHc/9cCcgHh/9cCcgHk/9cCcgIH/3ECcgIL/3ECcgJu/9cCcgJ8/5oCcgKA/64CcgKC/64CcgKX/9cCcgKb/9cCcgKn/9cCcgKp/5oCcgKq/9cCcgK1/3ECcgK2/9cCcgK3/4UCcgK5/4UCcgK9/5oCcgK+/9cCcgK//5oCcgLA/9cCcgLB/5oCcgLC/9cCcgLF/5oCcgLH/5oCcgLU/5oCcgLV/9cCcgLh/9cCcgLj/9cCcgL9/5oCcgL+/9cCcgMD/9cCcgMN/3ECcgMO/9cCcgMP/3ECcgMQ/9cCcgMX/5oCcgMY/9cCcwAF/3ECcwAK/3ECcwHP/9cCcwHY/9cCcwHb/9cCcwHc/5oCcwHd/8MCcwHe/9cCcwHh/8MCcwHk/5oCcwHq/9cCcwHt/9cCcwH2/8MCcwIH/3ECcwIL/3ECcwJq/9cCcwJt/9cCcwJ9/+wCcwJ//9cCcwKB/9cCcwKD/9cCcwKF/9cCcwKH/9cCcwKJ/9cCcwKL/9cCcwKN/9cCcwKq/5oCcwKy/9cCcwK0/9cCcwK2/5oCcwK4/9cCcwK6/9cCcwK+/5oCcwLA/8MCcwLC/8MCcwLG/9cCcwLI/9cCcwLV/8MCcwLg/9cCcwLw/9cCcwLy/9cCcwL0/9cCcwL4/8MCcwL6/8MCcwL8/8MCcwL+/8MCcwMK/9cCcwMM/9cCcwMO/4UCcwMQ/4UCcwMW/9cCcwMY/5oCcwMa/9cCdAAF/3ECdAAK/3ECdAGd/5oCdAGm/5oCdAG8/3ECdAG+/9cCdAHB/5oCdAHE/5oCdAHc/9cCdAHh/9cCdAHk/9cCdAIH/3ECdAIL/3ECdAJu/9cCdAJ8/5oCdAKA/64CdAKC/64CdAKX/9cCdAKb/9cCdAKn/9cCdAKp/5oCdAKq/9cCdAK1/3ECdAK2/9cCdAK3/4UCdAK5/4UCdAK9/5oCdAK+/9cCdAK//5oCdALA/9cCdALB/5oCdALC/9cCdALF/5oCdALH/5oCdALU/5oCdALV/9cCdALh/9cCdALj/9cCdAL9/5oCdAL+/9cCdAMD/9cCdAMN/3ECdAMO/9cCdAMP/3ECdAMQ/9cCdAMX/5oCdAMY/9cCdQAF/3ECdQAK/3ECdQHP/9cCdQHY/9cCdQHb/9cCdQHc/5oCdQHd/8MCdQHe/9cCdQHh/8MCdQHk/5oCdQHq/9cCdQHt/9cCdQH2/8MCdQIH/3ECdQIL/3ECdQJq/9cCdQJt/9cCdQJ9/+wCdQJ//9cCdQKB/9cCdQKD/9cCdQKF/9cCdQKH/9cCdQKJ/9cCdQKL/9cCdQKN/9cCdQKq/5oCdQKy/9cCdQK0/9cCdQK2/5oCdQK4/9cCdQK6/9cCdQK+/5oCdQLA/8MCdQLC/8MCdQLG/9cCdQLI/9cCdQLV/8MCdQLg/9cCdQLw/9cCdQLy/9cCdQL0/9cCdQL4/8MCdQL6/8MCdQL8/8MCdQL+/8MCdQMK/9cCdQMM/9cCdQMO/4UCdQMQ/4UCdQMW/9cCdQMY/5oCdQMa/9cCdgMN/+wCdgMP/+wCeAMN/+wCeAMP/+wCegAP/64CegAR/64CegII/64CegIM/64CegKA/+wCegKC/+wCegK3/+wCegK5/+wCegMN/9cCegMP/9cCfAAP/3ECfAAR/3ECfAGk/8MCfAGq/64CfAGu/8MCfAG1/8MCfAHO/9cCfAHV/9cCfAHy/9cCfAII/3ECfAIM/3ECfAJy/64CfAJz/9cCfALO/8MCfALP/9cCfALZ/64CfALb/64CfALd/64CfAMJ/64CfAML/64CfAMR/8MCfAMS/9cCfAMb/8MCfAMc/9cCfQAF/+wCfQAK/+wCfQHQ/9cCfQHc/+wCfQHd/+wCfQHf/9cCfQHh/+wCfQHk/+wCfQH2/+wCfQIH/+wCfQIL/+wCfQKg/9cCfQKq/+wCfQK2/+wCfQK8/9cCfQK+/+wCfQLA/+wCfQLC/+wCfQLL/9cCfQLV/+wCfQLm/9cCfQL4/+wCfQL6/+wCfQL8/+wCfQL+/+wCfQMG/9cCfQMI/9cCfQMO/+wCfQMQ/+wCfQMY/+wCfgAP/64CfgAR/64CfgGd/+wCfgGk/9cCfgGm/+wCfgGo/9cCfgGq/9cCfgGu/9cCfgGw/9cCfgGx/+wCfgG1/9cCfgG8/8MCfgG9/9cCfgG//9cCfgHB/9cCfgHE/+wCfgHH/+wCfgHO/+wCfgHV/+wCfgHy/+wCfgII/64CfgIM/64CfgJy/9cCfgJz/+wCfgJ6/+wCfgJ8/9cCfgKA/+wCfgKC/+wCfgKf/9cCfgKh/+wCfgKp/+wCfgK1/8MCfgK3/+wCfgK5/+wCfgK7/9cCfgK9/+wCfgK//9cCfgLB/9cCfgLK/9cCfgLO/9cCfgLP/+wCfgLU/9cCfgLZ/9cCfgLb/9cCfgLd/9cCfgLl/9cCfgLn/+wCfgL1/+wCfgL3/9cCfgL5/9cCfgL7/9cCfgL9/9cCfgMF/9cCfgMH/9cCfgMN/9cCfgMP/9cCfgMR/9cCfgMS/+wCfgMX/+wCfgMb/9cCfgMc/+wCfwAF/+wCfwAK/+wCfwHQ/9cCfwHc/+wCfwHd/+wCfwHf/9cCfwHh/+wCfwHk/+wCfwH2/+wCfwIH/+wCfwIL/+wCfwKg/9cCfwKq/+wCfwK2/+wCfwK8/9cCfwK+/+wCfwLA/+wCfwLC/+wCfwLL/9cCfwLV/+wCfwLm/9cCfwL4/+wCfwL6/+wCfwL8/+wCfwL+/+wCfwMG/9cCfwMI/9cCfwMO/+wCfwMQ/+wCfwMY/+wCgAAP/4UCgAAR/4UCgAGf/+wCgAGk/5oCgAGq/3ECgAGu/5oCgAG1/5oCgAG4/+wCgAG7/+wCgAG+/8MCgAHJ/+wCgAHO/64CgAHP/9cCgAHV/64CgAHY/9cCgAHb/9cCgAHe/9cCgAHh/9cCgAHq/9cCgAHrAGYCgAHt/9cCgAHu/+wCgAHy/64CgAH0AGYCgAII/4UCgAIM/4UCgAJq/9cCgAJs/+wCgAJy/3ECgAJz/64CgAJ+/+wCgAJ//9cCgAKE/+wCgAKF/9cCgAKG/+wCgAKH/9cCgAKI/+wCgAKJ/9cCgAKK/+wCgAKM/+wCgAKN/9cCgAKYAGYCgAKoAGYCgAKx/+wCgAKy/9cCgAKz/+wCgAK0/9cCgALA/9cCgALC/9cCgALF/9cCgALG/8MCgALH/9cCgALI/8MCgALO/5oCgALP/64CgALV/9cCgALZ/3ECgALb/3ECgALd/3ECgALg/9cCgALv/+wCgALw/9cCgALx/+wCgALy/9cCgALz/+wCgAL0/9cCgAL+/9cCgAMJ/3ECgAMK/9cCgAML/3ECgAMM/9cCgAMR/5oCgAMS/64CgAMV/+wCgAMW/9cCgAMa/9cCgAMb/5oCgAMc/64CgQAP/64CgQAR/64CgQHO/9cCgQHV/9cCgQHy/9cCgQII/64CgQIM/64CgQJz/9cCgQLP/9cCgQMS/9cCgQMc/9cCggAP/4UCggAR/4UCggGf/+wCggGk/5oCggGq/3ECggGu/5oCggG1/5oCggG4/+wCggG7/+wCggG+/8MCggHJ/+wCggHO/64CggHP/9cCggHV/64CggHY/9cCggHb/9cCggHe/9cCggHh/9cCggHq/9cCggHrAGYCggHt/9cCggHu/+wCggHy/64CggH0AGYCggII/4UCggIM/4UCggJq/9cCggJs/+wCggJy/3ECggJz/64CggJ+/+wCggJ//9cCggKE/+wCggKF/9cCggKG/+wCggKH/9cCggKI/+wCggKJ/9cCggKK/+wCggKM/+wCggKN/9cCggKYAGYCggKoAGYCggKx/+wCggKy/9cCggKz/+wCggK0/9cCggLA/9cCggLC/9cCggLF/9cCggLG/8MCggLH/9cCggLI/8MCggLO/5oCggLP/64CggLV/9cCggLZ/3ECggLb/3ECggLd/3ECggLg/9cCggLv/+wCggLw/9cCggLx/+wCggLy/9cCggLz/+wCggL0/9cCggL+/9cCggMJ/3ECggMK/9cCggML/3ECggMM/9cCggMR/5oCggMS/64CggMV/+wCggMW/9cCggMa/9cCggMb/5oCggMc/64CgwAP/64CgwAR/64CgwHO/9cCgwHV/9cCgwHy/9cCgwII/64CgwIM/64CgwJz/9cCgwLP/9cCgwMS/9cCgwMc/9cChAAP/64ChAAR/64ChAHO/9cChAHV/9cChAHy/9cChAII/64ChAIM/64ChAJz/9cChALP/9cChAMS/9cChAMc/9cChQAP/64ChQAR/64ChQHO/9cChQHV/9cChQHy/9cChQII/64ChQIM/64ChQJz/9cChQLP/9cChQMS/9cChQMc/9cChgAP/64ChgAR/64ChgGd/+wChgGk/9cChgGm/+wChgGo/9cChgGq/9cChgGu/9cChgGw/9cChgGx/+wChgG1/9cChgG8/8MChgG9/9cChgG//9cChgHB/9cChgHE/+wChgHH/+wChgHO/+wChgHV/+wChgHy/+wChgII/64ChgIM/64ChgJy/9cChgJz/+wChgJ6/+wChgJ8/9cChgKA/+wChgKC/+wChgKf/9cChgKh/+wChgKp/+wChgK1/8MChgK3/+wChgK5/+wChgK7/9cChgK9/+wChgK//9cChgLB/9cChgLK/9cChgLO/9cChgLP/+wChgLU/9cChgLZ/9cChgLb/9cChgLd/9cChgLl/9cChgLn/+wChgL1/+wChgL3/9cChgL5/9cChgL7/9cChgL9/9cChgMF/9cChgMH/9cChgMN/9cChgMP/9cChgMR/9cChgMS/+wChgMX/+wChgMb/9cChgMc/+wChwAF/+wChwAK/+wChwHQ/9cChwHc/+wChwHd/+wChwHf/9cChwHh/+wChwHk/+wChwH2/+wChwIH/+wChwIL/+wChwKg/9cChwKq/+wChwK2/+wChwK8/9cChwK+/+wChwLA/+wChwLC/+wChwLL/9cChwLV/+wChwLm/9cChwL4/+wChwL6/+wChwL8/+wChwL+/+wChwMG/9cChwMI/9cChwMO/+wChwMQ/+wChwMY/+wCiAAP/64CiAAR/64CiAGd/+wCiAGk/9cCiAGm/+wCiAGo/9cCiAGq/9cCiAGu/9cCiAGw/9cCiAGx/+wCiAG1/9cCiAG8/8MCiAG9/9cCiAG//9cCiAHB/9cCiAHE/+wCiAHH/+wCiAHO/+wCiAHV/+wCiAHy/+wCiAII/64CiAIM/64CiAJy/9cCiAJz/+wCiAJ6/+wCiAJ8/9cCiAKA/+wCiAKC/+wCiAKf/9cCiAKh/+wCiAKp/+wCiAK1/8MCiAK3/+wCiAK5/+wCiAK7/9cCiAK9/+wCiAK//9cCiALB/9cCiALK/9cCiALO/9cCiALP/+wCiALU/9cCiALZ/9cCiALb/9cCiALd/9cCiALl/9cCiALn/+wCiAL1/+wCiAL3/9cCiAL5/9cCiAL7/9cCiAL9/9cCiAMF/9cCiAMH/9cCiAMN/9cCiAMP/9cCiAMR/9cCiAMS/+wCiAMX/+wCiAMb/9cCiAMc/+wCiQAF/+wCiQAK/+wCiQHQ/9cCiQHc/+wCiQHd/+wCiQHf/9cCiQHh/+wCiQHk/+wCiQH2/+wCiQIH/+wCiQIL/+wCiQKg/9cCiQKq/+wCiQK2/+wCiQK8/9cCiQK+/+wCiQLA/+wCiQLC/+wCiQLL/9cCiQLV/+wCiQLm/9cCiQL4/+wCiQL6/+wCiQL8/+wCiQL+/+wCiQMG/9cCiQMI/9cCiQMO/+wCiQMQ/+wCiQMY/+wCigAP/64CigAR/64CigGd/+wCigGk/9cCigGm/+wCigGo/9cCigGq/9cCigGu/9cCigGw/9cCigGx/+wCigG1/9cCigG8/8MCigG9/9cCigG//9cCigHB/9cCigHE/+wCigHH/+wCigHO/+wCigHV/+wCigHy/+wCigII/64CigIM/64CigJy/9cCigJz/+wCigJ6/+wCigJ8/9cCigKA/+wCigKC/+wCigKf/9cCigKh/+wCigKp/+wCigK1/8MCigK3/+wCigK5/+wCigK7/9cCigK9/+wCigK//9cCigLB/9cCigLK/9cCigLO/9cCigLP/+wCigLU/9cCigLZ/9cCigLb/9cCigLd/9cCigLl/9cCigLn/+wCigL1/+wCigL3/9cCigL5/9cCigL7/9cCigL9/9cCigMF/9cCigMH/9cCigMN/9cCigMP/9cCigMR/9cCigMS/+wCigMX/+wCigMb/9cCigMc/+wCiwAP/64CiwAR/64CiwHO/9cCiwHV/9cCiwHy/9cCiwII/64CiwIM/64CiwJz/9cCiwLP/9cCiwMS/9cCiwMc/9cCjAGf/9cCjAG4/9cCjAG7/9cCjAG+/9cCjAHh/9cCjAJs/9cCjAJ+/9cCjAKE/9cCjAKG/9cCjAKI/9cCjAKK/9cCjAKM/9cCjAKx/9cCjAKz/9cCjALA/9cCjALC/9cCjALF/9cCjALH/9cCjALV/9cCjALv/9cCjALx/9cCjALz/9cCjAL+/9cCjAMJ/9cCjAML/9cCjAMO/9cCjAMQ/9cCjAMV/9cClQGjAOEClQLqACkClQMO/9cClQMQ/9cClgAF/+wClgAK/+wClgIH/+wClgIL/+wClwAF/64ClwAK/64ClwGd/9cClwGm/9cClwG8/64ClwHB/64ClwHE/9cClwHc/9cClwHk/9cClwIH/64ClwIL/64ClwJ8/64ClwKA/8MClwKC/8MClwKp/9cClwKq/9cClwK1/64ClwK2/9cClwK3/8MClwK5/8MClwK9/9cClwK+/9cClwK//64ClwLB/64ClwLU/64ClwL9/64ClwMN/5oClwMP/5oClwMX/9cClwMY/9cCmAAF/4UCmAAK/4UCmAHQ/9cCmAHc/5oCmAHd/8MCmAHf/9cCmAHh/64CmAHk/5oCmAH2/8MCmAIH/4UCmAIL/4UCmAJt/9cCmAKB/9cCmAKD/9cCmAKL/9cCmAKg/9cCmAKq/5oCmAK2/5oCmAK4/8MCmAK6/8MCmAK8/9cCmAK+/5oCmALA/64CmALC/64CmALG/9cCmALI/9cCmALL/9cCmALV/64CmALm/9cCmALq/9cCmAL4/8MCmAL6/8MCmAL8/8MCmAL+/64CmAMG/9cCmAMI/9cCmAMO/5oCmAMQ/5oCmAMY/5oCmQAP/vYCmQAR/vYCmQGk/4UCmQGq/5oCmQGu/4UCmQGw/9cCmQG1/4UCmQG//9cCmQHO/5oCmQHV/5oCmQHy/5oCmQII/vYCmQIM/vYCmQJy/5oCmQJz/5oCmQJ2/+wCmQKf/9cCmQK7/9cCmQLK/9cCmQLO/4UCmQLP/5oCmQLZ/5oCmQLb/5oCmQLd/5oCmQLl/9cCmQMF/9cCmQMH/9cCmQMJ/64CmQML/64CmQMR/4UCmQMS/5oCmQMb/4UCmQMc/5oCmgAF/+wCmgAK/+wCmgHQ/9cCmgHc/+wCmgHd/+wCmgHf/9cCmgHh/+wCmgHk/+wCmgH2/+wCmgIH/+wCmgIL/+wCmgKg/9cCmgKq/+wCmgK2/+wCmgK8/9cCmgK+/+wCmgLA/+wCmgLC/+wCmgLL/9cCmgLV/+wCmgLm/9cCmgL4/+wCmgL6/+wCmgL8/+wCmgL+/+wCmgMG/9cCmgMI/9cCmgMO/+wCmgMQ/+wCmgMY/+wCmwAP/5oCmwAQ/9cCmwAR/5oCmwGdACkCmwGf/9cCmwGk/64CmwGmACkCmwGq/4UCmwGu/64CmwG1/64CmwG4/9cCmwG7/9cCmwG8ACkCmwG+/8MCmwHEACkCmwHM/8MCmwHN/8MCmwHO/5oCmwHP/64CmwHQ/9cCmwHR/9cCmwHS/8MCmwHT/8MCmwHU/8MCmwHV/5oCmwHW/8MCmwHX/8MCmwHY/64CmwHZ/8MCmwHa/8MCmwHb/64CmwHe/64CmwHf/9cCmwHg/8MCmwHh/5oCmwHi/8MCmwHj/8MCmwHl/8MCmwHm/8MCmwHn/9cCmwHo/8MCmwHq/64CmwHrACkCmwHs/8MCmwHt/64CmwHu/8MCmwHy/5oCmwHz/8MCmwH0ACkCmwH1/8MCmwH3/8MCmwH5/8MCmwIC/9cCmwID/9cCmwIE/9cCmwII/5oCmwIM/5oCmwJq/64CmwJr/8MCmwJs/9cCmwJx/8MCmwJy/4UCmwJz/5oCmwJ1/8MCmwJ3/9cCmwJ5/8MCmwJ9/8MCmwJ+/9cCmwJ//64CmwKE/9cCmwKF/64CmwKG/9cCmwKH/64CmwKI/9cCmwKJ/64CmwKK/9cCmwKM/9cCmwKN/64CmwKW/8MCmwKYACkCmwKa/8MCmwKe/8MCmwKg/9cCmwKi/9cCmwKk/8MCmwKm/8MCmwKoACkCmwKpACkCmwKs/8MCmwKu/8MCmwKw/8MCmwKx/9cCmwKy/64CmwKz/9cCmwK0/64CmwK1ACkCmwK8/9cCmwK9ACkCmwLA/5oCmwLC/5oCmwLE/8MCmwLF/9cCmwLG/8MCmwLH/9cCmwLI/8MCmwLL/9cCmwLN/8MCmwLO/64CmwLP/5oCmwLR/8MCmwLT/8MCmwLV/5oCmwLX/8MCmwLZ/4UCmwLb/4UCmwLd/4UCmwLg/64CmwLm/9cCmwLo/9cCmwLs/8MCmwLu/8MCmwLv/9cCmwLw/64CmwLx/9cCmwLy/64CmwLz/9cCmwL0/64CmwL2/9cCmwL+/5oCmwMA/8MCmwMC/8MCmwMG/9cCmwMI/9cCmwMJ/5oCmwMK/64CmwML/5oCmwMM/64CmwMO/9cCmwMQ/9cCmwMR/64CmwMS/5oCmwMU/8MCmwMV/9cCmwMW/64CmwMXACkCmwMa/64CmwMb/64CmwMc/5oCnAAP/8MCnAAR/8MCnAHO/8MCnAHP/9cCnAHV/8MCnAHY/9cCnAHb/9cCnAHe/9cCnAHq/9cCnAHt/9cCnAHy/8MCnAII/8MCnAIM/8MCnAJq/9cCnAJz/8MCnAJ//9cCnAKF/9cCnAKH/9cCnAKJ/9cCnAKN/9cCnAKy/9cCnAK0/9cCnALP/8MCnALg/9cCnALw/9cCnALy/9cCnAL0/9cCnAMK/9cCnAMM/9cCnAMS/8MCnAMW/9cCnAMa/9cCnAMc/8MCnQAF/8MCnQAK/8MCnQGd/8MCnQGjAGYCnQGm/8MCnQG8/8MCnQHB/64CnQHE/8MCnQHc/9cCnQHh/9cCnQHk/9cCnQIH/8MCnQIL/8MCnQJ8/64CnQKA/8MCnQKC/8MCnQKp/8MCnQKq/9cCnQK1/8MCnQK2/9cCnQK3/9cCnQK5/9cCnQK9/8MCnQK+/9cCnQK//64CnQLA/9cCnQLB/64CnQLC/9cCnQLU/64CnQLV/9cCnQL9/64CnQL+/9cCnQMN/9cCnQMO/8MCnQMP/9cCnQMQ/8MCnQMX/8MCnQMY/9cCngAF/8MCngAK/8MCngIH/8MCngIL/8MCngMO/9cCngMQ/9cCnwGf/9cCnwGjAOECnwG4/9cCnwG7/9cCnwG+/8MCnwHc/9cCnwHh/64CnwHk/9cCnwJs/9cCnwJ7AD0CnwJ9/+wCnwJ+/9cCnwKE/9cCnwKG/9cCnwKI/9cCnwKK/9cCnwKM/9cCnwKq/9cCnwKx/9cCnwKz/9cCnwK2/9cCnwK+/9cCnwLA/64CnwLC/64CnwLF/8MCnwLG/9cCnwLH/8MCnwLI/9cCnwLV/64CnwLv/9cCnwLx/9cCnwLz/9cCnwL+/64CnwMO/9cCnwMQ/9cCnwMV/9cCnwMY/9cCoAHP/+wCoAHY/+wCoAHb/+wCoAHe/+wCoAHh/+wCoAHq/+wCoAHt/+wCoAJq/+wCoAJ//+wCoAKF/+wCoAKH/+wCoAKJ/+wCoAKN/+wCoAKy/+wCoAK0/+wCoALA/+wCoALC/+wCoALV/+wCoALg/+wCoALw/+wCoALy/+wCoAL0/+wCoAL+/+wCoAMK/+wCoAMM/+wCoAMO/9cCoAMQ/9cCoAMW/+wCoAMa/+wCoQAP/64CoQAR/64CoQII/64CoQIM/64CoQKA/+wCoQKC/+wCoQK3/+wCoQK5/+wCoQMN/9cCoQMP/9cCogHpACkCowGf/9cCowGjAOECowG4/9cCowG7/9cCowG+/8MCowHc/9cCowHh/64CowHk/9cCowJs/9cCowJ7AD0CowJ9/+wCowJ+/9cCowKE/9cCowKG/9cCowKI/9cCowKK/9cCowKM/9cCowKq/9cCowKx/9cCowKz/9cCowK2/9cCowK+/9cCowLA/64CowLC/64CowLF/8MCowLG/9cCowLH/8MCowLI/9cCowLV/64CowLv/9cCowLx/9cCowLz/9cCowL+/64CowMO/9cCowMQ/9cCowMV/9cCowMY/9cCpAHP/+wCpAHY/+wCpAHb/+wCpAHe/+wCpAHh/+wCpAHq/+wCpAHt/+wCpAJq/+wCpAJ//+wCpAKF/+wCpAKH/+wCpAKJ/+wCpAKN/+wCpAKy/+wCpAK0/+wCpALA/+wCpALC/+wCpALV/+wCpALg/+wCpALw/+wCpALy/+wCpAL0/+wCpAL+/+wCpAMK/+wCpAMM/+wCpAMO/9cCpAMQ/9cCpAMW/+wCpAMa/+wCpQGf/9cCpQG4/9cCpQG7/9cCpQG+/9cCpQHB/9cCpQHh/9cCpQJs/9cCpQJ8/9cCpQJ+/9cCpQKE/9cCpQKG/9cCpQKI/9cCpQKK/9cCpQKM/9cCpQKx/9cCpQKz/9cCpQK//9cCpQLA/9cCpQLB/9cCpQLC/9cCpQLF/5oCpQLH/5oCpQLU/9cCpQLV/9cCpQLv/9cCpQLx/9cCpQLz/9cCpQL9/9cCpQL+/9cCpQMJ/9cCpQML/9cCpQMO/9cCpQMQ/9cCpQMV/9cCpQMZ/+wCpgHP/9cCpgHY/9cCpgHb/9cCpgHe/9cCpgHh/9cCpgHq/9cCpgHt/9cCpgJq/9cCpgJ//9cCpgKF/9cCpgKH/9cCpgKJ/9cCpgKN/9cCpgKy/9cCpgK0/9cCpgLA/9cCpgLC/9cCpgLG/9cCpgLI/9cCpgLV/9cCpgLg/9cCpgLw/9cCpgLy/9cCpgL0/9cCpgL+/9cCpgMK/9cCpgMM/9cCpgMW/9cCpgMa/9cCpwGf/9cCpwG4/9cCpwG7/9cCpwG+/9cCpwHB/9cCpwHh/9cCpwJs/9cCpwJ8/9cCpwJ+/9cCpwKE/9cCpwKG/9cCpwKI/9cCpwKK/9cCpwKM/9cCpwKx/9cCpwKz/9cCpwK//9cCpwLA/9cCpwLB/9cCpwLC/9cCpwLF/5oCpwLH/5oCpwLU/9cCpwLV/9cCpwLv/9cCpwLx/9cCpwLz/9cCpwL9/9cCpwL+/9cCpwMJ/9cCpwML/9cCpwMO/9cCpwMQ/9cCpwMV/9cCpwMZ/+wCqAHP/9cCqAHY/9cCqAHb/9cCqAHe/9cCqAHh/9cCqAHq/9cCqAHt/9cCqAJq/9cCqAJ//9cCqAKF/9cCqAKH/9cCqAKJ/9cCqAKN/9cCqAKy/9cCqAK0/9cCqALA/9cCqALC/9cCqALG/9cCqALI/9cCqALV/9cCqALg/9cCqALw/9cCqALy/9cCqAL0/9cCqAL+/9cCqAMK/9cCqAMM/9cCqAMW/9cCqAMa/9cCqQGf/9cCqQG4/9cCqQG7/9cCqQG+/9cCqQHB/9cCqQHh/9cCqQJs/9cCqQJ8/9cCqQJ+/9cCqQKE/9cCqQKG/9cCqQKI/9cCqQKK/9cCqQKM/9cCqQKx/9cCqQKz/9cCqQK//9cCqQLA/9cCqQLB/9cCqQLC/9cCqQLF/5oCqQLH/5oCqQLU/9cCqQLV/9cCqQLv/9cCqQLx/9cCqQLz/9cCqQL9/9cCqQL+/9cCqQMJ/9cCqQML/9cCqQMO/9cCqQMQ/9cCqQMV/9cCqQMZ/+wCqgHP/9cCqgHY/9cCqgHb/9cCqgHe/9cCqgHh/9cCqgHq/9cCqgHt/9cCqgJq/9cCqgJ//9cCqgKF/9cCqgKH/9cCqgKJ/9cCqgKN/9cCqgKy/9cCqgK0/9cCqgLA/9cCqgLC/9cCqgLG/9cCqgLI/9cCqgLV/9cCqgLg/9cCqgLw/9cCqgLy/9cCqgL0/9cCqgL+/9cCqgMK/9cCqgMM/9cCqgMW/9cCqgMa/9cCqwGjAOECqwLqACkCqwMO/9cCqwMQ/9cCrAAF/+wCrAAK/+wCrAIH/+wCrAIL/+wCrQAP/5oCrQAQ/9cCrQAR/5oCrQGdACkCrQGf/9cCrQGk/64CrQGmACkCrQGq/4UCrQGu/64CrQG1/64CrQG4/9cCrQG7/9cCrQG8ACkCrQG+/8MCrQHEACkCrQHM/8MCrQHN/8MCrQHO/5oCrQHP/64CrQHQ/9cCrQHR/9cCrQHS/8MCrQHT/8MCrQHU/8MCrQHV/5oCrQHW/8MCrQHX/8MCrQHY/64CrQHZ/8MCrQHa/8MCrQHb/64CrQHe/64CrQHf/9cCrQHg/8MCrQHh/5oCrQHi/8MCrQHj/8MCrQHl/8MCrQHm/8MCrQHn/9cCrQHo/8MCrQHq/64CrQHrACkCrQHs/8MCrQHt/64CrQHu/8MCrQHy/5oCrQHz/8MCrQH0ACkCrQH1/8MCrQH3/8MCrQH5/8MCrQIC/9cCrQID/9cCrQIE/9cCrQII/5oCrQIM/5oCrQJq/64CrQJr/8MCrQJs/9cCrQJx/8MCrQJy/4UCrQJz/5oCrQJ1/8MCrQJ3/9cCrQJ5/8MCrQJ9/8MCrQJ+/9cCrQJ//64CrQKE/9cCrQKF/64CrQKG/9cCrQKH/64CrQKI/9cCrQKJ/64CrQKK/9cCrQKM/9cCrQKN/64CrQKW/8MCrQKYACkCrQKa/8MCrQKe/8MCrQKg/9cCrQKi/9cCrQKk/8MCrQKm/8MCrQKoACkCrQKpACkCrQKs/8MCrQKu/8MCrQKw/8MCrQKx/9cCrQKy/64CrQKz/9cCrQK0/64CrQK1ACkCrQK8/9cCrQK9ACkCrQLA/5oCrQLC/5oCrQLE/8MCrQLF/9cCrQLG/8MCrQLH/9cCrQLI/8MCrQLL/9cCrQLN/8MCrQLO/64CrQLP/5oCrQLR/8MCrQLT/8MCrQLV/5oCrQLX/8MCrQLZ/4UCrQLb/4UCrQLd/4UCrQLg/64CrQLm/9cCrQLo/9cCrQLs/8MCrQLu/8MCrQLv/9cCrQLw/64CrQLx/9cCrQLy/64CrQLz/9cCrQL0/64CrQL2/9cCrQL+/5oCrQMA/8MCrQMC/8MCrQMG/9cCrQMI/9cCrQMJ/5oCrQMK/64CrQML/5oCrQMM/64CrQMO/9cCrQMQ/9cCrQMR/64CrQMS/5oCrQMU/8MCrQMV/9cCrQMW/64CrQMXACkCrQMa/64CrQMb/64CrQMc/5oCrgAP/5oCrgAQ/9cCrgAR/5oCrgHO/8MCrgHP/+wCrgHV/8MCrgHY/+wCrgHb/+wCrgHe/+wCrgHq/+wCrgHt/+wCrgHy/8MCrgIC/9cCrgID/9cCrgIE/9cCrgII/5oCrgIM/5oCrgJq/+wCrgJz/8MCrgJ//+wCrgKF/+wCrgKH/+wCrgKJ/+wCrgKN/+wCrgKy/+wCrgK0/+wCrgLP/8MCrgLg/+wCrgLw/+wCrgLy/+wCrgL0/+wCrgMK/+wCrgMM/+wCrgMS/8MCrgMW/+wCrgMa/+wCrgMc/8MCrwAF/1wCrwAK/1wCrwGd/5oCrwGjAGYCrwGm/5oCrwG8/0gCrwHB/4UCrwHE/5oCrwHc/64CrwHh/9cCrwHk/64CrwIH/1wCrwIL/1wCrwJ8/4UCrwKA/3ECrwKC/3ECrwKp/5oCrwKq/64CrwK1/0gCrwK2/64CrwK3/5oCrwK5/5oCrwK9/5oCrwK+/64CrwK//4UCrwLA/9cCrwLB/4UCrwLC/9cCrwLF/8MCrwLG/9cCrwLH/8MCrwLI/9cCrwLU/4UCrwLV/9cCrwL9/4UCrwL+/9cCrwMN/0gCrwMO/64CrwMP/0gCrwMQ/64CrwMX/5oCrwMY/64CsAAF/3ECsAAK/3ECsAHc/5oCsAHh/9cCsAHk/5oCsAIH/3ECsAIL/3ECsAJt/9cCsAKB/9cCsAKD/9cCsAKL/9cCsAKq/5oCsAK2/5oCsAK4/9cCsAK6/9cCsAK+/5oCsALA/9cCsALC/9cCsALG/9cCsALI/9cCsALV/9cCsAL+/9cCsAMO/3ECsAMQ/3ECsAMY/5oCsQGd/9cCsQGm/9cCsQG8/8MCsQHE/9cCsQKA/+wCsQKC/+wCsQKp/9cCsQK1/8MCsQK3/+wCsQK5/+wCsQK9/9cCsQMN/9cCsQMP/9cCsQMX/9cCsgAF/+wCsgAK/+wCsgHQ/9cCsgHc/+wCsgHd/+wCsgHf/9cCsgHh/+wCsgHk/+wCsgH2/+wCsgIH/+wCsgIL/+wCsgKg/9cCsgKq/+wCsgK2/+wCsgK8/9cCsgK+/+wCsgLA/+wCsgLC/+wCsgLL/9cCsgLV/+wCsgLm/9cCsgL4/+wCsgL6/+wCsgL8/+wCsgL+/+wCsgMG/9cCsgMI/9cCsgMO/+wCsgMQ/+wCsgMY/+wCswGf/9cCswG4/9cCswG7/9cCswG+/9cCswHh/9cCswJs/9cCswJ+/9cCswKE/9cCswKG/9cCswKI/9cCswKK/9cCswKM/9cCswKx/9cCswKz/9cCswLA/9cCswLC/9cCswLF/9cCswLH/9cCswLV/9cCswLv/9cCswLx/9cCswLz/9cCswL+/9cCswMJ/9cCswML/9cCswMO/9cCswMQ/9cCswMV/9cCtQAP/4UCtQAQ/64CtQAR/4UCtQGf/9cCtQGk/5oCtQGq/3ECtQGu/5oCtQG1/5oCtQG4/9cCtQG7/9cCtQG8ACkCtQG+/64CtQHM/5oCtQHN/5oCtQHO/4UCtQHP/3ECtQHQ/9cCtQHR/9cCtQHS/5oCtQHT/5oCtQHU/5oCtQHV/4UCtQHW/5oCtQHX/5oCtQHY/3ECtQHZ/5oCtQHa/5oCtQHb/3ECtQHc/64CtQHd/64CtQHe/3ECtQHf/9cCtQHg/5oCtQHh/5oCtQHi/5oCtQHj/5oCtQHk/64CtQHl/5oCtQHm/5oCtQHn/9cCtQHo/5oCtQHp/8MCtQHq/3ECtQHs/5oCtQHt/3ECtQHu/4UCtQHy/4UCtQHz/5oCtQH1/5oCtQH2/64CtQH3/5oCtQH5/5oCtQIC/64CtQID/64CtQIE/64CtQII/4UCtQIM/4UCtQJq/3ECtQJr/5oCtQJs/9cCtQJt/9cCtQJx/5oCtQJy/3ECtQJz/4UCtQJ1/5oCtQJ3/5oCtQJ5/5oCtQJ9/5oCtQJ+/9cCtQJ//3ECtQKB/9cCtQKD/9cCtQKE/9cCtQKF/3ECtQKG/9cCtQKH/3ECtQKI/9cCtQKJ/3ECtQKK/9cCtQKL/9cCtQKM/9cCtQKN/3ECtQKW/5oCtQKa/5oCtQKe/5oCtQKg/9cCtQKi/9cCtQKk/5oCtQKm/5oCtQKq/64CtQKs/5oCtQKu/5oCtQKw/5oCtQKx/9cCtQKy/3ECtQKz/9cCtQK0/3ECtQK1ACkCtQK2/64CtQK4/64CtQK6/64CtQK8/9cCtQK+/64CtQLA/5oCtQLC/5oCtQLE/5oCtQLF/5oCtQLG/3ECtQLH/5oCtQLI/3ECtQLL/9cCtQLN/5oCtQLO/5oCtQLP/4UCtQLR/5oCtQLT/5oCtQLV/5oCtQLX/5oCtQLZ/3ECtQLb/3ECtQLd/3ECtQLg/3ECtQLm/9cCtQLo/9cCtQLq/8MCtQLs/5oCtQLu/5oCtQLv/9cCtQLw/3ECtQLx/9cCtQLy/3ECtQLz/9cCtQL0/3ECtQL2/9cCtQL4/64CtQL6/64CtQL8/64CtQL+/5oCtQMA/5oCtQMC/5oCtQMG/9cCtQMI/9cCtQMJ/3ECtQMK/3ECtQML/3ECtQMM/3ECtQMO/5oCtQMQ/5oCtQMR/5oCtQMS/4UCtQMU/5oCtQMV/9cCtQMW/3ECtQMY/64CtQMa/3ECtQMb/5oCtQMc/4UCtgAP/5oCtgAQ/9cCtgAR/5oCtgHO/8MCtgHP/+wCtgHV/8MCtgHY/+wCtgHb/+wCtgHe/+wCtgHq/+wCtgHt/+wCtgHy/8MCtgIC/9cCtgID/9cCtgIE/9cCtgII/5oCtgIM/5oCtgJq/+wCtgJz/8MCtgJ//+wCtgKF/+wCtgKH/+wCtgKJ/+wCtgKN/+wCtgKy/+wCtgK0/+wCtgLP/8MCtgLg/+wCtgLw/+wCtgLy/+wCtgL0/+wCtgMK/+wCtgMM/+wCtgMS/8MCtgMW/+wCtgMa/+wCtgMc/8MCtwAP/4UCtwAR/4UCtwGf/9cCtwGk/64CtwGq/4UCtwGu/64CtwG1/64CtwG4/9cCtwG7/9cCtwG+/8MCtwHK/64CtwHM/8MCtwHN/8MCtwHO/5oCtwHP/5oCtwHS/8MCtwHT/8MCtwHU/8MCtwHV/5oCtwHW/8MCtwHX/8MCtwHY/5oCtwHZ/8MCtwHa/8MCtwHb/5oCtwHe/5oCtwHg/8MCtwHh/64CtwHi/8MCtwHj/8MCtwHl/8MCtwHm/8MCtwHo/8MCtwHp/9cCtwHq/5oCtwHrACkCtwHs/8MCtwHt/5oCtwHu/64CtwHy/5oCtwHz/8MCtwH0ACkCtwH1/8MCtwH3/8MCtwH5/8MCtwII/4UCtwIM/4UCtwJq/5oCtwJr/8MCtwJs/9cCtwJx/8MCtwJy/4UCtwJz/5oCtwJ1/8MCtwJ3/9cCtwJ5/8MCtwJ9/9cCtwJ+/9cCtwJ//5oCtwKE/9cCtwKF/5oCtwKG/9cCtwKH/5oCtwKI/9cCtwKJ/5oCtwKK/9cCtwKM/9cCtwKN/5oCtwKW/8MCtwKYACkCtwKa/8MCtwKe/8MCtwKk/8MCtwKm/8MCtwKoACkCtwKs/8MCtwKu/8MCtwKw/8MCtwKx/9cCtwKy/5oCtwKz/9cCtwK0/5oCtwLA/64CtwLC/64CtwLE/8MCtwLG/64CtwLI/64CtwLN/8MCtwLO/64CtwLP/5oCtwLR/8MCtwLT/8MCtwLV/64CtwLX/8MCtwLZ/4UCtwLa/64CtwLb/4UCtwLc/64CtwLd/4UCtwLe/64CtwLg/5oCtwLh/+wCtwLi/64CtwLj/+wCtwLk/64CtwLs/8MCtwLu/8MCtwLv/9cCtwLw/5oCtwLx/9cCtwLy/5oCtwLz/9cCtwL0/5oCtwL+/64CtwMA/8MCtwMC/8MCtwMJ/64CtwMK/5oCtwML/64CtwMM/5oCtwMO/9cCtwMQ/9cCtwMR/64CtwMS/5oCtwMU/8MCtwMV/9cCtwMW/5oCtwMZ/+wCtwMa/5oCtwMb/64CtwMc/5oCuAAP/64CuAAR/64CuAHO/+wCuAHV/+wCuAHy/+wCuAII/64CuAIM/64CuAJz/+wCuALP/+wCuAMS/+wCuAMc/+wCuQAP/4UCuQAR/4UCuQGf/9cCuQGk/64CuQGq/4UCuQGu/64CuQG1/64CuQG4/9cCuQG7/9cCuQG+/8MCuQHK/64CuQHM/8MCuQHN/8MCuQHO/5oCuQHP/5oCuQHS/8MCuQHT/8MCuQHU/8MCuQHV/5oCuQHW/8MCuQHX/8MCuQHY/5oCuQHZ/8MCuQHa/8MCuQHb/5oCuQHe/5oCuQHg/8MCuQHh/64CuQHi/8MCuQHj/8MCuQHl/8MCuQHm/8MCuQHo/8MCuQHp/9cCuQHq/5oCuQHrACkCuQHs/8MCuQHt/5oCuQHu/64CuQHy/5oCuQHz/8MCuQH0ACkCuQH1/8MCuQH3/8MCuQH5/8MCuQII/4UCuQIM/4UCuQJq/5oCuQJr/8MCuQJs/9cCuQJx/8MCuQJy/4UCuQJz/5oCuQJ1/8MCuQJ3/9cCuQJ5/8MCuQJ9/9cCuQJ+/9cCuQJ//5oCuQKE/9cCuQKF/5oCuQKG/9cCuQKH/5oCuQKI/9cCuQKJ/5oCuQKK/9cCuQKM/9cCuQKN/5oCuQKW/8MCuQKYACkCuQKa/8MCuQKe/8MCuQKk/8MCuQKm/8MCuQKoACkCuQKs/8MCuQKu/8MCuQKw/8MCuQKx/9cCuQKy/5oCuQKz/9cCuQK0/5oCuQLA/64CuQLC/64CuQLE/8MCuQLG/64CuQLI/64CuQLN/8MCuQLO/64CuQLP/5oCuQLR/8MCuQLT/8MCuQLV/64CuQLX/8MCuQLZ/4UCuQLa/64CuQLb/4UCuQLc/64CuQLd/4UCuQLe/64CuQLg/5oCuQLh/+wCuQLi/64CuQLj/+wCuQLk/64CuQLs/8MCuQLu/8MCuQLv/9cCuQLw/5oCuQLx/9cCuQLy/5oCuQLz/9cCuQL0/5oCuQL+/64CuQMA/8MCuQMC/8MCuQMJ/64CuQMK/5oCuQML/64CuQMM/5oCuQMO/9cCuQMQ/9cCuQMR/64CuQMS/5oCuQMU/8MCuQMV/9cCuQMW/5oCuQMZ/+wCuQMa/5oCuQMb/64CuQMc/5oCugAP/64CugAR/64CugHO/+wCugHV/+wCugHy/+wCugII/64CugIM/64CugJz/+wCugLP/+wCugMS/+wCugMc/+wCuwGf/9cCuwGjAOECuwG4/9cCuwG7/9cCuwG+/8MCuwHc/9cCuwHh/64CuwHk/9cCuwJs/9cCuwJ7AD0CuwJ9/+wCuwJ+/9cCuwKE/9cCuwKG/9cCuwKI/9cCuwKK/9cCuwKM/9cCuwKq/9cCuwKx/9cCuwKz/9cCuwK2/9cCuwK+/9cCuwLA/64CuwLC/64CuwLF/8MCuwLG/9cCuwLH/8MCuwLI/9cCuwLV/64CuwLv/9cCuwLx/9cCuwLz/9cCuwL+/64CuwMO/9cCuwMQ/9cCuwMV/9cCuwMY/9cCvAHP/+wCvAHY/+wCvAHb/+wCvAHe/+wCvAHh/+wCvAHq/+wCvAHt/+wCvAJq/+wCvAJ//+wCvAKF/+wCvAKH/+wCvAKJ/+wCvAKN/+wCvAKy/+wCvAK0/+wCvALA/+wCvALC/+wCvALV/+wCvALg/+wCvALw/+wCvALy/+wCvAL0/+wCvAL+/+wCvAMK/+wCvAMM/+wCvAMO/9cCvAMQ/9cCvAMW/+wCvAMa/+wCvQGjAOECvQLqACkCvQMO/9cCvQMQ/9cCvgAF/+wCvgAK/+wCvgIH/+wCvgIL/+wCvwGjAOECvwLqACkCvwMO/9cCvwMQ/9cCwAAF/+wCwAAK/+wCwAIH/+wCwAIL/+wCwwAF/8MCwwAK/8MCwwGd/9cCwwGm/9cCwwG8/4UCwwHB/64CwwHE/9cCwwHc/9cCwwHd/+wCwwHh/+wCwwHk/9cCwwH2/+wCwwIH/8MCwwIL/8MCwwJ8/64CwwKA/8MCwwKC/8MCwwKp/9cCwwKq/9cCwwK1/4UCwwK2/9cCwwK3/5oCwwK5/5oCwwK9/9cCwwK+/9cCwwK//64CwwLA/+wCwwLB/64CwwLC/+wCwwLU/64CwwLV/+wCwwL4/+wCwwL6/+wCwwL8/+wCwwL9/64CwwL+/+wCwwMN/64CwwMO/9cCwwMP/64CwwMQ/9cCwwMX/9cCwwMY/9cCxAAF/5oCxAAK/5oCxAHc/9cCxAHd/9cCxAHk/9cCxAH2/9cCxAIH/5oCxAIL/5oCxAKq/9cCxAK2/9cCxAK4/9cCxAK6/9cCxAK+/9cCxAL4/9cCxAL6/9cCxAL8/9cCxAMO/64CxAMQ/64CxAMY/9cCxQG8/9cCxQKA/+wCxQKC/+wCxQK1/9cCxQK3/+wCxQK5/+wCxQMN/+wCxQMP/+wCxgAF/+wCxgAK/+wCxgIH/+wCxgIL/+wCxwG8/9cCxwKA/+wCxwKC/+wCxwK1/9cCxwK3/+wCxwK5/+wCxwMN/+wCxwMP/+wCyAAF/+wCyAAK/+wCyAIH/+wCyAIL/+wCygGf/9cCygG4/9cCygG7/9cCygG+/9cCygHB/9cCygHh/9cCygJs/9cCygJ8/9cCygJ+/9cCygKE/9cCygKG/9cCygKI/9cCygKK/9cCygKM/9cCygKx/9cCygKz/9cCygK//9cCygLA/9cCygLB/9cCygLC/9cCygLF/5oCygLH/5oCygLU/9cCygLV/9cCygLv/9cCygLx/9cCygLz/9cCygL9/9cCygL+/9cCygMJ/9cCygML/9cCygMO/9cCygMQ/9cCygMV/9cCygMZ/+wCywHP/9cCywHY/9cCywHb/9cCywHe/9cCywHh/9cCywHq/9cCywHt/9cCywJq/9cCywJ//9cCywKF/9cCywKH/9cCywKJ/9cCywKN/9cCywKy/9cCywK0/9cCywLA/9cCywLC/9cCywLG/9cCywLI/9cCywLV/9cCywLg/9cCywLw/9cCywLy/9cCywL0/9cCywL+/9cCywMK/9cCywMM/9cCywMW/9cCywMa/9cCzAAF/8MCzAAK/8MCzAGjAGYCzAG8/9cCzAG+/9cCzAHB/64CzAHc/8MCzAHh/9cCzAHk/8MCzAIH/8MCzAIL/8MCzAJt/+wCzAJ8/64CzAKA/9cCzAKB/+wCzAKC/9cCzAKD/+wCzAKL/+wCzAKq/8MCzAK1/9cCzAK2/8MCzAK3/9cCzAK4/+wCzAK5/9cCzAK6/+wCzAK+/8MCzAK//64CzALA/9cCzALB/64CzALC/9cCzALF/8MCzALG/9cCzALH/8MCzALI/9cCzALU/64CzALV/9cCzAL9/64CzAL+/9cCzAMN/9cCzAMO/8MCzAMP/9cCzAMQ/8MCzAMY/8MCzQHh/9cCzQLA/9cCzQLC/9cCzQLV/9cCzQL+/9cCzgGjAOECzgLqACkCzgMO/9cCzgMQ/9cCzwAF/+wCzwAK/+wCzwIH/+wCzwIL/+wC0gGjAOEC0gLqACkC0gMO/9cC0gMQ/9cC0wAF/+wC0wAK/+wC0wIH/+wC0wIL/+wC1gGjAOEC1gLqACkC1gMO/9cC1gMQ/9cC1wAF/+wC1wAK/+wC1wIH/+wC1wIL/+wC2QAF/3EC2QAK/3EC2QGd/5oC2QGm/5oC2QG8/3EC2QG+/9cC2QHB/5oC2QHE/5oC2QHc/9cC2QHh/9cC2QHk/9cC2QIH/3EC2QIL/3EC2QJu/9cC2QJ8/5oC2QKA/64C2QKC/64C2QKX/9cC2QKb/9cC2QKn/9cC2QKp/5oC2QKq/9cC2QK1/3EC2QK2/9cC2QK3/4UC2QK5/4UC2QK9/5oC2QK+/9cC2QK//5oC2QLA/9cC2QLB/5oC2QLC/9cC2QLF/5oC2QLH/5oC2QLU/5oC2QLV/9cC2QLh/9cC2QLj/9cC2QL9/5oC2QL+/9cC2QMD/9cC2QMN/3EC2QMO/9cC2QMP/3EC2QMQ/9cC2QMX/5oC2QMY/9cC2gAF/+wC2gAK/+wC2gIH/+wC2gIL/+wC2wAF/3EC2wAK/3EC2wGd/5oC2wGm/5oC2wG8/3EC2wG+/9cC2wHB/5oC2wHE/5oC2wHc/9cC2wHh/9cC2wHk/9cC2wIH/3EC2wIL/3EC2wJu/9cC2wJ8/5oC2wKA/64C2wKC/64C2wKX/9cC2wKb/9cC2wKn/9cC2wKp/5oC2wKq/9cC2wK1/3EC2wK2/9cC2wK3/4UC2wK5/4UC2wK9/5oC2wK+/9cC2wK//5oC2wLA/9cC2wLB/5oC2wLC/9cC2wLF/5oC2wLH/5oC2wLU/5oC2wLV/9cC2wLh/9cC2wLj/9cC2wL9/5oC2wL+/9cC2wMD/9cC2wMN/3EC2wMO/9cC2wMP/3EC2wMQ/9cC2wMX/5oC2wMY/9cC3AAF/+wC3AAK/+wC3AIH/+wC3AIL/+wC3gAF/+wC3gAK/+wC3gIH/+wC3gIL/+wC4AAF/+wC4AAK/+wC4AIH/+wC4AIL/+wC4QAP/64C4QAR/64C4QGd/+wC4QGk/9cC4QGm/+wC4QGo/9cC4QGq/9cC4QGu/9cC4QGw/9cC4QGx/+wC4QG1/9cC4QG8/8MC4QG9/9cC4QG//9cC4QHB/9cC4QHE/+wC4QHH/+wC4QHO/+wC4QHV/+wC4QHy/+wC4QII/64C4QIM/64C4QJy/9cC4QJz/+wC4QJ6/+wC4QJ8/9cC4QKA/+wC4QKC/+wC4QKf/9cC4QKh/+wC4QKp/+wC4QK1/8MC4QK3/+wC4QK5/+wC4QK7/9cC4QK9/+wC4QK//9cC4QLB/9cC4QLK/9cC4QLO/9cC4QLP/+wC4QLU/9cC4QLZ/9cC4QLb/9cC4QLd/9cC4QLl/9cC4QLn/+wC4QL1/+wC4QL3/9cC4QL5/9cC4QL7/9cC4QL9/9cC4QMF/9cC4QMH/9cC4QMN/9cC4QMP/9cC4QMR/9cC4QMS/+wC4QMX/+wC4QMb/9cC4QMc/+wC4gAF/+wC4gAK/+wC4gHQ/9cC4gHc/+wC4gHd/+wC4gHf/9cC4gHh/+wC4gHk/+wC4gH2/+wC4gIH/+wC4gIL/+wC4gKg/9cC4gKq/+wC4gK2/+wC4gK8/9cC4gK+/+wC4gLA/+wC4gLC/+wC4gLL/9cC4gLV/+wC4gLm/9cC4gL4/+wC4gL6/+wC4gL8/+wC4gL+/+wC4gMG/9cC4gMI/9cC4gMO/+wC4gMQ/+wC4gMY/+wC4wAP/64C4wAR/64C4wGd/+wC4wGk/9cC4wGm/+wC4wGo/9cC4wGq/9cC4wGu/9cC4wGw/9cC4wGx/+wC4wG1/9cC4wG8/8MC4wG9/9cC4wG//9cC4wHB/9cC4wHE/+wC4wHH/+wC4wHO/+wC4wHV/+wC4wHy/+wC4wII/64C4wIM/64C4wJy/9cC4wJz/+wC4wJ6/+wC4wJ8/9cC4wKA/+wC4wKC/+wC4wKf/9cC4wKh/+wC4wKp/+wC4wK1/8MC4wK3/+wC4wK5/+wC4wK7/9cC4wK9/+wC4wK//9cC4wLB/9cC4wLK/9cC4wLO/9cC4wLP/+wC4wLU/9cC4wLZ/9cC4wLb/9cC4wLd/9cC4wLl/9cC4wLn/+wC4wL1/+wC4wL3/9cC4wL5/9cC4wL7/9cC4wL9/9cC4wMF/9cC4wMH/9cC4wMN/9cC4wMP/9cC4wMR/9cC4wMS/+wC4wMX/+wC4wMb/9cC4wMc/+wC5AAF/+wC5AAK/+wC5AHQ/9cC5AHc/+wC5AHd/+wC5AHf/9cC5AHh/+wC5AHk/+wC5AH2/+wC5AIH/+wC5AIL/+wC5AKg/9cC5AKq/+wC5AK2/+wC5AK8/9cC5AK+/+wC5ALA/+wC5ALC/+wC5ALL/9cC5ALV/+wC5ALm/9cC5AL4/+wC5AL6/+wC5AL8/+wC5AL+/+wC5AMG/9cC5AMI/9cC5AMO/+wC5AMQ/+wC5AMY/+wC5QGf/9cC5QG4/9cC5QG7/9cC5QG+/9cC5QHB/9cC5QHh/9cC5QJs/9cC5QJ8/9cC5QJ+/9cC5QKE/9cC5QKG/9cC5QKI/9cC5QKK/9cC5QKM/9cC5QKx/9cC5QKz/9cC5QK//9cC5QLA/9cC5QLB/9cC5QLC/9cC5QLF/5oC5QLH/5oC5QLU/9cC5QLV/9cC5QLv/9cC5QLx/9cC5QLz/9cC5QL9/9cC5QL+/9cC5QMJ/9cC5QML/9cC5QMO/9cC5QMQ/9cC5QMV/9cC5QMZ/+wC5gHP/9cC5gHY/9cC5gHb/9cC5gHe/9cC5gHh/9cC5gHq/9cC5gHt/9cC5gJq/9cC5gJ//9cC5gKF/9cC5gKH/9cC5gKJ/9cC5gKN/9cC5gKy/9cC5gK0/9cC5gLA/9cC5gLC/9cC5gLG/9cC5gLI/9cC5gLV/9cC5gLg/9cC5gLw/9cC5gLy/9cC5gL0/9cC5gL+/9cC5gMK/9cC5gMM/9cC5gMW/9cC5gMa/9cC5wAP/64C5wAR/64C5wII/64C5wIM/64C5wKA/+wC5wKC/+wC5wK3/+wC5wK5/+wC5wMN/9cC5wMP/9cC6AHpACkC6QAF/+wC6QAK/+wC6QIH/+wC6QIL/+wC6QMO/9cC6QMQ/9cC7wAP/64C7wAR/64C7wGd/+wC7wGk/9cC7wGm/+wC7wGo/9cC7wGq/9cC7wGu/9cC7wGw/9cC7wGx/+wC7wG1/9cC7wG8/8MC7wG9/9cC7wG//9cC7wHB/9cC7wHE/+wC7wHH/+wC7wHO/+wC7wHV/+wC7wHy/+wC7wII/64C7wIM/64C7wJy/9cC7wJz/+wC7wJ6/+wC7wJ8/9cC7wKA/+wC7wKC/+wC7wKf/9cC7wKh/+wC7wKp/+wC7wK1/8MC7wK3/+wC7wK5/+wC7wK7/9cC7wK9/+wC7wK//9cC7wLB/9cC7wLK/9cC7wLO/9cC7wLP/+wC7wLU/9cC7wLZ/9cC7wLb/9cC7wLd/9cC7wLl/9cC7wLn/+wC7wL1/+wC7wL3/9cC7wL5/9cC7wL7/9cC7wL9/9cC7wMF/9cC7wMH/9cC7wMN/9cC7wMP/9cC7wMR/9cC7wMS/+wC7wMX/+wC7wMb/9cC7wMc/+wC8AAF/+wC8AAK/+wC8AHQ/9cC8AHc/+wC8AHd/+wC8AHf/9cC8AHh/+wC8AHk/+wC8AH2/+wC8AIH/+wC8AIL/+wC8AKg/9cC8AKq/+wC8AK2/+wC8AK8/9cC8AK+/+wC8ALA/+wC8ALC/+wC8ALL/9cC8ALV/+wC8ALm/9cC8AL4/+wC8AL6/+wC8AL8/+wC8AL+/+wC8AMG/9cC8AMI/9cC8AMO/+wC8AMQ/+wC8AMY/+wC8QAP/64C8QAR/64C8QGd/+wC8QGk/9cC8QGm/+wC8QGo/9cC8QGq/9cC8QGu/9cC8QGw/9cC8QGx/+wC8QG1/9cC8QG8/8MC8QG9/9cC8QG//9cC8QHB/9cC8QHE/+wC8QHH/+wC8QHO/+wC8QHV/+wC8QHy/+wC8QII/64C8QIM/64C8QJy/9cC8QJz/+wC8QJ6/+wC8QJ8/9cC8QKA/+wC8QKC/+wC8QKf/9cC8QKh/+wC8QKp/+wC8QK1/8MC8QK3/+wC8QK5/+wC8QK7/9cC8QK9/+wC8QK//9cC8QLB/9cC8QLK/9cC8QLO/9cC8QLP/+wC8QLU/9cC8QLZ/9cC8QLb/9cC8QLd/9cC8QLl/9cC8QLn/+wC8QL1/+wC8QL3/9cC8QL5/9cC8QL7/9cC8QL9/9cC8QMF/9cC8QMH/9cC8QMN/9cC8QMP/9cC8QMR/9cC8QMS/+wC8QMX/+wC8QMb/9cC8QMc/+wC8gAF/+wC8gAK/+wC8gHQ/9cC8gHc/+wC8gHd/+wC8gHf/9cC8gHh/+wC8gHk/+wC8gH2/+wC8gIH/+wC8gIL/+wC8gKg/9cC8gKq/+wC8gK2/+wC8gK8/9cC8gK+/+wC8gLA/+wC8gLC/+wC8gLL/9cC8gLV/+wC8gLm/9cC8gL4/+wC8gL6/+wC8gL8/+wC8gL+/+wC8gMG/9cC8gMI/9cC8gMO/+wC8gMQ/+wC8gMY/+wC8wAP/64C8wAR/64C8wGd/+wC8wGk/9cC8wGm/+wC8wGo/9cC8wGq/9cC8wGu/9cC8wGw/9cC8wGx/+wC8wG1/9cC8wG8/8MC8wG9/9cC8wG//9cC8wHB/9cC8wHE/+wC8wHH/+wC8wHO/+wC8wHV/+wC8wHy/+wC8wII/64C8wIM/64C8wJy/9cC8wJz/+wC8wJ6/+wC8wJ8/9cC8wKA/+wC8wKC/+wC8wKf/9cC8wKh/+wC8wKp/+wC8wK1/8MC8wK3/+wC8wK5/+wC8wK7/9cC8wK9/+wC8wK//9cC8wLB/9cC8wLK/9cC8wLO/9cC8wLP/+wC8wLU/9cC8wLZ/9cC8wLb/9cC8wLd/9cC8wLl/9cC8wLn/+wC8wL1/+wC8wL3/9cC8wL5/9cC8wL7/9cC8wL9/9cC8wMF/9cC8wMH/9cC8wMN/9cC8wMP/9cC8wMR/9cC8wMS/+wC8wMX/+wC8wMb/9cC8wMc/+wC9AAF/+wC9AAK/+wC9AHQ/9cC9AHc/+wC9AHd/+wC9AHf/9cC9AHh/+wC9AHk/+wC9AH2/+wC9AIH/+wC9AIL/+wC9AKg/9cC9AKq/+wC9AK2/+wC9AK8/9cC9AK+/+wC9ALA/+wC9ALC/+wC9ALL/9cC9ALV/+wC9ALm/9cC9AL4/+wC9AL6/+wC9AL8/+wC9AL+/+wC9AMG/9cC9AMI/9cC9AMO/+wC9AMQ/+wC9AMY/+wC9QAP/64C9QAR/64C9QGd/+wC9QGk/9cC9QGm/+wC9QGo/9cC9QGq/9cC9QGu/9cC9QGw/9cC9QGx/+wC9QG1/9cC9QG8/8MC9QG9/9cC9QG//9cC9QHB/9cC9QHE/+wC9QHH/+wC9QHO/+wC9QHV/+wC9QHy/+wC9QII/64C9QIM/64C9QJy/9cC9QJz/+wC9QJ6/+wC9QJ8/9cC9QKA/+wC9QKC/+wC9QKf/9cC9QKh/+wC9QKp/+wC9QK1/8MC9QK3/+wC9QK5/+wC9QK7/9cC9QK9/+wC9QK//9cC9QLB/9cC9QLK/9cC9QLO/9cC9QLP/+wC9QLU/9cC9QLZ/9cC9QLb/9cC9QLd/9cC9QLl/9cC9QLn/+wC9QL1/+wC9QL3/9cC9QL5/9cC9QL7/9cC9QL9/9cC9QMF/9cC9QMH/9cC9QMN/9cC9QMP/9cC9QMR/9cC9QMS/+wC9QMX/+wC9QMb/9cC9QMc/+wC9gAF/+wC9gAK/+wC9gHQ/9cC9gHc/+wC9gHd/+wC9gHf/9cC9gHh/+wC9gHk/+wC9gH2/+wC9gIH/+wC9gIL/+wC9gKg/9cC9gKq/+wC9gK2/+wC9gK8/9cC9gK+/+wC9gLA/+wC9gLC/+wC9gLL/9cC9gLV/+wC9gLm/9cC9gL4/+wC9gL6/+wC9gL8/+wC9gL+/+wC9gMG/9cC9gMI/9cC9gMO/+wC9gMQ/+wC9gMY/+wC9wAP/4UC9wAR/4UC9wGf/+wC9wGk/5oC9wGq/3EC9wGu/5oC9wG1/5oC9wG4/+wC9wG7/+wC9wG+/8MC9wHJ/+wC9wHO/64C9wHP/9cC9wHV/64C9wHY/9cC9wHb/9cC9wHe/9cC9wHh/9cC9wHq/9cC9wHrAGYC9wHt/9cC9wHu/+wC9wHy/64C9wH0AGYC9wII/4UC9wIM/4UC9wJq/9cC9wJs/+wC9wJy/3EC9wJz/64C9wJ+/+wC9wJ//9cC9wKE/+wC9wKF/9cC9wKG/+wC9wKH/9cC9wKI/+wC9wKJ/9cC9wKK/+wC9wKM/+wC9wKN/9cC9wKYAGYC9wKoAGYC9wKx/+wC9wKy/9cC9wKz/+wC9wK0/9cC9wLA/9cC9wLC/9cC9wLF/9cC9wLG/8MC9wLH/9cC9wLI/8MC9wLO/5oC9wLP/64C9wLV/9cC9wLZ/3EC9wLb/3EC9wLd/3EC9wLg/9cC9wLv/+wC9wLw/9cC9wLx/+wC9wLy/9cC9wLz/+wC9wL0/9cC9wL+/9cC9wMJ/3EC9wMK/9cC9wML/3EC9wMM/9cC9wMR/5oC9wMS/64C9wMV/+wC9wMW/9cC9wMa/9cC9wMb/5oC9wMc/64C+AAP/64C+AAR/64C+AHO/9cC+AHV/9cC+AHy/9cC+AII/64C+AIM/64C+AJz/9cC+ALP/9cC+AMS/9cC+AMc/9cC+QAP/4UC+QAR/4UC+QGf/+wC+QGk/5oC+QGq/3EC+QGu/5oC+QG1/5oC+QG4/+wC+QG7/+wC+QG+/8MC+QHJ/+wC+QHO/64C+QHP/9cC+QHV/64C+QHY/9cC+QHb/9cC+QHe/9cC+QHh/9cC+QHq/9cC+QHrAGYC+QHt/9cC+QHu/+wC+QHy/64C+QH0AGYC+QII/4UC+QIM/4UC+QJq/9cC+QJs/+wC+QJy/3EC+QJz/64C+QJ+/+wC+QJ//9cC+QKE/+wC+QKF/9cC+QKG/+wC+QKH/9cC+QKI/+wC+QKJ/9cC+QKK/+wC+QKM/+wC+QKN/9cC+QKYAGYC+QKoAGYC+QKx/+wC+QKy/9cC+QKz/+wC+QK0/9cC+QLA/9cC+QLC/9cC+QLF/9cC+QLG/8MC+QLH/9cC+QLI/8MC+QLO/5oC+QLP/64C+QLV/9cC+QLZ/3EC+QLb/3EC+QLd/3EC+QLg/9cC+QLv/+wC+QLw/9cC+QLx/+wC+QLy/9cC+QLz/+wC+QL0/9cC+QL+/9cC+QMJ/3EC+QMK/9cC+QML/3EC+QMM/9cC+QMR/5oC+QMS/64C+QMV/+wC+QMW/9cC+QMa/9cC+QMb/5oC+QMc/64C+gAP/64C+gAR/64C+gHO/9cC+gHV/9cC+gHy/9cC+gII/64C+gIM/64C+gJz/9cC+gLP/9cC+gMS/9cC+gMc/9cC+wAP/4UC+wAR/4UC+wGf/+wC+wGk/5oC+wGq/3EC+wGu/5oC+wG1/5oC+wG4/+wC+wG7/+wC+wG+/8MC+wHJ/+wC+wHO/64C+wHP/9cC+wHV/64C+wHY/9cC+wHb/9cC+wHe/9cC+wHh/9cC+wHq/9cC+wHrAGYC+wHt/9cC+wHu/+wC+wHy/64C+wH0AGYC+wII/4UC+wIM/4UC+wJq/9cC+wJs/+wC+wJy/3EC+wJz/64C+wJ+/+wC+wJ//9cC+wKE/+wC+wKF/9cC+wKG/+wC+wKH/9cC+wKI/+wC+wKJ/9cC+wKK/+wC+wKM/+wC+wKN/9cC+wKYAGYC+wKoAGYC+wKx/+wC+wKy/9cC+wKz/+wC+wK0/9cC+wLA/9cC+wLC/9cC+wLF/9cC+wLG/8MC+wLH/9cC+wLI/8MC+wLO/5oC+wLP/64C+wLV/9cC+wLZ/3EC+wLb/3EC+wLd/3EC+wLg/9cC+wLv/+wC+wLw/9cC+wLx/+wC+wLy/9cC+wLz/+wC+wL0/9cC+wL+/9cC+wMJ/3EC+wMK/9cC+wML/3EC+wMM/9cC+wMR/5oC+wMS/64C+wMV/+wC+wMW/9cC+wMa/9cC+wMb/5oC+wMc/64C/AAP/64C/AAR/64C/AHO/9cC/AHV/9cC/AHy/9cC/AII/64C/AIM/64C/AJz/9cC/ALP/9cC/AMS/9cC/AMc/9cC/wAP/4UC/wAQ/64C/wAR/4UC/wGf/9cC/wGk/5oC/wGq/3EC/wGu/5oC/wG1/5oC/wG4/9cC/wG7/9cC/wG8ACkC/wG+/64C/wHM/5oC/wHN/5oC/wHO/4UC/wHP/3EC/wHQ/9cC/wHR/9cC/wHS/5oC/wHT/5oC/wHU/5oC/wHV/4UC/wHW/5oC/wHX/5oC/wHY/3EC/wHZ/5oC/wHa/5oC/wHb/3EC/wHc/64C/wHd/64C/wHe/3EC/wHf/9cC/wHg/5oC/wHh/5oC/wHi/5oC/wHj/5oC/wHk/64C/wHl/5oC/wHm/5oC/wHn/9cC/wHo/5oC/wHp/8MC/wHq/3EC/wHs/5oC/wHt/3EC/wHu/4UC/wHy/4UC/wHz/5oC/wH1/5oC/wH2/64C/wH3/5oC/wH5/5oC/wIC/64C/wID/64C/wIE/64C/wII/4UC/wIM/4UC/wJq/3EC/wJr/5oC/wJs/9cC/wJt/9cC/wJx/5oC/wJy/3EC/wJz/4UC/wJ1/5oC/wJ3/5oC/wJ5/5oC/wJ9/5oC/wJ+/9cC/wJ//3EC/wKB/9cC/wKD/9cC/wKE/9cC/wKF/3EC/wKG/9cC/wKH/3EC/wKI/9cC/wKJ/3EC/wKK/9cC/wKL/9cC/wKM/9cC/wKN/3EC/wKW/5oC/wKa/5oC/wKe/5oC/wKg/9cC/wKi/9cC/wKk/5oC/wKm/5oC/wKq/64C/wKs/5oC/wKu/5oC/wKw/5oC/wKx/9cC/wKy/3EC/wKz/9cC/wK0/3EC/wK1ACkC/wK2/64C/wK4/64C/wK6/64C/wK8/9cC/wK+/64C/wLA/5oC/wLC/5oC/wLE/5oC/wLF/5oC/wLG/3EC/wLH/5oC/wLI/3EC/wLL/9cC/wLN/5oC/wLO/5oC/wLP/4UC/wLR/5oC/wLT/5oC/wLV/5oC/wLX/5oC/wLZ/3EC/wLb/3EC/wLd/3EC/wLg/3EC/wLm/9cC/wLo/9cC/wLq/8MC/wLs/5oC/wLu/5oC/wLv/9cC/wLw/3EC/wLx/9cC/wLy/3EC/wLz/9cC/wL0/3EC/wL2/9cC/wL4/64C/wL6/64C/wL8/64C/wL+/5oC/wMA/5oC/wMC/5oC/wMG/9cC/wMI/9cC/wMJ/3EC/wMK/3EC/wML/3EC/wMM/3EC/wMO/5oC/wMQ/5oC/wMR/5oC/wMS/4UC/wMU/5oC/wMV/9cC/wMW/3EC/wMY/64C/wMa/3EC/wMb/5oC/wMc/4UDAAAP/5oDAAAQ/9cDAAAR/5oDAAHO/8MDAAHP/+wDAAHV/8MDAAHY/+wDAAHb/+wDAAHe/+wDAAHq/+wDAAHt/+wDAAHy/8MDAAIC/9cDAAID/9cDAAIE/9cDAAII/5oDAAIM/5oDAAJq/+wDAAJz/8MDAAJ//+wDAAKF/+wDAAKH/+wDAAKJ/+wDAAKN/+wDAAKy/+wDAAK0/+wDAALP/8MDAALg/+wDAALw/+wDAALy/+wDAAL0/+wDAAMK/+wDAAMM/+wDAAMS/8MDAAMW/+wDAAMa/+wDAAMc/8MDAwAP/5oDAwAQ/9cDAwAR/5oDAwGdACkDAwGf/9cDAwGk/64DAwGmACkDAwGq/4UDAwGu/64DAwG1/64DAwG4/9cDAwG7/9cDAwG8ACkDAwG+/8MDAwHEACkDAwHM/8MDAwHN/8MDAwHO/5oDAwHP/64DAwHQ/9cDAwHR/9cDAwHS/8MDAwHT/8MDAwHU/8MDAwHV/5oDAwHW/8MDAwHX/8MDAwHY/64DAwHZ/8MDAwHa/8MDAwHb/64DAwHe/64DAwHf/9cDAwHg/8MDAwHh/5oDAwHi/8MDAwHj/8MDAwHl/8MDAwHm/8MDAwHn/9cDAwHo/8MDAwHq/64DAwHrACkDAwHs/8MDAwHt/64DAwHu/8MDAwHy/5oDAwHz/8MDAwH0ACkDAwH1/8MDAwH3/8MDAwH5/8MDAwIC/9cDAwID/9cDAwIE/9cDAwII/5oDAwIM/5oDAwJq/64DAwJr/8MDAwJs/9cDAwJx/8MDAwJy/4UDAwJz/5oDAwJ1/8MDAwJ3/9cDAwJ5/8MDAwJ9/8MDAwJ+/9cDAwJ//64DAwKE/9cDAwKF/64DAwKG/9cDAwKH/64DAwKI/9cDAwKJ/64DAwKK/9cDAwKM/9cDAwKN/64DAwKW/8MDAwKYACkDAwKa/8MDAwKe/8MDAwKg/9cDAwKi/9cDAwKk/8MDAwKm/8MDAwKoACkDAwKpACkDAwKs/8MDAwKu/8MDAwKw/8MDAwKx/9cDAwKy/64DAwKz/9cDAwK0/64DAwK1ACkDAwK8/9cDAwK9ACkDAwLA/5oDAwLC/5oDAwLE/8MDAwLF/9cDAwLG/8MDAwLH/9cDAwLI/8MDAwLL/9cDAwLN/8MDAwLO/64DAwLP/5oDAwLR/8MDAwLT/8MDAwLV/5oDAwLX/8MDAwLZ/4UDAwLb/4UDAwLd/4UDAwLg/64DAwLm/9cDAwLo/9cDAwLs/8MDAwLu/8MDAwLv/9cDAwLw/64DAwLx/9cDAwLy/64DAwLz/9cDAwL0/64DAwL2/9cDAwL+/5oDAwMA/8MDAwMC/8MDAwMG/9cDAwMI/9cDAwMJ/5oDAwMK/64DAwML/5oDAwMM/64DAwMO/9cDAwMQ/9cDAwMR/64DAwMS/5oDAwMU/8MDAwMV/9cDAwMW/64DAwMXACkDAwMa/64DAwMb/64DAwMc/5oDBAAP/8MDBAAR/8MDBAHO/8MDBAHP/9cDBAHV/8MDBAHY/9cDBAHb/9cDBAHe/9cDBAHq/9cDBAHt/9cDBAHy/8MDBAII/8MDBAIM/8MDBAJq/9cDBAJz/8MDBAJ//9cDBAKF/9cDBAKH/9cDBAKJ/9cDBAKN/9cDBAKy/9cDBAK0/9cDBALP/8MDBALg/9cDBALw/9cDBALy/9cDBAL0/9cDBAMK/9cDBAMM/9cDBAMS/8MDBAMW/9cDBAMa/9cDBAMc/8MDBQGf/9cDBQGjAOEDBQG4/9cDBQG7/9cDBQG+/8MDBQHc/9cDBQHh/64DBQHk/9cDBQJs/9cDBQJ7AD0DBQJ9/+wDBQJ+/9cDBQKE/9cDBQKG/9cDBQKI/9cDBQKK/9cDBQKM/9cDBQKq/9cDBQKx/9cDBQKz/9cDBQK2/9cDBQK+/9cDBQLA/64DBQLC/64DBQLF/8MDBQLG/9cDBQLH/8MDBQLI/9cDBQLV/64DBQLv/9cDBQLx/9cDBQLz/9cDBQL+/64DBQMO/9cDBQMQ/9cDBQMV/9cDBQMY/9cDBgHP/+wDBgHY/+wDBgHb/+wDBgHe/+wDBgHh/+wDBgHq/+wDBgHt/+wDBgJq/+wDBgJ//+wDBgKF/+wDBgKH/+wDBgKJ/+wDBgKN/+wDBgKy/+wDBgK0/+wDBgLA/+wDBgLC/+wDBgLV/+wDBgLg/+wDBgLw/+wDBgLy/+wDBgL0/+wDBgL+/+wDBgMK/+wDBgMM/+wDBgMO/9cDBgMQ/9cDBgMW/+wDBgMa/+wDBwGf/9cDBwG4/9cDBwG7/9cDBwG+/9cDBwHB/9cDBwHh/9cDBwJs/9cDBwJ8/9cDBwJ+/9cDBwKE/9cDBwKG/9cDBwKI/9cDBwKK/9cDBwKM/9cDBwKx/9cDBwKz/9cDBwK//9cDBwLA/9cDBwLB/9cDBwLC/9cDBwLF/5oDBwLH/5oDBwLU/9cDBwLV/9cDBwLv/9cDBwLx/9cDBwLz/9cDBwL9/9cDBwL+/9cDBwMJ/9cDBwML/9cDBwMO/9cDBwMQ/9cDBwMV/9cDBwMZ/+wDCAHP/+wDCAHY/+wDCAHb/+wDCAHe/+wDCAHh/+wDCAHq/+wDCAHt/+wDCAJq/+wDCAJ//+wDCAKF/+wDCAKH/+wDCAKJ/+wDCAKN/+wDCAKy/+wDCAK0/+wDCALA/+wDCALC/+wDCALV/+wDCALg/+wDCALw/+wDCALy/+wDCAL0/+wDCAL+/+wDCAMK/+wDCAMM/+wDCAMO/9cDCAMQ/9cDCAMW/+wDCAMa/+wDCwAF/5oDCwAK/5oDCwGd/64DCwGm/64DCwGo/8MDCwGq/8MDCwGw/8MDCwG8/3EDCwG9/8MDCwG//8MDCwHB/8MDCwHE/64DCwHQ/9cDCwHc/8MDCwHf/9cDCwHh/9cDCwHk/8MDCwIH/5oDCwIL/5oDCwJy/8MDCwJ2/9cDCwJ8/8MDCwKA/8MDCwKC/8MDCwKf/8MDCwKg/9cDCwKp/64DCwKq/8MDCwK1/3EDCwK2/8MDCwK3/8MDCwK5/8MDCwK7/8MDCwK8/9cDCwK9/64DCwK+/8MDCwK//8MDCwLA/9cDCwLB/8MDCwLC/9cDCwLK/8MDCwLL/9cDCwLU/8MDCwLV/9cDCwLZ/8MDCwLb/8MDCwLd/8MDCwLl/8MDCwLm/9cDCwL3/8MDCwL5/8MDCwL7/8MDCwL9/8MDCwL+/9cDCwMF/8MDCwMG/9cDCwMH/8MDCwMI/9cDCwMN/9cDCwMO/9cDCwMP/9cDCwMQ/9cDCwMX/64DCwMY/8MDDAAF/5oDDAAK/5oDDAHQ/9cDDAHc/8MDDAHd/9cDDAHf/9cDDAHh/9cDDAHk/8MDDAH2/9cDDAIH/5oDDAIL/5oDDAKg/9cDDAKq/8MDDAK2/8MDDAK8/9cDDAK+/8MDDALA/9cDDALC/9cDDALL/9cDDALV/9cDDALm/9cDDAL4/9cDDAL6/9cDDAL8/9cDDAL+/9cDDAMG/9cDDAMI/9cDDAMO/5oDDAMQ/5oDDAMY/8MDDQAF/5oDDQAK/5oDDQGd/64DDQGm/64DDQGo/8MDDQGq/8MDDQGw/8MDDQG8/3EDDQG9/8MDDQG//8MDDQHB/8MDDQHE/64DDQHQ/9cDDQHc/8MDDQHf/9cDDQHh/9cDDQHk/8MDDQIH/5oDDQIL/5oDDQJy/8MDDQJ2/9cDDQJ8/8MDDQKA/8MDDQKC/8MDDQKf/8MDDQKg/9cDDQKp/64DDQKq/8MDDQK1/3EDDQK2/8MDDQK3/8MDDQK5/8MDDQK7/8MDDQK8/9cDDQK9/64DDQK+/8MDDQK//8MDDQLA/9cDDQLB/8MDDQLC/9cDDQLK/8MDDQLL/9cDDQLU/8MDDQLV/9cDDQLZ/8MDDQLb/8MDDQLd/8MDDQLl/8MDDQLm/9cDDQL3/8MDDQL5/8MDDQL7/8MDDQL9/8MDDQL+/9cDDQMF/8MDDQMG/9cDDQMH/8MDDQMI/9cDDQMN/9cDDQMO/9cDDQMP/9cDDQMQ/9cDDQMX/64DDQMY/8MDDgAF/5oDDgAK/5oDDgHQ/9cDDgHc/8MDDgHd/9cDDgHf/9cDDgHh/9cDDgHk/8MDDgH2/9cDDgIH/5oDDgIL/5oDDgKg/9cDDgKq/8MDDgK2/8MDDgK8/9cDDgK+/8MDDgLA/9cDDgLC/9cDDgLL/9cDDgLV/9cDDgLm/9cDDgL4/9cDDgL6/9cDDgL8/9cDDgL+/9cDDgMG/9cDDgMI/9cDDgMO/5oDDgMQ/5oDDgMY/8MDDwGjAOEDDwLqACkDDwMO/9cDDwMQ/9cDEAAF/+wDEAAK/+wDEAIH/+wDEAIL/+wDEQAF/5oDEQAK/5oDEQGd/64DEQGm/64DEQGo/8MDEQGq/8MDEQGw/8MDEQG8/3EDEQG9/8MDEQG//8MDEQHB/8MDEQHE/64DEQHQ/9cDEQHc/8MDEQHf/9cDEQHh/9cDEQHk/8MDEQIH/5oDEQIL/5oDEQJy/8MDEQJ2/9cDEQJ8/8MDEQKA/8MDEQKC/8MDEQKf/8MDEQKg/9cDEQKp/64DEQKq/8MDEQK1/3EDEQK2/8MDEQK3/8MDEQK5/8MDEQK7/8MDEQK8/9cDEQK9/64DEQK+/8MDEQK//8MDEQLA/9cDEQLB/8MDEQLC/9cDEQLK/8MDEQLL/9cDEQLU/8MDEQLV/9cDEQLZ/8MDEQLb/8MDEQLd/8MDEQLl/8MDEQLm/9cDEQL3/8MDEQL5/8MDEQL7/8MDEQL9/8MDEQL+/9cDEQMF/8MDEQMG/9cDEQMH/8MDEQMI/9cDEQMN/9cDEQMO/9cDEQMP/9cDEQMQ/9cDEQMX/64DEQMY/8MDEgAF/5oDEgAK/5oDEgHQ/9cDEgHc/8MDEgHd/9cDEgHf/9cDEgHh/9cDEgHk/8MDEgH2/9cDEgIH/5oDEgIL/5oDEgKg/9cDEgKq/8MDEgK2/8MDEgK8/9cDEgK+/8MDEgLA/9cDEgLC/9cDEgLL/9cDEgLV/9cDEgLm/9cDEgL4/9cDEgL6/9cDEgL8/9cDEgL+/9cDEgMG/9cDEgMI/9cDEgMO/5oDEgMQ/5oDEgMY/8MDEwAF/5oDEwAK/5oDEwGd/64DEwGm/64DEwGo/8MDEwGq/8MDEwGw/8MDEwG8/3EDEwG9/8MDEwG//8MDEwHB/8MDEwHE/64DEwHQ/9cDEwHc/8MDEwHf/9cDEwHh/9cDEwHk/8MDEwIH/5oDEwIL/5oDEwJy/8MDEwJ2/9cDEwJ8/8MDEwKA/8MDEwKC/8MDEwKf/8MDEwKg/9cDEwKp/64DEwKq/8MDEwK1/3EDEwK2/8MDEwK3/8MDEwK5/8MDEwK7/8MDEwK8/9cDEwK9/64DEwK+/8MDEwK//8MDEwLA/9cDEwLB/8MDEwLC/9cDEwLK/8MDEwLL/9cDEwLU/8MDEwLV/9cDEwLZ/8MDEwLb/8MDEwLd/8MDEwLl/8MDEwLm/9cDEwL3/8MDEwL5/8MDEwL7/8MDEwL9/8MDEwL+/9cDEwMF/8MDEwMG/9cDEwMH/8MDEwMI/9cDEwMN/9cDEwMO/9cDEwMP/9cDEwMQ/9cDEwMX/64DEwMY/8MDFAAF/5oDFAAK/5oDFAHQ/9cDFAHc/8MDFAHd/9cDFAHf/9cDFAHh/9cDFAHk/8MDFAH2/9cDFAIH/5oDFAIL/5oDFAKg/9cDFAKq/8MDFAK2/8MDFAK8/9cDFAK+/8MDFALA/9cDFALC/9cDFALL/9cDFALV/9cDFALm/9cDFAL4/9cDFAL6/9cDFAL8/9cDFAL+/9cDFAMG/9cDFAMI/9cDFAMO/5oDFAMQ/5oDFAMY/8MDFQAP/64DFQAR/64DFQGq/+wDFQGw/9cDFQG8/9cDFQG//9cDFQII/64DFQIM/64DFQJy/+wDFQKA/+wDFQKC/+wDFQKf/9cDFQK1/9cDFQK3/+wDFQK5/+wDFQK7/9cDFQLK/9cDFQLZ/+wDFQLb/+wDFQLd/+wDFQLl/9cDFQMF/9cDFQMH/9cDFgAF/9cDFgAK/9cDFgHQ/+wDFgHd/+wDFgHf/+wDFgH2/+wDFgIH/9cDFgIL/9cDFgKg/+wDFgK8/+wDFgLL/+wDFgLm/+wDFgL4/+wDFgL6/+wDFgL8/+wDFgMG/+wDFgMI/+wDFgMO/9cDFgMQ/9cDFwAF/64DFwAK/64DFwGd/8MDFwGm/8MDFwGq/9cDFwGw/9cDFwG8/8MDFwG//9cDFwHB/9cDFwHE/8MDFwHc/9cDFwHk/9cDFwIH/64DFwIL/64DFwJy/9cDFwJ8/9cDFwKA/9cDFwKC/9cDFwKf/9cDFwKp/8MDFwKq/9cDFwK1/8MDFwK2/9cDFwK3/9cDFwK5/9cDFwK7/9cDFwK9/8MDFwK+/9cDFwK//9cDFwLB/9cDFwLK/9cDFwLU/9cDFwLZ/9cDFwLb/9cDFwLd/9cDFwLl/9cDFwL9/9cDFwMF/9cDFwMH/9cDFwMN/9cDFwMP/9cDFwMX/8MDFwMY/9cDGAAF/5oDGAAK/5oDGAHQ/9cDGAHc/8MDGAHd/9cDGAHf/9cDGAHh/9cDGAHk/8MDGAH2/9cDGAIH/5oDGAIL/5oDGAKg/9cDGAKq/8MDGAK2/8MDGAK8/9cDGAK+/8MDGALA/9cDGALC/9cDGALL/9cDGALV/9cDGALm/9cDGAL4/9cDGAL6/9cDGAL8/9cDGAL+/9cDGAMG/9cDGAMI/9cDGAMO/5oDGAMQ/5oDGAMY/8MDGQHh/9cDGQLA/9cDGQLC/9cDGQLV/9cDGQL+/9cDGwGjAOEDGwLqACkDGwMO/9cDGwMQ/9cDHAAF/+wDHAAK/+wDHAIH/+wDHAIL/+wDHQAF/3EDHQAK/3EDHQAm/9cDHQAq/9cDHQAtAQoDHQAy/9cDHQA0/9cDHQA3/3EDHQA5/64DHQA6/64DHQA8/4UDHQCJ/9cDHQCU/9cDHQCV/9cDHQCW/9cDHQCX/9cDHQCY/9cDHQCa/9cDHQCf/4UDHQDI/9cDHQDK/9cDHQDM/9cDHQDO/9cDHQDe/9cDHQDg/9cDHQDi/9cDHQDk/9cDHQEO/9cDHQEQ/9cDHQES/9cDHQEU/9cDHQEk/3EDHQEm/3EDHQE2/64DHQE4/4UDHQE6/4UDHQFH/9cDHQH6/64DHQH8/64DHQH+/64DHQIA/4UDHQIH/3EDHQIL/3EDHQJf/9cDHQNJ/9cDHQNL/9cDHQNN/9cDHQNP/9cDHQNR/9cDHQNT/9cDHQNV/9cDHQNX/9cDHQNZ/9cDHQNb/9cDHQNd/9cDHQNf/9cDHQNv/4UDHQNx/4UDHQNz/4UDHQOP/3EDHgAF/+wDHgAK/+wDHgIH/+wDHgIL/+wDHwAF/3EDHwAK/3EDHwAm/9cDHwAq/9cDHwAtAQoDHwAy/9cDHwA0/9cDHwA3/3EDHwA5/64DHwA6/64DHwA8/4UDHwCJ/9cDHwCU/9cDHwCV/9cDHwCW/9cDHwCX/9cDHwCY/9cDHwCa/9cDHwCf/4UDHwDI/9cDHwDK/9cDHwDM/9cDHwDO/9cDHwDe/9cDHwDg/9cDHwDi/9cDHwDk/9cDHwEO/9cDHwEQ/9cDHwES/9cDHwEU/9cDHwEk/3EDHwEm/3EDHwE2/64DHwE4/4UDHwE6/4UDHwFH/9cDHwH6/64DHwH8/64DHwH+/64DHwIA/4UDHwIH/3EDHwIL/3EDHwJf/9cDHwNJ/9cDHwNL/9cDHwNN/9cDHwNP/9cDHwNR/9cDHwNT/9cDHwNV/9cDHwNX/9cDHwNZ/9cDHwNb/9cDHwNd/9cDHwNf/9cDHwNv/4UDHwNx/4UDHwNz/4UDHwOP/3EDIAAF/+wDIAAK/+wDIAIH/+wDIAIL/+wDIQAF/3EDIQAK/3EDIQAm/9cDIQAq/9cDIQAtAQoDIQAy/9cDIQA0/9cDIQA3/3EDIQA5/64DIQA6/64DIQA8/4UDIQCJ/9cDIQCU/9cDIQCV/9cDIQCW/9cDIQCX/9cDIQCY/9cDIQCa/9cDIQCf/4UDIQDI/9cDIQDK/9cDIQDM/9cDIQDO/9cDIQDe/9cDIQDg/9cDIQDi/9cDIQDk/9cDIQEO/9cDIQEQ/9cDIQES/9cDIQEU/9cDIQEk/3EDIQEm/3EDIQE2/64DIQE4/4UDIQE6/4UDIQFH/9cDIQH6/64DIQH8/64DIQH+/64DIQIA/4UDIQIH/3EDIQIL/3EDIQJf/9cDIQNJ/9cDIQNL/9cDIQNN/9cDIQNP/9cDIQNR/9cDIQNT/9cDIQNV/9cDIQNX/9cDIQNZ/9cDIQNb/9cDIQNd/9cDIQNf/9cDIQNv/4UDIQNx/4UDIQNz/4UDIQOP/3EDIgAF/+wDIgAK/+wDIgIH/+wDIgIL/+wDIwAF/3EDIwAK/3EDIwAm/9cDIwAq/9cDIwAtAQoDIwAy/9cDIwA0/9cDIwA3/3EDIwA5/64DIwA6/64DIwA8/4UDIwCJ/9cDIwCU/9cDIwCV/9cDIwCW/9cDIwCX/9cDIwCY/9cDIwCa/9cDIwCf/4UDIwDI/9cDIwDK/9cDIwDM/9cDIwDO/9cDIwDe/9cDIwDg/9cDIwDi/9cDIwDk/9cDIwEO/9cDIwEQ/9cDIwES/9cDIwEU/9cDIwEk/3EDIwEm/3EDIwE2/64DIwE4/4UDIwE6/4UDIwFH/9cDIwH6/64DIwH8/64DIwH+/64DIwIA/4UDIwIH/3EDIwIL/3EDIwJf/9cDIwNJ/9cDIwNL/9cDIwNN/9cDIwNP/9cDIwNR/9cDIwNT/9cDIwNV/9cDIwNX/9cDIwNZ/9cDIwNb/9cDIwNd/9cDIwNf/9cDIwNv/4UDIwNx/4UDIwNz/4UDIwOP/3EDJAAF/+wDJAAK/+wDJAIH/+wDJAIL/+wDJQAF/3EDJQAK/3EDJQAm/9cDJQAq/9cDJQAtAQoDJQAy/9cDJQA0/9cDJQA3/3EDJQA5/64DJQA6/64DJQA8/4UDJQCJ/9cDJQCU/9cDJQCV/9cDJQCW/9cDJQCX/9cDJQCY/9cDJQCa/9cDJQCf/4UDJQDI/9cDJQDK/9cDJQDM/9cDJQDO/9cDJQDe/9cDJQDg/9cDJQDi/9cDJQDk/9cDJQEO/9cDJQEQ/9cDJQES/9cDJQEU/9cDJQEk/3EDJQEm/3EDJQE2/64DJQE4/4UDJQE6/4UDJQFH/9cDJQH6/64DJQH8/64DJQH+/64DJQIA/4UDJQIH/3EDJQIL/3EDJQJf/9cDJQNJ/9cDJQNL/9cDJQNN/9cDJQNP/9cDJQNR/9cDJQNT/9cDJQNV/9cDJQNX/9cDJQNZ/9cDJQNb/9cDJQNd/9cDJQNf/9cDJQNv/4UDJQNx/4UDJQNz/4UDJQOP/3EDJgAF/+wDJgAK/+wDJgIH/+wDJgIL/+wDJwAF/3EDJwAK/3EDJwAm/9cDJwAq/9cDJwAtAQoDJwAy/9cDJwA0/9cDJwA3/3EDJwA5/64DJwA6/64DJwA8/4UDJwCJ/9cDJwCU/9cDJwCV/9cDJwCW/9cDJwCX/9cDJwCY/9cDJwCa/9cDJwCf/4UDJwDI/9cDJwDK/9cDJwDM/9cDJwDO/9cDJwDe/9cDJwDg/9cDJwDi/9cDJwDk/9cDJwEO/9cDJwEQ/9cDJwES/9cDJwEU/9cDJwEk/3EDJwEm/3EDJwE2/64DJwE4/4UDJwE6/4UDJwFH/9cDJwH6/64DJwH8/64DJwH+/64DJwIA/4UDJwIH/3EDJwIL/3EDJwJf/9cDJwNJ/9cDJwNL/9cDJwNN/9cDJwNP/9cDJwNR/9cDJwNT/9cDJwNV/9cDJwNX/9cDJwNZ/9cDJwNb/9cDJwNd/9cDJwNf/9cDJwNv/4UDJwNx/4UDJwNz/4UDJwOP/3EDKAAF/+wDKAAK/+wDKAIH/+wDKAIL/+wDKQAF/3EDKQAK/3EDKQAm/9cDKQAq/9cDKQAtAQoDKQAy/9cDKQA0/9cDKQA3/3EDKQA5/64DKQA6/64DKQA8/4UDKQCJ/9cDKQCU/9cDKQCV/9cDKQCW/9cDKQCX/9cDKQCY/9cDKQCa/9cDKQCf/4UDKQDI/9cDKQDK/9cDKQDM/9cDKQDO/9cDKQDe/9cDKQDg/9cDKQDi/9cDKQDk/9cDKQEO/9cDKQEQ/9cDKQES/9cDKQEU/9cDKQEk/3EDKQEm/3EDKQE2/64DKQE4/4UDKQE6/4UDKQFH/9cDKQH6/64DKQH8/64DKQH+/64DKQIA/4UDKQIH/3EDKQIL/3EDKQJf/9cDKQNJ/9cDKQNL/9cDKQNN/9cDKQNP/9cDKQNR/9cDKQNT/9cDKQNV/9cDKQNX/9cDKQNZ/9cDKQNb/9cDKQNd/9cDKQNf/9cDKQNv/4UDKQNx/4UDKQNz/4UDKQOP/3EDKgAF/+wDKgAK/+wDKgIH/+wDKgIL/+wDKwAF/3EDKwAK/3EDKwAm/9cDKwAq/9cDKwAtAQoDKwAy/9cDKwA0/9cDKwA3/3EDKwA5/64DKwA6/64DKwA8/4UDKwCJ/9cDKwCU/9cDKwCV/9cDKwCW/9cDKwCX/9cDKwCY/9cDKwCa/9cDKwCf/4UDKwDI/9cDKwDK/9cDKwDM/9cDKwDO/9cDKwDe/9cDKwDg/9cDKwDi/9cDKwDk/9cDKwEO/9cDKwEQ/9cDKwES/9cDKwEU/9cDKwEk/3EDKwEm/3EDKwE2/64DKwE4/4UDKwE6/4UDKwFH/9cDKwH6/64DKwH8/64DKwH+/64DKwIA/4UDKwIH/3EDKwIL/3EDKwJf/9cDKwNJ/9cDKwNL/9cDKwNN/9cDKwNP/9cDKwNR/9cDKwNT/9cDKwNV/9cDKwNX/9cDKwNZ/9cDKwNb/9cDKwNd/9cDKwNf/9cDKwNv/4UDKwNx/4UDKwNz/4UDKwOP/3EDLAAF/+wDLAAK/+wDLAIH/+wDLAIL/+wDLQAF/3EDLQAK/3EDLQAm/9cDLQAq/9cDLQAtAQoDLQAy/9cDLQA0/9cDLQA3/3EDLQA5/64DLQA6/64DLQA8/4UDLQCJ/9cDLQCU/9cDLQCV/9cDLQCW/9cDLQCX/9cDLQCY/9cDLQCa/9cDLQCf/4UDLQDI/9cDLQDK/9cDLQDM/9cDLQDO/9cDLQDe/9cDLQDg/9cDLQDi/9cDLQDk/9cDLQEO/9cDLQEQ/9cDLQES/9cDLQEU/9cDLQEk/3EDLQEm/3EDLQE2/64DLQE4/4UDLQE6/4UDLQFH/9cDLQH6/64DLQH8/64DLQH+/64DLQIA/4UDLQIH/3EDLQIL/3EDLQJf/9cDLQNJ/9cDLQNL/9cDLQNN/9cDLQNP/9cDLQNR/9cDLQNT/9cDLQNV/9cDLQNX/9cDLQNZ/9cDLQNb/9cDLQNd/9cDLQNf/9cDLQNv/4UDLQNx/4UDLQNz/4UDLQOP/3EDLgAF/+wDLgAK/+wDLgIH/+wDLgIL/+wDLwAF/3EDLwAK/3EDLwAm/9cDLwAq/9cDLwAtAQoDLwAy/9cDLwA0/9cDLwA3/3EDLwA5/64DLwA6/64DLwA8/4UDLwCJ/9cDLwCU/9cDLwCV/9cDLwCW/9cDLwCX/9cDLwCY/9cDLwCa/9cDLwCf/4UDLwDI/9cDLwDK/9cDLwDM/9cDLwDO/9cDLwDe/9cDLwDg/9cDLwDi/9cDLwDk/9cDLwEO/9cDLwEQ/9cDLwES/9cDLwEU/9cDLwEk/3EDLwEm/3EDLwE2/64DLwE4/4UDLwE6/4UDLwFH/9cDLwH6/64DLwH8/64DLwH+/64DLwIA/4UDLwIH/3EDLwIL/3EDLwJf/9cDLwNJ/9cDLwNL/9cDLwNN/9cDLwNP/9cDLwNR/9cDLwNT/9cDLwNV/9cDLwNX/9cDLwNZ/9cDLwNb/9cDLwNd/9cDLwNf/9cDLwNv/4UDLwNx/4UDLwNz/4UDLwOP/3EDMAAF/+wDMAAK/+wDMAIH/+wDMAIL/+wDMQAF/3EDMQAK/3EDMQAm/9cDMQAq/9cDMQAtAQoDMQAy/9cDMQA0/9cDMQA3/3EDMQA5/64DMQA6/64DMQA8/4UDMQCJ/9cDMQCU/9cDMQCV/9cDMQCW/9cDMQCX/9cDMQCY/9cDMQCa/9cDMQCf/4UDMQDI/9cDMQDK/9cDMQDM/9cDMQDO/9cDMQDe/9cDMQDg/9cDMQDi/9cDMQDk/9cDMQEO/9cDMQEQ/9cDMQES/9cDMQEU/9cDMQEk/3EDMQEm/3EDMQE2/64DMQE4/4UDMQE6/4UDMQFH/9cDMQH6/64DMQH8/64DMQH+/64DMQIA/4UDMQIH/3EDMQIL/3EDMQJf/9cDMQNJ/9cDMQNL/9cDMQNN/9cDMQNP/9cDMQNR/9cDMQNT/9cDMQNV/9cDMQNX/9cDMQNZ/9cDMQNb/9cDMQNd/9cDMQNf/9cDMQNv/4UDMQNx/4UDMQNz/4UDMQOP/3EDMgAF/+wDMgAK/+wDMgIH/+wDMgIL/+wDMwAF/3EDMwAK/3EDMwAm/9cDMwAq/9cDMwAtAQoDMwAy/9cDMwA0/9cDMwA3/3EDMwA5/64DMwA6/64DMwA8/4UDMwCJ/9cDMwCU/9cDMwCV/9cDMwCW/9cDMwCX/9cDMwCY/9cDMwCa/9cDMwCf/4UDMwDI/9cDMwDK/9cDMwDM/9cDMwDO/9cDMwDe/9cDMwDg/9cDMwDi/9cDMwDk/9cDMwEO/9cDMwEQ/9cDMwES/9cDMwEU/9cDMwEk/3EDMwEm/3EDMwE2/64DMwE4/4UDMwE6/4UDMwFH/9cDMwH6/64DMwH8/64DMwH+/64DMwIA/4UDMwIH/3EDMwIL/3EDMwJf/9cDMwNJ/9cDMwNL/9cDMwNN/9cDMwNP/9cDMwNR/9cDMwNT/9cDMwNV/9cDMwNX/9cDMwNZ/9cDMwNb/9cDMwNd/9cDMwNf/9cDMwNv/4UDMwNx/4UDMwNz/4UDMwOP/3EDNAAF/+wDNAAK/+wDNAIH/+wDNAIL/+wDNQAtAHsDNgAF/+wDNgAK/+wDNgBZ/9cDNgBa/9cDNgBb/9cDNgBc/9cDNgBd/+wDNgC//9cDNgE3/9cDNgE8/+wDNgE+/+wDNgFA/+wDNgH7/9cDNgH9/9cDNgIH/+wDNgIL/+wDNgNw/9cDNwAtAHsDOAAF/+wDOAAK/+wDOABZ/9cDOABa/9cDOABb/9cDOABc/9cDOABd/+wDOAC//9cDOAE3/9cDOAE8/+wDOAE+/+wDOAFA/+wDOAH7/9cDOAH9/9cDOAIH/+wDOAIL/+wDOANw/9cDOQAtAHsDOgAF/+wDOgAK/+wDOgBZ/9cDOgBa/9cDOgBb/9cDOgBc/9cDOgBd/+wDOgC//9cDOgE3/9cDOgE8/+wDOgE+/+wDOgFA/+wDOgH7/9cDOgH9/9cDOgIH/+wDOgIL/+wDOgNw/9cDOwAtAHsDPAAF/+wDPAAK/+wDPABZ/9cDPABa/9cDPABb/9cDPABc/9cDPABd/+wDPAC//9cDPAE3/9cDPAE8/+wDPAE+/+wDPAFA/+wDPAH7/9cDPAH9/9cDPAIH/+wDPAIL/+wDPANw/9cDPQAtAHsDPgAF/+wDPgAK/+wDPgBZ/9cDPgBa/9cDPgBb/9cDPgBc/9cDPgBd/+wDPgC//9cDPgE3/9cDPgE8/+wDPgE+/+wDPgFA/+wDPgH7/9cDPgH9/9cDPgIH/+wDPgIL/+wDPgNw/9cDPwAtAHsDQAAF/+wDQAAK/+wDQABZ/9cDQABa/9cDQABb/9cDQABc/9cDQABd/+wDQAC//9cDQAE3/9cDQAE8/+wDQAE+/+wDQAFA/+wDQAH7/9cDQAH9/9cDQAIH/+wDQAIL/+wDQANw/9cDQQAtAHsDQgAF/+wDQgAK/+wDQgBZ/9cDQgBa/9cDQgBb/9cDQgBc/9cDQgBd/+wDQgC//9cDQgE3/9cDQgE8/+wDQgE+/+wDQgFA/+wDQgH7/9cDQgH9/9cDQgIH/+wDQgIL/+wDQgNw/9cDQwAtAHsDRAAF/+wDRAAK/+wDRABZ/9cDRABa/9cDRABb/9cDRABc/9cDRABd/+wDRAC//9cDRAE3/9cDRAE8/+wDRAE+/+wDRAFA/+wDRAH7/9cDRAH9/9cDRAIH/+wDRAIL/+wDRANw/9cDSQAP/64DSQAR/64DSQAk/9cDSQA3/8MDSQA5/+wDSQA6/+wDSQA7/9cDSQA8/+wDSQA9/+wDSQCC/9cDSQCD/9cDSQCE/9cDSQCF/9cDSQCG/9cDSQCH/9cDSQCf/+wDSQDC/9cDSQDE/9cDSQDG/9cDSQEk/8MDSQEm/8MDSQE2/+wDSQE4/+wDSQE6/+wDSQE7/+wDSQE9/+wDSQE//+wDSQFD/9cDSQGg/+wDSQH6/+wDSQH8/+wDSQH+/+wDSQIA/+wDSQII/64DSQIM/64DSQJY/9cDSQMd/9cDSQMf/9cDSQMh/9cDSQMj/9cDSQMl/9cDSQMn/9cDSQMp/9cDSQMr/9cDSQMt/9cDSQMv/9cDSQMx/9cDSQMz/9cDSQNv/+wDSQNx/+wDSQNz/+wDSQOP/8MDSgAF/+wDSgAK/+wDSgBZ/9cDSgBa/9cDSgBb/9cDSgBc/9cDSgBd/+wDSgC//9cDSgE3/9cDSgE8/+wDSgE+/+wDSgFA/+wDSgH7/9cDSgH9/9cDSgIH/+wDSgIL/+wDSgNw/9cDSwAP/64DSwAR/64DSwAk/9cDSwA3/8MDSwA5/+wDSwA6/+wDSwA7/9cDSwA8/+wDSwA9/+wDSwCC/9cDSwCD/9cDSwCE/9cDSwCF/9cDSwCG/9cDSwCH/9cDSwCf/+wDSwDC/9cDSwDE/9cDSwDG/9cDSwEk/8MDSwEm/8MDSwE2/+wDSwE4/+wDSwE6/+wDSwE7/+wDSwE9/+wDSwE//+wDSwFD/9cDSwGg/+wDSwH6/+wDSwH8/+wDSwH+/+wDSwIA/+wDSwII/64DSwIM/64DSwJY/9cDSwMd/9cDSwMf/9cDSwMh/9cDSwMj/9cDSwMl/9cDSwMn/9cDSwMp/9cDSwMr/9cDSwMt/9cDSwMv/9cDSwMx/9cDSwMz/9cDSwNv/+wDSwNx/+wDSwNz/+wDSwOP/8MDTAAF/+wDTAAK/+wDTABZ/9cDTABa/9cDTABb/9cDTABc/9cDTABd/+wDTAC//9cDTAE3/9cDTAE8/+wDTAE+/+wDTAFA/+wDTAH7/9cDTAH9/9cDTAIH/+wDTAIL/+wDTANw/9cDTQAP/64DTQAR/64DTQAk/9cDTQA3/8MDTQA5/+wDTQA6/+wDTQA7/9cDTQA8/+wDTQA9/+wDTQCC/9cDTQCD/9cDTQCE/9cDTQCF/9cDTQCG/9cDTQCH/9cDTQCf/+wDTQDC/9cDTQDE/9cDTQDG/9cDTQEk/8MDTQEm/8MDTQE2/+wDTQE4/+wDTQE6/+wDTQE7/+wDTQE9/+wDTQE//+wDTQFD/9cDTQGg/+wDTQH6/+wDTQH8/+wDTQH+/+wDTQIA/+wDTQII/64DTQIM/64DTQJY/9cDTQMd/9cDTQMf/9cDTQMh/9cDTQMj/9cDTQMl/9cDTQMn/9cDTQMp/9cDTQMr/9cDTQMt/9cDTQMv/9cDTQMx/9cDTQMz/9cDTQNv/+wDTQNx/+wDTQNz/+wDTQOP/8MDTwAP/64DTwAR/64DTwAk/9cDTwA3/8MDTwA5/+wDTwA6/+wDTwA7/9cDTwA8/+wDTwA9/+wDTwCC/9cDTwCD/9cDTwCE/9cDTwCF/9cDTwCG/9cDTwCH/9cDTwCf/+wDTwDC/9cDTwDE/9cDTwDG/9cDTwEk/8MDTwEm/8MDTwE2/+wDTwE4/+wDTwE6/+wDTwE7/+wDTwE9/+wDTwE//+wDTwFD/9cDTwGg/+wDTwH6/+wDTwH8/+wDTwH+/+wDTwIA/+wDTwII/64DTwIM/64DTwJY/9cDTwMd/9cDTwMf/9cDTwMh/9cDTwMj/9cDTwMl/9cDTwMn/9cDTwMp/9cDTwMr/9cDTwMt/9cDTwMv/9cDTwMx/9cDTwMz/9cDTwNv/+wDTwNx/+wDTwNz/+wDTwOP/8MDUQAP/64DUQAR/64DUQAk/9cDUQA3/8MDUQA5/+wDUQA6/+wDUQA7/9cDUQA8/+wDUQA9/+wDUQCC/9cDUQCD/9cDUQCE/9cDUQCF/9cDUQCG/9cDUQCH/9cDUQCf/+wDUQDC/9cDUQDE/9cDUQDG/9cDUQEk/8MDUQEm/8MDUQE2/+wDUQE4/+wDUQE6/+wDUQE7/+wDUQE9/+wDUQE//+wDUQFD/9cDUQGg/+wDUQH6/+wDUQH8/+wDUQH+/+wDUQIA/+wDUQII/64DUQIM/64DUQJY/9cDUQMd/9cDUQMf/9cDUQMh/9cDUQMj/9cDUQMl/9cDUQMn/9cDUQMp/9cDUQMr/9cDUQMt/9cDUQMv/9cDUQMx/9cDUQMz/9cDUQNv/+wDUQNx/+wDUQNz/+wDUQOP/8MDUwAP/64DUwAR/64DUwAk/9cDUwA3/8MDUwA5/+wDUwA6/+wDUwA7/9cDUwA8/+wDUwA9/+wDUwCC/9cDUwCD/9cDUwCE/9cDUwCF/9cDUwCG/9cDUwCH/9cDUwCf/+wDUwDC/9cDUwDE/9cDUwDG/9cDUwEk/8MDUwEm/8MDUwE2/+wDUwE4/+wDUwE6/+wDUwE7/+wDUwE9/+wDUwE//+wDUwFD/9cDUwGg/+wDUwH6/+wDUwH8/+wDUwH+/+wDUwIA/+wDUwII/64DUwIM/64DUwJY/9cDUwMd/9cDUwMf/9cDUwMh/9cDUwMj/9cDUwMl/9cDUwMn/9cDUwMp/9cDUwMr/9cDUwMt/9cDUwMv/9cDUwMx/9cDUwMz/9cDUwNv/+wDUwNx/+wDUwNz/+wDUwOP/8MDVQAP/64DVQAR/64DVQAk/9cDVQA3/8MDVQA5/+wDVQA6/+wDVQA7/9cDVQA8/+wDVQA9/+wDVQCC/9cDVQCD/9cDVQCE/9cDVQCF/9cDVQCG/9cDVQCH/9cDVQCf/+wDVQDC/9cDVQDE/9cDVQDG/9cDVQEk/8MDVQEm/8MDVQE2/+wDVQE4/+wDVQE6/+wDVQE7/+wDVQE9/+wDVQE//+wDVQFD/9cDVQGg/+wDVQH6/+wDVQH8/+wDVQH+/+wDVQIA/+wDVQII/64DVQIM/64DVQJY/9cDVQMd/9cDVQMf/9cDVQMh/9cDVQMj/9cDVQMl/9cDVQMn/9cDVQMp/9cDVQMr/9cDVQMt/9cDVQMv/9cDVQMx/9cDVQMz/9cDVQNv/+wDVQNx/+wDVQNz/+wDVQOP/8MDWABJAFIDWABXAFIDWABZAGYDWABaAGYDWABbAGYDWABcAGYDWAC/AGYDWAElAFIDWAEnAFIDWAE3AGYDWAH7AGYDWAH9AGYDWAI0AFIDWAI1AFIDWAJdAFIDWAJeAFIDWANwAGYDWAONAFIDWAOQAFIDWgBJAFIDWgBXAFIDWgBZAGYDWgBaAGYDWgBbAGYDWgBcAGYDWgC/AGYDWgElAFIDWgEnAFIDWgE3AGYDWgH7AGYDWgH9AGYDWgI0AFIDWgI1AFIDWgJdAFIDWgJeAFIDWgNwAGYDWgONAFIDWgOQAFIDXABJAFIDXABXAFIDXABZAGYDXABaAGYDXABbAGYDXABcAGYDXAC/AGYDXAElAFIDXAEnAFIDXAE3AGYDXAH7AGYDXAH9AGYDXAI0AFIDXAI1AFIDXAJdAFIDXAJeAFIDXANwAGYDXAONAFIDXAOQAFIDXgBJAFIDXgBXAFIDXgBZAGYDXgBaAGYDXgBbAGYDXgBcAGYDXgC/AGYDXgElAFIDXgEnAFIDXgE3AGYDXgH7AGYDXgH9AGYDXgI0AFIDXgI1AFIDXgJdAFIDXgJeAFIDXgNwAGYDXgONAFIDXgOQAFIDYABJAFIDYABXAFIDYABZAGYDYABaAGYDYABbAGYDYABcAGYDYAC/AGYDYAElAFIDYAEnAFIDYAE3AGYDYAH7AGYDYAH9AGYDYAI0AFIDYAI1AFIDYAJdAFIDYAJeAFIDYANwAGYDYAONAFIDYAOQAFIDYQAP/9cDYQAR/9cDYQAk/+wDYQCC/+wDYQCD/+wDYQCE/+wDYQCF/+wDYQCG/+wDYQCH/+wDYQDC/+wDYQDE/+wDYQDG/+wDYQFD/+wDYQII/9cDYQIM/9cDYQJY/+wDYQMd/+wDYQMf/+wDYQMh/+wDYQMj/+wDYQMl/+wDYQMn/+wDYQMp/+wDYQMr/+wDYQMt/+wDYQMv/+wDYQMx/+wDYQMz/+wDZgBJAGYDZgBXAGYDZgBZAGYDZgBaAGYDZgBbAGYDZgBcAGYDZgC/AGYDZgElAGYDZgEnAGYDZgE3AGYDZgH7AGYDZgH9AGYDZgI0AGYDZgI1AGYDZgJdAGYDZgJeAGYDZgNwAGYDZgONAGYDZgOQAGYDaABJAGYDaABXAGYDaABZAGYDaABaAGYDaABbAGYDaABcAGYDaAC/AGYDaAElAGYDaAEnAGYDaAE3AGYDaAH7AGYDaAH9AGYDaAI0AGYDaAI1AGYDaAJdAGYDaAJeAGYDaANwAGYDaAONAGYDaAOQAGYDagBJAGYDagBXAGYDagBZAGYDagBaAGYDagBbAGYDagBcAGYDagC/AGYDagElAGYDagEnAGYDagE3AGYDagH7AGYDagH9AGYDagI0AGYDagI1AGYDagJdAGYDagJeAGYDagNwAGYDagONAGYDagOQAGYDbABJAGYDbABXAGYDbABZAGYDbABaAGYDbABbAGYDbABcAGYDbAC/AGYDbAElAGYDbAEnAGYDbAE3AGYDbAH7AGYDbAH9AGYDbAI0AGYDbAI1AGYDbAJdAGYDbAJeAGYDbANwAGYDbAONAGYDbAOQAGYDbgBJAGYDbgBXAGYDbgBZAGYDbgBaAGYDbgBbAGYDbgBcAGYDbgC/AGYDbgElAGYDbgEnAGYDbgE3AGYDbgH7AGYDbgH9AGYDbgI0AGYDbgI1AGYDbgJdAGYDbgJeAGYDbgNwAGYDbgONAGYDbgOQAGYDbwAP/4UDbwAR/4UDbwAiACkDbwAk/4UDbwAm/9cDbwAq/9cDbwAy/9cDbwA0/9cDbwBE/5oDbwBG/5oDbwBH/5oDbwBI/5oDbwBK/9cDbwBQ/8MDbwBR/8MDbwBS/5oDbwBT/8MDbwBU/5oDbwBV/8MDbwBW/64DbwBY/8MDbwBd/9cDbwCC/4UDbwCD/4UDbwCE/4UDbwCF/4UDbwCG/4UDbwCH/4UDbwCJ/9cDbwCU/9cDbwCV/9cDbwCW/9cDbwCX/9cDbwCY/9cDbwCa/9cDbwCi/5oDbwCj/5oDbwCk/5oDbwCl/5oDbwCm/5oDbwCn/5oDbwCo/5oDbwCp/5oDbwCq/5oDbwCr/5oDbwCs/5oDbwCt/5oDbwC0/5oDbwC1/5oDbwC2/5oDbwC3/5oDbwC4/5oDbwC6/5oDbwC7/8MDbwC8/8MDbwC9/8MDbwC+/8MDbwDC/4UDbwDD/5oDbwDE/4UDbwDF/5oDbwDG/4UDbwDH/5oDbwDI/9cDbwDJ/5oDbwDK/9cDbwDL/5oDbwDM/9cDbwDN/5oDbwDO/9cDbwDP/5oDbwDR/5oDbwDT/5oDbwDV/5oDbwDX/5oDbwDZ/5oDbwDb/5oDbwDd/5oDbwDe/9cDbwDf/9cDbwDg/9cDbwDh/9cDbwDi/9cDbwDj/9cDbwDk/9cDbwDl/9cDbwD6/8MDbwEG/8MDbwEI/8MDbwEN/8MDbwEO/9cDbwEP/5oDbwEQ/9cDbwER/5oDbwES/9cDbwET/5oDbwEU/9cDbwEV/5oDbwEX/8MDbwEZ/8MDbwEd/64DbwEh/64DbwEr/8MDbwEt/8MDbwEv/8MDbwEx/8MDbwEz/8MDbwE1/8MDbwE8/9cDbwE+/9cDbwFA/9cDbwFD/4UDbwFE/5oDbwFG/5oDbwFH/9cDbwFI/5oDbwFK/64DbwII/4UDbwIM/4UDbwJX/8MDbwJY/4UDbwJZ/5oDbwJf/9cDbwJg/5oDbwJi/8MDbwMd/4UDbwMe/5oDbwMf/4UDbwMg/5oDbwMh/4UDbwMi/5oDbwMj/4UDbwMl/4UDbwMm/5oDbwMn/4UDbwMo/5oDbwMp/4UDbwMq/5oDbwMr/4UDbwMs/5oDbwMt/4UDbwMu/5oDbwMv/4UDbwMw/5oDbwMx/4UDbwMy/5oDbwMz/4UDbwM0/5oDbwM2/5oDbwM4/5oDbwM6/5oDbwM8/5oDbwNA/5oDbwNC/5oDbwNE/5oDbwNJ/9cDbwNK/5oDbwNL/9cDbwNM/5oDbwNN/9cDbwNO/5oDbwNP/9cDbwNR/9cDbwNS/5oDbwNT/9cDbwNU/5oDbwNV/9cDbwNW/5oDbwNX/9cDbwNY/5oDbwNZ/9cDbwNa/5oDbwNb/9cDbwNc/5oDbwNd/9cDbwNe/5oDbwNf/9cDbwNg/5oDbwNi/8MDbwNk/8MDbwNm/8MDbwNo/8MDbwNq/8MDbwNs/8MDbwNu/8MDcAAFAFIDcAAKAFIDcAAP/64DcAAR/64DcAAiACkDcAIHAFIDcAII/64DcAILAFIDcAIM/64DcQAP/4UDcQAR/4UDcQAiACkDcQAk/4UDcQAm/9cDcQAq/9cDcQAy/9cDcQA0/9cDcQBE/5oDcQBG/5oDcQBH/5oDcQBI/5oDcQBK/9cDcQBQ/8MDcQBR/8MDcQBS/5oDcQBT/8MDcQBU/5oDcQBV/8MDcQBW/64DcQBY/8MDcQBd/9cDcQCC/4UDcQCD/4UDcQCE/4UDcQCF/4UDcQCG/4UDcQCH/4UDcQCJ/9cDcQCU/9cDcQCV/9cDcQCW/9cDcQCX/9cDcQCY/9cDcQCa/9cDcQCi/5oDcQCj/5oDcQCk/5oDcQCl/5oDcQCm/5oDcQCn/5oDcQCo/5oDcQCp/5oDcQCq/5oDcQCr/5oDcQCs/5oDcQCt/5oDcQC0/5oDcQC1/5oDcQC2/5oDcQC3/5oDcQC4/5oDcQC6/5oDcQC7/8MDcQC8/8MDcQC9/8MDcQC+/8MDcQDC/4UDcQDD/5oDcQDE/4UDcQDF/5oDcQDG/4UDcQDH/5oDcQDI/9cDcQDJ/5oDcQDK/9cDcQDL/5oDcQDM/9cDcQDN/5oDcQDO/9cDcQDP/5oDcQDR/5oDcQDT/5oDcQDV/5oDcQDX/5oDcQDZ/5oDcQDb/5oDcQDd/5oDcQDe/9cDcQDf/9cDcQDg/9cDcQDh/9cDcQDi/9cDcQDj/9cDcQDk/9cDcQDl/9cDcQD6/8MDcQEG/8MDcQEI/8MDcQEN/8MDcQEO/9cDcQEP/5oDcQEQ/9cDcQER/5oDcQES/9cDcQET/5oDcQEU/9cDcQEV/5oDcQEX/8MDcQEZ/8MDcQEd/64DcQEh/64DcQEr/8MDcQEt/8MDcQEv/8MDcQEx/8MDcQEz/8MDcQE1/8MDcQE8/9cDcQE+/9cDcQFA/9cDcQFD/4UDcQFE/5oDcQFG/5oDcQFH/9cDcQFI/5oDcQFK/64DcQII/4UDcQIM/4UDcQJX/8MDcQJY/4UDcQJZ/5oDcQJf/9cDcQJg/5oDcQJi/8MDcQMd/4UDcQMe/5oDcQMf/4UDcQMg/5oDcQMh/4UDcQMi/5oDcQMj/4UDcQMl/4UDcQMm/5oDcQMn/4UDcQMo/5oDcQMp/4UDcQMq/5oDcQMr/4UDcQMs/5oDcQMt/4UDcQMu/5oDcQMv/4UDcQMw/5oDcQMx/4UDcQMy/5oDcQMz/4UDcQM0/5oDcQM2/5oDcQM4/5oDcQM6/5oDcQM8/5oDcQNA/5oDcQNC/5oDcQNE/5oDcQNJ/9cDcQNK/5oDcQNL/9cDcQNM/5oDcQNN/9cDcQNO/5oDcQNP/9cDcQNR/9cDcQNS/5oDcQNT/9cDcQNU/5oDcQNV/9cDcQNW/5oDcQNX/9cDcQNY/5oDcQNZ/9cDcQNa/5oDcQNb/9cDcQNc/5oDcQNd/9cDcQNe/5oDcQNf/9cDcQNg/5oDcQNi/8MDcQNk/8MDcQNm/8MDcQNo/8MDcQNq/8MDcQNs/8MDcQNu/8MDcgAFAFIDcgAKAFIDcgAP/64DcgAR/64DcgAiACkDcgIHAFIDcgII/64DcgILAFIDcgIM/64DcwAP/4UDcwAR/4UDcwAiACkDcwAk/4UDcwAm/9cDcwAq/9cDcwAy/9cDcwA0/9cDcwBE/5oDcwBG/5oDcwBH/5oDcwBI/5oDcwBK/9cDcwBQ/8MDcwBR/8MDcwBS/5oDcwBT/8MDcwBU/5oDcwBV/8MDcwBW/64DcwBY/8MDcwBd/9cDcwCC/4UDcwCD/4UDcwCE/4UDcwCF/4UDcwCG/4UDcwCH/4UDcwCJ/9cDcwCU/9cDcwCV/9cDcwCW/9cDcwCX/9cDcwCY/9cDcwCa/9cDcwCi/5oDcwCj/5oDcwCk/5oDcwCl/5oDcwCm/5oDcwCn/5oDcwCo/5oDcwCp/5oDcwCq/5oDcwCr/5oDcwCs/5oDcwCt/5oDcwC0/5oDcwC1/5oDcwC2/5oDcwC3/5oDcwC4/5oDcwC6/5oDcwC7/8MDcwC8/8MDcwC9/8MDcwC+/8MDcwDC/4UDcwDD/5oDcwDE/4UDcwDF/5oDcwDG/4UDcwDH/5oDcwDI/9cDcwDJ/5oDcwDK/9cDcwDL/5oDcwDM/9cDcwDN/5oDcwDO/9cDcwDP/5oDcwDR/5oDcwDT/5oDcwDV/5oDcwDX/5oDcwDZ/5oDcwDb/5oDcwDd/5oDcwDe/9cDcwDf/9cDcwDg/9cDcwDh/9cDcwDi/9cDcwDj/9cDcwDk/9cDcwDl/9cDcwD6/8MDcwEG/8MDcwEI/8MDcwEN/8MDcwEO/9cDcwEP/5oDcwEQ/9cDcwER/5oDcwES/9cDcwET/5oDcwEU/9cDcwEV/5oDcwEX/8MDcwEZ/8MDcwEd/64DcwEh/64DcwEr/8MDcwEt/8MDcwEv/8MDcwEx/8MDcwEz/8MDcwE1/8MDcwE8/9cDcwE+/9cDcwFA/9cDcwFD/4UDcwFE/5oDcwFG/5oDcwFH/9cDcwFI/5oDcwFK/64DcwII/4UDcwIM/4UDcwJX/8MDcwJY/4UDcwJZ/5oDcwJf/9cDcwJg/5oDcwJi/8MDcwMd/4UDcwMe/5oDcwMf/4UDcwMg/5oDcwMh/4UDcwMi/5oDcwMj/4UDcwMl/4UDcwMm/5oDcwMn/4UDcwMo/5oDcwMp/4UDcwMq/5oDcwMr/4UDcwMs/5oDcwMt/4UDcwMu/5oDcwMv/4UDcwMw/5oDcwMx/4UDcwMy/5oDcwMz/4UDcwM0/5oDcwM2/5oDcwM4/5oDcwM6/5oDcwM8/5oDcwNA/5oDcwNC/5oDcwNE/5oDcwNJ/9cDcwNK/5oDcwNL/9cDcwNM/5oDcwNN/9cDcwNO/5oDcwNP/9cDcwNR/9cDcwNS/5oDcwNT/9cDcwNU/5oDcwNV/9cDcwNW/5oDcwNX/9cDcwNY/5oDcwNZ/9cDcwNa/5oDcwNb/9cDcwNc/5oDcwNd/9cDcwNe/5oDcwNf/9cDcwNg/5oDcwNi/8MDcwNk/8MDcwNm/8MDcwNo/8MDcwNq/8MDcwNs/8MDcwNu/8MDdAAFAFIDdAAKAFIDdAAP/64DdAAR/64DdAAiACkDdAIHAFIDdAII/64DdAILAFIDdAIM/64DjQAFAHsDjQAKAHsDjQIHAHsDjQILAHsDjwAP/4UDjwAQ/64DjwAR/4UDjwAiACkDjwAk/3EDjwAm/9cDjwAq/9cDjwAy/9cDjwA0/9cDjwA3ACkDjwBE/1wDjwBG/3EDjwBH/3EDjwBI/3EDjwBK/3EDjwBQ/5oDjwBR/5oDjwBS/3EDjwBT/5oDjwBU/3EDjwBV/5oDjwBW/4UDjwBY/5oDjwBZ/9cDjwBa/9cDjwBb/9cDjwBc/9cDjwBd/64DjwCC/3EDjwCD/3EDjwCE/3EDjwCF/3EDjwCG/3EDjwCH/3EDjwCJ/9cDjwCU/9cDjwCV/9cDjwCW/9cDjwCX/9cDjwCY/9cDjwCa/9cDjwCi/3EDjwCj/1wDjwCk/1wDjwCl/1wDjwCm/1wDjwCn/1wDjwCo/1wDjwCp/3EDjwCq/3EDjwCr/3EDjwCs/3EDjwCt/3EDjwC0/3EDjwC1/3EDjwC2/3EDjwC3/3EDjwC4/3EDjwC6/3EDjwC7/5oDjwC8/5oDjwC9/5oDjwC+/5oDjwC//9cDjwDC/3EDjwDD/1wDjwDE/3EDjwDF/1wDjwDG/3EDjwDH/1wDjwDI/9cDjwDJ/3EDjwDK/9cDjwDL/3EDjwDM/9cDjwDN/3EDjwDO/9cDjwDP/3EDjwDR/3EDjwDT/3EDjwDV/3EDjwDX/3EDjwDZ/3EDjwDb/3EDjwDd/3EDjwDe/9cDjwDf/3EDjwDg/9cDjwDh/3EDjwDi/9cDjwDj/3EDjwDk/9cDjwDl/3EDjwD6/5oDjwEG/5oDjwEI/5oDjwEN/5oDjwEO/9cDjwEP/3EDjwEQ/9cDjwER/3EDjwES/9cDjwET/3EDjwEU/9cDjwEV/3EDjwEX/5oDjwEZ/5oDjwEd/4UDjwEh/4UDjwEkACkDjwEmACkDjwEr/5oDjwEt/5oDjwEv/5oDjwEx/5oDjwEz/5oDjwE1/5oDjwE3/9cDjwE8/64DjwE+/64DjwFA/64DjwFD/3EDjwFE/1wDjwFG/1wDjwFH/9cDjwFI/3EDjwFK/4UDjwH7/9cDjwH9/9cDjwIC/64DjwID/64DjwIE/64DjwII/4UDjwIM/4UDjwJX/5oDjwJY/3EDjwJZ/1wDjwJf/9cDjwJg/3EDjwJi/5oDjwMd/3EDjwMe/1wDjwMf/3EDjwMg/1wDjwMh/3EDjwMi/1wDjwMj/3EDjwMl/3EDjwMm/1wDjwMn/3EDjwMo/1wDjwMp/3EDjwMq/1wDjwMr/3EDjwMs/1wDjwMt/3EDjwMu/1wDjwMv/3EDjwMw/1wDjwMx/3EDjwMy/1wDjwMz/3EDjwM0/1wDjwM2/3EDjwM4/3EDjwM6/3EDjwM8/3EDjwNA/3EDjwNC/3EDjwNE/3EDjwNJ/9cDjwNK/3EDjwNL/9cDjwNM/3EDjwNN/9cDjwNO/3EDjwNP/9cDjwNR/9cDjwNS/3EDjwNT/9cDjwNU/3EDjwNV/9cDjwNW/3EDjwNX/9cDjwNY/3EDjwNZ/9cDjwNa/3EDjwNb/9cDjwNc/3EDjwNd/9cDjwNe/3EDjwNf/9cDjwNg/3EDjwNi/5oDjwNk/5oDjwNm/5oDjwNo/5oDjwNq/5oDjwNs/5oDjwNu/5oDjwNw/9cDjwOPACkDkAAFACkDkAAKACkDkAIHACkDkAILACkAAAAAABoBPgABAAAAAAAAADkAAAABAAAAAAABAAkAOQABAAAAAAACAAcAQgABAAAAAAADABoASQABAAAAAAAEABEAYwABAAAAAAAFAAwAdAABAAAAAAAGABAAgAABAAAAAAAHAFIAkAABAAAAAAAIABQA4gABAAAAAAALABwA9gABAAAAAAAMAC4BEgABAAAAAAANAC4BQAABAAAAAAAOACoBbgADAAEECQAAAHIBmAADAAEECQABABICCgADAAEECQACAA4CHAADAAEECQADADQCKgADAAEECQAEACICXgADAAEECQAFABgCgAADAAEECQAGACACmAADAAEECQAHAKQCuAADAAEECQAIACgDXAADAAEECQALADgDhAADAAEECQAMAFwDvAADAAEECQANAFwEGAADAAEECQAOAFQEdERpZ2l0aXplZCBkYXRhIGNvcHlyaWdodCCpIDIwMTAtMjAxMSwgR29vZ2xlIENvcnBvcmF0aW9uLk9wZW4gU2Fuc1JlZ3VsYXIxLjEwOzFBU0M7T3BlblNhbnMtUmVndWxhck9wZW4gU2FucyBSZWd1bGFyVmVyc2lvbiAxLjEwT3BlblNhbnMtUmVndWxhck9wZW4gU2FucyBpcyBhIHRyYWRlbWFyayBvZiBHb29nbGUgYW5kIG1heSBiZSByZWdpc3RlcmVkIGluIGNlcnRhaW4ganVyaXNkaWN0aW9ucy5Bc2NlbmRlciBDb3Jwb3JhdGlvbmh0dHA6Ly93d3cuYXNjZW5kZXJjb3JwLmNvbS9odHRwOi8vd3d3LmFzY2VuZGVyY29ycC5jb20vdHlwZWRlc2lnbmVycy5odG1sTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMABEAGkAZwBpAHQAaQB6AGUAZAAgAGQAYQB0AGEAIABjAG8AcAB5AHIAaQBnAGgAdAAgAKkAIAAyADAAMQAwAC0AMgAwADEAMQAsACAARwBvAG8AZwBsAGUAIABDAG8AcgBwAG8AcgBhAHQAaQBvAG4ALgBPAHAAZQBuACAAUwBhAG4AcwBSAGUAZwB1AGwAYQByADEALgAxADAAOwAxAEEAUwBDADsATwBwAGUAbgBTAGEAbgBzAC0AUgBlAGcAdQBsAGEAcgBPAHAAZQBuACAAUwBhAG4AcwAgAFIAZQBnAHUAbABhAHIAVgBlAHIAcwBpAG8AbgAgADEALgAxADAATwBwAGUAbgBTAGEAbgBzAC0AUgBlAGcAdQBsAGEAcgBPAHAAZQBuACAAUwBhAG4AcwAgAGkAcwAgAGEAIAB0AHIAYQBkAGUAbQBhAHIAawAgAG8AZgAgAEcAbwBvAGcAbABlACAAYQBuAGQAIABtAGEAeQAgAGIAZQAgAHIAZQBnAGkAcwB0AGUAcgBlAGQAIABpAG4AIABjAGUAcgB0AGEAaQBuACAAagB1AHIAaQBzAGQAaQBjAHQAaQBvAG4AcwAuAEEAcwBjAGUAbgBkAGUAcgAgAEMAbwByAHAAbwByAGEAdABpAG8AbgBoAHQAdABwADoALwAvAHcAdwB3AC4AYQBzAGMAZQBuAGQAZQByAGMAbwByAHAALgBjAG8AbQAvAGgAdAB0AHAAOgAvAC8AdwB3AHcALgBhAHMAYwBlAG4AZABlAHIAYwBvAHIAcAAuAGMAbwBtAC8AdAB5AHAAZQBkAGUAcwBpAGcAbgBlAHIAcwAuAGgAdABtAGwATABpAGMAZQBuAHMAZQBkACAAdQBuAGQAZQByACAAdABoAGUAIABBAHAAYQBjAGgAZQAgAEwAaQBjAGUAbgBzAGUALAAgAFYAZQByAHMAaQBvAG4AIAAyAC4AMABoAHQAdABwADoALwAvAHcAdwB3AC4AYQBwAGEAYwBoAGUALgBvAHIAZwAvAGwAaQBjAGUAbgBzAGUAcwAvAEwASQBDAEUATgBTAEUALQAyAC4AMAAAAAIAAAAAAAD/ZgBmAAAAAAAAAAAAAAAAAAAAAAAAAAADqgECAQMBBAEFAQYBBwEIAQkBCgELAQwBDQEOAQ8BEAERARIBEwEUARUBFgEXARgBGQEaARsBHAEdAR4BHwEgASEBIgEjASQBJQEmAScBKAEpASoBKwEsAS0BLgEvATABMQEyATMBNAE1ATYBNwE4ATkBOgE7ATwBPQE+AT8BQAFBAUIBQwFEAUUBRgFHAUgBSQFKAUsBTAFNAU4BTwFQAVEBUgFTAVQBVQFWAVcBWAFZAVoBWwFcAV0BXgFfAWABYQFiAWMBZAFlAWYBZwFoAWkBagFrAWwBbQFuAW8BcAFxAXIBcwF0AXUBdgF3AXgBeQF6AXsBfAF9AX4BfwGAAYEBggGDAYQBhQGGAYcBiAGJAYoBiwGMAY0BjgGPAZABkQGSAZMBlAGVAZYBlwGYAZkBmgGbAZwBnQGeAZ8BoAGhAaIBowGkAaUBpgGnAagBqQGqAasBrAGtAa4BrwGwAbEBsgGzAbQBtQG2AbcBuAG5AboBuwG8Ab0BvgG/AcABwQHCAcMBxAHFAcYBxwHIAckBygHLAcwBzQHOAc8B0AHRAdIB0wHUAdUB1gHXAdgB2QHaAdsB3AHdAd4B3wHgAeEB4gHjAeQB5QHmAecB6AHpAeoB6wHsAe0B7gHvAfAB8QHyAfMB9AH1AfYB9wH4AfkB+gH7AfwB/QH+Af8CAAIBAgICAwIEAgUCBgIHAggCCQIKAgsCDAINAg4CDwIQAhECEgITAhQCFQIWAhcCGAIZAhoCGwIcAh0CHgIfAiACIQIiAiMCJAIlAiYCJwIoAikCKgIrAiwCLQIuAi8CMAIxAjICMwI0AjUCNgI3AjgCOQI6AjsCPAI9Aj4CPwJAAkECQgJDAkQCRQJGAkcCSAJJAkoCSwJMAk0CTgJPAlACUQJSAlMCVAJVAlYCVwJYAlkCWgJbAlwCXQJeAl8CYAJhAmICYwJkAmUCZgJnAmgCaQJqAmsCbAJtAm4CbwJwAnECcgJzAnQCdQJ2AncCeAJ5AnoCewJ8An0CfgJ/AoACgQKCAoMChAKFAoYChwKIAokCigKLAowCjQKOAo8CkAKRApICkwKUApUClgKXApgCmQKaApsCnAKdAp4CnwKgAqECogKjAqQCpQKmAqcCqAKpAqoCqwKsAq0CrgKvArACsQKyArMCtAK1ArYCtwK4ArkCugK7ArwCvQK+Ar8CwALBAsICwwLEAsUCxgLHAsgCyQLKAssCzALNAs4CzwLQAtEC0gLTAtQC1QLWAtcC2ALZAtoC2wLcAt0C3gLfAuAC4QLiAuMC5ALlAuYC5wLoAukC6gLrAuwC7QLuAu8C8ALxAvIC8wL0AvUC9gL3AvgC+QL6AvsC/AL9Av4C/wMAAwEDAgMDAwQDBQMGAwcDCAMJAwoDCwMMAw0DDgMPAxADEQMSAxMDFAMVAxYDFwMYAxkDGgMbAxwDHQMeAx8DIAMhAyIDIwMkAyUDJgMnAygDKQMqAysDLAMtAy4DLwMwAzEDMgMzAzQDNQM2AzcDOAM5AzoDOwM8Az0DPgM/A0ADQQNCA0MDRANFA0YDRwNIA0kDSgNLA0wDTQNOA08DUANRA1IDUwNUA1UDVgNXA1gDWQNaA1sDXANdA14DXwNgA2EDYgNjA2QDZQNmA2cDaANpA2oDawNsA20DbgNvA3ADcQNyA3MDdAN1A3YDdwN4A3kDegN7A3wDfQN+A38DgAOBA4IDgwOEA4UDhgOHA4gDiQOKA4sDjAONA44DjwOQA5EDkgOTA5QDlQOWA5cDmAOZA5oDmwOcA50DngOfA6ADoQOiA6MDpAOlA6YDpwOoA6kDqgOrA6wDrQOuA68DsAOxA7IDswO0A7UDtgO3A7gDuQO6A7sDvAO9A74DvwPAA8EDwgPDA8QDxQPGA8cDyAPJA8oDywPMA80DzgPPA9AD0QPSA9MD1APVA9YD1wPYA9kD2gPbA9wD3QPeA98D4APhA+ID4wPkA+UD5gPnA+gD6QPqA+sD7APtA+4D7wPwA/ED8gPzA/QD9QP2A/cD+AP5A/oD+wP8A/0D/gP/BAAEAQQCBAMEBAQFBAYEBwQIBAkECgQLBAwEDQQOBA8EEAQRBBIEEwQUBBUEFgQXBBgEGQQaBBsEHAQdBB4EHwQgBCEEIgQjBCQEJQQmBCcEKAQpBCoEKwQsBC0ELgQvBDAEMQQyBDMENAQ1BDYENwQ4BDkEOgQ7BDwEPQQ+BD8EQARBBEIEQwREBEUERgRHBEgESQRKBEsETARNBE4ETwRQBFEEUgRTBFQEVQRWBFcEWARZBFoEWwRcBF0EXgRfBGAEYQRiBGMEZARlBGYEZwRoBGkEagRrBGwEbQRuBG8EcARxBHIEcwR0BHUEdgR3BHgEeQR6BHsEfAR9BH4EfwSABIEEggSDBIQEhQSGBIcEiASJBIoEiwSMBI0EjgSPBJAEkQSSBJMElASVBJYElwSYBJkEmgSbBJwEnQSeBJ8EoAShBKIEowSkBKUEpgSnBKgEqQSqBKsHLm5vdGRlZgRudWxsEG5vbm1hcmtpbmdyZXR1cm4Fc3BhY2UGZXhjbGFtCHF1b3RlZGJsCm51bWJlcnNpZ24GZG9sbGFyB3BlcmNlbnQJYW1wZXJzYW5kC3F1b3Rlc2luZ2xlCXBhcmVubGVmdApwYXJlbnJpZ2h0CGFzdGVyaXNrBHBsdXMFY29tbWEGaHlwaGVuBnBlcmlvZAVzbGFzaAR6ZXJvA29uZQN0d28FdGhyZWUEZm91cgRmaXZlA3NpeAVzZXZlbgVlaWdodARuaW5lBWNvbG9uCXNlbWljb2xvbgRsZXNzBWVxdWFsB2dyZWF0ZXIIcXVlc3Rpb24CYXQBQQFCAUMBRAFFAUYBRwFIBUkuYWx0AUoBSwFMAU0BTgFPAVABUQFSAVMBVAFVAVYBVwFYAVkBWgticmFja2V0bGVmdAliYWNrc2xhc2gMYnJhY2tldHJpZ2h0C2FzY2lpY2lyY3VtCnVuZGVyc2NvcmUFZ3JhdmUBYQFiAWMBZAFlAWYBZwFoAWkBagFrAWwBbQFuAW8BcAFxAXIBcwF0AXUBdgF3AXgBeQF6CWJyYWNlbGVmdANiYXIKYnJhY2VyaWdodAphc2NpaXRpbGRlEG5vbmJyZWFraW5nc3BhY2UKZXhjbGFtZG93bgRjZW50CHN0ZXJsaW5nCGN1cnJlbmN5A3llbglicm9rZW5iYXIHc2VjdGlvbghkaWVyZXNpcwljb3B5cmlnaHQLb3JkZmVtaW5pbmUNZ3VpbGxlbW90bGVmdApsb2dpY2Fsbm90B3VuaTAwQUQKcmVnaXN0ZXJlZAlvdmVyc2NvcmUGZGVncmVlCXBsdXNtaW51cwt0d29zdXBlcmlvcg10aHJlZXN1cGVyaW9yBWFjdXRlAm11CXBhcmFncmFwaA5wZXJpb2RjZW50ZXJlZAdjZWRpbGxhC29uZXN1cGVyaW9yDG9yZG1hc2N1bGluZQ5ndWlsbGVtb3RyaWdodApvbmVxdWFydGVyB29uZWhhbGYNdGhyZWVxdWFydGVycwxxdWVzdGlvbmRvd24GQWdyYXZlBkFhY3V0ZQtBY2lyY3VtZmxleAZBdGlsZGUJQWRpZXJlc2lzBUFyaW5nAkFFCENjZWRpbGxhBkVncmF2ZQZFYWN1dGULRWNpcmN1bWZsZXgJRWRpZXJlc2lzCklncmF2ZS5hbHQKSWFjdXRlLmFsdA9JY2lyY3VtZmxleC5hbHQNSWRpZXJlc2lzLmFsdANFdGgGTnRpbGRlBk9ncmF2ZQZPYWN1dGULT2NpcmN1bWZsZXgGT3RpbGRlCU9kaWVyZXNpcwhtdWx0aXBseQZPc2xhc2gGVWdyYXZlBlVhY3V0ZQtVY2lyY3VtZmxleAlVZGllcmVzaXMGWWFjdXRlBVRob3JuCmdlcm1hbmRibHMGYWdyYXZlBmFhY3V0ZQthY2lyY3VtZmxleAZhdGlsZGUJYWRpZXJlc2lzBWFyaW5nAmFlCGNjZWRpbGxhBmVncmF2ZQZlYWN1dGULZWNpcmN1bWZsZXgJZWRpZXJlc2lzBmlncmF2ZQZpYWN1dGULaWNpcmN1bWZsZXgJaWRpZXJlc2lzA2V0aAZudGlsZGUGb2dyYXZlBm9hY3V0ZQtvY2lyY3VtZmxleAZvdGlsZGUJb2RpZXJlc2lzBmRpdmlkZQZvc2xhc2gGdWdyYXZlBnVhY3V0ZQt1Y2lyY3VtZmxleAl1ZGllcmVzaXMGeWFjdXRlBXRob3JuCXlkaWVyZXNpcwdBbWFjcm9uB2FtYWNyb24GQWJyZXZlBmFicmV2ZQdBb2dvbmVrB2FvZ29uZWsGQ2FjdXRlBmNhY3V0ZQtDY2lyY3VtZmxleAtjY2lyY3VtZmxleARDZG90BGNkb3QGQ2Nhcm9uBmNjYXJvbgZEY2Fyb24GZGNhcm9uBkRjcm9hdAZkY3JvYXQHRW1hY3JvbgdlbWFjcm9uBkVicmV2ZQZlYnJldmUKRWRvdGFjY2VudAplZG90YWNjZW50B0VvZ29uZWsHZW9nb25lawZFY2Fyb24GZWNhcm9uC0djaXJjdW1mbGV4C2djaXJjdW1mbGV4BkdicmV2ZQZnYnJldmUER2RvdARnZG90DEdjb21tYWFjY2VudAxnY29tbWFhY2NlbnQLSGNpcmN1bWZsZXgLaGNpcmN1bWZsZXgESGJhcgRoYmFyCkl0aWxkZS5hbHQGaXRpbGRlC0ltYWNyb24uYWx0B2ltYWNyb24KSWJyZXZlLmFsdAZpYnJldmULSW9nb25lay5hbHQHaW9nb25law5JZG90YWNjZW50LmFsdAhkb3RsZXNzaQZJSi5hbHQCaWoLSmNpcmN1bWZsZXgLamNpcmN1bWZsZXgMS2NvbW1hYWNjZW50DGtjb21tYWFjY2VudAxrZ3JlZW5sYW5kaWMGTGFjdXRlBmxhY3V0ZQxMY29tbWFhY2NlbnQMbGNvbW1hYWNjZW50BkxjYXJvbgZsY2Fyb24ETGRvdARsZG90BkxzbGFzaAZsc2xhc2gGTmFjdXRlBm5hY3V0ZQxOY29tbWFhY2NlbnQMbmNvbW1hYWNjZW50Bk5jYXJvbgZuY2Fyb24LbmFwb3N0cm9waGUDRW5nA2VuZwdPbWFjcm9uB29tYWNyb24GT2JyZXZlBm9icmV2ZQ1PaHVuZ2FydW1sYXV0DW9odW5nYXJ1bWxhdXQCT0UCb2UGUmFjdXRlBnJhY3V0ZQxSY29tbWFhY2NlbnQMcmNvbW1hYWNjZW50BlJjYXJvbgZyY2Fyb24GU2FjdXRlBnNhY3V0ZQtTY2lyY3VtZmxleAtzY2lyY3VtZmxleAhTY2VkaWxsYQhzY2VkaWxsYQZTY2Fyb24Gc2Nhcm9uDFRjb21tYWFjY2VudAx0Y29tbWFhY2NlbnQGVGNhcm9uBnRjYXJvbgRUYmFyBHRiYXIGVXRpbGRlBnV0aWxkZQdVbWFjcm9uB3VtYWNyb24GVWJyZXZlBnVicmV2ZQVVcmluZwV1cmluZw1VaHVuZ2FydW1sYXV0DXVodW5nYXJ1bWxhdXQHVW9nb25lawd1b2dvbmVrC1djaXJjdW1mbGV4C3djaXJjdW1mbGV4C1ljaXJjdW1mbGV4C3ljaXJjdW1mbGV4CVlkaWVyZXNpcwZaYWN1dGUGemFjdXRlClpkb3RhY2NlbnQKemRvdGFjY2VudAZaY2Fyb24GemNhcm9uBWxvbmdzBmZsb3JpbgpBcmluZ2FjdXRlCmFyaW5nYWN1dGUHQUVhY3V0ZQdhZWFjdXRlC09zbGFzaGFjdXRlC29zbGFzaGFjdXRlDFNjb21tYWFjY2VudAxzY29tbWFhY2NlbnQKY2lyY3VtZmxleAVjYXJvbgZtYWNyb24FYnJldmUJZG90YWNjZW50BHJpbmcGb2dvbmVrBXRpbGRlDGh1bmdhcnVtbGF1dAV0b25vcw1kaWVyZXNpc3Rvbm9zCkFscGhhdG9ub3MJYW5vdGVsZWlhDEVwc2lsb250b25vcwhFdGF0b25vcw1Jb3RhdG9ub3MuYWx0DE9taWNyb250b25vcwxVcHNpbG9udG9ub3MKT21lZ2F0b25vcxFpb3RhZGllcmVzaXN0b25vcwVBbHBoYQRCZXRhBUdhbW1hB3VuaTAzOTQHRXBzaWxvbgRaZXRhA0V0YQVUaGV0YQhJb3RhLmFsdAVLYXBwYQZMYW1iZGECTXUCTnUCWGkHT21pY3JvbgJQaQNSaG8FU2lnbWEDVGF1B1Vwc2lsb24DUGhpA0NoaQNQc2kHdW5pMDNBORBJb3RhZGllcmVzaXMuYWx0D1Vwc2lsb25kaWVyZXNpcwphbHBoYXRvbm9zDGVwc2lsb250b25vcwhldGF0b25vcwlpb3RhdG9ub3MUdXBzaWxvbmRpZXJlc2lzdG9ub3MFYWxwaGEEYmV0YQVnYW1tYQVkZWx0YQdlcHNpbG9uBHpldGEDZXRhBXRoZXRhBGlvdGEFa2FwcGEGbGFtYmRhB3VuaTAzQkMCbnUCeGkHb21pY3JvbgJwaQNyaG8Gc2lnbWExBXNpZ21hA3RhdQd1cHNpbG9uA3BoaQNjaGkDcHNpBW9tZWdhDGlvdGFkaWVyZXNpcw91cHNpbG9uZGllcmVzaXMMb21pY3JvbnRvbm9zDHVwc2lsb250b25vcwpvbWVnYXRvbm9zCWFmaWkxMDAyMwlhZmlpMTAwNTEJYWZpaTEwMDUyCWFmaWkxMDA1MwlhZmlpMTAwNTQNYWZpaTEwMDU1LmFsdA1hZmlpMTAwNTYuYWx0CWFmaWkxMDA1NwlhZmlpMTAwNTgJYWZpaTEwMDU5CWFmaWkxMDA2MAlhZmlpMTAwNjEJYWZpaTEwMDYyCWFmaWkxMDE0NQlhZmlpMTAwMTcJYWZpaTEwMDE4CWFmaWkxMDAxOQlhZmlpMTAwMjAJYWZpaTEwMDIxCWFmaWkxMDAyMglhZmlpMTAwMjQJYWZpaTEwMDI1CWFmaWkxMDAyNglhZmlpMTAwMjcJYWZpaTEwMDI4CWFmaWkxMDAyOQlhZmlpMTAwMzAJYWZpaTEwMDMxCWFmaWkxMDAzMglhZmlpMTAwMzMJYWZpaTEwMDM0CWFmaWkxMDAzNQlhZmlpMTAwMzYJYWZpaTEwMDM3CWFmaWkxMDAzOAlhZmlpMTAwMzkJYWZpaTEwMDQwCWFmaWkxMDA0MQlhZmlpMTAwNDIJYWZpaTEwMDQzCWFmaWkxMDA0NAlhZmlpMTAwNDUJYWZpaTEwMDQ2CWFmaWkxMDA0NwlhZmlpMTAwNDgJYWZpaTEwMDQ5CWFmaWkxMDA2NQlhZmlpMTAwNjYJYWZpaTEwMDY3CWFmaWkxMDA2OAlhZmlpMTAwNjkJYWZpaTEwMDcwCWFmaWkxMDA3MglhZmlpMTAwNzMJYWZpaTEwMDc0CWFmaWkxMDA3NQlhZmlpMTAwNzYJYWZpaTEwMDc3CWFmaWkxMDA3OAlhZmlpMTAwNzkJYWZpaTEwMDgwCWFmaWkxMDA4MQlhZmlpMTAwODIJYWZpaTEwMDgzCWFmaWkxMDA4NAlhZmlpMTAwODUJYWZpaTEwMDg2CWFmaWkxMDA4NwlhZmlpMTAwODgJYWZpaTEwMDg5CWFmaWkxMDA5MAlhZmlpMTAwOTEJYWZpaTEwMDkyCWFmaWkxMDA5MwlhZmlpMTAwOTQJYWZpaTEwMDk1CWFmaWkxMDA5NglhZmlpMTAwOTcJYWZpaTEwMDcxCWFmaWkxMDA5OQlhZmlpMTAxMDAJYWZpaTEwMTAxCWFmaWkxMDEwMglhZmlpMTAxMDMJYWZpaTEwMTA0CWFmaWkxMDEwNQlhZmlpMTAxMDYJYWZpaTEwMTA3CWFmaWkxMDEwOAlhZmlpMTAxMDkJYWZpaTEwMTEwCWFmaWkxMDE5MwlhZmlpMTAwNTAJYWZpaTEwMDk4BldncmF2ZQZ3Z3JhdmUGV2FjdXRlBndhY3V0ZQlXZGllcmVzaXMJd2RpZXJlc2lzBllncmF2ZQZ5Z3JhdmUGZW5kYXNoBmVtZGFzaAlhZmlpMDAyMDgNdW5kZXJzY29yZWRibAlxdW90ZWxlZnQKcXVvdGVyaWdodA5xdW90ZXNpbmdsYmFzZQ1xdW90ZXJldmVyc2VkDHF1b3RlZGJsbGVmdA1xdW90ZWRibHJpZ2h0DHF1b3RlZGJsYmFzZQZkYWdnZXIJZGFnZ2VyZGJsBmJ1bGxldAhlbGxpcHNpcwtwZXJ0aG91c2FuZAZtaW51dGUGc2Vjb25kDWd1aWxzaW5nbGxlZnQOZ3VpbHNpbmdscmlnaHQJZXhjbGFtZGJsCGZyYWN0aW9uCW5zdXBlcmlvcgVmcmFuYwlhZmlpMDg5NDEGcGVzZXRhBEV1cm8JYWZpaTYxMjQ4CWFmaWk2MTI4OQlhZmlpNjEzNTIJdHJhZGVtYXJrBU9tZWdhCWVzdGltYXRlZAlvbmVlaWdodGgMdGhyZWVlaWdodGhzC2ZpdmVlaWdodGhzDHNldmVuZWlnaHRocwtwYXJ0aWFsZGlmZgVEZWx0YQdwcm9kdWN0CXN1bW1hdGlvbgVtaW51cwdyYWRpY2FsCGluZmluaXR5CGludGVncmFsC2FwcHJveGVxdWFsCG5vdGVxdWFsCWxlc3NlcXVhbAxncmVhdGVyZXF1YWwHbG96ZW5nZQd1bmlGQjAxB3VuaUZCMDINY3lyaWxsaWNicmV2ZQhkb3RsZXNzahBjYXJvbmNvbW1hYWNjZW50C2NvbW1hYWNjZW50EWNvbW1hYWNjZW50cm90YXRlDHplcm9zdXBlcmlvcgxmb3Vyc3VwZXJpb3IMZml2ZXN1cGVyaW9yC3NpeHN1cGVyaW9yDXNldmVuc3VwZXJpb3INZWlnaHRzdXBlcmlvcgxuaW5lc3VwZXJpb3IHdW5pMjAwMAd1bmkyMDAxB3VuaTIwMDIHdW5pMjAwMwd1bmkyMDA0B3VuaTIwMDUHdW5pMjAwNgd1bmkyMDA3B3VuaTIwMDgHdW5pMjAwOQd1bmkyMDBBB3VuaTIwMEIHdW5pRkVGRgd1bmlGRkZDB3VuaUZGRkQHdW5pMDFGMAd1bmkwMkJDB3VuaTAzRDEHdW5pMDNEMgd1bmkwM0Q2B3VuaTFFM0UHdW5pMUUzRgd1bmkxRTAwB3VuaTFFMDEHdW5pMUY0RAd1bmkwMkYzCWRhc2lhb3hpYQd1bmlGQjAzB3VuaUZCMDQFT2hvcm4Fb2hvcm4FVWhvcm4FdWhvcm4HdW5pMDMwMAd1bmkwMzAxB3VuaTAzMDMEaG9vawhkb3RiZWxvdwd1bmkwNDAwB3VuaTA0MEQHdW5pMDQ1MAd1bmkwNDVEB3VuaTA0NjAHdW5pMDQ2MQd1bmkwNDYyB3VuaTA0NjMHdW5pMDQ2NAd1bmkwNDY1B3VuaTA0NjYHdW5pMDQ2Nwd1bmkwNDY4B3VuaTA0NjkHdW5pMDQ2QQd1bmkwNDZCB3VuaTA0NkMHdW5pMDQ2RAd1bmkwNDZFB3VuaTA0NkYHdW5pMDQ3MAd1bmkwNDcxB3VuaTA0NzIHdW5pMDQ3Mwd1bmkwNDc0B3VuaTA0NzUHdW5pMDQ3Ngd1bmkwNDc3B3VuaTA0NzgHdW5pMDQ3OQd1bmkwNDdBB3VuaTA0N0IHdW5pMDQ3Qwd1bmkwNDdEB3VuaTA0N0UHdW5pMDQ3Rgd1bmkwNDgwB3VuaTA0ODEHdW5pMDQ4Mgd1bmkwNDgzB3VuaTA0ODQHdW5pMDQ4NQd1bmkwNDg2B3VuaTA0ODgHdW5pMDQ4OQd1bmkwNDhBB3VuaTA0OEIHdW5pMDQ4Qwd1bmkwNDhEB3VuaTA0OEUHdW5pMDQ4Rgd1bmkwNDkyB3VuaTA0OTMHdW5pMDQ5NAd1bmkwNDk1B3VuaTA0OTYHdW5pMDQ5Nwd1bmkwNDk4B3VuaTA0OTkHdW5pMDQ5QQd1bmkwNDlCB3VuaTA0OUMHdW5pMDQ5RAd1bmkwNDlFB3VuaTA0OUYHdW5pMDRBMAd1bmkwNEExB3VuaTA0QTIHdW5pMDRBMwd1bmkwNEE0B3VuaTA0QTUHdW5pMDRBNgd1bmkwNEE3B3VuaTA0QTgHdW5pMDRBOQd1bmkwNEFBB3VuaTA0QUIHdW5pMDRBQwd1bmkwNEFEB3VuaTA0QUUHdW5pMDRBRgd1bmkwNEIwB3VuaTA0QjEHdW5pMDRCMgd1bmkwNEIzB3VuaTA0QjQHdW5pMDRCNQd1bmkwNEI2B3VuaTA0QjcHdW5pMDRCOAd1bmkwNEI5B3VuaTA0QkEHdW5pMDRCQgd1bmkwNEJDB3VuaTA0QkQHdW5pMDRCRQd1bmkwNEJGC3VuaTA0QzAuYWx0B3VuaTA0QzEHdW5pMDRDMgd1bmkwNEMzB3VuaTA0QzQHdW5pMDRDNQd1bmkwNEM2B3VuaTA0QzcHdW5pMDRDOAd1bmkwNEM5B3VuaTA0Q0EHdW5pMDRDQgd1bmkwNENDB3VuaTA0Q0QHdW5pMDRDRQt1bmkwNENGLmFsdAd1bmkwNEQwB3VuaTA0RDEHdW5pMDREMgd1bmkwNEQzB3VuaTA0RDQHdW5pMDRENQd1bmkwNEQ2B3VuaTA0RDcHdW5pMDREOAd1bmkwNEQ5B3VuaTA0REEHdW5pMDREQgd1bmkwNERDB3VuaTA0REQHdW5pMDRERQd1bmkwNERGB3VuaTA0RTAHdW5pMDRFMQd1bmkwNEUyB3VuaTA0RTMHdW5pMDRFNAd1bmkwNEU1B3VuaTA0RTYHdW5pMDRFNwd1bmkwNEU4B3VuaTA0RTkHdW5pMDRFQQd1bmkwNEVCB3VuaTA0RUMHdW5pMDRFRAd1bmkwNEVFB3VuaTA0RUYHdW5pMDRGMAd1bmkwNEYxB3VuaTA0RjIHdW5pMDRGMwd1bmkwNEY0B3VuaTA0RjUHdW5pMDRGNgd1bmkwNEY3B3VuaTA0RjgHdW5pMDRGOQd1bmkwNEZBB3VuaTA0RkIHdW5pMDRGQwd1bmkwNEZEB3VuaTA0RkUHdW5pMDRGRgd1bmkwNTAwB3VuaTA1MDEHdW5pMDUwMgd1bmkwNTAzB3VuaTA1MDQHdW5pMDUwNQd1bmkwNTA2B3VuaTA1MDcHdW5pMDUwOAd1bmkwNTA5B3VuaTA1MEEHdW5pMDUwQgd1bmkwNTBDB3VuaTA1MEQHdW5pMDUwRQd1bmkwNTBGB3VuaTA1MTAHdW5pMDUxMQd1bmkwNTEyB3VuaTA1MTMHdW5pMUVBMAd1bmkxRUExB3VuaTFFQTIHdW5pMUVBMwd1bmkxRUE0B3VuaTFFQTUHdW5pMUVBNgd1bmkxRUE3B3VuaTFFQTgHdW5pMUVBOQd1bmkxRUFBB3VuaTFFQUIHdW5pMUVBQwd1bmkxRUFEB3VuaTFFQUUHdW5pMUVBRgd1bmkxRUIwB3VuaTFFQjEHdW5pMUVCMgd1bmkxRUIzB3VuaTFFQjQHdW5pMUVCNQd1bmkxRUI2B3VuaTFFQjcHdW5pMUVCOAd1bmkxRUI5B3VuaTFFQkEHdW5pMUVCQgd1bmkxRUJDB3VuaTFFQkQHdW5pMUVCRQd1bmkxRUJGB3VuaTFFQzAHdW5pMUVDMQd1bmkxRUMyB3VuaTFFQzMHdW5pMUVDNAd1bmkxRUM1B3VuaTFFQzYHdW5pMUVDNwt1bmkxRUM4LmFsdAd1bmkxRUM5C3VuaTFFQ0EuYWx0B3VuaTFFQ0IHdW5pMUVDQwd1bmkxRUNEB3VuaTFFQ0UHdW5pMUVDRgd1bmkxRUQwB3VuaTFFRDEHdW5pMUVEMgd1bmkxRUQzB3VuaTFFRDQHdW5pMUVENQd1bmkxRUQ2B3VuaTFFRDcHdW5pMUVEOAd1bmkxRUQ5B3VuaTFFREEHdW5pMUVEQgd1bmkxRURDB3VuaTFFREQHdW5pMUVERQd1bmkxRURGB3VuaTFFRTAHdW5pMUVFMQd1bmkxRUUyB3VuaTFFRTMHdW5pMUVFNAd1bmkxRUU1B3VuaTFFRTYHdW5pMUVFNwd1bmkxRUU4B3VuaTFFRTkHdW5pMUVFQQd1bmkxRUVCB3VuaTFFRUMHdW5pMUVFRAd1bmkxRUVFB3VuaTFFRUYHdW5pMUVGMAd1bmkxRUYxB3VuaTFFRjQHdW5pMUVGNQd1bmkxRUY2B3VuaTFFRjcHdW5pMUVGOAd1bmkxRUY5B3VuaTIwQUIHdW5pMDMwRhNjaXJjdW1mbGV4YWN1dGVjb21iE2NpcmN1bWZsZXhncmF2ZWNvbWISY2lyY3VtZmxleGhvb2tjb21iE2NpcmN1bWZsZXh0aWxkZWNvbWIOYnJldmVhY3V0ZWNvbWIOYnJldmVncmF2ZWNvbWINYnJldmVob29rY29tYg5icmV2ZXRpbGRlY29tYhBjeXJpbGxpY2hvb2tsZWZ0EWN5cmlsbGljYmlnaG9va1VDEWN5cmlsbGljYmlnaG9va0xDCG9uZS5wbnVtB3plcm8ub3MGb25lLm9zBnR3by5vcwh0aHJlZS5vcwdmb3VyLm9zB2ZpdmUub3MGc2l4Lm9zCHNldmVuLm9zCGVpZ2h0Lm9zB25pbmUub3MCZmYHdW5pMjEyMAhUY2VkaWxsYQh0Y2VkaWxsYQVnLmFsdA9nY2lyY3VtZmxleC5hbHQKZ2JyZXZlLmFsdAhnZG90LmFsdBBnY29tbWFhY2NlbnQuYWx0AUkGSWdyYXZlBklhY3V0ZQtJY2lyY3VtZmxleAlJZGllcmVzaXMGSXRpbGRlB0ltYWNy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",
            "encoding": "base64"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": -1,
          "_transferSize": 217563,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:10.013Z",
        "time": 58.87099995743483,
        "timings": {
          "blocked": 11.452999951541424,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0.30599999999999994,
          "wait": 38.312999944776294,
          "receive": 8.799000061117113,
          "_blocked_queueing": 10.817999951541424,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_connectionId": "1726423",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "script",
          "stack": {
            "callFrames": [
              {
                "functionName": "dwAjaxToServer",
                "scriptId": "74",
                "url": "https://ekat.festool.de/login/WEB-RES/js/base.js_shop_7.26.1.5.js",
                "lineNumber": 16016,
                "columnNumber": 12
              },
              {
                "functionName": "dwAjaxSendUpdates",
                "scriptId": "74",
                "url": "https://ekat.festool.de/login/WEB-RES/js/base.js_shop_7.26.1.5.js",
                "lineNumber": 15812,
                "columnNumber": 8
              },
              {
                "functionName": "dwAjaxAddUpdate",
                "scriptId": "74",
                "url": "https://ekat.festool.de/login/WEB-RES/js/base.js_shop_7.26.1.5.js",
                "lineNumber": 15751,
                "columnNumber": 8
              },
              {
                "functionName": "dwAjaxDefaultOnResize",
                "scriptId": "74",
                "url": "https://ekat.festool.de/login/WEB-RES/js/base.js_shop_7.26.1.5.js",
                "lineNumber": 17548,
                "columnNumber": 4
              },
              {
                "functionName": "DwResizeRegistry.notifyControls",
                "scriptId": "74",
                "url": "https://ekat.festool.de/login/WEB-RES/js/base.js_shop_7.26.1.5.js",
                "lineNumber": 13847,
                "columnNumber": 12
              },
              {
                "functionName": "DwResizeRegistry.updateSizes",
                "scriptId": "74",
                "url": "https://ekat.festool.de/login/WEB-RES/js/base.js_shop_7.26.1.5.js",
                "lineNumber": 13789,
                "columnNumber": 13
              },
              {
                "functionName": "dwFrameworkInitFrameworkFinished",
                "scriptId": "74",
                "url": "https://ekat.festool.de/login/WEB-RES/js/base.js_shop_7.26.1.5.js",
                "lineNumber": 7290,
                "columnNumber": 34
              },
              {
                "functionName": "init",
                "scriptId": "79",
                "url": "https://ekat.festool.de/login/app?__bk_&__windowid=IRW3104379&__rid=FOE1787216989423",
                "lineNumber": 12,
                "columnNumber": 2432
              },
              {
                "functionName": "onload",
                "scriptId": "95",
                "url": "https://ekat.festool.de/login/app?__bk_&__windowid=IRW3104379&__rid=FOE1787216989423#2VFB2144C915D47DFAD66CC73CEC1F7E17E1D29351DB45EA618EEFB7B1BB136D42B8044FCE28E6056D",
                "lineNumber": 12,
                "columnNumber": 3859
              }
            ]
          }
        },
        "_priority": "High",
        "_resourceType": "xhr",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "POST",
          "url": "https://ekat.festool.de/login/ajax",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": ":authority",
              "value": "ekat.festool.de"
            },
            {
              "name": ":method",
              "value": "POST"
            },
            {
              "name": ":path",
              "value": "/login/ajax"
            },
            {
              "name": ":scheme",
              "value": "https"
            },
            {
              "name": "accept",
              "value": "*/*"
            },
            {
              "name": "accept-encoding",
              "value": "gzip, deflate, br, zstd"
            },
            {
              "name": "accept-language",
              "value": "en-GB,en-US;q=0.9,en;q=0.8"
            },
            {
              "name": "cache-control",
              "value": "no-cache,no-store,must-revalidate,post-check=0,pre-check=0"
            },
            {
              "name": "content-length",
              "value": "297"
            },
            {
              "name": "content-type",
              "value": "text/plain; charset=UTF-8"
            },
            {
              "name": "expires",
              "value": "0"
            },
            {
              "name": "origin",
              "value": "https://ekat.festool.de"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "pragma",
              "value": "no-cache"
            },
            {
              "name": "priority",
              "value": "u=1, i"
            },
            {
              "name": "referer",
              "value": "https://ekat.festool.de/login/app?__bk_&__windowid=IRW3104379&__rid=FOE1787216989423"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            },
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "sec-fetch-dest",
              "value": "empty"
            },
            {
              "name": "sec-fetch-mode",
              "value": "cors"
            },
            {
              "name": "sec-fetch-site",
              "value": "same-origin"
            },
            {
              "name": "user-agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            }
          ],
          "queryString": [],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 297,
          "postData": {
            "mimeType": "text/plain; charset=UTF-8",
            "text": "currentBrowserRootWindow@DW@IRW3104379@DW@1388@DW@1209@DX@OQS3104702@DW@OQS3104702@DW@onresizeEvent@DW@newWidth=1388@DWSUB@newHeight=1140@DWSUB@relX=0@DWSUB@relY=0@DWSUB@absX=0@DWSUB@absY=69@DWSUB@newWidth=1388@DWSUB@newHeight=1140@DWSUB@hasVerticalOverflow=false@DWSUB@hasHorizontalOverflow=false"
          }
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://ekat.festool.de"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "cache-control",
              "value": "no-cache,no-store,must-revalidate,post-check=0,pre-check=0"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "content-length",
              "value": "1971"
            },
            {
              "name": "content-type",
              "value": "text/html;charset=UTF-8"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 09:09:49 GMT"
            },
            {
              "name": "expires",
              "value": "Thu, 01 Jan 1970 00:00:00 GMT"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "pragma",
              "value": "no-cache"
            },
            {
              "name": "vary",
              "value": "Origin"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "x-robots-tag",
              "value": "noindex"
            }
          ],
          "cookies": [],
          "content": {
            "size": 24090,
            "mimeType": "text/html",
            "text": "genericRemoveNode@DW@WHF3104784@DW@0|0@DW@2@DX@genericRemoveNode@DW@WHF3104784@DW@0|0@DW@1@DX@genericRemoveNode@DW@WHF3104784@DW@0|0@DW@0@DX@genericInsertNode@DW@WHF3104784@DW@0|0@DW@0@DW@<div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:140px;text-align:left;height:56px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:4px;top:50%;left:0;width:132px;margin-top:-28px;margin-bottom:0px;margin-right:4px;height:56px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;cursor:pointer;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel cursor_pointer\" id=\"CPJ3105943\" onmouseleave=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseLeave(event, &#39;CPJ3105943&#39;, &#39;CPJ3105943&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseenter=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseEnter(event, &#39;CPJ3105943&#39;, &#39;CPJ3105943&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnClick(event, &#39;CPJ3105943&#39;, &#39;CPJ3105943&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-left:-66px;top:50%;left:50%;bottom:0;width:132px;margin-top:-28px;right:0;height:56px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:132px;text-align:center;height:32px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-16px;top:50%;left:50%;width:32px;margin-top:-16px;margin-bottom:0px;margin-right:5px;height:32px\" class=\"guilayoutgridbag_container_padded\"><div style=\"padding-top:0px;margin:auto;padding-left:0px;width:32px;padding-bottom:0px;height:32px;padding-right:0px\" class=\"guiimage\" id=\"IOU4954458\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=ba_image_85D689790F96B1A5E7BA4CF36E8E4AF0\" alt=\"\" id=\"IOU4954458_img\"></div></div></div><div style=\"background-color:transparent;top:32px;left:0px;vertical-align:middle;width:132px;text-align:center;height:24px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-60px;top:50%;left:49.999%;width:121px;margin-top:-8px;margin-bottom:0px;margin-right:5px;height:20px\" class=\"guilayoutgridbag_container_padded\"><div style=\"padding-top:0px;margin:auto;padding-left:0px;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel\" id=\"NQA4954458\">Catalogue of parts</div></div></div></div></div></div></div></div>@DX@genericInsertNode@DW@WHF3104784@DW@0|0@DW@1@DW@<div style=\"background-color:transparent;top:0px;left:140px;vertical-align:middle;width:152px;text-align:left;height:56px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:4px;top:50%;left:0;width:144px;margin-top:-28px;margin-bottom:0px;margin-right:4px;height:56px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;cursor:pointer;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel cursor_pointer\" id=\"SVO3105943\" onmouseleave=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseLeave(event, &#39;SVO3105943&#39;, &#39;SVO3105943&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseenter=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseEnter(event, &#39;SVO3105943&#39;, &#39;SVO3105943&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnClick(event, &#39;SVO3105943&#39;, &#39;SVO3105943&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-left:-72px;top:50%;left:50%;bottom:0;width:144px;margin-top:-28px;right:0;height:56px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:144px;text-align:center;height:32px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-16px;top:50%;left:50%;width:32px;margin-top:-16px;margin-bottom:0px;margin-right:5px;height:32px\" class=\"guilayoutgridbag_container_padded\"><div style=\"padding-top:0px;margin:auto;padding-left:0px;width:32px;padding-bottom:0px;height:32px;padding-right:0px\" class=\"guiimage\" id=\"DQJ4954467\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=ba_image_4A442C18BB9667967DFB206DCF66322C\" alt=\"\" id=\"DQJ4954467_img\"></div></div></div><div style=\"background-color:transparent;top:32px;left:0px;vertical-align:middle;width:144px;text-align:center;height:24px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-67px;top:50%;left:50%;width:134px;margin-top:-8px;margin-bottom:0px;margin-right:5px;height:20px\" class=\"guilayoutgridbag_container_padded\"><div style=\"padding-top:0px;margin:auto;padding-left:0px;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel\" id=\"CXE4954467\">Service-Mediacenter</div></div></div></div></div></div></div></div>@DX@genericInsertNode@DW@WHF3104784@DW@0|0@DW@2@DW@<div style=\"background-color:transparent;top:0px;left:292px;vertical-align:middle;width:0px;text-align:left;height:56px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:4px;top:50%;left:0;width:0px;margin-top:0px;margin-bottom:0px;margin-right:4px;height:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;cursor:pointer;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:none;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel cursor_pointer\" id=\"SJC3104713\" onmouseleave=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseLeave(event, &#39;SJC3104713&#39;, &#39;SJC3104713&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseenter=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseEnter(event, &#39;SJC3104713&#39;, &#39;SJC3104713&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnClick(event, &#39;SJC3104713&#39;, &#39;SJC3104713&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-left:-38px;top:50%;left:50%;bottom:0;width:76px;margin-top:-28px;right:0;height:56px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:76px;text-align:center;height:32px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-16px;top:50%;left:50%;width:32px;margin-top:-16px;margin-bottom:0px;margin-right:5px;height:32px\" class=\"guilayoutgridbag_container_padded\"><div style=\"padding-top:0px;margin:auto;padding-left:0px;width:32px;padding-bottom:0px;height:32px;padding-right:0px\" class=\"guiimage\" id=\"ULA4954473\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=bi_image_class_image_de.docware.framework.modules.gui.design.b_defaultimages_material_Catalogue_32px_normal.png_grayedOut_0B02CBCFF1642DE1C50343CC9A91644C\" alt=\"\" id=\"ULA4954473_img\"></div></div></div><div style=\"background-color:transparent;top:32px;left:0px;vertical-align:middle;width:76px;text-align:center;height:24px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-33px;top:50%;left:50%;width:66px;margin-top:-8px;margin-bottom:0px;margin-right:5px;height:20px\" class=\"guilayoutgridbag_container_padded\"><div style=\"padding-top:0px;margin:auto;padding-left:0px;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel\" id=\"YTG4954473\">Catalogue</div></div></div></div></div></div></div></div>@DX@setStyle@DW@IOU4954458@DW@font-size@DW@14px@DX@setStyle@DW@IOU4954458@DW@line-height@DW@15px@DX@setStyle@DW@NQA4954458@DW@font-size@DW@14px@DX@setStyle@DW@NQA4954458@DW@line-height@DW@15px@DX@setStyle@DW@DQJ4954467@DW@font-size@DW@14px@DX@setStyle@DW@DQJ4954467@DW@line-height@DW@15px@DX@setStyle@DW@CXE4954467@DW@font-size@DW@14px@DX@setStyle@DW@CXE4954467@DW@line-height@DW@15px@DX@setStyle@DW@ULA4954473@DW@font-size@DW@14px@DX@setStyle@DW@ULA4954473@DW@line-height@DW@15px@DX@setStyle@DW@YTG4954473@DW@font-size@DW@14px@DX@setStyle@DW@YTG4954473@DW@line-height@DW@15px@DX@genericReplaceNode@DW@QUP3104379@DW@0@DW@1@DW@<div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div>@DX@genericSetNodeStyle@DW@QUP3104379@DW@0|2@DW@left@DW@0px@DX@genericSetNodeStyle@DW@QUP3104379@DW@0|1@DW@width@DW@292px@DX@genericSetNodeStyle@DW@QUP3104379@DW@0|2@DW@left@DW@292px@DX@genericReplaceNode@DW@QUP3104379@DW@0@DW@1@DW@<div style=\"top:0px;width:292px;bottom:0px\" class=\"guilayoutborder_west\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"WHF3104784\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-left:-146px;top:50%;left:50%;bottom:0;width:292px;margin-top:-28px;right:0;height:56px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:140px;text-align:left;height:56px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:4px;top:50%;left:0;width:132px;margin-top:-28px;margin-bottom:0px;margin-right:4px;height:56px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;cursor:pointer;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel cursor_pointer\" id=\"CPJ3105943\" onmouseleave=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseLeave(event, &#39;CPJ3105943&#39;, &#39;CPJ3105943&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseenter=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseEnter(event, &#39;CPJ3105943&#39;, &#39;CPJ3105943&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnClick(event, &#39;CPJ3105943&#39;, &#39;CPJ3105943&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-left:-66px;top:50%;left:50%;bottom:0;width:132px;margin-top:-28px;right:0;height:56px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:132px;text-align:center;height:32px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-16px;top:50%;left:50%;width:32px;margin-top:-16px;margin-bottom:0px;margin-right:5px;height:32px\" class=\"guilayoutgridbag_container_padded\"><div style=\"padding-top:0px;margin:auto;padding-left:0px;width:32px;padding-bottom:0px;height:32px;padding-right:0px\" class=\"guiimage\" id=\"QGQ4954474\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=ba_image_85D689790F96B1A5E7BA4CF36E8E4AF0\" alt=\"\" id=\"QGQ4954474_img\"></div></div></div><div style=\"background-color:transparent;top:32px;left:0px;vertical-align:middle;width:132px;text-align:center;height:24px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-60px;top:50%;left:49.999%;width:121px;margin-top:-8px;margin-bottom:0px;margin-right:5px;height:20px\" class=\"guilayoutgridbag_container_padded\"><div style=\"padding-top:0px;margin:auto;padding-left:0px;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel\" id=\"IPF4954474\">Catalogue of parts</div></div></div></div></div></div></div></div><div style=\"background-color:transparent;top:0px;left:140px;vertical-align:middle;width:152px;text-align:left;height:56px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:4px;top:50%;left:0;width:144px;margin-top:-28px;margin-bottom:0px;margin-right:4px;height:56px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;cursor:pointer;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel cursor_pointer\" id=\"SVO3105943\" onmouseleave=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseLeave(event, &#39;SVO3105943&#39;, &#39;SVO3105943&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseenter=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseEnter(event, &#39;SVO3105943&#39;, &#39;SVO3105943&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnClick(event, &#39;SVO3105943&#39;, &#39;SVO3105943&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-left:-72px;top:50%;left:50%;bottom:0;width:144px;margin-top:-28px;right:0;height:56px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:144px;text-align:center;height:32px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-16px;top:50%;left:50%;width:32px;margin-top:-16px;margin-bottom:0px;margin-right:5px;height:32px\" class=\"guilayoutgridbag_container_padded\"><div style=\"padding-top:0px;margin:auto;padding-left:0px;width:32px;padding-bottom:0px;height:32px;padding-right:0px\" class=\"guiimage\" id=\"UHX4954474\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=ba_image_4A442C18BB9667967DFB206DCF66322C\" alt=\"\" id=\"UHX4954474_img\"></div></div></div><div style=\"background-color:transparent;top:32px;left:0px;vertical-align:middle;width:144px;text-align:center;height:24px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-67px;top:50%;left:50%;width:134px;margin-top:-8px;margin-bottom:0px;margin-right:5px;height:20px\" class=\"guilayoutgridbag_container_padded\"><div style=\"padding-top:0px;margin:auto;padding-left:0px;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel\" id=\"KAD4954474\">Service-Mediacenter</div></div></div></div></div></div></div></div><div style=\"background-color:transparent;top:0px;left:292px;vertical-align:middle;width:0px;text-align:left;height:56px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:4px;top:50%;left:0;width:0px;margin-top:0px;margin-bottom:0px;margin-right:4px;height:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;cursor:pointer;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:none;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel cursor_pointer\" id=\"SJC3104713\" onmouseleave=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseLeave(event, &#39;SJC3104713&#39;, &#39;SJC3104713&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseenter=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseEnter(event, &#39;SJC3104713&#39;, &#39;SJC3104713&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnClick(event, &#39;SJC3104713&#39;, &#39;SJC3104713&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-left:-38px;top:50%;left:50%;bottom:0;width:76px;margin-top:-28px;right:0;height:56px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:76px;text-align:center;height:32px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-16px;top:50%;left:50%;width:32px;margin-top:-16px;margin-bottom:0px;margin-right:5px;height:32px\" class=\"guilayoutgridbag_container_padded\"><div style=\"padding-top:0px;margin:auto;padding-left:0px;width:32px;padding-bottom:0px;height:32px;padding-right:0px\" class=\"guiimage\" id=\"SRE4954478\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=bi_image_class_image_de.docware.framework.modules.gui.design.b_defaultimages_material_Catalogue_32px_normal.png_grayedOut_0B02CBCFF1642DE1C50343CC9A91644C\" alt=\"\" id=\"SRE4954478_img\"></div></div></div><div style=\"background-color:transparent;top:32px;left:0px;vertical-align:middle;width:76px;text-align:center;height:24px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-33px;top:50%;left:50%;width:66px;margin-top:-8px;margin-bottom:0px;margin-right:5px;height:20px\" class=\"guilayoutgridbag_container_padded\"><div style=\"padding-top:0px;margin:auto;padding-left:0px;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel\" id=\"BOG4954478\">Catalogue</div></div></div></div></div></div></div></div></div></div></div></div>@DX@genericSetNodeStyle@DW@QUP3104379@DW@0|2@DW@left@DW@292px@DX@genericSetNodeStyle@DW@WHF3104784@DW@0|0@DW@width@DW@292px@DX@genericSetNodeStyle@DW@WHF3104784@DW@0|0@DW@margin-left@DW@-146px@DX@genericSetNodeStyle@DW@WHF3104784@DW@0|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@WHF3104784@DW@0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@WHF3104784@DW@0|0@DW@height@DW@56px@DX@genericSetNodeStyle@DW@WHF3104784@DW@0|0@DW@margin-top@DW@-28px@DX@genericSetNodeStyle@DW@WHF3104784@DW@0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@WHF3104784@DW@0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@WHF3104784@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@WHF3104784@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@WHF3104784@DW@0|0|0@DW@height@DW@56px@DX@genericSetNodeStyle@DW@WHF3104784@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@WHF3104784@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@WHF3104784@DW@0|0|0@DW@width@DW@140px@DX@genericSetNodeStyle@DW@WHF3104784@DW@0|0|0|0@DW@height@DW@56px@DX@genericSetNodeStyle@DW@WHF3104784@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@WHF3104784@DW@0|0|0|0@DW@margin-top@DW@-28px@DX@genericRemoveNodeStyle@DW@WHF3104784@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@WHF3104784@DW@0|0|0|0@DW@width@DW@132px@DX@genericSetNodeStyle@DW@WHF3104784@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@WHF3104784@DW@0|0|0|0@DW@margin-left@DW@4px@DX@genericRemoveNodeStyle@DW@WHF3104784@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@WHF3104784@DW@0|0|1@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@WHF3104784@DW@0|0|1@DW@bottom@DX@genericSetNodeStyle@DW@WHF3104784@DW@0|0|1@DW@height@DW@56px@DX@genericSetNodeStyle@DW@WHF3104784@DW@0|0|1@DW@left@DW@140px@DX@genericRemoveNodeStyle@DW@WHF3104784@DW@0|0|1@DW@right@DX@genericSetNodeStyle@DW@WHF3104784@DW@0|0|1@DW@width@DW@152px@DX@genericSetNodeStyle@DW@WHF3104784@DW@0|0|1|0@DW@height@DW@56px@DX@genericSetNodeStyle@DW@WHF3104784@DW@0|0|1|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@WHF3104784@DW@0|0|1|0@DW@margin-top@DW@-28px@DX@genericRemoveNodeStyle@DW@WHF3104784@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@WHF3104784@DW@0|0|1|0@DW@width@DW@144px@DX@genericSetNodeStyle@DW@WHF3104784@DW@0|0|1|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@WHF3104784@DW@0|0|1|0@DW@margin-left@DW@4px@DX@genericRemoveNodeStyle@DW@WHF3104784@DW@0|0|1|0@DW@right@DX@genericSetNodeStyle@DW@WHF3104784@DW@0|0|2@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@WHF3104784@DW@0|0|2@DW@bottom@DX@genericSetNodeStyle@DW@WHF3104784@DW@0|0|2@DW@height@DW@56px@DX@genericSetNodeStyle@DW@WHF3104784@DW@0|0|2@DW@left@DW@292px@DX@genericRemoveNodeStyle@DW@WHF3104784@DW@0|0|2@DW@right@DX@genericSetNodeStyle@DW@WHF3104784@DW@0|0|2@DW@width@DW@0px@DX@genericSetNodeStyle@DW@WHF3104784@DW@0|0|2|0@DW@height@DW@0px@DX@genericSetNodeStyle@DW@WHF3104784@DW@0|0|2|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@WHF3104784@DW@0|0|2|0@DW@margin-top@DW@0px@DX@genericRemoveNodeStyle@DW@WHF3104784@DW@0|0|2|0@DW@bottom@DX@genericSetNodeStyle@DW@WHF3104784@DW@0|0|2|0@DW@width@DW@0px@DX@genericSetNodeStyle@DW@WHF3104784@DW@0|0|2|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@WHF3104784@DW@0|0|2|0@DW@margin-left@DW@4px@DX@genericRemoveNodeStyle@DW@WHF3104784@DW@0|0|2|0@DW@right@DX@genericSetNodeStyle@DW@BJO3104379@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@BJO3104379@DW@0|0@DW@right@DW@0@DX@genericRemoveNodeStyle@DW@BJO3104379@DW@0|0@DW@margin-left@DX@genericRemoveNodeStyle@DW@BJO3104379@DW@0|0@DW@width@DX@genericSetNodeStyle@DW@BJO3104379@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@BJO3104379@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@BJO3104379@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@BJO3104379@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@BJO3104379@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@BJO3104379@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@BJO3104379@DW@0|0|0@DW@height@DW@64px@DX@genericSetNodeStyle@DW@BJO3104379@DW@0|0|0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@BJO3104379@DW@0|0|0@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@BJO3104379@DW@0|0|0@DW@width@DX@genericSetNodeStyle@DW@BJO3104379@DW@0|0|0|0@DW@height@DW@64px@DX@genericSetNodeStyle@DW@BJO3104379@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@BJO3104379@DW@0|0|0|0@DW@margin-top@DW@-32px@DX@genericRemoveNodeStyle@DW@BJO3104379@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@BJO3104379@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@BJO3104379@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@BJO3104379@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@BJO3104379@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@BJO3104379@DW@0|0|0|0@DW@width@DX@genericSetNodeStyle@DW@BJO3104379@DW@0|0|1@DW@top@DW@64px@DX@genericRemoveNodeStyle@DW@BJO3104379@DW@0|0|1@DW@bottom@DX@genericSetNodeStyle@DW@BJO3104379@DW@0|0|1@DW@height@DW@5px@DX@genericSetNodeStyle@DW@BJO3104379@DW@0|0|1@DW@left@DW@0px@DX@genericSetNodeStyle@DW@BJO3104379@DW@0|0|1@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@BJO3104379@DW@0|0|1@DW@width@DX@genericSetNodeStyle@DW@BJO3104379@DW@0|0|1|0@DW@height@DW@5px@DX@genericSetNodeStyle@DW@BJO3104379@DW@0|0|1|0@DW@top@DW@49.999%@DX@genericSetNodeStyle@DW@BJO3104379@DW@0|0|1|0@DW@margin-top@DW@-2px@DX@genericRemoveNodeStyle@DW@BJO3104379@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@BJO3104379@DW@0|0|1|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@BJO3104379@DW@0|0|1|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@BJO3104379@DW@0|0|1|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@BJO3104379@DW@0|0|1|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@BJO3104379@DW@0|0|1|0@DW@width@DX@genericSetNodeStyle@DW@BJO3104379@DW@0|0|2@DW@top@DW@69px@DX@genericSetNodeStyle@DW@BJO3104379@DW@0|0|2@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@BJO3104379@DW@0|0|2@DW@height@DX@genericSetNodeStyle@DW@BJO3104379@DW@0|0|2@DW@left@DW@0px@DX@genericSetNodeStyle@DW@BJO3104379@DW@0|0|2@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@BJO3104379@DW@0|0|2@DW@width@DX@genericSetNodeStyle@DW@BJO3104379@DW@0|0|2|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@BJO3104379@DW@0|0|2|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@BJO3104379@DW@0|0|2|0@DW@margin-top@DW@0px@DX@genericSetNodeStyle@DW@BJO3104379@DW@0|0|2|0@DW@margin-bottom@DW@0px@DX@genericRemoveNodeStyle@DW@BJO3104379@DW@0|0|2|0@DW@height@DX@genericSetNodeStyle@DW@BJO3104379@DW@0|0|2|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@BJO3104379@DW@0|0|2|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@BJO3104379@DW@0|0|2|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@BJO3104379@DW@0|0|2|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@BJO3104379@DW@0|0|2|0@DW@width@DX@setChildThreadCount@DW@0"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": -1,
          "_transferSize": 2042,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:10.109Z",
        "time": 73.49500001873821,
        "timings": {
          "blocked": 3.319999958321452,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0.4049999999999998,
          "wait": 69.14100004392863,
          "receive": 0.6290000164881349,
          "_blocked_queueing": 0.9729999583214521,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_connectionId": "1726423",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "script",
          "stack": {
            "callFrames": [
              {
                "functionName": "",
                "scriptId": "74",
                "url": "https://ekat.festool.de/login/WEB-RES/js/base.js_shop_7.26.1.5.js",
                "lineNumber": 15869,
                "columnNumber": 38
              }
            ],
            "parent": {
              "description": "setTimeout",
              "callFrames": [
                {
                  "functionName": "dwAjaxNewStaticConnection",
                  "scriptId": "74",
                  "url": "https://ekat.festool.de/login/WEB-RES/js/base.js_shop_7.26.1.5.js",
                  "lineNumber": 15826,
                  "columnNumber": 4
                },
                {
                  "functionName": "dwFrameworkInitFrameworkFinished",
                  "scriptId": "74",
                  "url": "https://ekat.festool.de/login/WEB-RES/js/base.js_shop_7.26.1.5.js",
                  "lineNumber": 7285,
                  "columnNumber": 8
                },
                {
                  "functionName": "init",
                  "scriptId": "79",
                  "url": "https://ekat.festool.de/login/app?__bk_&__windowid=IRW3104379&__rid=FOE1787216989423",
                  "lineNumber": 12,
                  "columnNumber": 2432
                },
                {
                  "functionName": "onload",
                  "scriptId": "95",
                  "url": "https://ekat.festool.de/login/app?__bk_&__windowid=IRW3104379&__rid=FOE1787216989423#2VFB2144C915D47DFAD66CC73CEC1F7E17E1D29351DB45EA618EEFB7B1BB136D42B8044FCE28E6056D",
                  "lineNumber": 12,
                  "columnNumber": 3859
                }
              ]
            }
          }
        },
        "_priority": "High",
        "_resourceType": "xhr",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "POST",
          "url": "https://ekat.festool.de/login/static.connection_IRW3104379",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": ":authority",
              "value": "ekat.festool.de"
            },
            {
              "name": ":method",
              "value": "POST"
            },
            {
              "name": ":path",
              "value": "/login/static.connection_IRW3104379"
            },
            {
              "name": ":scheme",
              "value": "https"
            },
            {
              "name": "accept",
              "value": "*/*"
            },
            {
              "name": "accept-encoding",
              "value": "gzip, deflate, br, zstd"
            },
            {
              "name": "accept-language",
              "value": "en-GB,en-US;q=0.9,en;q=0.8"
            },
            {
              "name": "cache-control",
              "value": "no-cache,no-store,must-revalidate,post-check=0,pre-check=0"
            },
            {
              "name": "content-length",
              "value": "1"
            },
            {
              "name": "content-type",
              "value": "text/plain; charset=UTF-8"
            },
            {
              "name": "expires",
              "value": "0"
            },
            {
              "name": "origin",
              "value": "https://ekat.festool.de"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "pragma",
              "value": "no-cache"
            },
            {
              "name": "priority",
              "value": "u=1, i"
            },
            {
              "name": "referer",
              "value": "https://ekat.festool.de/login/app?__bk_&__windowid=IRW3104379&__rid=FOE1787216989423"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            },
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "sec-fetch-dest",
              "value": "empty"
            },
            {
              "name": "sec-fetch-mode",
              "value": "cors"
            },
            {
              "name": "sec-fetch-site",
              "value": "same-origin"
            },
            {
              "name": "user-agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            }
          ],
          "queryString": [],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 1,
          "postData": {
            "mimeType": "text/plain; charset=UTF-8",
            "text": "?"
          }
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://ekat.festool.de"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "cache-control",
              "value": "no-cache,no-store,must-revalidate,post-check=0,pre-check=0"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "content-length",
              "value": "21"
            },
            {
              "name": "content-type",
              "value": "text/html;charset=UTF-8"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 09:09:50 GMT"
            },
            {
              "name": "expires",
              "value": "Thu, 01 Jan 1970 00:00:00 GMT"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "pragma",
              "value": "no-cache"
            },
            {
              "name": "vary",
              "value": "Origin"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "x-robots-tag",
              "value": "noindex"
            }
          ],
          "cookies": [],
          "content": {
            "size": 1,
            "mimeType": "text/html",
            "text": "y"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": -1,
          "_transferSize": 91,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:10.111Z",
        "time": 1090.7769999466836,
        "timings": {
          "blocked": 8.632000012032687,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0.30900000000000016,
          "wait": 1081.2009999888912,
          "receive": 0.6349999457597733,
          "_blocked_queueing": 4.420000012032688,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_connectionId": "1726423",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "other"
        },
        "_priority": "VeryHigh",
        "_resourceType": "document",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "POST",
          "url": "https://ekat.festool.de/ekat/app",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": ":authority",
              "value": "ekat.festool.de"
            },
            {
              "name": ":method",
              "value": "POST"
            },
            {
              "name": ":path",
              "value": "/ekat/app"
            },
            {
              "name": ":scheme",
              "value": "https"
            },
            {
              "name": "accept",
              "value": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7"
            },
            {
              "name": "accept-encoding",
              "value": "gzip, deflate, br, zstd"
            },
            {
              "name": "accept-language",
              "value": "en-GB,en-US;q=0.9,en;q=0.8"
            },
            {
              "name": "cache-control",
              "value": "max-age=0"
            },
            {
              "name": "content-length",
              "value": "616"
            },
            {
              "name": "content-type",
              "value": "application/x-www-form-urlencoded"
            },
            {
              "name": "origin",
              "value": "https://ekat.festool.de"
            },
            {
              "name": "priority",
              "value": "u=0, i"
            },
            {
              "name": "referer",
              "value": "https://ekat.festool.de/login/app?__bk_&__windowid=IRW3104379&__rid=FOE1787216989423"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            },
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "sec-fetch-dest",
              "value": "iframe"
            },
            {
              "name": "sec-fetch-mode",
              "value": "navigate"
            },
            {
              "name": "sec-fetch-site",
              "value": "same-origin"
            },
            {
              "name": "upgrade-insecure-requests",
              "value": "1"
            },
            {
              "name": "user-agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            }
          ],
          "queryString": [],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 616,
          "postData": {
            "mimeType": "application/x-www-form-urlencoded",
            "text": "forcerestart=true&shopurl=https%3A%2F%2Fekat.festool.de%2Flogin%2Fapp&updateSessionTimerUrl=https%3A%2F%2Fekat.festool.de%2Flogin%2FWEB-API%2FupdateSessionTimer&basket=false&qss_shop=true&extId=IQW3104379&basket=false&currency=EUR&currencyKey=DE&docuLang=EN&filter_F_Typ1=on&filter_F_Zugriffsrechte=on&filterValues_F_Typ1=DE&filterValues_F_Zugriffsrechte=Endkunde&k_vari_top=festoolroot&locale=en_GB&partLang=EN&rowsPerPage=100&variant=extern&verticalLayout=1&viewerType=9&startasiacslave=https%3A%2F%2Fekat.festool.de%2Flogin&slaveid=https___ekat.festool.de_ekat_app&mastersessionid=A05035CB3B4359F9871749B06D302026",
            "params": [
              {
                "name": "forcerestart",
                "value": "true"
              },
              {
                "name": "shopurl",
                "value": "https%3A%2F%2Fekat.festool.de%2Flogin%2Fapp"
              },
              {
                "name": "updateSessionTimerUrl",
                "value": "https%3A%2F%2Fekat.festool.de%2Flogin%2FWEB-API%2FupdateSessionTimer"
              },
              {
                "name": "basket",
                "value": "false"
              },
              {
                "name": "qss_shop",
                "value": "true"
              },
              {
                "name": "extId",
                "value": "IQW3104379"
              },
              {
                "name": "basket",
                "value": "false"
              },
              {
                "name": "currency",
                "value": "EUR"
              },
              {
                "name": "currencyKey",
                "value": "DE"
              },
              {
                "name": "docuLang",
                "value": "EN"
              },
              {
                "name": "filter_F_Typ1",
                "value": "on"
              },
              {
                "name": "filter_F_Zugriffsrechte",
                "value": "on"
              },
              {
                "name": "filterValues_F_Typ1",
                "value": "DE"
              },
              {
                "name": "filterValues_F_Zugriffsrechte",
                "value": "Endkunde"
              },
              {
                "name": "k_vari_top",
                "value": "festoolroot"
              },
              {
                "name": "locale",
                "value": "en_GB"
              },
              {
                "name": "partLang",
                "value": "EN"
              },
              {
                "name": "rowsPerPage",
                "value": "100"
              },
              {
                "name": "variant",
                "value": "extern"
              },
              {
                "name": "verticalLayout",
                "value": "1"
              },
              {
                "name": "viewerType",
                "value": "9"
              },
              {
                "name": "startasiacslave",
                "value": "https%3A%2F%2Fekat.festool.de%2Flogin"
              },
              {
                "name": "slaveid",
                "value": "https___ekat.festool.de_ekat_app"
              },
              {
                "name": "mastersessionid",
                "value": "A05035CB3B4359F9871749B06D302026"
              }
            ]
          }
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://ekat.festool.de"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "cache-control",
              "value": "no-cache,no-store,must-revalidate,post-check=0,pre-check=0"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "content-length",
              "value": "10224"
            },
            {
              "name": "content-type",
              "value": "text/html;charset=UTF-8"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 09:09:49 GMT"
            },
            {
              "name": "expires",
              "value": "Thu, 01 Jan 1970 00:00:00 GMT"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "pragma",
              "value": "no-cache"
            },
            {
              "name": "vary",
              "value": "Origin"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "x-robots-tag",
              "value": "noindex"
            }
          ],
          "cookies": [],
          "content": {
            "size": 35762,
            "mimeType": "text/html",
            "text": "<!DOCTYPE html><html style='height:100%;width:100%;'><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/><meta http-equiv=\"X-UA-Compatible\" content=\"IE=100\"><meta name=\"viewport\" content=\"width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, target-densityDpi=160dpi\"><script type=\"text/javascript\">/*\r\n * Copyright (c) 2024 Quanos Solutions GmbH\r\n */\r\nDW_FONT_STYLES = {\r\n    PLAIN: new DwFontStyle(\"normal\", \"normal\", 0),\r\n    BOLD: new DwFontStyle(\"normal\", \"bold\", 1),\r\n    ITALIC: new DwFontStyle(\"italic\", \"normal\", 2),\r\n    BOLD_ITALIC: new DwFontStyle(\"italic\", \"bold\", 3)\r\n};\r\n\r\nfunction hasSupportForCookies() {\r\n    var isCookieEnabled = navigator.cookieEnabled;\r\n    if (typeof navigator.cookieEnabled == \"undefined\" && !isCookieEnabled) {\r\n        // Property not found. Try to write/read explicitely. Otherwise we trust on the cookieEnabled flag\r\n        var sekunde = 1000;\r\n        document.cookie = \"parts_publisher_testcookie;expires=\" +\r\n                          (new Date(new Date().getTime() + parseInt(sekunde))).toGMTString() + \";\";\r\n        isCookieEnabled = (document.cookie.indexOf(\"parts_publisher_testcookie\") != -1)\r\n    }\r\n    return isCookieEnabled;\r\n}\r\n\r\n/**\r\n * Entfernt alle Unterknoten von BODY (wenn Javascript aktiv)\r\n */\r\nfunction removeJavascriptDisabledMessage() {\r\n    var body = document.getElementsByTagName(\"body\")[0];\r\n    var childNodes = body.childNodes;\r\n    for (var i = 0; i < childNodes.length; i++) {\r\n        body.removeChild(childNodes[i]);\r\n    }\r\n}\r\n\r\n/**\r\n * In der HTML Seite wird eine Nachricht angezeigt, dass Javascript nicht verfügbar ist, für die Anzeige der Seite allerdings\r\n * benötigt wird.\r\n * Ist Javascript aktiv, wird dieser Text aus dem HTML Dokument entfernt, und die Browser Informationen inkl. eindeutiger\r\n * permanenter Benutzer-ID (sofern Cookies unterstützt werden) an den Server übermittelt.\r\n *\r\n * @param userCookieName\r\n * @param newUserId\r\n * @param checkViewer\r\n */\r\nfunction redirectWithBrowserInfo(userId, checkViewer) {\r\n    removeJavascriptDisabledMessage();\r\n\r\n    addEmptyOverlay();\r\n    var redirector = new DwRedirector();\r\n\r\n    if (checkViewer) {\r\n        redirector.addParameter(\"WebGL\", isWithWebGL());\r\n    }\r\n    var cookiesSupported = hasSupportForCookies();\r\n    var availableFonts = getAvailableFonts();\r\n    var currentDPI = getCurrentDpi();\r\n    redirector.addParameter(\"cookies\", cookiesSupported);\r\n    redirector.addParameter(\"tabid\", getBrowserTabId());\r\n    redirector.addParameter(\"javascript\", true); // keine Prüfung notwendig, da JS ausgeführt wird\r\n    redirector.addParameter(\"availablefonts\", availableFonts);\r\n    redirector.addParameter(\"screensize\", getScreenSize());\r\n    redirector.addParameter(\"dpi\", currentDPI);\r\n    redirector.addParameter(\"zoom\", getZoom(currentDPI));\r\n    redirector.addParameter(\"displayorientation\", getDisplayOrientation());\r\n    redirector.addParameter(\"touch\", isTouchBrowser());\r\n    redirector.addParameter(\"pointer\", isPointerBrowser());\r\n    redirector.addParameter(\"mspointer\", isMSPointerBrowser());\r\n    redirector.addParameter(\"maxtouchpoints\", getMaxTouchPoints());\r\n    redirector.addParameter(\"browserinfo\", \"\");\r\n    redirector.addParameter(\"canvas\", isWithCanvas());\r\n    redirector.addParameter(\"video\", isWithVideo());\r\n    redirector.addParameter(\"hiddenScrollbar\", isScrollbarHidden());\r\n    redirector.addParameter(\"perf\", isWithNavigationTimingAPI());\r\n    redirector.addParameter(\"legacy\", isIELegacyMode());\r\n    redirector.addParameter(\"scrollbarwidth\", getScrollbarWidth());\r\n    redirector.addParameter(\"timeZoneOffset\", getTimeZoneOffset());\r\n\r\n    // Der Referenztext, der verwendet wird, um die Schriftbreite auf dem Client mit der auf dem Server zu vergleichen\r\n    // damit der Server weis wieviel Platz der Client für Texte im Schnitt braucht. Der Referenztext berücksichtige die\r\n    // Buchstabenhäufigkeit der deutschen Sprache.\r\n    var referenceTexts = [\"Enisratdhulc Gmobwfkzp Venisratdhulcgmobwfeni Sratdhulcgmo eni srat Dhuenisratd Henisraten israenienen Eeeeeee\"];\r\n    var styleCounter = 0;\r\n    var splitted = availableFonts.split(\",\");\r\n    for (var i = 0; i < splitted.length; i++) {\r\n        var defaultFont = splitted[i];\r\n        for (var size = 8; size <= 20; size++) {\r\n            for (var fontStyle in DW_FONT_STYLES) {\r\n                if (!DW_FONT_STYLES.hasOwnProperty(fontStyle)) {\r\n                    continue;\r\n                }\r\n                var fontSetting = DW_FONT_STYLES[fontStyle];\r\n                var realFontSizePx = size + \"px\";\r\n                redirector.addParameter(\"ref_\" + styleCounter + \"_meta\", \"font-family=\" + defaultFont + \"|font-size=\" + realFontSizePx + \"|font-style=\" + fontSetting.swingStyle);\r\n                redirector.addParameter(\"ref_\" + styleCounter, getTextReferences(referenceTexts, defaultFont, realFontSizePx, fontSetting));\r\n                styleCounter++;\r\n            }\r\n        }\r\n    }\r\n\r\n    redirector.addParameter(\"userid\", userId);\r\n    redirector.submitByForm(\"POST\");\r\n}\r\n\r\nfunction getScreenSize() {\r\n    var body = document.getElementById(\"body\");\r\n    return body.offsetWidth + \"x\" + body.offsetHeight;\r\n}\r\n\r\nfunction getDisplayOrientation() {\r\n    if (window.orientation != null) {\r\n        return window.orientation;\r\n    } else {\r\n        var body = document.getElementById(\"body\");\r\n        if (body.offsetWidth >= body.offsetHeight) { // aufgrund des Seitenverhältnisses die Ausrichtung erraten\r\n            return 0; // BrowserInfo.DISPLAY_ORIENTATION_PORTRAIT\r\n        } else {\r\n            return 90; // BrowserInfo.DISPLAY_ORIENTATION_LANDSCAPE_LEFT\r\n        }\r\n    }\r\n}\r\n\r\nfunction getCurrentDpi() {\r\n    // unter IE gibt es zusätzliche Attribute des screen-Objekts.\r\n    // Diese sind aber unter anderen Browsern nicht verfügbar.\r\n    // Dafür gibt es in Firefox und Chrome sowie ab IE10 die Möglichkeit, im Javascript auf CSS-Media-Queries zuzugreifen.\r\n    if (screen.deviceXDPI) {\r\n        return screen.deviceXDPI;\r\n    }\r\n    var defaultValue = 96;\r\n\r\n    try {\r\n        if (!window.matchMedia) {\r\n            return defaultValue;\r\n        }\r\n        if (window.matchMedia('(resolution: ' + defaultValue + 'dpi)').matches) {\r\n            // Default\r\n            return defaultValue;\r\n        }\r\n        // Jetzt müssen wir von hier aus suchen\r\n        if (window.matchMedia('(max-resolution: ' + defaultValue + 'dpi)').matches) {\r\n            // Auflösung ist kleiner\r\n            var i = defaultValue - 1;\r\n            while (i > 0) {\r\n                var condition = '(resolution: ' + i + 'dpi)';\r\n                if (window.matchMedia(condition).matches) {\r\n                    return i;\r\n                }\r\n                i--;\r\n            }\r\n        } else {\r\n            // Auflösung ist größer\r\n            var i = defaultValue + 1;\r\n            while (i < 1000) { // Willkürlicher Abbruchwert, kann ggf. erhöht werden. Eine Websuche fand als höchste Kategorie \"XXXHDPI\" aus der Android Dokumentation einen Wert von 640.\r\n                var condition = '(resolution: ' + i + 'dpi)';\r\n                if (window.matchMedia(condition).matches) {\r\n                    return i + \"\";\r\n                }\r\n                i++;\r\n            }\r\n        }\r\n    } catch (exception) {\r\n        // Firefox kann Probleme machen in Versionen < 36.x wenn die Seite in einem unsichtbarem IFrame vorgeladen wird\r\n        // matchMedia kann dann nicht als Methode erkannt werden, entweder über !window.MatchMedia, oder es liefert komischerweise null\r\n        // Damit auch ja nichts passiert, hier das try/catch - damit der redirect auf jeden Fall durchgeführt werden kann\r\n    }\r\n    return defaultValue; // Wert nicht gefunden => Default\r\n}\r\n\r\nfunction getZoom(currentDPI) {\r\n    try {\r\n        var defaultDPI = 96;\r\n        var devicePixelRatio = window.devicePixelRatio || (screen.deviceXDPI / screen.logicalXDPI);\r\n        return (defaultDPI / currentDPI) * devicePixelRatio;\r\n    } catch (exception) {\r\n    }\r\n    return 1.0;\r\n}\r\n\r\n/**\r\n * Liefert eine kommaseparierte Liste aller vom Browser unterstützten Fonts, die vom Server angefragt wurden.\r\n * Der Sever hat hierzu vor dem eigenlichen Start der Andwendung eine Seite geschickt, bei der er\r\n * das body.style.fontFamily attribut mit den Fonts befüllt hat, die er gerne hätte. Diese werden hier alle\r\n * auf Verfügbarkeit geprüft.\r\n *\r\n * @returns {string}\r\n */\r\nfunction getAvailableFonts() {\r\n    var body = document.getElementById(\"body\");\r\n    var textspan = addEmptySpan();\r\n\r\n    var allFontsString = body.style.fontFamily;\r\n    var fonts = allFontsString.split(\",\");\r\n    var testString = \"WwWwWwWwWwilli\";\r\n\r\n    var result = \"\";\r\n    for (var fontCounter = 0; fontCounter < fonts.length; fontCounter++) {\r\n        var font = trim(fonts[fontCounter]);\r\n        // Wenn wir am Anfang diesen Text haben, dann ist es ein Custom Font, der auf jeden Fall vorhanden ist,\r\n        // da vom Kunden eigens hochgeladen\r\n        if ((font.indexOf(\"DW_\") == 0) || (font.indexOf(\"\\\"DW_\") == 0)) {\r\n            if (result.length > 0) {\r\n                result += \",\";\r\n            }\r\n            result += font;\r\n        } else {\r\n            // Breite einmal mit einer font-family mit der zu prüfenden Font und dem Fallback \"Sans-Serif\" berechnen\r\n            var singleFontSize = getSize(testString, font + \",Sans-Serif\", \"250px\", DW_FONT_STYLES.PLAIN, textspan);\r\n            // Breite nochmal mit einem anderen Fallback berechnen, der eine andere Größe liefert. So ist IMMER klar wenn\r\n            // der Fallback verwendet werden musste, auch wenn die Font zufällig die gleiche Breite wie einer der Fallbacks hat.\r\n            var singleFontSize2 = getSize(testString, font + \",Serif\", \"250px\", DW_FONT_STYLES.PLAIN, textspan);\r\n            // alert(\"testing font: \" + font + \" with Sans-Serif fallback => \" + singleFontSize + \" vs. font with Serif fallback: \" + singleFontSize2);\r\n            // Wenn beide FontSizes gleich sind, wurde KEIN Fallback für die Font verwendet, also ist sie verfügbar\r\n            if (singleFontSize == singleFontSize2) {\r\n                if (result.length > 0) {\r\n                    result += \",\";\r\n                }\r\n                result += font;\r\n            }\r\n        }\r\n    }\r\n    if (result.length == 0) {\r\n        result = \"Sans-Serif\";\r\n    }\r\n    getEmptyOverlay().removeChild(textspan);\r\n    // alert(\"Available fonts: \" + result);\r\n    return result;\r\n}\r\n\r\nfunction trim(string) {\r\n    return string.replace(/(^\\s*)|(\\s*$)/g, '');\r\n}\r\n\r\nfunction getSize(text, font, fontSize, fontSetting, node) {\r\n    var textspan = node;\r\n    textspan.style.fontFamily = font;\r\n    textspan.style.fontSize = fontSize;\r\n    textspan.style.lineHeight = (parseInt(fontSize) + 1) + \"px\";\r\n    textspan.style.fontWeight = fontSetting.fontWeight;\r\n    textspan.style.fontStyle = fontSetting.fontStyle;\r\n    textspan.style.whiteSpace = \"nowrap\";\r\n    var textNode = document.createTextNode(text);\r\n    textspan.appendChild(textNode);\r\n    var value;\r\n    var bcr = textspan.getBoundingClientRect();\r\n    if (typeof (bcr.width) != \"undefined\") {\r\n        value = bcr.width + \"x\" + bcr.height;\r\n    } else {\r\n        value = textspan.offsetWidth + \"x\" + textspan.offsetHeight;\r\n    }\r\n    textspan.removeChild(textNode);\r\n    return value;\r\n}\r\n\r\n/*! modernizr (Custom Build) | MIT *\r\n * https://modernizr.com/download/?-hiddenscroll-touchevents-setclasses !*/\r\n!function(e, n, t) {\r\n    function o(e, n) {\r\n        return typeof e === n\r\n    }\r\n\r\n    function s() {\r\n        var e, n, t, s, i, a, r;\r\n        for (var l in d) {\r\n            if (d.hasOwnProperty(l)) {\r\n                if (e = [], n = d[l], n.name && (e.push(n.name.toLowerCase()), n.options && n.options.aliases && n.options.aliases.length)) {\r\n                    for (t = 0; t < n.options.aliases.length; t++) {\r\n                        e.push(n.options.aliases[t].toLowerCase());\r\n                    }\r\n                }\r\n                for (s = o(n.fn, \"function\") ? n.fn() : n.fn, i = 0; i < e.length; i++) {\r\n                    a = e[i], r = a.split(\".\"), 1 === r.length ? Modernizr[r[0]] = s : (!Modernizr[r[0]] || Modernizr[r[0]] instanceof Boolean || (Modernizr[r[0]] = new Boolean(Modernizr[r[0]])), Modernizr[r[0]][r[1]] = s), f.push((s ? \"\" : \"no-\") + r.join(\"-\"))\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    function i(e) {\r\n        var n = u.className,\r\n                t = Modernizr._config.classPrefix || \"\";\r\n        if (p && (n = n.baseVal), Modernizr._config.enableJSClass) {\r\n            var o = new RegExp(\"(^|\\\\s)\" + t + \"no-js(\\\\s|$)\");\r\n            n = n.replace(o, \"$1\" + t + \"js$2\")\r\n        }\r\n        Modernizr._config.enableClasses && (n += \" \" + t + e.join(\" \" + t), p ? u.className.baseVal = n : u.className = n)\r\n    }\r\n\r\n    function a() {\r\n        return \"function\" != typeof n.createElement ? n.createElement(arguments[0]) : p ? n.createElementNS.call(n, \"http://www.w3.org/2000/svg\", arguments[0]) : n.createElement.apply(n, arguments)\r\n    }\r\n\r\n    function r() {\r\n        var e = n.body;\r\n        return e || (e = a(p ? \"svg\" : \"body\"), e.fake = !0), e\r\n    }\r\n\r\n    function l(e, t, o, s) {\r\n        var i, l, f, d, c = \"modernizr\",\r\n                p = a(\"div\"),\r\n                h = r();\r\n        if (parseInt(o, 10)) {\r\n            for (; o--;) {\r\n                f = a(\"div\"), f.id = s ? s[o] : c + (o + 1), p.appendChild(f);\r\n            }\r\n        }\r\n        return i = a(\"style\"), i.type = \"text/css\", i.id = \"s\" + c, (h.fake ? h : p).appendChild(i), h.appendChild(p), i.styleSheet ? i.styleSheet.cssText = e : i.appendChild(n.createTextNode(e)), p.id = c, h.fake && (h.style.background = \"\", h.style.overflow = \"hidden\", d = u.style.overflow, u.style.overflow = \"hidden\", u.appendChild(h)), l = t(p, e), h.fake ? (h.parentNode.removeChild(h), u.style.overflow = d, u.offsetHeight) : p.parentNode.removeChild(p), !!l\r\n    }\r\n\r\n    var f = [],\r\n            d = [],\r\n            c = {\r\n                _version: \"3.6.0\",\r\n                _config: {\r\n                    classPrefix: \"\",\r\n                    enableClasses: !0,\r\n                    enableJSClass: !0,\r\n                    usePrefixes: !0\r\n                },\r\n                _q: [],\r\n                on: function(e, n) {\r\n                    var t = this;\r\n                    setTimeout(function() {\r\n                        n(t[e])\r\n                    }, 0)\r\n                },\r\n                addTest: function(e, n, t) {\r\n                    d.push({\r\n                               name: e,\r\n                               fn: n,\r\n                               options: t\r\n                           })\r\n                },\r\n                addAsyncTest: function(e) {\r\n                    d.push({\r\n                               name: null,\r\n                               fn: e\r\n                           })\r\n                }\r\n            },\r\n            Modernizr = function() {\r\n            };\r\n    Modernizr.prototype = c, Modernizr = new Modernizr;\r\n    var u = n.documentElement,\r\n            p = \"svg\" === u.nodeName.toLowerCase(),\r\n            h = c.testStyles = l;\r\n    Modernizr.addTest(\"hiddenscroll\", function() {\r\n        return h(\"#modernizr {width:100px;height:100px;overflow:scroll}\", function(e) {\r\n            return e.offsetWidth === e.clientWidth\r\n        })\r\n    });\r\n    var m = c._config.usePrefixes ? \" -webkit- -moz- -o- -ms- \".split(\" \") : [\"\", \"\"];\r\n    c._prefixes = m, Modernizr.addTest(\"touchevents\", function() {\r\n        var t;\r\n        // Manuell angepasst (Basis vom Build Script auf modernizr.com)\r\n        // Chrome also changed its behaviour since v70 and recommends the TouchEvent object for detection: https://www.chromestatus.com/feature/4764225348042752\r\n        if (\"ontouchstart\" in e || window.TouchEvent || e.DocumentTouch && n instanceof DocumentTouch) {\r\n            t = !0;\r\n        } else {\r\n            var o = [\"@media (\", m.join(\"touch-enabled),(\"), \"heartz\", \")\", \"{#modernizr{top:9px;position:absolute}}\"].join(\"\");\r\n            h(o, function(e) {\r\n                t = 9 === e.offsetTop\r\n            })\r\n        }\r\n        return t\r\n    }), s(), i(f), delete c.addTest, delete c.addAsyncTest;\r\n    for (var v = 0; v < Modernizr._q.length; v++) {\r\n        Modernizr._q[v]();\r\n    }\r\n    e.Modernizr = Modernizr\r\n}(window, document);\r\n\r\n/**\r\n * Flag, ob es sich um einen Browser (z.B. Safari) handelt, der standardisierte W3C Touch-Events wie {@code touchstart}\r\n * unterstützt, die im Framework ausgewertet werden.\r\n *\r\n * @return\r\n */\r\nfunction isTouchBrowser() {\r\n    return window.Modernizr.touchevents;\r\n}\r\n\r\n/**\r\n * Information mit wie vielen Fingern man auf einem Touch Gerät tatschen kann. Auf Desktop ist der Wert 0 bzw. undefined.\r\n */\r\nfunction getMaxTouchPoints() {\r\n    if (typeof (navigator.maxTouchPoints) != \"undefined\") {\r\n        return navigator.maxTouchPoints;\r\n    } else if (typeof (navigator.msMaxTouchPoints) != \"undefined\") {\r\n        return navigator.msMaxTouchPoints;\r\n    }\r\n    return 0;\r\n}\r\n\r\n/**\r\n * Liefert zurück ob der Browser Canvas unterstützt\r\n * @return {Boolean}\r\n */\r\nfunction isWithCanvas() {\r\n    try {\r\n        var canvas = document.createElement(\"canvas\");\r\n        if (canvas && canvas.getContext) {\r\n            return true;\r\n        }\r\n    } catch (e) {\r\n    }\r\n    return false;\r\n}\r\n\r\nfunction isWithWebGL() {\r\n    var canvas = document.createElement(\"canvas\");\r\n    if (canvas && canvas.getContext) {\r\n        var contextNames = [\"webgl\", \"experimental-webgl\", \"webkit-3d\", \"moz-webgl\"];\r\n        for (var i = 0; i < contextNames.length; i++) {\r\n            try {\r\n                var gl = canvas.getContext(contextNames[i], {alpha: false});\r\n                if (gl) {\r\n                    return true;\r\n                }\r\n            } catch (e) {\r\n            }\r\n        }\r\n    }\r\n    return false;\r\n}\r\n\r\n/**\r\n * Liefert zurück ob der Browser Video unterstützt\r\n * @return {Boolean}\r\n */\r\nfunction isWithVideo() {\r\n    try {\r\n        var video = document.createElement(\"video\");\r\n        if (video && (video.controls != null)) {\r\n            return true;\r\n        }\r\n    } catch (e) {\r\n    }\r\n    return false;\r\n}\r\n\r\nfunction isScrollbarHidden() {\r\n    return window.Modernizr.hiddenscroll;\r\n}\r\n\r\n/**\r\n * Flag, ob es sich um einen Browser (z.B. IE11) handelt, der Pointer-Events wie {@code pointerdown} unterstützt,\r\n * die im Framework in standardisierte Touch-Events wie {@code touchstart} umgewandelt werden.\r\n *\r\n * @return\r\n */\r\nfunction isPointerBrowser() {\r\n    return isDefined(window.navigator.pointerEnabled) && window.navigator.pointerEnabled;\r\n}\r\n\r\n/**\r\n * Flag, ob es sich um einen Browser (z.B. IE10) handelt, der MSPointer-Events wie {@code MSPointerDown} unterstützt,\r\n * die im Framework in standardisierte Touch-Events wie {@code touchstart} umgewandelt werden.\r\n *\r\n * @return\r\n */\r\nfunction isMSPointerBrowser() {\r\n    return isDefined(window.navigator.msPointerEnabled) && window.navigator.msPointerEnabled;\r\n}\r\n\r\nfunction isWithNavigationTimingAPI() {\r\n    return (window.performance !== undefined);\r\n}\r\n\r\n/**\r\n * Flag, ob die Anwendung im Legacy Mode gestartet wurde\r\n *\r\n * Im Internet Explorer ist oftmals der Kompatibilitäts-Modus aktiv, der in Zusammenhang mit Integration in einer anderen Anwendung zu Darstellungsfehlern\r\n * führen kann, wenn die umliegende Anwendung (z.B. Shop) ebenfalls im Kompatibilitätsmodus oder einer anderen Domain betrieben wird\r\n * @returns {boolean}\r\n */\r\nfunction isIELegacyMode() {\r\n    var isInIECompatibleMode = ((navigator.userAgent.indexOf(\"compatible; MSIE \") > -1));\r\n    if (!isInIECompatibleMode) {\r\n        return false;\r\n    }\r\n\r\n    var version = parseInt(navigator.userAgent.substring(navigator.userAgent.indexOf(\"MSIE \") + \"MSIE \".length));\r\n    if (navigator.userAgent.indexOf(\"Trident/\") > -1) {\r\n        version = parseInt(navigator.userAgent.substring(navigator.userAgent.indexOf(\"Trident/\") + \"Trident/\".length)) + 4;\r\n    }\r\n    if (version == 8) {\r\n        return true;\r\n    }\r\n\r\n    var isIntegrated = window != window.parent;\r\n    if (!isIntegrated) {\r\n        return false;\r\n    }\r\n    var isCrossDomainIntegration = false;\r\n    var isParentInIECompatibleMode = false;\r\n    try {\r\n        isParentInIECompatibleMode = ((window.top.navigator.userAgent.indexOf(\"compatible; MSIE 7.0\") > -1) || (window.top.navigator.userAgent.indexOf(\"compatible; MSIE 8.0\") > -1));\r\n    } catch (exception) {\r\n        isCrossDomainIntegration = true;\r\n    }\r\n    return (isCrossDomainIntegration || isParentInIECompatibleMode);\r\n}\r\n\r\nfunction isDefined(value) {\r\n    return (typeof (value) != \"undefined\");\r\n}\r\n\r\n/**\r\n * Setzt einen Cookie im Browser.\r\n *\r\n * @param name\r\n * @param value\r\n * @param expires\r\n * @param domain\r\n * @param path\r\n * @param secure\r\n */\r\nfunction setCookie(name, value, expires, domain, path, secure) {\r\n    var cookie = name + \"=\" + value;\r\n    cookie += (expires) ? \"; expires=\" + expires : \"\";\r\n    cookie += (domain) ? \"; domain=\" + domain : \"\";\r\n    cookie += (path) ? \"; path=\" + path : \"\";\r\n    cookie += (secure) ? \"; secure\" : \"\";\r\n    document.cookie = cookie;\r\n}\r\n\r\n/**\r\n * Liest einen Cookie im Browser aus (es wird der erste Cookie mit passendem Namen gefunden falls es mehrere Cookies\r\n * mit gleichem Namen aber unterschiedlichen Pfadangaben gibt).\r\n *\r\n * @param name\r\n */\r\nfunction getCookie(name) {\r\n    var i = 0;  // Suchposition im Cookie\r\n    var searchCookieName = name + \"=\";\r\n    while (i < document.cookie.length) {\r\n        if (document.cookie.substring(i, i + searchCookieName.length) == searchCookieName) {\r\n            var end = document.cookie.indexOf(\";\", i + searchCookieName.length);\r\n            end = (end > -1) ? end : document.cookie.length;\r\n            var cookie = document.cookie.substring(i + searchCookieName.length, end);\r\n            return cookie;\r\n        }\r\n        i++;\r\n    }\r\n    return \"\";\r\n}\r\n\r\n/**\r\n * Liefert die übliche Breite einer Scrollbar\r\n *\r\n */\r\nfunction getScrollbarWidth() {\r\n    var body = document.getElementById(\"body\");\r\n\r\n    var outer = document.createElement(\"div\");\r\n    outer.style.visibility = \"hidden\";\r\n    outer.style.width = \"100px\";\r\n    body.appendChild(outer);\r\n\r\n    var withoutScroll = outer.offsetWidth;\r\n    outer.style.overflow = \"scroll\";\r\n\r\n    var inner = document.createElement(\"div\");\r\n    inner.style.width = \"100%\";\r\n    outer.appendChild(inner);\r\n\r\n    var withScroll = inner.offsetWidth;\r\n    body.removeChild(outer);\r\n    return withoutScroll - withScroll;\r\n}\r\n\r\nfunction getTimeZoneOffset() {\r\n    var d = new Date();\r\n    return d.getTimezoneOffset();\r\n}\r\n\r\nfunction getBrowserTabId() {\r\n    try {\r\n        if (typeof (sessionStorage) != \"undefined\") {\r\n            var browserTabId = new Date().getTime() + '_' + Math.random();\r\n            sessionStorage.browserTabId = browserTabId;\r\n            return browserTabId;\r\n        } else {\r\n            return \"-\";\r\n        }\r\n    } catch (exception) {\r\n        return \"-\";\r\n    }\r\n}\r\n\r\n/**\r\n * Erzeugt ein leeres, absolut positioniertes SPAN Element, dass den gesamten Viewport ausfüllt (100% Höhe/Breite).\r\n *\r\n * Overlay wird automatisch im Body eingehängt\r\n * @returns {Element}\r\n */\r\nfunction addEmptyOverlay() {\r\n    var body = document.getElementById(\"body\");\r\n    var fulldiv = document.createElement(\"span\");\r\n    fulldiv.id = \"dw_overlay\";\r\n    fulldiv.style.position = \"absolute\";\r\n    fulldiv.style.top = 0;\r\n    fulldiv.style.left = 0;\r\n    fulldiv.style.zIndex = 999;\r\n    fulldiv.style.width = \"100%\";\r\n    fulldiv.style.height = \"100%\";\r\n    body.appendChild(fulldiv);\r\n    return fulldiv;\r\n}\r\n\r\n/**\r\n * Erzeugt ein leeres SPAN Eleemnt. Hintergrund-und Schriftfarbe werden angelehnt an die Hintergrundfarbe des Overlays/Body Elements\r\n *\r\n * SPAN Element wird automatisch im Overlay eingehängt\r\n * @returns {Element} span\r\n */\r\nfunction addEmptySpan() {\r\n    var overlay = getEmptyOverlay();\r\n    var textspan = document.createElement(\"span\");\r\n    overlay.appendChild(textspan);\r\n    textspan.style.color = overlay.style.backgroundColor;\r\n    textspan.style.backgroundColor = overlay.style.backgroundColor;\r\n    textspan.style.border = \"0\";\r\n    return textspan;\r\n}\r\n\r\n/**\r\n * Liefert das Overlay SPAN Element zurück\r\n * Existiert dies noch nicht, wird es automatisch erzeugt und in den BODY eingehängt\r\n * @returns {Element}\r\n */\r\nfunction getEmptyOverlay() {\r\n    return document.getElementById(\"dw_overlay\") || addEmptyOverlay();\r\n}\r\n\r\n/**\r\n * Erzeugt den Request-Parameter Wert für eine \"Text-Referenz\"\r\n * pipe separierter String aus <text>=<height>x<width>\r\n * @param referenceTexts\r\n * @param font\r\n * @param fontSize\r\n * @param fontSetting\r\n * @returns {string}\r\n */\r\nfunction getTextReferences(referenceTexts, font, fontSize, fontSetting) {\r\n    var textspan = addEmptySpan();\r\n    var referenceValue = \"\";\r\n    for (var i = 0; i < referenceTexts.length; i++) {\r\n        var referenceText = referenceTexts[i];\r\n        var referenceSize = getSize(referenceText, font, fontSize, fontSetting, textspan);\r\n        if (referenceValue) {\r\n            referenceValue += \"|\";\r\n        }\r\n        referenceValue += (referenceText + \"=\" + referenceSize);\r\n    }\r\n    getEmptyOverlay().removeChild(textspan);\r\n    return referenceValue;\r\n}\r\n\r\n/**\r\n * Simple Redirector Klasse\r\n *\r\n * Der Redirector wertet die aktuelle URL (window.location) aus. Weitere Parameter können via addParameter hinzugefügt werden (ohne URL Encoding!)\r\n *\r\n * Die Weiterleitung (und damit Weitergabe der ermittelten Parameterwerte) erfolgt entweder\r\n * - via submitByUrl (bisherige Methode, window.location.replace) oder\r\n * - via submitByForm (neue Methode, bei der die HTTP Method angegeben werden kann. Vorzugsweise POST)\r\n * @constructor\r\n */\r\nfunction DwRedirector() {\r\n    var _self = this;\r\n    var submitRequestTime;\r\n    var isGetParameterDecodedByServer;\r\n    var hash = unescape(document.location.hash);\r\n    var url = window.location.href;\r\n    if (url.indexOf(\"#\") > -1) {\r\n        // Ist der aufgerufenen URL ein '#' Zeichen abgehängt muss dieses vorher entfernt werden.\r\n        // Andernfalls werden die URL Parameter ggf. als Fragment an die URL angehängt und stehen dem Server nicht zur Verfügung\r\n        url = url.substring(0, url.indexOf(\"#\"));\r\n    }\r\n    var baseUrl = url;\r\n    if (baseUrl.indexOf(\"?\") > -1) {\r\n        baseUrl = baseUrl.substring(0, baseUrl.indexOf(\"?\"));\r\n    }\r\n\r\n    var parameters = [];\r\n    this.addParameter = function(key, value) {\r\n        parameters.push(new DwParameter(key, value));\r\n    };\r\n    this.checkGetParameterDecodingByServer = function() {\r\n        var queryEncodingUri = baseUrl.substring(0, baseUrl.length - \"/app\".length) + \"/WEB-RES/dummy/encoding\";\r\n        var body = document.getElementById(\"body\");\r\n        var iframe = document.createElement(\"iframe\");\r\n        iframe.style.visibility = \"hidden\";\r\n        iframe.style.width = 0;\r\n        iframe.style.height = 0;\r\n        iframe.style.border = 0;\r\n        iframe.border = 0;\r\n        body.appendChild(iframe);\r\n        var iframeLoadedHandler = function() {\r\n            var doc = null;\r\n            if (iframe.contentDocument) {\r\n                doc = iframe.contentDocument;\r\n            } else if (iframe.contentWindow && iframe.contentWindow.document) {\r\n                doc = iframe.contentWindow.document;\r\n            } else {\r\n                doc = iframe.document;\r\n            }\r\n            if (doc) {\r\n                if (doc.body && doc.body.innerHTML) {\r\n                    var content = doc.body.innerHTML;\r\n                    var charBegin = content.indexOf(\"char=\") + \"char=\".length;\r\n                    var result = content.substring(charBegin, content.length - \"</pre>\".length);\r\n                    var charToTest = \"\\xF6\";\r\n                    var charToTestEncoded = String.fromCharCode(parseInt(\"F6\", 16));\r\n                    isGetParameterDecodedByServer = (result == charToTest) || (result == charToTestEncoded);\r\n                    body.removeChild(iframe);\r\n                }\r\n            }\r\n        };\r\n        if (iframe.addEventListener) {\r\n            iframe.addEventListener(\"load\", iframeLoadedHandler, true);\r\n        } else if (iframe.attachEvent) {\r\n            iframe.attachEvent(\"onload\", iframeLoadedHandler);\r\n        }\r\n        iframe.src = queryEncodingUri + \"?char=\" + encodeURIComponent(\"\\xF6\");\r\n    }();\r\n\r\n    this.addParameter(\"location\", baseUrl);\r\n\r\n    this.submitByForm = function(method) {\r\n        if (_self.__isSubmitQueued(function() {\r\n            _self.submitByForm(method);\r\n        })) {\r\n            return;\r\n        }\r\n\r\n        this.addParameter(\"decoded\", isGetParameterDecodedByServer);\r\n\r\n        var form = document.createElement(\"form\");\r\n        form.setAttribute(\"style\", \"visibility:hidden; display:inline\");\r\n        form.setAttribute(\"action\", baseUrl + hash);\r\n        form.setAttribute(\"method\", method);\r\n        form.setAttribute(\"target\", \"_self\");\r\n        form.setAttribute(\"enctype\", \"application/x-www-form-urlencoded\");\r\n\r\n        if (url.indexOf(\"?\") > -1) {\r\n            // URL Parameter die beim Aufruf mitgegeben wurden ebenfalls parsen und zu Form Parametern umwandeln ...\r\n            // Angelehnt an Methode utils.js:dwUtilsParseUrlToForm(...)\r\n            var queryString = url.substring(url.indexOf(\"?\") + 1);\r\n            var urlParameterList = queryString.split(\"&\");\r\n            for (var paramIdx = 0; paramIdx < urlParameterList.length; paramIdx++) {\r\n                var urlParameter = urlParameterList[paramIdx];\r\n                var urlParameterKeyValue = urlParameter.split(\"=\");\r\n                var key = decodeURIComponent(urlParameterKeyValue[0]);\r\n                var value = (urlParameterKeyValue.length == 2) ? urlParameterKeyValue[1] : \"\";\r\n                value = value.replace(/\\+/g, \" \");\r\n                value = decodeURIComponent(value);\r\n                this.addParameter(key, value);\r\n            }\r\n        }\r\n\r\n        for (var i = 0; i < parameters.length; i++) {\r\n            var parameter = parameters[i];\r\n            parameter.appendToForm(form);\r\n        }\r\n\r\n        var body = document.getElementById(\"body\");\r\n        body.appendChild(form);\r\n\r\n        setTimeout(function() {\r\n            form.submit();\r\n            try {\r\n                body.removeChild(form);\r\n            } catch (exception) {\r\n            }\r\n        }, 0);\r\n\r\n    };\r\n\r\n    this.submitByUrl = function() {\r\n        if (_self.__isSubmitQueued(function() {\r\n            _self.submitByUrl();\r\n        })) {\r\n            return;\r\n        }\r\n\r\n        this.addParameter(\"decoded\", isGetParameterDecodedByServer);\r\n\r\n        for (var i = 0; i < parameters.length; i++) {\r\n            var parameter = parameters[i];\r\n            url = parameter.appendToUrl(url);\r\n        }\r\n        url += hash; // <= Das ist der Bookmark\r\n        setTimeout(function() {\r\n            window.location.replace(url);\r\n        }, 0);\r\n    };\r\n\r\n    /**\r\n     * Queued die Submit Funktion (sprich Aufruf des Callbacks) bis die GET Abfrage zur Ermittlung des Decodings abgearbeitet wurde.\r\n     *\r\n     * Die Methode queued den Submit Request maximal 5 Sekunden ...\r\n     * @param callbackFunc\r\n     * @returns {boolean}\r\n     * @private\r\n     */\r\n    this.__isSubmitQueued = function(callbackFunc) {\r\n        if (!submitRequestTime) {\r\n            submitRequestTime = new Date().getTime();\r\n        }\r\n        if (isDefined(isGetParameterDecodedByServer)) {\r\n            return false;\r\n        }\r\n        if ((new Date().getTime() - submitRequestTime) > 5000) {\r\n            return false;\r\n        }\r\n        setTimeout(function() {\r\n            callbackFunc();\r\n        }, 50);\r\n        return true;\r\n    }\r\n}\r\n\r\n/**\r\n * Simpler Wrapper für Parameter Key/Value (nicht URL encodiert)\r\n *\r\n * Parameter werden automatisch bei Aufruf von submitByUrl bzw. submitByForm angehängt\r\n * @param key\r\n * @param value\r\n * @constructor\r\n */\r\nfunction DwParameter(key, value) {\r\n    this.appendToUrl = function(url) {\r\n        var appendSign = (url.indexOf(\"?\") > -1) ? \"&\" : \"?\";\r\n        return url + appendSign + encodeURIComponent(key) + \"=\" + encodeURIComponent(value);\r\n    };\r\n    this.appendToForm = function(form) {\r\n        var input = document.createElement(\"input\");\r\n        input.setAttribute(\"type\", \"hidden\");\r\n        input.setAttribute(\"name\", key);\r\n        if (typeof (value) != \"undefined\") {\r\n            input.setAttribute(\"value\", value);\r\n        }\r\n        form.appendChild(input);\r\n        form.appendChild(document.createElement(\"br\"));\r\n    };\r\n}\r\n\r\nfunction DwFontStyle(fontStyle, fontWeight, swingStyle) {\r\n    this.fontStyle = fontStyle;\r\n    this.fontWeight = fontWeight;\r\n    this.swingStyle = swingStyle;\r\n}\n</script><style type=\"text/css\">@font-face {\n  font-family:'Open Sans';\n  src:\n    url('WEB-RES/custom/designs/Festool/fonts/OpenSans-Regular.eot');\n  src:\n    url('WEB-RES/custom/designs/Festool/fonts/OpenSans-Regular.eot?#iefix') format('embedded-opentype'),\n    url('WEB-RES/custom/designs/Festool/fonts/OpenSans-Regular.ttf') format('truetype');\n  font-style:normal;\n  font-weight:normal;\n}\n@font-face {\n  font-family:'Open Sans';\n  src:\n    url('WEB-RES/custom/designs/Festool/fonts/OpenSans-Bold.eot');\n  src:\n    url('WEB-RES/custom/designs/Festool/fonts/OpenSans-Bold.eot?#iefix') format('embedded-opentype'),\n    url('WEB-RES/custom/designs/Festool/fonts/OpenSans-Bold.ttf') format('truetype');\n  font-style:normal;\n  font-weight:bold;\n}\n@font-face {\n  font-family:'Open Sans';\n  src:\n    url('WEB-RES/custom/designs/Festool/fonts/OpenSans-Italic.eot');\n  src:\n    url('WEB-RES/custom/designs/Festool/fonts/OpenSans-Italic.eot?#iefix') format('embedded-opentype'),\n    url('WEB-RES/custom/designs/Festool/fonts/OpenSans-Italic.ttf') format('truetype');\n  font-style:italic;\n  font-weight:normal;\n}\n@font-face {\n  font-family:'Open Sans';\n  src:\n    url('WEB-RES/custom/designs/Festool/fonts/OpenSans-BoldItalic.eot');\n  src:\n    url('WEB-RES/custom/designs/Festool/fonts/OpenSans-BoldItalic.eot?#iefix') format('embedded-opentype'),\n    url('WEB-RES/custom/designs/Festool/fonts/OpenSans-BoldItalic.ttf') format('truetype');\n  font-style:italic;\n  font-weight:bold;\n}\n@font-face {\n  font-family:'Open Sans';\n  src:\n    url('WEB-RES/custom/designs/Festool/fonts/OpenSans-Semibold.eot');\n  src:\n    url('WEB-RES/custom/designs/Festool/fonts/OpenSans-Semibold.eot?#iefix') format('embedded-opentype'),\n    url('WEB-RES/custom/designs/Festool/fonts/OpenSans-SemiBold.ttf') format('truetype');\n  font-style:normal;\n  font-weight:600;\n}\n@font-face {\n  font-family:'Open Sans';\n  src:\n    url('WEB-RES/custom/designs/Festool/fonts/OpenSans-SemiboldItalic.eot');\n  src:\n    url('WEB-RES/custom/designs/Festool/fonts/OpenSans-SemiboldItalic.eot?#iefix') format('embedded-opentype'),\n    url('WEB-RES/custom/designs/Festool/fonts/OpenSans-SemiboldItalic.ttf') format('truetype');\n  font-style:italic;\n  font-weight:600;\n}\n</style></head><body id=\"body\" onload=\"redirectWithBrowserInfo('WIH1785791371997', true)\" style='height:100%;width:100%;overflow:hidden;font-size:11px;font-family:\"Open Sans\",\"Segoe UI\",Verdana,Tahoma,Arial,Sans-Serif;background-color:#e5e5e5'><noscript><table style='width:100%;height:100%'><tbody><tr><td align=\"center\" valign=\"middle\"><div style=\"font-weight:bold\">Javascript is required to run</div><div>This site requires JavaScript to run. This web browser either does not support JavaScript, or scripts are disabled.<br>To find out whether your browser supports JavaScript, or to allow scripts, see the browser's online help.</div></td></tr></tbody></table></noscript></body></html>"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": -1,
          "_transferSize": 10437,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:10.114Z",
        "time": 122.22199991811067,
        "timings": {
          "blocked": 5.395999962091446,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0.3949999999999996,
          "wait": 115.43999997705221,
          "receive": 0.990999978967011,
          "_blocked_queueing": 1.370999962091446,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_connectionId": "1726423",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "script",
          "stack": {
            "callFrames": [
              {
                "functionName": "dwAjaxToServer",
                "scriptId": "74",
                "url": "https://ekat.festool.de/login/WEB-RES/js/base.js_shop_7.26.1.5.js",
                "lineNumber": 16016,
                "columnNumber": 12
              },
              {
                "functionName": "dwAjaxSendUpdates",
                "scriptId": "74",
                "url": "https://ekat.festool.de/login/WEB-RES/js/base.js_shop_7.26.1.5.js",
                "lineNumber": 15812,
                "columnNumber": 8
              },
              {
                "functionName": "dwAjaxDwrFinished",
                "scriptId": "74",
                "url": "https://ekat.festool.de/login/WEB-RES/js/base.js_shop_7.26.1.5.js",
                "lineNumber": 16040,
                "columnNumber": 4
              },
              {
                "functionName": "xmlHttp.onreadystatechange",
                "scriptId": "74",
                "url": "https://ekat.festool.de/login/WEB-RES/js/base.js_shop_7.26.1.5.js",
                "lineNumber": 16002,
                "columnNumber": 16
              }
            ],
            "parent": {
              "description": "XMLHttpRequest.send",
              "callFrames": [
                {
                  "functionName": "dwAjaxToServer",
                  "scriptId": "74",
                  "url": "https://ekat.festool.de/login/WEB-RES/js/base.js_shop_7.26.1.5.js",
                  "lineNumber": 16016,
                  "columnNumber": 12
                },
                {
                  "functionName": "dwAjaxSendUpdates",
                  "scriptId": "74",
                  "url": "https://ekat.festool.de/login/WEB-RES/js/base.js_shop_7.26.1.5.js",
                  "lineNumber": 15812,
                  "columnNumber": 8
                },
                {
                  "functionName": "dwAjaxAddUpdate",
                  "scriptId": "74",
                  "url": "https://ekat.festool.de/login/WEB-RES/js/base.js_shop_7.26.1.5.js",
                  "lineNumber": 15751,
                  "columnNumber": 8
                },
                {
                  "functionName": "dwAjaxDefaultOnResize",
                  "scriptId": "74",
                  "url": "https://ekat.festool.de/login/WEB-RES/js/base.js_shop_7.26.1.5.js",
                  "lineNumber": 17548,
                  "columnNumber": 4
                },
                {
                  "functionName": "DwResizeRegistry.notifyControls",
                  "scriptId": "74",
                  "url": "https://ekat.festool.de/login/WEB-RES/js/base.js_shop_7.26.1.5.js",
                  "lineNumber": 13847,
                  "columnNumber": 12
                },
                {
                  "functionName": "DwResizeRegistry.updateSizes",
                  "scriptId": "74",
                  "url": "https://ekat.festool.de/login/WEB-RES/js/base.js_shop_7.26.1.5.js",
                  "lineNumber": 13789,
                  "columnNumber": 13
                },
                {
                  "functionName": "dwFrameworkInitFrameworkFinished",
                  "scriptId": "74",
                  "url": "https://ekat.festool.de/login/WEB-RES/js/base.js_shop_7.26.1.5.js",
                  "lineNumber": 7290,
                  "columnNumber": 34
                },
                {
                  "functionName": "init",
                  "scriptId": "79",
                  "url": "https://ekat.festool.de/login/app?__bk_&__windowid=IRW3104379&__rid=FOE1787216989423",
                  "lineNumber": 12,
                  "columnNumber": 2432
                },
                {
                  "functionName": "onload",
                  "scriptId": "95",
                  "url": "https://ekat.festool.de/login/app?__bk_&__windowid=IRW3104379&__rid=FOE1787216989423#2VFB2144C915D47DFAD66CC73CEC1F7E17E1D29351DB45EA618EEFB7B1BB136D42B8044FCE28E6056D",
                  "lineNumber": 12,
                  "columnNumber": 3859
                }
              ]
            }
          }
        },
        "_priority": "High",
        "_resourceType": "xhr",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "POST",
          "url": "https://ekat.festool.de/login/ajax",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": ":authority",
              "value": "ekat.festool.de"
            },
            {
              "name": ":method",
              "value": "POST"
            },
            {
              "name": ":path",
              "value": "/login/ajax"
            },
            {
              "name": ":scheme",
              "value": "https"
            },
            {
              "name": "accept",
              "value": "*/*"
            },
            {
              "name": "accept-encoding",
              "value": "gzip, deflate, br, zstd"
            },
            {
              "name": "accept-language",
              "value": "en-GB,en-US;q=0.9,en;q=0.8"
            },
            {
              "name": "cache-control",
              "value": "no-cache,no-store,must-revalidate,post-check=0,pre-check=0"
            },
            {
              "name": "content-length",
              "value": "296"
            },
            {
              "name": "content-type",
              "value": "text/plain; charset=UTF-8"
            },
            {
              "name": "expires",
              "value": "0"
            },
            {
              "name": "origin",
              "value": "https://ekat.festool.de"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "pragma",
              "value": "no-cache"
            },
            {
              "name": "priority",
              "value": "u=1, i"
            },
            {
              "name": "referer",
              "value": "https://ekat.festool.de/login/app?__bk_&__windowid=IRW3104379&__rid=FOE1787216989423"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            },
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "sec-fetch-dest",
              "value": "empty"
            },
            {
              "name": "sec-fetch-mode",
              "value": "cors"
            },
            {
              "name": "sec-fetch-site",
              "value": "same-origin"
            },
            {
              "name": "user-agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            }
          ],
          "queryString": [],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 296,
          "postData": {
            "mimeType": "text/plain; charset=UTF-8",
            "text": "currentBrowserRootWindow@DW@IRW3104379@DW@1388@DW@1209@DX@IRW3104379@DW@IRW3104379@DW@onresizeEvent@DW@newWidth=1388@DWSUB@newHeight=1209@DWSUB@relX=0@DWSUB@relY=0@DWSUB@absX=0@DWSUB@absY=0@DWSUB@newWidth=1388@DWSUB@newHeight=1209@DWSUB@hasVerticalOverflow=false@DWSUB@hasHorizontalOverflow=false"
          }
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://ekat.festool.de"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "cache-control",
              "value": "no-cache,no-store,must-revalidate,post-check=0,pre-check=0"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "content-length",
              "value": "44"
            },
            {
              "name": "content-type",
              "value": "text/html;charset=UTF-8"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 09:09:49 GMT"
            },
            {
              "name": "expires",
              "value": "Thu, 01 Jan 1970 00:00:00 GMT"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "pragma",
              "value": "no-cache"
            },
            {
              "name": "vary",
              "value": "Origin"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "x-robots-tag",
              "value": "noindex"
            }
          ],
          "cookies": [],
          "content": {
            "size": 24,
            "mimeType": "text/html",
            "text": "setChildThreadCount@DW@0"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": -1,
          "_transferSize": 114,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:10.190Z",
        "time": 79.2529999744147,
        "timings": {
          "blocked": 1.9159999410510062,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0.42000000000000015,
          "wait": 76.4199999742508,
          "receive": 0.49700005911290646,
          "_blocked_queueing": 0.8789999410510063,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_connectionId": "1726423",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "script",
          "stack": {
            "callFrames": [
              {
                "functionName": "",
                "scriptId": "100",
                "url": "https://ekat.festool.de/ekat/app",
                "lineNumber": 723,
                "columnNumber": 19
              },
              {
                "functionName": "DwRedirector",
                "scriptId": "100",
                "url": "https://ekat.festool.de/ekat/app",
                "lineNumber": 724,
                "columnNumber": 5
              },
              {
                "functionName": "redirectWithBrowserInfo",
                "scriptId": "100",
                "url": "https://ekat.festool.de/ekat/app",
                "lineNumber": 47,
                "columnNumber": 21
              },
              {
                "functionName": "onload",
                "scriptId": "103",
                "url": "https://ekat.festool.de/ekat/app",
                "lineNumber": 912,
                "columnNumber": 244
              }
            ]
          }
        },
        "_priority": "VeryHigh",
        "_resourceType": "document",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/ekat/WEB-RES/dummy/encoding?char=%C3%B6",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": ":authority",
              "value": "ekat.festool.de"
            },
            {
              "name": ":method",
              "value": "GET"
            },
            {
              "name": ":path",
              "value": "/ekat/WEB-RES/dummy/encoding?char=%C3%B6"
            },
            {
              "name": ":scheme",
              "value": "https"
            },
            {
              "name": "accept",
              "value": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7"
            },
            {
              "name": "accept-encoding",
              "value": "gzip, deflate, br, zstd"
            },
            {
              "name": "accept-language",
              "value": "en-GB,en-US;q=0.9,en;q=0.8"
            },
            {
              "name": "priority",
              "value": "u=0, i"
            },
            {
              "name": "referer",
              "value": "https://ekat.festool.de/ekat/app"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            },
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "sec-fetch-dest",
              "value": "iframe"
            },
            {
              "name": "sec-fetch-mode",
              "value": "navigate"
            },
            {
              "name": "sec-fetch-site",
              "value": "same-origin"
            },
            {
              "name": "upgrade-insecure-requests",
              "value": "1"
            },
            {
              "name": "user-agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            }
          ],
          "queryString": [
            {
              "name": "char",
              "value": "%C3%B6"
            }
          ],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "content-length",
              "value": "7"
            },
            {
              "name": "content-type",
              "value": "text/plain"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 09:09:49 GMT"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "x-robots-tag",
              "value": "noindex"
            }
          ],
          "cookies": [],
          "content": {
            "size": 7,
            "mimeType": "text/plain",
            "text": "char=ö"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": -1,
          "_transferSize": 77,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:10.304Z",
        "time": 45.86499999277294,
        "timings": {
          "blocked": 1.4779999759048223,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0.276,
          "wait": 43.51099998836964,
          "receive": 0.6000000284984708,
          "_blocked_queueing": 0.8529999759048223,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_connectionId": "1726423",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "other"
        },
        "_priority": "VeryHigh",
        "_resourceType": "font",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/ekat/WEB-RES/custom/designs/Festool/fonts/OpenSans-Regular.ttf",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": ":authority",
              "value": "ekat.festool.de"
            },
            {
              "name": ":method",
              "value": "GET"
            },
            {
              "name": ":path",
              "value": "/ekat/WEB-RES/custom/designs/Festool/fonts/OpenSans-Regular.ttf"
            },
            {
              "name": ":scheme",
              "value": "https"
            },
            {
              "name": "accept",
              "value": "*/*"
            },
            {
              "name": "accept-encoding",
              "value": "gzip, deflate, br, zstd"
            },
            {
              "name": "accept-language",
              "value": "en-GB,en-US;q=0.9,en;q=0.8"
            },
            {
              "name": "if-modified-since",
              "value": "Thu, 20 Aug 2026 07:47:11 GMT"
            },
            {
              "name": "if-none-match",
              "value": "W/\"217276-1787216819141\""
            },
            {
              "name": "origin",
              "value": "https://ekat.festool.de"
            },
            {
              "name": "priority",
              "value": "u=0"
            },
            {
              "name": "referer",
              "value": "https://ekat.festool.de/ekat/app"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            },
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "sec-fetch-dest",
              "value": "font"
            },
            {
              "name": "sec-fetch-mode",
              "value": "cors"
            },
            {
              "name": "sec-fetch-site",
              "value": "same-origin"
            },
            {
              "name": "user-agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            }
          ],
          "queryString": [],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://ekat.festool.de"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "cache-control",
              "value": "public"
            },
            {
              "name": "content-length",
              "value": "217276"
            },
            {
              "name": "content-type",
              "value": "font/ttf"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 09:09:50 GMT"
            },
            {
              "name": "etag",
              "value": "W/\"217276-1787216990903\""
            },
            {
              "name": "expires",
              "value": "Thu, 20 Aug 2026 09:11:50 GMT"
            },
            {
              "name": "last-modified",
              "value": "Thu, 20 Aug 2026 07:47:11 GMT"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "pragma",
              "value": "cache"
            },
            {
              "name": "vary",
              "value": "Origin"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "x-robots-tag",
              "value": "noindex"
            }
          ],
          "cookies": [],
          "content": {
            "size": 217276,
            "mimeType": "font/ttf",
            "text": "AAEAAAATAQAABAAwRFNJR54SRB0AAztIAAAVdEdERUYAJgOvAAM3KAAAAB5HUE9TCzcPNwADN0gAAAA4R1NVQg4rPbcAAzeAAAADxk9TLzKhNp7JAAABuAAAAGBjbWFwrrv1+wAAELQAAAOIY3Z0IA9NGKQAABz8AAAAomZwZ21+YbYRAAAUPAAAB7RnYXNwABUAIwADNxgAAAAQZ2x5ZnQ4mUsAACT4AAEvtGhlYWQCumNwAAABPAAAADZoaGVhDcwJcwAAAXQAAAAkaG10eOg1PN0AAAIYAAAOmmtlcm5UKwl+AAFUrAABtjZsb2NhKRTc8QAAHaAAAAdWbWF4cAVDAgoAAAGYAAAAIG5hbWVIjELvAAMK5AAABgZwb3N0AkPvbAADEOwAACYrcHJlcEO3lqQAABvwAAABCQABAAAAARnbV3f4KF8PPPUACQgAAAAAAMk1MYsAAAAA1SvM1fua/dUJoghiAAAACQACAAAAAAAAAAEAAAiN/agAAAms+5r+ewmiAAEAAAAAAAAAAAAAAAAAAAOjAAEAAAOqAIoAFgBWAAUAAgAQAC8AXAAAAQ4A+AADAAEAAwS2AZAABQAABZoFMwAAAR8FmgUzAAAD0QBmAfEIAgILBgYDBQQCAgTgAALvQAAgWwAAACgAAAAAMUFTQwBAACD//QYf/hQAhAiNAlggAAGfAAAAAARIBbYAAAAgAAMEzQDBAAAAAAQUAAACFAAAAiMAmAM1AIUFKwAzBJMAgwaWAGgF1wBxAcUAhQJeAFICXgA9BGoAVgSTAGgB9gA/ApMAVAIhAJgC8AAUBJMAZgSTALwEkwBkBJMAXgSTACsEkwCFBJMAdQSTAF4EkwBoBJMAagIhAJgCIQA/BJMAaASTAHcEkwBoA28AGwcxAHkFEAAABS8AyQUMAH0F1QDJBHMAyQQhAMkF0wB9BecAyQKqAFQCI/9gBOkAyQQnAMkHOQDJBggAyQY7AH0E0QDJBjsAfQTyAMkEZABqBG0AEgXTALoEwwAAB2gAGwSeAAgEewAABJEAUgKiAKYC8AAXAqIAMwRWADEDlv/8BJ4BiQRzAF4E5wCwA88AcwTnAHMEfQBzArYAHQRiACcE6QCwAgYAogIG/5EEMwCwAgYAsAdxALAE6QCwBNUAcwTnALAE5wBzA0QAsAPRAGoC0wAfBOkApAQCAAAGOQAXBDEAJwQIAAIDvgBSAwgAPQRoAe4DCABIBJMAaAIUAAACIwCYBJMAvgSTAD8EkwB7BJMAHwRoAe4EIQB7BJ4BNQaoAGQC1QBGA/oAUgSTAGgCkwBUBqgAZAQA//oDbQB/BJMAaALHADECxwAhBJ4BiQT0ALAFPQBxAiEAmAHRACUCxwBMAwAAQgP6AFAGPQBLBj0ALgY9ABoDbwAzBRAAAAUQAAAFEAAABRAAAAUQAAAFEAAABvz//gUMAH0EcwDJBHMAyQRzAMkEcwDJAqoAPAKqAFQCqv//AqoAPAXHAC8GCADJBjsAfQY7AH0GOwB9BjsAfQY7AH0EkwCFBjsAfQXTALoF0wC6BdMAugXTALoEewAABOMAyQT6ALAEcwBeBHMAXgRzAF4EcwBeBHMAXgRzAF4G3QBeA88AcwR9AHMEfQBzBH0AcwR9AHMCBv/aAgYAqQIG/7MCBv/sBMUAcQTpALAE1QBzBNUAcwTVAHME1QBzBNUAcwSTAGgE1QBzBOkApATpAKQE6QCkBOkApAQIAAIE5wCwBAgAAgUQAAAEcwBeBRAAAARzAF4FEAAABHMAXgUMAH0DzwBzBQwAfQPPAHMFDAB9A88AcwUMAH0DzwBzBdUAyQTnAHMFxwAvBOcAcwRzAMkEfQBzBHMAyQR9AHMEcwDJBH0AcwRzAMkEfQBzBHMAyQR9AHMF0wB9BGIAJwXTAH0EYgAnBdMAfQRiACcF0wB9BGIAJwXnAMkE6QCwBecAAATpABQCqv/iAgb/kAKqACoCBv/aAqoAHgIG/8wCqgBUAgYANQKqAFQCBgCwBM0AVAQMAKICI/9gAgb/kQTpAMkEMwCwBCUAsAQnAMkCBgCjBCcAyQIGAFkEJwDJAgYAsAQnAMkCgwCwBC8AHQIX//wGCADJBOkAsAYIAMkE6QCwBggAyQTpALAFcwABBggAyQTpALAGOwB9BNUAcwY7AH0E1QBzBjsAfQTVAHMHYgB9B4kAcQTyAMkDRACwBPIAyQNEAGAE8gDJA0QAggRkAGoD0QBqBGQAagPRAGoEZABqA9EAagRkAGoD0QBqBG0AEgLTAB8EbQASAtMAHwRtABIC0wAfBdMAugTpAKQF0wC6BOkApAXTALoE6QCkBdMAugTpAKQF0wC6BOkApAXTALoE6QCkB2gAGwY5ABcEewAABAgAAgR7AAAEkQBS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THdMhZj5q2YChjXW1KRk/X0z2wD//wCk/+wEOQYhAiYAWAAAAQYAQ8QAAAizARYRJgArNf//AKT/7AQ5BiECJgBYAAABBgB2cQAACLMBHhEmACs1//8ApP/sBDkGIQImAFgAAAEGAUsSAAAIswEjESYAKzX//wCk/+wEOQXTAiYAWAAAAQYAaiEAAAq0AgEqESYAKzU1//8AAv4UBAYGIQImAFwAAAEGAHYSAAAIswEfESYAKzUAAgCw/hQEdQYUABYAIgA+QB8gBhsUEBARBhEkIxIAERsMFgkDCR5GWQkWAxdGWQMQAD8rABg/KxESADk5GD8/ERIBOTkRMxEzMxEzMTABNjYzMhIREAIjIicjFxYVESMRMxEUByUiBgcVFBYzIBE0JgFYQqpq1/Dx1t56DAQIpqYGAUiomAKaqgEvlAO0WU/+1P71/vT+06EiTT/+NQgA/i40Whu4ySnnxwGw19H//wAC/hQEBgXTAiYAXAAAAQYAarUAAAq0AgErESYAKzU1//8AAAAABRAGtAImACQAAAEHAU0APwFSAAizAhIFJgArNf//AF7/7APNBWICJgBEAAABBgFN9QAACLMCKBEmACs1//8AAAAABRAHNwImACQAAAEHAU4AKwFSAAizAg8FJgArNf//AF7/7APNBeUCJgBEAAABBgFO5AAACLMCJREmACs1//8AAP5CBREFvAImACQAAAAHAVEDoAAA//8AXv5CBAAEWgImAEQAAAAHAVECjwAA//8Aff/sBM8HcwImACYAAAEHAHYBCAFSAAizASAFJgArNf//AHP/7AOLBiECJgBGAAABBgB2RAAACLMBIBEmACs1//8Aff/sBM8HcwImACYAAAEHAUsArAFSAAizASUFJgArNf//AHP/7AOLBiECJgBGAAABBgFL1AAACLMBJREmACs1//8Aff/sBM8HMQImACYAAAEHAU8CGwFSAAizASAFJgArNf//AHP/7AOLBd8CJgBGAAABBwFPAVAAAAAIswEgESYAKzX//wB9/+wEzwdzAiYAJgAAAQcBTADBAVIACLMBIgUmACs1//8Ac//sA6EGIQImAEYAAAEGAUzzAAAIswEiESYAKzX//wDJAAAFWAdzAiYAJwAAAQcBTABYAVIACLMCHQUmACs1//8Ac//sBYEGFAImAEcAAAEHAjgDDAAAAAeyAiMA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/8MABQBS/4UABQBT/8MABQBU/4UABQBV/8MABQBW/8MABQBY/8MABQCC/3EABQCD/3EABQCE/3EABQCF/3EABQCG/3EABQCH/3EABQCfABQABQCi/4UABQCj/64ABQCk/64ABQCl/64ABQCm/64ABQCn/64ABQCo/64ABQCp/4UABQCq/4UABQCr/4UABQCs/4UABQCt/4UABQC0/4UABQC1/4UABQC2/4UABQC3/4UABQC4/4UABQC6/4UABQC7/8MABQC8/8MABQC9/8MABQC+/8MABQDC/3EABQDD/64ABQDE/3EABQDF/64ABQDG/3EABQDH/64ABQDJ/4UABQDL/4UABQDN/4UABQDP/4UABQDR/4UABQDT/4UABQDV/4UABQDX/4UABQDZ/4UABQDb/4UABQDd/4UABQDf/8MABQDh/8MABQDj/8MABQDl/8MABQD6/8MABQEG/8MABQEI/8MABQEN/8MABQEP/4UABQER/4UABQET/4UABQEV/4UABQEX/8MABQEZ/8MABQEd/8MABQEh/8MABQEkACkABQEmACkABQEr/8MABQEt/8MABQEv/8MABQEx/8MABQEz/8MABQE1/8MABQE2ACkABQE4ABQABQE6ABQABQFD/3EABQFE/64ABQFG/64ABQFI/4UABQFK/8MABQFW/3EABQFf/3EABQFi/3EABQFp/3EABQF5/64ABQF6/9cABQF7/9cABQF+/64ABQGB/8MABQGC/9cABQGD/9cABQGE/9cABQGH/9cABQGJ/9cABQGM/64ABQGO/8MABQGP/64ABQGQ/64ABQGT/64ABQGZ/64ABQGk/4UABQGq/3EABQGu/4UABQG1/4UABQHK/9cABQHO/3EABQHP/4UABQHV/3EABQHY/4UABQHb/4UABQHe/4UABQHq/4UABQHt/4UABQHu/8MABQHy/3EABQH6ACkABQH8ACkABQH+ACkABQIAABQABQJX/8MABQJY/3EABQJZ/64ABQJg/4UABQJi/8MABQJq/4UABQJy/3EABQJz/3EABQJ9/+wABQJ//4UABQKF/4UABQKH/4UABQKJ/4UABQKN/4UABQKy/4UABQK0/4UABQLO/4UABQLP/3EABQLZ/3EABQLa/9cABQLb/3EABQLc/9cABQLd/3EABQLe/9cABQLg/4UABQLi/9cABQLk/9cABQLw/4UABQLy/4UABQL0/4UABQMJ/3EABQMK/4UABQML/3EABQMM/4UABQMR/4UABQMS/3EABQMW/4UABQMa/4UABQMb/4UABQMc/3EABQMd/3EABQMe/64ABQMf/3EABQMg/64ABQMh/3EABQMi/64ABQMj/3EABQMl/3EABQMm/64ABQMn/3EABQMo/64ABQMp/3EABQMq/64ABQMr/3EABQMs/64ABQMt/3EABQMu/64ABQMv/3EABQMw/64ABQMx/3EABQMy/64ABQMz/3EABQM0/64ABQM2/4UABQM4/4UABQM6/4UABQM8/4UABQNA/4UABQNC/4UABQNE/4UABQNK/4UABQNM/4UABQNO/4UABQNS/4UABQNU/4UABQNW/4UABQNY/4UABQNa/4UABQNc/4UABQNe/4UABQNg/4UABQNi/8MABQNk/8MABQNm/8MABQNo/8MABQNq/8MABQNs/8MABQNu/8MABQNvABQABQNxABQABQNzABQABQOPACkACgAk/3EACgA3ACkACgA5ACkACgA6ACkACgA8ABQACgBE/64ACgBG/4UACgBH/4UACgBI/4UACgBK/8MACgBQ/8MACgBR/8MACgBS/4UACgBT/8MACgBU/4UACgBV/8MACgBW/8MACgBY/8MACgCC/3EACgCD/3EACgCE/3EACgCF/3EACgCG/3EACgCH/3EACgCfABQACgCi/4UACgCj/64ACgCk/64ACgCl/64ACgCm/64ACgCn/64ACgCo/64ACgCp/4UACgCq/4UACgCr/4UACgCs/4UACgCt/4UACgC0/4UACgC1/4UACgC2/4UACgC3/4UACgC4/4UACgC6/4UACgC7/8MACgC8/8MACgC9/8MACgC+/8MACgDC/3EACgDD/64ACgDE/3EACgDF/64ACgDG/3EACgDH/64ACgDJ/4UACgDL/4UACgDN/4UACgDP/4UACgDR/4UACgDT/4UACgDV/4UACgDX/4UACgDZ/4UACgDb/4UACgDd/4UACgDf/8MACgDh/8MACgDj/8MACgDl/8MACgD6/8MACgEG/8MACgEI/8MACgEN/8MACgEP/4UACgER/4UACgET/4UACgEV/4UACgEX/8MACgEZ/8MACgEd/8MACgEh/8MACgEkACkACgEmACkACgEr/8MACgEt/8MACgEv/8MACgEx/8MACgEz/8MACgE1/8MACgE2ACkACgE4ABQACgE6ABQACgFD/3EACgFE/64ACgFG/64ACgFI/4UACgFK/8MACgFW/3EACgFf/3EACgFi/3EACgFp/3EACgF5/64ACgF6/9cACgF7/9cACgF+/64ACgGB/8MACgGC/9cACgGD/9cACgGE/9cACgGH/9cACgGJ/9cACgGM/64ACgGO/8MACgGP/64ACgGQ/64ACgGT/64ACgGZ/64ACgGk/4UACgGq/3EACgGu/4UACgG1/4UACgHK/9cACgHO/3EACgHP/4UACgHV/3EACgHY/4UACgHb/4UACgHe/4UACgHq/4UACgHt/4UACgHu/8MACgHy/3EACgH6ACkACgH8ACkACgH+ACkACgIAABQACgJX/8MACgJY/3EACgJZ/64ACgJg/4UACgJi/8MACgJq/4UACgJy/3EACgJz/3EACgJ9/+wACgJ//4UACgKF/4UACgKH/4UACgKJ/4UACgKN/4UACgKy/4UACgK0/4UACgLO/4UACgLP/3EACgLZ/3EACgLa/9cACgLb/3EACgLc/9cACgLd/3EACgLe/9cACgLg/4UACgLi/9cACgLk/9cACgLw/4UACgLy/4UACgL0/4UACgMJ/3EACgMK/4UACgML/3EACgMM/4UACgMR/4UACgMS/3EACgMW/4UACgMa/4UACgMb/4UACgMc/3EACgMd/3EACgMe/64ACgMf/3EACgMg/64ACgMh/3EACgMi/64ACgMj/3EACgMl/3EACgMm/64ACgMn/3EACgMo/64ACgMp/3EACgMq/64ACgMr/3EACgMs/64ACgMt/3EACgMu/64ACgMv/3EACgMw/64ACgMx/3EACgMy/64ACgMz/3EACgM0/64ACgM2/4UACgM4/4UACgM6/4UACgM8/4UACgNA/4UACgNC/4UACgNE/4UACgNK/4UACgNM/4UACgNO/4UACgNS/4UACgNU/4UACgNW/4UACgNY/4UACgNa/4UACgNc/4UACgNe/4UACgNg/4UACgNi/8MACgNk/8MACgNm/8MACgNo/8MACgNq/8MACgNs/8MACgNu/8MACgNvABQACgNxABQACgNzABQACgOPACkACwAtALgADwAm/5oADwAq/5oADwAy/5oADwA0/5oADwA3/3EADwA4/9cADwA5/4UADwA6/4UADwA8/4UADwCJ/5oADwCU/5oADwCV/5oADwCW/5oADwCX/5oADwCY/5oADwCa/5oADwCb/9cADwCc/9cADwCd/9cADwCe/9cADwCf/4UADwDI/5oADwDK/5oADwDM/5oADwDO/5oADwDe/5oADwDg/5oADwDi/5oADwDk/5oADwEO/5oADwEQ/5oADwES/5oADwEU/5oADwEk/3EADwEm/3EADwEq/9cADwEs/9cADwEu/9cADwEw/9cADwEy/9cADwE0/9cADwE2/4UADwE4/4UADwE6/4UADwFH/5oADwFm/64ADwFt/64ADwFx/3EADwFy/4UADwFz/5oADwF1/4UADwF4/4UADwGF/9cADwGd/3EADwGf/5oADwGm/3EADwG4/5oADwG7/5oADwG8/3EADwG+/64ADwHB/1wADwHE/3EADwHc/5oADwHh/4UADwHk/5oADwH6/4UADwH8/4UADwH+/4UADwIA/4UADwJU/4UADwJf/5oADwJh/9cADwJs/5oADwJ8/1wADwJ+/5oADwKA/4UADwKC/4UADwKE/5oADwKG/5oADwKI/5oADwKK/5oADwKM/5oADwKp/3EADwKq/5oADwKx/5oADwKz/5oADwK1/3EADwK2/5oADwK3/4UADwK5/4UADwK9/3EADwK+/5oADwK//1wADwLA/4UADwLB/1wADwLC/4UADwLF/4UADwLH/4UADwLU/1wADwLV/4UADwLv/5oADwLx/5oADwLz/5oADwL9/1wADwL+/4UADwMN/4UADwMO/5oADwMP/4UADwMQ/5oADwMV/5oADwMX/3EADwMY/5oADwNJ/5oADwNL/5oADwNN/5oADwNP/5oADwNR/5oADwNT/5oADwNV/5oADwNX/5oADwNZ/5oADwNb/5oADwNd/5oADwNf/5oADwNh/9cADwNj/9cADwNl/9cADwNn/9cADwNp/9cADwNr/9cADwNt/9cADwNv/4UADwNx/4UADwNz/4UADwOP/3EAEAA3/64AEAEk/64AEAEm/64AEAFx/64AEAGd/64AEAGm/64AEAG8/64AEAHE/64AEAHc/9cAEAHk/9cAEAKp/64AEAKq/9cAEAK1/64AEAK2/9cAEAK9/64AEAK+/9cAEAMX/64AEAMY/9cAEAOP/64AEQAm/5oAEQAq/5oAEQAy/5oAEQA0/5oAEQA3/3EAEQA4/9cAEQA5/4UAEQA6/4UAEQA8/4UAEQCJ/5oAEQCU/5oAEQCV/5oAEQCW/5oAEQCX/5oAEQCY/5oAEQCa/5oAEQCb/9cAEQCc/9cAEQCd/9cAEQCe/9cAEQCf/4UAEQDI/5oAEQDK/5oAEQDM/5oAEQDO/5oAEQDe/5oAEQDg/5oAEQDi/5oAEQDk/5oAEQEO/5oAEQEQ/5oAEQES/5oAEQEU/5oAEQEk/3EAEQEm/3EAEQEq/9cAEQEs/9cAEQEu/9cAEQEw/9cAEQEy/9cAEQE0/9cAEQE2/4UAEQE4/4UAEQE6/4UAEQFH/5oAEQFm/64AEQFt/64AEQFx/3EAEQFy/4UAEQFz/5oAEQF1/4UAEQF4/4UAEQGF/9cAEQGd/3EAEQGf/5oAEQGm/3EAEQG4/5oAEQG7/5oAEQG8/3EAEQG+/64AEQHB/1wAEQHE/3EAEQHc/5oAEQHh/4UAEQHk/5oAEQH6/4UAEQH8/4UAEQH+/4UAEQIA/4UAEQJU/4UAEQJf/5oAEQJh/9cAEQJs/5oAEQJ8/1wAEQJ+/5oAEQKA/4UAEQKC/4UAEQKE/5oAEQKG/5oAEQKI/5oAEQKK/5oAEQKM/5oAEQKp/3EAEQKq/5oAEQKx/5oAEQKz/5oAEQK1/3EAEQK2/5oAEQK3/4UAEQK5/4UAEQK9/3EAEQK+/5oAEQK//1wAEQLA/4UAEQLB/1wAEQLC/4UAEQLF/4UAEQLH/4UAEQLU/1wAEQLV/4UAEQLv/5oAEQLx/5oAEQLz/5oAEQL9/1wAEQL+/4UAEQMN/4UAEQMO/5oAEQMP/4UAEQMQ/5oAEQMV/5oAEQMX/3EAEQMY/5oAEQNJ/5oAEQNL/5oAEQNN/5oAEQNP/5oAEQNR/5oAEQNT/5oAEQNV/5oAEQNX/5oAEQNZ/5oAEQNb/5oAEQNd/5oAEQNf/5oAEQNh/9cAEQNj/9cAEQNl/9cAEQNn/9cAEQNp/9cAEQNr/9cAEQNt/9cAEQNv/4UAEQNx/4UAEQNz/4UAEQOP/3EAJAAF/3EAJAAK/3EAJAAm/9cAJAAq/9cAJAAtAQoAJAAy/9cAJAA0/9cAJAA3/3EAJAA5/64AJAA6/64AJAA8/4UAJACJ/9cAJACU/9cAJACV/9cAJACW/9cAJACX/9cAJACY/9cAJACa/9cAJACf/4UAJADI/9cAJADK/9cAJADM/9cAJADO/9cAJADe/9cAJADg/9cAJADi/9cAJADk/9cAJAEO/9cAJAEQ/9cAJAES/9cAJAEU/9cAJAEk/3EAJAEm/3EAJAE2/64AJAE4/4UAJAE6/4UAJAFH/9cAJAH6/64AJAH8/64AJAH+/64AJAIA/4UAJAIH/3EAJAIL/3EAJAJf/9cAJANJ/9cAJANL/9cAJANN/9cAJANP/9cAJANR/9cAJANT/9cAJANV/9cAJANX/9cAJANZ/9cAJANb/9cAJANd/9cAJANf/9cAJANv/4UAJANx/4UAJANz/4UAJAOP/3EAJQAP/64AJQAR/64AJQAk/9cAJQA3/8MAJQA5/+wAJQA6/+wAJQA7/9cAJQA8/+wAJQA9/+wAJQCC/9cAJQCD/9cAJQCE/9cAJQCF/9cAJQCG/9cAJQCH/9cAJQCf/+wAJQDC/9cAJQDE/9cAJQDG/9cAJQEk/8MAJQEm/8MAJQE2/+wAJQE4/+wAJQE6/+wAJQE7/+wAJQE9/+wAJQE//+wAJQFD/9cAJQGg/+wAJQH6/+wAJQH8/+wAJQH+/+wAJQIA/+wAJQII/64AJQIM/64AJQJY/9cAJQMd/9cAJQMf/9cAJQMh/9cAJQMj/9cAJQMl/9cAJQMn/9cAJQMp/9cAJQMr/9cAJQMt/9cAJQMv/9cAJQMx/9cAJQMz/9cAJQNv/+wAJQNx/+wAJQNz/+wAJQOP/8MAJgAm/9cAJgAq/9cAJgAy/9cAJgA0/9cAJgCJ/9cAJgCU/9cAJgCV/9cAJgCW/9cAJgCX/9cAJgCY/9cAJgCa/9cAJgDI/9cAJgDK/9cAJgDM/9cAJgDO/9cAJgDe/9cAJgDg/9cAJgDi/9cAJgDk/9cAJgEO/9cAJgEQ/9cAJgES/9cAJgEU/9cAJgFH/9cAJgJf/9cAJgNJ/9cAJgNL/9cAJgNN/9cAJgNP/9cAJgNR/9cAJgNT/9cAJgNV/9cAJgNX/9cAJgNZ/9cAJgNb/9cAJgNd/9cAJgNf/9cAJwAP/64AJwAR/64AJwAk/9cAJwA3/8MAJwA5/+wAJwA6/+wAJwA7/9cAJwA8/+wAJwA9/+wAJwCC/9cAJwCD/9cAJwCE/9cAJwCF/9cAJwCG/9cAJwCH/9cAJwCf/+wAJwDC/9cAJwDE/9cAJwDG/9cAJwEk/8MAJwEm/8MAJwE2/+wAJwE4/+wAJwE6/+wAJwE7/+wAJwE9/+wAJwE//+wAJwFD/9cAJwGg/+wAJwH6/+wAJwH8/+wAJwH+/+wAJwIA/+wAJwII/64AJwIM/64AJwJY/9cAJwMd/9cAJwMf/9cAJwMh/9cAJwMj/9cAJwMl/9cAJwMn/9cAJwMp/9cAJwMr/9cAJwMt/9cAJwMv/9cAJwMx/9cAJwMz/9cAJwNv/+wAJwNx/+wAJwNz/+wAJwOP/8MAKAAtAHsAKQAP/4UAKQAR/4UAKQAiACkAKQAk/9cAKQCC/9cAKQCD/9cAKQCE/9cAKQCF/9cAKQCG/9cAKQCH/9cAKQDC/9cAKQDE/9cAKQDG/9cAKQFD/9cAKQII/4UAKQIM/4UAKQJY/9cAKQMd/9cAKQMf/9cAKQMh/9cAKQMj/9cAKQMl/9cAKQMn/9cAKQMp/9cAKQMr/9cAKQMt/9cAKQMv/9cAKQMx/9cAKQMz/9cALgAm/9cALgAq/9cALgAy/9cALgA0/9cALgCJ/9cALgCU/9cALgCV/9cALgCW/9cALgCX/9cALgCY/9cALgCa/9cALgDI/9cALgDK/9cALgDM/9cALgDO/9cALgDe/9cALgDg/9cALgDi/9cALgDk/9cALgEO/9cALgEQ/9cALgES/9cALgEU/9cALgFH/9cALgJf/9cALgNJ/9cALgNL/9cALgNN/9cALgNP/9cALgNR/9cALgNT/9cALgNV/9cALgNX/9cALgNZ/9cALgNb/9cALgNd/9cALgNf/9cALwAF/1wALwAK/1wALwAm/9cALwAq/9cALwAy/9cALwA0/9cALwA3/9cALwA4/+wALwA5/9cALwA6/9cALwA8/8MALwCJ/9cALwCU/9cALwCV/9cALwCW/9cALwCX/9cALwCY/9cALwCa/9cALwCb/+wALwCc/+wALwCd/+wALwCe/+wALwCf/8MALwDI/9cALwDK/9cALwDM/9cALwDO/9cALwDe/9cALwDg/9cALwDi/9cALwDk/9cALwEO/9cALwEQ/9cALwES/9cALwEU/9cALwEk/9cALwEm/9cALwEq/+wALwEs/+wALwEu/+wALwEw/+wALwEy/+wALwE0/+wALwE2/9cALwE4/8MALwE6/8MALwFH/9cALwH6/9cALwH8/9cALwH+/9cALwIA/8MALwIH/1wALwIL/1wALwJf/9cALwJh/+wALwNJ/9cALwNL/9cALwNN/9cALwNP/9cALwNR/9cALwNT/9cALwNV/9cALwNX/9cALwNZ/9cALwNb/9cALwNd/9cALwNf/9cALwNh/+wALwNj/+wALwNl/+wALwNn/+wALwNp/+wALwNr/+wALwNt/+wALwNv/8MALwNx/8MALwNz/8MALwOP/9cAMgAP/64AMgAR/64AMgAk/9cAMgA3/8MAMgA5/+wAMgA6/+wAMgA7/9cAMgA8/+wAMgA9/+wAMgCC/9cAMgCD/9cAMgCE/9cAMgCF/9cAMgCG/9cAMgCH/9cAMgCf/+wAMgDC/9cAMgDE/9cAMgDG/9cAMgEk/8MAMgEm/8MAMgE2/+wAMgE4/+wAMgE6/+wAMgE7/+wAMgE9/+wAMgE//+wAMgFD/9cAMgGg/+wAMgH6/+wAMgH8/+wAMgH+/+wAMgIA/+wAMgII/64AMgIM/64AMgJY/9cAMgMd/9cAMgMf/9cAMgMh/9cAMgMj/9cAMgMl/9cAMgMn/9cAMgMp/9cAMgMr/9cAMgMt/9cAMgMv/9cAMgMx/9cAMgMz/9cAMgNv/+wAMgNx/+wAMgNz/+wAMgOP/8MAMwAP/vYAMwAR/vYAMwAk/5oAMwA7/9cAMwA9/+wAMwCC/5oAMwCD/5oAMwCE/5oAMwCF/5oAMwCG/5oAMwCH/5oAMwDC/5oAMwDE/5oAMwDG/5oAMwE7/+wAMwE9/+wAMwE//+wAMwFD/5oAMwII/vYAMwIM/vYAMwJY/5oAMwMd/5oAMwMf/5oAMwMh/5oAMwMj/5oAMwMl/5oAMwMn/5oAMwMp/5oAMwMr/5oAMwMt/5oAMwMv/5oAMwMx/5oAMwMz/5oANAAP/64ANAAR/64ANAAk/9cANAA3/8MANAA5/+wANAA6/+wANAA7/9cANAA8/+wANAA9/+wANACC/9cANACD/9cANACE/9cANACF/9cANACG/9cANACH/9cANACf/+wANADC/9cANADE/9cANADG/9cANAEk/8MANAEm/8MANAE2/+wANAE4/+wANAE6/+wANAE7/+wANAE9/+wANAE//+wANAFD/9cANAGg/+wANAH6/+wANAH8/+wANAH+/+wANAIA/+wANAII/64ANAIM/64ANAJY/9cANAMd/9cANAMf/9cANAMh/9cANAMj/9cANAMl/9cANAMn/9cANAMp/9cANAMr/9cANAMt/9cANAMv/9cANAMx/9cANAMz/9cANANv/+wANANx/+wANANz/+wANAOP/8MANwAP/4UANwAQ/64ANwAR/4UANwAiACkANwAk/3EANwAm/9cANwAq/9cANwAy/9cANwA0/9cANwA3ACkANwBE/1wANwBG/3EANwBH/3EANwBI/3EANwBK/3EANwBQ/5oANwBR/5oANwBS/3EANwBT/5oANwBU/3EANwBV/5oANwBW/4UANwBY/5oANwBZ/9cANwBa/9cANwBb/9cANwBc/9cANwBd/64ANwCC/3EANwCD/3EANwCE/3EANwCF/3EANwCG/3EANwCH/3EANwCJ/9cANwCU/9cANwCV/9cANwCW/9cANwCX/9cANwCY/9cANwCa/9cANwCi/3EANwCj/1wANwCk/1wANwCl/1wANwCm/1wANwCn/1wANwCo/1wANwCp/3EANwCq/3EANwCr/3EANwCs/3EANwCt/3EANwC0/3EANwC1/3EANwC2/3EANwC3/3EANwC4/3EANwC6/3EANwC7/5oANwC8/5oANwC9/5oANwC+/5oANwC//9cANwDC/3EANwDD/1wANwDE/3EANwDF/1wANwDG/3EANwDH/1wANwDI/9cANwDJ/3EANwDK/9cANwDL/3EANwDM/9cANwDN/3EANwDO/9cANwDP/3EANwDR/3EANwDT/3EANwDV/3EANwDX/3EANwDZ/3EANwDb/3EANwDd/3EANwDe/9cANwDf/3EANwDg/9cANwDh/3EANwDi/9cANwDj/3EANwDk/9cANwDl/3EANwD6/5oANwEG/5oANwEI/5oANwEN/5oANwEO/9cANwEP/3EANwEQ/9cANwER/3EANwES/9cANwET/3EANwEU/9cANwEV/3EANwEX/5oANwEZ/5oANwEd/4UANwEh/4UANwEkACkANwEmACkANwEr/5oANwEt/5oANwEv/5oANwEx/5oANwEz/5oANwE1/5oANwE3/9cANwE8/64ANwE+/64ANwFA/64ANwFD/3EANwFE/1wANwFG/1wANwFH/9cANwFI/3EANwFK/4UANwH7/9cANwH9/9cANwIC/64ANwID/64ANwIE/64ANwII/4UANwIM/4UANwJX/5oANwJY/3EANwJZ/1wANwJf/9cANwJg/3EANwJi/5oANwMd/3EANwMe/1wANwMf/3EANwMg/1wANwMh/3EANwMi/1wANwMj/3EANwMl/3EANwMm/1wANwMn/3EANwMo/1wANwMp/3EANwMq/1wANwMr/3EANwMs/1wANwMt/3EANwMu/1wANwMv/3EANwMw/1wANwMx/3EANwMy/1wANwMz/3EANwM0/1wANwM2/3EANwM4/3EANwM6/3EANwM8/3EANwNA/3EANwNC/3EANwNE/3EANwNJ/9cANwNK/3EANwNL/9cANwNM/3EANwNN/9cANwNO/3EANwNP/9cANwNR/9cANwNS/3EANwNT/9cANwNU/3EANwNV/9cANwNW/3EANwNX/9cANwNY/3EANwNZ/9cANwNa/3EANwNb/9cANwNc/3EANwNd/9cANwNe/3EANwNf/9cANwNg/3EANwNi/5oANwNk/5oANwNm/5oANwNo/5oANwNq/5oANwNs/5oANwNu/5oANwNw/9cANwOPACkAOAAP/9cAOAAR/9cAOAAk/+wAOACC/+wAOACD/+wAOACE/+wAOACF/+wAOACG/+wAOACH/+wAOADC/+wAOADE/+wAOADG/+wAOAFD/+wAOAII/9cAOAIM/9cAOAJY/+wAOAMd/+wAOAMf/+wAOAMh/+wAOAMj/+wAOAMl/+wAOAMn/+wAOAMp/+wAOAMr/+wAOAMt/+wAOAMv/+wAOAMx/+wAOAMz/+wAOQAP/5oAOQAR/5oAOQAiACkAOQAk/64AOQAm/+wAOQAq/+wAOQAy/+wAOQA0/+wAOQBE/9cAOQBG/9cAOQBH/9cAOQBI/9cAOQBK/+wAOQBQ/+wAOQBR/+wAOQBS/9cAOQBT/+wAOQBU/9cAOQBV/+wAOQBW/+wAOQBY/+wAOQCC/64AOQCD/64AOQCE/64AOQCF/64AOQCG/64AOQCH/64AOQCJ/+wAOQCU/+wAOQCV/+wAOQCW/+wAOQCX/+wAOQCY/+wAOQCa/+wAOQCi/9cAOQCj/9cAOQCk/9cAOQCl/9cAOQCm/9cAOQCn/9cAOQCo/9cAOQCp/9cAOQCq/9cAOQCr/9cAOQCs/9cAOQCt/9cAOQC0/9cAOQC1/9cAOQC2/9cAOQC3/9cAOQC4/9cAOQC6/9cAOQC7/+wAOQC8/+wAOQC9/+wAOQC+/+wAOQDC/64AOQDD/9cAOQDE/64AOQDF/9cAOQDG/64AOQDH/9cAOQDI/+wAOQDJ/9cAOQDK/+wAOQDL/9cAOQDM/+wAOQDN/9cAOQDO/+wAOQDP/9cAOQDR/9cAOQDT/9cAOQDV/9cAOQDX/9cAOQDZ/9cAOQDb/9cAOQDd/9cAOQDe/+wAOQDf/+wAOQDg/+wAOQDh/+wAOQDi/+wAOQDj/+wAOQDk/+wAOQDl/+wAOQD6/+wAOQEG/+wAOQEI/+wAOQEN/+wAOQEO/+wAOQEP/9cAOQEQ/+wAOQER/9cAOQES/+wAOQET/9cAOQEU/+wAOQEV/9cAOQEX/+wAOQEZ/+wAOQEd/+wAOQEh/+wAOQEr/+wAOQEt/+wAOQEv/+wAOQEx/+wAOQEz/+wAOQE1/+wAOQFD/64AOQFE/9cAOQFG/9cAOQFH/+wAOQFI/9cAOQFK/+wAOQII/5oAOQIM/5oAOQJX/+wAOQJY/64AOQJZ/9cAOQJf/+wAOQJg/9cAOQJi/+wAOQMd/64AOQMe/9cAOQMf/64AOQMg/9cAOQMh/64AOQMi/9cAOQMj/64AOQMl/64AOQMm/9cAOQMn/64AOQMo/9cAOQMp/64AOQMq/9cAOQMr/64AOQMs/9cAOQMt/64AOQMu/9cAOQMv/64AOQMw/9cAOQMx/64AOQMy/9cAOQMz/64AOQM0/9cAOQM2/9cAOQM4/9cAOQM6/9cAOQM8/9cAOQNA/9cAOQNC/9cAOQNE/9cAOQNJ/+wAOQNK/9cAOQNL/+wAOQNM/9cAOQNN/+wAOQNO/9cAOQNP/+wAOQNR/+wAOQNS/9cAOQNT/+wAOQNU/9cAOQNV/+wAOQNW/9cAOQNX/+wAOQNY/9cAOQNZ/+wAOQNa/9cAOQNb/+wAOQNc/9cAOQNd/+wAOQNe/9cAOQNf/+wAOQNg/9cAOQNi/+wAOQNk/+wAOQNm/+wAOQNo/+wAOQNq/+wAOQNs/+wAOQNu/+wAOgAP/5oAOgAR/5oAOgAiACkAOgAk/64AOgAm/+wAOgAq/+wAOgAy/+wAOgA0/+wAOgBE/9cAOgBG/9cAOgBH/9cAOgBI/9cAOgBK/+wAOgBQ/+wAOgBR/+wAOgBS/9cAOgBT/+wAOgBU/9cAOgBV/+wAOgBW/+wAOgBY/+wAOgCC/64AOgCD/64AOgCE/64AOgCF/64AOgCG/64AOgCH/64AOgCJ/+wAOgCU/+wAOgCV/+wAOgCW/+wAOgCX/+wAOgCY/+wAOgCa/+wAOgCi/9cAOgCj/9cAOgCk/9cAOgCl/9cAOgCm/9cAOgCn/9cAOgCo/9cAOgCp/9cAOgCq/9cAOgCr/9cAOgCs/9cAOgCt/9cAOgC0/9cAOgC1/9cAOgC2/9cAOgC3/9cAOgC4/9cAOgC6/9cAOgC7/+wAOgC8/+wAOgC9/+wAOgC+/+wAOgDC/64AOgDD/9cAOgDE/64AOgDF/9cAOgDG/64AOgDH/9cAOgDI/+wAOgDJ/9cAOgDK/+wAOgDL/9cAOgDM/+wAOgDN/9cAOgDO/+wAOgDP/9cAOgDR/9cAOgDT/9cAOgDV/9cAOgDX/9cAOgDZ/9cAOgDb/9cAOgDd/9cAOgDe/+wAOgDf/+wAOgDg/+wAOgDh/+wAOgDi/+wAOgDj/+wAOgDk/+wAOgDl/+wAOgD6/+wAOgEG/+wAOgEI/+wAOgEN/+wAOgEO/+wAOgEP/9cAOgEQ/+wAOgER/9cAOgES/+wAOgET/9cAOgEU/+wAOgEV/9cAOgEX/+wAOgEZ/+wAOgEd/+wAOgEh/+wAOgEr/+wAOgEt/+wAOgEv/+wAOgEx/+wAOgEz/+wAOgE1/+wAOgFD/64AOgFE/9cAOgFG/9cAOgFH/+wAOgFI/9cAOgFK/+wAOgII/5oAOgIM/5oAOgJX/+wAOgJY/64AOgJZ/9cAOgJf/+wAOgJg/9cAOgJi/+wAOgMd/64AOgMe/9cAOgMf/64AOgMg/9cAOgMh/64AOgMi/9cAOgMj/64AOgMl/64AOgMm/9cAOgMn/64AOgMo/9cAOgMp/64AOgMq/9cAOgMr/64AOgMs/9cAOgMt/64AOgMu/9cAOgMv/64AOgMw/9cAOgMx/64AOgMy/9cAOgMz/64AOgM0/9cAOgM2/9cAOgM4/9cAOgM6/9cAOgM8/9cAOgNA/9cAOgNC/9cAOgNE/9cAOgNJ/+wAOgNK/9cAOgNL/+wAOgNM/9cAOgNN/+wAOgNO/9cAOgNP/+wAOgNR/+wAOgNS/9cAOgNT/+wAOgNU/9cAOgNV/+wAOgNW/9cAOgNX/+wAOgNY/9cAOgNZ/+wAOgNa/9cAOgNb/+wAOgNc/9cAOgNd/+wAOgNe/9cAOgNf/+wAOgNg/9cAOgNi/+wAOgNk/+wAOgNm/+wAOgNo/+wAOgNq/+wAOgNs/+wAOgNu/+wAOwAm/9cAOwAq/9cAOwAy/9cAOwA0/9cAOwCJ/9cAOwCU/9cAOwCV/9cAOwCW/9cAOwCX/9cAOwCY/9cAOwCa/9cAOwDI/9cAOwDK/9cAOwDM/9cAOwDO/9cAOwDe/9cAOwDg/9cAOwDi/9cAOwDk/9cAOwEO/9cAOwEQ/9cAOwES/9cAOwEU/9cAOwFH/9cAOwJf/9cAOwNJ/9cAOwNL/9cAOwNN/9cAOwNP/9cAOwNR/9cAOwNT/9cAOwNV/9cAOwNX/9cAOwNZ/9cAOwNb/9cAOwNd/9cAOwNf/9cAPAAP/4UAPAAR/4UAPAAiACkAPAAk/4UAPAAm/9cAPAAq/9cAPAAy/9cAPAA0/9cAPABE/5oAPABG/5oAPABH/5oAPABI/5oAPABK/9cAPABQ/8MAPABR/8MAPABS/5oAPABT/8MAPABU/5oAPABV/8MAPABW/64APABY/8MAPABd/9cAPACC/4UAPACD/4UAPACE/4UAPACF/4UAPACG/4UAPACH/4UAPACJ/9cAPACU/9cAPACV/9cAPACW/9cAPACX/9cAPACY/9cAPACa/9cAPACi/5oAPACj/5oAPACk/5oAPACl/5oAPACm/5oAPACn/5oAPACo/5oAPACp/5oAPACq/5oAPACr/5oAPACs/5oAPACt/5oAPAC0/5oAPAC1/5oAPAC2/5oAPAC3/5oAPAC4/5oAPAC6/5oAPAC7/8MAPAC8/8MAPAC9/8MAPAC+/8MAPADC/4UAPADD/5oAPADE/4UAPADF/5oAPADG/4UAPADH/5oAPADI/9cAPADJ/5oAPADK/9cAPADL/5oAPADM/9cAPADN/5oAPADO/9cAPADP/5oAPADR/5oAPADT/5oAPADV/5oAPADX/5oAPADZ/5oAPADb/5oAPADd/5oAPADe/9cAPADf/9cAPADg/9cAPADh/9cAPADi/9cAPADj/9cAPADk/9cAPADl/9cAPAD6/8MAPAEG/8MAPAEI/8MAPAEN/8MAPAEO/9cAPAEP/5oAPAEQ/9cAPAER/5oAPAES/9cAPAET/5oAPAEU/9cAPAEV/5oAPAEX/8MAPAEZ/8MAPAEd/64APAEh/64APAEr/8MAPAEt/8MAPAEv/8MAPAEx/8MAPAEz/8MAPAE1/8MAPAE8/9cAPAE+/9cAPAFA/9cAPAFD/4UAPAFE/5oAPAFG/5oAPAFH/9cAPAFI/5oAPAFK/64APAII/4UAPAIM/4UAPAJX/8MAPAJY/4UAPAJZ/5oAPAJf/9cAPAJg/5oAPAJi/8MAPAMd/4UAPAMe/5oAPAMf/4UAPAMg/5oAPAMh/4UAPAMi/5oAPAMj/4UAPAMl/4UAPAMm/5oAPAMn/4UAPAMo/5oAPAMp/4UAPAMq/5oAPAMr/4UAPAMs/5oAPAMt/4UAPAMu/5oAPAMv/4UAPAMw/5oAPAMx/4UAPAMy/5oAPAMz/4UAPAM0/5oAPAM2/5oAPAM4/5oAPAM6/5oAPAM8/5oAPANA/5oAPANC/5oAPANE/5oAPANJ/9cAPANK/5oAPANL/9cAPANM/5oAPANN/9cAPANO/5oAPANP/9cAPANR/9cAPANS/5oAPANT/9cAPANU/5oAPANV/9cAPANW/5oAPANX/9cAPANY/5oAPANZ/9cAPANa/5oAPANb/9cAPANc/5oAPANd/9cAPANe/5oAPANf/9cAPANg/5oAPANi/8MAPANk/8MAPANm/8MAPANo/8MAPANq/8MAPANs/8MAPANu/8MAPQAm/+wAPQAq/+wAPQAy/+wAPQA0/+wAPQCJ/+wAPQCU/+wAPQCV/+wAPQCW/+wAPQCX/+wAPQCY/+wAPQCa/+wAPQDI/+wAPQDK/+wAPQDM/+wAPQDO/+wAPQDe/+wAPQDg/+wAPQDi/+wAPQDk/+wAPQEO/+wAPQEQ/+wAPQES/+wAPQEU/+wAPQFH/+wAPQJf/+wAPQNJ/+wAPQNL/+wAPQNN/+wAPQNP/+wAPQNR/+wAPQNT/+wAPQNV/+wAPQNX/+wAPQNZ/+wAPQNb/+wAPQNd/+wAPQNf/+wAPgAtALgARAAF/+wARAAK/+wARAIH/+wARAIL/+wARQAF/+wARQAK/+wARQBZ/9cARQBa/9cARQBb/9cARQBc/9cARQBd/+wARQC//9cARQE3/9cARQE8/+wARQE+/+wARQFA/+wARQH7/9cARQH9/9cARQIH/+wARQIL/+wARQNw/9cARgAFACkARgAKACkARgIHACkARgILACkASAAF/+wASAAK/+wASABZ/9cASABa/9cASABb/9cASABc/9cASABd/+wASAC//9cASAE3/9cASAE8/+wASAE+/+wASAFA/+wASAH7/9cASAH9/9cASAIH/+wASAIL/+wASANw/9cASQAFAHsASQAKAHsASQIHAHsASQILAHsASwAF/+wASwAK/+wASwIH/+wASwIL/+wATgBG/9cATgBH/9cATgBI/9cATgBS/9cATgBU/9cATgCi/9cATgCp/9cATgCq/9cATgCr/9cATgCs/9cATgCt/9cATgC0/9cATgC1/9cATgC2/9cATgC3/9cATgC4/9cATgC6/9cATgDJ/9cATgDL/9cATgDN/9cATgDP/9cATgDR/9cATgDT/9cATgDV/9cATgDX/9cATgDZ/9cATgDb/9cATgDd/9cATgEP/9cATgER/9cATgET/9cATgEV/9cATgFI/9cATgJg/9cATgM2/9cATgM4/9cATgM6/9cATgM8/9cATgNA/9cATgNC/9cATgNE/9cATgNK/9cATgNM/9cATgNO/9cATgNS/9cATgNU/9cATgNW/9cATgNY/9cATgNa/9cATgNc/9cATgNe/9cATgNg/9cAUAAF/+wAUAAK/+wAUAIH/+wAUAIL/+wAUQAF/+wAUQAK/+wAUQIH/+wAUQIL/+wAUgAF/+wAUgAK/+wAUgBZ/9cAUgBa/9cAUgBb/9cAUgBc/9cAUgBd/+wAUgC//9cAUgE3/9cAUgE8/+wAUgE+/+wAUgFA/+wAUgH7/9cAUgH9/9cAUgIH/+wAUgIL/+wAUgNw/9cAUwAF/+wAUwAK/+wAUwBZ/9cAUwBa/9cAUwBb/9cAUwBc/9cAUwBd/+wAUwC//9cAUwE3/9cAUwE8/+wAUwE+/+wAUwFA/+wAUwH7/9cAUwH9/9cAUwIH/+wAUwIL/+wAUwNw/9cAVQAFAFIAVQAKAFIAVQBE/9cAVQBG/9cAVQBH/9cAVQBI/9cAVQBK/+wAVQBS/9cAVQBU/9cAVQCi/9cAVQCj/9cAVQCk/9cAVQCl/9cAVQCm/9cAVQCn/9cAVQCo/9cAVQCp/9cAVQCq/9cAVQCr/9cAVQCs/9cAVQCt/9cAVQC0/9cAVQC1/9cAVQC2/9cAVQC3/9cAVQC4/9cAVQC6/9cAVQDD/9cAVQDF/9cAVQDH/9cAVQDJ/9cAVQDL/9cAVQDN/9cAVQDP/9cAVQDR/9cAVQDT/9cAVQDV/9cAVQDX/9cAVQDZ/9cAVQDb/9cAVQDd/9cAVQDf/+wAVQDh/+wAVQDj/+wAVQDl/+wAVQEP/9cAVQER/9cAVQET/9cAVQEV/9cAVQFE/9cAVQFG/9cAVQFI/9cAVQIHAFIAVQILAFIAVQJZ/9cAVQJg/9cAVQMe/9cAVQMg/9cAVQMi/9cAVQMm/9cAVQMo/9cAVQMq/9cAVQMs/9cAVQMu/9cAVQMw/9cAVQMy/9cAVQM0/9cAVQM2/9cAVQM4/9cAVQM6/9cAVQM8/9cAVQNA/9cAVQNC/9cAVQNE/9cAVQNK/9cAVQNM/9cAVQNO/9cAVQNS/9cAVQNU/9cAVQNW/9cAVQNY/9cAVQNa/9cAVQNc/9cAVQNe/9cAVQNg/9cAVwAFACkAVwAKACkAVwIHACkAVwILACkAWQAFAFIAWQAKAFIAWQAP/64AWQAR/64AWQAiACkAWQIHAFIAWQII/64AWQILAFIAWQIM/64AWgAFAFIAWgAKAFIAWgAP/64AWgAR/64AWgAiACkAWgIHAFIAWgII/64AWgILAFIAWgIM/64AWwBG/9cAWwBH/9cAWwBI/9cAWwBS/9cAWwBU/9cAWwCi/9cAWwCp/9cAWwCq/9cAWwCr/9cAWwCs/9cAWwCt/9cAWwC0/9cAWwC1/9cAWwC2/9cAWwC3/9cAWwC4/9cAWwC6/9cAWwDJ/9cAWwDL/9cAWwDN/9cAWwDP/9cAWwDR/9cAWwDT/9cAWwDV/9cAWwDX/9cAWwDZ/9cAWwDb/9cAWwDd/9cAWwEP/9cAWwER/9cAWwET/9cAWwEV/9cAWwFI/9cAWwJg/9cAWwM2/9cAWwM4/9cAWwM6/9cAWwM8/9cAWwNA/9cAWwNC/9cAWwNE/9cAWwNK/9cAWwNM/9cAWwNO/9cAWwNS/9cAWwNU/9cAWwNW/9cAWwNY/9cAWwNa/9cAWwNc/9cAWwNe/9cAWwNg/9cAXAAFAFIAXAAKAFIAXAAP/64AXAAR/64AXAAiACkAXAIHAFIAXAII/64AXAILAFIAXAIM/64AXgAtALgAggAF/3EAggAK/3EAggAm/9cAggAq/9cAggAtAQoAggAy/9cAggA0/9cAggA3/3EAggA5/64AggA6/64AggA8/4UAggCJ/9cAggCU/9cAggCV/9cAggCW/9cAggCX/9cAggCY/9cAggCa/9cAggCf/4UAggDI/9cAggDK/9cAggDM/9cAggDO/9cAggDe/9cAggDg/9cAggDi/9cAggDk/9cAggEO/9cAggEQ/9cAggES/9cAggEU/9cAggEk/3EAggEm/3EAggE2/64AggE4/4UAggE6/4UAggFH/9cAggH6/64AggH8/64AggH+/64AggIA/4UAggIH/3EAggIL/3EAggJf/9cAggNJ/9cAggNL/9cAggNN/9cAggNP/9cAggNR/9cAggNT/9cAggNV/9cAggNX/9cAggNZ/9cAggNb/9cAggNd/9cAggNf/9cAggNv/4UAggNx/4UAggNz/4UAggOP/3EAgwAF/3EAgwAK/3EAgwAm/9cAgwAq/9cAgwAtAQoAgwAy/9cAgwA0/9cAgwA3/3EAgwA5/64AgwA6/64AgwA8/4UAgwCJ/9cAgwCU/9cAgwCV/9cAgwCW/9cAgwCX/9cAgwCY/9cAgwCa/9cAgwCf/4UAgwDI/9cAgwDK/9cAgwDM/9cAgwDO/9cAgwDe/9cAgwDg/9cAgwDi/9cAgwDk/9cAgwEO/9cAgwEQ/9cAgwES/9cAgwEU/9cAgwEk/3EAgwEm/3EAgwE2/64AgwE4/4UAgwE6/4UAgwFH/9cAgwH6/64AgwH8/64AgwH+/64AgwIA/4UAgwIH/3EAgwIL/3EAgwJf/9cAgwNJ/9cAgwNL/9cAgwNN/9cAgwNP/9cAgwNR/9cAgwNT/9cAgwNV/9cAgwNX/9cAgwNZ/9cAgwNb/9cAgwNd/9cAgwNf/9cAgwNv/4UAgwNx/4UAgwNz/4UAgwOP/3EAhAAF/3EAhAAK/3EAhAAm/9cAhAAq/9cAhAAtAQoAhAAy/9cAhAA0/9cAhAA3/3EAhAA5/64AhAA6/64AhAA8/4UAhACJ/9cAhACU/9cAhACV/9cAhACW/9cAhACX/9cAhACY/9cAhACa/9cAhACf/4UAhADI/9cAhADK/9cAhADM/9cAhADO/9cAhADe/9cAhADg/9cAhADi/9cAhADk/9cAhAEO/9cAhAEQ/9cAhAES/9cAhAEU/9cAhAEk/3EAhAEm/3EAhAE2/64AhAE4/4UAhAE6/4UAhAFH/9cAhAH6/64AhAH8/64AhAH+/64AhAIA/4UAhAIH/3EAhAIL/3EAhAJf/9cAhANJ/9cAhANL/9cAhANN/9cAhANP/9cAhANR/9cAhANT/9cAhANV/9cAhANX/9cAhANZ/9cAhANb/9cAhANd/9cAhANf/9cAhANv/4UAhANx/4UAhANz/4UAhAOP/3EAhQAF/3EAhQAK/3EAhQAm/9cAhQAq/9cAhQAtAQoAhQAy/9cAhQA0/9cAhQA3/3EAhQA5/64AhQA6/64AhQA8/4UAhQCJ/9cAhQCU/9cAhQCV/9cAhQCW/9cAhQCX/9cAhQCY/9cAhQCa/9cAhQCf/4UAhQDI/9cAhQDK/9cAhQDM/9cAhQDO/9cAhQDe/9cAhQDg/9cAhQDi/9cAhQDk/9cAhQEO/9cAhQEQ/9cAhQES/9cAhQEU/9cAhQEk/3EAhQEm/3EAhQE2/64AhQE4/4UAhQE6/4UAhQFH/9cAhQH6/64AhQH8/64AhQH+/64AhQIA/4UAhQIH/3EAhQIL/3EAhQJf/9cAhQNJ/9cAhQNL/9cAhQNN/9cAhQNP/9cAhQNR/9cAhQNT/9cAhQNV/9cAhQNX/9cAhQNZ/9cAhQNb/9cAhQNd/9cAhQNf/9cAhQNv/4UAhQNx/4UAhQNz/4UAhQOP/3EAhgAF/3EAhgAK/3EAhgAm/9cAhgAq/9cAhgAtAQoAhgAy/9cAhgA0/9cAhgA3/3EAhgA5/64AhgA6/64AhgA8/4UAhgCJ/9cAhgCU/9cAhgCV/9cAhgCW/9cAhgCX/9cAhgCY/9cAhgCa/9cAhgCf/4UAhgDI/9cAhgDK/9cAhgDM/9cAhgDO/9cAhgDe/9cAhgDg/9cAhgDi/9cAhgDk/9cAhgEO/9cAhgEQ/9cAhgES/9cAhgEU/9cAhgEk/3EAhgEm/3EAhgE2/64AhgE4/4UAhgE6/4UAhgFH/9cAhgH6/64AhgH8/64AhgH+/64AhgIA/4UAhgIH/3EAhgIL/3EAhgJf/9cAhgNJ/9cAhgNL/9cAhgNN/9cAhgNP/9cAhgNR/9cAhgNT/9cAhgNV/9cAhgNX/9cAhgNZ/9cAhgNb/9cAhgNd/9cAhgNf/9cAhgNv/4UAhgNx/4UAhgNz/4UAhgOP/3EAhwAF/3EAhwAK/3EAhwAm/9cAhwAq/9cAhwAtAQoAhwAy/9cAhwA0/9cAhwA3/3EAhwA5/64AhwA6/64AhwA8/4UAhwCJ/9cAhwCU/9cAhwCV/9cAhwCW/9cAhwCX/9cAhwCY/9cAhwCa/9cAhwCf/4UAhwDI/9cAhwDK/9cAhwDM/9cAhwDO/9cAhwDe/9cAhwDg/9cAhwDi/9cAhwDk/9cAhwEO/9cAhwEQ/9cAhwES/9cAhwEU/9cAhwEk/3EAhwEm/3EAhwE2/64AhwE4/4UAhwE6/4UAhwFH/9cAhwH6/64AhwH8/64AhwH+/64AhwIA/4UAhwIH/3EAhwIL/3EAhwJf/9cAhwNJ/9cAhwNL/9cAhwNN/9cAhwNP/9cAhwNR/9cAhwNT/9cAhwNV/9cAhwNX/9cAhwNZ/9cAhwNb/9cAhwNd/9cAhwNf/9cAhwNv/4UAhwNx/4UAhwNz/4UAhwOP/3EAiAAtAHsAiQAm/9cAiQAq/9cAiQAy/9cAiQA0/9cAiQCJ/9cAiQCU/9cAiQCV/9cAiQCW/9cAiQCX/9cAiQCY/9cAiQCa/9cAiQDI/9cAiQDK/9cAiQDM/9cAiQDO/9cAiQDe/9cAiQDg/9cAiQDi/9cAiQDk/9cAiQEO/9cAiQEQ/9cAiQES/9cAiQEU/9cAiQFH/9cAiQJf/9cAiQNJ/9cAiQNL/9cAiQNN/9cAiQNP/9cAiQNR/9cAiQNT/9cAiQNV/9cAiQNX/9cAiQNZ/9cAiQNb/9cAiQNd/9cAiQNf/9cAigAtAHsAiwAtAHsAjAAtAHsAjQAtAHsAkgAP/64AkgAR/64AkgAk/9cAkgA3/8MAkgA5/+wAkgA6/+wAkgA7/9cAkgA8/+wAkgA9/+wAkgCC/9cAkgCD/9cAkgCE/9cAkgCF/9cAkgCG/9cAkgCH/9cAkgCf/+wAkgDC/9cAkgDE/9cAkgDG/9cAkgEk/8MAkgEm/8MAkgE2/+wAkgE4/+wAkgE6/+wAkgE7/+wAkgE9/+wAkgE//+wAkgFD/9cAkgGg/+wAkgH6/+wAkgH8/+wAkgH+/+wAkgIA/+wAkgII/64AkgIM/64AkgJY/9cAkgMd/9cAkgMf/9cAkgMh/9cAkgMj/9cAkgMl/9cAkgMn/9cAkgMp/9cAkgMr/9cAkgMt/9cAkgMv/9cAkgMx/9cAkgMz/9cAkgNv/+wAkgNx/+wAkgNz/+wAkgOP/8MAlAAP/64AlAAR/64AlAAk/9cAlAA3/8MAlAA5/+wAlAA6/+wAlAA7/9cAlAA8/+wAlAA9/+wAlACC/9cAlACD/9cAlACE/9cAlACF/9cAlACG/9cAlACH/9cAlACf/+wAlADC/9cAlADE/9cAlADG/9cAlAEk/8MAlAEm/8MAlAE2/+wAlAE4/+wAlAE6/+wAlAE7/+wAlAE9/+wAlAE//+wAlAFD/9cAlAGg/+wAlAH6/+wAlAH8/+wAlAH+/+wAlAIA/+wAlAII/64AlAIM/64AlAJY/9cAlAMd/9cAlAMf/9cAlAMh/9cAlAMj/9cAlAMl/9cAlAMn/9cAlAMp/9cAlAMr/9cAlAMt/9cAlAMv/9cAlAMx/9cAlAMz/9cAlANv/+wAlANx/+wAlANz/+wAlAOP/8MAlQAP/64AlQAR/64AlQAk/9cAlQA3/8MAlQA5/+wAlQA6/+wAlQA7/9cAlQA8/+wAlQA9/+wAlQCC/9cAlQCD/9cAlQCE/9cAlQCF/9cAlQCG/9cAlQCH/9cAlQCf/+wAlQDC/9cAlQDE/9cAlQDG/9cAlQEk/8MAlQEm/8MAlQE2/+wAlQE4/+wAlQE6/+wAlQE7/+wAlQE9/+wAlQE//+wAlQFD/9cAlQGg/+wAlQH6/+wAlQH8/+wAlQH+/+wAlQIA/+wAlQII/64AlQIM/64AlQJY/9cAlQMd/9cAlQMf/9cAlQMh/9cAlQMj/9cAlQMl/9cAlQMn/9cAlQMp/9cAlQMr/9cAlQMt/9cAlQMv/9cAlQMx/9cAlQMz/9cAlQNv/+wAlQNx/+wAlQNz/+wAlQOP/8MAlgAP/64AlgAR/64AlgAk/9cAlgA3/8MAlgA5/+wAlgA6/+wAlgA7/9cAlgA8/+wAlgA9/+wAlgCC/9cAlgCD/9cAlgCE/9cAlgCF/9cAlgCG/9cAlgCH/9cAlgCf/+wAlgDC/9cAlgDE/9cAlgDG/9cAlgEk/8MAlgEm/8MAlgE2/+wAlgE4/+wAlgE6/+wAlgE7/+wAlgE9/+wAlgE//+wAlgFD/9cAlgGg/+wAlgH6/+wAlgH8/+wAlgH+/+wAlgIA/+wAlgII/64AlgIM/64AlgJY/9cAlgMd/9cAlgMf/9cAlgMh/9cAlgMj/9cAlgMl/9cAlgMn/9cAlgMp/9cAlgMr/9cAlgMt/9cAlgMv/9cAlgMx/9cAlgMz/9cAlgNv/+wAlgNx/+wAlgNz/+wAlgOP/8MAlwAP/64AlwAR/64AlwAk/9cAlwA3/8MAlwA5/+wAlwA6/+wAlwA7/9cAlwA8/+wAlwA9/+wAlwCC/9cAlwCD/9cAlwCE/9cAlwCF/9cAlwCG/9cAlwCH/9cAlwCf/+wAlwDC/9cAlwDE/9cAlwDG/9cAlwEk/8MAlwEm/8MAlwE2/+wAlwE4/+wAlwE6/+wAlwE7/+wAlwE9/+wAlwE//+wAlwFD/9cAlwGg/+wAlwH6/+wAlwH8/+wAlwH+/+wAlwIA/+wAlwII/64AlwIM/64AlwJY/9cAlwMd/9cAlwMf/9cAlwMh/9cAlwMj/9cAlwMl/9cAlwMn/9cAlwMp/9cAlwMr/9cAlwMt/9cAlwMv/9cAlwMx/9cAlwMz/9cAlwNv/+wAlwNx/+wAlwNz/+wAlwOP/8MAmAAP/64AmAAR/64AmAAk/9cAmAA3/8MAmAA5/+wAmAA6/+wAmAA7/9cAmAA8/+wAmAA9/+wAmACC/9cAmACD/9cAmACE/9cAmACF/9cAmACG/9cAmACH/9cAmACf/+wAmADC/9cAmADE/9cAmADG/9cAmAEk/8MAmAEm/8MAmAE2/+wAmAE4/+wAmAE6/+wAmAE7/+wAmAE9/+wAmAE//+wAmAFD/9cAmAGg/+wAmAH6/+wAmAH8/+wAmAH+/+wAmAIA/+wAmAII/64AmAIM/64AmAJY/9cAmAMd/9cAmAMf/9cAmAMh/9cAmAMj/9cAmAMl/9cAmAMn/9cAmAMp/9cAmAMr/9cAmAMt/9cAmAMv/9cAmAMx/9cAmAMz/9cAmANv/+wAmANx/+wAmANz/+wAmAOP/8MAmgAP/64AmgAR/64AmgAk/9cAmgA3/8MAmgA5/+wAmgA6/+wAmgA7/9cAmgA8/+wAmgA9/+wAmgCC/9cAmgCD/9cAmgCE/9cAmgCF/9cAmgCG/9cAmgCH/9cAmgCf/+wAmgDC/9cAmgDE/9cAmgDG/9cAmgEk/8MAmgEm/8MAmgE2/+wAmgE4/+wAmgE6/+wAmgE7/+wAmgE9/+wAmgE//+wAmgFD/9cAmgGg/+wAmgH6/+wAmgH8/+wAmgH+/+wAmgIA/+wAmgII/64AmgIM/64AmgJY/9cAmgMd/9cAmgMf/9cAmgMh/9cAmgMj/9cAmgMl/9cAmgMn/9cAmgMp/9cAmgMr/9cAmgMt/9cAmgMv/9cAmgMx/9cAmgMz/9cAmgNv/+wAmgNx/+wAmgNz/+wAmgOP/8MAmwAP/9cAmwAR/9cAmwAk/+wAmwCC/+wAmwCD/+wAmwCE/+wAmwCF/+wAmwCG/+wAmwCH/+wAmwDC/+wAmwDE/+wAmwDG/+wAmwFD/+wAmwII/9cAmwIM/9cAmwJY/+wAmwMd/+wAmwMf/+wAmwMh/+wAmwMj/+wAmwMl/+wAmwMn/+wAmwMp/+wAmwMr/+wAmwMt/+wAmwMv/+wAmwMx/+wAmwMz/+wAnAAP/9cAnAAR/9cAnAAk/+wAnACC/+wAnACD/+wAnACE/+wAnACF/+wAnACG/+wAnACH/+wAnADC/+wAnADE/+wAnADG/+wAnAFD/+wAnAII/9cAnAIM/9cAnAJY/+wAnAMd/+wAnAMf/+wAnAMh/+wAnAMj/+wAnAMl/+wAnAMn/+wAnAMp/+wAnAMr/+wAnAMt/+wAnAMv/+wAnAMx/+wAnAMz/+wAnQAP/9cAnQAR/9cAnQAk/+wAnQCC/+wAnQCD/+wAnQCE/+wAnQCF/+wAnQCG/+wAnQCH/+wAnQDC/+wAnQDE/+wAnQDG/+wAnQFD/+wAnQII/9cAnQIM/9cAnQJY/+wAnQMd/+wAnQMf/+wAnQMh/+wAnQMj/+wAnQMl/+wAnQMn/+wAnQMp/+wAnQMr/+wAnQMt/+wAnQMv/+wAnQMx/+wAnQMz/+wAngAP/9cAngAR/9cAngAk/+wAngCC/+wAngCD/+wAngCE/+wAngCF/+wAngCG/+wAngCH/+wAngDC/+wAngDE/+wAngDG/+wAngFD/+wAngII/9cAngIM/9cAngJY/+wAngMd/+wAngMf/+wAngMh/+wAngMj/+wAngMl/+wAngMn/+wAngMp/+wAngMr/+wAngMt/+wAngMv/+wAngMx/+wAngMz/+wAnwAP/4UAnwAR/4UAnwAiACkAnwAk/4UAnwAm/9cAnwAq/9cAnwAy/9cAnwA0/9cAnwBE/5oAnwBG/5oAnwBH/5oAnwBI/5oAnwBK/9cAnwBQ/8MAnwBR/8MAnwBS/5oAnwBT/8MAnwBU/5oAnwBV/8MAnwBW/64AnwBY/8MAnwBd/9cAnwCC/4UAnwCD/4UAnwCE/4UAnwCF/4UAnwCG/4UAnwCH/4UAnwCJ/9cAnwCU/9cAnwCV/9cAnwCW/9cAnwCX/9cAnwCY/9cAnwCa/9cAnwCi/5oAnwCj/5oAnwCk/5oAnwCl/5oAnwCm/5oAnwCn/5oAnwCo/5oAnwCp/5oAnwCq/5oAnwCr/5oAnwCs/5oAnwCt/5oAnwC0/5oAnwC1/5oAnwC2/5oAnwC3/5oAnwC4/5oAnwC6/5oAnwC7/8MAnwC8/8MAnwC9/8MAnwC+/8MAnwDC/4UAnwDD/5oAnwDE/4UAnwDF/5oAnwDG/4UAnwDH/5oAnwDI/9cAnwDJ/5oAnwDK/9cAnwDL/5oAnwDM/9cAnwDN/5oAnwDO/9cAnwDP/5oAnwDR/5oAnwDT/5oAnwDV/5oAnwDX/5oAnwDZ/5oAnwDb/5oAnwDd/5oAnwDe/9cAnwDf/9cAnwDg/9cAnwDh/9cAnwDi/9cAnwDj/9cAnwDk/9cAnwDl/9cAnwD6/8MAnwEG/8MAnwEI/8MAnwEN/8MAnwEO/9cAnwEP/5oAnwEQ/9cAnwER/5oAnwES/9cAnwET/5oAnwEU/9cAnwEV/5oAnwEX/8MAnwEZ/8MAnwEd/64AnwEh/64AnwEr/8MAnwEt/8MAnwEv/8MAnwEx/8MAnwEz/8MAnwE1/8MAnwE8/9cAnwE+/9cAnwFA/9cAnwFD/4UAnwFE/5oAnwFG/5oAnwFH/9cAnwFI/5oAnwFK/64AnwII/4UAnwIM/4UAnwJX/8MAnwJY/4UAnwJZ/5oAnwJf/9cAnwJg/5oAnwJi/8MAnwMd/4UAnwMe/5oAnwMf/4UAnwMg/5oAnwMh/4UAnwMi/5oAnwMj/4UAnwMl/4UAnwMm/5oAnwMn/4UAnwMo/5oAnwMp/4UAnwMq/5oAnwMr/4UAnwMs/5oAnwMt/4UAnwMu/5oAnwMv/4UAnwMw/5oAnwMx/4UAnwMy/5oAnwMz/4UAnwM0/5oAnwM2/5oAnwM4/5oAnwM6/5oAnwM8/5oAnwNA/5oAnwNC/5oAnwNE/5oAnwNJ/9cAnwNK/5oAnwNL/9cAnwNM/5oAnwNN/9cAnwNO/5oAnwNP/9cAnwNR/9cAnwNS/5oAnwNT/9cAnwNU/5oAnwNV/9cAnwNW/5oAnwNX/9cAnwNY/5oAnwNZ/9cAnwNa/5oAnwNb/9cAnwNc/5oAnwNd/9cAnwNe/5oAnwNf/9cAnwNg/5oAnwNi/8MAnwNk/8MAnwNm/8MAnwNo/8MAnwNq/8MAnwNs/8MAnwNu/8MAoAAP/vYAoAAR/vYAoAAk/5oAoAA7/9cAoAA9/+wAoACC/5oAoACD/5oAoACE/5oAoACF/5oAoACG/5oAoACH/5oAoADC/5oAoADE/5oAoADG/5oAoAE7/+wAoAE9/+wAoAE//+wAoAFD/5oAoAII/vYAoAIM/vYAoAJY/5oAoAMd/5oAoAMf/5oAoAMh/5oAoAMj/5oAoAMl/5oAoAMn/5oAoAMp/5oAoAMr/5oAoAMt/5oAoAMv/5oAoAMx/5oAoAMz/5oAogAF/+wAogAK/+wAogIH/+wAogIL/+wAowAF/+wAowAK/+wAowIH/+wAowIL/+wApAAF/+wApAAK/+wApAIH/+wApAIL/+wApQAF/+wApQAK/+wApQIH/+wApQIL/+wApgAF/+wApgAK/+wApgIH/+wApgIL/+wApwAF/+wApwAK/+wApwIH/+wApwIL/+wAqgAF/+wAqgAK/+wAqgBZ/9cAqgBa/9cAqgBb/9cAqgBc/9cAqgBd/+wAqgC//9cAqgE3/9cAqgE8/+wAqgE+/+wAqgFA/+wAqgH7/9cAqgH9/9cAqgIH/+wAqgIL/+wAqgNw/9cAqwAF/+wAqwAK/+wAqwBZ/9cAqwBa/9cAqwBb/9cAqwBc/9cAqwBd/+wAqwC//9cAqwE3/9cAqwE8/+wAqwE+/+wAqwFA/+wAqwH7/9cAqwH9/9cAqwIH/+wAqwIL/+wAqwNw/9cArAAF/+wArAAK/+wArABZ/9cArABa/9cArABb/9cArABc/9cArABd/+wArAC//9cArAE3/9cArAE8/+wArAE+/+wArAFA/+wArAH7/9cArAH9/9cArAIH/+wArAIL/+wArANw/9cArQAF/+wArQAK/+wArQBZ/9cArQBa/9cArQBb/9cArQBc/9cArQBd/+wArQC//9cArQE3/9cArQE8/+wArQE+/+wArQFA/+wArQH7/9cArQH9/9cArQIH/+wArQIL/+wArQNw/9cAsgAF/+wAsgAK/+wAsgBZ/9cAsgBa/9cAsgBb/9cAsgBc/9cAsgBd/+wAsgC//9cAsgE3/9cAsgE8/+wAsgE+/+wAsgFA/+wAsgH7/9cAsgH9/9cAsgIH/+wAsgIL/+wAsgNw/9cAtAAF/+wAtAAK/+wAtABZ/9cAtABa/9cAtABb/9cAtABc/9cAtABd/+wAtAC//9cAtAE3/9cAtAE8/+wAtAE+/+wAtAFA/+wAtAH7/9cAtAH9/9cAtAIH/+wAtAIL/+wAtANw/9cAtQAF/+wAtQAK/+wAtQBZ/9cAtQBa/9cAtQBb/9cAtQBc/9cAtQBd/+wAtQC//9cAtQE3/9cAtQE8/+wAtQE+/+wAtQFA/+wAtQH7/9cAtQH9/9cAtQIH/+wAtQIL/+wAtQNw/9cAtgAF/+wAtgAK/+wAtgBZ/9cAtgBa/9cAtgBb/9cAtgBc/9cAtgBd/+wAtgC//9cAtgE3/9cAtgE8/+wAtgE+/+wAtgFA/+wAtgH7/9cAtgH9/9cAtgIH/+wAtgIL/+wAtgNw/9cAuAAF/9cAuAAK/9cAuAIH/9cAuAIL/9cAugAF/+wAugAK/+wAugBZ/9cAugBa/9cAugBb/9cAugBc/9cAugBd/+wAugC//9cAugE3/9cAugE8/+wAugE+/+wAugFA/+wAugH7/9cAugH9/9cAugIH/+wAugIL/+wAugNw/9cAvwAFAFIAvwAKAFIAvwAP/64AvwAR/64AvwAiACkAvwIHAFIAvwII/64AvwILAFIAvwIM/64AwAAF/+wAwAAK/+wAwABZ/9cAwABa/9cAwABb/9cAwABc/9cAwABd/+wAwAC//9cAwAE3/9cAwAE8/+wAwAE+/+wAwAFA/+wAwAH7/9cAwAH9/9cAwAIH/+wAwAIL/+wAwANw/9cAwQAFAFIAwQAKAFIAwQAP/64AwQAR/64AwQAiACkAwQIHAFIAwQII/64AwQILAFIAwQIM/64AwgAF/3EAwgAK/3EAwgAm/9cAwgAq/9cAwgAtAQoAwgAy/9cAwgA0/9cAwgA3/3EAwgA5/64AwgA6/64AwgA8/4UAwgCJ/9cAwgCU/9cAwgCV/9cAwgCW/9cAwgCX/9cAwgCY/9cAwgCa/9cAwgCf/4UAwgDI/9cAwgDK/9cAwgDM/9cAwgDO/9cAwgDe/9cAwgDg/9cAwgDi/9cAwgDk/9cAwgEO/9cAwgEQ/9cAwgES/9cAwgEU/9cAwgEk/3EAwgEm/3EAwgE2/64AwgE4/4UAwgE6/4UAwgFH/9cAwgH6/64AwgH8/64AwgH+/64AwgIA/4UAwgIH/3EAwgIL/3EAwgJf/9cAwgNJ/9cAwgNL/9cAwgNN/9cAwgNP/9cAwgNR/9cAwgNT/9cAwgNV/9cAwgNX/9cAwgNZ/9cAwgNb/9cAwgNd/9cAwgNf/9cAwgNv/4UAwgNx/4UAwgNz/4UAwgOP/3EAwwAF/+wAwwAK/+wAwwIH/+wAwwIL/+wAxAAF/3EAxAAK/3EAxAAm/9cAxAAq/9cAxAAtAQoAxAAy/9cAxAA0/9cAxAA3/3EAxAA5/64AxAA6/64AxAA8/4UAxACJ/9cAxACU/9cAxACV/9cAxACW/9cAxACX/9cAxACY/9cAxACa/9cAxACf/4UAxADI/9cAxADK/9cAxADM/9cAxADO/9cAxADe/9cAxADg/9cAxADi/9cAxADk/9cAxAEO/9cAxAEQ/9cAxAES/9cAxAEU/9cAxAEk/3EAxAEm/3EAxAE2/64AxAE4/4UAxAE6/4UAxAFH/9cAxAH6/64AxAH8/64AxAH+/64AxAIA/4UAxAIH/3EAxAIL/3EAxAJf/9cAxANJ/9cAxANL/9cAxANN/9cAxANP/9cAxANR/9cAxANT/9cAxANV/9cAxANX/9cAxANZ/9cAxANb/9cAxANd/9cAxANf/9cAxANv/4UAxANx/4UAxANz/4UAxAOP/3EAxQAF/+wAxQAK/+wAxQIH/+wAxQIL/+wAxgAF/3EAxgAK/3EAxgAm/9cAxgAq/9cAxgAtAQoAxgAy/9cAxgA0/9cAxgA3/3EAxgA5/64AxgA6/64AxgA8/4UAxgCJ/9cAxgCU/9cAxgCV/9cAxgCW/9cAxgCX/9cAxgCY/9cAxgCa/9cAxgCf/4UAxgDI/9cAxgDK/9cAxgDM/9cAxgDO/9cAxgDe/9cAxgDg/9cAxgDi/9cAxgDk/9cAxgEO/9cAxgEQ/9cAxgES/9cAxgEU/9cAxgEk/3EAxgEm/3EAxgE2/64AxgE4/4UAxgE6/4UAxgFH/9cAxgH6/64AxgH8/64AxgH+/64AxgIA/4UAxgIH/3EAxgIL/3EAxgJf/9cAxgNJ/9cAxgNL/9cAxgNN/9cAxgNP/9cAxgNR/9cAxgNT/9cAxgNV/9cAxgNX/9cAxgNZ/9cAxgNb/9cAxgNd/9cAxgNf/9cAxgNv/4UAxgNx/4UAxgNz/4UAxgOP/3EAxwAF/+wAxwAK/+wAxwIH/+wAxwIL/+wAyAAm/9cAyAAq/9cAyAAy/9cAyAA0/9cAyACJ/9cAyACU/9cAyACV/9cAyACW/9cAyACX/9cAyACY/9cAyACa/9cAyADI/9cAyADK/9cAyADM/9cAyADO/9cAyADe/9cAyADg/9cAyADi/9cAyADk/9cAyAEO/9cAyAEQ/9cAyAES/9cAyAEU/9cAyAFH/9cAyAJf/9cAyANJ/9cAyANL/9cAyANN/9cAyANP/9cAyANR/9cAyANT/9cAyANV/9cAyANX/9cAyANZ/9cAyANb/9cAyANd/9cAyANf/9cAygAm/9cAygAq/9cAygAy/9cAygA0/9cAygCJ/9cAygCU/9cAygCV/9cAygCW/9cAygCX/9cAygCY/9cAygCa/9cAygDI/9cAygDK/9cAygDM/9cAygDO/9cAygDe/9cAygDg/9cAygDi/9cAygDk/9cAygEO/9cAygEQ/9cAygES/9cAygEU/9cAygFH/9cAygJf/9cAygNJ/9cAygNL/9cAygNN/9cAygNP/9cAygNR/9cAygNT/9cAygNV/9cAygNX/9cAygNZ/9cAygNb/9cAygNd/9cAygNf/9cAzAAm/9cAzAAq/9cAzAAy/9cAzAA0/9cAzACJ/9cAzACU/9cAzACV/9cAzACW/9cAzACX/9cAzACY/9cAzACa/9cAzADI/9cAzADK/9cAzADM/9cAzADO/9cAzADe/9cAzADg/9cAzADi/9cAzADk/9cAzAEO/9cAzAEQ/9cAzAES/9cAzAEU/9cAzAFH/9cAzAJf/9cAzANJ/9cAzANL/9cAzANN/9cAzANP/9cAzANR/9cAzANT/9cAzANV/9cAzANX/9cAzANZ/9cAzANb/9cAzANd/9cAzANf/9cAzgAm/9cAzgAq/9cAzgAy/9cAzgA0/9cAzgCJ/9cAzgCU/9cAzgCV/9cAzgCW/9cAzgCX/9cAzgCY/9cAzgCa/9cAzgDI/9cAzgDK/9cAzgDM/9cAzgDO/9cAzgDe/9cAzgDg/9cAzgDi/9cAzgDk/9cAzgEO/9cAzgEQ/9cAzgES/9cAzgEU/9cAzgFH/9cAzgJf/9cAzgNJ/9cAzgNL/9cAzgNN/9cAzgNP/9cAzgNR/9cAzgNT/9cAzgNV/9cAzgNX/9cAzgNZ/9cAzgNb/9cAzgNd/9cAzgNf/9cA0AAP/64A0AAR/64A0AAk/9cA0AA3/8MA0AA5/+wA0AA6/+wA0AA7/9cA0AA8/+wA0AA9/+wA0ACC/9cA0ACD/9cA0ACE/9cA0ACF/9cA0ACG/9cA0ACH/9cA0ACf/+wA0ADC/9cA0ADE/9cA0ADG/9cA0AEk/8MA0AEm/8MA0AE2/+wA0AE4/+wA0AE6/+wA0AE7/+wA0AE9/+wA0AE//+wA0AFD/9cA0AGg/+wA0AH6/+wA0AH8/+wA0AH+/+wA0AIA/+wA0AII/64A0AIM/64A0AJY/9cA0AMd/9cA0AMf/9cA0AMh/9cA0AMj/9cA0AMl/9cA0AMn/9cA0AMp/9cA0AMr/9cA0AMt/9cA0AMv/9cA0AMx/9cA0AMz/9cA0ANv/+wA0ANx/+wA0ANz/+wA0AOP/8MA0QAFAFIA0QAKAFIA0QAMAI8A0QAiAKQA0QBAAI8A0QBFAD0A0QBLAD0A0QBOAD0A0QBPAD0A0QBgAI8A0QDnAD0A0QDpAHsA0QIHAFIA0QILAFIA0gAP/64A0gAR/64A0gAk/9cA0gA3/8MA0gA5/+wA0gA6/+wA0gA7/9cA0gA8/+wA0gA9/+wA0gCC/9cA0gCD/9cA0gCE/9cA0gCF/9cA0gCG/9cA0gCH/9cA0gCf/+wA0gDC/9cA0gDE/9cA0gDG/9cA0gEk/8MA0gEm/8MA0gE2/+wA0gE4/+wA0gE6/+wA0gE7/+wA0gE9/+wA0gE//+wA0gFD/9cA0gGg/+wA0gH6/+wA0gH8/+wA0gH+/+wA0gIA/+wA0gII/64A0gIM/64A0gJY/9cA0gMd/9cA0gMf/9cA0gMh/9cA0gMj/9cA0gMl/9cA0gMn/9cA0gMp/9cA0gMr/9cA0gMt/9cA0gMv/9cA0gMx/9cA0gMz/9cA0gNv/+wA0gNx/+wA0gNz/+wA0gOP/8MA1AAtAHsA1QAF/+wA1QAK/+wA1QBZ/9cA1QBa/9cA1QBb/9cA1QBc/9cA1QBd/+wA1QC//9cA1QE3/9cA1QE8/+wA1QE+/+wA1QFA/+wA1QH7/9cA1QH9/9cA1QIH/+wA1QIL/+wA1QNw/9cA1gAtAHsA1wAF/+wA1wAK/+wA1wBZ/9cA1wBa/9cA1wBb/9cA1wBc/9cA1wBd/+wA1wC//9cA1wE3/9cA1wE8/+wA1wE+/+wA1wFA/+wA1wH7/9cA1wH9/9cA1wIH/+wA1wIL/+wA1wNw/9cA2AAtAHsA2QAF/+wA2QAK/+wA2QBZ/9cA2QBa/9cA2QBb/9cA2QBc/9cA2QBd/+wA2QC//9cA2QE3/9cA2QE8/+wA2QE+/+wA2QFA/+wA2QH7/9cA2QH9/9cA2QIH/+wA2QIL/+wA2QNw/9cA2gAtAHsA2wAF/+wA2wAK/+wA2wBZ/9cA2wBa/9cA2wBb/9cA2wBc/9cA2wBd/+wA2wC//9cA2wE3/9cA2wE8/+wA2wE+/+wA2wFA/+wA2wH7/9cA2wH9/9cA2wIH/+wA2wIL/+wA2wNw/9cA3AAtAHsA3QAF/+wA3QAK/+wA3QBZ/9cA3QBa/9cA3QBb/9cA3QBc/9cA3QBd/+wA3QC//9cA3QE3/9cA3QE8/+wA3QE+/+wA3QFA/+wA3QH7/9cA3QH9/9cA3QIH/+wA3QIL/+wA3QNw/9cA5wAF/+wA5wAK/+wA5wIH/+wA5wIL/+wA+AAm/9cA+AAq/9cA+AAy/9cA+AA0/9cA+ACJ/9cA+ACU/9cA+ACV/9cA+ACW/9cA+ACX/9cA+ACY/9cA+ACa/9cA+ADI/9cA+ADK/9cA+ADM/9cA+ADO/9cA+ADe/9cA+ADg/9cA+ADi/9cA+ADk/9cA+AEO/9cA+AEQ/9cA+AES/9cA+AEU/9cA+AFH/9cA+AJf/9cA+ANJ/9cA+ANL/9cA+ANN/9cA+ANP/9cA+ANR/9cA+ANT/9cA+ANV/9cA+ANX/9cA+ANZ/9cA+ANb/9cA+ANd/9cA+ANf/9cA+QBG/9cA+QBH/9cA+QBI/9cA+QBS/9cA+QBU/9cA+QCi/9cA+QCp/9cA+QCq/9cA+QCr/9cA+QCs/9cA+QCt/9cA+QC0/9cA+QC1/9cA+QC2/9cA+QC3/9cA+QC4/9cA+QC6/9cA+QDJ/9cA+QDL/9cA+QDN/9cA+QDP/9cA+QDR/9cA+QDT/9cA+QDV/9cA+QDX/9cA+QDZ/9cA+QDb/9cA+QDd/9cA+QEP/9cA+QER/9cA+QET/9cA+QEV/9cA+QFI/9cA+QJg/9cA+QM2/9cA+QM4/9cA+QM6/9cA+QM8/9cA+QNA/9cA+QNC/9cA+QNE/9cA+QNK/9cA+QNM/9cA+QNO/9cA+QNS/9cA+QNU/9cA+QNW/9cA+QNY/9cA+QNa/9cA+QNc/9cA+QNe/9cA+QNg/9cA+gBG/9cA+gBH/9cA+gBI/9cA+gBS/9cA+gBU/9cA+gCi/9cA+gCp/9cA+gCq/9cA+gCr/9cA+gCs/9cA+gCt/9cA+gC0/9cA+gC1/9cA+gC2/9cA+gC3/9cA+gC4/9cA+gC6/9cA+gDJ/9cA+gDL/9cA+gDN/9cA+gDP/9cA+gDR/9cA+gDT/9cA+gDV/9cA+gDX/9cA+gDZ/9cA+gDb/9cA+gDd/9cA+gEP/9cA+gER/9cA+gET/9cA+gEV/9cA+gFI/9cA+gJg/9cA+gM2/9cA+gM4/9cA+gM6/9cA+gM8/9cA+gNA/9cA+gNC/9cA+gNE/9cA+gNK/9cA+gNM/9cA+gNO/9cA+gNS/9cA+gNU/9cA+gNW/9cA+gNY/9cA+gNa/9cA+gNc/9cA+gNe/9cA+gNg/9cA+wAF/1wA+wAK/1wA+wAm/9cA+wAq/9cA+wAy/9cA+wA0/9cA+wA3/9cA+wA4/+wA+wA5/9cA+wA6/9cA+wA8/8MA+wCJ/9cA+wCU/9cA+wCV/9cA+wCW/9cA+wCX/9cA+wCY/9cA+wCa/9cA+wCb/+wA+wCc/+wA+wCd/+wA+wCe/+wA+wCf/8MA+wDI/9cA+wDK/9cA+wDM/9cA+wDO/9cA+wDe/9cA+wDg/9cA+wDi/9cA+wDk/9cA+wEO/9cA+wEQ/9cA+wES/9cA+wEU/9cA+wEk/9cA+wEm/9cA+wEq/+wA+wEs/+wA+wEu/+wA+wEw/+wA+wEy/+wA+wE0/+wA+wE2/9cA+wE4/8MA+wE6/8MA+wFH/9cA+wH6/9cA+wH8/9cA+wH+/9cA+wIA/8MA+wIH/1wA+wIL/1wA+wJf/9cA+wJh/+wA+wNJ/9cA+wNL/9cA+wNN/9cA+wNP/9cA+wNR/9cA+wNT/9cA+wNV/9cA+wNX/9cA+wNZ/9cA+wNb/9cA+wNd/9cA+wNf/9cA+wNh/+wA+wNj/+wA+wNl/+wA+wNn/+wA+wNp/+wA+wNr/+wA+wNt/+wA+wNv/8MA+wNx/8MA+wNz/8MA+wOP/9cA/QAF/1wA/QAK/1wA/QAm/9cA/QAq/9cA/QAy/9cA/QA0/9cA/QA3/9cA/QA4/+wA/QA5/9cA/QA6/9cA/QA8/8MA/QCJ/9cA/QCU/9cA/QCV/9cA/QCW/9cA/QCX/9cA/QCY/9cA/QCa/9cA/QCb/+wA/QCc/+wA/QCd/+wA/QCe/+wA/QCf/8MA/QDI/9cA/QDK/9cA/QDM/9cA/QDO/9cA/QDe/9cA/QDg/9cA/QDi/9cA/QDk/9cA/QEO/9cA/QEQ/9cA/QES/9cA/QEU/9cA/QEk/9cA/QEm/9cA/QEq/+wA/QEs/+wA/QEu/+wA/QEw/+wA/QEy/+wA/QE0/+wA/QE2/9cA/QE4/8MA/QE6/8MA/QFH/9cA/QH6/9cA/QH8/9cA/QH+/9cA/QIA/8MA/QIH/1wA/QIL/1wA/QJf/9cA/QJh/+wA/QNJ/9cA/QNL/9cA/QNN/9cA/QNP/9cA/QNR/9cA/QNT/9cA/QNV/9cA/QNX/9cA/QNZ/9cA/QNb/9cA/QNd/9cA/QNf/9cA/QNh/+wA/QNj/+wA/QNl/+wA/QNn/+wA/QNp/+wA/QNr/+wA/QNt/+wA/QNv/8MA/QNx/8MA/QNz/8MA/QOP/9cA/wAF/1wA/wAK/1wA/wAm/9cA/wAq/9cA/wAy/9cA/wA0/9cA/wA3/9cA/wA4/+wA/wA5/9cA/wA6/9cA/wA8/8MA/wCJ/9cA/wCU/9cA/wCV/9cA/wCW/9cA/wCX/9cA/wCY/9cA/wCa/9cA/wCb/+wA/wCc/+wA/wCd/+wA/wCe/+wA/wCf/8MA/wDI/9cA/wDK/9cA/wDM/9cA/wDO/9cA/wDe/9cA/wDg/9cA/wDi/9cA/wDk/9cA/wEO/9cA/wEQ/9cA/wES/9cA/wEU/9cA/wEk/9cA/wEm/9cA/wEq/+wA/wEs/+wA/wEu/+wA/wEw/+wA/wEy/+wA/wE0/+wA/wE2/9cA/wE4/8MA/wE6/8MA/wFH/9cA/wH6/9cA/wH8/9cA/wH+/9cA/wIA/8MA/wIH/1wA/wIL/1wA/wJf/9cA/wJh/+wA/wNJ/9cA/wNL/9cA/wNN/9cA/wNP/9cA/wNR/9cA/wNT/9cA/wNV/9cA/wNX/9cA/wNZ/9cA/wNb/9cA/wNd/9cA/wNf/9cA/wNh/+wA/wNj/+wA/wNl/+wA/wNn/+wA/wNp/+wA/wNr/+wA/wNt/+wA/wNv/8MA/wNx/8MA/wNz/8MA/wOP/9cBAAAFAFIBAAAKAFIBAAAMAI8BAAAiAI8BAABAAI8BAABFAD0BAABLAD0BAABOAD0BAABPAD0BAABgAI8BAADnAD0BAADpAI8BAAIHAFIBAAILAFIBAQAF/1wBAQAK/1wBAQAm/9cBAQAq/9cBAQAy/9cBAQA0/9cBAQA3/9cBAQA4/+wBAQA5/9cBAQA6/9cBAQA8/8MBAQCJ/9cBAQCU/9cBAQCV/9cBAQCW/9cBAQCX/9cBAQCY/9cBAQCa/9cBAQCb/+wBAQCc/+wBAQCd/+wBAQCe/+wBAQCf/8MBAQDI/9cBAQDK/9cBAQDM/9cBAQDO/9cBAQDe/9cBAQDg/9cBAQDi/9cBAQDk/9cBAQEO/9cBAQEQ/9cBAQES/9cBAQEU/9cBAQEk/9cBAQEm/9cBAQEq/+wBAQEs/+wBAQEu/+wBAQEw/+wBAQEy/+wBAQE0/+wBAQE2/9cBAQE4/8MBAQE6/8MBAQFH/9cBAQH6/9cBAQH8/9cBAQH+/9cBAQIA/8MBAQIH/1wBAQIL/1wBAQJf/9cBAQJh/+wBAQNJ/9cBAQNL/9cBAQNN/9cBAQNP/9cBAQNR/9cBAQNT/9cBAQNV/9cBAQNX/9cBAQNZ/9cBAQNb/9cBAQNd/9cBAQNf/9cBAQNh/+wBAQNj/+wBAQNl/+wBAQNn/+wBAQNp/+wBAQNr/+wBAQNt/+wBAQNv/8MBAQNx/8MBAQNz/8MBAQOP/9cBAwAF/1wBAwAK/1wBAwAm/9cBAwAq/9cBAwAy/9cBAwA0/9cBAwA3/9cBAwA4/+wBAwA5/9cBAwA6/9cBAwA8/8MBAwCJ/9cBAwCU/9cBAwCV/9cBAwCW/9cBAwCX/9cBAwCY/9cBAwCa/9cBAwCb/+wBAwCc/+wBAwCd/+wBAwCe/+wBAwCf/8MBAwDI/9cBAwDK/9cBAwDM/9cBAwDO/9cBAwDe/9cBAwDg/9cBAwDi/9cBAwDk/9cBAwEO/9cBAwEQ/9cBAwES/9cBAwEU/9cBAwEk/9cBAwEm/9cBAwEq/+wBAwEs/+wBAwEu/+wBAwEw/+wBAwEy/+wBAwE0/+wBAwE2/9cBAwE4/8MBAwE6/8MBAwFH/9cBAwH6/9cBAwH8/9cBAwH+/9cBAwIA/8MBAwIH/1wBAwIL/1wBAwJf/9cBAwJh/+wBAwNJ/9cBAwNL/9cBAwNN/9cBAwNP/9cBAwNR/9cBAwNT/9cBAwNV/9cBAwNX/9cBAwNZ/9cBAwNb/9cBAwNd/9cBAwNf/9cBAwNh/+wBAwNj/+wBAwNl/+wBAwNn/+wBAwNp/+wBAwNr/+wBAwNt/+wBAwNv/8MBAwNx/8MBAwNz/8MBAwOP/9cBCAAF/+wBCAAK/+wBCAIH/+wBCAIL/+wBDgAP/64BDgAR/64BDgAk/9cBDgA3/8MBDgA5/+wBDgA6/+wBDgA7/9cBDgA8/+wBDgA9/+wBDgCC/9cBDgCD/9cBDgCE/9cBDgCF/9cBDgCG/9cBDgCH/9cBDgCf/+wBDgDC/9cBDgDE/9cBDgDG/9cBDgEk/8MBDgEm/8MBDgE2/+wBDgE4/+wBDgE6/+wBDgE7/+wBDgE9/+wBDgE//+wBDgFD/9cBDgGg/+wBDgH6/+wBDgH8/+wBDgH+/+wBDgIA/+wBDgII/64BDgIM/64BDgJY/9cBDgMd/9cBDgMf/9cBDgMh/9cBDgMj/9cBDgMl/9cBDgMn/9cBDgMp/9cBDgMr/9cBDgMt/9cBDgMv/9cBDgMx/9cBDgMz/9cBDgNv/+wBDgNx/+wBDgNz/+wBDgOP/8MBEAAP/64BEAAR/64BEAAk/9cBEAA3/8MBEAA5/+wBEAA6/+wBEAA7/9cBEAA8/+wBEAA9/+wBEACC/9cBEACD/9cBEACE/9cBEACF/9cBEACG/9cBEACH/9cBEACf/+wBEADC/9cBEADE/9cBEADG/9cBEAEk/8MBEAEm/8MBEAE2/+wBEAE4/+wBEAE6/+wBEAE7/+wBEAE9/+wBEAE//+wBEAFD/9cBEAGg/+wBEAH6/+wBEAH8/+wBEAH+/+wBEAIA/+wBEAII/64BEAIM/64BEAJY/9cBEAMd/9cBEAMf/9cBEAMh/9cBEAMj/9cBEAMl/9cBEAMn/9cBEAMp/9cBEAMr/9cBEAMt/9cBEAMv/9cBEAMx/9cBEAMz/9cBEANv/+wBEANx/+wBEANz/+wBEAOP/8MBEgAP/64BEgAR/64BEgAk/9cBEgA3/8MBEgA5/+wBEgA6/+wBEgA7/9cBEgA8/+wBEgA9/+wBEgCC/9cBEgCD/9cBEgCE/9cBEgCF/9cBEgCG/9cBEgCH/9cBEgCf/+wBEgDC/9cBEgDE/9cBEgDG/9cBEgEk/8MBEgEm/8MBEgE2/+wBEgE4/+wBEgE6/+wBEgE7/+wBEgE9/+wBEgE//+wBEgFD/9cBEgGg/+wBEgH6/+wBEgH8/+wBEgH+/+wBEgIA/+wBEgII/64BEgIM/64BEgJY/9cBEgMd/9cBEgMf/9cBEgMh/9cBEgMj/9cBEgMl/9cBEgMn/9cBEgMp/9cBEgMr/9cBEgMt/9cBEgMv/9cBEgMx/9cBEgMz/9cBEgNv/+wBEgNx/+wBEgNz/+wBEgOP/8MBFAAtAHsBFwAFAFIBFwAKAFIBFwBE/9cBFwBG/9cBFwBH/9cBFwBI/9cBFwBK/+wBFwBS/9cBFwBU/9cBFwCi/9cBFwCj/9cBFwCk/9cBFwCl/9cBFwCm/9cBFwCn/9cBFwCo/9cBFwCp/9cBFwCq/9cBFwCr/9cBFwCs/9cBFwCt/9cBFwC0/9cBFwC1/9cBFwC2/9cBFwC3/9cBFwC4/9cBFwC6/9cBFwDD/9cBFwDF/9cBFwDH/9cBFwDJ/9cBFwDL/9cBFwDN/9cBFwDP/9cBFwDR/9cBFwDT/9cBFwDV/9cBFwDX/9cBFwDZ/9cBFwDb/9cBFwDd/9cBFwDf/+wBFwDh/+wBFwDj/+wBFwDl/+wBFwEP/9cBFwER/9cBFwET/9cBFwEV/9cBFwFE/9cBFwFG/9cBFwFI/9cBFwIHAFIBFwILAFIBFwJZ/9cBFwJg/9cBFwMe/9cBFwMg/9cBFwMi/9cBFwMm/9cBFwMo/9cBFwMq/9cBFwMs/9cBFwMu/9cBFwMw/9cBFwMy/9cBFwM0/9cBFwM2/9cBFwM4/9cBFwM6/9cBFwM8/9cBFwNA/9cBFwNC/9cBFwNE/9cBFwNK/9cBFwNM/9cBFwNO/9cBFwNS/9cBFwNU/9cBFwNW/9cBFwNY/9cBFwNa/9cBFwNc/9cBFwNe/9cBFwNg/9cBGQAFAFIBGQAKAFIBGQBE/9cBGQBG/9cBGQBH/9cBGQBI/9cBGQBK/+wBGQBS/9cBGQBU/9cBGQCi/9cBGQCj/9cBGQCk/9cBGQCl/9cBGQCm/9cBGQCn/9cBGQCo/9cBGQCp/9cBGQCq/9cBGQCr/9cBGQCs/9cBGQCt/9cBGQC0/9cBGQC1/9cBGQC2/9cBGQC3/9cBGQC4/9cBGQC6/9cBGQDD/9cBGQDF/9cBGQDH/9cBGQDJ/9cBGQDL/9cBGQDN/9cBGQDP/9cBGQDR/9cBGQDT/9cBGQDV/9cBGQDX/9cBGQDZ/9cBGQDb/9cBGQDd/9cBGQDf/+wBGQDh/+wBGQDj/+wBGQDl/+wBGQEP/9cBGQER/9cBGQET/9cBGQEV/9cBGQFE/9cBGQFG/9cBGQFI/9cBGQIHAFIBGQILAFIBGQJZ/9cBGQJg/9cBGQMe/9cBGQMg/9cBGQMi/9cBGQMm/9cBGQMo/9cBGQMq/9cBGQMs/9cBGQMu/9cBGQMw/9cBGQMy/9cBGQM0/9cBGQM2/9cBGQM4/9cBGQM6/9cBGQM8/9cBGQNA/9cBGQNC/9cBGQNE/9cBGQNK/9cBGQNM/9cBGQNO/9cBGQNS/9cBGQNU/9cBGQNW/9cBGQNY/9cBGQNa/9cBGQNc/9cBGQNe/9cBGQNg/9cBGwAFAFIBGwAKAFIBGwBE/9cBGwBG/9cBGwBH/9cBGwBI/9cBGwBK/+wBGwBS/9cBGwBU/9cBGwCi/9cBGwCj/9cBGwCk/9cBGwCl/9cBGwCm/9cBGwCn/9cBGwCo/9cBGwCp/9cBGwCq/9cBGwCr/9cBGwCs/9cBGwCt/9cBGwC0/9cBGwC1/9cBGwC2/9cBGwC3/9cBGwC4/9cBGwC6/9cBGwDD/9cBGwDF/9cBGwDH/9cBGwDJ/9cBGwDL/9cBGwDN/9cBGwDP/9cBGwDR/9cBGwDT/9cBGwDV/9cBGwDX/9cBGwDZ/9cBGwDb/9cBGwDd/9cBGwDf/+wBGwDh/+wBGwDj/+wBGwDl/+wBGwEP/9cBGwER/9cBGwET/9cBGwEV/9cBGwFE/9cBGwFG/9cBGwFI/9cBGwIHAFIBGwILAFIBGwJZ/9cBGwJg/9cBGwMe/9cBGwMg/9cBGwMi/9cBGwMm/9cBGwMo/9cBGwMq/9cBGwMs/9cBGwMu/9cBGwMw/9cBGwMy/9cBGwM0/9cBGwM2/9cBGwM4/9cBGwM6/9cBGwM8/9cBGwNA/9cBGwNC/9cBGwNE/9cBGwNK/9cBGwNM/9cBGwNO/9cBGwNS/9cBGwNU/9cBGwNW/9cBGwNY/9cBGwNa/9cBGwNc/9cBGwNe/9cBGwNg/9cBJAAP/4UBJAAQ/64BJAAR/4UBJAAiACkBJAAk/3EBJAAm/9cBJAAq/9cBJAAy/9cBJAA0/9cBJAA3ACkBJABE/1wBJABG/3EBJABH/3EBJABI/3EBJABK/3EBJABQ/5oBJABR/5oBJABS/3EBJABT/5oBJABU/3EBJABV/5oBJABW/4UBJABY/5oBJABZ/9cBJABa/9cBJABb/9cBJABc/9cBJABd/64BJACC/3EBJACD/3EBJACE/3EBJACF/3EBJACG/3EBJACH/3EBJACJ/9cBJACU/9cBJACV/9cBJACW/9cBJACX/9cBJACY/9cBJACa/9cBJACi/3EBJACj/1wBJACk/1wBJACl/1wBJACm/1wBJACn/1wBJACo/1wBJACp/3EBJACq/3EBJACr/3EBJACs/3EBJACt/3EBJAC0/3EBJAC1/3EBJAC2/3EBJAC3/3EBJAC4/3EBJAC6/3EBJAC7/5oBJAC8/5oBJAC9/5oBJAC+/5oBJAC//9cBJADC/3EBJADD/1wBJADE/3EBJADF/1wBJADG/3EBJADH/1wBJADI/9cBJADJ/3EBJADK/9cBJADL/3EBJADM/9cBJADN/3EBJADO/9cBJADP/3EBJADR/3EBJADT/3EBJADV/3EBJADX/3EBJADZ/3EBJADb/3EBJADd/3EBJADe/9cBJADf/3EBJADg/9cBJADh/3EBJADi/9cBJADj/3EBJADk/9cBJADl/3EBJAD6/5oBJAEG/5oBJAEI/5oBJAEN/5oBJAEO/9cBJAEP/3EBJAEQ/9cBJAER/3EBJAES/9cBJAET/3EBJAEU/9cBJAEV/3EBJAEX/5oBJAEZ/5oBJAEd/4UBJAEh/4UBJAEkACkBJAEmACkBJAEr/5oBJAEt/5oBJAEv/5oBJAEx/5oBJAEz/5oBJAE1/5oBJAE3/9cBJAE8/64BJAE+/64BJAFA/64BJAFD/3EBJAFE/1wBJAFG/1wBJAFH/9cBJAFI/3EBJAFK/4UBJAH7/9cBJAH9/9cBJAIC/64BJAID/64BJAIE/64BJAII/4UBJAIM/4UBJAJX/5oBJAJY/3EBJAJZ/1wBJAJf/9cBJAJg/3EBJAJi/5oBJAMd/3EBJAMe/1wBJAMf/3EBJAMg/1wBJAMh/3EBJAMi/1wBJAMj/3EBJAMl/3EBJAMm/1wBJAMn/3EBJAMo/1wBJAMp/3EBJAMq/1wBJAMr/3EBJAMs/1wBJAMt/3EBJAMu/1wBJAMv/3EBJAMw/1wBJAMx/3EBJAMy/1wBJAMz/3EBJAM0/1wBJAM2/3EBJAM4/3EBJAM6/3EBJAM8/3EBJANA/3EBJANC/3EBJANE/3EBJANJ/9cBJANK/3EBJANL/9cBJANM/3EBJANN/9cBJANO/3EBJANP/9cBJANR/9cBJANS/3EBJANT/9cBJANU/3EBJANV/9cBJANW/3EBJANX/9cBJANY/3EBJANZ/9cBJANa/3EBJANb/9cBJANc/3EBJANd/9cBJANe/3EBJANf/9cBJANg/3EBJANi/5oBJANk/5oBJANm/5oBJANo/5oBJANq/5oBJANs/5oBJANu/5oBJANw/9cBJAOPACkBJQAFACkBJQAKACkBJQIHACkBJQILACkBJgAP/4UBJgAQ/64BJgAR/4UBJgAiACkBJgAk/3EBJgAm/9cBJgAq/9cBJgAy/9cBJgA0/9cBJgA3ACkBJgBE/1wBJgBG/3EBJgBH/3EBJgBI/3EBJgBK/3EBJgBQ/5oBJgBR/5oBJgBS/3EBJgBT/5oBJgBU/3EBJgBV/5oBJgBW/4UBJgBY/5oBJgBZ/9cBJgBa/9cBJgBb/9cBJgBc/9cBJgBd/64BJgCC/3EBJgCD/3EBJgCE/3EBJgCF/3EBJgCG/3EBJgCH/3EBJgCJ/9cBJgCU/9cBJgCV/9cBJgCW/9cBJgCX/9cBJgCY/9cBJgCa/9cBJgCi/3EBJgCj/1wBJgCk/1wBJgCl/1wBJgCm/1wBJgCn/1wBJgCo/1wBJgCp/3EBJgCq/3EBJgCr/3EBJgCs/3EBJgCt/3EBJgC0/3EBJgC1/3EBJgC2/3EBJgC3/3EBJgC4/3EBJgC6/3EBJgC7/5oBJgC8/5oBJgC9/5oBJgC+/5oBJgC//9cBJgDC/3EBJgDD/1wBJgDE/3EBJgDF/1wBJgDG/3EBJgDH/1wBJgDI/9cBJgDJ/3EBJgDK/9cBJgDL/3EBJgDM/9cBJgDN/3EBJgDO/9cBJgDP/3EBJgDR/3EBJgDT/3EBJgDV/3EBJgDX/3EBJgDZ/3EBJgDb/3EBJgDd/3EBJgDe/9cBJgDf/3EBJgDg/9cBJgDh/3EBJgDi/9cBJgDj/3EBJgDk/9cBJgDl/3EBJgD6/5oBJgEG/5oBJgEI/5oBJgEN/5oBJgEO/9cBJgEP/3EBJgEQ/9cBJgER/3EBJgES/9cBJgET/3EBJgEU/9cBJgEV/3EBJgEX/5oBJgEZ/5oBJgEd/4UBJgEh/4UBJgEkACkBJgEmACkBJgEr/5oBJgEt/5oBJgEv/5oBJgEx/5oBJgEz/5oBJgE1/5oBJgE3/9cBJgE8/64BJgE+/64BJgFA/64BJgFD/3EBJgFE/1wBJgFG/1wBJgFH/9cBJgFI/3EBJgFK/4UBJgH7/9cBJgH9/9cBJgIC/64BJgID/64BJgIE/64BJgII/4UBJgIM/4UBJgJX/5oBJgJY/3EBJgJZ/1wBJgJf/9cBJgJg/3EBJgJi/5oBJgMd/3EBJgMe/1wBJgMf/3EBJgMg/1wBJgMh/3EBJgMi/1wBJgMj/3EBJgMl/3EBJgMm/1wBJgMn/3EBJgMo/1wBJgMp/3EBJgMq/1wBJgMr/3EBJgMs/1wBJgMt/3EBJgMu/1wBJgMv/3EBJgMw/1wBJgMx/3EBJgMy/1wBJgMz/3EBJgM0/1wBJgM2/3EBJgM4/3EBJgM6/3EBJgM8/3EBJgNA/3EBJgNC/3EBJgNE/3EBJgNJ/9cBJgNK/3EBJgNL/9cBJgNM/3EBJgNN/9cBJgNO/3EBJgNP/9cBJgNR/9cBJgNS/3EBJgNT/9cBJgNU/3EBJgNV/9cBJgNW/3EBJgNX/9cBJgNY/3EBJgNZ/9cBJgNa/3EBJgNb/9cBJgNc/3EBJgNd/9cBJgNe/3EBJgNf/9cBJgNg/3EBJgNi/5oBJgNk/5oBJgNm/5oBJgNo/5oBJgNq/5oBJgNs/5oBJgNu/5oBJgNw/9cBJgOPACkBJwAFACkBJwAKACkBJwIHACkBJwILACkBKAAP/4UBKAAQ/64BKAAR/4UBKAAiACkBKAAk/3EBKAAm/9cBKAAq/9cBKAAy/9cBKAA0/9cBKAA3ACkBKABE/1wBKABG/3EBKABH/3EBKABI/3EBKABK/3EBKABQ/5oBKABR/5oBKABS/3EBKABT/5oBKABU/3EBKABV/5oBKABW/4UBKABY/5oBKABZ/9cBKABa/9cBKABb/9cBKABc/9cBKABd/64BKACC/3EBKACD/3EBKACE/3EBKACF/3EBKACG/3EBKACH/3EBKACJ/9cBKACU/9cBKACV/9cBKACW/9cBKACX/9cBKACY/9cBKACa/9cBKACi/3EBKACj/1wBKACk/1wBKACl/1wBKACm/1wBKACn/1wBKACo/1wBKACp/3EBKACq/3EBKACr/3EBKACs/3EBKACt/3EBKAC0/3EBKAC1/3EBKAC2/3EBKAC3/3EBKAC4/3EBKAC6/3EBKAC7/5oBKAC8/5oBKAC9/5oBKAC+/5oBKAC//9cBKADC/3EBKADD/1wBKADE/3EBKADF/1wBKADG/3EBKADH/1wBKADI/9cBKADJ/3EBKADK/9cBKADL/3EBKADM/9cBKADN/3EBKADO/9cBKADP/3EBKADR/3EBKADT/3EBKADV/3EBKADX/3EBKADZ/3EBKADb/3EBKADd/3EBKADe/9cBKADf/3EBKADg/9cBKADh/3EBKADi/9cBKADj/3EBKADk/9cBKADl/3EBKAD6/5oBKAEG/5oBKAEI/5oBKAEN/5oBKAEO/9cBKAEP/3EBKAEQ/9cBKAER/3EBKAES/9cBKAET/3EBKAEU/9cBKAEV/3EBKAEX/5oBKAEZ/5oBKAEd/4UBKAEh/4UBKAEkACkBKAEmACkBKAEr/5oBKAEt/5oBKAEv/5oBKAEx/5oBKAEz/5oBKAE1/5oBKAE3/9cBKAE8/64BKAE+/64BKAFA/64BKAFD/3EBKAFE/1wBKAFG/1wBKAFH/9cBKAFI/3EBKAFK/4UBKAH7/9cBKAH9/9cBKAIC/64BKAID/64BKAIE/64BKAII/4UBKAIM/4UBKAJX/5oBKAJY/3EBKAJZ/1wBKAJf/9cBKAJg/3EBKAJi/5oBKAMd/3EBKAMe/1wBKAMf/3EBKAMg/1wBKAMh/3EBKAMi/1wBKAMj/3EBKAMl/3EBKAMm/1wBKAMn/3EBKAMo/1wBKAMp/3EBKAMq/1wBKAMr/3EBKAMs/1wBKAMt/3EBKAMu/1wBKAMv/3EBKAMw/1wBKAMx/3EBKAMy/1wBKAMz/3EBKAM0/1wBKAM2/3EBKAM4/3EBKAM6/3EBKAM8/3EBKANA/3EBKANC/3EBKANE/3EBKANJ/9cBKANK/3EBKANL/9cBKANM/3EBKANN/9cBKANO/3EBKANP/9cBKANR/9cBKANS/3EBKANT/9cBKANU/3EBKANV/9cBKANW/3EBKANX/9cBKANY/3EBKANZ/9cBKANa/3EBKANb/9cBKANc/3EBKANd/9cBKANe/3EBKANf/9cBKANg/3EBKANi/5oBKANk/5oBKANm/5oBKANo/5oBKANq/5oBKANs/5oBKANu/5oBKANw/9cBKAOPACkBKgAP/9cBKgAR/9cBKgAk/+wBKgCC/+wBKgCD/+wBKgCE/+wBKgCF/+wBKgCG/+wBKgCH/+wBKgDC/+wBKgDE/+wBKgDG/+wBKgFD/+wBKgII/9cBKgIM/9cBKgJY/+wBKgMd/+wBKgMf/+wBKgMh/+wBKgMj/+wBKgMl/+wBKgMn/+wBKgMp/+wBKgMr/+wBKgMt/+wBKgMv/+wBKgMx/+wBKgMz/+wBLAAP/9cBLAAR/9cBLAAk/+wBLACC/+wBLACD/+wBLACE/+wBLACF/+wBLACG/+wBLACH/+wBLADC/+wBLADE/+wBLADG/+wBLAFD/+wBLAII/9cBLAIM/9cBLAJY/+wBLAMd/+wBLAMf/+wBLAMh/+wBLAMj/+wBLAMl/+wBLAMn/+wBLAMp/+wBLAMr/+wBLAMt/+wBLAMv/+wBLAMx/+wBLAMz/+wBLgAP/9cBLgAR/9cBLgAk/+wBLgCC/+wBLgCD/+wBLgCE/+wBLgCF/+wBLgCG/+wBLgCH/+wBLgDC/+wBLgDE/+wBLgDG/+wBLgFD/+wBLgII/9cBLgIM/9cBLgJY/+wBLgMd/+wBLgMf/+wBLgMh/+wBLgMj/+wBLgMl/+wBLgMn/+wBLgMp/+wBLgMr/+wBLgMt/+wBLgMv/+wBLgMx/+wBLgMz/+wBMAAP/9cBMAAR/9cBMAAk/+wBMACC/+wBMACD/+wBMACE/+wBMACF/+wBMACG/+wBMACH/+wBMADC/+wBMADE/+wBMADG/+wBMAFD/+wBMAII/9cBMAIM/9cBMAJY/+wBMAMd/+wBMAMf/+wBMAMh/+wBMAMj/+wBMAMl/+wBMAMn/+wBMAMp/+wBMAMr/+wBMAMt/+wBMAMv/+wBMAMx/+wBMAMz/+wBMgAP/9cBMgAR/9cBMgAk/+wBMgCC/+wBMgCD/+wBMgCE/+wBMgCF/+wBMgCG/+wBMgCH/+wBMgDC/+wBMgDE/+wBMgDG/+wBMgFD/+wBMgII/9cBMgIM/9cBMgJY/+wBMgMd/+wBMgMf/+wBMgMh/+wBMgMj/+wBMgMl/+wBMgMn/+wBMgMp/+wBMgMr/+wBMgMt/+wBMgMv/+wBMgMx/+wBMgMz/+wBNAAP/9cBNAAR/9cBNAAk/+wBNACC/+wBNACD/+wBNACE/+wBNACF/+wBNACG/+wBNACH/+wBNADC/+wBNADE/+wBNADG/+wBNAFD/+wBNAII/9cBNAIM/9cBNAJY/+wBNAMd/+wBNAMf/+wBNAMh/+wBNAMj/+wBNAMl/+wBNAMn/+wBNAMp/+wBNAMr/+wBNAMt/+wBNAMv/+wBNAMx/+wBNAMz/+wBNgAP/5oBNgAR/5oBNgAiACkBNgAk/64BNgAm/+wBNgAq/+wBNgAy/+wBNgA0/+wBNgBE/9cBNgBG/9cBNgBH/9cBNgBI/9cBNgBK/+wBNgBQ/+wBNgBR/+wBNgBS/9cBNgBT/+wBNgBU/9cBNgBV/+wBNgBW/+wBNgBY/+wBNgCC/64BNgCD/64BNgCE/64BNgCF/64BNgCG/64BNgCH/64BNgCJ/+wBNgCU/+wBNgCV/+wBNgCW/+wBNgCX/+wBNgCY/+wBNgCa/+wBNgCi/9cBNgCj/9cBNgCk/9cBNgCl/9cBNgCm/9cBNgCn/9cBNgCo/9cBNgCp/9cBNgCq/9cBNgCr/9cBNgCs/9cBNgCt/9cBNgC0/9cBNgC1/9cBNgC2/9cBNgC3/9cBNgC4/9cBNgC6/9cBNgC7/+wBNgC8/+wBNgC9/+wBNgC+/+wBNgDC/64BNgDD/9cBNgDE/64BNgDF/9cBNgDG/64BNgDH/9cBNgDI/+wBNgDJ/9cBNgDK/+wBNgDL/9cBNgDM/+wBNgDN/9cBNgDO/+wBNgDP/9cBNgDR/9cBNgDT/9cBNgDV/9cBNgDX/9cBNgDZ/9cBNgDb/9cBNgDd/9cBNgDe/+wBNgDf/+wBNgDg/+wBNgDh/+wBNgDi/+wBNgDj/+wBNgDk/+wBNgDl/+wBNgD6/+wBNgEG/+wBNgEI/+wBNgEN/+wBNgEO/+wBNgEP/9cBNgEQ/+wBNgER/9cBNgES/+wBNgET/9cBNgEU/+wBNgEV/9cBNgEX/+wBNgEZ/+wBNgEd/+wBNgEh/+wBNgEr/+wBNgEt/+wBNgEv/+wBNgEx/+wBNgEz/+wBNgE1/+wBNgFD/64BNgFE/9cBNgFG/9cBNgFH/+wBNgFI/9cBNgFK/+wBNgII/5oBNgIM/5oBNgJX/+wBNgJY/64BNgJZ/9cBNgJf/+wBNgJg/9cBNgJi/+wBNgMd/64BNgMe/9cBNgMf/64BNgMg/9cBNgMh/64BNgMi/9cBNgMj/64BNgMl/64BNgMm/9cBNgMn/64BNgMo/9cBNgMp/64BNgMq/9cBNgMr/64BNgMs/9cBNgMt/64BNgMu/9cBNgMv/64BNgMw/9cBNgMx/64BNgMy/9cBNgMz/64BNgM0/9cBNgM2/9cBNgM4/9cBNgM6/9cBNgM8/9cBNgNA/9cBNgNC/9cBNgNE/9cBNgNJ/+wBNgNK/9cBNgNL/+wBNgNM/9cBNgNN/+wBNgNO/9cBNgNP/+wBNgNR/+wBNgNS/9cBNgNT/+wBNgNU/9cBNgNV/+wBNgNW/9cBNgNX/+wBNgNY/9cBNgNZ/+wBNgNa/9cBNgNb/+wBNgNc/9cBNgNd/+wBNgNe/9cBNgNf/+wBNgNg/9cBNgNi/+wBNgNk/+wBNgNm/+wBNgNo/+wBNgNq/+wBNgNs/+wBNgNu/+wBNwAFAFIBNwAKAFIBNwAP/64BNwAR/64BNwAiACkBNwIHAFIBNwII/64BNwILAFIBNwIM/64BOAAP/4UBOAAR/4UBOAAiACkBOAAk/4UBOAAm/9cBOAAq/9cBOAAy/9cBOAA0/9cBOABE/5oBOABG/5oBOABH/5oBOABI/5oBOABK/9cBOABQ/8MBOABR/8MBOABS/5oBOABT/8MBOABU/5oBOABV/8MBOABW/64BOABY/8MBOABd/9cBOACC/4UBOACD/4UBOACE/4UBOACF/4UBOACG/4UBOACH/4UBOACJ/9cBOACU/9cBOACV/9cBOACW/9cBOACX/9cBOACY/9cBOACa/9cBOACi/5oBOACj/5oBOACk/5oBOACl/5oBOACm/5oBOACn/5oBOACo/5oBOACp/5oBOACq/5oBOACr/5oBOACs/5oBOACt/5oBOAC0/5oBOAC1/5oBOAC2/5oBOAC3/5oBOAC4/5oBOAC6/5oBOAC7/8MBOAC8/8MBOAC9/8MBOAC+/8MBOADC/4UBOADD/5oBOADE/4UBOADF/5oBOADG/4UBOADH/5oBOADI/9cBOADJ/5oBOADK/9cBOADL/5oBOADM/9cBOADN/5oBOADO/9cBOADP/5oBOADR/5oBOADT/5oBOADV/5oBOADX/5oBOADZ/5oBOADb/5oBOADd/5oBOADe/9cBOADf/9cBOADg/9cBOADh/9cBOADi/9cBOADj/9cBOADk/9cBOADl/9cBOAD6/8MBOAEG/8MBOAEI/8MBOAEN/8MBOAEO/9cBOAEP/5oBOAEQ/9cBOAER/5oBOAES/9cBOAET/5oBOAEU/9cBOAEV/5oBOAEX/8MBOAEZ/8MBOAEd/64BOAEh/64BOAEr/8MBOAEt/8MBOAEv/8MBOAEx/8MBOAEz/8MBOAE1/8MBOAE8/9cBOAE+/9cBOAFA/9cBOAFD/4UBOAFE/5oBOAFG/5oBOAFH/9cBOAFI/5oBOAFK/64BOAII/4UBOAIM/4UBOAJX/8MBOAJY/4UBOAJZ/5oBOAJf/9cBOAJg/5oBOAJi/8MBOAMd/4UBOAMe/5oBOAMf/4UBOAMg/5oBOAMh/4UBOAMi/5oBOAMj/4UBOAMl/4UBOAMm/5oBOAMn/4UBOAMo/5oBOAMp/4UBOAMq/5oBOAMr/4UBOAMs/5oBOAMt/4UBOAMu/5oBOAMv/4UBOAMw/5oBOAMx/4UBOAMy/5oBOAMz/4UBOAM0/5oBOAM2/5oBOAM4/5oBOAM6/5oBOAM8/5oBOANA/5oBOANC/5oBOANE/5oBOANJ/9cBOANK/5oBOANL/9cBOANM/5oBOANN/9cBOANO/5oBOANP/9cBOANR/9cBOANS/5oBOANT/9cBOANU/5oBOANV/9cBOANW/5oBOANX/9cBOANY/5oBOANZ/9cBOANa/5oBOANb/9cBOANc/5oBOANd/9cBOANe/5oBOANf/9cBOANg/5oBOANi/8MBOANk/8MBOANm/8MBOANo/8MBOANq/8MBOANs/8MBOANu/8MBOQAFAFIBOQAKAFIBOQAP/64BOQAR/64BOQAiACkBOQIHAFIBOQII/64BOQILAFIBOQIM/64BOgAP/4UBOgAR/4UBOgAiACkBOgAk/4UBOgAm/9cBOgAq/9cBOgAy/9cBOgA0/9cBOgBE/5oBOgBG/5oBOgBH/5oBOgBI/5oBOgBK/9cBOgBQ/8MBOgBR/8MBOgBS/5oBOgBT/8MBOgBU/5oBOgBV/8MBOgBW/64BOgBY/8MBOgBd/9cBOgCC/4UBOgCD/4UBOgCE/4UBOgCF/4UBOgCG/4UBOgCH/4UBOgCJ/9cBOgCU/9cBOgCV/9cBOgCW/9cBOgCX/9cBOgCY/9cBOgCa/9cBOgCi/5oBOgCj/5oBOgCk/5oBOgCl/5oBOgCm/5oBOgCn/5oBOgCo/5oBOgCp/5oBOgCq/5oBOgCr/5oBOgCs/5oBOgCt/5oBOgC0/5oBOgC1/5oBOgC2/5oBOgC3/5oBOgC4/5oBOgC6/5oBOgC7/8MBOgC8/8MBOgC9/8MBOgC+/8MBOgDC/4UBOgDD/5oBOgDE/4UBOgDF/5oBOgDG/4UBOgDH/5oBOgDI/9cBOgDJ/5oBOgDK/9cBOgDL/5oBOgDM/9cBOgDN/5oBOgDO/9cBOgDP/5oBOgDR/5oBOgDT/5oBOgDV/5oBOgDX/5oBOgDZ/5oBOgDb/5oBOgDd/5oBOgDe/9cBOgDf/9cBOgDg/9cBOgDh/9cBOgDi/9cBOgDj/9cBOgDk/9cBOgDl/9cBOgD6/8MBOgEG/8MBOgEI/8MBOgEN/8MBOgEO/9cBOgEP/5oBOgEQ/9cBOgER/5oBOgES/9cBOgET/5oBOgEU/9cBOgEV/5oBOgEX/8MBOgEZ/8MBOgEd/64BOgEh/64BOgEr/8MBOgEt/8MBOgEv/8MBOgEx/8MBOgEz/8MBOgE1/8MBOgE8/9cBOgE+/9cBOgFA/9cBOgFD/4UBOgFE/5oBOgFG/5oBOgFH/9cBOgFI/5oBOgFK/64BOgII/4UBOgIM/4UBOgJX/8MBOgJY/4UBOgJZ/5oBOgJf/9cBOgJg/5oBOgJi/8MBOgMd/4UBOgMe/5oBOgMf/4UBOgMg/5oBOgMh/4UBOgMi/5oBOgMj/4UBOgMl/4UBOgMm/5oBOgMn/4UBOgMo/5oBOgMp/4UBOgMq/5oBOgMr/4UBOgMs/5oBOgMt/4UBOgMu/5oBOgMv/4UBOgMw/5oBOgMx/4UBOgMy/5oBOgMz/4UBOgM0/5oBOgM2/5oBOgM4/5oBOgM6/5oBOgM8/5oBOgNA/5oBOgNC/5oBOgNE/5oBOgNJ/9cBOgNK/5oBOgNL/9cBOgNM/5oBOgNN/9cBOgNO/5oBOgNP/9cBOgNR/9cBOgNS/5oBOgNT/9cBOgNU/5oBOgNV/9cBOgNW/5oBOgNX/9cBOgNY/5oBOgNZ/9cBOgNa/5oBOgNb/9cBOgNc/5oBOgNd/9cBOgNe/5oBOgNf/9cBOgNg/5oBOgNi/8MBOgNk/8MBOgNm/8MBOgNo/8MBOgNq/8MBOgNs/8MBOgNu/8MBOwAm/+wBOwAq/+wBOwAy/+wBOwA0/+wBOwCJ/+wBOwCU/+wBOwCV/+wBOwCW/+wBOwCX/+wBOwCY/+wBOwCa/+wBOwDI/+wBOwDK/+wBOwDM/+wBOwDO/+wBOwDe/+wBOwDg/+wBOwDi/+wBOwDk/+wBOwEO/+wBOwEQ/+wBOwES/+wBOwEU/+wBOwFH/+wBOwJf/+wBOwNJ/+wBOwNL/+wBOwNN/+wBOwNP/+wBOwNR/+wBOwNT/+wBOwNV/+wBOwNX/+wBOwNZ/+wBOwNb/+wBOwNd/+wBOwNf/+wBPQAm/+wBPQAq/+wBPQAy/+wBPQA0/+wBPQCJ/+wBPQCU/+wBPQCV/+wBPQCW/+wBPQCX/+wBPQCY/+wBPQCa/+wBPQDI/+wBPQDK/+wBPQDM/+wBPQDO/+wBPQDe/+wBPQDg/+wBPQDi/+wBPQDk/+wBPQEO/+wBPQEQ/+wBPQES/+wBPQEU/+wBPQFH/+wBPQJf/+wBPQNJ/+wBPQNL/+wBPQNN/+wBPQNP/+wBPQNR/+wBPQNT/+wBPQNV/+wBPQNX/+wBPQNZ/+wBPQNb/+wBPQNd/+wBPQNf/+wBPwAm/+wBPwAq/+wBPwAy/+wBPwA0/+wBPwCJ/+wBPwCU/+wBPwCV/+wBPwCW/+wBPwCX/+wBPwCY/+wBPwCa/+wBPwDI/+wBPwDK/+wBPwDM/+wBPwDO/+wBPwDe/+wBPwDg/+wBPwDi/+wBPwDk/+wBPwEO/+wBPwEQ/+wBPwES/+wBPwEU/+wBPwFH/+wBPwJf/+wBPwNJ/+wBPwNL/+wBPwNN/+wBPwNP/+wBPwNR/+wBPwNT/+wBPwNV/+wBPwNX/+wBPwNZ/+wBPwNb/+wBPwNd/+wBPwNf/+wBQwAF/3EBQwAK/3EBQwAm/9cBQwAq/9cBQwAtAQoBQwAy/9cBQwA0/9cBQwA3/3EBQwA5/64BQwA6/64BQwA8/4UBQwCJ/9cBQwCU/9cBQwCV/9cBQwCW/9cBQwCX/9cBQwCY/9cBQwCa/9cBQwCf/4UBQwDI/9cBQwDK/9cBQwDM/9cBQwDO/9cBQwDe/9cBQwDg/9cBQwDi/9cBQwDk/9cBQwEO/9cBQwEQ/9cBQwES/9cBQwEU/9cBQwEk/3EBQwEm/3EBQwE2/64BQwE4/4UBQwE6/4UBQwFH/9cBQwH6/64BQwH8/64BQwH+/64BQwIA/4UBQwIH/3EBQwIL/3EBQwJf/9cBQwNJ/9cBQwNL/9cBQwNN/9cBQwNP/9cBQwNR/9cBQwNT/9cBQwNV/9cBQwNX/9cBQwNZ/9cBQwNb/9cBQwNd/9cBQwNf/9cBQwNv/4UBQwNx/4UBQwNz/4UBQwOP/3EBRAAF/+wBRAAK/+wBRAIH/+wBRAIL/+wBRQAtAHsBRwAP/64BRwAR/64BRwAk/9cBRwA3/8MBRwA5/+wBRwA6/+wBRwA7/9cBRwA8/+wBRwA9/+wBRwCC/9cBRwCD/9cBRwCE/9cBRwCF/9cBRwCG/9cBRwCH/9cBRwCf/+wBRwDC/9cBRwDE/9cBRwDG/9cBRwEk/8MBRwEm/8MBRwE2/+wBRwE4/+wBRwE6/+wBRwE7/+wBRwE9/+wBRwE//+wBRwFD/9cBRwGg/+wBRwH6/+wBRwH8/+wBRwH+/+wBRwIA/+wBRwII/64BRwIM/64BRwJY/9cBRwMd/9cBRwMf/9cBRwMh/9cBRwMj/9cBRwMl/9cBRwMn/9cBRwMp/9cBRwMr/9cBRwMt/9cBRwMv/9cBRwMx/9cBRwMz/9cBRwNv/+wBRwNx/+wBRwNz/+wBRwOP/8MBVgAF/3EBVgAK/3EBVgFm/9cBVgFt/9cBVgFx/3EBVgFy/4UBVgFz/9cBVgF1/64BVgF4/4UBVgIH/3EBVgIL/3EBVgJU/4UBWwAP/64BWwAR/64BWwFW/9cBWwFf/9cBWwFi/9cBWwFk/+wBWwFp/9cBWwFw/+wBWwFx/8MBWwFy/+wBWwF0/9cBWwF1/+wBWwF4/+wBWwGI/+wBWwII/64BWwIM/64BWwJU/+wBXAAP/4UBXAAR/4UBXAFW/4UBXAFf/4UBXAFi/4UBXAFm/9cBXAFp/4UBXAFt/9cBXAFz/8MBXAF2/+wBXAF5/5oBXAF6/64BXAF7/8MBXAF8/8MBXAF9/8MBXAF+/5oBXAGB/8MBXAGC/64BXAGE/8MBXAGG/8MBXAGH/8MBXAGJ/8MBXAGM/5oBXAGO/5oBXAGP/5oBXAGQ/5oBXAGS/8MBXAGT/5oBXAGV/8MBXAGW/8MBXAGY/8MBXAGZ/5oBXAGa/8MBXAGb/8MBXAII/4UBXAIM/4UBXAIh/+wBXQFx/9cBXQFy/+wBXQF4/+wBXQJU/+wBXgAF/9cBXgAK/9cBXgIH/9cBXgIL/9cBXwAF/3EBXwAK/3EBXwFm/9cBXwFt/9cBXwFx/3EBXwFy/4UBXwFz/9cBXwF1/64BXwF4/4UBXwIH/3EBXwIL/3EBXwJU/4UBYAAP/64BYAAR/64BYAFW/9cBYAFf/9cBYAFi/9cBYAFp/9cBYAF0/9cBYAII/64BYAIM/64BYQAP/4UBYQAQ/64BYQAR/4UBYQFW/1wBYQFf/1wBYQFi/1wBYQFm/8MBYQFp/1wBYQFt/8MBYQFz/5oBYQF2/8MBYQF5/3EBYQF6/5oBYQF7/5oBYQF8/64BYQF9/5oBYQF+/3EBYQGA/9cBYQGB/8MBYQGC/5oBYQGE/5oBYQGG/64BYQGH/5oBYQGJ/5oBYQGK/9cBYQGM/3EBYQGO/5oBYQGP/3EBYQGQ/3EBYQGS/5oBYQGT/3EBYQGU/9cBYQGV/5oBYQGW/5oBYQGY/5oBYQGZ/3EBYQGa/5oBYQGb/5oBYQIC/64BYQID/64BYQIE/64BYQII/4UBYQIM/4UBYQIh/8MBYQJT/9cBYgAF/3EBYgAK/3EBYgFm/9cBYgFt/9cBYgFx/3EBYgFy/4UBYgFz/9cBYgF1/64BYgF4/4UBYgIH/3EBYgIL/3EBYgJU/4UBZAFm/+wBZAFt/+wBZAFz/8MBZgAP/64BZgAR/64BZgFW/9cBZgFf/9cBZgFi/9cBZgFk/+wBZgFp/9cBZgFw/+wBZgFx/8MBZgFy/+wBZgF0/9cBZgF1/+wBZgF4/+wBZgGI/+wBZgII/64BZgIM/64BZgJU/+wBaAFm/9cBaAFt/9cBaAFz/8MBaAGN/+wBaAGR/+wBaQAF/3EBaQAK/3EBaQFm/9cBaQFt/9cBaQFx/3EBaQFy/4UBaQFz/9cBaQF1/64BaQF4/4UBaQIH/3EBaQIL/3EBaQJU/4UBbQAP/64BbQAR/64BbQFW/9cBbQFf/9cBbQFi/9cBbQFk/+wBbQFp/9cBbQFw/+wBbQFx/8MBbQFy/+wBbQF0/9cBbQF1/+wBbQF4/+wBbQGI/+wBbQII/64BbQIM/64BbQJU/+wBbwAP/vYBbwAR/vYBbwFW/5oBbwFf/5oBbwFi/5oBbwFk/+wBbwFp/5oBbwF0/9cBbwGI/9cBbwII/vYBbwIM/vYBcQAP/4UBcQAQ/64BcQAR/4UBcQFW/1wBcQFf/1wBcQFi/1wBcQFm/8MBcQFp/1wBcQFt/8MBcQFz/5oBcQF2/8MBcQF5/3EBcQF6/5oBcQF7/5oBcQF8/64BcQF9/5oBcQF+/3EBcQGA/9cBcQGB/8MBcQGC/5oBcQGE/5oBcQGG/64BcQGH/5oBcQGJ/5oBcQGK/9cBcQGM/3EBcQGO/5oBcQGP/3EBcQGQ/3EBcQGS/5oBcQGT/3EBcQGU/9cBcQGV/5oBcQGW/5oBcQGY/5oBcQGZ/3EBcQGa/5oBcQGb/5oBcQIC/64BcQID/64BcQIE/64BcQII/4UBcQIM/4UBcQIh/8MBcQJT/9cBcgAP/4UBcgAR/4UBcgFW/4UBcgFf/4UBcgFi/4UBcgFm/9cBcgFp/4UBcgFt/9cBcgFz/8MBcgF2/+wBcgF5/5oBcgF6/64BcgF7/8MBcgF8/8MBcgF9/8MBcgF+/5oBcgGB/8MBcgGC/64BcgGE/8MBcgGG/8MBcgGH/8MBcgGJ/8MBcgGM/5oBcgGO/5oBcgGP/5oBcgGQ/5oBcgGS/8MBcgGT/5oBcgGV/8MBcgGW/8MBcgGY/8MBcgGZ/5oBcgGa/8MBcgGb/8MBcgII/4UBcgIM/4UBcgIh/+wBcwAP/5oBcwAR/5oBcwFW/9cBcwFf/9cBcwFi/9cBcwFk/8MBcwFp/9cBcwFw/+wBcwFx/64BcwFy/8MBcwF0/+wBcwF4/8MBcwGI/+wBcwII/5oBcwIM/5oBcwJU/8MBdAFm/9cBdAFt/9cBdAFz/8MBdAGN/+wBdAGR/+wBdQAP/4UBdQAR/4UBdQFW/64BdQFf/64BdQFi/64BdQFm/+wBdQFp/64BdQFt/+wBdQII/4UBdQIM/4UBdgFx/9cBdgFy/+wBdgF4/+wBdgJU/+wBeAAP/4UBeAAR/4UBeAFW/4UBeAFf/4UBeAFi/4UBeAFm/9cBeAFp/4UBeAFt/9cBeAFz/8MBeAF2/+wBeAF5/5oBeAF6/64BeAF7/8MBeAF8/8MBeAF9/8MBeAF+/5oBeAGB/8MBeAGC/64BeAGE/8MBeAGG/8MBeAGH/8MBeAGJ/8MBeAGM/5oBeAGO/5oBeAGP/5oBeAGQ/5oBeAGS/8MBeAGT/5oBeAGV/8MBeAGW/8MBeAGY/8MBeAGZ/5oBeAGa/8MBeAGb/8MBeAII/4UBeAIM/4UBeAIh/+wBeQGIACkBewAF/+wBewAK/+wBewIH/+wBewIL/+wBfAAF/64BfAAK/64BfAGN/+wBfAGR/+wBfAIH/64BfAIL/64BfgGIACkBgAAP/64BgAAR/64BgAGI/+wBgAII/64BgAIM/64BgwAQ/5oBgwF5/9cBgwF+/9cBgwGB/9cBgwGM/9cBgwGN/9cBgwGP/9cBgwGQ/9cBgwGR/9cBgwGT/9cBgwGZ/9cBgwIC/5oBgwID/5oBgwIE/5oBhAAF/+wBhAAK/+wBhAIH/+wBhAIL/+wBhQAP/9cBhQAR/9cBhQII/9cBhQIM/9cBhgAF/64BhgAK/64BhgGN/+wBhgGR/+wBhgIH/64BhgIL/64BhwF5/9cBhwF+/9cBhwGM/9cBhwGP/9cBhwGQ/9cBhwGT/9cBhwGZ/9cBiAAF/4UBiAAK/4UBiAF5/+wBiAF+/+wBiAGA/9cBiAGK/9cBiAGM/+wBiAGN/9cBiAGP/+wBiAGQ/+wBiAGR/9cBiAGT/+wBiAGZ/+wBiAIH/4UBiAIL/4UBigAP/64BigAR/64BigGI/+wBigII/64BigIM/64BjAAF/+wBjAAK/+wBjAGA/9cBjAGK/9cBjAIH/+wBjAIL/+wBjgAF/+wBjgAK/+wBjgGA/9cBjgGK/9cBjgIH/+wBjgIL/+wBkAAP/+wBkAAR/+wBkAII/+wBkAIM/+wBkwAF/+wBkwAK/+wBkwGA/9cBkwGK/9cBkwIH/+wBkwIL/+wBlAAP/8MBlAAQ/9cBlAAR/8MBlAF5/9cBlAF+/9cBlAGB/9cBlAGM/9cBlAGP/9cBlAGQ/9cBlAGT/9cBlAGZ/9cBlAIC/9cBlAID/9cBlAIE/9cBlAII/8MBlAIM/8MBlwAF/9cBlwAK/9cBlwIH/9cBlwIL/9cBmQAF/+wBmQAK/+wBmQGA/9cBmQGK/9cBmQIH/+wBmQIL/+wBnQAF/64BnQAK/64BnQGd/4UBnQGm/4UBnQGo/9cBnQG8/5oBnQG9/9cBnQHB/5oBnQHE/4UBnQHc/9cBnQHd/9cBnQHh/9cBnQHk/9cBnQH2/9cBnQIH/64BnQIL/64BnQJu/64BnQJ8/5oBnQKA/64BnQKC/64BnQKX/64BnQKb/64BnQKn/64BnQKp/4UBnQKq/9cBnQK1/5oBnQK2/9cBnQK3/5oBnQK4/9cBnQK5/5oBnQK6/9cBnQK9/4UBnQK+/9cBnQK//5oBnQLA/9cBnQLB/5oBnQLC/9cBnQLU/5oBnQLV/9cBnQL3/9cBnQL4/9cBnQL5/9cBnQL6/9cBnQL7/9cBnQL8/9cBnQL9/5oBnQL+/9cBnQMD/64BnQMN/5oBnQMO/8MBnQMP/5oBnQMQ/8MBnQMX/4UBnQMY/9cBngAP/4UBngAQ/64BngAR/4UBngGf/9cBngGk/5oBngGq/3EBngGu/5oBngG1/5oBngG4/9cBngG7/9cBngG8ACkBngG+/64BngHM/5oBngHN/5oBngHO/4UBngHP/3EBngHQ/9cBngHR/9cBngHS/5oBngHT/5oBngHU/5oBngHV/4UBngHW/5oBngHX/5oBngHY/3EBngHZ/5oBngHa/5oBngHb/3EBngHc/64BngHd/64BngHe/3EBngHf/9cBngHg/5oBngHh/5oBngHi/5oBngHj/5oBngHk/64BngHl/5oBngHm/5oBngHn/9cBngHo/5oBngHp/8MBngHq/3EBngHs/5oBngHt/3EBngHu/4UBngHy/4UBngHz/5oBngH1/5oBngH2/64BngH3/5oBngH5/5oBngIC/64BngID/64BngIE/64BngII/4UBngIM/4UBngJq/3EBngJr/5oBngJs/9cBngJt/9cBngJx/5oBngJy/3EBngJz/4UBngJ1/5oBngJ3/5oBngJ5/5oBngJ9/5oBngJ+/9cBngJ//3EBngKB/9cBngKD/9cBngKE/9cBngKF/3EBngKG/9cBngKH/3EBngKI/9cBngKJ/3EBngKK/9cBngKL/9cBngKM/9cBngKN/3EBngKW/5oBngKa/5oBngKe/5oBngKg/9cBngKi/9cBngKk/5oBngKm/5oBngKq/64BngKs/5oBngKu/5oBngKw/5oBngKx/9cBngKy/3EBngKz/9cBngK0/3EBngK1ACkBngK2/64BngK4/64BngK6/64BngK8/9cBngK+/64BngLA/5oBngLC/5oBngLE/5oBngLF/5oBngLG/3EBngLH/5oBngLI/3EBngLL/9cBngLN/5oBngLO/5oBngLP/4UBngLR/5oBngLT/5oBngLV/5oBngLX/5oBngLZ/3EBngLb/3EBngLd/3EBngLg/3EBngLm/9cBngLo/9cBngLq/8MBngLs/5oBngLu/5oBngLv/9cBngLw/3EBngLx/9cBngLy/3EBngLz/9cBngL0/3EBngL2/9cBngL4/64BngL6/64BngL8/64BngL+/5oBngMA/5oBngMC/5oBngMG/9cBngMI/9cBngMJ/3EBngMK/3EBngML/3EBngMM/3EBngMO/5oBngMQ/5oBngMR/5oBngMS/4UBngMU/5oBngMV/9cBngMW/3EBngMY/64BngMa/3EBngMb/5oBngMc/4UBnwGf/9cBnwG4/9cBnwG7/9cBnwG+/9cBnwHh/9cBnwJs/9cBnwJ+/9cBnwKE/9cBnwKG/9cBnwKI/9cBnwKK/9cBnwKM/9cBnwKx/9cBnwKz/9cBnwLA/9cBnwLC/9cBnwLF/9cBnwLH/9cBnwLV/9cBnwLv/9cBnwLx/9cBnwLz/9cBnwL+/9cBnwMJ/9cBnwML/9cBnwMO/9cBnwMQ/9cBnwMV/9cBoAMO/9cBoAMQ/9cBpAAF/64BpAAK/64BpAGd/4UBpAGm/4UBpAGo/9cBpAG8/5oBpAG9/9cBpAHB/5oBpAHE/4UBpAHc/9cBpAHd/9cBpAHh/9cBpAHk/9cBpAH2/9cBpAIH/64BpAIL/64BpAJu/64BpAJ8/5oBpAKA/64BpAKC/64BpAKX/64BpAKb/64BpAKn/64BpAKp/4UBpAKq/9cBpAK1/5oBpAK2/9cBpAK3/5oBpAK4/9cBpAK5/5oBpAK6/9cBpAK9/4UBpAK+/9cBpAK//5oBpALA/9cBpALB/5oBpALC/9cBpALU/5oBpALV/9cBpAL3/9cBpAL4/9cBpAL5/9cBpAL6/9cBpAL7/9cBpAL8/9cBpAL9/5oBpAL+/9cBpAMD/64BpAMN/5oBpAMO/8MBpAMP/5oBpAMQ/8MBpAMX/4UBpAMY/9cBpQAF/64BpQAK/64BpQGd/4UBpQGm/4UBpQGo/9cBpQG8/5oBpQG9/9cBpQHB/5oBpQHE/4UBpQHc/9cBpQHd/9cBpQHh/9cBpQHk/9cBpQH2/9cBpQIH/64BpQIL/64BpQJu/64BpQJ8/5oBpQKA/64BpQKC/64BpQKX/64BpQKb/64BpQKn/64BpQKp/4UBpQKq/9cBpQK1/5oBpQK2/9cBpQK3/5oBpQK4/9cBpQK5/5oBpQK6/9cBpQK9/4UBpQK+/9cBpQK//5oBpQLA/9cBpQLB/5oBpQLC/9cBpQLU/5oBpQLV/9cBpQL3/9cBpQL4/9cBpQL5/9cBpQL6/9cBpQL7/9cBpQL8/9cBpQL9/5oBpQL+/9cBpQMD/64BpQMN/5oBpQMO/8MBpQMP/5oBpQMQ/8MBpQMX/4UBpQMY/9cBpgAF/64BpgAK/64BpgGd/4UBpgGm/4UBpgGo/9cBpgG8/5oBpgG9/9cBpgHB/5oBpgHE/4UBpgHc/9cBpgHd/9cBpgHh/9cBpgHk/9cBpgH2/9cBpgIH/64BpgIL/64BpgJu/64BpgJ8/5oBpgKA/64BpgKC/64BpgKX/64BpgKb/64BpgKn/64BpgKp/4UBpgKq/9cBpgK1/5oBpgK2/9cBpgK3/5oBpgK4/9cBpgK5/5oBpgK6/9cBpgK9/4UBpgK+/9cBpgK//5oBpgLA/9cBpgLB/5oBpgLC/9cBpgLU/5oBpgLV/9cBpgL3/9cBpgL4/9cBpgL5/9cBpgL6/9cBpgL7/9cBpgL8/9cBpgL9/5oBpgL+/9cBpgMD/64BpgMN/5oBpgMO/8MBpgMP/5oBpgMQ/8MBpgMX/4UBpgMY/9cBpwGf/9cBpwG4/9cBpwG7/9cBpwG+/9cBpwHB/9cBpwHh/9cBpwJs/9cBpwJ8/9cBpwJ+/9cBpwKE/9cBpwKG/9cBpwKI/9cBpwKK/9cBpwKM/9cBpwKx/9cBpwKz/9cBpwK//9cBpwLA/9cBpwLB/9cBpwLC/9cBpwLF/5oBpwLH/5oBpwLU/9cBpwLV/9cBpwLv/9cBpwLx/9cBpwLz/9cBpwL9/9cBpwL+/9cBpwMJ/9cBpwML/9cBpwMO/9cBpwMQ/9cBpwMV/9cBpwMZ/+wBqAAP/4UBqAAR/4UBqAGf/+wBqAGk/5oBqAGq/3EBqAGu/5oBqAG1/5oBqAG4/+wBqAG7/+wBqAG+/8MBqAHJ/+wBqAHO/64BqAHP/9cBqAHV/64BqAHY/9cBqAHb/9cBqAHe/9cBqAHh/9cBqAHq/9cBqAHrAGYBqAHt/9cBqAHu/+wBqAHy/64BqAH0AGYBqAII/4UBqAIM/4UBqAJq/9cBqAJs/+wBqAJy/3EBqAJz/64BqAJ+/+wBqAJ//9cBqAKE/+wBqAKF/9cBqAKG/+wBqAKH/9cBqAKI/+wBqAKJ/9cBqAKK/+wBqAKM/+wBqAKN/9cBqAKYAGYBqAKoAGYBqAKx/+wBqAKy/9cBqAKz/+wBqAK0/9cBqALA/9cBqALC/9cBqALF/9cBqALG/8MBqALH/9cBqALI/8MBqALO/5oBqALP/64BqALV/9cBqALZ/3EBqALb/3EBqALd/3EBqALg/9cBqALv/+wBqALw/9cBqALx/+wBqALy/9cBqALz/+wBqAL0/9cBqAL+/9cBqAMJ/3EBqAMK/9cBqAML/3EBqAMM/9cBqAMR/5oBqAMS/64BqAMV/+wBqAMW/9cBqAMa/9cBqAMb/5oBqAMc/64BqgAF/3EBqgAK/3EBqgGd/5oBqgGm/5oBqgG8/3EBqgG+/9cBqgHB/5oBqgHE/5oBqgHc/9cBqgHh/9cBqgHk/9cBqgIH/3EBqgIL/3EBqgJu/9cBqgJ8/5oBqgKA/64BqgKC/64BqgKX/9cBqgKb/9cBqgKn/9cBqgKp/5oBqgKq/9cBqgK1/3EBqgK2/9cBqgK3/4UBqgK5/4UBqgK9/5oBqgK+/9cBqgK//5oBqgLA/9cBqgLB/5oBqgLC/9cBqgLF/5oBqgLH/5oBqgLU/5oBqgLV/9cBqgLh/9cBqgLj/9cBqgL9/5oBqgL+/9cBqgMD/9cBqgMN/3EBqgMO/9cBqgMP/3EBqgMQ/9cBqgMX/5oBqgMY/9cBqwAF/9cBqwAK/9cBqwGq/+wBqwHB/9cBqwIH/9cBqwIL/9cBqwJy/+wBqwJ8/9cBqwK//9cBqwLB/9cBqwLF/9cBqwLH/9cBqwLU/9cBqwLZ/+wBqwLb/+wBqwLd/+wBqwL9/9cBrAAP/64BrAAR/64BrAII/64BrAIM/64BrAKA/+wBrAKC/+wBrAK3/+wBrAK5/+wBrAMN/9cBrAMP/9cBrQAP/4UBrQAQ/64BrQAR/4UBrQGf/9cBrQGk/5oBrQGq/3EBrQGu/5oBrQG1/5oBrQG4/9cBrQG7/9cBrQG8ACkBrQG+/64BrQHM/5oBrQHN/5oBrQHO/4UBrQHP/3EBrQHQ/9cBrQHR/9cBrQHS/5oBrQHT/5oBrQHU/5oBrQHV/4UBrQHW/5oBrQHX/5oBrQHY/3EBrQHZ/5oBrQHa/5oBrQHb/3EBrQHc/64BrQHd/64BrQHe/3EBrQHf/9cBrQHg/5oBrQHh/5oBrQHi/5oBrQHj/5oBrQHk/64BrQHl/5oBrQHm/5oBrQHn/9cBrQHo/5oBrQHp/8MBrQHq/3EBrQHs/5oBrQHt/3EBrQHu/4UBrQHy/4UBrQHz/5oBrQH1/5oBrQH2/64BrQH3/5oBrQH5/5oBrQIC/64BrQID/64BrQIE/64BrQII/4UBrQIM/4UBrQJq/3EBrQJr/5oBrQJs/9cBrQJt/9cBrQJx/5oBrQJy/3EBrQJz/4UBrQJ1/5oBrQJ3/5oBrQJ5/5oBrQJ9/5oBrQJ+/9cBrQJ//3EBrQKB/9cBrQKD/9cBrQKE/9cBrQKF/3EBrQKG/9cBrQKH/3EBrQKI/9cBrQKJ/3EBrQKK/9cBrQKL/9cBrQKM/9cBrQKN/3EBrQKW/5oBrQKa/5oBrQKe/5oBrQKg/9cBrQKi/9cBrQKk/5oBrQKm/5oBrQKq/64BrQKs/5oBrQKu/5oBrQKw/5oBrQKx/9cBrQKy/3EBrQKz/9cBrQK0/3EBrQK1ACkBrQK2/64BrQK4/64BrQK6/64BrQK8/9cBrQK+/64BrQLA/5oBrQLC/5oBrQLE/5oBrQLF/5oBrQLG/3EBrQLH/5oBrQLI/3EBrQLL/9cBrQLN/5oBrQLO/5oBrQLP/4UBrQLR/5oBrQLT/5oBrQLV/5oBrQLX/5oBrQLZ/3EBrQLb/3EBrQLd/3EBrQLg/3EBrQLm/9cBrQLo/9cBrQLq/8MBrQLs/5oBrQLu/5oBrQLv/9cBrQLw/3EBrQLx/9cBrQLy/3EBrQLz/9cBrQL0/3EBrQL2/9cBrQL4/64BrQL6/64BrQL8/64BrQL+/5oBrQMA/5oBrQMC/5oBrQMG/9cBrQMI/9cBrQMJ/3EBrQMK/3EBrQML/3EBrQMM/3EBrQMO/5oBrQMQ/5oBrQMR/5oBrQMS/4UBrQMU/5oBrQMV/9cBrQMW/3EBrQMY/64BrQMa/3EBrQMb/5oBrQMc/4UBrgGjAOEBrgLqACkBrgMO/9cBrgMQ/9cBsAGf/9cBsAG4/9cBsAG7/9cBsAG+/9cBsAHB/9cBsAHh/9cBsAJs/9cBsAJ8/9cBsAJ+/9cBsAKE/9cBsAKG/9cBsAKI/9cBsAKK/9cBsAKM/9cBsAKx/9cBsAKz/9cBsAK//9cBsALA/9cBsALB/9cBsALC/9cBsALF/5oBsALH/5oBsALU/9cBsALV/9cBsALv/9cBsALx/9cBsALz/9cBsAL9/9cBsAL+/9cBsAMJ/9cBsAML/9cBsAMO/9cBsAMQ/9cBsAMV/9cBsAMZ/+wBsQAP/64BsQAR/64BsQII/64BsQIM/64BsQKA/+wBsQKC/+wBsQK3/+wBsQK5/+wBsQMN/9cBsQMP/9cBtAGf/9cBtAG4/9cBtAG7/9cBtAG+/9cBtAHB/9cBtAHh/9cBtAJs/9cBtAJ8/9cBtAJ+/9cBtAKE/9cBtAKG/9cBtAKI/9cBtAKK/9cBtAKM/9cBtAKx/9cBtAKz/9cBtAK//9cBtALA/9cBtALB/9cBtALC/9cBtALF/5oBtALH/5oBtALU/9cBtALV/9cBtALv/9cBtALx/9cBtALz/9cBtAL9/9cBtAL+/9cBtAMJ/9cBtAML/9cBtAMO/9cBtAMQ/9cBtAMV/9cBtAMZ/+wBuAAP/64BuAAR/64BuAGd/+wBuAGk/9cBuAGm/+wBuAGo/9cBuAGq/9cBuAGu/9cBuAGw/9cBuAGx/+wBuAG1/9cBuAG8/8MBuAG9/9cBuAG//9cBuAHB/9cBuAHE/+wBuAHH/+wBuAHO/+wBuAHV/+wBuAHy/+wBuAII/64BuAIM/64BuAJy/9cBuAJz/+wBuAJ6/+wBuAJ8/9cBuAKA/+wBuAKC/+wBuAKf/9cBuAKh/+wBuAKp/+wBuAK1/8MBuAK3/+wBuAK5/+wBuAK7/9cBuAK9/+wBuAK//9cBuALB/9cBuALK/9cBuALO/9cBuALP/+wBuALU/9cBuALZ/9cBuALb/9cBuALd/9cBuALl/9cBuALn/+wBuAL1/+wBuAL3/9cBuAL5/9cBuAL7/9cBuAL9/9cBuAMF/9cBuAMH/9cBuAMN/9cBuAMP/9cBuAMR/9cBuAMS/+wBuAMX/+wBuAMb/9cBuAMc/+wBugAP/vYBugAR/vYBugGk/4UBugGq/5oBugGu/4UBugGw/9cBugG1/4UBugG//9cBugHO/5oBugHV/5oBugHy/5oBugII/vYBugIM/vYBugJy/5oBugJz/5oBugJ2/+wBugKf/9cBugK7/9cBugLK/9cBugLO/4UBugLP/5oBugLZ/5oBugLb/5oBugLd/5oBugLl/9cBugMF/9cBugMH/9cBugMJ/64BugML/64BugMR/4UBugMS/5oBugMb/4UBugMc/5oBuwGf/9cBuwG4/9cBuwG7/9cBuwG+/9cBuwHh/9cBuwJs/9cBuwJ+/9cBuwKE/9cBuwKG/9cBuwKI/9cBuwKK/9cBuwKM/9cBuwKx/9cBuwKz/9cBuwLA/9cBuwLC/9cBuwLF/9cBuwLH/9cBuwLV/9cBuwLv/9cBuwLx/9cBuwLz/9cBuwL+/9cBuwMJ/9cBuwML/9cBuwMO/9cBuwMQ/9cBuwMV/9cBvAAP/4UBvAAQ/64BvAAR/4UBvAGf/9cBvAGk/5oBvAGq/3EBvAGu/5oBvAG1/5oBvAG4/9cBvAG7/9cBvAG8ACkBvAG+/64BvAHM/5oBvAHN/5oBvAHO/4UBvAHP/3EBvAHQ/9cBvAHR/9cBvAHS/5oBvAHT/5oBvAHU/5oBvAHV/4UBvAHW/5oBvAHX/5oBvAHY/3EBvAHZ/5oBvAHa/5oBvAHb/3EBvAHc/64BvAHd/64BvAHe/3EBvAHf/9cBvAHg/5oBvAHh/5oBvAHi/5oBvAHj/5oBvAHk/64BvAHl/5oBvAHm/5oBvAHn/9cBvAHo/5oBvAHp/8MBvAHq/3EBvAHs/5oBvAHt/3EBvAHu/4UBvAHy/4UBvAHz/5oBvAH1/5oBvAH2/64BvAH3/5oBvAH5/5oBvAIC/64BvAID/64BvAIE/64BvAII/4UBvAIM/4UBvAJq/3EBvAJr/5oBvAJs/9cBvAJt/9cBvAJx/5oBvAJy/3EBvAJz/4UBvAJ1/5oBvAJ3/5oBvAJ5/5oBvAJ9/5oBvAJ+/9cBvAJ//3EBvAKB/9cBvAKD/9cBvAKE/9cBvAKF/3EBvAKG/9cBvAKH/3EBvAKI/9cBvAKJ/3EBvAKK/9cBvAKL/9cBvAKM/9cBvAKN/3EBvAKW/5oBvAKa/5oBvAKe/5oBvAKg/9cBvAKi/9cBvAKk/5oBvAKm/5oBvAKq/64BvAKs/5oBvAKu/5oBvAKw/5oBvAKx/9cBvAKy/3EBvAKz/9cBvAK0/3EBvAK1ACkBvAK2/64BvAK4/64BvAK6/64BvAK8/9cBvAK+/64BvALA/5oBvALC/5oBvALE/5oBvALF/5oBvALG/3EBvALH/5oBvALI/3EBvALL/9cBvALN/5oBvALO/5oBvALP/4UBvALR/5oBvALT/5oBvALV/5oBvALX/5oBvALZ/3EBvALb/3EBvALd/3EBvALg/3EBvALm/9cBvALo/9cBvALq/8MBvALs/5oBvALu/5oBvALv/9cBvALw/3EBvALx/9cBvALy/3EBvALz/9cBvAL0/3EBvAL2/9cBvAL4/64BvAL6/64BvAL8/64BvAL+/5oBvAMA/5oBvAMC/5oBvAMG/9cBvAMI/9cBvAMJ/3EBvAMK/3EBvAML/3EBvAMM/3EBvAMO/5oBvAMQ/5oBvAMR/5oBvAMS/4UBvAMU/5oBvAMV/9cBvAMW/3EBvAMY/64BvAMa/3EBvAMb/5oBvAMc/4UBvQAP/4UBvQAR/4UBvQGf/+wBvQGk/5oBvQGq/3EBvQGu/5oBvQG1/5oBvQG4/+wBvQG7/+wBvQG+/8MBvQHJ/+wBvQHO/64BvQHP/9cBvQHV/64BvQHY/9cBvQHb/9cBvQHe/9cBvQHh/9cBvQHq/9cBvQHrAGYBvQHt/9cBvQHu/+wBvQHy/64BvQH0AGYBvQII/4UBvQIM/4UBvQJq/9cBvQJs/+wBvQJy/3EBvQJz/64BvQJ+/+wBvQJ//9cBvQKE/+wBvQKF/9cBvQKG/+wBvQKH/9cBvQKI/+wBvQKJ/9cBvQKK/+wBvQKM/+wBvQKN/9cBvQKYAGYBvQKoAGYBvQKx/+wBvQKy/9cBvQKz/+wBvQK0/9cBvQLA/9cBvQLC/9cBvQLF/9cBvQLG/8MBvQLH/9cBvQLI/8MBvQLO/5oBvQLP/64BvQLV/9cBvQLZ/3EBvQLb/3EBvQLd/3EBvQLg/9cBvQLv/+wBvQLw/9cBvQLx/+wBvQLy/9cBvQLz/+wBvQL0/9cBvQL+/9cBvQMJ/3EBvQMK/9cBvQML/3EBvQMM/9cBvQMR/5oBvQMS/64BvQMV/+wBvQMW/9cBvQMa/9cBvQMb/5oBvQMc/64BvgAP/64BvgAR/64BvgGd/9cBvgGk/9cBvgGm/9cBvgGo/8MBvgGq/9cBvgGu/9cBvgGw/9cBvgGx/9cBvgG1/9cBvgG8/8MBvgG9/8MBvgG//9cBvgHE/9cBvgHH/9cBvgHO/+wBvgHV/+wBvgHy/+wBvgII/64BvgIM/64BvgJy/9cBvgJz/+wBvgJ6/9cBvgKA/+wBvgKC/+wBvgKf/9cBvgKh/9cBvgKp/9cBvgK1/8MBvgK3/8MBvgK5/8MBvgK7/9cBvgK9/9cBvgLK/9cBvgLO/9cBvgLP/+wBvgLZ/9cBvgLb/9cBvgLd/9cBvgLl/9cBvgLn/9cBvgL1/9cBvgL3/8MBvgL5/8MBvgL7/8MBvgMF/9cBvgMH/9cBvgMN/9cBvgMP/9cBvgMR/9cBvgMS/+wBvgMX/9cBvgMb/9cBvgMc/+wBvwGf/9cBvwG4/9cBvwG7/9cBvwG+/9cBvwHB/9cBvwHh/9cBvwJs/9cBvwJ8/9cBvwJ+/9cBvwKE/9cBvwKG/9cBvwKI/9cBvwKK/9cBvwKM/9cBvwKx/9cBvwKz/9cBvwK//9cBvwLA/9cBvwLB/9cBvwLC/9cBvwLF/5oBvwLH/5oBvwLU/9cBvwLV/9cBvwLv/9cBvwLx/9cBvwLz/9cBvwL9/9cBvwL+/9cBvwMJ/9cBvwML/9cBvwMO/9cBvwMQ/9cBvwMV/9cBvwMZ/+wBwAGjAOEBwALqACkBwAMO/9cBwAMQ/9cBwwGjAOEBwwLqACkBwwMO/9cBwwMQ/9cBxAAF/64BxAAK/64BxAGd/4UBxAGm/4UBxAGo/9cBxAG8/5oBxAG9/9cBxAHB/5oBxAHE/4UBxAHc/9cBxAHd/9cBxAHh/9cBxAHk/9cBxAH2/9cBxAIH/64BxAIL/64BxAJu/64BxAJ8/5oBxAKA/64BxAKC/64BxAKX/64BxAKb/64BxAKn/64BxAKp/4UBxAKq/9cBxAK1/5oBxAK2/9cBxAK3/5oBxAK4/9cBxAK5/5oBxAK6/9cBxAK9/4UBxAK+/9cBxAK//5oBxALA/9cBxALB/5oBxALC/9cBxALU/5oBxALV/9cBxAL3/9cBxAL4/9cBxAL5/9cBxAL6/9cBxAL7/9cBxAL8/9cBxAL9/5oBxAL+/9cBxAMD/64BxAMN/5oBxAMO/8MBxAMP/5oBxAMQ/8MBxAMX/4UBxAMY/9cBxgAF/64BxgAK/64BxgGd/4UBxgGm/4UBxgGo/9cBxgG8/5oBxgG9/9cBxgHB/5oBxgHE/4UBxgHc/9cBxgHd/9cBxgHh/9cBxgHk/9cBxgH2/9cBxgIH/64BxgIL/64BxgJu/64BxgJ8/5oBxgKA/64BxgKC/64BxgKX/64BxgKb/64BxgKn/64BxgKp/4UBxgKq/9cBxgK1/5oBxgK2/9cBxgK3/5oBxgK4/9cBxgK5/5oBxgK6/9cBxgK9/4UBxgK+/9cBxgK//5oBxgLA/9cBxgLB/5oBxgLC/9cBxgLU/5oBxgLV/9cBxgL3/9cBxgL4/9cBxgL5/9cBxgL6/9cBxgL7/9cBxgL8/9cBxgL9/5oBxgL+/9cBxgMD/64BxgMN/5oBxgMO/8MBxgMP/5oBxgMQ/8MBxgMX/4UBxgMY/9cBxwAP/64BxwAR/64BxwGd/+wBxwGk/9cBxwGm/+wBxwGo/9cBxwGq/9cBxwGu/9cBxwGw/9cBxwGx/+wBxwG1/9cBxwG8/8MBxwG9/9cBxwG//9cBxwHB/9cBxwHE/+wBxwHH/+wBxwHO/+wBxwHV/+wBxwHy/+wBxwII/64BxwIM/64BxwJy/9cBxwJz/+wBxwJ6/+wBxwJ8/9cBxwKA/+wBxwKC/+wBxwKf/9cBxwKh/+wBxwKp/+wBxwK1/8MBxwK3/+wBxwK5/+wBxwK7/9cBxwK9/+wBxwK//9cBxwLB/9cBxwLK/9cBxwLO/9cBxwLP/+wBxwLU/9cBxwLZ/9cBxwLb/9cBxwLd/9cBxwLl/9cBxwLn/+wBxwL1/+wBxwL3/9cBxwL5/9cBxwL7/9cBxwL9/9cBxwMF/9cBxwMH/9cBxwMN/9cBxwMP/9cBxwMR/9cBxwMS/+wBxwMX/+wBxwMb/9cBxwMc/+wByAAP/64ByAAR/64ByAGd/+wByAGk/9cByAGm/+wByAGo/9cByAGq/9cByAGu/9cByAGw/9cByAGx/+wByAG1/9cByAG8/8MByAG9/9cByAG//9cByAHB/9cByAHE/+wByAHH/+wByAHO/+wByAHV/+wByAHy/+wByAII/64ByAIM/64ByAJy/9cByAJz/+wByAJ6/+wByAJ8/9cByAKA/+wByAKC/+wByAKf/9cByAKh/+wByAKp/+wByAK1/8MByAK3/+wByAK5/+wByAK7/9cByAK9/+wByAK//9cByALB/9cByALK/9cByALO/9cByALP/+wByALU/9cByALZ/9cByALb/9cByALd/9cByALl/9cByALn/+wByAL1/+wByAL3/9cByAL5/9cByAL7/9cByAL9/9cByAMF/9cByAMH/9cByAMN/9cByAMP/9cByAMR/9cByAMS/+wByAMX/+wByAMb/9cByAMc/+wBygAF/+wBygAK/+wBygIH/+wBygIL/+wBzAHpACkBzQAP/5oBzQAQ/9cBzQAR/5oBzQHO/8MBzQHP/+wBzQHV/8MBzQHY/+wBzQHb/+wBzQHe/+wBzQHq/+wBzQHt/+wBzQHy/8MBzQIC/9cBzQID/9cBzQIE/9cBzQII/5oBzQIM/5oBzQJq/+wBzQJz/8MBzQJ//+wBzQKF/+wBzQKH/+wBzQKJ/+wBzQKN/+wBzQKy/+wBzQK0/+wBzQLP/8MBzQLg/+wBzQLw/+wBzQLy/+wBzQL0/+wBzQMK/+wBzQMM/+wBzQMS/8MBzQMW/+wBzQMa/+wBzQMc/8MBzgAF/+wBzgAK/+wBzgIH/+wBzgIL/+wBzwAF/+wBzwAK/+wBzwIH/+wBzwIL/+wB0AHP/9cB0AHY/9cB0AHb/9cB0AHe/9cB0AHh/9cB0AHq/9cB0AHt/9cB0AJq/9cB0AJ//9cB0AKF/9cB0AKH/9cB0AKJ/9cB0AKN/9cB0AKy/9cB0AK0/9cB0ALA/9cB0ALC/9cB0ALG/9cB0ALI/9cB0ALV/9cB0ALg/9cB0ALw/9cB0ALy/9cB0AL0/9cB0AL+/9cB0AMK/9cB0AMM/9cB0AMW/9cB0AMa/9cB0QHpACkB1AHP/9cB1AHY/9cB1AHb/9cB1AHe/9cB1AHh/9cB1AHq/9cB1AHt/9cB1AJq/9cB1AJ//9cB1AKF/9cB1AKH/9cB1AKJ/9cB1AKN/9cB1AKy/9cB1AK0/9cB1ALA/9cB1ALC/9cB1ALG/9cB1ALI/9cB1ALV/9cB1ALg/9cB1ALw/9cB1ALy/9cB1AL0/9cB1AL+/9cB1AMK/9cB1AMM/9cB1AMW/9cB1AMa/9cB2AAF/+wB2AAK/+wB2AHQ/9cB2AHc/+wB2AHd/+wB2AHf/9cB2AHh/+wB2AHk/+wB2AH2/+wB2AIH/+wB2AIL/+wB2AKg/9cB2AKq/+wB2AK2/+wB2AK8/9cB2AK+/+wB2ALA/+wB2ALC/+wB2ALL/9cB2ALV/+wB2ALm/9cB2AL4/+wB2AL6/+wB2AL8/+wB2AL+/+wB2AMG/9cB2AMI/9cB2AMO/+wB2AMQ/+wB2AMY/+wB2gAF/+wB2gAK/+wB2gHQ/9cB2gHc/+wB2gHd/+wB2gHf/9cB2gHh/+wB2gHk/+wB2gH2/+wB2gIH/+wB2gIL/+wB2gKg/9cB2gKq/+wB2gK2/+wB2gK8/9cB2gK+/+wB2gLA/+wB2gLC/+wB2gLL/9cB2gLV/+wB2gLm/9cB2gL4/+wB2gL6/+wB2gL8/+wB2gL+/+wB2gMG/9cB2gMI/9cB2gMO/+wB2gMQ/+wB2gMY/+wB3AAP/5oB3AAQ/9cB3AAR/5oB3AHO/8MB3AHP/+wB3AHV/8MB3AHY/+wB3AHb/+wB3AHe/+wB3AHq/+wB3AHt/+wB3AHy/8MB3AIC/9cB3AID/9cB3AIE/9cB3AII/5oB3AIM/5oB3AJq/+wB3AJz/8MB3AJ//+wB3AKF/+wB3AKH/+wB3AKJ/+wB3AKN/+wB3AKy/+wB3AK0/+wB3ALP/8MB3ALg/+wB3ALw/+wB3ALy/+wB3AL0/+wB3AMK/+wB3AMM/+wB3AMS/8MB3AMW/+wB3AMa/+wB3AMc/8MB3QAP/64B3QAR/64B3QHO/9cB3QHV/9cB3QHy/9cB3QII/64B3QIM/64B3QJz/9cB3QLP/9cB3QMS/9cB3QMc/9cB3gAF/+wB3gAK/+wB3gHQ/9cB3gHc/+wB3gHd/+wB3gHf/9cB3gHh/+wB3gHk/+wB3gH2/+wB3gIH/+wB3gIL/+wB3gKg/9cB3gKq/+wB3gK2/+wB3gK8/9cB3gK+/+wB3gLA/+wB3gLC/+wB3gLL/9cB3gLV/+wB3gLm/9cB3gL4/+wB3gL6/+wB3gL8/+wB3gL+/+wB3gMG/9cB3gMI/9cB3gMO/+wB3gMQ/+wB3gMY/+wB3wHP/9cB3wHY/9cB3wHb/9cB3wHe/9cB3wHh/9cB3wHq/9cB3wHt/9cB3wJq/9cB3wJ//9cB3wKF/9cB3wKH/9cB3wKJ/9cB3wKN/9cB3wKy/9cB3wK0/9cB3wLA/9cB3wLC/9cB3wLG/9cB3wLI/9cB3wLV/9cB3wLg/9cB3wLw/9cB3wLy/9cB3wL0/9cB3wL+/9cB3wMK/9cB3wMM/9cB3wMW/9cB3wMa/9cB4AAF/+wB4AAK/+wB4AIH/+wB4AIL/+wB4wAF/+wB4wAK/+wB4wIH/+wB4wIL/+wB5AAF/4UB5AAK/4UB5AHQ/9cB5AHc/5oB5AHd/8MB5AHf/9cB5AHh/64B5AHk/5oB5AH2/8MB5AIH/4UB5AIL/4UB5AJt/9cB5AKB/9cB5AKD/9cB5AKL/9cB5AKg/9cB5AKq/5oB5AK2/5oB5AK4/8MB5AK6/8MB5AK8/9cB5AK+/5oB5ALA/64B5ALC/64B5ALG/9cB5ALI/9cB5ALL/9cB5ALV/64B5ALm/9cB5ALq/9cB5AL4/8MB5AL6/8MB5AL8/8MB5AL+/64B5AMG/9cB5AMI/9cB5AMO/5oB5AMQ/5oB5AMY/5oB5gAF/4UB5gAK/4UB5gHQ/9cB5gHc/5oB5gHd/8MB5gHf/9cB5gHh/64B5gHk/5oB5gH2/8MB5gIH/4UB5gIL/4UB5gJt/9cB5gKB/9cB5gKD/9cB5gKL/9cB5gKg/9cB5gKq/5oB5gK2/5oB5gK4/8MB5gK6/8MB5gK8/9cB5gK+/5oB5gLA/64B5gLC/64B5gLG/9cB5gLI/9cB5gLL/9cB5gLV/64B5gLm/9cB5gLq/9cB5gL4/8MB5gL6/8MB5gL8/8MB5gL+/64B5gMG/9cB5gMI/9cB5gMO/5oB5gMQ/5oB5gMY/5oB5wAF/+wB5wAK/+wB5wHQ/9cB5wHc/+wB5wHd/+wB5wHf/9cB5wHh/+wB5wHk/+wB5wH2/+wB5wIH/+wB5wIL/+wB5wKg/9cB5wKq/+wB5wK2/+wB5wK8/9cB5wK+/+wB5wLA/+wB5wLC/+wB5wLL/9cB5wLV/+wB5wLm/9cB5wL4/+wB5wL6/+wB5wL8/+wB5wL+/+wB5wMG/9cB5wMI/9cB5wMO/+wB5wMQ/+wB5wMY/+wB6AAF/+wB6AAK/+wB6AHQ/9cB6AHc/+wB6AHd/+wB6AHf/9cB6AHh/+wB6AHk/+wB6AH2/+wB6AIH/+wB6AIL/+wB6AKg/9cB6AKq/+wB6AK2/+wB6AK8/9cB6AK+/+wB6ALA/+wB6ALC/+wB6ALL/9cB6ALV/+wB6ALm/9cB6AL4/+wB6AL6/+wB6AL8/+wB6AL+/+wB6AMG/9cB6AMI/9cB6AMO/+wB6AMQ/+wB6AMY/+wB6gAF/+wB6gAK/+wB6gIH/+wB6gIL/+wB6wAF/+wB6wAK/+wB6wIH/+wB6wIL/+wB6wMO/9cB6wMQ/9cB7AAP/5oB7AAQ/9cB7AAR/5oB7AHO/8MB7AHP/+wB7AHV/8MB7AHY/+wB7AHb/+wB7AHe/+wB7AHq/+wB7AHt/+wB7AHy/8MB7AIC/9cB7AID/9cB7AIE/9cB7AII/5oB7AIM/5oB7AJq/+wB7AJz/8MB7AJ//+wB7AKF/+wB7AKH/+wB7AKJ/+wB7AKN/+wB7AKy/+wB7AK0/+wB7ALP/8MB7ALg/+wB7ALw/+wB7ALy/+wB7AL0/+wB7AMK/+wB7AMM/+wB7AMS/8MB7AMW/+wB7AMa/+wB7AMc/8MB8gAF/4UB8gAK/4UB8gHQ/9cB8gHc/5oB8gHd/8MB8gHf/9cB8gHh/64B8gHk/5oB8gH2/8MB8gIH/4UB8gIL/4UB8gJt/9cB8gKB/9cB8gKD/9cB8gKL/9cB8gKg/9cB8gKq/5oB8gK2/5oB8gK4/8MB8gK6/8MB8gK8/9cB8gK+/5oB8gLA/64B8gLC/64B8gLG/9cB8gLI/9cB8gLL/9cB8gLV/64B8gLm/9cB8gLq/9cB8gL4/8MB8gL6/8MB8gL8/8MB8gL+/64B8gMG/9cB8gMI/9cB8gMO/5oB8gMQ/5oB8gMY/5oB8wAF/4UB8wAK/4UB8wHQ/9cB8wHc/5oB8wHd/8MB8wHf/9cB8wHh/64B8wHk/5oB8wH2/8MB8wIH/4UB8wIL/4UB8wJt/9cB8wKB/9cB8wKD/9cB8wKL/9cB8wKg/9cB8wKq/5oB8wK2/5oB8wK4/8MB8wK6/8MB8wK8/9cB8wK+/5oB8wLA/64B8wLC/64B8wLG/9cB8wLI/9cB8wLL/9cB8wLV/64B8wLm/9cB8wLq/9cB8wL4/8MB8wL6/8MB8wL8/8MB8wL+/64B8wMG/9cB8wMI/9cB8wMO/5oB8wMQ/5oB8wMY/5oB9AAF/+wB9AAK/+wB9AIH/+wB9AIL/+wB9AMO/9cB9AMQ/9cB9QHP/9cB9QHY/9cB9QHb/9cB9QHe/9cB9QHh/9cB9QHq/9cB9QHt/9cB9QJq/9cB9QJ//9cB9QKF/9cB9QKH/9cB9QKJ/9cB9QKN/9cB9QKy/9cB9QK0/9cB9QLA/9cB9QLC/9cB9QLG/9cB9QLI/9cB9QLV/9cB9QLg/9cB9QLw/9cB9QLy/9cB9QL0/9cB9QL+/9cB9QMK/9cB9QMM/9cB9QMW/9cB9QMa/9cB9gAP/64B9gAR/64B9gHO/9cB9gHV/9cB9gHy/9cB9gII/64B9gIM/64B9gJz/9cB9gLP/9cB9gMS/9cB9gMc/9cB+AAP/4UB+AAQ/64B+AAR/4UB+AGf/9cB+AGk/5oB+AGq/3EB+AGu/5oB+AG1/5oB+AG4/9cB+AG7/9cB+AG8ACkB+AG+/64B+AHM/5oB+AHN/5oB+AHO/4UB+AHP/3EB+AHQ/9cB+AHR/9cB+AHS/5oB+AHT/5oB+AHU/5oB+AHV/4UB+AHW/5oB+AHX/5oB+AHY/3EB+AHZ/5oB+AHa/5oB+AHb/3EB+AHc/64B+AHd/64B+AHe/3EB+AHf/9cB+AHg/5oB+AHh/5oB+AHi/5oB+AHj/5oB+AHk/64B+AHl/5oB+AHm/5oB+AHn/9cB+AHo/5oB+AHp/8MB+AHq/3EB+AHs/5oB+AHt/3EB+AHu/4UB+AHy/4UB+AHz/5oB+AH1/5oB+AH2/64B+AH3/5oB+AH5/5oB+AIC/64B+AID/64B+AIE/64B+AII/4UB+AIM/4UB+AJq/3EB+AJr/5oB+AJs/9cB+AJt/9cB+AJx/5oB+AJy/3EB+AJz/4UB+AJ1/5oB+AJ3/5oB+AJ5/5oB+AJ9/5oB+AJ+/9cB+AJ//3EB+AKB/9cB+AKD/9cB+AKE/9cB+AKF/3EB+AKG/9cB+AKH/3EB+AKI/9cB+AKJ/3EB+AKK/9cB+AKL/9cB+AKM/9cB+AKN/3EB+AKW/5oB+AKa/5oB+AKe/5oB+AKg/9cB+AKi/9cB+AKk/5oB+AKm/5oB+AKq/64B+AKs/5oB+AKu/5oB+AKw/5oB+AKx/9cB+AKy/3EB+AKz/9cB+AK0/3EB+AK1ACkB+AK2/64B+AK4/64B+AK6/64B+AK8/9cB+AK+/64B+ALA/5oB+ALC/5oB+ALE/5oB+ALF/5oB+ALG/3EB+ALH/5oB+ALI/3EB+ALL/9cB+ALN/5oB+ALO/5oB+ALP/4UB+ALR/5oB+ALT/5oB+ALV/5oB+ALX/5oB+ALZ/3EB+ALb/3EB+ALd/3EB+ALg/3EB+ALm/9cB+ALo/9cB+ALq/8MB+ALs/5oB+ALu/5oB+ALv/9cB+ALw/3EB+ALx/9cB+ALy/3EB+ALz/9cB+AL0/3EB+AL2/9cB+AL4/64B+AL6/64B+AL8/64B+AL+/5oB+AMA/5oB+AMC/5oB+AMG/9cB+AMI/9cB+AMJ/3EB+AMK/3EB+AML/3EB+AMM/3EB+AMO/5oB+AMQ/5oB+AMR/5oB+AMS/4UB+AMU/5oB+AMV/9cB+AMW/3EB+AMY/64B+AMa/3EB+AMb/5oB+AMc/4UB+QAP/5oB+QAQ/9cB+QAR/5oB+QHO/8MB+QHP/+wB+QHV/8MB+QHY/+wB+QHb/+wB+QHe/+wB+QHq/+wB+QHt/+wB+QHy/8MB+QIC/9cB+QID/9cB+QIE/9cB+QII/5oB+QIM/5oB+QJq/+wB+QJz/8MB+QJ//+wB+QKF/+wB+QKH/+wB+QKJ/+wB+QKN/+wB+QKy/+wB+QK0/+wB+QLP/8MB+QLg/+wB+QLw/+wB+QLy/+wB+QL0/+wB+QMK/+wB+QMM/+wB+QMS/8MB+QMW/+wB+QMa/+wB+QMc/8MB+gAP/5oB+gAR/5oB+gAiACkB+gAk/64B+gAm/+wB+gAq/+wB+gAy/+wB+gA0/+wB+gBE/9cB+gBG/9cB+gBH/9cB+gBI/9cB+gBK/+wB+gBQ/+wB+gBR/+wB+gBS/9cB+gBT/+wB+gBU/9cB+gBV/+wB+gBW/+wB+gBY/+wB+gCC/64B+gCD/64B+gCE/64B+gCF/64B+gCG/64B+gCH/64B+gCJ/+wB+gCU/+wB+gCV/+wB+gCW/+wB+gCX/+wB+gCY/+wB+gCa/+wB+gCi/9cB+gCj/9cB+gCk/9cB+gCl/9cB+gCm/9cB+gCn/9cB+gCo/9cB+gCp/9cB+gCq/9cB+gCr/9cB+gCs/9cB+gCt/9cB+gC0/9cB+gC1/9cB+gC2/9cB+gC3/9cB+gC4/9cB+gC6/9cB+gC7/+wB+gC8/+wB+gC9/+wB+gC+/+wB+gDC/64B+gDD/9cB+gDE/64B+gDF/9cB+gDG/64B+gDH/9cB+gDI/+wB+gDJ/9cB+gDK/+wB+gDL/9cB+gDM/+wB+gDN/9cB+gDO/+wB+gDP/9cB+gDR/9cB+gDT/9cB+gDV/9cB+gDX/9cB+gDZ/9cB+gDb/9cB+gDd/9cB+gDe/+wB+gDf/+wB+gDg/+wB+gDh/+wB+gDi/+wB+gDj/+wB+gDk/+wB+gDl/+wB+gD6/+wB+gEG/+wB+gEI/+wB+gEN/+wB+gEO/+wB+gEP/9cB+gEQ/+wB+gER/9cB+gES/+wB+gET/9cB+gEU/+wB+gEV/9cB+gEX/+wB+gEZ/+wB+gEd/+wB+gEh/+wB+gEr/+wB+gEt/+wB+gEv/+wB+gEx/+wB+gEz/+wB+gE1/+wB+gFD/64B+gFE/9cB+gFG/9cB+gFH/+wB+gFI/9cB+gFK/+wB+gII/5oB+gIM/5oB+gJX/+wB+gJY/64B+gJZ/9cB+gJf/+wB+gJg/9cB+gJi/+wB+gMd/64B+gMe/9cB+gMf/64B+gMg/9cB+gMh/64B+gMi/9cB+gMj/64B+gMl/64B+gMm/9cB+gMn/64B+gMo/9cB+gMp/64B+gMq/9cB+gMr/64B+gMs/9cB+gMt/64B+gMu/9cB+gMv/64B+gMw/9cB+gMx/64B+gMy/9cB+gMz/64B+gM0/9cB+gM2/9cB+gM4/9cB+gM6/9cB+gM8/9cB+gNA/9cB+gNC/9cB+gNE/9cB+gNJ/+wB+gNK/9cB+gNL/+wB+gNM/9cB+gNN/+wB+gNO/9cB+gNP/+wB+gNR/+wB+gNS/9cB+gNT/+wB+gNU/9cB+gNV/+wB+gNW/9cB+gNX/+wB+gNY/9cB+gNZ/+wB+gNa/9cB+gNb/+wB+gNc/9cB+gNd/+wB+gNe/9cB+gNf/+wB+gNg/9cB+gNi/+wB+gNk/+wB+gNm/+wB+gNo/+wB+gNq/+wB+gNs/+wB+gNu/+wB+wAFAFIB+wAKAFIB+wAP/64B+wAR/64B+wAiACkB+wIHAFIB+wII/64B+wILAFIB+wIM/64B/AAP/5oB/AAR/5oB/AAiACkB/AAk/64B/AAm/+wB/AAq/+wB/AAy/+wB/AA0/+wB/ABE/9cB/ABG/9cB/ABH/9cB/ABI/9cB/ABK/+wB/ABQ/+wB/ABR/+wB/ABS/9cB/ABT/+wB/ABU/9cB/ABV/+wB/ABW/+wB/ABY/+wB/ACC/64B/ACD/64B/ACE/64B/ACF/64B/ACG/64B/ACH/64B/ACJ/+wB/ACU/+wB/ACV/+wB/ACW/+wB/ACX/+wB/ACY/+wB/ACa/+wB/ACi/9cB/ACj/9cB/ACk/9cB/ACl/9cB/ACm/9cB/ACn/9cB/ACo/9cB/ACp/9cB/ACq/9cB/ACr/9cB/ACs/9cB/ACt/9cB/AC0/9cB/AC1/9cB/AC2/9cB/AC3/9cB/AC4/9cB/AC6/9cB/AC7/+wB/AC8/+wB/AC9/+wB/AC+/+wB/ADC/64B/ADD/9cB/ADE/64B/ADF/9cB/ADG/64B/ADH/9cB/ADI/+wB/ADJ/9cB/ADK/+wB/ADL/9cB/ADM/+wB/ADN/9cB/ADO/+wB/ADP/9cB/ADR/9cB/ADT/9cB/ADV/9cB/ADX/9cB/ADZ/9cB/ADb/9cB/ADd/9cB/ADe/+wB/ADf/+wB/ADg/+wB/ADh/+wB/ADi/+wB/ADj/+wB/ADk/+wB/ADl/+wB/AD6/+wB/AEG/+wB/AEI/+wB/AEN/+wB/AEO/+wB/AEP/9cB/AEQ/+wB/AER/9cB/AES/+wB/AET/9cB/AEU/+wB/AEV/9cB/AEX/+wB/AEZ/+wB/AEd/+wB/AEh/+wB/AEr/+wB/AEt/+wB/AEv/+wB/AEx/+wB/AEz/+wB/AE1/+wB/AFD/64B/AFE/9cB/AFG/9cB/AFH/+wB/AFI/9cB/AFK/+wB/AII/5oB/AIM/5oB/AJX/+wB/AJY/64B/AJZ/9cB/AJf/+wB/AJg/9cB/AJi/+wB/AMd/64B/AMe/9cB/AMf/64B/AMg/9cB/AMh/64B/AMi/9cB/AMj/64B/AMl/64B/AMm/9cB/AMn/64B/AMo/9cB/AMp/64B/AMq/9cB/AMr/64B/AMs/9cB/AMt/64B/AMu/9cB/AMv/64B/AMw/9cB/AMx/64B/AMy/9cB/AMz/64B/AM0/9cB/AM2/9cB/AM4/9cB/AM6/9cB/AM8/9cB/ANA/9cB/ANC/9cB/ANE/9cB/ANJ/+wB/ANK/9cB/ANL/+wB/ANM/9cB/ANN/+wB/ANO/9cB/ANP/+wB/ANR/+wB/ANS/9cB/ANT/+wB/ANU/9cB/ANV/+wB/ANW/9cB/ANX/+wB/ANY/9cB/ANZ/+wB/ANa/9cB/ANb/+wB/ANc/9cB/ANd/+wB/ANe/9cB/ANf/+wB/ANg/9cB/ANi/+wB/ANk/+wB/ANm/+wB/ANo/+wB/ANq/+wB/ANs/+wB/ANu/+wB/QAFAFIB/QAKAFIB/QAP/64B/QAR/64B/QAiACkB/QIHAFIB/QII/64B/QILAFIB/QIM/64B/gAP/5oB/gAR/5oB/gAiACkB/gAk/64B/gAm/+wB/gAq/+wB/gAy/+wB/gA0/+wB/gBE/9cB/gBG/9cB/gBH/9cB/gBI/9cB/gBK/+wB/gBQ/+wB/gBR/+wB/gBS/9cB/gBT/+wB/gBU/9cB/gBV/+wB/gBW/+wB/gBY/+wB/gCC/64B/gCD/64B/gCE/64B/gCF/64B/gCG/64B/gCH/64B/gCJ/+wB/gCU/+wB/gCV/+wB/gCW/+wB/gCX/+wB/gCY/+wB/gCa/+wB/gCi/9cB/gCj/9cB/gCk/9cB/gCl/9cB/gCm/9cB/gCn/9cB/gCo/9cB/gCp/9cB/gCq/9cB/gCr/9cB/gCs/9cB/gCt/9cB/gC0/9cB/gC1/9cB/gC2/9cB/gC3/9cB/gC4/9cB/gC6/9cB/gC7/+wB/gC8/+wB/gC9/+wB/gC+/+wB/gDC/64B/gDD/9cB/gDE/64B/gDF/9cB/gDG/64B/gDH/9cB/gDI/+wB/gDJ/9cB/gDK/+wB/gDL/9cB/gDM/+wB/gDN/9cB/gDO/+wB/gDP/9cB/gDR/9cB/gDT/9cB/gDV/9cB/gDX/9cB/gDZ/9cB/gDb/9cB/gDd/9cB/gDe/+wB/gDf/+wB/gDg/+wB/gDh/+wB/gDi/+wB/gDj/+wB/gDk/+wB/gDl/+wB/gD6/+wB/gEG/+wB/gEI/+wB/gEN/+wB/gEO/+wB/gEP/9cB/gEQ/+wB/gER/9cB/gES/+wB/gET/9cB/gEU/+wB/gEV/9cB/gEX/+wB/gEZ/+wB/gEd/+wB/gEh/+wB/gEr/+wB/gEt/+wB/gEv/+wB/gEx/+wB/gEz/+wB/gE1/+wB/gFD/64B/gFE/9cB/gFG/9cB/gFH/+wB/gFI/9cB/gFK/+wB/gII/5oB/gIM/5oB/gJX/+wB/gJY/64B/gJZ/9cB/gJf/+wB/gJg/9cB/gJi/+wB/gMd/64B/gMe/9cB/gMf/64B/gMg/9cB/gMh/64B/gMi/9cB/gMj/64B/gMl/64B/gMm/9cB/gMn/64B/gMo/9cB/gMp/64B/gMq/9cB/gMr/64B/gMs/9cB/gMt/64B/gMu/9cB/gMv/64B/gMw/9cB/gMx/64B/gMy/9cB/gMz/64B/gM0/9cB/gM2/9cB/gM4/9cB/gM6/9cB/gM8/9cB/gNA/9cB/gNC/9cB/gNE/9cB/gNJ/+wB/gNK/9cB/gNL/+wB/gNM/9cB/gNN/+wB/gNO/9cB/gNP/+wB/gNR/+wB/gNS/9cB/gNT/+wB/gNU/9cB/gNV/+wB/gNW/9cB/gNX/+wB/gNY/9cB/gNZ/+wB/gNa/9cB/gNb/+wB/gNc/9cB/gNd/+wB/gNe/9cB/gNf/+wB/gNg/9cB/gNi/+wB/gNk/+wB/gNm/+wB/gNo/+wB/gNq/+wB/gNs/+wB/gNu/+wB/wAFAFIB/wAKAFIB/wAP/64B/wAR/64B/wAiACkB/wIHAFIB/wII/64B/wILAFIB/wIM/64CAAAP/4UCAAAR/4UCAAAiACkCAAAk/4UCAAAm/9cCAAAq/9cCAAAy/9cCAAA0/9cCAABE/5oCAABG/5oCAABH/5oCAABI/5oCAABK/9cCAABQ/8MCAABR/8MCAABS/5oCAABT/8MCAABU/5oCAABV/8MCAABW/64CAABY/8MCAABd/9cCAACC/4UCAACD/4UCAACE/4UCAACF/4UCAACG/4UCAACH/4UCAACJ/9cCAACU/9cCAACV/9cCAACW/9cCAACX/9cCAACY/9cCAACa/9cCAACi/5oCAACj/5oCAACk/5oCAACl/5oCAACm/5oCAACn/5oCAACo/5oCAACp/5oCAACq/5oCAACr/5oCAACs/5oCAACt/5oCAAC0/5oCAAC1/5oCAAC2/5oCAAC3/5oCAAC4/5oCAAC6/5oCAAC7/8MCAAC8/8MCAAC9/8MCAAC+/8MCAADC/4UCAADD/5oCAADE/4UCAADF/5oCAADG/4UCAADH/5oCAADI/9cCAADJ/5oCAADK/9cCAADL/5oCAADM/9cCAADN/5oCAADO/9cCAADP/5oCAADR/5oCAADT/5oCAADV/5oCAADX/5oCAADZ/5oCAADb/5oCAADd/5oCAADe/9cCAADf/9cCAADg/9cCAADh/9cCAADi/9cCAADj/9cCAADk/9cCAADl/9cCAAD6/8MCAAEG/8MCAAEI/8MCAAEN/8MCAAEO/9cCAAEP/5oCAAEQ/9cCAAER/5oCAAES/9cCAAET/5oCAAEU/9cCAAEV/5oCAAEX/8MCAAEZ/8MCAAEd/64CAAEh/64CAAEr/8MCAAEt/8MCAAEv/8MCAAEx/8MCAAEz/8MCAAE1/8MCAAE8/9cCAAE+/9cCAAFA/9cCAAFD/4UCAAFE/5oCAAFG/5oCAAFH/9cCAAFI/5oCAAFK/64CAAII/4UCAAIM/4UCAAJX/8MCAAJY/4UCAAJZ/5oCAAJf/9cCAAJg/5oCAAJi/8MCAAMd/4UCAAMe/5oCAAMf/4UCAAMg/5oCAAMh/4UCAAMi/5oCAAMj/4UCAAMl/4UCAAMm/5oCAAMn/4UCAAMo/5oCAAMp/4UCAAMq/5oCAAMr/4UCAAMs/5oCAAMt/4UCAAMu/5oCAAMv/4UCAAMw/5oCAAMx/4UCAAMy/5oCAAMz/4UCAAM0/5oCAAM2/5oCAAM4/5oCAAM6/5oCAAM8/5oCAANA/5oCAANC/5oCAANE/5oCAANJ/9cCAANK/5oCAANL/9cCAANM/5oCAANN/9cCAANO/5oCAANP/9cCAANR/9cCAANS/5oCAANT/9cCAANU/5oCAANV/9cCAANW/5oCAANX/9cCAANY/5oCAANZ/9cCAANa/5oCAANb/9cCAANc/5oCAANd/9cCAANe/5oCAANf/9cCAANg/5oCAANi/8MCAANk/8MCAANm/8MCAANo/8MCAANq/8MCAANs/8MCAANu/8MCAQAFAFICAQAKAFICAQAP/64CAQAR/64CAQAiACkCAQIHAFICAQII/64CAQILAFICAQIM/64CAgA3/64CAgEk/64CAgEm/64CAgFx/64CAgGd/64CAgGm/64CAgG8/64CAgHE/64CAgHc/9cCAgHk/9cCAgKp/64CAgKq/9cCAgK1/64CAgK2/9cCAgK9/64CAgK+/9cCAgMX/64CAgMY/9cCAgOP/64CAwA3/64CAwEk/64CAwEm/64CAwFx/64CAwGd/64CAwGm/64CAwG8/64CAwHE/64CAwHc/9cCAwHk/9cCAwKp/64CAwKq/9cCAwK1/64CAwK2/9cCAwK9/64CAwK+/9cCAwMX/64CAwMY/9cCAwOP/64CBAA3/64CBAEk/64CBAEm/64CBAFx/64CBAGd/64CBAGm/64CBAG8/64CBAHE/64CBAHc/9cCBAHk/9cCBAKp/64CBAKq/9cCBAK1/64CBAK2/9cCBAK9/64CBAK+/9cCBAMX/64CBAMY/9cCBAOP/64CBgAk/3ECBgA3ACkCBgA5ACkCBgA6ACkCBgA8ABQCBgBE/64CBgBG/4UCBgBH/4UCBgBI/4UCBgBK/8MCBgBQ/8MCBgBR/8MCBgBS/4UCBgBT/8MCBgBU/4UCBgBV/8MCBgBW/8MCBgBY/8MCBgCC/3ECBgCD/3ECBgCE/3ECBgCF/3ECBgCG/3ECBgCH/3ECBgCfABQCBgCi/4UCBgCj/64CBgCk/64CBgCl/64CBgCm/64CBgCn/64CBgCo/64CBgCp/4UCBgCq/4UCBgCr/4UCBgCs/4UCBgCt/4UCBgC0/4UCBgC1/4UCBgC2/4UCBgC3/4UCBgC4/4UCBgC6/4UCBgC7/8MCBgC8/8MCBgC9/8MCBgC+/8MCBgDC/3ECBgDD/64CBgDE/3ECBgDF/64CBgDG/3ECBgDH/64CBgDJ/4UCBgDL/4UCBgDN/4UCBgDP/4UCBgDR/4UCBgDT/4UCBgDV/4UCBgDX/4UCBgDZ/4UCBgDb/4UCBgDd/4UCBgDf/8MCBgDh/8MCBgDj/8MCBgDl/8MCBgD6/8MCBgEG/8MCBgEI/8MCBgEN/8MCBgEP/4UCBgER/4UCBgET/4UCBgEV/4UCBgEX/8MCBgEZ/8MCBgEd/8MCBgEh/8MCBgEkACkCBgEmACkCBgEr/8MCBgEt/8MCBgEv/8MCBgEx/8MCBgEz/8MCBgE1/8MCBgE2ACkCBgE4ABQCBgE6ABQCBgFD/3ECBgFE/64CBgFG/64CBgFI/4UCBgFK/8MCBgFW/3ECBgFf/3ECBgFi/3ECBgFp/3ECBgF5/64CBgF6/9cCBgF7/9cCBgF+/64CBgGB/8MCBgGC/9cCBgGD/9cCBgGE/9cCBgGH/9cCBgGJ/9cCBgGM/64CBgGO/8MCBgGP/64CBgGQ/64CBgGT/64CBgGZ/64CBgGk/4UCBgGq/3ECBgGu/4UCBgG1/4UCBgHK/9cCBgHO/3ECBgHP/4UCBgHV/3ECBgHY/4UCBgHb/4UCBgHe/4UCBgHq/4UCBgHt/4UCBgHu/8MCBgHy/3ECBgH6ACkCBgH8ACkCBgH+ACkCBgIAABQCBgJX/8MCBgJY/3ECBgJZ/64CBgJg/4UCBgJi/8MCBgJq/4UCBgJy/3ECBgJz/3ECBgJ9/+wCBgJ//4UCBgKF/4UCBgKH/4UCBgKJ/4UCBgKN/4UCBgKy/4UCBgK0/4UCBgLO/4UCBgLP/3ECBgLZ/3ECBgLa/9cCBgLb/3ECBgLc/9cCBgLd/3ECBgLe/9cCBgLg/4UCBgLi/9cCBgLk/9cCBgLw/4UCBgLy/4UCBgL0/4UCBgMJ/3ECBgMK/4UCBgML/3ECBgMM/4UCBgMR/4UCBgMS/3ECBgMW/4UCBgMa/4UCBgMb/4UCBgMc/3ECBgMd/3ECBgMe/64CBgMf/3ECBgMg/64CBgMh/3ECBgMi/64CBgMj/3ECBgMl/3ECBgMm/64CBgMn/3ECBgMo/64CBgMp/3ECBgMq/64CBgMr/3ECBgMs/64CBgMt/3ECBgMu/64CBgMv/3ECBgMw/64CBgMx/3ECBgMy/64CBgMz/3ECBgM0/64CBgM2/4UCBgM4/4UCBgM6/4UCBgM8/4UCBgNA/4UCBgNC/4UCBgNE/4UCBgNK/4UCBgNM/4UCBgNO/4UCBgNS/4UCBgNU/4UCBgNW/4UCBgNY/4UCBgNa/4UCBgNc/4UCBgNe/4UCBgNg/4UCBgNi/8MCBgNk/8MCBgNm/8MCBgNo/8MCBgNq/8MCBgNs/8MCBgNu/8MCBgNvABQCBgNxABQCBgNzABQCBgOPACkCBwAk/3ECBwA3ACkCBwA5ACkCBwA6ACkCBwA8ABQCBwBE/64CBwBG/4UCBwBH/4UCBwBI/4UCBwBK/8MCBwBQ/8MCBwBR/8MCBwBS/4UCBwBT/8MCBwBU/4UCBwBV/8MCBwBW/8MCBwBY/8MCBwCC/3ECBwCD/3ECBwCE/3ECBwCF/3ECBwCG/3ECBwCH/3ECBwCfABQCBwCi/4UCBwCj/64CBwCk/64CBwCl/64CBwCm/64CBwCn/64CBwCo/64CBwCp/4UCBwCq/4UCBwCr/4UCBwCs/4UCBwCt/4UCBwC0/4UCBwC1/4UCBwC2/4UCBwC3/4UCBwC4/4UCBwC6/4UCBwC7/8MCBwC8/8MCBwC9/8MCBwC+/8MCBwDC/3ECBwDD/64CBwDE/3ECBwDF/64CBwDG/3ECBwDH/64CBwDJ/4UCBwDL/4UCBwDN/4UCBwDP/4UCBwDR/4UCBwDT/4UCBwDV/4UCBwDX/4UCBwDZ/4UCBwDb/4UCBwDd/4UCBwDf/8MCBwDh/8MCBwDj/8MCBwDl/8MCBwD6/8MCBwEG/8MCBwEI/8MCBwEN/8MCBwEP/4UCBwER/4UCBwET/4UCBwEV/4UCBwEX/8MCBwEZ/8MCBwEd/8MCBwEh/8MCBwEkACkCBwEmACkCBwEr/8MCBwEt/8MCBwEv/8MCBwEx/8MCBwEz/8MCBwE1/8MCBwE2ACkCBwE4ABQCBwE6ABQCBwFD/3ECBwFE/64CBwFG/64CBwFI/4UCBwFK/8MCBwFW/3ECBwFf/3ECBwFi/3ECBwFp/3ECBwF5/64CBwF6/9cCBwF7/9cCBwF+/64CBwGB/8MCBwGC/9cCBwGD/9cCBwGE/9cCBwGH/9cCBwGJ/9cCBwGM/64CBwGO/8MCBwGP/64CBwGQ/64CBwGT/64CBwGZ/64CBwGk/4UCBwGq/3ECBwGu/4UCBwG1/4UCBwHK/9cCBwHO/3ECBwHP/4UCBwHV/3ECBwHY/4UCBwHb/4UCBwHe/4UCBwHq/4UCBwHt/4UCBwHu/8MCBwHy/3ECBwH6ACkCBwH8ACkCBwH+ACkCBwIAABQCBwJX/8MCBwJY/3ECBwJZ/64CBwJg/4UCBwJi/8MCBwJq/4UCBwJy/3ECBwJz/3ECBwJ9/+wCBwJ//4UCBwKF/4UCBwKH/4UCBwKJ/4UCBwKN/4UCBwKy/4UCBwK0/4UCBwLO/4UCBwLP/3ECBwLZ/3ECBwLa/9cCBwLb/3ECBwLc/9cCBwLd/3ECBwLe/9cCBwLg/4UCBwLi/9cCBwLk/9cCBwLw/4UCBwLy/4UCBwL0/4UCBwMJ/3ECBwMK/4UCBwML/3ECBwMM/4UCBwMR/4UCBwMS/3ECBwMW/4UCBwMa/4UCBwMb/4UCBwMc/3ECBwMd/3ECBwMe/64CBwMf/3ECBwMg/64CBwMh/3ECBwMi/64CBwMj/3ECBwMl/3ECBwMm/64CBwMn/3ECBwMo/64CBwMp/3ECBwMq/64CBwMr/3ECBwMs/64CBwMt/3ECBwMu/64CBwMv/3ECBwMw/64CBwMx/3ECBwMy/64CBwMz/3ECBwM0/64CBwM2/4UCBwM4/4UCBwM6/4UCBwM8/4UCBwNA/4UCBwNC/4UCBwNE/4UCBwNK/4UCBwNM/4UCBwNO/4UCBwNS/4UCBwNU/4UCBwNW/4UCBwNY/4UCBwNa/4UCBwNc/4UCBwNe/4UCBwNg/4UCBwNi/8MCBwNk/8MCBwNm/8MCBwNo/8MCBwNq/8MCBwNs/8MCBwNu/8MCBwNvABQCBwNxABQCBwNzABQCBwOPACkCCAAm/5oCCAAq/5oCCAAy/5oCCAA0/5oCCAA3/3ECCAA4/9cCCAA5/4UCCAA6/4UCCAA8/4UCCACJ/5oCCACU/5oCCACV/5oCCACW/5oCCACX/5oCCACY/5oCCACa/5oCCACb/9cCCACc/9cCCACd/9cCCACe/9cCCACf/4UCCADI/5oCCADK/5oCCADM/5oCCADO/5oCCADe/5oCCADg/5oCCADi/5oCCADk/5oCCAEO/5oCCAEQ/5oCCAES/5oCCAEU/5oCCAEk/3ECCAEm/3ECCAEq/9cCCAEs/9cCCAEu/9cCCAEw/9cCCAEy/9cCCAE0/9cCCAE2/4UCCAE4/4UCCAE6/4UCCAFH/5oCCAFm/64CCAFt/64CCAFx/3ECCAFy/4UCCAFz/5oCCAF1/4UCCAF4/4UCCAGF/9cCCAGd/3ECCAGf/5oCCAGm/3ECCAG4/5oCCAG7/5oCCAG8/3ECCAG+/64CCAHB/1wCCAHE/3ECCAHc/5oCCAHh/4UCCAHk/5oCCAH6/4UCCAH8/4UCCAH+/4UCCAIA/4UCCAJU/4UCCAJf/5oCCAJh/9cCCAJs/5oCCAJ8/1wCCAJ+/5oCCAKA/4UCCAKC/4UCCAKE/5oCCAKG/5oCCAKI/5oCCAKK/5oCCAKM/5oCCAKp/3ECCAKq/5oCCAKx/5oCCAKz/5oCCAK1/3ECCAK2/5oCCAK3/4UCCAK5/4UCCAK9/3ECCAK+/5oCCAK//1wCCALA/4UCCALB/1wCCALC/4UCCALF/4UCCALH/4UCCALU/1wCCALV/4UCCALv/5oCCALx/5oCCALz/5oCCAL9/1wCCAL+/4UCCAMN/4UCCAMO/5oCCAMP/4UCCAMQ/5oCCAMV/5oCCAMX/3ECCAMY/5oCCANJ/5oCCANL/5oCCANN/5oCCANP/5oCCANR/5oCCANT/5oCCANV/5oCCANX/5oCCANZ/5oCCANb/5oCCANd/5oCCANf/5oCCANh/9cCCANj/9cCCANl/9cCCANn/9cCCANp/9cCCANr/9cCCANt/9cCCANv/4UCCANx/4UCCANz/4UCCAOP/3ECCgAk/3ECCgA3ACkCCgA5ACkCCgA6ACkCCgA8ABQCCgBE/64CCgBG/4UCCgBH/4UCCgBI/4UCCgBK/8MCCgBQ/8MCCgBR/8MCCgBS/4UCCgBT/8MCCgBU/4UCCgBV/8MCCgBW/8MCCgBY/8MCCgCC/3ECCgCD/3ECCgCE/3ECCgCF/3ECCgCG/3ECCgCH/3ECCgCfABQCCgCi/4UCCgCj/64CCgCk/64CCgCl/64CCgCm/64CCgCn/64CCgCo/64CCgCp/4UCCgCq/4UCCgCr/4UCCgCs/4UCCgCt/4UCCgC0/4UCCgC1/4UCCgC2/4UCCgC3/4UCCgC4/4UCCgC6/4UCCgC7/8MCCgC8/8MCCgC9/8MCCgC+/8MCCgDC/3ECCgDD/64CCgDE/3ECCgDF/64CCgDG/3ECCgDH/64CCgDJ/4UCCgDL/4UCCgDN/4UCCgDP/4UCCgDR/4UCCgDT/4UCCgDV/4UCCgDX/4UCCgDZ/4UCCgDb/4UCCgDd/4UCCgDf/8MCCgDh/8MCCgDj/8MCCgDl/8MCCgD6/8MCCgEG/8MCCgEI/8MCCgEN/8MCCgEP/4UCCgER/4UCCgET/4UCCgEV/4UCCgEX/8MCCgEZ/8MCCgEd/8MCCgEh/8MCCgEkACkCCgEmACkCCgEr/8MCCgEt/8MCCgEv/8MCCgEx/8MCCgEz/8MCCgE1/8MCCgE2ACkCCgE4ABQCCgE6ABQCCgFD/3ECCgFE/64CCgFG/64CCgFI/4UCCgFK/8MCCgFW/3ECCgFf/3ECCgFi/3ECCgFp/3ECCgF5/64CCgF6/9cCCgF7/9cCCgF+/64CCgGB/8MCCgGC/9cCCgGD/9cCCgGE/9cCCgGH/9cCCgGJ/9cCCgGM/64CCgGO/8MCCgGP/64CCgGQ/64CCgGT/64CCgGZ/64CCgGk/4UCCgGq/3ECCgGu/4UCCgG1/4UCCgHK/9cCCgHO/3ECCgHP/4UCCgHV/3ECCgHY/4UCCgHb/4UCCgHe/4UCCgHq/4UCCgHt/4UCCgHu/8MCCgHy/3ECCgH6ACkCCgH8ACkCCgH+ACkCCgIAABQCCgJX/8MCCgJY/3ECCgJZ/64CCgJg/4UCCgJi/8MCCgJq/4UCCgJy/3ECCgJz/3ECCgJ9/+wCCgJ//4UCCgKF/4UCCgKH/4UCCgKJ/4UCCgKN/4UCCgKy/4UCCgK0/4UCCgLO/4UCCgLP/3ECCgLZ/3ECCgLa/9cCCgLb/3ECCgLc/9cCCgLd/3ECCgLe/9cCCgLg/4UCCgLi/9cCCgLk/9cCCgLw/4UCCgLy/4UCCgL0/4UCCgMJ/3ECCgMK/4UCCgML/3ECCgMM/4UCCgMR/4UCCgMS/3ECCgMW/4UCCgMa/4UCCgMb/4UCCgMc/3ECCgMd/3ECCgMe/64CCgMf/3ECCgMg/64CCgMh/3ECCgMi/64CCgMj/3ECCgMl/3ECCgMm/64CCgMn/3ECCgMo/64CCgMp/3ECCgMq/64CCgMr/3ECCgMs/64CCgMt/3ECCgMu/64CCgMv/3ECCgMw/64CCgMx/3ECCgMy/64CCgMz/3ECCgM0/64CCgM2/4UCCgM4/4UCCgM6/4UCCgM8/4UCCgNA/4UCCgNC/4UCCgNE/4UCCgNK/4UCCgNM/4UCCgNO/4UCCgNS/4UCCgNU/4UCCgNW/4UCCgNY/4UCCgNa/4UCCgNc/4UCCgNe/4UCCgNg/4UCCgNi/8MCCgNk/8MCCgNm/8MCCgNo/8MCCgNq/8MCCgNs/8MCCgNu/8MCCgNvABQCCgNxABQCCgNzABQCCgOPACkCDAAm/5oCDAAq/5oCDAAy/5oCDAA0/5oCDAA3/3ECDAA4/9cCDAA5/4UCDAA6/4UCDAA8/4UCDACJ/5oCDACU/5oCDACV/5oCDACW/5oCDACX/5oCDACY/5oCDACa/5oCDACb/9cCDACc/9cCDACd/9cCDACe/9cCDACf/4UCDADI/5oCDADK/5oCDADM/5oCDADO/5oCDADe/5oCDADg/5oCDADi/5oCDADk/5oCDAEO/5oCDAEQ/5oCDAES/5oCDAEU/5oCDAEk/3ECDAEm/3ECDAEq/9cCDAEs/9cCDAEu/9cCDAEw/9cCDAEy/9cCDAE0/9cCDAE2/4UCDAE4/4UCDAE6/4UCDAFH/5oCDAFm/64CDAFt/64CDAFx/3ECDAFy/4UCDAFz/5oCDAF1/4UCDAF4/4UCDAGF/9cCDAGd/3ECDAGf/5oCDAGm/3ECDAG4/5oCDAG7/5oCDAG8/3ECDAG+/64CDAHB/1wCDAHE/3ECDAHc/5oCDAHh/4UCDAHk/5oCDAH6/4UCDAH8/4UCDAH+/4UCDAIA/4UCDAJU/4UCDAJf/5oCDAJh/9cCDAJs/5oCDAJ8/1wCDAJ+/5oCDAKA/4UCDAKC/4UCDAKE/5oCDAKG/5oCDAKI/5oCDAKK/5oCDAKM/5oCDAKp/3ECDAKq/5oCDAKx/5oCDAKz/5oCDAK1/3ECDAK2/5oCDAK3/4UCDAK5/4UCDAK9/3ECDAK+/5oCDAK//1wCDALA/4UCDALB/1wCDALC/4UCDALF/4UCDALH/4UCDALU/1wCDALV/4UCDALv/5oCDALx/5oCDALz/5oCDAL9/1wCDAL+/4UCDAMN/4UCDAMO/5oCDAMP/4UCDAMQ/5oCDAMV/5oCDAMX/3ECDAMY/5oCDANJ/5oCDANL/5oCDANN/5oCDANP/5oCDANR/5oCDANT/5oCDANV/5oCDANX/5oCDANZ/5oCDANb/5oCDANd/5oCDANf/5oCDANh/9cCDANj/9cCDANl/9cCDANn/9cCDANp/9cCDANr/9cCDANt/9cCDANv/4UCDANx/4UCDANz/4UCDAOP/3ECIQFx/9cCIQFy/+wCIQF4/+wCIQJU/+wCUwAP/8MCUwAR/8MCUwII/8MCUwIM/8MCVAAP/4UCVAAR/4UCVAFW/4UCVAFf/4UCVAFi/4UCVAFm/9cCVAFp/4UCVAFt/9cCVAFz/8MCVAF2/+wCVAF5/5oCVAF6/64CVAF7/8MCVAF8/8MCVAF9/8MCVAF+/5oCVAGB/8MCVAGC/64CVAGE/8MCVAGG/8MCVAGH/8MCVAGJ/8MCVAGM/5oCVAGO/5oCVAGP/5oCVAGQ/5oCVAGS/8MCVAGT/5oCVAGV/8MCVAGW/8MCVAGY/8MCVAGZ/5oCVAGa/8MCVAGb/8MCVAII/4UCVAIM/4UCVAIh/+wCWAAF/3ECWAAK/3ECWAAm/9cCWAAq/9cCWAAtAQoCWAAy/9cCWAA0/9cCWAA3/3ECWAA5/64CWAA6/64CWAA8/4UCWACJ/9cCWACU/9cCWACV/9cCWACW/9cCWACX/9cCWACY/9cCWACa/9cCWACf/4UCWADI/9cCWADK/9cCWADM/9cCWADO/9cCWADe/9cCWADg/9cCWADi/9cCWADk/9cCWAEO/9cCWAEQ/9cCWAES/9cCWAEU/9cCWAEk/3ECWAEm/3ECWAE2/64CWAE4/4UCWAE6/4UCWAFH/9cCWAH6/64CWAH8/64CWAH+/64CWAIA/4UCWAIH/3ECWAIL/3ECWAJf/9cCWANJ/9cCWANL/9cCWANN/9cCWANP/9cCWANR/9cCWANT/9cCWANV/9cCWANX/9cCWANZ/9cCWANb/9cCWANd/9cCWANf/9cCWANv/4UCWANx/4UCWANz/4UCWAOP/3ECWQAF/+wCWQAK/+wCWQIH/+wCWQIL/+wCWgAP/64CWgAR/64CWgFW/9cCWgFf/9cCWgFi/9cCWgFk/+wCWgFp/9cCWgFw/+wCWgFx/8MCWgFy/+wCWgF0/9cCWgF1/+wCWgF4/+wCWgGI/+wCWgII/64CWgIM/64CWgJU/+wCYABJAFICYABXAFICYABZAGYCYABaAGYCYABbAGYCYABcAGYCYAC/AGYCYAElAFICYAEnAFICYAE3AGYCYAH7AGYCYAH9AGYCYAI0AFICYAI1AFICYAJdAFICYAJeAFICYANwAGYCYAONAFICYAOQAFICYgBJAGYCYgBXAGYCYgBZAGYCYgBaAGYCYgBbAGYCYgBcAGYCYgC/AGYCYgElAGYCYgEnAGYCYgE3AGYCYgH7AGYCYgH9AGYCYgI0AGYCYgI1AGYCYgJdAGYCYgJeAGYCYgNwAGYCYgONAGYCYgOQAGYCagAF/+wCagAK/+wCagIH/+wCagIL/+wCbAAP/64CbAAR/64CbAGd/+wCbAGk/9cCbAGm/+wCbAGo/9cCbAGq/9cCbAGu/9cCbAGw/9cCbAGx/+wCbAG1/9cCbAG8/8MCbAG9/9cCbAG//9cCbAHB/9cCbAHE/+wCbAHH/+wCbAHO/+wCbAHV/+wCbAHy/+wCbAII/64CbAIM/64CbAJy/9cCbAJz/+wCbAJ6/+wCbAJ8/9cCbAKA/+wCbAKC/+wCbAKf/9cCbAKh/+wCbAKp/+wCbAK1/8MCbAK3/+wCbAK5/+wCbAK7/9cCbAK9/+wCbAK//9cCbALB/9cCbALK/9cCbALO/9cCbALP/+wCbALU/9cCbALZ/9cCbALb/9cCbALd/9cCbALl/9cCbALn/+wCbAL1/+wCbAL3/9cCbAL5/9cCbAL7/9cCbAL9/9cCbAMF/9cCbAMH/9cCbAMN/9cCbAMP/9cCbAMR/9cCbAMS/+wCbAMX/+wCbAMb/9cCbAMc/+wCbQAP/64CbQAR/64CbQHO/9cCbQHV/9cCbQHy/9cCbQII/64CbQIM/64CbQJz/9cCbQLP/9cCbQMS/9cCbQMc/9cCbgAF/64CbgAK/64CbgGd/9cCbgGm/9cCbgG8/64CbgHB/64CbgHE/9cCbgHc/9cCbgHk/9cCbgIH/64CbgIL/64CbgJ8/64CbgKA/8MCbgKC/8MCbgKp/9cCbgKq/9cCbgK1/64CbgK2/9cCbgK3/8MCbgK5/8MCbgK9/9cCbgK+/9cCbgK//64CbgLB/64CbgLU/64CbgL9/64CbgMN/5oCbgMP/5oCbgMX/9cCbgMY/9cCbwAF/4UCbwAK/4UCbwHQ/9cCbwHc/5oCbwHd/8MCbwHf/9cCbwHh/64CbwHk/5oCbwH2/8MCbwIH/4UCbwIL/4UCbwJt/9cCbwKB/9cCbwKD/9cCbwKL/9cCbwKg/9cCbwKq/5oCbwK2/5oCbwK4/8MCbwK6/8MCbwK8/9cCbwK+/5oCbwLA/64CbwLC/64CbwLG/9cCbwLI/9cCbwLL/9cCbwLV/64CbwLm/9cCbwLq/9cCbwL4/8MCbwL6/8MCbwL8/8MCbwL+/64CbwMG/9cCbwMI/9cCbwMO/5oCbwMQ/5oCbwMY/5oCcAGf/9cCcAG4/9cCcAG7/9cCcAG+/9cCcAHh/9cCcAJs/9cCcAJ+/9cCcAKE/9cCcAKG/9cCcAKI/9cCcAKK/9cCcAKM/9cCcAKx/9cCcAKz/9cCcALA/9cCcALC/9cCcALF/9cCcALH/9cCcALV/9cCcALv/9cCcALx/9cCcALz/9cCcAL+/9cCcAMJ/9cCcAML/9cCcAMO/9cCcAMQ/9cCcAMV/9cCcgAF/3ECcgAK/3ECcgGd/5oCcgGm/5oCcgG8/3ECcgG+/9cCcgHB/5oCcgHE/5oCcgHc/9cCcgHh/9cCcgHk/9cCcgIH/3ECcgIL/3ECcgJu/9cCcgJ8/5oCcgKA/64CcgKC/64CcgKX/9cCcgKb/9cCcgKn/9cCcgKp/5oCcgKq/9cCcgK1/3ECcgK2/9cCcgK3/4UCcgK5/4UCcgK9/5oCcgK+/9cCcgK//5oCcgLA/9cCcgLB/5oCcgLC/9cCcgLF/5oCcgLH/5oCcgLU/5oCcgLV/9cCcgLh/9cCcgLj/9cCcgL9/5oCcgL+/9cCcgMD/9cCcgMN/3ECcgMO/9cCcgMP/3ECcgMQ/9cCcgMX/5oCcgMY/9cCcwAF/3ECcwAK/3ECcwHP/9cCcwHY/9cCcwHb/9cCcwHc/5oCcwHd/8MCcwHe/9cCcwHh/8MCcwHk/5oCcwHq/9cCcwHt/9cCcwH2/8MCcwIH/3ECcwIL/3ECcwJq/9cCcwJt/9cCcwJ9/+wCcwJ//9cCcwKB/9cCcwKD/9cCcwKF/9cCcwKH/9cCcwKJ/9cCcwKL/9cCcwKN/9cCcwKq/5oCcwKy/9cCcwK0/9cCcwK2/5oCcwK4/9cCcwK6/9cCcwK+/5oCcwLA/8MCcwLC/8MCcwLG/9cCcwLI/9cCcwLV/8MCcwLg/9cCcwLw/9cCcwLy/9cCcwL0/9cCcwL4/8MCcwL6/8MCcwL8/8MCcwL+/8MCcwMK/9cCcwMM/9cCcwMO/4UCcwMQ/4UCcwMW/9cCcwMY/5oCcwMa/9cCdAAF/3ECdAAK/3ECdAGd/5oCdAGm/5oCdAG8/3ECdAG+/9cCdAHB/5oCdAHE/5oCdAHc/9cCdAHh/9cCdAHk/9cCdAIH/3ECdAIL/3ECdAJu/9cCdAJ8/5oCdAKA/64CdAKC/64CdAKX/9cCdAKb/9cCdAKn/9cCdAKp/5oCdAKq/9cCdAK1/3ECdAK2/9cCdAK3/4UCdAK5/4UCdAK9/5oCdAK+/9cCdAK//5oCdALA/9cCdALB/5oCdALC/9cCdALF/5oCdALH/5oCdALU/5oCdALV/9cCdALh/9cCdALj/9cCdAL9/5oCdAL+/9cCdAMD/9cCdAMN/3ECdAMO/9cCdAMP/3ECdAMQ/9cCdAMX/5oCdAMY/9cCdQAF/3ECdQAK/3ECdQHP/9cCdQHY/9cCdQHb/9cCdQHc/5oCdQHd/8MCdQHe/9cCdQHh/8MCdQHk/5oCdQHq/9cCdQHt/9cCdQH2/8MCdQIH/3ECdQIL/3ECdQJq/9cCdQJt/9cCdQJ9/+wCdQJ//9cCdQKB/9cCdQKD/9cCdQKF/9cCdQKH/9cCdQKJ/9cCdQKL/9cCdQKN/9cCdQKq/5oCdQKy/9cCdQK0/9cCdQK2/5oCdQK4/9cCdQK6/9cCdQK+/5oCdQLA/8MCdQLC/8MCdQLG/9cCdQLI/9cCdQLV/8MCdQLg/9cCdQLw/9cCdQLy/9cCdQL0/9cCdQL4/8MCdQL6/8MCdQL8/8MCdQL+/8MCdQMK/9cCdQMM/9cCdQMO/4UCdQMQ/4UCdQMW/9cCdQMY/5oCdQMa/9cCdgMN/+wCdgMP/+wCeAMN/+wCeAMP/+wCegAP/64CegAR/64CegII/64CegIM/64CegKA/+wCegKC/+wCegK3/+wCegK5/+wCegMN/9cCegMP/9cCfAAP/3ECfAAR/3ECfAGk/8MCfAGq/64CfAGu/8MCfAG1/8MCfAHO/9cCfAHV/9cCfAHy/9cCfAII/3ECfAIM/3ECfAJy/64CfAJz/9cCfALO/8MCfALP/9cCfALZ/64CfALb/64CfALd/64CfAMJ/64CfAML/64CfAMR/8MCfAMS/9cCfAMb/8MCfAMc/9cCfQAF/+wCfQAK/+wCfQHQ/9cCfQHc/+wCfQHd/+wCfQHf/9cCfQHh/+wCfQHk/+wCfQH2/+wCfQIH/+wCfQIL/+wCfQKg/9cCfQKq/+wCfQK2/+wCfQK8/9cCfQK+/+wCfQLA/+wCfQLC/+wCfQLL/9cCfQLV/+wCfQLm/9cCfQL4/+wCfQL6/+wCfQL8/+wCfQL+/+wCfQMG/9cCfQMI/9cCfQMO/+wCfQMQ/+wCfQMY/+wCfgAP/64CfgAR/64CfgGd/+wCfgGk/9cCfgGm/+wCfgGo/9cCfgGq/9cCfgGu/9cCfgGw/9cCfgGx/+wCfgG1/9cCfgG8/8MCfgG9/9cCfgG//9cCfgHB/9cCfgHE/+wCfgHH/+wCfgHO/+wCfgHV/+wCfgHy/+wCfgII/64CfgIM/64CfgJy/9cCfgJz/+wCfgJ6/+wCfgJ8/9cCfgKA/+wCfgKC/+wCfgKf/9cCfgKh/+wCfgKp/+wCfgK1/8MCfgK3/+wCfgK5/+wCfgK7/9cCfgK9/+wCfgK//9cCfgLB/9cCfgLK/9cCfgLO/9cCfgLP/+wCfgLU/9cCfgLZ/9cCfgLb/9cCfgLd/9cCfgLl/9cCfgLn/+wCfgL1/+wCfgL3/9cCfgL5/9cCfgL7/9cCfgL9/9cCfgMF/9cCfgMH/9cCfgMN/9cCfgMP/9cCfgMR/9cCfgMS/+wCfgMX/+wCfgMb/9cCfgMc/+wCfwAF/+wCfwAK/+wCfwHQ/9cCfwHc/+wCfwHd/+wCfwHf/9cCfwHh/+wCfwHk/+wCfwH2/+wCfwIH/+wCfwIL/+wCfwKg/9cCfwKq/+wCfwK2/+wCfwK8/9cCfwK+/+wCfwLA/+wCfwLC/+wCfwLL/9cCfwLV/+wCfwLm/9cCfwL4/+wCfwL6/+wCfwL8/+wCfwL+/+wCfwMG/9cCfwMI/9cCfwMO/+wCfwMQ/+wCfwMY/+wCgAAP/4UCgAAR/4UCgAGf/+wCgAGk/5oCgAGq/3ECgAGu/5oCgAG1/5oCgAG4/+wCgAG7/+wCgAG+/8MCgAHJ/+wCgAHO/64CgAHP/9cCgAHV/64CgAHY/9cCgAHb/9cCgAHe/9cCgAHh/9cCgAHq/9cCgAHrAGYCgAHt/9cCgAHu/+wCgAHy/64CgAH0AGYCgAII/4UCgAIM/4UCgAJq/9cCgAJs/+wCgAJy/3ECgAJz/64CgAJ+/+wCgAJ//9cCgAKE/+wCgAKF/9cCgAKG/+wCgAKH/9cCgAKI/+wCgAKJ/9cCgAKK/+wCgAKM/+wCgAKN/9cCgAKYAGYCgAKoAGYCgAKx/+wCgAKy/9cCgAKz/+wCgAK0/9cCgALA/9cCgALC/9cCgALF/9cCgALG/8MCgALH/9cCgALI/8MCgALO/5oCgALP/64CgALV/9cCgALZ/3ECgALb/3ECgALd/3ECgALg/9cCgALv/+wCgALw/9cCgALx/+wCgALy/9cCgALz/+wCgAL0/9cCgAL+/9cCgAMJ/3ECgAMK/9cCgAML/3ECgAMM/9cCgAMR/5oCgAMS/64CgAMV/+wCgAMW/9cCgAMa/9cCgAMb/5oCgAMc/64CgQAP/64CgQAR/64CgQHO/9cCgQHV/9cCgQHy/9cCgQII/64CgQIM/64CgQJz/9cCgQLP/9cCgQMS/9cCgQMc/9cCggAP/4UCggAR/4UCggGf/+wCggGk/5oCggGq/3ECggGu/5oCggG1/5oCggG4/+wCggG7/+wCggG+/8MCggHJ/+wCggHO/64CggHP/9cCggHV/64CggHY/9cCggHb/9cCggHe/9cCggHh/9cCggHq/9cCggHrAGYCggHt/9cCggHu/+wCggHy/64CggH0AGYCggII/4UCggIM/4UCggJq/9cCggJs/+wCggJy/3ECggJz/64CggJ+/+wCggJ//9cCggKE/+wCggKF/9cCggKG/+wCggKH/9cCggKI/+wCggKJ/9cCggKK/+wCggKM/+wCggKN/9cCggKYAGYCggKoAGYCggKx/+wCggKy/9cCggKz/+wCggK0/9cCggLA/9cCggLC/9cCggLF/9cCggLG/8MCggLH/9cCggLI/8MCggLO/5oCggLP/64CggLV/9cCggLZ/3ECggLb/3ECggLd/3ECggLg/9cCggLv/+wCggLw/9cCggLx/+wCggLy/9cCggLz/+wCggL0/9cCggL+/9cCggMJ/3ECggMK/9cCggML/3ECggMM/9cCggMR/5oCggMS/64CggMV/+wCggMW/9cCggMa/9cCggMb/5oCggMc/64CgwAP/64CgwAR/64CgwHO/9cCgwHV/9cCgwHy/9cCgwII/64CgwIM/64CgwJz/9cCgwLP/9cCgwMS/9cCgwMc/9cChAAP/64ChAAR/64ChAHO/9cChAHV/9cChAHy/9cChAII/64ChAIM/64ChAJz/9cChALP/9cChAMS/9cChAMc/9cChQAP/64ChQAR/64ChQHO/9cChQHV/9cChQHy/9cChQII/64ChQIM/64ChQJz/9cChQLP/9cChQMS/9cChQMc/9cChgAP/64ChgAR/64ChgGd/+wChgGk/9cChgGm/+wChgGo/9cChgGq/9cChgGu/9cChgGw/9cChgGx/+wChgG1/9cChgG8/8MChgG9/9cChgG//9cChgHB/9cChgHE/+wChgHH/+wChgHO/+wChgHV/+wChgHy/+wChgII/64ChgIM/64ChgJy/9cChgJz/+wChgJ6/+wChgJ8/9cChgKA/+wChgKC/+wChgKf/9cChgKh/+wChgKp/+wChgK1/8MChgK3/+wChgK5/+wChgK7/9cChgK9/+wChgK//9cChgLB/9cChgLK/9cChgLO/9cChgLP/+wChgLU/9cChgLZ/9cChgLb/9cChgLd/9cChgLl/9cChgLn/+wChgL1/+wChgL3/9cChgL5/9cChgL7/9cChgL9/9cChgMF/9cChgMH/9cChgMN/9cChgMP/9cChgMR/9cChgMS/+wChgMX/+wChgMb/9cChgMc/+wChwAF/+wChwAK/+wChwHQ/9cChwHc/+wChwHd/+wChwHf/9cChwHh/+wChwHk/+wChwH2/+wChwIH/+wChwIL/+wChwKg/9cChwKq/+wChwK2/+wChwK8/9cChwK+/+wChwLA/+wChwLC/+wChwLL/9cChwLV/+wChwLm/9cChwL4/+wChwL6/+wChwL8/+wChwL+/+wChwMG/9cChwMI/9cChwMO/+wChwMQ/+wChwMY/+wCiAAP/64CiAAR/64CiAGd/+wCiAGk/9cCiAGm/+wCiAGo/9cCiAGq/9cCiAGu/9cCiAGw/9cCiAGx/+wCiAG1/9cCiAG8/8MCiAG9/9cCiAG//9cCiAHB/9cCiAHE/+wCiAHH/+wCiAHO/+wCiAHV/+wCiAHy/+wCiAII/64CiAIM/64CiAJy/9cCiAJz/+wCiAJ6/+wCiAJ8/9cCiAKA/+wCiAKC/+wCiAKf/9cCiAKh/+wCiAKp/+wCiAK1/8MCiAK3/+wCiAK5/+wCiAK7/9cCiAK9/+wCiAK//9cCiALB/9cCiALK/9cCiALO/9cCiALP/+wCiALU/9cCiALZ/9cCiALb/9cCiALd/9cCiALl/9cCiALn/+wCiAL1/+wCiAL3/9cCiAL5/9cCiAL7/9cCiAL9/9cCiAMF/9cCiAMH/9cCiAMN/9cCiAMP/9cCiAMR/9cCiAMS/+wCiAMX/+wCiAMb/9cCiAMc/+wCiQAF/+wCiQAK/+wCiQHQ/9cCiQHc/+wCiQHd/+wCiQHf/9cCiQHh/+wCiQHk/+wCiQH2/+wCiQIH/+wCiQIL/+wCiQKg/9cCiQKq/+wCiQK2/+wCiQK8/9cCiQK+/+wCiQLA/+wCiQLC/+wCiQLL/9cCiQLV/+wCiQLm/9cCiQL4/+wCiQL6/+wCiQL8/+wCiQL+/+wCiQMG/9cCiQMI/9cCiQMO/+wCiQMQ/+wCiQMY/+wCigAP/64CigAR/64CigGd/+wCigGk/9cCigGm/+wCigGo/9cCigGq/9cCigGu/9cCigGw/9cCigGx/+wCigG1/9cCigG8/8MCigG9/9cCigG//9cCigHB/9cCigHE/+wCigHH/+wCigHO/+wCigHV/+wCigHy/+wCigII/64CigIM/64CigJy/9cCigJz/+wCigJ6/+wCigJ8/9cCigKA/+wCigKC/+wCigKf/9cCigKh/+wCigKp/+wCigK1/8MCigK3/+wCigK5/+wCigK7/9cCigK9/+wCigK//9cCigLB/9cCigLK/9cCigLO/9cCigLP/+wCigLU/9cCigLZ/9cCigLb/9cCigLd/9cCigLl/9cCigLn/+wCigL1/+wCigL3/9cCigL5/9cCigL7/9cCigL9/9cCigMF/9cCigMH/9cCigMN/9cCigMP/9cCigMR/9cCigMS/+wCigMX/+wCigMb/9cCigMc/+wCiwAP/64CiwAR/64CiwHO/9cCiwHV/9cCiwHy/9cCiwII/64CiwIM/64CiwJz/9cCiwLP/9cCiwMS/9cCiwMc/9cCjAGf/9cCjAG4/9cCjAG7/9cCjAG+/9cCjAHh/9cCjAJs/9cCjAJ+/9cCjAKE/9cCjAKG/9cCjAKI/9cCjAKK/9cCjAKM/9cCjAKx/9cCjAKz/9cCjALA/9cCjALC/9cCjALF/9cCjALH/9cCjALV/9cCjALv/9cCjALx/9cCjALz/9cCjAL+/9cCjAMJ/9cCjAML/9cCjAMO/9cCjAMQ/9cCjAMV/9cClQGjAOEClQLqACkClQMO/9cClQMQ/9cClgAF/+wClgAK/+wClgIH/+wClgIL/+wClwAF/64ClwAK/64ClwGd/9cClwGm/9cClwG8/64ClwHB/64ClwHE/9cClwHc/9cClwHk/9cClwIH/64ClwIL/64ClwJ8/64ClwKA/8MClwKC/8MClwKp/9cClwKq/9cClwK1/64ClwK2/9cClwK3/8MClwK5/8MClwK9/9cClwK+/9cClwK//64ClwLB/64ClwLU/64ClwL9/64ClwMN/5oClwMP/5oClwMX/9cClwMY/9cCmAAF/4UCmAAK/4UCmAHQ/9cCmAHc/5oCmAHd/8MCmAHf/9cCmAHh/64CmAHk/5oCmAH2/8MCmAIH/4UCmAIL/4UCmAJt/9cCmAKB/9cCmAKD/9cCmAKL/9cCmAKg/9cCmAKq/5oCmAK2/5oCmAK4/8MCmAK6/8MCmAK8/9cCmAK+/5oCmALA/64CmALC/64CmALG/9cCmALI/9cCmALL/9cCmALV/64CmALm/9cCmALq/9cCmAL4/8MCmAL6/8MCmAL8/8MCmAL+/64CmAMG/9cCmAMI/9cCmAMO/5oCmAMQ/5oCmAMY/5oCmQAP/vYCmQAR/vYCmQGk/4UCmQGq/5oCmQGu/4UCmQGw/9cCmQG1/4UCmQG//9cCmQHO/5oCmQHV/5oCmQHy/5oCmQII/vYCmQIM/vYCmQJy/5oCmQJz/5oCmQJ2/+wCmQKf/9cCmQK7/9cCmQLK/9cCmQLO/4UCmQLP/5oCmQLZ/5oCmQLb/5oCmQLd/5oCmQLl/9cCmQMF/9cCmQMH/9cCmQMJ/64CmQML/64CmQMR/4UCmQMS/5oCmQMb/4UCmQMc/5oCmgAF/+wCmgAK/+wCmgHQ/9cCmgHc/+wCmgHd/+wCmgHf/9cCmgHh/+wCmgHk/+wCmgH2/+wCmgIH/+wCmgIL/+wCmgKg/9cCmgKq/+wCmgK2/+wCmgK8/9cCmgK+/+wCmgLA/+wCmgLC/+wCmgLL/9cCmgLV/+wCmgLm/9cCmgL4/+wCmgL6/+wCmgL8/+wCmgL+/+wCmgMG/9cCmgMI/9cCmgMO/+wCmgMQ/+wCmgMY/+wCmwAP/5oCmwAQ/9cCmwAR/5oCmwGdACkCmwGf/9cCmwGk/64CmwGmACkCmwGq/4UCmwGu/64CmwG1/64CmwG4/9cCmwG7/9cCmwG8ACkCmwG+/8MCmwHEACkCmwHM/8MCmwHN/8MCmwHO/5oCmwHP/64CmwHQ/9cCmwHR/9cCmwHS/8MCmwHT/8MCmwHU/8MCmwHV/5oCmwHW/8MCmwHX/8MCmwHY/64CmwHZ/8MCmwHa/8MCmwHb/64CmwHe/64CmwHf/9cCmwHg/8MCmwHh/5oCmwHi/8MCmwHj/8MCmwHl/8MCmwHm/8MCmwHn/9cCmwHo/8MCmwHq/64CmwHrACkCmwHs/8MCmwHt/64CmwHu/8MCmwHy/5oCmwHz/8MCmwH0ACkCmwH1/8MCmwH3/8MCmwH5/8MCmwIC/9cCmwID/9cCmwIE/9cCmwII/5oCmwIM/5oCmwJq/64CmwJr/8MCmwJs/9cCmwJx/8MCmwJy/4UCmwJz/5oCmwJ1/8MCmwJ3/9cCmwJ5/8MCmwJ9/8MCmwJ+/9cCmwJ//64CmwKE/9cCmwKF/64CmwKG/9cCmwKH/64CmwKI/9cCmwKJ/64CmwKK/9cCmwKM/9cCmwKN/64CmwKW/8MCmwKYACkCmwKa/8MCmwKe/8MCmwKg/9cCmwKi/9cCmwKk/8MCmwKm/8MCmwKoACkCmwKpACkCmwKs/8MCmwKu/8MCmwKw/8MCmwKx/9cCmwKy/64CmwKz/9cCmwK0/64CmwK1ACkCmwK8/9cCmwK9ACkCmwLA/5oCmwLC/5oCmwLE/8MCmwLF/9cCmwLG/8MCmwLH/9cCmwLI/8MCmwLL/9cCmwLN/8MCmwLO/64CmwLP/5oCmwLR/8MCmwLT/8MCmwLV/5oCmwLX/8MCmwLZ/4UCmwLb/4UCmwLd/4UCmwLg/64CmwLm/9cCmwLo/9cCmwLs/8MCmwLu/8MCmwLv/9cCmwLw/64CmwLx/9cCmwLy/64CmwLz/9cCmwL0/64CmwL2/9cCmwL+/5oCmwMA/8MCmwMC/8MCmwMG/9cCmwMI/9cCmwMJ/5oCmwMK/64CmwML/5oCmwMM/64CmwMO/9cCmwMQ/9cCmwMR/64CmwMS/5oCmwMU/8MCmwMV/9cCmwMW/64CmwMXACkCmwMa/64CmwMb/64CmwMc/5oCnAAP/8MCnAAR/8MCnAHO/8MCnAHP/9cCnAHV/8MCnAHY/9cCnAHb/9cCnAHe/9cCnAHq/9cCnAHt/9cCnAHy/8MCnAII/8MCnAIM/8MCnAJq/9cCnAJz/8MCnAJ//9cCnAKF/9cCnAKH/9cCnAKJ/9cCnAKN/9cCnAKy/9cCnAK0/9cCnALP/8MCnALg/9cCnALw/9cCnALy/9cCnAL0/9cCnAMK/9cCnAMM/9cCnAMS/8MCnAMW/9cCnAMa/9cCnAMc/8MCnQAF/8MCnQAK/8MCnQGd/8MCnQGjAGYCnQGm/8MCnQG8/8MCnQHB/64CnQHE/8MCnQHc/9cCnQHh/9cCnQHk/9cCnQIH/8MCnQIL/8MCnQJ8/64CnQKA/8MCnQKC/8MCnQKp/8MCnQKq/9cCnQK1/8MCnQK2/9cCnQK3/9cCnQK5/9cCnQK9/8MCnQK+/9cCnQK//64CnQLA/9cCnQLB/64CnQLC/9cCnQLU/64CnQLV/9cCnQL9/64CnQL+/9cCnQMN/9cCnQMO/8MCnQMP/9cCnQMQ/8MCnQMX/8MCnQMY/9cCngAF/8MCngAK/8MCngIH/8MCngIL/8MCngMO/9cCngMQ/9cCnwGf/9cCnwGjAOECnwG4/9cCnwG7/9cCnwG+/8MCnwHc/9cCnwHh/64CnwHk/9cCnwJs/9cCnwJ7AD0CnwJ9/+wCnwJ+/9cCnwKE/9cCnwKG/9cCnwKI/9cCnwKK/9cCnwKM/9cCnwKq/9cCnwKx/9cCnwKz/9cCnwK2/9cCnwK+/9cCnwLA/64CnwLC/64CnwLF/8MCnwLG/9cCnwLH/8MCnwLI/9cCnwLV/64CnwLv/9cCnwLx/9cCnwLz/9cCnwL+/64CnwMO/9cCnwMQ/9cCnwMV/9cCnwMY/9cCoAHP/+wCoAHY/+wCoAHb/+wCoAHe/+wCoAHh/+wCoAHq/+wCoAHt/+wCoAJq/+wCoAJ//+wCoAKF/+wCoAKH/+wCoAKJ/+wCoAKN/+wCoAKy/+wCoAK0/+wCoALA/+wCoALC/+wCoALV/+wCoALg/+wCoALw/+wCoALy/+wCoAL0/+wCoAL+/+wCoAMK/+wCoAMM/+wCoAMO/9cCoAMQ/9cCoAMW/+wCoAMa/+wCoQAP/64CoQAR/64CoQII/64CoQIM/64CoQKA/+wCoQKC/+wCoQK3/+wCoQK5/+wCoQMN/9cCoQMP/9cCogHpACkCowGf/9cCowGjAOECowG4/9cCowG7/9cCowG+/8MCowHc/9cCowHh/64CowHk/9cCowJs/9cCowJ7AD0CowJ9/+wCowJ+/9cCowKE/9cCowKG/9cCowKI/9cCowKK/9cCowKM/9cCowKq/9cCowKx/9cCowKz/9cCowK2/9cCowK+/9cCowLA/64CowLC/64CowLF/8MCowLG/9cCowLH/8MCowLI/9cCowLV/64CowLv/9cCowLx/9cCowLz/9cCowL+/64CowMO/9cCowMQ/9cCowMV/9cCowMY/9cCpAHP/+wCpAHY/+wCpAHb/+wCpAHe/+wCpAHh/+wCpAHq/+wCpAHt/+wCpAJq/+wCpAJ//+wCpAKF/+wCpAKH/+wCpAKJ/+wCpAKN/+wCpAKy/+wCpAK0/+wCpALA/+wCpALC/+wCpALV/+wCpALg/+wCpALw/+wCpALy/+wCpAL0/+wCpAL+/+wCpAMK/+wCpAMM/+wCpAMO/9cCpAMQ/9cCpAMW/+wCpAMa/+wCpQGf/9cCpQG4/9cCpQG7/9cCpQG+/9cCpQHB/9cCpQHh/9cCpQJs/9cCpQJ8/9cCpQJ+/9cCpQKE/9cCpQKG/9cCpQKI/9cCpQKK/9cCpQKM/9cCpQKx/9cCpQKz/9cCpQK//9cCpQLA/9cCpQLB/9cCpQLC/9cCpQLF/5oCpQLH/5oCpQLU/9cCpQLV/9cCpQLv/9cCpQLx/9cCpQLz/9cCpQL9/9cCpQL+/9cCpQMJ/9cCpQML/9cCpQMO/9cCpQMQ/9cCpQMV/9cCpQMZ/+wCpgHP/9cCpgHY/9cCpgHb/9cCpgHe/9cCpgHh/9cCpgHq/9cCpgHt/9cCpgJq/9cCpgJ//9cCpgKF/9cCpgKH/9cCpgKJ/9cCpgKN/9cCpgKy/9cCpgK0/9cCpgLA/9cCpgLC/9cCpgLG/9cCpgLI/9cCpgLV/9cCpgLg/9cCpgLw/9cCpgLy/9cCpgL0/9cCpgL+/9cCpgMK/9cCpgMM/9cCpgMW/9cCpgMa/9cCpwGf/9cCpwG4/9cCpwG7/9cCpwG+/9cCpwHB/9cCpwHh/9cCpwJs/9cCpwJ8/9cCpwJ+/9cCpwKE/9cCpwKG/9cCpwKI/9cCpwKK/9cCpwKM/9cCpwKx/9cCpwKz/9cCpwK//9cCpwLA/9cCpwLB/9cCpwLC/9cCpwLF/5oCpwLH/5oCpwLU/9cCpwLV/9cCpwLv/9cCpwLx/9cCpwLz/9cCpwL9/9cCpwL+/9cCpwMJ/9cCpwML/9cCpwMO/9cCpwMQ/9cCpwMV/9cCpwMZ/+wCqAHP/9cCqAHY/9cCqAHb/9cCqAHe/9cCqAHh/9cCqAHq/9cCqAHt/9cCqAJq/9cCqAJ//9cCqAKF/9cCqAKH/9cCqAKJ/9cCqAKN/9cCqAKy/9cCqAK0/9cCqALA/9cCqALC/9cCqALG/9cCqALI/9cCqALV/9cCqALg/9cCqALw/9cCqALy/9cCqAL0/9cCqAL+/9cCqAMK/9cCqAMM/9cCqAMW/9cCqAMa/9cCqQGf/9cCqQG4/9cCqQG7/9cCqQG+/9cCqQHB/9cCqQHh/9cCqQJs/9cCqQJ8/9cCqQJ+/9cCqQKE/9cCqQKG/9cCqQKI/9cCqQKK/9cCqQKM/9cCqQKx/9cCqQKz/9cCqQK//9cCqQLA/9cCqQLB/9cCqQLC/9cCqQLF/5oCqQLH/5oCqQLU/9cCqQLV/9cCqQLv/9cCqQLx/9cCqQLz/9cCqQL9/9cCqQL+/9cCqQMJ/9cCqQML/9cCqQMO/9cCqQMQ/9cCqQMV/9cCqQMZ/+wCqgHP/9cCqgHY/9cCqgHb/9cCqgHe/9cCqgHh/9cCqgHq/9cCqgHt/9cCqgJq/9cCqgJ//9cCqgKF/9cCqgKH/9cCqgKJ/9cCqgKN/9cCqgKy/9cCqgK0/9cCqgLA/9cCqgLC/9cCqgLG/9cCqgLI/9cCqgLV/9cCqgLg/9cCqgLw/9cCqgLy/9cCqgL0/9cCqgL+/9cCqgMK/9cCqgMM/9cCqgMW/9cCqgMa/9cCqwGjAOECqwLqACkCqwMO/9cCqwMQ/9cCrAAF/+wCrAAK/+wCrAIH/+wCrAIL/+wCrQAP/5oCrQAQ/9cCrQAR/5oCrQGdACkCrQGf/9cCrQGk/64CrQGmACkCrQGq/4UCrQGu/64CrQG1/64CrQG4/9cCrQG7/9cCrQG8ACkCrQG+/8MCrQHEACkCrQHM/8MCrQHN/8MCrQHO/5oCrQHP/64CrQHQ/9cCrQHR/9cCrQHS/8MCrQHT/8MCrQHU/8MCrQHV/5oCrQHW/8MCrQHX/8MCrQHY/64CrQHZ/8MCrQHa/8MCrQHb/64CrQHe/64CrQHf/9cCrQHg/8MCrQHh/5oCrQHi/8MCrQHj/8MCrQHl/8MCrQHm/8MCrQHn/9cCrQHo/8MCrQHq/64CrQHrACkCrQHs/8MCrQHt/64CrQHu/8MCrQHy/5oCrQHz/8MCrQH0ACkCrQH1/8MCrQH3/8MCrQH5/8MCrQIC/9cCrQID/9cCrQIE/9cCrQII/5oCrQIM/5oCrQJq/64CrQJr/8MCrQJs/9cCrQJx/8MCrQJy/4UCrQJz/5oCrQJ1/8MCrQJ3/9cCrQJ5/8MCrQJ9/8MCrQJ+/9cCrQJ//64CrQKE/9cCrQKF/64CrQKG/9cCrQKH/64CrQKI/9cCrQKJ/64CrQKK/9cCrQKM/9cCrQKN/64CrQKW/8MCrQKYACkCrQKa/8MCrQKe/8MCrQKg/9cCrQKi/9cCrQKk/8MCrQKm/8MCrQKoACkCrQKpACkCrQKs/8MCrQKu/8MCrQKw/8MCrQKx/9cCrQKy/64CrQKz/9cCrQK0/64CrQK1ACkCrQK8/9cCrQK9ACkCrQLA/5oCrQLC/5oCrQLE/8MCrQLF/9cCrQLG/8MCrQLH/9cCrQLI/8MCrQLL/9cCrQLN/8MCrQLO/64CrQLP/5oCrQLR/8MCrQLT/8MCrQLV/5oCrQLX/8MCrQLZ/4UCrQLb/4UCrQLd/4UCrQLg/64CrQLm/9cCrQLo/9cCrQLs/8MCrQLu/8MCrQLv/9cCrQLw/64CrQLx/9cCrQLy/64CrQLz/9cCrQL0/64CrQL2/9cCrQL+/5oCrQMA/8MCrQMC/8MCrQMG/9cCrQMI/9cCrQMJ/5oCrQMK/64CrQML/5oCrQMM/64CrQMO/9cCrQMQ/9cCrQMR/64CrQMS/5oCrQMU/8MCrQMV/9cCrQMW/64CrQMXACkCrQMa/64CrQMb/64CrQMc/5oCrgAP/5oCrgAQ/9cCrgAR/5oCrgHO/8MCrgHP/+wCrgHV/8MCrgHY/+wCrgHb/+wCrgHe/+wCrgHq/+wCrgHt/+wCrgHy/8MCrgIC/9cCrgID/9cCrgIE/9cCrgII/5oCrgIM/5oCrgJq/+wCrgJz/8MCrgJ//+wCrgKF/+wCrgKH/+wCrgKJ/+wCrgKN/+wCrgKy/+wCrgK0/+wCrgLP/8MCrgLg/+wCrgLw/+wCrgLy/+wCrgL0/+wCrgMK/+wCrgMM/+wCrgMS/8MCrgMW/+wCrgMa/+wCrgMc/8MCrwAF/1wCrwAK/1wCrwGd/5oCrwGjAGYCrwGm/5oCrwG8/0gCrwHB/4UCrwHE/5oCrwHc/64CrwHh/9cCrwHk/64CrwIH/1wCrwIL/1wCrwJ8/4UCrwKA/3ECrwKC/3ECrwKp/5oCrwKq/64CrwK1/0gCrwK2/64CrwK3/5oCrwK5/5oCrwK9/5oCrwK+/64CrwK//4UCrwLA/9cCrwLB/4UCrwLC/9cCrwLF/8MCrwLG/9cCrwLH/8MCrwLI/9cCrwLU/4UCrwLV/9cCrwL9/4UCrwL+/9cCrwMN/0gCrwMO/64CrwMP/0gCrwMQ/64CrwMX/5oCrwMY/64CsAAF/3ECsAAK/3ECsAHc/5oCsAHh/9cCsAHk/5oCsAIH/3ECsAIL/3ECsAJt/9cCsAKB/9cCsAKD/9cCsAKL/9cCsAKq/5oCsAK2/5oCsAK4/9cCsAK6/9cCsAK+/5oCsALA/9cCsALC/9cCsALG/9cCsALI/9cCsALV/9cCsAL+/9cCsAMO/3ECsAMQ/3ECsAMY/5oCsQGd/9cCsQGm/9cCsQG8/8MCsQHE/9cCsQKA/+wCsQKC/+wCsQKp/9cCsQK1/8MCsQK3/+wCsQK5/+wCsQK9/9cCsQMN/9cCsQMP/9cCsQMX/9cCsgAF/+wCsgAK/+wCsgHQ/9cCsgHc/+wCsgHd/+wCsgHf/9cCsgHh/+wCsgHk/+wCsgH2/+wCsgIH/+wCsgIL/+wCsgKg/9cCsgKq/+wCsgK2/+wCsgK8/9cCsgK+/+wCsgLA/+wCsgLC/+wCsgLL/9cCsgLV/+wCsgLm/9cCsgL4/+wCsgL6/+wCsgL8/+wCsgL+/+wCsgMG/9cCsgMI/9cCsgMO/+wCsgMQ/+wCsgMY/+wCswGf/9cCswG4/9cCswG7/9cCswG+/9cCswHh/9cCswJs/9cCswJ+/9cCswKE/9cCswKG/9cCswKI/9cCswKK/9cCswKM/9cCswKx/9cCswKz/9cCswLA/9cCswLC/9cCswLF/9cCswLH/9cCswLV/9cCswLv/9cCswLx/9cCswLz/9cCswL+/9cCswMJ/9cCswML/9cCswMO/9cCswMQ/9cCswMV/9cCtQAP/4UCtQAQ/64CtQAR/4UCtQGf/9cCtQGk/5oCtQGq/3ECtQGu/5oCtQG1/5oCtQG4/9cCtQG7/9cCtQG8ACkCtQG+/64CtQHM/5oCtQHN/5oCtQHO/4UCtQHP/3ECtQHQ/9cCtQHR/9cCtQHS/5oCtQHT/5oCtQHU/5oCtQHV/4UCtQHW/5oCtQHX/5oCtQHY/3ECtQHZ/5oCtQHa/5oCtQHb/3ECtQHc/64CtQHd/64CtQHe/3ECtQHf/9cCtQHg/5oCtQHh/5oCtQHi/5oCtQHj/5oCtQHk/64CtQHl/5oCtQHm/5oCtQHn/9cCtQHo/5oCtQHp/8MCtQHq/3ECtQHs/5oCtQHt/3ECtQHu/4UCtQHy/4UCtQHz/5oCtQH1/5oCtQH2/64CtQH3/5oCtQH5/5oCtQIC/64CtQID/64CtQIE/64CtQII/4UCtQIM/4UCtQJq/3ECtQJr/5oCtQJs/9cCtQJt/9cCtQJx/5oCtQJy/3ECtQJz/4UCtQJ1/5oCtQJ3/5oCtQJ5/5oCtQJ9/5oCtQJ+/9cCtQJ//3ECtQKB/9cCtQKD/9cCtQKE/9cCtQKF/3ECtQKG/9cCtQKH/3ECtQKI/9cCtQKJ/3ECtQKK/9cCtQKL/9cCtQKM/9cCtQKN/3ECtQKW/5oCtQKa/5oCtQKe/5oCtQKg/9cCtQKi/9cCtQKk/5oCtQKm/5oCtQKq/64CtQKs/5oCtQKu/5oCtQKw/5oCtQKx/9cCtQKy/3ECtQKz/9cCtQK0/3ECtQK1ACkCtQK2/64CtQK4/64CtQK6/64CtQK8/9cCtQK+/64CtQLA/5oCtQLC/5oCtQLE/5oCtQLF/5oCtQLG/3ECtQLH/5oCtQLI/3ECtQLL/9cCtQLN/5oCtQLO/5oCtQLP/4UCtQLR/5oCtQLT/5oCtQLV/5oCtQLX/5oCtQLZ/3ECtQLb/3ECtQLd/3ECtQLg/3ECtQLm/9cCtQLo/9cCtQLq/8MCtQLs/5oCtQLu/5oCtQLv/9cCtQLw/3ECtQLx/9cCtQLy/3ECtQLz/9cCtQL0/3ECtQL2/9cCtQL4/64CtQL6/64CtQL8/64CtQL+/5oCtQMA/5oCtQMC/5oCtQMG/9cCtQMI/9cCtQMJ/3ECtQMK/3ECtQML/3ECtQMM/3ECtQMO/5oCtQMQ/5oCtQMR/5oCtQMS/4UCtQMU/5oCtQMV/9cCtQMW/3ECtQMY/64CtQMa/3ECtQMb/5oCtQMc/4UCtgAP/5oCtgAQ/9cCtgAR/5oCtgHO/8MCtgHP/+wCtgHV/8MCtgHY/+wCtgHb/+wCtgHe/+wCtgHq/+wCtgHt/+wCtgHy/8MCtgIC/9cCtgID/9cCtgIE/9cCtgII/5oCtgIM/5oCtgJq/+wCtgJz/8MCtgJ//+wCtgKF/+wCtgKH/+wCtgKJ/+wCtgKN/+wCtgKy/+wCtgK0/+wCtgLP/8MCtgLg/+wCtgLw/+wCtgLy/+wCtgL0/+wCtgMK/+wCtgMM/+wCtgMS/8MCtgMW/+wCtgMa/+wCtgMc/8MCtwAP/4UCtwAR/4UCtwGf/9cCtwGk/64CtwGq/4UCtwGu/64CtwG1/64CtwG4/9cCtwG7/9cCtwG+/8MCtwHK/64CtwHM/8MCtwHN/8MCtwHO/5oCtwHP/5oCtwHS/8MCtwHT/8MCtwHU/8MCtwHV/5oCtwHW/8MCtwHX/8MCtwHY/5oCtwHZ/8MCtwHa/8MCtwHb/5oCtwHe/5oCtwHg/8MCtwHh/64CtwHi/8MCtwHj/8MCtwHl/8MCtwHm/8MCtwHo/8MCtwHp/9cCtwHq/5oCtwHrACkCtwHs/8MCtwHt/5oCtwHu/64CtwHy/5oCtwHz/8MCtwH0ACkCtwH1/8MCtwH3/8MCtwH5/8MCtwII/4UCtwIM/4UCtwJq/5oCtwJr/8MCtwJs/9cCtwJx/8MCtwJy/4UCtwJz/5oCtwJ1/8MCtwJ3/9cCtwJ5/8MCtwJ9/9cCtwJ+/9cCtwJ//5oCtwKE/9cCtwKF/5oCtwKG/9cCtwKH/5oCtwKI/9cCtwKJ/5oCtwKK/9cCtwKM/9cCtwKN/5oCtwKW/8MCtwKYACkCtwKa/8MCtwKe/8MCtwKk/8MCtwKm/8MCtwKoACkCtwKs/8MCtwKu/8MCtwKw/8MCtwKx/9cCtwKy/5oCtwKz/9cCtwK0/5oCtwLA/64CtwLC/64CtwLE/8MCtwLG/64CtwLI/64CtwLN/8MCtwLO/64CtwLP/5oCtwLR/8MCtwLT/8MCtwLV/64CtwLX/8MCtwLZ/4UCtwLa/64CtwLb/4UCtwLc/64CtwLd/4UCtwLe/64CtwLg/5oCtwLh/+wCtwLi/64CtwLj/+wCtwLk/64CtwLs/8MCtwLu/8MCtwLv/9cCtwLw/5oCtwLx/9cCtwLy/5oCtwLz/9cCtwL0/5oCtwL+/64CtwMA/8MCtwMC/8MCtwMJ/64CtwMK/5oCtwML/64CtwMM/5oCtwMO/9cCtwMQ/9cCtwMR/64CtwMS/5oCtwMU/8MCtwMV/9cCtwMW/5oCtwMZ/+wCtwMa/5oCtwMb/64CtwMc/5oCuAAP/64CuAAR/64CuAHO/+wCuAHV/+wCuAHy/+wCuAII/64CuAIM/64CuAJz/+wCuALP/+wCuAMS/+wCuAMc/+wCuQAP/4UCuQAR/4UCuQGf/9cCuQGk/64CuQGq/4UCuQGu/64CuQG1/64CuQG4/9cCuQG7/9cCuQG+/8MCuQHK/64CuQHM/8MCuQHN/8MCuQHO/5oCuQHP/5oCuQHS/8MCuQHT/8MCuQHU/8MCuQHV/5oCuQHW/8MCuQHX/8MCuQHY/5oCuQHZ/8MCuQHa/8MCuQHb/5oCuQHe/5oCuQHg/8MCuQHh/64CuQHi/8MCuQHj/8MCuQHl/8MCuQHm/8MCuQHo/8MCuQHp/9cCuQHq/5oCuQHrACkCuQHs/8MCuQHt/5oCuQHu/64CuQHy/5oCuQHz/8MCuQH0ACkCuQH1/8MCuQH3/8MCuQH5/8MCuQII/4UCuQIM/4UCuQJq/5oCuQJr/8MCuQJs/9cCuQJx/8MCuQJy/4UCuQJz/5oCuQJ1/8MCuQJ3/9cCuQJ5/8MCuQJ9/9cCuQJ+/9cCuQJ//5oCuQKE/9cCuQKF/5oCuQKG/9cCuQKH/5oCuQKI/9cCuQKJ/5oCuQKK/9cCuQKM/9cCuQKN/5oCuQKW/8MCuQKYACkCuQKa/8MCuQKe/8MCuQKk/8MCuQKm/8MCuQKoACkCuQKs/8MCuQKu/8MCuQKw/8MCuQKx/9cCuQKy/5oCuQKz/9cCuQK0/5oCuQLA/64CuQLC/64CuQLE/8MCuQLG/64CuQLI/64CuQLN/8MCuQLO/64CuQLP/5oCuQLR/8MCuQLT/8MCuQLV/64CuQLX/8MCuQLZ/4UCuQLa/64CuQLb/4UCuQLc/64CuQLd/4UCuQLe/64CuQLg/5oCuQLh/+wCuQLi/64CuQLj/+wCuQLk/64CuQLs/8MCuQLu/8MCuQLv/9cCuQLw/5oCuQLx/9cCuQLy/5oCuQLz/9cCuQL0/5oCuQL+/64CuQMA/8MCuQMC/8MCuQMJ/64CuQMK/5oCuQML/64CuQMM/5oCuQMO/9cCuQMQ/9cCuQMR/64CuQMS/5oCuQMU/8MCuQMV/9cCuQMW/5oCuQMZ/+wCuQMa/5oCuQMb/64CuQMc/5oCugAP/64CugAR/64CugHO/+wCugHV/+wCugHy/+wCugII/64CugIM/64CugJz/+wCugLP/+wCugMS/+wCugMc/+wCuwGf/9cCuwGjAOECuwG4/9cCuwG7/9cCuwG+/8MCuwHc/9cCuwHh/64CuwHk/9cCuwJs/9cCuwJ7AD0CuwJ9/+wCuwJ+/9cCuwKE/9cCuwKG/9cCuwKI/9cCuwKK/9cCuwKM/9cCuwKq/9cCuwKx/9cCuwKz/9cCuwK2/9cCuwK+/9cCuwLA/64CuwLC/64CuwLF/8MCuwLG/9cCuwLH/8MCuwLI/9cCuwLV/64CuwLv/9cCuwLx/9cCuwLz/9cCuwL+/64CuwMO/9cCuwMQ/9cCuwMV/9cCuwMY/9cCvAHP/+wCvAHY/+wCvAHb/+wCvAHe/+wCvAHh/+wCvAHq/+wCvAHt/+wCvAJq/+wCvAJ//+wCvAKF/+wCvAKH/+wCvAKJ/+wCvAKN/+wCvAKy/+wCvAK0/+wCvALA/+wCvALC/+wCvALV/+wCvALg/+wCvALw/+wCvALy/+wCvAL0/+wCvAL+/+wCvAMK/+wCvAMM/+wCvAMO/9cCvAMQ/9cCvAMW/+wCvAMa/+wCvQGjAOECvQLqACkCvQMO/9cCvQMQ/9cCvgAF/+wCvgAK/+wCvgIH/+wCvgIL/+wCvwGjAOECvwLqACkCvwMO/9cCvwMQ/9cCwAAF/+wCwAAK/+wCwAIH/+wCwAIL/+wCwwAF/8MCwwAK/8MCwwGd/9cCwwGm/9cCwwG8/4UCwwHB/64CwwHE/9cCwwHc/9cCwwHd/+wCwwHh/+wCwwHk/9cCwwH2/+wCwwIH/8MCwwIL/8MCwwJ8/64CwwKA/8MCwwKC/8MCwwKp/9cCwwKq/9cCwwK1/4UCwwK2/9cCwwK3/5oCwwK5/5oCwwK9/9cCwwK+/9cCwwK//64CwwLA/+wCwwLB/64CwwLC/+wCwwLU/64CwwLV/+wCwwL4/+wCwwL6/+wCwwL8/+wCwwL9/64CwwL+/+wCwwMN/64CwwMO/9cCwwMP/64CwwMQ/9cCwwMX/9cCwwMY/9cCxAAF/5oCxAAK/5oCxAHc/9cCxAHd/9cCxAHk/9cCxAH2/9cCxAIH/5oCxAIL/5oCxAKq/9cCxAK2/9cCxAK4/9cCxAK6/9cCxAK+/9cCxAL4/9cCxAL6/9cCxAL8/9cCxAMO/64CxAMQ/64CxAMY/9cCxQG8/9cCxQKA/+wCxQKC/+wCxQK1/9cCxQK3/+wCxQK5/+wCxQMN/+wCxQMP/+wCxgAF/+wCxgAK/+wCxgIH/+wCxgIL/+wCxwG8/9cCxwKA/+wCxwKC/+wCxwK1/9cCxwK3/+wCxwK5/+wCxwMN/+wCxwMP/+wCyAAF/+wCyAAK/+wCyAIH/+wCyAIL/+wCygGf/9cCygG4/9cCygG7/9cCygG+/9cCygHB/9cCygHh/9cCygJs/9cCygJ8/9cCygJ+/9cCygKE/9cCygKG/9cCygKI/9cCygKK/9cCygKM/9cCygKx/9cCygKz/9cCygK//9cCygLA/9cCygLB/9cCygLC/9cCygLF/5oCygLH/5oCygLU/9cCygLV/9cCygLv/9cCygLx/9cCygLz/9cCygL9/9cCygL+/9cCygMJ/9cCygML/9cCygMO/9cCygMQ/9cCygMV/9cCygMZ/+wCywHP/9cCywHY/9cCywHb/9cCywHe/9cCywHh/9cCywHq/9cCywHt/9cCywJq/9cCywJ//9cCywKF/9cCywKH/9cCywKJ/9cCywKN/9cCywKy/9cCywK0/9cCywLA/9cCywLC/9cCywLG/9cCywLI/9cCywLV/9cCywLg/9cCywLw/9cCywLy/9cCywL0/9cCywL+/9cCywMK/9cCywMM/9cCywMW/9cCywMa/9cCzAAF/8MCzAAK/8MCzAGjAGYCzAG8/9cCzAG+/9cCzAHB/64CzAHc/8MCzAHh/9cCzAHk/8MCzAIH/8MCzAIL/8MCzAJt/+wCzAJ8/64CzAKA/9cCzAKB/+wCzAKC/9cCzAKD/+wCzAKL/+wCzAKq/8MCzAK1/9cCzAK2/8MCzAK3/9cCzAK4/+wCzAK5/9cCzAK6/+wCzAK+/8MCzAK//64CzALA/9cCzALB/64CzALC/9cCzALF/8MCzALG/9cCzALH/8MCzALI/9cCzALU/64CzALV/9cCzAL9/64CzAL+/9cCzAMN/9cCzAMO/8MCzAMP/9cCzAMQ/8MCzAMY/8MCzQHh/9cCzQLA/9cCzQLC/9cCzQLV/9cCzQL+/9cCzgGjAOECzgLqACkCzgMO/9cCzgMQ/9cCzwAF/+wCzwAK/+wCzwIH/+wCzwIL/+wC0gGjAOEC0gLqACkC0gMO/9cC0gMQ/9cC0wAF/+wC0wAK/+wC0wIH/+wC0wIL/+wC1gGjAOEC1gLqACkC1gMO/9cC1gMQ/9cC1wAF/+wC1wAK/+wC1wIH/+wC1wIL/+wC2QAF/3EC2QAK/3EC2QGd/5oC2QGm/5oC2QG8/3EC2QG+/9cC2QHB/5oC2QHE/5oC2QHc/9cC2QHh/9cC2QHk/9cC2QIH/3EC2QIL/3EC2QJu/9cC2QJ8/5oC2QKA/64C2QKC/64C2QKX/9cC2QKb/9cC2QKn/9cC2QKp/5oC2QKq/9cC2QK1/3EC2QK2/9cC2QK3/4UC2QK5/4UC2QK9/5oC2QK+/9cC2QK//5oC2QLA/9cC2QLB/5oC2QLC/9cC2QLF/5oC2QLH/5oC2QLU/5oC2QLV/9cC2QLh/9cC2QLj/9cC2QL9/5oC2QL+/9cC2QMD/9cC2QMN/3EC2QMO/9cC2QMP/3EC2QMQ/9cC2QMX/5oC2QMY/9cC2gAF/+wC2gAK/+wC2gIH/+wC2gIL/+wC2wAF/3EC2wAK/3EC2wGd/5oC2wGm/5oC2wG8/3EC2wG+/9cC2wHB/5oC2wHE/5oC2wHc/9cC2wHh/9cC2wHk/9cC2wIH/3EC2wIL/3EC2wJu/9cC2wJ8/5oC2wKA/64C2wKC/64C2wKX/9cC2wKb/9cC2wKn/9cC2wKp/5oC2wKq/9cC2wK1/3EC2wK2/9cC2wK3/4UC2wK5/4UC2wK9/5oC2wK+/9cC2wK//5oC2wLA/9cC2wLB/5oC2wLC/9cC2wLF/5oC2wLH/5oC2wLU/5oC2wLV/9cC2wLh/9cC2wLj/9cC2wL9/5oC2wL+/9cC2wMD/9cC2wMN/3EC2wMO/9cC2wMP/3EC2wMQ/9cC2wMX/5oC2wMY/9cC3AAF/+wC3AAK/+wC3AIH/+wC3AIL/+wC3gAF/+wC3gAK/+wC3gIH/+wC3gIL/+wC4AAF/+wC4AAK/+wC4AIH/+wC4AIL/+wC4QAP/64C4QAR/64C4QGd/+wC4QGk/9cC4QGm/+wC4QGo/9cC4QGq/9cC4QGu/9cC4QGw/9cC4QGx/+wC4QG1/9cC4QG8/8MC4QG9/9cC4QG//9cC4QHB/9cC4QHE/+wC4QHH/+wC4QHO/+wC4QHV/+wC4QHy/+wC4QII/64C4QIM/64C4QJy/9cC4QJz/+wC4QJ6/+wC4QJ8/9cC4QKA/+wC4QKC/+wC4QKf/9cC4QKh/+wC4QKp/+wC4QK1/8MC4QK3/+wC4QK5/+wC4QK7/9cC4QK9/+wC4QK//9cC4QLB/9cC4QLK/9cC4QLO/9cC4QLP/+wC4QLU/9cC4QLZ/9cC4QLb/9cC4QLd/9cC4QLl/9cC4QLn/+wC4QL1/+wC4QL3/9cC4QL5/9cC4QL7/9cC4QL9/9cC4QMF/9cC4QMH/9cC4QMN/9cC4QMP/9cC4QMR/9cC4QMS/+wC4QMX/+wC4QMb/9cC4QMc/+wC4gAF/+wC4gAK/+wC4gHQ/9cC4gHc/+wC4gHd/+wC4gHf/9cC4gHh/+wC4gHk/+wC4gH2/+wC4gIH/+wC4gIL/+wC4gKg/9cC4gKq/+wC4gK2/+wC4gK8/9cC4gK+/+wC4gLA/+wC4gLC/+wC4gLL/9cC4gLV/+wC4gLm/9cC4gL4/+wC4gL6/+wC4gL8/+wC4gL+/+wC4gMG/9cC4gMI/9cC4gMO/+wC4gMQ/+wC4gMY/+wC4wAP/64C4wAR/64C4wGd/+wC4wGk/9cC4wGm/+wC4wGo/9cC4wGq/9cC4wGu/9cC4wGw/9cC4wGx/+wC4wG1/9cC4wG8/8MC4wG9/9cC4wG//9cC4wHB/9cC4wHE/+wC4wHH/+wC4wHO/+wC4wHV/+wC4wHy/+wC4wII/64C4wIM/64C4wJy/9cC4wJz/+wC4wJ6/+wC4wJ8/9cC4wKA/+wC4wKC/+wC4wKf/9cC4wKh/+wC4wKp/+wC4wK1/8MC4wK3/+wC4wK5/+wC4wK7/9cC4wK9/+wC4wK//9cC4wLB/9cC4wLK/9cC4wLO/9cC4wLP/+wC4wLU/9cC4wLZ/9cC4wLb/9cC4wLd/9cC4wLl/9cC4wLn/+wC4wL1/+wC4wL3/9cC4wL5/9cC4wL7/9cC4wL9/9cC4wMF/9cC4wMH/9cC4wMN/9cC4wMP/9cC4wMR/9cC4wMS/+wC4wMX/+wC4wMb/9cC4wMc/+wC5AAF/+wC5AAK/+wC5AHQ/9cC5AHc/+wC5AHd/+wC5AHf/9cC5AHh/+wC5AHk/+wC5AH2/+wC5AIH/+wC5AIL/+wC5AKg/9cC5AKq/+wC5AK2/+wC5AK8/9cC5AK+/+wC5ALA/+wC5ALC/+wC5ALL/9cC5ALV/+wC5ALm/9cC5AL4/+wC5AL6/+wC5AL8/+wC5AL+/+wC5AMG/9cC5AMI/9cC5AMO/+wC5AMQ/+wC5AMY/+wC5QGf/9cC5QG4/9cC5QG7/9cC5QG+/9cC5QHB/9cC5QHh/9cC5QJs/9cC5QJ8/9cC5QJ+/9cC5QKE/9cC5QKG/9cC5QKI/9cC5QKK/9cC5QKM/9cC5QKx/9cC5QKz/9cC5QK//9cC5QLA/9cC5QLB/9cC5QLC/9cC5QLF/5oC5QLH/5oC5QLU/9cC5QLV/9cC5QLv/9cC5QLx/9cC5QLz/9cC5QL9/9cC5QL+/9cC5QMJ/9cC5QML/9cC5QMO/9cC5QMQ/9cC5QMV/9cC5QMZ/+wC5gHP/9cC5gHY/9cC5gHb/9cC5gHe/9cC5gHh/9cC5gHq/9cC5gHt/9cC5gJq/9cC5gJ//9cC5gKF/9cC5gKH/9cC5gKJ/9cC5gKN/9cC5gKy/9cC5gK0/9cC5gLA/9cC5gLC/9cC5gLG/9cC5gLI/9cC5gLV/9cC5gLg/9cC5gLw/9cC5gLy/9cC5gL0/9cC5gL+/9cC5gMK/9cC5gMM/9cC5gMW/9cC5gMa/9cC5wAP/64C5wAR/64C5wII/64C5wIM/64C5wKA/+wC5wKC/+wC5wK3/+wC5wK5/+wC5wMN/9cC5wMP/9cC6AHpACkC6QAF/+wC6QAK/+wC6QIH/+wC6QIL/+wC6QMO/9cC6QMQ/9cC7wAP/64C7wAR/64C7wGd/+wC7wGk/9cC7wGm/+wC7wGo/9cC7wGq/9cC7wGu/9cC7wGw/9cC7wGx/+wC7wG1/9cC7wG8/8MC7wG9/9cC7wG//9cC7wHB/9cC7wHE/+wC7wHH/+wC7wHO/+wC7wHV/+wC7wHy/+wC7wII/64C7wIM/64C7wJy/9cC7wJz/+wC7wJ6/+wC7wJ8/9cC7wKA/+wC7wKC/+wC7wKf/9cC7wKh/+wC7wKp/+wC7wK1/8MC7wK3/+wC7wK5/+wC7wK7/9cC7wK9/+wC7wK//9cC7wLB/9cC7wLK/9cC7wLO/9cC7wLP/+wC7wLU/9cC7wLZ/9cC7wLb/9cC7wLd/9cC7wLl/9cC7wLn/+wC7wL1/+wC7wL3/9cC7wL5/9cC7wL7/9cC7wL9/9cC7wMF/9cC7wMH/9cC7wMN/9cC7wMP/9cC7wMR/9cC7wMS/+wC7wMX/+wC7wMb/9cC7wMc/+wC8AAF/+wC8AAK/+wC8AHQ/9cC8AHc/+wC8AHd/+wC8AHf/9cC8AHh/+wC8AHk/+wC8AH2/+wC8AIH/+wC8AIL/+wC8AKg/9cC8AKq/+wC8AK2/+wC8AK8/9cC8AK+/+wC8ALA/+wC8ALC/+wC8ALL/9cC8ALV/+wC8ALm/9cC8AL4/+wC8AL6/+wC8AL8/+wC8AL+/+wC8AMG/9cC8AMI/9cC8AMO/+wC8AMQ/+wC8AMY/+wC8QAP/64C8QAR/64C8QGd/+wC8QGk/9cC8QGm/+wC8QGo/9cC8QGq/9cC8QGu/9cC8QGw/9cC8QGx/+wC8QG1/9cC8QG8/8MC8QG9/9cC8QG//9cC8QHB/9cC8QHE/+wC8QHH/+wC8QHO/+wC8QHV/+wC8QHy/+wC8QII/64C8QIM/64C8QJy/9cC8QJz/+wC8QJ6/+wC8QJ8/9cC8QKA/+wC8QKC/+wC8QKf/9cC8QKh/+wC8QKp/+wC8QK1/8MC8QK3/+wC8QK5/+wC8QK7/9cC8QK9/+wC8QK//9cC8QLB/9cC8QLK/9cC8QLO/9cC8QLP/+wC8QLU/9cC8QLZ/9cC8QLb/9cC8QLd/9cC8QLl/9cC8QLn/+wC8QL1/+wC8QL3/9cC8QL5/9cC8QL7/9cC8QL9/9cC8QMF/9cC8QMH/9cC8QMN/9cC8QMP/9cC8QMR/9cC8QMS/+wC8QMX/+wC8QMb/9cC8QMc/+wC8gAF/+wC8gAK/+wC8gHQ/9cC8gHc/+wC8gHd/+wC8gHf/9cC8gHh/+wC8gHk/+wC8gH2/+wC8gIH/+wC8gIL/+wC8gKg/9cC8gKq/+wC8gK2/+wC8gK8/9cC8gK+/+wC8gLA/+wC8gLC/+wC8gLL/9cC8gLV/+wC8gLm/9cC8gL4/+wC8gL6/+wC8gL8/+wC8gL+/+wC8gMG/9cC8gMI/9cC8gMO/+wC8gMQ/+wC8gMY/+wC8wAP/64C8wAR/64C8wGd/+wC8wGk/9cC8wGm/+wC8wGo/9cC8wGq/9cC8wGu/9cC8wGw/9cC8wGx/+wC8wG1/9cC8wG8/8MC8wG9/9cC8wG//9cC8wHB/9cC8wHE/+wC8wHH/+wC8wHO/+wC8wHV/+wC8wHy/+wC8wII/64C8wIM/64C8wJy/9cC8wJz/+wC8wJ6/+wC8wJ8/9cC8wKA/+wC8wKC/+wC8wKf/9cC8wKh/+wC8wKp/+wC8wK1/8MC8wK3/+wC8wK5/+wC8wK7/9cC8wK9/+wC8wK//9cC8wLB/9cC8wLK/9cC8wLO/9cC8wLP/+wC8wLU/9cC8wLZ/9cC8wLb/9cC8wLd/9cC8wLl/9cC8wLn/+wC8wL1/+wC8wL3/9cC8wL5/9cC8wL7/9cC8wL9/9cC8wMF/9cC8wMH/9cC8wMN/9cC8wMP/9cC8wMR/9cC8wMS/+wC8wMX/+wC8wMb/9cC8wMc/+wC9AAF/+wC9AAK/+wC9AHQ/9cC9AHc/+wC9AHd/+wC9AHf/9cC9AHh/+wC9AHk/+wC9AH2/+wC9AIH/+wC9AIL/+wC9AKg/9cC9AKq/+wC9AK2/+wC9AK8/9cC9AK+/+wC9ALA/+wC9ALC/+wC9ALL/9cC9ALV/+wC9ALm/9cC9AL4/+wC9AL6/+wC9AL8/+wC9AL+/+wC9AMG/9cC9AMI/9cC9AMO/+wC9AMQ/+wC9AMY/+wC9QAP/64C9QAR/64C9QGd/+wC9QGk/9cC9QGm/+wC9QGo/9cC9QGq/9cC9QGu/9cC9QGw/9cC9QGx/+wC9QG1/9cC9QG8/8MC9QG9/9cC9QG//9cC9QHB/9cC9QHE/+wC9QHH/+wC9QHO/+wC9QHV/+wC9QHy/+wC9QII/64C9QIM/64C9QJy/9cC9QJz/+wC9QJ6/+wC9QJ8/9cC9QKA/+wC9QKC/+wC9QKf/9cC9QKh/+wC9QKp/+wC9QK1/8MC9QK3/+wC9QK5/+wC9QK7/9cC9QK9/+wC9QK//9cC9QLB/9cC9QLK/9cC9QLO/9cC9QLP/+wC9QLU/9cC9QLZ/9cC9QLb/9cC9QLd/9cC9QLl/9cC9QLn/+wC9QL1/+wC9QL3/9cC9QL5/9cC9QL7/9cC9QL9/9cC9QMF/9cC9QMH/9cC9QMN/9cC9QMP/9cC9QMR/9cC9QMS/+wC9QMX/+wC9QMb/9cC9QMc/+wC9gAF/+wC9gAK/+wC9gHQ/9cC9gHc/+wC9gHd/+wC9gHf/9cC9gHh/+wC9gHk/+wC9gH2/+wC9gIH/+wC9gIL/+wC9gKg/9cC9gKq/+wC9gK2/+wC9gK8/9cC9gK+/+wC9gLA/+wC9gLC/+wC9gLL/9cC9gLV/+wC9gLm/9cC9gL4/+wC9gL6/+wC9gL8/+wC9gL+/+wC9gMG/9cC9gMI/9cC9gMO/+wC9gMQ/+wC9gMY/+wC9wAP/4UC9wAR/4UC9wGf/+wC9wGk/5oC9wGq/3EC9wGu/5oC9wG1/5oC9wG4/+wC9wG7/+wC9wG+/8MC9wHJ/+wC9wHO/64C9wHP/9cC9wHV/64C9wHY/9cC9wHb/9cC9wHe/9cC9wHh/9cC9wHq/9cC9wHrAGYC9wHt/9cC9wHu/+wC9wHy/64C9wH0AGYC9wII/4UC9wIM/4UC9wJq/9cC9wJs/+wC9wJy/3EC9wJz/64C9wJ+/+wC9wJ//9cC9wKE/+wC9wKF/9cC9wKG/+wC9wKH/9cC9wKI/+wC9wKJ/9cC9wKK/+wC9wKM/+wC9wKN/9cC9wKYAGYC9wKoAGYC9wKx/+wC9wKy/9cC9wKz/+wC9wK0/9cC9wLA/9cC9wLC/9cC9wLF/9cC9wLG/8MC9wLH/9cC9wLI/8MC9wLO/5oC9wLP/64C9wLV/9cC9wLZ/3EC9wLb/3EC9wLd/3EC9wLg/9cC9wLv/+wC9wLw/9cC9wLx/+wC9wLy/9cC9wLz/+wC9wL0/9cC9wL+/9cC9wMJ/3EC9wMK/9cC9wML/3EC9wMM/9cC9wMR/5oC9wMS/64C9wMV/+wC9wMW/9cC9wMa/9cC9wMb/5oC9wMc/64C+AAP/64C+AAR/64C+AHO/9cC+AHV/9cC+AHy/9cC+AII/64C+AIM/64C+AJz/9cC+ALP/9cC+AMS/9cC+AMc/9cC+QAP/4UC+QAR/4UC+QGf/+wC+QGk/5oC+QGq/3EC+QGu/5oC+QG1/5oC+QG4/+wC+QG7/+wC+QG+/8MC+QHJ/+wC+QHO/64C+QHP/9cC+QHV/64C+QHY/9cC+QHb/9cC+QHe/9cC+QHh/9cC+QHq/9cC+QHrAGYC+QHt/9cC+QHu/+wC+QHy/64C+QH0AGYC+QII/4UC+QIM/4UC+QJq/9cC+QJs/+wC+QJy/3EC+QJz/64C+QJ+/+wC+QJ//9cC+QKE/+wC+QKF/9cC+QKG/+wC+QKH/9cC+QKI/+wC+QKJ/9cC+QKK/+wC+QKM/+wC+QKN/9cC+QKYAGYC+QKoAGYC+QKx/+wC+QKy/9cC+QKz/+wC+QK0/9cC+QLA/9cC+QLC/9cC+QLF/9cC+QLG/8MC+QLH/9cC+QLI/8MC+QLO/5oC+QLP/64C+QLV/9cC+QLZ/3EC+QLb/3EC+QLd/3EC+QLg/9cC+QLv/+wC+QLw/9cC+QLx/+wC+QLy/9cC+QLz/+wC+QL0/9cC+QL+/9cC+QMJ/3EC+QMK/9cC+QML/3EC+QMM/9cC+QMR/5oC+QMS/64C+QMV/+wC+QMW/9cC+QMa/9cC+QMb/5oC+QMc/64C+gAP/64C+gAR/64C+gHO/9cC+gHV/9cC+gHy/9cC+gII/64C+gIM/64C+gJz/9cC+gLP/9cC+gMS/9cC+gMc/9cC+wAP/4UC+wAR/4UC+wGf/+wC+wGk/5oC+wGq/3EC+wGu/5oC+wG1/5oC+wG4/+wC+wG7/+wC+wG+/8MC+wHJ/+wC+wHO/64C+wHP/9cC+wHV/64C+wHY/9cC+wHb/9cC+wHe/9cC+wHh/9cC+wHq/9cC+wHrAGYC+wHt/9cC+wHu/+wC+wHy/64C+wH0AGYC+wII/4UC+wIM/4UC+wJq/9cC+wJs/+wC+wJy/3EC+wJz/64C+wJ+/+wC+wJ//9cC+wKE/+wC+wKF/9cC+wKG/+wC+wKH/9cC+wKI/+wC+wKJ/9cC+wKK/+wC+wKM/+wC+wKN/9cC+wKYAGYC+wKoAGYC+wKx/+wC+wKy/9cC+wKz/+wC+wK0/9cC+wLA/9cC+wLC/9cC+wLF/9cC+wLG/8MC+wLH/9cC+wLI/8MC+wLO/5oC+wLP/64C+wLV/9cC+wLZ/3EC+wLb/3EC+wLd/3EC+wLg/9cC+wLv/+wC+wLw/9cC+wLx/+wC+wLy/9cC+wLz/+wC+wL0/9cC+wL+/9cC+wMJ/3EC+wMK/9cC+wML/3EC+wMM/9cC+wMR/5oC+wMS/64C+wMV/+wC+wMW/9cC+wMa/9cC+wMb/5oC+wMc/64C/AAP/64C/AAR/64C/AHO/9cC/AHV/9cC/AHy/9cC/AII/64C/AIM/64C/AJz/9cC/ALP/9cC/AMS/9cC/AMc/9cC/wAP/4UC/wAQ/64C/wAR/4UC/wGf/9cC/wGk/5oC/wGq/3EC/wGu/5oC/wG1/5oC/wG4/9cC/wG7/9cC/wG8ACkC/wG+/64C/wHM/5oC/wHN/5oC/wHO/4UC/wHP/3EC/wHQ/9cC/wHR/9cC/wHS/5oC/wHT/5oC/wHU/5oC/wHV/4UC/wHW/5oC/wHX/5oC/wHY/3EC/wHZ/5oC/wHa/5oC/wHb/3EC/wHc/64C/wHd/64C/wHe/3EC/wHf/9cC/wHg/5oC/wHh/5oC/wHi/5oC/wHj/5oC/wHk/64C/wHl/5oC/wHm/5oC/wHn/9cC/wHo/5oC/wHp/8MC/wHq/3EC/wHs/5oC/wHt/3EC/wHu/4UC/wHy/4UC/wHz/5oC/wH1/5oC/wH2/64C/wH3/5oC/wH5/5oC/wIC/64C/wID/64C/wIE/64C/wII/4UC/wIM/4UC/wJq/3EC/wJr/5oC/wJs/9cC/wJt/9cC/wJx/5oC/wJy/3EC/wJz/4UC/wJ1/5oC/wJ3/5oC/wJ5/5oC/wJ9/5oC/wJ+/9cC/wJ//3EC/wKB/9cC/wKD/9cC/wKE/9cC/wKF/3EC/wKG/9cC/wKH/3EC/wKI/9cC/wKJ/3EC/wKK/9cC/wKL/9cC/wKM/9cC/wKN/3EC/wKW/5oC/wKa/5oC/wKe/5oC/wKg/9cC/wKi/9cC/wKk/5oC/wKm/5oC/wKq/64C/wKs/5oC/wKu/5oC/wKw/5oC/wKx/9cC/wKy/3EC/wKz/9cC/wK0/3EC/wK1ACkC/wK2/64C/wK4/64C/wK6/64C/wK8/9cC/wK+/64C/wLA/5oC/wLC/5oC/wLE/5oC/wLF/5oC/wLG/3EC/wLH/5oC/wLI/3EC/wLL/9cC/wLN/5oC/wLO/5oC/wLP/4UC/wLR/5oC/wLT/5oC/wLV/5oC/wLX/5oC/wLZ/3EC/wLb/3EC/wLd/3EC/wLg/3EC/wLm/9cC/wLo/9cC/wLq/8MC/wLs/5oC/wLu/5oC/wLv/9cC/wLw/3EC/wLx/9cC/wLy/3EC/wLz/9cC/wL0/3EC/wL2/9cC/wL4/64C/wL6/64C/wL8/64C/wL+/5oC/wMA/5oC/wMC/5oC/wMG/9cC/wMI/9cC/wMJ/3EC/wMK/3EC/wML/3EC/wMM/3EC/wMO/5oC/wMQ/5oC/wMR/5oC/wMS/4UC/wMU/5oC/wMV/9cC/wMW/3EC/wMY/64C/wMa/3EC/wMb/5oC/wMc/4UDAAAP/5oDAAAQ/9cDAAAR/5oDAAHO/8MDAAHP/+wDAAHV/8MDAAHY/+wDAAHb/+wDAAHe/+wDAAHq/+wDAAHt/+wDAAHy/8MDAAIC/9cDAAID/9cDAAIE/9cDAAII/5oDAAIM/5oDAAJq/+wDAAJz/8MDAAJ//+wDAAKF/+wDAAKH/+wDAAKJ/+wDAAKN/+wDAAKy/+wDAAK0/+wDAALP/8MDAALg/+wDAALw/+wDAALy/+wDAAL0/+wDAAMK/+wDAAMM/+wDAAMS/8MDAAMW/+wDAAMa/+wDAAMc/8MDAwAP/5oDAwAQ/9cDAwAR/5oDAwGdACkDAwGf/9cDAwGk/64DAwGmACkDAwGq/4UDAwGu/64DAwG1/64DAwG4/9cDAwG7/9cDAwG8ACkDAwG+/8MDAwHEACkDAwHM/8MDAwHN/8MDAwHO/5oDAwHP/64DAwHQ/9cDAwHR/9cDAwHS/8MDAwHT/8MDAwHU/8MDAwHV/5oDAwHW/8MDAwHX/8MDAwHY/64DAwHZ/8MDAwHa/8MDAwHb/64DAwHe/64DAwHf/9cDAwHg/8MDAwHh/5oDAwHi/8MDAwHj/8MDAwHl/8MDAwHm/8MDAwHn/9cDAwHo/8MDAwHq/64DAwHrACkDAwHs/8MDAwHt/64DAwHu/8MDAwHy/5oDAwHz/8MDAwH0ACkDAwH1/8MDAwH3/8MDAwH5/8MDAwIC/9cDAwID/9cDAwIE/9cDAwII/5oDAwIM/5oDAwJq/64DAwJr/8MDAwJs/9cDAwJx/8MDAwJy/4UDAwJz/5oDAwJ1/8MDAwJ3/9cDAwJ5/8MDAwJ9/8MDAwJ+/9cDAwJ//64DAwKE/9cDAwKF/64DAwKG/9cDAwKH/64DAwKI/9cDAwKJ/64DAwKK/9cDAwKM/9cDAwKN/64DAwKW/8MDAwKYACkDAwKa/8MDAwKe/8MDAwKg/9cDAwKi/9cDAwKk/8MDAwKm/8MDAwKoACkDAwKpACkDAwKs/8MDAwKu/8MDAwKw/8MDAwKx/9cDAwKy/64DAwKz/9cDAwK0/64DAwK1ACkDAwK8/9cDAwK9ACkDAwLA/5oDAwLC/5oDAwLE/8MDAwLF/9cDAwLG/8MDAwLH/9cDAwLI/8MDAwLL/9cDAwLN/8MDAwLO/64DAwLP/5oDAwLR/8MDAwLT/8MDAwLV/5oDAwLX/8MDAwLZ/4UDAwLb/4UDAwLd/4UDAwLg/64DAwLm/9cDAwLo/9cDAwLs/8MDAwLu/8MDAwLv/9cDAwLw/64DAwLx/9cDAwLy/64DAwLz/9cDAwL0/64DAwL2/9cDAwL+/5oDAwMA/8MDAwMC/8MDAwMG/9cDAwMI/9cDAwMJ/5oDAwMK/64DAwML/5oDAwMM/64DAwMO/9cDAwMQ/9cDAwMR/64DAwMS/5oDAwMU/8MDAwMV/9cDAwMW/64DAwMXACkDAwMa/64DAwMb/64DAwMc/5oDBAAP/8MDBAAR/8MDBAHO/8MDBAHP/9cDBAHV/8MDBAHY/9cDBAHb/9cDBAHe/9cDBAHq/9cDBAHt/9cDBAHy/8MDBAII/8MDBAIM/8MDBAJq/9cDBAJz/8MDBAJ//9cDBAKF/9cDBAKH/9cDBAKJ/9cDBAKN/9cDBAKy/9cDBAK0/9cDBALP/8MDBALg/9cDBALw/9cDBALy/9cDBAL0/9cDBAMK/9cDBAMM/9cDBAMS/8MDBAMW/9cDBAMa/9cDBAMc/8MDBQGf/9cDBQGjAOEDBQG4/9cDBQG7/9cDBQG+/8MDBQHc/9cDBQHh/64DBQHk/9cDBQJs/9cDBQJ7AD0DBQJ9/+wDBQJ+/9cDBQKE/9cDBQKG/9cDBQKI/9cDBQKK/9cDBQKM/9cDBQKq/9cDBQKx/9cDBQKz/9cDBQK2/9cDBQK+/9cDBQLA/64DBQLC/64DBQLF/8MDBQLG/9cDBQLH/8MDBQLI/9cDBQLV/64DBQLv/9cDBQLx/9cDBQLz/9cDBQL+/64DBQMO/9cDBQMQ/9cDBQMV/9cDBQMY/9cDBgHP/+wDBgHY/+wDBgHb/+wDBgHe/+wDBgHh/+wDBgHq/+wDBgHt/+wDBgJq/+wDBgJ//+wDBgKF/+wDBgKH/+wDBgKJ/+wDBgKN/+wDBgKy/+wDBgK0/+wDBgLA/+wDBgLC/+wDBgLV/+wDBgLg/+wDBgLw/+wDBgLy/+wDBgL0/+wDBgL+/+wDBgMK/+wDBgMM/+wDBgMO/9cDBgMQ/9cDBgMW/+wDBgMa/+wDBwGf/9cDBwG4/9cDBwG7/9cDBwG+/9cDBwHB/9cDBwHh/9cDBwJs/9cDBwJ8/9cDBwJ+/9cDBwKE/9cDBwKG/9cDBwKI/9cDBwKK/9cDBwKM/9cDBwKx/9cDBwKz/9cDBwK//9cDBwLA/9cDBwLB/9cDBwLC/9cDBwLF/5oDBwLH/5oDBwLU/9cDBwLV/9cDBwLv/9cDBwLx/9cDBwLz/9cDBwL9/9cDBwL+/9cDBwMJ/9cDBwML/9cDBwMO/9cDBwMQ/9cDBwMV/9cDBwMZ/+wDCAHP/+wDCAHY/+wDCAHb/+wDCAHe/+wDCAHh/+wDCAHq/+wDCAHt/+wDCAJq/+wDCAJ//+wDCAKF/+wDCAKH/+wDCAKJ/+wDCAKN/+wDCAKy/+wDCAK0/+wDCALA/+wDCALC/+wDCALV/+wDCALg/+wDCALw/+wDCALy/+wDCAL0/+wDCAL+/+wDCAMK/+wDCAMM/+wDCAMO/9cDCAMQ/9cDCAMW/+wDCAMa/+wDCwAF/5oDCwAK/5oDCwGd/64DCwGm/64DCwGo/8MDCwGq/8MDCwGw/8MDCwG8/3EDCwG9/8MDCwG//8MDCwHB/8MDCwHE/64DCwHQ/9cDCwHc/8MDCwHf/9cDCwHh/9cDCwHk/8MDCwIH/5oDCwIL/5oDCwJy/8MDCwJ2/9cDCwJ8/8MDCwKA/8MDCwKC/8MDCwKf/8MDCwKg/9cDCwKp/64DCwKq/8MDCwK1/3EDCwK2/8MDCwK3/8MDCwK5/8MDCwK7/8MDCwK8/9cDCwK9/64DCwK+/8MDCwK//8MDCwLA/9cDCwLB/8MDCwLC/9cDCwLK/8MDCwLL/9cDCwLU/8MDCwLV/9cDCwLZ/8MDCwLb/8MDCwLd/8MDCwLl/8MDCwLm/9cDCwL3/8MDCwL5/8MDCwL7/8MDCwL9/8MDCwL+/9cDCwMF/8MDCwMG/9cDCwMH/8MDCwMI/9cDCwMN/9cDCwMO/9cDCwMP/9cDCwMQ/9cDCwMX/64DCwMY/8MDDAAF/5oDDAAK/5oDDAHQ/9cDDAHc/8MDDAHd/9cDDAHf/9cDDAHh/9cDDAHk/8MDDAH2/9cDDAIH/5oDDAIL/5oDDAKg/9cDDAKq/8MDDAK2/8MDDAK8/9cDDAK+/8MDDALA/9cDDALC/9cDDALL/9cDDALV/9cDDALm/9cDDAL4/9cDDAL6/9cDDAL8/9cDDAL+/9cDDAMG/9cDDAMI/9cDDAMO/5oDDAMQ/5oDDAMY/8MDDQAF/5oDDQAK/5oDDQGd/64DDQGm/64DDQGo/8MDDQGq/8MDDQGw/8MDDQG8/3EDDQG9/8MDDQG//8MDDQHB/8MDDQHE/64DDQHQ/9cDDQHc/8MDDQHf/9cDDQHh/9cDDQHk/8MDDQIH/5oDDQIL/5oDDQJy/8MDDQJ2/9cDDQJ8/8MDDQKA/8MDDQKC/8MDDQKf/8MDDQKg/9cDDQKp/64DDQKq/8MDDQK1/3EDDQK2/8MDDQK3/8MDDQK5/8MDDQK7/8MDDQK8/9cDDQK9/64DDQK+/8MDDQK//8MDDQLA/9cDDQLB/8MDDQLC/9cDDQLK/8MDDQLL/9cDDQLU/8MDDQLV/9cDDQLZ/8MDDQLb/8MDDQLd/8MDDQLl/8MDDQLm/9cDDQL3/8MDDQL5/8MDDQL7/8MDDQL9/8MDDQL+/9cDDQMF/8MDDQMG/9cDDQMH/8MDDQMI/9cDDQMN/9cDDQMO/9cDDQMP/9cDDQMQ/9cDDQMX/64DDQMY/8MDDgAF/5oDDgAK/5oDDgHQ/9cDDgHc/8MDDgHd/9cDDgHf/9cDDgHh/9cDDgHk/8MDDgH2/9cDDgIH/5oDDgIL/5oDDgKg/9cDDgKq/8MDDgK2/8MDDgK8/9cDDgK+/8MDDgLA/9cDDgLC/9cDDgLL/9cDDgLV/9cDDgLm/9cDDgL4/9cDDgL6/9cDDgL8/9cDDgL+/9cDDgMG/9cDDgMI/9cDDgMO/5oDDgMQ/5oDDgMY/8MDDwGjAOEDDwLqACkDDwMO/9cDDwMQ/9cDEAAF/+wDEAAK/+wDEAIH/+wDEAIL/+wDEQAF/5oDEQAK/5oDEQGd/64DEQGm/64DEQGo/8MDEQGq/8MDEQGw/8MDEQG8/3EDEQG9/8MDEQG//8MDEQHB/8MDEQHE/64DEQHQ/9cDEQHc/8MDEQHf/9cDEQHh/9cDEQHk/8MDEQIH/5oDEQIL/5oDEQJy/8MDEQJ2/9cDEQJ8/8MDEQKA/8MDEQKC/8MDEQKf/8MDEQKg/9cDEQKp/64DEQKq/8MDEQK1/3EDEQK2/8MDEQK3/8MDEQK5/8MDEQK7/8MDEQK8/9cDEQK9/64DEQK+/8MDEQK//8MDEQLA/9cDEQLB/8MDEQLC/9cDEQLK/8MDEQLL/9cDEQLU/8MDEQLV/9cDEQLZ/8MDEQLb/8MDEQLd/8MDEQLl/8MDEQLm/9cDEQL3/8MDEQL5/8MDEQL7/8MDEQL9/8MDEQL+/9cDEQMF/8MDEQMG/9cDEQMH/8MDEQMI/9cDEQMN/9cDEQMO/9cDEQMP/9cDEQMQ/9cDEQMX/64DEQMY/8MDEgAF/5oDEgAK/5oDEgHQ/9cDEgHc/8MDEgHd/9cDEgHf/9cDEgHh/9cDEgHk/8MDEgH2/9cDEgIH/5oDEgIL/5oDEgKg/9cDEgKq/8MDEgK2/8MDEgK8/9cDEgK+/8MDEgLA/9cDEgLC/9cDEgLL/9cDEgLV/9cDEgLm/9cDEgL4/9cDEgL6/9cDEgL8/9cDEgL+/9cDEgMG/9cDEgMI/9cDEgMO/5oDEgMQ/5oDEgMY/8MDEwAF/5oDEwAK/5oDEwGd/64DEwGm/64DEwGo/8MDEwGq/8MDEwGw/8MDEwG8/3EDEwG9/8MDEwG//8MDEwHB/8MDEwHE/64DEwHQ/9cDEwHc/8MDEwHf/9cDEwHh/9cDEwHk/8MDEwIH/5oDEwIL/5oDEwJy/8MDEwJ2/9cDEwJ8/8MDEwKA/8MDEwKC/8MDEwKf/8MDEwKg/9cDEwKp/64DEwKq/8MDEwK1/3EDEwK2/8MDEwK3/8MDEwK5/8MDEwK7/8MDEwK8/9cDEwK9/64DEwK+/8MDEwK//8MDEwLA/9cDEwLB/8MDEwLC/9cDEwLK/8MDEwLL/9cDEwLU/8MDEwLV/9cDEwLZ/8MDEwLb/8MDEwLd/8MDEwLl/8MDEwLm/9cDEwL3/8MDEwL5/8MDEwL7/8MDEwL9/8MDEwL+/9cDEwMF/8MDEwMG/9cDEwMH/8MDEwMI/9cDEwMN/9cDEwMO/9cDEwMP/9cDEwMQ/9cDEwMX/64DEwMY/8MDFAAF/5oDFAAK/5oDFAHQ/9cDFAHc/8MDFAHd/9cDFAHf/9cDFAHh/9cDFAHk/8MDFAH2/9cDFAIH/5oDFAIL/5oDFAKg/9cDFAKq/8MDFAK2/8MDFAK8/9cDFAK+/8MDFALA/9cDFALC/9cDFALL/9cDFALV/9cDFALm/9cDFAL4/9cDFAL6/9cDFAL8/9cDFAL+/9cDFAMG/9cDFAMI/9cDFAMO/5oDFAMQ/5oDFAMY/8MDFQAP/64DFQAR/64DFQGq/+wDFQGw/9cDFQG8/9cDFQG//9cDFQII/64DFQIM/64DFQJy/+wDFQKA/+wDFQKC/+wDFQKf/9cDFQK1/9cDFQK3/+wDFQK5/+wDFQK7/9cDFQLK/9cDFQLZ/+wDFQLb/+wDFQLd/+wDFQLl/9cDFQMF/9cDFQMH/9cDFgAF/9cDFgAK/9cDFgHQ/+wDFgHd/+wDFgHf/+wDFgH2/+wDFgIH/9cDFgIL/9cDFgKg/+wDFgK8/+wDFgLL/+wDFgLm/+wDFgL4/+wDFgL6/+wDFgL8/+wDFgMG/+wDFgMI/+wDFgMO/9cDFgMQ/9cDFwAF/64DFwAK/64DFwGd/8MDFwGm/8MDFwGq/9cDFwGw/9cDFwG8/8MDFwG//9cDFwHB/9cDFwHE/8MDFwHc/9cDFwHk/9cDFwIH/64DFwIL/64DFwJy/9cDFwJ8/9cDFwKA/9cDFwKC/9cDFwKf/9cDFwKp/8MDFwKq/9cDFwK1/8MDFwK2/9cDFwK3/9cDFwK5/9cDFwK7/9cDFwK9/8MDFwK+/9cDFwK//9cDFwLB/9cDFwLK/9cDFwLU/9cDFwLZ/9cDFwLb/9cDFwLd/9cDFwLl/9cDFwL9/9cDFwMF/9cDFwMH/9cDFwMN/9cDFwMP/9cDFwMX/8MDFwMY/9cDGAAF/5oDGAAK/5oDGAHQ/9cDGAHc/8MDGAHd/9cDGAHf/9cDGAHh/9cDGAHk/8MDGAH2/9cDGAIH/5oDGAIL/5oDGAKg/9cDGAKq/8MDGAK2/8MDGAK8/9cDGAK+/8MDGALA/9cDGALC/9cDGALL/9cDGALV/9cDGALm/9cDGAL4/9cDGAL6/9cDGAL8/9cDGAL+/9cDGAMG/9cDGAMI/9cDGAMO/5oDGAMQ/5oDGAMY/8MDGQHh/9cDGQLA/9cDGQLC/9cDGQLV/9cDGQL+/9cDGwGjAOEDGwLqACkDGwMO/9cDGwMQ/9cDHAAF/+wDHAAK/+wDHAIH/+wDHAIL/+wDHQAF/3EDHQAK/3EDHQAm/9cDHQAq/9cDHQAtAQoDHQAy/9cDHQA0/9cDHQA3/3EDHQA5/64DHQA6/64DHQA8/4UDHQCJ/9cDHQCU/9cDHQCV/9cDHQCW/9cDHQCX/9cDHQCY/9cDHQCa/9cDHQCf/4UDHQDI/9cDHQDK/9cDHQDM/9cDHQDO/9cDHQDe/9cDHQDg/9cDHQDi/9cDHQDk/9cDHQEO/9cDHQEQ/9cDHQES/9cDHQEU/9cDHQEk/3EDHQEm/3EDHQE2/64DHQE4/4UDHQE6/4UDHQFH/9cDHQH6/64DHQH8/64DHQH+/64DHQIA/4UDHQIH/3EDHQIL/3EDHQJf/9cDHQNJ/9cDHQNL/9cDHQNN/9cDHQNP/9cDHQNR/9cDHQNT/9cDHQNV/9cDHQNX/9cDHQNZ/9cDHQNb/9cDHQNd/9cDHQNf/9cDHQNv/4UDHQNx/4UDHQNz/4UDHQOP/3EDHgAF/+wDHgAK/+wDHgIH/+wDHgIL/+wDHwAF/3EDHwAK/3EDHwAm/9cDHwAq/9cDHwAtAQoDHwAy/9cDHwA0/9cDHwA3/3EDHwA5/64DHwA6/64DHwA8/4UDHwCJ/9cDHwCU/9cDHwCV/9cDHwCW/9cDHwCX/9cDHwCY/9cDHwCa/9cDHwCf/4UDHwDI/9cDHwDK/9cDHwDM/9cDHwDO/9cDHwDe/9cDHwDg/9cDHwDi/9cDHwDk/9cDHwEO/9cDHwEQ/9cDHwES/9cDHwEU/9cDHwEk/3EDHwEm/3EDHwE2/64DHwE4/4UDHwE6/4UDHwFH/9cDHwH6/64DHwH8/64DHwH+/64DHwIA/4UDHwIH/3EDHwIL/3EDHwJf/9cDHwNJ/9cDHwNL/9cDHwNN/9cDHwNP/9cDHwNR/9cDHwNT/9cDHwNV/9cDHwNX/9cDHwNZ/9cDHwNb/9cDHwNd/9cDHwNf/9cDHwNv/4UDHwNx/4UDHwNz/4UDHwOP/3EDIAAF/+wDIAAK/+wDIAIH/+wDIAIL/+wDIQAF/3EDIQAK/3EDIQAm/9cDIQAq/9cDIQAtAQoDIQAy/9cDIQA0/9cDIQA3/3EDIQA5/64DIQA6/64DIQA8/4UDIQCJ/9cDIQCU/9cDIQCV/9cDIQCW/9cDIQCX/9cDIQCY/9cDIQCa/9cDIQCf/4UDIQDI/9cDIQDK/9cDIQDM/9cDIQDO/9cDIQDe/9cDIQDg/9cDIQDi/9cDIQDk/9cDIQEO/9cDIQEQ/9cDIQES/9cDIQEU/9cDIQEk/3EDIQEm/3EDIQE2/64DIQE4/4UDIQE6/4UDIQFH/9cDIQH6/64DIQH8/64DIQH+/64DIQIA/4UDIQIH/3EDIQIL/3EDIQJf/9cDIQNJ/9cDIQNL/9cDIQNN/9cDIQNP/9cDIQNR/9cDIQNT/9cDIQNV/9cDIQNX/9cDIQNZ/9cDIQNb/9cDIQNd/9cDIQNf/9cDIQNv/4UDIQNx/4UDIQNz/4UDIQOP/3EDIgAF/+wDIgAK/+wDIgIH/+wDIgIL/+wDIwAF/3EDIwAK/3EDIwAm/9cDIwAq/9cDIwAtAQoDIwAy/9cDIwA0/9cDIwA3/3EDIwA5/64DIwA6/64DIwA8/4UDIwCJ/9cDIwCU/9cDIwCV/9cDIwCW/9cDIwCX/9cDIwCY/9cDIwCa/9cDIwCf/4UDIwDI/9cDIwDK/9cDIwDM/9cDIwDO/9cDIwDe/9cDIwDg/9cDIwDi/9cDIwDk/9cDIwEO/9cDIwEQ/9cDIwES/9cDIwEU/9cDIwEk/3EDIwEm/3EDIwE2/64DIwE4/4UDIwE6/4UDIwFH/9cDIwH6/64DIwH8/64DIwH+/64DIwIA/4UDIwIH/3EDIwIL/3EDIwJf/9cDIwNJ/9cDIwNL/9cDIwNN/9cDIwNP/9cDIwNR/9cDIwNT/9cDIwNV/9cDIwNX/9cDIwNZ/9cDIwNb/9cDIwNd/9cDIwNf/9cDIwNv/4UDIwNx/4UDIwNz/4UDIwOP/3EDJAAF/+wDJAAK/+wDJAIH/+wDJAIL/+wDJQAF/3EDJQAK/3EDJQAm/9cDJQAq/9cDJQAtAQoDJQAy/9cDJQA0/9cDJQA3/3EDJQA5/64DJQA6/64DJQA8/4UDJQCJ/9cDJQCU/9cDJQCV/9cDJQCW/9cDJQCX/9cDJQCY/9cDJQCa/9cDJQCf/4UDJQDI/9cDJQDK/9cDJQDM/9cDJQDO/9cDJQDe/9cDJQDg/9cDJQDi/9cDJQDk/9cDJQEO/9cDJQEQ/9cDJQES/9cDJQEU/9cDJQEk/3EDJQEm/3EDJQE2/64DJQE4/4UDJQE6/4UDJQFH/9cDJQH6/64DJQH8/64DJQH+/64DJQIA/4UDJQIH/3EDJQIL/3EDJQJf/9cDJQNJ/9cDJQNL/9cDJQNN/9cDJQNP/9cDJQNR/9cDJQNT/9cDJQNV/9cDJQNX/9cDJQNZ/9cDJQNb/9cDJQNd/9cDJQNf/9cDJQNv/4UDJQNx/4UDJQNz/4UDJQOP/3EDJgAF/+wDJgAK/+wDJgIH/+wDJgIL/+wDJwAF/3EDJwAK/3EDJwAm/9cDJwAq/9cDJwAtAQoDJwAy/9cDJwA0/9cDJwA3/3EDJwA5/64DJwA6/64DJwA8/4UDJwCJ/9cDJwCU/9cDJwCV/9cDJwCW/9cDJwCX/9cDJwCY/9cDJwCa/9cDJwCf/4UDJwDI/9cDJwDK/9cDJwDM/9cDJwDO/9cDJwDe/9cDJwDg/9cDJwDi/9cDJwDk/9cDJwEO/9cDJwEQ/9cDJwES/9cDJwEU/9cDJwEk/3EDJwEm/3EDJwE2/64DJwE4/4UDJwE6/4UDJwFH/9cDJwH6/64DJwH8/64DJwH+/64DJwIA/4UDJwIH/3EDJwIL/3EDJwJf/9cDJwNJ/9cDJwNL/9cDJwNN/9cDJwNP/9cDJwNR/9cDJwNT/9cDJwNV/9cDJwNX/9cDJwNZ/9cDJwNb/9cDJwNd/9cDJwNf/9cDJwNv/4UDJwNx/4UDJwNz/4UDJwOP/3EDKAAF/+wDKAAK/+wDKAIH/+wDKAIL/+wDKQAF/3EDKQAK/3EDKQAm/9cDKQAq/9cDKQAtAQoDKQAy/9cDKQA0/9cDKQA3/3EDKQA5/64DKQA6/64DKQA8/4UDKQCJ/9cDKQCU/9cDKQCV/9cDKQCW/9cDKQCX/9cDKQCY/9cDKQCa/9cDKQCf/4UDKQDI/9cDKQDK/9cDKQDM/9cDKQDO/9cDKQDe/9cDKQDg/9cDKQDi/9cDKQDk/9cDKQEO/9cDKQEQ/9cDKQES/9cDKQEU/9cDKQEk/3EDKQEm/3EDKQE2/64DKQE4/4UDKQE6/4UDKQFH/9cDKQH6/64DKQH8/64DKQH+/64DKQIA/4UDKQIH/3EDKQIL/3EDKQJf/9cDKQNJ/9cDKQNL/9cDKQNN/9cDKQNP/9cDKQNR/9cDKQNT/9cDKQNV/9cDKQNX/9cDKQNZ/9cDKQNb/9cDKQNd/9cDKQNf/9cDKQNv/4UDKQNx/4UDKQNz/4UDKQOP/3EDKgAF/+wDKgAK/+wDKgIH/+wDKgIL/+wDKwAF/3EDKwAK/3EDKwAm/9cDKwAq/9cDKwAtAQoDKwAy/9cDKwA0/9cDKwA3/3EDKwA5/64DKwA6/64DKwA8/4UDKwCJ/9cDKwCU/9cDKwCV/9cDKwCW/9cDKwCX/9cDKwCY/9cDKwCa/9cDKwCf/4UDKwDI/9cDKwDK/9cDKwDM/9cDKwDO/9cDKwDe/9cDKwDg/9cDKwDi/9cDKwDk/9cDKwEO/9cDKwEQ/9cDKwES/9cDKwEU/9cDKwEk/3EDKwEm/3EDKwE2/64DKwE4/4UDKwE6/4UDKwFH/9cDKwH6/64DKwH8/64DKwH+/64DKwIA/4UDKwIH/3EDKwIL/3EDKwJf/9cDKwNJ/9cDKwNL/9cDKwNN/9cDKwNP/9cDKwNR/9cDKwNT/9cDKwNV/9cDKwNX/9cDKwNZ/9cDKwNb/9cDKwNd/9cDKwNf/9cDKwNv/4UDKwNx/4UDKwNz/4UDKwOP/3EDLAAF/+wDLAAK/+wDLAIH/+wDLAIL/+wDLQAF/3EDLQAK/3EDLQAm/9cDLQAq/9cDLQAtAQoDLQAy/9cDLQA0/9cDLQA3/3EDLQA5/64DLQA6/64DLQA8/4UDLQCJ/9cDLQCU/9cDLQCV/9cDLQCW/9cDLQCX/9cDLQCY/9cDLQCa/9cDLQCf/4UDLQDI/9cDLQDK/9cDLQDM/9cDLQDO/9cDLQDe/9cDLQDg/9cDLQDi/9cDLQDk/9cDLQEO/9cDLQEQ/9cDLQES/9cDLQEU/9cDLQEk/3EDLQEm/3EDLQE2/64DLQE4/4UDLQE6/4UDLQFH/9cDLQH6/64DLQH8/64DLQH+/64DLQIA/4UDLQIH/3EDLQIL/3EDLQJf/9cDLQNJ/9cDLQNL/9cDLQNN/9cDLQNP/9cDLQNR/9cDLQNT/9cDLQNV/9cDLQNX/9cDLQNZ/9cDLQNb/9cDLQNd/9cDLQNf/9cDLQNv/4UDLQNx/4UDLQNz/4UDLQOP/3EDLgAF/+wDLgAK/+wDLgIH/+wDLgIL/+wDLwAF/3EDLwAK/3EDLwAm/9cDLwAq/9cDLwAtAQoDLwAy/9cDLwA0/9cDLwA3/3EDLwA5/64DLwA6/64DLwA8/4UDLwCJ/9cDLwCU/9cDLwCV/9cDLwCW/9cDLwCX/9cDLwCY/9cDLwCa/9cDLwCf/4UDLwDI/9cDLwDK/9cDLwDM/9cDLwDO/9cDLwDe/9cDLwDg/9cDLwDi/9cDLwDk/9cDLwEO/9cDLwEQ/9cDLwES/9cDLwEU/9cDLwEk/3EDLwEm/3EDLwE2/64DLwE4/4UDLwE6/4UDLwFH/9cDLwH6/64DLwH8/64DLwH+/64DLwIA/4UDLwIH/3EDLwIL/3EDLwJf/9cDLwNJ/9cDLwNL/9cDLwNN/9cDLwNP/9cDLwNR/9cDLwNT/9cDLwNV/9cDLwNX/9cDLwNZ/9cDLwNb/9cDLwNd/9cDLwNf/9cDLwNv/4UDLwNx/4UDLwNz/4UDLwOP/3EDMAAF/+wDMAAK/+wDMAIH/+wDMAIL/+wDMQAF/3EDMQAK/3EDMQAm/9cDMQAq/9cDMQAtAQoDMQAy/9cDMQA0/9cDMQA3/3EDMQA5/64DMQA6/64DMQA8/4UDMQCJ/9cDMQCU/9cDMQCV/9cDMQCW/9cDMQCX/9cDMQCY/9cDMQCa/9cDMQCf/4UDMQDI/9cDMQDK/9cDMQDM/9cDMQDO/9cDMQDe/9cDMQDg/9cDMQDi/9cDMQDk/9cDMQEO/9cDMQEQ/9cDMQES/9cDMQEU/9cDMQEk/3EDMQEm/3EDMQE2/64DMQE4/4UDMQE6/4UDMQFH/9cDMQH6/64DMQH8/64DMQH+/64DMQIA/4UDMQIH/3EDMQIL/3EDMQJf/9cDMQNJ/9cDMQNL/9cDMQNN/9cDMQNP/9cDMQNR/9cDMQNT/9cDMQNV/9cDMQNX/9cDMQNZ/9cDMQNb/9cDMQNd/9cDMQNf/9cDMQNv/4UDMQNx/4UDMQNz/4UDMQOP/3EDMgAF/+wDMgAK/+wDMgIH/+wDMgIL/+wDMwAF/3EDMwAK/3EDMwAm/9cDMwAq/9cDMwAtAQoDMwAy/9cDMwA0/9cDMwA3/3EDMwA5/64DMwA6/64DMwA8/4UDMwCJ/9cDMwCU/9cDMwCV/9cDMwCW/9cDMwCX/9cDMwCY/9cDMwCa/9cDMwCf/4UDMwDI/9cDMwDK/9cDMwDM/9cDMwDO/9cDMwDe/9cDMwDg/9cDMwDi/9cDMwDk/9cDMwEO/9cDMwEQ/9cDMwES/9cDMwEU/9cDMwEk/3EDMwEm/3EDMwE2/64DMwE4/4UDMwE6/4UDMwFH/9cDMwH6/64DMwH8/64DMwH+/64DMwIA/4UDMwIH/3EDMwIL/3EDMwJf/9cDMwNJ/9cDMwNL/9cDMwNN/9cDMwNP/9cDMwNR/9cDMwNT/9cDMwNV/9cDMwNX/9cDMwNZ/9cDMwNb/9cDMwNd/9cDMwNf/9cDMwNv/4UDMwNx/4UDMwNz/4UDMwOP/3EDNAAF/+wDNAAK/+wDNAIH/+wDNAIL/+wDNQAtAHsDNgAF/+wDNgAK/+wDNgBZ/9cDNgBa/9cDNgBb/9cDNgBc/9cDNgBd/+wDNgC//9cDNgE3/9cDNgE8/+wDNgE+/+wDNgFA/+wDNgH7/9cDNgH9/9cDNgIH/+wDNgIL/+wDNgNw/9cDNwAtAHsDOAAF/+wDOAAK/+wDOABZ/9cDOABa/9cDOABb/9cDOABc/9cDOABd/+wDOAC//9cDOAE3/9cDOAE8/+wDOAE+/+wDOAFA/+wDOAH7/9cDOAH9/9cDOAIH/+wDOAIL/+wDOANw/9cDOQAtAHsDOgAF/+wDOgAK/+wDOgBZ/9cDOgBa/9cDOgBb/9cDOgBc/9cDOgBd/+wDOgC//9cDOgE3/9cDOgE8/+wDOgE+/+wDOgFA/+wDOgH7/9cDOgH9/9cDOgIH/+wDOgIL/+wDOgNw/9cDOwAtAHsDPAAF/+wDPAAK/+wDPABZ/9cDPABa/9cDPABb/9cDPABc/9cDPABd/+wDPAC//9cDPAE3/9cDPAE8/+wDPAE+/+wDPAFA/+wDPAH7/9cDPAH9/9cDPAIH/+wDPAIL/+wDPANw/9cDPQAtAHsDPgAF/+wDPgAK/+wDPgBZ/9cDPgBa/9cDPgBb/9cDPgBc/9cDPgBd/+wDPgC//9cDPgE3/9cDPgE8/+wDPgE+/+wDPgFA/+wDPgH7/9cDPgH9/9cDPgIH/+wDPgIL/+wDPgNw/9cDPwAtAHsDQAAF/+wDQAAK/+wDQABZ/9cDQABa/9cDQABb/9cDQABc/9cDQABd/+wDQAC//9cDQAE3/9cDQAE8/+wDQAE+/+wDQAFA/+wDQAH7/9cDQAH9/9cDQAIH/+wDQAIL/+wDQANw/9cDQQAtAHsDQgAF/+wDQgAK/+wDQgBZ/9cDQgBa/9cDQgBb/9cDQgBc/9cDQgBd/+wDQgC//9cDQgE3/9cDQgE8/+wDQgE+/+wDQgFA/+wDQgH7/9cDQgH9/9cDQgIH/+wDQgIL/+wDQgNw/9cDQwAtAHsDRAAF/+wDRAAK/+wDRABZ/9cDRABa/9cDRABb/9cDRABc/9cDRABd/+wDRAC//9cDRAE3/9cDRAE8/+wDRAE+/+wDRAFA/+wDRAH7/9cDRAH9/9cDRAIH/+wDRAIL/+wDRANw/9cDSQAP/64DSQAR/64DSQAk/9cDSQA3/8MDSQA5/+wDSQA6/+wDSQA7/9cDSQA8/+wDSQA9/+wDSQCC/9cDSQCD/9cDSQCE/9cDSQCF/9cDSQCG/9cDSQCH/9cDSQCf/+wDSQDC/9cDSQDE/9cDSQDG/9cDSQEk/8MDSQEm/8MDSQE2/+wDSQE4/+wDSQE6/+wDSQE7/+wDSQE9/+wDSQE//+wDSQFD/9cDSQGg/+wDSQH6/+wDSQH8/+wDSQH+/+wDSQIA/+wDSQII/64DSQIM/64DSQJY/9cDSQMd/9cDSQMf/9cDSQMh/9cDSQMj/9cDSQMl/9cDSQMn/9cDSQMp/9cDSQMr/9cDSQMt/9cDSQMv/9cDSQMx/9cDSQMz/9cDSQNv/+wDSQNx/+wDSQNz/+wDSQOP/8MDSgAF/+wDSgAK/+wDSgBZ/9cDSgBa/9cDSgBb/9cDSgBc/9cDSgBd/+wDSgC//9cDSgE3/9cDSgE8/+wDSgE+/+wDSgFA/+wDSgH7/9cDSgH9/9cDSgIH/+wDSgIL/+wDSgNw/9cDSwAP/64DSwAR/64DSwAk/9cDSwA3/8MDSwA5/+wDSwA6/+wDSwA7/9cDSwA8/+wDSwA9/+wDSwCC/9cDSwCD/9cDSwCE/9cDSwCF/9cDSwCG/9cDSwCH/9cDSwCf/+wDSwDC/9cDSwDE/9cDSwDG/9cDSwEk/8MDSwEm/8MDSwE2/+wDSwE4/+wDSwE6/+wDSwE7/+wDSwE9/+wDSwE//+wDSwFD/9cDSwGg/+wDSwH6/+wDSwH8/+wDSwH+/+wDSwIA/+wDSwII/64DSwIM/64DSwJY/9cDSwMd/9cDSwMf/9cDSwMh/9cDSwMj/9cDSwMl/9cDSwMn/9cDSwMp/9cDSwMr/9cDSwMt/9cDSwMv/9cDSwMx/9cDSwMz/9cDSwNv/+wDSwNx/+wDSwNz/+wDSwOP/8MDTAAF/+wDTAAK/+wDTABZ/9cDTABa/9cDTABb/9cDTABc/9cDTABd/+wDTAC//9cDTAE3/9cDTAE8/+wDTAE+/+wDTAFA/+wDTAH7/9cDTAH9/9cDTAIH/+wDTAIL/+wDTANw/9cDTQAP/64DTQAR/64DTQAk/9cDTQA3/8MDTQA5/+wDTQA6/+wDTQA7/9cDTQA8/+wDTQA9/+wDTQCC/9cDTQCD/9cDTQCE/9cDTQCF/9cDTQCG/9cDTQCH/9cDTQCf/+wDTQDC/9cDTQDE/9cDTQDG/9cDTQEk/8MDTQEm/8MDTQE2/+wDTQE4/+wDTQE6/+wDTQE7/+wDTQE9/+wDTQE//+wDTQFD/9cDTQGg/+wDTQH6/+wDTQH8/+wDTQH+/+wDTQIA/+wDTQII/64DTQIM/64DTQJY/9cDTQMd/9cDTQMf/9cDTQMh/9cDTQMj/9cDTQMl/9cDTQMn/9cDTQMp/9cDTQMr/9cDTQMt/9cDTQMv/9cDTQMx/9cDTQMz/9cDTQNv/+wDTQNx/+wDTQNz/+wDTQOP/8MDTwAP/64DTwAR/64DTwAk/9cDTwA3/8MDTwA5/+wDTwA6/+wDTwA7/9cDTwA8/+wDTwA9/+wDTwCC/9cDTwCD/9cDTwCE/9cDTwCF/9cDTwCG/9cDTwCH/9cDTwCf/+wDTwDC/9cDTwDE/9cDTwDG/9cDTwEk/8MDTwEm/8MDTwE2/+wDTwE4/+wDTwE6/+wDTwE7/+wDTwE9/+wDTwE//+wDTwFD/9cDTwGg/+wDTwH6/+wDTwH8/+wDTwH+/+wDTwIA/+wDTwII/64DTwIM/64DTwJY/9cDTwMd/9cDTwMf/9cDTwMh/9cDTwMj/9cDTwMl/9cDTwMn/9cDTwMp/9cDTwMr/9cDTwMt/9cDTwMv/9cDTwMx/9cDTwMz/9cDTwNv/+wDTwNx/+wDTwNz/+wDTwOP/8MDUQAP/64DUQAR/64DUQAk/9cDUQA3/8MDUQA5/+wDUQA6/+wDUQA7/9cDUQA8/+wDUQA9/+wDUQCC/9cDUQCD/9cDUQCE/9cDUQCF/9cDUQCG/9cDUQCH/9cDUQCf/+wDUQDC/9cDUQDE/9cDUQDG/9cDUQEk/8MDUQEm/8MDUQE2/+wDUQE4/+wDUQE6/+wDUQE7/+wDUQE9/+wDUQE//+wDUQFD/9cDUQGg/+wDUQH6/+wDUQH8/+wDUQH+/+wDUQIA/+wDUQII/64DUQIM/64DUQJY/9cDUQMd/9cDUQMf/9cDUQMh/9cDUQMj/9cDUQMl/9cDUQMn/9cDUQMp/9cDUQMr/9cDUQMt/9cDUQMv/9cDUQMx/9cDUQMz/9cDUQNv/+wDUQNx/+wDUQNz/+wDUQOP/8MDUwAP/64DUwAR/64DUwAk/9cDUwA3/8MDUwA5/+wDUwA6/+wDUwA7/9cDUwA8/+wDUwA9/+wDUwCC/9cDUwCD/9cDUwCE/9cDUwCF/9cDUwCG/9cDUwCH/9cDUwCf/+wDUwDC/9cDUwDE/9cDUwDG/9cDUwEk/8MDUwEm/8MDUwE2/+wDUwE4/+wDUwE6/+wDUwE7/+wDUwE9/+wDUwE//+wDUwFD/9cDUwGg/+wDUwH6/+wDUwH8/+wDUwH+/+wDUwIA/+wDUwII/64DUwIM/64DUwJY/9cDUwMd/9cDUwMf/9cDUwMh/9cDUwMj/9cDUwMl/9cDUwMn/9cDUwMp/9cDUwMr/9cDUwMt/9cDUwMv/9cDUwMx/9cDUwMz/9cDUwNv/+wDUwNx/+wDUwNz/+wDUwOP/8MDVQAP/64DVQAR/64DVQAk/9cDVQA3/8MDVQA5/+wDVQA6/+wDVQA7/9cDVQA8/+wDVQA9/+wDVQCC/9cDVQCD/9cDVQCE/9cDVQCF/9cDVQCG/9cDVQCH/9cDVQCf/+wDVQDC/9cDVQDE/9cDVQDG/9cDVQEk/8MDVQEm/8MDVQE2/+wDVQE4/+wDVQE6/+wDVQE7/+wDVQE9/+wDVQE//+wDVQFD/9cDVQGg/+wDVQH6/+wDVQH8/+wDVQH+/+wDVQIA/+wDVQII/64DVQIM/64DVQJY/9cDVQMd/9cDVQMf/9cDVQMh/9cDVQMj/9cDVQMl/9cDVQMn/9cDVQMp/9cDVQMr/9cDVQMt/9cDVQMv/9cDVQMx/9cDVQMz/9cDVQNv/+wDVQNx/+wDVQNz/+wDVQOP/8MDWABJAFIDWABXAFIDWABZAGYDWABaAGYDWABbAGYDWABcAGYDWAC/AGYDWAElAFIDWAEnAFIDWAE3AGYDWAH7AGYDWAH9AGYDWAI0AFIDWAI1AFIDWAJdAFIDWAJeAFIDWANwAGYDWAONAFIDWAOQAFIDWgBJAFIDWgBXAFIDWgBZAGYDWgBaAGYDWgBbAGYDWgBcAGYDWgC/AGYDWgElAFIDWgEnAFIDWgE3AGYDWgH7AGYDWgH9AGYDWgI0AFIDWgI1AFIDWgJdAFIDWgJeAFIDWgNwAGYDWgONAFIDWgOQAFIDXABJAFIDXABXAFIDXABZAGYDXABaAGYDXABbAGYDXABcAGYDXAC/AGYDXAElAFIDXAEnAFIDXAE3AGYDXAH7AGYDXAH9AGYDXAI0AFIDXAI1AFIDXAJdAFIDXAJeAFIDXANwAGYDXAONAFIDXAOQAFIDXgBJAFIDXgBXAFIDXgBZAGYDXgBaAGYDXgBbAGYDXgBcAGYDXgC/AGYDXgElAFIDXgEnAFIDXgE3AGYDXgH7AGYDXgH9AGYDXgI0AFIDXgI1AFIDXgJdAFIDXgJeAFIDXgNwAGYDXgONAFIDXgOQAFIDYABJAFIDYABXAFIDYABZAGYDYABaAGYDYABbAGYDYABcAGYDYAC/AGYDYAElAFIDYAEnAFIDYAE3AGYDYAH7AGYDYAH9AGYDYAI0AFIDYAI1AFIDYAJdAFIDYAJeAFIDYANwAGYDYAONAFIDYAOQAFIDYQAP/9cDYQAR/9cDYQAk/+wDYQCC/+wDYQCD/+wDYQCE/+wDYQCF/+wDYQCG/+wDYQCH/+wDYQDC/+wDYQDE/+wDYQDG/+wDYQFD/+wDYQII/9cDYQIM/9cDYQJY/+wDYQMd/+wDYQMf/+wDYQMh/+wDYQMj/+wDYQMl/+wDYQMn/+wDYQMp/+wDYQMr/+wDYQMt/+wDYQMv/+wDYQMx/+wDYQMz/+wDZgBJAGYDZgBXAGYDZgBZAGYDZgBaAGYDZgBbAGYDZgBcAGYDZgC/AGYDZgElAGYDZgEnAGYDZgE3AGYDZgH7AGYDZgH9AGYDZgI0AGYDZgI1AGYDZgJdAGYDZgJeAGYDZgNwAGYDZgONAGYDZgOQAGYDaABJAGYDaABXAGYDaABZAGYDaABaAGYDaABbAGYDaABcAGYDaAC/AGYDaAElAGYDaAEnAGYDaAE3AGYDaAH7AGYDaAH9AGYDaAI0AGYDaAI1AGYDaAJdAGYDaAJeAGYDaANwAGYDaAONAGYDaAOQAGYDagBJAGYDagBXAGYDagBZAGYDagBaAGYDagBbAGYDagBcAGYDagC/AGYDagElAGYDagEnAGYDagE3AGYDagH7AGYDagH9AGYDagI0AGYDagI1AGYDagJdAGYDagJeAGYDagNwAGYDagONAGYDagOQAGYDbABJAGYDbABXAGYDbABZAGYDbABaAGYDbABbAGYDbABcAGYDbAC/AGYDbAElAGYDbAEnAGYDbAE3AGYDbAH7AGYDbAH9AGYDbAI0AGYDbAI1AGYDbAJdAGYDbAJeAGYDbANwAGYDbAONAGYDbAOQAGYDbgBJAGYDbgBXAGYDbgBZAGYDbgBaAGYDbgBbAGYDbgBcAGYDbgC/AGYDbgElAGYDbgEnAGYDbgE3AGYDbgH7AGYDbgH9AGYDbgI0AGYDbgI1AGYDbgJdAGYDbgJeAGYDbgNwAGYDbgONAGYDbgOQAGYDbwAP/4UDbwAR/4UDbwAiACkDbwAk/4UDbwAm/9cDbwAq/9cDbwAy/9cDbwA0/9cDbwBE/5oDbwBG/5oDbwBH/5oDbwBI/5oDbwBK/9cDbwBQ/8MDbwBR/8MDbwBS/5oDbwBT/8MDbwBU/5oDbwBV/8MDbwBW/64DbwBY/8MDbwBd/9cDbwCC/4UDbwCD/4UDbwCE/4UDbwCF/4UDbwCG/4UDbwCH/4UDbwCJ/9cDbwCU/9cDbwCV/9cDbwCW/9cDbwCX/9cDbwCY/9cDbwCa/9cDbwCi/5oDbwCj/5oDbwCk/5oDbwCl/5oDbwCm/5oDbwCn/5oDbwCo/5oDbwCp/5oDbwCq/5oDbwCr/5oDbwCs/5oDbwCt/5oDbwC0/5oDbwC1/5oDbwC2/5oDbwC3/5oDbwC4/5oDbwC6/5oDbwC7/8MDbwC8/8MDbwC9/8MDbwC+/8MDbwDC/4UDbwDD/5oDbwDE/4UDbwDF/5oDbwDG/4UDbwDH/5oDbwDI/9cDbwDJ/5oDbwDK/9cDbwDL/5oDbwDM/9cDbwDN/5oDbwDO/9cDbwDP/5oDbwDR/5oDbwDT/5oDbwDV/5oDbwDX/5oDbwDZ/5oDbwDb/5oDbwDd/5oDbwDe/9cDbwDf/9cDbwDg/9cDbwDh/9cDbwDi/9cDbwDj/9cDbwDk/9cDbwDl/9cDbwD6/8MDbwEG/8MDbwEI/8MDbwEN/8MDbwEO/9cDbwEP/5oDbwEQ/9cDbwER/5oDbwES/9cDbwET/5oDbwEU/9cDbwEV/5oDbwEX/8MDbwEZ/8MDbwEd/64DbwEh/64DbwEr/8MDbwEt/8MDbwEv/8MDbwEx/8MDbwEz/8MDbwE1/8MDbwE8/9cDbwE+/9cDbwFA/9cDbwFD/4UDbwFE/5oDbwFG/5oDbwFH/9cDbwFI/5oDbwFK/64DbwII/4UDbwIM/4UDbwJX/8MDbwJY/4UDbwJZ/5oDbwJf/9cDbwJg/5oDbwJi/8MDbwMd/4UDbwMe/5oDbwMf/4UDbwMg/5oDbwMh/4UDbwMi/5oDbwMj/4UDbwMl/4UDbwMm/5oDbwMn/4UDbwMo/5oDbwMp/4UDbwMq/5oDbwMr/4UDbwMs/5oDbwMt/4UDbwMu/5oDbwMv/4UDbwMw/5oDbwMx/4UDbwMy/5oDbwMz/4UDbwM0/5oDbwM2/5oDbwM4/5oDbwM6/5oDbwM8/5oDbwNA/5oDbwNC/5oDbwNE/5oDbwNJ/9cDbwNK/5oDbwNL/9cDbwNM/5oDbwNN/9cDbwNO/5oDbwNP/9cDbwNR/9cDbwNS/5oDbwNT/9cDbwNU/5oDbwNV/9cDbwNW/5oDbwNX/9cDbwNY/5oDbwNZ/9cDbwNa/5oDbwNb/9cDbwNc/5oDbwNd/9cDbwNe/5oDbwNf/9cDbwNg/5oDbwNi/8MDbwNk/8MDbwNm/8MDbwNo/8MDbwNq/8MDbwNs/8MDbwNu/8MDcAAFAFIDcAAKAFIDcAAP/64DcAAR/64DcAAiACkDcAIHAFIDcAII/64DcAILAFIDcAIM/64DcQAP/4UDcQAR/4UDcQAiACkDcQAk/4UDcQAm/9cDcQAq/9cDcQAy/9cDcQA0/9cDcQBE/5oDcQBG/5oDcQBH/5oDcQBI/5oDcQBK/9cDcQBQ/8MDcQBR/8MDcQBS/5oDcQBT/8MDcQBU/5oDcQBV/8MDcQBW/64DcQBY/8MDcQBd/9cDcQCC/4UDcQCD/4UDcQCE/4UDcQCF/4UDcQCG/4UDcQCH/4UDcQCJ/9cDcQCU/9cDcQCV/9cDcQCW/9cDcQCX/9cDcQCY/9cDcQCa/9cDcQCi/5oDcQCj/5oDcQCk/5oDcQCl/5oDcQCm/5oDcQCn/5oDcQCo/5oDcQCp/5oDcQCq/5oDcQCr/5oDcQCs/5oDcQCt/5oDcQC0/5oDcQC1/5oDcQC2/5oDcQC3/5oDcQC4/5oDcQC6/5oDcQC7/8MDcQC8/8MDcQC9/8MDcQC+/8MDcQDC/4UDcQDD/5oDcQDE/4UDcQDF/5oDcQDG/4UDcQDH/5oDcQDI/9cDcQDJ/5oDcQDK/9cDcQDL/5oDcQDM/9cDcQDN/5oDcQDO/9cDcQDP/5oDcQDR/5oDcQDT/5oDcQDV/5oDcQDX/5oDcQDZ/5oDcQDb/5oDcQDd/5oDcQDe/9cDcQDf/9cDcQDg/9cDcQDh/9cDcQDi/9cDcQDj/9cDcQDk/9cDcQDl/9cDcQD6/8MDcQEG/8MDcQEI/8MDcQEN/8MDcQEO/9cDcQEP/5oDcQEQ/9cDcQER/5oDcQES/9cDcQET/5oDcQEU/9cDcQEV/5oDcQEX/8MDcQEZ/8MDcQEd/64DcQEh/64DcQEr/8MDcQEt/8MDcQEv/8MDcQEx/8MDcQEz/8MDcQE1/8MDcQE8/9cDcQE+/9cDcQFA/9cDcQFD/4UDcQFE/5oDcQFG/5oDcQFH/9cDcQFI/5oDcQFK/64DcQII/4UDcQIM/4UDcQJX/8MDcQJY/4UDcQJZ/5oDcQJf/9cDcQJg/5oDcQJi/8MDcQMd/4UDcQMe/5oDcQMf/4UDcQMg/5oDcQMh/4UDcQMi/5oDcQMj/4UDcQMl/4UDcQMm/5oDcQMn/4UDcQMo/5oDcQMp/4UDcQMq/5oDcQMr/4UDcQMs/5oDcQMt/4UDcQMu/5oDcQMv/4UDcQMw/5oDcQMx/4UDcQMy/5oDcQMz/4UDcQM0/5oDcQM2/5oDcQM4/5oDcQM6/5oDcQM8/5oDcQNA/5oDcQNC/5oDcQNE/5oDcQNJ/9cDcQNK/5oDcQNL/9cDcQNM/5oDcQNN/9cDcQNO/5oDcQNP/9cDcQNR/9cDcQNS/5oDcQNT/9cDcQNU/5oDcQNV/9cDcQNW/5oDcQNX/9cDcQNY/5oDcQNZ/9cDcQNa/5oDcQNb/9cDcQNc/5oDcQNd/9cDcQNe/5oDcQNf/9cDcQNg/5oDcQNi/8MDcQNk/8MDcQNm/8MDcQNo/8MDcQNq/8MDcQNs/8MDcQNu/8MDcgAFAFIDcgAKAFIDcgAP/64DcgAR/64DcgAiACkDcgIHAFIDcgII/64DcgILAFIDcgIM/64DcwAP/4UDcwAR/4UDcwAiACkDcwAk/4UDcwAm/9cDcwAq/9cDcwAy/9cDcwA0/9cDcwBE/5oDcwBG/5oDcwBH/5oDcwBI/5oDcwBK/9cDcwBQ/8MDcwBR/8MDcwBS/5oDcwBT/8MDcwBU/5oDcwBV/8MDcwBW/64DcwBY/8MDcwBd/9cDcwCC/4UDcwCD/4UDcwCE/4UDcwCF/4UDcwCG/4UDcwCH/4UDcwCJ/9cDcwCU/9cDcwCV/9cDcwCW/9cDcwCX/9cDcwCY/9cDcwCa/9cDcwCi/5oDcwCj/5oDcwCk/5oDcwCl/5oDcwCm/5oDcwCn/5oDcwCo/5oDcwCp/5oDcwCq/5oDcwCr/5oDcwCs/5oDcwCt/5oDcwC0/5oDcwC1/5oDcwC2/5oDcwC3/5oDcwC4/5oDcwC6/5oDcwC7/8MDcwC8/8MDcwC9/8MDcwC+/8MDcwDC/4UDcwDD/5oDcwDE/4UDcwDF/5oDcwDG/4UDcwDH/5oDcwDI/9cDcwDJ/5oDcwDK/9cDcwDL/5oDcwDM/9cDcwDN/5oDcwDO/9cDcwDP/5oDcwDR/5oDcwDT/5oDcwDV/5oDcwDX/5oDcwDZ/5oDcwDb/5oDcwDd/5oDcwDe/9cDcwDf/9cDcwDg/9cDcwDh/9cDcwDi/9cDcwDj/9cDcwDk/9cDcwDl/9cDcwD6/8MDcwEG/8MDcwEI/8MDcwEN/8MDcwEO/9cDcwEP/5oDcwEQ/9cDcwER/5oDcwES/9cDcwET/5oDcwEU/9cDcwEV/5oDcwEX/8MDcwEZ/8MDcwEd/64DcwEh/64DcwEr/8MDcwEt/8MDcwEv/8MDcwEx/8MDcwEz/8MDcwE1/8MDcwE8/9cDcwE+/9cDcwFA/9cDcwFD/4UDcwFE/5oDcwFG/5oDcwFH/9cDcwFI/5oDcwFK/64DcwII/4UDcwIM/4UDcwJX/8MDcwJY/4UDcwJZ/5oDcwJf/9cDcwJg/5oDcwJi/8MDcwMd/4UDcwMe/5oDcwMf/4UDcwMg/5oDcwMh/4UDcwMi/5oDcwMj/4UDcwMl/4UDcwMm/5oDcwMn/4UDcwMo/5oDcwMp/4UDcwMq/5oDcwMr/4UDcwMs/5oDcwMt/4UDcwMu/5oDcwMv/4UDcwMw/5oDcwMx/4UDcwMy/5oDcwMz/4UDcwM0/5oDcwM2/5oDcwM4/5oDcwM6/5oDcwM8/5oDcwNA/5oDcwNC/5oDcwNE/5oDcwNJ/9cDcwNK/5oDcwNL/9cDcwNM/5oDcwNN/9cDcwNO/5oDcwNP/9cDcwNR/9cDcwNS/5oDcwNT/9cDcwNU/5oDcwNV/9cDcwNW/5oDcwNX/9cDcwNY/5oDcwNZ/9cDcwNa/5oDcwNb/9cDcwNc/5oDcwNd/9cDcwNe/5oDcwNf/9cDcwNg/5oDcwNi/8MDcwNk/8MDcwNm/8MDcwNo/8MDcwNq/8MDcwNs/8MDcwNu/8MDdAAFAFIDdAAKAFIDdAAP/64DdAAR/64DdAAiACkDdAIHAFIDdAII/64DdAILAFIDdAIM/64DjQAFAHsDjQAKAHsDjQIHAHsDjQILAHsDjwAP/4UDjwAQ/64DjwAR/4UDjwAiACkDjwAk/3EDjwAm/9cDjwAq/9cDjwAy/9cDjwA0/9cDjwA3ACkDjwBE/1wDjwBG/3EDjwBH/3EDjwBI/3EDjwBK/3EDjwBQ/5oDjwBR/5oDjwBS/3EDjwBT/5oDjwBU/3EDjwBV/5oDjwBW/4UDjwBY/5oDjwBZ/9cDjwBa/9cDjwBb/9cDjwBc/9cDjwBd/64DjwCC/3EDjwCD/3EDjwCE/3EDjwCF/3EDjwCG/3EDjwCH/3EDjwCJ/9cDjwCU/9cDjwCV/9cDjwCW/9cDjwCX/9cDjwCY/9cDjwCa/9cDjwCi/3EDjwCj/1wDjwCk/1wDjwCl/1wDjwCm/1wDjwCn/1wDjwCo/1wDjwCp/3EDjwCq/3EDjwCr/3EDjwCs/3EDjwCt/3EDjwC0/3EDjwC1/3EDjwC2/3EDjwC3/3EDjwC4/3EDjwC6/3EDjwC7/5oDjwC8/5oDjwC9/5oDjwC+/5oDjwC//9cDjwDC/3EDjwDD/1wDjwDE/3EDjwDF/1wDjwDG/3EDjwDH/1wDjwDI/9cDjwDJ/3EDjwDK/9cDjwDL/3EDjwDM/9cDjwDN/3EDjwDO/9cDjwDP/3EDjwDR/3EDjwDT/3EDjwDV/3EDjwDX/3EDjwDZ/3EDjwDb/3EDjwDd/3EDjwDe/9cDjwDf/3EDjwDg/9cDjwDh/3EDjwDi/9cDjwDj/3EDjwDk/9cDjwDl/3EDjwD6/5oDjwEG/5oDjwEI/5oDjwEN/5oDjwEO/9cDjwEP/3EDjwEQ/9cDjwER/3EDjwES/9cDjwET/3EDjwEU/9cDjwEV/3EDjwEX/5oDjwEZ/5oDjwEd/4UDjwEh/4UDjwEkACkDjwEmACkDjwEr/5oDjwEt/5oDjwEv/5oDjwEx/5oDjwEz/5oDjwE1/5oDjwE3/9cDjwE8/64DjwE+/64DjwFA/64DjwFD/3EDjwFE/1wDjwFG/1wDjwFH/9cDjwFI/3EDjwFK/4UDjwH7/9cDjwH9/9cDjwIC/64DjwID/64DjwIE/64DjwII/4UDjwIM/4UDjwJX/5oDjwJY/3EDjwJZ/1wDjwJf/9cDjwJg/3EDjwJi/5oDjwMd/3EDjwMe/1wDjwMf/3EDjwMg/1wDjwMh/3EDjwMi/1wDjwMj/3EDjwMl/3EDjwMm/1wDjwMn/3EDjwMo/1wDjwMp/3EDjwMq/1wDjwMr/3EDjwMs/1wDjwMt/3EDjwMu/1wDjwMv/3EDjwMw/1wDjwMx/3EDjwMy/1wDjwMz/3EDjwM0/1wDjwM2/3EDjwM4/3EDjwM6/3EDjwM8/3EDjwNA/3EDjwNC/3EDjwNE/3EDjwNJ/9cDjwNK/3EDjwNL/9cDjwNM/3EDjwNN/9cDjwNO/3EDjwNP/9cDjwNR/9cDjwNS/3EDjwNT/9cDjwNU/3EDjwNV/9cDjwNW/3EDjwNX/9cDjwNY/3EDjwNZ/9cDjwNa/3EDjwNb/9cDjwNc/3EDjwNd/9cDjwNe/3EDjwNf/9cDjwNg/3EDjwNi/5oDjwNk/5oDjwNm/5oDjwNo/5oDjwNq/5oDjwNs/5oDjwNu/5oDjwNw/9cDjwOPACkDkAAFACkDkAAKACkDkAIHACkDkAILACkAAAAAABoBPgABAAAAAAAAADkAAAABAAAAAAABAAkAOQABAAAAAAACAAcAQgABAAAAAAADABoASQABAAAAAAAEABEAYwABAAAAAAAFAAwAdAABAAAAAAAGABAAgAABAAAAAAAHAFIAkAABAAAAAAAIABQA4gABAAAAAAALABwA9gABAAAAAAAMAC4BEgABAAAAAAANAC4BQAABAAAAAAAOACoBbgADAAEECQAAAHIBmAADAAEECQABABICCgADAAEECQACAA4CHAADAAEECQADADQCKgADAAEECQAEACICXgADAAEECQAFABgCgAADAAEECQAGACACmAADAAEECQAHAKQCuAADAAEECQAIACgDXAADAAEECQALADgDhAADAAEECQAMAFwDvAADAAEECQANAFwEGAADAAEECQAOAFQEdERpZ2l0aXplZCBkYXRhIGNvcHlyaWdodCCpIDIwMTAtMjAxMSwgR29vZ2xlIENvcnBvcmF0aW9uLk9wZW4gU2Fuc1JlZ3VsYXIxLjEwOzFBU0M7T3BlblNhbnMtUmVndWxhck9wZW4gU2FucyBSZWd1bGFyVmVyc2lvbiAxLjEwT3BlblNhbnMtUmVndWxhck9wZW4gU2FucyBpcyBhIHRyYWRlbWFyayBvZiBHb29nbGUgYW5kIG1heSBiZSByZWdpc3RlcmVkIGluIGNlcnRhaW4ganVyaXNkaWN0aW9ucy5Bc2NlbmRlciBDb3Jwb3JhdGlvbmh0dHA6Ly93d3cuYXNjZW5kZXJjb3JwLmNvbS9odHRwOi8vd3d3LmFzY2VuZGVyY29ycC5jb20vdHlwZWRlc2lnbmVycy5odG1sTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMABEAGkAZwBpAHQAaQB6AGUAZAAgAGQAYQB0AGEAIABjAG8AcAB5AHIAaQBnAGgAdAAgAKkAIAAyADAAMQAwAC0AMgAwADEAMQAsACAARwBvAG8AZwBsAGUAIABDAG8AcgBwAG8AcgBhAHQAaQBvAG4ALgBPAHAAZQBuACAAUwBhAG4AcwBSAGUAZwB1AGwAYQByADEALgAxADAAOwAxAEEAUwBDADsATwBwAGUAbgBTAGEAbgBzAC0AUgBlAGcAdQBsAGEAcgBPAHAAZQBuACAAUwBhAG4AcwAgAFIAZQBnAHUAbABhAHIAVgBlAHIAcwBpAG8AbgAgADEALgAxADAATwBwAGUAbgBTAGEAbgBzAC0AUgBlAGcAdQBsAGEAcgBPAHAAZQBuACAAUwBhAG4AcwAgAGkAcwAgAGEAIAB0AHIAYQBkAGUAbQBhAHIAawAgAG8AZgAgAEcAbwBvAGcAbABlACAAYQBuAGQAIABtAGEAeQAgAGIAZQAgAHIAZQBnAGkAcwB0AGUAcgBlAGQAIABpAG4AIABjAGUAcgB0AGEAaQBuACAAagB1AHIAaQBzAGQAaQBjAHQAaQBvAG4AcwAuAEEAcwBjAGUAbgBkAGUAcgAgAEMAbwByAHAAbwByAGEAdABpAG8AbgBoAHQAdABwADoALwAvAHcAdwB3AC4AYQBzAGMAZQBuAGQAZQByAGMAbwByAHAALgBjAG8AbQAvAGgAdAB0AHAAOgAvAC8AdwB3AHcALgBhAHMAYwBlAG4AZABlAHIAYwBvAHIAcAAuAGMAbwBtAC8AdAB5AHAAZQBkAGUAcwBpAGcAbgBlAHIAcwAuAGgAdABtAGwATABpAGMAZQBuAHMAZQBkACAAdQBuAGQAZQByACAAdABoAGUAIABBAHAAYQBjAGgAZQAgAEwAaQBjAGUAbgBzAGUALAAgAFYAZQByAHMAaQBvAG4AIAAyAC4AMABoAHQAdABwADoALwAvAHcAdwB3AC4AYQBwAGEAYwBoAGUALgBvAHIAZwAvAGwAaQBjAGUAbgBzAGUAcwAvAEwASQBDAEUATgBTAEUALQAyAC4AMAAAAAIAAAAAAAD/ZgBmAAAAAAAAAAAAAAAAAAAAAAAAAAADqgECAQMBBAEFAQYBBwEIAQkBCgELAQwBDQEOAQ8BEAERARIBEwEUARUBFgEXARgBGQEaARsBHAEdAR4BHwEgASEBIgEjASQBJQEmAScBKAEpASoBKwEsAS0BLgEvATABMQEyATMBNAE1ATYBNwE4ATkBOgE7ATwBPQE+AT8BQAFBAUIBQwFEAUUBRgFHAUgBSQFKAUsBTAFNAU4BTwFQAVEBUgFTAVQBVQFWAVcBWAFZAVoBWwFcAV0BXgFfAWABYQFiAWMBZAFlAWYBZwFoAWkBagFrAWwBbQFuAW8BcAFxAXIBcwF0AXUBdgF3AXgBeQF6AXsBfAF9AX4BfwGAAYEBggGDAYQBhQGGAYcBiAGJAYoBiwGMAY0BjgGPAZABkQGSAZMBlAGVAZYBlwGYAZkBmgGbAZwBnQGeAZ8BoAGhAaIBowGkAaUBpgGnAagBqQGqAasBrAGtAa4BrwGwAbEBsgGzAbQBtQG2AbcBuAG5AboBuwG8Ab0BvgG/AcABwQHCAcMBxAHFAcYBxwHIAckBygHLAcwBzQHOAc8B0AHRAdIB0wHUAdUB1gHXAdgB2QHaAdsB3AHdAd4B3wHgAeEB4gHjAeQB5QHmAecB6AHpAeoB6wHsAe0B7gHvAfAB8QHyAfMB9AH1AfYB9wH4AfkB+gH7AfwB/QH+Af8CAAIBAgICAwIEAgUCBgIHAggCCQIKAgsCDAINAg4CDwIQAhECEgITAhQCFQIWAhcCGAIZAhoCGwIcAh0CHgIfAiACIQIiAiMCJAIlAiYCJwIoAikCKgIrAiwCLQIuAi8CMAIxAjICMwI0AjUCNgI3AjgCOQI6AjsCPAI9Aj4CPwJAAkECQgJDAkQCRQJGAkcCSAJJAkoCSwJMAk0CTgJPAlACUQJSAlMCVAJVAlYCVwJYAlkCWgJbAlwCXQJeAl8CYAJhAmICYwJkAmUCZgJnAmgCaQJqAmsCbAJtAm4CbwJwAnECcgJzAnQCdQJ2AncCeAJ5AnoCewJ8An0CfgJ/AoACgQKCAoMChAKFAoYChwKIAokCigKLAowCjQKOAo8CkAKRApICkwKUApUClgKXApgCmQKaApsCnAKdAp4CnwKgAqECogKjAqQCpQKmAqcCqAKpAqoCqwKsAq0CrgKvArACsQKyArMCtAK1ArYCtwK4ArkCugK7ArwCvQK+Ar8CwALBAsICwwLEAsUCxgLHAsgCyQLKAssCzALNAs4CzwLQAtEC0gLTAtQC1QLWAtcC2ALZAtoC2wLcAt0C3gLfAuAC4QLiAuMC5ALlAuYC5wLoAukC6gLrAuwC7QLuAu8C8ALxAvIC8wL0AvUC9gL3AvgC+QL6AvsC/AL9Av4C/wMAAwEDAgMDAwQDBQMGAwcDCAMJAwoDCwMMAw0DDgMPAxADEQMSAxMDFAMVAxYDFwMYAxkDGgMbAxwDHQMeAx8DIAMhAyIDIwMkAyUDJgMnAygDKQMqAysDLAMtAy4DLwMwAzEDMgMzAzQDNQM2AzcDOAM5AzoDOwM8Az0DPgM/A0ADQQNCA0MDRANFA0YDRwNIA0kDSgNLA0wDTQNOA08DUANRA1IDUwNUA1UDVgNXA1gDWQNaA1sDXANdA14DXwNgA2EDYgNjA2QDZQNmA2cDaANpA2oDawNsA20DbgNvA3ADcQNyA3MDdAN1A3YDdwN4A3kDegN7A3wDfQN+A38DgAOBA4IDgwOEA4UDhgOHA4gDiQOKA4sDjAONA44DjwOQA5EDkgOTA5QDlQOWA5cDmAOZA5oDmwOcA50DngOfA6ADoQOiA6MDpAOlA6YDpwOoA6kDqgOrA6wDrQOuA68DsAOxA7IDswO0A7UDtgO3A7gDuQO6A7sDvAO9A74DvwPAA8EDwgPDA8QDxQPGA8cDyAPJA8oDywPMA80DzgPPA9AD0QPSA9MD1APVA9YD1wPYA9kD2gPbA9wD3QPeA98D4APhA+ID4wPkA+UD5gPnA+gD6QPqA+sD7APtA+4D7wPwA/ED8gPzA/QD9QP2A/cD+AP5A/oD+wP8A/0D/gP/BAAEAQQCBAMEBAQFBAYEBwQIBAkECgQLBAwEDQQOBA8EEAQRBBIEEwQUBBUEFgQXBBgEGQQaBBsEHAQdBB4EHwQgBCEEIgQjBCQEJQQmBCcEKAQpBCoEKwQsBC0ELgQvBDAEMQQyBDMENAQ1BDYENwQ4BDkEOgQ7BDwEPQQ+BD8EQARBBEIEQwREBEUERgRHBEgESQRKBEsETARNBE4ETwRQBFEEUgRTBFQEVQRWBFcEWARZBFoEWwRcBF0EXgRfBGAEYQRiBGMEZARlBGYEZwRoBGkEagRrBGwEbQRuBG8EcARxBHIEcwR0BHUEdgR3BHgEeQR6BHsEfAR9BH4EfwSABIEEggSDBIQEhQSGBIcEiASJBIoEiwSMBI0EjgSPBJAEkQSSBJMElASVBJYElwSYBJkEmgSbBJwEnQSeBJ8EoAShBKIEowSkBKUEpgSnBKgEqQSqBKsHLm5vdGRlZgRudWxsEG5vbm1hcmtpbmdyZXR1cm4Fc3BhY2UGZXhjbGFtCHF1b3RlZGJsCm51bWJlcnNpZ24GZG9sbGFyB3BlcmNlbnQJYW1wZXJzYW5kC3F1b3Rlc2luZ2xlCXBhcmVubGVmdApwYXJlbnJpZ2h0CGFzdGVyaXNrBHBsdXMFY29tbWEGaHlwaGVuBnBlcmlvZAVzbGFzaAR6ZXJvA29uZQN0d28FdGhyZWUEZm91cgRmaXZlA3NpeAVzZXZlbgVlaWdodARuaW5lBWNvbG9uCXNlbWljb2xvbgRsZXNzBWVxdWFsB2dyZWF0ZXIIcXVlc3Rpb24CYXQBQQFCAUMBRAFFAUYBRwFIBUkuYWx0AUoBSwFMAU0BTgFPAVABUQFSAVMBVAFVAVYBVwFYAVkBWgticmFja2V0bGVmdAliYWNrc2xhc2gMYnJhY2tldHJpZ2h0C2FzY2lpY2lyY3VtCnVuZGVyc2NvcmUFZ3JhdmUBYQFiAWMBZAFlAWYBZwFoAWkBagFrAWwBbQFuAW8BcAFxAXIBcwF0AXUBdgF3AXgBeQF6CWJyYWNlbGVmdANiYXIKYnJhY2VyaWdodAphc2NpaXRpbGRlEG5vbmJyZWFraW5nc3BhY2UKZXhjbGFtZG93bgRjZW50CHN0ZXJsaW5nCGN1cnJlbmN5A3llbglicm9rZW5iYXIHc2VjdGlvbghkaWVyZXNpcwljb3B5cmlnaHQLb3JkZmVtaW5pbmUNZ3VpbGxlbW90bGVmdApsb2dpY2Fsbm90B3VuaTAwQUQKcmVnaXN0ZXJlZAlvdmVyc2NvcmUGZGVncmVlCXBsdXNtaW51cwt0d29zdXBlcmlvcg10aHJlZXN1cGVyaW9yBWFjdXRlAm11CXBhcmFncmFwaA5wZXJpb2RjZW50ZXJlZAdjZWRpbGxhC29uZXN1cGVyaW9yDG9yZG1hc2N1bGluZQ5ndWlsbGVtb3RyaWdodApvbmVxdWFydGVyB29uZWhhbGYNdGhyZWVxdWFydGVycwxxdWVzdGlvbmRvd24GQWdyYXZlBkFhY3V0ZQtBY2lyY3VtZmxleAZBdGlsZGUJQWRpZXJlc2lzBUFyaW5nAkFFCENjZWRpbGxhBkVncmF2ZQZFYWN1dGULRWNpcmN1bWZsZXgJRWRpZXJlc2lzCklncmF2ZS5hbHQKSWFjdXRlLmFsdA9JY2lyY3VtZmxleC5hbHQNSWRpZXJlc2lzLmFsdANFdGgGTnRpbGRlBk9ncmF2ZQZPYWN1dGULT2NpcmN1bWZsZXgGT3RpbGRlCU9kaWVyZXNpcwhtdWx0aXBseQZPc2xhc2gGVWdyYXZlBlVhY3V0ZQtVY2lyY3VtZmxleAlVZGllcmVzaXMGWWFjdXRlBVRob3JuCmdlcm1hbmRibHMGYWdyYXZlBmFhY3V0ZQthY2lyY3VtZmxleAZhdGlsZGUJYWRpZXJlc2lzBWFyaW5nAmFlCGNjZWRpbGxhBmVncmF2ZQZlYWN1dGULZWNpcmN1bWZsZXgJZWRpZXJlc2lzBmlncmF2ZQZpYWN1dGULaWNpcmN1bWZsZXgJaWRpZXJlc2lzA2V0aAZudGlsZGUGb2dyYXZlBm9hY3V0ZQtvY2lyY3VtZmxleAZvdGlsZGUJb2RpZXJlc2lzBmRpdmlkZQZvc2xhc2gGdWdyYXZlBnVhY3V0ZQt1Y2lyY3VtZmxleAl1ZGllcmVzaXMGeWFjdXRlBXRob3JuCXlkaWVyZXNpcwdBbWFjcm9uB2FtYWNyb24GQWJyZXZlBmFicmV2ZQdBb2dvbmVrB2FvZ29uZWsGQ2FjdXRlBmNhY3V0ZQtDY2lyY3VtZmxleAtjY2lyY3VtZmxleARDZG90BGNkb3QGQ2Nhcm9uBmNjYXJvbgZEY2Fyb24GZGNhcm9uBkRjcm9hdAZkY3JvYXQHRW1hY3JvbgdlbWFjcm9uBkVicmV2ZQZlYnJldmUKRWRvdGFjY2VudAplZG90YWNjZW50B0VvZ29uZWsHZW9nb25lawZFY2Fyb24GZWNhcm9uC0djaXJjdW1mbGV4C2djaXJjdW1mbGV4BkdicmV2ZQZnYnJldmUER2RvdARnZG90DEdjb21tYWFjY2VudAxnY29tbWFhY2NlbnQLSGNpcmN1bWZsZXgLaGNpcmN1bWZsZXgESGJhcgRoYmFyCkl0aWxkZS5hbHQGaXRpbGRlC0ltYWNyb24uYWx0B2ltYWNyb24KSWJyZXZlLmFsdAZpYnJldmULSW9nb25lay5hbHQHaW9nb25law5JZG90YWNjZW50LmFsdAhkb3RsZXNzaQZJSi5hbHQCaWoLSmNpcmN1bWZsZXgLamNpcmN1bWZsZXgMS2NvbW1hYWNjZW50DGtjb21tYWFjY2VudAxrZ3JlZW5sYW5kaWMGTGFjdXRlBmxhY3V0ZQxMY29tbWFhY2NlbnQMbGNvbW1hYWNjZW50BkxjYXJvbgZsY2Fyb24ETGRvdARsZG90BkxzbGFzaAZsc2xhc2gGTmFjdXRlBm5hY3V0ZQxOY29tbWFhY2NlbnQMbmNvbW1hYWNjZW50Bk5jYXJvbgZuY2Fyb24LbmFwb3N0cm9waGUDRW5nA2VuZwdPbWFjcm9uB29tYWNyb24GT2JyZXZlBm9icmV2ZQ1PaHVuZ2FydW1sYXV0DW9odW5nYXJ1bWxhdXQCT0UCb2UGUmFjdXRlBnJhY3V0ZQxSY29tbWFhY2NlbnQMcmNvbW1hYWNjZW50BlJjYXJvbgZyY2Fyb24GU2FjdXRlBnNhY3V0ZQtTY2lyY3VtZmxleAtzY2lyY3VtZmxleAhTY2VkaWxsYQhzY2VkaWxsYQZTY2Fyb24Gc2Nhcm9uDFRjb21tYWFjY2VudAx0Y29tbWFhY2NlbnQGVGNhcm9uBnRjYXJvbgRUYmFyBHRiYXIGVXRpbGRlBnV0aWxkZQdVbWFjcm9uB3VtYWNyb24GVWJyZXZlBnVicmV2ZQVVcmluZwV1cmluZw1VaHVuZ2FydW1sYXV0DXVodW5nYXJ1bWxhdXQHVW9nb25lawd1b2dvbmVrC1djaXJjdW1mbGV4C3djaXJjdW1mbGV4C1ljaXJjdW1mbGV4C3ljaXJjdW1mbGV4CVlkaWVyZXNpcwZaYWN1dGUGemFjdXRlClpkb3RhY2NlbnQKemRvdGFjY2VudAZaY2Fyb24GemNhcm9uBWxvbmdzBmZsb3JpbgpBcmluZ2FjdXRlCmFyaW5nYWN1dGUHQUVhY3V0ZQdhZWFjdXRlC09zbGFzaGFjdXRlC29zbGFzaGFjdXRlDFNjb21tYWFjY2VudAxzY29tbWFhY2NlbnQKY2lyY3VtZmxleAVjYXJvbgZtYWNyb24FYnJldmUJZG90YWNjZW50BHJpbmcGb2dvbmVrBXRpbGRlDGh1bmdhcnVtbGF1dAV0b25vcw1kaWVyZXNpc3Rvbm9zCkFscGhhdG9ub3MJYW5vdGVsZWlhDEVwc2lsb250b25vcwhFdGF0b25vcw1Jb3RhdG9ub3MuYWx0DE9taWNyb250b25vcwxVcHNpbG9udG9ub3MKT21lZ2F0b25vcxFpb3RhZGllcmVzaXN0b25vcwVBbHBoYQRCZXRhBUdhbW1hB3VuaTAzOTQHRXBzaWxvbgRaZXRhA0V0YQVUaGV0YQhJb3RhLmFsdAVLYXBwYQZMYW1iZGECTXUCTnUCWGkHT21pY3JvbgJQaQNSaG8FU2lnbWEDVGF1B1Vwc2lsb24DUGhpA0NoaQNQc2kHdW5pMDNBORBJb3RhZGllcmVzaXMuYWx0D1Vwc2lsb25kaWVyZXNpcwphbHBoYXRvbm9zDGVwc2lsb250b25vcwhldGF0b25vcwlpb3RhdG9ub3MUdXBzaWxvbmRpZXJlc2lzdG9ub3MFYWxwaGEEYmV0YQVnYW1tYQVkZWx0YQdlcHNpbG9uBHpldGEDZXRhBXRoZXRhBGlvdGEFa2FwcGEGbGFtYmRhB3VuaTAzQkMCbnUCeGkHb21pY3JvbgJwaQNyaG8Gc2lnbWExBXNpZ21hA3RhdQd1cHNpbG9uA3BoaQNjaGkDcHNpBW9tZWdhDGlvdGFkaWVyZXNpcw91cHNpbG9uZGllcmVzaXMMb21pY3JvbnRvbm9zDHVwc2lsb250b25vcwpvbWVnYXRvbm9zCWFmaWkxMDAyMwlhZmlpMTAwNTEJYWZpaTEwMDUyCWFmaWkxMDA1MwlhZmlpMTAwNTQNYWZpaTEwMDU1LmFsdA1hZmlpMTAwNTYuYWx0CWFmaWkxMDA1NwlhZmlpMTAwNTgJYWZpaTEwMDU5CWFmaWkxMDA2MAlhZmlpMTAwNjEJYWZpaTEwMDYyCWFmaWkxMDE0NQlhZmlpMTAwMTcJYWZpaTEwMDE4CWFmaWkxMDAxOQlhZmlpMTAwMjAJYWZpaTEwMDIxCWFmaWkxMDAyMglhZmlpMTAwMjQJYWZpaTEwMDI1CWFmaWkxMDAyNglhZmlpMTAwMjcJYWZpaTEwMDI4CWFmaWkxMDAyOQlhZmlpMTAwMzAJYWZpaTEwMDMxCWFmaWkxMDAzMglhZmlpMTAwMzMJYWZpaTEwMDM0CWFmaWkxMDAzNQlhZmlpMTAwMzYJYWZpaTEwMDM3CWFmaWkxMDAzOAlhZmlpMTAwMzkJYWZpaTEwMDQwCWFmaWkxMDA0MQlhZmlpMTAwNDIJYWZpaTEwMDQzCWFmaWkxMDA0NAlhZmlpMTAwNDUJYWZpaTEwMDQ2CWFmaWkxMDA0NwlhZmlpMTAwNDgJYWZpaTEwMDQ5CWFmaWkxMDA2NQlhZmlpMTAwNjYJYWZpaTEwMDY3CWFmaWkxMDA2OAlhZmlpMTAwNjkJYWZpaTEwMDcwCWFmaWkxMDA3MglhZmlpMTAwNzMJYWZpaTEwMDc0CWFmaWkxMDA3NQlhZmlpMTAwNzYJYWZpaTEwMDc3CWFmaWkxMDA3OAlhZmlpMTAwNzkJYWZpaTEwMDgwCWFmaWkxMDA4MQlhZmlpMTAwODIJYWZpaTEwMDgzCWFmaWkxMDA4NAlhZmlpMTAwODUJYWZpaTEwMDg2CWFmaWkxMDA4NwlhZmlpMTAwODgJYWZpaTEwMDg5CWFmaWkxMDA5MAlhZmlpMTAwOTEJYWZpaTEwMDkyCWFmaWkxMDA5MwlhZmlpMTAwOTQJYWZpaTEwMDk1CWFmaWkxMDA5NglhZmlpMTAwOTcJYWZpaTEwMDcxCWFmaWkxMDA5OQlhZmlpMTAxMDAJYWZpaTEwMTAxCWFmaWkxMDEwMglhZmlpMTAxMDMJYWZpaTEwMTA0CWFmaWkxMDEwNQlhZmlpMTAxMDYJYWZpaTEwMTA3CWFmaWkxMDEwOAlhZmlpMTAxMDkJYWZpaTEwMTEwCWFmaWkxMDE5MwlhZmlpMTAwNTAJYWZpaTEwMDk4BldncmF2ZQZ3Z3JhdmUGV2FjdXRlBndhY3V0ZQlXZGllcmVzaXMJd2RpZXJlc2lzBllncmF2ZQZ5Z3JhdmUGZW5kYXNoBmVtZGFzaAlhZmlpMDAyMDgNdW5kZXJzY29yZWRibAlxdW90ZWxlZnQKcXVvdGVyaWdodA5xdW90ZXNpbmdsYmFzZQ1xdW90ZXJldmVyc2VkDHF1b3RlZGJsbGVmdA1xdW90ZWRibHJpZ2h0DHF1b3RlZGJsYmFzZQZkYWdnZXIJZGFnZ2VyZGJsBmJ1bGxldAhlbGxpcHNpcwtwZXJ0aG91c2FuZAZtaW51dGUGc2Vjb25kDWd1aWxzaW5nbGxlZnQOZ3VpbHNpbmdscmlnaHQJZXhjbGFtZGJsCGZyYWN0aW9uCW5zdXBlcmlvcgVmcmFuYwlhZmlpMDg5NDEGcGVzZXRhBEV1cm8JYWZpaTYxMjQ4CWFmaWk2MTI4OQlhZmlpNjEzNTIJdHJhZGVtYXJrBU9tZWdhCWVzdGltYXRlZAlvbmVlaWdodGgMdGhyZWVlaWdodGhzC2ZpdmVlaWdodGhzDHNldmVuZWlnaHRocwtwYXJ0aWFsZGlmZgVEZWx0YQdwcm9kdWN0CXN1bW1hdGlvbgVtaW51cwdyYWRpY2FsCGluZmluaXR5CGludGVncmFsC2FwcHJveGVxdWFsCG5vdGVxdWFsCWxlc3NlcXVhbAxncmVhdGVyZXF1YWwHbG96ZW5nZQd1bmlGQjAxB3VuaUZCMDINY3lyaWxsaWNicmV2ZQhkb3RsZXNzahBjYXJvbmNvbW1hYWNjZW50C2NvbW1hYWNjZW50EWNvbW1hYWNjZW50cm90YXRlDHplcm9zdXBlcmlvcgxmb3Vyc3VwZXJpb3IMZml2ZXN1cGVyaW9yC3NpeHN1cGVyaW9yDXNldmVuc3VwZXJpb3INZWlnaHRzdXBlcmlvcgxuaW5lc3VwZXJpb3IHdW5pMjAwMAd1bmkyMDAxB3VuaTIwMDIHdW5pMjAwMwd1bmkyMDA0B3VuaTIwMDUHdW5pMjAwNgd1bmkyMDA3B3VuaTIwMDgHdW5pMjAwOQd1bmkyMDBBB3VuaTIwMEIHdW5pRkVGRgd1bmlGRkZDB3VuaUZGRkQHdW5pMDFGMAd1bmkwMkJDB3VuaTAzRDEHdW5pMDNEMgd1bmkwM0Q2B3VuaTFFM0UHdW5pMUUzRgd1bmkxRTAwB3VuaTFFMDEHdW5pMUY0RAd1bmkwMkYzCWRhc2lhb3hpYQd1bmlGQjAzB3VuaUZCMDQFT2hvcm4Fb2hvcm4FVWhvcm4FdWhvcm4HdW5pMDMwMAd1bmkwMzAxB3VuaTAzMDMEaG9vawhkb3RiZWxvdwd1bmkwNDAwB3VuaTA0MEQHdW5pMDQ1MAd1bmkwNDVEB3VuaTA0NjAHdW5pMDQ2MQd1bmkwNDYyB3VuaTA0NjMHdW5pMDQ2NAd1bmkwNDY1B3VuaTA0NjYHdW5pMDQ2Nwd1bmkwNDY4B3VuaTA0NjkHdW5pMDQ2QQd1bmkwNDZCB3VuaTA0NkMHdW5pMDQ2RAd1bmkwNDZFB3VuaTA0NkYHdW5pMDQ3MAd1bmkwNDcxB3VuaTA0NzIHdW5pMDQ3Mwd1bmkwNDc0B3VuaTA0NzUHdW5pMDQ3Ngd1bmkwNDc3B3VuaTA0NzgHdW5pMDQ3OQd1bmkwNDdBB3VuaTA0N0IHdW5pMDQ3Qwd1bmkwNDdEB3VuaTA0N0UHdW5pMDQ3Rgd1bmkwNDgwB3VuaTA0ODEHdW5pMDQ4Mgd1bmkwNDgzB3VuaTA0ODQHdW5pMDQ4NQd1bmkwNDg2B3VuaTA0ODgHdW5pMDQ4OQd1bmkwNDhBB3VuaTA0OEIHdW5pMDQ4Qwd1bmkwNDhEB3VuaTA0OEUHdW5pMDQ4Rgd1bmkwNDkyB3VuaTA0OTMHdW5pMDQ5NAd1bmkwNDk1B3VuaTA0OTYHdW5pMDQ5Nwd1bmkwNDk4B3VuaTA0OTkHdW5pMDQ5QQd1bmkwNDlCB3VuaTA0OUMHdW5pMDQ5RAd1bmkwNDlFB3VuaTA0OUYHdW5pMDRBMAd1bmkwNEExB3VuaTA0QTIHdW5pMDRBMwd1bmkwNEE0B3VuaTA0QTUHdW5pMDRBNgd1bmkwNEE3B3VuaTA0QTgHdW5pMDRBOQd1bmkwNEFBB3VuaTA0QUIHdW5pMDRBQwd1bmkwNEFEB3VuaTA0QUUHdW5pMDRBRgd1bmkwNEIwB3VuaTA0QjEHdW5pMDRCMgd1bmkwNEIzB3VuaTA0QjQHdW5pMDRCNQd1bmkwNEI2B3VuaTA0QjcHdW5pMDRCOAd1bmkwNEI5B3VuaTA0QkEHdW5pMDRCQgd1bmkwNEJDB3VuaTA0QkQHdW5pMDRCRQd1bmkwNEJGC3VuaTA0QzAuYWx0B3VuaTA0QzEHdW5pMDRDMgd1bmkwNEMzB3VuaTA0QzQHdW5pMDRDNQd1bmkwNEM2B3VuaTA0QzcHdW5pMDRDOAd1bmkwNEM5B3VuaTA0Q0EHdW5pMDRDQgd1bmkwNENDB3VuaTA0Q0QHdW5pMDRDRQt1bmkwNENGLmFsdAd1bmkwNEQwB3VuaTA0RDEHdW5pMDREMgd1bmkwNEQzB3VuaTA0RDQHdW5pMDRENQd1bmkwNEQ2B3VuaTA0RDcHdW5pMDREOAd1bmkwNEQ5B3VuaTA0REEHdW5pMDREQgd1bmkwNERDB3VuaTA0REQHdW5pMDRERQd1bmkwNERGB3VuaTA0RTAHdW5pMDRFMQd1bmkwNEUyB3VuaTA0RTMHdW5pMDRFNAd1bmkwNEU1B3VuaTA0RTYHdW5pMDRFNwd1bmkwNEU4B3VuaTA0RTkHdW5pMDRFQQd1bmkwNEVCB3VuaTA0RUMHdW5pMDRFRAd1bmkwNEVFB3VuaTA0RUYHdW5pMDRGMAd1bmkwNEYxB3VuaTA0RjIHdW5pMDRGMwd1bmkwNEY0B3VuaTA0RjUHdW5pMDRGNgd1bmkwNEY3B3VuaTA0RjgHdW5pMDRGOQd1bmkwNEZBB3VuaTA0RkIHdW5pMDRGQwd1bmkwNEZEB3VuaTA0RkUHdW5pMDRGRgd1bmkwNTAwB3VuaTA1MDEHdW5pMDUwMgd1bmkwNTAzB3VuaTA1MDQHdW5pMDUwNQd1bmkwNTA2B3VuaTA1MDcHdW5pMDUwOAd1bmkwNTA5B3VuaTA1MEEHdW5pMDUwQgd1bmkwNTBDB3VuaTA1MEQHdW5pMDUwRQd1bmkwNTBGB3VuaTA1MTAHdW5pMDUxMQd1bmkwNTEyB3VuaTA1MTMHdW5pMUVBMAd1bmkxRUExB3VuaTFFQTIHdW5pMUVBMwd1bmkxRUE0B3VuaTFFQTUHdW5pMUVBNgd1bmkxRUE3B3VuaTFFQTgHdW5pMUVBOQd1bmkxRUFBB3VuaTFFQUIHdW5pMUVBQwd1bmkxRUFEB3VuaTFFQUUHdW5pMUVBRgd1bmkxRUIwB3VuaTFFQjEHdW5pMUVCMgd1bmkxRUIzB3VuaTFFQjQHdW5pMUVCNQd1bmkxRUI2B3VuaTFFQjcHdW5pMUVCOAd1bmkxRUI5B3VuaTFFQkEHdW5pMUVCQgd1bmkxRUJDB3VuaTFFQkQHdW5pMUVCRQd1bmkxRUJGB3VuaTFFQzAHdW5pMUVDMQd1bmkxRUMyB3VuaTFFQzMHdW5pMUVDNAd1bmkxRUM1B3VuaTFFQzYHdW5pMUVDNwt1bmkxRUM4LmFsdAd1bmkxRUM5C3VuaTFFQ0EuYWx0B3VuaTFFQ0IHdW5pMUVDQwd1bmkxRUNEB3VuaTFFQ0UHdW5pMUVDRgd1bmkxRUQwB3VuaTFFRDEHdW5pMUVEMgd1bmkxRUQzB3VuaTFFRDQHdW5pMUVENQd1bmkxRUQ2B3VuaTFFRDcHdW5pMUVEOAd1bmkxRUQ5B3VuaTFFREEHdW5pMUVEQgd1bmkxRURDB3VuaTFFREQHdW5pMUVERQd1bmkxRURGB3VuaTFFRTAHdW5pMUVFMQd1bmkxRUUyB3VuaTFFRTMHdW5pMUVFNAd1bmkxRUU1B3VuaTFFRTYHdW5pMUVFNwd1bmkxRUU4B3VuaTFFRTkHdW5pMUVFQQd1bmkxRUVCB3VuaTFFRUMHdW5pMUVFRAd1bmkxRUVFB3VuaTFFRUYHdW5pMUVGMAd1bmkxRUYxB3VuaTFFRjQHdW5pMUVGNQd1bmkxRUY2B3VuaTFFRjcHdW5pMUVGOAd1bmkxRUY5B3VuaTIwQUIHdW5pMDMwRhNjaXJjdW1mbGV4YWN1dGVjb21iE2NpcmN1bWZsZXhncmF2ZWNvbWISY2lyY3VtZmxleGhvb2tjb21iE2NpcmN1bWZsZXh0aWxkZWNvbWIOYnJldmVhY3V0ZWNvbWIOYnJldmVncmF2ZWNvbWINYnJldmVob29rY29tYg5icmV2ZXRpbGRlY29tYhBjeXJpbGxpY2hvb2tsZWZ0EWN5cmlsbGljYmlnaG9va1VDEWN5cmlsbGljYmlnaG9va0xDCG9uZS5wbnVtB3plcm8ub3MGb25lLm9zBnR3by5vcwh0aHJlZS5vcwdmb3VyLm9zB2ZpdmUub3MGc2l4Lm9zCHNldmVuLm9zCGVpZ2h0Lm9zB25pbmUub3MCZmYHdW5pMjEyMAhUY2VkaWxsYQh0Y2VkaWxsYQVnLmFsdA9nY2lyY3VtZmxleC5hbHQKZ2JyZXZlLmFsdAhnZG90LmFsdBBnY29tbWFhY2NlbnQuYWx0AUkGSWdyYXZlBklhY3V0ZQtJY2lyY3VtZmxleAlJZGllcmVzaXMGSXRpbGRlB0ltYWNyb24GSWJyZXZlB0lvZ29uZWsKSWRvdGFjY2VudAJJSglJb3RhdG9ub3MESW90YQxJb3RhZGllcmVzaXMJYWZpaTEwMDU1CWFmaWkxMDA1Ngd1bmkwNEMwB3VuaTA0Q0YHdW5pMUVDOAd1bmkxRUNBAAABAAMACAAKAA0AB///AA8AAQAAAAwAAAAWAAAAAgABAAADqQABAAQAAAABAAAAAAABAAAACgA0ADYAAWxhdG4ACAAQAAJNT0wgABZST00gABwAAP//AAAAAP//AAAAAP//AAAAAAAAAAEAAAAKAG4B5AABbGF0bgAIABAAAk1PTCAAKFJPTSAAQgAA//8ACQADAAgACwAAAA4AEQAUABcAGgAA//8ACgAEAAYACQAMAAEADwASABUAGAAbAAD//wAKAAUABwAKAA0AAgAQABMAFgAZABwAHWxpZ2EAsGxpZ2EAtmxpZ2EAvGxudW0AwmxudW0AyGxudW0AzmxvY2wA1GxvY2wA2m9udW0A4G9udW0A6G9udW0A8HBudW0A+HBudW0A/nBudW0BBHNhbHQBCnNhbHQBEnNhbHQBGnNzMDEBInNzMDEBKnNzMDEBMnNzMDIBOnNzMDIBQHNzMDIBRnNzMDMBTHNzMDMBUnNzMDMBWHRudW0BXnRudW0BZnRudW0BbgAAAAEACQAAAAEACQAAAAEACQAAAAEABwAAAAEABwAAAAEABwAAAAEACAAAAAEACAAAAAIAAgADAAAAAgACAAMAAAACAAIAAwAAAAEABAAAAAEABAAAAAEABAAAAAIAAAABAAAAAgAAAAEAAAACAAAAAQAAAAIAAAABAAAAAgAAAAEAAAACAAAAAQAAAAEAAAAAAAEAAAAAAAEAAAAAAAEAAQAAAAEAAQAAAAEAAQAAAAIABQAGAAAAAgAFAAYAAAACAAUABgAKABYAHgAmAC4ANgA+AEYATgBWAF4AAQAAAAEAUAABAAAAAQB6AAEAAAABAKoAAQAAAAEAxgABAAAAAQDuAAEAAAABAPQAAQAAAAEBEAABAAAAAQEWAAEAAAABATIABAAAAAEBSAACABAABQORA5IDkwOUA5UAAgAFAEoASgAAAN8A3wABAOEA4QACAOMA4wADAOUA5QAEAAIALgAUACwAjgCPAJAAkQDqAOwA7gDwAPIA9AFaAWcBdwGhAaICyQLYA0UDRwACAAEDlgOpAAAAAgAaAAoDgwOEA4UDhgOHA4gDiQOKA4sDjAACAAEAEwAcAAAAAgAaAAoDgwOFA4YDhwOIA4kDigOLA4wDhAACAAMAEwATAAAAFQAcAAEDggOCAAkAAgAIAAEDggABAAEAFAACABoACgATABQAFQAWABcAGAAZABoAGwAcAAIAAQODA4wAAAACAAgAAQAUAAEAAQOCAAIAGgAKABMDggAVABYAFwAYABkAGgAbABwAAgABA4MDjAAAAAIADgAEA48DkAEgASEAAgACASQBJQAAAUkBSgACAAEANgABAAgABQAMABQAHAAiACgCXgADAEkATwJdAAMASQBMA40AAgBJAjUAAgBPAjQAAgBMAAEAAQBJAAAAAAABAAEAAQAAAAEAABVeAAAAFAAAAAAAABVWMIIVUgYJKoZIhvcNAQcCoIIVQzCCFT8CAQExCzAJBgUrDgMCGgUAMGEGCisGAQQBgjcCAQSgUzBRMCwGCisGAQQBgjcCARyiHoAcADwAPAA8AE8AYgBzAG8AbABlAHQAZQA+AD4APjAhMAkGBSsOAwIaBQAEFIK4uYCP2fVApm1usxVUQTaZ3tN9oIIRXTCCA3owggJioAMCAQICEDgl1/r4Ya+e9JDnJrXWWtUwDQYJKoZIhvcNAQEFBQAwUzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMSswKQYDVQQDEyJWZXJpU2lnbiBUaW1lIFN0YW1waW5nIFNlcnZpY2VzIENBMB4XDTA3MDYxNTAwMDAwMFoXDTEyMDYxNDIzNTk1OVowXDELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTQwMgYDVQQDEytWZXJpU2lnbiBUaW1lIFN0YW1waW5nIFNlcnZpY2VzIFNpZ25lciAtIEcyMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDEtfJSFbyIhmApFkpbL0uRa4eR8zVUWDXq0TZeYk1SUTRxwntmHYnI3SrEagr2N9mYdJH2kq6wtXaW8alKY0VHLmsLkk5LK4zuWEqL1AfkGiz4gqpY2c1C8y3Add6Nq8eOHZpsTAiVHt7b72fhcsJJwp5gPOHivhajY3hpFHutLQIDAQABo4HEMIHBMDQGCCsGAQUFBwEBBCgwJjAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AudmVyaXNpZ24uY29tMAwGA1UdEwEB/wQCMAAwMwYDVR0fBCwwKjAooCagJIYiaHR0cDovL2NybC52ZXJpc2lnbi5jb20vdHNzLWNhLmNybDAWBgNVHSUBAf8EDDAKBggrBgEFBQcDCDAOBgNVHQ8BAf8EBAMCBsAwHgYDVR0RBBcwFaQTMBExDzANBgNVBAMTBlRTQTEtMjANBgkqhkiG9w0BAQUFAAOCAQEAUMVLyCSA3+QNJMLeGrGhAqGmgi0MgxWBNwqCDiywWhdhtdgF/ojb8ZGRs1YaQKbrkr44ObB1NnQ6mE/kN7qZicqVQh2wucegjVfg+tVkBEI1TgHRM6IXyE2qJ8fy4YZMAjhNg3jG/FPg6+AGh92klp5eDJjipb6/goXDYOHfrSjYx6VLZNrHG1u9rDkI1TgioTOLL4qa67wHIT9EQQkHtWUcJLxI00SA66HPyQK0FM9UxxajgFz5eT5dcn2IF54sQ6LKU859PfYqOrhPlAClbQqDXfleU/QYs1cPcMP79a2VoA4X3sQWgGDJDytuhgTx6/R4J9EFxe40W165STLyMzCCA8QwggMtoAMCAQICEEe/GZXfjVJGQ/fbbUgNMaQwDQYJKoZIhvcNAQEFBQAwgYsxCzAJBgNVBAYTAlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxFDASBgNVBAcTC0R1cmJhbnZpbGxlMQ8wDQYDVQQKEwZUaGF3dGUxHTAbBgNVBAsTFFRoYXd0ZSBDZXJ0aWZpY2F0aW9uMR8wHQYDVQQDExZUaGF3dGUgVGltZXN0YW1waW5nIENBMB4XDTAzMTIwNDAwMDAwMFoXDTEzMTIwMzIzNTk1OVowUzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMSswKQYDVQQDEyJWZXJpU2lnbiBUaW1lIFN0YW1waW5nIFNlcnZpY2VzIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqcqypMzNIK8KfYmsh3XwtE7x38EPv2dhvaNkHNq7+cozq4QwiVh+jNtr3TaeD7/R7Hjyd6Z+bzy/k68Numj0bJTKvVItq0g99bbVXV8bAp/6L2sepPejmqYayALhf0xS4w5g7EAcfrkN3j/HtN+HvV96ajEuA5mBE6hHIM4xcw1XLc14NDOVEpkSud5oL6rm48KKjCrDiyGHZr2DWFdvdb88qiaHXcoQFTyfhOpUwQpuxP7FSt25BxGXInzbPifRHnjsnzHJ8eYiGdvEs0dDmhpfoB6Q5F717nzxfatiAY/1TQve0CJWqJXNroh2ru66DfPkTdmg+2igrhQ7s4fBuwIDAQABo4HbMIHYMDQGCCsGAQUFBwEBBCgwJjAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AudmVyaXNpZ24uY29tMBIGA1UdEwEB/wQIMAYBAf8CAQAwQQYDVR0fBDowODA2oDSgMoYwaHR0cDovL2NybC52ZXJpc2lnbi5jb20vVGhhd3RlVGltZXN0YW1waW5nQ0EuY3JsMBMGA1UdJQQMMAoGCCsGAQUFBwMIMA4GA1UdDwEB/wQEAwIBBjAkBgNVHREEHTAbpBkwFzEVMBMGA1UEAxMMVFNBMjA0OC0xLTUzMA0GCSqGSIb3DQEBBQUAA4GBAEpr+epYwkQcMYl5mSuWv4KsAdYcTM2wilhu3wgpo17IypMT5wRSDe9HJy8AOLDkyZNOmtQiYhX3PzchT3AxgPGLOIez6OiXAP7PVZZOJNKpJ056rrdhQfMqzufJ2V7duyuFPrWdtdnhV/++tMV+9c8MnvCX/ivTO1IbGzgn9z9KMIIE/DCCBGWgAwIBAgIQZVIm4bIuGOFZDymFrCLnXDANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xNzA1BgNVBAsTLkNsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDkwNTIxMDAwMDAwWhcNMTkwNTIwMjM1OTU5WjCBtjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTswOQYDVQQLEzJUZXJtcyBvZiB1c2UgYXQgaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYSAoYykwOTEwMC4GA1UEAxMnVmVyaVNpZ24gQ2xhc3MgMyBDb2RlIFNpZ25pbmcgMjAwOS0yIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvmcdtGCqEElvVhd8Zslehg3V8ayncYOOi4n4iASJFQa6LYQhleTRnFBM+9IivdrysjU7Ho/DCfv8Ey5av4l8PTslHvbzWHuc9AG1xgq4gM6+J3RhZydNauXsgWFYeaPgFxASFSew4U00fytHIES53mYkZorNT7ofxTjIVJDhcvYZZnVquUlozzh5DaowqNssYEie16oUAamD1ziRMDkTlgM6fEBUtq3gLxuD3KgRUj4Cs9cr/SG2p1yjDwupphBQDjQuTafOyV4l1Iy88258KbwBXfwxh1rVjIVnWIgZoL818OoroyHnkPaD5ajtYHhee2CD/VcLXUENY1Rg1kMh7wIDAQABo4IB2zCCAdcwEgYDVR0TAQH/BAgwBgEB/wIBADBwBgNVHSAEaTBnMGUGC2CGSAGG+EUBBxcDMFYwKAYIKwYBBQUHAgEWHGh0dHBzOi8vd3d3LnZlcmlzaWduLmNvbS9jcHMwKgYIKwYBBQUHAgIwHhocaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYTAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVyaXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMDMDQGCCsGAQUFBwEBBCgwJjAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AudmVyaXNpZ24uY29tMDEGA1UdHwQqMCgwJqAkoCKGIGh0dHA6Ly9jcmwudmVyaXNpZ24uY29tL3BjYTMuY3JsMCkGA1UdEQQiMCCkHjAcMRowGAYDVQQDExFDbGFzczNDQTIwNDgtMS01NTAdBgNVHQ4EFgQUl9BrqCZwyKE/lB8ILcQ1m6ShHvIwDQYJKoZIhvcNAQEFBQADgYEAiwPA3ZTYQaJhabAVqHjHMMaQPH5C9yS25INzFwR/BBCcoeL6gS/rwMpE53LgULZVECCDbpaS5JpRarQ3MdylLeuMAMcdT+dNMrqF+E6++mdVZfBqvnrKZDgaEBB4RXYx84Z6Aw9gwrNdnfaLZnaCG1nhg+W9SaU4VuXeQXcOWA8wggUTMIID+6ADAgECAhBm4/BnecoVFm1QU2+IGRqDMA0GCSqGSIb3DQEBBQUAMIG2MQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOzA5BgNVBAsTMlRlcm1zIG9mIHVzZSBhdCBodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBhIChjKTA5MTAwLgYDVQQDEydWZXJpU2lnbiBDbGFzcyAzIENvZGUgU2lnbmluZyAyMDA5LTIgQ0EwHhcNMTAwNzI5MDAwMDAwWhcNMTIwODA4MjM1OTU5WjCB0DELMAkGA1UEBhMCVVMxFjAUBgNVBAgTDU1hc3NhY2h1c2V0dHMxDzANBgNVBAcTBldvYnVybjEeMBwGA1UEChQVTW9ub3R5cGUgSW1hZ2luZyBJbmMuMT4wPAYDVQQLEzVEaWdpdGFsIElEIENsYXNzIDMgLSBNaWNyb3NvZnQgU29mdHdhcmUgVmFsaWRhdGlvbiB2MjEYMBYGA1UECxQPVHlwZSBPcGVyYXRpb25zMR4wHAYDVQQDFBVNb25vdHlwZSBJbWFnaW5nIEluYy4wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAJREoJVpfFUN0NsWjTI1ikwzq14goUzXKoc415ilQPAZSQsiHlNPwkOmyoupVu9uSAaoBRU5HmM7JBKQuZjPygg1fXLjR1f9ecuKSudAcC01Y3+ugM/Er9j798n8idjXpKDbCfKi8nvvzXXB92VQZCKdvX28rbhLzFhFDk3RWUxNAgMBAAGjggGDMIIBfzAJBgNVHRMEAjAAMA4GA1UdDwEB/wQEAwIHgDBEBgNVHR8EPTA7MDmgN6A1hjNodHRwOi8vY3NjMy0yMDA5LTItY3JsLnZlcmlzaWduLmNvbS9DU0MzLTIwMDktMi5jcmwwRAYDVR0gBD0wOzA5BgtghkgBhvhFAQcXAzAqMCgGCCsGAQUFBwIBFhxodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBhMBMGA1UdJQQMMAoGCCsGAQUFBwMDMHUGCCsGAQUFBwEBBGkwZzAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AudmVyaXNpZ24uY29tMD8GCCsGAQUFBzAChjNodHRwOi8vY3NjMy0yMDA5LTItYWlhLnZlcmlzaWduLmNvbS9DU0MzLTIwMDktMi5jZXIwHwYDVR0jBBgwFoAUl9BrqCZwyKE/lB8ILcQ1m6ShHvIwEQYJYIZIAYb4QgEBBAQDAgQQMBYGCisGAQQBgjcCARsECDAGAQEAAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQBO5iKH32dBFRfi0u5+Ds7CmdZjvfC1k+VqcmLh9dI8OO6oPQhfukeBgl9bS0n0HSD6D5MJ0B0ZVkQXoojz+42drvcNNd48DKxElGBFKpv+m29MO7E0Z3AQhv9aOVxa42yCqzV8ZUv9mG21FZRJnIhwEL49sWKVtNu01NronUGQfv59uaSS627yIorGdzZNiloLUwUx0ysor1LhjXprtXdEvQyt9F0lLOPNijA+SwOcecqmTq4LwswkBwvBlIL2EPG6kLabmthcPBPx6gIGGCdNPIlvM4rTht7pWDN1PeuTaeJEb04AbM/VhdpWppqmP8tMIWiQ8mC64egGXTkhEzLtMYIDZzCCA2MCAQEwgcswgbYxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazE7MDkGA1UECxMyVGVybXMgb2YgdXNlIGF0IGh0dHBzOi8vd3d3LnZlcmlzaWduLmNvbS9ycGEgKGMpMDkxMDAuBgNVBAMTJ1ZlcmlTaWduIENsYXNzIDMgQ29kZSBTaWduaW5nIDIwMDktMiBDQQIQZuPwZ3nKFRZtUFNviBkagzAJBgUrDgMCGgUAoHAwEAYKKwYBBAGCNwIBDDECMAAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYKKwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUwIwYJKoZIhvcNAQkEMRYEFEjj6tsXY4/GsRVXJyC3ZfQZU5UYMA0GCSqGSIb3DQEBAQUABIGARTu81Lrv2hu/YjveEuxKBoRFcUHJAv4uDpXzibFS9EHrbTIsSL8pkbyyL11kJDQuupa0tkpzl+D2n0H392i29YAGeEG+U5DAfnhSWxyqDiFC3L4JnDPTRlCQOwWZECtZaeyF2GPRLcMGljTtFKOc8vFUQNVHF6ALAB+MZu/ePhuhggF/MIIBewYJKoZIhvcNAQkGMYIBbDCCAWgCAQEwZzBTMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xKzApBgNVBAMTIlZlcmlTaWduIFRpbWUgU3RhbXBpbmcgU2VydmljZXMgQ0ECEDgl1/r4Ya+e9JDnJrXWWtUwCQYFKw4DAhoFAKBdMBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZIhvcNAQkFMQ8XDTExMDUwNTE2NTUxMFowIwYJKoZIhvcNAQkEMRYEFFQXCCsLve4aJw4fjfxTk/Q4VhAPMA0GCSqGSIb3DQEBAQUABIGAHcF3ia6bbyLja+VF2k6RQPCf7zsfJ0pWrDr9qJRqfPecwX97k2BOG8QrV5WUyxbhmmcz0SspE8jsvrxZsQOkKZnsHYiZJId3D5vKFPvU1ElMdA7IPS5vIMkDzejlD9AhObNWGdX7rL2sqTi9sNUMo9ljrbCVtGhYw+LXKf+RpMcAAA==",
            "encoding": "base64"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": -1,
          "_transferSize": 217527,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:10.312Z",
        "time": 633.6649999720976,
        "timings": {
          "blocked": 571.9079999994933,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0.44700000000000006,
          "wait": 53.10800003355742,
          "receive": 8.2019999390468,
          "_blocked_queueing": 571.0309999994934,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_connectionId": "1726423",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "other"
        },
        "_priority": "VeryHigh",
        "_resourceType": "document",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "POST",
          "url": "https://ekat.festool.de/ekat/app",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": ":authority",
              "value": "ekat.festool.de"
            },
            {
              "name": ":method",
              "value": "POST"
            },
            {
              "name": ":path",
              "value": "/ekat/app"
            },
            {
              "name": ":scheme",
              "value": "https"
            },
            {
              "name": "accept",
              "value": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7"
            },
            {
              "name": "accept-encoding",
              "value": "gzip, deflate, br, zstd"
            },
            {
              "name": "accept-language",
              "value": "en-GB,en-US;q=0.9,en;q=0.8"
            },
            {
              "name": "cache-control",
              "value": "max-age=0"
            },
            {
              "name": "content-length",
              "value": "53819"
            },
            {
              "name": "content-type",
              "value": "application/x-www-form-urlencoded"
            },
            {
              "name": "origin",
              "value": "https://ekat.festool.de"
            },
            {
              "name": "priority",
              "value": "u=0, i"
            },
            {
              "name": "referer",
              "value": "https://ekat.festool.de/ekat/app"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            },
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "sec-fetch-dest",
              "value": "iframe"
            },
            {
              "name": "sec-fetch-mode",
              "value": "navigate"
            },
            {
              "name": "sec-fetch-site",
              "value": "same-origin"
            },
            {
              "name": "upgrade-insecure-requests",
              "value": "1"
            },
            {
              "name": "user-agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            }
          ],
          "queryString": [],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 53819,
          "postData": {
            "mimeType": "application/x-www-form-urlencoded",
            "text": "location=https%3A%2F%2Fekat.festool.de%2Fekat%2Fapp&WebGL=true&cookies=true&tabid=1787216950336_0.48841508521386534&javascript=true&availablefonts=%22Segoe+UI%22%2CVerdana%2CTahoma%2CArial%2Csans-serif&screensize=1388x1140&dpi=192&zoom=1&displayorientation=90&touch=true&pointer=false&mspointer=false&maxtouchpoints=0&browserinfo=&canvas=true&video=true&hiddenScrollbar=true&perf=true&legacy=false&scrollbarwidth=0&timeZoneOffset=-60&ref_0_meta=font-family%3D%22Segoe+UI%22%7Cfont-size%3D8px%7Cfont-style%3D0&ref_0=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D415.828125x11&ref_1_meta=font-family%3D%22Segoe+UI%22%7Cfont-size%3D8px%7Cfont-style%3D1&ref_1=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D444.484375x11&ref_2_meta=font-family%3D%22Segoe+UI%22%7Cfont-size%3D8px%7Cfont-style%3D2&ref_2=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D406x11&ref_3_meta=font-family%3D%22Segoe+UI%22%7Cfont-size%3D8px%7Cfont-style%3D3&ref_3=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D442.09375x11&ref_4_meta=font-family%3D%22Segoe+UI%22%7Cfont-size%3D9px%7Cfont-style%3D0&ref_4=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D467.796875x12&ref_5_meta=font-family%3D%22Segoe+UI%22%7Cfont-size%3D9px%7Cfont-style%3D1&ref_5=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D500.046875x12&ref_6_meta=font-family%3D%22Segoe+UI%22%7Cfont-size%3D9px%7Cfont-style%3D2&ref_6=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D456.75x12&ref_7_meta=font-family%3D%22Segoe+UI%22%7Cfont-size%3D9px%7Cfont-style%3D3&ref_7=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D497.34375x12&ref_8_meta=font-family%3D%22Segoe+UI%22%7Cfont-size%3D10px%7Cfont-style%3D0&ref_8=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D519.78125x14&ref_9_meta=font-family%3D%22Segoe+UI%22%7Cfont-size%3D10px%7Cfont-style%3D1&ref_9=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D555.609375x14&ref_10_meta=font-family%3D%22Segoe+UI%22%7Cfont-size%3D10px%7Cfont-style%3D2&ref_10=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D507.5x14&ref_11_meta=font-family%3D%22Segoe+UI%22%7Cfont-size%3D10px%7Cfont-style%3D3&ref_11=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D552.609375x14&ref_12_meta=font-family%3D%22Segoe+UI%22%7Cfont-size%3D11px%7Cfont-style%3D0&ref_12=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D571.75x15&ref_13_meta=font-family%3D%22Segoe+UI%22%7Cfont-size%3D11px%7Cfont-style%3D1&ref_13=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D611.171875x15&ref_14_meta=font-family%3D%22Segoe+UI%22%7Cfont-size%3D11px%7Cfont-style%3D2&ref_14=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D558.25x15&ref_15_meta=font-family%3D%22Segoe+UI%22%7Cfont-size%3D11px%7Cfont-style%3D3&ref_15=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D607.875x15&ref_16_meta=font-family%3D%22Segoe+UI%22%7Cfont-size%3D12px%7Cfont-style%3D0&ref_16=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D623.734375x16&ref_17_meta=font-family%3D%22Segoe+UI%22%7Cfont-size%3D12px%7Cfont-style%3D1&ref_17=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D666.734375x16&ref_18_meta=font-family%3D%22Segoe+UI%22%7Cfont-size%3D12px%7Cfont-style%3D2&ref_18=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D609x16&ref_19_meta=font-family%3D%22Segoe+UI%22%7Cfont-size%3D12px%7Cfont-style%3D3&ref_19=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D663.125x16&ref_20_meta=font-family%3D%22Segoe+UI%22%7Cfont-size%3D13px%7Cfont-style%3D0&ref_20=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D675.703125x17&ref_21_meta=font-family%3D%22Segoe+UI%22%7Cfont-size%3D13px%7Cfont-style%3D1&ref_21=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D722.28125x17&ref_22_meta=font-family%3D%22Segoe+UI%22%7Cfont-size%3D13px%7Cfont-style%3D2&ref_22=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D659.75x17&ref_23_meta=font-family%3D%22Segoe+UI%22%7Cfont-size%3D13px%7Cfont-style%3D3&ref_23=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D718.390625x17&ref_24_meta=font-family%3D%22Segoe+UI%22%7Cfont-size%3D14px%7Cfont-style%3D0&ref_24=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D727.6875x19&ref_25_meta=font-family%3D%22Segoe+UI%22%7Cfont-size%3D14px%7Cfont-style%3D1&ref_25=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D777.84375x19&ref_26_meta=font-family%3D%22Segoe+UI%22%7Cfont-size%3D14px%7Cfont-style%3D2&ref_26=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D710.5x19&ref_27_meta=font-family%3D%22Segoe+UI%22%7Cfont-size%3D14px%7Cfont-style%3D3&ref_27=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D773.65625x19&ref_28_meta=font-family%3D%22Segoe+UI%22%7Cfont-size%3D15px%7Cfont-style%3D0&ref_28=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D779.65625x20&ref_29_meta=font-family%3D%22Segoe+UI%22%7Cfont-size%3D15px%7Cfont-style%3D1&ref_29=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D833.40625x20&ref_30_meta=font-family%3D%22Segoe+UI%22%7Cfont-size%3D15px%7Cfont-style%3D2&ref_30=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D761.25x20&ref_31_meta=font-family%3D%22Segoe+UI%22%7Cfont-size%3D15px%7Cfont-style%3D3&ref_31=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D828.90625x20&ref_32_meta=font-family%3D%22Segoe+UI%22%7Cfont-size%3D16px%7Cfont-style%3D0&ref_32=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D831.640625x21&ref_33_meta=font-family%3D%22Segoe+UI%22%7Cfont-size%3D16px%7Cfont-style%3D1&ref_33=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D888.96875x21&ref_34_meta=font-family%3D%22Segoe+UI%22%7Cfont-size%3D16px%7Cfont-style%3D2&ref_34=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D811.984375x21&ref_35_meta=font-family%3D%22Segoe+UI%22%7Cfont-size%3D16px%7Cfont-style%3D3&ref_35=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D884.171875x21&ref_36_meta=font-family%3D%22Segoe+UI%22%7Cfont-size%3D17px%7Cfont-style%3D0&ref_36=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D883.625x22&ref_37_meta=font-family%3D%22Segoe+UI%22%7Cfont-size%3D17px%7Cfont-style%3D1&ref_37=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D944.53125x22&ref_38_meta=font-family%3D%22Segoe+UI%22%7Cfont-size%3D17px%7Cfont-style%3D2&ref_38=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D862.734375x22&ref_39_meta=font-family%3D%22Segoe+UI%22%7Cfont-size%3D17px%7Cfont-style%3D3&ref_39=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D939.4375x22&ref_40_meta=font-family%3D%22Segoe+UI%22%7Cfont-size%3D18px%7Cfont-style%3D0&ref_40=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D935.59375x24&ref_41_meta=font-family%3D%22Segoe+UI%22%7Cfont-size%3D18px%7Cfont-style%3D1&ref_41=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1000.09375x24&ref_42_meta=font-family%3D%22Segoe+UI%22%7Cfont-size%3D18px%7Cfont-style%3D2&ref_42=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D913.484375x24&ref_43_meta=font-family%3D%22Segoe+UI%22%7Cfont-size%3D18px%7Cfont-style%3D3&ref_43=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D994.6875x24&ref_44_meta=font-family%3D%22Segoe+UI%22%7Cfont-size%3D19px%7Cfont-style%3D0&ref_44=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D987.578125x26&ref_45_meta=font-family%3D%22Segoe+UI%22%7Cfont-size%3D19px%7Cfont-style%3D1&ref_45=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1055.65625x26&ref_46_meta=font-family%3D%22Segoe+UI%22%7Cfont-size%3D19px%7Cfont-style%3D2&ref_46=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D964.234375x26&ref_47_meta=font-family%3D%22Segoe+UI%22%7Cfont-size%3D19px%7Cfont-style%3D3&ref_47=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1049.953125x26&ref_48_meta=font-family%3D%22Segoe+UI%22%7Cfont-size%3D20px%7Cfont-style%3D0&ref_48=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1039.546875x27&ref_49_meta=font-family%3D%22Segoe+UI%22%7Cfont-size%3D20px%7Cfont-style%3D1&ref_49=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1111.203125x27&ref_50_meta=font-family%3D%22Segoe+UI%22%7Cfont-size%3D20px%7Cfont-style%3D2&ref_50=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1014.984375x27&ref_51_meta=font-family%3D%22Segoe+UI%22%7Cfont-size%3D20px%7Cfont-style%3D3&ref_51=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1105.21875x27&ref_52_meta=font-family%3DVerdana%7Cfont-size%3D8px%7Cfont-style%3D0&ref_52=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D474.515625x10&ref_53_meta=font-family%3DVerdana%7Cfont-size%3D8px%7Cfont-style%3D1&ref_53=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D534.015625x10&ref_54_meta=font-family%3DVerdana%7Cfont-size%3D8px%7Cfont-style%3D2&ref_54=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D475.796875x10&ref_55_meta=font-family%3DVerdana%7Cfont-size%3D8px%7Cfont-style%3D3&ref_55=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D533.984375x10&ref_56_meta=font-family%3DVerdana%7Cfont-size%3D9px%7Cfont-style%3D0&ref_56=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D533.828125x11&ref_57_meta=font-family%3DVerdana%7Cfont-size%3D9px%7Cfont-style%3D1&ref_57=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D600.765625x11&ref_58_meta=font-family%3DVerdana%7Cfont-size%3D9px%7Cfont-style%3D2&ref_58=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D535.265625x11&ref_59_meta=font-family%3DVerdana%7Cfont-size%3D9px%7Cfont-style%3D3&ref_59=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D600.734375x11&ref_60_meta=font-family%3DVerdana%7Cfont-size%3D10px%7Cfont-style%3D0&ref_60=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D593.140625x12&ref_61_meta=font-family%3DVerdana%7Cfont-size%3D10px%7Cfont-style%3D1&ref_61=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D667.515625x12&ref_62_meta=font-family%3DVerdana%7Cfont-size%3D10px%7Cfont-style%3D2&ref_62=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D594.75x12&ref_63_meta=font-family%3DVerdana%7Cfont-size%3D10px%7Cfont-style%3D3&ref_63=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D667.484375x12&ref_64_meta=font-family%3DVerdana%7Cfont-size%3D11px%7Cfont-style%3D0&ref_64=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D652.46875x13&ref_65_meta=font-family%3DVerdana%7Cfont-size%3D11px%7Cfont-style%3D1&ref_65=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D734.265625x13&ref_66_meta=font-family%3DVerdana%7Cfont-size%3D11px%7Cfont-style%3D2&ref_66=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D654.21875x13&ref_67_meta=font-family%3DVerdana%7Cfont-size%3D11px%7Cfont-style%3D3&ref_67=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D734.234375x13&ref_68_meta=font-family%3DVerdana%7Cfont-size%3D12px%7Cfont-style%3D0&ref_68=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D711.78125x15&ref_69_meta=font-family%3DVerdana%7Cfont-size%3D12px%7Cfont-style%3D1&ref_69=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D801.015625x15&ref_70_meta=font-family%3DVerdana%7Cfont-size%3D12px%7Cfont-style%3D2&ref_70=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D713.6875x15&ref_71_meta=font-family%3DVerdana%7Cfont-size%3D12px%7Cfont-style%3D3&ref_71=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D800.984375x15&ref_72_meta=font-family%3DVerdana%7Cfont-size%3D13px%7Cfont-style%3D0&ref_72=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D771.09375x16&ref_73_meta=font-family%3DVerdana%7Cfont-size%3D13px%7Cfont-style%3D1&ref_73=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D867.765625x16&ref_74_meta=font-family%3DVerdana%7Cfont-size%3D13px%7Cfont-style%3D2&ref_74=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D773.171875x16&ref_75_meta=font-family%3DVerdana%7Cfont-size%3D13px%7Cfont-style%3D3&ref_75=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D867.71875x16&ref_76_meta=font-family%3DVerdana%7Cfont-size%3D14px%7Cfont-style%3D0&ref_76=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D830.40625x17&ref_77_meta=font-family%3DVerdana%7Cfont-size%3D14px%7Cfont-style%3D1&ref_77=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D934.515625x17&ref_78_meta=font-family%3DVerdana%7Cfont-size%3D14px%7Cfont-style%3D2&ref_78=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D832.640625x17&ref_79_meta=font-family%3DVerdana%7Cfont-size%3D14px%7Cfont-style%3D3&ref_79=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D934.46875x17&ref_80_meta=font-family%3DVerdana%7Cfont-size%3D15px%7Cfont-style%3D0&ref_80=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D889.71875x18&ref_81_meta=font-family%3DVerdana%7Cfont-size%3D15px%7Cfont-style%3D1&ref_81=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1001.265625x18&ref_82_meta=font-family%3DVerdana%7Cfont-size%3D15px%7Cfont-style%3D2&ref_82=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D892.109375x18&ref_83_meta=font-family%3DVerdana%7Cfont-size%3D15px%7Cfont-style%3D3&ref_83=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1001.21875x18&ref_84_meta=font-family%3DVerdana%7Cfont-size%3D16px%7Cfont-style%3D0&ref_84=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D949.03125x19&ref_85_meta=font-family%3DVerdana%7Cfont-size%3D16px%7Cfont-style%3D1&ref_85=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1068.015625x19&ref_86_meta=font-family%3DVerdana%7Cfont-size%3D16px%7Cfont-style%3D2&ref_86=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D951.578125x19&ref_87_meta=font-family%3DVerdana%7Cfont-size%3D16px%7Cfont-style%3D3&ref_87=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1067.96875x19&ref_88_meta=font-family%3DVerdana%7Cfont-size%3D17px%7Cfont-style%3D0&ref_88=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1008.34375x21&ref_89_meta=font-family%3DVerdana%7Cfont-size%3D17px%7Cfont-style%3D1&ref_89=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1134.765625x21&ref_90_meta=font-family%3DVerdana%7Cfont-size%3D17px%7Cfont-style%3D2&ref_90=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1011.0625x21&ref_91_meta=font-family%3DVerdana%7Cfont-size%3D17px%7Cfont-style%3D3&ref_91=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1134.71875x21&ref_92_meta=font-family%3DVerdana%7Cfont-size%3D18px%7Cfont-style%3D0&ref_92=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1067.65625x22&ref_93_meta=font-family%3DVerdana%7Cfont-size%3D18px%7Cfont-style%3D1&ref_93=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1201.515625x22&ref_94_meta=font-family%3DVerdana%7Cfont-size%3D18px%7Cfont-style%3D2&ref_94=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1070.53125x22&ref_95_meta=font-family%3DVerdana%7Cfont-size%3D18px%7Cfont-style%3D3&ref_95=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1201.46875x22&ref_96_meta=font-family%3DVerdana%7Cfont-size%3D19px%7Cfont-style%3D0&ref_96=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1126.96875x23&ref_97_meta=font-family%3DVerdana%7Cfont-size%3D19px%7Cfont-style%3D1&ref_97=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1268.265625x23&ref_98_meta=font-family%3DVerdana%7Cfont-size%3D19px%7Cfont-style%3D2&ref_98=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1130x23&ref_99_meta=font-family%3DVerdana%7Cfont-size%3D19px%7Cfont-style%3D3&ref_99=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1268.21875x23&ref_100_meta=font-family%3DVerdana%7Cfont-size%3D20px%7Cfont-style%3D0&ref_100=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1186.28125x24&ref_101_meta=font-family%3DVerdana%7Cfont-size%3D20px%7Cfont-style%3D1&ref_101=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1335.015625x24&ref_102_meta=font-family%3DVerdana%7Cfont-size%3D20px%7Cfont-style%3D2&ref_102=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1189.484375x24&ref_103_meta=font-family%3DVerdana%7Cfont-size%3D20px%7Cfont-style%3D3&ref_103=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1334.953125x24&ref_104_meta=font-family%3DTahoma%7Cfont-size%3D8px%7Cfont-style%3D0&ref_104=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D414.671875x10&ref_105_meta=font-family%3DTahoma%7Cfont-size%3D8px%7Cfont-style%3D1&ref_105=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D477.0625x10&ref_106_meta=font-family%3DTahoma%7Cfont-size%3D8px%7Cfont-style%3D2&ref_106=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D414.671875x10&ref_107_meta=font-family%3DTahoma%7Cfont-size%3D8px%7Cfont-style%3D3&ref_107=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D477.0625x10&ref_108_meta=font-family%3DTahoma%7Cfont-size%3D9px%7Cfont-style%3D0&ref_108=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D466.5x11&ref_109_meta=font-family%3DTahoma%7Cfont-size%3D9px%7Cfont-style%3D1&ref_109=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D536.703125x11&ref_110_meta=font-family%3DTahoma%7Cfont-size%3D9px%7Cfont-style%3D2&ref_110=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D466.5x11&ref_111_meta=font-family%3DTahoma%7Cfont-size%3D9px%7Cfont-style%3D3&ref_111=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D536.703125x11&ref_112_meta=font-family%3DTahoma%7Cfont-size%3D10px%7Cfont-style%3D0&ref_112=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D518.328125x12&ref_113_meta=font-family%3DTahoma%7Cfont-size%3D10px%7Cfont-style%3D1&ref_113=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D596.328125x12&ref_114_meta=font-family%3DTahoma%7Cfont-size%3D10px%7Cfont-style%3D2&ref_114=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D518.328125x12&ref_115_meta=font-family%3DTahoma%7Cfont-size%3D10px%7Cfont-style%3D3&ref_115=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D596.328125x12&ref_116_meta=font-family%3DTahoma%7Cfont-size%3D11px%7Cfont-style%3D0&ref_116=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D570.171875x13&ref_117_meta=font-family%3DTahoma%7Cfont-size%3D11px%7Cfont-style%3D1&ref_117=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D655.96875x13&ref_118_meta=font-family%3DTahoma%7Cfont-size%3D11px%7Cfont-style%3D2&ref_118=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D570.171875x13&ref_119_meta=font-family%3DTahoma%7Cfont-size%3D11px%7Cfont-style%3D3&ref_119=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D655.96875x13&ref_120_meta=font-family%3DTahoma%7Cfont-size%3D12px%7Cfont-style%3D0&ref_120=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D622x14&ref_121_meta=font-family%3DTahoma%7Cfont-size%3D12px%7Cfont-style%3D1&ref_121=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D715.59375x14&ref_122_meta=font-family%3DTahoma%7Cfont-size%3D12px%7Cfont-style%3D2&ref_122=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D622x14&ref_123_meta=font-family%3DTahoma%7Cfont-size%3D12px%7Cfont-style%3D3&ref_123=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D715.59375x14&ref_124_meta=font-family%3DTahoma%7Cfont-size%3D13px%7Cfont-style%3D0&ref_124=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D673.828125x16&ref_125_meta=font-family%3DTahoma%7Cfont-size%3D13px%7Cfont-style%3D1&ref_125=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D775.234375x16&ref_126_meta=font-family%3DTahoma%7Cfont-size%3D13px%7Cfont-style%3D2&ref_126=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D673.828125x16&ref_127_meta=font-family%3DTahoma%7Cfont-size%3D13px%7Cfont-style%3D3&ref_127=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D775.234375x16&ref_128_meta=font-family%3DTahoma%7Cfont-size%3D14px%7Cfont-style%3D0&ref_128=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D725.65625x17&ref_129_meta=font-family%3DTahoma%7Cfont-size%3D14px%7Cfont-style%3D1&ref_129=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D834.859375x17&ref_130_meta=font-family%3DTahoma%7Cfont-size%3D14px%7Cfont-style%3D2&ref_130=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D725.65625x17&ref_131_meta=font-family%3DTahoma%7Cfont-size%3D14px%7Cfont-style%3D3&ref_131=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D834.859375x17&ref_132_meta=font-family%3DTahoma%7Cfont-size%3D15px%7Cfont-style%3D0&ref_132=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D777.5x18&ref_133_meta=font-family%3DTahoma%7Cfont-size%3D15px%7Cfont-style%3D1&ref_133=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D894.5x18&ref_134_meta=font-family%3DTahoma%7Cfont-size%3D15px%7Cfont-style%3D2&ref_134=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D777.5x18&ref_135_meta=font-family%3DTahoma%7Cfont-size%3D15px%7Cfont-style%3D3&ref_135=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D894.5x18&ref_136_meta=font-family%3DTahoma%7Cfont-size%3D16px%7Cfont-style%3D0&ref_136=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D829.328125x19&ref_137_meta=font-family%3DTahoma%7Cfont-size%3D16px%7Cfont-style%3D1&ref_137=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D954.125x19&ref_138_meta=font-family%3DTahoma%7Cfont-size%3D16px%7Cfont-style%3D2&ref_138=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D829.328125x19&ref_139_meta=font-family%3DTahoma%7Cfont-size%3D16px%7Cfont-style%3D3&ref_139=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D954.125x19&ref_140_meta=font-family%3DTahoma%7Cfont-size%3D17px%7Cfont-style%3D0&ref_140=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D881.15625x21&ref_141_meta=font-family%3DTahoma%7Cfont-size%3D17px%7Cfont-style%3D1&ref_141=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1013.765625x21&ref_142_meta=font-family%3DTahoma%7Cfont-size%3D17px%7Cfont-style%3D2&ref_142=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D881.15625x21&ref_143_meta=font-family%3DTahoma%7Cfont-size%3D17px%7Cfont-style%3D3&ref_143=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1013.765625x21&ref_144_meta=font-family%3DTahoma%7Cfont-size%3D18px%7Cfont-style%3D0&ref_144=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D933x22&ref_145_meta=font-family%3DTahoma%7Cfont-size%3D18px%7Cfont-style%3D1&ref_145=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1073.390625x22&ref_146_meta=font-family%3DTahoma%7Cfont-size%3D18px%7Cfont-style%3D2&ref_146=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D933x22&ref_147_meta=font-family%3DTahoma%7Cfont-size%3D18px%7Cfont-style%3D3&ref_147=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1073.390625x22&ref_148_meta=font-family%3DTahoma%7Cfont-size%3D19px%7Cfont-style%3D0&ref_148=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D984.828125x23&ref_149_meta=font-family%3DTahoma%7Cfont-size%3D19px%7Cfont-style%3D1&ref_149=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1133.03125x23&ref_150_meta=font-family%3DTahoma%7Cfont-size%3D19px%7Cfont-style%3D2&ref_150=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D984.828125x23&ref_151_meta=font-family%3DTahoma%7Cfont-size%3D19px%7Cfont-style%3D3&ref_151=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1133.03125x23&ref_152_meta=font-family%3DTahoma%7Cfont-size%3D20px%7Cfont-style%3D0&ref_152=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1036.65625x24&ref_153_meta=font-family%3DTahoma%7Cfont-size%3D20px%7Cfont-style%3D1&ref_153=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1192.65625x24&ref_154_meta=font-family%3DTahoma%7Cfont-size%3D20px%7Cfont-style%3D2&ref_154=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1036.65625x24&ref_155_meta=font-family%3DTahoma%7Cfont-size%3D20px%7Cfont-style%3D3&ref_155=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1192.65625x24&ref_156_meta=font-family%3DArial%7Cfont-size%3D8px%7Cfont-style%3D0&ref_156=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D421.578125x9&ref_157_meta=font-family%3DArial%7Cfont-size%3D8px%7Cfont-style%3D1&ref_157=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D453x9&ref_158_meta=font-family%3DArial%7Cfont-size%3D8px%7Cfont-style%3D2&ref_158=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D421.71875x9&ref_159_meta=font-family%3DArial%7Cfont-size%3D8px%7Cfont-style%3D3&ref_159=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D453.15625x9&ref_160_meta=font-family%3DArial%7Cfont-size%3D9px%7Cfont-style%3D0&ref_160=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D474.28125x10&ref_161_meta=font-family%3DArial%7Cfont-size%3D9px%7Cfont-style%3D1&ref_161=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D509.625x10&ref_162_meta=font-family%3DArial%7Cfont-size%3D9px%7Cfont-style%3D2&ref_162=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D474.4375x10&ref_163_meta=font-family%3DArial%7Cfont-size%3D9px%7Cfont-style%3D3&ref_163=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D509.796875x10&ref_164_meta=font-family%3DArial%7Cfont-size%3D10px%7Cfont-style%3D0&ref_164=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D526.96875x11&ref_165_meta=font-family%3DArial%7Cfont-size%3D10px%7Cfont-style%3D1&ref_165=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D566.25x11&ref_166_meta=font-family%3DArial%7Cfont-size%3D10px%7Cfont-style%3D2&ref_166=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D527.15625x11&ref_167_meta=font-family%3DArial%7Cfont-size%3D10px%7Cfont-style%3D3&ref_167=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D566.4375x11&ref_168_meta=font-family%3DArial%7Cfont-size%3D11px%7Cfont-style%3D0&ref_168=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D579.671875x12&ref_169_meta=font-family%3DArial%7Cfont-size%3D11px%7Cfont-style%3D1&ref_169=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D622.875x12&ref_170_meta=font-family%3DArial%7Cfont-size%3D11px%7Cfont-style%3D2&ref_170=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D579.859375x12&ref_171_meta=font-family%3DArial%7Cfont-size%3D11px%7Cfont-style%3D3&ref_171=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D623.078125x12&ref_172_meta=font-family%3DArial%7Cfont-size%3D12px%7Cfont-style%3D0&ref_172=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D632.359375x14&ref_173_meta=font-family%3DArial%7Cfont-size%3D12px%7Cfont-style%3D1&ref_173=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D679.5x14&ref_174_meta=font-family%3DArial%7Cfont-size%3D12px%7Cfont-style%3D2&ref_174=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D632.578125x14&ref_175_meta=font-family%3DArial%7Cfont-size%3D12px%7Cfont-style%3D3&ref_175=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D679.71875x14&ref_176_meta=font-family%3DArial%7Cfont-size%3D13px%7Cfont-style%3D0&ref_176=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D685.0625x15&ref_177_meta=font-family%3DArial%7Cfont-size%3D13px%7Cfont-style%3D1&ref_177=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D736.125x15&ref_178_meta=font-family%3DArial%7Cfont-size%3D13px%7Cfont-style%3D2&ref_178=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D685.296875x15&ref_179_meta=font-family%3DArial%7Cfont-size%3D13px%7Cfont-style%3D3&ref_179=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D736.375x15&ref_180_meta=font-family%3DArial%7Cfont-size%3D14px%7Cfont-style%3D0&ref_180=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D737.75x16&ref_181_meta=font-family%3DArial%7Cfont-size%3D14px%7Cfont-style%3D1&ref_181=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D792.75x16&ref_182_meta=font-family%3DArial%7Cfont-size%3D14px%7Cfont-style%3D2&ref_182=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D738.015625x16&ref_183_meta=font-family%3DArial%7Cfont-size%3D14px%7Cfont-style%3D3&ref_183=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D793.015625x16&ref_184_meta=font-family%3DArial%7Cfont-size%3D15px%7Cfont-style%3D0&ref_184=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D790.453125x17&ref_185_meta=font-family%3DArial%7Cfont-size%3D15px%7Cfont-style%3D1&ref_185=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D849.375x17&ref_186_meta=font-family%3DArial%7Cfont-size%3D15px%7Cfont-style%3D2&ref_186=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D790.71875x17&ref_187_meta=font-family%3DArial%7Cfont-size%3D15px%7Cfont-style%3D3&ref_187=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D849.65625x17&ref_188_meta=font-family%3DArial%7Cfont-size%3D16px%7Cfont-style%3D0&ref_188=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D843.140625x17&ref_189_meta=font-family%3DArial%7Cfont-size%3D16px%7Cfont-style%3D1&ref_189=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D906x17&ref_190_meta=font-family%3DArial%7Cfont-size%3D16px%7Cfont-style%3D2&ref_190=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D843.4375x17&ref_191_meta=font-family%3DArial%7Cfont-size%3D16px%7Cfont-style%3D3&ref_191=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D906.296875x17&ref_192_meta=font-family%3DArial%7Cfont-size%3D17px%7Cfont-style%3D0&ref_192=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D895.84375x19&ref_193_meta=font-family%3DArial%7Cfont-size%3D17px%7Cfont-style%3D1&ref_193=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D962.625x19&ref_194_meta=font-family%3DArial%7Cfont-size%3D17px%7Cfont-style%3D2&ref_194=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D896.15625x19&ref_195_meta=font-family%3DArial%7Cfont-size%3D17px%7Cfont-style%3D3&ref_195=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D962.9375x19&ref_196_meta=font-family%3DArial%7Cfont-size%3D18px%7Cfont-style%3D0&ref_196=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D948.546875x20&ref_197_meta=font-family%3DArial%7Cfont-size%3D18px%7Cfont-style%3D1&ref_197=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1019.25x20&ref_198_meta=font-family%3DArial%7Cfont-size%3D18px%7Cfont-style%3D2&ref_198=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D948.859375x20&ref_199_meta=font-family%3DArial%7Cfont-size%3D18px%7Cfont-style%3D3&ref_199=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1019.578125x20&ref_200_meta=font-family%3DArial%7Cfont-size%3D19px%7Cfont-style%3D0&ref_200=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1001.234375x21&ref_201_meta=font-family%3DArial%7Cfont-size%3D19px%7Cfont-style%3D1&ref_201=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1075.875x21&ref_202_meta=font-family%3DArial%7Cfont-size%3D19px%7Cfont-style%3D2&ref_202=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1001.578125x21&ref_203_meta=font-family%3DArial%7Cfont-size%3D19px%7Cfont-style%3D3&ref_203=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1076.21875x21&ref_204_meta=font-family%3DArial%7Cfont-size%3D20px%7Cfont-style%3D0&ref_204=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1053.9375x22&ref_205_meta=font-family%3DArial%7Cfont-size%3D20px%7Cfont-style%3D1&ref_205=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1132.5x22&ref_206_meta=font-family%3DArial%7Cfont-size%3D20px%7Cfont-style%3D2&ref_206=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1054.296875x22&ref_207_meta=font-family%3DArial%7Cfont-size%3D20px%7Cfont-style%3D3&ref_207=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1132.875x22&ref_208_meta=font-family%3Dsans-serif%7Cfont-size%3D8px%7Cfont-style%3D0&ref_208=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D421.578125x9&ref_209_meta=font-family%3Dsans-serif%7Cfont-size%3D8px%7Cfont-style%3D1&ref_209=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D453x9&ref_210_meta=font-family%3Dsans-serif%7Cfont-size%3D8px%7Cfont-style%3D2&ref_210=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D421.71875x9&ref_211_meta=font-family%3Dsans-serif%7Cfont-size%3D8px%7Cfont-style%3D3&ref_211=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D453.15625x9&ref_212_meta=font-family%3Dsans-serif%7Cfont-size%3D9px%7Cfont-style%3D0&ref_212=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D474.28125x10&ref_213_meta=font-family%3Dsans-serif%7Cfont-size%3D9px%7Cfont-style%3D1&ref_213=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D509.625x10&ref_214_meta=font-family%3Dsans-serif%7Cfont-size%3D9px%7Cfont-style%3D2&ref_214=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D474.4375x10&ref_215_meta=font-family%3Dsans-serif%7Cfont-size%3D9px%7Cfont-style%3D3&ref_215=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D509.796875x10&ref_216_meta=font-family%3Dsans-serif%7Cfont-size%3D10px%7Cfont-style%3D0&ref_216=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D526.96875x11&ref_217_meta=font-family%3Dsans-serif%7Cfont-size%3D10px%7Cfont-style%3D1&ref_217=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D566.25x11&ref_218_meta=font-family%3Dsans-serif%7Cfont-size%3D10px%7Cfont-style%3D2&ref_218=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D527.15625x11&ref_219_meta=font-family%3Dsans-serif%7Cfont-size%3D10px%7Cfont-style%3D3&ref_219=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D566.4375x11&ref_220_meta=font-family%3Dsans-serif%7Cfont-size%3D11px%7Cfont-style%3D0&ref_220=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D579.671875x12&ref_221_meta=font-family%3Dsans-serif%7Cfont-size%3D11px%7Cfont-style%3D1&ref_221=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D622.875x12&ref_222_meta=font-family%3Dsans-serif%7Cfont-size%3D11px%7Cfont-style%3D2&ref_222=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D579.859375x12&ref_223_meta=font-family%3Dsans-serif%7Cfont-size%3D11px%7Cfont-style%3D3&ref_223=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D623.078125x12&ref_224_meta=font-family%3Dsans-serif%7Cfont-size%3D12px%7Cfont-style%3D0&ref_224=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D632.359375x14&ref_225_meta=font-family%3Dsans-serif%7Cfont-size%3D12px%7Cfont-style%3D1&ref_225=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D679.5x14&ref_226_meta=font-family%3Dsans-serif%7Cfont-size%3D12px%7Cfont-style%3D2&ref_226=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D632.578125x14&ref_227_meta=font-family%3Dsans-serif%7Cfont-size%3D12px%7Cfont-style%3D3&ref_227=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D679.71875x14&ref_228_meta=font-family%3Dsans-serif%7Cfont-size%3D13px%7Cfont-style%3D0&ref_228=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D685.0625x15&ref_229_meta=font-family%3Dsans-serif%7Cfont-size%3D13px%7Cfont-style%3D1&ref_229=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D736.125x15&ref_230_meta=font-family%3Dsans-serif%7Cfont-size%3D13px%7Cfont-style%3D2&ref_230=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D685.296875x15&ref_231_meta=font-family%3Dsans-serif%7Cfont-size%3D13px%7Cfont-style%3D3&ref_231=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D736.375x15&ref_232_meta=font-family%3Dsans-serif%7Cfont-size%3D14px%7Cfont-style%3D0&ref_232=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D737.75x16&ref_233_meta=font-family%3Dsans-serif%7Cfont-size%3D14px%7Cfont-style%3D1&ref_233=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D792.75x16&ref_234_meta=font-family%3Dsans-serif%7Cfont-size%3D14px%7Cfont-style%3D2&ref_234=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D738.015625x16&ref_235_meta=font-family%3Dsans-serif%7Cfont-size%3D14px%7Cfont-style%3D3&ref_235=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D793.015625x16&ref_236_meta=font-family%3Dsans-serif%7Cfont-size%3D15px%7Cfont-style%3D0&ref_236=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D790.453125x17&ref_237_meta=font-family%3Dsans-serif%7Cfont-size%3D15px%7Cfont-style%3D1&ref_237=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D849.375x17&ref_238_meta=font-family%3Dsans-serif%7Cfont-size%3D15px%7Cfont-style%3D2&ref_238=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D790.71875x17&ref_239_meta=font-family%3Dsans-serif%7Cfont-size%3D15px%7Cfont-style%3D3&ref_239=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D849.65625x17&ref_240_meta=font-family%3Dsans-serif%7Cfont-size%3D16px%7Cfont-style%3D0&ref_240=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D843.140625x17&ref_241_meta=font-family%3Dsans-serif%7Cfont-size%3D16px%7Cfont-style%3D1&ref_241=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D906x17&ref_242_meta=font-family%3Dsans-serif%7Cfont-size%3D16px%7Cfont-style%3D2&ref_242=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D843.4375x17&ref_243_meta=font-family%3Dsans-serif%7Cfont-size%3D16px%7Cfont-style%3D3&ref_243=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D906.296875x17&ref_244_meta=font-family%3Dsans-serif%7Cfont-size%3D17px%7Cfont-style%3D0&ref_244=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D895.84375x19&ref_245_meta=font-family%3Dsans-serif%7Cfont-size%3D17px%7Cfont-style%3D1&ref_245=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D962.625x19&ref_246_meta=font-family%3Dsans-serif%7Cfont-size%3D17px%7Cfont-style%3D2&ref_246=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D896.15625x19&ref_247_meta=font-family%3Dsans-serif%7Cfont-size%3D17px%7Cfont-style%3D3&ref_247=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D962.9375x19&ref_248_meta=font-family%3Dsans-serif%7Cfont-size%3D18px%7Cfont-style%3D0&ref_248=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D948.546875x20&ref_249_meta=font-family%3Dsans-serif%7Cfont-size%3D18px%7Cfont-style%3D1&ref_249=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1019.25x20&ref_250_meta=font-family%3Dsans-serif%7Cfont-size%3D18px%7Cfont-style%3D2&ref_250=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D948.859375x20&ref_251_meta=font-family%3Dsans-serif%7Cfont-size%3D18px%7Cfont-style%3D3&ref_251=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1019.578125x20&ref_252_meta=font-family%3Dsans-serif%7Cfont-size%3D19px%7Cfont-style%3D0&ref_252=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1001.234375x21&ref_253_meta=font-family%3Dsans-serif%7Cfont-size%3D19px%7Cfont-style%3D1&ref_253=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1075.875x21&ref_254_meta=font-family%3Dsans-serif%7Cfont-size%3D19px%7Cfont-style%3D2&ref_254=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1001.578125x21&ref_255_meta=font-family%3Dsans-serif%7Cfont-size%3D19px%7Cfont-style%3D3&ref_255=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1076.21875x21&ref_256_meta=font-family%3Dsans-serif%7Cfont-size%3D20px%7Cfont-style%3D0&ref_256=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1053.9375x22&ref_257_meta=font-family%3Dsans-serif%7Cfont-size%3D20px%7Cfont-style%3D1&ref_257=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1132.5x22&ref_258_meta=font-family%3Dsans-serif%7Cfont-size%3D20px%7Cfont-style%3D2&ref_258=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1054.296875x22&ref_259_meta=font-family%3Dsans-serif%7Cfont-size%3D20px%7Cfont-style%3D3&ref_259=Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1132.875x22&userid=WIH1785791371997&decoded=true",
            "params": [
              {
                "name": "location",
                "value": "https%3A%2F%2Fekat.festool.de%2Fekat%2Fapp"
              },
              {
                "name": "WebGL",
                "value": "true"
              },
              {
                "name": "cookies",
                "value": "true"
              },
              {
                "name": "tabid",
                "value": "1787216950336_0.48841508521386534"
              },
              {
                "name": "javascript",
                "value": "true"
              },
              {
                "name": "availablefonts",
                "value": "%22Segoe+UI%22%2CVerdana%2CTahoma%2CArial%2Csans-serif"
              },
              {
                "name": "screensize",
                "value": "1388x1140"
              },
              {
                "name": "dpi",
                "value": "192"
              },
              {
                "name": "zoom",
                "value": "1"
              },
              {
                "name": "displayorientation",
                "value": "90"
              },
              {
                "name": "touch",
                "value": "true"
              },
              {
                "name": "pointer",
                "value": "false"
              },
              {
                "name": "mspointer",
                "value": "false"
              },
              {
                "name": "maxtouchpoints",
                "value": "0"
              },
              {
                "name": "browserinfo",
                "value": ""
              },
              {
                "name": "canvas",
                "value": "true"
              },
              {
                "name": "video",
                "value": "true"
              },
              {
                "name": "hiddenScrollbar",
                "value": "true"
              },
              {
                "name": "perf",
                "value": "true"
              },
              {
                "name": "legacy",
                "value": "false"
              },
              {
                "name": "scrollbarwidth",
                "value": "0"
              },
              {
                "name": "timeZoneOffset",
                "value": "-60"
              },
              {
                "name": "ref_0_meta",
                "value": "font-family%3D%22Segoe+UI%22%7Cfont-size%3D8px%7Cfont-style%3D0"
              },
              {
                "name": "ref_0",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D415.828125x11"
              },
              {
                "name": "ref_1_meta",
                "value": "font-family%3D%22Segoe+UI%22%7Cfont-size%3D8px%7Cfont-style%3D1"
              },
              {
                "name": "ref_1",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D444.484375x11"
              },
              {
                "name": "ref_2_meta",
                "value": "font-family%3D%22Segoe+UI%22%7Cfont-size%3D8px%7Cfont-style%3D2"
              },
              {
                "name": "ref_2",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D406x11"
              },
              {
                "name": "ref_3_meta",
                "value": "font-family%3D%22Segoe+UI%22%7Cfont-size%3D8px%7Cfont-style%3D3"
              },
              {
                "name": "ref_3",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D442.09375x11"
              },
              {
                "name": "ref_4_meta",
                "value": "font-family%3D%22Segoe+UI%22%7Cfont-size%3D9px%7Cfont-style%3D0"
              },
              {
                "name": "ref_4",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D467.796875x12"
              },
              {
                "name": "ref_5_meta",
                "value": "font-family%3D%22Segoe+UI%22%7Cfont-size%3D9px%7Cfont-style%3D1"
              },
              {
                "name": "ref_5",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D500.046875x12"
              },
              {
                "name": "ref_6_meta",
                "value": "font-family%3D%22Segoe+UI%22%7Cfont-size%3D9px%7Cfont-style%3D2"
              },
              {
                "name": "ref_6",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D456.75x12"
              },
              {
                "name": "ref_7_meta",
                "value": "font-family%3D%22Segoe+UI%22%7Cfont-size%3D9px%7Cfont-style%3D3"
              },
              {
                "name": "ref_7",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D497.34375x12"
              },
              {
                "name": "ref_8_meta",
                "value": "font-family%3D%22Segoe+UI%22%7Cfont-size%3D10px%7Cfont-style%3D0"
              },
              {
                "name": "ref_8",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D519.78125x14"
              },
              {
                "name": "ref_9_meta",
                "value": "font-family%3D%22Segoe+UI%22%7Cfont-size%3D10px%7Cfont-style%3D1"
              },
              {
                "name": "ref_9",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D555.609375x14"
              },
              {
                "name": "ref_10_meta",
                "value": "font-family%3D%22Segoe+UI%22%7Cfont-size%3D10px%7Cfont-style%3D2"
              },
              {
                "name": "ref_10",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D507.5x14"
              },
              {
                "name": "ref_11_meta",
                "value": "font-family%3D%22Segoe+UI%22%7Cfont-size%3D10px%7Cfont-style%3D3"
              },
              {
                "name": "ref_11",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D552.609375x14"
              },
              {
                "name": "ref_12_meta",
                "value": "font-family%3D%22Segoe+UI%22%7Cfont-size%3D11px%7Cfont-style%3D0"
              },
              {
                "name": "ref_12",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D571.75x15"
              },
              {
                "name": "ref_13_meta",
                "value": "font-family%3D%22Segoe+UI%22%7Cfont-size%3D11px%7Cfont-style%3D1"
              },
              {
                "name": "ref_13",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D611.171875x15"
              },
              {
                "name": "ref_14_meta",
                "value": "font-family%3D%22Segoe+UI%22%7Cfont-size%3D11px%7Cfont-style%3D2"
              },
              {
                "name": "ref_14",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D558.25x15"
              },
              {
                "name": "ref_15_meta",
                "value": "font-family%3D%22Segoe+UI%22%7Cfont-size%3D11px%7Cfont-style%3D3"
              },
              {
                "name": "ref_15",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D607.875x15"
              },
              {
                "name": "ref_16_meta",
                "value": "font-family%3D%22Segoe+UI%22%7Cfont-size%3D12px%7Cfont-style%3D0"
              },
              {
                "name": "ref_16",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D623.734375x16"
              },
              {
                "name": "ref_17_meta",
                "value": "font-family%3D%22Segoe+UI%22%7Cfont-size%3D12px%7Cfont-style%3D1"
              },
              {
                "name": "ref_17",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D666.734375x16"
              },
              {
                "name": "ref_18_meta",
                "value": "font-family%3D%22Segoe+UI%22%7Cfont-size%3D12px%7Cfont-style%3D2"
              },
              {
                "name": "ref_18",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D609x16"
              },
              {
                "name": "ref_19_meta",
                "value": "font-family%3D%22Segoe+UI%22%7Cfont-size%3D12px%7Cfont-style%3D3"
              },
              {
                "name": "ref_19",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D663.125x16"
              },
              {
                "name": "ref_20_meta",
                "value": "font-family%3D%22Segoe+UI%22%7Cfont-size%3D13px%7Cfont-style%3D0"
              },
              {
                "name": "ref_20",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D675.703125x17"
              },
              {
                "name": "ref_21_meta",
                "value": "font-family%3D%22Segoe+UI%22%7Cfont-size%3D13px%7Cfont-style%3D1"
              },
              {
                "name": "ref_21",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D722.28125x17"
              },
              {
                "name": "ref_22_meta",
                "value": "font-family%3D%22Segoe+UI%22%7Cfont-size%3D13px%7Cfont-style%3D2"
              },
              {
                "name": "ref_22",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D659.75x17"
              },
              {
                "name": "ref_23_meta",
                "value": "font-family%3D%22Segoe+UI%22%7Cfont-size%3D13px%7Cfont-style%3D3"
              },
              {
                "name": "ref_23",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D718.390625x17"
              },
              {
                "name": "ref_24_meta",
                "value": "font-family%3D%22Segoe+UI%22%7Cfont-size%3D14px%7Cfont-style%3D0"
              },
              {
                "name": "ref_24",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D727.6875x19"
              },
              {
                "name": "ref_25_meta",
                "value": "font-family%3D%22Segoe+UI%22%7Cfont-size%3D14px%7Cfont-style%3D1"
              },
              {
                "name": "ref_25",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D777.84375x19"
              },
              {
                "name": "ref_26_meta",
                "value": "font-family%3D%22Segoe+UI%22%7Cfont-size%3D14px%7Cfont-style%3D2"
              },
              {
                "name": "ref_26",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D710.5x19"
              },
              {
                "name": "ref_27_meta",
                "value": "font-family%3D%22Segoe+UI%22%7Cfont-size%3D14px%7Cfont-style%3D3"
              },
              {
                "name": "ref_27",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D773.65625x19"
              },
              {
                "name": "ref_28_meta",
                "value": "font-family%3D%22Segoe+UI%22%7Cfont-size%3D15px%7Cfont-style%3D0"
              },
              {
                "name": "ref_28",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D779.65625x20"
              },
              {
                "name": "ref_29_meta",
                "value": "font-family%3D%22Segoe+UI%22%7Cfont-size%3D15px%7Cfont-style%3D1"
              },
              {
                "name": "ref_29",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D833.40625x20"
              },
              {
                "name": "ref_30_meta",
                "value": "font-family%3D%22Segoe+UI%22%7Cfont-size%3D15px%7Cfont-style%3D2"
              },
              {
                "name": "ref_30",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D761.25x20"
              },
              {
                "name": "ref_31_meta",
                "value": "font-family%3D%22Segoe+UI%22%7Cfont-size%3D15px%7Cfont-style%3D3"
              },
              {
                "name": "ref_31",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D828.90625x20"
              },
              {
                "name": "ref_32_meta",
                "value": "font-family%3D%22Segoe+UI%22%7Cfont-size%3D16px%7Cfont-style%3D0"
              },
              {
                "name": "ref_32",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D831.640625x21"
              },
              {
                "name": "ref_33_meta",
                "value": "font-family%3D%22Segoe+UI%22%7Cfont-size%3D16px%7Cfont-style%3D1"
              },
              {
                "name": "ref_33",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D888.96875x21"
              },
              {
                "name": "ref_34_meta",
                "value": "font-family%3D%22Segoe+UI%22%7Cfont-size%3D16px%7Cfont-style%3D2"
              },
              {
                "name": "ref_34",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D811.984375x21"
              },
              {
                "name": "ref_35_meta",
                "value": "font-family%3D%22Segoe+UI%22%7Cfont-size%3D16px%7Cfont-style%3D3"
              },
              {
                "name": "ref_35",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D884.171875x21"
              },
              {
                "name": "ref_36_meta",
                "value": "font-family%3D%22Segoe+UI%22%7Cfont-size%3D17px%7Cfont-style%3D0"
              },
              {
                "name": "ref_36",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D883.625x22"
              },
              {
                "name": "ref_37_meta",
                "value": "font-family%3D%22Segoe+UI%22%7Cfont-size%3D17px%7Cfont-style%3D1"
              },
              {
                "name": "ref_37",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D944.53125x22"
              },
              {
                "name": "ref_38_meta",
                "value": "font-family%3D%22Segoe+UI%22%7Cfont-size%3D17px%7Cfont-style%3D2"
              },
              {
                "name": "ref_38",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D862.734375x22"
              },
              {
                "name": "ref_39_meta",
                "value": "font-family%3D%22Segoe+UI%22%7Cfont-size%3D17px%7Cfont-style%3D3"
              },
              {
                "name": "ref_39",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D939.4375x22"
              },
              {
                "name": "ref_40_meta",
                "value": "font-family%3D%22Segoe+UI%22%7Cfont-size%3D18px%7Cfont-style%3D0"
              },
              {
                "name": "ref_40",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D935.59375x24"
              },
              {
                "name": "ref_41_meta",
                "value": "font-family%3D%22Segoe+UI%22%7Cfont-size%3D18px%7Cfont-style%3D1"
              },
              {
                "name": "ref_41",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1000.09375x24"
              },
              {
                "name": "ref_42_meta",
                "value": "font-family%3D%22Segoe+UI%22%7Cfont-size%3D18px%7Cfont-style%3D2"
              },
              {
                "name": "ref_42",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D913.484375x24"
              },
              {
                "name": "ref_43_meta",
                "value": "font-family%3D%22Segoe+UI%22%7Cfont-size%3D18px%7Cfont-style%3D3"
              },
              {
                "name": "ref_43",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D994.6875x24"
              },
              {
                "name": "ref_44_meta",
                "value": "font-family%3D%22Segoe+UI%22%7Cfont-size%3D19px%7Cfont-style%3D0"
              },
              {
                "name": "ref_44",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D987.578125x26"
              },
              {
                "name": "ref_45_meta",
                "value": "font-family%3D%22Segoe+UI%22%7Cfont-size%3D19px%7Cfont-style%3D1"
              },
              {
                "name": "ref_45",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1055.65625x26"
              },
              {
                "name": "ref_46_meta",
                "value": "font-family%3D%22Segoe+UI%22%7Cfont-size%3D19px%7Cfont-style%3D2"
              },
              {
                "name": "ref_46",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D964.234375x26"
              },
              {
                "name": "ref_47_meta",
                "value": "font-family%3D%22Segoe+UI%22%7Cfont-size%3D19px%7Cfont-style%3D3"
              },
              {
                "name": "ref_47",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1049.953125x26"
              },
              {
                "name": "ref_48_meta",
                "value": "font-family%3D%22Segoe+UI%22%7Cfont-size%3D20px%7Cfont-style%3D0"
              },
              {
                "name": "ref_48",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1039.546875x27"
              },
              {
                "name": "ref_49_meta",
                "value": "font-family%3D%22Segoe+UI%22%7Cfont-size%3D20px%7Cfont-style%3D1"
              },
              {
                "name": "ref_49",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1111.203125x27"
              },
              {
                "name": "ref_50_meta",
                "value": "font-family%3D%22Segoe+UI%22%7Cfont-size%3D20px%7Cfont-style%3D2"
              },
              {
                "name": "ref_50",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1014.984375x27"
              },
              {
                "name": "ref_51_meta",
                "value": "font-family%3D%22Segoe+UI%22%7Cfont-size%3D20px%7Cfont-style%3D3"
              },
              {
                "name": "ref_51",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1105.21875x27"
              },
              {
                "name": "ref_52_meta",
                "value": "font-family%3DVerdana%7Cfont-size%3D8px%7Cfont-style%3D0"
              },
              {
                "name": "ref_52",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D474.515625x10"
              },
              {
                "name": "ref_53_meta",
                "value": "font-family%3DVerdana%7Cfont-size%3D8px%7Cfont-style%3D1"
              },
              {
                "name": "ref_53",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D534.015625x10"
              },
              {
                "name": "ref_54_meta",
                "value": "font-family%3DVerdana%7Cfont-size%3D8px%7Cfont-style%3D2"
              },
              {
                "name": "ref_54",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D475.796875x10"
              },
              {
                "name": "ref_55_meta",
                "value": "font-family%3DVerdana%7Cfont-size%3D8px%7Cfont-style%3D3"
              },
              {
                "name": "ref_55",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D533.984375x10"
              },
              {
                "name": "ref_56_meta",
                "value": "font-family%3DVerdana%7Cfont-size%3D9px%7Cfont-style%3D0"
              },
              {
                "name": "ref_56",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D533.828125x11"
              },
              {
                "name": "ref_57_meta",
                "value": "font-family%3DVerdana%7Cfont-size%3D9px%7Cfont-style%3D1"
              },
              {
                "name": "ref_57",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D600.765625x11"
              },
              {
                "name": "ref_58_meta",
                "value": "font-family%3DVerdana%7Cfont-size%3D9px%7Cfont-style%3D2"
              },
              {
                "name": "ref_58",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D535.265625x11"
              },
              {
                "name": "ref_59_meta",
                "value": "font-family%3DVerdana%7Cfont-size%3D9px%7Cfont-style%3D3"
              },
              {
                "name": "ref_59",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D600.734375x11"
              },
              {
                "name": "ref_60_meta",
                "value": "font-family%3DVerdana%7Cfont-size%3D10px%7Cfont-style%3D0"
              },
              {
                "name": "ref_60",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D593.140625x12"
              },
              {
                "name": "ref_61_meta",
                "value": "font-family%3DVerdana%7Cfont-size%3D10px%7Cfont-style%3D1"
              },
              {
                "name": "ref_61",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D667.515625x12"
              },
              {
                "name": "ref_62_meta",
                "value": "font-family%3DVerdana%7Cfont-size%3D10px%7Cfont-style%3D2"
              },
              {
                "name": "ref_62",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D594.75x12"
              },
              {
                "name": "ref_63_meta",
                "value": "font-family%3DVerdana%7Cfont-size%3D10px%7Cfont-style%3D3"
              },
              {
                "name": "ref_63",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D667.484375x12"
              },
              {
                "name": "ref_64_meta",
                "value": "font-family%3DVerdana%7Cfont-size%3D11px%7Cfont-style%3D0"
              },
              {
                "name": "ref_64",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D652.46875x13"
              },
              {
                "name": "ref_65_meta",
                "value": "font-family%3DVerdana%7Cfont-size%3D11px%7Cfont-style%3D1"
              },
              {
                "name": "ref_65",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D734.265625x13"
              },
              {
                "name": "ref_66_meta",
                "value": "font-family%3DVerdana%7Cfont-size%3D11px%7Cfont-style%3D2"
              },
              {
                "name": "ref_66",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D654.21875x13"
              },
              {
                "name": "ref_67_meta",
                "value": "font-family%3DVerdana%7Cfont-size%3D11px%7Cfont-style%3D3"
              },
              {
                "name": "ref_67",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D734.234375x13"
              },
              {
                "name": "ref_68_meta",
                "value": "font-family%3DVerdana%7Cfont-size%3D12px%7Cfont-style%3D0"
              },
              {
                "name": "ref_68",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D711.78125x15"
              },
              {
                "name": "ref_69_meta",
                "value": "font-family%3DVerdana%7Cfont-size%3D12px%7Cfont-style%3D1"
              },
              {
                "name": "ref_69",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D801.015625x15"
              },
              {
                "name": "ref_70_meta",
                "value": "font-family%3DVerdana%7Cfont-size%3D12px%7Cfont-style%3D2"
              },
              {
                "name": "ref_70",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D713.6875x15"
              },
              {
                "name": "ref_71_meta",
                "value": "font-family%3DVerdana%7Cfont-size%3D12px%7Cfont-style%3D3"
              },
              {
                "name": "ref_71",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D800.984375x15"
              },
              {
                "name": "ref_72_meta",
                "value": "font-family%3DVerdana%7Cfont-size%3D13px%7Cfont-style%3D0"
              },
              {
                "name": "ref_72",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D771.09375x16"
              },
              {
                "name": "ref_73_meta",
                "value": "font-family%3DVerdana%7Cfont-size%3D13px%7Cfont-style%3D1"
              },
              {
                "name": "ref_73",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D867.765625x16"
              },
              {
                "name": "ref_74_meta",
                "value": "font-family%3DVerdana%7Cfont-size%3D13px%7Cfont-style%3D2"
              },
              {
                "name": "ref_74",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D773.171875x16"
              },
              {
                "name": "ref_75_meta",
                "value": "font-family%3DVerdana%7Cfont-size%3D13px%7Cfont-style%3D3"
              },
              {
                "name": "ref_75",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D867.71875x16"
              },
              {
                "name": "ref_76_meta",
                "value": "font-family%3DVerdana%7Cfont-size%3D14px%7Cfont-style%3D0"
              },
              {
                "name": "ref_76",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D830.40625x17"
              },
              {
                "name": "ref_77_meta",
                "value": "font-family%3DVerdana%7Cfont-size%3D14px%7Cfont-style%3D1"
              },
              {
                "name": "ref_77",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D934.515625x17"
              },
              {
                "name": "ref_78_meta",
                "value": "font-family%3DVerdana%7Cfont-size%3D14px%7Cfont-style%3D2"
              },
              {
                "name": "ref_78",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D832.640625x17"
              },
              {
                "name": "ref_79_meta",
                "value": "font-family%3DVerdana%7Cfont-size%3D14px%7Cfont-style%3D3"
              },
              {
                "name": "ref_79",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D934.46875x17"
              },
              {
                "name": "ref_80_meta",
                "value": "font-family%3DVerdana%7Cfont-size%3D15px%7Cfont-style%3D0"
              },
              {
                "name": "ref_80",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D889.71875x18"
              },
              {
                "name": "ref_81_meta",
                "value": "font-family%3DVerdana%7Cfont-size%3D15px%7Cfont-style%3D1"
              },
              {
                "name": "ref_81",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1001.265625x18"
              },
              {
                "name": "ref_82_meta",
                "value": "font-family%3DVerdana%7Cfont-size%3D15px%7Cfont-style%3D2"
              },
              {
                "name": "ref_82",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D892.109375x18"
              },
              {
                "name": "ref_83_meta",
                "value": "font-family%3DVerdana%7Cfont-size%3D15px%7Cfont-style%3D3"
              },
              {
                "name": "ref_83",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1001.21875x18"
              },
              {
                "name": "ref_84_meta",
                "value": "font-family%3DVerdana%7Cfont-size%3D16px%7Cfont-style%3D0"
              },
              {
                "name": "ref_84",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D949.03125x19"
              },
              {
                "name": "ref_85_meta",
                "value": "font-family%3DVerdana%7Cfont-size%3D16px%7Cfont-style%3D1"
              },
              {
                "name": "ref_85",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1068.015625x19"
              },
              {
                "name": "ref_86_meta",
                "value": "font-family%3DVerdana%7Cfont-size%3D16px%7Cfont-style%3D2"
              },
              {
                "name": "ref_86",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D951.578125x19"
              },
              {
                "name": "ref_87_meta",
                "value": "font-family%3DVerdana%7Cfont-size%3D16px%7Cfont-style%3D3"
              },
              {
                "name": "ref_87",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1067.96875x19"
              },
              {
                "name": "ref_88_meta",
                "value": "font-family%3DVerdana%7Cfont-size%3D17px%7Cfont-style%3D0"
              },
              {
                "name": "ref_88",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1008.34375x21"
              },
              {
                "name": "ref_89_meta",
                "value": "font-family%3DVerdana%7Cfont-size%3D17px%7Cfont-style%3D1"
              },
              {
                "name": "ref_89",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1134.765625x21"
              },
              {
                "name": "ref_90_meta",
                "value": "font-family%3DVerdana%7Cfont-size%3D17px%7Cfont-style%3D2"
              },
              {
                "name": "ref_90",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1011.0625x21"
              },
              {
                "name": "ref_91_meta",
                "value": "font-family%3DVerdana%7Cfont-size%3D17px%7Cfont-style%3D3"
              },
              {
                "name": "ref_91",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1134.71875x21"
              },
              {
                "name": "ref_92_meta",
                "value": "font-family%3DVerdana%7Cfont-size%3D18px%7Cfont-style%3D0"
              },
              {
                "name": "ref_92",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1067.65625x22"
              },
              {
                "name": "ref_93_meta",
                "value": "font-family%3DVerdana%7Cfont-size%3D18px%7Cfont-style%3D1"
              },
              {
                "name": "ref_93",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1201.515625x22"
              },
              {
                "name": "ref_94_meta",
                "value": "font-family%3DVerdana%7Cfont-size%3D18px%7Cfont-style%3D2"
              },
              {
                "name": "ref_94",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1070.53125x22"
              },
              {
                "name": "ref_95_meta",
                "value": "font-family%3DVerdana%7Cfont-size%3D18px%7Cfont-style%3D3"
              },
              {
                "name": "ref_95",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1201.46875x22"
              },
              {
                "name": "ref_96_meta",
                "value": "font-family%3DVerdana%7Cfont-size%3D19px%7Cfont-style%3D0"
              },
              {
                "name": "ref_96",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1126.96875x23"
              },
              {
                "name": "ref_97_meta",
                "value": "font-family%3DVerdana%7Cfont-size%3D19px%7Cfont-style%3D1"
              },
              {
                "name": "ref_97",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1268.265625x23"
              },
              {
                "name": "ref_98_meta",
                "value": "font-family%3DVerdana%7Cfont-size%3D19px%7Cfont-style%3D2"
              },
              {
                "name": "ref_98",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1130x23"
              },
              {
                "name": "ref_99_meta",
                "value": "font-family%3DVerdana%7Cfont-size%3D19px%7Cfont-style%3D3"
              },
              {
                "name": "ref_99",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1268.21875x23"
              },
              {
                "name": "ref_100_meta",
                "value": "font-family%3DVerdana%7Cfont-size%3D20px%7Cfont-style%3D0"
              },
              {
                "name": "ref_100",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1186.28125x24"
              },
              {
                "name": "ref_101_meta",
                "value": "font-family%3DVerdana%7Cfont-size%3D20px%7Cfont-style%3D1"
              },
              {
                "name": "ref_101",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1335.015625x24"
              },
              {
                "name": "ref_102_meta",
                "value": "font-family%3DVerdana%7Cfont-size%3D20px%7Cfont-style%3D2"
              },
              {
                "name": "ref_102",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1189.484375x24"
              },
              {
                "name": "ref_103_meta",
                "value": "font-family%3DVerdana%7Cfont-size%3D20px%7Cfont-style%3D3"
              },
              {
                "name": "ref_103",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1334.953125x24"
              },
              {
                "name": "ref_104_meta",
                "value": "font-family%3DTahoma%7Cfont-size%3D8px%7Cfont-style%3D0"
              },
              {
                "name": "ref_104",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D414.671875x10"
              },
              {
                "name": "ref_105_meta",
                "value": "font-family%3DTahoma%7Cfont-size%3D8px%7Cfont-style%3D1"
              },
              {
                "name": "ref_105",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D477.0625x10"
              },
              {
                "name": "ref_106_meta",
                "value": "font-family%3DTahoma%7Cfont-size%3D8px%7Cfont-style%3D2"
              },
              {
                "name": "ref_106",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D414.671875x10"
              },
              {
                "name": "ref_107_meta",
                "value": "font-family%3DTahoma%7Cfont-size%3D8px%7Cfont-style%3D3"
              },
              {
                "name": "ref_107",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D477.0625x10"
              },
              {
                "name": "ref_108_meta",
                "value": "font-family%3DTahoma%7Cfont-size%3D9px%7Cfont-style%3D0"
              },
              {
                "name": "ref_108",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D466.5x11"
              },
              {
                "name": "ref_109_meta",
                "value": "font-family%3DTahoma%7Cfont-size%3D9px%7Cfont-style%3D1"
              },
              {
                "name": "ref_109",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D536.703125x11"
              },
              {
                "name": "ref_110_meta",
                "value": "font-family%3DTahoma%7Cfont-size%3D9px%7Cfont-style%3D2"
              },
              {
                "name": "ref_110",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D466.5x11"
              },
              {
                "name": "ref_111_meta",
                "value": "font-family%3DTahoma%7Cfont-size%3D9px%7Cfont-style%3D3"
              },
              {
                "name": "ref_111",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D536.703125x11"
              },
              {
                "name": "ref_112_meta",
                "value": "font-family%3DTahoma%7Cfont-size%3D10px%7Cfont-style%3D0"
              },
              {
                "name": "ref_112",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D518.328125x12"
              },
              {
                "name": "ref_113_meta",
                "value": "font-family%3DTahoma%7Cfont-size%3D10px%7Cfont-style%3D1"
              },
              {
                "name": "ref_113",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D596.328125x12"
              },
              {
                "name": "ref_114_meta",
                "value": "font-family%3DTahoma%7Cfont-size%3D10px%7Cfont-style%3D2"
              },
              {
                "name": "ref_114",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D518.328125x12"
              },
              {
                "name": "ref_115_meta",
                "value": "font-family%3DTahoma%7Cfont-size%3D10px%7Cfont-style%3D3"
              },
              {
                "name": "ref_115",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D596.328125x12"
              },
              {
                "name": "ref_116_meta",
                "value": "font-family%3DTahoma%7Cfont-size%3D11px%7Cfont-style%3D0"
              },
              {
                "name": "ref_116",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D570.171875x13"
              },
              {
                "name": "ref_117_meta",
                "value": "font-family%3DTahoma%7Cfont-size%3D11px%7Cfont-style%3D1"
              },
              {
                "name": "ref_117",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D655.96875x13"
              },
              {
                "name": "ref_118_meta",
                "value": "font-family%3DTahoma%7Cfont-size%3D11px%7Cfont-style%3D2"
              },
              {
                "name": "ref_118",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D570.171875x13"
              },
              {
                "name": "ref_119_meta",
                "value": "font-family%3DTahoma%7Cfont-size%3D11px%7Cfont-style%3D3"
              },
              {
                "name": "ref_119",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D655.96875x13"
              },
              {
                "name": "ref_120_meta",
                "value": "font-family%3DTahoma%7Cfont-size%3D12px%7Cfont-style%3D0"
              },
              {
                "name": "ref_120",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D622x14"
              },
              {
                "name": "ref_121_meta",
                "value": "font-family%3DTahoma%7Cfont-size%3D12px%7Cfont-style%3D1"
              },
              {
                "name": "ref_121",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D715.59375x14"
              },
              {
                "name": "ref_122_meta",
                "value": "font-family%3DTahoma%7Cfont-size%3D12px%7Cfont-style%3D2"
              },
              {
                "name": "ref_122",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D622x14"
              },
              {
                "name": "ref_123_meta",
                "value": "font-family%3DTahoma%7Cfont-size%3D12px%7Cfont-style%3D3"
              },
              {
                "name": "ref_123",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D715.59375x14"
              },
              {
                "name": "ref_124_meta",
                "value": "font-family%3DTahoma%7Cfont-size%3D13px%7Cfont-style%3D0"
              },
              {
                "name": "ref_124",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D673.828125x16"
              },
              {
                "name": "ref_125_meta",
                "value": "font-family%3DTahoma%7Cfont-size%3D13px%7Cfont-style%3D1"
              },
              {
                "name": "ref_125",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D775.234375x16"
              },
              {
                "name": "ref_126_meta",
                "value": "font-family%3DTahoma%7Cfont-size%3D13px%7Cfont-style%3D2"
              },
              {
                "name": "ref_126",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D673.828125x16"
              },
              {
                "name": "ref_127_meta",
                "value": "font-family%3DTahoma%7Cfont-size%3D13px%7Cfont-style%3D3"
              },
              {
                "name": "ref_127",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D775.234375x16"
              },
              {
                "name": "ref_128_meta",
                "value": "font-family%3DTahoma%7Cfont-size%3D14px%7Cfont-style%3D0"
              },
              {
                "name": "ref_128",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D725.65625x17"
              },
              {
                "name": "ref_129_meta",
                "value": "font-family%3DTahoma%7Cfont-size%3D14px%7Cfont-style%3D1"
              },
              {
                "name": "ref_129",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D834.859375x17"
              },
              {
                "name": "ref_130_meta",
                "value": "font-family%3DTahoma%7Cfont-size%3D14px%7Cfont-style%3D2"
              },
              {
                "name": "ref_130",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D725.65625x17"
              },
              {
                "name": "ref_131_meta",
                "value": "font-family%3DTahoma%7Cfont-size%3D14px%7Cfont-style%3D3"
              },
              {
                "name": "ref_131",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D834.859375x17"
              },
              {
                "name": "ref_132_meta",
                "value": "font-family%3DTahoma%7Cfont-size%3D15px%7Cfont-style%3D0"
              },
              {
                "name": "ref_132",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D777.5x18"
              },
              {
                "name": "ref_133_meta",
                "value": "font-family%3DTahoma%7Cfont-size%3D15px%7Cfont-style%3D1"
              },
              {
                "name": "ref_133",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D894.5x18"
              },
              {
                "name": "ref_134_meta",
                "value": "font-family%3DTahoma%7Cfont-size%3D15px%7Cfont-style%3D2"
              },
              {
                "name": "ref_134",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D777.5x18"
              },
              {
                "name": "ref_135_meta",
                "value": "font-family%3DTahoma%7Cfont-size%3D15px%7Cfont-style%3D3"
              },
              {
                "name": "ref_135",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D894.5x18"
              },
              {
                "name": "ref_136_meta",
                "value": "font-family%3DTahoma%7Cfont-size%3D16px%7Cfont-style%3D0"
              },
              {
                "name": "ref_136",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D829.328125x19"
              },
              {
                "name": "ref_137_meta",
                "value": "font-family%3DTahoma%7Cfont-size%3D16px%7Cfont-style%3D1"
              },
              {
                "name": "ref_137",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D954.125x19"
              },
              {
                "name": "ref_138_meta",
                "value": "font-family%3DTahoma%7Cfont-size%3D16px%7Cfont-style%3D2"
              },
              {
                "name": "ref_138",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D829.328125x19"
              },
              {
                "name": "ref_139_meta",
                "value": "font-family%3DTahoma%7Cfont-size%3D16px%7Cfont-style%3D3"
              },
              {
                "name": "ref_139",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D954.125x19"
              },
              {
                "name": "ref_140_meta",
                "value": "font-family%3DTahoma%7Cfont-size%3D17px%7Cfont-style%3D0"
              },
              {
                "name": "ref_140",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D881.15625x21"
              },
              {
                "name": "ref_141_meta",
                "value": "font-family%3DTahoma%7Cfont-size%3D17px%7Cfont-style%3D1"
              },
              {
                "name": "ref_141",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1013.765625x21"
              },
              {
                "name": "ref_142_meta",
                "value": "font-family%3DTahoma%7Cfont-size%3D17px%7Cfont-style%3D2"
              },
              {
                "name": "ref_142",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D881.15625x21"
              },
              {
                "name": "ref_143_meta",
                "value": "font-family%3DTahoma%7Cfont-size%3D17px%7Cfont-style%3D3"
              },
              {
                "name": "ref_143",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1013.765625x21"
              },
              {
                "name": "ref_144_meta",
                "value": "font-family%3DTahoma%7Cfont-size%3D18px%7Cfont-style%3D0"
              },
              {
                "name": "ref_144",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D933x22"
              },
              {
                "name": "ref_145_meta",
                "value": "font-family%3DTahoma%7Cfont-size%3D18px%7Cfont-style%3D1"
              },
              {
                "name": "ref_145",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1073.390625x22"
              },
              {
                "name": "ref_146_meta",
                "value": "font-family%3DTahoma%7Cfont-size%3D18px%7Cfont-style%3D2"
              },
              {
                "name": "ref_146",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D933x22"
              },
              {
                "name": "ref_147_meta",
                "value": "font-family%3DTahoma%7Cfont-size%3D18px%7Cfont-style%3D3"
              },
              {
                "name": "ref_147",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1073.390625x22"
              },
              {
                "name": "ref_148_meta",
                "value": "font-family%3DTahoma%7Cfont-size%3D19px%7Cfont-style%3D0"
              },
              {
                "name": "ref_148",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D984.828125x23"
              },
              {
                "name": "ref_149_meta",
                "value": "font-family%3DTahoma%7Cfont-size%3D19px%7Cfont-style%3D1"
              },
              {
                "name": "ref_149",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1133.03125x23"
              },
              {
                "name": "ref_150_meta",
                "value": "font-family%3DTahoma%7Cfont-size%3D19px%7Cfont-style%3D2"
              },
              {
                "name": "ref_150",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D984.828125x23"
              },
              {
                "name": "ref_151_meta",
                "value": "font-family%3DTahoma%7Cfont-size%3D19px%7Cfont-style%3D3"
              },
              {
                "name": "ref_151",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1133.03125x23"
              },
              {
                "name": "ref_152_meta",
                "value": "font-family%3DTahoma%7Cfont-size%3D20px%7Cfont-style%3D0"
              },
              {
                "name": "ref_152",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1036.65625x24"
              },
              {
                "name": "ref_153_meta",
                "value": "font-family%3DTahoma%7Cfont-size%3D20px%7Cfont-style%3D1"
              },
              {
                "name": "ref_153",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1192.65625x24"
              },
              {
                "name": "ref_154_meta",
                "value": "font-family%3DTahoma%7Cfont-size%3D20px%7Cfont-style%3D2"
              },
              {
                "name": "ref_154",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1036.65625x24"
              },
              {
                "name": "ref_155_meta",
                "value": "font-family%3DTahoma%7Cfont-size%3D20px%7Cfont-style%3D3"
              },
              {
                "name": "ref_155",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1192.65625x24"
              },
              {
                "name": "ref_156_meta",
                "value": "font-family%3DArial%7Cfont-size%3D8px%7Cfont-style%3D0"
              },
              {
                "name": "ref_156",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D421.578125x9"
              },
              {
                "name": "ref_157_meta",
                "value": "font-family%3DArial%7Cfont-size%3D8px%7Cfont-style%3D1"
              },
              {
                "name": "ref_157",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D453x9"
              },
              {
                "name": "ref_158_meta",
                "value": "font-family%3DArial%7Cfont-size%3D8px%7Cfont-style%3D2"
              },
              {
                "name": "ref_158",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D421.71875x9"
              },
              {
                "name": "ref_159_meta",
                "value": "font-family%3DArial%7Cfont-size%3D8px%7Cfont-style%3D3"
              },
              {
                "name": "ref_159",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D453.15625x9"
              },
              {
                "name": "ref_160_meta",
                "value": "font-family%3DArial%7Cfont-size%3D9px%7Cfont-style%3D0"
              },
              {
                "name": "ref_160",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D474.28125x10"
              },
              {
                "name": "ref_161_meta",
                "value": "font-family%3DArial%7Cfont-size%3D9px%7Cfont-style%3D1"
              },
              {
                "name": "ref_161",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D509.625x10"
              },
              {
                "name": "ref_162_meta",
                "value": "font-family%3DArial%7Cfont-size%3D9px%7Cfont-style%3D2"
              },
              {
                "name": "ref_162",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D474.4375x10"
              },
              {
                "name": "ref_163_meta",
                "value": "font-family%3DArial%7Cfont-size%3D9px%7Cfont-style%3D3"
              },
              {
                "name": "ref_163",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D509.796875x10"
              },
              {
                "name": "ref_164_meta",
                "value": "font-family%3DArial%7Cfont-size%3D10px%7Cfont-style%3D0"
              },
              {
                "name": "ref_164",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D526.96875x11"
              },
              {
                "name": "ref_165_meta",
                "value": "font-family%3DArial%7Cfont-size%3D10px%7Cfont-style%3D1"
              },
              {
                "name": "ref_165",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D566.25x11"
              },
              {
                "name": "ref_166_meta",
                "value": "font-family%3DArial%7Cfont-size%3D10px%7Cfont-style%3D2"
              },
              {
                "name": "ref_166",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D527.15625x11"
              },
              {
                "name": "ref_167_meta",
                "value": "font-family%3DArial%7Cfont-size%3D10px%7Cfont-style%3D3"
              },
              {
                "name": "ref_167",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D566.4375x11"
              },
              {
                "name": "ref_168_meta",
                "value": "font-family%3DArial%7Cfont-size%3D11px%7Cfont-style%3D0"
              },
              {
                "name": "ref_168",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D579.671875x12"
              },
              {
                "name": "ref_169_meta",
                "value": "font-family%3DArial%7Cfont-size%3D11px%7Cfont-style%3D1"
              },
              {
                "name": "ref_169",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D622.875x12"
              },
              {
                "name": "ref_170_meta",
                "value": "font-family%3DArial%7Cfont-size%3D11px%7Cfont-style%3D2"
              },
              {
                "name": "ref_170",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D579.859375x12"
              },
              {
                "name": "ref_171_meta",
                "value": "font-family%3DArial%7Cfont-size%3D11px%7Cfont-style%3D3"
              },
              {
                "name": "ref_171",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D623.078125x12"
              },
              {
                "name": "ref_172_meta",
                "value": "font-family%3DArial%7Cfont-size%3D12px%7Cfont-style%3D0"
              },
              {
                "name": "ref_172",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D632.359375x14"
              },
              {
                "name": "ref_173_meta",
                "value": "font-family%3DArial%7Cfont-size%3D12px%7Cfont-style%3D1"
              },
              {
                "name": "ref_173",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D679.5x14"
              },
              {
                "name": "ref_174_meta",
                "value": "font-family%3DArial%7Cfont-size%3D12px%7Cfont-style%3D2"
              },
              {
                "name": "ref_174",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D632.578125x14"
              },
              {
                "name": "ref_175_meta",
                "value": "font-family%3DArial%7Cfont-size%3D12px%7Cfont-style%3D3"
              },
              {
                "name": "ref_175",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D679.71875x14"
              },
              {
                "name": "ref_176_meta",
                "value": "font-family%3DArial%7Cfont-size%3D13px%7Cfont-style%3D0"
              },
              {
                "name": "ref_176",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D685.0625x15"
              },
              {
                "name": "ref_177_meta",
                "value": "font-family%3DArial%7Cfont-size%3D13px%7Cfont-style%3D1"
              },
              {
                "name": "ref_177",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D736.125x15"
              },
              {
                "name": "ref_178_meta",
                "value": "font-family%3DArial%7Cfont-size%3D13px%7Cfont-style%3D2"
              },
              {
                "name": "ref_178",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D685.296875x15"
              },
              {
                "name": "ref_179_meta",
                "value": "font-family%3DArial%7Cfont-size%3D13px%7Cfont-style%3D3"
              },
              {
                "name": "ref_179",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D736.375x15"
              },
              {
                "name": "ref_180_meta",
                "value": "font-family%3DArial%7Cfont-size%3D14px%7Cfont-style%3D0"
              },
              {
                "name": "ref_180",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D737.75x16"
              },
              {
                "name": "ref_181_meta",
                "value": "font-family%3DArial%7Cfont-size%3D14px%7Cfont-style%3D1"
              },
              {
                "name": "ref_181",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D792.75x16"
              },
              {
                "name": "ref_182_meta",
                "value": "font-family%3DArial%7Cfont-size%3D14px%7Cfont-style%3D2"
              },
              {
                "name": "ref_182",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D738.015625x16"
              },
              {
                "name": "ref_183_meta",
                "value": "font-family%3DArial%7Cfont-size%3D14px%7Cfont-style%3D3"
              },
              {
                "name": "ref_183",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D793.015625x16"
              },
              {
                "name": "ref_184_meta",
                "value": "font-family%3DArial%7Cfont-size%3D15px%7Cfont-style%3D0"
              },
              {
                "name": "ref_184",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D790.453125x17"
              },
              {
                "name": "ref_185_meta",
                "value": "font-family%3DArial%7Cfont-size%3D15px%7Cfont-style%3D1"
              },
              {
                "name": "ref_185",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D849.375x17"
              },
              {
                "name": "ref_186_meta",
                "value": "font-family%3DArial%7Cfont-size%3D15px%7Cfont-style%3D2"
              },
              {
                "name": "ref_186",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D790.71875x17"
              },
              {
                "name": "ref_187_meta",
                "value": "font-family%3DArial%7Cfont-size%3D15px%7Cfont-style%3D3"
              },
              {
                "name": "ref_187",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D849.65625x17"
              },
              {
                "name": "ref_188_meta",
                "value": "font-family%3DArial%7Cfont-size%3D16px%7Cfont-style%3D0"
              },
              {
                "name": "ref_188",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D843.140625x17"
              },
              {
                "name": "ref_189_meta",
                "value": "font-family%3DArial%7Cfont-size%3D16px%7Cfont-style%3D1"
              },
              {
                "name": "ref_189",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D906x17"
              },
              {
                "name": "ref_190_meta",
                "value": "font-family%3DArial%7Cfont-size%3D16px%7Cfont-style%3D2"
              },
              {
                "name": "ref_190",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D843.4375x17"
              },
              {
                "name": "ref_191_meta",
                "value": "font-family%3DArial%7Cfont-size%3D16px%7Cfont-style%3D3"
              },
              {
                "name": "ref_191",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D906.296875x17"
              },
              {
                "name": "ref_192_meta",
                "value": "font-family%3DArial%7Cfont-size%3D17px%7Cfont-style%3D0"
              },
              {
                "name": "ref_192",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D895.84375x19"
              },
              {
                "name": "ref_193_meta",
                "value": "font-family%3DArial%7Cfont-size%3D17px%7Cfont-style%3D1"
              },
              {
                "name": "ref_193",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D962.625x19"
              },
              {
                "name": "ref_194_meta",
                "value": "font-family%3DArial%7Cfont-size%3D17px%7Cfont-style%3D2"
              },
              {
                "name": "ref_194",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D896.15625x19"
              },
              {
                "name": "ref_195_meta",
                "value": "font-family%3DArial%7Cfont-size%3D17px%7Cfont-style%3D3"
              },
              {
                "name": "ref_195",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D962.9375x19"
              },
              {
                "name": "ref_196_meta",
                "value": "font-family%3DArial%7Cfont-size%3D18px%7Cfont-style%3D0"
              },
              {
                "name": "ref_196",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D948.546875x20"
              },
              {
                "name": "ref_197_meta",
                "value": "font-family%3DArial%7Cfont-size%3D18px%7Cfont-style%3D1"
              },
              {
                "name": "ref_197",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1019.25x20"
              },
              {
                "name": "ref_198_meta",
                "value": "font-family%3DArial%7Cfont-size%3D18px%7Cfont-style%3D2"
              },
              {
                "name": "ref_198",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D948.859375x20"
              },
              {
                "name": "ref_199_meta",
                "value": "font-family%3DArial%7Cfont-size%3D18px%7Cfont-style%3D3"
              },
              {
                "name": "ref_199",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1019.578125x20"
              },
              {
                "name": "ref_200_meta",
                "value": "font-family%3DArial%7Cfont-size%3D19px%7Cfont-style%3D0"
              },
              {
                "name": "ref_200",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1001.234375x21"
              },
              {
                "name": "ref_201_meta",
                "value": "font-family%3DArial%7Cfont-size%3D19px%7Cfont-style%3D1"
              },
              {
                "name": "ref_201",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1075.875x21"
              },
              {
                "name": "ref_202_meta",
                "value": "font-family%3DArial%7Cfont-size%3D19px%7Cfont-style%3D2"
              },
              {
                "name": "ref_202",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1001.578125x21"
              },
              {
                "name": "ref_203_meta",
                "value": "font-family%3DArial%7Cfont-size%3D19px%7Cfont-style%3D3"
              },
              {
                "name": "ref_203",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1076.21875x21"
              },
              {
                "name": "ref_204_meta",
                "value": "font-family%3DArial%7Cfont-size%3D20px%7Cfont-style%3D0"
              },
              {
                "name": "ref_204",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1053.9375x22"
              },
              {
                "name": "ref_205_meta",
                "value": "font-family%3DArial%7Cfont-size%3D20px%7Cfont-style%3D1"
              },
              {
                "name": "ref_205",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1132.5x22"
              },
              {
                "name": "ref_206_meta",
                "value": "font-family%3DArial%7Cfont-size%3D20px%7Cfont-style%3D2"
              },
              {
                "name": "ref_206",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1054.296875x22"
              },
              {
                "name": "ref_207_meta",
                "value": "font-family%3DArial%7Cfont-size%3D20px%7Cfont-style%3D3"
              },
              {
                "name": "ref_207",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1132.875x22"
              },
              {
                "name": "ref_208_meta",
                "value": "font-family%3Dsans-serif%7Cfont-size%3D8px%7Cfont-style%3D0"
              },
              {
                "name": "ref_208",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D421.578125x9"
              },
              {
                "name": "ref_209_meta",
                "value": "font-family%3Dsans-serif%7Cfont-size%3D8px%7Cfont-style%3D1"
              },
              {
                "name": "ref_209",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D453x9"
              },
              {
                "name": "ref_210_meta",
                "value": "font-family%3Dsans-serif%7Cfont-size%3D8px%7Cfont-style%3D2"
              },
              {
                "name": "ref_210",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D421.71875x9"
              },
              {
                "name": "ref_211_meta",
                "value": "font-family%3Dsans-serif%7Cfont-size%3D8px%7Cfont-style%3D3"
              },
              {
                "name": "ref_211",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D453.15625x9"
              },
              {
                "name": "ref_212_meta",
                "value": "font-family%3Dsans-serif%7Cfont-size%3D9px%7Cfont-style%3D0"
              },
              {
                "name": "ref_212",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D474.28125x10"
              },
              {
                "name": "ref_213_meta",
                "value": "font-family%3Dsans-serif%7Cfont-size%3D9px%7Cfont-style%3D1"
              },
              {
                "name": "ref_213",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D509.625x10"
              },
              {
                "name": "ref_214_meta",
                "value": "font-family%3Dsans-serif%7Cfont-size%3D9px%7Cfont-style%3D2"
              },
              {
                "name": "ref_214",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D474.4375x10"
              },
              {
                "name": "ref_215_meta",
                "value": "font-family%3Dsans-serif%7Cfont-size%3D9px%7Cfont-style%3D3"
              },
              {
                "name": "ref_215",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D509.796875x10"
              },
              {
                "name": "ref_216_meta",
                "value": "font-family%3Dsans-serif%7Cfont-size%3D10px%7Cfont-style%3D0"
              },
              {
                "name": "ref_216",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D526.96875x11"
              },
              {
                "name": "ref_217_meta",
                "value": "font-family%3Dsans-serif%7Cfont-size%3D10px%7Cfont-style%3D1"
              },
              {
                "name": "ref_217",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D566.25x11"
              },
              {
                "name": "ref_218_meta",
                "value": "font-family%3Dsans-serif%7Cfont-size%3D10px%7Cfont-style%3D2"
              },
              {
                "name": "ref_218",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D527.15625x11"
              },
              {
                "name": "ref_219_meta",
                "value": "font-family%3Dsans-serif%7Cfont-size%3D10px%7Cfont-style%3D3"
              },
              {
                "name": "ref_219",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D566.4375x11"
              },
              {
                "name": "ref_220_meta",
                "value": "font-family%3Dsans-serif%7Cfont-size%3D11px%7Cfont-style%3D0"
              },
              {
                "name": "ref_220",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D579.671875x12"
              },
              {
                "name": "ref_221_meta",
                "value": "font-family%3Dsans-serif%7Cfont-size%3D11px%7Cfont-style%3D1"
              },
              {
                "name": "ref_221",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D622.875x12"
              },
              {
                "name": "ref_222_meta",
                "value": "font-family%3Dsans-serif%7Cfont-size%3D11px%7Cfont-style%3D2"
              },
              {
                "name": "ref_222",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D579.859375x12"
              },
              {
                "name": "ref_223_meta",
                "value": "font-family%3Dsans-serif%7Cfont-size%3D11px%7Cfont-style%3D3"
              },
              {
                "name": "ref_223",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D623.078125x12"
              },
              {
                "name": "ref_224_meta",
                "value": "font-family%3Dsans-serif%7Cfont-size%3D12px%7Cfont-style%3D0"
              },
              {
                "name": "ref_224",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D632.359375x14"
              },
              {
                "name": "ref_225_meta",
                "value": "font-family%3Dsans-serif%7Cfont-size%3D12px%7Cfont-style%3D1"
              },
              {
                "name": "ref_225",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D679.5x14"
              },
              {
                "name": "ref_226_meta",
                "value": "font-family%3Dsans-serif%7Cfont-size%3D12px%7Cfont-style%3D2"
              },
              {
                "name": "ref_226",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D632.578125x14"
              },
              {
                "name": "ref_227_meta",
                "value": "font-family%3Dsans-serif%7Cfont-size%3D12px%7Cfont-style%3D3"
              },
              {
                "name": "ref_227",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D679.71875x14"
              },
              {
                "name": "ref_228_meta",
                "value": "font-family%3Dsans-serif%7Cfont-size%3D13px%7Cfont-style%3D0"
              },
              {
                "name": "ref_228",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D685.0625x15"
              },
              {
                "name": "ref_229_meta",
                "value": "font-family%3Dsans-serif%7Cfont-size%3D13px%7Cfont-style%3D1"
              },
              {
                "name": "ref_229",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D736.125x15"
              },
              {
                "name": "ref_230_meta",
                "value": "font-family%3Dsans-serif%7Cfont-size%3D13px%7Cfont-style%3D2"
              },
              {
                "name": "ref_230",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D685.296875x15"
              },
              {
                "name": "ref_231_meta",
                "value": "font-family%3Dsans-serif%7Cfont-size%3D13px%7Cfont-style%3D3"
              },
              {
                "name": "ref_231",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D736.375x15"
              },
              {
                "name": "ref_232_meta",
                "value": "font-family%3Dsans-serif%7Cfont-size%3D14px%7Cfont-style%3D0"
              },
              {
                "name": "ref_232",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D737.75x16"
              },
              {
                "name": "ref_233_meta",
                "value": "font-family%3Dsans-serif%7Cfont-size%3D14px%7Cfont-style%3D1"
              },
              {
                "name": "ref_233",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D792.75x16"
              },
              {
                "name": "ref_234_meta",
                "value": "font-family%3Dsans-serif%7Cfont-size%3D14px%7Cfont-style%3D2"
              },
              {
                "name": "ref_234",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D738.015625x16"
              },
              {
                "name": "ref_235_meta",
                "value": "font-family%3Dsans-serif%7Cfont-size%3D14px%7Cfont-style%3D3"
              },
              {
                "name": "ref_235",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D793.015625x16"
              },
              {
                "name": "ref_236_meta",
                "value": "font-family%3Dsans-serif%7Cfont-size%3D15px%7Cfont-style%3D0"
              },
              {
                "name": "ref_236",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D790.453125x17"
              },
              {
                "name": "ref_237_meta",
                "value": "font-family%3Dsans-serif%7Cfont-size%3D15px%7Cfont-style%3D1"
              },
              {
                "name": "ref_237",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D849.375x17"
              },
              {
                "name": "ref_238_meta",
                "value": "font-family%3Dsans-serif%7Cfont-size%3D15px%7Cfont-style%3D2"
              },
              {
                "name": "ref_238",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D790.71875x17"
              },
              {
                "name": "ref_239_meta",
                "value": "font-family%3Dsans-serif%7Cfont-size%3D15px%7Cfont-style%3D3"
              },
              {
                "name": "ref_239",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D849.65625x17"
              },
              {
                "name": "ref_240_meta",
                "value": "font-family%3Dsans-serif%7Cfont-size%3D16px%7Cfont-style%3D0"
              },
              {
                "name": "ref_240",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D843.140625x17"
              },
              {
                "name": "ref_241_meta",
                "value": "font-family%3Dsans-serif%7Cfont-size%3D16px%7Cfont-style%3D1"
              },
              {
                "name": "ref_241",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D906x17"
              },
              {
                "name": "ref_242_meta",
                "value": "font-family%3Dsans-serif%7Cfont-size%3D16px%7Cfont-style%3D2"
              },
              {
                "name": "ref_242",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D843.4375x17"
              },
              {
                "name": "ref_243_meta",
                "value": "font-family%3Dsans-serif%7Cfont-size%3D16px%7Cfont-style%3D3"
              },
              {
                "name": "ref_243",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D906.296875x17"
              },
              {
                "name": "ref_244_meta",
                "value": "font-family%3Dsans-serif%7Cfont-size%3D17px%7Cfont-style%3D0"
              },
              {
                "name": "ref_244",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D895.84375x19"
              },
              {
                "name": "ref_245_meta",
                "value": "font-family%3Dsans-serif%7Cfont-size%3D17px%7Cfont-style%3D1"
              },
              {
                "name": "ref_245",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D962.625x19"
              },
              {
                "name": "ref_246_meta",
                "value": "font-family%3Dsans-serif%7Cfont-size%3D17px%7Cfont-style%3D2"
              },
              {
                "name": "ref_246",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D896.15625x19"
              },
              {
                "name": "ref_247_meta",
                "value": "font-family%3Dsans-serif%7Cfont-size%3D17px%7Cfont-style%3D3"
              },
              {
                "name": "ref_247",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D962.9375x19"
              },
              {
                "name": "ref_248_meta",
                "value": "font-family%3Dsans-serif%7Cfont-size%3D18px%7Cfont-style%3D0"
              },
              {
                "name": "ref_248",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D948.546875x20"
              },
              {
                "name": "ref_249_meta",
                "value": "font-family%3Dsans-serif%7Cfont-size%3D18px%7Cfont-style%3D1"
              },
              {
                "name": "ref_249",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1019.25x20"
              },
              {
                "name": "ref_250_meta",
                "value": "font-family%3Dsans-serif%7Cfont-size%3D18px%7Cfont-style%3D2"
              },
              {
                "name": "ref_250",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D948.859375x20"
              },
              {
                "name": "ref_251_meta",
                "value": "font-family%3Dsans-serif%7Cfont-size%3D18px%7Cfont-style%3D3"
              },
              {
                "name": "ref_251",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1019.578125x20"
              },
              {
                "name": "ref_252_meta",
                "value": "font-family%3Dsans-serif%7Cfont-size%3D19px%7Cfont-style%3D0"
              },
              {
                "name": "ref_252",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1001.234375x21"
              },
              {
                "name": "ref_253_meta",
                "value": "font-family%3Dsans-serif%7Cfont-size%3D19px%7Cfont-style%3D1"
              },
              {
                "name": "ref_253",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1075.875x21"
              },
              {
                "name": "ref_254_meta",
                "value": "font-family%3Dsans-serif%7Cfont-size%3D19px%7Cfont-style%3D2"
              },
              {
                "name": "ref_254",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1001.578125x21"
              },
              {
                "name": "ref_255_meta",
                "value": "font-family%3Dsans-serif%7Cfont-size%3D19px%7Cfont-style%3D3"
              },
              {
                "name": "ref_255",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1076.21875x21"
              },
              {
                "name": "ref_256_meta",
                "value": "font-family%3Dsans-serif%7Cfont-size%3D20px%7Cfont-style%3D0"
              },
              {
                "name": "ref_256",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1053.9375x22"
              },
              {
                "name": "ref_257_meta",
                "value": "font-family%3Dsans-serif%7Cfont-size%3D20px%7Cfont-style%3D1"
              },
              {
                "name": "ref_257",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1132.5x22"
              },
              {
                "name": "ref_258_meta",
                "value": "font-family%3Dsans-serif%7Cfont-size%3D20px%7Cfont-style%3D2"
              },
              {
                "name": "ref_258",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1054.296875x22"
              },
              {
                "name": "ref_259_meta",
                "value": "font-family%3Dsans-serif%7Cfont-size%3D20px%7Cfont-style%3D3"
              },
              {
                "name": "ref_259",
                "value": "Enisratdhulc+Gmobwfkzp+Venisratdhulcgmobwfeni+Sratdhulcgmo+eni+srat+Dhuenisratd+Henisraten+israenienen+Eeeeeee%3D1132.875x22"
              },
              {
                "name": "userid",
                "value": "WIH1785791371997"
              },
              {
                "name": "decoded",
                "value": "true"
              }
            ]
          }
        },
        "response": {
          "status": 302,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://ekat.festool.de"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "cache-control",
              "value": "no-cache,no-store,must-revalidate,post-check=0,pre-check=0"
            },
            {
              "name": "content-length",
              "value": "0"
            },
            {
              "name": "content-type",
              "value": "text/html;charset=UTF-8"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 09:09:51 GMT"
            },
            {
              "name": "expires",
              "value": "Thu, 01 Jan 1970 00:00:00 GMT"
            },
            {
              "name": "location",
              "value": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513#2VF2D59BB6A19D241BF39AB8ED9782EC2676FB7D71DEA3F1B037E8A2D71F8FA91ED584BD081D6809030379CF8994891F65A8986CB38788501DB2F64C48C2D48691EC16B9477F538F011A91C9AA4E9AFEE315C79723E5AA1EB16B15031488FA743A690E2C31409293DC460553BC507C7BD94F7BF98B910BA76F04056FEF1A7BDC375B3BE8AE75D4A926AFE49D7762A6E60476BEBC713FA7FB2B155EB5CCD51A90D291C6798FCFE55699A76410CDE3B0446A5B504D3A8DCABCDDFDC43E28D86EDC81E6B7BFBA9C17998722AD7DC364F9B360B683AAF83000B8EBD51BD302897629C3579B0F4749890DFAEB2362C869E392B5E3FAADBE2D43BCFBC4C3632980B4B3D178D71AEF2EDC4AC0A207E5B628656549B3046DEBFB63331888B0C66897C62E02F0B82D220F96B06850C9AC59B34A7068454EB9B217DACCF224AF08DC573CEF013D5A7451FCDAFD827D8468EB71307DB9C421BE5AB56DD2CE6D2BAE5FFAD443C040E219C275338272C421BE5AB56DD2CE4EF98D6992C4A806A407D72CC44AD536F310827032D1AC056F89419881BF0DD5FCA12A0C1A8645C27C84DE9E0758A61631D52F27C125C1962BEB5B1C502E63A0BD6FF56630359A02627BDDDF793428EB2FA9EF932288B6B1EDF8A369FE8EE7F897DB9E3E3C84DD434F60686263DBEFD8FCCFCDAA59EAFC214F8171A05960530A9E5ABC51215E170F97DB9E3E3C84DD43DEC89585795B3874396402DD57C617A3C55FAE20F8C83C126638D24CBBC9DDDC8C8FA8D1298C97B9BBB92FB6BF271FB48345DDE94A571D0203AF5EEE5F1F2504DB148DE2EFD18A5668F70C371CE81BC89B37ABAF25FA84DACBA72043D96AEA4F298899DF7BA9DE229033D0AC10369C34D8502B5D38A884306870A18576B8D81AEFED8CAFCAE38FB38CDCE50946CE89B85A3E170EFEED9236091324AA21FE5C69BFD3C9875BD8C8EDED07AD10AEF4D84EEA4B9B45BFB90963B7D3C6C577B0F69F905385ABE9EDFFA53913940B31BC4622F515E8079FFB2D51BD6FF56630359A02627BDDDF793428EB2FA9EF932288B6B1EDF8A369FE8EE7F897DB9E3E3C84DD434F60686263DBEFD8FCCFCDAA59EAFC214F8171A05960530A9E5ABC51215E170F97DB9E3E3C84DD43DEC89585795B387440FD0D31E517DED4D161239C4F766D2711E3BB35041F1DDA7CF0863DB9386F606E08741D82FFD013293CC950248C0832FD04E7D3A07AD7B057EC30D755D283A4F515E8079FFB2D513D641BC2AF619F99C2F82A5CD507A9B60068C075906E849BA93A7B904DEB5A243B82214FFADAC952DD79BC627DD9DA3754FF0BE055B41B169E69002C06B4DE79F6C7B0DFBD3A0F522E65D7D9029BAB57CA12C1989BD261A69E69002C06B4DE79C7DC379705A4A84B6638D24CBBC9DDDC20B327CD29F50D15E4AD0A914CE23B089F436871D356837441BEC24302DBDBEC90644A227A6BC2D79DD0FB0244CDB5D164AFEE39E460DE8BE26433895B733653B9EA7E0818E6E95D41C8185567494EE8A5DD1D3D275250FD9A11E3A038EC5B42E9233C1D71C6391368F8A064E4615E43B811320325352C9D7B0496E262C373D04BE9E084FF8E9A3F2E65D7D9029BAB57B5CE2E7DCF0EAE70274DA4EDC454021AAB47E7D7FED1AFAB1FC721FCFD895E4094141E1AD049AA3622BF63BEA0373671EC16B9477F538F011A91C9AA4E9AFEE346D2AB2727781C74481117D634D964C50381183B796E17F213DA5CF05D8352EA7C2C0FF9D1BA7E865443427661C8AD65556FD0C06B132190C1E51CF9D83BACA12D04FBEDDEE8AF2AF6B3D33534177841A0CA7DC92DFEE22317138B4EC17ABBEA0381183B796E17F213DA5CF05D8352EA04056FEF1A7BDC378767B1590C24642445D85C35CE229B547E56B897C73DE385115B9CAB0EFDD59AEE3351CA6A1D79B6440232ECD2F139DBAB47E7D7FED1AFAB1FC721FCFD895E4076B5E6FD416F51F99AF8A113450A88512654A5EFA96698B9FE795E3125D4E185E2262FA8F088B802ACDB74B330B326A93FC34E72FDF43319A016572D59868882154FBE04B0A192C40BC3C01ADFBA2D0FFFF5161B05317F677366F94870710960"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "pragma",
              "value": "no-cache"
            },
            {
              "name": "vary",
              "value": "Origin"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "x-robots-tag",
              "value": "noindex"
            }
          ],
          "cookies": [],
          "content": {
            "size": 0,
            "mimeType": "text/html"
          },
          "redirectURL": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513#2VF2D59BB6A19D241BF39AB8ED9782EC2676FB7D71DEA3F1B037E8A2D71F8FA91ED584BD081D6809030379CF8994891F65A8986CB38788501DB2F64C48C2D48691EC16B9477F538F011A91C9AA4E9AFEE315C79723E5AA1EB16B15031488FA743A690E2C31409293DC460553BC507C7BD94F7BF98B910BA76F04056FEF1A7BDC375B3BE8AE75D4A926AFE49D7762A6E60476BEBC713FA7FB2B155EB5CCD51A90D291C6798FCFE55699A76410CDE3B0446A5B504D3A8DCABCDDFDC43E28D86EDC81E6B7BFBA9C17998722AD7DC364F9B360B683AAF83000B8EBD51BD302897629C3579B0F4749890DFAEB2362C869E392B5E3FAADBE2D43BCFBC4C3632980B4B3D178D71AEF2EDC4AC0A207E5B628656549B3046DEBFB63331888B0C66897C62E02F0B82D220F96B06850C9AC59B34A7068454EB9B217DACCF224AF08DC573CEF013D5A7451FCDAFD827D8468EB71307DB9C421BE5AB56DD2CE6D2BAE5FFAD443C040E219C275338272C421BE5AB56DD2CE4EF98D6992C4A806A407D72CC44AD536F310827032D1AC056F89419881BF0DD5FCA12A0C1A8645C27C84DE9E0758A61631D52F27C125C1962BEB5B1C502E63A0BD6FF56630359A02627BDDDF793428EB2FA9EF932288B6B1EDF8A369FE8EE7F897DB9E3E3C84DD434F60686263DBEFD8FCCFCDAA59EAFC214F8171A05960530A9E5ABC51215E170F97DB9E3E3C84DD43DEC89585795B3874396402DD57C617A3C55FAE20F8C83C126638D24CBBC9DDDC8C8FA8D1298C97B9BBB92FB6BF271FB48345DDE94A571D0203AF5EEE5F1F2504DB148DE2EFD18A5668F70C371CE81BC89B37ABAF25FA84DACBA72043D96AEA4F298899DF7BA9DE229033D0AC10369C34D8502B5D38A884306870A18576B8D81AEFED8CAFCAE38FB38CDCE50946CE89B85A3E170EFEED9236091324AA21FE5C69BFD3C9875BD8C8EDED07AD10AEF4D84EEA4B9B45BFB90963B7D3C6C577B0F69F905385ABE9EDFFA53913940B31BC4622F515E8079FFB2D51BD6FF56630359A02627BDDDF793428EB2FA9EF932288B6B1EDF8A369FE8EE7F897DB9E3E3C84DD434F60686263DBEFD8FCCFCDAA59EAFC214F8171A05960530A9E5ABC51215E170F97DB9E3E3C84DD43DEC89585795B387440FD0D31E517DED4D161239C4F766D2711E3BB35041F1DDA7CF0863DB9386F606E08741D82FFD013293CC950248C0832FD04E7D3A07AD7B057EC30D755D283A4F515E8079FFB2D513D641BC2AF619F99C2F82A5CD507A9B60068C075906E849BA93A7B904DEB5A243B82214FFADAC952DD79BC627DD9DA3754FF0BE055B41B169E69002C06B4DE79F6C7B0DFBD3A0F522E65D7D9029BAB57CA12C1989BD261A69E69002C06B4DE79C7DC379705A4A84B6638D24CBBC9DDDC20B327CD29F50D15E4AD0A914CE23B089F436871D356837441BEC24302DBDBEC90644A227A6BC2D79DD0FB0244CDB5D164AFEE39E460DE8BE26433895B733653B9EA7E0818E6E95D41C8185567494EE8A5DD1D3D275250FD9A11E3A038EC5B42E9233C1D71C6391368F8A064E4615E43B811320325352C9D7B0496E262C373D04BE9E084FF8E9A3F2E65D7D9029BAB57B5CE2E7DCF0EAE70274DA4EDC454021AAB47E7D7FED1AFAB1FC721FCFD895E4094141E1AD049AA3622BF63BEA0373671EC16B9477F538F011A91C9AA4E9AFEE346D2AB2727781C74481117D634D964C50381183B796E17F213DA5CF05D8352EA7C2C0FF9D1BA7E865443427661C8AD65556FD0C06B132190C1E51CF9D83BACA12D04FBEDDEE8AF2AF6B3D33534177841A0CA7DC92DFEE22317138B4EC17ABBEA0381183B796E17F213DA5CF05D8352EA04056FEF1A7BDC378767B1590C24642445D85C35CE229B547E56B897C73DE385115B9CAB0EFDD59AEE3351CA6A1D79B6440232ECD2F139DBAB47E7D7FED1AFAB1FC721FCFD895E4076B5E6FD416F51F99AF8A113450A88512654A5EFA96698B9FE795E3125D4E185E2262FA8F088B802ACDB74B330B326A93FC34E72FDF43319A016572D59868882154FBE04B0A192C40BC3C01ADFBA2D0FFFF5161B05317F677366F94870710960",
          "headersSize": -1,
          "bodySize": -1,
          "_transferSize": 2629,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:10.994Z",
        "time": 546.5920000569895,
        "timings": {
          "blocked": 5.448000001043082,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0.737,
          "wait": 539.019999972023,
          "receive": 1.3870000839233398,
          "_blocked_queueing": 4.495000001043081,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_connectionId": "1726423",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "script",
          "stack": {
            "callFrames": [
              {
                "functionName": "dwAjaxToServer",
                "scriptId": "74",
                "url": "https://ekat.festool.de/login/WEB-RES/js/base.js_shop_7.26.1.5.js",
                "lineNumber": 16016,
                "columnNumber": 12
              },
              {
                "functionName": "dwAjaxSendUpdates",
                "scriptId": "74",
                "url": "https://ekat.festool.de/login/WEB-RES/js/base.js_shop_7.26.1.5.js",
                "lineNumber": 15812,
                "columnNumber": 8
              },
              {
                "functionName": "dwAjaxAddUpdate",
                "scriptId": "74",
                "url": "https://ekat.festool.de/login/WEB-RES/js/base.js_shop_7.26.1.5.js",
                "lineNumber": 15751,
                "columnNumber": 8
              },
              {
                "functionName": "dwAjaxStaticConnectionXmlHttp.onreadystatechange",
                "scriptId": "74",
                "url": "https://ekat.festool.de/login/WEB-RES/js/base.js_shop_7.26.1.5.js",
                "lineNumber": 15845,
                "columnNumber": 28
              }
            ],
            "parent": {
              "description": "XMLHttpRequest.send",
              "callFrames": [
                {
                  "functionName": "",
                  "scriptId": "74",
                  "url": "https://ekat.festool.de/login/WEB-RES/js/base.js_shop_7.26.1.5.js",
                  "lineNumber": 15869,
                  "columnNumber": 38
                }
              ],
              "parent": {
                "description": "setTimeout",
                "callFrames": [
                  {
                    "functionName": "dwAjaxNewStaticConnection",
                    "scriptId": "74",
                    "url": "https://ekat.festool.de/login/WEB-RES/js/base.js_shop_7.26.1.5.js",
                    "lineNumber": 15826,
                    "columnNumber": 4
                  },
                  {
                    "functionName": "dwFrameworkInitFrameworkFinished",
                    "scriptId": "74",
                    "url": "https://ekat.festool.de/login/WEB-RES/js/base.js_shop_7.26.1.5.js",
                    "lineNumber": 7285,
                    "columnNumber": 8
                  },
                  {
                    "functionName": "init",
                    "scriptId": "79",
                    "url": "https://ekat.festool.de/login/app?__bk_&__windowid=IRW3104379&__rid=FOE1787216989423",
                    "lineNumber": 12,
                    "columnNumber": 2432
                  },
                  {
                    "functionName": "onload",
                    "scriptId": "95",
                    "url": "https://ekat.festool.de/login/app?__bk_&__windowid=IRW3104379&__rid=FOE1787216989423#2VFB2144C915D47DFAD66CC73CEC1F7E17E1D29351DB45EA618EEFB7B1BB136D42B8044FCE28E6056D",
                    "lineNumber": 12,
                    "columnNumber": 3859
                  }
                ]
              }
            }
          }
        },
        "_priority": "High",
        "_resourceType": "xhr",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "POST",
          "url": "https://ekat.festool.de/login/ajax",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": ":authority",
              "value": "ekat.festool.de"
            },
            {
              "name": ":method",
              "value": "POST"
            },
            {
              "name": ":path",
              "value": "/login/ajax"
            },
            {
              "name": ":scheme",
              "value": "https"
            },
            {
              "name": "accept",
              "value": "*/*"
            },
            {
              "name": "accept-encoding",
              "value": "gzip, deflate, br, zstd"
            },
            {
              "name": "accept-language",
              "value": "en-GB,en-US;q=0.9,en;q=0.8"
            },
            {
              "name": "cache-control",
              "value": "no-cache,no-store,must-revalidate,post-check=0,pre-check=0"
            },
            {
              "name": "content-length",
              "value": "62"
            },
            {
              "name": "content-type",
              "value": "text/plain; charset=UTF-8"
            },
            {
              "name": "expires",
              "value": "0"
            },
            {
              "name": "origin",
              "value": "https://ekat.festool.de"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "pragma",
              "value": "no-cache"
            },
            {
              "name": "priority",
              "value": "u=1, i"
            },
            {
              "name": "referer",
              "value": "https://ekat.festool.de/login/app?__bk_&__windowid=IRW3104379&__rid=FOE1787216989423"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            },
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "sec-fetch-dest",
              "value": "empty"
            },
            {
              "name": "sec-fetch-mode",
              "value": "cors"
            },
            {
              "name": "sec-fetch-site",
              "value": "same-origin"
            },
            {
              "name": "user-agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            }
          ],
          "queryString": [],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 62,
          "postData": {
            "mimeType": "text/plain; charset=UTF-8",
            "text": "currentBrowserRootWindow@DW@IRW3104379@DW@1388@DW@1209@DX@ping"
          }
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://ekat.festool.de"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "cache-control",
              "value": "no-cache,no-store,must-revalidate,post-check=0,pre-check=0"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "content-length",
              "value": "44"
            },
            {
              "name": "content-type",
              "value": "text/html;charset=UTF-8"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 09:09:50 GMT"
            },
            {
              "name": "expires",
              "value": "Thu, 01 Jan 1970 00:00:00 GMT"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "pragma",
              "value": "no-cache"
            },
            {
              "name": "vary",
              "value": "Origin"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "x-robots-tag",
              "value": "noindex"
            }
          ],
          "cookies": [],
          "content": {
            "size": 24,
            "mimeType": "text/html",
            "text": "setChildThreadCount@DW@0"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": -1,
          "_transferSize": 111,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:11.204Z",
        "time": 45.24499992839992,
        "timings": {
          "blocked": 1.3159999381452798,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0.3669999999999999,
          "wait": 42.96699999982864,
          "receive": 0.5949999904260039,
          "_blocked_queueing": 0.6339999381452799,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_connectionId": "1726423",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "script",
          "stack": {
            "callFrames": [
              {
                "functionName": "",
                "scriptId": "74",
                "url": "https://ekat.festool.de/login/WEB-RES/js/base.js_shop_7.26.1.5.js",
                "lineNumber": 15869,
                "columnNumber": 38
              }
            ],
            "parent": {
              "description": "setTimeout",
              "callFrames": [
                {
                  "functionName": "dwAjaxNewStaticConnection",
                  "scriptId": "74",
                  "url": "https://ekat.festool.de/login/WEB-RES/js/base.js_shop_7.26.1.5.js",
                  "lineNumber": 15826,
                  "columnNumber": 4
                },
                {
                  "functionName": "dwAjaxStaticConnectionXmlHttp.onreadystatechange",
                  "scriptId": "74",
                  "url": "https://ekat.festool.de/login/WEB-RES/js/base.js_shop_7.26.1.5.js",
                  "lineNumber": 15865,
                  "columnNumber": 20
                }
              ],
              "parent": {
                "description": "XMLHttpRequest.send",
                "callFrames": [
                  {
                    "functionName": "",
                    "scriptId": "74",
                    "url": "https://ekat.festool.de/login/WEB-RES/js/base.js_shop_7.26.1.5.js",
                    "lineNumber": 15869,
                    "columnNumber": 38
                  }
                ],
                "parent": {
                  "description": "setTimeout",
                  "callFrames": [
                    {
                      "functionName": "dwAjaxNewStaticConnection",
                      "scriptId": "74",
                      "url": "https://ekat.festool.de/login/WEB-RES/js/base.js_shop_7.26.1.5.js",
                      "lineNumber": 15826,
                      "columnNumber": 4
                    },
                    {
                      "functionName": "dwFrameworkInitFrameworkFinished",
                      "scriptId": "74",
                      "url": "https://ekat.festool.de/login/WEB-RES/js/base.js_shop_7.26.1.5.js",
                      "lineNumber": 7285,
                      "columnNumber": 8
                    },
                    {
                      "functionName": "init",
                      "scriptId": "79",
                      "url": "https://ekat.festool.de/login/app?__bk_&__windowid=IRW3104379&__rid=FOE1787216989423",
                      "lineNumber": 12,
                      "columnNumber": 2432
                    },
                    {
                      "functionName": "onload",
                      "scriptId": "95",
                      "url": "https://ekat.festool.de/login/app?__bk_&__windowid=IRW3104379&__rid=FOE1787216989423#2VFB2144C915D47DFAD66CC73CEC1F7E17E1D29351DB45EA618EEFB7B1BB136D42B8044FCE28E6056D",
                      "lineNumber": 12,
                      "columnNumber": 3859
                    }
                  ]
                }
              }
            }
          }
        },
        "_priority": "High",
        "_resourceType": "xhr",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "POST",
          "url": "https://ekat.festool.de/login/static.connection_IRW3104379",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": ":authority",
              "value": "ekat.festool.de"
            },
            {
              "name": ":method",
              "value": "POST"
            },
            {
              "name": ":path",
              "value": "/login/static.connection_IRW3104379"
            },
            {
              "name": ":scheme",
              "value": "https"
            },
            {
              "name": "accept",
              "value": "*/*"
            },
            {
              "name": "accept-encoding",
              "value": "gzip, deflate, br, zstd"
            },
            {
              "name": "accept-language",
              "value": "en-GB,en-US;q=0.9,en;q=0.8"
            },
            {
              "name": "cache-control",
              "value": "no-cache,no-store,must-revalidate,post-check=0,pre-check=0"
            },
            {
              "name": "content-length",
              "value": "1"
            },
            {
              "name": "content-type",
              "value": "text/plain; charset=UTF-8"
            },
            {
              "name": "expires",
              "value": "0"
            },
            {
              "name": "origin",
              "value": "https://ekat.festool.de"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "pragma",
              "value": "no-cache"
            },
            {
              "name": "priority",
              "value": "u=1, i"
            },
            {
              "name": "referer",
              "value": "https://ekat.festool.de/login/app?__bk_&__windowid=IRW3104379&__rid=FOE1787216989423"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            },
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "sec-fetch-dest",
              "value": "empty"
            },
            {
              "name": "sec-fetch-mode",
              "value": "cors"
            },
            {
              "name": "sec-fetch-site",
              "value": "same-origin"
            },
            {
              "name": "user-agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            }
          ],
          "queryString": [],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 1,
          "postData": {
            "mimeType": "text/plain; charset=UTF-8",
            "text": "?"
          }
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://ekat.festool.de"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "cache-control",
              "value": "no-cache,no-store,must-revalidate,post-check=0,pre-check=0"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "content-length",
              "value": "21"
            },
            {
              "name": "content-type",
              "value": "text/html;charset=UTF-8"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 09:09:50 GMT"
            },
            {
              "name": "expires",
              "value": "Thu, 01 Jan 1970 00:00:00 GMT"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "pragma",
              "value": "no-cache"
            },
            {
              "name": "vary",
              "value": "Origin"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "x-robots-tag",
              "value": "noindex"
            }
          ],
          "cookies": [],
          "content": {
            "size": 1,
            "mimeType": "text/html",
            "text": "y"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": -1,
          "_transferSize": 88,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:11.204Z",
        "time": 272.2999999532476,
        "timings": {
          "blocked": 1.4509999667182565,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0.21599999999999997,
          "wait": 270.03299995803087,
          "receive": 0.6000000284984708,
          "_blocked_queueing": 0.4389999667182565,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_connectionId": "1726423",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "script",
          "stack": {
            "callFrames": [
              {
                "functionName": "dwAjaxToServer",
                "scriptId": "74",
                "url": "https://ekat.festool.de/login/WEB-RES/js/base.js_shop_7.26.1.5.js",
                "lineNumber": 16016,
                "columnNumber": 12
              },
              {
                "functionName": "dwAjaxSendUpdates",
                "scriptId": "74",
                "url": "https://ekat.festool.de/login/WEB-RES/js/base.js_shop_7.26.1.5.js",
                "lineNumber": 15812,
                "columnNumber": 8
              },
              {
                "functionName": "dwAjaxAddUpdate",
                "scriptId": "74",
                "url": "https://ekat.festool.de/login/WEB-RES/js/base.js_shop_7.26.1.5.js",
                "lineNumber": 15751,
                "columnNumber": 8
              },
              {
                "functionName": "dwAjaxStaticConnectionXmlHttp.onreadystatechange",
                "scriptId": "74",
                "url": "https://ekat.festool.de/login/WEB-RES/js/base.js_shop_7.26.1.5.js",
                "lineNumber": 15845,
                "columnNumber": 28
              }
            ],
            "parent": {
              "description": "XMLHttpRequest.send",
              "callFrames": [
                {
                  "functionName": "",
                  "scriptId": "74",
                  "url": "https://ekat.festool.de/login/WEB-RES/js/base.js_shop_7.26.1.5.js",
                  "lineNumber": 15869,
                  "columnNumber": 38
                }
              ],
              "parent": {
                "description": "setTimeout",
                "callFrames": [
                  {
                    "functionName": "dwAjaxNewStaticConnection",
                    "scriptId": "74",
                    "url": "https://ekat.festool.de/login/WEB-RES/js/base.js_shop_7.26.1.5.js",
                    "lineNumber": 15826,
                    "columnNumber": 4
                  },
                  {
                    "functionName": "dwAjaxStaticConnectionXmlHttp.onreadystatechange",
                    "scriptId": "74",
                    "url": "https://ekat.festool.de/login/WEB-RES/js/base.js_shop_7.26.1.5.js",
                    "lineNumber": 15865,
                    "columnNumber": 20
                  }
                ],
                "parent": {
                  "description": "XMLHttpRequest.send",
                  "callFrames": [
                    {
                      "functionName": "",
                      "scriptId": "74",
                      "url": "https://ekat.festool.de/login/WEB-RES/js/base.js_shop_7.26.1.5.js",
                      "lineNumber": 15869,
                      "columnNumber": 38
                    }
                  ],
                  "parent": {
                    "description": "setTimeout",
                    "callFrames": [
                      {
                        "functionName": "dwAjaxNewStaticConnection",
                        "scriptId": "74",
                        "url": "https://ekat.festool.de/login/WEB-RES/js/base.js_shop_7.26.1.5.js",
                        "lineNumber": 15826,
                        "columnNumber": 4
                      },
                      {
                        "functionName": "dwFrameworkInitFrameworkFinished",
                        "scriptId": "74",
                        "url": "https://ekat.festool.de/login/WEB-RES/js/base.js_shop_7.26.1.5.js",
                        "lineNumber": 7285,
                        "columnNumber": 8
                      },
                      {
                        "functionName": "init",
                        "scriptId": "79",
                        "url": "https://ekat.festool.de/login/app?__bk_&__windowid=IRW3104379&__rid=FOE1787216989423",
                        "lineNumber": 12,
                        "columnNumber": 2432
                      },
                      {
                        "functionName": "onload",
                        "scriptId": "95",
                        "url": "https://ekat.festool.de/login/app?__bk_&__windowid=IRW3104379&__rid=FOE1787216989423#2VFB2144C915D47DFAD66CC73CEC1F7E17E1D29351DB45EA618EEFB7B1BB136D42B8044FCE28E6056D",
                        "lineNumber": 12,
                        "columnNumber": 3859
                      }
                    ]
                  }
                }
              }
            }
          }
        },
        "_priority": "High",
        "_resourceType": "xhr",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "POST",
          "url": "https://ekat.festool.de/login/ajax",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": ":authority",
              "value": "ekat.festool.de"
            },
            {
              "name": ":method",
              "value": "POST"
            },
            {
              "name": ":path",
              "value": "/login/ajax"
            },
            {
              "name": ":scheme",
              "value": "https"
            },
            {
              "name": "accept",
              "value": "*/*"
            },
            {
              "name": "accept-encoding",
              "value": "gzip, deflate, br, zstd"
            },
            {
              "name": "accept-language",
              "value": "en-GB,en-US;q=0.9,en;q=0.8"
            },
            {
              "name": "cache-control",
              "value": "no-cache,no-store,must-revalidate,post-check=0,pre-check=0"
            },
            {
              "name": "content-length",
              "value": "62"
            },
            {
              "name": "content-type",
              "value": "text/plain; charset=UTF-8"
            },
            {
              "name": "expires",
              "value": "0"
            },
            {
              "name": "origin",
              "value": "https://ekat.festool.de"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "pragma",
              "value": "no-cache"
            },
            {
              "name": "priority",
              "value": "u=1, i"
            },
            {
              "name": "referer",
              "value": "https://ekat.festool.de/login/app?__bk_&__windowid=IRW3104379&__rid=FOE1787216989423"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            },
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "sec-fetch-dest",
              "value": "empty"
            },
            {
              "name": "sec-fetch-mode",
              "value": "cors"
            },
            {
              "name": "sec-fetch-site",
              "value": "same-origin"
            },
            {
              "name": "user-agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            }
          ],
          "queryString": [],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 62,
          "postData": {
            "mimeType": "text/plain; charset=UTF-8",
            "text": "currentBrowserRootWindow@DW@IRW3104379@DW@1388@DW@1209@DX@ping"
          }
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://ekat.festool.de"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "cache-control",
              "value": "no-cache,no-store,must-revalidate,post-check=0,pre-check=0"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "content-length",
              "value": "2091"
            },
            {
              "name": "content-type",
              "value": "text/html;charset=UTF-8"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 09:09:51 GMT"
            },
            {
              "name": "expires",
              "value": "Thu, 01 Jan 1970 00:00:00 GMT"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "pragma",
              "value": "no-cache"
            },
            {
              "name": "vary",
              "value": "Origin"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "x-robots-tag",
              "value": "noindex"
            }
          ],
          "cookies": [],
          "content": {
            "size": 22667,
            "mimeType": "text/html",
            "text": "genericRemoveNode@DW@SVO3105943@DW@0|0@DW@1@DX@genericRemoveNode@DW@SVO3105943@DW@0|0@DW@0@DX@genericInsertNode@DW@SVO3105943@DW@0|0@DW@0@DW@<div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:42px;text-align:center;height:32px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-16px;top:50%;left:50%;width:32px;margin-top:-16px;margin-bottom:0px;margin-right:5px;height:32px\" class=\"guilayoutgridbag_container_padded\"><div style=\"padding-top:0px;margin:auto;padding-left:0px;width:32px;padding-bottom:0px;height:32px;padding-right:0px\" class=\"guiimage\" id=\"SVI4955769\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=ba_image_4A442C18BB9667967DFB206DCF66322C\" alt=\"\" id=\"SVI4955769_img\"></div></div></div>@DX@genericInsertNode@DW@SVO3105943@DW@0|0@DW@1@DW@<div style=\"background-color:transparent;top:32px;left:0px;vertical-align:middle;width:144px;text-align:center;height:24px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-67px;top:50%;left:50%;width:134px;margin-top:-8px;margin-bottom:0px;margin-right:5px;height:20px\" class=\"guilayoutgridbag_container_padded\"><div style=\"padding-top:0px;margin:auto;padding-left:0px;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel\" id=\"HSY4955769\">Service-Mediacenter</div></div></div>@DX@genericRemoveNode@DW@SJC3104713@DW@0|0@DW@1@DX@genericRemoveNode@DW@SJC3104713@DW@0|0@DW@0@DX@genericInsertNode@DW@SJC3104713@DW@0|0@DW@0@DW@<div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:42px;text-align:center;height:32px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-16px;top:50%;left:50%;width:32px;margin-top:-16px;margin-bottom:0px;margin-right:5px;height:32px\" class=\"guilayoutgridbag_container_padded\"><div style=\"padding-top:0px;margin:auto;padding-left:0px;width:32px;padding-bottom:0px;height:32px;padding-right:0px\" class=\"guiimage\" id=\"NOM4955773\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=bi_image_class_image_de.docware.framework.modules.gui.design.b_defaultimages_material_Catalogue_32px_normal.png_grayedOut_0B02CBCFF1642DE1C50343CC9A91644C\" alt=\"\" id=\"NOM4955773_img\"></div></div></div>@DX@genericInsertNode@DW@SJC3104713@DW@0|0@DW@1@DW@<div style=\"background-color:transparent;top:32px;left:0px;vertical-align:middle;width:76px;text-align:center;height:24px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-33px;top:50%;left:50%;width:66px;margin-top:-8px;margin-bottom:0px;margin-right:5px;height:20px\" class=\"guilayoutgridbag_container_padded\"><div style=\"padding-top:0px;margin:auto;padding-left:0px;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel\" id=\"GYD4955773\">Catalogue</div></div></div>@DX@genericRemoveNode@DW@CPJ3105943@DW@0|0@DW@1@DX@genericRemoveNode@DW@CPJ3105943@DW@0|0@DW@0@DX@genericInsertNode@DW@CPJ3105943@DW@0|0@DW@0@DW@<div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:42px;text-align:center;height:32px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-16px;top:50%;left:50%;width:32px;margin-top:-16px;margin-bottom:0px;margin-right:5px;height:32px\" class=\"guilayoutgridbag_container_padded\"><div style=\"padding-top:0px;margin:auto;padding-left:0px;width:32px;padding-bottom:0px;height:32px;padding-right:0px\" class=\"guiimage\" id=\"RDG4955773\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=ba_image_85D689790F96B1A5E7BA4CF36E8E4AF0\" alt=\"\" id=\"RDG4955773_img\"></div></div></div>@DX@genericInsertNode@DW@CPJ3105943@DW@0|0@DW@1@DW@<div style=\"background-color:transparent;top:32px;left:0px;vertical-align:middle;width:132px;text-align:center;height:24px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-60px;top:50%;left:49.999%;width:121px;margin-top:-8px;margin-bottom:0px;margin-right:5px;height:20px\" class=\"guilayoutgridbag_container_padded\"><div style=\"padding-top:0px;margin:auto;padding-left:0px;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel\" id=\"QFO4955773\">Catalogue of parts</div></div></div>@DX@genericRemoveNode@DW@XDM3105943@DW@0|0@DW@1@DX@genericRemoveNode@DW@XDM3105943@DW@0|0@DW@0@DX@genericInsertNode@DW@XDM3105943@DW@0|0@DW@0@DW@<div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:42px;text-align:center;height:32px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-16px;top:50%;left:50%;width:32px;margin-top:-16px;margin-bottom:0px;margin-right:5px;height:32px\" class=\"guilayoutgridbag_container_padded\"><div style=\"padding-top:0px;margin:auto;padding-left:0px;width:32px;padding-bottom:0px;height:32px;padding-right:0px\" class=\"guiimage\" id=\"TMT4955773\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=ba_image_3BF40FA40647BDB9724ACB6BA862FB64\" alt=\"\" id=\"TMT4955773_img\"></div></div></div>@DX@genericInsertNode@DW@XDM3105943@DW@0|0@DW@1@DW@<div style=\"background-color:transparent;top:32px;left:0px;vertical-align:middle;width:56px;text-align:center;height:24px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-22px;top:50%;left:49.999%;width:45px;margin-top:-8px;margin-bottom:0px;margin-right:5px;height:20px\" class=\"guilayoutgridbag_container_padded\"><div style=\"padding-top:0px;margin:auto;padding-left:0px;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel\" id=\"WFG4955773\">Search</div></div></div>@DX@setStyle@DW@WFG4955773@DW@padding-top@DW@0px@DX@genericSetNodeStyle@DW@XDM3105943@DW@0|0@DW@width@DW@56px@DX@genericSetNodeStyle@DW@XDM3105943@DW@0|0@DW@margin-left@DW@-28px@DX@genericSetNodeStyle@DW@XDM3105943@DW@0|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@XDM3105943@DW@0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@XDM3105943@DW@0|0@DW@height@DW@56px@DX@genericSetNodeStyle@DW@XDM3105943@DW@0|0@DW@margin-top@DW@-28px@DX@genericSetNodeStyle@DW@XDM3105943@DW@0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@XDM3105943@DW@0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@XDM3105943@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@XDM3105943@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@XDM3105943@DW@0|0|0@DW@height@DW@32px@DX@genericSetNodeStyle@DW@XDM3105943@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@XDM3105943@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@XDM3105943@DW@0|0|0@DW@width@DW@56px@DX@genericSetNodeStyle@DW@XDM3105943@DW@0|0|0|0@DW@height@DW@32px@DX@genericSetNodeStyle@DW@XDM3105943@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@XDM3105943@DW@0|0|0|0@DW@margin-top@DW@-16px@DX@genericRemoveNodeStyle@DW@XDM3105943@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@XDM3105943@DW@0|0|0|0@DW@width@DW@32px@DX@genericSetNodeStyle@DW@XDM3105943@DW@0|0|0|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@XDM3105943@DW@0|0|0|0@DW@margin-left@DW@-16px@DX@genericRemoveNodeStyle@DW@XDM3105943@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@XDM3105943@DW@0|0|1@DW@top@DW@32px@DX@genericRemoveNodeStyle@DW@XDM3105943@DW@0|0|1@DW@bottom@DX@genericSetNodeStyle@DW@XDM3105943@DW@0|0|1@DW@height@DW@24px@DX@genericSetNodeStyle@DW@XDM3105943@DW@0|0|1@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@XDM3105943@DW@0|0|1@DW@right@DX@genericSetNodeStyle@DW@XDM3105943@DW@0|0|1@DW@width@DW@56px@DX@genericSetNodeStyle@DW@XDM3105943@DW@0|0|1|0@DW@height@DW@20px@DX@genericSetNodeStyle@DW@XDM3105943@DW@0|0|1|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@XDM3105943@DW@0|0|1|0@DW@margin-top@DW@-8px@DX@genericRemoveNodeStyle@DW@XDM3105943@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@XDM3105943@DW@0|0|1|0@DW@width@DW@45px@DX@genericSetNodeStyle@DW@XDM3105943@DW@0|0|1|0@DW@left@DW@49.999%@DX@genericSetNodeStyle@DW@XDM3105943@DW@0|0|1|0@DW@margin-left@DW@-22px@DX@genericRemoveNodeStyle@DW@XDM3105943@DW@0|0|1|0@DW@right@DX@genericSetNodeStyle@DW@IBI3104381@DW@0|0@DW@width@DW@70px@DX@genericSetNodeStyle@DW@IBI3104381@DW@0|0@DW@margin-left@DW@-35px@DX@genericSetNodeStyle@DW@IBI3104381@DW@0|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@IBI3104381@DW@0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@IBI3104381@DW@0|0@DW@height@DW@64px@DX@genericSetNodeStyle@DW@IBI3104381@DW@0|0@DW@margin-top@DW@-32px@DX@genericSetNodeStyle@DW@IBI3104381@DW@0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@IBI3104381@DW@0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@IBI3104381@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@IBI3104381@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@IBI3104381@DW@0|0|0@DW@height@DW@64px@DX@genericSetNodeStyle@DW@IBI3104381@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@IBI3104381@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@IBI3104381@DW@0|0|0@DW@width@DW@70px@DX@genericSetNodeStyle@DW@IBI3104381@DW@0|0|0|0@DW@height@DW@56px@DX@genericSetNodeStyle@DW@IBI3104381@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@IBI3104381@DW@0|0|0|0@DW@margin-top@DW@-28px@DX@genericRemoveNodeStyle@DW@IBI3104381@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@IBI3104381@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@IBI3104381@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@IBI3104381@DW@0|0|0|0@DW@margin-left@DW@7px@DX@genericSetNodeStyle@DW@IBI3104381@DW@0|0|0|0@DW@margin-right@DW@7px@DX@genericRemoveNodeStyle@DW@IBI3104381@DW@0|0|0|0@DW@width@DX@setStyle@DW@QFO4955773@DW@padding-top@DW@0px@DX@genericSetNodeStyle@DW@CPJ3105943@DW@0|0@DW@width@DW@132px@DX@genericSetNodeStyle@DW@CPJ3105943@DW@0|0@DW@margin-left@DW@-66px@DX@genericSetNodeStyle@DW@CPJ3105943@DW@0|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@CPJ3105943@DW@0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@CPJ3105943@DW@0|0@DW@height@DW@56px@DX@genericSetNodeStyle@DW@CPJ3105943@DW@0|0@DW@margin-top@DW@-28px@DX@genericSetNodeStyle@DW@CPJ3105943@DW@0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@CPJ3105943@DW@0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@CPJ3105943@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@CPJ3105943@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@CPJ3105943@DW@0|0|0@DW@height@DW@32px@DX@genericSetNodeStyle@DW@CPJ3105943@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@CPJ3105943@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@CPJ3105943@DW@0|0|0@DW@width@DW@132px@DX@genericSetNodeStyle@DW@CPJ3105943@DW@0|0|0|0@DW@height@DW@32px@DX@genericSetNodeStyle@DW@CPJ3105943@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@CPJ3105943@DW@0|0|0|0@DW@margin-top@DW@-16px@DX@genericRemoveNodeStyle@DW@CPJ3105943@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@CPJ3105943@DW@0|0|0|0@DW@width@DW@32px@DX@genericSetNodeStyle@DW@CPJ3105943@DW@0|0|0|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@CPJ3105943@DW@0|0|0|0@DW@margin-left@DW@-16px@DX@genericRemoveNodeStyle@DW@CPJ3105943@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@CPJ3105943@DW@0|0|1@DW@top@DW@32px@DX@genericRemoveNodeStyle@DW@CPJ3105943@DW@0|0|1@DW@bottom@DX@genericSetNodeStyle@DW@CPJ3105943@DW@0|0|1@DW@height@DW@24px@DX@genericSetNodeStyle@DW@CPJ3105943@DW@0|0|1@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@CPJ3105943@DW@0|0|1@DW@right@DX@genericSetNodeStyle@DW@CPJ3105943@DW@0|0|1@DW@width@DW@132px@DX@genericSetNodeStyle@DW@CPJ3105943@DW@0|0|1|0@DW@height@DW@20px@DX@genericSetNodeStyle@DW@CPJ3105943@DW@0|0|1|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@CPJ3105943@DW@0|0|1|0@DW@margin-top@DW@-8px@DX@genericRemoveNodeStyle@DW@CPJ3105943@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@CPJ3105943@DW@0|0|1|0@DW@width@DW@121px@DX@genericSetNodeStyle@DW@CPJ3105943@DW@0|0|1|0@DW@left@DW@49.999%@DX@genericSetNodeStyle@DW@CPJ3105943@DW@0|0|1|0@DW@margin-left@DW@-60px@DX@genericRemoveNodeStyle@DW@CPJ3105943@DW@0|0|1|0@DW@right@DX@setStyle@DW@HSY4955769@DW@padding-top@DW@0px@DX@genericSetNodeStyle@DW@SVO3105943@DW@0|0@DW@width@DW@144px@DX@genericSetNodeStyle@DW@SVO3105943@DW@0|0@DW@margin-left@DW@-72px@DX@genericSetNodeStyle@DW@SVO3105943@DW@0|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@SVO3105943@DW@0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@SVO3105943@DW@0|0@DW@height@DW@56px@DX@genericSetNodeStyle@DW@SVO3105943@DW@0|0@DW@margin-top@DW@-28px@DX@genericSetNodeStyle@DW@SVO3105943@DW@0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@SVO3105943@DW@0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@SVO3105943@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@SVO3105943@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@SVO3105943@DW@0|0|0@DW@height@DW@32px@DX@genericSetNodeStyle@DW@SVO3105943@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@SVO3105943@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@SVO3105943@DW@0|0|0@DW@width@DW@144px@DX@genericSetNodeStyle@DW@SVO3105943@DW@0|0|0|0@DW@height@DW@32px@DX@genericSetNodeStyle@DW@SVO3105943@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@SVO3105943@DW@0|0|0|0@DW@margin-top@DW@-16px@DX@genericRemoveNodeStyle@DW@SVO3105943@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@SVO3105943@DW@0|0|0|0@DW@width@DW@32px@DX@genericSetNodeStyle@DW@SVO3105943@DW@0|0|0|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@SVO3105943@DW@0|0|0|0@DW@margin-left@DW@-16px@DX@genericRemoveNodeStyle@DW@SVO3105943@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@SVO3105943@DW@0|0|1@DW@top@DW@32px@DX@genericRemoveNodeStyle@DW@SVO3105943@DW@0|0|1@DW@bottom@DX@genericSetNodeStyle@DW@SVO3105943@DW@0|0|1@DW@height@DW@24px@DX@genericSetNodeStyle@DW@SVO3105943@DW@0|0|1@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@SVO3105943@DW@0|0|1@DW@right@DX@genericSetNodeStyle@DW@SVO3105943@DW@0|0|1@DW@width@DW@144px@DX@genericSetNodeStyle@DW@SVO3105943@DW@0|0|1|0@DW@height@DW@20px@DX@genericSetNodeStyle@DW@SVO3105943@DW@0|0|1|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@SVO3105943@DW@0|0|1|0@DW@margin-top@DW@-8px@DX@genericRemoveNodeStyle@DW@SVO3105943@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@SVO3105943@DW@0|0|1|0@DW@width@DW@134px@DX@genericSetNodeStyle@DW@SVO3105943@DW@0|0|1|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@SVO3105943@DW@0|0|1|0@DW@margin-left@DW@-67px@DX@genericRemoveNodeStyle@DW@SVO3105943@DW@0|0|1|0@DW@right@DX@setStyle@DW@GYD4955773@DW@padding-top@DW@0px@DX@genericSetNodeStyle@DW@SJC3104713@DW@0|0@DW@width@DW@76px@DX@genericSetNodeStyle@DW@SJC3104713@DW@0|0@DW@margin-left@DW@-38px@DX@genericSetNodeStyle@DW@SJC3104713@DW@0|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@SJC3104713@DW@0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@SJC3104713@DW@0|0@DW@height@DW@56px@DX@genericSetNodeStyle@DW@SJC3104713@DW@0|0@DW@margin-top@DW@-28px@DX@genericSetNodeStyle@DW@SJC3104713@DW@0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@SJC3104713@DW@0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@SJC3104713@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@SJC3104713@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@SJC3104713@DW@0|0|0@DW@height@DW@32px@DX@genericSetNodeStyle@DW@SJC3104713@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@SJC3104713@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@SJC3104713@DW@0|0|0@DW@width@DW@76px@DX@genericSetNodeStyle@DW@SJC3104713@DW@0|0|0|0@DW@height@DW@32px@DX@genericSetNodeStyle@DW@SJC3104713@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@SJC3104713@DW@0|0|0|0@DW@margin-top@DW@-16px@DX@genericRemoveNodeStyle@DW@SJC3104713@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@SJC3104713@DW@0|0|0|0@DW@width@DW@32px@DX@genericSetNodeStyle@DW@SJC3104713@DW@0|0|0|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@SJC3104713@DW@0|0|0|0@DW@margin-left@DW@-16px@DX@genericRemoveNodeStyle@DW@SJC3104713@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@SJC3104713@DW@0|0|1@DW@top@DW@32px@DX@genericRemoveNodeStyle@DW@SJC3104713@DW@0|0|1@DW@bottom@DX@genericSetNodeStyle@DW@SJC3104713@DW@0|0|1@DW@height@DW@24px@DX@genericSetNodeStyle@DW@SJC3104713@DW@0|0|1@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@SJC3104713@DW@0|0|1@DW@right@DX@genericSetNodeStyle@DW@SJC3104713@DW@0|0|1@DW@width@DW@76px@DX@genericSetNodeStyle@DW@SJC3104713@DW@0|0|1|0@DW@height@DW@20px@DX@genericSetNodeStyle@DW@SJC3104713@DW@0|0|1|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@SJC3104713@DW@0|0|1|0@DW@margin-top@DW@-8px@DX@genericRemoveNodeStyle@DW@SJC3104713@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@SJC3104713@DW@0|0|1|0@DW@width@DW@66px@DX@genericSetNodeStyle@DW@SJC3104713@DW@0|0|1|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@SJC3104713@DW@0|0|1|0@DW@margin-left@DW@-33px@DX@genericRemoveNodeStyle@DW@SJC3104713@DW@0|0|1|0@DW@right@DX@genericSetNodeStyle@DW@WHF3104784@DW@0|0@DW@width@DW@292px@DX@genericSetNodeStyle@DW@WHF3104784@DW@0|0@DW@margin-left@DW@-146px@DX@genericSetNodeStyle@DW@WHF3104784@DW@0|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@WHF3104784@DW@0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@WHF3104784@DW@0|0@DW@height@DW@56px@DX@genericSetNodeStyle@DW@WHF3104784@DW@0|0@DW@margin-top@DW@-28px@DX@genericSetNodeStyle@DW@WHF3104784@DW@0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@WHF3104784@DW@0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@WHF3104784@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@WHF3104784@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@WHF3104784@DW@0|0|0@DW@height@DW@56px@DX@genericSetNodeStyle@DW@WHF3104784@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@WHF3104784@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@WHF3104784@DW@0|0|0@DW@width@DW@140px@DX@genericSetNodeStyle@DW@WHF3104784@DW@0|0|0|0@DW@height@DW@56px@DX@genericSetNodeStyle@DW@WHF3104784@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@WHF3104784@DW@0|0|0|0@DW@margin-top@DW@-28px@DX@genericRemoveNodeStyle@DW@WHF3104784@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@WHF3104784@DW@0|0|0|0@DW@width@DW@132px@DX@genericSetNodeStyle@DW@WHF3104784@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@WHF3104784@DW@0|0|0|0@DW@margin-left@DW@4px@DX@genericRemoveNodeStyle@DW@WHF3104784@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@WHF3104784@DW@0|0|1@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@WHF3104784@DW@0|0|1@DW@bottom@DX@genericSetNodeStyle@DW@WHF3104784@DW@0|0|1@DW@height@DW@56px@DX@genericSetNodeStyle@DW@WHF3104784@DW@0|0|1@DW@left@DW@140px@DX@genericRemoveNodeStyle@DW@WHF3104784@DW@0|0|1@DW@right@DX@genericSetNodeStyle@DW@WHF3104784@DW@0|0|1@DW@width@DW@152px@DX@genericSetNodeStyle@DW@WHF3104784@DW@0|0|1|0@DW@height@DW@56px@DX@genericSetNodeStyle@DW@WHF3104784@DW@0|0|1|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@WHF3104784@DW@0|0|1|0@DW@margin-top@DW@-28px@DX@genericRemoveNodeStyle@DW@WHF3104784@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@WHF3104784@DW@0|0|1|0@DW@width@DW@144px@DX@genericSetNodeStyle@DW@WHF3104784@DW@0|0|1|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@WHF3104784@DW@0|0|1|0@DW@margin-left@DW@4px@DX@genericRemoveNodeStyle@DW@WHF3104784@DW@0|0|1|0@DW@right@DX@genericSetNodeStyle@DW@WHF3104784@DW@0|0|2@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@WHF3104784@DW@0|0|2@DW@bottom@DX@genericSetNodeStyle@DW@WHF3104784@DW@0|0|2@DW@height@DW@56px@DX@genericSetNodeStyle@DW@WHF3104784@DW@0|0|2@DW@left@DW@292px@DX@genericRemoveNodeStyle@DW@WHF3104784@DW@0|0|2@DW@right@DX@genericSetNodeStyle@DW@WHF3104784@DW@0|0|2@DW@width@DW@0px@DX@genericSetNodeStyle@DW@WHF3104784@DW@0|0|2|0@DW@height@DW@0px@DX@genericSetNodeStyle@DW@WHF3104784@DW@0|0|2|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@WHF3104784@DW@0|0|2|0@DW@margin-top@DW@0px@DX@genericRemoveNodeStyle@DW@WHF3104784@DW@0|0|2|0@DW@bottom@DX@genericSetNodeStyle@DW@WHF3104784@DW@0|0|2|0@DW@width@DW@0px@DX@genericSetNodeStyle@DW@WHF3104784@DW@0|0|2|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@WHF3104784@DW@0|0|2|0@DW@margin-left@DW@4px@DX@genericRemoveNodeStyle@DW@WHF3104784@DW@0|0|2|0@DW@right@DX@genericSetNodeStyle@DW@BJO3104379@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@BJO3104379@DW@0|0@DW@right@DW@0@DX@genericRemoveNodeStyle@DW@BJO3104379@DW@0|0@DW@margin-left@DX@genericRemoveNodeStyle@DW@BJO3104379@DW@0|0@DW@width@DX@genericSetNodeStyle@DW@BJO3104379@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@BJO3104379@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@BJO3104379@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@BJO3104379@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@BJO3104379@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@BJO3104379@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@BJO3104379@DW@0|0|0@DW@height@DW@64px@DX@genericSetNodeStyle@DW@BJO3104379@DW@0|0|0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@BJO3104379@DW@0|0|0@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@BJO3104379@DW@0|0|0@DW@width@DX@genericSetNodeStyle@DW@BJO3104379@DW@0|0|0|0@DW@height@DW@64px@DX@genericSetNodeStyle@DW@BJO3104379@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@BJO3104379@DW@0|0|0|0@DW@margin-top@DW@-32px@DX@genericRemoveNodeStyle@DW@BJO3104379@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@BJO3104379@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@BJO3104379@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@BJO3104379@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@BJO3104379@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@BJO3104379@DW@0|0|0|0@DW@width@DX@genericSetNodeStyle@DW@BJO3104379@DW@0|0|1@DW@top@DW@64px@DX@genericRemoveNodeStyle@DW@BJO3104379@DW@0|0|1@DW@bottom@DX@genericSetNodeStyle@DW@BJO3104379@DW@0|0|1@DW@height@DW@5px@DX@genericSetNodeStyle@DW@BJO3104379@DW@0|0|1@DW@left@DW@0px@DX@genericSetNodeStyle@DW@BJO3104379@DW@0|0|1@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@BJO3104379@DW@0|0|1@DW@width@DX@genericSetNodeStyle@DW@BJO3104379@DW@0|0|1|0@DW@height@DW@5px@DX@genericSetNodeStyle@DW@BJO3104379@DW@0|0|1|0@DW@top@DW@49.999%@DX@genericSetNodeStyle@DW@BJO3104379@DW@0|0|1|0@DW@margin-top@DW@-2px@DX@genericRemoveNodeStyle@DW@BJO3104379@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@BJO3104379@DW@0|0|1|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@BJO3104379@DW@0|0|1|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@BJO3104379@DW@0|0|1|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@BJO3104379@DW@0|0|1|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@BJO3104379@DW@0|0|1|0@DW@width@DX@genericSetNodeStyle@DW@BJO3104379@DW@0|0|2@DW@top@DW@69px@DX@genericSetNodeStyle@DW@BJO3104379@DW@0|0|2@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@BJO3104379@DW@0|0|2@DW@height@DX@genericSetNodeStyle@DW@BJO3104379@DW@0|0|2@DW@left@DW@0px@DX@genericSetNodeStyle@DW@BJO3104379@DW@0|0|2@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@BJO3104379@DW@0|0|2@DW@width@DX@genericSetNodeStyle@DW@BJO3104379@DW@0|0|2|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@BJO3104379@DW@0|0|2|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@BJO3104379@DW@0|0|2|0@DW@margin-top@DW@0px@DX@genericSetNodeStyle@DW@BJO3104379@DW@0|0|2|0@DW@margin-bottom@DW@0px@DX@genericRemoveNodeStyle@DW@BJO3104379@DW@0|0|2|0@DW@height@DX@genericSetNodeStyle@DW@BJO3104379@DW@0|0|2|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@BJO3104379@DW@0|0|2|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@BJO3104379@DW@0|0|2|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@BJO3104379@DW@0|0|2|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@BJO3104379@DW@0|0|2|0@DW@width@DX@setChildThreadCount@DW@0"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": -1,
          "_transferSize": 2162,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:11.478Z",
        "time": 49.171000020578504,
        "timings": {
          "blocked": 1.0640000459253787,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0.33999999999999997,
          "wait": 47.14900004192442,
          "receive": 0.6179999327287078,
          "_blocked_queueing": 0.5870000459253788,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_connectionId": "1726423",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "other"
        },
        "_priority": "VeryHigh",
        "_resourceType": "document",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": ":authority",
              "value": "ekat.festool.de"
            },
            {
              "name": ":method",
              "value": "GET"
            },
            {
              "name": ":path",
              "value": "/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513"
            },
            {
              "name": ":scheme",
              "value": "https"
            },
            {
              "name": "accept",
              "value": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7"
            },
            {
              "name": "accept-encoding",
              "value": "gzip, deflate, br, zstd"
            },
            {
              "name": "accept-language",
              "value": "en-GB,en-US;q=0.9,en;q=0.8"
            },
            {
              "name": "cache-control",
              "value": "max-age=0"
            },
            {
              "name": "priority",
              "value": "u=0, i"
            },
            {
              "name": "referer",
              "value": "https://ekat.festool.de/ekat/app"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            },
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "sec-fetch-dest",
              "value": "iframe"
            },
            {
              "name": "sec-fetch-mode",
              "value": "navigate"
            },
            {
              "name": "sec-fetch-site",
              "value": "same-origin"
            },
            {
              "name": "upgrade-insecure-requests",
              "value": "1"
            },
            {
              "name": "user-agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            }
          ],
          "queryString": [
            {
              "name": "__bk_",
              "value": ""
            },
            {
              "name": "__windowid",
              "value": "TWM4965563"
            },
            {
              "name": "__rid",
              "value": "AQW1787216991513"
            }
          ],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "cache-control",
              "value": "no-cache,no-store,must-revalidate,post-check=0,pre-check=0"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "content-length",
              "value": "25636"
            },
            {
              "name": "content-type",
              "value": "text/html;charset=UTF-8"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 09:09:51 GMT"
            },
            {
              "name": "expires",
              "value": "Thu, 01 Jan 1970 00:00:00 GMT"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "pragma",
              "value": "no-cache"
            },
            {
              "name": "x-frame-options",
              "value": "sameorigin"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "x-robots-tag",
              "value": "noindex"
            }
          ],
          "cookies": [],
          "content": {
            "size": 412793,
            "mimeType": "text/html",
            "text": "<!DOCTYPE html>\n<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"><meta name=\"creator\" content=\"Application: &#39;Catalogue&#39;, Version: &#39;7.26.1.11&#39;, Date: &#39;30.06.2026&#39;, Copyright: &#39;Quanos Solutions GmbH 1999-2026&#39;\"><meta name=\"date\" content=\"Thu Aug 20 11:09:51 CEST 2026\"><meta http-equiv=\"Pragma\" content=\"no-cache\"><meta http-equiv=\"Expires\" content=\"Mon, 06 Jan 1990 00:00:01 GMT\"><meta name=\"format-detection\" content=\"telephone=no\"><meta name=\"viewport\" content=\"width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, target-densityDpi=160dpi\"><meta name=\"format-detection\" content=\"telephone=no\"><link rel=\"manifest\" href=\"manifest_Festool_en_GB.json\"><link rel=\"apple-touch-icon\" sizes=\"114x114\" href=\"WEB-RES/RESOURCES/themes/Festool/ios-144x144.png\"><link rel=\"shortcut icon\" href=\"WEB-RES/resource/resource?id=bi_image_DE3DE427471AC8B69E7CDE4A3201BE71\"><link rel=\"stylesheet\" type=\"text/css\" href=\"WEB-RES/css/style_Festool.css_javaviewer_7.26.1.11.css\"><script type=\"text/javascript\" src=\"WEB-RES/js/clipboard.js_javaviewer_7.26.1.11.js\"></script><script type=\"text/javascript\" src=\"WEB-RES/js/mdc.textfield.js_javaviewer_7.26.1.11.js\"></script><script type=\"text/javascript\" src=\"WEB-RES/js/inputmask.js_javaviewer_7.26.1.11.js\"></script><script type=\"text/javascript\" src=\"WEB-RES/js/base.js_javaviewer_7.26.1.11.js\"></script><script type=\"text/javascript\" src=\"WEB-RES/js/plugin.js_javaviewer_7.26.1.11.js\"></script><script type=\"text/javascript\" src=\"WEB-RES/js/html5-qrcode.min.js_javaviewer_7.26.1.11.js\"></script><script type=\"text/javascript\" src=\"WEB-RES/js/cropper.js_javaviewer_7.26.1.11.js\"></script><script type=\"text/javascript\" src=\"WEB-RES/js/components.js_javaviewer_7.26.1.11.js\"></script><script type=\"text/javascript\" src=\"WEB-RES/js/viewer/viewer.js_javaviewer_7.26.1.11.js\"></script><script type=\"text/javascript\">var currentlyOpenedContextMenuPopup;var currentlyOpenedComboboxPopup;</script><title>EKAT-Service</title><script type=\"text/javascript\">function init() {dwFrameworkInitFramework('WIH1785791371997',false,false,false,true,true,true,false,false,false,true,2,true,'none',true,true,false,true, false,false,'chrome','151.0.0.0', true,'<!DOCTYPE html>',true, [\"USER_LOGIN\",\"USER_LOGIN_PROPERTIES\"], false,true);dwResizeRegistryGetInstance().addControl('TBP4965620','TBP4965620','UKQ4965620');dwHelperScrollToStoredPosition('FEA4965620');dwDomSetGlobalStyleIfNotExists('.dw-hover-class-background-23386338633863:hover{ background-color: #8c8c8c !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-foreground-23303030303030:hover{ color: #000000 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-background-23643764376437:hover{ background-color: #d7d7d7 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-foreground-23303030303030:hover{ color: #000000 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-background-23643764376437:hover{ background-color: #d7d7d7 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-foreground-23303030303030:hover{ color: #000000 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-background-23643764376437:hover{ background-color: #d7d7d7 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-foreground-23303030303030:hover{ color: #000000 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-background-23643764376437:hover{ background-color: #d7d7d7 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-foreground-23303030303030:hover{ color: #000000 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-background-23643764376437:hover{ background-color: #d7d7d7 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-foreground-23303030303030:hover{ color: #000000 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-background-23643764376437:hover{ background-color: #d7d7d7 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-foreground-23303030303030:hover{ color: #000000 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-background-23643764376437:hover{ background-color: #d7d7d7 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-foreground-23303030303030:hover{ color: #000000 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-background-23643764376437:hover{ background-color: #d7d7d7 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-foreground-23303030303030:hover{ color: #000000 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-background-23643764376437:hover{ background-color: #d7d7d7 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-foreground-23303030303030:hover{ color: #000000 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-background-23643764376437:hover{ background-color: #d7d7d7 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-foreground-23303030303030:hover{ color: #000000 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-background-23643764376437:hover{ background-color: #d7d7d7 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-foreground-23303030303030:hover{ color: #000000 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-background-23643764376437:hover{ background-color: #d7d7d7 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-foreground-23303030303030:hover{ color: #000000 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-background-23643764376437:hover{ background-color: #d7d7d7 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-foreground-23303030303030:hover{ color: #000000 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-background-23643764376437:hover{ background-color: #d7d7d7 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-foreground-23303030303030:hover{ color: #000000 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-background-23643764376437:hover{ background-color: #d7d7d7 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-foreground-23303030303030:hover{ color: #000000 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-background-23643764376437:hover{ background-color: #d7d7d7 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-foreground-23303030303030:hover{ color: #000000 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-background-23643764376437:hover{ background-color: #d7d7d7 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-foreground-23303030303030:hover{ color: #000000 !important;}');\ndwResizeRegistryGetInstance().addControl('FEA4965620','FEA4965620','YQG4965620');dwScrollpaneInitializeScrollpaneFadings('FEA4965620', '{\"sides\":{\"TOP\":0,\"RIGHT\":0,\"LEFT\":0,\"BOTTOM\":0}}');dwResizeRegistryGetInstance().addControl('UWV4965620','UWV4965620','FSX4965620');dwResizeRegistryGetInstance().addControl('FSX4965620','FSX4965620','OQK4965620');dwResizeRegistryGetInstance().addControl('SQG4965733','SQG4965733','SHJ4965734');dwImageViewerInitStart('RNT4965681', 'WEB-RES/resource/resource?id=ba_image_EXPL_EKAT-START_2019.JPG__D1AA088F89B0FB8090187E6C0A94DB42', 2918, 1402, 750, 361, 'WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_imageviewer_overview_expand.png', 'WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_imageviewer_overview_collapse.png', 'WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_imageviewer_pan_closed_mobile.png', 'WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_imageviewer_pan_open_mobile.png', 'WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_imageviewer_pan_open_r_mobile.png', '56', '178', '202', '178', true, false, true, 512, false, false, true, 'WEB-RES/resource/resource?id=bi_image_framework_transparent_56ABE4CBC175363DA0810882244B34FF', false, 0, false, true, true, 'Show pan window', 'Hide pan window', true, false, 'viewerimage', false, false, false);dwImageViewerInitEnd('RNT4965681');dwResizeRegistryGetInstance().addControl('RNT4965681','RNT4965681','LAC4965940');dwResizeRegistryGetInstance().addControl('RFB4965940','RFB4965940','KPX4965940');dwResizeRegistryGetInstance().addControl('LAC4965940','LAC4965940','WAR4965620');dwResizeRegistryGetInstance().addControl('HSX4965633','HSX4965633','LSK4965620');dwHelperScrollToStoredPosition('MWJ4965656');dwDomSetGlobalStyleIfNotExists('.dw-hover-class-background-23643764376437:hover{ background-color: #d7d7d7 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-foreground-23303030303030:hover{ color: #000000 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-background-23643764376437:hover{ background-color: #d7d7d7 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-foreground-23303030303030:hover{ color: #000000 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-background-23643764376437:hover{ background-color: #d7d7d7 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-foreground-23303030303030:hover{ color: #000000 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-background-23643764376437:hover{ background-color: #d7d7d7 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-foreground-23303030303030:hover{ color: #000000 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-background-23643764376437:hover{ background-color: #d7d7d7 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-foreground-23303030303030:hover{ color: #000000 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-background-23643764376437:hover{ background-color: #d7d7d7 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-foreground-23303030303030:hover{ color: #000000 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-background-23643764376437:hover{ background-color: #d7d7d7 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-foreground-23303030303030:hover{ color: #000000 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-background-23643764376437:hover{ background-color: #d7d7d7 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-foreground-23303030303030:hover{ color: #000000 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-background-23643764376437:hover{ background-color: #d7d7d7 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-foreground-23303030303030:hover{ color: #000000 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-background-23643764376437:hover{ background-color: #d7d7d7 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-foreground-23303030303030:hover{ color: #000000 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-background-23643764376437:hover{ background-color: #d7d7d7 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-foreground-23303030303030:hover{ color: #000000 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-background-23643764376437:hover{ background-color: #d7d7d7 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-foreground-23303030303030:hover{ color: #000000 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-background-23643764376437:hover{ background-color: #d7d7d7 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-foreground-23303030303030:hover{ color: #000000 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-background-23643764376437:hover{ background-color: #d7d7d7 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-foreground-23303030303030:hover{ color: #000000 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-background-23643764376437:hover{ background-color: #d7d7d7 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-foreground-23303030303030:hover{ color: #000000 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-background-23643764376437:hover{ background-color: #d7d7d7 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-foreground-23303030303030:hover{ color: #000000 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-background-23643764376437:hover{ background-color: #d7d7d7 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-foreground-23303030303030:hover{ color: #000000 !important;}');\ndwResizeRegistryGetInstance().addControl('MWJ4965656','MWJ4965656','SPL4965656');dwScrollpaneInitializeScrollpaneFadings('MWJ4965656', '{\"sides\":{\"TOP\":0,\"LEFT\":0,\"BOTTOM\":0}}');dwHelperScrollToStoredPosition('IAP4965656');dwResizeRegistryGetInstance().addControl('IAP4965656','IAP4965656','SPL4965656');dwScrollpaneInitializeScrollpaneFadings('IAP4965656', '{\"sides\":{\"TOP\":0,\"LEFT\":0,\"BOTTOM\":0}}');dwResizeRegistryGetInstance().addControl('SPL4965656','SPL4965656','MAV4965620');dwResizeRegistryGetInstance().addControl('NMU4965620','NMU4965620','VXB4965633');dwResizeRegistryGetInstance().addControl('UXU4965633','UXU4965633','VXB4965633');dwResizeRegistryGetInstance().addControl('HMO4965633','HMO4965633','LSK4965620');dwSplitInitDragAndDrop();dwResizeRegistryGetInstance().addControl('LSK4965620','LSK4965620','HGO4965620');dwHelperScrollToStoredPosition('GYM4965654');dwResizeRegistryGetInstance().addControl('GYM4965654','GYM4965654','LWI4965654');dwScrollpaneInitializeScrollpaneFadings('GYM4965654', '{\"sides\":{\"TOP\":0,\"RIGHT\":0,\"LEFT\":0,\"BOTTOM\":0}}');dwResizeRegistryGetInstance().addControl('YAQ4965633','YAQ4965633','ERK4965633');dwResizeRegistryGetInstance().addControl('ERK4965633','ERK4965633','EOV4965633');dwResizeRegistryGetInstance().addControl('PBG4965620','PBG4965620','CUO4965620');dwResizeRegistryGetInstance().addControl('YIP4965875','YIP4965875','WLV4965875');dwFrameworkInitWindow('TWM4965563');dwDialogStoreDialogTranslations('error', 'An error occured', 'A communication error occurred. Would you like to try again?', 'Details', 'Copy to clipboard', 'Reload', null);dwDialogStoreDialogTranslations('lostConnection', 'Connection to server interrupted', 'A communication error occurred. Would you like to try again?', 'Details', 'Copy to clipboard', 'Reload', null);dwDialogStoreDialogTranslations('invalidSession', 'Invalid or expired session', 'Your running session is no longer valid.<br><br>This can have one of the following reasons:<br>* The session is expired.<br>* The browser has sent an outdated request.<br>* The server was restarted.<br><br>Please click \\\"Reload\\\".', 'Details', 'Copy to clipboard', 'Reload', null);dwDialogStoreDialogTranslations('message', null, null, null, null, 'Close', null);dwFrameworkEmbeddedInShop = true;dwFrameworkInitFrameworkFinished();}function dwRelayout() {}function dwRelayoutCleanup() {var invalidIdxs = dwFrameworkCheckIds(\"\");dwFrameworkCleanupDeprecatedMethods(\"dwRelayout\", DWFRAMEWORK_CLEANUP_RELAYOUT_FUNCTION_NAME, DWFRAMEWORK_CLEANUP_RELAYOUT_INNER_FUNCTION_NAME, invalidIdxs);}</script></head><body style=\"margin:0px;height:100%;overflow:hidden\" id=\"body\" tabWindowId=\"YYH1787216991580\" oncontextmenu=\"try {dwFwPreEv(event,false,this);dwFrameworkPreventContextMenu(event);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this); ;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onkeyup=\"try {dwFwPreEv(event,false,this); ;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this); ;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmousedown=\"try {dwFwPreEv(event,false,this); ;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onkeydown=\"try {dwFwPreEv(event,false,this);dwFrameworkPreventBackspaceHistoryBack(event);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onresize=\"try {dwFwPreEv(event,false,this);if (!dwFrameworkInitFinished) {return;} dwFrameworkOnResize();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onload=\"try {dwFwPreEv(event,false,this);init();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div style=\"width:100%;margin:0px;position:relative;height:100%\" id=\"dwmainwrapper\"><form style=\"width:100%;height:100%\" action=\"app\" id=\"TWM4965563_form\" method=\"post\" autocomplete=\"off\" onsubmit=\"try {dwFwPreEv(event,false,this);if (!dwFrameworkOnSubmit(event)) {return false;} dwUtilsDisableInput();setTimeout(dwUtilsShowWaitCursor, 1000);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><input name=\"__windowid\" value=\"TWM4965563\" type=\"hidden\"><input name=\"__rid\" value=\"RDC1787216991577\" type=\"hidden\"><div style=\"padding-top:0px;z-index:200;padding-left:0px;display:none;padding-bottom:0px;min-height:10px;padding-right:0px;min-width:10px\" class=\"guimenupopup\" id=\"BWN4965681\"><table style=\"padding:0;border-collapse:collapse;border-spacing:0\" border=\"0\"><tr style=\"border:0;padding-top:0px;padding-left:0px;padding-bottom:0px;min-height:36px;height:36px;padding-right:0px\" class=\"guimenuitem\" guiWindowId=\"TWM4965563\" id=\"AMC4965681\" onmouseenter=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwHelperSelectMenuItem(event,&#39;AMC4965681&#39;, &#39;BWN4965681&#39;);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwHelperSelectMenuItem(event,&#39;AMC4965681&#39;, &#39;BWN4965681&#39;);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><td style=\"background-color:transparent;padding-left:8px;padding-right:8px\"><img style=\"vertical-align:middle;width:16px;margin-right:4px;height:16px\" src=\"WEB-RES/resource/resource?id=bi_image_D217B38C2671F0B5F327052F5618462B\" alt=\"\"></td><td style=\"background-color:transparent;padding-left:8px;padding-right:8px\" class=\"guimenuitem-textcolumn\"><span id=\"AMC4965681_menuitemText\">Select section</span></td><td style=\"background-color:transparent;padding-left:8px;padding-right:8px\"></td><td style=\"background-color:transparent;vertical-align:top;padding:0;padding-left:8px;padding-right:8px\"></td></tr><tr style=\"border:0;padding-top:0px;padding-left:0px;padding-bottom:0px;min-height:36px;height:36px;padding-right:0px\" class=\"guimenuitem guimenuitem-disabled\" guiWindowId=\"TWM4965563\" disabled=\"disabled\" id=\"QJK4965681\"><td style=\"background-color:transparent;padding-left:8px;padding-right:8px\"><img style=\"vertical-align:middle;width:16px;margin-right:4px;height:16px\" src=\"WEB-RES/resource/resource?id=bi_image_bi_image_8E06F47E6AD85371A247FF4FB5E7885E_grayedOut_6E4B11E28C195D193D9170281A301596\" alt=\"\"></td><td style=\"background-color:transparent;padding-left:8px;padding-right:8px\" class=\"guimenuitem-textcolumn\"><span id=\"QJK4965681_menuitemText\">Adjust drawing to window width</span></td><td style=\"background-color:transparent;padding-left:8px;padding-right:8px\"></td><td style=\"background-color:transparent;vertical-align:top;padding:0;padding-left:8px;padding-right:8px\"></td></tr><tr style=\"display:none\" id=\"PRE4965681_menurow\"><td style=\"background-color:transparent;width:100%;padding-top:4px;padding-bottom:3px\" colspan=\"4\"><div style=\"width:100%;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px;display:none\" class=\"guiseparator_h\" id=\"PRE4965681\"></div></td></tr><tr style=\"border:0;padding-top:0px;padding-left:0px;display:none;padding-bottom:0px;min-height:36px;height:36px;padding-right:0px\" class=\"guimenuitem\" guiWindowId=\"TWM4965563\" id=\"PBR4965983\" onmouseenter=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwHelperSelectMenuItem(event,&#39;PBR4965983&#39;, &#39;BWN4965681&#39;);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwHelperSelectMenuItem(event,&#39;PBR4965983&#39;, &#39;BWN4965681&#39;);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><td style=\"background-color:transparent;padding-left:8px;padding-right:8px\"><img style=\"vertical-align:middle;width:16px;margin-right:4px;height:16px\" src=\"WEB-RES/resource/resource?id=bi_image_2F610A23A5037A3D6B4348916B76D938\" alt=\"\"></td><td style=\"background-color:transparent;padding-left:8px;padding-right:8px\" class=\"guimenuitem-textcolumn\"><span id=\"PBR4965983_menuitemText\">Put into the shopping cart</span></td><td style=\"background-color:transparent;padding-left:8px;padding-right:8px\"></td><td style=\"background-color:transparent;vertical-align:top;padding:0;padding-left:8px;padding-right:8px\"></td></tr><tr style=\"border:0;padding-top:0px;padding-left:0px;display:none;padding-bottom:0px;min-height:36px;height:36px;padding-right:0px\" class=\"guimenuitem\" guiWindowId=\"TWM4965563\" id=\"TWL4965983\" onmouseenter=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwHelperSelectMenuItem(event,&#39;TWL4965983&#39;, &#39;BWN4965681&#39;);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwHelperSelectMenuItem(event,&#39;TWL4965983&#39;, &#39;BWN4965681&#39;);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><td style=\"background-color:transparent;padding-left:8px;padding-right:8px\"><img style=\"vertical-align:middle;width:16px;margin-right:4px;height:16px\" src=\"WEB-RES/resource/resource?id=bi_image_2F610A23A5037A3D6B4348916B76D938\" alt=\"\"></td><td style=\"background-color:transparent;padding-left:8px;padding-right:8px\" class=\"guimenuitem-textcolumn\"><span id=\"TWL4965983_menuitemText\">Put all selected entries into the shopping cart</span></td><td style=\"background-color:transparent;padding-left:8px;padding-right:8px\"></td><td style=\"background-color:transparent;vertical-align:top;padding:0;padding-left:8px;padding-right:8px\"></td></tr><tr style=\"border:0;padding-top:0px;padding-left:0px;display:none;padding-bottom:0px;min-height:36px;height:36px;padding-right:0px\" class=\"guimenuitem\" guiWindowId=\"TWM4965563\" id=\"RGC4965983\" onmouseenter=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwHelperSelectMenuItem(event,&#39;RGC4965983&#39;, &#39;BWN4965681&#39;);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwHelperSelectMenuItem(event,&#39;RGC4965983&#39;, &#39;BWN4965681&#39;);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><td style=\"background-color:transparent;padding-left:8px;padding-right:8px\"><img style=\"vertical-align:middle;width:16px;margin-right:4px;height:16px\" src=\"WEB-RES/resource/resource?id=bi_image_0FD0AAD7977484C27B5D22FF54EDDA04\" alt=\"\"></td><td style=\"background-color:transparent;padding-left:8px;padding-right:8px\" class=\"guimenuitem-textcolumn\"><span id=\"RGC4965983_menuitemText\">Additional information</span></td><td style=\"background-color:transparent;padding-left:8px;padding-right:8px\"></td><td style=\"background-color:transparent;vertical-align:top;padding:0;padding-left:8px;padding-right:8px\"></td></tr><tr style=\"border:0;padding-top:0px;padding-left:0px;display:none;padding-bottom:0px;min-height:36px;height:36px;padding-right:0px\" class=\"guimenuitem\" guiWindowId=\"TWM4965563\" id=\"APD4965983\" onmouseenter=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwHelperSelectMenuItem(event,&#39;APD4965983&#39;, &#39;BWN4965681&#39;);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwHelperSelectMenuItem(event,&#39;APD4965983&#39;, &#39;BWN4965681&#39;);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><td style=\"background-color:transparent;padding-left:8px;padding-right:8px\"><img style=\"vertical-align:middle;width:16px;margin-right:4px;height:16px\" src=\"WEB-RES/resource/resource?id=bi_image_69CB6532CDB6672261C6B53AC7AB8966\" alt=\"\"></td><td style=\"background-color:transparent;padding-left:8px;padding-right:8px\" class=\"guimenuitem-textcolumn\"><span id=\"APD4965983_menuitemText\">Edit notes</span></td><td style=\"background-color:transparent;padding-left:8px;padding-right:8px\"></td><td style=\"background-color:transparent;vertical-align:top;padding:0;padding-left:8px;padding-right:8px\"></td></tr><tr style=\"border:0;padding-top:0px;padding-left:0px;padding-bottom:0px;min-height:36px;height:36px;padding-right:0px\" class=\"guimenuitem\" guiWindowId=\"TWM4965563\" id=\"GNR4965983\" onmouseenter=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwHelperSelectMenuItem(event,&#39;GNR4965983&#39;, &#39;BWN4965681&#39;);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwHelperSelectMenuItem(event,&#39;GNR4965983&#39;, &#39;BWN4965681&#39;);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><td style=\"background-color:transparent;padding-left:8px;padding-right:8px\"><img style=\"vertical-align:middle;width:16px;margin-right:4px;height:16px\" src=\"WEB-RES/resource/resource?id=bi_image_72D0010FEC637C6EB8420C205BD1BB35\" alt=\"\"></td><td style=\"background-color:transparent;padding-left:8px;padding-right:8px\" class=\"guimenuitem-textcolumn\"><span id=\"GNR4965983_menuitemText\">Print current drawing</span></td><td style=\"background-color:transparent;padding-left:8px;padding-right:8px\"></td><td style=\"background-color:transparent;vertical-align:top;padding:0;padding-left:8px;padding-right:8px\"></td></tr><tr style=\"border:0;padding-top:0px;padding-left:0px;display:none;padding-bottom:0px;min-height:36px;height:36px;padding-right:0px\" class=\"guimenuitem\" guiWindowId=\"TWM4965563\" id=\"CDL4965983\" onmouseenter=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwHelperSelectMenuItem(event,&#39;CDL4965983&#39;, &#39;BWN4965681&#39;);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwHelperSelectMenuItem(event,&#39;CDL4965983&#39;, &#39;BWN4965681&#39;);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><td style=\"background-color:transparent;padding-left:8px;padding-right:8px\"><img style=\"vertical-align:middle;width:16px;margin-right:4px;height:16px\" src=\"WEB-RES/resource/resource?id=bi_image_72D0010FEC637C6EB8420C205BD1BB35\" alt=\"\"></td><td style=\"background-color:transparent;padding-left:8px;padding-right:8px\" class=\"guimenuitem-textcolumn\"><span id=\"CDL4965983_menuitemText\">Print current drawing section...</span></td><td style=\"background-color:transparent;padding-left:8px;padding-right:8px\"></td><td style=\"background-color:transparent;vertical-align:top;padding:0;padding-left:8px;padding-right:8px\"></td></tr><tr style=\"border:0;padding-top:0px;padding-left:0px;display:none;padding-bottom:0px;min-height:36px;height:36px;padding-right:0px\" class=\"guimenuitem\" guiWindowId=\"TWM4965563\" id=\"OQA4965681\" onmouseenter=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwHelperSelectMenuItem(event,&#39;OQA4965681&#39;, &#39;BWN4965681&#39;);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwHelperSelectMenuItem(event,&#39;OQA4965681&#39;, &#39;BWN4965681&#39;);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><td style=\"background-color:transparent;padding-left:8px;padding-right:8px\"><img style=\"vertical-align:middle;width:16px;margin-right:4px;height:16px\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.controls.viewer.o_images_to_clipboard.png\" alt=\"\"></td><td style=\"background-color:transparent;padding-left:8px;padding-right:8px\" class=\"guimenuitem-textcolumn\"><span id=\"OQA4965681_menuitemText\">Copy</span></td><td style=\"background-color:transparent;padding-left:8px;padding-right:8px\"></td><td style=\"background-color:transparent;vertical-align:top;padding:0;padding-left:8px;padding-right:8px\"></td></tr></table></div><div style=\"padding-top:0px;z-index:200;padding-left:0px;display:none;padding-bottom:0px;min-height:36px;padding-right:0px\" class=\"guimenupopup\" id=\"XMR4965620\"><table style=\"padding:0;border-collapse:collapse;border-spacing:0\" border=\"0\"><tr style=\"border:0;padding-top:0px;padding-left:0px;padding-bottom:0px;min-height:36px;height:36px;padding-right:0px\" class=\"guimenuitem\" guiWindowId=\"TWM4965563\" id=\"JVN4965620\" onmouseenter=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwHelperSelectMenuItem(event,&#39;JVN4965620&#39;, &#39;XMR4965620&#39;);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwHelperSelectMenuItem(event,&#39;JVN4965620&#39;, &#39;XMR4965620&#39;);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><td style=\"background-color:transparent;padding-left:8px;padding-right:8px\"><img style=\"vertical-align:middle;width:16px;margin-right:4px;height:16px\" src=\"WEB-RES/resource/resource?id=bi_image_7BE97D3AFC2993939E9961A98C96E411\" alt=\"\"></td><td style=\"background-color:transparent;padding-left:8px;padding-right:8px\" class=\"guimenuitem-textcolumn\"><span id=\"JVN4965620_menuitemText\">Copy</span></td><td style=\"background-color:transparent;padding-left:8px;padding-right:8px\"></td><td style=\"background-color:transparent;vertical-align:top;padding:0;padding-left:8px;padding-right:8px\"></td></tr><tr style=\"display:none\" id=\"BJQ4965620_menurow\"><td style=\"background-color:transparent;width:100%;padding-top:4px;padding-bottom:3px\" colspan=\"4\"><div style=\"width:100%;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px;display:none\" class=\"guiseparator_h\" id=\"BJQ4965620\"></div></td></tr></table></div><div style=\"padding-top:0px;z-index:200;padding-left:0px;display:none;padding-bottom:0px;min-height:36px;padding-right:0px\" class=\"guimenupopup\" id=\"EMK4965620\"><table style=\"padding:0;border-collapse:collapse;border-spacing:0\" border=\"0\"><tr style=\"border:0;padding-top:0px;padding-left:0px;display:none;padding-bottom:0px;min-height:36px;height:36px;padding-right:0px\" class=\"guimenuitem\" guiWindowId=\"TWM4965563\" id=\"AQR4965620\" onmouseenter=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwHelperSelectMenuItem(event,&#39;AQR4965620&#39;, &#39;EMK4965620&#39;);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwHelperSelectMenuItem(event,&#39;AQR4965620&#39;, &#39;EMK4965620&#39;);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><td style=\"background-color:transparent;padding-left:8px;padding-right:8px\"><img style=\"vertical-align:middle;width:16px;margin-right:4px;height:16px\" src=\"WEB-RES/resource/resource?id=bi_image_EBF605A22CC3AFD197B4527DC7ABF5B8\" alt=\"\"></td><td style=\"background-color:transparent;padding-left:8px;padding-right:8px\" class=\"guimenuitem-textcolumn\"><span id=\"AQR4965620_menuitemText\">Search in parts list</span></td><td style=\"background-color:transparent;padding-left:8px;padding-right:8px\"></td><td style=\"background-color:transparent;vertical-align:top;padding:0;padding-left:8px;padding-right:8px\"></td></tr><tr style=\"border:0;padding-top:0px;padding-left:0px;display:none;padding-bottom:0px;min-height:36px;height:36px;padding-right:0px\" class=\"guimenuitem\" guiWindowId=\"TWM4965563\" id=\"PFM4965620\" onmouseenter=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwHelperSelectMenuItem(event,&#39;PFM4965620&#39;, &#39;EMK4965620&#39;);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwHelperSelectMenuItem(event,&#39;PFM4965620&#39;, &#39;EMK4965620&#39;);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><td style=\"background-color:transparent;padding-left:8px;padding-right:8px\"><img style=\"vertical-align:middle;width:16px;margin-right:4px;height:16px\" src=\"WEB-RES/resource/resource?id=bi_image_2F610A23A5037A3D6B4348916B76D938\" alt=\"\"></td><td style=\"background-color:transparent;padding-left:8px;padding-right:8px\" class=\"guimenuitem-textcolumn\"><span id=\"PFM4965620_menuitemText\">Put into the shopping cart</span></td><td style=\"background-color:transparent;padding-left:8px;padding-right:8px\"></td><td style=\"background-color:transparent;vertical-align:top;padding:0;padding-left:8px;padding-right:8px\"></td></tr><tr style=\"border:0;padding-top:0px;padding-left:0px;display:none;padding-bottom:0px;min-height:36px;height:36px;padding-right:0px\" class=\"guimenuitem\" guiWindowId=\"TWM4965563\" id=\"KOT4965620\" onmouseenter=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwHelperSelectMenuItem(event,&#39;KOT4965620&#39;, &#39;EMK4965620&#39;);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwHelperSelectMenuItem(event,&#39;KOT4965620&#39;, &#39;EMK4965620&#39;);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><td style=\"background-color:transparent;padding-left:8px;padding-right:8px\"><img style=\"vertical-align:middle;width:16px;margin-right:4px;height:16px\" src=\"WEB-RES/resource/resource?id=bi_image_2F610A23A5037A3D6B4348916B76D938\" alt=\"\"></td><td style=\"background-color:transparent;padding-left:8px;padding-right:8px\" class=\"guimenuitem-textcolumn\"><span id=\"KOT4965620_menuitemText\">Put all selected entries into the shopping cart</span></td><td style=\"background-color:transparent;padding-left:8px;padding-right:8px\"></td><td style=\"background-color:transparent;vertical-align:top;padding:0;padding-left:8px;padding-right:8px\"></td></tr><tr style=\"border:0;padding-top:0px;padding-left:0px;padding-bottom:0px;min-height:36px;height:36px;padding-right:0px\" class=\"guimenuitem\" guiWindowId=\"TWM4965563\" id=\"BVX4965620\" onmouseenter=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwHelperSelectMenuItem(event,&#39;BVX4965620&#39;, &#39;EMK4965620&#39;);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwHelperSelectMenuItem(event,&#39;BVX4965620&#39;, &#39;EMK4965620&#39;);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><td style=\"background-color:transparent;padding-left:8px;padding-right:8px\"><img style=\"vertical-align:middle;width:16px;margin-right:4px;height:16px\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.apps.etk.base.misc.b.a_focus_grey.png\" alt=\"\"></td><td style=\"background-color:transparent;padding-left:8px;padding-right:8px\" class=\"guimenuitem-textcolumn\"><span id=\"BVX4965620_menuitemText\">Focus part in drawing</span></td><td style=\"background-color:transparent;padding-left:8px;padding-right:8px\"></td><td style=\"background-color:transparent;vertical-align:top;padding:0;padding-left:8px;padding-right:8px\"></td></tr><tr style=\"border:0;padding-top:0px;padding-left:0px;padding-bottom:0px;min-height:36px;height:36px;padding-right:0px\" class=\"guimenuitem\" guiWindowId=\"TWM4965563\" id=\"XRL4965620\" onmouseenter=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwHelperSelectMenuItem(event,&#39;XRL4965620&#39;, &#39;EMK4965620&#39;);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwHelperSelectMenuItem(event,&#39;XRL4965620&#39;, &#39;EMK4965620&#39;);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><td style=\"background-color:transparent;padding-left:8px;padding-right:8px\"><img style=\"vertical-align:middle;width:16px;margin-right:4px;height:16px\" src=\"WEB-RES/resource/resource?id=bi_image_72D0010FEC637C6EB8420C205BD1BB35\" alt=\"\"></td><td style=\"background-color:transparent;padding-left:8px;padding-right:8px\" class=\"guimenuitem-textcolumn\"><span id=\"XRL4965620_menuitemText\">Print current parts list</span></td><td style=\"background-color:transparent;padding-left:8px;padding-right:8px\"></td><td style=\"background-color:transparent;vertical-align:top;padding:0;padding-left:8px;padding-right:8px\"></td></tr><tr style=\"border:0;padding-top:0px;padding-left:0px;padding-bottom:0px;min-height:36px;height:36px;padding-right:0px\" class=\"guimenuitem\" guiWindowId=\"TWM4965563\" id=\"CVH4965620\" onmouseenter=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwHelperSelectMenuItem(event,&#39;CVH4965620&#39;, &#39;EMK4965620&#39;);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwHelperSelectMenuItem(event,&#39;CVH4965620&#39;, &#39;EMK4965620&#39;);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><td style=\"background-color:transparent;padding-left:8px;padding-right:8px\"><img style=\"vertical-align:middle;width:16px;margin-right:4px;height:16px\" src=\"WEB-RES/resource/resource?id=bi_image_0FD0AAD7977484C27B5D22FF54EDDA04\" alt=\"\"></td><td style=\"background-color:transparent;padding-left:8px;padding-right:8px\" class=\"guimenuitem-textcolumn\"><span id=\"CVH4965620_menuitemText\">Additional information</span></td><td style=\"background-color:transparent;padding-left:8px;padding-right:8px\"></td><td style=\"background-color:transparent;vertical-align:top;padding:0;padding-left:8px;padding-right:8px\"></td></tr><tr style=\"border:0;padding-top:0px;padding-left:0px;padding-bottom:0px;min-height:36px;height:36px;padding-right:0px\" class=\"guimenuitem\" guiWindowId=\"TWM4965563\" id=\"SFX4965620\" onmouseenter=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwHelperSelectMenuItem(event,&#39;SFX4965620&#39;, &#39;EMK4965620&#39;);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwHelperSelectMenuItem(event,&#39;SFX4965620&#39;, &#39;EMK4965620&#39;);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><td style=\"background-color:transparent;padding-left:8px;padding-right:8px\"><img style=\"vertical-align:middle;width:16px;margin-right:4px;height:16px\" src=\"WEB-RES/resource/resource?id=bi_image_2C46E93221B37E862CF8074EDD23C187\" alt=\"\"></td><td style=\"background-color:transparent;padding-left:8px;padding-right:8px\" class=\"guimenuitem-textcolumn\"><span id=\"SFX4965620_menuitemText\">Usage</span></td><td style=\"background-color:transparent;padding-left:8px;padding-right:8px\"></td><td style=\"background-color:transparent;vertical-align:top;padding:0;padding-left:8px;padding-right:8px\"></td></tr><tr style=\"border:0;padding-top:0px;padding-left:0px;padding-bottom:0px;min-height:36px;height:36px;padding-right:0px\" class=\"guimenuitem\" guiWindowId=\"TWM4965563\" id=\"DSL4965620\" onmouseenter=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwHelperSelectMenuItem(event,&#39;DSL4965620&#39;, &#39;EMK4965620&#39;);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwHelperSelectMenuItem(event,&#39;DSL4965620&#39;, &#39;EMK4965620&#39;);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><td style=\"background-color:transparent;padding-left:8px;padding-right:8px\"><img style=\"vertical-align:middle;width:16px;margin-right:4px;height:16px\" src=\"WEB-RES/resource/resource?id=bi_image_69CB6532CDB6672261C6B53AC7AB8966\" alt=\"\"></td><td style=\"background-color:transparent;padding-left:8px;padding-right:8px\" class=\"guimenuitem-textcolumn\"><span id=\"DSL4965620_menuitemText\">Edit notes</span></td><td style=\"background-color:transparent;padding-left:8px;padding-right:8px\"></td><td style=\"background-color:transparent;vertical-align:top;padding:0;padding-left:8px;padding-right:8px\"></td></tr><tr style=\"border:0;padding-top:0px;padding-left:0px;display:none;padding-bottom:0px;min-height:36px;height:36px;padding-right:0px\" class=\"guimenuitem\" guiWindowId=\"TWM4965563\" id=\"BFX4965620\" onmouseenter=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwHelperSelectMenuItem(event,&#39;BFX4965620&#39;, &#39;EMK4965620&#39;);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwHelperSelectMenuItem(event,&#39;BFX4965620&#39;, &#39;EMK4965620&#39;);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><td style=\"background-color:transparent;padding-left:8px;padding-right:8px\"><img style=\"vertical-align:middle;width:16px;margin-right:4px;height:16px\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.apps.etk.base.misc.b.a_filetype_excel.png\" alt=\"\"></td><td style=\"background-color:transparent;padding-left:8px;padding-right:8px\" class=\"guimenuitem-textcolumn\"><span id=\"BFX4965620_menuitemText\">Open in Excel...</span></td><td style=\"background-color:transparent;padding-left:8px;padding-right:8px\"></td><td style=\"background-color:transparent;vertical-align:top;padding:0;padding-left:8px;padding-right:8px\"></td></tr><tr style=\"border:0;padding-top:0px;padding-left:0px;padding-bottom:0px;min-height:36px;height:36px;padding-right:0px\" class=\"guimenuitem\" guiWindowId=\"TWM4965563\" id=\"NOU4965620\" onmouseenter=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwHelperSelectMenuItem(event,&#39;NOU4965620&#39;, &#39;EMK4965620&#39;);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwHelperSelectMenuItem(event,&#39;NOU4965620&#39;, &#39;EMK4965620&#39;);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><td style=\"background-color:transparent;padding-left:8px;padding-right:8px\"><img style=\"vertical-align:middle;width:16px;margin-right:4px;height:16px\" src=\"WEB-RES/resource/resource?id=bi_image_7BE97D3AFC2993939E9961A98C96E411\" alt=\"\"></td><td style=\"background-color:transparent;padding-left:8px;padding-right:8px\" class=\"guimenuitem-textcolumn\"><span id=\"NOU4965620_menuitemText\">Copy</span></td><td style=\"background-color:transparent;padding-left:8px;padding-right:8px\"><span style=\"position:relative\"><img style=\"width:12px;height:12px\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_menuitem_marker.png\" alt=\"\"></span></td><td style=\"background-color:transparent;vertical-align:top;padding:0;padding-left:8px;padding-right:8px\"><div style=\"background-color:transparent;position:relative\"><div style=\"z-index:201;display:none\" id=\"NOU4965620_submenu\" class=\"guimenupopup\"><table style=\"background-color:transparent;padding:0;border-spacing:0;border-collapse:collapse\" border=\"0\"><tr style=\"border:0;padding-top:0px;padding-left:0px;padding-bottom:0px;min-height:36px;height:36px;padding-right:0px\" class=\"guimenuitem\" guiWindowId=\"TWM4965563\" id=\"VOB4965620\" onmouseenter=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwHelperSelectMenuItem(event,&#39;VOB4965620&#39;, &#39;EMK4965620&#39;);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwHelperSelectMenuItem(event,&#39;VOB4965620&#39;, &#39;EMK4965620&#39;);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><td style=\"background-color:transparent;padding-left:8px;padding-right:8px\"></td><td style=\"background-color:transparent;padding-left:8px;padding-right:8px\" class=\"guimenuitem-textcolumn\"><span id=\"VOB4965620_menuitemText\">Cell</span></td><td style=\"background-color:transparent;padding-left:8px;padding-right:8px\"></td><td style=\"background-color:transparent;vertical-align:top;padding:0;padding-left:8px;padding-right:8px\"></td></tr><tr style=\"border:0;padding-top:0px;padding-left:0px;padding-bottom:0px;min-height:36px;height:36px;padding-right:0px\" class=\"guimenuitem\" guiWindowId=\"TWM4965563\" id=\"RGJ4965620\" onmouseenter=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwHelperSelectMenuItem(event,&#39;RGJ4965620&#39;, &#39;EMK4965620&#39;);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwHelperSelectMenuItem(event,&#39;RGJ4965620&#39;, &#39;EMK4965620&#39;);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><td style=\"background-color:transparent;padding-left:8px;padding-right:8px\"></td><td style=\"background-color:transparent;padding-left:8px;padding-right:8px\" class=\"guimenuitem-textcolumn\"><span id=\"RGJ4965620_menuitemText\">Line</span></td><td style=\"background-color:transparent;padding-left:8px;padding-right:8px\"></td><td style=\"background-color:transparent;vertical-align:top;padding:0;padding-left:8px;padding-right:8px\"></td></tr><tr style=\"border:0;padding-top:0px;padding-left:0px;padding-bottom:0px;min-height:36px;height:36px;padding-right:0px\" class=\"guimenuitem\" guiWindowId=\"TWM4965563\" id=\"GGB4965620\" onmouseenter=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwHelperSelectMenuItem(event,&#39;GGB4965620&#39;, &#39;EMK4965620&#39;);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwHelperSelectMenuItem(event,&#39;GGB4965620&#39;, &#39;EMK4965620&#39;);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><td style=\"background-color:transparent;padding-left:8px;padding-right:8px\"></td><td style=\"background-color:transparent;padding-left:8px;padding-right:8px\" class=\"guimenuitem-textcolumn\"><span id=\"GGB4965620_menuitemText\">Column</span></td><td style=\"background-color:transparent;padding-left:8px;padding-right:8px\"></td><td style=\"background-color:transparent;vertical-align:top;padding:0;padding-left:8px;padding-right:8px\"></td></tr><tr style=\"border:0;padding-top:0px;padding-left:0px;padding-bottom:0px;min-height:36px;height:36px;padding-right:0px\" class=\"guimenuitem\" guiWindowId=\"TWM4965563\" id=\"SMQ4965620\" onmouseenter=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwHelperSelectMenuItem(event,&#39;SMQ4965620&#39;, &#39;EMK4965620&#39;);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwHelperSelectMenuItem(event,&#39;SMQ4965620&#39;, &#39;EMK4965620&#39;);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><td style=\"background-color:transparent;padding-left:8px;padding-right:8px\"></td><td style=\"background-color:transparent;padding-left:8px;padding-right:8px\" class=\"guimenuitem-textcolumn\"><span id=\"SMQ4965620_menuitemText\">All</span></td><td style=\"background-color:transparent;padding-left:8px;padding-right:8px\"></td><td style=\"background-color:transparent;vertical-align:top;padding:0;padding-left:8px;padding-right:8px\"></td></tr></table></div></div></td></tr><tr style=\"border:0;padding-top:0px;padding-left:0px;display:none;padding-bottom:0px;min-height:36px;height:36px;padding-right:0px\" class=\"guimenuitem\" guiWindowId=\"TWM4965563\" id=\"WHS4965620\" onmouseenter=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwHelperSelectMenuItem(event,&#39;WHS4965620&#39;, &#39;EMK4965620&#39;);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwHelperSelectMenuItem(event,&#39;WHS4965620&#39;, &#39;EMK4965620&#39;);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><td style=\"background-color:transparent;padding-left:8px;padding-right:8px\"><img style=\"vertical-align:middle;width:16px;margin-right:4px;height:16px\" src=\"WEB-RES/resource/resource?id=bi_image_49824DF87B7634DBD08BE43B967E35B3\" alt=\"\"></td><td style=\"background-color:transparent;padding-left:8px;padding-right:8px\" class=\"guimenuitem-textcolumn\"><span id=\"WHS4965620_menuitemText\">Parts list configuration</span></td><td style=\"background-color:transparent;padding-left:8px;padding-right:8px\"></td><td style=\"background-color:transparent;vertical-align:top;padding:0;padding-left:8px;padding-right:8px\"></td></tr></table></div><div class=\"guiwindow\" id=\"TWM4965563\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"><div style=\"padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"HBK4965610\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div><div style=\"top:0px;width:0px;bottom:24px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:24px\" class=\"guilayoutborder_center\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"YYI4965611\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"CUO4965620\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><input name=\"PBG4965620_dividerPosition\" value=\"398\" type=\"hidden\" id=\"PBG4965620_dividerPosition\"><div style=\"background-color:#efefef;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guisplitpane\" dimension=\"width\" id=\"PBG4965620\"><div style=\"width:398px\" id=\"PBG4965620_firstchildcell\" class=\"guisplitpane_container_left\"><div style=\"padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px;min-width:250px\" class=\"guipanel\" id=\"OQK4965620\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"background-color:#efefef;padding-top:24px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"FSX4965620\"><div style=\"right:0px;top:24px;left:0px;bottom:0px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:48px;bottom:0px\" class=\"guilayoutborder_west\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"UKQ4965620\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:48px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:48px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"width:48px;margin-top:0px;top:0;margin-bottom:0px;left:0;bottom:0\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"TBP4965620\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:48px;top:0;left:0;height:144px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:48px;text-align:left;height:48px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-24px;right:0;height:48px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><button style=\"cursor:pointer;padding-top:0px;max-height:48px;color:#000000;padding-left:16px;padding-bottom:0px;min-height:48px;border-radius:2px;background-color:#efefef;max-width:48px;width:100%;border-width:0px;text-align:center;padding-right:16px;height:100%;min-width:48px\" type=\"button\" name=\"YEC4965634\" class=\"guibutton_enabled brightenOnHoverForGrayComponents brightenAndRemoveShadowOnClick brightenAndRemoveShadowAtInnerImageOnClick cursor_pointer\" id=\"YEC4965634\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;LUQ4965634\\&quot;&gt;Tree view&lt;\\/div&gt;&#39;, 250, 72, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxButtonOnClick(event, &#39;YEC4965634&#39;, &#39;YEC4965634&#39;, &#39;&#39;, true, true);dwFrameworkPreventDefaultBehaviour(event);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"width:16px;height:16px\" src=\"WEB-RES/resource/resource?id=bi_image_2CC76DF101D15A5A668A992EB70B0924\" alt=\"\" class=\"guibutton_icon\"><span style=\"cursor:pointer;font-weight:inherit;vertical-align:middle;font-size:inherit;font-family:inherit;line-height:inherit;font-style:inherit\" id=\"YEC4965634_text\" class=\"cursor_pointer\"></span></button></div></div><div style=\"background-color:transparent;top:48px;left:0px;vertical-align:middle;width:48px;text-align:left;height:48px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-24px;right:0;height:48px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><button style=\"cursor:pointer;padding-top:0px;max-height:48px;color:#000000;padding-left:16px;padding-bottom:0px;min-height:48px;border-radius:2px;background-color:#efefef;max-width:48px;width:100%;border-width:0px;text-align:center;padding-right:16px;height:100%;min-width:48px\" type=\"button\" name=\"RTA4965635\" class=\"guibutton_enabled brightenOnHoverForGrayComponents brightenAndRemoveShadowOnClick brightenAndRemoveShadowAtInnerImageOnClick cursor_pointer\" id=\"RTA4965635\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;ROV4965635\\&quot;&gt;Print&lt;\\/div&gt;&#39;, 250, 40, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxButtonOnClick(event, &#39;RTA4965635&#39;, &#39;RTA4965635&#39;, &#39;&#39;, true, true);dwFrameworkPreventDefaultBehaviour(event);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"width:16px;height:16px\" src=\"WEB-RES/resource/resource?id=bi_image_72D0010FEC637C6EB8420C205BD1BB35\" alt=\"\" class=\"guibutton_icon\"><span style=\"cursor:pointer;font-weight:inherit;vertical-align:middle;font-size:inherit;font-family:inherit;line-height:inherit;font-style:inherit\" id=\"RTA4965635_text\" class=\"cursor_pointer\"></span></button></div></div><div style=\"background-color:transparent;top:96px;left:0px;vertical-align:middle;width:48px;text-align:left;height:48px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-24px;right:0;height:48px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><button style=\"cursor:pointer;padding-top:0px;max-height:48px;color:#000000;padding-left:16px;padding-bottom:0px;min-height:48px;border-radius:2px;background-color:#efefef;max-width:48px;width:100%;border-width:0px;text-align:center;padding-right:16px;height:100%;min-width:48px\" type=\"button\" name=\"YVD4965635\" class=\"guibutton_enabled brightenOnHoverForGrayComponents brightenAndRemoveShadowOnClick brightenAndRemoveShadowAtInnerImageOnClick cursor_pointer\" id=\"YVD4965635\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;TBO4965635\\&quot;&gt;Settings&lt;\\/div&gt;&#39;, 250, 62, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxButtonOnClick(event, &#39;YVD4965635&#39;, &#39;YVD4965635&#39;, &#39;&#39;, true, true);dwFrameworkPreventDefaultBehaviour(event);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"width:16px;height:16px\" src=\"WEB-RES/resource/resource?id=bi_image_F9E81FC33131B3960A323CFA1C2169EC\" alt=\"\" class=\"guibutton_icon\"><span style=\"cursor:pointer;font-weight:inherit;vertical-align:middle;font-size:inherit;font-family:inherit;line-height:inherit;font-style:inherit\" id=\"YVD4965635_text\" class=\"cursor_pointer\"></span></button></div></div></div></div></div></div></div></div></div></div></div><div style=\"right:0px;top:0px;left:48px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"UWV4965620\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"UQX4965620\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-top:0;right:0;top:0px;left:0px;bottom:0;height:100%\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;right:0px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:1px;top:0;left:0;bottom:0;margin-top:1px;right:0;margin-bottom:1px;margin-right:1px\" class=\"guilayoutgridbag_container_padded\"><div style=\"padding-top:0px;z-index:1;bottom:0;padding-left:0px;padding-bottom:0px;right:0;filter:progid:DXImageTransform.Microsoft.Shadow(color=&#39;rgba(0,0,0,0.3)&#39;, Direction=135, Strength=0);border-radius:2px;background-color:#ffffff;box-shadow:0 1px 2px rgba(0,0,0,0.30);top:0;left:0;-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.30);padding-right:0px\" class=\"guipanel\" id=\"KQX4965620\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"right:0;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:top;right:0px;text-align:left;height:56px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;right:0;top:0;left:0;height:56px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;padding-top:8px;top:0;left:0;bottom:0;padding-left:16px;padding-bottom:8px;font-size:16px;font-family:Open Sans,Segoe UI,Verdana,Tahoma,Arial,sans-serif,Arial Unicode MS,Helvetica,Lucida Grande,Geneva,Sans-Serif;line-height:17px;right:0;padding-right:16px\" class=\"guipanel\" id=\"UNQ4965620\"><div style=\"right:16px;top:8px;left:16px;bottom:8px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"YEU4965634\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:40px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"padding-top:12px;white-space:pre;font-weight:600;padding-left:0px;padding-bottom:0px;font-size:16px;line-height:17px;font-style:normal;text-overflow:ellipsis;overflow:hidden;width:100%;font-family:Open Sans,Segoe UI,Verdana,Tahoma,Arial,sans-serif,Arial Unicode MS,Helvetica,Lucida Grande,Geneva,Sans-Serif;padding-right:0px;height:100%\" class=\"guilabel\" id=\"HGS4965634\">STRUCTURE</div></div><div style=\"top:0px;width:40px;bottom:0px\" class=\"guilayoutborder_east\"><button style=\"cursor:pointer;padding-top:0px;max-height:40px;color:#000000;padding-left:0px;padding-bottom:0px;border-color:transparent;min-height:40px;background-color:transparent;max-width:40px;width:100%;border-width:0px;border-style:solid;text-align:center;padding-right:0px;height:100%;min-width:40px\" type=\"button\" name=\"MNG4965634\" class=\"guibutton_enabled brightenOnHoverForGrayComponents brightenAndRemoveShadowOnClick brightenAndRemoveShadowAtInnerImageOnClick cursor_pointer\" id=\"MNG4965634\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxButtonOnClick(event, &#39;MNG4965634&#39;, &#39;MNG4965634&#39;, &#39;&#39;, true, true);dwFrameworkPreventDefaultBehaviour(event);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"width:16px;height:16px\" src=\"WEB-RES/resource/resource?id=bi_image_3CCCB2B47E3D649ADFABF7EB3BB2B184\" alt=\"\" class=\"guibutton_icon\"><span style=\"cursor:pointer;font-weight:inherit;vertical-align:middle;font-size:inherit;font-family:inherit;line-height:inherit;font-style:inherit\" id=\"MNG4965634_text\" class=\"cursor_pointer\"></span></button></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div></div><div style=\"background-color:transparent;top:56px;left:0px;vertical-align:middle;right:0px;text-align:left;height:1px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:49.999%;left:0;margin-top:0px;right:0;height:1px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"padding-top:0px;max-height:1px;margin:auto;padding-left:0px;padding-bottom:0px;border-color:#dddddd;min-height:1px;background-color:#dddddd;width:100%;border-width:1px;border-style:solid;padding-right:0px;height:100%;min-width:10px\" class=\"guilabel\" id=\"MTE4965620\"></div></div></div><div style=\"background-color:transparent;top:57px;left:0px;bottom:1px;vertical-align:middle;right:0px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:0;left:0;bottom:0;margin-top:0px;right:0;margin-bottom:0px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;padding-top:0px;margin:auto;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"FRY4965620\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"YQG4965620\" oncontextmenu=\"try {dwFwPreEv(event,false,this);dwFrameworkPreventDefaultBehaviour(event); dwHelperShowContextMenu(event, &#39;YQG4965620&#39;, &#39;YQG4965620&#39;, &#39;XMR4965620&#39;, new Array(), new Array(&#39;JVN4965620&#39;), &#39;TWM4965563&#39;);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"position:absolute;right:0px;top:0px;left:0px;bottom:0px\" id=\"FEA4965620_layoutdiv\"><input name=\"FEA4965620_scrollTop\" value=\"0\" type=\"hidden\" id=\"FEA4965620_scrollTop\"><input name=\"FEA4965620_scrollLeft\" value=\"0\" type=\"hidden\" id=\"FEA4965620_scrollLeft\"><div id=\"FEA4965620_rootGuiScrollPane\" class=\"guiscrollpane_root\"><div style=\"padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;overflow-x:hidden;right:0;padding-right:0px\" class=\"guiscrollpane modern_scrollpane_design_thin modern_scrollpane_design_thin\" scrollbarWidth=\"6\" id=\"FEA4965620\" horizontalScrollEnabled=\"false\" verticalScrollEnabled=\"true\" headerId=\"\" firstColPanels=\"\" lastColPanels=\"\" onresizeClientSide=\"dwHelperUpdateNotifyingScrollPanelColumnScrollPosition(&#39;FEA4965620&#39;);\" onscroll=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxScrollpaneScrolled(event, &#39;FEA4965620&#39;, &#39;FEA4965620&#39;, &#39;&#39;, true, true);dwFrameworkPreventDefaultBehaviour(event);dwHelperUpdateNotifyingScrollPanelHeaderScrollPosition(&#39;FEA4965620&#39;);dwHelperUpdateNotifyingScrollPanelColumnScrollPosition(&#39;FEA4965620&#39;);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onresize=\"try {dwFwPreEv(event,false,this);dwHelperScrollPaneValueChanged(&#39;FEA4965620&#39;);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div style=\"border:0;background-color:#ffffff;padding-top:0px;max-height:810px;padding-left:0px;width:0px;padding-bottom:0px;min-height:100%;padding-right:0px;min-width:100%;height:810px\" class=\"guipanel\" id=\"KGJ4965620\"><div class=\"guilayoutabsolute\"><div style=\"position:absolute;right:0px;top:0px;left:0px;height:45px\" id=\"DAA4965681_layoutdiv\"><div style=\"background-color:#d7d7d7;padding-top:0px;top:0;color:#000000;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel dw-hover-class-background-23386338633863 dw-hover-class-foreground-23303030303030\" id=\"DAA4965681\"><div class=\"guilayoutabsolute\"><div style=\"position:absolute;right:1px;top:1px;left:1px;bottom:1px\" id=\"UWY4965681_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"UWY4965681\" ondblclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnDblClick(event, &#39;UWY4965681&#39;, &#39;UWY4965681&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;UWY4965681&#39;, &#39;UWY4965681&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"position:absolute;right:8px;top:15px;left:8px;height:20px\" id=\"JBO4965681_layoutdiv\"><div style=\"padding-top:0px;white-space:pre;font-weight:600;padding-left:0px;padding-bottom:0px;font-size:16px;line-height:17px;font-style:normal;text-overflow:ellipsis;overflow:hidden;width:100%;font-family:Open Sans,Segoe UI,Verdana,Tahoma,Arial,sans-serif,Arial Unicode MS,Helvetica,Lucida Grande,Geneva,Sans-Serif;padding-right:0px;height:100%\" class=\"guilabel\" id=\"JBO4965681\">FESTOOL</div></div></div></div></div><div style=\"width:1px;position:absolute;top:0px;left:-2px;height:1px\" id=\"UJT4965681_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"UJT4965681\"><div class=\"guilayoutabsolute\"></div></div></div><div style=\"width:0px;position:absolute;top:0px;left:-3px;height:1px\" id=\"MDS4965681_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;padding-left:0px;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel\" id=\"MDS4965681\"></div></div><div style=\"position:absolute;right:0px;left:0px;bottom:0px;height:1px\" id=\"EHV4965681_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;padding-left:0px;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel\" id=\"EHV4965681\"></div></div></div></div></div><div style=\"position:absolute;right:0px;top:45px;left:0px;height:45px\" id=\"BUI4965682_layoutdiv\"><div style=\"background-color:#ffffff;padding-top:0px;top:0;color:#000000;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel dw-hover-class-foreground-23303030303030 dw-hover-class-background-23643764376437\" id=\"BUI4965682\"><div class=\"guilayoutabsolute\"><div style=\"position:absolute;right:46px;top:0px;left:1px;bottom:1px\" id=\"FWX4965682_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"FWX4965682\" ondblclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnDblClick(event, &#39;FWX4965682&#39;, &#39;FWX4965682&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;FWX4965682&#39;, &#39;FWX4965682&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"position:absolute;right:8px;top:15px;left:8px;height:20px\" id=\"UTV4965682_layoutdiv\"><div style=\"padding-top:0px;overflow:hidden;white-space:pre;padding-left:0px;width:100%;padding-bottom:0px;text-overflow:ellipsis;padding-right:0px;height:100%\" class=\"guilabel\" id=\"UTV4965682\">Carpentry machines</div></div></div></div></div><div style=\"width:45px;position:absolute;right:1px;top:0px;bottom:1px\" id=\"WRC4965682_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"WRC4965682\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;WRC4965682&#39;, &#39;WRC4965682&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmousedown=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseDown(event, &#39;WRC4965682&#39;, &#39;WRC4965682&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnClick(event, &#39;WRC4965682&#39;, &#39;WRC4965682&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"width:16px;position:absolute;top:14px;left:14px;height:16px\" id=\"JYR4965682_layoutdiv\"><div style=\"width:16px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:0px\" class=\"guiimage\" id=\"JYR4965682\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_responsive_tree_go_down_normal.png\" alt=\"\" id=\"JYR4965682_img\"></div></div></div></div></div><div style=\"width:1px;position:absolute;right:45px;top:0px;bottom:1px\" id=\"XHO4965682_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;padding-left:0px;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel\" id=\"XHO4965682\"></div></div><div style=\"position:absolute;right:0px;left:0px;bottom:0px;height:1px\" id=\"KCF4965682_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;padding-left:0px;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel\" id=\"KCF4965682\"></div></div></div></div></div><div style=\"position:absolute;right:0px;top:90px;left:0px;height:45px\" id=\"NTF4965685_layoutdiv\"><div style=\"background-color:#ffffff;padding-top:0px;top:0;color:#000000;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel dw-hover-class-foreground-23303030303030 dw-hover-class-background-23643764376437\" id=\"NTF4965685\"><div class=\"guilayoutabsolute\"><div style=\"position:absolute;right:46px;top:0px;left:1px;bottom:1px\" id=\"QVS4965685_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"QVS4965685\" ondblclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnDblClick(event, &#39;QVS4965685&#39;, &#39;QVS4965685&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;QVS4965685&#39;, &#39;QVS4965685&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"position:absolute;right:8px;top:15px;left:8px;height:20px\" id=\"XXC4965685_layoutdiv\"><div style=\"padding-top:0px;overflow:hidden;white-space:pre;padding-left:0px;width:100%;padding-bottom:0px;text-overflow:ellipsis;padding-right:0px;height:100%\" class=\"guilabel\" id=\"XXC4965685\">Workplace organisation</div></div></div></div></div><div style=\"width:45px;position:absolute;right:1px;top:0px;bottom:1px\" id=\"BKD4965685_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"BKD4965685\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;BKD4965685&#39;, &#39;BKD4965685&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmousedown=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseDown(event, &#39;BKD4965685&#39;, &#39;BKD4965685&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnClick(event, &#39;BKD4965685&#39;, &#39;BKD4965685&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"width:16px;position:absolute;top:14px;left:14px;height:16px\" id=\"HSX4965685_layoutdiv\"><div style=\"width:16px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:0px\" class=\"guiimage\" id=\"HSX4965685\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_responsive_tree_go_down_normal.png\" alt=\"\" id=\"HSX4965685_img\"></div></div></div></div></div><div style=\"width:1px;position:absolute;right:45px;top:0px;bottom:1px\" id=\"EFX4965685_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;padding-left:0px;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel\" id=\"EFX4965685\"></div></div><div style=\"position:absolute;right:0px;left:0px;bottom:0px;height:1px\" id=\"KKM4965685_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;padding-left:0px;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel\" id=\"KKM4965685\"></div></div></div></div></div><div style=\"position:absolute;right:0px;top:135px;left:0px;height:45px\" id=\"OLI4965686_layoutdiv\"><div style=\"background-color:#ffffff;padding-top:0px;top:0;color:#000000;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel dw-hover-class-foreground-23303030303030 dw-hover-class-background-23643764376437\" id=\"OLI4965686\"><div class=\"guilayoutabsolute\"><div style=\"position:absolute;right:46px;top:0px;left:1px;bottom:1px\" id=\"DEG4965686_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"DEG4965686\" ondblclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnDblClick(event, &#39;DEG4965686&#39;, &#39;DEG4965686&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;DEG4965686&#39;, &#39;DEG4965686&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"position:absolute;right:8px;top:15px;left:8px;height:20px\" id=\"XIN4965686_layoutdiv\"><div style=\"padding-top:0px;overflow:hidden;white-space:pre;padding-left:0px;width:100%;padding-bottom:0px;text-overflow:ellipsis;padding-right:0px;height:100%\" class=\"guilabel\" id=\"XIN4965686\">Drilling and screwdriving</div></div></div></div></div><div style=\"width:45px;position:absolute;right:1px;top:0px;bottom:1px\" id=\"MIR4965686_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"MIR4965686\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;MIR4965686&#39;, &#39;MIR4965686&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmousedown=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseDown(event, &#39;MIR4965686&#39;, &#39;MIR4965686&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnClick(event, &#39;MIR4965686&#39;, &#39;MIR4965686&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"width:16px;position:absolute;top:14px;left:14px;height:16px\" id=\"VNI4965686_layoutdiv\"><div style=\"width:16px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:0px\" class=\"guiimage\" id=\"VNI4965686\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_responsive_tree_go_down_normal.png\" alt=\"\" id=\"VNI4965686_img\"></div></div></div></div></div><div style=\"width:1px;position:absolute;right:45px;top:0px;bottom:1px\" id=\"VNX4965686_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;padding-left:0px;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel\" id=\"VNX4965686\"></div></div><div style=\"position:absolute;right:0px;left:0px;bottom:0px;height:1px\" id=\"OGG4965686_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;padding-left:0px;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel\" id=\"OGG4965686\"></div></div></div></div></div><div style=\"position:absolute;right:0px;top:180px;left:0px;height:45px\" id=\"YCG4965688_layoutdiv\"><div style=\"background-color:#ffffff;padding-top:0px;top:0;color:#000000;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel dw-hover-class-foreground-23303030303030 dw-hover-class-background-23643764376437\" id=\"YCG4965688\"><div class=\"guilayoutabsolute\"><div style=\"position:absolute;right:46px;top:0px;left:1px;bottom:1px\" id=\"SFD4965688_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"SFD4965688\" ondblclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnDblClick(event, &#39;SFD4965688&#39;, &#39;SFD4965688&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;SFD4965688&#39;, &#39;SFD4965688&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"position:absolute;right:8px;top:15px;left:8px;height:20px\" id=\"DYU4965688_layoutdiv\"><div style=\"padding-top:0px;overflow:hidden;white-space:pre;padding-left:0px;width:100%;padding-bottom:0px;text-overflow:ellipsis;padding-right:0px;height:100%\" class=\"guilabel\" id=\"DYU4965688\">CMS - Compact Modul System</div></div></div></div></div><div style=\"width:45px;position:absolute;right:1px;top:0px;bottom:1px\" id=\"GOK4965688_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"GOK4965688\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;GOK4965688&#39;, &#39;GOK4965688&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmousedown=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseDown(event, &#39;GOK4965688&#39;, &#39;GOK4965688&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnClick(event, &#39;GOK4965688&#39;, &#39;GOK4965688&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"width:16px;position:absolute;top:14px;left:14px;height:16px\" id=\"RXH4965688_layoutdiv\"><div style=\"width:16px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:0px\" class=\"guiimage\" id=\"RXH4965688\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_responsive_tree_go_down_normal.png\" alt=\"\" id=\"RXH4965688_img\"></div></div></div></div></div><div style=\"width:1px;position:absolute;right:45px;top:0px;bottom:1px\" id=\"XED4965688_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;padding-left:0px;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel\" id=\"XED4965688\"></div></div><div style=\"position:absolute;right:0px;left:0px;bottom:0px;height:1px\" id=\"EEP4965688_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;padding-left:0px;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel\" id=\"EEP4965688\"></div></div></div></div></div><div style=\"position:absolute;right:0px;top:225px;left:0px;height:45px\" id=\"AGX4965690_layoutdiv\"><div style=\"background-color:#ffffff;padding-top:0px;top:0;color:#000000;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel dw-hover-class-foreground-23303030303030 dw-hover-class-background-23643764376437\" id=\"AGX4965690\"><div class=\"guilayoutabsolute\"><div style=\"position:absolute;right:46px;top:0px;left:1px;bottom:1px\" id=\"PCU4965690_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"PCU4965690\" ondblclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnDblClick(event, &#39;PCU4965690&#39;, &#39;PCU4965690&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;PCU4965690&#39;, &#39;PCU4965690&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"position:absolute;right:8px;top:15px;left:8px;height:20px\" id=\"EAX4965690_layoutdiv\"><div style=\"padding-top:0px;overflow:hidden;white-space:pre;padding-left:0px;width:100%;padding-bottom:0px;text-overflow:ellipsis;padding-right:0px;height:100%\" class=\"guilabel\" id=\"EAX4965690\">Exoskeletons</div></div></div></div></div><div style=\"width:45px;position:absolute;right:1px;top:0px;bottom:1px\" id=\"QLF4965690_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"QLF4965690\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;QLF4965690&#39;, &#39;QLF4965690&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmousedown=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseDown(event, &#39;QLF4965690&#39;, &#39;QLF4965690&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnClick(event, &#39;QLF4965690&#39;, &#39;QLF4965690&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"width:16px;position:absolute;top:14px;left:14px;height:16px\" id=\"XKB4965690_layoutdiv\"><div style=\"width:16px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:0px\" class=\"guiimage\" id=\"XKB4965690\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_responsive_tree_go_down_normal.png\" alt=\"\" id=\"XKB4965690_img\"></div></div></div></div></div><div style=\"width:1px;position:absolute;right:45px;top:0px;bottom:1px\" id=\"ASK4965690_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;padding-left:0px;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel\" id=\"ASK4965690\"></div></div><div style=\"position:absolute;right:0px;left:0px;bottom:0px;height:1px\" id=\"HBE4965690_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;padding-left:0px;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel\" id=\"HBE4965690\"></div></div></div></div></div><div style=\"position:absolute;right:0px;top:270px;left:0px;height:45px\" id=\"IJE4965691_layoutdiv\"><div style=\"background-color:#ffffff;padding-top:0px;top:0;color:#000000;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel dw-hover-class-foreground-23303030303030 dw-hover-class-background-23643764376437\" id=\"IJE4965691\"><div class=\"guilayoutabsolute\"><div style=\"position:absolute;right:46px;top:0px;left:1px;bottom:1px\" id=\"RWQ4965691_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"RWQ4965691\" ondblclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnDblClick(event, &#39;RWQ4965691&#39;, &#39;RWQ4965691&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;RWQ4965691&#39;, &#39;RWQ4965691&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"position:absolute;right:8px;top:15px;left:8px;height:20px\" id=\"OAR4965691_layoutdiv\"><div style=\"padding-top:0px;overflow:hidden;white-space:pre;padding-left:0px;width:100%;padding-bottom:0px;text-overflow:ellipsis;padding-right:0px;height:100%\" class=\"guilabel\" id=\"OAR4965691\">Routing</div></div></div></div></div><div style=\"width:45px;position:absolute;right:1px;top:0px;bottom:1px\" id=\"CSX4965691_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"CSX4965691\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;CSX4965691&#39;, &#39;CSX4965691&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmousedown=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseDown(event, &#39;CSX4965691&#39;, &#39;CSX4965691&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnClick(event, &#39;CSX4965691&#39;, &#39;CSX4965691&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"width:16px;position:absolute;top:14px;left:14px;height:16px\" id=\"SDO4965691_layoutdiv\"><div style=\"width:16px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:0px\" class=\"guiimage\" id=\"SDO4965691\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_responsive_tree_go_down_normal.png\" alt=\"\" id=\"SDO4965691_img\"></div></div></div></div></div><div style=\"width:1px;position:absolute;right:45px;top:0px;bottom:1px\" id=\"XRE4965691_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;padding-left:0px;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel\" id=\"XRE4965691\"></div></div><div style=\"position:absolute;right:0px;left:0px;bottom:0px;height:1px\" id=\"UCY4965691_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;padding-left:0px;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel\" id=\"UCY4965691\"></div></div></div></div></div><div style=\"position:absolute;right:0px;top:315px;left:0px;height:45px\" id=\"YEQ4965693_layoutdiv\"><div style=\"background-color:#ffffff;padding-top:0px;top:0;color:#000000;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel dw-hover-class-foreground-23303030303030 dw-hover-class-background-23643764376437\" id=\"YEQ4965693\"><div class=\"guilayoutabsolute\"><div style=\"position:absolute;right:46px;top:0px;left:1px;bottom:1px\" id=\"LYU4965693_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"LYU4965693\" ondblclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnDblClick(event, &#39;LYU4965693&#39;, &#39;LYU4965693&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;LYU4965693&#39;, &#39;LYU4965693&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"position:absolute;right:8px;top:15px;left:8px;height:20px\" id=\"LKC4965693_layoutdiv\"><div style=\"padding-top:0px;overflow:hidden;white-space:pre;padding-left:0px;width:100%;padding-bottom:0px;text-overflow:ellipsis;padding-right:0px;height:100%\" class=\"guilabel\" id=\"LKC4965693\">Planing</div></div></div></div></div><div style=\"width:45px;position:absolute;right:1px;top:0px;bottom:1px\" id=\"HOU4965693_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"HOU4965693\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;HOU4965693&#39;, &#39;HOU4965693&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmousedown=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseDown(event, &#39;HOU4965693&#39;, &#39;HOU4965693&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnClick(event, &#39;HOU4965693&#39;, &#39;HOU4965693&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"width:16px;position:absolute;top:14px;left:14px;height:16px\" id=\"HIC4965693_layoutdiv\"><div style=\"width:16px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:0px\" class=\"guiimage\" id=\"HIC4965693\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_responsive_tree_go_down_normal.png\" alt=\"\" id=\"HIC4965693_img\"></div></div></div></div></div><div style=\"width:1px;position:absolute;right:45px;top:0px;bottom:1px\" id=\"GKP4965693_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;padding-left:0px;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel\" id=\"GKP4965693\"></div></div><div style=\"position:absolute;right:0px;left:0px;bottom:0px;height:1px\" id=\"JBH4965693_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;padding-left:0px;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel\" id=\"JBH4965693\"></div></div></div></div></div><div style=\"position:absolute;right:0px;top:360px;left:0px;height:45px\" id=\"DTW4965695_layoutdiv\"><div style=\"background-color:#ffffff;padding-top:0px;top:0;color:#000000;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel dw-hover-class-foreground-23303030303030 dw-hover-class-background-23643764376437\" id=\"DTW4965695\"><div class=\"guilayoutabsolute\"><div style=\"position:absolute;right:46px;top:0px;left:1px;bottom:1px\" id=\"WEQ4965695_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"WEQ4965695\" ondblclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnDblClick(event, &#39;WEQ4965695&#39;, &#39;WEQ4965695&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;WEQ4965695&#39;, &#39;WEQ4965695&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"position:absolute;right:8px;top:15px;left:8px;height:20px\" id=\"GYK4965695_layoutdiv\"><div style=\"padding-top:0px;overflow:hidden;white-space:pre;padding-left:0px;width:100%;padding-bottom:0px;text-overflow:ellipsis;padding-right:0px;height:100%\" class=\"guilabel\" id=\"GYK4965695\">Edge trimming</div></div></div></div></div><div style=\"width:45px;position:absolute;right:1px;top:0px;bottom:1px\" id=\"LHX4965695_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"LHX4965695\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;LHX4965695&#39;, &#39;LHX4965695&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmousedown=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseDown(event, &#39;LHX4965695&#39;, &#39;LHX4965695&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnClick(event, &#39;LHX4965695&#39;, &#39;LHX4965695&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"width:16px;position:absolute;top:14px;left:14px;height:16px\" id=\"JFO4965695_layoutdiv\"><div style=\"width:16px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:0px\" class=\"guiimage\" id=\"JFO4965695\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_responsive_tree_go_down_normal.png\" alt=\"\" id=\"JFO4965695_img\"></div></div></div></div></div><div style=\"width:1px;position:absolute;right:45px;top:0px;bottom:1px\" id=\"TTG4965695_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;padding-left:0px;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel\" id=\"TTG4965695\"></div></div><div style=\"position:absolute;right:0px;left:0px;bottom:0px;height:1px\" id=\"ENG4965695_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;padding-left:0px;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel\" id=\"ENG4965695\"></div></div></div></div></div><div style=\"position:absolute;right:0px;top:405px;left:0px;height:45px\" id=\"MEH4965696_layoutdiv\"><div style=\"background-color:#ffffff;padding-top:0px;top:0;color:#000000;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel dw-hover-class-foreground-23303030303030 dw-hover-class-background-23643764376437\" id=\"MEH4965696\"><div class=\"guilayoutabsolute\"><div style=\"position:absolute;right:46px;top:0px;left:1px;bottom:1px\" id=\"VJQ4965696_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"VJQ4965696\" ondblclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnDblClick(event, &#39;VJQ4965696&#39;, &#39;VJQ4965696&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;VJQ4965696&#39;, &#39;VJQ4965696&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"position:absolute;right:8px;top:15px;left:8px;height:20px\" id=\"RVK4965696_layoutdiv\"><div style=\"padding-top:0px;overflow:hidden;white-space:pre;padding-left:0px;width:100%;padding-bottom:0px;text-overflow:ellipsis;padding-right:0px;height:100%\" class=\"guilabel\" id=\"RVK4965696\">Charger</div></div></div></div></div><div style=\"width:45px;position:absolute;right:1px;top:0px;bottom:1px\" id=\"PNT4965696_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"PNT4965696\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;PNT4965696&#39;, &#39;PNT4965696&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmousedown=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseDown(event, &#39;PNT4965696&#39;, &#39;PNT4965696&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnClick(event, &#39;PNT4965696&#39;, &#39;PNT4965696&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"width:16px;position:absolute;top:14px;left:14px;height:16px\" id=\"NGO4965696_layoutdiv\"><div style=\"width:16px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:0px\" class=\"guiimage\" id=\"NGO4965696\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_responsive_tree_go_down_normal.png\" alt=\"\" id=\"NGO4965696_img\"></div></div></div></div></div><div style=\"width:1px;position:absolute;right:45px;top:0px;bottom:1px\" id=\"ADO4965696_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;padding-left:0px;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel\" id=\"ADO4965696\"></div></div><div style=\"position:absolute;right:0px;left:0px;bottom:0px;height:1px\" id=\"RTI4965696_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;padding-left:0px;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel\" id=\"RTI4965696\"></div></div></div></div></div><div style=\"position:absolute;right:0px;top:450px;left:0px;height:45px\" id=\"VMC4965698_layoutdiv\"><div style=\"background-color:#ffffff;padding-top:0px;top:0;color:#000000;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel dw-hover-class-foreground-23303030303030 dw-hover-class-background-23643764376437\" id=\"VMC4965698\"><div class=\"guilayoutabsolute\"><div style=\"position:absolute;right:46px;top:0px;left:1px;bottom:1px\" id=\"NIM4965698_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"NIM4965698\" ondblclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnDblClick(event, &#39;NIM4965698&#39;, &#39;NIM4965698&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;NIM4965698&#39;, &#39;NIM4965698&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"position:absolute;right:8px;top:15px;left:8px;height:20px\" id=\"PLC4965698_layoutdiv\"><div style=\"padding-top:0px;overflow:hidden;white-space:pre;padding-left:0px;width:100%;padding-bottom:0px;text-overflow:ellipsis;padding-right:0px;height:100%\" class=\"guilabel\" id=\"PLC4965698\">Machining surfaces</div></div></div></div></div><div style=\"width:45px;position:absolute;right:1px;top:0px;bottom:1px\" id=\"TKG4965698_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"TKG4965698\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;TKG4965698&#39;, &#39;TKG4965698&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmousedown=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseDown(event, &#39;TKG4965698&#39;, &#39;TKG4965698&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnClick(event, &#39;TKG4965698&#39;, &#39;TKG4965698&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"width:16px;position:absolute;top:14px;left:14px;height:16px\" id=\"COR4965698_layoutdiv\"><div style=\"width:16px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:0px\" class=\"guiimage\" id=\"COR4965698\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_responsive_tree_go_down_normal.png\" alt=\"\" id=\"COR4965698_img\"></div></div></div></div></div><div style=\"width:1px;position:absolute;right:45px;top:0px;bottom:1px\" id=\"UCO4965698_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;padding-left:0px;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel\" id=\"UCO4965698\"></div></div><div style=\"position:absolute;right:0px;left:0px;bottom:0px;height:1px\" id=\"BCE4965698_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;padding-left:0px;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel\" id=\"BCE4965698\"></div></div></div></div></div><div style=\"position:absolute;right:0px;top:495px;left:0px;height:45px\" id=\"IJU4965700_layoutdiv\"><div style=\"background-color:#ffffff;padding-top:0px;top:0;color:#000000;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel dw-hover-class-foreground-23303030303030 dw-hover-class-background-23643764376437\" id=\"IJU4965700\"><div class=\"guilayoutabsolute\"><div style=\"position:absolute;right:46px;top:0px;left:1px;bottom:1px\" id=\"ATB4965700_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"ATB4965700\" ondblclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnDblClick(event, &#39;ATB4965700&#39;, &#39;ATB4965700&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;ATB4965700&#39;, &#39;ATB4965700&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"position:absolute;right:8px;top:15px;left:8px;height:20px\" id=\"LJY4965700_layoutdiv\"><div style=\"padding-top:0px;overflow:hidden;white-space:pre;padding-left:0px;width:100%;padding-bottom:0px;text-overflow:ellipsis;padding-right:0px;height:100%\" class=\"guilabel\" id=\"LJY4965700\">Oscillators</div></div></div></div></div><div style=\"width:45px;position:absolute;right:1px;top:0px;bottom:1px\" id=\"KPE4965700_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"KPE4965700\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;KPE4965700&#39;, &#39;KPE4965700&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmousedown=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseDown(event, &#39;KPE4965700&#39;, &#39;KPE4965700&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnClick(event, &#39;KPE4965700&#39;, &#39;KPE4965700&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"width:16px;position:absolute;top:14px;left:14px;height:16px\" id=\"FQQ4965700_layoutdiv\"><div style=\"width:16px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:0px\" class=\"guiimage\" id=\"FQQ4965700\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_responsive_tree_go_down_normal.png\" alt=\"\" id=\"FQQ4965700_img\"></div></div></div></div></div><div style=\"width:1px;position:absolute;right:45px;top:0px;bottom:1px\" id=\"IDN4965700_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;padding-left:0px;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel\" id=\"IDN4965700\"></div></div><div style=\"position:absolute;right:0px;left:0px;bottom:0px;height:1px\" id=\"LRE4965700_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;padding-left:0px;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel\" id=\"LRE4965700\"></div></div></div></div></div><div style=\"position:absolute;right:0px;top:540px;left:0px;height:45px\" id=\"YAJ4965701_layoutdiv\"><div style=\"background-color:#ffffff;padding-top:0px;top:0;color:#000000;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel dw-hover-class-foreground-23303030303030 dw-hover-class-background-23643764376437\" id=\"YAJ4965701\"><div class=\"guilayoutabsolute\"><div style=\"position:absolute;right:46px;top:0px;left:1px;bottom:1px\" id=\"BMB4965701_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"BMB4965701\" ondblclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnDblClick(event, &#39;BMB4965701&#39;, &#39;BMB4965701&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;BMB4965701&#39;, &#39;BMB4965701&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"position:absolute;right:8px;top:15px;left:8px;height:20px\" id=\"MCW4965701_layoutdiv\"><div style=\"padding-top:0px;overflow:hidden;white-space:pre;padding-left:0px;width:100%;padding-bottom:0px;text-overflow:ellipsis;padding-right:0px;height:100%\" class=\"guilabel\" id=\"MCW4965701\">Saws</div></div></div></div></div><div style=\"width:45px;position:absolute;right:1px;top:0px;bottom:1px\" id=\"INE4965701_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"INE4965701\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;INE4965701&#39;, &#39;INE4965701&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmousedown=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseDown(event, &#39;INE4965701&#39;, &#39;INE4965701&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnClick(event, &#39;INE4965701&#39;, &#39;INE4965701&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"width:16px;position:absolute;top:14px;left:14px;height:16px\" id=\"NVK4965701_layoutdiv\"><div style=\"width:16px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:0px\" class=\"guiimage\" id=\"NVK4965701\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_responsive_tree_go_down_normal.png\" alt=\"\" id=\"NVK4965701_img\"></div></div></div></div></div><div style=\"width:1px;position:absolute;right:45px;top:0px;bottom:1px\" id=\"ORH4965701_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;padding-left:0px;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel\" id=\"ORH4965701\"></div></div><div style=\"position:absolute;right:0px;left:0px;bottom:0px;height:1px\" id=\"IID4965701_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;padding-left:0px;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel\" id=\"IID4965701\"></div></div></div></div></div><div style=\"position:absolute;right:0px;top:585px;left:0px;height:45px\" id=\"ATV4965703_layoutdiv\"><div style=\"background-color:#ffffff;padding-top:0px;top:0;color:#000000;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel dw-hover-class-foreground-23303030303030 dw-hover-class-background-23643764376437\" id=\"ATV4965703\"><div class=\"guilayoutabsolute\"><div style=\"position:absolute;right:46px;top:0px;left:1px;bottom:1px\" id=\"RMX4965703_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"RMX4965703\" ondblclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnDblClick(event, &#39;RMX4965703&#39;, &#39;RMX4965703&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;RMX4965703&#39;, &#39;RMX4965703&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"position:absolute;right:8px;top:15px;left:8px;height:20px\" id=\"WVP4965703_layoutdiv\"><div style=\"padding-top:0px;overflow:hidden;white-space:pre;padding-left:0px;width:100%;padding-bottom:0px;text-overflow:ellipsis;padding-right:0px;height:100%\" class=\"guilabel\" id=\"WVP4965703\">Dust extraction</div></div></div></div></div><div style=\"width:45px;position:absolute;right:1px;top:0px;bottom:1px\" id=\"DAE4965703_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"DAE4965703\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;DAE4965703&#39;, &#39;DAE4965703&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmousedown=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseDown(event, &#39;DAE4965703&#39;, &#39;DAE4965703&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnClick(event, &#39;DAE4965703&#39;, &#39;DAE4965703&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"width:16px;position:absolute;top:14px;left:14px;height:16px\" id=\"GGP4965703_layoutdiv\"><div style=\"width:16px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:0px\" class=\"guiimage\" id=\"GGP4965703\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_responsive_tree_go_down_normal.png\" alt=\"\" id=\"GGP4965703_img\"></div></div></div></div></div><div style=\"width:1px;position:absolute;right:45px;top:0px;bottom:1px\" id=\"OEM4965703_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;padding-left:0px;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel\" id=\"OEM4965703\"></div></div><div style=\"position:absolute;right:0px;left:0px;bottom:0px;height:1px\" id=\"RER4965703_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;padding-left:0px;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel\" id=\"RER4965703\"></div></div></div></div></div><div style=\"position:absolute;right:0px;top:630px;left:0px;height:45px\" id=\"QDU4965705_layoutdiv\"><div style=\"background-color:#ffffff;padding-top:0px;top:0;color:#000000;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel dw-hover-class-foreground-23303030303030 dw-hover-class-background-23643764376437\" id=\"QDU4965705\"><div class=\"guilayoutabsolute\"><div style=\"position:absolute;right:46px;top:0px;left:1px;bottom:1px\" id=\"XAC4965705_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"XAC4965705\" ondblclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnDblClick(event, &#39;XAC4965705&#39;, &#39;XAC4965705&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;XAC4965705&#39;, &#39;XAC4965705&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"position:absolute;right:8px;top:15px;left:8px;height:20px\" id=\"RRO4965705_layoutdiv\"><div style=\"padding-top:0px;overflow:hidden;white-space:pre;padding-left:0px;width:100%;padding-bottom:0px;text-overflow:ellipsis;padding-right:0px;height:100%\" class=\"guilabel\" id=\"RRO4965705\">Basis-Plus system</div></div></div></div></div><div style=\"width:45px;position:absolute;right:1px;top:0px;bottom:1px\" id=\"XHW4965705_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"XHW4965705\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;XHW4965705&#39;, &#39;XHW4965705&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmousedown=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseDown(event, &#39;XHW4965705&#39;, &#39;XHW4965705&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnClick(event, &#39;XHW4965705&#39;, &#39;XHW4965705&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"width:16px;position:absolute;top:14px;left:14px;height:16px\" id=\"AEA4965705_layoutdiv\"><div style=\"width:16px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:0px\" class=\"guiimage\" id=\"AEA4965705\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_responsive_tree_go_down_normal.png\" alt=\"\" id=\"AEA4965705_img\"></div></div></div></div></div><div style=\"width:1px;position:absolute;right:45px;top:0px;bottom:1px\" id=\"HBQ4965705_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;padding-left:0px;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel\" id=\"HBQ4965705\"></div></div><div style=\"position:absolute;right:0px;left:0px;bottom:0px;height:1px\" id=\"YKJ4965705_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;padding-left:0px;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel\" id=\"YKJ4965705\"></div></div></div></div></div><div style=\"position:absolute;right:0px;top:675px;left:0px;height:45px\" id=\"MJX4965707_layoutdiv\"><div style=\"background-color:#ffffff;padding-top:0px;top:0;color:#000000;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel dw-hover-class-foreground-23303030303030 dw-hover-class-background-23643764376437\" id=\"MJX4965707\"><div class=\"guilayoutabsolute\"><div style=\"position:absolute;right:46px;top:0px;left:1px;bottom:1px\" id=\"OUX4965707_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"OUX4965707\" ondblclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnDblClick(event, &#39;OUX4965707&#39;, &#39;OUX4965707&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;OUX4965707&#39;, &#39;OUX4965707&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"position:absolute;right:8px;top:15px;left:8px;height:20px\" id=\"HJT4965707_layoutdiv\"><div style=\"padding-top:0px;overflow:hidden;white-space:pre;padding-left:0px;width:100%;padding-bottom:0px;text-overflow:ellipsis;padding-right:0px;height:100%\" class=\"guilabel\" id=\"HJT4965707\">Cutting</div></div></div></div></div><div style=\"width:45px;position:absolute;right:1px;top:0px;bottom:1px\" id=\"THJ4965707_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"THJ4965707\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;THJ4965707&#39;, &#39;THJ4965707&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmousedown=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseDown(event, &#39;THJ4965707&#39;, &#39;THJ4965707&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnClick(event, &#39;THJ4965707&#39;, &#39;THJ4965707&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"width:16px;position:absolute;top:14px;left:14px;height:16px\" id=\"UJP4965707_layoutdiv\"><div style=\"width:16px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:0px\" class=\"guiimage\" id=\"UJP4965707\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_responsive_tree_go_down_normal.png\" alt=\"\" id=\"UJP4965707_img\"></div></div></div></div></div><div style=\"width:1px;position:absolute;right:45px;top:0px;bottom:1px\" id=\"GOY4965707_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;padding-left:0px;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel\" id=\"GOY4965707\"></div></div><div style=\"position:absolute;right:0px;left:0px;bottom:0px;height:1px\" id=\"EXP4965707_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;padding-left:0px;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel\" id=\"EXP4965707\"></div></div></div></div></div><div style=\"position:absolute;right:0px;top:720px;left:0px;height:45px\" id=\"JPM4965708_layoutdiv\"><div style=\"background-color:#ffffff;padding-top:0px;top:0;color:#000000;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel dw-hover-class-foreground-23303030303030 dw-hover-class-background-23643764376437\" id=\"JPM4965708\"><div class=\"guilayoutabsolute\"><div style=\"position:absolute;right:46px;top:0px;left:1px;bottom:1px\" id=\"YHO4965708_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"YHO4965708\" ondblclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnDblClick(event, &#39;YHO4965708&#39;, &#39;YHO4965708&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;YHO4965708&#39;, &#39;YHO4965708&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"position:absolute;right:8px;top:15px;left:8px;height:20px\" id=\"BQR4965708_layoutdiv\"><div style=\"padding-top:0px;overflow:hidden;white-space:pre;padding-left:0px;width:100%;padding-bottom:0px;text-overflow:ellipsis;padding-right:0px;height:100%\" class=\"guilabel\" id=\"BQR4965708\">Drywall construction and renovation</div></div></div></div></div><div style=\"width:45px;position:absolute;right:1px;top:0px;bottom:1px\" id=\"LMT4965708_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"LMT4965708\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;LMT4965708&#39;, &#39;LMT4965708&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmousedown=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseDown(event, &#39;LMT4965708&#39;, &#39;LMT4965708&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnClick(event, &#39;LMT4965708&#39;, &#39;LMT4965708&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"width:16px;position:absolute;top:14px;left:14px;height:16px\" id=\"DRX4965708_layoutdiv\"><div style=\"width:16px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:0px\" class=\"guiimage\" id=\"DRX4965708\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_responsive_tree_go_down_normal.png\" alt=\"\" id=\"DRX4965708_img\"></div></div></div></div></div><div style=\"width:1px;position:absolute;right:45px;top:0px;bottom:1px\" id=\"IUS4965708_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;padding-left:0px;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel\" id=\"IUS4965708\"></div></div><div style=\"position:absolute;right:0px;left:0px;bottom:0px;height:1px\" id=\"EJP4965708_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;padding-left:0px;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel\" id=\"EJP4965708\"></div></div></div></div></div><div style=\"position:absolute;right:0px;top:765px;left:0px;height:45px\" id=\"SWW4965710_layoutdiv\"><div style=\"background-color:#ffffff;padding-top:0px;top:0;color:#000000;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel dw-hover-class-foreground-23303030303030 dw-hover-class-background-23643764376437\" id=\"SWW4965710\"><div class=\"guilayoutabsolute\"><div style=\"position:absolute;right:46px;top:0px;left:1px;bottom:1px\" id=\"KCW4965710_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"KCW4965710\" ondblclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnDblClick(event, &#39;KCW4965710&#39;, &#39;KCW4965710&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;KCW4965710&#39;, &#39;KCW4965710&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"position:absolute;right:8px;top:15px;left:8px;height:20px\" id=\"RSW4965710_layoutdiv\"><div style=\"padding-top:0px;overflow:hidden;white-space:pre;padding-left:0px;width:100%;padding-bottom:0px;text-overflow:ellipsis;padding-right:0px;height:100%\" class=\"guilabel\" id=\"RSW4965710\">Joining &ndash; DOMINO joining system</div></div></div></div></div><div style=\"width:45px;position:absolute;right:1px;top:0px;bottom:1px\" id=\"YKH4965710_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"YKH4965710\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;YKH4965710&#39;, &#39;YKH4965710&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmousedown=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseDown(event, &#39;YKH4965710&#39;, &#39;YKH4965710&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnClick(event, &#39;YKH4965710&#39;, &#39;YKH4965710&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"width:16px;position:absolute;top:14px;left:14px;height:16px\" id=\"JFQ4965710_layoutdiv\"><div style=\"width:16px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:0px\" class=\"guiimage\" id=\"JFQ4965710\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_responsive_tree_go_down_normal.png\" alt=\"\" id=\"JFQ4965710_img\"></div></div></div></div></div><div style=\"width:1px;position:absolute;right:45px;top:0px;bottom:1px\" id=\"KIO4965710_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;padding-left:0px;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel\" id=\"KIO4965710\"></div></div><div style=\"position:absolute;right:0px;left:0px;bottom:0px;height:1px\" id=\"DUC4965710_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;padding-left:0px;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel\" id=\"DUC4965710\"></div></div></div></div></div></div></div></div></div></div></div></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div></div><div style=\"background-color:transparent;left:0px;bottom:0px;vertical-align:middle;right:0px;text-align:left;height:1px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:49.999%;left:0;margin-top:0px;right:0;height:1px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"padding-top:0px;max-height:1px;margin:auto;padding-left:0px;width:100%;padding-bottom:0px;border-width:1px;min-height:1px;padding-right:0px;height:100%;min-width:10px\" class=\"guilabel\" id=\"EJM4965620\"></div></div></div><div style=\"background-color:transparent;left:0px;bottom:0px;vertical-align:bottom;right:0px;text-align:left;height:0px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;right:0;left:0;bottom:0;height:0px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"SMB4965620\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-left:0px;top:50%;left:50%;bottom:0;width:0px;margin-top:0px;right:0;height:0px\" class=\"guilayoutgridbag_centered\"></div></div></div></div></div></div></div></div></div></div></div></div></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div><div style=\"cursor:col-resize;margin-left:0px;background-color:#efefef;top:0;left:398px;bottom:0;width:16px\" class=\"guisplitpane_border_horizontal\" id=\"PBG4965620_divider\" customEventType=\"customTilt\" onmouseup=\"try {dwFwPreEv(event,true,this);dwSplitTilt(event, &#39;PBG4965620&#39;, false, true,32);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmousedown=\"try {dwFwPreEv(event,false,this);dwSplitDragStartEvent(event, &#39;PBG4965620&#39;, &#39;PBG4965620&#39;, &#39;column&#39;, &#39;PBG4965620_firstchildcell&#39;, &#39;PBG4965620_secondchildcell&#39;);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div style=\"cursor:inherit;width:16px;margin-top:-20px;;top:50%;height:32px\" class=\"guisplitpane_divider_content_container\" id=\"PBG4965620_divider_circles_container\"><div style=\"border-radius:2px;cursor:inherit;box-shadow:0px 1px 2px rgba(0,0,0,0.24);top:4px;left:5px;width:4px;height:4px\" class=\"guisplitpane_circle\" id=\"PBG4965620_divider_circle1\"></div><div style=\"border-radius:2px;cursor:inherit;box-shadow:0px 1px 2px rgba(0,0,0,0.24);top:12px;left:5px;width:4px;height:4px\" class=\"guisplitpane_circle\" id=\"PBG4965620_divider_circle2\"></div><div style=\"border-radius:2px;cursor:inherit;box-shadow:0px 1px 2px rgba(0,0,0,0.24);top:20px;left:5px;width:4px;height:4px\" class=\"guisplitpane_circle\" id=\"PBG4965620_divider_circle3\"></div><div style=\"border-radius:2px;cursor:inherit;box-shadow:0px 1px 2px rgba(0,0,0,0.24);top:28px;left:5px;width:4px;height:4px\" class=\"guisplitpane_circle\" id=\"PBG4965620_divider_circle4\"></div></div></div><div style=\"left:414px\" id=\"PBG4965620_secondchildcell\" class=\"guisplitpane_container_right\"><div style=\"background-color:#efefef;padding-top:24px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:24px\" class=\"guipanel\" id=\"EOV4965633\"><div style=\"right:24px;top:24px;left:0px;bottom:0px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><input name=\"ERK4965633_dividerPosition\" value=\"142\" type=\"hidden\" id=\"ERK4965633_dividerPosition\"><div style=\"background-color:#efefef;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guisplitpane\" dimension=\"width\" id=\"ERK4965633\"><div style=\"width:142px\" id=\"ERK4965633_firstchildcell\" class=\"guisplitpane_container_left\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"HGO4965620\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder\"><div style=\"height:48px\" class=\"guilayoutborder_north\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:4px;right:0;padding-right:0px\" class=\"guipanel\" id=\"LJL4965620\"><div style=\"right:0px;top:0px;left:0px;bottom:4px\" class=\"guilayoutgridbag\"><div style=\"margin-top:-22px;right:0;top:50%;left:0px;bottom:0;height:44px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;right:0px;text-align:left;height:44px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-22px;right:0;margin-bottom:4px;margin-right:0px;height:40px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;padding-top:0px;top:0;max-width:136px;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"SHJ4965734\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-top:-20px;right:0;top:50%;left:0px;bottom:0;height:40px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;right:40px;text-align:left;height:40px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-11px;right:0;margin-bottom:0px;margin-right:0px;height:28px\" class=\"guilayoutgridbag_container_padded\"><div style=\"padding-top:0px;white-space:pre;font-weight:600;padding-left:0px;padding-bottom:0px;font-size:20px;line-height:21px;font-style:normal;text-overflow:ellipsis;overflow:hidden;width:100%;font-family:Open Sans,Segoe UI,Verdana,Tahoma,Arial,sans-serif,Arial Unicode MS,Helvetica,Lucida Grande,Geneva,Sans-Serif;padding-right:0px;height:100%\" class=\"guilabel\" id=\"AWB4965733\">FESTOOL</div></div></div><div style=\"background-color:transparent;top:0px;vertical-align:middle;width:40px;right:0px;text-align:right;height:40px\" class=\"guilayoutgridbag_container\"><div style=\"width:40px;margin-top:-20px;right:0;top:50%;height:40px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"SQG4965733\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:40px;top:0;left:0;height:40px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:40px;text-align:left;height:40px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-20px;right:0;height:40px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><button style=\"cursor:pointer;padding-top:0px;max-height:40px;color:#000000;padding-left:0px;padding-bottom:0px;border-color:transparent;min-height:40px;background-color:transparent;max-width:40px;width:100%;border-width:0px;border-style:solid;text-align:center;padding-right:0px;height:100%;min-width:40px\" type=\"button\" name=\"RAB4965733\" class=\"guibutton_enabled brightenOnHoverForGrayComponents brightenAndRemoveShadowOnClick brightenAndRemoveShadowAtInnerImageOnClick cursor_pointer\" id=\"RAB4965733\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;LXC4965733\\&quot;&gt;End multi selection&lt;\\/div&gt;&#39;, 250, 137, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxButtonOnClick(event, &#39;RAB4965733&#39;, &#39;RAB4965733&#39;, &#39;&#39;, true, true);dwFrameworkPreventDefaultBehaviour(event);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"width:16px;height:16px\" src=\"WEB-RES/resource/resource?id=bi_image_EE100A093B440B59D1BA01F3B8E32F68\" alt=\"\" class=\"guibutton_icon\"><span style=\"cursor:pointer;font-weight:inherit;vertical-align:middle;font-size:inherit;font-family:inherit;line-height:inherit;font-style:inherit\" id=\"RAB4965733_text\" class=\"cursor_pointer\"></span></button></div></div></div></div></div></div></div></div></div></div></div></div><div style=\"background-color:transparent;top:0px;vertical-align:top;width:0px;right:0px;text-align:right;height:44px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:0;width:0px;margin-top:0px;right:0;margin-bottom:0px;margin-right:4px;height:0px\" class=\"guilayoutgridbag_container_padded\"><button style=\"cursor:pointer;padding-top:0px;z-index:1;color:#ffffff;padding-left:0px;display:none;padding-bottom:0px;min-height:40px;filter:progid:DXImageTransform.Microsoft.Shadow(color=&#39;rgba(0,0,0,0.24)&#39;, Direction=135, Strength=0);border-radius:2px;background-color:#46b82e;box-shadow:0 2px 2px rgba(0,0,0,0.24);width:100%;border-width:0px;-webkit-box-shadow:0 2px 2px rgba(0,0,0,0.24);text-align:center;padding-right:0px;height:100%;min-width:100px\" type=\"button\" name=\"SCC4965734\" class=\"guibutton_enabled brightenOnHoverForGrayComponents brightenAndRemoveShadowOnClick highlightOnHover cursor_pointer\" id=\"SCC4965734\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxButtonOnClick(event, &#39;SCC4965734&#39;, &#39;SCC4965734&#39;, &#39;&#39;, true, true);dwFrameworkPreventDefaultBehaviour(event);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"width:16px;height:16px;margin-right:4px\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.apps.etk.base.misc.b.a_multiselection_order_button_active.png\" alt=\"\" class=\"guibutton_icon\"><span style=\"cursor:pointer;font-weight:inherit;vertical-align:middle;font-size:inherit;font-family:inherit;line-height:inherit;font-style:inherit\" id=\"SCC4965734_text\" class=\"cursor_pointer\">Add to the shopping cart</span></button></div></div></div></div></div></div><div style=\"top:48px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:48px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><input name=\"LSK4965620_dividerPosition\" value=\"660\" type=\"hidden\" id=\"LSK4965620_dividerPosition\"><div style=\"background-color:#efefef;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guisplitpane\" dimension=\"height\" id=\"LSK4965620\"><div style=\"height:660px\" id=\"LSK4965620_firstchildcell\" class=\"guisplitpane_container_top\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"HSX4965633\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"ARV4965633\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-top:0;right:0;top:0px;left:0px;bottom:0;height:100%\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;right:0px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:1px;top:0;left:0;bottom:0;margin-top:1px;right:0;margin-bottom:1px;margin-right:1px\" class=\"guilayoutgridbag_container_padded\"><div style=\"padding-top:0px;z-index:1;bottom:0;padding-left:0px;padding-bottom:0px;right:0;filter:progid:DXImageTransform.Microsoft.Shadow(color=&#39;rgba(0,0,0,0.3)&#39;, Direction=135, Strength=0);border-radius:2px;background-color:#ffffff;box-shadow:0 1px 2px rgba(0,0,0,0.30);top:0;left:0;-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.30);padding-right:0px\" class=\"guipanel\" id=\"IUQ4965633\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"right:0;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:top;right:0px;text-align:left;height:0px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;right:0;top:0;left:0;height:0px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:none;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"DIT4965633\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div></div><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;right:0px;text-align:left;height:0px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:0px;right:0;height:0px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"padding-top:0px;max-height:1px;margin:auto;padding-left:0px;display:none;width:100%;padding-bottom:0px;border-width:1px;min-height:1px;padding-right:0px;height:100%;min-width:10px\" class=\"guilabel\" id=\"DTK4965633\"></div></div></div><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;right:0px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:0;left:0;bottom:0;margin-top:0px;right:0;margin-bottom:0px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;padding-top:0px;margin:auto;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"DJY4965633\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"background-color:#ffffff;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"WAR4965620\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"LAC4965940\" onMouseMove=\"var buttonPanel = document.getElementById(&#39;KPX4965940&#39;);var buttonBackgroundPanel = document.getElementById(&#39;QII4965958&#39;);if(buttonPanel.timeoutId) {clearTimeout(buttonPanel.timeoutId)};buttonPanel.style.opacity=&#39;1.0&#39;;buttonPanel.style.visibility=&#39;visible&#39;;buttonPanel.style.transition=&#39;0.4s&#39;;buttonBackgroundPanel.style.opacity=&#39;1.0&#39;;buttonBackgroundPanel.style.visibility=&#39;visible&#39;;buttonBackgroundPanel.style.transition=&#39;0.4s&#39;;buttonPanel.timeoutId = setTimeout(function() { buttonPanel.style.opacity=&#39;0.0&#39;;buttonPanel.style.visibility=&#39;hidden&#39;;buttonPanel.style.transition=&#39;0.4s&#39;;buttonBackgroundPanel.style.opacity=&#39;0.0&#39;;buttonBackgroundPanel.style.visibility=&#39;hidden&#39;;buttonBackgroundPanel.style.transition=&#39;0.4s&#39;; buttonPanel.timeoutId = null;}, 3000);\" onMouseLeave=\"var buttonPanel = document.getElementById(&#39;KPX4965940&#39;);var buttonBackgroundPanel = document.getElementById(&#39;QII4965958&#39;);buttonPanel.style.opacity=&#39;0.0&#39;;buttonPanel.style.visibility=&#39;hidden&#39;;buttonPanel.style.transition=&#39;0.4s&#39;;buttonBackgroundPanel.style.opacity=&#39;0.0&#39;;buttonBackgroundPanel.style.visibility=&#39;hidden&#39;;buttonBackgroundPanel.style.transition=&#39;0.4s&#39;;\" onClick=\"var buttonPanel = document.getElementById(&#39;KPX4965940&#39;);var buttonBackgroundPanel = document.getElementById(&#39;QII4965958&#39;);if(buttonPanel.timeoutId) {clearTimeout(buttonPanel.timeoutId)};buttonPanel.style.opacity=&#39;1.0&#39;;buttonPanel.style.visibility=&#39;visible&#39;;buttonPanel.style.transition=&#39;0.4s&#39;;buttonBackgroundPanel.style.opacity=&#39;1.0&#39;;buttonBackgroundPanel.style.visibility=&#39;visible&#39;;buttonBackgroundPanel.style.transition=&#39;0.4s&#39;;buttonPanel.timeoutId = setTimeout(function() { buttonPanel.style.opacity=&#39;0.0&#39;;buttonPanel.style.visibility=&#39;hidden&#39;;buttonPanel.style.transition=&#39;0.4s&#39;;buttonBackgroundPanel.style.opacity=&#39;0.0&#39;;buttonBackgroundPanel.style.visibility=&#39;hidden&#39;;buttonBackgroundPanel.style.transition=&#39;0.4s&#39;; buttonPanel.timeoutId = null;}, 3000);\"><div class=\"guilayoutabsolute\"><div style=\"width:0px;position:absolute;top:0px;left:0px;height:0px\" id=\"RNT4965681_layoutdiv\"><input name=\"RNT4965681_imagescroll_scrollTop\" value=\"0\" type=\"hidden\" id=\"RNT4965681_imagescroll_scrollTop\"><input name=\"RNT4965681_imagescroll_scrollLeft\" value=\"0\" type=\"hidden\" id=\"RNT4965681_imagescroll_scrollLeft\"><div style=\"background-color:#ffffff;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\" class=\"guiviewerimage\" id=\"RNT4965681\" onmouseup=\"try {dwFwPreEv(event,false,this);DW_IMAGE_NAVRECT_MOVE = false; DW_IMAGE_SLIDER_MOVE = false;;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" oncontextmenu=\"try {dwFwPreEv(event,false,this);dwFrameworkPreventDefaultBehaviour(event); dwHelperShowContextMenu(event, &#39;RNT4965681&#39;, &#39;RNT4965681&#39;, &#39;BWN4965681&#39;, new Array(), new Array(&#39;AMC4965681&#39;, &#39;QJK4965681&#39;, &#39;PBR4965983&#39;, &#39;TWL4965983&#39;, &#39;RGC4965983&#39;, &#39;APD4965983&#39;, &#39;GNR4965983&#39;, &#39;CDL4965983&#39;, &#39;OQA4965681&#39;), &#39;TWM4965563&#39;);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div style=\"background-color:white;cursor:url(&#39;WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.controls.viewer.b.a.a_open_hand.gif&#39;) 15 13, default;overflow:auto;top:0px;left:0px;touch-action:pan-x pan-y;bottom:0px;position:absolute;right:0px;-webkit-overflow-scrolling:touch\" id=\"RNT4965681_imagescroll\" dwOpenCursor=\"url(&#39;WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.controls.viewer.b.a.a_open_hand.gif&#39;) 15 13, default\" dwClosedCursor=\"url(&#39;WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.controls.viewer.b.a.a_closed_hand.gif&#39;) 15 13, default\" class=\"modern_scrollpane_design_thin\" onselectstart=\"try {dwFwPreEv(event,false,this);return false;;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmousemove=\"try {dwFwPreEv(event,true,this);dwImageViewerImageMouseMove(event, &#39;RNT4965681&#39;);dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,true,this);dwImageViewerImageMouseUp(&#39;RNT4965681&#39;); DW_IMAGE_NAVRECT_MOVE = false; DW_IMAGE_SLIDER_MOVE = false;;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseout=\"try {dwFwPreEv(event,false,this);dwImageViewerImageMouseOut(&#39;RNT4965681&#39;);dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onscroll=\"try {dwFwPreEv(event,false,this);dwImageViewerScrollUpdate(&#39;RNT4965681&#39;, false);dwAjaxScrollpaneScrolled(event, &#39;RNT4965681&#39;, &#39;RNT4965681_imagescroll&#39;, &#39;&#39;, true);dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmousedown=\"try {dwFwPreEv(event,true,this);dwImageViewerImageMouseDown(event, &#39;RNT4965681&#39;);dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" ondragstart=\"try {dwFwPreEv(event,false,this);return false;;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmousewheel=\"try {dwFwPreEv(event,false,this);dwImageViewerMouseWheel(event, &#39;RNT4965681&#39;);dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div style=\"cursor:url(&#39;WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.controls.viewer.b.a.a_open_hand.gif&#39;) 15 13, default;position:absolute\" id=\"RNT4965681_tiles\" dwOpenCursor=\"url(&#39;WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.controls.viewer.b.a.a_open_hand.gif&#39;) 15 13, default\" dwClosedCursor=\"url(&#39;WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.controls.viewer.b.a.a_closed_hand.gif&#39;) 15 13, default\"></div><div style=\"cursor:url(&#39;WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.controls.viewer.b.a.a_open_hand.gif&#39;) 15 13, default;touch-action:pan-x pan-y;position:absolute\" id=\"RNT4965681_hotspots_click\" dwOpenCursor=\"url(&#39;WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.controls.viewer.b.a.a_open_hand.gif&#39;) 15 13, default\" dwClosedCursor=\"url(&#39;WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.controls.viewer.b.a.a_closed_hand.gif&#39;) 15 13, default\"></div><div style=\"border:1px dotted #ff0000;background-color:#C0C0C0;filter:Alpha(opacity=40);z-index:90;top:140px;left:170px;display:none;width:30px;position:absolute;opacity:0.4;height:30px\" id=\"RNT4965681_zoom2rect\" onmousemove=\"try {dwFwPreEv(event,false,this);return false;;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"></div></div><div style=\"margin-left:-16px;z-index:10;top:50%;visibility:hidden;left:50%;width:32px;margin-top:-16px;position:absolute;height:32px;pointer-events:none\" id=\"RNT4965681_magnifier\"><img style=\"width:32px;height:32px\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_search_32px_white.png\" alt=\"\" width=\"32\" height=\"32\"></div><div style=\"display:none;background-image:url(&quot;WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_imageviewer_pan_closed_mobile.png&quot;)\" class=\"guiviewerimage_overview\" id=\"RNT4965681_overview\" onselectstart=\"try {dwFwPreEv(event,false,this);return false;;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmousemove=\"try {dwFwPreEv(event,false,this);if (DW_IMAGE_NAVRECT_MOVE) { dwImageViewerGotoMousePos(event, &#39;RNT4965681&#39;) };dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmousedown=\"try {dwFwPreEv(event,false,this);DW_IMAGE_NAVRECT_MOVE = true; dwImageViewerGotoMousePos(event, &#39;RNT4965681&#39;);dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);DW_IMAGE_NAVRECT_MOVE = false; DW_IMAGE_SLIDER_MOVE = false;;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" ondragstart=\"try {dwFwPreEv(event,false,this);return false;;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><button style=\"background-repeat:no-repeat;background-size:cover;top:8px;left:8px;width:40px;background-image:url(&quot;WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_imageviewer_buttonback_default.png&quot;);height:40px\" type=\"button\" class=\"guiviewerimage_button\" background-default=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_imageviewer_buttonback_default.png\" background-pressed=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_imageviewer_buttonback_down.png\" background-hover=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_imageviewer_buttonback_hover.png\" id=\"RNT4965681_zoominbutton\" ondblclick=\"try {dwFwPreEv(event,false,this);dwImageViewerZoomIn(&#39;RNT4965681&#39;, 1); return false;;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmousedown=\"try {dwFwPreEv(event,false,this);this.style.backgroundImage=&#39;url(WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_imageviewer_buttonback_down.png)&#39;;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onfocus=\"try {dwFwPreEv(event,false,this);this.blur();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);this.style.backgroundImage=&#39;url(WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_imageviewer_buttonback_default.png)&#39;; DW_IMAGE_NAVRECT_MOVE = false; DW_IMAGE_SLIDER_MOVE = false;;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,false,this);dwTooltip_delayShowTooltip(event, &#39;Scale image up&#39;, 250, 108, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwImageViewerZoomIn(&#39;RNT4965681&#39;, 1); return false;;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"width:16px;top:1px;height:16px\" src=\"WEB-RES/resource/resource?id=bi_image_6EA83BB3BFF37828FA6BF2163F5FEE05\" alt=\"\" class=\"guiviewerimage_buttonimage\" id=\"RNT4965681_zoominbutton_buttonimage\"></button><button style=\"background-repeat:no-repeat;background-size:cover;top:48px;left:8px;width:40px;background-image:url(&quot;WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_imageviewer_buttonback_default.png&quot;);height:40px\" type=\"button\" class=\"guiviewerimage_button\" background-default=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_imageviewer_buttonback_default.png\" background-pressed=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_imageviewer_buttonback_down.png\" background-hover=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_imageviewer_buttonback_hover.png\" id=\"RNT4965681_zoomoutbutton\" ondblclick=\"try {dwFwPreEv(event,false,this);dwImageViewerZoomOut(&#39;RNT4965681&#39;, 1); return false;;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmousedown=\"try {dwFwPreEv(event,false,this);this.style.backgroundImage=&#39;url(WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_imageviewer_buttonback_down.png)&#39;;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onfocus=\"try {dwFwPreEv(event,false,this);this.blur();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);this.style.backgroundImage=&#39;url(WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_imageviewer_buttonback_default.png)&#39;; DW_IMAGE_NAVRECT_MOVE = false; DW_IMAGE_SLIDER_MOVE = false;;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,false,this);dwTooltip_delayShowTooltip(event, &#39;Scale image down&#39;, 250, 127, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwImageViewerZoomOut(&#39;RNT4965681&#39;, 1); return false;;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"width:16px;top:1px;height:16px\" src=\"WEB-RES/resource/resource?id=bi_image_93160D5FE70AF04A8C9FF64155EE2927\" alt=\"\" class=\"guiviewerimage_buttonimage\" id=\"RNT4965681_zoomoutbutton_buttonimage\"></button><button style=\"background-repeat:no-repeat;background-size:cover;top:94px;left:8px;width:40px;background-image:url(&quot;WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_imageviewer_buttonback_default.png&quot;);height:40px\" type=\"button\" class=\"guiviewerimage_button\" background-default=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_imageviewer_buttonback_default.png\" background-pressed=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_imageviewer_buttonback_down.png\" background-hover=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_imageviewer_buttonback_hover.png\" id=\"RNT4965681_zoomfitbutton\" ondblclick=\"try {dwFwPreEv(event,false,this);dwImageViewerZoomFit(&#39;RNT4965681&#39;); return false;;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmousedown=\"try {dwFwPreEv(event,false,this);this.style.backgroundImage=&#39;url(WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_imageviewer_buttonback_down.png)&#39;;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onfocus=\"try {dwFwPreEv(event,false,this);this.blur();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);this.style.backgroundImage=&#39;url(WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_imageviewer_buttonback_default.png)&#39;; DW_IMAGE_NAVRECT_MOVE = false; DW_IMAGE_SLIDER_MOVE = false;;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,false,this);dwTooltip_delayShowTooltip(event, &#39;Adjust drawing to window width&#39;, 250, 223, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwImageViewerZoomFit(&#39;RNT4965681&#39;); return false;;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"width:16px;top:1px;height:16px\" src=\"WEB-RES/resource/resource?id=bi_image_8E06F47E6AD85371A247FF4FB5E7885E\" alt=\"\" class=\"guiviewerimage_buttonimage\" id=\"RNT4965681_zoomfitbutton_buttonimage\"></button><button style=\"background-repeat:no-repeat;background-size:cover;top:130px;left:8px;width:40px;background-image:url(&quot;WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_imageviewer_buttonback_default.png&quot;);height:40px\" type=\"button\" class=\"guiviewerimage_button\" background-default=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_imageviewer_buttonback_default.png\" background-pressed=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_imageviewer_buttonback_down.png\" background-hover=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_imageviewer_buttonback_hover.png\" id=\"RNT4965681_openbutton\" ondblclick=\"try {dwFwPreEv(event,false,this);dwImageViewerTogglePan(&#39;RNT4965681&#39;); return false;;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmousedown=\"try {dwFwPreEv(event,false,this);this.style.backgroundImage=&#39;url(WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_imageviewer_buttonback_down.png)&#39;;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onfocus=\"try {dwFwPreEv(event,false,this);this.blur();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);this.style.backgroundImage=&#39;url(WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_imageviewer_buttonback_default.png)&#39;; DW_IMAGE_NAVRECT_MOVE = false; DW_IMAGE_SLIDER_MOVE = false;;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,false,this);dwTooltip_delayShowTooltip(event, &#39;Show pan window&#39;, 250, 128, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwImageViewerTogglePan(&#39;RNT4965681&#39;); return false;;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"width:20px;top:1px;height:16px\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_imageviewer_overview_expand.png\" alt=\"\" class=\"guiviewerimage_buttonimage\" id=\"RNT4965681_openbutton_buttonimage\"></button><div style=\"position:absolute\" id=\"RNT4965681_pandiv\"><div style=\"width:142px;background-image:url(&#39;WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.controls.viewer.b.b.a_overview_slider.png&#39;);top:143px;left:52px;height:28px;display:none\" class=\"guiviewerimage_slider\" id=\"RNT4965681_slider\" onmouseup=\"try {dwFwPreEv(event,false,this);DW_IMAGE_NAVRECT_MOVE = false; DW_IMAGE_SLIDER_MOVE = false;;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmousemove=\"try {dwFwPreEv(event,false,this);if (DW_IMAGE_SLIDER_MOVE &amp;&amp; !dwUtilsCheckMouseOutsideElement(event, $(&#39;RNT4965681_slider&#39;))) { dwImageViewerSliderMoved(&#39;RNT4965681&#39;, event); };dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmousedown=\"try {dwFwPreEv(event,false,this);DW_IMAGE_SLIDER_MOVE = true; dwImageViewerSliderMoved(&#39;RNT4965681&#39;, event);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"width:11px;position:absolute;top:1px;left:66px\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.controls.viewer.b.b.a_overview_slider_knob.png\" alt=\"\" id=\"RNT4965681_sliderKnob\" onmouseup=\"try {dwFwPreEv(event,false,this);this.src=&#39;WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.controls.viewer.b.b.a_overview_slider_knob.png&#39;; DW_IMAGE_NAVRECT_MOVE = false; DW_IMAGE_SLIDER_MOVE = false;;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmousedown=\"try {dwFwPreEv(event,false,this); DW_IMAGE_SLIDER_MOVE = true; return false;;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"></div><img style=\"position:absolute;visibility:hidden;top:36px;left:57px\" src=\"WEB-RES/resource/resource?id=ba_image_ba_image_EXPL_EKAT-START_2019.JPG__D1AA088F89B0FB8090187E6C0A94DB42_image_png_subtype_unknown_132x120_false_false_29F1C660F8DEDEF0FBC66C33442CCA19\" alt=\"\" id=\"RNT4965681_imgPreview\" onselect=\"try {dwFwPreEv(event,false,this);return false;;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onselectstart=\"try {dwFwPreEv(event,false,this);return false;;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmousedown=\"try {dwFwPreEv(event,false,this);DW_IMAGE_NAVRECT_MOVE = true; dwImageViewerGotoMousePos(event, &#39;RNT4965681&#39;);dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"width:20px;position:absolute;top:8px;left:52px;height:20px;display:none\" src=\"WEB-RES/resource/resource?id=bi_image_class_image_de.docware.framework.modules.gui.controls.viewer.b.b.a_overview_cornerNW_mobile.png_rotated_0_21CFF2F194E28CCCB96FE79A168D0FC7\" alt=\"\" class=\"guiviewerimage_arrow\" id=\"RNT4965681_overview_arrow0\" onmousedown=\"try {dwFwPreEv(event,false,this);this.src=&#39;WEB-RES/resource/resource?id=bi_image_class_image_de.docware.framework.modules.gui.controls.viewer.b.b.a_overview_cornerNW_mobile_pressed.png_rotated_0_21CFF2F194E28CCCB96FE79A168D0FC7&#39;;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);this.src=&#39;WEB-RES/resource/resource?id=bi_image_class_image_de.docware.framework.modules.gui.controls.viewer.b.b.a_overview_cornerNW_mobile.png_rotated_0_21CFF2F194E28CCCB96FE79A168D0FC7&#39;; DW_IMAGE_NAVRECT_MOVE = false; DW_IMAGE_SLIDER_MOVE = false;;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseout=\"try {dwFwPreEv(event,false,this);this.src=&#39;WEB-RES/resource/resource?id=bi_image_class_image_de.docware.framework.modules.gui.controls.viewer.b.b.a_overview_cornerNW_mobile.png_rotated_0_21CFF2F194E28CCCB96FE79A168D0FC7&#39;;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwImageViewerPanWindowCornerClicked(event, &#39;RNT4965681&#39;, 0);dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"width:20px;position:absolute;top:8px;left:174px;height:20px;display:none\" src=\"WEB-RES/resource/resource?id=bi_image_class_image_de.docware.framework.modules.gui.controls.viewer.b.b.a_overview_cornerNW_mobile.png_rotated_90_21CFF2F194E28CCCB96FE79A168D0FC7\" alt=\"\" class=\"guiviewerimage_arrow\" id=\"RNT4965681_overview_arrow1\" onmousedown=\"try {dwFwPreEv(event,false,this);this.src=&#39;WEB-RES/resource/resource?id=bi_image_class_image_de.docware.framework.modules.gui.controls.viewer.b.b.a_overview_cornerNW_mobile_pressed.png_rotated_90_21CFF2F194E28CCCB96FE79A168D0FC7&#39;;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);this.src=&#39;WEB-RES/resource/resource?id=bi_image_class_image_de.docware.framework.modules.gui.controls.viewer.b.b.a_overview_cornerNW_mobile.png_rotated_90_21CFF2F194E28CCCB96FE79A168D0FC7&#39;; DW_IMAGE_NAVRECT_MOVE = false; DW_IMAGE_SLIDER_MOVE = false;;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseout=\"try {dwFwPreEv(event,false,this);this.src=&#39;WEB-RES/resource/resource?id=bi_image_class_image_de.docware.framework.modules.gui.controls.viewer.b.b.a_overview_cornerNW_mobile.png_rotated_90_21CFF2F194E28CCCB96FE79A168D0FC7&#39;;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwImageViewerPanWindowCornerClicked(event, &#39;RNT4965681&#39;, 1);dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"width:20px;position:absolute;top:123px;left:52px;height:20px;display:none\" src=\"WEB-RES/resource/resource?id=bi_image_class_image_de.docware.framework.modules.gui.controls.viewer.b.b.a_overview_cornerNW_mobile.png_rotated_270_21CFF2F194E28CCCB96FE79A168D0FC7\" alt=\"\" class=\"guiviewerimage_arrow\" id=\"RNT4965681_overview_arrow2\" onmousedown=\"try {dwFwPreEv(event,false,this);this.src=&#39;WEB-RES/resource/resource?id=bi_image_class_image_de.docware.framework.modules.gui.controls.viewer.b.b.a_overview_cornerNW_mobile_pressed.png_rotated_270_21CFF2F194E28CCCB96FE79A168D0FC7&#39;;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);this.src=&#39;WEB-RES/resource/resource?id=bi_image_class_image_de.docware.framework.modules.gui.controls.viewer.b.b.a_overview_cornerNW_mobile.png_rotated_270_21CFF2F194E28CCCB96FE79A168D0FC7&#39;; DW_IMAGE_NAVRECT_MOVE = false; DW_IMAGE_SLIDER_MOVE = false;;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseout=\"try {dwFwPreEv(event,false,this);this.src=&#39;WEB-RES/resource/resource?id=bi_image_class_image_de.docware.framework.modules.gui.controls.viewer.b.b.a_overview_cornerNW_mobile.png_rotated_270_21CFF2F194E28CCCB96FE79A168D0FC7&#39;;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwImageViewerPanWindowCornerClicked(event, &#39;RNT4965681&#39;, 2);dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"width:20px;position:absolute;top:123px;left:174px;height:20px;display:none\" src=\"WEB-RES/resource/resource?id=bi_image_class_image_de.docware.framework.modules.gui.controls.viewer.b.b.a_overview_cornerNW_mobile.png_rotated_180_21CFF2F194E28CCCB96FE79A168D0FC7\" alt=\"\" class=\"guiviewerimage_arrow\" id=\"RNT4965681_overview_arrow3\" onmousedown=\"try {dwFwPreEv(event,false,this);this.src=&#39;WEB-RES/resource/resource?id=bi_image_class_image_de.docware.framework.modules.gui.controls.viewer.b.b.a_overview_cornerNW_mobile_pressed.png_rotated_180_21CFF2F194E28CCCB96FE79A168D0FC7&#39;;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);this.src=&#39;WEB-RES/resource/resource?id=bi_image_class_image_de.docware.framework.modules.gui.controls.viewer.b.b.a_overview_cornerNW_mobile.png_rotated_180_21CFF2F194E28CCCB96FE79A168D0FC7&#39;; DW_IMAGE_NAVRECT_MOVE = false; DW_IMAGE_SLIDER_MOVE = false;;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseout=\"try {dwFwPreEv(event,false,this);this.src=&#39;WEB-RES/resource/resource?id=bi_image_class_image_de.docware.framework.modules.gui.controls.viewer.b.b.a_overview_cornerNW_mobile.png_rotated_180_21CFF2F194E28CCCB96FE79A168D0FC7&#39;;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwImageViewerPanWindowCornerClicked(event, &#39;RNT4965681&#39;, 3);dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div style=\"border:1px solid #ff0000;visibility:hidden;top:40px;left:70px;width:0px;position:absolute;height:0px\" id=\"RNT4965681_imageNavRect\"><div style=\"background-color:#C0C0C0;filter:alpha(opacity=40.0);visibility:hidden;width:0px;position:absolute;opacity:0.4;height:0px\" id=\"RNT4965681_imageNavRectInner\"></div></div></div></div></div></div><div style=\"width:280px;z-index:800;position:absolute;top:-40px;left:-140px;height:40px\" id=\"KPX4965940_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"KPX4965940\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:280px;top:0;left:0;height:40px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:280px;text-align:center;height:40px\" class=\"guilayoutgridbag_container\"><div style=\"width:280px;margin-left:-140px;margin-top:-20px;top:50%;left:50%;height:40px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;padding-top:0px;margin:auto;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"RFB4965940\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:280px;top:0;left:0;height:40px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:40px;text-align:left;height:40px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-20px;right:0;height:40px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><button style=\"cursor:pointer;padding-top:0px;max-height:40px;color:#000000;padding-left:0px;padding-bottom:0px;border-color:transparent;min-height:40px;background-color:transparent;max-width:40px;width:100%;border-width:0px;border-style:solid;text-align:center;padding-right:0px;height:100%;min-width:40px\" type=\"button\" name=\"UON4965940\" class=\"guibutton_enabled brightenOnHoverForGrayComponents brightenAndRemoveShadowOnClick brightenAndRemoveShadowAtInnerImageOnClick cursor_pointer\" id=\"UON4965940\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;JMR4965941\\&quot;&gt;Rotate drawing by 90&lt;\\/div&gt;&#39;, 250, 150, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxButtonOnClick(event, &#39;UON4965940&#39;, &#39;UON4965940&#39;, &#39;&#39;, true, true);dwFrameworkPreventDefaultBehaviour(event);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"width:16px;height:16px\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_rotate_image.png\" alt=\"\" class=\"guibutton_icon\"><span style=\"cursor:pointer;font-weight:inherit;vertical-align:middle;font-size:inherit;font-family:inherit;line-height:inherit;font-style:inherit\" id=\"UON4965940_text\" class=\"cursor_pointer\"></span></button></div></div><div style=\"background-color:transparent;top:0px;left:40px;vertical-align:middle;width:40px;text-align:left;height:40px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-20px;right:0;height:40px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><button style=\"cursor:pointer;padding-top:0px;max-height:40px;color:#000000;padding-left:0px;padding-bottom:0px;border-color:transparent;min-height:40px;background-color:transparent;max-width:40px;width:100%;border-width:0px;border-style:solid;text-align:center;padding-right:0px;height:100%;min-width:40px\" type=\"button\" name=\"TXW4965941\" class=\"guibutton_enabled brightenOnHoverForGrayComponents brightenAndRemoveShadowOnClick brightenAndRemoveShadowAtInnerImageOnClick cursor_pointer\" id=\"TXW4965941\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;TOJ4965941\\&quot;&gt;Disable fading of this button bar&lt;\\/div&gt;&#39;, 250, 227, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxButtonOnClick(event, &#39;TXW4965941&#39;, &#39;TXW4965941&#39;, &#39;&#39;, true, true);dwFrameworkPreventDefaultBehaviour(event);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"width:16px;height:16px\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_deactivate_fading_overlay.png\" alt=\"\" class=\"guibutton_icon\"><span style=\"cursor:pointer;font-weight:inherit;vertical-align:middle;font-size:inherit;font-family:inherit;line-height:inherit;font-style:inherit\" id=\"TXW4965941_text\" class=\"cursor_pointer\"></span></button></div></div><div style=\"background-color:transparent;top:0px;left:80px;vertical-align:middle;width:40px;text-align:left;height:40px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-20px;right:0;height:40px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><button style=\"cursor:pointer;padding-top:0px;max-height:40px;color:#000000;padding-left:0px;padding-bottom:0px;border-color:transparent;min-height:40px;background-color:transparent;max-width:40px;width:100%;border-width:0px;border-style:solid;text-align:center;padding-right:0px;height:100%;min-width:40px\" type=\"button\" name=\"TXI4965941\" class=\"guibutton_enabled brightenOnHoverForGrayComponents brightenAndRemoveShadowOnClick brightenAndRemoveShadowAtInnerImageOnClick cursor_pointer\" id=\"TXI4965941\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;HCV4965941\\&quot;&gt;Scale image up&lt;\\/div&gt;&#39;, 250, 110, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxButtonOnClick(event, &#39;TXI4965941&#39;, &#39;TXI4965941&#39;, &#39;&#39;, true, true);dwFrameworkPreventDefaultBehaviour(event);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"width:16px;height:16px\" src=\"WEB-RES/resource/resource?id=bi_image_6EA83BB3BFF37828FA6BF2163F5FEE05\" alt=\"\" class=\"guibutton_icon\"><span style=\"cursor:pointer;font-weight:inherit;vertical-align:middle;font-size:inherit;font-family:inherit;line-height:inherit;font-style:inherit\" id=\"TXI4965941_text\" class=\"cursor_pointer\"></span></button></div></div><div style=\"background-color:transparent;top:0px;left:120px;vertical-align:middle;width:40px;text-align:left;height:40px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-20px;right:0;height:40px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><button style=\"cursor:default;padding-top:0px;max-height:40px;padding-left:0px;padding-bottom:0px;border-color:transparent;min-height:40px;background-color:transparent;max-width:40px;width:100%;border-width:0px;border-style:solid;text-align:center;padding-right:0px;height:100%;min-width:40px\" type=\"button\" name=\"QCH4965941\" class=\"guibutton_disabled brightenAndRemoveShadowOnClick cursor_default\" disabled=\"disabled\" id=\"QCH4965941\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;WYX4965941\\&quot;&gt;Scale image down&lt;\\/div&gt;&#39;, 250, 129, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxButtonOnClick(event, &#39;QCH4965941&#39;, &#39;QCH4965941&#39;, &#39;&#39;, true, true);dwFrameworkPreventDefaultBehaviour(event);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"width:16px;height:16px\" src=\"WEB-RES/resource/resource?id=bi_image_8D8B172A8BDD872C4C2B297C13817F14\" alt=\"\" class=\"guibutton_icon\"><span style=\"cursor:default;font-weight:inherit;vertical-align:middle;font-size:inherit;font-family:inherit;line-height:inherit;font-style:inherit\" id=\"QCH4965941_text\" class=\"cursor_default\"></span></button></div></div><div style=\"background-color:transparent;top:0px;left:160px;vertical-align:middle;width:40px;text-align:left;height:40px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-20px;right:0;height:40px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><button style=\"cursor:default;padding-top:0px;max-height:40px;padding-left:0px;padding-bottom:0px;border-color:transparent;min-height:40px;background-color:transparent;max-width:40px;width:100%;border-width:0px;border-style:solid;text-align:center;padding-right:0px;height:100%;min-width:40px\" type=\"button\" name=\"TPL4965941\" class=\"guibutton_disabled brightenAndRemoveShadowOnClick cursor_default\" disabled=\"disabled\" id=\"TPL4965941\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;EXP4965941\\&quot;&gt;Adjust drawing to window width&lt;\\/div&gt;&#39;, 250, 225, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxButtonOnClick(event, &#39;TPL4965941&#39;, &#39;TPL4965941&#39;, &#39;&#39;, true, true);dwFrameworkPreventDefaultBehaviour(event);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"width:16px;height:16px\" src=\"WEB-RES/resource/resource?id=bi_image_EF98BDF38BC818590016925DE0AD1986\" alt=\"\" class=\"guibutton_icon\"><span style=\"cursor:default;font-weight:inherit;vertical-align:middle;font-size:inherit;font-family:inherit;line-height:inherit;font-style:inherit\" id=\"TPL4965941_text\" class=\"cursor_default\"></span></button></div></div><div style=\"background-color:transparent;top:0px;left:200px;vertical-align:middle;width:40px;text-align:left;height:40px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-20px;right:0;height:40px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><button style=\"cursor:pointer;padding-top:0px;max-height:40px;color:#000000;padding-left:0px;padding-bottom:0px;border-color:transparent;min-height:40px;background-color:transparent;max-width:40px;width:100%;border-width:0px;border-style:solid;text-align:center;padding-right:0px;height:100%;min-width:40px\" type=\"button\" name=\"EBQ4965941\" class=\"guibutton_enabled brightenOnHoverForGrayComponents brightenAndRemoveShadowOnClick brightenAndRemoveShadowAtInnerImageOnClick cursor_pointer\" id=\"EBQ4965941\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;LBI4965941\\&quot;&gt;Select section&lt;\\/div&gt;&#39;, 250, 100, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxButtonOnClick(event, &#39;EBQ4965941&#39;, &#39;EBQ4965941&#39;, &#39;&#39;, true, true);dwFrameworkPreventDefaultBehaviour(event);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"width:16px;height:16px\" src=\"WEB-RES/resource/resource?id=bi_image_D217B38C2671F0B5F327052F5618462B\" alt=\"\" class=\"guibutton_icon\"><span style=\"cursor:pointer;font-weight:inherit;vertical-align:middle;font-size:inherit;font-family:inherit;line-height:inherit;font-style:inherit\" id=\"EBQ4965941_text\" class=\"cursor_pointer\"></span></button></div></div><div style=\"background-color:transparent;top:0px;left:240px;vertical-align:middle;width:40px;text-align:left;height:40px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-20px;right:0;height:40px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><button style=\"cursor:pointer;padding-top:0px;max-height:40px;color:#000000;padding-left:0px;padding-bottom:0px;border-color:transparent;min-height:40px;background-color:transparent;max-width:40px;width:100%;border-width:0px;border-style:solid;text-align:center;padding-right:0px;height:100%;min-width:40px\" type=\"button\" name=\"AFA4965941\" class=\"guibutton_enabled brightenOnHoverForGrayComponents brightenAndRemoveShadowOnClick brightenAndRemoveShadowAtInnerImageOnClick cursor_pointer\" id=\"AFA4965941\" onmousedown=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwFrameworkDefaultClose(event);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;BOK4965941\\&quot;&gt;Print&lt;\\/div&gt;&#39;, 250, 40, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxButtonOnClick(event, &#39;AFA4965941&#39;, &#39;AFA4965941&#39;, &#39;&#39;, true, false);dwFrameworkPreventDefaultBehaviour(event);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"width:16px;height:16px\" src=\"WEB-RES/resource/resource?id=bi_image_72D0010FEC637C6EB8420C205BD1BB35\" alt=\"\" class=\"guibutton_icon\"><span style=\"cursor:pointer;font-weight:inherit;vertical-align:middle;font-size:inherit;font-family:inherit;line-height:inherit;font-style:inherit\" id=\"AFA4965941_text\" class=\"cursor_pointer\"></span></button></div></div></div></div></div></div></div><div style=\"background-color:transparent;top:0px;left:280px;vertical-align:middle;width:0px;text-align:center;height:40px\" class=\"guilayoutgridbag_container\"><div style=\"width:0px;margin-left:0px;margin-top:0px;top:50%;left:50%;height:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;padding-top:0px;margin:auto;top:0;left:0;bottom:0;padding-left:0px;display:none;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"GOL4965941\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"right:0;top:0;left:0;height:20px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:20px;text-align:left;height:20px\" class=\"guilayoutgridbag_container\"><div style=\"width:20px;margin-top:-10px;top:50%;left:0;height:20px\" class=\"guilayoutgridbag_container_padded\"><button style=\"cursor:pointer;padding-top:0px;max-height:20px;padding-left:0px;padding-bottom:0px;border-color:transparent;min-height:20px;background-color:transparent;max-width:20px;width:100%;border-width:0px;border-style:solid;text-align:center;padding-right:0px;height:100%;min-width:20px\" type=\"button\" name=\"GBF4965941\" class=\"guibutton_enabled cursor_pointer\" id=\"GBF4965941\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxButtonOnClick(event, &#39;GBF4965941&#39;, &#39;GBF4965941&#39;, &#39;&#39;, true, true);dwFrameworkPreventDefaultBehaviour(event);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"width:16px;height:16px\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.controls.GuiTabbedPane_images_arrowLeftGrey.png\" alt=\"\" class=\"guibutton_icon\"><span style=\"cursor:pointer;font-weight:inherit;vertical-align:middle;font-size:inherit;font-family:inherit;line-height:inherit;font-style:inherit\" id=\"GBF4965941_text\" class=\"cursor_pointer\"></span></button></div></div><div style=\"background-color:transparent;top:0px;left:20px;vertical-align:middle;width:0px;right:20px;text-align:center;height:20px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:50%;width:0px;margin-top:3px;margin-bottom:0px;margin-right:0px;height:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"padding-top:0px;margin:auto;padding-left:0px;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel\" id=\"GOA4965958\"></div></div></div><div style=\"background-color:transparent;top:0px;left:20px;vertical-align:middle;right:0px;text-align:right;height:20px\" class=\"guilayoutgridbag_container\"><div style=\"width:20px;margin-top:-10px;right:0;top:50%;height:20px\" class=\"guilayoutgridbag_container_padded\"><button style=\"cursor:pointer;padding-top:0px;max-height:20px;padding-left:0px;padding-bottom:0px;border-color:transparent;min-height:20px;background-color:transparent;max-width:20px;width:100%;border-width:0px;border-style:solid;text-align:center;padding-right:0px;height:100%;min-width:20px\" type=\"button\" name=\"EQD4965951\" class=\"guibutton_enabled cursor_pointer\" id=\"EQD4965951\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxButtonOnClick(event, &#39;EQD4965951&#39;, &#39;EQD4965951&#39;, &#39;&#39;, true, true);dwFrameworkPreventDefaultBehaviour(event);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"width:16px;height:16px\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.controls.GuiTabbedPane_images_arrowRightGrey.png\" alt=\"\" class=\"guibutton_icon\"><span style=\"cursor:pointer;font-weight:inherit;vertical-align:middle;font-size:inherit;font-family:inherit;line-height:inherit;font-style:inherit\" id=\"EQD4965951_text\" class=\"cursor_pointer\"></span></button></div></div></div></div></div></div></div></div></div></div></div><div style=\"z-index:799;top:-40px;left:0px;width:0px;position:absolute;height:40px;pointer-events:none\" id=\"QII4965958_layoutdiv\"><div style=\"background-color:rgba(251,251,251,0.9019607843137255);padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"QII4965958\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div></div></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div></div><div style=\"background-color:transparent;left:0px;bottom:0px;vertical-align:middle;right:0px;text-align:left;height:0px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:0px;right:0;height:0px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"padding-top:0px;max-height:1px;margin:auto;padding-left:0px;display:none;width:100%;padding-bottom:0px;border-width:1px;min-height:1px;padding-right:0px;height:100%;min-width:10px\" class=\"guilabel\" id=\"RHB4965633\"></div></div></div><div style=\"background-color:transparent;left:0px;bottom:0px;vertical-align:bottom;right:0px;text-align:left;height:0px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;right:0;left:0;bottom:0;height:0px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:none;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"NUE4965633\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-left:0px;top:50%;left:50%;bottom:0;width:0px;margin-top:0px;right:0;height:0px\" class=\"guilayoutgridbag_centered\"></div></div></div></div></div></div></div></div></div></div></div></div></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div><div style=\"cursor:row-resize;background-color:#efefef;top:660px;left:0;margin-top:0px;right:0;height:16px\" class=\"guisplitpane_border_vertical\" id=\"LSK4965620_divider\" onmouseup=\"try {dwFwPreEv(event,true,this);dwSplitTilt(event, &#39;LSK4965620&#39;, false, false,32);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmousedown=\"try {dwFwPreEv(event,false,this);dwSplitDragStartEvent(event, &#39;LSK4965620&#39;, &#39;LSK4965620&#39;, &#39;row&#39;, &#39;LSK4965620_firstchildcell&#39;, &#39;LSK4965620_secondchildcell&#39;);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div style=\"cursor:inherit;width:32px;margin-left:-20px;;left:50%;height:16px\" class=\"guisplitpane_divider_content_container\" id=\"LSK4965620_divider_circles_container\"><div style=\"border-radius:2px;cursor:inherit;box-shadow:0px 1px 2px rgba(0,0,0,0.24);top:5px;left:4px;width:4px;height:4px\" class=\"guisplitpane_circle\" id=\"LSK4965620_divider_circle1\"></div><div style=\"border-radius:2px;cursor:inherit;box-shadow:0px 1px 2px rgba(0,0,0,0.24);top:5px;left:12px;width:4px;height:4px\" class=\"guisplitpane_circle\" id=\"LSK4965620_divider_circle2\"></div><div style=\"border-radius:2px;cursor:inherit;box-shadow:0px 1px 2px rgba(0,0,0,0.24);top:5px;left:20px;width:4px;height:4px\" class=\"guisplitpane_circle\" id=\"LSK4965620_divider_circle3\"></div><div style=\"border-radius:2px;cursor:inherit;box-shadow:0px 1px 2px rgba(0,0,0,0.24);top:5px;left:28px;width:4px;height:4px\" class=\"guisplitpane_circle\" id=\"LSK4965620_divider_circle4\"></div></div></div><div style=\"top:676px\" id=\"LSK4965620_secondchildcell\" class=\"guisplitpane_container_bottom\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"HMO4965633\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"LEE4965633\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-top:0;right:0;top:0px;left:0px;bottom:0;height:100%\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;right:0px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:1px;top:0;left:0;bottom:0;margin-top:1px;right:0;margin-bottom:1px;margin-right:1px\" class=\"guilayoutgridbag_container_padded\"><div style=\"padding-top:0px;z-index:1;bottom:0;padding-left:0px;padding-bottom:0px;right:0;filter:progid:DXImageTransform.Microsoft.Shadow(color=&#39;rgba(0,0,0,0.3)&#39;, Direction=135, Strength=0);border-radius:2px;background-color:#ffffff;box-shadow:0 1px 2px rgba(0,0,0,0.30);top:0;left:0;-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.30);padding-right:0px\" class=\"guipanel\" id=\"UAJ4965633\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"right:0;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:top;right:0px;text-align:left;height:0px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;right:0;top:0;left:0;height:0px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"EOG4965633\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div></div><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;right:0px;text-align:left;height:1px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:49.999%;left:0;margin-top:0px;right:0;height:1px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"padding-top:0px;max-height:1px;margin:auto;padding-left:0px;width:100%;padding-bottom:0px;border-width:1px;min-height:1px;padding-right:0px;height:100%;min-width:10px\" class=\"guilabel\" id=\"JUC4965633\"></div></div></div><div style=\"background-color:transparent;top:1px;left:0px;bottom:1px;vertical-align:middle;right:0px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:0;left:0;bottom:0;margin-top:0px;right:0;margin-bottom:0px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;padding-top:0px;margin:auto;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"OPA4965633\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"VXB4965633\"><div class=\"guilayoutabsolute\"><div style=\"position:absolute;right:0px;top:0px;left:0px;bottom:0px\" id=\"NMU4965620_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"NMU4965620\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;border-color:#008000;right:0;border-style:solid;padding-right:0px\" class=\"guipanel\" id=\"MAV4965620\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"SPL4965656\" ondblclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnDblClick(event, &#39;SPL4965656&#39;, &#39;SPL4965656&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"width:1px;position:absolute;top:0px;left:0px;bottom:0px\" id=\"GCS4965656_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"GCS4965656\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div><div style=\"position:absolute;right:0px;left:0px;bottom:0px;height:1px\" id=\"MQB4965656_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"MQB4965656\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div><div style=\"width:1px;position:absolute;right:0px;top:0px;bottom:0px\" id=\"XLB4965656_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"XLB4965656\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div><div style=\"position:absolute;right:0px;top:51px;left:0px;bottom:0px\" id=\"MWJ4965656_layoutdiv\"><input name=\"MWJ4965656_scrollTop\" value=\"0\" type=\"hidden\" id=\"MWJ4965656_scrollTop\"><input name=\"MWJ4965656_scrollLeft\" value=\"0\" type=\"hidden\" id=\"MWJ4965656_scrollLeft\"><div id=\"MWJ4965656_rootGuiScrollPane\" class=\"guiscrollpane_root\"><div style=\"padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;border-width:1px;border-color:#f4f4f4;right:0;border-style:solid;padding-right:0px\" class=\"guiscrollpane modern_scrollpane_design_thin modern_scrollpane_design_thin\" scrollbarWidth=\"6\" id=\"MWJ4965656\" horizontalScrollEnabled=\"true\" verticalScrollEnabled=\"true\" headerId=\"USD4965660\" firstColPanels=\"\" lastColPanels=\"HEG4965862,ISJ4965862,XKK4965677,TUW4965862,BUN4965862,NCG4965862,TPC4965862,TUG4965862,CHU4965862,BEA4965862,DUX4965862,GNV4965862,OST4965862,BGF4965862,XLC4965862,FJS4965862,TXS4965862,KUF4965862\" onresizeClientSide=\"dwHelperUpdateNotifyingScrollPanelColumnScrollPosition(&#39;MWJ4965656&#39;);\" onscroll=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxScrollpaneScrolled(event, &#39;MWJ4965656&#39;, &#39;MWJ4965656&#39;, &#39;&#39;, true, true);dwFrameworkPreventDefaultBehaviour(event);dwHelperUpdateNotifyingScrollPanelHeaderScrollPosition(&#39;MWJ4965656&#39;);dwHelperUpdateNotifyingScrollPanelColumnScrollPosition(&#39;MWJ4965656&#39;);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onresize=\"try {dwFwPreEv(event,false,this);dwHelperScrollPaneValueChanged(&#39;MWJ4965656&#39;);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div style=\"border:0;background-color:#ffffff;padding-top:0px;max-height:697px;padding-left:0px;width:0px;padding-bottom:0px;min-height:100%;padding-right:0px;min-width:100%;height:697px\" class=\"guipanel\" id=\"WQO4965656\" oncontextmenu=\"try {dwFwPreEv(event,false,this);dwFrameworkPreventDefaultBehaviour(event); dwHelperShowContextMenu(event, &#39;WQO4965656&#39;, &#39;WQO4965656&#39;, &#39;EMK4965620&#39;, new Array(), new Array(&#39;AQR4965620&#39;, &#39;PFM4965620&#39;, &#39;KOT4965620&#39;, &#39;BVX4965620&#39;, &#39;XRL4965620&#39;, &#39;CVH4965620&#39;, &#39;SFX4965620&#39;, &#39;DSL4965620&#39;, &#39;BFX4965620&#39;, &#39;NOU4965620&#39;, &#39;WHS4965620&#39;), &#39;TWM4965563&#39;);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"position:absolute;right:0px;top:0px;left:0px;height:41px\" id=\"KKG4965678_layoutdiv\"><div style=\"background-color:#f5f5f5;padding-top:0px;top:0;color:#000000;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel dw-hover-class-foreground-23303030303030 dw-hover-class-background-23643764376437\" id=\"KKG4965678\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;KKG4965678&#39;, &#39;KKG4965678&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"z-index:301;position:absolute;right:0px;left:0px;bottom:0px;height:1px\" id=\"RNO4965863_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"RNO4965863\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div><div style=\"z-index:1;top:0px;left:16px;display:table;width:50px;position:absolute;height:100%\" id=\"NNP4965848_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"NNP4965848\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-top:-15px;right:0;top:50%;left:0px;bottom:0;height:30px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;right:0px;text-align:left;height:30px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:49.999%;left:0;width:27px;margin-top:-12px;margin-bottom:0px;margin-right:0px;height:27px\" class=\"guilayoutgridbag_container_padded\"><label style=\"padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"rcheckbox\" id=\"CJP4965848\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;CJP4965848&#39;, &#39;CJP4965848&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" ondblclick=\"try {dwFwPreEv(event,false,this); ;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><input name=\"CJP4965848\" value=\"CJP4965848\" type=\"checkbox\" id=\"CJP4965848_input\" onchange=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxCheckboxOnChange(event, &#39;CJP4965848&#39;, &#39;CJP4965848_input&#39;, &#39;&#39;, false, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);this.blur();this.focus();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><span class=\"checkmark\" id=\"CJP4965848_checkmark\"></span><span class=\"rcheckbox_text\" id=\"CJP4965848_text\"></span></label></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:76px;display:table;width:34px;position:absolute;height:100%\" id=\"HRT4965849_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"HRT4965849\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:24px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:24px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-8px;right:0;height:16px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"width:24px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:8px\" class=\"guiimage\" id=\"MSQ4965849\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;MSQ4965849&#39;, &#39;MSQ4965849&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;SON4965849\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 72, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=bi_image_FCE645C38BE44E45BFFA7E9674945850\" alt=\"\" id=\"MSQ4965849_img\"></div></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:120px;display:table;width:254px;position:absolute;height:100%\" id=\"VAF4965849_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;padding-left:0px;display:table-cell;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel r-table-cell\" id=\"VAF4965849\">Carpentry&nbsp;machines</div></div><div style=\"z-index:1;top:0px;left:538px;display:table;width:46px;position:absolute;height:100%\" id=\"TPC4965862_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;min-height:40px;right:0;padding-right:0px;min-width:56px\" class=\"guipanel r-table-cell\" id=\"TPC4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:76px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:0px;text-align:center\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-2px;top:0;left:49.999%;bottom:0;width:1px;margin-top:0px;margin-bottom:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:#f4f4f4;padding-top:0px;margin:auto;top:0;max-width:1px;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px;min-width:1px\" class=\"guipanel\" id=\"OBG4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div></div><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:76px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:10px;top:50%;left:0;width:46px;margin-top:-19px;margin-bottom:0px;margin-right:20px;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;min-height:30px;right:0;padding-right:8px\" class=\"guipanel r-table-cell\" id=\"LED4965849\"><div style=\"right:8px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:38px;top:0;left:0;height:38px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:38px;text-align:center;height:38px\" class=\"guilayoutgridbag_container\"><div style=\"width:38px;margin-left:-19px;margin-top:-19px;top:50%;left:50%;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;cursor:pointer;padding-top:4px;margin:auto;top:0;left:0;bottom:0;padding-left:4px;padding-bottom:4px;right:0;padding-right:4px\" class=\"guipanel incraseContrastForPartlistIconsOnClick decreaseContrastForPartlistIconsOnHover cursor_pointer\" id=\"EJY4965849\" onmousedown=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnMouseUp(event, &#39;EJY4965849&#39;, &#39;EJY4965849&#39;, &#39;&#39;, true, false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;OIQ4965849\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Goto&amp;nbsp;assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 106, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnClick(event, &#39;EJY4965849&#39;, &#39;EJY4965849&#39;, &#39;&#39;, true, false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div style=\"right:4px;top:4px;left:4px;bottom:4px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"border-radius:2px;background-color:rgba(0,0,0,0.06274509803921569);padding-top:7px;top:0;left:0;bottom:0;padding-left:7px;padding-bottom:7px;right:0;padding-right:7px\" class=\"guipanel\" id=\"IYS4965849\"><div style=\"right:7px;top:7px;left:7px;bottom:7px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"width:16px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:0px\" class=\"guiimage\" id=\"BTH4965849\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_responsive_table_go_down_normal.png\" alt=\"\" id=\"BTH4965849_img\"></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div><div style=\"position:absolute;right:0px;top:41px;left:0px;height:41px\" id=\"VRR4965678_layoutdiv\"><div style=\"background-color:#f5f5f5;padding-top:0px;top:0;color:#000000;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel dw-hover-class-foreground-23303030303030 dw-hover-class-background-23643764376437\" id=\"VRR4965678\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;VRR4965678&#39;, &#39;VRR4965678&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"z-index:301;position:absolute;right:0px;left:0px;bottom:0px;height:1px\" id=\"SLX4965863_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"SLX4965863\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div><div style=\"z-index:1;top:0px;left:16px;display:table;width:50px;position:absolute;height:100%\" id=\"YEH4965849_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"YEH4965849\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-top:-15px;right:0;top:50%;left:0px;bottom:0;height:30px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;right:0px;text-align:left;height:30px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:49.999%;left:0;width:27px;margin-top:-12px;margin-bottom:0px;margin-right:0px;height:27px\" class=\"guilayoutgridbag_container_padded\"><label style=\"padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"rcheckbox\" id=\"VWP4965849\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;VWP4965849&#39;, &#39;VWP4965849&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" ondblclick=\"try {dwFwPreEv(event,false,this); ;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><input name=\"VWP4965849\" value=\"VWP4965849\" type=\"checkbox\" id=\"VWP4965849_input\" onchange=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxCheckboxOnChange(event, &#39;VWP4965849&#39;, &#39;VWP4965849_input&#39;, &#39;&#39;, false, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);this.blur();this.focus();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><span class=\"checkmark\" id=\"VWP4965849_checkmark\"></span><span class=\"rcheckbox_text\" id=\"VWP4965849_text\"></span></label></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:76px;display:table;width:34px;position:absolute;height:100%\" id=\"ELK4965850_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"ELK4965850\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:24px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:24px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-8px;right:0;height:16px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"width:24px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:8px\" class=\"guiimage\" id=\"JTC4965850\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;JTC4965850&#39;, &#39;JTC4965850&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;KTV4965850\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 72, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=bi_image_FCE645C38BE44E45BFFA7E9674945850\" alt=\"\" id=\"JTC4965850_img\"></div></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:120px;display:table;width:254px;position:absolute;height:100%\" id=\"ARM4965850_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;padding-left:0px;display:table-cell;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel r-table-cell\" id=\"ARM4965850\">Workplace&nbsp;organisation</div></div><div style=\"z-index:1;top:0px;left:538px;display:table;width:46px;position:absolute;height:100%\" id=\"GNV4965862_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;min-height:40px;right:0;padding-right:0px;min-width:56px\" class=\"guipanel r-table-cell\" id=\"GNV4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:76px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:0px;text-align:center\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-2px;top:0;left:49.999%;bottom:0;width:1px;margin-top:0px;margin-bottom:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:#f4f4f4;padding-top:0px;margin:auto;top:0;max-width:1px;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px;min-width:1px\" class=\"guipanel\" id=\"VOU4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div></div><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:76px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:10px;top:50%;left:0;width:46px;margin-top:-19px;margin-bottom:0px;margin-right:20px;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;min-height:30px;right:0;padding-right:8px\" class=\"guipanel r-table-cell\" id=\"GSL4965850\"><div style=\"right:8px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:38px;top:0;left:0;height:38px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:38px;text-align:center;height:38px\" class=\"guilayoutgridbag_container\"><div style=\"width:38px;margin-left:-19px;margin-top:-19px;top:50%;left:50%;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;cursor:pointer;padding-top:4px;margin:auto;top:0;left:0;bottom:0;padding-left:4px;padding-bottom:4px;right:0;padding-right:4px\" class=\"guipanel incraseContrastForPartlistIconsOnClick decreaseContrastForPartlistIconsOnHover cursor_pointer\" id=\"YPK4965850\" onmousedown=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnMouseUp(event, &#39;YPK4965850&#39;, &#39;YPK4965850&#39;, &#39;&#39;, true, false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;QSR4965850\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Goto&amp;nbsp;assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 106, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnClick(event, &#39;YPK4965850&#39;, &#39;YPK4965850&#39;, &#39;&#39;, true, false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div style=\"right:4px;top:4px;left:4px;bottom:4px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"border-radius:2px;background-color:rgba(0,0,0,0.06274509803921569);padding-top:7px;top:0;left:0;bottom:0;padding-left:7px;padding-bottom:7px;right:0;padding-right:7px\" class=\"guipanel\" id=\"FIU4965850\"><div style=\"right:7px;top:7px;left:7px;bottom:7px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"width:16px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:0px\" class=\"guiimage\" id=\"WXN4965850\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_responsive_table_go_down_normal.png\" alt=\"\" id=\"WXN4965850_img\"></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div><div style=\"position:absolute;right:0px;top:82px;left:0px;height:41px\" id=\"XGP4965678_layoutdiv\"><div style=\"background-color:#f5f5f5;padding-top:0px;top:0;color:#000000;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel dw-hover-class-foreground-23303030303030 dw-hover-class-background-23643764376437\" id=\"XGP4965678\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;XGP4965678&#39;, &#39;XGP4965678&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"z-index:301;position:absolute;right:0px;left:0px;bottom:0px;height:1px\" id=\"RPO4965863_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"RPO4965863\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div><div style=\"z-index:1;top:0px;left:16px;display:table;width:50px;position:absolute;height:100%\" id=\"OSY4965850_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"OSY4965850\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-top:-15px;right:0;top:50%;left:0px;bottom:0;height:30px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;right:0px;text-align:left;height:30px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:49.999%;left:0;width:27px;margin-top:-12px;margin-bottom:0px;margin-right:0px;height:27px\" class=\"guilayoutgridbag_container_padded\"><label style=\"padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"rcheckbox\" id=\"DSJ4965850\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;DSJ4965850&#39;, &#39;DSJ4965850&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" ondblclick=\"try {dwFwPreEv(event,false,this); ;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><input name=\"DSJ4965850\" value=\"DSJ4965850\" type=\"checkbox\" id=\"DSJ4965850_input\" onchange=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxCheckboxOnChange(event, &#39;DSJ4965850&#39;, &#39;DSJ4965850_input&#39;, &#39;&#39;, false, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);this.blur();this.focus();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><span class=\"checkmark\" id=\"DSJ4965850_checkmark\"></span><span class=\"rcheckbox_text\" id=\"DSJ4965850_text\"></span></label></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:76px;display:table;width:34px;position:absolute;height:100%\" id=\"ALA4965851_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"ALA4965851\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:24px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:24px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-8px;right:0;height:16px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"width:24px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:8px\" class=\"guiimage\" id=\"JVR4965851\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;JVR4965851&#39;, &#39;JVR4965851&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;KSS4965851\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 72, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=bi_image_FCE645C38BE44E45BFFA7E9674945850\" alt=\"\" id=\"JVR4965851_img\"></div></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:120px;display:table;width:254px;position:absolute;height:100%\" id=\"KRI4965851_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;padding-left:0px;display:table-cell;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel r-table-cell\" id=\"KRI4965851\">Drilling&nbsp;and&nbsp;screwdriving</div></div><div style=\"z-index:1;top:0px;left:538px;display:table;width:46px;position:absolute;height:100%\" id=\"BGF4965862_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;min-height:40px;right:0;padding-right:0px;min-width:56px\" class=\"guipanel r-table-cell\" id=\"BGF4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:76px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:0px;text-align:center\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-2px;top:0;left:49.999%;bottom:0;width:1px;margin-top:0px;margin-bottom:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:#f4f4f4;padding-top:0px;margin:auto;top:0;max-width:1px;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px;min-width:1px\" class=\"guipanel\" id=\"NEL4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div></div><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:76px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:10px;top:50%;left:0;width:46px;margin-top:-19px;margin-bottom:0px;margin-right:20px;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;min-height:30px;right:0;padding-right:8px\" class=\"guipanel r-table-cell\" id=\"EIF4965851\"><div style=\"right:8px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:38px;top:0;left:0;height:38px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:38px;text-align:center;height:38px\" class=\"guilayoutgridbag_container\"><div style=\"width:38px;margin-left:-19px;margin-top:-19px;top:50%;left:50%;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;cursor:pointer;padding-top:4px;margin:auto;top:0;left:0;bottom:0;padding-left:4px;padding-bottom:4px;right:0;padding-right:4px\" class=\"guipanel incraseContrastForPartlistIconsOnClick decreaseContrastForPartlistIconsOnHover cursor_pointer\" id=\"PDW4965851\" onmousedown=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnMouseUp(event, &#39;PDW4965851&#39;, &#39;PDW4965851&#39;, &#39;&#39;, true, false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;AII4965851\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Goto&amp;nbsp;assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 106, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnClick(event, &#39;PDW4965851&#39;, &#39;PDW4965851&#39;, &#39;&#39;, true, false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div style=\"right:4px;top:4px;left:4px;bottom:4px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"border-radius:2px;background-color:rgba(0,0,0,0.06274509803921569);padding-top:7px;top:0;left:0;bottom:0;padding-left:7px;padding-bottom:7px;right:0;padding-right:7px\" class=\"guipanel\" id=\"IDT4965851\"><div style=\"right:7px;top:7px;left:7px;bottom:7px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"width:16px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:0px\" class=\"guiimage\" id=\"IOK4965851\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_responsive_table_go_down_normal.png\" alt=\"\" id=\"IOK4965851_img\"></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div><div style=\"position:absolute;right:0px;top:123px;left:0px;height:41px\" id=\"LWF4965678_layoutdiv\"><div style=\"background-color:#f5f5f5;padding-top:0px;top:0;color:#000000;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel dw-hover-class-foreground-23303030303030 dw-hover-class-background-23643764376437\" id=\"LWF4965678\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;LWF4965678&#39;, &#39;LWF4965678&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"z-index:301;position:absolute;right:0px;left:0px;bottom:0px;height:1px\" id=\"SLE4965863_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"SLE4965863\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div><div style=\"z-index:1;top:0px;left:16px;display:table;width:50px;position:absolute;height:100%\" id=\"NBN4965851_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"NBN4965851\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-top:-15px;right:0;top:50%;left:0px;bottom:0;height:30px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;right:0px;text-align:left;height:30px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:49.999%;left:0;width:27px;margin-top:-12px;margin-bottom:0px;margin-right:0px;height:27px\" class=\"guilayoutgridbag_container_padded\"><label style=\"padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"rcheckbox\" id=\"QJS4965851\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;QJS4965851&#39;, &#39;QJS4965851&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" ondblclick=\"try {dwFwPreEv(event,false,this); ;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><input name=\"QJS4965851\" value=\"QJS4965851\" type=\"checkbox\" id=\"QJS4965851_input\" onchange=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxCheckboxOnChange(event, &#39;QJS4965851&#39;, &#39;QJS4965851_input&#39;, &#39;&#39;, false, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);this.blur();this.focus();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><span class=\"checkmark\" id=\"QJS4965851_checkmark\"></span><span class=\"rcheckbox_text\" id=\"QJS4965851_text\"></span></label></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:76px;display:table;width:34px;position:absolute;height:100%\" id=\"OYW4965851_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"OYW4965851\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:24px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:24px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-8px;right:0;height:16px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"width:24px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:8px\" class=\"guiimage\" id=\"GVN4965851\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;GVN4965851&#39;, &#39;GVN4965851&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;YDD4965851\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 72, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=bi_image_FCE645C38BE44E45BFFA7E9674945850\" alt=\"\" id=\"GVN4965851_img\"></div></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:120px;display:table;width:254px;position:absolute;height:100%\" id=\"KDY4965851_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;padding-left:0px;display:table-cell;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel r-table-cell\" id=\"KDY4965851\">CMS&nbsp;-&nbsp;Compact&nbsp;Modul&nbsp;System</div></div><div style=\"z-index:1;top:0px;left:538px;display:table;width:46px;position:absolute;height:100%\" id=\"TUG4965862_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;min-height:40px;right:0;padding-right:0px;min-width:56px\" class=\"guipanel r-table-cell\" id=\"TUG4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:76px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:0px;text-align:center\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-2px;top:0;left:49.999%;bottom:0;width:1px;margin-top:0px;margin-bottom:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:#f4f4f4;padding-top:0px;margin:auto;top:0;max-width:1px;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px;min-width:1px\" class=\"guipanel\" id=\"KKN4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div></div><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:76px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:10px;top:50%;left:0;width:46px;margin-top:-19px;margin-bottom:0px;margin-right:20px;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;min-height:30px;right:0;padding-right:8px\" class=\"guipanel r-table-cell\" id=\"ELQ4965851\"><div style=\"right:8px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:38px;top:0;left:0;height:38px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:38px;text-align:center;height:38px\" class=\"guilayoutgridbag_container\"><div style=\"width:38px;margin-left:-19px;margin-top:-19px;top:50%;left:50%;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;cursor:pointer;padding-top:4px;margin:auto;top:0;left:0;bottom:0;padding-left:4px;padding-bottom:4px;right:0;padding-right:4px\" class=\"guipanel incraseContrastForPartlistIconsOnClick decreaseContrastForPartlistIconsOnHover cursor_pointer\" id=\"MHI4965851\" onmousedown=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnMouseUp(event, &#39;MHI4965851&#39;, &#39;MHI4965851&#39;, &#39;&#39;, true, false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;XWD4965851\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Goto&amp;nbsp;assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 106, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnClick(event, &#39;MHI4965851&#39;, &#39;MHI4965851&#39;, &#39;&#39;, true, false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div style=\"right:4px;top:4px;left:4px;bottom:4px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"border-radius:2px;background-color:rgba(0,0,0,0.06274509803921569);padding-top:7px;top:0;left:0;bottom:0;padding-left:7px;padding-bottom:7px;right:0;padding-right:7px\" class=\"guipanel\" id=\"KSV4965851\"><div style=\"right:7px;top:7px;left:7px;bottom:7px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"width:16px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:0px\" class=\"guiimage\" id=\"TXA4965851\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_responsive_table_go_down_normal.png\" alt=\"\" id=\"TXA4965851_img\"></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div><div style=\"position:absolute;right:0px;top:164px;left:0px;height:41px\" id=\"ARL4965678_layoutdiv\"><div style=\"background-color:#f5f5f5;padding-top:0px;top:0;color:#000000;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel dw-hover-class-foreground-23303030303030 dw-hover-class-background-23643764376437\" id=\"ARL4965678\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;ARL4965678&#39;, &#39;ARL4965678&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"z-index:301;position:absolute;right:0px;left:0px;bottom:0px;height:1px\" id=\"TNC4965863_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"TNC4965863\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div><div style=\"z-index:1;top:0px;left:16px;display:table;width:50px;position:absolute;height:100%\" id=\"DTY4965852_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"DTY4965852\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-top:-15px;right:0;top:50%;left:0px;bottom:0;height:30px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;right:0px;text-align:left;height:30px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:49.999%;left:0;width:27px;margin-top:-12px;margin-bottom:0px;margin-right:0px;height:27px\" class=\"guilayoutgridbag_container_padded\"><label style=\"padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"rcheckbox\" id=\"QXH4965852\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;QXH4965852&#39;, &#39;QXH4965852&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" ondblclick=\"try {dwFwPreEv(event,false,this); ;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><input name=\"QXH4965852\" value=\"QXH4965852\" type=\"checkbox\" id=\"QXH4965852_input\" onchange=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxCheckboxOnChange(event, &#39;QXH4965852&#39;, &#39;QXH4965852_input&#39;, &#39;&#39;, false, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);this.blur();this.focus();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><span class=\"checkmark\" id=\"QXH4965852_checkmark\"></span><span class=\"rcheckbox_text\" id=\"QXH4965852_text\"></span></label></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:76px;display:table;width:34px;position:absolute;height:100%\" id=\"KGJ4965852_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"KGJ4965852\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:24px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:24px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-8px;right:0;height:16px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"width:24px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:8px\" class=\"guiimage\" id=\"LEX4965852\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;LEX4965852&#39;, &#39;LEX4965852&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;JSM4965852\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 72, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=bi_image_FCE645C38BE44E45BFFA7E9674945850\" alt=\"\" id=\"LEX4965852_img\"></div></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:120px;display:table;width:254px;position:absolute;height:100%\" id=\"XIQ4965852_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;padding-left:0px;display:table-cell;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel r-table-cell\" id=\"XIQ4965852\">Exoskeletons</div></div><div style=\"z-index:1;top:0px;left:538px;display:table;width:46px;position:absolute;height:100%\" id=\"TUW4965862_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;min-height:40px;right:0;padding-right:0px;min-width:56px\" class=\"guipanel r-table-cell\" id=\"TUW4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:76px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:0px;text-align:center\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-2px;top:0;left:49.999%;bottom:0;width:1px;margin-top:0px;margin-bottom:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:#f4f4f4;padding-top:0px;margin:auto;top:0;max-width:1px;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px;min-width:1px\" class=\"guipanel\" id=\"ILH4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div></div><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:76px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:10px;top:50%;left:0;width:46px;margin-top:-19px;margin-bottom:0px;margin-right:20px;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;min-height:30px;right:0;padding-right:8px\" class=\"guipanel r-table-cell\" id=\"IDS4965852\"><div style=\"right:8px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:38px;top:0;left:0;height:38px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:38px;text-align:center;height:38px\" class=\"guilayoutgridbag_container\"><div style=\"width:38px;margin-left:-19px;margin-top:-19px;top:50%;left:50%;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;cursor:pointer;padding-top:4px;margin:auto;top:0;left:0;bottom:0;padding-left:4px;padding-bottom:4px;right:0;padding-right:4px\" class=\"guipanel incraseContrastForPartlistIconsOnClick decreaseContrastForPartlistIconsOnHover cursor_pointer\" id=\"VVQ4965852\" onmousedown=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnMouseUp(event, &#39;VVQ4965852&#39;, &#39;VVQ4965852&#39;, &#39;&#39;, true, false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;NCP4965852\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Goto&amp;nbsp;assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 106, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnClick(event, &#39;VVQ4965852&#39;, &#39;VVQ4965852&#39;, &#39;&#39;, true, false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div style=\"right:4px;top:4px;left:4px;bottom:4px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"border-radius:2px;background-color:rgba(0,0,0,0.06274509803921569);padding-top:7px;top:0;left:0;bottom:0;padding-left:7px;padding-bottom:7px;right:0;padding-right:7px\" class=\"guipanel\" id=\"VOL4965852\"><div style=\"right:7px;top:7px;left:7px;bottom:7px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"width:16px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:0px\" class=\"guiimage\" id=\"VAA4965852\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_responsive_table_go_down_normal.png\" alt=\"\" id=\"VAA4965852_img\"></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div><div style=\"position:absolute;right:0px;top:205px;left:0px;height:41px\" id=\"KFI4965678_layoutdiv\"><div style=\"background-color:#f5f5f5;padding-top:0px;top:0;color:#000000;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel dw-hover-class-foreground-23303030303030 dw-hover-class-background-23643764376437\" id=\"KFI4965678\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;KFI4965678&#39;, &#39;KFI4965678&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"z-index:301;position:absolute;right:0px;left:0px;bottom:0px;height:1px\" id=\"LOD4965863_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"LOD4965863\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div><div style=\"z-index:1;top:0px;left:16px;display:table;width:50px;position:absolute;height:100%\" id=\"OEG4965852_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"OEG4965852\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-top:-15px;right:0;top:50%;left:0px;bottom:0;height:30px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;right:0px;text-align:left;height:30px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:49.999%;left:0;width:27px;margin-top:-12px;margin-bottom:0px;margin-right:0px;height:27px\" class=\"guilayoutgridbag_container_padded\"><label style=\"padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"rcheckbox\" id=\"OAF4965852\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;OAF4965852&#39;, &#39;OAF4965852&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" ondblclick=\"try {dwFwPreEv(event,false,this); ;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><input name=\"OAF4965852\" value=\"OAF4965852\" type=\"checkbox\" id=\"OAF4965852_input\" onchange=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxCheckboxOnChange(event, &#39;OAF4965852&#39;, &#39;OAF4965852_input&#39;, &#39;&#39;, false, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);this.blur();this.focus();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><span class=\"checkmark\" id=\"OAF4965852_checkmark\"></span><span class=\"rcheckbox_text\" id=\"OAF4965852_text\"></span></label></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:76px;display:table;width:34px;position:absolute;height:100%\" id=\"OSN4965853_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"OSN4965853\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:24px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:24px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-8px;right:0;height:16px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"width:24px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:8px\" class=\"guiimage\" id=\"JBG4965853\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;JBG4965853&#39;, &#39;JBG4965853&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;MEM4965853\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 72, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=bi_image_FCE645C38BE44E45BFFA7E9674945850\" alt=\"\" id=\"JBG4965853_img\"></div></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:120px;display:table;width:254px;position:absolute;height:100%\" id=\"ICP4965853_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;padding-left:0px;display:table-cell;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel r-table-cell\" id=\"ICP4965853\">Routing</div></div><div style=\"z-index:1;top:0px;left:538px;display:table;width:46px;position:absolute;height:100%\" id=\"XLC4965862_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;min-height:40px;right:0;padding-right:0px;min-width:56px\" class=\"guipanel r-table-cell\" id=\"XLC4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:76px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:0px;text-align:center\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-2px;top:0;left:49.999%;bottom:0;width:1px;margin-top:0px;margin-bottom:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:#f4f4f4;padding-top:0px;margin:auto;top:0;max-width:1px;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px;min-width:1px\" class=\"guipanel\" id=\"SGO4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div></div><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:76px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:10px;top:50%;left:0;width:46px;margin-top:-19px;margin-bottom:0px;margin-right:20px;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;min-height:30px;right:0;padding-right:8px\" class=\"guipanel r-table-cell\" id=\"OQR4965853\"><div style=\"right:8px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:38px;top:0;left:0;height:38px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:38px;text-align:center;height:38px\" class=\"guilayoutgridbag_container\"><div style=\"width:38px;margin-left:-19px;margin-top:-19px;top:50%;left:50%;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;cursor:pointer;padding-top:4px;margin:auto;top:0;left:0;bottom:0;padding-left:4px;padding-bottom:4px;right:0;padding-right:4px\" class=\"guipanel incraseContrastForPartlistIconsOnClick decreaseContrastForPartlistIconsOnHover cursor_pointer\" id=\"AKF4965853\" onmousedown=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnMouseUp(event, &#39;AKF4965853&#39;, &#39;AKF4965853&#39;, &#39;&#39;, true, false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;MUF4965853\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Goto&amp;nbsp;assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 106, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnClick(event, &#39;AKF4965853&#39;, &#39;AKF4965853&#39;, &#39;&#39;, true, false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div style=\"right:4px;top:4px;left:4px;bottom:4px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"border-radius:2px;background-color:rgba(0,0,0,0.06274509803921569);padding-top:7px;top:0;left:0;bottom:0;padding-left:7px;padding-bottom:7px;right:0;padding-right:7px\" class=\"guipanel\" id=\"JBR4965853\"><div style=\"right:7px;top:7px;left:7px;bottom:7px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"width:16px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:0px\" class=\"guiimage\" id=\"WEL4965853\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_responsive_table_go_down_normal.png\" alt=\"\" id=\"WEL4965853_img\"></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div><div style=\"position:absolute;right:0px;top:246px;left:0px;height:41px\" id=\"NOD4965678_layoutdiv\"><div style=\"background-color:#f5f5f5;padding-top:0px;top:0;color:#000000;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel dw-hover-class-foreground-23303030303030 dw-hover-class-background-23643764376437\" id=\"NOD4965678\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;NOD4965678&#39;, &#39;NOD4965678&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"z-index:301;position:absolute;right:0px;left:0px;bottom:0px;height:1px\" id=\"DMV4965863_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"DMV4965863\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div><div style=\"z-index:1;top:0px;left:16px;display:table;width:50px;position:absolute;height:100%\" id=\"BAB4965853_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"BAB4965853\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-top:-15px;right:0;top:50%;left:0px;bottom:0;height:30px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;right:0px;text-align:left;height:30px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:49.999%;left:0;width:27px;margin-top:-12px;margin-bottom:0px;margin-right:0px;height:27px\" class=\"guilayoutgridbag_container_padded\"><label style=\"padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"rcheckbox\" id=\"KMG4965853\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;KMG4965853&#39;, &#39;KMG4965853&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" ondblclick=\"try {dwFwPreEv(event,false,this); ;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><input name=\"KMG4965853\" value=\"KMG4965853\" type=\"checkbox\" id=\"KMG4965853_input\" onchange=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxCheckboxOnChange(event, &#39;KMG4965853&#39;, &#39;KMG4965853_input&#39;, &#39;&#39;, false, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);this.blur();this.focus();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><span class=\"checkmark\" id=\"KMG4965853_checkmark\"></span><span class=\"rcheckbox_text\" id=\"KMG4965853_text\"></span></label></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:76px;display:table;width:34px;position:absolute;height:100%\" id=\"OYH4965854_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"OYH4965854\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:24px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:24px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-8px;right:0;height:16px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"width:24px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:8px\" class=\"guiimage\" id=\"NPB4965854\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;NPB4965854&#39;, &#39;NPB4965854&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;QES4965854\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 72, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=bi_image_FCE645C38BE44E45BFFA7E9674945850\" alt=\"\" id=\"NPB4965854_img\"></div></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:120px;display:table;width:254px;position:absolute;height:100%\" id=\"KTP4965854_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;padding-left:0px;display:table-cell;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel r-table-cell\" id=\"KTP4965854\">Planing</div></div><div style=\"z-index:1;top:0px;left:538px;display:table;width:46px;position:absolute;height:100%\" id=\"CHU4965862_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;min-height:40px;right:0;padding-right:0px;min-width:56px\" class=\"guipanel r-table-cell\" id=\"CHU4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:76px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:0px;text-align:center\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-2px;top:0;left:49.999%;bottom:0;width:1px;margin-top:0px;margin-bottom:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:#f4f4f4;padding-top:0px;margin:auto;top:0;max-width:1px;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px;min-width:1px\" class=\"guipanel\" id=\"LVO4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div></div><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:76px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:10px;top:50%;left:0;width:46px;margin-top:-19px;margin-bottom:0px;margin-right:20px;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;min-height:30px;right:0;padding-right:8px\" class=\"guipanel r-table-cell\" id=\"FND4965854\"><div style=\"right:8px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:38px;top:0;left:0;height:38px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:38px;text-align:center;height:38px\" class=\"guilayoutgridbag_container\"><div style=\"width:38px;margin-left:-19px;margin-top:-19px;top:50%;left:50%;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;cursor:pointer;padding-top:4px;margin:auto;top:0;left:0;bottom:0;padding-left:4px;padding-bottom:4px;right:0;padding-right:4px\" class=\"guipanel incraseContrastForPartlistIconsOnClick decreaseContrastForPartlistIconsOnHover cursor_pointer\" id=\"CUW4965854\" onmousedown=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnMouseUp(event, &#39;CUW4965854&#39;, &#39;CUW4965854&#39;, &#39;&#39;, true, false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;OEU4965854\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Goto&amp;nbsp;assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 106, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnClick(event, &#39;CUW4965854&#39;, &#39;CUW4965854&#39;, &#39;&#39;, true, false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div style=\"right:4px;top:4px;left:4px;bottom:4px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"border-radius:2px;background-color:rgba(0,0,0,0.06274509803921569);padding-top:7px;top:0;left:0;bottom:0;padding-left:7px;padding-bottom:7px;right:0;padding-right:7px\" class=\"guipanel\" id=\"XHL4965854\"><div style=\"right:7px;top:7px;left:7px;bottom:7px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"width:16px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:0px\" class=\"guiimage\" id=\"HST4965854\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_responsive_table_go_down_normal.png\" alt=\"\" id=\"HST4965854_img\"></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div><div style=\"position:absolute;right:0px;top:287px;left:0px;height:41px\" id=\"EER4965678_layoutdiv\"><div style=\"background-color:#f5f5f5;padding-top:0px;top:0;color:#000000;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel dw-hover-class-foreground-23303030303030 dw-hover-class-background-23643764376437\" id=\"EER4965678\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;EER4965678&#39;, &#39;EER4965678&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"z-index:301;position:absolute;right:0px;left:0px;bottom:0px;height:1px\" id=\"VCN4965863_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"VCN4965863\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div><div style=\"z-index:1;top:0px;left:16px;display:table;width:50px;position:absolute;height:100%\" id=\"KGJ4965854_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"KGJ4965854\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-top:-15px;right:0;top:50%;left:0px;bottom:0;height:30px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;right:0px;text-align:left;height:30px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:49.999%;left:0;width:27px;margin-top:-12px;margin-bottom:0px;margin-right:0px;height:27px\" class=\"guilayoutgridbag_container_padded\"><label style=\"padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"rcheckbox\" id=\"QTD4965854\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;QTD4965854&#39;, &#39;QTD4965854&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" ondblclick=\"try {dwFwPreEv(event,false,this); ;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><input name=\"QTD4965854\" value=\"QTD4965854\" type=\"checkbox\" id=\"QTD4965854_input\" onchange=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxCheckboxOnChange(event, &#39;QTD4965854&#39;, &#39;QTD4965854_input&#39;, &#39;&#39;, false, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);this.blur();this.focus();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><span class=\"checkmark\" id=\"QTD4965854_checkmark\"></span><span class=\"rcheckbox_text\" id=\"QTD4965854_text\"></span></label></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:76px;display:table;width:34px;position:absolute;height:100%\" id=\"ACH4965855_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"ACH4965855\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:24px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:24px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-8px;right:0;height:16px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"width:24px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:8px\" class=\"guiimage\" id=\"JRK4965855\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;JRK4965855&#39;, &#39;JRK4965855&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;KUU4965855\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 72, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=bi_image_FCE645C38BE44E45BFFA7E9674945850\" alt=\"\" id=\"JRK4965855_img\"></div></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:120px;display:table;width:254px;position:absolute;height:100%\" id=\"MGO4965855_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;padding-left:0px;display:table-cell;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel r-table-cell\" id=\"MGO4965855\">Edge&nbsp;trimming</div></div><div style=\"z-index:1;top:0px;left:538px;display:table;width:46px;position:absolute;height:100%\" id=\"TXS4965862_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;min-height:40px;right:0;padding-right:0px;min-width:56px\" class=\"guipanel r-table-cell\" id=\"TXS4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:76px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:0px;text-align:center\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-2px;top:0;left:49.999%;bottom:0;width:1px;margin-top:0px;margin-bottom:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:#f4f4f4;padding-top:0px;margin:auto;top:0;max-width:1px;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px;min-width:1px\" class=\"guipanel\" id=\"KWF4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div></div><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:76px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:10px;top:50%;left:0;width:46px;margin-top:-19px;margin-bottom:0px;margin-right:20px;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;min-height:30px;right:0;padding-right:8px\" class=\"guipanel r-table-cell\" id=\"VUQ4965855\"><div style=\"right:8px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:38px;top:0;left:0;height:38px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:38px;text-align:center;height:38px\" class=\"guilayoutgridbag_container\"><div style=\"width:38px;margin-left:-19px;margin-top:-19px;top:50%;left:50%;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;cursor:pointer;padding-top:4px;margin:auto;top:0;left:0;bottom:0;padding-left:4px;padding-bottom:4px;right:0;padding-right:4px\" class=\"guipanel incraseContrastForPartlistIconsOnClick decreaseContrastForPartlistIconsOnHover cursor_pointer\" id=\"BIU4965855\" onmousedown=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnMouseUp(event, &#39;BIU4965855&#39;, &#39;BIU4965855&#39;, &#39;&#39;, true, false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;ETK4965855\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Goto&amp;nbsp;assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 106, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnClick(event, &#39;BIU4965855&#39;, &#39;BIU4965855&#39;, &#39;&#39;, true, false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div style=\"right:4px;top:4px;left:4px;bottom:4px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"border-radius:2px;background-color:rgba(0,0,0,0.06274509803921569);padding-top:7px;top:0;left:0;bottom:0;padding-left:7px;padding-bottom:7px;right:0;padding-right:7px\" class=\"guipanel\" id=\"BFD4965855\"><div style=\"right:7px;top:7px;left:7px;bottom:7px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"width:16px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:0px\" class=\"guiimage\" id=\"QMI4965855\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_responsive_table_go_down_normal.png\" alt=\"\" id=\"QMI4965855_img\"></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div><div style=\"position:absolute;right:0px;top:328px;left:0px;height:41px\" id=\"SRA4965678_layoutdiv\"><div style=\"background-color:#f5f5f5;padding-top:0px;top:0;color:#000000;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel dw-hover-class-foreground-23303030303030 dw-hover-class-background-23643764376437\" id=\"SRA4965678\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;SRA4965678&#39;, &#39;SRA4965678&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"z-index:301;position:absolute;right:0px;left:0px;bottom:0px;height:1px\" id=\"CIX4965863_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"CIX4965863\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div><div style=\"z-index:1;top:0px;left:16px;display:table;width:50px;position:absolute;height:100%\" id=\"KTQ4965855_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"KTQ4965855\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-top:-15px;right:0;top:50%;left:0px;bottom:0;height:30px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;right:0px;text-align:left;height:30px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:49.999%;left:0;width:27px;margin-top:-12px;margin-bottom:0px;margin-right:0px;height:27px\" class=\"guilayoutgridbag_container_padded\"><label style=\"padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"rcheckbox\" id=\"XLX4965855\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;XLX4965855&#39;, &#39;XLX4965855&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" ondblclick=\"try {dwFwPreEv(event,false,this); ;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><input name=\"XLX4965855\" value=\"XLX4965855\" type=\"checkbox\" id=\"XLX4965855_input\" onchange=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxCheckboxOnChange(event, &#39;XLX4965855&#39;, &#39;XLX4965855_input&#39;, &#39;&#39;, false, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);this.blur();this.focus();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><span class=\"checkmark\" id=\"XLX4965855_checkmark\"></span><span class=\"rcheckbox_text\" id=\"XLX4965855_text\"></span></label></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:76px;display:table;width:34px;position:absolute;height:100%\" id=\"WKV4965856_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"WKV4965856\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:24px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:24px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-8px;right:0;height:16px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"width:24px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:8px\" class=\"guiimage\" id=\"SSL4965856\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;SSL4965856&#39;, &#39;SSL4965856&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;SVK4965856\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 72, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=bi_image_FCE645C38BE44E45BFFA7E9674945850\" alt=\"\" id=\"SSL4965856_img\"></div></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:120px;display:table;width:254px;position:absolute;height:100%\" id=\"HVQ4965856_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;padding-left:0px;display:table-cell;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel r-table-cell\" id=\"HVQ4965856\">Charger</div></div><div style=\"z-index:1;top:0px;left:538px;display:table;width:46px;position:absolute;height:100%\" id=\"NCG4965862_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;min-height:40px;right:0;padding-right:0px;min-width:56px\" class=\"guipanel r-table-cell\" id=\"NCG4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:76px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:0px;text-align:center\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-2px;top:0;left:49.999%;bottom:0;width:1px;margin-top:0px;margin-bottom:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:#f4f4f4;padding-top:0px;margin:auto;top:0;max-width:1px;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px;min-width:1px\" class=\"guipanel\" id=\"OOF4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div></div><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:76px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:10px;top:50%;left:0;width:46px;margin-top:-19px;margin-bottom:0px;margin-right:20px;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;min-height:30px;right:0;padding-right:8px\" class=\"guipanel r-table-cell\" id=\"DYM4965856\"><div style=\"right:8px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:38px;top:0;left:0;height:38px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:38px;text-align:center;height:38px\" class=\"guilayoutgridbag_container\"><div style=\"width:38px;margin-left:-19px;margin-top:-19px;top:50%;left:50%;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;cursor:pointer;padding-top:4px;margin:auto;top:0;left:0;bottom:0;padding-left:4px;padding-bottom:4px;right:0;padding-right:4px\" class=\"guipanel incraseContrastForPartlistIconsOnClick decreaseContrastForPartlistIconsOnHover cursor_pointer\" id=\"UCU4965856\" onmousedown=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnMouseUp(event, &#39;UCU4965856&#39;, &#39;UCU4965856&#39;, &#39;&#39;, true, false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;OLM4965856\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Goto&amp;nbsp;assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 106, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnClick(event, &#39;UCU4965856&#39;, &#39;UCU4965856&#39;, &#39;&#39;, true, false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div style=\"right:4px;top:4px;left:4px;bottom:4px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"border-radius:2px;background-color:rgba(0,0,0,0.06274509803921569);padding-top:7px;top:0;left:0;bottom:0;padding-left:7px;padding-bottom:7px;right:0;padding-right:7px\" class=\"guipanel\" id=\"OGI4965856\"><div style=\"right:7px;top:7px;left:7px;bottom:7px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"width:16px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:0px\" class=\"guiimage\" id=\"BNQ4965856\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_responsive_table_go_down_normal.png\" alt=\"\" id=\"BNQ4965856_img\"></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div><div style=\"position:absolute;right:0px;top:369px;left:0px;height:41px\" id=\"FLG4965678_layoutdiv\"><div style=\"background-color:#f5f5f5;padding-top:0px;top:0;color:#000000;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel dw-hover-class-foreground-23303030303030 dw-hover-class-background-23643764376437\" id=\"FLG4965678\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;FLG4965678&#39;, &#39;FLG4965678&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"z-index:301;position:absolute;right:0px;left:0px;bottom:0px;height:1px\" id=\"OKT4965863_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"OKT4965863\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div><div style=\"z-index:1;top:0px;left:16px;display:table;width:50px;position:absolute;height:100%\" id=\"MJB4965856_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"MJB4965856\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-top:-15px;right:0;top:50%;left:0px;bottom:0;height:30px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;right:0px;text-align:left;height:30px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:49.999%;left:0;width:27px;margin-top:-12px;margin-bottom:0px;margin-right:0px;height:27px\" class=\"guilayoutgridbag_container_padded\"><label style=\"padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"rcheckbox\" id=\"EWA4965856\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;EWA4965856&#39;, &#39;EWA4965856&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" ondblclick=\"try {dwFwPreEv(event,false,this); ;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><input name=\"EWA4965856\" value=\"EWA4965856\" type=\"checkbox\" id=\"EWA4965856_input\" onchange=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxCheckboxOnChange(event, &#39;EWA4965856&#39;, &#39;EWA4965856_input&#39;, &#39;&#39;, false, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);this.blur();this.focus();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><span class=\"checkmark\" id=\"EWA4965856_checkmark\"></span><span class=\"rcheckbox_text\" id=\"EWA4965856_text\"></span></label></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:76px;display:table;width:34px;position:absolute;height:100%\" id=\"WSD4965856_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"WSD4965856\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:24px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:24px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-8px;right:0;height:16px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"width:24px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:8px\" class=\"guiimage\" id=\"FIP4965856\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;FIP4965856&#39;, &#39;FIP4965856&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;WYY4965856\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 72, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=bi_image_FCE645C38BE44E45BFFA7E9674945850\" alt=\"\" id=\"FIP4965856_img\"></div></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:120px;display:table;width:254px;position:absolute;height:100%\" id=\"HAR4965857_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;padding-left:0px;display:table-cell;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel r-table-cell\" id=\"HAR4965857\">Machining&nbsp;surfaces</div></div><div style=\"z-index:1;top:0px;left:538px;display:table;width:46px;position:absolute;height:100%\" id=\"KUF4965862_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;min-height:40px;right:0;padding-right:0px;min-width:56px\" class=\"guipanel r-table-cell\" id=\"KUF4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:76px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:0px;text-align:center\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-2px;top:0;left:49.999%;bottom:0;width:1px;margin-top:0px;margin-bottom:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:#f4f4f4;padding-top:0px;margin:auto;top:0;max-width:1px;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px;min-width:1px\" class=\"guipanel\" id=\"CAA4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div></div><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:76px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:10px;top:50%;left:0;width:46px;margin-top:-19px;margin-bottom:0px;margin-right:20px;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;min-height:30px;right:0;padding-right:8px\" class=\"guipanel r-table-cell\" id=\"CJB4965857\"><div style=\"right:8px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:38px;top:0;left:0;height:38px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:38px;text-align:center;height:38px\" class=\"guilayoutgridbag_container\"><div style=\"width:38px;margin-left:-19px;margin-top:-19px;top:50%;left:50%;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;cursor:pointer;padding-top:4px;margin:auto;top:0;left:0;bottom:0;padding-left:4px;padding-bottom:4px;right:0;padding-right:4px\" class=\"guipanel incraseContrastForPartlistIconsOnClick decreaseContrastForPartlistIconsOnHover cursor_pointer\" id=\"NQE4965857\" onmousedown=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnMouseUp(event, &#39;NQE4965857&#39;, &#39;NQE4965857&#39;, &#39;&#39;, true, false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;TLS4965857\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Goto&amp;nbsp;assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 106, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnClick(event, &#39;NQE4965857&#39;, &#39;NQE4965857&#39;, &#39;&#39;, true, false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div style=\"right:4px;top:4px;left:4px;bottom:4px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"border-radius:2px;background-color:rgba(0,0,0,0.06274509803921569);padding-top:7px;top:0;left:0;bottom:0;padding-left:7px;padding-bottom:7px;right:0;padding-right:7px\" class=\"guipanel\" id=\"WJH4965857\"><div style=\"right:7px;top:7px;left:7px;bottom:7px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"width:16px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:0px\" class=\"guiimage\" id=\"LXN4965857\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_responsive_table_go_down_normal.png\" alt=\"\" id=\"LXN4965857_img\"></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div><div style=\"position:absolute;right:0px;top:410px;left:0px;height:41px\" id=\"DUX4965678_layoutdiv\"><div style=\"background-color:#f5f5f5;padding-top:0px;top:0;color:#000000;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel dw-hover-class-foreground-23303030303030 dw-hover-class-background-23643764376437\" id=\"DUX4965678\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;DUX4965678&#39;, &#39;DUX4965678&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"z-index:301;position:absolute;right:0px;left:0px;bottom:0px;height:1px\" id=\"ETL4965863_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"ETL4965863\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div><div style=\"z-index:1;top:0px;left:16px;display:table;width:50px;position:absolute;height:100%\" id=\"PHT4965857_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"PHT4965857\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-top:-15px;right:0;top:50%;left:0px;bottom:0;height:30px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;right:0px;text-align:left;height:30px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:49.999%;left:0;width:27px;margin-top:-12px;margin-bottom:0px;margin-right:0px;height:27px\" class=\"guilayoutgridbag_container_padded\"><label style=\"padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"rcheckbox\" id=\"IRR4965857\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;IRR4965857&#39;, &#39;IRR4965857&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" ondblclick=\"try {dwFwPreEv(event,false,this); ;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><input name=\"IRR4965857\" value=\"IRR4965857\" type=\"checkbox\" id=\"IRR4965857_input\" onchange=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxCheckboxOnChange(event, &#39;IRR4965857&#39;, &#39;IRR4965857_input&#39;, &#39;&#39;, false, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);this.blur();this.focus();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><span class=\"checkmark\" id=\"IRR4965857_checkmark\"></span><span class=\"rcheckbox_text\" id=\"IRR4965857_text\"></span></label></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:76px;display:table;width:34px;position:absolute;height:100%\" id=\"NVU4965857_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"NVU4965857\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:24px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:24px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-8px;right:0;height:16px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"width:24px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:8px\" class=\"guiimage\" id=\"SOV4965857\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;SOV4965857&#39;, &#39;SOV4965857&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;IYV4965857\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 72, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=bi_image_FCE645C38BE44E45BFFA7E9674945850\" alt=\"\" id=\"SOV4965857_img\"></div></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:120px;display:table;width:254px;position:absolute;height:100%\" id=\"CQH4965857_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;padding-left:0px;display:table-cell;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel r-table-cell\" id=\"CQH4965857\">Oscillators</div></div><div style=\"z-index:1;top:0px;left:538px;display:table;width:46px;position:absolute;height:100%\" id=\"ISJ4965862_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;min-height:40px;right:0;padding-right:0px;min-width:56px\" class=\"guipanel r-table-cell\" id=\"ISJ4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:76px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:0px;text-align:center\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-2px;top:0;left:49.999%;bottom:0;width:1px;margin-top:0px;margin-bottom:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:#f4f4f4;padding-top:0px;margin:auto;top:0;max-width:1px;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px;min-width:1px\" class=\"guipanel\" id=\"KQO4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div></div><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:76px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:10px;top:50%;left:0;width:46px;margin-top:-19px;margin-bottom:0px;margin-right:20px;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;min-height:30px;right:0;padding-right:8px\" class=\"guipanel r-table-cell\" id=\"PRX4965857\"><div style=\"right:8px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:38px;top:0;left:0;height:38px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:38px;text-align:center;height:38px\" class=\"guilayoutgridbag_container\"><div style=\"width:38px;margin-left:-19px;margin-top:-19px;top:50%;left:50%;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;cursor:pointer;padding-top:4px;margin:auto;top:0;left:0;bottom:0;padding-left:4px;padding-bottom:4px;right:0;padding-right:4px\" class=\"guipanel incraseContrastForPartlistIconsOnClick decreaseContrastForPartlistIconsOnHover cursor_pointer\" id=\"AIF4965857\" onmousedown=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnMouseUp(event, &#39;AIF4965857&#39;, &#39;AIF4965857&#39;, &#39;&#39;, true, false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;DVE4965857\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Goto&amp;nbsp;assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 106, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnClick(event, &#39;AIF4965857&#39;, &#39;AIF4965857&#39;, &#39;&#39;, true, false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div style=\"right:4px;top:4px;left:4px;bottom:4px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"border-radius:2px;background-color:rgba(0,0,0,0.06274509803921569);padding-top:7px;top:0;left:0;bottom:0;padding-left:7px;padding-bottom:7px;right:0;padding-right:7px\" class=\"guipanel\" id=\"GII4965857\"><div style=\"right:7px;top:7px;left:7px;bottom:7px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"width:16px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:0px\" class=\"guiimage\" id=\"TIW4965857\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_responsive_table_go_down_normal.png\" alt=\"\" id=\"TIW4965857_img\"></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div><div style=\"position:absolute;right:0px;top:451px;left:0px;height:41px\" id=\"TQY4965678_layoutdiv\"><div style=\"background-color:#f5f5f5;padding-top:0px;top:0;color:#000000;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel dw-hover-class-foreground-23303030303030 dw-hover-class-background-23643764376437\" id=\"TQY4965678\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;TQY4965678&#39;, &#39;TQY4965678&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"z-index:301;position:absolute;right:0px;left:0px;bottom:0px;height:1px\" id=\"VIW4965863_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"VIW4965863\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div><div style=\"z-index:1;top:0px;left:16px;display:table;width:50px;position:absolute;height:100%\" id=\"IVT4965857_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"IVT4965857\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-top:-15px;right:0;top:50%;left:0px;bottom:0;height:30px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;right:0px;text-align:left;height:30px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:49.999%;left:0;width:27px;margin-top:-12px;margin-bottom:0px;margin-right:0px;height:27px\" class=\"guilayoutgridbag_container_padded\"><label style=\"padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"rcheckbox\" id=\"LAW4965857\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;LAW4965857&#39;, &#39;LAW4965857&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" ondblclick=\"try {dwFwPreEv(event,false,this); ;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><input name=\"LAW4965857\" value=\"LAW4965857\" type=\"checkbox\" id=\"LAW4965857_input\" onchange=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxCheckboxOnChange(event, &#39;LAW4965857&#39;, &#39;LAW4965857_input&#39;, &#39;&#39;, false, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);this.blur();this.focus();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><span class=\"checkmark\" id=\"LAW4965857_checkmark\"></span><span class=\"rcheckbox_text\" id=\"LAW4965857_text\"></span></label></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:76px;display:table;width:34px;position:absolute;height:100%\" id=\"OSV4965858_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"OSV4965858\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:24px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:24px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-8px;right:0;height:16px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"width:24px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:8px\" class=\"guiimage\" id=\"IUI4965858\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;IUI4965858&#39;, &#39;IUI4965858&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;UWU4965858\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 72, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=bi_image_FCE645C38BE44E45BFFA7E9674945850\" alt=\"\" id=\"IUI4965858_img\"></div></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:120px;display:table;width:254px;position:absolute;height:100%\" id=\"LLT4965858_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;padding-left:0px;display:table-cell;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel r-table-cell\" id=\"LLT4965858\">Saws</div></div><div style=\"z-index:1;top:0px;left:538px;display:table;width:46px;position:absolute;height:100%\" id=\"HEG4965862_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;min-height:40px;right:0;padding-right:0px;min-width:56px\" class=\"guipanel r-table-cell\" id=\"HEG4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:76px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:0px;text-align:center\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-2px;top:0;left:49.999%;bottom:0;width:1px;margin-top:0px;margin-bottom:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:#f4f4f4;padding-top:0px;margin:auto;top:0;max-width:1px;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px;min-width:1px\" class=\"guipanel\" id=\"GCS4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div></div><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:76px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:10px;top:50%;left:0;width:46px;margin-top:-19px;margin-bottom:0px;margin-right:20px;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;min-height:30px;right:0;padding-right:8px\" class=\"guipanel r-table-cell\" id=\"PIR4965858\"><div style=\"right:8px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:38px;top:0;left:0;height:38px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:38px;text-align:center;height:38px\" class=\"guilayoutgridbag_container\"><div style=\"width:38px;margin-left:-19px;margin-top:-19px;top:50%;left:50%;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;cursor:pointer;padding-top:4px;margin:auto;top:0;left:0;bottom:0;padding-left:4px;padding-bottom:4px;right:0;padding-right:4px\" class=\"guipanel incraseContrastForPartlistIconsOnClick decreaseContrastForPartlistIconsOnHover cursor_pointer\" id=\"BDP4965858\" onmousedown=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnMouseUp(event, &#39;BDP4965858&#39;, &#39;BDP4965858&#39;, &#39;&#39;, true, false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;FPT4965858\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Goto&amp;nbsp;assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 106, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnClick(event, &#39;BDP4965858&#39;, &#39;BDP4965858&#39;, &#39;&#39;, true, false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div style=\"right:4px;top:4px;left:4px;bottom:4px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"border-radius:2px;background-color:rgba(0,0,0,0.06274509803921569);padding-top:7px;top:0;left:0;bottom:0;padding-left:7px;padding-bottom:7px;right:0;padding-right:7px\" class=\"guipanel\" id=\"EHK4965858\"><div style=\"right:7px;top:7px;left:7px;bottom:7px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"width:16px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:0px\" class=\"guiimage\" id=\"PBF4965858\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_responsive_table_go_down_normal.png\" alt=\"\" id=\"PBF4965858_img\"></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div><div style=\"position:absolute;right:0px;top:492px;left:0px;height:41px\" id=\"PIS4965678_layoutdiv\"><div style=\"background-color:#f5f5f5;padding-top:0px;top:0;color:#000000;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel dw-hover-class-foreground-23303030303030 dw-hover-class-background-23643764376437\" id=\"PIS4965678\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;PIS4965678&#39;, &#39;PIS4965678&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"z-index:301;position:absolute;right:0px;left:0px;bottom:0px;height:1px\" id=\"LHM4965863_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"LHM4965863\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div><div style=\"z-index:1;top:0px;left:16px;display:table;width:50px;position:absolute;height:100%\" id=\"KMR4965858_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"KMR4965858\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-top:-15px;right:0;top:50%;left:0px;bottom:0;height:30px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;right:0px;text-align:left;height:30px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:49.999%;left:0;width:27px;margin-top:-12px;margin-bottom:0px;margin-right:0px;height:27px\" class=\"guilayoutgridbag_container_padded\"><label style=\"padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"rcheckbox\" id=\"YTM4965858\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;YTM4965858&#39;, &#39;YTM4965858&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" ondblclick=\"try {dwFwPreEv(event,false,this); ;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><input name=\"YTM4965858\" value=\"YTM4965858\" type=\"checkbox\" id=\"YTM4965858_input\" onchange=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxCheckboxOnChange(event, &#39;YTM4965858&#39;, &#39;YTM4965858_input&#39;, &#39;&#39;, false, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);this.blur();this.focus();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><span class=\"checkmark\" id=\"YTM4965858_checkmark\"></span><span class=\"rcheckbox_text\" id=\"YTM4965858_text\"></span></label></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:76px;display:table;width:34px;position:absolute;height:100%\" id=\"XFK4965859_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"XFK4965859\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:24px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:24px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-8px;right:0;height:16px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"width:24px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:8px\" class=\"guiimage\" id=\"RYF4965859\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;RYF4965859&#39;, &#39;RYF4965859&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;CGJ4965859\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 72, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=bi_image_FCE645C38BE44E45BFFA7E9674945850\" alt=\"\" id=\"RYF4965859_img\"></div></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:120px;display:table;width:254px;position:absolute;height:100%\" id=\"EBP4965859_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;padding-left:0px;display:table-cell;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel r-table-cell\" id=\"EBP4965859\">Dust&nbsp;extraction</div></div><div style=\"z-index:1;top:0px;left:538px;display:table;width:46px;position:absolute;height:100%\" id=\"OST4965862_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;min-height:40px;right:0;padding-right:0px;min-width:56px\" class=\"guipanel r-table-cell\" id=\"OST4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:76px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:0px;text-align:center\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-2px;top:0;left:49.999%;bottom:0;width:1px;margin-top:0px;margin-bottom:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:#f4f4f4;padding-top:0px;margin:auto;top:0;max-width:1px;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px;min-width:1px\" class=\"guipanel\" id=\"QXB4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div></div><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:76px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:10px;top:50%;left:0;width:46px;margin-top:-19px;margin-bottom:0px;margin-right:20px;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;min-height:30px;right:0;padding-right:8px\" class=\"guipanel r-table-cell\" id=\"VXT4965859\"><div style=\"right:8px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:38px;top:0;left:0;height:38px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:38px;text-align:center;height:38px\" class=\"guilayoutgridbag_container\"><div style=\"width:38px;margin-left:-19px;margin-top:-19px;top:50%;left:50%;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;cursor:pointer;padding-top:4px;margin:auto;top:0;left:0;bottom:0;padding-left:4px;padding-bottom:4px;right:0;padding-right:4px\" class=\"guipanel incraseContrastForPartlistIconsOnClick decreaseContrastForPartlistIconsOnHover cursor_pointer\" id=\"ADU4965859\" onmousedown=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnMouseUp(event, &#39;ADU4965859&#39;, &#39;ADU4965859&#39;, &#39;&#39;, true, false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;TGH4965859\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Goto&amp;nbsp;assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 106, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnClick(event, &#39;ADU4965859&#39;, &#39;ADU4965859&#39;, &#39;&#39;, true, false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div style=\"right:4px;top:4px;left:4px;bottom:4px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"border-radius:2px;background-color:rgba(0,0,0,0.06274509803921569);padding-top:7px;top:0;left:0;bottom:0;padding-left:7px;padding-bottom:7px;right:0;padding-right:7px\" class=\"guipanel\" id=\"FQU4965859\"><div style=\"right:7px;top:7px;left:7px;bottom:7px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"width:16px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:0px\" class=\"guiimage\" id=\"FON4965859\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_responsive_table_go_down_normal.png\" alt=\"\" id=\"FON4965859_img\"></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div><div style=\"position:absolute;right:0px;top:533px;left:0px;height:41px\" id=\"HQN4965678_layoutdiv\"><div style=\"background-color:#f5f5f5;padding-top:0px;top:0;color:#000000;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel dw-hover-class-foreground-23303030303030 dw-hover-class-background-23643764376437\" id=\"HQN4965678\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;HQN4965678&#39;, &#39;HQN4965678&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"z-index:301;position:absolute;right:0px;left:0px;bottom:0px;height:1px\" id=\"ERL4965863_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"ERL4965863\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div><div style=\"z-index:1;top:0px;left:16px;display:table;width:50px;position:absolute;height:100%\" id=\"YEM4965859_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"YEM4965859\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-top:-15px;right:0;top:50%;left:0px;bottom:0;height:30px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;right:0px;text-align:left;height:30px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:49.999%;left:0;width:27px;margin-top:-12px;margin-bottom:0px;margin-right:0px;height:27px\" class=\"guilayoutgridbag_container_padded\"><label style=\"padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"rcheckbox\" id=\"MXV4965859\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;MXV4965859&#39;, &#39;MXV4965859&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" ondblclick=\"try {dwFwPreEv(event,false,this); ;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><input name=\"MXV4965859\" value=\"MXV4965859\" type=\"checkbox\" id=\"MXV4965859_input\" onchange=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxCheckboxOnChange(event, &#39;MXV4965859&#39;, &#39;MXV4965859_input&#39;, &#39;&#39;, false, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);this.blur();this.focus();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><span class=\"checkmark\" id=\"MXV4965859_checkmark\"></span><span class=\"rcheckbox_text\" id=\"MXV4965859_text\"></span></label></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:76px;display:table;width:34px;position:absolute;height:100%\" id=\"DPI4965860_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"DPI4965860\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:24px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:24px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-8px;right:0;height:16px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"width:24px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:8px\" class=\"guiimage\" id=\"LKL4965860\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;LKL4965860&#39;, &#39;LKL4965860&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;EAJ4965860\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 72, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=bi_image_FCE645C38BE44E45BFFA7E9674945850\" alt=\"\" id=\"LKL4965860_img\"></div></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:120px;display:table;width:254px;position:absolute;height:100%\" id=\"GLM4965860_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;padding-left:0px;display:table-cell;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel r-table-cell\" id=\"GLM4965860\">Basis-Plus&nbsp;system</div></div><div style=\"z-index:1;top:0px;left:538px;display:table;width:46px;position:absolute;height:100%\" id=\"BUN4965862_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;min-height:40px;right:0;padding-right:0px;min-width:56px\" class=\"guipanel r-table-cell\" id=\"BUN4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:76px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:0px;text-align:center\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-2px;top:0;left:49.999%;bottom:0;width:1px;margin-top:0px;margin-bottom:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:#f4f4f4;padding-top:0px;margin:auto;top:0;max-width:1px;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px;min-width:1px\" class=\"guipanel\" id=\"BHF4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div></div><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:76px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:10px;top:50%;left:0;width:46px;margin-top:-19px;margin-bottom:0px;margin-right:20px;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;min-height:30px;right:0;padding-right:8px\" class=\"guipanel r-table-cell\" id=\"DSB4965860\"><div style=\"right:8px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:38px;top:0;left:0;height:38px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:38px;text-align:center;height:38px\" class=\"guilayoutgridbag_container\"><div style=\"width:38px;margin-left:-19px;margin-top:-19px;top:50%;left:50%;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;cursor:pointer;padding-top:4px;margin:auto;top:0;left:0;bottom:0;padding-left:4px;padding-bottom:4px;right:0;padding-right:4px\" class=\"guipanel incraseContrastForPartlistIconsOnClick decreaseContrastForPartlistIconsOnHover cursor_pointer\" id=\"LRS4965860\" onmousedown=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnMouseUp(event, &#39;LRS4965860&#39;, &#39;LRS4965860&#39;, &#39;&#39;, true, false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;DNV4965860\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Goto&amp;nbsp;assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 106, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnClick(event, &#39;LRS4965860&#39;, &#39;LRS4965860&#39;, &#39;&#39;, true, false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div style=\"right:4px;top:4px;left:4px;bottom:4px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"border-radius:2px;background-color:rgba(0,0,0,0.06274509803921569);padding-top:7px;top:0;left:0;bottom:0;padding-left:7px;padding-bottom:7px;right:0;padding-right:7px\" class=\"guipanel\" id=\"RKD4965860\"><div style=\"right:7px;top:7px;left:7px;bottom:7px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"width:16px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:0px\" class=\"guiimage\" id=\"BUO4965860\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_responsive_table_go_down_normal.png\" alt=\"\" id=\"BUO4965860_img\"></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div><div style=\"position:absolute;right:0px;top:574px;left:0px;height:41px\" id=\"UWU4965678_layoutdiv\"><div style=\"background-color:#f5f5f5;padding-top:0px;top:0;color:#000000;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel dw-hover-class-foreground-23303030303030 dw-hover-class-background-23643764376437\" id=\"UWU4965678\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;UWU4965678&#39;, &#39;UWU4965678&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"z-index:301;position:absolute;right:0px;left:0px;bottom:0px;height:1px\" id=\"TJR4965863_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"TJR4965863\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div><div style=\"z-index:1;top:0px;left:16px;display:table;width:50px;position:absolute;height:100%\" id=\"CWS4965860_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"CWS4965860\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-top:-15px;right:0;top:50%;left:0px;bottom:0;height:30px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;right:0px;text-align:left;height:30px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:49.999%;left:0;width:27px;margin-top:-12px;margin-bottom:0px;margin-right:0px;height:27px\" class=\"guilayoutgridbag_container_padded\"><label style=\"padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"rcheckbox\" id=\"VBV4965860\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;VBV4965860&#39;, &#39;VBV4965860&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" ondblclick=\"try {dwFwPreEv(event,false,this); ;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><input name=\"VBV4965860\" value=\"VBV4965860\" type=\"checkbox\" id=\"VBV4965860_input\" onchange=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxCheckboxOnChange(event, &#39;VBV4965860&#39;, &#39;VBV4965860_input&#39;, &#39;&#39;, false, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);this.blur();this.focus();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><span class=\"checkmark\" id=\"VBV4965860_checkmark\"></span><span class=\"rcheckbox_text\" id=\"VBV4965860_text\"></span></label></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:76px;display:table;width:34px;position:absolute;height:100%\" id=\"JKB4965860_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"JKB4965860\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:24px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:24px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-8px;right:0;height:16px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"width:24px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:8px\" class=\"guiimage\" id=\"KMI4965860\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;KMI4965860&#39;, &#39;KMI4965860&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;FUY4965860\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 72, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=bi_image_FCE645C38BE44E45BFFA7E9674945850\" alt=\"\" id=\"KMI4965860_img\"></div></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:120px;display:table;width:254px;position:absolute;height:100%\" id=\"ELV4965860_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;padding-left:0px;display:table-cell;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel r-table-cell\" id=\"ELV4965860\">Cutting</div></div><div style=\"z-index:1;top:0px;left:538px;display:table;width:46px;position:absolute;height:100%\" id=\"BEA4965862_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;min-height:40px;right:0;padding-right:0px;min-width:56px\" class=\"guipanel r-table-cell\" id=\"BEA4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:76px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:0px;text-align:center\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-2px;top:0;left:49.999%;bottom:0;width:1px;margin-top:0px;margin-bottom:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:#f4f4f4;padding-top:0px;margin:auto;top:0;max-width:1px;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px;min-width:1px\" class=\"guipanel\" id=\"FXG4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div></div><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:76px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:10px;top:50%;left:0;width:46px;margin-top:-19px;margin-bottom:0px;margin-right:20px;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;min-height:30px;right:0;padding-right:8px\" class=\"guipanel r-table-cell\" id=\"XWU4965860\"><div style=\"right:8px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:38px;top:0;left:0;height:38px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:38px;text-align:center;height:38px\" class=\"guilayoutgridbag_container\"><div style=\"width:38px;margin-left:-19px;margin-top:-19px;top:50%;left:50%;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;cursor:pointer;padding-top:4px;margin:auto;top:0;left:0;bottom:0;padding-left:4px;padding-bottom:4px;right:0;padding-right:4px\" class=\"guipanel incraseContrastForPartlistIconsOnClick decreaseContrastForPartlistIconsOnHover cursor_pointer\" id=\"PYG4965860\" onmousedown=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnMouseUp(event, &#39;PYG4965860&#39;, &#39;PYG4965860&#39;, &#39;&#39;, true, false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;HCD4965860\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Goto&amp;nbsp;assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 106, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnClick(event, &#39;PYG4965860&#39;, &#39;PYG4965860&#39;, &#39;&#39;, true, false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div style=\"right:4px;top:4px;left:4px;bottom:4px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"border-radius:2px;background-color:rgba(0,0,0,0.06274509803921569);padding-top:7px;top:0;left:0;bottom:0;padding-left:7px;padding-bottom:7px;right:0;padding-right:7px\" class=\"guipanel\" id=\"PPJ4965860\"><div style=\"right:7px;top:7px;left:7px;bottom:7px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"width:16px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:0px\" class=\"guiimage\" id=\"JEY4965860\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_responsive_table_go_down_normal.png\" alt=\"\" id=\"JEY4965860_img\"></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div><div style=\"position:absolute;right:0px;top:615px;left:0px;height:41px\" id=\"CWQ4965678_layoutdiv\"><div style=\"background-color:#f5f5f5;padding-top:0px;top:0;color:#000000;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel dw-hover-class-foreground-23303030303030 dw-hover-class-background-23643764376437\" id=\"CWQ4965678\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;CWQ4965678&#39;, &#39;CWQ4965678&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"z-index:301;position:absolute;right:0px;left:0px;bottom:0px;height:1px\" id=\"SVO4965863_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"SVO4965863\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div><div style=\"z-index:1;top:0px;left:16px;display:table;width:50px;position:absolute;height:100%\" id=\"AGG4965860_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"AGG4965860\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-top:-15px;right:0;top:50%;left:0px;bottom:0;height:30px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;right:0px;text-align:left;height:30px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:49.999%;left:0;width:27px;margin-top:-12px;margin-bottom:0px;margin-right:0px;height:27px\" class=\"guilayoutgridbag_container_padded\"><label style=\"padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"rcheckbox\" id=\"VTE4965860\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;VTE4965860&#39;, &#39;VTE4965860&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" ondblclick=\"try {dwFwPreEv(event,false,this); ;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><input name=\"VTE4965860\" value=\"VTE4965860\" type=\"checkbox\" id=\"VTE4965860_input\" onchange=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxCheckboxOnChange(event, &#39;VTE4965860&#39;, &#39;VTE4965860_input&#39;, &#39;&#39;, false, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);this.blur();this.focus();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><span class=\"checkmark\" id=\"VTE4965860_checkmark\"></span><span class=\"rcheckbox_text\" id=\"VTE4965860_text\"></span></label></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:76px;display:table;width:34px;position:absolute;height:100%\" id=\"MRV4965861_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"MRV4965861\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:24px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:24px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-8px;right:0;height:16px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"width:24px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:8px\" class=\"guiimage\" id=\"DIV4965861\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;DIV4965861&#39;, &#39;DIV4965861&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;BJT4965861\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 72, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=bi_image_FCE645C38BE44E45BFFA7E9674945850\" alt=\"\" id=\"DIV4965861_img\"></div></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:120px;display:table;width:254px;position:absolute;height:100%\" id=\"XSQ4965861_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;padding-left:0px;display:table-cell;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel r-table-cell\" id=\"XSQ4965861\">Drywall&nbsp;construction&nbsp;and&nbsp;renovation</div></div><div style=\"z-index:1;top:0px;left:538px;display:table;width:46px;position:absolute;height:100%\" id=\"FJS4965862_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;min-height:40px;right:0;padding-right:0px;min-width:56px\" class=\"guipanel r-table-cell\" id=\"FJS4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:76px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:0px;text-align:center\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-2px;top:0;left:49.999%;bottom:0;width:1px;margin-top:0px;margin-bottom:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:#f4f4f4;padding-top:0px;margin:auto;top:0;max-width:1px;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px;min-width:1px\" class=\"guipanel\" id=\"IFG4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div></div><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:76px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:10px;top:50%;left:0;width:46px;margin-top:-19px;margin-bottom:0px;margin-right:20px;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;min-height:30px;right:0;padding-right:8px\" class=\"guipanel r-table-cell\" id=\"HCP4965861\"><div style=\"right:8px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:38px;top:0;left:0;height:38px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:38px;text-align:center;height:38px\" class=\"guilayoutgridbag_container\"><div style=\"width:38px;margin-left:-19px;margin-top:-19px;top:50%;left:50%;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;cursor:pointer;padding-top:4px;margin:auto;top:0;left:0;bottom:0;padding-left:4px;padding-bottom:4px;right:0;padding-right:4px\" class=\"guipanel incraseContrastForPartlistIconsOnClick decreaseContrastForPartlistIconsOnHover cursor_pointer\" id=\"MDS4965861\" onmousedown=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnMouseUp(event, &#39;MDS4965861&#39;, &#39;MDS4965861&#39;, &#39;&#39;, true, false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;DMX4965861\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Goto&amp;nbsp;assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 106, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnClick(event, &#39;MDS4965861&#39;, &#39;MDS4965861&#39;, &#39;&#39;, true, false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div style=\"right:4px;top:4px;left:4px;bottom:4px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"border-radius:2px;background-color:rgba(0,0,0,0.06274509803921569);padding-top:7px;top:0;left:0;bottom:0;padding-left:7px;padding-bottom:7px;right:0;padding-right:7px\" class=\"guipanel\" id=\"XBG4965861\"><div style=\"right:7px;top:7px;left:7px;bottom:7px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"width:16px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:0px\" class=\"guiimage\" id=\"BDE4965861\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_responsive_table_go_down_normal.png\" alt=\"\" id=\"BDE4965861_img\"></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div><div style=\"position:absolute;right:0px;top:656px;left:0px;height:41px\" id=\"GGI4965678_layoutdiv\"><div style=\"background-color:#f5f5f5;padding-top:0px;top:0;color:#000000;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel dw-hover-class-foreground-23303030303030 dw-hover-class-background-23643764376437\" id=\"GGI4965678\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;GGI4965678&#39;, &#39;GGI4965678&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"z-index:301;position:absolute;right:0px;left:0px;bottom:0px;height:1px\" id=\"KGE4965863_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"KGE4965863\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div><div style=\"z-index:1;top:0px;left:16px;display:table;width:50px;position:absolute;height:100%\" id=\"HDD4965861_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"HDD4965861\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-top:-15px;right:0;top:50%;left:0px;bottom:0;height:30px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;right:0px;text-align:left;height:30px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:49.999%;left:0;width:27px;margin-top:-12px;margin-bottom:0px;margin-right:0px;height:27px\" class=\"guilayoutgridbag_container_padded\"><label style=\"padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"rcheckbox\" id=\"GTL4965861\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;GTL4965861&#39;, &#39;GTL4965861&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" ondblclick=\"try {dwFwPreEv(event,false,this); ;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><input name=\"GTL4965861\" value=\"GTL4965861\" type=\"checkbox\" id=\"GTL4965861_input\" onchange=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxCheckboxOnChange(event, &#39;GTL4965861&#39;, &#39;GTL4965861_input&#39;, &#39;&#39;, false, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);this.blur();this.focus();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><span class=\"checkmark\" id=\"GTL4965861_checkmark\"></span><span class=\"rcheckbox_text\" id=\"GTL4965861_text\"></span></label></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:76px;display:table;width:34px;position:absolute;height:100%\" id=\"HFH4965862_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"HFH4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:24px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:24px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-8px;right:0;height:16px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"width:24px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:8px\" class=\"guiimage\" id=\"JNL4965862\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;JNL4965862&#39;, &#39;JNL4965862&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;KAP4965862\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 72, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=bi_image_FCE645C38BE44E45BFFA7E9674945850\" alt=\"\" id=\"JNL4965862_img\"></div></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:120px;display:table;width:254px;position:absolute;height:100%\" id=\"WQY4965862_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;padding-left:0px;display:table-cell;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel r-table-cell\" id=\"WQY4965862\">Joining&nbsp;&ndash;&nbsp;DOMINO&nbsp;joining&nbsp;system</div></div><div style=\"z-index:1;top:0px;left:538px;display:table;width:46px;position:absolute;height:100%\" id=\"DUX4965862_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;min-height:40px;right:0;padding-right:0px;min-width:56px\" class=\"guipanel r-table-cell\" id=\"DUX4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:76px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:0px;text-align:center\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-2px;top:0;left:49.999%;bottom:0;width:1px;margin-top:0px;margin-bottom:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:#f4f4f4;padding-top:0px;margin:auto;top:0;max-width:1px;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px;min-width:1px\" class=\"guipanel\" id=\"OTU4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div></div><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:76px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:10px;top:50%;left:0;width:46px;margin-top:-19px;margin-bottom:0px;margin-right:20px;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;min-height:30px;right:0;padding-right:8px\" class=\"guipanel r-table-cell\" id=\"PSM4965862\"><div style=\"right:8px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:38px;top:0;left:0;height:38px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:38px;text-align:center;height:38px\" class=\"guilayoutgridbag_container\"><div style=\"width:38px;margin-left:-19px;margin-top:-19px;top:50%;left:50%;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;cursor:pointer;padding-top:4px;margin:auto;top:0;left:0;bottom:0;padding-left:4px;padding-bottom:4px;right:0;padding-right:4px\" class=\"guipanel incraseContrastForPartlistIconsOnClick decreaseContrastForPartlistIconsOnHover cursor_pointer\" id=\"UMR4965862\" onmousedown=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnMouseUp(event, &#39;UMR4965862&#39;, &#39;UMR4965862&#39;, &#39;&#39;, true, false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;QVT4965862\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Goto&amp;nbsp;assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 106, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnClick(event, &#39;UMR4965862&#39;, &#39;UMR4965862&#39;, &#39;&#39;, true, false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div style=\"right:4px;top:4px;left:4px;bottom:4px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"border-radius:2px;background-color:rgba(0,0,0,0.06274509803921569);padding-top:7px;top:0;left:0;bottom:0;padding-left:7px;padding-bottom:7px;right:0;padding-right:7px\" class=\"guipanel\" id=\"BSF4965862\"><div style=\"right:7px;top:7px;left:7px;bottom:7px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"width:16px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:0px\" class=\"guiimage\" id=\"BAE4965862\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_responsive_table_go_down_normal.png\" alt=\"\" id=\"BAE4965862_img\"></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div><div style=\"position:absolute;right:0px;top:0px;left:0px;height:51px\" id=\"IAP4965656_layoutdiv\"><input name=\"IAP4965656_scrollTop\" value=\"0\" type=\"hidden\" id=\"IAP4965656_scrollTop\"><input name=\"IAP4965656_scrollLeft\" value=\"0\" type=\"hidden\" id=\"IAP4965656_scrollLeft\"><div id=\"IAP4965656_rootGuiScrollPane\" class=\"guiscrollpane_root\"><div style=\"padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;overflow-x:hidden;overflow-y:hidden;right:0;padding-right:0px\" class=\"guiscrollpane modern_scrollpane_design_thin modern_scrollpane_design_thin\" scrollbarWidth=\"6\" id=\"IAP4965656\" horizontalScrollEnabled=\"false\" verticalScrollEnabled=\"false\" onscroll=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxScrollpaneScrolled(event, &#39;IAP4965656&#39;, &#39;IAP4965656&#39;, &#39;&#39;, true, true);dwFrameworkPreventDefaultBehaviour(event);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onresize=\"try {dwFwPreEv(event,false,this);dwHelperScrollPaneValueChanged(&#39;IAP4965656&#39;);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div style=\"border:0;background-color:#ffffff;padding-top:0px;color:#000000;padding-left:0px;width:422px;padding-bottom:0px;min-height:100%;padding-right:0px;min-width:100%;height:51px\" class=\"guipanel\" id=\"USD4965660\"><div class=\"guilayoutabsolute\"><div style=\"width:26px;position:absolute;top:16px;left:16px;height:35px\" id=\"FSF4965660_layoutdiv\"><div style=\"cursor:pointer;padding-top:0px;color:#000000;bottom:0;font-weight:600;padding-left:0px;padding-bottom:0px;font-size:13px;line-height:14px;right:0;font-style:normal;background-color:#ffffff;top:0;left:0;font-family:Open Sans,Segoe UI,Verdana,Tahoma,Arial,sans-serif,Arial Unicode MS,Helvetica,Lucida Grande,Geneva,Sans-Serif;padding-right:0px\" class=\"guipanel r-table-cell cursor_pointer\" id=\"FSF4965660\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnClick(event, &#39;FSF4965660&#39;, &#39;FSF4965660&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-top:-14px;right:0;top:50%;left:0px;bottom:0;height:28px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;right:0px;text-align:left;height:28px\" class=\"guilayoutgridbag_container\"><div style=\"width:27px;margin-top:-13px;top:49.999%;left:0;height:27px\" class=\"guilayoutgridbag_container_padded\"><label style=\"padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"rcheckbox\" id=\"CRU4965660\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;CRU4965660&#39;, &#39;CRU4965660&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" ondblclick=\"try {dwFwPreEv(event,false,this); ;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><input name=\"CRU4965660\" value=\"CRU4965660\" type=\"checkbox\" id=\"CRU4965660_input\" onchange=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxCheckboxOnChange(event, &#39;CRU4965660&#39;, &#39;CRU4965660_input&#39;, &#39;&#39;, false, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);this.blur();this.focus();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><span class=\"checkmark\" id=\"CRU4965660_checkmark\"></span><span class=\"rcheckbox_text\" id=\"CRU4965660_text\"></span></label></div></div></div></div></div></div><div style=\"width:10px;position:absolute;top:16px;left:76px;height:35px\" id=\"IUQ4965660_layoutdiv\"><div style=\"cursor:pointer;padding-top:0px;color:#000000;font-weight:600;padding-left:0px;padding-bottom:0px;font-size:13px;line-height:14px;font-style:normal;background-color:#ffffff;width:100%;font-family:Open Sans,Segoe UI,Verdana,Tahoma,Arial,sans-serif,Arial Unicode MS,Helvetica,Lucida Grande,Geneva,Sans-Serif;padding-right:0px;height:100%\" class=\"guilabel r-table-cell cursor_pointer\" id=\"IUQ4965660\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnClick(event, &#39;IUQ4965660&#39;, &#39;IUQ4965660&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"></div></div><div style=\"width:246px;position:absolute;top:16px;left:120px;height:35px\" id=\"CKG4965660_layoutdiv\"><div style=\"cursor:pointer;padding-top:0px;color:#000000;font-weight:600;padding-left:0px;padding-bottom:0px;font-size:13px;line-height:14px;font-style:normal;background-color:#ffffff;width:100%;font-family:Open Sans,Segoe UI,Verdana,Tahoma,Arial,sans-serif,Arial Unicode MS,Helvetica,Lucida Grande,Geneva,Sans-Serif;padding-right:0px;height:100%\" class=\"guilabel r-table-cell cursor_pointer\" id=\"CKG4965660\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnClick(event, &#39;CKG4965660&#39;, &#39;CKG4965660&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\">Description</div></div><div style=\"width:54px;position:absolute;top:16px;left:368px;height:35px\" id=\"XKK4965677_layoutdiv\"><div style=\"cursor:pointer;padding-top:0px;bottom:0;font-weight:600;padding-left:0px;padding-bottom:0px;font-size:13px;min-height:50px;line-height:14px;right:0;font-style:normal;background-color:#ffffff;top:0;left:0;font-family:Open Sans,Segoe UI,Verdana,Tahoma,Arial,sans-serif,Arial Unicode MS,Helvetica,Lucida Grande,Geneva,Sans-Serif;padding-right:0px;min-width:76px\" class=\"guipanel r-table-cell cursor_pointer\" id=\"XKK4965677\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnClick(event, &#39;XKK4965677&#39;, &#39;XKK4965677&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:30px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:30px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:10px;top:50%;left:0;width:0px;margin-top:0px;margin-bottom:0px;margin-right:20px;height:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"cursor:pointer;padding-top:0px;color:#000000;bottom:0;font-weight:600;padding-left:0px;padding-bottom:0px;font-size:13px;line-height:14px;right:0;font-style:normal;background-color:transparent;top:0;left:0;font-family:Open Sans,Segoe UI,Verdana,Tahoma,Arial,sans-serif,Arial Unicode MS,Helvetica,Lucida Grande,Geneva,Sans-Serif;padding-right:0px;min-width:0px\" class=\"guipanel r-table-cell cursor_pointer\" id=\"KBI4965660\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnClick(event, &#39;KBI4965660&#39;, &#39;KBI4965660&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"><div style=\"padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:none;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"CFQ4965632\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-top:0px;right:0;top:50%;left:0px;bottom:0;height:0px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;right:0px;text-align:left;height:0px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:16px;top:50%;left:0;margin-top:0px;right:0;margin-bottom:16px;margin-right:16px;height:0px\" class=\"guilayoutgridbag_container_padded\"><button style=\"cursor:pointer;padding-top:0px;z-index:1;margin:auto;color:#ffffff;padding-left:0px;display:none;padding-bottom:0px;min-height:40px;filter:progid:DXImageTransform.Microsoft.Shadow(color=&#39;rgba(0,0,0,0.24)&#39;, Direction=135, Strength=0);border-radius:2px;background-color:#46b82e;box-shadow:0 2px 2px rgba(0,0,0,0.24);width:100%;border-width:0px;-webkit-box-shadow:0 2px 2px rgba(0,0,0,0.24);text-align:center;padding-right:0px;height:100%;min-width:100px\" type=\"button\" name=\"POQ4965632\" class=\"guibutton_enabled brightenOnHoverForGrayComponents brightenAndRemoveShadowOnClick highlightOnHover cursor_pointer\" id=\"POQ4965632\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxButtonOnClick(event, &#39;POQ4965632&#39;, &#39;POQ4965632&#39;, &#39;&#39;, true, true);dwFrameworkPreventDefaultBehaviour(event);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"width:16px;height:16px;margin-right:4px\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.apps.etk.base.misc.b.a_multiselection_order_button_active.png\" alt=\"\" class=\"guibutton_icon\"><span style=\"cursor:pointer;font-weight:inherit;vertical-align:middle;font-size:inherit;font-family:inherit;line-height:inherit;font-style:inherit\" id=\"POQ4965632_text\" class=\"cursor_pointer\">Add to the shopping cart</span></button></div></div></div></div></div></div></div></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div><div style=\"width:0px;position:absolute;top:0px;left:0px;height:0px\" id=\"UXU4965633_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"UXU4965633\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:92px;top:0;left:0;height:48px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:46px;text-align:left;height:48px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-24px;right:0;height:48px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><button style=\"cursor:pointer;padding-top:0px;max-height:48px;color:#000000;padding-left:0px;padding-bottom:0px;border-color:transparent;min-height:48px;background-color:#ffffff;max-width:46px;width:100%;border-width:0px;border-style:solid;text-align:center;padding-right:0px;height:100%;min-width:46px\" type=\"button\" name=\"BWB4965633\" class=\"guibutton_enabled brightenOnHoverForGrayComponents brightenAndRemoveShadowOnClick brightenAndRemoveShadowAtInnerImageOnClick cursor_pointer\" id=\"BWB4965633\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;FMO4965633\\&quot;&gt;Show parts list on right side&lt;\\/div&gt;&#39;, 250, 196, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxButtonOnClick(event, &#39;BWB4965633&#39;, &#39;BWB4965633&#39;, &#39;&#39;, true, true);dwFrameworkPreventDefaultBehaviour(event);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"width:16px;height:16px\" src=\"WEB-RES/resource/resource?id=bi_image_CA78569ACD102549315FA46276CA645B\" alt=\"\" class=\"guibutton_icon\"><span style=\"cursor:pointer;font-weight:inherit;vertical-align:middle;font-size:inherit;font-family:inherit;line-height:inherit;font-style:inherit\" id=\"BWB4965633_text\" class=\"cursor_pointer\"></span></button></div></div><div style=\"background-color:transparent;top:0px;left:46px;vertical-align:middle;width:46px;text-align:left;height:48px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-24px;right:0;height:48px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><button style=\"cursor:pointer;padding-top:0px;max-height:48px;color:#000000;padding-left:0px;padding-bottom:0px;border-color:transparent;min-height:48px;background-color:#ffffff;max-width:46px;width:100%;border-width:0px;border-style:solid;text-align:center;padding-right:0px;height:100%;min-width:46px\" type=\"button\" name=\"ERU4965633\" class=\"guibutton_enabled brightenOnHoverForGrayComponents brightenAndRemoveShadowOnClick brightenAndRemoveShadowAtInnerImageOnClick cursor_pointer\" id=\"ERU4965633\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;VNH4965633\\&quot;&gt;Minimize parts list&lt;\\/div&gt;&#39;, 250, 133, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxButtonOnClick(event, &#39;ERU4965633&#39;, &#39;ERU4965633&#39;, &#39;&#39;, true, true);dwFrameworkPreventDefaultBehaviour(event);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"width:16px;height:16px\" src=\"WEB-RES/resource/resource?id=bi_image_D1833E443390ED9B6FCE6BCEB0B89495\" alt=\"\" class=\"guibutton_icon\"><span style=\"cursor:pointer;font-weight:inherit;vertical-align:middle;font-size:inherit;font-family:inherit;line-height:inherit;font-style:inherit\" id=\"ERU4965633_text\" class=\"cursor_pointer\"></span></button></div></div></div></div></div></div></div></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div></div><div style=\"background-color:transparent;left:0px;bottom:0px;vertical-align:middle;right:0px;text-align:left;height:1px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:49.999%;left:0;margin-top:0px;right:0;height:1px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"padding-top:0px;max-height:1px;margin:auto;padding-left:0px;width:100%;padding-bottom:0px;border-width:1px;min-height:1px;padding-right:0px;height:100%;min-width:10px\" class=\"guilabel\" id=\"NTU4965633\"></div></div></div><div style=\"background-color:transparent;left:0px;bottom:0px;vertical-align:bottom;right:0px;text-align:left;height:0px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;right:0;left:0;bottom:0;height:0px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"JTQ4965633\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-left:0px;top:50%;left:50%;bottom:0;width:0px;margin-top:0px;right:0;height:0px\" class=\"guilayoutgridbag_centered\"></div></div></div></div></div></div></div></div></div></div></div></div></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div></div></div><div style=\"top:48px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div><div style=\"cursor:col-resize;margin-left:0px;background-color:#efefef;top:0;left:142px;bottom:0;width:16px\" class=\"guisplitpane_border_horizontal\" id=\"ERK4965633_divider\" onmouseup=\"try {dwFwPreEv(event,true,this);dwSplitTilt(event, &#39;ERK4965633&#39;, false, true,32);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmousedown=\"try {dwFwPreEv(event,false,this);dwSplitDragStartEvent(event, &#39;ERK4965633&#39;, &#39;ERK4965633&#39;, &#39;column&#39;, &#39;ERK4965633_firstchildcell&#39;, &#39;ERK4965633_secondchildcell&#39;);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div style=\"cursor:inherit;width:16px;margin-top:-20px;;top:50%;height:32px\" class=\"guisplitpane_divider_content_container\" id=\"ERK4965633_divider_circles_container\"><div style=\"border-radius:2px;cursor:inherit;box-shadow:0px 1px 2px rgba(0,0,0,0.24);top:4px;left:5px;width:4px;height:4px\" class=\"guisplitpane_circle\" id=\"ERK4965633_divider_circle1\"></div><div style=\"border-radius:2px;cursor:inherit;box-shadow:0px 1px 2px rgba(0,0,0,0.24);top:12px;left:5px;width:4px;height:4px\" class=\"guisplitpane_circle\" id=\"ERK4965633_divider_circle2\"></div><div style=\"border-radius:2px;cursor:inherit;box-shadow:0px 1px 2px rgba(0,0,0,0.24);top:20px;left:5px;width:4px;height:4px\" class=\"guisplitpane_circle\" id=\"ERK4965633_divider_circle3\"></div><div style=\"border-radius:2px;cursor:inherit;box-shadow:0px 1px 2px rgba(0,0,0,0.24);top:28px;left:5px;width:4px;height:4px\" class=\"guisplitpane_circle\" id=\"ERK4965633_divider_circle4\"></div></div></div><div style=\"left:158px\" id=\"ERK4965633_secondchildcell\" class=\"guisplitpane_container_right\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px;min-width:200px\" class=\"guipanel\" id=\"YAQ4965633\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"RMD4965633\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-top:0;right:0;top:0px;left:0px;bottom:0;height:100%\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;right:0px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:1px;top:0;left:0;bottom:0;margin-top:1px;right:0;margin-bottom:1px;margin-right:1px\" class=\"guilayoutgridbag_container_padded\"><div style=\"padding-top:0px;z-index:1;bottom:0;padding-left:0px;padding-bottom:0px;right:0;filter:progid:DXImageTransform.Microsoft.Shadow(color=&#39;rgba(0,0,0,0.3)&#39;, Direction=135, Strength=0);border-radius:2px;background-color:#ffffff;box-shadow:0 1px 2px rgba(0,0,0,0.30);top:0;left:0;-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.30);padding-right:0px\" class=\"guipanel\" id=\"WQI4965633\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"right:0;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:top;right:0px;text-align:left;height:0px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;right:0;top:0;left:0;height:0px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"VJM4965633\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div></div><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;right:0px;text-align:left;height:1px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:49.999%;left:0;margin-top:0px;right:0;height:1px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"padding-top:0px;max-height:1px;margin:auto;padding-left:0px;width:100%;padding-bottom:0px;border-width:1px;min-height:1px;padding-right:0px;height:100%;min-width:10px\" class=\"guilabel\" id=\"JFJ4965633\"></div></div></div><div style=\"background-color:transparent;top:1px;left:0px;bottom:1px;vertical-align:middle;right:0px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:0;left:0;bottom:0;margin-top:0px;right:0;margin-bottom:0px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;padding-top:0px;margin:auto;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"JOO4965633\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"GJS4965620\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"VNC4965633\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder\"><div style=\"height:56px\" class=\"guilayoutborder_north\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;border-color:transparent;right:0;border-style:solid;padding-right:0px\" class=\"guipanel\" id=\"SBL4965633\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:1px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:1px\" class=\"guilayoutborder_center\"><div style=\"background-color:transparent;padding-top:16px;top:0;left:0;bottom:0;padding-left:16px;padding-bottom:16px;right:0;padding-right:16px\" class=\"guipanel\" id=\"KJS4965633\"><div style=\"right:16px;top:16px;left:16px;bottom:16px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"padding-top:0px;white-space:pre;font-weight:600;padding-left:0px;padding-bottom:0px;font-size:16px;line-height:17px;font-style:normal;text-overflow:ellipsis;overflow:hidden;width:100%;font-family:Open Sans,Segoe UI,Verdana,Tahoma,Arial,sans-serif,Arial Unicode MS,Helvetica,Lucida Grande,Geneva,Sans-Serif;padding-right:0px;height:100%\" class=\"guilabel\" id=\"BHQ4965633\">Document links</div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div><div style=\"top:0px;width:0px;bottom:1px\" class=\"guilayoutborder_east\"></div><div style=\"height:1px\" class=\"guilayoutborder_south\"><div style=\"background-color:#f4f4f4;padding-top:0px;max-height:1px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;min-height:1px;right:0;padding-right:0px\" class=\"guipanel\" id=\"FUB4965633\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div></div></div></div><div style=\"top:56px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:56px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"padding-top:8px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"GRG4965633\"><div style=\"right:0px;top:8px;left:0px;bottom:0px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"LWI4965654\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:70px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:70px\" class=\"guilayoutborder_center\"><input name=\"GYM4965654_scrollTop\" value=\"0\" type=\"hidden\" id=\"GYM4965654_scrollTop\"><input name=\"GYM4965654_scrollLeft\" value=\"0\" type=\"hidden\" id=\"GYM4965654_scrollLeft\"><div id=\"GYM4965654_rootGuiScrollPane\" class=\"guiscrollpane_root\"><div style=\"padding-top:0px;top:0;left:0;bottom:0;padding-left:16px;padding-bottom:0px;min-height:10px;right:0;padding-right:16px;min-width:10px\" class=\"guiscrollpane modern_scrollpane_design_thin modern_scrollpane_design_thin\" scrollbarWidth=\"6\" id=\"GYM4965654\" horizontalScrollEnabled=\"true\" verticalScrollEnabled=\"true\" onscroll=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxScrollpaneScrolled(event, &#39;GYM4965654&#39;, &#39;GYM4965654&#39;, &#39;&#39;, true, true);dwFrameworkPreventDefaultBehaviour(event);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onresize=\"try {dwFwPreEv(event,false,this);dwHelperScrollPaneValueChanged(&#39;GYM4965654&#39;);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div style=\"border:0;padding-top:0px;padding-left:0px;padding-bottom:0px;min-height:100%;padding-right:0px;min-width:100%\" class=\"guitree\" id=\"FFS4965654\" ondblclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnDblClick(event, &#39;FFS4965654&#39;, &#39;FFS4965654&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><table style=\"padding:0;border-collapse:collapse;border-spacing:0\"></table></div></div></div></div><div style=\"top:0px;width:0px;bottom:70px\" class=\"guilayoutborder_east\"></div><div style=\"height:70px\" class=\"guilayoutborder_south\"><div style=\"padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;min-height:10px;right:0;padding-right:0px;min-width:10px\" class=\"guipanel\" id=\"ATX4965654\" composite><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:124px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"></div><div style=\"top:0px;width:124px;bottom:0px\" class=\"guilayoutborder_east\"><div style=\"padding-top:4px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:8px;border-width:0px;right:0;padding-right:6px\" class=\"guipanel\" id=\"RWU4965654\"><div style=\"right:6px;top:4px;left:0px;bottom:8px\" class=\"guilayoutgridbag\"><div style=\"margin-left:-59px;top:50%;left:50%;bottom:0;width:118px;margin-top:-29px;right:0;height:58px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:118px;text-align:left;height:58px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:2px;top:50%;left:0;margin-top:-13px;right:0;margin-bottom:2px;margin-right:16px;height:40px\" class=\"guilayoutgridbag_container_padded\"><button style=\"cursor:default;padding-top:0px;margin:auto;padding-left:0px;padding-bottom:0px;min-height:40px;border-radius:2px;background-color:#f5f5f5;width:100%;border-width:0px;text-align:center;padding-right:0px;height:100%;min-width:100px\" type=\"button\" name=\"UCY4965654\" class=\"guibutton_disabled cursor_default\" disabled=\"disabled\" id=\"UCY4965654\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxButtonOnClick(event, &#39;UCY4965654&#39;, &#39;UCY4965654&#39;, &#39;&#39;, true, true);dwFrameworkPreventDefaultBehaviour(event);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><span style=\"cursor:default;font-weight:inherit;vertical-align:middle;font-size:inherit;font-family:inherit;line-height:inherit;font-style:inherit\" id=\"UCY4965654_text\" class=\"cursor_default\">Go to</span></button></div></div></div></div></div></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div></div></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div><div style=\"top:56px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div></div><div style=\"background-color:transparent;left:0px;bottom:0px;vertical-align:middle;right:0px;text-align:left;height:1px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:49.999%;left:0;margin-top:0px;right:0;height:1px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"padding-top:0px;max-height:1px;margin:auto;padding-left:0px;width:100%;padding-bottom:0px;border-width:1px;min-height:1px;padding-right:0px;height:100%;min-width:10px\" class=\"guilabel\" id=\"UCE4965633\"></div></div></div><div style=\"background-color:transparent;left:0px;bottom:0px;vertical-align:bottom;right:0px;text-align:left;height:0px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;right:0;left:0;bottom:0;height:0px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"ICN4965633\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-left:0px;top:50%;left:50%;bottom:0;width:0px;margin-top:0px;right:0;height:0px\" class=\"guilayoutgridbag_centered\"></div></div></div></div></div></div></div></div></div></div></div></div></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div><div style=\"top:0px;width:0px;bottom:24px\" class=\"guilayoutborder_east\"></div><div style=\"height:24px\" class=\"guilayoutborder_south\"><div style=\"background-color:#efefef;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;min-height:24px;right:0;padding-right:24px\" class=\"guipanel\" id=\"SPP4965611\"><div style=\"right:24px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"background-color:#efefef;padding-top:0px;top:0;left:0;bottom:0;padding-left:4px;padding-bottom:0px;border-width:0px;min-height:24px;right:0;padding-right:4px\" class=\"guipanel\" id=\"WLV4965875\"><div style=\"right:4px;top:0px;left:4px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-top:0px;right:0;top:50%;left:0px;bottom:0;height:0px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;right:0px;text-align:left;height:0px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:0px;right:0;height:0px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"YIP4965875\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:0px;top:0;left:0;height:0px\" class=\"guilayoutgridbag_centered\"></div></div></div></div></div></div></div></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div></div><img src=\"WEB-RES/resource/resource?id=bi_image_framework_transparent_56ABE4CBC175363DA0810882244B34FF\" alt=\"\" id=\"invisibleTargetForBackgroundActivity\" width=\"0px\" height=\"0px\"></div><input type=\"hidden\" name=\"id__submit_eventHandlerComponentId\" id=\"TWM4965563_id__submit_eventHandlerComponentId\" value=\"\"><input type=\"hidden\" name=\"id__submit_action\" id=\"TWM4965563_id__submit_action\" value=\"\"><input type=\"hidden\" name=\"id__submit_receiverId\" id=\"TWM4965563_id__submit_receiverId\" value=\"\"><input type=\"hidden\" name=\"__ID_activatingControl\" id=\"TWM4965563___ID_activatingControl\" value=\"\"><input type=\"hidden\" name=\"__ID_actualActivatingControl\" id=\"TWM4965563___ID_actualActivatingControl\" value=\"\"><input type=\"hidden\" name=\"strgKeyPressed\" id=\"TWM4965563_strgKeyPressed\" value=\"false\"><input type=\"hidden\" name=\"__POINT_controlPosition\" id=\"TWM4965563___POINT_controlPosition\" value=\"-1:-1\"><input type=\"hidden\" name=\"hotkey\" id=\"TWM4965563_hotkey\" value=\"\"><input type=\"hidden\" name=\"hotkeyType\" id=\"TWM4965563_hotkeyType\" value=\"\"><input type=\"hidden\" name=\"focusComponent\" id=\"TWM4965563_focusComponent\" value=\"\"></form></div><div id=\"lostConnectionBanner\" class=\"banner_window\"><div class=\"guiwindow_child_overlay\"></div><div style=\"font-size:14px;padding:0 8px;line-height:45px;font-weight:600;text-align:center;height:45px\" class=\"banner\"><span class=\"load-animation\"><div style=\"animation-duration:1.4s;animation-timing-function:ease-in-out;background-color:#cca023;animation-delay:-0.32s;animation-fill-mode:both;-webkit-animation-delay:-0.32s;animation-iteration-count:infinite;animation-direction:normal;animation-name:load-animation\"></div><div style=\"animation-duration:1.4s;animation-timing-function:ease-in-out;background-color:#cca023;animation-delay:-0.16s;animation-fill-mode:both;-webkit-animation-delay:-0.16s;animation-iteration-count:infinite;animation-direction:normal;animation-name:load-animation\"></div><div style=\"animation-duration:1.4s;animation-timing-function:ease-in-out;background-color:#cca023;animation-fill-mode:both;animation-iteration-count:infinite;animation-direction:normal;animation-name:load-animation\"></div></span>Loading...<span style=\"font-weight:600\" id=\"lostConnectionBannerTimer\"></span></div></div></body></html>"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": -1,
          "_transferSize": 25837,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:11.541Z",
        "time": 99.43800000473857,
        "timings": {
          "blocked": 1.5689999368116259,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0.30500000000000005,
          "wait": 82.13600005458295,
          "receive": 15.42800001334399,
          "_blocked_queueing": 0.801999936811626,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_connectionId": "1726423",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "parser",
          "url": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513",
          "lineNumber": 1
        },
        "_priority": "VeryHigh",
        "_resourceType": "stylesheet",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/ekat/WEB-RES/css/style_Festool.css_javaviewer_7.26.1.11.css",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": ":authority",
              "value": "ekat.festool.de"
            },
            {
              "name": ":method",
              "value": "GET"
            },
            {
              "name": ":path",
              "value": "/ekat/WEB-RES/css/style_Festool.css_javaviewer_7.26.1.11.css"
            },
            {
              "name": ":scheme",
              "value": "https"
            },
            {
              "name": "accept",
              "value": "text/css,*/*;q=0.1"
            },
            {
              "name": "accept-encoding",
              "value": "gzip, deflate, br, zstd"
            },
            {
              "name": "accept-language",
              "value": "en-GB,en-US;q=0.9,en;q=0.8"
            },
            {
              "name": "if-modified-since",
              "value": "Wed, 31 Dec 1969 23:59:59 GMT"
            },
            {
              "name": "if-none-match",
              "value": "W/\"107848-1787216789729\""
            },
            {
              "name": "priority",
              "value": "u=0"
            },
            {
              "name": "referer",
              "value": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            },
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "sec-fetch-dest",
              "value": "style"
            },
            {
              "name": "sec-fetch-mode",
              "value": "no-cors"
            },
            {
              "name": "sec-fetch-site",
              "value": "same-origin"
            },
            {
              "name": "user-agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            }
          ],
          "queryString": [],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "cache-control",
              "value": "public"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "content-length",
              "value": "14631"
            },
            {
              "name": "content-type",
              "value": "text/css"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 09:09:51 GMT"
            },
            {
              "name": "etag",
              "value": "W/\"107848-1787216991713\""
            },
            {
              "name": "expires",
              "value": "Thu, 20 Aug 2026 09:11:51 GMT"
            },
            {
              "name": "last-modified",
              "value": "Wed, 31 Dec 1969 23:59:59 GMT"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "pragma",
              "value": "cache"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "x-robots-tag",
              "value": "noindex"
            }
          ],
          "cookies": [],
          "content": {
            "size": 107848,
            "mimeType": "text/css",
            "text": "html,body{height:100%;width:100%;background-color:#ffffff;color:#000000;}html,table,tbody,tr,td,th,a,div,span,p,input,button,form,textarea,select,img,fieldset,legend{font-size:14px;font-style:normal;font-weight:normal;line-height:15px;cursor:default;}table,tbody,tr,td,th,a,div,span,p,input,button,form,textarea,select,img,fieldset,legend{box-sizing:border-box;-webkit-box-sizing:border-box;-webkit-tap-highlight-color:rgba(0, 0, 0, 0);user-select:none;-webkit-user-select:none;touch-action:pan-y;}body,table,tbody,tr,td,th,a,div,span,p,input,button,form,textarea,select,img,fieldset,legend{font-family:Open Sans,Segoe UI,Verdana,Tahoma,Arial,sans-serif,Arial Unicode MS,Helvetica,Lucida Grande,Geneva,Sans-Serif;margin:0;padding:0;border:0px solid transparent;}textarea{resize:none;}a{text-decoration:none;color:#000000;}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;margin:0;}*:focus{outline:none;}iframe{display:block;}.cursor_default * {cursor:default;}.cursor_crosshair * {cursor:crosshair;}.cursor_text * {cursor:text;}.cursor_wait * {cursor:wait;}.cursor_sw-resize * {cursor:sw-resize;}.cursor_se-resize * {cursor:se-resize;}.cursor_nw-resize * {cursor:nw-resize;}.cursor_ne-resize * {cursor:ne-resize;}.cursor_n-resize * {cursor:n-resize;}.cursor_s-resize * {cursor:s-resize;}.cursor_w-resize * {cursor:w-resize;}.cursor_e-resize * {cursor:e-resize;}.cursor_pointer * {cursor:pointer;}.cursor_move * {cursor:move;}\n@font-face {\n  font-family:'Open Sans';\n  src:\n    url('../../WEB-RES/custom/designs/Festool/fonts/OpenSans-Regular.eot');\n  src:\n    url('../../WEB-RES/custom/designs/Festool/fonts/OpenSans-Regular.eot?#iefix') format('embedded-opentype'),\n    url('../../WEB-RES/custom/designs/Festool/fonts/OpenSans-Regular.ttf') format('truetype');\n  font-style:normal;\n  font-weight:normal;\n}\n@font-face {\n  font-family:'Open Sans';\n  src:\n    url('../../WEB-RES/custom/designs/Festool/fonts/OpenSans-Bold.eot');\n  src:\n    url('../../WEB-RES/custom/designs/Festool/fonts/OpenSans-Bold.eot?#iefix') format('embedded-opentype'),\n    url('../../WEB-RES/custom/designs/Festool/fonts/OpenSans-Bold.ttf') format('truetype');\n  font-style:normal;\n  font-weight:bold;\n}\n@font-face {\n  font-family:'Open Sans';\n  src:\n    url('../../WEB-RES/custom/designs/Festool/fonts/OpenSans-Italic.eot');\n  src:\n    url('../../WEB-RES/custom/designs/Festool/fonts/OpenSans-Italic.eot?#iefix') format('embedded-opentype'),\n    url('../../WEB-RES/custom/designs/Festool/fonts/OpenSans-Italic.ttf') format('truetype');\n  font-style:italic;\n  font-weight:normal;\n}\n@font-face {\n  font-family:'Open Sans';\n  src:\n    url('../../WEB-RES/custom/designs/Festool/fonts/OpenSans-BoldItalic.eot');\n  src:\n    url('../../WEB-RES/custom/designs/Festool/fonts/OpenSans-BoldItalic.eot?#iefix') format('embedded-opentype'),\n    url('../../WEB-RES/custom/designs/Festool/fonts/OpenSans-BoldItalic.ttf') format('truetype');\n  font-style:italic;\n  font-weight:bold;\n}\n@font-face {\n  font-family:'Open Sans';\n  src:\n    url('../../WEB-RES/custom/designs/Festool/fonts/OpenSans-Semibold.eot');\n  src:\n    url('../../WEB-RES/custom/designs/Festool/fonts/OpenSans-Semibold.eot?#iefix') format('embedded-opentype'),\n    url('../../WEB-RES/custom/designs/Festool/fonts/OpenSans-SemiBold.ttf') format('truetype');\n  font-style:normal;\n  font-weight:600;\n}\n@font-face {\n  font-family:'Open Sans';\n  src:\n    url('../../WEB-RES/custom/designs/Festool/fonts/OpenSans-SemiboldItalic.eot');\n  src:\n    url('../../WEB-RES/custom/designs/Festool/fonts/OpenSans-SemiboldItalic.eot?#iefix') format('embedded-opentype'),\n    url('../../WEB-RES/custom/designs/Festool/fonts/OpenSans-SemiboldItalic.ttf') format('truetype');\n  font-style:italic;\n  font-weight:600;\n}\n\n\n\n@keyframes anim_opacity100 {  0% {  opacity: 0;  }  100% {  opacity: 1;  } }\n\n@keyframes anim_opacity40 {  0% {  opacity: 0;  }  100% {  opacity: 0.4;  } }\n\n@keyframes anim_opacity30 {  0% {  opacity: 0;  }  100% {  opacity: 0.3;  } }\n\n@keyframes anim_opacity20 {  0% {  opacity: 0;  }  100% {  opacity: 0.2;  } }\n.highlightOnHover:hover{filter:brightness(1.1);}.highlightOnHover > img:hover{filter:contrast(50%);}.brightenAndRemoveShadowOnClick:active{filter:brightness(0.9) !important;box-shadow:none !important;}.brightenAndRemoveShadowAtInnerImageOnClick > img:active{filter:brightness(0.9) !important;box-shadow:none !important;}.brightenOnHoverForGrayComponents:hover{filter:brightness(1.05);}.brightenOnHoverForGrayComponents > img:hover{filter:contrast(50%);}.decreaseContrastForIconsOnHover:hover{filter:contrast(50%);}.removeShadowForIconsOnClick:active{filter:drop-shadow(0px 0px 1px rgba(0,0,0,.5));}.decreaseContrastForPartlistIconsOnHover:hover{filter:contrast(0.40);}.incraseContrastForPartlistIconsOnClick:active{filter:contrast(0.9);}.guibutton_enabled{white-space:pre;text-align:center;vertical-align:middle;background-repeat:repeat-x;border:1px solid #e1e1e1;background-color:#e1e1e1;color:#000000;}.guibutton_enabled:hover{border:2px solid #a5acb2;}.guibutton_enabled:focus{border:3px double #a5acb2;}.guibutton_disabled{white-space:pre;text-align:center;vertical-align:middle;background-repeat:repeat-x;border:1px solid #cccccc;background-color:#cccccc;color:#838383;}.guibutton_horizontalalignment_disabled{padding:3.5px !important;}.guibutton_horizontalalignment{padding:3.5px !important;}.guibutton_horizontalalignment:hover{padding:2.5px !important;}.guibutton_horizontalalignment:focus{padding:1.5px !important;}.guibutton_linkenabled{cursor:pointer;border:0;white-space:pre;text-align:left;vertical-align:middle;color:#000000;background-color:transparent;}.guibutton_linkenabled:hover{cursor:pointer;text-decoration:underline;color:#000000;}.guibutton_linkdisabled{cursor:default;border:0;white-space:pre;text-align:left;vertical-align:middle;color:#838383;background-color:transparent;}.guibutton_icon{border:0;vertical-align:middle;}.rbutton_border_right{background-color:#00519e;width:2px;height:100%;position:absolute;top:0;right:0;border-radius:2px;}.rbutton_border_left{background-color:#00519e;width:2px;height:100%;position:absolute;top:0;left:0;border-radius:2px;}.rbutton_border_bottom{background-color:#00519e;width:100%;height:2px;position:absolute;left:0;bottom:0;border-radius:2px;}.rbutton_border_top{background-color:#00519e;width:100%;height:2px;position:absolute;top:0;left:0;border-radius:2px;}.guicanvas{position:absolute;top:0;left:0;}.guicanvas_text, .guicanvas_text_rotated{position:absolute;white-space:nowrap;}.guicanvas_text_rotated{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);transform:rotate(90deg);transform-origin:left bottom;-webkit-transform-origin:left bottom;}.guicheckbox{}.guicheckbox_textspan{font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;line-height:inherit;}.guicheckbox_input{vertical-align:middle;}.guicombobox{border:1px solid #a5acb2;background-color:#ffffff;}.guicustomcombobox{border:1px solid #a5acb2;background-color:#ffffff;color:#000000;text-align:left;position:relative;}.guicustomcomboboxinputcontainer{position:absolute;top:0;left:0;bottom:0;font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;line-height:inherit;}.guicustomcomboboxinput{width:100%;cursor:default;padding-top:2px;padding-right:2px;padding-left:2px;padding-bottom:2px;background-color:transparent;color:inherit;height:100%;user-select:text;-webkit-user-select:text;autocapitalize:off;autocorrect:off;font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;line-height:inherit;}.guicustomcomboboximagecontainer{position:absolute;top:0;right:0;bottom:0;text-align:center;background-repeat:repeat-x;}.guicustomcomboboxicon{width:100%;height:100%;background-repeat:no-repeat;background-position:50% 50%;}.guicustomcomboboxpopup{border:1px solid #a5acb2;position:absolute;white-space:pre;cursor:default;overflow-x:hidden;overflow-y:auto;filter:progid:DXImageTransform.Microsoft.Shadow(color='#777777', Direction=135, Strength=4);box-shadow:2px 2px 2px #777777;-webkit-box-shadow:2px 2px 2px #777777;}.guicustomcomboboxentryselected{background-color:#00519e;color:#ffffff;font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;line-height:inherit;}.guicustomlistfocus{position:absolute;width:1px;height:0px;top:-2px;}.guicustomlistentry{padding-top:2px;padding-bottom:2px;padding-left:2px;padding-right:2px;}.guicomboboxdisabled{background-color:#ffffff;color:#787878;border-color:#888888;}.guiimage{overflow:hidden;}.gui-image-stack-wrapper{margin:2px;width:fit-content;height:fit-content;}.gui-image-stack{margin:20px auto;position:relative;}.gui-image-stack div{position:absolute;padding:4px;display:flex;}.gui-image-stack div:last-child{position:relative;}.gui-image-stack div{border-width:1px;border-color:silver;border-style:solid;background-color:white;border-radius:2px;}.gui-image-stack .not-active img{visibility:hidden;}.gui-image-stack-spread.active div:nth-child(3){transform:translate(-2px,2px);}.gui-image-stack-spread.active div:first-child{transform:translate(2px,-2px);}.guilabel{vertical-align:middle;white-space:pre;}.guitooltip{position:absolute;display:none;padding:3px;border:1px solid #767676;z-index:99999;white-space:nowrap;background-color:#ffffff;color:#575757;filter:progid:DXImageTransform.Microsoft.Shadow(color='#777777', Direction=135, Strength=4);box-shadow:2px 2px 2px #777777;-webkit-box-shadow:2px 2px 2px #777777;}.guilist{border:1px solid #a5acb2;background-color:#ffffff;color:#000000;overflow:auto;}.guilist option:checked{background:#00519e linear-gradient(0deg, #00519e 0%, #00519e 100%);color:#ffffff !important;}.guicustomlist{border:1px solid #a5acb2;background-color:#ffffff;color:#000000;overflow:hidden;}.guipanel{position:absolute;background-color:#ffffff;background-repeat:repeat;}.guipanel_fieldset{overflow:hidden;position:absolute;top:2px;left:2px;bottom:2px;right:2px;border:1px solid #bfb8bf;}.guipanel_fieldsetinnerdiv{position:absolute;}.guipanel_legend{white-space:pre;overflow:hidden;color:#000000;}@media print{.guipanel{overflow:visible !important;}}.guiprogressbar{position:absolute;text-align:center;border:1px solid #bebebe;background-color:#ffffff;}.guiprogressbar_bar{overflow:hidden;position:absolute;top:0;left:0;height:100%;background-color:#00519e;background-repeat:repeat-x;background-image:url(\"../../WEB-RES/resource/resource?id=bi_image_gradient_10x100_-16756322_-16756322_-16756322_-16756322_4_14_EA2A1038FD6C704828720ADD8558FC40\");}.guiprogressbar_textonbar{height:100%;color:#ffffff;background-color:transparent;}.guiprogressbar_textonrest{height:100%;width:100%;color:#000000;background-color:transparent;}.guiradiobutton{}.guiradiobutton_input{vertical-align:middle;}.guiscrollpane{background-color:#ffffff;position:absolute;overflow:auto;-webkit-overflow-scrolling:touch;touch-action:pan-x pan-y;text-align:left;vertical-align:middle;}.guiscrollpane_root{position:relative;width:100%;height:100%;}.modern_scrollpane_design_thin{scrollbar-width:thin;scrollbar-color:#ccc transparent;}.modern_scrollpane_design_thin::-webkit-scrollbar-track{background-color:transparent;width:4px;}.modern_scrollpane_design_thin::-webkit-scrollbar-thumb{background-color:#ccc;border:1px solid transparent;background-clip:content-box;border-radius:3px;}.modern_scrollpane_design_thin::-webkit-scrollbar{width:6px;height:6px;background-color:transparent;}.guiseparator_h{background-color:#c9ccd8;border-bottom:1px solid #c9ccd8;height:2px;}.guiseparator_v{background-color:#c9ccd8;border-right:1px solid #c9ccd8;width:2px;}.guiseparator_h_dashed{background-color:transparent;border-bottom:2px dashed #c9ccd8;height:2px;}.guiseparator_v_dashed{background-color:transparent;border-right:2px dashed #c9ccd8;width:2px;}.guisplitpane{position:absolute;top:0;left:0;right:0;bottom:0;}.guisplitpane_border_horizontal{border-top:0;border-left:1px solid #eef1f8;border-bottom:0;border-right:1px solid #eef1f8;background-color:#eef1f8;position:absolute;}.guisplitpane_border_vertical{border-top:1px solid #eef1f8;border-left:0;border-bottom:1px solid #eef1f8;border-right:0;background-color:#eef1f8;position:absolute;}.guisplitpane_divider_content_container{position:absolute;}.guisplitpane_circle{position:absolute;background-color:#a5acb2;}.guisplitpane_container_left{position:absolute;overflow:hidden;top:0;left:0;bottom:0;}.guisplitpane_container_right{position:absolute;overflow:hidden;top:0;right:0;bottom:0;}.guisplitpane_container_top{position:absolute;overflow:hidden;top:0;left:0;right:0;}.guisplitpane_container_bottom{position:absolute;overflow:hidden;left:0;right:0;bottom:0;}.guitabbedpane{}.guitabbedpane_tabactive{background-repeat:repeat-x;background-image:url(\"../../WEB-RES/resource/resource?id=bi_image_gradient_1x100_-1_none_none_-1_20_6C67CDC1D8B845FA5BC89C4729E98B91\");border-left:1px solid #d9d9d9;border-top:2px solid #d9d9d9;border-right:1px solid #d9d9d9;padding-bottom:1px;color:#000000;height:20px;background-color:#ffffff;}.guitabbedpane_tabinactive{background-repeat:repeat-x;background-image:url(\"../../WEB-RES/resource/resource?id=bi_image_gradient_1x100_-986896_none_none_-986896_20_77FC057D52C9B9FAA4B97BBF84D070AC\");border-left:1px solid #d9d9d9;border-top:1px solid #d9d9d9;border-right:1px solid #d9d9d9;color:#000000;height:20px;background-color:#f0f0f0;border-bottom:1px solid #d9d9d9;}.guitabbedpane_tabspace{height:20px;border-bottom:1px solid #d9d9d9;}.guitabbedpane_tabinactive:hover{border-top:2px solid #d9d9d9;padding-bottom:1px;}.guitabbedpane_tabdisabled{background-repeat:repeat-x;background-image:url(\"../../WEB-RES/resource/resource?id=bi_image_gradient_1x100_-2367775_none_none_-2367775_20_96AD79C88ECFEF1BE1541B68BF852C0B\");border-left:1px solid #d9d9d9;border-top:1px solid #d9d9d9;border-right:1px solid #d9d9d9;color:#7d7d7d;height:20px;background-color:#dbdee1;border-bottom:1px solid #d9d9d9;}.guitabbedpane_tabactive a{color:#000000;}.guitabbedpane_tabactive a:hover{color:#000000;}.guitabbedpane_tabinactive a{color:#000000;}.guitabbedpane_tabinactive a:hover{color:#000000;}.guitabbedpane_tabdisabled a{color:#7d7d7d;}.guitabbedpane_tabdisabled a:hover{color:#7d7d7d;}.guitabbedpane_content_container{border-left:1px solid #d9d9d9;border-bottom:1px solid #d9d9d9;border-right:1px solid #d9d9d9;position:absolute;left:0;right:0;}.guitabbedpaneentry{}.guitextarea{border:1px solid #a5acb2;display:block;cursor:text;padding:2px 2px 2px 2px;background-color:#ffffff;color:#000000;overflow:hidden;user-select:text;-webkit-user-select:text;autocapitalize:off;autocorrect:off;}.guitextarea_disabled{border:1px solid #a5acb2;display:block;cursor:text;padding:2px 2px 2px 2px;background-color:#ffffff;color:#a5acb2;overflow:hidden;}.guitextarea::selection{background-color:#3399ff;color:#ffffff;}.guitextarea::-moz-selection{background-color:#3399ff;color:#ffffff;}.guitextarea::-webkit-selection{background-color:#3399ff;color:#ffffff;}.guitextarea::-moz-placeholder{color:rgba(174,174,153,0.6823529411764706);}.guitextarea::-webkit-input-placeholder{color:rgba(174,174,153,0.6823529411764706);}.guitextarea:-ms-input-placeholder{color:rgba(174,174,153,0.6823529411764706);}.guitextfield{border:1px solid #a5acb2;cursor:text;padding-top:2px;padding-bottom:2px;padding-right:2px;padding-left:2px;background-color:#ffffff;color:#000000;-webkit-appearance:none;border-radius:0;user-select:text;-webkit-user-select:text;autocapitalize:off;autocorrect:off;}.guitextfield_disabled{border:1px solid #a5acb2;cursor:text;padding-top:2px;padding-bottom:2px;padding-right:2px;padding-left:2px;background-color:#ffffff;-webkit-appearance:none;border-radius:0;color:#a5acb2;}.guitextfield::selection{background-color:#3399ff;color:#ffffff;}.guitextfield::-moz-selection{background-color:#3399ff;color:#ffffff;}.guitextfield::-webkit-selection{background-color:#3399ff;color:#ffffff;}.guitextfield::-moz-placeholder{color:rgba(174,174,153,0.6823529411764706);}.guitextfield::-webkit-input-placeholder{color:rgba(174,174,153,0.6823529411764706);}.guitextfield:-ms-input-placeholder{color:rgba(174,174,153,0.6823529411764706);}.guitogglebutton_up{white-space:pre;}.guitogglebutton_down{border:2px solid #1f57a7;white-space:pre;}.guiwindow{background-color:#ffffff;position:absolute;width:100%;height:100%;z-index:0;}.guiwindow_child_overlay{position:absolute;top:0;left:0;width:100%;height:100%;background-color:#000000;filter:alpha(opacity=40.0);opacity:0.4;}.guiwindow_child_container{position:absolute;border:2px solid #1883d7;top:50%;left:50%;filter:progid:DXImageTransform.Microsoft.Shadow(color='rgba(0,0,0,0.30)', Direction=135, Strength=20);box-shadow:0px 19px 38px 0px rgba(0,0,0,0.30);-webkit-box-shadow:0px 19px 38px 0px rgba(0,0,0,0.30);}.guiwindow_child_title{vertical-align:middle;position:absolute;top:0;left:0;right:46px;height:23px;font-weight:bold;padding:4px;font-size:14px;line-height:15px;white-space:pre;overflow:hidden;background-image:url(\"../../WEB-RES/resource/resource?id=bi_image_gradient_1x100_-1_none_none_-1_20_6C67CDC1D8B845FA5BC89C4729E98B91\");background-repeat:repeat-x;color:#000000;background-color:#ffffff;cursor:move;}.guiwindow_child_title_button{position:absolute;top:0;width:23px;height:23px;background-image:url(\"../../WEB-RES/resource/resource?id=bi_image_gradient_1x100_-1_none_none_-1_20_6C67CDC1D8B845FA5BC89C4729E98B91\");background-repeat:repeat-x;background-color:#ffffff;}.guiwindow_child_title_maximize_img{position:absolute;top:3px;right:3px;background-image:url(\"../../WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_imgDesignWebWindowMaximizeIcon.png\");background-repeat:no-repeat;}.guiwindow_child_title_maximize_img:hover{background-image:url(\"../../WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_imgDesignWebWindowMaximizeHoverIcon.png\");}.guiwindow_child_title_restore_img{position:absolute;top:3px;right:3px;background-image:url(\"../../WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_imgDesignWebWindowRestoreIcon.png\");background-repeat:no-repeat;}.guiwindow_child_title_restore_img:hover{background-image:url(\"../../WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_imgDesignWebWindowRestoreHoverIcon.png\");}.guiwindow_child_title_x_img{position:absolute;top:3px;right:3px;background-image:url(\"../../WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_web_window_close.png\");background-repeat:no-repeat;}.guiwindow_child_title_x_img:hover{background-image:url(\"../../WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_web_window_close_hover.png\");}.guiwindow_child_content{position:absolute;left:0;right:0;bottom:0;background-color:#ffffff;}.banner_window{display:none;position:absolute;z-index:100000;top:0;bottom:0;left:0;right:0;}.banner{position:absolute;top:4px;left:4px;right:4px;background-color:#fff7df;color:#cca023;filter:progid:DXImageTransform.Microsoft.Shadow(color='rgba(0,0,0,0.24)', Direction=135, Strength=0);box-shadow:0 2px 2px rgba(0,0,0,0.24);-webkit-box-shadow:0 2px 2px rgba(0,0,0,0.24);}\n@keyframes load-animation {\n  0% {\n    transform: scale(0);\n  }\n  40% {\n    transform: scale(1.0);\n  }\n  80% {\n    transform: scale(0);\n  }\n  100% {\n    transform: scale(0);\n  }\n}\n\n\n@-webkit-keyframes load-animation {\n  0% {\n    -webkit-transform: scale(0);\n  }\n  40% {\n    -webkit-transform: scale(1.0);\n  }\n  80% {\n    -webkit-transform: scale(0);\n  }\n  100% {\n    -webkit-transform: scale(0);\n  }\n}\n\n.load-animation{padding:4px 8px;}.load-animation > div{width:8px;height:8px;border-radius:100%;display:inline-block;}.guimenubar{background-color:#ffffff;background-repeat:repeat-x;background-image:url(\"../../WEB-RES/resource/resource?id=bi_image_gradient_1x100_-1_none_none_-1_20_6C67CDC1D8B845FA5BC89C4729E98B91\");}.guimenupopup{position:absolute;border:1px solid #8c8c8c;background-color:#ffffff;color:#000000;padding:2px !important;filter:progid:DXImageTransform.Microsoft.Shadow(color='#777777', Direction=135, Strength=4);box-shadow:2px 2px 2px #777777;-webkit-box-shadow:2px 2px 2px #777777;}.guimenuitem{border:1px solid transparent;background-color:#ffffff;color:#000000;white-space:pre;}.guimenuitem > td{padding-top:4px;padding-bottom:3px;}.guimenuitem:hover, .guimenuitem-hovered{background-color:#c4e3ff;color:#000000;border:1px solid #e5e5e5;}.guimenuitem-disabled, .guimenuitem-disabled:hover{background-color:#ffffff;color:#bac7d2;border:1px solid #8c8c8c;}.guimenuitem-textcolumn{background-color:transparent;padding-left:2px;padding-right:2px;font-size:inherit;line-height:inherit;}.guispinner{background-color:#ffffff;border:1px solid #a5acb2;position:relative;}.guispinner_disabled{background-color:#ffffff;color:#a5acb2;}.guispinnerinput{background-color:transparent;color:inherit;border:0;text-align:right;width:100%;height:100%;user-select:text;-webkit-user-select:text;autocapitalize:off;autocorrect:off;}.guispinnerinputcontainer{border:0;position:absolute;top:0;left:0;bottom:0;}.guispinnerbuttoncontainer{background-repeat:repeat-x;border:0;position:absolute;right:0;}.guispinnerbutton{background-repeat:no-repeat;background-position:50% 50%;border:1px solid #ffffff;position:absolute;top:0;right:0;bottom:0;left:0;}.guitable{position:relative;border-collapse:collapse;border:1px solid #f4f4f4;color:#000000;background-color:transparent;overflow:hidden;}.guitable_content_table{border:1px solid #f4f4f4;border-collapse:collapse;}.guitable_row{}.guitable_row:nth-child(odd){background-color:#ffffff;}.guitable_row:nth-child(even){background-color:#f0f0f0;}.guitable_row_selected{white-space:pre;border:1px solid #c4e3ff;background-color:#c4e3ff !important;color:#000000 !important;}.guitable_headertable{border-collapse:collapse;}.guitable_header{border:1px solid #c9ccd8;border-collapse:collapse;font-weight:normal;background-color:#ffffff;background-image:url(\"../../WEB-RES/resource/resource?id=bi_image_gradient_1x100_-1_none_none_-1_20_6C67CDC1D8B845FA5BC89C4729E98B91\");background-repeat:repeat-x;color:#000000;overflow:hidden;white-space:pre;text-overflow:ellipsis;}.guitable_header_sorticon_div{background-color:#ffffff;background-image:url(\"../../WEB-RES/resource/resource?id=bi_image_gradient_1x100_-1_none_none_-1_20_6C67CDC1D8B845FA5BC89C4729E98B91\");background-repeat:repeat-x;position:absolute;top:0;right:0;bottom:1px;padding-left:3px;padding-right:3px;vertical-align:middle;}.guitable_header_sorticon{text-align:center;position:relative;}.guitable_fixed_content_div{overflow-x:hidden;overflow-y:auto;scrollbar-width:none;width:100%;}.guitable_fixed_content_div::-webkit-scrollbar{display:none;}.guitable_content{border:1px solid #f4f4f4;border-collapse:collapse;font-weight:normal;overflow:hidden;white-space:pre;text-overflow:ellipsis;}.guitable_scrollable_content_div{background-color:transparent;overflow:auto;position:absolute;}.guitable_scrollable_content_div_with_fixed_columns{background-color:transparent;overflow:auto;position:relative;scrollbar-width:none;}.guitable_scrollable_content_div_with_fixed_columns::-webkit-scrollbar{display:none;}.guitable_resizeheaderleft{position:absolute;height:100%;width:6px;left:0;top:0;cursor:col-resize;overflow:visible;}.guitable_resizeheaderright{position:absolute;height:100%;width:6px;margin-left:-5px;left:100%;top:0;cursor:col-resize;overflow:visible;}.guitree{background-color:#ffffff;color:#000000;}.guitree_active{white-space:pre;border:1px solid #c4e3ff;background-color:#c4e3ff;color:#000000;}.guitree_active a{color:#000000;}.guitree_active:hover{text-decoration:underline;}.guitree_inactive{white-space:pre;background-color:#ffffff;color:#000000;border:1px solid #ffffff;}.guitree_inactive a{color:#000000;}.guitree_inactive:hover{text-decoration:underline;color:#000000;}.guitreenode{padding-top:1px;}.guitreetablenode{}.guitreetablenode:hover{text-decoration:underline;}.guitreenodeimage{display:block;vertical-align:top;}.guiviewer3d_canvas{height:100%;width:100%;border:0;}.guiviewer3d_imagepanel :focus{outline-style:none;}.guiviewer3d_treeview{overflow:auto;white-space:nowrap;}.guiviewer3d_treeview .items{margin-left:12px;}.guiviewer3d_treeview .group-c .items{margin-left:12px;display:none;}.guiviewer3d_treeview .icon, .guiviewer3d_treeview .open, .guiviewer3d_treeview .node, .guiviewer3d_treeview .mesh, .guiviewer3d_treeview .vis, .guiviewer3d_treeview .hdn, .guiviewer3d_treeview .markup, .guiviewer3d_treeview .camera{background-image:url(\"../../WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_webglviewer_treeicons.png\");height:16px;width:16px;float:left;margin-top:1px;margin-left:4px;display:block;}.guiviewer3d_treeview .open, .guiviewer3d_treeview .vis, .guiviewer3d_treeview .hdn{margin-left:0;}.guiviewer3d_treeview .icon{background-position:-128px, 0px;}.guiviewer3d_treeview .open{background-position:-16px, 0px;}.guiviewer3d_treeview .open:hover{background-position:-48px, 0px;}.guiviewer3d_treeview .mesh{background-position:-160px, 0px;}.guiviewer3d_treeview .markup{background-position:-256px, 0px;}.guiviewer3d_treeview .camera{background-position:-192px, 0px;}.guiviewer3d_treeview .vis{background-position:-80px, 0px;}.guiviewer3d_treeview .hdn{background-position:-64px, 0px;}.guiviewer3d_treeview .group-c .open{background-position:0px, 0px;}.guiviewer3d_treeview .group-c .open:hover{background-position:-32px, 0px;}.guiviewer3d_treeview .group-c .open{background-position:0px, 0px;}.guiviewer3d_treeview .group-c .open:hover{background-position:-32px, 0px;}.guiviewer3d_treeview .item, .guiviewer3d_treeview .gitem{height:18px;cursor:pointer;display:block;}.guiviewer3d_treeview .normal, .guiviewer3d_treeview .selected{height:18px;cursor:pointer;display:inline-block;}.guiviewer3d_treeview .normal:hover{background-color:#E5F3FB;}.guiviewer3d_treeview .selected{background-color:#007ACC;}.guiviewer3d_treeview .item{margin-left:16px;}.guiviewer3d_treeview .label{height:18px;padding-left:4px;padding-right:4px;padding-top:0px;padding-bottom:0px;line-height:126%;cursor:pointer;display:inline-block;}.guiviewer3d_treeview .item:hover .label, .guiviewer3d_treeview .gitem:hover .label{background-color:#E5F3FB;}.guiviewer3d_treeview .selected .label, .guiviewer3d_treeview .selected:hover .label{background-color:#007ACC !important;color:#FFFFFF;}.guiviewer3d_swingoverlay, .guiviewer3d_erroroverlay{position:absolute;top:0;bottom:0;left:0;right:0;background-color:#ffffff;}.guiviewer3d_erroroverlay{text-align:center;font-size:14px;font-weight:bold;z-index:1000;}.guiviewer3d_treecontainer{position:absolute;top:8px;bottom:8px;width:190px;display:none;}.guiviewer3d_left_sidebar{position:absolute;top:8px;bottom:8px;width:32px;}.guiviewer3d_right_sidebar{position:absolute;top:8px;width:32px;}.guiviewer3d_views_toolbar{position:absolute;display:none;top:8px;height:32px;}.guiviewer3d_measure_toolbar, .guiviewer3d_clipplane_toolbar, .guiviewer3d_environment_toolbar, .guiviewer3d_pmi_toolbar{position:absolute;height:32px;}.guiviewer3d_pancontainer{position:absolute;height:170px;width:190px;top:8px;}.guiviewer3d_toolbar{position:absolute;top:8px;height:32px;}.guiviewer3d_undoredo_toolbar{position:absolute;margin-left:auto;margin-right:auto;left:0;right:0;top:8px;height:32px;}.guiviewer3d_animation_toolbar{position:absolute;margin-left:auto;margin-right:auto;left:0;right:0;bottom:8px;height:32px;}.guiviewer3d_left_sidebar_overlay, .guiviewer3d_right_sidebar_overlay, .guiviewer3d_views_toolbar_overlay, .guiviewer3d_toolbar_overlay, .guiviewer3d_treecontainer_overlay, .guiviewer3d_pancontainer_overlay, .guiviewer3d_undoredo_overlay, .guiviewer3d_animation_overlay, .guiviewer3d_measure_toolbar_overlay, .guiviewer3d_clipplane_toolbar_overlay, .guiviewer3d_environment_toolbar_overlay, .guiviewer3d_pmi_toolbar_overlay{position:absolute;border-width:1px;border-style:solid;border-color:rgba(0,81,158,0.4);background-color:#ffffff;height:100%;width:100%;filter:alpha(opacity=70.0);opacity:0.7;}.guiviewer3d_left_sidebar_buttons, .guiviewer3d_right_sidebar_buttons, .guiviewer3d_views_toolbar_buttons, .guiviewer3d_toolbar_buttons, .guiviewer3d_treeview, .guiviewer3d_undoredo_buttons, .guiviewer3d_animation_buttons, .guiviewer3d_measure_toolbar_buttons, guiviewer3d_clipplane_toolbar_buttons, .guiviewer3d_environment_toolbar_buttons, .guiviewer3d_pmi_toolbar_buttons{position:absolute;height:100%;width:100%;}.guiviewer3d_button{position:absolute;background:transparent;width:24px;height:24px;}.guiviewer3d_buttonimage{position:relative;margin-left:0;padding-top:0;}.guiviewer3d{position:absolute;top:0;left:0;right:0;bottom:0;}.guiviewer3d_imagepanel{position:absolute;top:0;left:0;right:0;bottom:0;}.guiviewer3d_panimagepanel{position:absolute;top:0;left:0;width:190px;height:170px;}.guiviewer3d_infopanel{position:absolute;color:#000000;background-color:#ffffe1;top:0;left:0;right:0;}.guiviewer3d_progresspanel{box-shadow:0 0 1em black;border-radius:100%;position:absolute;top:50%;margin-top:-50px;left:50%;margin-left:-50px;width:100px;height:100px;}.guiviewer3d_progresspanel > div > svg > circle{stroke-dashoffset:314.1592653589793;stroke:#00519e;stroke-width:3px;}.guiviewer3d_progresspanel > div{position:absolute;text-align:center;vertical-align:middle;width:100px;height:100px;top:0;}.guiviewer3d_progresspanel > div > div{display:inline-block;font-size:26px;color:#00519e;line-height:100px;}.guiviewer3d_hotspot_selection_toolbar{position:absolute;margin-left:auto;margin-right:auto;left:0;right:0;bottom:8px;height:32px;}.guiviewer3d_hotspot_selection_overlay{position:absolute;border-width:1px;border-style:solid;border-color:rgba(0,81,158,0.4);background-color:#ffffff;height:100%;width:100%;filter:alpha(opacity=70.0);opacity:0.7;}.guiviewer3d_hotspot_selection_buttons{position:absolute;height:100%;width:100%;z-index:1;}.guiviewer3d_label{position:absolute;background:transparent;text-align:center;padding-top:4px;width:44px;height:24px;}.guiviewerexternal{}.guiviewerhtml{}.guiviewerimage{position:absolute;width:100%;height:100%;}.guiviewerimage_image{position:absolute;width:100%;height:100%;}.guiviewerimage_overview{position:absolute;z-index:100;left:0;top:0;width:44px;height:170px;}.guiviewerimage_button{position:absolute;background:transparent;width:23px;height:23px;}.guiviewerimage_buttonimage{position:relative;margin-left:0;padding-top:0;}.guiviewerimage_slider{position:absolute;background-color:#ffffff;width:142px;height:24px;}.guiviewerimage_nav_previous{position:absolute;top:0;bottom:0;left:0;z-index:25;}.guiviewerimage_nav_next{position:absolute;top:0;bottom:0;right:0;z-index:25;}.guiviewermedia{}.guiviewerpdf{}.transparentLayer{top:0;width:100%;height:100%;position:absolute;}.guipdfpageimage{display:block;margin-left:auto;margin-right:auto;margin-top:0px;margin-bottom:4px;border:1px solid #777777;padding:4px;filter:progid:DXImageTransform.Microsoft.Shadow(color='#777777', Direction=135, Strength=4);box-shadow:2px 2px 2px #777777;-webkit-box-shadow:2px 2px 2px #777777;}.guidropzone{vertical-align:middle;text-align:center;padding:4px;position:absolute;top:0;bottom:0;left:0;right:0;font-size:13px;font-weight:bold;background-color:#ffffff;color:#b3b3b3;border-color:#b3b3b3;border-width:2px;border-style:dashed;border-radius:15px;}.guidropzone_entered{background-color:#ffe178;color:#bb921e;border-color:#bb921e;}.guidropzone_invalid{background-color:#ff9696;color:#000000;}.guilayoutabsolute{width:100%;height:100%;background-color:transparent;overflow:hidden;position:relative;}.guilayoutborder{position:absolute;overflow:hidden;background-color:transparent;}.guilayoutborder_north{position:absolute;top:0;left:0;right:0;background-color:transparent;}.guilayoutborder_east{position:absolute;right:0;background-color:transparent;}.guilayoutborder_center{position:absolute;background-color:transparent;}.guilayoutborder_west{position:absolute;left:0;background-color:transparent;}.guilayoutborder_south{position:absolute;left:0;right:0;bottom:0;background-color:transparent;}@media print{.guilayoutborder{overflow:visible !important;}}@media print{.guilayoutborder_north{overflow:visible !important;bottom:auto !important;}}@media print{.guilayoutborder_east{overflow:visible !important;}}@media print{.guilayoutborder_center{overflow:visible !important;}}@media print{.guilayoutborder_west{overflow:visible !important;}}@media print{.guilayoutborder_south{overflow:visible !important;}}.guilayoutflow{position:absolute;overflow:hidden;background-color:transparent;}.guilayoutflow_center{position:absolute;top:0;left:50%;right:0;bottom:0;background-color:transparent;}.guilayoutflow_left{position:absolute;top:0;left:0;right:0;bottom:0;background-color:transparent;}.guilayoutflow_container{position:absolute;background-color:transparent;}.guilayoutgridbag{position:absolute;text-align:center;overflow:hidden;background-color:transparent;}.guilayoutgridbag_centered{position:absolute;background-color:transparent;}.guilayoutgridbag_container{position:absolute;background-color:transparent;}.guilayoutgridbag_container_padded{text-align:left;position:absolute;background-color:transparent;}@media print{.guilayoutgridbag{overflow:visible !important;}}@media print{.guilayoutgridbag_centered{overflow:visible !important;}}@media print{.guilayoutgridbag_container_padded{overflow:visible !important;}}.dw-hamburger{padding:8px 4px;transition-property:opacity, filter;transition-duration:0.15s;transition-timing-function:linear;font:inherit;color:inherit;text-transform:none;background-color:transparent;border:0;margin:0;overflow:visible;}.dw-hamburger-box{width:40px;height:26px;margin-top:4px;display:inline-block;position:relative;}.dw-hamburger-small-box{width:20px;margin-left:12px;}.dw-hamburger-inner{display:block;top:50%;margin-left:5px;}.dw-hamburger-inner, .dw-hamburger-inner:before, .dw-hamburger-inner:after{width:30px;height:4px;background-color:#7f7f7f;border-radius:4px;position:absolute;transition-property:transform;transition-duration:0.15s;transition-timing-function:ease;}.dw-hamburger-lighting-bright, .dw-hamburger-lighting-bright:before, .dw-hamburger-lighting-bright:after{background-color:#ffffff;}.dw-hamburger:hover .dw-hamburger-inner, .dw-hamburger:hover .dw-hamburger-inner:before, .dw-hamburger:hover .dw-hamburger-inner:after{background-color:#ffffff;}.dw-hamburger:hover .dw-hamburger-inner.dw-hamburger-lighting-bright, .dw-hamburger:hover .dw-hamburger-inner.dw-hamburger-lighting-bright:before, .dw-hamburger:hover .dw-hamburger-inner.dw-hamburger-lighting-bright:after{background-color:#ffffff;}.dw-hamburger-small-inner, .dw-hamburger-small-inner:before, .dw-hamburger-small-inner:after{width:5px;}.dw-hamburger-inner:before, .dw-hamburger-inner:after{content:\"\";display:block;}.dw-hamburger-inner:before{top:-10px;}.dw-hamburger-inner:after{bottom:-10px;}.dw-hamburger--squeeze .dw-hamburger-inner{transition-duration:0.075s;transition-timing-function:cubic-bezier(0.55, 0.055, 0.675, 0.19);}.dw-hamburger--squeeze .dw-hamburger-inner:before{transition:top 0.075s 0.12s ease, opacity 0.075s ease;;}.dw-hamburger--squeeze .dw-hamburger-inner:after{transition:bottom 0.075s 0.12s ease, transform 0.075s cubic-bezier(0.55, 0.055, 0.675, 0.19);}.dw-hamburger--squeeze.dw-hamburger-is-active .dw-hamburger-inner{transform:rotate(45deg);transition-delay:0.12s;transition-timing-function:cubic-bezier(0.215, 0.61, 0.355, 1);}.dw-hamburger--squeeze.dw-hamburger-is-active .dw-hamburger-inner:before{top:0;opacity:0;transition:top 0.075s ease, opacity 0.075s 0.12s ease;}.dw-hamburger--squeeze.dw-hamburger-is-active .dw-hamburger-inner:after{bottom:0;transform:rotate(-90deg);transition:bottom 0.075s ease, transform 0.075s 0.12s cubic-bezier(0.215, 0.61, 0.355, 1);}.dw-toggle-switch{position:relative;display:inline-block;width:32px;height:20px;}.dw-toggle-switch-background{display:none;}.dw-toggle-switch-slider{position:absolute;top:0;left:0;right:0;bottom:0;background-color:#dddddd;-webkit-transition:0.4s;transition:0.4s;}.dw-toggle-switch-slider:before{position:absolute;content:\"\";height:16px;width:16px;left:1px;bottom:2px;background-color:#ffffff;-webkit-transition:0.4s;transition:0.4s;}.dw-toggle-switch-checked > .dw-toggle-switch-slider{background-color:#46b82e;}.dw-toggle-switch-disabled > .dw-toggle-switch-slider{background-color:#f6f6f6;}.dw-toggle-switch-background:focus + .dw-toggle-switch-slider{box-shadow:0 0 1px #00519E;}.dw-toggle-switch-checked > .dw-toggle-switch-slider:before{-webkit-transform:translateX(14px);-ms-transform:translateX(14px);transform:translateX(14px);}.dw-toggle-switch-slider.dw-round{border-radius:20px;}.dw-toggle-switch-slider.dw-round:before{border-radius:50%;}.mdc-floating-label{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-subtitle1-font-family,var(--mdc-typography-font-family,Roboto,sans-serif));font-size:var(--mdc-typography-subtitle1-font-size,1rem);font-weight:var(--mdc-typography-subtitle1-font-weight,400);letter-spacing:var(--mdc-typography-subtitle1-letter-spacing,0.009375em);-webkit-text-decoration:var(--mdc-typography-subtitle1-text-decoration,inherit);text-decoration:var(--mdc-typography-subtitle1-text-decoration,inherit);text-transform:var(--mdc-typography-subtitle1-text-transform,inherit);position:absolute;left:0;-webkit-transform-origin:left top;transform-origin:left top;line-height:1.15rem;text-align:left;text-overflow:ellipsis;white-space:nowrap;cursor:text;overflow:hidden;will-change:transform;transition:transform 150ms cubic-bezier(0.4,0,0.2,1),color 150ms cubic-bezier(0.4,0,0.2,1),-webkit-transform 150ms cubic-bezier(0.4,0,0.2,1);}[dir=rtl] .mdc-floating-label,.mdc-floating-label[dir=rtl]{right:0;left:auto;-webkit-transform-origin:right top;transform-origin:right top;text-align:right;}.mdc-floating-label--float-above{cursor:auto;}.mdc-floating-label--required::after{margin-left:1px;margin-right:0px;content:\"*\";}[dir=rtl] .mdc-floating-label--required::after,.mdc-floating-label--required[dir=rtl]::after{margin-left:0;margin-right:1px;}.mdc-floating-label--float-above{-webkit-transform:translateY(-106%) scale(0.75);transform:translateY(-106%) scale(0.75);}.mdc-floating-label--shake{-webkit-animation:mdc-floating-label-shake-float-above-standard 250ms 1;animation:mdc-floating-label-shake-float-above-standard 250ms 1;}.mdc-line-ripple::before,.mdc-line-ripple::after{position:absolute;bottom:0;left:0;width:100%;border-bottom-style:solid;content:\"\";}.mdc-line-ripple::before{border-bottom-width:1px;z-index:1;}.mdc-line-ripple::after{-webkit-transform:scaleX(0);transform:scaleX(0);border-bottom-width:2px;opacity:0;z-index:2;}.mdc-line-ripple::after{transition:transform 180ms cubic-bezier(0.4,0,0.2,1),opacity 180ms cubic-bezier(0.4,0,0.2,1),-webkit-transform 180ms cubic-bezier(0.4,0,0.2,1);}.mdc-line-ripple--active::after{-webkit-transform:scaleX(1);transform:scaleX(1);opacity:1;}.mdc-line-ripple--deactivating::after{opacity:0;}.mdc-notched-outline{display:flex;position:absolute;top:0;right:0;left:0;box-sizing:border-box;width:100%;max-width:100%;height:100%;text-align:left;pointer-events:none;}[dir=rtl] .mdc-notched-outline,.mdc-notched-outline[dir=rtl]{text-align:right;}.mdc-notched-outline__leading,.mdc-notched-outline__notch,.mdc-notched-outline__trailing{box-sizing:border-box;height:100%;border-top:1px solid;border-bottom:1px solid;pointer-events:none;}.mdc-notched-outline__leading{border-left:1px solid;border-right:none;width:12px;}[dir=rtl] .mdc-notched-outline__leading,.mdc-notched-outline__leading[dir=rtl]{border-left:none;border-right:1px solid;}.mdc-notched-outline__trailing{border-left:none;border-right:1px solid;flex-grow:1;}[dir=rtl] .mdc-notched-outline__trailing,.mdc-notched-outline__trailing[dir=rtl]{border-left:1px solid;border-right:none;}.mdc-notched-outline__notch{flex:0 0 auto;width:auto;max-width:calc(100% - 12px*2);}.mdc-notched-outline .mdc-floating-label{display:inline-block;position:relative;max-width:100%;}.mdc-notched-outline .mdc-floating-label--float-above{text-overflow:clip;}.mdc-notched-outline--upgraded .mdc-floating-label--float-above{max-width:calc(100%/0.75);}.mdc-notched-outline--notched .mdc-notched-outline__notch{padding-left:0;padding-right:8px;border-top:none;}[dir=rtl] .mdc-notched-outline--notched .mdc-notched-outline__notch,.mdc-notched-outline--notched .mdc-notched-outline__notch[dir=rtl]{padding-left:8px;padding-right:0;}.mdc-notched-outline--no-label .mdc-notched-outline__notch{padding:0;}.mdc-text-field--filled{--mdc-ripple-fg-size:0;--mdc-ripple-left:0;--mdc-ripple-top:0;--mdc-ripple-fg-scale:1;--mdc-ripple-fg-translate-end:0;--mdc-ripple-fg-translate-start:0;-webkit-tap-highlight-color:rgba(0,0,0,0);}.mdc-text-field--filled .mdc-text-field__ripple::before,.mdc-text-field--filled .mdc-text-field__ripple::after{position:absolute;border-radius:50%;opacity:0;pointer-events:none;content:\"\";}.mdc-text-field--filled .mdc-text-field__ripple::before{transition:opacity 15ms linear,background-color 15ms linear;z-index:1;}.mdc-text-field--filled.mdc-ripple-upgraded .mdc-text-field__ripple::before{-webkit-transform:scale(var(--mdc-ripple-fg-scale,1));transform:scale(var(--mdc-ripple-fg-scale,1));}.mdc-text-field--filled.mdc-ripple-upgraded .mdc-text-field__ripple::after{top:0;left:0;-webkit-transform:scale(0);transform:scale(0);-webkit-transform-origin:center center;transform-origin:center center;}.mdc-text-field--filled.mdc-ripple-upgraded--unbounded .mdc-text-field__ripple::after{top:var(--mdc-ripple-top,0);left:var(--mdc-ripple-left,0);}.mdc-text-field--filled.mdc-ripple-upgraded--foreground-activation .mdc-text-field__ripple::after{-webkit-animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards;animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards;}.mdc-text-field--filled.mdc-ripple-upgraded--foreground-deactivation .mdc-text-field__ripple::after{-webkit-animation:mdc-ripple-fg-opacity-out 150ms;animation:mdc-ripple-fg-opacity-out 150ms;-webkit-transform:translate(var(--mdc-ripple-fg-translate-end,0)) scale(var(--mdc-ripple-fg-scale,1));transform:translate(var(--mdc-ripple-fg-translate-end,0)) scale(var(--mdc-ripple-fg-scale,1));}.mdc-text-field--filled .mdc-text-field__ripple::before,.mdc-text-field--filled .mdc-text-field__ripple::after{top:calc(50% - 100%);left:calc(50% - 100%);width:200%;height:200%;}.mdc-text-field--filled.mdc-ripple-upgraded .mdc-text-field__ripple::after{width:var(--mdc-ripple-fg-size,100%);height:var(--mdc-ripple-fg-size,100%);}.mdc-text-field__ripple{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;}.mdc-text-field{border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0;padding:0 16px;display:inline-flex;align-items:baseline;position:relative;box-sizing:border-box;overflow:hidden;will-change:opacity,transform,color;}.mdc-text-field:not(.mdc-text-field--disabled) .mdc-floating-label{color:rgba(22,22,255,0.6);}.mdc-text-field:not(.mdc-text-field--disabled) .mdc-text-field__input{color:rgba(122,0,0,0.87);}.mdc-text-field .mdc-text-field__input{caret-color:var(--mdc-theme-primary,#6200ee);}.mdc-text-field:not(.mdc-text-field--disabled)+.mdc-text-field-helper-line .mdc-text-field-helper-text{color:rgba(0,0,0,0.6);}.mdc-text-field:not(.mdc-text-field--disabled) .mdc-text-field-character-counter,.mdc-text-field:not(.mdc-text-field--disabled)+.mdc-text-field-helper-line .mdc-text-field-character-counter{color:rgba(0,0,0,0.6);}.mdc-text-field:not(.mdc-text-field--disabled) .mdc-text-field__icon--leading{color:rgba(0,0,0,0.54);}.mdc-text-field:not(.mdc-text-field--disabled) .mdc-text-field__icon--trailing{color:rgba(0,0,0,0.54);}.mdc-text-field:not(.mdc-text-field--disabled) .mdc-text-field__affix--prefix{color:rgba(0,0,0,0.6);}.mdc-text-field:not(.mdc-text-field--disabled) .mdc-text-field__affix--suffix{color:rgba(0,0,0,0.6);}.mdc-text-field .mdc-floating-label{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);pointer-events:none;}.mdc-text-field.mdc-text-field--with-leading-icon{padding-left:0;padding-right:16px;}[dir=rtl] .mdc-text-field.mdc-text-field--with-leading-icon,.mdc-text-field.mdc-text-field--with-leading-icon[dir=rtl]{padding-left:16px;padding-right:0;}.mdc-text-field.mdc-text-field--with-trailing-icon{padding-left:16px;padding-right:0;}[dir=rtl] .mdc-text-field.mdc-text-field--with-trailing-icon,.mdc-text-field.mdc-text-field--with-trailing-icon[dir=rtl]{padding-left:0;padding-right:16px;}.mdc-text-field.mdc-text-field--with-leading-icon.mdc-text-field--with-trailing-icon{padding-left:0;padding-right:0;}[dir=rtl] .mdc-text-field.mdc-text-field--with-leading-icon.mdc-text-field--with-trailing-icon,.mdc-text-field.mdc-text-field--with-leading-icon.mdc-text-field--with-trailing-icon[dir=rtl]{padding-left:0;padding-right:0;}.mdc-text-field__input{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-subtitle1-font-family,var(--mdc-typography-font-family,Roboto,sans-serif));font-size:var(--mdc-typography-subtitle1-font-size,1rem);font-weight:var(--mdc-typography-subtitle1-font-weight,400);letter-spacing:var(--mdc-typography-subtitle1-letter-spacing,0.009375em);-webkit-text-decoration:var(--mdc-typography-subtitle1-text-decoration,inherit);text-decoration:var(--mdc-typography-subtitle1-text-decoration,inherit);text-transform:var(--mdc-typography-subtitle1-text-transform,inherit);height:28px;transition:opacity 150ms cubic-bezier(0.4,0,0.2,1);width:100%;min-width:0;border:none;border-radius:0;background:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:0;}.mdc-text-field__input::-ms-clear{display:none;}.mdc-text-field__input:focus{outline:none;}.mdc-text-field__input:invalid{box-shadow:none;}.mdc-text-field__input:-webkit-autofill{z-index:auto;}.mdc-text-field__affix{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-subtitle1-font-family,var(--mdc-typography-font-family,Roboto,sans-serif));font-size:var(--mdc-typography-subtitle1-font-size,1rem);font-weight:var(--mdc-typography-subtitle1-font-weight,400);letter-spacing:var(--mdc-typography-subtitle1-letter-spacing,0.009375em);-webkit-text-decoration:var(--mdc-typography-subtitle1-text-decoration,inherit);text-decoration:var(--mdc-typography-subtitle1-text-decoration,inherit);text-transform:var(--mdc-typography-subtitle1-text-transform,inherit);height:28px;transition:opacity 150ms cubic-bezier(0.4,0,0.2,1);opacity:0;white-space:nowrap;}.mdc-text-field--label-floating .mdc-text-field__affix,.mdc-text-field--no-label .mdc-text-field__affix{opacity:1;}.mdc-text-field__affix--prefix{padding-left:0;padding-right:2px;}[dir=rtl] .mdc-text-field__affix--prefix,.mdc-text-field__affix--prefix[dir=rtl]{padding-left:2px;padding-right:0;}.mdc-text-field--end-aligned .mdc-text-field__affix--prefix{padding-left:0;padding-right:12px;}[dir=rtl] .mdc-text-field--end-aligned .mdc-text-field__affix--prefix,.mdc-text-field--end-aligned .mdc-text-field__affix--prefix[dir=rtl]{padding-left:12px;padding-right:0;}.mdc-text-field__affix--suffix{padding-left:12px;padding-right:0;}[dir=rtl] .mdc-text-field__affix--suffix,.mdc-text-field__affix--suffix[dir=rtl]{padding-left:0;padding-right:12px;}.mdc-text-field--end-aligned .mdc-text-field__affix--suffix{padding-left:2px;padding-right:0;}[dir=rtl] .mdc-text-field--end-aligned .mdc-text-field__affix--suffix,.mdc-text-field--end-aligned .mdc-text-field__affix--suffix[dir=rtl]{padding-left:0;padding-right:2px;}.mdc-text-field__input:-webkit-autofill+.mdc-floating-label{-webkit-transform:translateY(-50%) scale(0.75);transform:translateY(-50%) scale(0.75);cursor:auto;}.mdc-text-field--filled{height:56px;}.mdc-text-field--filled .mdc-text-field__ripple::before,.mdc-text-field--filled .mdc-text-field__ripple::after{background-color:rgba(0,0,0,0.87);}.mdc-text-field--filled:hover .mdc-text-field__ripple::before{opacity:0.04;}.mdc-text-field--filled.mdc-ripple-upgraded--background-focused .mdc-text-field__ripple::before,.mdc-text-field--filled:not(.mdc-ripple-upgraded):focus .mdc-text-field__ripple::before{transition-duration:75ms;opacity:0.12;}.mdc-text-field--filled::before{display:inline-block;width:0;height:40px;content:\"\";vertical-align:0;}.mdc-text-field--filled:not(.mdc-text-field--disabled){background-color:whitesmoke;}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-line-ripple::before{border-bottom-color:rgba(0,0,0,0.42);}.mdc-text-field--filled:not(.mdc-text-field--disabled):hover .mdc-line-ripple::before{border-bottom-color:rgba(0,0,0,0.87);}.mdc-text-field--filled .mdc-line-ripple::after{border-bottom-color:var(--mdc-theme-primary,#6200ee);}.mdc-text-field--filled .mdc-floating-label{left:16px;right:initial;}[dir=rtl] .mdc-text-field--filled .mdc-floating-label,.mdc-text-field--filled .mdc-floating-label[dir=rtl]{left:initial;right:16px;}.mdc-text-field--filled .mdc-floating-label--float-above{-webkit-transform:translateY(-106%) scale(0.75);transform:translateY(-106%) scale(0.75);}.mdc-text-field--filled.mdc-text-field--no-label .mdc-text-field__input{height:100%;}.mdc-text-field--filled.mdc-text-field--no-label .mdc-floating-label{display:none;}.mdc-text-field--filled.mdc-text-field--no-label::before{display:none;}.mdc-text-field--outlined{height:56px;overflow:visible;}.mdc-text-field--outlined .mdc-floating-label--float-above{-webkit-transform:translateY(-37.25px) scale(1);transform:translateY(-37.25px) scale(1);}.mdc-text-field--outlined .mdc-floating-label--float-above{font-size:0.75rem;}.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{-webkit-transform:translateY(-34.75px) scale(0.75);transform:translateY(-34.75px) scale(0.75);}.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{font-size:1rem;}.mdc-text-field--outlined .mdc-floating-label--shake{-webkit-animation:mdc-floating-label-shake-float-above-text-field-outlined 250ms 1;animation:mdc-floating-label-shake-float-above-text-field-outlined 250ms 1;}.mdc-text-field--outlined .mdc-text-field__input{height:100%;}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-notched-outline__leading,.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-notched-outline__notch,.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-notched-outline__trailing{border-color:rgba(122,255,200,0.38);}.mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__leading,.mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__notch,.mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__trailing{border-color:rgba(122,255,200,0.87);}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__leading,.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__notch,.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__trailing{border-color:var(--mdc-theme-primary,#6200ee);}.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__leading{border-top-left-radius:4px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:4px;}[dir=rtl] .mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__leading,.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__leading[dir=rtl]{border-top-left-radius:0;border-top-right-radius:4px;border-bottom-right-radius:4px;border-bottom-left-radius:0;}.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__trailing{border-top-left-radius:0;border-top-right-radius:4px;border-bottom-right-radius:4px;border-bottom-left-radius:0;}[dir=rtl] .mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__trailing,.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__trailing[dir=rtl]{border-top-left-radius:4px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:4px;}.mdc-text-field--outlined .mdc-notched-outline--notched .mdc-notched-outline__notch{padding-top:1px;}.mdc-text-field--outlined .mdc-text-field__ripple::before,.mdc-text-field--outlined .mdc-text-field__ripple::after{content:none;}.mdc-text-field--outlined .mdc-floating-label{left:4px;right:initial;}[dir=rtl] .mdc-text-field--outlined .mdc-floating-label,.mdc-text-field--outlined .mdc-floating-label[dir=rtl]{left:initial;right:4px;}.mdc-text-field--outlined .mdc-text-field__input{display:flex;border:none;background-color:transparent;}.mdc-text-field--textarea{flex-direction:column;align-items:center;width:auto;height:auto;padding:0;transition:none;}.mdc-text-field--textarea .mdc-floating-label{top:19px;}.mdc-text-field--textarea .mdc-floating-label:not(.mdc-floating-label--float-above){-webkit-transform:none;transform:none;}.mdc-text-field--textarea .mdc-text-field__input{flex-grow:1;height:auto;min-height:1.5rem;overflow-x:hidden;overflow-y:auto;box-sizing:border-box;resize:none;padding:0 16px;line-height:1.5rem;}.mdc-text-field--textarea.mdc-text-field--filled::before{display:none;}.mdc-text-field--textarea.mdc-text-field--filled .mdc-floating-label--float-above{-webkit-transform:translateY(-10.25px) scale(0.75);transform:translateY(-10.25px) scale(0.75);}.mdc-text-field--textarea.mdc-text-field--filled .mdc-floating-label--shake{-webkit-animation:mdc-floating-label-shake-float-above-textarea-filled 250ms 1;animation:mdc-floating-label-shake-float-above-textarea-filled 250ms 1;}.mdc-text-field--textarea.mdc-text-field--filled .mdc-text-field__input{margin-top:23px;margin-bottom:9px;}.mdc-text-field--textarea.mdc-text-field--filled.mdc-text-field--no-label .mdc-text-field__input{margin-top:16px;margin-bottom:16px;}.mdc-text-field--textarea.mdc-text-field--outlined .mdc-notched-outline--notched .mdc-notched-outline__notch{padding-top:0;}.mdc-text-field--textarea.mdc-text-field--outlined .mdc-floating-label--float-above{-webkit-transform:translateY(-27.25px) scale(1);transform:translateY(-27.25px) scale(1);}.mdc-text-field--textarea.mdc-text-field--outlined .mdc-floating-label--float-above{font-size:0.75rem;}.mdc-text-field--textarea.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--textarea.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{-webkit-transform:translateY(-24.75px) scale(0.75);transform:translateY(-24.75px) scale(0.75);}.mdc-text-field--textarea.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--textarea.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{font-size:1rem;}.mdc-text-field--textarea.mdc-text-field--outlined .mdc-floating-label--shake{-webkit-animation:mdc-floating-label-shake-float-above-textarea-outlined 250ms 1;animation:mdc-floating-label-shake-float-above-textarea-outlined 250ms 1;}.mdc-text-field--textarea.mdc-text-field--outlined .mdc-text-field__input{margin-top:16px;margin-bottom:16px;}.mdc-text-field--textarea.mdc-text-field--outlined .mdc-floating-label{top:18px;}.mdc-text-field--textarea.mdc-text-field--with-internal-counter .mdc-text-field__input{margin-bottom:2px;}.mdc-text-field--textarea.mdc-text-field--with-internal-counter .mdc-text-field-character-counter{align-self:flex-end;padding:0 16px;}.mdc-text-field--textarea.mdc-text-field--with-internal-counter .mdc-text-field-character-counter::after{display:inline-block;width:0;height:16px;content:\"\";vertical-align:-16px;}.mdc-text-field--textarea.mdc-text-field--with-internal-counter .mdc-text-field-character-counter::before{display:none;}.mdc-text-field__resizer{align-self:stretch;display:inline-flex;flex-direction:column;flex-grow:1;max-height:100%;max-width:100%;min-height:56px;min-width:-webkit-fill-available;overflow:hidden;resize:both;}.mdc-text-field--filled .mdc-text-field__resizer{-webkit-transform:translateY(-1px);transform:translateY(-1px);}.mdc-text-field--filled .mdc-text-field__resizer .mdc-text-field__input,.mdc-text-field--filled .mdc-text-field__resizer .mdc-text-field-character-counter{-webkit-transform:translateY(1px);transform:translateY(1px);}.mdc-text-field--outlined .mdc-text-field__resizer{-webkit-transform:translateX(-1px) translateY(-1px);transform:translateX(-1px) translateY(-1px);}[dir=rtl] .mdc-text-field--outlined .mdc-text-field__resizer,.mdc-text-field--outlined .mdc-text-field__resizer[dir=rtl]{-webkit-transform:translateX(1px) translateY(-1px);transform:translateX(1px) translateY(-1px);}.mdc-text-field--outlined .mdc-text-field__resizer .mdc-text-field__input,.mdc-text-field--outlined .mdc-text-field__resizer .mdc-text-field-character-counter{-webkit-transform:translateX(1px) translateY(1px);transform:translateX(1px) translateY(1px);}[dir=rtl] .mdc-text-field--outlined .mdc-text-field__resizer .mdc-text-field__input,.mdc-text-field--outlined .mdc-text-field__resizer .mdc-text-field__input[dir=rtl],[dir=rtl] .mdc-text-field--outlined .mdc-text-field__resizer .mdc-text-field-character-counter,.mdc-text-field--outlined .mdc-text-field__resizer .mdc-text-field-character-counter[dir=rtl]{-webkit-transform:translateX(-1px) translateY(1px);transform:translateX(-1px) translateY(1px);}.mdc-text-field--fullwidth{padding:0;width:100%;}.mdc-text-field--fullwidth:not(.mdc-text-field--disabled) .mdc-line-ripple::before{border-bottom-color:rgba(0,0,0,0.42);}.mdc-text-field--fullwidth.mdc-text-field--disabled .mdc-line-ripple::before{border-bottom-color:rgba(0,0,0,0.42);}.mdc-text-field--fullwidth:not(.mdc-text-field--textarea){display:flex;}.mdc-text-field--fullwidth:not(.mdc-text-field--textarea) .mdc-text-field__input{height:100%;}.mdc-text-field--fullwidth:not(.mdc-text-field--textarea) .mdc-floating-label{display:none;}.mdc-text-field--fullwidth:not(.mdc-text-field--textarea)::before{display:none;}.mdc-text-field--fullwidth:not(.mdc-text-field--textarea) .mdc-text-field__ripple::before,.mdc-text-field--fullwidth:not(.mdc-text-field--textarea) .mdc-text-field__ripple::after{content:none;}.mdc-text-field--fullwidth:not(.mdc-text-field--textarea):not(.mdc-text-field--disabled){background-color:transparent;}.mdc-text-field--fullwidth.mdc-text-field--textarea .mdc-text-field__resizer{resize:vertical;}.mdc-text-field--with-leading-icon.mdc-text-field--filled .mdc-floating-label{max-width:calc(100% - 48px);left:48px;right:initial;}[dir=rtl] .mdc-text-field--with-leading-icon.mdc-text-field--filled .mdc-floating-label,.mdc-text-field--with-leading-icon.mdc-text-field--filled .mdc-floating-label[dir=rtl]{left:initial;right:48px;}.mdc-text-field--with-leading-icon.mdc-text-field--filled .mdc-floating-label--float-above{max-width:calc(100%/0.75 - 64px/0.75);}.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label{left:36px;right:initial;}[dir=rtl] .mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label,.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label[dir=rtl]{left:initial;right:36px;}.mdc-text-field--with-leading-icon.mdc-text-field--outlined :not(.mdc-notched-outline--notched) .mdc-notched-outline__notch{max-width:calc(100% - 60px);}.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label--float-above{-webkit-transform:translateY(-37.25px) translateX(-32px) scale(1);transform:translateY(-37.25px) translateX(-32px) scale(1);}[dir=rtl] .mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label--float-above,.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label--float-above[dir=rtl]{-webkit-transform:translateY(-37.25px) translateX(32px) scale(1);transform:translateY(-37.25px) translateX(32px) scale(1);}.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label--float-above{font-size:0.75rem;}.mdc-text-field--with-leading-icon.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{-webkit-transform:translateY(-34.75px) translateX(-32px) scale(0.75);transform:translateY(-34.75px) translateX(-32px) scale(0.75);}[dir=rtl] .mdc-text-field--with-leading-icon.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--with-leading-icon.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above[dir=rtl],[dir=rtl] .mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above[dir=rtl]{-webkit-transform:translateY(-34.75px) translateX(32px) scale(0.75);transform:translateY(-34.75px) translateX(32px) scale(0.75);}.mdc-text-field--with-leading-icon.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{font-size:1rem;}.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label--shake{-webkit-animation:mdc-floating-label-shake-float-above-text-field-outlined-leading-icon 250ms 1;animation:mdc-floating-label-shake-float-above-text-field-outlined-leading-icon 250ms 1;}[dir=rtl] .mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label--shake,.mdc-text-field--with-leading-icon.mdc-text-field--outlined[dir=rtl] .mdc-floating-label--shake{-webkit-animation:mdc-floating-label-shake-float-above-text-field-outlined-leading-icon 250ms 1;animation:mdc-floating-label-shake-float-above-text-field-outlined-leading-icon 250ms 1;}.mdc-text-field--with-trailing-icon.mdc-text-field--filled .mdc-floating-label{max-width:calc(100% - 64px);}.mdc-text-field--with-trailing-icon.mdc-text-field--filled .mdc-floating-label--float-above{max-width:calc(100%/0.75 - 64px/0.75);}.mdc-text-field--with-trailing-icon.mdc-text-field--outlined :not(.mdc-notched-outline--notched) .mdc-notched-outline__notch{max-width:calc(100% - 60px);}.mdc-text-field--with-leading-icon.mdc-text-field--with-trailing-icon.mdc-text-field--filled .mdc-floating-label{max-width:calc(100% - 96px);}.mdc-text-field--with-leading-icon.mdc-text-field--with-trailing-icon.mdc-text-field--filled .mdc-floating-label--float-above{max-width:calc(100%/0.75 - 96px/0.75);}.mdc-text-field-helper-line{display:flex;justify-content:space-between;box-sizing:border-box;}.mdc-text-field+.mdc-text-field-helper-line{padding-right:16px;padding-left:16px;}.mdc-form-field>.mdc-text-field+label{align-self:flex-start;}.mdc-text-field--focused:not(.mdc-text-field--disabled) .mdc-floating-label{color:rgba(255,0,0,0.87);}.mdc-text-field--focused .mdc-notched-outline__leading,.mdc-text-field--focused .mdc-notched-outline__notch,.mdc-text-field--focused .mdc-notched-outline__trailing{border-width:2px;}.mdc-text-field--focused+.mdc-text-field-helper-line .mdc-text-field-helper-text:not(.mdc-text-field-helper-text--validation-msg){opacity:1;}.mdc-text-field--focused.mdc-text-field--outlined .mdc-notched-outline--notched .mdc-notched-outline__notch{padding-top:2px;}.mdc-text-field--focused.mdc-text-field--outlined.mdc-text-field--textarea .mdc-notched-outline--notched .mdc-notched-outline__notch{padding-top:0;}.mdc-text-field--invalid:not(.mdc-text-field--disabled):hover .mdc-line-ripple::before{border-bottom-color:var(--mdc-theme-error,#b00020);}.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-line-ripple::after{border-bottom-color:var(--mdc-theme-error,#b00020);}.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-floating-label{color:var(--mdc-theme-error,#b00020);}.mdc-text-field--invalid:not(.mdc-text-field--disabled).mdc-text-field--invalid+.mdc-text-field-helper-line .mdc-text-field-helper-text--validation-msg{color:var(--mdc-theme-error,#b00020);}.mdc-text-field--invalid .mdc-text-field__input{caret-color:var(--mdc-theme-error,#b00020);}.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-text-field__icon--trailing{color:var(--mdc-theme-error,#b00020);}.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-line-ripple::before{border-bottom-color:var(--mdc-theme-error,#b00020);}.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-notched-outline__leading,.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-notched-outline__notch,.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-notched-outline__trailing{border-color:var(--mdc-theme-error,#b00020);}.mdc-text-field--invalid:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__leading,.mdc-text-field--invalid:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__notch,.mdc-text-field--invalid:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__trailing{border-color:var(--mdc-theme-error,#b00020);}.mdc-text-field--invalid:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__leading,.mdc-text-field--invalid:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__notch,.mdc-text-field--invalid:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__trailing{border-color:var(--mdc-theme-error,#b00020);}.mdc-text-field--invalid+.mdc-text-field-helper-line .mdc-text-field-helper-text--validation-msg{opacity:1;}.mdc-text-field--disabled{pointer-events:none;}.mdc-text-field--disabled .mdc-text-field__input{color:rgba(0,0,0,0.38);}.mdc-text-field--disabled .mdc-floating-label{color:rgba(0,0,0,0.38);}.mdc-text-field--disabled+.mdc-text-field-helper-line .mdc-text-field-helper-text{color:rgba(0,0,0,0.38);}.mdc-text-field--disabled .mdc-text-field-character-counter,.mdc-text-field--disabled+.mdc-text-field-helper-line .mdc-text-field-character-counter{color:rgba(0,0,0,0.38);}.mdc-text-field--disabled .mdc-text-field__icon--leading{color:rgba(0,0,0,0.3);}.mdc-text-field--disabled .mdc-text-field__icon--trailing{color:rgba(0,0,0,0.3);}.mdc-text-field--disabled .mdc-text-field__affix--prefix{color:rgba(0,0,0,0.38);}.mdc-text-field--disabled .mdc-text-field__affix--suffix{color:rgba(0,0,0,0.38);}.mdc-text-field--disabled .mdc-line-ripple::before{border-bottom-color:rgba(0,0,0,0.06);}.mdc-text-field--disabled .mdc-notched-outline__leading,.mdc-text-field--disabled .mdc-notched-outline__notch,.mdc-text-field--disabled .mdc-notched-outline__trailing{border-color:rgba(0,0,0,0.06);}.mdc-text-field--disabled .mdc-floating-label{cursor:default;}.mdc-text-field--disabled.mdc-text-field--filled{background-color:#fafafa;}.mdc-text-field--disabled.mdc-text-field--filled .mdc-text-field__ripple{display:none;}.mdc-text-field--disabled .mdc-text-field__input{pointer-events:auto;}.mdc-text-field--end-aligned .mdc-text-field__input{text-align:right;}[dir=rtl] .mdc-text-field--end-aligned .mdc-text-field__input,.mdc-text-field--end-aligned .mdc-text-field__input[dir=rtl]{text-align:left;}[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__input,[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__affix,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__input,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__affix{direction:ltr;}[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__affix--prefix,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__affix--prefix{padding-left:0;padding-right:2px;}[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__affix--suffix,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__affix--suffix{padding-left:12px;padding-right:0;}[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__icon--leading,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__icon--leading{order:1;}[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__affix--suffix,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__affix--suffix{order:2;}[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__input,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__input{order:3;}[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__affix--prefix,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__affix--prefix{order:4;}[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__icon--trailing,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__icon--trailing{order:5;}[dir=rtl] .mdc-text-field--ltr-text.mdc-text-field--end-aligned .mdc-text-field__input,.mdc-text-field--ltr-text.mdc-text-field--end-aligned[dir=rtl] .mdc-text-field__input{text-align:right;}[dir=rtl] .mdc-text-field--ltr-text.mdc-text-field--end-aligned .mdc-text-field__affix--prefix,.mdc-text-field--ltr-text.mdc-text-field--end-aligned[dir=rtl] .mdc-text-field__affix--prefix{padding-right:12px;}[dir=rtl] .mdc-text-field--ltr-text.mdc-text-field--end-aligned .mdc-text-field__affix--suffix,.mdc-text-field--ltr-text.mdc-text-field--end-aligned[dir=rtl] .mdc-text-field__affix--suffix{padding-left:2px;}.mdc-text-field-helper-text{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-caption-font-family,var(--mdc-typography-font-family,Roboto,sans-serif));font-size:var(--mdc-typography-caption-font-size,0.75rem);font-weight:var(--mdc-typography-caption-font-weight,400);letter-spacing:var(--mdc-typography-caption-letter-spacing,0.0333333333em);-webkit-text-decoration:var(--mdc-typography-caption-text-decoration,inherit);text-decoration:var(--mdc-typography-caption-text-decoration,inherit);text-transform:var(--mdc-typography-caption-text-transform,inherit);display:block;margin-top:0;line-height:normal;margin:0;opacity:0;will-change:opacity;transition:opacity 150ms cubic-bezier(0.4,0,0.2,1);}.mdc-text-field-helper-text::before{display:inline-block;width:0;height:16px;content:\"\";vertical-align:0;}.mdc-text-field-helper-text--persistent{transition:none;opacity:1;will-change:initial;}.mdc-text-field-character-counter{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-caption-font-family,var(--mdc-typography-font-family,Roboto,sans-serif));font-size:var(--mdc-typography-caption-font-size,0.75rem);font-weight:var(--mdc-typography-caption-font-weight,400);letter-spacing:var(--mdc-typography-caption-letter-spacing,0.0333333333em);-webkit-text-decoration:var(--mdc-typography-caption-text-decoration,inherit);text-decoration:var(--mdc-typography-caption-text-decoration,inherit);text-transform:var(--mdc-typography-caption-text-transform,inherit);display:block;margin-top:0;line-height:normal;margin-left:auto;margin-right:0;padding-left:16px;padding-right:0;white-space:nowrap;}.mdc-text-field-character-counter::before{display:inline-block;width:0;height:16px;content:\"\";vertical-align:0;}[dir=rtl] .mdc-text-field-character-counter,.mdc-text-field-character-counter[dir=rtl]{margin-left:0;margin-right:auto;}[dir=rtl] .mdc-text-field-character-counter,.mdc-text-field-character-counter[dir=rtl]{padding-left:0;padding-right:16px;}.mdc-text-field__icon{align-self:center;cursor:pointer;}.mdc-text-field__icon:not([tabindex]),.mdc-text-field__icon[tabindex=\"-1\"]{cursor:default;pointer-events:none;}.mdc-text-field__icon svg{display:block;}.mdc-text-field__icon--leading{margin-left:16px;margin-right:8px;}[dir=rtl] .mdc-text-field__icon--leading,.mdc-text-field__icon--leading[dir=rtl]{margin-left:8px;margin-right:16px;}.mdc-text-field__icon--trailing{margin-left:12px;margin-right:12px;}[dir=rtl] .mdc-text-field__icon--trailing,.mdc-text-field__icon--trailing[dir=rtl]{margin-left:12px;margin-right:12px;}\n@keyframes mdc-floating-label-shake-float-above-standard {\n  0% {\n    -webkit-transform: translateX(calc(0 - 0%)) translateY(-106%) scale(0.75);\n    transform: translateX(calc(0 - 0%)) translateY(-106%) scale(0.75);\n  }\n  33% {\n    -webkit-animation-timing-function: cubic-bezier(0.5,0,0.701732,0.495819);\n    animation-timing-function: cubic-bezier(0.5,0,0.701732,0.495819);\n    -webkit-transform: translateX(calc(4% - 0%)) translateY(-106%) scale(0.75);\n    transform: translateX(calc(4% - 0%)) translateY(-106%) scale(0.75);\n  }\n  66% {\n    -webkit-animation-timing-function: cubic-bezier(0.302435,0.381352,0.55,0.956352);\n    animation-timing-function: cubic-bezier(0.302435,0.381352,0.55,0.956352);\n    -webkit-transform: translateX(calc(-4% - 0%)) translateY(-106%) scale(0.75);\n    transform: translateX(calc(-4% - 0%)) translateY(-106%) scale(0.75);\n  }\n  100% {\n    -webkit-transform: translateX(calc(0 - 0%)) translateY(-106%) scale(0.75);\n    transform: translateX(calc(0 - 0%)) translateY(-106%) scale(0.75);\n  }\n}\n\n\n@-webkit-keyframes mdc-floating-label-shake-float-above-standard {\n  0% {\n    -webkit--webkit-transform: translateX(calc(0 - 0%)) translateY(-106%) scale(0.75);\n    -webkit-transform: translateX(calc(0 - 0%)) translateY(-106%) scale(0.75);\n  }\n  33% {\n    -webkit--webkit-animation-timing-function: cubic-bezier(0.5,0,0.701732,0.495819);\n    -webkit-animation-timing-function: cubic-bezier(0.5,0,0.701732,0.495819);\n    -webkit--webkit-transform: translateX(calc(4% - 0%)) translateY(-106%) scale(0.75);\n    -webkit-transform: translateX(calc(4% - 0%)) translateY(-106%) scale(0.75);\n  }\n  66% {\n    -webkit--webkit-animation-timing-function: cubic-bezier(0.302435,0.381352,0.55,0.956352);\n    -webkit-animation-timing-function: cubic-bezier(0.302435,0.381352,0.55,0.956352);\n    -webkit--webkit-transform: translateX(calc(-4% - 0%)) translateY(-106%) scale(0.75);\n    -webkit-transform: translateX(calc(-4% - 0%)) translateY(-106%) scale(0.75);\n  }\n  100% {\n    -webkit--webkit-transform: translateX(calc(0 - 0%)) translateY(-106%) scale(0.75);\n    -webkit-transform: translateX(calc(0 - 0%)) translateY(-106%) scale(0.75);\n  }\n}\n\n\n@keyframes mdc-ripple-fg-radius-in {\n  from {\n    -webkit-animation-timing-function: cubic-bezier(0.4,0,0.2,1);\n    animation-timing-function: cubic-bezier(0.4,0,0.2,1);\n    -webkit-transform: translate(var(--mdc-ripple-fg-translate-start,0)) scale(1);\n    transform: translate(var(--mdc-ripple-fg-translate-start,0)) scale(1);\n  }\n  to {\n    -webkit-transform: translate(var(--mdc-ripple-fg-translate-end,0)) scale(var(--mdc-ripple-fg-scale,1));\n    transform: translate(var(--mdc-ripple-fg-translate-end,0)) scale(var(--mdc-ripple-fg-scale,1));\n  }\n}\n\n\n@-webkit-keyframes mdc-ripple-fg-radius-in {\n  from {\n    -webkit--webkit-animation-timing-function: cubic-bezier(0.4,0,0.2,1);\n    -webkit-animation-timing-function: cubic-bezier(0.4,0,0.2,1);\n    -webkit--webkit-transform: translate(var(--mdc-ripple-fg-translate-start,0)) scale(1);\n    -webkit-transform: translate(var(--mdc-ripple-fg-translate-start,0)) scale(1);\n  }\n  to {\n    -webkit--webkit-transform: translate(var(--mdc-ripple-fg-translate-end,0)) scale(var(--mdc-ripple-fg-scale,1));\n    -webkit-transform: translate(var(--mdc-ripple-fg-translate-end,0)) scale(var(--mdc-ripple-fg-scale,1));\n  }\n}\n\n\n@keyframes mdc-ripple-fg-opacity-in {\n  from {\n    -webkit-animation-timing-function: linear;\n    animation-timing-function: linear;\n    opacity: 0;\n  }\n  to {\n    opacity: var(--mdc-ripple-fg-opacity,0);\n  }\n}\n\n\n@-webkit-keyframes mdc-ripple-fg-opacity-in {\n  from {\n    -webkit--webkit-animation-timing-function: linear;\n    -webkit-animation-timing-function: linear;\n    -webkit-opacity: 0;\n  }\n  to {\n    -webkit-opacity: var(--mdc-ripple-fg-opacity,0);\n  }\n}\n\n\n@keyframes mdc-ripple-fg-opacity-out {\n  from {\n    -webkit-animation-timing-function: linear;\n    animation-timing-function: linear;\n    opacity: var(--mdc-ripple-fg-opacity,0);\n  }\n  to {\n    opacity: 0;\n  }\n}\n\n\n@-webkit-keyframes mdc-ripple-fg-opacity-out {\n  from {\n    -webkit--webkit-animation-timing-function: linear;\n    -webkit-animation-timing-function: linear;\n    -webkit-opacity: var(--mdc-ripple-fg-opacity,0);\n  }\n  to {\n    -webkit-opacity: 0;\n  }\n}\n\n\n@keyframes mdc-floating-label-shake-float-above-text-field-outlined {\n  0% {\n    -webkit-transform: translateX(calc(0 - 0%)) translateY(-34.75px) scale(0.75);\n    transform: translateX(calc(0 - 0%)) translateY(-34.75px) scale(0.75);\n  }\n  33% {\n    -webkit-animation-timing-function: cubic-bezier(0.5,0,0.701732,0.495819);\n    animation-timing-function: cubic-bezier(0.5,0,0.701732,0.495819);\n    -webkit-transform: translateX(calc(4% - 0%)) translateY(-34.75px) scale(0.75);\n    transform: translateX(calc(4% - 0%)) translateY(-34.75px) scale(0.75);\n  }\n  66% {\n    -webkit-animation-timing-function: cubic-bezier(0.302435,0.381352,0.55,0.956352);\n    animation-timing-function: cubic-bezier(0.302435,0.381352,0.55,0.956352);\n    -webkit-transform: translateX(calc(-4% - 0%)) translateY(-34.75px) scale(0.75);\n    transform: translateX(calc(-4% - 0%)) translateY(-34.75px) scale(0.75);\n  }\n  100% {\n    -webkit-transform: translateX(calc(0 - 0%)) translateY(-34.75px) scale(0.75);\n    transform: translateX(calc(0 - 0%)) translateY(-34.75px) scale(0.75);\n  }\n}\n\n\n@-webkit-keyframes mdc-floating-label-shake-float-above-text-field-outlined {\n  0% {\n    -webkit--webkit-transform: translateX(calc(0 - 0%)) translateY(-34.75px) scale(0.75);\n    -webkit-transform: translateX(calc(0 - 0%)) translateY(-34.75px) scale(0.75);\n  }\n  33% {\n    -webkit--webkit-animation-timing-function: cubic-bezier(0.5,0,0.701732,0.495819);\n    -webkit-animation-timing-function: cubic-bezier(0.5,0,0.701732,0.495819);\n    -webkit--webkit-transform: translateX(calc(4% - 0%)) translateY(-34.75px) scale(0.75);\n    -webkit-transform: translateX(calc(4% - 0%)) translateY(-34.75px) scale(0.75);\n  }\n  66% {\n    -webkit--webkit-animation-timing-function: cubic-bezier(0.302435,0.381352,0.55,0.956352);\n    -webkit-animation-timing-function: cubic-bezier(0.302435,0.381352,0.55,0.956352);\n    -webkit--webkit-transform: translateX(calc(-4% - 0%)) translateY(-34.75px) scale(0.75);\n    -webkit-transform: translateX(calc(-4% - 0%)) translateY(-34.75px) scale(0.75);\n  }\n  100% {\n    -webkit--webkit-transform: translateX(calc(0 - 0%)) translateY(-34.75px) scale(0.75);\n    -webkit-transform: translateX(calc(0 - 0%)) translateY(-34.75px) scale(0.75);\n  }\n}\n\n\n@keyframes mdc-floating-label-shake-float-above-textarea-filled {\n  0% {\n    -webkit-transform: translateX(calc(0 - 0%)) translateY(-10.25px) scale(0.75);\n    transform: translateX(calc(0 - 0%)) translateY(-10.25px) scale(0.75);\n  }\n  33% {\n    -webkit-animation-timing-function: cubic-bezier(0.5,0,0.701732,0.495819);\n    animation-timing-function: cubic-bezier(0.5,0,0.701732,0.495819);\n    -webkit-transform: translateX(calc(4% - 0%)) translateY(-10.25px) scale(0.75);\n    transform: translateX(calc(4% - 0%)) translateY(-10.25px) scale(0.75);\n  }\n  66% {\n    -webkit-animation-timing-function: cubic-bezier(0.302435,0.381352,0.55,0.956352);\n    animation-timing-function: cubic-bezier(0.302435,0.381352,0.55,0.956352);\n    -webkit-transform: translateX(calc(-4% - 0%)) translateY(-10.25px) scale(0.75);\n    transform: translateX(calc(-4% - 0%)) translateY(-10.25px) scale(0.75);\n  }\n  100% {\n    -webkit-transform: translateX(calc(0 - 0%)) translateY(-10.25px) scale(0.75);\n    transform: translateX(calc(0 - 0%)) translateY(-10.25px) scale(0.75);\n  }\n}\n\n\n@-webkit-keyframes mdc-floating-label-shake-float-above-textarea-filled {\n  0% {\n    -webkit--webkit-transform: translateX(calc(0 - 0%)) translateY(-10.25px) scale(0.75);\n    -webkit-transform: translateX(calc(0 - 0%)) translateY(-10.25px) scale(0.75);\n  }\n  33% {\n    -webkit--webkit-animation-timing-function: cubic-bezier(0.5,0,0.701732,0.495819);\n    -webkit-animation-timing-function: cubic-bezier(0.5,0,0.701732,0.495819);\n    -webkit--webkit-transform: translateX(calc(4% - 0%)) translateY(-10.25px) scale(0.75);\n    -webkit-transform: translateX(calc(4% - 0%)) translateY(-10.25px) scale(0.75);\n  }\n  66% {\n    -webkit--webkit-animation-timing-function: cubic-bezier(0.302435,0.381352,0.55,0.956352);\n    -webkit-animation-timing-function: cubic-bezier(0.302435,0.381352,0.55,0.956352);\n    -webkit--webkit-transform: translateX(calc(-4% - 0%)) translateY(-10.25px) scale(0.75);\n    -webkit-transform: translateX(calc(-4% - 0%)) translateY(-10.25px) scale(0.75);\n  }\n  100% {\n    -webkit--webkit-transform: translateX(calc(0 - 0%)) translateY(-10.25px) scale(0.75);\n    -webkit-transform: translateX(calc(0 - 0%)) translateY(-10.25px) scale(0.75);\n  }\n}\n\n\n@keyframes mdc-floating-label-shake-float-above-textarea-outlined {\n  0% {\n    -webkit-transform: translateX(calc(0 - 0%)) translateY(-24.75px) scale(0.75);\n    transform: translateX(calc(0 - 0%)) translateY(-24.75px) scale(0.75);\n  }\n  33% {\n    -webkit-animation-timing-function: cubic-bezier(0.5,0,0.701732,0.495819);\n    animation-timing-function: cubic-bezier(0.5,0,0.701732,0.495819);\n    -webkit-transform: translateX(calc(4% - 0%)) translateY(-24.75px) scale(0.75);\n    transform: translateX(calc(4% - 0%)) translateY(-24.75px) scale(0.75);\n  }\n  66% {\n    -webkit-animation-timing-function: cubic-bezier(0.302435,0.381352,0.55,0.956352);\n    animation-timing-function: cubic-bezier(0.302435,0.381352,0.55,0.956352);\n    -webkit-transform: translateX(calc(-4% - 0%)) translateY(-24.75px) scale(0.75);\n    transform: translateX(calc(-4% - 0%)) translateY(-24.75px) scale(0.75);\n  }\n  100% {\n    -webkit-transform: translateX(calc(0 - 0%)) translateY(-24.75px) scale(0.75);\n    transform: translateX(calc(0 - 0%)) translateY(-24.75px) scale(0.75);\n  }\n}\n\n\n@-webkit-keyframes mdc-floating-label-shake-float-above-textarea-outlined {\n  0% {\n    -webkit--webkit-transform: translateX(calc(0 - 0%)) translateY(-24.75px) scale(0.75);\n    -webkit-transform: translateX(calc(0 - 0%)) translateY(-24.75px) scale(0.75);\n  }\n  33% {\n    -webkit--webkit-animation-timing-function: cubic-bezier(0.5,0,0.701732,0.495819);\n    -webkit-animation-timing-function: cubic-bezier(0.5,0,0.701732,0.495819);\n    -webkit--webkit-transform: translateX(calc(4% - 0%)) translateY(-24.75px) scale(0.75);\n    -webkit-transform: translateX(calc(4% - 0%)) translateY(-24.75px) scale(0.75);\n  }\n  66% {\n    -webkit--webkit-animation-timing-function: cubic-bezier(0.302435,0.381352,0.55,0.956352);\n    -webkit-animation-timing-function: cubic-bezier(0.302435,0.381352,0.55,0.956352);\n    -webkit--webkit-transform: translateX(calc(-4% - 0%)) translateY(-24.75px) scale(0.75);\n    -webkit-transform: translateX(calc(-4% - 0%)) translateY(-24.75px) scale(0.75);\n  }\n  100% {\n    -webkit--webkit-transform: translateX(calc(0 - 0%)) translateY(-24.75px) scale(0.75);\n    -webkit-transform: translateX(calc(0 - 0%)) translateY(-24.75px) scale(0.75);\n  }\n}\n\n\n@keyframes mdc-floating-label-shake-float-above-text-field-outlined-leading-icon {\n  0% {\n    -webkit-transform: translateX(calc(0 - 32px)) translateY(-34.75px) scale(0.75);\n    transform: translateX(calc(0 - 32px)) translateY(-34.75px) scale(0.75);\n  }\n  33% {\n    -webkit-animation-timing-function: cubic-bezier(0.5,0,0.701732,0.495819);\n    animation-timing-function: cubic-bezier(0.5,0,0.701732,0.495819);\n    -webkit-transform: translateX(calc(4% - 32px)) translateY(-34.75px) scale(0.75);\n    transform: translateX(calc(4% - 32px)) translateY(-34.75px) scale(0.75);\n  }\n  66% {\n    -webkit-animation-timing-function: cubic-bezier(0.302435,0.381352,0.55,0.956352);\n    animation-timing-function: cubic-bezier(0.302435,0.381352,0.55,0.956352);\n    -webkit-transform: translateX(calc(-4% - 32px)) translateY(-34.75px) scale(0.75);\n    transform: translateX(calc(-4% - 32px)) translateY(-34.75px) scale(0.75);\n  }\n  100% {\n    -webkit-transform: translateX(calc(0 - 32px)) translateY(-34.75px) scale(0.75);\n    transform: translateX(calc(0 - 32px)) translateY(-34.75px) scale(0.75);\n  }\n}\n\n\n@-webkit-keyframes mdc-floating-label-shake-float-above-text-field-outlined-leading-icon {\n  0% {\n    -webkit--webkit-transform: translateX(calc(0 - 32px)) translateY(-34.75px) scale(0.75);\n    -webkit-transform: translateX(calc(0 - 32px)) translateY(-34.75px) scale(0.75);\n  }\n  33% {\n    -webkit--webkit-animation-timing-function: cubic-bezier(0.5,0,0.701732,0.495819);\n    -webkit-animation-timing-function: cubic-bezier(0.5,0,0.701732,0.495819);\n    -webkit--webkit-transform: translateX(calc(4% - 32px)) translateY(-34.75px) scale(0.75);\n    -webkit-transform: translateX(calc(4% - 32px)) translateY(-34.75px) scale(0.75);\n  }\n  66% {\n    -webkit--webkit-animation-timing-function: cubic-bezier(0.302435,0.381352,0.55,0.956352);\n    -webkit-animation-timing-function: cubic-bezier(0.302435,0.381352,0.55,0.956352);\n    -webkit--webkit-transform: translateX(calc(-4% - 32px)) translateY(-34.75px) scale(0.75);\n    -webkit-transform: translateX(calc(-4% - 32px)) translateY(-34.75px) scale(0.75);\n  }\n  100% {\n    -webkit--webkit-transform: translateX(calc(0 - 32px)) translateY(-34.75px) scale(0.75);\n    -webkit-transform: translateX(calc(0 - 32px)) translateY(-34.75px) scale(0.75);\n  }\n}\n\n\n@keyframes mdc-floating-label-shake-float-above-text-field-outlined-leading-icon-rtl {\n  0% {\n    -webkit-transform: translateX(calc(0 - -32px)) translateY(-34.75px) scale(0.75);\n    transform: translateX(calc(0 - -32px)) translateY(-34.75px) scale(0.75);\n  }\n  33% {\n    -webkit-animation-timing-function: cubic-bezier(0.5,0,0.701732,0.495819);\n    animation-timing-function: cubic-bezier(0.5,0,0.701732,0.495819);\n    -webkit-transform: translateX(calc(4% - -32px)) translateY(-34.75px) scale(0.75);\n    transform: translateX(calc(4% - -32px)) translateY(-34.75px) scale(0.75);\n  }\n  66% {\n    -webkit-animation-timing-function: cubic-bezier(0.302435,0.381352,0.55,0.956352);\n    animation-timing-function: cubic-bezier(0.302435,0.381352,0.55,0.956352);\n    -webkit-transform: translateX(calc(-4% - -32px)) translateY(-34.75px) scale(0.75);\n    transform: translateX(calc(-4% - -32px)) translateY(-34.75px) scale(0.75);\n  }\n  100% {\n    -webkit-transform: translateX(calc(0 - -32px)) translateY(-34.75px) scale(0.75);\n    transform: translateX(calc(0 - -32px)) translateY(-34.75px) scale(0.75);\n  }\n}\n\n\n@-webkit-keyframes mdc-floating-label-shake-float-above-text-field-outlined-leading-icon-rtl {\n  0% {\n    -webkit--webkit-transform: translateX(calc(0 - -32px)) translateY(-34.75px) scale(0.75);\n    -webkit-transform: translateX(calc(0 - -32px)) translateY(-34.75px) scale(0.75);\n  }\n  33% {\n    -webkit--webkit-animation-timing-function: cubic-bezier(0.5,0,0.701732,0.495819);\n    -webkit-animation-timing-function: cubic-bezier(0.5,0,0.701732,0.495819);\n    -webkit--webkit-transform: translateX(calc(4% - -32px)) translateY(-34.75px) scale(0.75);\n    -webkit-transform: translateX(calc(4% - -32px)) translateY(-34.75px) scale(0.75);\n  }\n  66% {\n    -webkit--webkit-animation-timing-function: cubic-bezier(0.302435,0.381352,0.55,0.956352);\n    -webkit-animation-timing-function: cubic-bezier(0.302435,0.381352,0.55,0.956352);\n    -webkit--webkit-transform: translateX(calc(-4% - -32px)) translateY(-34.75px) scale(0.75);\n    -webkit-transform: translateX(calc(-4% - -32px)) translateY(-34.75px) scale(0.75);\n  }\n  100% {\n    -webkit--webkit-transform: translateX(calc(0 - -32px)) translateY(-34.75px) scale(0.75);\n    -webkit-transform: translateX(calc(0 - -32px)) translateY(-34.75px) scale(0.75);\n  }\n}\n\n.mdc-text-field:not(.mdc-text-field--disabled) .mdc-text-field__input::-webkit-input-placeholder{color:rgba(0,0,0,0.54);}.mdc-text-field:not(.mdc-text-field--disabled) .mdc-text-field__input:-ms-input-placeholder{color:rgba(0,0,0,0.54);}.mdc-text-field:not(.mdc-text-field--disabled) .mdc-text-field__input::-ms-input-placeholder{color:rgba(0,0,0,0.54);}.mdc-text-field:not(.mdc-text-field--disabled) .mdc-text-field__input::placeholder{color:rgba(0,0,0,0.54);}.mdc-text-field:not(.mdc-text-field--disabled) .mdc-text-field__input:-ms-input-placeholder{color:rgba(0,0,0,0.54);}.mdc-text-field__input::-webkit-input-placeholder{transition:opacity 67ms cubic-bezier(0.4,0,0.2,1);opacity:0;}.mdc-text-field__input:-ms-input-placeholder{transition:opacity 67ms cubic-bezier(0.4,0,0.2,1);opacity:0;}.mdc-text-field__input::-ms-input-placeholder{transition:opacity 67ms cubic-bezier(0.4,0,0.2,1);opacity:0;}.mdc-text-field__input::placeholder{transition:opacity 67ms cubic-bezier(0.4,0,0.2,1);opacity:0;}.mdc-text-field__input:-ms-input-placeholder{transition:opacity 67ms cubic-bezier(0.4,0,0.2,1);opacity:0;}.mdc-text-field--fullwidth .mdc-text-field__input::-webkit-input-placeholder,.mdc-text-field--no-label .mdc-text-field__input::-webkit-input-placeholder,.mdc-text-field--focused .mdc-text-field__input::-webkit-input-placeholder{transition-delay:40ms;transition-duration:110ms;opacity:1;}.mdc-text-field--fullwidth .mdc-text-field__input:-ms-input-placeholder,.mdc-text-field--no-label .mdc-text-field__input:-ms-input-placeholder,.mdc-text-field--focused .mdc-text-field__input:-ms-input-placeholder{transition-delay:40ms;transition-duration:110ms;opacity:1;}.mdc-text-field--fullwidth .mdc-text-field__input::-ms-input-placeholder,.mdc-text-field--no-label .mdc-text-field__input::-ms-input-placeholder,.mdc-text-field--focused .mdc-text-field__input::-ms-input-placeholder{transition-delay:40ms;transition-duration:110ms;opacity:1;}.mdc-text-field--fullwidth .mdc-text-field__input::placeholder,.mdc-text-field--no-label .mdc-text-field__input::placeholder,.mdc-text-field--focused .mdc-text-field__input::placeholder{transition-delay:40ms;transition-duration:110ms;opacity:1;}.mdc-text-field--fullwidth .mdc-text-field__input:-ms-input-placeholder,.mdc-text-field--no-label .mdc-text-field__input:-ms-input-placeholder,.mdc-text-field--focused .mdc-text-field__input:-ms-input-placeholder{transition-delay:40ms;transition-duration:110ms;opacity:1;}.mdc-text-field--disabled .mdc-text-field__input::-webkit-input-placeholder{color:rgba(0,0,0,0.38);}.mdc-text-field--disabled .mdc-text-field__input:-ms-input-placeholder{color:rgba(0,0,0,0.38);}.mdc-text-field--disabled .mdc-text-field__input::-ms-input-placeholder{color:rgba(0,0,0,0.38);}.mdc-text-field--disabled .mdc-text-field__input::placeholder{color:rgba(0,0,0,0.38);}.mdc-text-field--disabled .mdc-text-field__input:-ms-input-placeholder{color:rgba(0,0,0,0.38);}.mdc-text-field:not(.mdc-text-field--disabled):not(.mdc-text-field--invalid) .mdc-floating-label:not(.mdc-text-field--invalid){color:rgba(174,174,153,0.6823529411764706);}.mdc-text-field--focused:not(.mdc-text-field--disabled):not(.mdc-text-field--invalid) .mdc-floating-label:not(.mdc-text-field--invalid){color:rgba(174,174,153,0.6823529411764706);}.mdc-text-field:not(.mdc-text-field--disabled):not(.mdc-text-field--invalid) .mdc-text-field__input:not(.mdc-text-field--invalid){color:#000000;}.mdc-text-field__input:not(.mdc-text-field--disabled){user-select:text;-webkit-user-select:text;autocapitalize:off;autocorrect:off;}.mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--invalid) .mdc-notched-outline__leading:not(.mdc-text-field--invalid),.mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--invalid) .mdc-notched-outline__notch:not(.mdc-text-field--invalid),.mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--invalid) .mdc-notched-outline__trailing:not(.mdc-text-field--invalid){border-color:#a5acb2;}.mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--invalid):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__leading:not(.mdc-text-field--invalid),.mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--invalid):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__notch:not(.mdc-text-field--invalid),.mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--invalid):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__trailing:not(.mdc-text-field--invalid){border-color:#a5acb2;}.mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--invalid).mdc-text-field--focused:not(.mdc-text-field--invalid) .mdc-notched-outline__leading:not(.mdc-text-field--invalid),.mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--invalid).mdc-text-field--focused:not(.mdc-text-field--invalid) .mdc-notched-outline__notch:not(.mdc-text-field--invalid),.mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--invalid).mdc-text-field--focused:not(.mdc-text-field--invalid) .mdc-notched-outline__trailing:not(.mdc-text-field--invalid){border-color:#a5acb2;}.rcheckbox{display:block;position:relative;margin-bottom:12px;cursor:pointer;-webkit-user-select:none;user-select:none;}.rcheckbox--disabled{color:#c9ccd8;}.rcheckbox input{position:absolute;opacity:0;height:0;width:0;}.checkmark{position:absolute;cursor:inherit;top:2px;left:3px;height:21px;width:21px;border-width:1px;border-radius:2px;background-color:#ffffff;}.rcheckbox:not(.rcheckbox--disabled) .checkmark{border:1px solid #7f7f7f;}.rcheckbox:not(.rcheckbox--disabled) input:checked ~ .checkmark{background-color:#7f7f7f;}.rcheckbox.rcheckbox--disabled input:checked ~ .checkmark{background-color:#c9ccd8;}.rcheckbox.rcheckbox--disabled input:not(:checked) ~ .checkmark{border-color:#c9ccd8;}.rcheckbox:not(.rcheckbox--disabled):hover input:not(:checked) ~ .checkmark{background-color:#dddddd;}.checkmark:after{content:\"\";position:absolute;display:none;}.rcheckbox input:checked ~ .checkmark:after{display:block;}.rcheckbox .checkmark:after{left:6px;top:3px;width:4px;height:8px;border-style:solid;border-color:#ffffff;border-width:0 2px 2px 0;-webkit-transform:rotate(45deg);transform:rotate(45deg);}.rcheckbox_text{cursor:inherit;padding-left:30px;display:inline-block;padding-top:3px;}.cropper-container{direction:ltr;font-size:0;line-height:0;position:relative;-ms-touch-action:none;touch-action:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;}.cropper-container img{backface-visibility:hidden;display:block;height:100%;image-orientation:0deg;max-height:none;max-width:none;min-height:0;min-width:0;width:100%;}.cropper-wrap-box,.cropper-canvas,.cropper-drag-box,.cropper-crop-box,.cropper-modal{bottom:0;left:0;position:absolute;right:0;top:0;}.cropper-wrap-box,.cropper-canvas{overflow:hidden;}.cropper-drag-box{background-color:#fff;opacity:0;}.cropper-modal{background-color:#000;opacity:0.5;}.cropper-view-box{display:block;height:100%;outline:1px solid #39f;outline-color:rgba(51,153,255,0.75);overflow:hidden;width:100%;}.cropper-dashed{border:0 dashed #eee;display:block;opacity:0.5;position:absolute;}.cropper-dashed.dashed-h{border-bottom-width:1px;border-top-width:1px;height:calc(100%/3);left:0;top:calc(100%/3);width:100%;}.cropper-dashed.dashed-v{border-left-width:1px;border-right-width:1px;height:100%;left:calc(100%/3);top:0;width:calc(100%/3);}.cropper-center{display:block;height:0;left:50%;opacity:0.75;position:absolute;top:50%;width:0;}.cropper-center::before,.cropper-center::after{background-color:#eee;content:' ';display:block;position:absolute;}.cropper-center::before{height:1px;left:-3px;top:0;width:7px;}.cropper-center::after{height:7px;left:0;top:-3px;width:1px;}.cropper-face,.cropper-line,.cropper-point{display:block;height:100%;opacity:0.1;position:absolute;width:100%;}.cropper-face{background-color:#fff;left:0;top:0;}.cropper-line{background-color:#39f;}.cropper-line.line-e{cursor:ew-resize;right:-3px;top:0;width:5px;}.cropper-line.line-n{cursor:ns-resize;height:5px;left:0;top:-3px;}.cropper-line.line-w{cursor:ew-resize;left:-3px;top:0;width:5px;}.cropper-line.line-s{bottom:-3px;cursor:ns-resize;height:5px;left:0;}.cropper-point{background-color:#39f;height:5px;opacity:0.75;width:5px;}.cropper-point.point-e{cursor:ew-resize;margin-top:-3px;right:-3px;top:50%;}.cropper-point.point-n{cursor:ns-resize;left:50%;margin-left:-3px;top:-3px;}.cropper-point.point-w{cursor:ew-resize;left:-3px;margin-top:-3px;top:50%;}.cropper-point.point-s{bottom:-3px;cursor:s-resize;left:50%;margin-left:-3px;}.cropper-point.point-ne{cursor:nesw-resize;right:-3px;top:-3px;}.cropper-point.point-nw{cursor:nwse-resize;left:-3px;top:-3px;}.cropper-point.point-sw{bottom:-3px;cursor:nesw-resize;left:-3px;}.cropper-point.point-se{bottom:-3px;cursor:nwse-resize;height:20px;opacity:1;right:-3px;width:20px;}.cropper-point.point-se::before{background-color:#39f;bottom:-50%;content:' ';display:block;height:200%;opacity:0;position:absolute;right:-50%;width:200%;}.cropper-invisible{opacity:0;}.cropper-bg{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAAA3NCSVQICAjb4U/gAAAABlBMVEXMzMz////TjRV2AAAACXBIWXMAAArrAAAK6wGCiw1aAAAAHHRFWHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1M26LyyjAAAABFJREFUCJlj+M/AgBVhF/0PAH6/D/HkDxOGAAAAAElFTkSuQmCC);}.cropper-hide{display:block;height:0;position:absolute;width:0;}.cropper-hidden{display:none;}.cropper-move{cursor:move;}.cropper-crop{cursor:crosshair;}.cropper-disabled .cropper-drag-box,.cropper-disabled .cropper-face,.cropper-disabled .cropper-line,.cropper-disabled .cropper-point{cursor:not-allowed;}.pnlm-container{margin:0;padding:0;overflow:hidden;position:relative;cursor:default;width:100%;height:100%;font-family:Helvetica,\"Nimbus Sans L\",\"Liberation Sans\",Arial,sans-serif;background:#f4f4f4 url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2267%22%20height%3D%22100%22%20viewBox%3D%220%200%2067%20100%22%3E%0A%3Cpath%20stroke%3D%22%23ccc%22%20fill%3D%22none%22%20d%3D%22M33.5%2C50%2C0%2C63%2C33.5%2C75%2C67%2C63%2C33.5%2C50m-33.5-50%2C67%2C25m-0.5%2C0%2C0%2C75m-66.5-75%2C67-25m-33.5%2C75%2C0%2C25m0-100%2C0%2C50%22%2F%3E%0A%3C%2Fsvg%3E%0A) repeat;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-o-user-select:none;-ms-user-select:none;user-select:none;outline:0;line-height:1.4;contain:content;}.pnlm-container *{box-sizing:content-box;}.pnlm-ui{position:absolute;width:100%;height:100%;z-index:1;}.pnlm-grab{cursor:url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20height%3D%2226%22%20width%3D%2226%22%3E%0A%3Cpath%20stroke%3D%22%23000%22%20stroke-width%3D%221px%22%20fill%3D%22%23fff%22%20d%3D%22m15.3%2020.5s6.38-6.73%204.64-8.24-3.47%201.01-3.47%201.01%203.61-5.72%201.41-6.49c-2.2-0.769-3.33%204.36-3.33%204.36s0.873-5.76-1.06-5.76-1.58%205.39-1.58%205.39-0.574-4.59-2.18-4.12c-1.61%200.468-0.572%205.51-0.572%205.51s-1.58-4.89-2.93-3.79c-1.35%201.11%200.258%205.25%200.572%206.62%200.836%202.43%202.03%202.94%202.17%205.55%22%2F%3E%0A%3C%2Fsvg%3E%0A) 12 8,default;}.pnlm-grabbing{cursor:url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20height%3D%2226%22%20width%3D%2226%22%3E%0A%3Cpath%20stroke%3D%22%23000%22%20stroke-width%3D%221px%22%20fill%3D%22%23fff%22%20d%3D%22m15.3%2020.5s5.07-5.29%203.77-6.74c-1.31-1.45-2.53%200.14-2.53%200.14s2.74-3.29%200.535-4.06c-2.2-0.769-2.52%201.3-2.52%201.3s0.81-2.13-1.12-2.13-1.52%201.77-1.52%201.77-0.261-1.59-1.87-1.12c-1.61%200.468-0.874%202.17-0.874%202.17s-0.651-1.55-2-0.445c-1.35%201.11-0.68%202.25-0.365%203.62%200.836%202.43%202.03%202.94%202.17%205.55%22%2F%3E%0A%3C%2Fsvg%3E%0A) 12 8,default;}.pnlm-sprite{background-image:url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2226%22%20height%3D%22208%22%3E%0A%3Ccircle%20fill-opacity%3D%22.78%22%20cy%3D%22117%22%20cx%3D%2213%22%20r%3D%2211%22%20fill%3D%22%23fff%22%2F%3E%0A%3Ccircle%20fill-opacity%3D%22.78%22%20cy%3D%22143%22%20cx%3D%2213%22%20r%3D%2211%22%20fill%3D%22%23fff%22%2F%3E%0A%3Ccircle%20cy%3D%22169%22%20cx%3D%2213%22%20r%3D%227%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%2F%3E%0A%3Ccircle%20cy%3D%22195%22%20cx%3D%2213%22%20r%3D%227%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%2F%3E%0A%3Ccircle%20cx%3D%2213%22%20cy%3D%22195%22%20r%3D%222.5%22%2F%3E%0A%3Cpath%20d%3D%22m5%2083v6h2v-4h4v-2zm10%200v2h4v4h2v-6zm-5%205v6h6v-6zm-5%205v6h6v-2h-4v-4zm14%200v4h-4v2h6v-6z%22%2F%3E%0A%3Cpath%20d%3D%22m13%20110a7%207%200%200%200%20-7%207%207%207%200%200%200%207%207%207%207%200%200%200%207%20-7%207%207%200%200%200%20-7%20-7zm-1%203h2v2h-2zm0%203h2v5h-2z%22%2F%3E%0A%3Cpath%20d%3D%22m5%2057v6h2v-4h4v-2zm10%200v2h4v4h2v-6zm-10%2010v6h6v-2h-4v-4zm14%200v4h-4v2h6v-6z%22%2F%3E%0A%3Cpath%20d%3D%22m17%2038v2h-8v-2z%22%2F%3E%0A%3Cpath%20d%3D%22m12%209v3h-3v2h3v3h2v-3h3v-2h-3v-3z%22%2F%3E%0A%3Cpath%20d%3D%22m13%20136-6.125%206.125h4.375v7.875h3.5v-7.875h4.375z%22%2F%3E%0A%3Cpath%20d%3D%22m10.428%20173.33v-5.77l5-2.89v5.77zm1-1.73%203-1.73-3.001-1.74z%22%2F%3E%0A%3C%2Fsvg%3E%0A);}.pnlm-container:-moz-full-screen{height:100%;width:100%;position:static;}.pnlm-container:-webkit-full-screen{height:100%;width:100%;position:static;}.pnlm-container:-ms-fullscreen{height:100%;width:100%;position:static;}.pnlm-container:fullscreen{height:100%;width:100%;position:static;}.pnlm-render-container{cursor:inherit;position:absolute;height:100%;width:100%;}.pnlm-controls{margin-top:4px;background-color:#fff;border:1px solid #999;border-color:rgba(0,0,0,0.4);border-radius:3px;cursor:pointer;z-index:2;-webkit-transform:translateZ(9999px);transform:translateZ(9999px);}.pnlm-control:hover{background-color:#f8f8f8;}.pnlm-controls-container{position:absolute;top:0;left:4px;z-index:1;}.pnlm-zoom-controls{width:26px;height:52px;}.pnlm-zoom-in{width:100%;height:50%;position:absolute;top:0;border-radius:3px 3px 0 0;}.pnlm-zoom-out{width:100%;height:50%;position:absolute;bottom:0;background-position:0 -26px;border-top:1px solid #ddd;border-top-color:rgba(0,0,0,0.10);border-radius:0 0 3px 3px;}.pnlm-fullscreen-toggle-button,.pnlm-orientation-button,.pnlm-hot-spot-debug-indicator{width:26px;height:26px;}.pnlm-hot-spot-debug-indicator{position:absolute;top:50%;left:50%;width:26px;height:26px;margin:-13px 0 0 -13px;background-color:rgba(255,255,255,0.5);border-radius:13px;display:none;}.pnlm-orientation-button-inactive{background-position:0 -156px;}.pnlm-orientation-button-active{background-position:0 -182px;}.pnlm-fullscreen-toggle-button-inactive{background-position:0 -52px;}.pnlm-fullscreen-toggle-button-active{background-position:0 -78px;}.pnlm-panorama-info{position:absolute;bottom:4px;background-color:rgba(0,0,0,0.7);border-radius:0 3px 3px 0;padding-right:10px;color:#fff;text-align:left;display:none;z-index:2;-webkit-transform:translateZ(9999px);transform:translateZ(9999px);}.pnlm-title-box{position:relative;font-size:20px;display:table;padding-left:5px;margin-bottom:3px;}.pnlm-author-box{position:relative;font-size:12px;display:table;padding-left:5px;}.pnlm-load-box{position:absolute;top:50%;left:50%;width:200px;height:150px;margin:-75px 0 0 -100px;background-color:rgba(0,0,0,0.7);border-radius:3px;text-align:center;font-size:20px;display:none;color:#fff;}.pnlm-load-box p{margin:20px 0;}.pnlm-lbox{position:absolute;top:50%;left:50%;width:20px;height:20px;margin:-10px 0 0 -10px;display:none;}.pnlm-loading{animation-duration:1.5s;-webkit-animation-duration:1.5s;animation-name:pnlm-mv;-webkit-animation-name:pnlm-mv;animation-iteration-count:infinite;-webkit-animation-iteration-count:infinite;animation-timing-function:linear;-webkit-animation-timing-function:linear;height:10px;width:10px;background-color:#fff;position:relative;}.pnlm-load-button{position:absolute;top:50%;left:50%;width:200px;height:100px;margin:-50px 0 0 -100px;background-color:rgba(0,0,0,.7);border-radius:3px;text-align:center;font-size:20px;display:table;color:#fff;cursor:pointer;}.pnlm-load-button:hover{background-color:rgba(0,0,0,.8);}.pnlm-load-button p{display:table-cell;vertical-align:middle;}.pnlm-info-box{font-size:15px;position:absolute;top:50%;left:50%;width:200px;height:150px;margin:-75px 0 0 -100px;background-color:#000;border-radius:3px;display:table;text-align:center;color:#fff;table-layout:fixed;}.pnlm-info-box a,.pnlm-author-box a{color:#fff;word-wrap:break-word;overflow-wrap:break-word;}.pnlm-info-box p{display:table-cell;vertical-align:middle;padding:0 5px 0 5px;}.pnlm-error-msg{display:none;}.pnlm-about-msg{font-size:11px;line-height:11px;color:#fff;padding:5px 8px 5px 8px;background:rgba(0,0,0,0.7);border-radius:3px;position:absolute;top:50px;left:50px;display:none;opacity:0;-moz-transition:opacity .3s ease-in-out;-webkit-transition:opacity .3s ease-in-out;-o-transition:opacity .3s ease-in-out;-ms-transition:opacity .3s ease-in-out;transition:opacity .3s ease-in-out;z-index:1;}.pnlm-about-msg a:link,.pnlm-about-msg a:visited{color:#fff;}.pnlm-about-msg a:hover,.pnlm-about-msg a:active{color:#eee;}.pnlm-hotspot-base{position:absolute;visibility:hidden;cursor:default;vertical-align:middle;top:0;z-index:1;}.pnlm-hotspot{height:26px;width:26px;border-radius:13px;}.pnlm-hotspot:hover{background-color:rgba(255,255,255,0.2);}.pnlm-hotspot.pnlm-info{background-position:0 -104px;}.pnlm-hotspot.pnlm-scene{background-position:0 -130px;}div.pnlm-tooltip span{visibility:hidden;position:absolute;border-radius:3px;background-color:rgba(0,0,0,0.7);color:#fff;text-align:center;max-width:200px;padding:5px 10px;margin-left:-220px;cursor:default;}div.pnlm-tooltip:hover span{visibility:visible;}div.pnlm-tooltip:hover span:after{content:'';position:absolute;width:0;height:0;border-width:10px;border-style:solid;border-color:rgba(0,0,0,0.7) transparent transparent transparent;bottom:-20px;left:-10px;margin:0 50%;}.pnlm-compass{position:absolute;width:50px;height:50px;right:4px;bottom:4px;border-radius:25px;background-image:url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20height%3D%2250%22%20width%3D%2250%22%3E%0A%3Cpath%20d%3D%22m24.5078%206-3.2578%2018h7.5l-3.25781-18h-0.984376zm-3.2578%2020%203.2578%2018h0.9844l3.2578-18h-7.5zm1.19531%200.9941h5.10938l-2.5547%2014.1075-2.5547-14.1075z%22%2F%3E%0A%3C%2Fsvg%3E%0A);cursor:default;display:none;}.pnlm-world{position:absolute;left:50%;top:50%;}.pnlm-face{position:absolute;-webkit-transform-origin:0 0;transform-origin:0 0;}.pnlm-dragfix,.pnlm-preview-img{position:absolute;height:100%;width:100%;cursor:inherit;}.pnlm-preview-img{background-size:cover;background-position:center;}.pnlm-lbar{width:150px;margin:0 auto;border:#fff 1px solid;height:6px;}.pnlm-lbar-fill{background:#fff;height:100%;width:0;}.pnlm-lmsg{font-size:12px;}.pnlm-fade-img{position:absolute;top:0;left:0;}.pnlm-pointer{cursor:pointer;}\n@keyframes pnlm-mv {\n  from {\n    left: 0;\n    top: 0;\n  }\n  25% {\n    left: 10px;\n    top: 0;\n  }\n  50% {\n    left: 10px;\n    top: 10px;\n  }\n  75% {\n    left: 0;\n    top: 10px;\n  }\n  to {\n    left: 0;\n    top: 0;\n  }\n}\n\n\n@-webkit-keyframes pnlm-mv {\n  from {\n    -webkit-left: 0;\n    -webkit-top: 0;\n  }\n  25% {\n    -webkit-left: 10px;\n    -webkit-top: 0;\n  }\n  50% {\n    -webkit-left: 10px;\n    -webkit-top: 10px;\n  }\n  75% {\n    -webkit-left: 0;\n    -webkit-top: 10px;\n  }\n  to {\n    -webkit-left: 0;\n    -webkit-top: 0;\n  }\n}\n\n.hotspot360rect{height:20px;width:20px;}.hotspot360rect:hover span{display:inline;}.hotspot360rect:hover{z-index:10;}.pnlm-dragfix,.pnlm-preview-img{position:absolute;height:100%;width:100%;cursor:inherit;}"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": -1,
          "_transferSize": 14730,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:11.649Z",
        "time": 97.35200006980449,
        "timings": {
          "blocked": 3.245000069476664,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0.4039999999999999,
          "wait": 92.33000002300739,
          "receive": 1.3729999773204327,
          "_blocked_queueing": 0.8500000694766641,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_connectionId": "1726423",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "parser",
          "url": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513",
          "lineNumber": 1
        },
        "_priority": "High",
        "_resourceType": "script",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/ekat/WEB-RES/js/clipboard.js_javaviewer_7.26.1.11.js",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": ":authority",
              "value": "ekat.festool.de"
            },
            {
              "name": ":method",
              "value": "GET"
            },
            {
              "name": ":path",
              "value": "/ekat/WEB-RES/js/clipboard.js_javaviewer_7.26.1.11.js"
            },
            {
              "name": ":scheme",
              "value": "https"
            },
            {
              "name": "accept",
              "value": "*/*"
            },
            {
              "name": "accept-encoding",
              "value": "gzip, deflate, br, zstd"
            },
            {
              "name": "accept-language",
              "value": "en-GB,en-US;q=0.9,en;q=0.8"
            },
            {
              "name": "if-modified-since",
              "value": "Thu, 20 Aug 2026 07:47:07 GMT"
            },
            {
              "name": "if-none-match",
              "value": "W/\"47250-1787216819880\""
            },
            {
              "name": "priority",
              "value": "u=1"
            },
            {
              "name": "referer",
              "value": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            },
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "sec-fetch-dest",
              "value": "script"
            },
            {
              "name": "sec-fetch-mode",
              "value": "no-cors"
            },
            {
              "name": "sec-fetch-site",
              "value": "same-origin"
            },
            {
              "name": "user-agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            }
          ],
          "queryString": [],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "cache-control",
              "value": "public"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "content-length",
              "value": "6568"
            },
            {
              "name": "content-type",
              "value": "text/javascript"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 09:09:51 GMT"
            },
            {
              "name": "etag",
              "value": "W/\"47250-1787216991676\""
            },
            {
              "name": "expires",
              "value": "Thu, 20 Aug 2026 09:11:51 GMT"
            },
            {
              "name": "last-modified",
              "value": "Thu, 20 Aug 2026 07:47:07 GMT"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "pragma",
              "value": "cache"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "x-robots-tag",
              "value": "noindex"
            }
          ],
          "cookies": [],
          "content": {
            "size": 47250,
            "mimeType": "text/javascript",
            "text": "/*!\r\n * clipboard.js v2.0.0\r\n * https://zenorocha.github.io/clipboard.js\r\n * \r\n * Licensed MIT © Zeno Rocha\r\n */\r\n(function webpackUniversalModuleDefinition(root, factory) {\r\n    if (typeof exports === 'object' && typeof module === 'object') {\r\n        module.exports = factory();\r\n    } else if (typeof define === 'function' && define.amd) {\r\n        define([], factory);\r\n    } else if (typeof exports === 'object') {\r\n        exports[\"ClipboardJS\"] = factory();\r\n    } else {\r\n        root[\"ClipboardJS\"] = factory();\r\n    }\r\n})(this, function() {\r\n    return /******/ (function(modules) { // webpackBootstrap\r\n        /******/ \t// The module cache\r\n        /******/\r\n        var installedModules = {};\r\n        /******/\r\n        /******/ \t// The require function\r\n        /******/\r\n        function __webpack_require__(moduleId) {\r\n            /******/\r\n            /******/ \t\t// Check if module is in cache\r\n            /******/\r\n            if (installedModules[moduleId]) {\r\n                /******/\r\n                return installedModules[moduleId].exports;\r\n                /******/\r\n            }\r\n            /******/ \t\t// Create a new module (and put it into the cache)\r\n            /******/\r\n            var module = installedModules[moduleId] = {\r\n                /******/            i: moduleId,\r\n                /******/            l: false,\r\n                /******/            exports: {}\r\n                /******/\r\n            };\r\n            /******/\r\n            /******/ \t\t// Execute the module function\r\n            /******/\r\n            modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\r\n            /******/\r\n            /******/ \t\t// Flag the module as loaded\r\n            /******/\r\n            module.l = true;\r\n            /******/\r\n            /******/ \t\t// Return the exports of the module\r\n            /******/\r\n            return module.exports;\r\n            /******/\r\n        }\r\n\r\n        /******/\r\n        /******/\r\n        /******/ \t// expose the modules object (__webpack_modules__)\r\n        /******/\r\n        __webpack_require__.m = modules;\r\n        /******/\r\n        /******/ \t// expose the module cache\r\n        /******/\r\n        __webpack_require__.c = installedModules;\r\n        /******/\r\n        /******/ \t// identity function for calling harmony imports with the correct context\r\n        /******/\r\n        __webpack_require__.i = function(value) {\r\n            return value;\r\n        };\r\n        /******/\r\n        /******/ \t// define getter function for harmony exports\r\n        /******/\r\n        __webpack_require__.d = function(exports, name, getter) {\r\n            /******/\r\n            if (!__webpack_require__.o(exports, name)) {\r\n                /******/\r\n                Object.defineProperty(exports, name, {\r\n                    /******/                configurable: false,\r\n                    /******/                enumerable: true,\r\n                    /******/                get: getter\r\n                    /******/\r\n                });\r\n                /******/\r\n            }\r\n            /******/\r\n        };\r\n        /******/\r\n        /******/ \t// getDefaultExport function for compatibility with non-harmony modules\r\n        /******/\r\n        __webpack_require__.n = function(module) {\r\n            /******/\r\n            var getter = module && module.__esModule ?\r\n                    /******/            function getDefault() {\r\n                        return module['default'];\r\n                    } :\r\n                    /******/            function getModuleExports() {\r\n                        return module;\r\n                    };\r\n            /******/\r\n            __webpack_require__.d(getter, 'a', getter);\r\n            /******/\r\n            return getter;\r\n            /******/\r\n        };\r\n        /******/\r\n        /******/ \t// Object.prototype.hasOwnProperty.call\r\n        /******/\r\n        __webpack_require__.o = function(object, property) {\r\n            return Object.prototype.hasOwnProperty.call(object, property);\r\n        };\r\n        /******/\r\n        /******/ \t// __webpack_public_path__\r\n        /******/\r\n        __webpack_require__.p = \"\";\r\n        /******/\r\n        /******/ \t// Load entry module and return exports\r\n        /******/\r\n        return __webpack_require__(__webpack_require__.s = 3);\r\n        /******/\r\n    })\r\n            /************************************************************************/\r\n            /******/ ([\r\n                          /* 0 */\r\n                          /***/ (function(module, exports, __webpack_require__) {\r\n\r\n                    var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;\r\n                    (function(global, factory) {\r\n                        if (true) {\r\n                            !(__WEBPACK_AMD_DEFINE_ARRAY__ = [module, __webpack_require__(7)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\r\n                                    __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\r\n                                                                     (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\r\n                            __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\r\n                        } else if (typeof exports !== \"undefined\") {\r\n                            factory(module, require('select'));\r\n                        } else {\r\n                            var mod = {\r\n                                exports: {}\r\n                            };\r\n                            factory(mod, global.select);\r\n                            global.clipboardAction = mod.exports;\r\n                        }\r\n                    })(this, function(module, _select) {\r\n                        'use strict';\r\n\r\n                        var _select2 = _interopRequireDefault(_select);\r\n\r\n                        function _interopRequireDefault(obj) {\r\n                            return obj && obj.__esModule ? obj : {\r\n                                default: obj\r\n                            };\r\n                        }\r\n\r\n                        var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function(obj) {\r\n                            return typeof obj;\r\n                        } : function(obj) {\r\n                            return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\r\n                        };\r\n\r\n                        function _classCallCheck(instance, Constructor) {\r\n                            if (!(instance instanceof Constructor)) {\r\n                                throw new TypeError(\"Cannot call a class as a function\");\r\n                            }\r\n                        }\r\n\r\n                        var _createClass = function() {\r\n                            function defineProperties(target, props) {\r\n                                for (var i = 0; i < props.length; i++) {\r\n                                    var descriptor = props[i];\r\n                                    descriptor.enumerable = descriptor.enumerable || false;\r\n                                    descriptor.configurable = true;\r\n                                    if (\"value\" in descriptor) {\r\n                                        descriptor.writable = true;\r\n                                    }\r\n                                    Object.defineProperty(target, descriptor.key, descriptor);\r\n                                }\r\n                            }\r\n\r\n                            return function(Constructor, protoProps, staticProps) {\r\n                                if (protoProps) {\r\n                                    defineProperties(Constructor.prototype, protoProps);\r\n                                }\r\n                                if (staticProps) {\r\n                                    defineProperties(Constructor, staticProps);\r\n                                }\r\n                                return Constructor;\r\n                            };\r\n                        }();\r\n\r\n                        var ClipboardAction = function() {\r\n                            /**\r\n                             * @param {Object} options\r\n                             */\r\n                            function ClipboardAction(options) {\r\n                                _classCallCheck(this, ClipboardAction);\r\n\r\n                                this.resolveOptions(options);\r\n                                this.initSelection();\r\n                            }\r\n\r\n                            /**\r\n                             * Defines base properties passed from constructor.\r\n                             * @param {Object} options\r\n                             */\r\n\r\n\r\n                            _createClass(ClipboardAction, [{\r\n                                key: 'resolveOptions',\r\n                                value: function resolveOptions() {\r\n                                    var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\r\n\r\n                                    this.action = options.action;\r\n                                    this.container = options.container;\r\n                                    this.emitter = options.emitter;\r\n                                    this.target = options.target;\r\n                                    this.text = options.text;\r\n                                    this.trigger = options.trigger;\r\n\r\n                                    this.selectedText = '';\r\n                                }\r\n                            }, {\r\n                                key: 'initSelection',\r\n                                value: function initSelection() {\r\n                                    if (this.text) {\r\n                                        this.selectFake();\r\n                                    } else if (this.target) {\r\n                                        this.selectTarget();\r\n                                    }\r\n                                }\r\n                            }, {\r\n                                key: 'selectFake',\r\n                                value: function selectFake() {\r\n                                    var _this = this;\r\n\r\n                                    var isRTL = document.documentElement.getAttribute('dir') == 'rtl';\r\n\r\n                                    this.removeFake();\r\n\r\n                                    this.fakeHandlerCallback = function() {\r\n                                        return _this.removeFake();\r\n                                    };\r\n                                    this.fakeHandler = this.container.addEventListener('click', this.fakeHandlerCallback) || true;\r\n\r\n                                    this.fakeElem = document.createElement('textarea');\r\n                                    // Prevent zooming on iOS\r\n                                    this.fakeElem.style.fontSize = '12pt';\r\n                                    // Reset box model\r\n                                    this.fakeElem.style.border = '0';\r\n                                    this.fakeElem.style.padding = '0';\r\n                                    this.fakeElem.style.margin = '0';\r\n                                    // Move element out of screen horizontally\r\n                                    this.fakeElem.style.position = 'absolute';\r\n                                    this.fakeElem.style[isRTL ? 'right' : 'left'] = '-9999px';\r\n                                    // Move element to the same position vertically\r\n                                    var yPosition = window.pageYOffset || document.documentElement.scrollTop;\r\n                                    this.fakeElem.style.top = yPosition + 'px';\r\n\r\n                                    this.fakeElem.setAttribute('readonly', '');\r\n                                    this.fakeElem.value = this.text;\r\n\r\n                                    this.container.appendChild(this.fakeElem);\r\n\r\n                                    this.selectedText = (0, _select2.default)(this.fakeElem);\r\n                                    this.copyText();\r\n                                }\r\n                            }, {\r\n                                key: 'removeFake',\r\n                                value: function removeFake() {\r\n                                    if (this.fakeHandler) {\r\n                                        this.container.removeEventListener('click', this.fakeHandlerCallback);\r\n                                        this.fakeHandler = null;\r\n                                        this.fakeHandlerCallback = null;\r\n                                    }\r\n\r\n                                    if (this.fakeElem) {\r\n                                        this.container.removeChild(this.fakeElem);\r\n                                        this.fakeElem = null;\r\n                                    }\r\n                                }\r\n                            }, {\r\n                                key: 'selectTarget',\r\n                                value: function selectTarget() {\r\n                                    this.selectedText = (0, _select2.default)(this.target);\r\n                                    this.copyText();\r\n                                }\r\n                            }, {\r\n                                key: 'copyText',\r\n                                value: function copyText() {\r\n                                    var succeeded = void 0;\r\n\r\n                                    try {\r\n                                        succeeded = document.execCommand(this.action);\r\n                                    } catch (err) {\r\n                                        succeeded = false;\r\n                                    }\r\n\r\n                                    this.handleResult(succeeded);\r\n                                }\r\n                            }, {\r\n                                key: 'handleResult',\r\n                                value: function handleResult(succeeded) {\r\n                                    this.emitter.emit(succeeded ? 'success' : 'error', {\r\n                                        action: this.action,\r\n                                        text: this.selectedText,\r\n                                        trigger: this.trigger,\r\n                                        clearSelection: this.clearSelection.bind(this)\r\n                                    });\r\n                                }\r\n                            }, {\r\n                                key: 'clearSelection',\r\n                                value: function clearSelection() {\r\n                                    if (this.trigger) {\r\n                                        this.trigger.focus();\r\n                                    }\r\n\r\n                                    window.getSelection().removeAllRanges();\r\n                                }\r\n                            }, {\r\n                                key: 'destroy',\r\n                                value: function destroy() {\r\n                                    this.removeFake();\r\n                                }\r\n                            }, {\r\n                                key: 'action',\r\n                                set: function set() {\r\n                                    var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'copy';\r\n\r\n                                    this._action = action;\r\n\r\n                                    if (this._action !== 'copy' && this._action !== 'cut') {\r\n                                        throw new Error('Invalid \"action\" value, use either \"copy\" or \"cut\"');\r\n                                    }\r\n                                },\r\n                                get: function get() {\r\n                                    return this._action;\r\n                                }\r\n                            }, {\r\n                                key: 'target',\r\n                                set: function set(target) {\r\n                                    if (target !== undefined) {\r\n                                        if (target && (typeof target === 'undefined' ? 'undefined' : _typeof(target)) === 'object' && target.nodeType === 1) {\r\n                                            if (this.action === 'copy' && target.hasAttribute('disabled')) {\r\n                                                throw new Error('Invalid \"target\" attribute. Please use \"readonly\" instead of \"disabled\" attribute');\r\n                                            }\r\n\r\n                                            if (this.action === 'cut' && (target.hasAttribute('readonly') || target.hasAttribute('disabled'))) {\r\n                                                throw new Error('Invalid \"target\" attribute. You can\\'t cut text from elements with \"readonly\" or \"disabled\" attributes');\r\n                                            }\r\n\r\n                                            this._target = target;\r\n                                        } else {\r\n                                            throw new Error('Invalid \"target\" value, use a valid Element');\r\n                                        }\r\n                                    }\r\n                                },\r\n                                get: function get() {\r\n                                    return this._target;\r\n                                }\r\n                            }]);\r\n\r\n                            return ClipboardAction;\r\n                        }();\r\n\r\n                        module.exports = ClipboardAction;\r\n                    });\r\n\r\n                    /***/\r\n                }),\r\n                          /* 1 */\r\n                          /***/ (function(module, exports, __webpack_require__) {\r\n\r\n                    var is = __webpack_require__(6);\r\n                    var delegate = __webpack_require__(5);\r\n\r\n                    /**\r\n                     * Validates all params and calls the right\r\n                     * listener function based on its target type.\r\n                     *\r\n                     * @param {String|HTMLElement|HTMLCollection|NodeList} target\r\n                     * @param {String} type\r\n                     * @param {Function} callback\r\n                     * @return {Object}\r\n                     */\r\n                    function listen(target, type, callback) {\r\n                        if (!target && !type && !callback) {\r\n                            throw new Error('Missing required arguments');\r\n                        }\r\n\r\n                        if (!is.string(type)) {\r\n                            throw new TypeError('Second argument must be a String');\r\n                        }\r\n\r\n                        if (!is.fn(callback)) {\r\n                            throw new TypeError('Third argument must be a Function');\r\n                        }\r\n\r\n                        if (is.node(target)) {\r\n                            return listenNode(target, type, callback);\r\n                        } else if (is.nodeList(target)) {\r\n                            return listenNodeList(target, type, callback);\r\n                        } else if (is.string(target)) {\r\n                            return listenSelector(target, type, callback);\r\n                        } else {\r\n                            throw new TypeError('First argument must be a String, HTMLElement, HTMLCollection, or NodeList');\r\n                        }\r\n                    }\r\n\r\n                    /**\r\n                     * Adds an event listener to a HTML element\r\n                     * and returns a remove listener function.\r\n                     *\r\n                     * @param {HTMLElement} node\r\n                     * @param {String} type\r\n                     * @param {Function} callback\r\n                     * @return {Object}\r\n                     */\r\n                    function listenNode(node, type, callback) {\r\n                        node.addEventListener(type, callback);\r\n\r\n                        return {\r\n                            destroy: function() {\r\n                                node.removeEventListener(type, callback);\r\n                            }\r\n                        }\r\n                    }\r\n\r\n                    /**\r\n                     * Add an event listener to a list of HTML elements\r\n                     * and returns a remove listener function.\r\n                     *\r\n                     * @param {NodeList|HTMLCollection} nodeList\r\n                     * @param {String} type\r\n                     * @param {Function} callback\r\n                     * @return {Object}\r\n                     */\r\n                    function listenNodeList(nodeList, type, callback) {\r\n                        Array.prototype.forEach.call(nodeList, function(node) {\r\n                            node.addEventListener(type, callback);\r\n                        });\r\n\r\n                        return {\r\n                            destroy: function() {\r\n                                Array.prototype.forEach.call(nodeList, function(node) {\r\n                                    node.removeEventListener(type, callback);\r\n                                });\r\n                            }\r\n                        }\r\n                    }\r\n\r\n                    /**\r\n                     * Add an event listener to a selector\r\n                     * and returns a remove listener function.\r\n                     *\r\n                     * @param {String} selector\r\n                     * @param {String} type\r\n                     * @param {Function} callback\r\n                     * @return {Object}\r\n                     */\r\n                    function listenSelector(selector, type, callback) {\r\n                        return delegate(document.body, selector, type, callback);\r\n                    }\r\n\r\n                    module.exports = listen;\r\n\r\n\r\n                    /***/\r\n                }),\r\n                          /* 2 */\r\n                          /***/ (function(module, exports) {\r\n\r\n                    function E() {\r\n                        // Keep this empty so it's easier to inherit from\r\n                        // (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3)\r\n                    }\r\n\r\n                    E.prototype = {\r\n                        on: function(name, callback, ctx) {\r\n                            var e = this.e || (this.e = {});\r\n\r\n                            (e[name] || (e[name] = [])).push({\r\n                                                                 fn: callback,\r\n                                                                 ctx: ctx\r\n                                                             });\r\n\r\n                            return this;\r\n                        },\r\n\r\n                        once: function(name, callback, ctx) {\r\n                            var self = this;\r\n\r\n                            function listener() {\r\n                                self.off(name, listener);\r\n                                callback.apply(ctx, arguments);\r\n                            };\r\n\r\n                            listener._ = callback\r\n                            return this.on(name, listener, ctx);\r\n                        },\r\n\r\n                        emit: function(name) {\r\n                            var data = [].slice.call(arguments, 1);\r\n                            var evtArr = ((this.e || (this.e = {}))[name] || []).slice();\r\n                            var i = 0;\r\n                            var len = evtArr.length;\r\n\r\n                            for (i; i < len; i++) {\r\n                                evtArr[i].fn.apply(evtArr[i].ctx, data);\r\n                            }\r\n\r\n                            return this;\r\n                        },\r\n\r\n                        off: function(name, callback) {\r\n                            var e = this.e || (this.e = {});\r\n                            var evts = e[name];\r\n                            var liveEvents = [];\r\n\r\n                            if (evts && callback) {\r\n                                for (var i = 0, len = evts.length; i < len; i++) {\r\n                                    if (evts[i].fn !== callback && evts[i].fn._ !== callback) {\r\n                                        liveEvents.push(evts[i]);\r\n                                    }\r\n                                }\r\n                            }\r\n\r\n                            // Remove event from queue to prevent memory leak\r\n                            // Suggested by https://github.com/lazd\r\n                            // Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910\r\n\r\n                            (liveEvents.length)\r\n                            ? e[name] = liveEvents\r\n                            : delete e[name];\r\n\r\n                            return this;\r\n                        }\r\n                    };\r\n\r\n                    module.exports = E;\r\n\r\n\r\n                    /***/\r\n                }),\r\n                          /* 3 */\r\n                          /***/ (function(module, exports, __webpack_require__) {\r\n\r\n                    var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;\r\n                    (function(global, factory) {\r\n                        if (true) {\r\n                            !(__WEBPACK_AMD_DEFINE_ARRAY__ = [module, __webpack_require__(0), __webpack_require__(2), __webpack_require__(1)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\r\n                                    __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\r\n                                                                     (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\r\n                            __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\r\n                        } else if (typeof exports !== \"undefined\") {\r\n                            factory(module, require('./clipboard-action'), require('tiny-emitter'), require('good-listener'));\r\n                        } else {\r\n                            var mod = {\r\n                                exports: {}\r\n                            };\r\n                            factory(mod, global.clipboardAction, global.tinyEmitter, global.goodListener);\r\n                            global.clipboard = mod.exports;\r\n                        }\r\n                    })(this, function(module, _clipboardAction, _tinyEmitter, _goodListener) {\r\n                        'use strict';\r\n\r\n                        var _clipboardAction2 = _interopRequireDefault(_clipboardAction);\r\n\r\n                        var _tinyEmitter2 = _interopRequireDefault(_tinyEmitter);\r\n\r\n                        var _goodListener2 = _interopRequireDefault(_goodListener);\r\n\r\n                        function _interopRequireDefault(obj) {\r\n                            return obj && obj.__esModule ? obj : {\r\n                                default: obj\r\n                            };\r\n                        }\r\n\r\n                        var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function(obj) {\r\n                            return typeof obj;\r\n                        } : function(obj) {\r\n                            return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\r\n                        };\r\n\r\n                        function _classCallCheck(instance, Constructor) {\r\n                            if (!(instance instanceof Constructor)) {\r\n                                throw new TypeError(\"Cannot call a class as a function\");\r\n                            }\r\n                        }\r\n\r\n                        var _createClass = function() {\r\n                            function defineProperties(target, props) {\r\n                                for (var i = 0; i < props.length; i++) {\r\n                                    var descriptor = props[i];\r\n                                    descriptor.enumerable = descriptor.enumerable || false;\r\n                                    descriptor.configurable = true;\r\n                                    if (\"value\" in descriptor) {\r\n                                        descriptor.writable = true;\r\n                                    }\r\n                                    Object.defineProperty(target, descriptor.key, descriptor);\r\n                                }\r\n                            }\r\n\r\n                            return function(Constructor, protoProps, staticProps) {\r\n                                if (protoProps) {\r\n                                    defineProperties(Constructor.prototype, protoProps);\r\n                                }\r\n                                if (staticProps) {\r\n                                    defineProperties(Constructor, staticProps);\r\n                                }\r\n                                return Constructor;\r\n                            };\r\n                        }();\r\n\r\n                        function _possibleConstructorReturn(self, call) {\r\n                            if (!self) {\r\n                                throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\r\n                            }\r\n\r\n                            return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\r\n                        }\r\n\r\n                        function _inherits(subClass, superClass) {\r\n                            if (typeof superClass !== \"function\" && superClass !== null) {\r\n                                throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\r\n                            }\r\n\r\n                            subClass.prototype = Object.create(superClass && superClass.prototype, {\r\n                                constructor: {\r\n                                    value: subClass,\r\n                                    enumerable: false,\r\n                                    writable: true,\r\n                                    configurable: true\r\n                                }\r\n                            });\r\n                            if (superClass) {\r\n                                Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\r\n                            }\r\n                        }\r\n\r\n                        var Clipboard = function(_Emitter) {\r\n                            _inherits(Clipboard, _Emitter);\r\n\r\n                            /**\r\n                             * @param {String|HTMLElement|HTMLCollection|NodeList} trigger\r\n                             * @param {Object} options\r\n                             */\r\n                            function Clipboard(trigger, options) {\r\n                                _classCallCheck(this, Clipboard);\r\n\r\n                                var _this = _possibleConstructorReturn(this, (Clipboard.__proto__ || Object.getPrototypeOf(Clipboard)).call(this));\r\n\r\n                                _this.resolveOptions(options);\r\n                                _this.listenClick(trigger);\r\n                                return _this;\r\n                            }\r\n\r\n                            /**\r\n                             * Defines if attributes would be resolved using internal setter functions\r\n                             * or custom functions that were passed in the constructor.\r\n                             * @param {Object} options\r\n                             */\r\n\r\n\r\n                            _createClass(Clipboard, [{\r\n                                key: 'resolveOptions',\r\n                                value: function resolveOptions() {\r\n                                    var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\r\n\r\n                                    this.action = typeof options.action === 'function' ? options.action : this.defaultAction;\r\n                                    this.target = typeof options.target === 'function' ? options.target : this.defaultTarget;\r\n                                    this.text = typeof options.text === 'function' ? options.text : this.defaultText;\r\n                                    this.container = _typeof(options.container) === 'object' ? options.container : document.body;\r\n                                }\r\n                            }, {\r\n                                key: 'listenClick',\r\n                                value: function listenClick(trigger) {\r\n                                    var _this2 = this;\r\n\r\n                                    this.listener = (0, _goodListener2.default)(trigger, 'click', function(e) {\r\n                                        return _this2.onClick(e);\r\n                                    });\r\n                                }\r\n                            }, {\r\n                                key: 'onClick',\r\n                                value: function onClick(e) {\r\n                                    var trigger = e.delegateTarget || e.currentTarget;\r\n\r\n                                    if (this.clipboardAction) {\r\n                                        this.clipboardAction = null;\r\n                                    }\r\n\r\n                                    this.clipboardAction = new _clipboardAction2.default({\r\n                                                                                             action: this.action(trigger),\r\n                                                                                             target: this.target(trigger),\r\n                                                                                             text: this.text(trigger),\r\n                                                                                             container: this.container,\r\n                                                                                             trigger: trigger,\r\n                                                                                             emitter: this\r\n                                                                                         });\r\n                                }\r\n                            }, {\r\n                                key: 'defaultAction',\r\n                                value: function defaultAction(trigger) {\r\n                                    return getAttributeValue('action', trigger);\r\n                                }\r\n                            }, {\r\n                                key: 'defaultTarget',\r\n                                value: function defaultTarget(trigger) {\r\n                                    var selector = getAttributeValue('target', trigger);\r\n\r\n                                    if (selector) {\r\n                                        return document.querySelector(selector);\r\n                                    }\r\n                                }\r\n                            }, {\r\n                                key: 'defaultText',\r\n                                value: function defaultText(trigger) {\r\n                                    return getAttributeValue('text', trigger);\r\n                                }\r\n                            }, {\r\n                                key: 'destroy',\r\n                                value: function destroy() {\r\n                                    this.listener.destroy();\r\n\r\n                                    if (this.clipboardAction) {\r\n                                        this.clipboardAction.destroy();\r\n                                        this.clipboardAction = null;\r\n                                    }\r\n                                }\r\n                            }], [{\r\n                                key: 'isSupported',\r\n                                value: function isSupported() {\r\n                                    var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['copy', 'cut'];\r\n\r\n                                    var actions = typeof action === 'string' ? [action] : action;\r\n                                    var support = !!document.queryCommandSupported;\r\n\r\n                                    actions.forEach(function(action) {\r\n                                        support = support && !!document.queryCommandSupported(action);\r\n                                    });\r\n\r\n                                    return support;\r\n                                }\r\n                            }]);\r\n\r\n                            return Clipboard;\r\n                        }(_tinyEmitter2.default);\r\n\r\n                        /**\r\n                         * Helper function to retrieve attribute value.\r\n                         * @param {String} suffix\r\n                         * @param {Element} element\r\n                         */\r\n                        function getAttributeValue(suffix, element) {\r\n                            var attribute = 'data-clipboard-' + suffix;\r\n\r\n                            if (!element.hasAttribute(attribute)) {\r\n                                return;\r\n                            }\r\n\r\n                            return element.getAttribute(attribute);\r\n                        }\r\n\r\n                        module.exports = Clipboard;\r\n                    });\r\n\r\n                    /***/\r\n                }),\r\n                          /* 4 */\r\n                          /***/ (function(module, exports) {\r\n\r\n                    var DOCUMENT_NODE_TYPE = 9;\r\n\r\n                    /**\r\n                     * A polyfill for Element.matches()\r\n                     */\r\n                    if (typeof Element !== 'undefined' && !Element.prototype.matches) {\r\n                        var proto = Element.prototype;\r\n\r\n                        proto.matches = proto.matchesSelector ||\r\n                                        proto.mozMatchesSelector ||\r\n                                        proto.msMatchesSelector ||\r\n                                        proto.oMatchesSelector ||\r\n                                        proto.webkitMatchesSelector;\r\n                    }\r\n\r\n                    /**\r\n                     * Finds the closest parent that matches a selector.\r\n                     *\r\n                     * @param {Element} element\r\n                     * @param {String} selector\r\n                     * @return {Function}\r\n                     */\r\n                    function closest(element, selector) {\r\n                        while (element && element.nodeType !== DOCUMENT_NODE_TYPE) {\r\n                            if (typeof element.matches === 'function' &&\r\n                                element.matches(selector)) {\r\n                                return element;\r\n                            }\r\n                            element = element.parentNode;\r\n                        }\r\n                    }\r\n\r\n                    module.exports = closest;\r\n\r\n\r\n                    /***/\r\n                }),\r\n                          /* 5 */\r\n                          /***/ (function(module, exports, __webpack_require__) {\r\n\r\n                    var closest = __webpack_require__(4);\r\n\r\n                    /**\r\n                     * Delegates event to a selector.\r\n                     *\r\n                     * @param {Element} element\r\n                     * @param {String} selector\r\n                     * @param {String} type\r\n                     * @param {Function} callback\r\n                     * @param {Boolean} useCapture\r\n                     * @return {Object}\r\n                     */\r\n                    function _delegate(element, selector, type, callback, useCapture) {\r\n                        var listenerFn = listener.apply(this, arguments);\r\n\r\n                        element.addEventListener(type, listenerFn, useCapture);\r\n\r\n                        return {\r\n                            destroy: function() {\r\n                                element.removeEventListener(type, listenerFn, useCapture);\r\n                            }\r\n                        }\r\n                    }\r\n\r\n                    /**\r\n                     * Delegates event to a selector.\r\n                     *\r\n                     * @param {Element|String|Array} [elements]\r\n                     * @param {String} selector\r\n                     * @param {String} type\r\n                     * @param {Function} callback\r\n                     * @param {Boolean} useCapture\r\n                     * @return {Object}\r\n                     */\r\n                    function delegate(elements, selector, type, callback, useCapture) {\r\n                        // Handle the regular Element usage\r\n                        if (typeof elements.addEventListener === 'function') {\r\n                            return _delegate.apply(null, arguments);\r\n                        }\r\n\r\n                        // Handle Element-less usage, it defaults to global delegation\r\n                        if (typeof type === 'function') {\r\n                            // Use `document` as the first parameter, then apply arguments\r\n                            // This is a short way to .unshift `arguments` without running into deoptimizations\r\n                            return _delegate.bind(null, document).apply(null, arguments);\r\n                        }\r\n\r\n                        // Handle Selector-based usage\r\n                        if (typeof elements === 'string') {\r\n                            elements = document.querySelectorAll(elements);\r\n                        }\r\n\r\n                        // Handle Array-like based usage\r\n                        return Array.prototype.map.call(elements, function(element) {\r\n                            return _delegate(element, selector, type, callback, useCapture);\r\n                        });\r\n                    }\r\n\r\n                    /**\r\n                     * Finds closest match and invokes callback.\r\n                     *\r\n                     * @param {Element} element\r\n                     * @param {String} selector\r\n                     * @param {String} type\r\n                     * @param {Function} callback\r\n                     * @return {Function}\r\n                     */\r\n                    function listener(element, selector, type, callback) {\r\n                        return function(e) {\r\n                            e.delegateTarget = closest(e.target, selector);\r\n\r\n                            if (e.delegateTarget) {\r\n                                callback.call(element, e);\r\n                            }\r\n                        }\r\n                    }\r\n\r\n                    module.exports = delegate;\r\n\r\n\r\n                    /***/\r\n                }),\r\n                          /* 6 */\r\n                          /***/ (function(module, exports) {\r\n\r\n                    /**\r\n                     * Check if argument is a HTML element.\r\n                     *\r\n                     * @param {Object} value\r\n                     * @return {Boolean}\r\n                     */\r\n                    exports.node = function(value) {\r\n                        return value !== undefined\r\n                               && value instanceof HTMLElement\r\n                               && value.nodeType === 1;\r\n                    };\r\n\r\n                    /**\r\n                     * Check if argument is a list of HTML elements.\r\n                     *\r\n                     * @param {Object} value\r\n                     * @return {Boolean}\r\n                     */\r\n                    exports.nodeList = function(value) {\r\n                        var type = Object.prototype.toString.call(value);\r\n\r\n                        return value !== undefined\r\n                               && (type === '[object NodeList]' || type === '[object HTMLCollection]')\r\n                               && ('length' in value)\r\n                               && (value.length === 0 || exports.node(value[0]));\r\n                    };\r\n\r\n                    /**\r\n                     * Check if argument is a string.\r\n                     *\r\n                     * @param {Object} value\r\n                     * @return {Boolean}\r\n                     */\r\n                    exports.string = function(value) {\r\n                        return typeof value === 'string'\r\n                               || value instanceof String;\r\n                    };\r\n\r\n                    /**\r\n                     * Check if argument is a function.\r\n                     *\r\n                     * @param {Object} value\r\n                     * @return {Boolean}\r\n                     */\r\n                    exports.fn = function(value) {\r\n                        var type = Object.prototype.toString.call(value);\r\n\r\n                        return type === '[object Function]';\r\n                    };\r\n\r\n\r\n                    /***/\r\n                }),\r\n                          /* 7 */\r\n                          /***/ (function(module, exports) {\r\n\r\n                    function select(element) {\r\n                        var selectedText;\r\n\r\n                        if (element.nodeName === 'SELECT') {\r\n                            element.focus();\r\n\r\n                            selectedText = element.value;\r\n                        } else if (element.nodeName === 'INPUT' || element.nodeName === 'TEXTAREA') {\r\n                            var isReadOnly = element.hasAttribute('readonly');\r\n\r\n                            if (!isReadOnly) {\r\n                                element.setAttribute('readonly', '');\r\n                            }\r\n\r\n                            element.select();\r\n                            element.setSelectionRange(0, element.value.length);\r\n\r\n                            if (!isReadOnly) {\r\n                                element.removeAttribute('readonly');\r\n                            }\r\n\r\n                            selectedText = element.value;\r\n                        } else {\r\n                            if (element.hasAttribute('contenteditable')) {\r\n                                element.focus();\r\n                            }\r\n\r\n                            var selection = window.getSelection();\r\n                            var range = document.createRange();\r\n\r\n                            range.selectNodeContents(element);\r\n                            selection.removeAllRanges();\r\n                            selection.addRange(range);\r\n\r\n                            selectedText = selection.toString();\r\n                        }\r\n\r\n                        return selectedText;\r\n                    }\r\n\r\n                    module.exports = select;\r\n\r\n\r\n                    /***/\r\n                })\r\n                          /******/]);\r\n});\n"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": -1,
          "_transferSize": 6728,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:11.649Z",
        "time": 83.47599999979138,
        "timings": {
          "blocked": 4.279000042393804,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0.5310000000000001,
          "wait": 77.74200002294033,
          "receive": 0.9239999344572425,
          "_blocked_queueing": 0.7700000423938036,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_connectionId": "1726423",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "parser",
          "url": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513",
          "lineNumber": 1
        },
        "_priority": "High",
        "_resourceType": "script",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/ekat/WEB-RES/js/mdc.textfield.js_javaviewer_7.26.1.11.js",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": ":authority",
              "value": "ekat.festool.de"
            },
            {
              "name": ":method",
              "value": "GET"
            },
            {
              "name": ":path",
              "value": "/ekat/WEB-RES/js/mdc.textfield.js_javaviewer_7.26.1.11.js"
            },
            {
              "name": ":scheme",
              "value": "https"
            },
            {
              "name": "accept",
              "value": "*/*"
            },
            {
              "name": "accept-encoding",
              "value": "gzip, deflate, br, zstd"
            },
            {
              "name": "accept-language",
              "value": "en-GB,en-US;q=0.9,en;q=0.8"
            },
            {
              "name": "if-modified-since",
              "value": "Thu, 20 Aug 2026 07:47:07 GMT"
            },
            {
              "name": "if-none-match",
              "value": "W/\"293308-1787216819880\""
            },
            {
              "name": "priority",
              "value": "u=1"
            },
            {
              "name": "referer",
              "value": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            },
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "sec-fetch-dest",
              "value": "script"
            },
            {
              "name": "sec-fetch-mode",
              "value": "no-cors"
            },
            {
              "name": "sec-fetch-site",
              "value": "same-origin"
            },
            {
              "name": "user-agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            }
          ],
          "queryString": [],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "cache-control",
              "value": "public"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "content-length",
              "value": "30236"
            },
            {
              "name": "content-type",
              "value": "text/javascript"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 09:09:51 GMT"
            },
            {
              "name": "etag",
              "value": "W/\"293308-1787216991675\""
            },
            {
              "name": "expires",
              "value": "Thu, 20 Aug 2026 09:11:51 GMT"
            },
            {
              "name": "last-modified",
              "value": "Thu, 20 Aug 2026 07:47:07 GMT"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "pragma",
              "value": "cache"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "x-robots-tag",
              "value": "noindex"
            }
          ],
          "cookies": [],
          "content": {
            "size": 293308,
            "mimeType": "text/javascript",
            "text": "/**\r\n * @license\r\n * Copyright Google LLC All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://github.com/material-components/material-components-web/blob/master/LICENSE\r\n */\r\n(function webpackUniversalModuleDefinition(root, factory) {\r\n    if (typeof exports === 'object' && typeof module === 'object') {\r\n        module.exports = factory();\r\n    } else if (typeof define === 'function' && define.amd) {\r\n        define([], factory);\r\n    } else if (typeof exports === 'object') {\r\n        exports[\"textfield\"] = factory();\r\n    } else {\r\n        root[\"mdc\"] = root[\"mdc\"] || {}, root[\"mdc\"][\"textfield\"] = factory();\r\n    }\r\n})(this, function() {\r\n    return /******/ (function(modules) { // webpackBootstrap\r\n        /******/ \t// The module cache\r\n        /******/\r\n        var installedModules = {};\r\n        /******/\r\n        /******/ \t// The require function\r\n        /******/\r\n        function __webpack_require__(moduleId) {\r\n            /******/\r\n            /******/ \t\t// Check if module is in cache\r\n            /******/\r\n            if (installedModules[moduleId]) {\r\n                /******/\r\n                return installedModules[moduleId].exports;\r\n                /******/\r\n            }\r\n            /******/ \t\t// Create a new module (and put it into the cache)\r\n            /******/\r\n            var module = installedModules[moduleId] = {\r\n                /******/            i: moduleId,\r\n                /******/            l: false,\r\n                /******/            exports: {}\r\n                /******/\r\n            };\r\n            /******/\r\n            /******/ \t\t// Execute the module function\r\n            /******/\r\n            modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\r\n            /******/\r\n            /******/ \t\t// Flag the module as loaded\r\n            /******/\r\n            module.l = true;\r\n            /******/\r\n            /******/ \t\t// Return the exports of the module\r\n            /******/\r\n            return module.exports;\r\n            /******/\r\n        }\r\n\r\n        /******/\r\n        /******/\r\n        /******/ \t// expose the modules object (__webpack_modules__)\r\n        /******/\r\n        __webpack_require__.m = modules;\r\n        /******/\r\n        /******/ \t// expose the module cache\r\n        /******/\r\n        __webpack_require__.c = installedModules;\r\n        /******/\r\n        /******/ \t// define getter function for harmony exports\r\n        /******/\r\n        __webpack_require__.d = function(exports, name, getter) {\r\n            /******/\r\n            if (!__webpack_require__.o(exports, name)) {\r\n                /******/\r\n                Object.defineProperty(exports, name, {enumerable: true, get: getter});\r\n                /******/\r\n            }\r\n            /******/\r\n        };\r\n        /******/\r\n        /******/ \t// define __esModule on exports\r\n        /******/\r\n        __webpack_require__.r = function(exports) {\r\n            /******/\r\n            if (typeof Symbol !== 'undefined' && Symbol.toStringTag) {\r\n                /******/\r\n                Object.defineProperty(exports, Symbol.toStringTag, {value: 'Module'});\r\n                /******/\r\n            }\r\n            /******/\r\n            Object.defineProperty(exports, '__esModule', {value: true});\r\n            /******/\r\n        };\r\n        /******/\r\n        /******/ \t// create a fake namespace object\r\n        /******/ \t// mode & 1: value is a module id, require it\r\n        /******/ \t// mode & 2: merge all properties of value into the ns\r\n        /******/ \t// mode & 4: return value when already ns object\r\n        /******/ \t// mode & 8|1: behave like require\r\n        /******/\r\n        __webpack_require__.t = function(value, mode) {\r\n            /******/\r\n            if (mode & 1) {\r\n                value = __webpack_require__(value);\r\n            }\r\n            /******/\r\n            if (mode & 8) {\r\n                return value;\r\n            }\r\n            /******/\r\n            if ((mode & 4) && typeof value === 'object' && value && value.__esModule) {\r\n                return value;\r\n            }\r\n            /******/\r\n            var ns = Object.create(null);\r\n            /******/\r\n            __webpack_require__.r(ns);\r\n            /******/\r\n            Object.defineProperty(ns, 'default', {enumerable: true, value: value});\r\n            /******/\r\n            if (mode & 2 && typeof value != 'string') {\r\n                for (var key in value) {\r\n                    __webpack_require__.d(ns, key, function(key) {\r\n                        return value[key];\r\n                    }.bind(null, key));\r\n                }\r\n            }\r\n            /******/\r\n            return ns;\r\n            /******/\r\n        };\r\n        /******/\r\n        /******/ \t// getDefaultExport function for compatibility with non-harmony modules\r\n        /******/\r\n        __webpack_require__.n = function(module) {\r\n            /******/\r\n            var getter = module && module.__esModule ?\r\n                    /******/            function getDefault() {\r\n                        return module['default'];\r\n                    } :\r\n                    /******/            function getModuleExports() {\r\n                        return module;\r\n                    };\r\n            /******/\r\n            __webpack_require__.d(getter, 'a', getter);\r\n            /******/\r\n            return getter;\r\n            /******/\r\n        };\r\n        /******/\r\n        /******/ \t// Object.prototype.hasOwnProperty.call\r\n        /******/\r\n        __webpack_require__.o = function(object, property) {\r\n            return Object.prototype.hasOwnProperty.call(object, property);\r\n        };\r\n        /******/\r\n        /******/ \t// __webpack_public_path__\r\n        /******/\r\n        __webpack_require__.p = \"\";\r\n        /******/\r\n        /******/\r\n        /******/ \t// Load entry module and return exports\r\n        /******/\r\n        return __webpack_require__(__webpack_require__.s = \"./packages/mdc-textfield/index.ts\");\r\n        /******/\r\n    })\r\n            /************************************************************************/\r\n            /******/ ({\r\n\r\n                          /***/ \"./packages/mdc-base/component.ts\":\r\n                /*!****************************************!*\\\r\n  !*** ./packages/mdc-base/component.ts ***!\r\n  \\****************************************/\r\n                /*! no static exports found */\r\n                /***/ (function(module, exports, __webpack_require__) {\r\n\r\n                    \"use strict\";\r\n\r\n                    /**\r\n                     * @license\r\n                     * Copyright 2016 Google Inc.\r\n                     *\r\n                     * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n                     * of this software and associated documentation files (the \"Software\"), to deal\r\n                     * in the Software without restriction, including without limitation the rights\r\n                     * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n                     * copies of the Software, and to permit persons to whom the Software is\r\n                     * furnished to do so, subject to the following conditions:\r\n                     *\r\n                     * The above copyright notice and this permission notice shall be included in\r\n                     * all copies or substantial portions of the Software.\r\n                     *\r\n                     * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n                     * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n                     * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n                     * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n                     * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n                     * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n                     * THE SOFTWARE.\r\n                     */\r\n\r\n                    var __read = this && this.__read || function(o, n) {\r\n                        var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n                        if (!m) {\r\n                            return o;\r\n                        }\r\n                        var i = m.call(o),\r\n                                r,\r\n                                ar = [],\r\n                                e;\r\n                        try {\r\n                            while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {\r\n                                ar.push(r.value);\r\n                            }\r\n                        } catch (error) {\r\n                            e = {error: error};\r\n                        } finally {\r\n                            try {\r\n                                if (r && !r.done && (m = i[\"return\"])) {\r\n                                    m.call(i);\r\n                                }\r\n                            } finally {\r\n                                if (e) {\r\n                                    throw e.error;\r\n                                }\r\n                            }\r\n                        }\r\n                        return ar;\r\n                    };\r\n                    var __spread = this && this.__spread || function() {\r\n                        for (var ar = [], i = 0; i < arguments.length; i++) {\r\n                            ar = ar.concat(__read(arguments[i]));\r\n                        }\r\n                        return ar;\r\n                    };\r\n                    Object.defineProperty(exports, \"__esModule\", {value: true});\r\n                    var foundation_1 = __webpack_require__(/*! ./foundation */ \"./packages/mdc-base/foundation.ts\");\r\n                    var MDCComponent = /** @class */function() {\r\n                        function MDCComponent(root, foundation) {\r\n                            var args = [];\r\n                            for (var _i = 2; _i < arguments.length; _i++) {\r\n                                args[_i - 2] = arguments[_i];\r\n                            }\r\n                            this.root = root;\r\n                            this.initialize.apply(this, __spread(args));\r\n                            // Note that we initialize foundation here and not within the constructor's default param so that\r\n                            // this.root_ is defined and can be used within the foundation class.\r\n                            this.foundation = foundation === undefined ? this.getDefaultFoundation() : foundation;\r\n                            this.foundation.init();\r\n                            this.initialSyncWithDOM();\r\n                        }\r\n\r\n                        MDCComponent.attachTo = function(root) {\r\n                            // Subclasses which extend MDCBase should provide an attachTo() method that takes a root element and\r\n                            // returns an instantiated component with its root set to that element. Also note that in the cases of\r\n                            // subclasses, an explicit foundation class will not have to be passed in; it will simply be initialized\r\n                            // from getDefaultFoundation().\r\n                            return new MDCComponent(root, new foundation_1.MDCFoundation({}));\r\n                        };\r\n                        /* istanbul ignore next: method param only exists for typing purposes; it does not need to be unit tested */\r\n                        MDCComponent.prototype.initialize = function() {\r\n                            var _args = [];\r\n                            for (var _i = 0; _i < arguments.length; _i++) {\r\n                                _args[_i] = arguments[_i];\r\n                            }\r\n                            // Subclasses can override this to do any additional setup work that would be considered part of a\r\n                            // \"constructor\". Essentially, it is a hook into the parent constructor before the foundation is\r\n                            // initialized. Any additional arguments besides root and foundation will be passed in here.\r\n                        };\r\n                        MDCComponent.prototype.getDefaultFoundation = function() {\r\n                            // Subclasses must override this method to return a properly configured foundation class for the\r\n                            // component.\r\n                            throw new Error('Subclasses must override getDefaultFoundation to return a properly configured ' + 'foundation class');\r\n                        };\r\n                        MDCComponent.prototype.initialSyncWithDOM = function() {\r\n                            // Subclasses should override this method if they need to perform work to synchronize with a host DOM\r\n                            // object. An example of this would be a form control wrapper that needs to synchronize its internal state\r\n                            // to some property or attribute of the host DOM. Please note: this is *not* the place to perform DOM\r\n                            // reads/writes that would cause layout / paint, as this is called synchronously from within the constructor.\r\n                        };\r\n                        MDCComponent.prototype.destroy = function() {\r\n                            // Subclasses may implement this method to release any resources / deregister any listeners they have\r\n                            // attached. An example of this might be deregistering a resize event from the window object.\r\n                            this.foundation.destroy();\r\n                        };\r\n                        MDCComponent.prototype.listen = function(evtType, handler, options) {\r\n                            this.root.addEventListener(evtType, handler, options);\r\n                        };\r\n                        MDCComponent.prototype.unlisten = function(evtType, handler, options) {\r\n                            this.root.removeEventListener(evtType, handler, options);\r\n                        };\r\n                        /**\r\n                         * Fires a cross-browser-compatible custom event from the component root of the given type, with the given data.\r\n                         */\r\n                        MDCComponent.prototype.emit = function(evtType, evtData, shouldBubble) {\r\n                            if (shouldBubble === void 0) {\r\n                                shouldBubble = false;\r\n                            }\r\n                            var evt;\r\n                            if (typeof CustomEvent === 'function') {\r\n                                evt = new CustomEvent(evtType, {\r\n                                    bubbles: shouldBubble,\r\n                                    detail: evtData\r\n                                });\r\n                            } else {\r\n                                evt = document.createEvent('CustomEvent');\r\n                                evt.initCustomEvent(evtType, shouldBubble, false, evtData);\r\n                            }\r\n                            this.root.dispatchEvent(evt);\r\n                        };\r\n                        return MDCComponent;\r\n                    }();\r\n                    exports.MDCComponent = MDCComponent;\r\n// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier.\r\n                    exports.default = MDCComponent;\r\n\r\n                    /***/\r\n                }),\r\n\r\n                          /***/ \"./packages/mdc-base/foundation.ts\":\r\n                /*!*****************************************!*\\\r\n  !*** ./packages/mdc-base/foundation.ts ***!\r\n  \\*****************************************/\r\n                /*! no static exports found */\r\n                /***/ (function(module, exports, __webpack_require__) {\r\n\r\n                    \"use strict\";\r\n\r\n                    /**\r\n                     * @license\r\n                     * Copyright 2016 Google Inc.\r\n                     *\r\n                     * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n                     * of this software and associated documentation files (the \"Software\"), to deal\r\n                     * in the Software without restriction, including without limitation the rights\r\n                     * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n                     * copies of the Software, and to permit persons to whom the Software is\r\n                     * furnished to do so, subject to the following conditions:\r\n                     *\r\n                     * The above copyright notice and this permission notice shall be included in\r\n                     * all copies or substantial portions of the Software.\r\n                     *\r\n                     * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n                     * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n                     * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n                     * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n                     * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n                     * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n                     * THE SOFTWARE.\r\n                     */\r\n\r\n                    Object.defineProperty(exports, \"__esModule\", {value: true});\r\n                    var MDCFoundation = /** @class */function() {\r\n                        function MDCFoundation(adapter) {\r\n                            if (adapter === void 0) {\r\n                                adapter = {};\r\n                            }\r\n                            this.adapter = adapter;\r\n                        }\r\n\r\n                        Object.defineProperty(MDCFoundation, \"cssClasses\", {\r\n                            get: function get() {\r\n                                // Classes extending MDCFoundation should implement this method to return an object which exports every\r\n                                // CSS class the foundation class needs as a property. e.g. {ACTIVE: 'mdc-component--active'}\r\n                                return {};\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCFoundation, \"strings\", {\r\n                            get: function get() {\r\n                                // Classes extending MDCFoundation should implement this method to return an object which exports all\r\n                                // semantic strings as constants. e.g. {ARIA_ROLE: 'tablist'}\r\n                                return {};\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCFoundation, \"numbers\", {\r\n                            get: function get() {\r\n                                // Classes extending MDCFoundation should implement this method to return an object which exports all\r\n                                // of its semantic numbers as constants. e.g. {ANIMATION_DELAY_MS: 350}\r\n                                return {};\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCFoundation, \"defaultAdapter\", {\r\n                            get: function get() {\r\n                                // Classes extending MDCFoundation may choose to implement this getter in order to provide a convenient\r\n                                // way of viewing the necessary methods of an adapter. In the future, this could also be used for adapter\r\n                                // validation.\r\n                                return {};\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        MDCFoundation.prototype.init = function() {\r\n                            // Subclasses should override this method to perform initialization routines (registering events, etc.)\r\n                        };\r\n                        MDCFoundation.prototype.destroy = function() {\r\n                            // Subclasses should override this method to perform de-initialization routines (de-registering events, etc.)\r\n                        };\r\n                        return MDCFoundation;\r\n                    }();\r\n                    exports.MDCFoundation = MDCFoundation;\r\n// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier.\r\n                    exports.default = MDCFoundation;\r\n\r\n                    /***/\r\n                }),\r\n\r\n                          /***/ \"./packages/mdc-dom/events.ts\":\r\n                /*!************************************!*\\\r\n  !*** ./packages/mdc-dom/events.ts ***!\r\n  \\************************************/\r\n                /*! no static exports found */\r\n                /***/ (function(module, exports, __webpack_require__) {\r\n\r\n                    \"use strict\";\r\n\r\n                    /**\r\n                     * @license\r\n                     * Copyright 2019 Google Inc.\r\n                     *\r\n                     * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n                     * of this software and associated documentation files (the \"Software\"), to deal\r\n                     * in the Software without restriction, including without limitation the rights\r\n                     * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n                     * copies of the Software, and to permit persons to whom the Software is\r\n                     * furnished to do so, subject to the following conditions:\r\n                     *\r\n                     * The above copyright notice and this permission notice shall be included in\r\n                     * all copies or substantial portions of the Software.\r\n                     *\r\n                     * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n                     * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n                     * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n                     * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n                     * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n                     * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n                     * THE SOFTWARE.\r\n                     */\r\n\r\n                    Object.defineProperty(exports, \"__esModule\", {value: true});\r\n\r\n                    /**\r\n                     * Determine whether the current browser supports passive event listeners, and\r\n                     * if so, use them.\r\n                     */\r\n                    function applyPassive(globalObj) {\r\n                        if (globalObj === void 0) {\r\n                            globalObj = window;\r\n                        }\r\n                        return supportsPassiveOption(globalObj) ? {passive: true} : false;\r\n                    }\r\n\r\n                    exports.applyPassive = applyPassive;\r\n\r\n                    function supportsPassiveOption(globalObj) {\r\n                        if (globalObj === void 0) {\r\n                            globalObj = window;\r\n                        }\r\n                        // See\r\n                        // https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener\r\n                        var passiveSupported = false;\r\n                        try {\r\n                            var options = {\r\n                                // This function will be called when the browser\r\n                                // attempts to access the passive property.\r\n                                get passive() {\r\n                                    passiveSupported = true;\r\n                                    return false;\r\n                                }\r\n                            };\r\n                            var handler = function handler() {\r\n                            };\r\n                            globalObj.document.addEventListener('test', handler, options);\r\n                            globalObj.document.removeEventListener('test', handler, options);\r\n                        } catch (err) {\r\n                            passiveSupported = false;\r\n                        }\r\n                        return passiveSupported;\r\n                    }\r\n\r\n                    /***/\r\n                }),\r\n\r\n                          /***/ \"./packages/mdc-dom/ponyfill.ts\":\r\n                /*!**************************************!*\\\r\n  !*** ./packages/mdc-dom/ponyfill.ts ***!\r\n  \\**************************************/\r\n                /*! no static exports found */\r\n                /***/ (function(module, exports, __webpack_require__) {\r\n\r\n                    \"use strict\";\r\n\r\n                    /**\r\n                     * @license\r\n                     * Copyright 2018 Google Inc.\r\n                     *\r\n                     * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n                     * of this software and associated documentation files (the \"Software\"), to deal\r\n                     * in the Software without restriction, including without limitation the rights\r\n                     * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n                     * copies of the Software, and to permit persons to whom the Software is\r\n                     * furnished to do so, subject to the following conditions:\r\n                     *\r\n                     * The above copyright notice and this permission notice shall be included in\r\n                     * all copies or substantial portions of the Software.\r\n                     *\r\n                     * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n                     * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n                     * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n                     * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n                     * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n                     * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n                     * THE SOFTWARE.\r\n                     */\r\n\r\n                    Object.defineProperty(exports, \"__esModule\", {value: true});\r\n\r\n                    /**\r\n                     * @fileoverview A \"ponyfill\" is a polyfill that doesn't modify the global prototype chain.\r\n                     * This makes ponyfills safer than traditional polyfills, especially for libraries like MDC.\r\n                     */\r\n                    function closest(element, selector) {\r\n                        if (element.closest) {\r\n                            return element.closest(selector);\r\n                        }\r\n                        var el = element;\r\n                        while (el) {\r\n                            if (matches(el, selector)) {\r\n                                return el;\r\n                            }\r\n                            el = el.parentElement;\r\n                        }\r\n                        return null;\r\n                    }\r\n\r\n                    exports.closest = closest;\r\n\r\n                    function matches(element, selector) {\r\n                        var nativeMatches = element.matches || element.webkitMatchesSelector || element.msMatchesSelector;\r\n                        return nativeMatches.call(element, selector);\r\n                    }\r\n\r\n                    exports.matches = matches;\r\n\r\n                    /**\r\n                     * Used to compute the estimated scroll width of elements. When an element is\r\n                     * hidden due to display: none; being applied to a parent element, the width is\r\n                     * returned as 0. However, the element will have a true width once no longer\r\n                     * inside a display: none context. This method computes an estimated width when\r\n                     * the element is hidden or returns the true width when the element is visble.\r\n                     * @param {Element} element the element whose width to estimate\r\n                     */\r\n                    function estimateScrollWidth(element) {\r\n                        // Check the offsetParent. If the element inherits display: none from any\r\n                        // parent, the offsetParent property will be null (see\r\n                        // https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetParent).\r\n                        // This check ensures we only clone the node when necessary.\r\n                        var htmlEl = element;\r\n                        if (htmlEl.offsetParent !== null) {\r\n                            return htmlEl.scrollWidth;\r\n                        }\r\n                        var clone = htmlEl.cloneNode(true);\r\n                        clone.style.setProperty('position', 'absolute');\r\n                        clone.style.setProperty('transform', 'translate(-9999px, -9999px)');\r\n                        document.documentElement.appendChild(clone);\r\n                        var scrollWidth = clone.scrollWidth;\r\n                        document.documentElement.removeChild(clone);\r\n                        return scrollWidth;\r\n                    }\r\n\r\n                    exports.estimateScrollWidth = estimateScrollWidth;\r\n\r\n                    /***/\r\n                }),\r\n\r\n                          /***/ \"./packages/mdc-floating-label/component.ts\":\r\n                /*!**************************************************!*\\\r\n  !*** ./packages/mdc-floating-label/component.ts ***!\r\n  \\**************************************************/\r\n                /*! no static exports found */\r\n                /***/ (function(module, exports, __webpack_require__) {\r\n\r\n                    \"use strict\";\r\n\r\n                    /**\r\n                     * @license\r\n                     * Copyright 2016 Google Inc.\r\n                     *\r\n                     * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n                     * of this software and associated documentation files (the \"Software\"), to deal\r\n                     * in the Software without restriction, including without limitation the rights\r\n                     * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n                     * copies of the Software, and to permit persons to whom the Software is\r\n                     * furnished to do so, subject to the following conditions:\r\n                     *\r\n                     * The above copyright notice and this permission notice shall be included in\r\n                     * all copies or substantial portions of the Software.\r\n                     *\r\n                     * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n                     * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n                     * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n                     * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n                     * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n                     * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n                     * THE SOFTWARE.\r\n                     */\r\n\r\n                    var __extends = this && this.__extends || function() {\r\n                        var _extendStatics = function extendStatics(d, b) {\r\n                            _extendStatics = Object.setPrototypeOf || {__proto__: []} instanceof Array && function(d, b) {\r\n                                d.__proto__ = b;\r\n                            } || function(d, b) {\r\n                                for (var p in b) {\r\n                                    if (b.hasOwnProperty(p)) {\r\n                                        d[p] = b[p];\r\n                                    }\r\n                                }\r\n                            };\r\n                            return _extendStatics(d, b);\r\n                        };\r\n                        return function(d, b) {\r\n                            _extendStatics(d, b);\r\n\r\n                            function __() {\r\n                                this.constructor = d;\r\n                            }\r\n\r\n                            d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n                        };\r\n                    }();\r\n                    Object.defineProperty(exports, \"__esModule\", {value: true});\r\n                    var component_1 = __webpack_require__(/*! @material/base/component */ \"./packages/mdc-base/component.ts\");\r\n                    var ponyfill_1 = __webpack_require__(/*! @material/dom/ponyfill */ \"./packages/mdc-dom/ponyfill.ts\");\r\n                    var foundation_1 = __webpack_require__(/*! ./foundation */ \"./packages/mdc-floating-label/foundation.ts\");\r\n                    var MDCFloatingLabel = /** @class */function(_super) {\r\n                        __extends(MDCFloatingLabel, _super);\r\n\r\n                        function MDCFloatingLabel() {\r\n                            return _super !== null && _super.apply(this, arguments) || this;\r\n                        }\r\n\r\n                        MDCFloatingLabel.attachTo = function(root) {\r\n                            return new MDCFloatingLabel(root);\r\n                        };\r\n                        /**\r\n                         * Styles the label to produce the label shake for errors.\r\n                         * @param shouldShake If true, shakes the label by adding a CSS class; otherwise, stops shaking by removing the class.\r\n                         */\r\n                        MDCFloatingLabel.prototype.shake = function(shouldShake) {\r\n                            this.foundation.shake(shouldShake);\r\n                        };\r\n                        /**\r\n                         * Styles the label to float/dock.\r\n                         * @param shouldFloat If true, floats the label by adding a CSS class; otherwise, docks it by removing the class.\r\n                         */\r\n                        MDCFloatingLabel.prototype.float = function(shouldFloat) {\r\n                            this.foundation.float(shouldFloat);\r\n                        };\r\n                        /**\r\n                         * Styles the label as required.\r\n                         * @param isRequired If true, adds an asterisk to the label, indicating that it is required.\r\n                         */\r\n                        MDCFloatingLabel.prototype.setRequired = function(isRequired) {\r\n                            this.foundation.setRequired(isRequired);\r\n                        };\r\n                        MDCFloatingLabel.prototype.getWidth = function() {\r\n                            return this.foundation.getWidth();\r\n                        };\r\n                        MDCFloatingLabel.prototype.getDefaultFoundation = function() {\r\n                            var _this = this;\r\n                            // DO NOT INLINE this variable. For backward compatibility, foundations take a Partial<MDCFooAdapter>.\r\n                            // To ensure we don't accidentally omit any methods, we need a separate, strongly typed adapter variable.\r\n                            // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface.\r\n                            var adapter = {\r\n                                addClass: function addClass(className) {\r\n                                    return _this.root.classList.add(className);\r\n                                },\r\n                                removeClass: function removeClass(className) {\r\n                                    return _this.root.classList.remove(className);\r\n                                },\r\n                                getWidth: function getWidth() {\r\n                                    return ponyfill_1.estimateScrollWidth(_this.root);\r\n                                },\r\n                                registerInteractionHandler: function registerInteractionHandler(evtType, handler) {\r\n                                    return _this.listen(evtType, handler);\r\n                                },\r\n                                deregisterInteractionHandler: function deregisterInteractionHandler(evtType, handler) {\r\n                                    return _this.unlisten(evtType, handler);\r\n                                }\r\n                            };\r\n                            // tslint:enable:object-literal-sort-keys\r\n                            return new foundation_1.MDCFloatingLabelFoundation(adapter);\r\n                        };\r\n                        return MDCFloatingLabel;\r\n                    }(component_1.MDCComponent);\r\n                    exports.MDCFloatingLabel = MDCFloatingLabel;\r\n\r\n                    /***/\r\n                }),\r\n\r\n                          /***/ \"./packages/mdc-floating-label/constants.ts\":\r\n                /*!**************************************************!*\\\r\n  !*** ./packages/mdc-floating-label/constants.ts ***!\r\n  \\**************************************************/\r\n                /*! no static exports found */\r\n                /***/ (function(module, exports, __webpack_require__) {\r\n\r\n                    \"use strict\";\r\n\r\n                    /**\r\n                     * @license\r\n                     * Copyright 2016 Google Inc.\r\n                     *\r\n                     * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n                     * of this software and associated documentation files (the \"Software\"), to deal\r\n                     * in the Software without restriction, including without limitation the rights\r\n                     * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n                     * copies of the Software, and to permit persons to whom the Software is\r\n                     * furnished to do so, subject to the following conditions:\r\n                     *\r\n                     * The above copyright notice and this permission notice shall be included in\r\n                     * all copies or substantial portions of the Software.\r\n                     *\r\n                     * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n                     * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n                     * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n                     * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n                     * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n                     * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n                     * THE SOFTWARE.\r\n                     */\r\n\r\n                    Object.defineProperty(exports, \"__esModule\", {value: true});\r\n                    exports.cssClasses = {\r\n                        LABEL_FLOAT_ABOVE: 'mdc-floating-label--float-above',\r\n                        LABEL_REQUIRED: 'mdc-floating-label--required',\r\n                        LABEL_SHAKE: 'mdc-floating-label--shake',\r\n                        ROOT: 'mdc-floating-label'\r\n                    };\r\n\r\n                    /***/\r\n                }),\r\n\r\n                          /***/ \"./packages/mdc-floating-label/foundation.ts\":\r\n                /*!***************************************************!*\\\r\n  !*** ./packages/mdc-floating-label/foundation.ts ***!\r\n  \\***************************************************/\r\n                /*! no static exports found */\r\n                /***/ (function(module, exports, __webpack_require__) {\r\n\r\n                    \"use strict\";\r\n\r\n                    /**\r\n                     * @license\r\n                     * Copyright 2016 Google Inc.\r\n                     *\r\n                     * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n                     * of this software and associated documentation files (the \"Software\"), to deal\r\n                     * in the Software without restriction, including without limitation the rights\r\n                     * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n                     * copies of the Software, and to permit persons to whom the Software is\r\n                     * furnished to do so, subject to the following conditions:\r\n                     *\r\n                     * The above copyright notice and this permission notice shall be included in\r\n                     * all copies or substantial portions of the Software.\r\n                     *\r\n                     * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n                     * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n                     * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n                     * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n                     * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n                     * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n                     * THE SOFTWARE.\r\n                     */\r\n\r\n                    var __extends = this && this.__extends || function() {\r\n                        var _extendStatics = function extendStatics(d, b) {\r\n                            _extendStatics = Object.setPrototypeOf || {__proto__: []} instanceof Array && function(d, b) {\r\n                                d.__proto__ = b;\r\n                            } || function(d, b) {\r\n                                for (var p in b) {\r\n                                    if (b.hasOwnProperty(p)) {\r\n                                        d[p] = b[p];\r\n                                    }\r\n                                }\r\n                            };\r\n                            return _extendStatics(d, b);\r\n                        };\r\n                        return function(d, b) {\r\n                            _extendStatics(d, b);\r\n\r\n                            function __() {\r\n                                this.constructor = d;\r\n                            }\r\n\r\n                            d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n                        };\r\n                    }();\r\n                    var __assign = this && this.__assign || function() {\r\n                        __assign = Object.assign || function(t) {\r\n                            for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n                                s = arguments[i];\r\n                                for (var p in s) {\r\n                                    if (Object.prototype.hasOwnProperty.call(s, p)) {\r\n                                        t[p] = s[p];\r\n                                    }\r\n                                }\r\n                            }\r\n                            return t;\r\n                        };\r\n                        return __assign.apply(this, arguments);\r\n                    };\r\n                    Object.defineProperty(exports, \"__esModule\", {value: true});\r\n                    var foundation_1 = __webpack_require__(/*! @material/base/foundation */ \"./packages/mdc-base/foundation.ts\");\r\n                    var constants_1 = __webpack_require__(/*! ./constants */ \"./packages/mdc-floating-label/constants.ts\");\r\n                    var MDCFloatingLabelFoundation = /** @class */function(_super) {\r\n                        __extends(MDCFloatingLabelFoundation, _super);\r\n\r\n                        function MDCFloatingLabelFoundation(adapter) {\r\n                            var _this = _super.call(this, __assign(__assign({}, MDCFloatingLabelFoundation.defaultAdapter), adapter)) || this;\r\n                            _this.shakeAnimationEndHandler_ = function() {\r\n                                return _this.handleShakeAnimationEnd_();\r\n                            };\r\n                            return _this;\r\n                        }\r\n\r\n                        Object.defineProperty(MDCFloatingLabelFoundation, \"cssClasses\", {\r\n                            get: function get() {\r\n                                return constants_1.cssClasses;\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCFloatingLabelFoundation, \"defaultAdapter\", {\r\n                            /**\r\n                             * See {@link MDCFloatingLabelAdapter} for typing information on parameters and return types.\r\n                             */\r\n                            get: function get() {\r\n                                // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface.\r\n                                return {\r\n                                    addClass: function addClass() {\r\n                                        return undefined;\r\n                                    },\r\n                                    removeClass: function removeClass() {\r\n                                        return undefined;\r\n                                    },\r\n                                    getWidth: function getWidth() {\r\n                                        return 0;\r\n                                    },\r\n                                    registerInteractionHandler: function registerInteractionHandler() {\r\n                                        return undefined;\r\n                                    },\r\n                                    deregisterInteractionHandler: function deregisterInteractionHandler() {\r\n                                        return undefined;\r\n                                    }\r\n                                };\r\n                                // tslint:enable:object-literal-sort-keys\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        MDCFloatingLabelFoundation.prototype.init = function() {\r\n                            this.adapter.registerInteractionHandler('animationend', this.shakeAnimationEndHandler_);\r\n                        };\r\n                        MDCFloatingLabelFoundation.prototype.destroy = function() {\r\n                            this.adapter.deregisterInteractionHandler('animationend', this.shakeAnimationEndHandler_);\r\n                        };\r\n                        /**\r\n                         * Returns the width of the label element.\r\n                         */\r\n                        MDCFloatingLabelFoundation.prototype.getWidth = function() {\r\n                            return this.adapter.getWidth();\r\n                        };\r\n                        /**\r\n                         * Styles the label to produce a shake animation to indicate an error.\r\n                         * @param shouldShake If true, adds the shake CSS class; otherwise, removes shake class.\r\n                         */\r\n                        MDCFloatingLabelFoundation.prototype.shake = function(shouldShake) {\r\n                            var LABEL_SHAKE = MDCFloatingLabelFoundation.cssClasses.LABEL_SHAKE;\r\n                            if (shouldShake) {\r\n                                this.adapter.addClass(LABEL_SHAKE);\r\n                            } else {\r\n                                this.adapter.removeClass(LABEL_SHAKE);\r\n                            }\r\n                        };\r\n                        /**\r\n                         * Styles the label to float or dock.\r\n                         * @param shouldFloat If true, adds the float CSS class; otherwise, removes float and shake classes to dock the label.\r\n                         */\r\n                        MDCFloatingLabelFoundation.prototype.float = function(shouldFloat) {\r\n                            var _a = MDCFloatingLabelFoundation.cssClasses,\r\n                                    LABEL_FLOAT_ABOVE = _a.LABEL_FLOAT_ABOVE,\r\n                                    LABEL_SHAKE = _a.LABEL_SHAKE;\r\n                            if (shouldFloat) {\r\n                                this.adapter.addClass(LABEL_FLOAT_ABOVE);\r\n                            } else {\r\n                                this.adapter.removeClass(LABEL_FLOAT_ABOVE);\r\n                                this.adapter.removeClass(LABEL_SHAKE);\r\n                            }\r\n                        };\r\n                        /**\r\n                         * Styles the label as required.\r\n                         * @param isRequired If true, adds an asterisk to the label, indicating that it is required.\r\n                         */\r\n                        MDCFloatingLabelFoundation.prototype.setRequired = function(isRequired) {\r\n                            var LABEL_REQUIRED = MDCFloatingLabelFoundation.cssClasses.LABEL_REQUIRED;\r\n                            if (isRequired) {\r\n                                this.adapter.addClass(LABEL_REQUIRED);\r\n                            } else {\r\n                                this.adapter.removeClass(LABEL_REQUIRED);\r\n                            }\r\n                        };\r\n                        MDCFloatingLabelFoundation.prototype.handleShakeAnimationEnd_ = function() {\r\n                            var LABEL_SHAKE = MDCFloatingLabelFoundation.cssClasses.LABEL_SHAKE;\r\n                            this.adapter.removeClass(LABEL_SHAKE);\r\n                        };\r\n                        return MDCFloatingLabelFoundation;\r\n                    }(foundation_1.MDCFoundation);\r\n                    exports.MDCFloatingLabelFoundation = MDCFloatingLabelFoundation;\r\n// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier.\r\n                    exports.default = MDCFloatingLabelFoundation;\r\n\r\n                    /***/\r\n                }),\r\n\r\n                          /***/ \"./packages/mdc-line-ripple/component.ts\":\r\n                /*!***********************************************!*\\\r\n  !*** ./packages/mdc-line-ripple/component.ts ***!\r\n  \\***********************************************/\r\n                /*! no static exports found */\r\n                /***/ (function(module, exports, __webpack_require__) {\r\n\r\n                    \"use strict\";\r\n\r\n                    /**\r\n                     * @license\r\n                     * Copyright 2018 Google Inc.\r\n                     *\r\n                     * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n                     * of this software and associated documentation files (the \"Software\"), to deal\r\n                     * in the Software without restriction, including without limitation the rights\r\n                     * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n                     * copies of the Software, and to permit persons to whom the Software is\r\n                     * furnished to do so, subject to the following conditions:\r\n                     *\r\n                     * The above copyright notice and this permission notice shall be included in\r\n                     * all copies or substantial portions of the Software.\r\n                     *\r\n                     * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n                     * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n                     * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n                     * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n                     * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n                     * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n                     * THE SOFTWARE.\r\n                     */\r\n\r\n                    var __extends = this && this.__extends || function() {\r\n                        var _extendStatics = function extendStatics(d, b) {\r\n                            _extendStatics = Object.setPrototypeOf || {__proto__: []} instanceof Array && function(d, b) {\r\n                                d.__proto__ = b;\r\n                            } || function(d, b) {\r\n                                for (var p in b) {\r\n                                    if (b.hasOwnProperty(p)) {\r\n                                        d[p] = b[p];\r\n                                    }\r\n                                }\r\n                            };\r\n                            return _extendStatics(d, b);\r\n                        };\r\n                        return function(d, b) {\r\n                            _extendStatics(d, b);\r\n\r\n                            function __() {\r\n                                this.constructor = d;\r\n                            }\r\n\r\n                            d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n                        };\r\n                    }();\r\n                    Object.defineProperty(exports, \"__esModule\", {value: true});\r\n                    var component_1 = __webpack_require__(/*! @material/base/component */ \"./packages/mdc-base/component.ts\");\r\n                    var foundation_1 = __webpack_require__(/*! ./foundation */ \"./packages/mdc-line-ripple/foundation.ts\");\r\n                    var MDCLineRipple = /** @class */function(_super) {\r\n                        __extends(MDCLineRipple, _super);\r\n\r\n                        function MDCLineRipple() {\r\n                            return _super !== null && _super.apply(this, arguments) || this;\r\n                        }\r\n\r\n                        MDCLineRipple.attachTo = function(root) {\r\n                            return new MDCLineRipple(root);\r\n                        };\r\n                        /**\r\n                         * Activates the line ripple\r\n                         */\r\n                        MDCLineRipple.prototype.activate = function() {\r\n                            this.foundation.activate();\r\n                        };\r\n                        /**\r\n                         * Deactivates the line ripple\r\n                         */\r\n                        MDCLineRipple.prototype.deactivate = function() {\r\n                            this.foundation.deactivate();\r\n                        };\r\n                        /**\r\n                         * Sets the transform origin given a user's click location.\r\n                         * The `rippleCenter` is the x-coordinate of the middle of the ripple.\r\n                         */\r\n                        MDCLineRipple.prototype.setRippleCenter = function(xCoordinate) {\r\n                            this.foundation.setRippleCenter(xCoordinate);\r\n                        };\r\n                        MDCLineRipple.prototype.getDefaultFoundation = function() {\r\n                            var _this = this;\r\n                            // DO NOT INLINE this variable. For backward compatibility, foundations take a Partial<MDCFooAdapter>.\r\n                            // To ensure we don't accidentally omit any methods, we need a separate, strongly typed adapter variable.\r\n                            // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface.\r\n                            var adapter = {\r\n                                addClass: function addClass(className) {\r\n                                    return _this.root.classList.add(className);\r\n                                },\r\n                                removeClass: function removeClass(className) {\r\n                                    return _this.root.classList.remove(className);\r\n                                },\r\n                                hasClass: function hasClass(className) {\r\n                                    return _this.root.classList.contains(className);\r\n                                },\r\n                                setStyle: function setStyle(propertyName, value) {\r\n                                    return _this.root.style.setProperty(propertyName, value);\r\n                                },\r\n                                registerEventHandler: function registerEventHandler(evtType, handler) {\r\n                                    return _this.listen(evtType, handler);\r\n                                },\r\n                                deregisterEventHandler: function deregisterEventHandler(evtType, handler) {\r\n                                    return _this.unlisten(evtType, handler);\r\n                                }\r\n                            };\r\n                            // tslint:enable:object-literal-sort-keys\r\n                            return new foundation_1.MDCLineRippleFoundation(adapter);\r\n                        };\r\n                        return MDCLineRipple;\r\n                    }(component_1.MDCComponent);\r\n                    exports.MDCLineRipple = MDCLineRipple;\r\n\r\n                    /***/\r\n                }),\r\n\r\n                          /***/ \"./packages/mdc-line-ripple/constants.ts\":\r\n                /*!***********************************************!*\\\r\n  !*** ./packages/mdc-line-ripple/constants.ts ***!\r\n  \\***********************************************/\r\n                /*! no static exports found */\r\n                /***/ (function(module, exports, __webpack_require__) {\r\n\r\n                    \"use strict\";\r\n\r\n                    /**\r\n                     * @license\r\n                     * Copyright 2018 Google Inc.\r\n                     *\r\n                     * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n                     * of this software and associated documentation files (the \"Software\"), to deal\r\n                     * in the Software without restriction, including without limitation the rights\r\n                     * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n                     * copies of the Software, and to permit persons to whom the Software is\r\n                     * furnished to do so, subject to the following conditions:\r\n                     *\r\n                     * The above copyright notice and this permission notice shall be included in\r\n                     * all copies or substantial portions of the Software.\r\n                     *\r\n                     * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n                     * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n                     * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n                     * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n                     * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n                     * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n                     * THE SOFTWARE.\r\n                     */\r\n\r\n                    Object.defineProperty(exports, \"__esModule\", {value: true});\r\n                    var cssClasses = {\r\n                        LINE_RIPPLE_ACTIVE: 'mdc-line-ripple--active',\r\n                        LINE_RIPPLE_DEACTIVATING: 'mdc-line-ripple--deactivating'\r\n                    };\r\n                    exports.cssClasses = cssClasses;\r\n\r\n                    /***/\r\n                }),\r\n\r\n                          /***/ \"./packages/mdc-line-ripple/foundation.ts\":\r\n                /*!************************************************!*\\\r\n  !*** ./packages/mdc-line-ripple/foundation.ts ***!\r\n  \\************************************************/\r\n                /*! no static exports found */\r\n                /***/ (function(module, exports, __webpack_require__) {\r\n\r\n                    \"use strict\";\r\n\r\n                    /**\r\n                     * @license\r\n                     * Copyright 2018 Google Inc.\r\n                     *\r\n                     * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n                     * of this software and associated documentation files (the \"Software\"), to deal\r\n                     * in the Software without restriction, including without limitation the rights\r\n                     * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n                     * copies of the Software, and to permit persons to whom the Software is\r\n                     * furnished to do so, subject to the following conditions:\r\n                     *\r\n                     * The above copyright notice and this permission notice shall be included in\r\n                     * all copies or substantial portions of the Software.\r\n                     *\r\n                     * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n                     * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n                     * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n                     * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n                     * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n                     * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n                     * THE SOFTWARE.\r\n                     */\r\n\r\n                    var __extends = this && this.__extends || function() {\r\n                        var _extendStatics = function extendStatics(d, b) {\r\n                            _extendStatics = Object.setPrototypeOf || {__proto__: []} instanceof Array && function(d, b) {\r\n                                d.__proto__ = b;\r\n                            } || function(d, b) {\r\n                                for (var p in b) {\r\n                                    if (b.hasOwnProperty(p)) {\r\n                                        d[p] = b[p];\r\n                                    }\r\n                                }\r\n                            };\r\n                            return _extendStatics(d, b);\r\n                        };\r\n                        return function(d, b) {\r\n                            _extendStatics(d, b);\r\n\r\n                            function __() {\r\n                                this.constructor = d;\r\n                            }\r\n\r\n                            d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n                        };\r\n                    }();\r\n                    var __assign = this && this.__assign || function() {\r\n                        __assign = Object.assign || function(t) {\r\n                            for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n                                s = arguments[i];\r\n                                for (var p in s) {\r\n                                    if (Object.prototype.hasOwnProperty.call(s, p)) {\r\n                                        t[p] = s[p];\r\n                                    }\r\n                                }\r\n                            }\r\n                            return t;\r\n                        };\r\n                        return __assign.apply(this, arguments);\r\n                    };\r\n                    Object.defineProperty(exports, \"__esModule\", {value: true});\r\n                    var foundation_1 = __webpack_require__(/*! @material/base/foundation */ \"./packages/mdc-base/foundation.ts\");\r\n                    var constants_1 = __webpack_require__(/*! ./constants */ \"./packages/mdc-line-ripple/constants.ts\");\r\n                    var MDCLineRippleFoundation = /** @class */function(_super) {\r\n                        __extends(MDCLineRippleFoundation, _super);\r\n\r\n                        function MDCLineRippleFoundation(adapter) {\r\n                            var _this = _super.call(this, __assign(__assign({}, MDCLineRippleFoundation.defaultAdapter), adapter)) || this;\r\n                            _this.transitionEndHandler_ = function(evt) {\r\n                                return _this.handleTransitionEnd(evt);\r\n                            };\r\n                            return _this;\r\n                        }\r\n\r\n                        Object.defineProperty(MDCLineRippleFoundation, \"cssClasses\", {\r\n                            get: function get() {\r\n                                return constants_1.cssClasses;\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCLineRippleFoundation, \"defaultAdapter\", {\r\n                            /**\r\n                             * See {@link MDCLineRippleAdapter} for typing information on parameters and return types.\r\n                             */\r\n                            get: function get() {\r\n                                // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface.\r\n                                return {\r\n                                    addClass: function addClass() {\r\n                                        return undefined;\r\n                                    },\r\n                                    removeClass: function removeClass() {\r\n                                        return undefined;\r\n                                    },\r\n                                    hasClass: function hasClass() {\r\n                                        return false;\r\n                                    },\r\n                                    setStyle: function setStyle() {\r\n                                        return undefined;\r\n                                    },\r\n                                    registerEventHandler: function registerEventHandler() {\r\n                                        return undefined;\r\n                                    },\r\n                                    deregisterEventHandler: function deregisterEventHandler() {\r\n                                        return undefined;\r\n                                    }\r\n                                };\r\n                                // tslint:enable:object-literal-sort-keys\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        MDCLineRippleFoundation.prototype.init = function() {\r\n                            this.adapter.registerEventHandler('transitionend', this.transitionEndHandler_);\r\n                        };\r\n                        MDCLineRippleFoundation.prototype.destroy = function() {\r\n                            this.adapter.deregisterEventHandler('transitionend', this.transitionEndHandler_);\r\n                        };\r\n                        MDCLineRippleFoundation.prototype.activate = function() {\r\n                            this.adapter.removeClass(constants_1.cssClasses.LINE_RIPPLE_DEACTIVATING);\r\n                            this.adapter.addClass(constants_1.cssClasses.LINE_RIPPLE_ACTIVE);\r\n                        };\r\n                        MDCLineRippleFoundation.prototype.setRippleCenter = function(xCoordinate) {\r\n                            this.adapter.setStyle('transform-origin', xCoordinate + \"px center\");\r\n                        };\r\n                        MDCLineRippleFoundation.prototype.deactivate = function() {\r\n                            this.adapter.addClass(constants_1.cssClasses.LINE_RIPPLE_DEACTIVATING);\r\n                        };\r\n                        MDCLineRippleFoundation.prototype.handleTransitionEnd = function(evt) {\r\n                            // Wait for the line ripple to be either transparent or opaque\r\n                            // before emitting the animation end event\r\n                            var isDeactivating = this.adapter.hasClass(constants_1.cssClasses.LINE_RIPPLE_DEACTIVATING);\r\n                            if (evt.propertyName === 'opacity') {\r\n                                if (isDeactivating) {\r\n                                    this.adapter.removeClass(constants_1.cssClasses.LINE_RIPPLE_ACTIVE);\r\n                                    this.adapter.removeClass(constants_1.cssClasses.LINE_RIPPLE_DEACTIVATING);\r\n                                }\r\n                            }\r\n                        };\r\n                        return MDCLineRippleFoundation;\r\n                    }(foundation_1.MDCFoundation);\r\n                    exports.MDCLineRippleFoundation = MDCLineRippleFoundation;\r\n// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier.\r\n                    exports.default = MDCLineRippleFoundation;\r\n\r\n                    /***/\r\n                }),\r\n\r\n                          /***/ \"./packages/mdc-notched-outline/component.ts\":\r\n                /*!***************************************************!*\\\r\n  !*** ./packages/mdc-notched-outline/component.ts ***!\r\n  \\***************************************************/\r\n                /*! no static exports found */\r\n                /***/ (function(module, exports, __webpack_require__) {\r\n\r\n                    \"use strict\";\r\n\r\n                    /**\r\n                     * @license\r\n                     * Copyright 2017 Google Inc.\r\n                     *\r\n                     * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n                     * of this software and associated documentation files (the \"Software\"), to deal\r\n                     * in the Software without restriction, including without limitation the rights\r\n                     * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n                     * copies of the Software, and to permit persons to whom the Software is\r\n                     * furnished to do so, subject to the following conditions:\r\n                     *\r\n                     * The above copyright notice and this permission notice shall be included in\r\n                     * all copies or substantial portions of the Software.\r\n                     *\r\n                     * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n                     * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n                     * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n                     * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n                     * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n                     * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n                     * THE SOFTWARE.\r\n                     */\r\n\r\n                    var __extends = this && this.__extends || function() {\r\n                        var _extendStatics = function extendStatics(d, b) {\r\n                            _extendStatics = Object.setPrototypeOf || {__proto__: []} instanceof Array && function(d, b) {\r\n                                d.__proto__ = b;\r\n                            } || function(d, b) {\r\n                                for (var p in b) {\r\n                                    if (b.hasOwnProperty(p)) {\r\n                                        d[p] = b[p];\r\n                                    }\r\n                                }\r\n                            };\r\n                            return _extendStatics(d, b);\r\n                        };\r\n                        return function(d, b) {\r\n                            _extendStatics(d, b);\r\n\r\n                            function __() {\r\n                                this.constructor = d;\r\n                            }\r\n\r\n                            d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n                        };\r\n                    }();\r\n                    Object.defineProperty(exports, \"__esModule\", {value: true});\r\n                    var component_1 = __webpack_require__(/*! @material/base/component */ \"./packages/mdc-base/component.ts\");\r\n                    var foundation_1 = __webpack_require__(/*! @material/floating-label/foundation */ \"./packages/mdc-floating-label/foundation.ts\");\r\n                    var constants_1 = __webpack_require__(/*! ./constants */ \"./packages/mdc-notched-outline/constants.ts\");\r\n                    var foundation_2 = __webpack_require__(/*! ./foundation */ \"./packages/mdc-notched-outline/foundation.ts\");\r\n                    var MDCNotchedOutline = /** @class */function(_super) {\r\n                        __extends(MDCNotchedOutline, _super);\r\n\r\n                        function MDCNotchedOutline() {\r\n                            return _super !== null && _super.apply(this, arguments) || this;\r\n                        }\r\n\r\n                        MDCNotchedOutline.attachTo = function(root) {\r\n                            return new MDCNotchedOutline(root);\r\n                        };\r\n                        MDCNotchedOutline.prototype.initialSyncWithDOM = function() {\r\n                            this.notchElement_ = this.root.querySelector(constants_1.strings.NOTCH_ELEMENT_SELECTOR);\r\n                            var label = this.root.querySelector('.' + foundation_1.MDCFloatingLabelFoundation.cssClasses.ROOT);\r\n                            if (label) {\r\n                                label.style.transitionDuration = '0s';\r\n                                this.root.classList.add(constants_1.cssClasses.OUTLINE_UPGRADED);\r\n                                requestAnimationFrame(function() {\r\n                                    label.style.transitionDuration = '';\r\n                                });\r\n                            } else {\r\n                                this.root.classList.add(constants_1.cssClasses.NO_LABEL);\r\n                            }\r\n                        };\r\n                        /**\r\n                         * Updates classes and styles to open the notch to the specified width.\r\n                         * @param notchWidth The notch width in the outline.\r\n                         */\r\n                        MDCNotchedOutline.prototype.notch = function(notchWidth) {\r\n                            this.foundation.notch(notchWidth);\r\n                        };\r\n                        /**\r\n                         * Updates classes and styles to close the notch.\r\n                         */\r\n                        MDCNotchedOutline.prototype.closeNotch = function() {\r\n                            this.foundation.closeNotch();\r\n                        };\r\n                        MDCNotchedOutline.prototype.getDefaultFoundation = function() {\r\n                            var _this = this;\r\n                            // DO NOT INLINE this variable. For backward compatibility, foundations take a Partial<MDCFooAdapter>.\r\n                            // To ensure we don't accidentally omit any methods, we need a separate, strongly typed adapter variable.\r\n                            // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface.\r\n                            var adapter = {\r\n                                addClass: function addClass(className) {\r\n                                    return _this.root.classList.add(className);\r\n                                },\r\n                                removeClass: function removeClass(className) {\r\n                                    return _this.root.classList.remove(className);\r\n                                },\r\n                                setNotchWidthProperty: function setNotchWidthProperty(width) {\r\n                                    return _this.notchElement_.style.setProperty('width', width + 'px');\r\n                                },\r\n                                removeNotchWidthProperty: function removeNotchWidthProperty() {\r\n                                    return _this.notchElement_.style.removeProperty('width');\r\n                                }\r\n                            };\r\n                            // tslint:enable:object-literal-sort-keys\r\n                            return new foundation_2.MDCNotchedOutlineFoundation(adapter);\r\n                        };\r\n                        return MDCNotchedOutline;\r\n                    }(component_1.MDCComponent);\r\n                    exports.MDCNotchedOutline = MDCNotchedOutline;\r\n\r\n                    /***/\r\n                }),\r\n\r\n                          /***/ \"./packages/mdc-notched-outline/constants.ts\":\r\n                /*!***************************************************!*\\\r\n  !*** ./packages/mdc-notched-outline/constants.ts ***!\r\n  \\***************************************************/\r\n                /*! no static exports found */\r\n                /***/ (function(module, exports, __webpack_require__) {\r\n\r\n                    \"use strict\";\r\n\r\n                    /**\r\n                     * @license\r\n                     * Copyright 2018 Google Inc.\r\n                     *\r\n                     * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n                     * of this software and associated documentation files (the \"Software\"), to deal\r\n                     * in the Software without restriction, including without limitation the rights\r\n                     * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n                     * copies of the Software, and to permit persons to whom the Software is\r\n                     * furnished to do so, subject to the following conditions:\r\n                     *\r\n                     * The above copyright notice and this permission notice shall be included in\r\n                     * all copies or substantial portions of the Software.\r\n                     *\r\n                     * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n                     * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n                     * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n                     * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n                     * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n                     * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n                     * THE SOFTWARE.\r\n                     */\r\n\r\n                    Object.defineProperty(exports, \"__esModule\", {value: true});\r\n                    var strings = {\r\n                        NOTCH_ELEMENT_SELECTOR: '.mdc-notched-outline__notch'\r\n                    };\r\n                    exports.strings = strings;\r\n                    var numbers = {\r\n                        // This should stay in sync with $mdc-notched-outline-padding * 2.\r\n                        NOTCH_ELEMENT_PADDING: 8\r\n                    };\r\n                    exports.numbers = numbers;\r\n                    var cssClasses = {\r\n                        NO_LABEL: 'mdc-notched-outline--no-label',\r\n                        OUTLINE_NOTCHED: 'mdc-notched-outline--notched',\r\n                        OUTLINE_UPGRADED: 'mdc-notched-outline--upgraded'\r\n                    };\r\n                    exports.cssClasses = cssClasses;\r\n\r\n                    /***/\r\n                }),\r\n\r\n                          /***/ \"./packages/mdc-notched-outline/foundation.ts\":\r\n                /*!****************************************************!*\\\r\n  !*** ./packages/mdc-notched-outline/foundation.ts ***!\r\n  \\****************************************************/\r\n                /*! no static exports found */\r\n                /***/ (function(module, exports, __webpack_require__) {\r\n\r\n                    \"use strict\";\r\n\r\n                    /**\r\n                     * @license\r\n                     * Copyright 2017 Google Inc.\r\n                     *\r\n                     * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n                     * of this software and associated documentation files (the \"Software\"), to deal\r\n                     * in the Software without restriction, including without limitation the rights\r\n                     * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n                     * copies of the Software, and to permit persons to whom the Software is\r\n                     * furnished to do so, subject to the following conditions:\r\n                     *\r\n                     * The above copyright notice and this permission notice shall be included in\r\n                     * all copies or substantial portions of the Software.\r\n                     *\r\n                     * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n                     * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n                     * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n                     * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n                     * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n                     * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n                     * THE SOFTWARE.\r\n                     */\r\n\r\n                    var __extends = this && this.__extends || function() {\r\n                        var _extendStatics = function extendStatics(d, b) {\r\n                            _extendStatics = Object.setPrototypeOf || {__proto__: []} instanceof Array && function(d, b) {\r\n                                d.__proto__ = b;\r\n                            } || function(d, b) {\r\n                                for (var p in b) {\r\n                                    if (b.hasOwnProperty(p)) {\r\n                                        d[p] = b[p];\r\n                                    }\r\n                                }\r\n                            };\r\n                            return _extendStatics(d, b);\r\n                        };\r\n                        return function(d, b) {\r\n                            _extendStatics(d, b);\r\n\r\n                            function __() {\r\n                                this.constructor = d;\r\n                            }\r\n\r\n                            d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n                        };\r\n                    }();\r\n                    var __assign = this && this.__assign || function() {\r\n                        __assign = Object.assign || function(t) {\r\n                            for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n                                s = arguments[i];\r\n                                for (var p in s) {\r\n                                    if (Object.prototype.hasOwnProperty.call(s, p)) {\r\n                                        t[p] = s[p];\r\n                                    }\r\n                                }\r\n                            }\r\n                            return t;\r\n                        };\r\n                        return __assign.apply(this, arguments);\r\n                    };\r\n                    Object.defineProperty(exports, \"__esModule\", {value: true});\r\n                    var foundation_1 = __webpack_require__(/*! @material/base/foundation */ \"./packages/mdc-base/foundation.ts\");\r\n                    var constants_1 = __webpack_require__(/*! ./constants */ \"./packages/mdc-notched-outline/constants.ts\");\r\n                    var MDCNotchedOutlineFoundation = /** @class */function(_super) {\r\n                        __extends(MDCNotchedOutlineFoundation, _super);\r\n\r\n                        function MDCNotchedOutlineFoundation(adapter) {\r\n                            return _super.call(this, __assign(__assign({}, MDCNotchedOutlineFoundation.defaultAdapter), adapter)) || this;\r\n                        }\r\n\r\n                        Object.defineProperty(MDCNotchedOutlineFoundation, \"strings\", {\r\n                            get: function get() {\r\n                                return constants_1.strings;\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCNotchedOutlineFoundation, \"cssClasses\", {\r\n                            get: function get() {\r\n                                return constants_1.cssClasses;\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCNotchedOutlineFoundation, \"numbers\", {\r\n                            get: function get() {\r\n                                return constants_1.numbers;\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCNotchedOutlineFoundation, \"defaultAdapter\", {\r\n                            /**\r\n                             * See {@link MDCNotchedOutlineAdapter} for typing information on parameters and return types.\r\n                             */\r\n                            get: function get() {\r\n                                // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface.\r\n                                return {\r\n                                    addClass: function addClass() {\r\n                                        return undefined;\r\n                                    },\r\n                                    removeClass: function removeClass() {\r\n                                        return undefined;\r\n                                    },\r\n                                    setNotchWidthProperty: function setNotchWidthProperty() {\r\n                                        return undefined;\r\n                                    },\r\n                                    removeNotchWidthProperty: function removeNotchWidthProperty() {\r\n                                        return undefined;\r\n                                    }\r\n                                };\r\n                                // tslint:enable:object-literal-sort-keys\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        /**\r\n                         * Adds the outline notched selector and updates the notch width calculated based off of notchWidth.\r\n                         */\r\n                        MDCNotchedOutlineFoundation.prototype.notch = function(notchWidth) {\r\n                            var OUTLINE_NOTCHED = MDCNotchedOutlineFoundation.cssClasses.OUTLINE_NOTCHED;\r\n                            if (notchWidth > 0) {\r\n                                notchWidth += constants_1.numbers.NOTCH_ELEMENT_PADDING; // Add padding from left/right.\r\n                            }\r\n                            this.adapter.setNotchWidthProperty(notchWidth);\r\n                            this.adapter.addClass(OUTLINE_NOTCHED);\r\n                        };\r\n                        /**\r\n                         * Removes notched outline selector to close the notch in the outline.\r\n                         */\r\n                        MDCNotchedOutlineFoundation.prototype.closeNotch = function() {\r\n                            var OUTLINE_NOTCHED = MDCNotchedOutlineFoundation.cssClasses.OUTLINE_NOTCHED;\r\n                            this.adapter.removeClass(OUTLINE_NOTCHED);\r\n                            this.adapter.removeNotchWidthProperty();\r\n                        };\r\n                        return MDCNotchedOutlineFoundation;\r\n                    }(foundation_1.MDCFoundation);\r\n                    exports.MDCNotchedOutlineFoundation = MDCNotchedOutlineFoundation;\r\n// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier.\r\n                    exports.default = MDCNotchedOutlineFoundation;\r\n\r\n                    /***/\r\n                }),\r\n\r\n                          /***/ \"./packages/mdc-ripple/component.ts\":\r\n                /*!******************************************!*\\\r\n  !*** ./packages/mdc-ripple/component.ts ***!\r\n  \\******************************************/\r\n                /*! no static exports found */\r\n                /***/ (function(module, exports, __webpack_require__) {\r\n\r\n                    \"use strict\";\r\n\r\n                    /**\r\n                     * @license\r\n                     * Copyright 2016 Google Inc.\r\n                     *\r\n                     * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n                     * of this software and associated documentation files (the \"Software\"), to deal\r\n                     * in the Software without restriction, including without limitation the rights\r\n                     * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n                     * copies of the Software, and to permit persons to whom the Software is\r\n                     * furnished to do so, subject to the following conditions:\r\n                     *\r\n                     * The above copyright notice and this permission notice shall be included in\r\n                     * all copies or substantial portions of the Software.\r\n                     *\r\n                     * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n                     * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n                     * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n                     * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n                     * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n                     * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n                     * THE SOFTWARE.\r\n                     */\r\n\r\n                    var __extends = this && this.__extends || function() {\r\n                        var _extendStatics = function extendStatics(d, b) {\r\n                            _extendStatics = Object.setPrototypeOf || {__proto__: []} instanceof Array && function(d, b) {\r\n                                d.__proto__ = b;\r\n                            } || function(d, b) {\r\n                                for (var p in b) {\r\n                                    if (b.hasOwnProperty(p)) {\r\n                                        d[p] = b[p];\r\n                                    }\r\n                                }\r\n                            };\r\n                            return _extendStatics(d, b);\r\n                        };\r\n                        return function(d, b) {\r\n                            _extendStatics(d, b);\r\n\r\n                            function __() {\r\n                                this.constructor = d;\r\n                            }\r\n\r\n                            d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n                        };\r\n                    }();\r\n                    var __importStar = this && this.__importStar || function(mod) {\r\n                        if (mod && mod.__esModule) {\r\n                            return mod;\r\n                        }\r\n                        var result = {};\r\n                        if (mod != null) {\r\n                            for (var k in mod) {\r\n                                if (Object.hasOwnProperty.call(mod, k)) {\r\n                                    result[k] = mod[k];\r\n                                }\r\n                            }\r\n                        }\r\n                        result[\"default\"] = mod;\r\n                        return result;\r\n                    };\r\n                    Object.defineProperty(exports, \"__esModule\", {value: true});\r\n                    var component_1 = __webpack_require__(/*! @material/base/component */ \"./packages/mdc-base/component.ts\");\r\n                    var events_1 = __webpack_require__(/*! @material/dom/events */ \"./packages/mdc-dom/events.ts\");\r\n                    var ponyfill_1 = __webpack_require__(/*! @material/dom/ponyfill */ \"./packages/mdc-dom/ponyfill.ts\");\r\n                    var foundation_1 = __webpack_require__(/*! ./foundation */ \"./packages/mdc-ripple/foundation.ts\");\r\n                    var util = __importStar(__webpack_require__(/*! ./util */ \"./packages/mdc-ripple/util.ts\"));\r\n                    var MDCRipple = /** @class */function(_super) {\r\n                        __extends(MDCRipple, _super);\r\n\r\n                        function MDCRipple() {\r\n                            var _this = _super !== null && _super.apply(this, arguments) || this;\r\n                            _this.disabled = false;\r\n                            return _this;\r\n                        }\r\n\r\n                        MDCRipple.attachTo = function(root, opts) {\r\n                            if (opts === void 0) {\r\n                                opts = {isUnbounded: undefined};\r\n                            }\r\n                            var ripple = new MDCRipple(root);\r\n                            // Only override unbounded behavior if option is explicitly specified\r\n                            if (opts.isUnbounded !== undefined) {\r\n                                ripple.unbounded = opts.isUnbounded;\r\n                            }\r\n                            return ripple;\r\n                        };\r\n                        MDCRipple.createAdapter = function(instance) {\r\n                            return {\r\n                                addClass: function addClass(className) {\r\n                                    return instance.root.classList.add(className);\r\n                                },\r\n                                browserSupportsCssVars: function browserSupportsCssVars() {\r\n                                    return util.supportsCssVariables(window);\r\n                                },\r\n                                computeBoundingRect: function computeBoundingRect() {\r\n                                    return instance.root.getBoundingClientRect();\r\n                                },\r\n                                containsEventTarget: function containsEventTarget(target) {\r\n                                    return instance.root.contains(target);\r\n                                },\r\n                                deregisterDocumentInteractionHandler: function deregisterDocumentInteractionHandler(evtType, handler) {\r\n                                    return document.documentElement.removeEventListener(evtType, handler, events_1.applyPassive());\r\n                                },\r\n                                deregisterInteractionHandler: function deregisterInteractionHandler(evtType, handler) {\r\n                                    return instance.root.removeEventListener(evtType, handler, events_1.applyPassive());\r\n                                },\r\n                                deregisterResizeHandler: function deregisterResizeHandler(handler) {\r\n                                    return window.removeEventListener('resize', handler);\r\n                                },\r\n                                getWindowPageOffset: function getWindowPageOffset() {\r\n                                    return {x: window.pageXOffset, y: window.pageYOffset};\r\n                                },\r\n                                isSurfaceActive: function isSurfaceActive() {\r\n                                    return ponyfill_1.matches(instance.root, ':active');\r\n                                },\r\n                                isSurfaceDisabled: function isSurfaceDisabled() {\r\n                                    return Boolean(instance.disabled);\r\n                                },\r\n                                isUnbounded: function isUnbounded() {\r\n                                    return Boolean(instance.unbounded);\r\n                                },\r\n                                registerDocumentInteractionHandler: function registerDocumentInteractionHandler(evtType, handler) {\r\n                                    return document.documentElement.addEventListener(evtType, handler, events_1.applyPassive());\r\n                                },\r\n                                registerInteractionHandler: function registerInteractionHandler(evtType, handler) {\r\n                                    return instance.root.addEventListener(evtType, handler, events_1.applyPassive());\r\n                                },\r\n                                registerResizeHandler: function registerResizeHandler(handler) {\r\n                                    return window.addEventListener('resize', handler);\r\n                                },\r\n                                removeClass: function removeClass(className) {\r\n                                    return instance.root.classList.remove(className);\r\n                                },\r\n                                updateCssVariable: function updateCssVariable(varName, value) {\r\n                                    return instance.root.style.setProperty(varName, value);\r\n                                }\r\n                            };\r\n                        };\r\n                        Object.defineProperty(MDCRipple.prototype, \"unbounded\", {\r\n                            get: function get() {\r\n                                return Boolean(this.unbounded_);\r\n                            },\r\n                            set: function set(unbounded) {\r\n                                this.unbounded_ = Boolean(unbounded);\r\n                                this.setUnbounded_();\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        MDCRipple.prototype.activate = function() {\r\n                            this.foundation.activate();\r\n                        };\r\n                        MDCRipple.prototype.deactivate = function() {\r\n                            this.foundation.deactivate();\r\n                        };\r\n                        MDCRipple.prototype.layout = function() {\r\n                            this.foundation.layout();\r\n                        };\r\n                        MDCRipple.prototype.getDefaultFoundation = function() {\r\n                            return new foundation_1.MDCRippleFoundation(MDCRipple.createAdapter(this));\r\n                        };\r\n                        MDCRipple.prototype.initialSyncWithDOM = function() {\r\n                            var root = this.root;\r\n                            this.unbounded = 'mdcRippleIsUnbounded' in root.dataset;\r\n                        };\r\n                        /**\r\n                         * Closure Compiler throws an access control error when directly accessing a\r\n                         * protected or private property inside a getter/setter, like unbounded above.\r\n                         * By accessing the protected property inside a method, we solve that problem.\r\n                         * That's why this function exists.\r\n                         */\r\n                        MDCRipple.prototype.setUnbounded_ = function() {\r\n                            this.foundation.setUnbounded(Boolean(this.unbounded_));\r\n                        };\r\n                        return MDCRipple;\r\n                    }(component_1.MDCComponent);\r\n                    exports.MDCRipple = MDCRipple;\r\n\r\n                    /***/\r\n                }),\r\n\r\n                          /***/ \"./packages/mdc-ripple/constants.ts\":\r\n                /*!******************************************!*\\\r\n  !*** ./packages/mdc-ripple/constants.ts ***!\r\n  \\******************************************/\r\n                /*! no static exports found */\r\n                /***/ (function(module, exports, __webpack_require__) {\r\n\r\n                    \"use strict\";\r\n\r\n                    /**\r\n                     * @license\r\n                     * Copyright 2016 Google Inc.\r\n                     *\r\n                     * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n                     * of this software and associated documentation files (the \"Software\"), to deal\r\n                     * in the Software without restriction, including without limitation the rights\r\n                     * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n                     * copies of the Software, and to permit persons to whom the Software is\r\n                     * furnished to do so, subject to the following conditions:\r\n                     *\r\n                     * The above copyright notice and this permission notice shall be included in\r\n                     * all copies or substantial portions of the Software.\r\n                     *\r\n                     * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n                     * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n                     * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n                     * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n                     * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n                     * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n                     * THE SOFTWARE.\r\n                     */\r\n\r\n                    Object.defineProperty(exports, \"__esModule\", {value: true});\r\n                    exports.cssClasses = {\r\n                        // Ripple is a special case where the \"root\" component is really a \"mixin\" of sorts,\r\n                        // given that it's an 'upgrade' to an existing component. That being said it is the root\r\n                        // CSS class that all other CSS classes derive from.\r\n                        BG_FOCUSED: 'mdc-ripple-upgraded--background-focused',\r\n                        FG_ACTIVATION: 'mdc-ripple-upgraded--foreground-activation',\r\n                        FG_DEACTIVATION: 'mdc-ripple-upgraded--foreground-deactivation',\r\n                        ROOT: 'mdc-ripple-upgraded',\r\n                        UNBOUNDED: 'mdc-ripple-upgraded--unbounded'\r\n                    };\r\n                    exports.strings = {\r\n                        VAR_FG_SCALE: '--mdc-ripple-fg-scale',\r\n                        VAR_FG_SIZE: '--mdc-ripple-fg-size',\r\n                        VAR_FG_TRANSLATE_END: '--mdc-ripple-fg-translate-end',\r\n                        VAR_FG_TRANSLATE_START: '--mdc-ripple-fg-translate-start',\r\n                        VAR_LEFT: '--mdc-ripple-left',\r\n                        VAR_TOP: '--mdc-ripple-top'\r\n                    };\r\n                    exports.numbers = {\r\n                        DEACTIVATION_TIMEOUT_MS: 225,\r\n                        FG_DEACTIVATION_MS: 150,\r\n                        INITIAL_ORIGIN_SCALE: 0.6,\r\n                        PADDING: 10,\r\n                        TAP_DELAY_MS: 300\r\n                    };\r\n\r\n                    /***/\r\n                }),\r\n\r\n                          /***/ \"./packages/mdc-ripple/foundation.ts\":\r\n                /*!*******************************************!*\\\r\n  !*** ./packages/mdc-ripple/foundation.ts ***!\r\n  \\*******************************************/\r\n                /*! no static exports found */\r\n                /***/ (function(module, exports, __webpack_require__) {\r\n\r\n                    \"use strict\";\r\n\r\n                    /**\r\n                     * @license\r\n                     * Copyright 2016 Google Inc.\r\n                     *\r\n                     * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n                     * of this software and associated documentation files (the \"Software\"), to deal\r\n                     * in the Software without restriction, including without limitation the rights\r\n                     * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n                     * copies of the Software, and to permit persons to whom the Software is\r\n                     * furnished to do so, subject to the following conditions:\r\n                     *\r\n                     * The above copyright notice and this permission notice shall be included in\r\n                     * all copies or substantial portions of the Software.\r\n                     *\r\n                     * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n                     * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n                     * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n                     * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n                     * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n                     * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n                     * THE SOFTWARE.\r\n                     */\r\n\r\n                    var __extends = this && this.__extends || function() {\r\n                        var _extendStatics = function extendStatics(d, b) {\r\n                            _extendStatics = Object.setPrototypeOf || {__proto__: []} instanceof Array && function(d, b) {\r\n                                d.__proto__ = b;\r\n                            } || function(d, b) {\r\n                                for (var p in b) {\r\n                                    if (b.hasOwnProperty(p)) {\r\n                                        d[p] = b[p];\r\n                                    }\r\n                                }\r\n                            };\r\n                            return _extendStatics(d, b);\r\n                        };\r\n                        return function(d, b) {\r\n                            _extendStatics(d, b);\r\n\r\n                            function __() {\r\n                                this.constructor = d;\r\n                            }\r\n\r\n                            d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n                        };\r\n                    }();\r\n                    var __assign = this && this.__assign || function() {\r\n                        __assign = Object.assign || function(t) {\r\n                            for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n                                s = arguments[i];\r\n                                for (var p in s) {\r\n                                    if (Object.prototype.hasOwnProperty.call(s, p)) {\r\n                                        t[p] = s[p];\r\n                                    }\r\n                                }\r\n                            }\r\n                            return t;\r\n                        };\r\n                        return __assign.apply(this, arguments);\r\n                    };\r\n                    Object.defineProperty(exports, \"__esModule\", {value: true});\r\n                    var foundation_1 = __webpack_require__(/*! @material/base/foundation */ \"./packages/mdc-base/foundation.ts\");\r\n                    var constants_1 = __webpack_require__(/*! ./constants */ \"./packages/mdc-ripple/constants.ts\");\r\n                    var util_1 = __webpack_require__(/*! ./util */ \"./packages/mdc-ripple/util.ts\");\r\n// Activation events registered on the root element of each instance for activation\r\n                    var ACTIVATION_EVENT_TYPES = ['touchstart', 'pointerdown', 'mousedown', 'keydown'];\r\n// Deactivation events registered on documentElement when a pointer-related down event occurs\r\n                    var POINTER_DEACTIVATION_EVENT_TYPES = ['touchend', 'pointerup', 'mouseup', 'contextmenu'];\r\n// simultaneous nested activations\r\n                    var activatedTargets = [];\r\n                    var MDCRippleFoundation = /** @class */function(_super) {\r\n                        __extends(MDCRippleFoundation, _super);\r\n\r\n                        function MDCRippleFoundation(adapter) {\r\n                            var _this = _super.call(this, __assign(__assign({}, MDCRippleFoundation.defaultAdapter), adapter)) || this;\r\n                            _this.activationAnimationHasEnded_ = false;\r\n                            _this.activationTimer_ = 0;\r\n                            _this.fgDeactivationRemovalTimer_ = 0;\r\n                            _this.fgScale_ = '0';\r\n                            _this.frame_ = {width: 0, height: 0};\r\n                            _this.initialSize_ = 0;\r\n                            _this.layoutFrame_ = 0;\r\n                            _this.maxRadius_ = 0;\r\n                            _this.unboundedCoords_ = {left: 0, top: 0};\r\n                            _this.activationState_ = _this.defaultActivationState_();\r\n                            _this.activationTimerCallback_ = function() {\r\n                                _this.activationAnimationHasEnded_ = true;\r\n                                _this.runDeactivationUXLogicIfReady_();\r\n                            };\r\n                            _this.activateHandler_ = function(e) {\r\n                                return _this.activate_(e);\r\n                            };\r\n                            _this.deactivateHandler_ = function() {\r\n                                return _this.deactivate_();\r\n                            };\r\n                            _this.focusHandler_ = function() {\r\n                                return _this.handleFocus();\r\n                            };\r\n                            _this.blurHandler_ = function() {\r\n                                return _this.handleBlur();\r\n                            };\r\n                            _this.resizeHandler_ = function() {\r\n                                return _this.layout();\r\n                            };\r\n                            return _this;\r\n                        }\r\n\r\n                        Object.defineProperty(MDCRippleFoundation, \"cssClasses\", {\r\n                            get: function get() {\r\n                                return constants_1.cssClasses;\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCRippleFoundation, \"strings\", {\r\n                            get: function get() {\r\n                                return constants_1.strings;\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCRippleFoundation, \"numbers\", {\r\n                            get: function get() {\r\n                                return constants_1.numbers;\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCRippleFoundation, \"defaultAdapter\", {\r\n                            get: function get() {\r\n                                return {\r\n                                    addClass: function addClass() {\r\n                                        return undefined;\r\n                                    },\r\n                                    browserSupportsCssVars: function browserSupportsCssVars() {\r\n                                        return true;\r\n                                    },\r\n                                    computeBoundingRect: function computeBoundingRect() {\r\n                                        return {top: 0, right: 0, bottom: 0, left: 0, width: 0, height: 0};\r\n                                    },\r\n                                    containsEventTarget: function containsEventTarget() {\r\n                                        return true;\r\n                                    },\r\n                                    deregisterDocumentInteractionHandler: function deregisterDocumentInteractionHandler() {\r\n                                        return undefined;\r\n                                    },\r\n                                    deregisterInteractionHandler: function deregisterInteractionHandler() {\r\n                                        return undefined;\r\n                                    },\r\n                                    deregisterResizeHandler: function deregisterResizeHandler() {\r\n                                        return undefined;\r\n                                    },\r\n                                    getWindowPageOffset: function getWindowPageOffset() {\r\n                                        return {x: 0, y: 0};\r\n                                    },\r\n                                    isSurfaceActive: function isSurfaceActive() {\r\n                                        return true;\r\n                                    },\r\n                                    isSurfaceDisabled: function isSurfaceDisabled() {\r\n                                        return true;\r\n                                    },\r\n                                    isUnbounded: function isUnbounded() {\r\n                                        return true;\r\n                                    },\r\n                                    registerDocumentInteractionHandler: function registerDocumentInteractionHandler() {\r\n                                        return undefined;\r\n                                    },\r\n                                    registerInteractionHandler: function registerInteractionHandler() {\r\n                                        return undefined;\r\n                                    },\r\n                                    registerResizeHandler: function registerResizeHandler() {\r\n                                        return undefined;\r\n                                    },\r\n                                    removeClass: function removeClass() {\r\n                                        return undefined;\r\n                                    },\r\n                                    updateCssVariable: function updateCssVariable() {\r\n                                        return undefined;\r\n                                    }\r\n                                };\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        MDCRippleFoundation.prototype.init = function() {\r\n                            var _this = this;\r\n                            var supportsPressRipple = this.supportsPressRipple_();\r\n                            this.registerRootHandlers_(supportsPressRipple);\r\n                            if (supportsPressRipple) {\r\n                                var _a = MDCRippleFoundation.cssClasses,\r\n                                        ROOT_1 = _a.ROOT,\r\n                                        UNBOUNDED_1 = _a.UNBOUNDED;\r\n                                requestAnimationFrame(function() {\r\n                                    _this.adapter.addClass(ROOT_1);\r\n                                    if (_this.adapter.isUnbounded()) {\r\n                                        _this.adapter.addClass(UNBOUNDED_1);\r\n                                        // Unbounded ripples need layout logic applied immediately to set coordinates for both shade and ripple\r\n                                        _this.layoutInternal_();\r\n                                    }\r\n                                });\r\n                            }\r\n                        };\r\n                        MDCRippleFoundation.prototype.destroy = function() {\r\n                            var _this = this;\r\n                            if (this.supportsPressRipple_()) {\r\n                                if (this.activationTimer_) {\r\n                                    clearTimeout(this.activationTimer_);\r\n                                    this.activationTimer_ = 0;\r\n                                    this.adapter.removeClass(MDCRippleFoundation.cssClasses.FG_ACTIVATION);\r\n                                }\r\n                                if (this.fgDeactivationRemovalTimer_) {\r\n                                    clearTimeout(this.fgDeactivationRemovalTimer_);\r\n                                    this.fgDeactivationRemovalTimer_ = 0;\r\n                                    this.adapter.removeClass(MDCRippleFoundation.cssClasses.FG_DEACTIVATION);\r\n                                }\r\n                                var _a = MDCRippleFoundation.cssClasses,\r\n                                        ROOT_2 = _a.ROOT,\r\n                                        UNBOUNDED_2 = _a.UNBOUNDED;\r\n                                requestAnimationFrame(function() {\r\n                                    _this.adapter.removeClass(ROOT_2);\r\n                                    _this.adapter.removeClass(UNBOUNDED_2);\r\n                                    _this.removeCssVars_();\r\n                                });\r\n                            }\r\n                            this.deregisterRootHandlers_();\r\n                            this.deregisterDeactivationHandlers_();\r\n                        };\r\n                        /**\r\n                         * @param evt Optional event containing position information.\r\n                         */\r\n                        MDCRippleFoundation.prototype.activate = function(evt) {\r\n                            this.activate_(evt);\r\n                        };\r\n                        MDCRippleFoundation.prototype.deactivate = function() {\r\n                            this.deactivate_();\r\n                        };\r\n                        MDCRippleFoundation.prototype.layout = function() {\r\n                            var _this = this;\r\n                            if (this.layoutFrame_) {\r\n                                cancelAnimationFrame(this.layoutFrame_);\r\n                            }\r\n                            this.layoutFrame_ = requestAnimationFrame(function() {\r\n                                _this.layoutInternal_();\r\n                                _this.layoutFrame_ = 0;\r\n                            });\r\n                        };\r\n                        MDCRippleFoundation.prototype.setUnbounded = function(unbounded) {\r\n                            var UNBOUNDED = MDCRippleFoundation.cssClasses.UNBOUNDED;\r\n                            if (unbounded) {\r\n                                this.adapter.addClass(UNBOUNDED);\r\n                            } else {\r\n                                this.adapter.removeClass(UNBOUNDED);\r\n                            }\r\n                        };\r\n                        MDCRippleFoundation.prototype.handleFocus = function() {\r\n                            var _this = this;\r\n                            requestAnimationFrame(function() {\r\n                                return _this.adapter.addClass(MDCRippleFoundation.cssClasses.BG_FOCUSED);\r\n                            });\r\n                        };\r\n                        MDCRippleFoundation.prototype.handleBlur = function() {\r\n                            var _this = this;\r\n                            requestAnimationFrame(function() {\r\n                                return _this.adapter.removeClass(MDCRippleFoundation.cssClasses.BG_FOCUSED);\r\n                            });\r\n                        };\r\n                        /**\r\n                         * We compute this property so that we are not querying information about the client\r\n                         * until the point in time where the foundation requests it. This prevents scenarios where\r\n                         * client-side feature-detection may happen too early, such as when components are rendered on the server\r\n                         * and then initialized at mount time on the client.\r\n                         */\r\n                        MDCRippleFoundation.prototype.supportsPressRipple_ = function() {\r\n                            return this.adapter.browserSupportsCssVars();\r\n                        };\r\n                        MDCRippleFoundation.prototype.defaultActivationState_ = function() {\r\n                            return {\r\n                                activationEvent: undefined,\r\n                                hasDeactivationUXRun: false,\r\n                                isActivated: false,\r\n                                isProgrammatic: false,\r\n                                wasActivatedByPointer: false,\r\n                                wasElementMadeActive: false\r\n                            };\r\n                        };\r\n                        /**\r\n                         * supportsPressRipple Passed from init to save a redundant function call\r\n                         */\r\n                        MDCRippleFoundation.prototype.registerRootHandlers_ = function(supportsPressRipple) {\r\n                            var _this = this;\r\n                            if (supportsPressRipple) {\r\n                                ACTIVATION_EVENT_TYPES.forEach(function(evtType) {\r\n                                    _this.adapter.registerInteractionHandler(evtType, _this.activateHandler_);\r\n                                });\r\n                                if (this.adapter.isUnbounded()) {\r\n                                    this.adapter.registerResizeHandler(this.resizeHandler_);\r\n                                }\r\n                            }\r\n                            this.adapter.registerInteractionHandler('focus', this.focusHandler_);\r\n                            this.adapter.registerInteractionHandler('blur', this.blurHandler_);\r\n                        };\r\n                        MDCRippleFoundation.prototype.registerDeactivationHandlers_ = function(evt) {\r\n                            var _this = this;\r\n                            if (evt.type === 'keydown') {\r\n                                this.adapter.registerInteractionHandler('keyup', this.deactivateHandler_);\r\n                            } else {\r\n                                POINTER_DEACTIVATION_EVENT_TYPES.forEach(function(evtType) {\r\n                                    _this.adapter.registerDocumentInteractionHandler(evtType, _this.deactivateHandler_);\r\n                                });\r\n                            }\r\n                        };\r\n                        MDCRippleFoundation.prototype.deregisterRootHandlers_ = function() {\r\n                            var _this = this;\r\n                            ACTIVATION_EVENT_TYPES.forEach(function(evtType) {\r\n                                _this.adapter.deregisterInteractionHandler(evtType, _this.activateHandler_);\r\n                            });\r\n                            this.adapter.deregisterInteractionHandler('focus', this.focusHandler_);\r\n                            this.adapter.deregisterInteractionHandler('blur', this.blurHandler_);\r\n                            if (this.adapter.isUnbounded()) {\r\n                                this.adapter.deregisterResizeHandler(this.resizeHandler_);\r\n                            }\r\n                        };\r\n                        MDCRippleFoundation.prototype.deregisterDeactivationHandlers_ = function() {\r\n                            var _this = this;\r\n                            this.adapter.deregisterInteractionHandler('keyup', this.deactivateHandler_);\r\n                            POINTER_DEACTIVATION_EVENT_TYPES.forEach(function(evtType) {\r\n                                _this.adapter.deregisterDocumentInteractionHandler(evtType, _this.deactivateHandler_);\r\n                            });\r\n                        };\r\n                        MDCRippleFoundation.prototype.removeCssVars_ = function() {\r\n                            var _this = this;\r\n                            var rippleStrings = MDCRippleFoundation.strings;\r\n                            var keys = Object.keys(rippleStrings);\r\n                            keys.forEach(function(key) {\r\n                                if (key.indexOf('VAR_') === 0) {\r\n                                    _this.adapter.updateCssVariable(rippleStrings[key], null);\r\n                                }\r\n                            });\r\n                        };\r\n                        MDCRippleFoundation.prototype.activate_ = function(evt) {\r\n                            var _this = this;\r\n                            if (this.adapter.isSurfaceDisabled()) {\r\n                                return;\r\n                            }\r\n                            var activationState = this.activationState_;\r\n                            if (activationState.isActivated) {\r\n                                return;\r\n                            }\r\n                            // Avoid reacting to follow-on events fired by touch device after an already-processed user interaction\r\n                            var previousActivationEvent = this.previousActivationEvent_;\r\n                            var isSameInteraction = previousActivationEvent && evt !== undefined && previousActivationEvent.type !== evt.type;\r\n                            if (isSameInteraction) {\r\n                                return;\r\n                            }\r\n                            activationState.isActivated = true;\r\n                            activationState.isProgrammatic = evt === undefined;\r\n                            activationState.activationEvent = evt;\r\n                            activationState.wasActivatedByPointer = activationState.isProgrammatic ? false : evt !== undefined && (evt.type === 'mousedown' || evt.type === 'touchstart' || evt.type === 'pointerdown');\r\n                            var hasActivatedChild = evt !== undefined && activatedTargets.length > 0 && activatedTargets.some(function(target) {\r\n                                return _this.adapter.containsEventTarget(target);\r\n                            });\r\n                            if (hasActivatedChild) {\r\n                                // Immediately reset activation state, while preserving logic that prevents touch follow-on events\r\n                                this.resetActivationState_();\r\n                                return;\r\n                            }\r\n                            if (evt !== undefined) {\r\n                                activatedTargets.push(evt.target);\r\n                                this.registerDeactivationHandlers_(evt);\r\n                            }\r\n                            activationState.wasElementMadeActive = this.checkElementMadeActive_(evt);\r\n                            if (activationState.wasElementMadeActive) {\r\n                                this.animateActivation_();\r\n                            }\r\n                            requestAnimationFrame(function() {\r\n                                // Reset array on next frame after the current event has had a chance to bubble to prevent ancestor ripples\r\n                                activatedTargets = [];\r\n                                if (!activationState.wasElementMadeActive && evt !== undefined && (evt.key === ' ' || evt.keyCode === 32)) {\r\n                                    // If space was pressed, try again within an rAF call to detect :active, because different UAs report\r\n                                    // active states inconsistently when they're called within event handling code:\r\n                                    // - https://bugs.chromium.org/p/chromium/issues/detail?id=635971\r\n                                    // - https://bugzilla.mozilla.org/show_bug.cgi?id=1293741\r\n                                    // We try first outside rAF to support Edge, which does not exhibit this problem, but will crash if a CSS\r\n                                    // variable is set within a rAF callback for a submit button interaction (#2241).\r\n                                    activationState.wasElementMadeActive = _this.checkElementMadeActive_(evt);\r\n                                    if (activationState.wasElementMadeActive) {\r\n                                        _this.animateActivation_();\r\n                                    }\r\n                                }\r\n                                if (!activationState.wasElementMadeActive) {\r\n                                    // Reset activation state immediately if element was not made active.\r\n                                    _this.activationState_ = _this.defaultActivationState_();\r\n                                }\r\n                            });\r\n                        };\r\n                        MDCRippleFoundation.prototype.checkElementMadeActive_ = function(evt) {\r\n                            return evt !== undefined && evt.type === 'keydown' ? this.adapter.isSurfaceActive() : true;\r\n                        };\r\n                        MDCRippleFoundation.prototype.animateActivation_ = function() {\r\n                            var _this = this;\r\n                            var _a = MDCRippleFoundation.strings,\r\n                                    VAR_FG_TRANSLATE_START = _a.VAR_FG_TRANSLATE_START,\r\n                                    VAR_FG_TRANSLATE_END = _a.VAR_FG_TRANSLATE_END;\r\n                            var _b = MDCRippleFoundation.cssClasses,\r\n                                    FG_DEACTIVATION = _b.FG_DEACTIVATION,\r\n                                    FG_ACTIVATION = _b.FG_ACTIVATION;\r\n                            var DEACTIVATION_TIMEOUT_MS = MDCRippleFoundation.numbers.DEACTIVATION_TIMEOUT_MS;\r\n                            this.layoutInternal_();\r\n                            var translateStart = '';\r\n                            var translateEnd = '';\r\n                            if (!this.adapter.isUnbounded()) {\r\n                                var _c = this.getFgTranslationCoordinates_(),\r\n                                        startPoint = _c.startPoint,\r\n                                        endPoint = _c.endPoint;\r\n                                translateStart = startPoint.x + \"px, \" + startPoint.y + \"px\";\r\n                                translateEnd = endPoint.x + \"px, \" + endPoint.y + \"px\";\r\n                            }\r\n                            this.adapter.updateCssVariable(VAR_FG_TRANSLATE_START, translateStart);\r\n                            this.adapter.updateCssVariable(VAR_FG_TRANSLATE_END, translateEnd);\r\n                            // Cancel any ongoing activation/deactivation animations\r\n                            clearTimeout(this.activationTimer_);\r\n                            clearTimeout(this.fgDeactivationRemovalTimer_);\r\n                            this.rmBoundedActivationClasses_();\r\n                            this.adapter.removeClass(FG_DEACTIVATION);\r\n                            // Force layout in order to re-trigger the animation.\r\n                            this.adapter.computeBoundingRect();\r\n                            this.adapter.addClass(FG_ACTIVATION);\r\n                            this.activationTimer_ = setTimeout(function() {\r\n                                return _this.activationTimerCallback_();\r\n                            }, DEACTIVATION_TIMEOUT_MS);\r\n                        };\r\n                        MDCRippleFoundation.prototype.getFgTranslationCoordinates_ = function() {\r\n                            var _a = this.activationState_,\r\n                                    activationEvent = _a.activationEvent,\r\n                                    wasActivatedByPointer = _a.wasActivatedByPointer;\r\n                            var startPoint;\r\n                            if (wasActivatedByPointer) {\r\n                                startPoint = util_1.getNormalizedEventCoords(activationEvent, this.adapter.getWindowPageOffset(), this.adapter.computeBoundingRect());\r\n                            } else {\r\n                                startPoint = {\r\n                                    x: this.frame_.width / 2,\r\n                                    y: this.frame_.height / 2\r\n                                };\r\n                            }\r\n                            // Center the element around the start point.\r\n                            startPoint = {\r\n                                x: startPoint.x - this.initialSize_ / 2,\r\n                                y: startPoint.y - this.initialSize_ / 2\r\n                            };\r\n                            var endPoint = {\r\n                                x: this.frame_.width / 2 - this.initialSize_ / 2,\r\n                                y: this.frame_.height / 2 - this.initialSize_ / 2\r\n                            };\r\n                            return {startPoint: startPoint, endPoint: endPoint};\r\n                        };\r\n                        MDCRippleFoundation.prototype.runDeactivationUXLogicIfReady_ = function() {\r\n                            var _this = this;\r\n                            // This method is called both when a pointing device is released, and when the activation animation ends.\r\n                            // The deactivation animation should only run after both of those occur.\r\n                            var FG_DEACTIVATION = MDCRippleFoundation.cssClasses.FG_DEACTIVATION;\r\n                            var _a = this.activationState_,\r\n                                    hasDeactivationUXRun = _a.hasDeactivationUXRun,\r\n                                    isActivated = _a.isActivated;\r\n                            var activationHasEnded = hasDeactivationUXRun || !isActivated;\r\n                            if (activationHasEnded && this.activationAnimationHasEnded_) {\r\n                                this.rmBoundedActivationClasses_();\r\n                                this.adapter.addClass(FG_DEACTIVATION);\r\n                                this.fgDeactivationRemovalTimer_ = setTimeout(function() {\r\n                                    _this.adapter.removeClass(FG_DEACTIVATION);\r\n                                }, constants_1.numbers.FG_DEACTIVATION_MS);\r\n                            }\r\n                        };\r\n                        MDCRippleFoundation.prototype.rmBoundedActivationClasses_ = function() {\r\n                            var FG_ACTIVATION = MDCRippleFoundation.cssClasses.FG_ACTIVATION;\r\n                            this.adapter.removeClass(FG_ACTIVATION);\r\n                            this.activationAnimationHasEnded_ = false;\r\n                            this.adapter.computeBoundingRect();\r\n                        };\r\n                        MDCRippleFoundation.prototype.resetActivationState_ = function() {\r\n                            var _this = this;\r\n                            this.previousActivationEvent_ = this.activationState_.activationEvent;\r\n                            this.activationState_ = this.defaultActivationState_();\r\n                            // Touch devices may fire additional events for the same interaction within a short time.\r\n                            // Store the previous event until it's safe to assume that subsequent events are for new interactions.\r\n                            setTimeout(function() {\r\n                                return _this.previousActivationEvent_ = undefined;\r\n                            }, MDCRippleFoundation.numbers.TAP_DELAY_MS);\r\n                        };\r\n                        MDCRippleFoundation.prototype.deactivate_ = function() {\r\n                            var _this = this;\r\n                            var activationState = this.activationState_;\r\n                            // This can happen in scenarios such as when you have a keyup event that blurs the element.\r\n                            if (!activationState.isActivated) {\r\n                                return;\r\n                            }\r\n                            var state = __assign({}, activationState);\r\n                            if (activationState.isProgrammatic) {\r\n                                requestAnimationFrame(function() {\r\n                                    return _this.animateDeactivation_(state);\r\n                                });\r\n                                this.resetActivationState_();\r\n                            } else {\r\n                                this.deregisterDeactivationHandlers_();\r\n                                requestAnimationFrame(function() {\r\n                                    _this.activationState_.hasDeactivationUXRun = true;\r\n                                    _this.animateDeactivation_(state);\r\n                                    _this.resetActivationState_();\r\n                                });\r\n                            }\r\n                        };\r\n                        MDCRippleFoundation.prototype.animateDeactivation_ = function(_a) {\r\n                            var wasActivatedByPointer = _a.wasActivatedByPointer,\r\n                                    wasElementMadeActive = _a.wasElementMadeActive;\r\n                            if (wasActivatedByPointer || wasElementMadeActive) {\r\n                                this.runDeactivationUXLogicIfReady_();\r\n                            }\r\n                        };\r\n                        MDCRippleFoundation.prototype.layoutInternal_ = function() {\r\n                            var _this = this;\r\n                            this.frame_ = this.adapter.computeBoundingRect();\r\n                            var maxDim = Math.max(this.frame_.height, this.frame_.width);\r\n                            // Surface diameter is treated differently for unbounded vs. bounded ripples.\r\n                            // Unbounded ripple diameter is calculated smaller since the surface is expected to already be padded appropriately\r\n                            // to extend the hitbox, and the ripple is expected to meet the edges of the padded hitbox (which is typically\r\n                            // square). Bounded ripples, on the other hand, are fully expected to expand beyond the surface's longest diameter\r\n                            // (calculated based on the diagonal plus a constant padding), and are clipped at the surface's border via\r\n                            // `overflow: hidden`.\r\n                            var getBoundedRadius = function getBoundedRadius() {\r\n                                var hypotenuse = Math.sqrt(Math.pow(_this.frame_.width, 2) + Math.pow(_this.frame_.height, 2));\r\n                                return hypotenuse + MDCRippleFoundation.numbers.PADDING;\r\n                            };\r\n                            this.maxRadius_ = this.adapter.isUnbounded() ? maxDim : getBoundedRadius();\r\n                            // Ripple is sized as a fraction of the largest dimension of the surface, then scales up using a CSS scale transform\r\n                            var initialSize = Math.floor(maxDim * MDCRippleFoundation.numbers.INITIAL_ORIGIN_SCALE);\r\n                            // Unbounded ripple size should always be even number to equally center align.\r\n                            if (this.adapter.isUnbounded() && initialSize % 2 !== 0) {\r\n                                this.initialSize_ = initialSize - 1;\r\n                            } else {\r\n                                this.initialSize_ = initialSize;\r\n                            }\r\n                            this.fgScale_ = \"\" + this.maxRadius_ / this.initialSize_;\r\n                            this.updateLayoutCssVars_();\r\n                        };\r\n                        MDCRippleFoundation.prototype.updateLayoutCssVars_ = function() {\r\n                            var _a = MDCRippleFoundation.strings,\r\n                                    VAR_FG_SIZE = _a.VAR_FG_SIZE,\r\n                                    VAR_LEFT = _a.VAR_LEFT,\r\n                                    VAR_TOP = _a.VAR_TOP,\r\n                                    VAR_FG_SCALE = _a.VAR_FG_SCALE;\r\n                            this.adapter.updateCssVariable(VAR_FG_SIZE, this.initialSize_ + \"px\");\r\n                            this.adapter.updateCssVariable(VAR_FG_SCALE, this.fgScale_);\r\n                            if (this.adapter.isUnbounded()) {\r\n                                this.unboundedCoords_ = {\r\n                                    left: Math.round(this.frame_.width / 2 - this.initialSize_ / 2),\r\n                                    top: Math.round(this.frame_.height / 2 - this.initialSize_ / 2)\r\n                                };\r\n                                this.adapter.updateCssVariable(VAR_LEFT, this.unboundedCoords_.left + \"px\");\r\n                                this.adapter.updateCssVariable(VAR_TOP, this.unboundedCoords_.top + \"px\");\r\n                            }\r\n                        };\r\n                        return MDCRippleFoundation;\r\n                    }(foundation_1.MDCFoundation);\r\n                    exports.MDCRippleFoundation = MDCRippleFoundation;\r\n// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier.\r\n                    exports.default = MDCRippleFoundation;\r\n\r\n                    /***/\r\n                }),\r\n\r\n                          /***/ \"./packages/mdc-ripple/util.ts\":\r\n                /*!*************************************!*\\\r\n  !*** ./packages/mdc-ripple/util.ts ***!\r\n  \\*************************************/\r\n                /*! no static exports found */\r\n                /***/ (function(module, exports, __webpack_require__) {\r\n\r\n                    \"use strict\";\r\n\r\n\r\n                    Object.defineProperty(exports, \"__esModule\", {value: true});\r\n                    /**\r\n                     * Stores result from supportsCssVariables to avoid redundant processing to\r\n                     * detect CSS custom variable support.\r\n                     */\r\n                    var supportsCssVariables_;\r\n\r\n                    function supportsCssVariables(windowObj, forceRefresh) {\r\n                        if (forceRefresh === void 0) {\r\n                            forceRefresh = false;\r\n                        }\r\n                        var CSS = windowObj.CSS;\r\n                        var supportsCssVars = supportsCssVariables_;\r\n                        if (typeof supportsCssVariables_ === 'boolean' && !forceRefresh) {\r\n                            return supportsCssVariables_;\r\n                        }\r\n                        var supportsFunctionPresent = CSS && typeof CSS.supports === 'function';\r\n                        if (!supportsFunctionPresent) {\r\n                            return false;\r\n                        }\r\n                        var explicitlySupportsCssVars = CSS.supports('--css-vars', 'yes');\r\n                        // See: https://bugs.webkit.org/show_bug.cgi?id=154669\r\n                        // See: README section on Safari\r\n                        var weAreFeatureDetectingSafari10plus = CSS.supports('(--css-vars: yes)') && CSS.supports('color', '#00000000');\r\n                        supportsCssVars = explicitlySupportsCssVars || weAreFeatureDetectingSafari10plus;\r\n                        if (!forceRefresh) {\r\n                            supportsCssVariables_ = supportsCssVars;\r\n                        }\r\n                        return supportsCssVars;\r\n                    }\r\n\r\n                    exports.supportsCssVariables = supportsCssVariables;\r\n\r\n                    function getNormalizedEventCoords(evt, pageOffset, clientRect) {\r\n                        if (!evt) {\r\n                            return {x: 0, y: 0};\r\n                        }\r\n                        var x = pageOffset.x,\r\n                                y = pageOffset.y;\r\n                        var documentX = x + clientRect.left;\r\n                        var documentY = y + clientRect.top;\r\n                        var normalizedX;\r\n                        var normalizedY;\r\n                        // Determine touch point relative to the ripple container.\r\n                        if (evt.type === 'touchstart') {\r\n                            var touchEvent = evt;\r\n                            normalizedX = touchEvent.changedTouches[0].pageX - documentX;\r\n                            normalizedY = touchEvent.changedTouches[0].pageY - documentY;\r\n                        } else {\r\n                            var mouseEvent = evt;\r\n                            normalizedX = mouseEvent.pageX - documentX;\r\n                            normalizedY = mouseEvent.pageY - documentY;\r\n                        }\r\n                        return {x: normalizedX, y: normalizedY};\r\n                    }\r\n\r\n                    exports.getNormalizedEventCoords = getNormalizedEventCoords;\r\n\r\n                    /***/\r\n                }),\r\n\r\n                          /***/ \"./packages/mdc-textfield/character-counter/component.ts\":\r\n                /*!***************************************************************!*\\\r\n  !*** ./packages/mdc-textfield/character-counter/component.ts ***!\r\n  \\***************************************************************/\r\n                /*! no static exports found */\r\n                /***/ (function(module, exports, __webpack_require__) {\r\n\r\n                    \"use strict\";\r\n\r\n                    /**\r\n                     * @license\r\n                     * Copyright 2019 Google Inc.\r\n                     *\r\n                     * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n                     * of this software and associated documentation files (the \"Software\"), to deal\r\n                     * in the Software without restriction, including without limitation the rights\r\n                     * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n                     * copies of the Software, and to permit persons to whom the Software is\r\n                     * furnished to do so, subject to the following conditions:\r\n                     *\r\n                     * The above copyright notice and this permission notice shall be included in\r\n                     * all copies or substantial portions of the Software.\r\n                     *\r\n                     * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n                     * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n                     * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n                     * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n                     * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n                     * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n                     * THE SOFTWARE.\r\n                     */\r\n\r\n                    var __extends = this && this.__extends || function() {\r\n                        var _extendStatics = function extendStatics(d, b) {\r\n                            _extendStatics = Object.setPrototypeOf || {__proto__: []} instanceof Array && function(d, b) {\r\n                                d.__proto__ = b;\r\n                            } || function(d, b) {\r\n                                for (var p in b) {\r\n                                    if (b.hasOwnProperty(p)) {\r\n                                        d[p] = b[p];\r\n                                    }\r\n                                }\r\n                            };\r\n                            return _extendStatics(d, b);\r\n                        };\r\n                        return function(d, b) {\r\n                            _extendStatics(d, b);\r\n\r\n                            function __() {\r\n                                this.constructor = d;\r\n                            }\r\n\r\n                            d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n                        };\r\n                    }();\r\n                    Object.defineProperty(exports, \"__esModule\", {value: true});\r\n                    var component_1 = __webpack_require__(/*! @material/base/component */ \"./packages/mdc-base/component.ts\");\r\n                    var foundation_1 = __webpack_require__(/*! ./foundation */ \"./packages/mdc-textfield/character-counter/foundation.ts\");\r\n                    var MDCTextFieldCharacterCounter = /** @class */function(_super) {\r\n                        __extends(MDCTextFieldCharacterCounter, _super);\r\n\r\n                        function MDCTextFieldCharacterCounter() {\r\n                            return _super !== null && _super.apply(this, arguments) || this;\r\n                        }\r\n\r\n                        MDCTextFieldCharacterCounter.attachTo = function(root) {\r\n                            return new MDCTextFieldCharacterCounter(root);\r\n                        };\r\n                        Object.defineProperty(MDCTextFieldCharacterCounter.prototype, \"foundationForTextField\", {\r\n                            // Provided for access by MDCTextField component\r\n                            get: function get() {\r\n                                return this.foundation;\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        MDCTextFieldCharacterCounter.prototype.getDefaultFoundation = function() {\r\n                            var _this = this;\r\n                            // DO NOT INLINE this variable. For backward compatibility, foundations take a Partial<MDCFooAdapter>.\r\n                            // To ensure we don't accidentally omit any methods, we need a separate, strongly typed adapter variable.\r\n                            var adapter = {\r\n                                setContent: function setContent(content) {\r\n                                    _this.root.textContent = content;\r\n                                }\r\n                            };\r\n                            return new foundation_1.MDCTextFieldCharacterCounterFoundation(adapter);\r\n                        };\r\n                        return MDCTextFieldCharacterCounter;\r\n                    }(component_1.MDCComponent);\r\n                    exports.MDCTextFieldCharacterCounter = MDCTextFieldCharacterCounter;\r\n\r\n                    /***/\r\n                }),\r\n\r\n                          /***/ \"./packages/mdc-textfield/character-counter/constants.ts\":\r\n                /*!***************************************************************!*\\\r\n  !*** ./packages/mdc-textfield/character-counter/constants.ts ***!\r\n  \\***************************************************************/\r\n                /*! no static exports found */\r\n                /***/ (function(module, exports, __webpack_require__) {\r\n\r\n                    \"use strict\";\r\n\r\n                    /**\r\n                     * @license\r\n                     * Copyright 2019 Google Inc.\r\n                     *\r\n                     * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n                     * of this software and associated documentation files (the \"Software\"), to deal\r\n                     * in the Software without restriction, including without limitation the rights\r\n                     * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n                     * copies of the Software, and to permit persons to whom the Software is\r\n                     * furnished to do so, subject to the following conditions:\r\n                     *\r\n                     * The above copyright notice and this permission notice shall be included in\r\n                     * all copies or substantial portions of the Software.\r\n                     *\r\n                     * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n                     * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n                     * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n                     * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n                     * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n                     * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n                     * THE SOFTWARE.\r\n                     */\r\n\r\n                    Object.defineProperty(exports, \"__esModule\", {value: true});\r\n                    var cssClasses = {\r\n                        ROOT: 'mdc-text-field-character-counter'\r\n                    };\r\n                    exports.cssClasses = cssClasses;\r\n                    var strings = {\r\n                        ROOT_SELECTOR: \".\" + cssClasses.ROOT\r\n                    };\r\n                    exports.strings = strings;\r\n\r\n                    /***/\r\n                }),\r\n\r\n                          /***/ \"./packages/mdc-textfield/character-counter/foundation.ts\":\r\n                /*!****************************************************************!*\\\r\n  !*** ./packages/mdc-textfield/character-counter/foundation.ts ***!\r\n  \\****************************************************************/\r\n                /*! no static exports found */\r\n                /***/ (function(module, exports, __webpack_require__) {\r\n\r\n                    \"use strict\";\r\n\r\n                    /**\r\n                     * @license\r\n                     * Copyright 2019 Google Inc.\r\n                     *\r\n                     * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n                     * of this software and associated documentation files (the \"Software\"), to deal\r\n                     * in the Software without restriction, including without limitation the rights\r\n                     * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n                     * copies of the Software, and to permit persons to whom the Software is\r\n                     * furnished to do so, subject to the following conditions:\r\n                     *\r\n                     * The above copyright notice and this permission notice shall be included in\r\n                     * all copies or substantial portions of the Software.\r\n                     *\r\n                     * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n                     * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n                     * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n                     * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n                     * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n                     * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n                     * THE SOFTWARE.\r\n                     */\r\n\r\n                    var __extends = this && this.__extends || function() {\r\n                        var _extendStatics = function extendStatics(d, b) {\r\n                            _extendStatics = Object.setPrototypeOf || {__proto__: []} instanceof Array && function(d, b) {\r\n                                d.__proto__ = b;\r\n                            } || function(d, b) {\r\n                                for (var p in b) {\r\n                                    if (b.hasOwnProperty(p)) {\r\n                                        d[p] = b[p];\r\n                                    }\r\n                                }\r\n                            };\r\n                            return _extendStatics(d, b);\r\n                        };\r\n                        return function(d, b) {\r\n                            _extendStatics(d, b);\r\n\r\n                            function __() {\r\n                                this.constructor = d;\r\n                            }\r\n\r\n                            d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n                        };\r\n                    }();\r\n                    var __assign = this && this.__assign || function() {\r\n                        __assign = Object.assign || function(t) {\r\n                            for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n                                s = arguments[i];\r\n                                for (var p in s) {\r\n                                    if (Object.prototype.hasOwnProperty.call(s, p)) {\r\n                                        t[p] = s[p];\r\n                                    }\r\n                                }\r\n                            }\r\n                            return t;\r\n                        };\r\n                        return __assign.apply(this, arguments);\r\n                    };\r\n                    Object.defineProperty(exports, \"__esModule\", {value: true});\r\n                    var foundation_1 = __webpack_require__(/*! @material/base/foundation */ \"./packages/mdc-base/foundation.ts\");\r\n                    var constants_1 = __webpack_require__(/*! ./constants */ \"./packages/mdc-textfield/character-counter/constants.ts\");\r\n                    var MDCTextFieldCharacterCounterFoundation = /** @class */function(_super) {\r\n                        __extends(MDCTextFieldCharacterCounterFoundation, _super);\r\n\r\n                        function MDCTextFieldCharacterCounterFoundation(adapter) {\r\n                            return _super.call(this, __assign(__assign({}, MDCTextFieldCharacterCounterFoundation.defaultAdapter), adapter)) || this;\r\n                        }\r\n\r\n                        Object.defineProperty(MDCTextFieldCharacterCounterFoundation, \"cssClasses\", {\r\n                            get: function get() {\r\n                                return constants_1.cssClasses;\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCTextFieldCharacterCounterFoundation, \"strings\", {\r\n                            get: function get() {\r\n                                return constants_1.strings;\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCTextFieldCharacterCounterFoundation, \"defaultAdapter\", {\r\n                            /**\r\n                             * See {@link MDCTextFieldCharacterCounterAdapter} for typing information on parameters and return types.\r\n                             */\r\n                            get: function get() {\r\n                                return {\r\n                                    setContent: function setContent() {\r\n                                        return undefined;\r\n                                    }\r\n                                };\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        MDCTextFieldCharacterCounterFoundation.prototype.setCounterValue = function(currentLength, maxLength) {\r\n                            currentLength = Math.min(currentLength, maxLength);\r\n                            this.adapter.setContent(currentLength + \" / \" + maxLength);\r\n                        };\r\n                        return MDCTextFieldCharacterCounterFoundation;\r\n                    }(foundation_1.MDCFoundation);\r\n                    exports.MDCTextFieldCharacterCounterFoundation = MDCTextFieldCharacterCounterFoundation;\r\n// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier.\r\n                    exports.default = MDCTextFieldCharacterCounterFoundation;\r\n\r\n                    /***/\r\n                }),\r\n\r\n                          /***/ \"./packages/mdc-textfield/character-counter/index.ts\":\r\n                /*!***********************************************************!*\\\r\n  !*** ./packages/mdc-textfield/character-counter/index.ts ***!\r\n  \\***********************************************************/\r\n                /*! no static exports found */\r\n                /***/ (function(module, exports, __webpack_require__) {\r\n\r\n                    \"use strict\";\r\n\r\n                    /**\r\n                     * @license\r\n                     * Copyright 2019 Google Inc.\r\n                     *\r\n                     * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n                     * of this software and associated documentation files (the \"Software\"), to deal\r\n                     * in the Software without restriction, including without limitation the rights\r\n                     * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n                     * copies of the Software, and to permit persons to whom the Software is\r\n                     * furnished to do so, subject to the following conditions:\r\n                     *\r\n                     * The above copyright notice and this permission notice shall be included in\r\n                     * all copies or substantial portions of the Software.\r\n                     *\r\n                     * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n                     * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n                     * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n                     * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n                     * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n                     * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n                     * THE SOFTWARE.\r\n                     */\r\n\r\n                    function __export(m) {\r\n                        for (var p in m) {\r\n                            if (!exports.hasOwnProperty(p)) {\r\n                                exports[p] = m[p];\r\n                            }\r\n                        }\r\n                    }\r\n\r\n                    Object.defineProperty(exports, \"__esModule\", {value: true});\r\n                    __export(__webpack_require__(/*! ./component */ \"./packages/mdc-textfield/character-counter/component.ts\"));\r\n                    __export(__webpack_require__(/*! ./foundation */ \"./packages/mdc-textfield/character-counter/foundation.ts\"));\r\n                    var constants_1 = __webpack_require__(/*! ./constants */ \"./packages/mdc-textfield/character-counter/constants.ts\");\r\n                    exports.characterCountCssClasses = constants_1.cssClasses;\r\n                    exports.characterCountStrings = constants_1.strings;\r\n\r\n                    /***/\r\n                }),\r\n\r\n                          /***/ \"./packages/mdc-textfield/component.ts\":\r\n                /*!*********************************************!*\\\r\n  !*** ./packages/mdc-textfield/component.ts ***!\r\n  \\*********************************************/\r\n                /*! no static exports found */\r\n                /***/ (function(module, exports, __webpack_require__) {\r\n\r\n                    \"use strict\";\r\n\r\n                    /**\r\n                     * @license\r\n                     * Copyright 2016 Google Inc.\r\n                     *\r\n                     * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n                     * of this software and associated documentation files (the \"Software\"), to deal\r\n                     * in the Software without restriction, including without limitation the rights\r\n                     * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n                     * copies of the Software, and to permit persons to whom the Software is\r\n                     * furnished to do so, subject to the following conditions:\r\n                     *\r\n                     * The above copyright notice and this permission notice shall be included in\r\n                     * all copies or substantial portions of the Software.\r\n                     *\r\n                     * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n                     * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n                     * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n                     * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n                     * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n                     * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n                     * THE SOFTWARE.\r\n                     */\r\n\r\n                    var __extends = this && this.__extends || function() {\r\n                        var _extendStatics = function extendStatics(d, b) {\r\n                            _extendStatics = Object.setPrototypeOf || {__proto__: []} instanceof Array && function(d, b) {\r\n                                d.__proto__ = b;\r\n                            } || function(d, b) {\r\n                                for (var p in b) {\r\n                                    if (b.hasOwnProperty(p)) {\r\n                                        d[p] = b[p];\r\n                                    }\r\n                                }\r\n                            };\r\n                            return _extendStatics(d, b);\r\n                        };\r\n                        return function(d, b) {\r\n                            _extendStatics(d, b);\r\n\r\n                            function __() {\r\n                                this.constructor = d;\r\n                            }\r\n\r\n                            d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n                        };\r\n                    }();\r\n                    var __assign = this && this.__assign || function() {\r\n                        __assign = Object.assign || function(t) {\r\n                            for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n                                s = arguments[i];\r\n                                for (var p in s) {\r\n                                    if (Object.prototype.hasOwnProperty.call(s, p)) {\r\n                                        t[p] = s[p];\r\n                                    }\r\n                                }\r\n                            }\r\n                            return t;\r\n                        };\r\n                        return __assign.apply(this, arguments);\r\n                    };\r\n                    var __importStar = this && this.__importStar || function(mod) {\r\n                        if (mod && mod.__esModule) {\r\n                            return mod;\r\n                        }\r\n                        var result = {};\r\n                        if (mod != null) {\r\n                            for (var k in mod) {\r\n                                if (Object.hasOwnProperty.call(mod, k)) {\r\n                                    result[k] = mod[k];\r\n                                }\r\n                            }\r\n                        }\r\n                        result[\"default\"] = mod;\r\n                        return result;\r\n                    };\r\n                    Object.defineProperty(exports, \"__esModule\", {value: true});\r\n                    var component_1 = __webpack_require__(/*! @material/base/component */ \"./packages/mdc-base/component.ts\");\r\n                    var events_1 = __webpack_require__(/*! @material/dom/events */ \"./packages/mdc-dom/events.ts\");\r\n                    var ponyfill = __importStar(__webpack_require__(/*! @material/dom/ponyfill */ \"./packages/mdc-dom/ponyfill.ts\"));\r\n                    var component_2 = __webpack_require__(/*! @material/floating-label/component */ \"./packages/mdc-floating-label/component.ts\");\r\n                    var component_3 = __webpack_require__(/*! @material/line-ripple/component */ \"./packages/mdc-line-ripple/component.ts\");\r\n                    var component_4 = __webpack_require__(/*! @material/notched-outline/component */ \"./packages/mdc-notched-outline/component.ts\");\r\n                    var component_5 = __webpack_require__(/*! @material/ripple/component */ \"./packages/mdc-ripple/component.ts\");\r\n                    var foundation_1 = __webpack_require__(/*! @material/ripple/foundation */ \"./packages/mdc-ripple/foundation.ts\");\r\n                    var component_6 = __webpack_require__(/*! ./character-counter/component */ \"./packages/mdc-textfield/character-counter/component.ts\");\r\n                    var foundation_2 = __webpack_require__(/*! ./character-counter/foundation */ \"./packages/mdc-textfield/character-counter/foundation.ts\");\r\n                    var constants_1 = __webpack_require__(/*! ./constants */ \"./packages/mdc-textfield/constants.ts\");\r\n                    var foundation_3 = __webpack_require__(/*! ./foundation */ \"./packages/mdc-textfield/foundation.ts\");\r\n                    var component_7 = __webpack_require__(/*! ./helper-text/component */ \"./packages/mdc-textfield/helper-text/component.ts\");\r\n                    var foundation_4 = __webpack_require__(/*! ./helper-text/foundation */ \"./packages/mdc-textfield/helper-text/foundation.ts\");\r\n                    var component_8 = __webpack_require__(/*! ./icon/component */ \"./packages/mdc-textfield/icon/component.ts\");\r\n                    var MDCTextField = /** @class */function(_super) {\r\n                        __extends(MDCTextField, _super);\r\n\r\n                        function MDCTextField() {\r\n                            return _super !== null && _super.apply(this, arguments) || this;\r\n                        }\r\n\r\n                        MDCTextField.attachTo = function(root) {\r\n                            return new MDCTextField(root);\r\n                        };\r\n                        MDCTextField.prototype.initialize = function(rippleFactory, lineRippleFactory, helperTextFactory, characterCounterFactory, iconFactory, labelFactory, outlineFactory) {\r\n                            if (rippleFactory === void 0) {\r\n                                rippleFactory = function rippleFactory(el, foundation) {\r\n                                    return new component_5.MDCRipple(el, foundation);\r\n                                };\r\n                            }\r\n                            if (lineRippleFactory === void 0) {\r\n                                lineRippleFactory = function lineRippleFactory(el) {\r\n                                    return new component_3.MDCLineRipple(el);\r\n                                };\r\n                            }\r\n                            if (helperTextFactory === void 0) {\r\n                                helperTextFactory = function helperTextFactory(el) {\r\n                                    return new component_7.MDCTextFieldHelperText(el);\r\n                                };\r\n                            }\r\n                            if (characterCounterFactory === void 0) {\r\n                                characterCounterFactory = function characterCounterFactory(el) {\r\n                                    return new component_6.MDCTextFieldCharacterCounter(el);\r\n                                };\r\n                            }\r\n                            if (iconFactory === void 0) {\r\n                                iconFactory = function iconFactory(el) {\r\n                                    return new component_8.MDCTextFieldIcon(el);\r\n                                };\r\n                            }\r\n                            if (labelFactory === void 0) {\r\n                                labelFactory = function labelFactory(el) {\r\n                                    return new component_2.MDCFloatingLabel(el);\r\n                                };\r\n                            }\r\n                            if (outlineFactory === void 0) {\r\n                                outlineFactory = function outlineFactory(el) {\r\n                                    return new component_4.MDCNotchedOutline(el);\r\n                                };\r\n                            }\r\n                            this.input_ = this.root.querySelector(constants_1.strings.INPUT_SELECTOR);\r\n                            var labelElement = this.root.querySelector(constants_1.strings.LABEL_SELECTOR);\r\n                            this.label_ = labelElement ? labelFactory(labelElement) : null;\r\n                            var lineRippleElement = this.root.querySelector(constants_1.strings.LINE_RIPPLE_SELECTOR);\r\n                            this.lineRipple_ = lineRippleElement ? lineRippleFactory(lineRippleElement) : null;\r\n                            var outlineElement = this.root.querySelector(constants_1.strings.OUTLINE_SELECTOR);\r\n                            this.outline_ = outlineElement ? outlineFactory(outlineElement) : null;\r\n                            // Helper text\r\n                            var helperTextStrings = foundation_4.MDCTextFieldHelperTextFoundation.strings;\r\n                            var nextElementSibling = this.root.nextElementSibling;\r\n                            var hasHelperLine = nextElementSibling && nextElementSibling.classList.contains(constants_1.cssClasses.HELPER_LINE);\r\n                            var helperTextEl = hasHelperLine && nextElementSibling && nextElementSibling.querySelector(helperTextStrings.ROOT_SELECTOR);\r\n                            this.helperText_ = helperTextEl ? helperTextFactory(helperTextEl) : null;\r\n                            // Character counter\r\n                            var characterCounterStrings = foundation_2.MDCTextFieldCharacterCounterFoundation.strings;\r\n                            var characterCounterEl = this.root.querySelector(characterCounterStrings.ROOT_SELECTOR);\r\n                            // If character counter is not found in root element search in sibling element.\r\n                            if (!characterCounterEl && hasHelperLine && nextElementSibling) {\r\n                                characterCounterEl = nextElementSibling.querySelector(characterCounterStrings.ROOT_SELECTOR);\r\n                            }\r\n                            this.characterCounter_ = characterCounterEl ? characterCounterFactory(characterCounterEl) : null;\r\n                            // Leading icon\r\n                            var leadingIconEl = this.root.querySelector(constants_1.strings.LEADING_ICON_SELECTOR);\r\n                            this.leadingIcon_ = leadingIconEl ? iconFactory(leadingIconEl) : null;\r\n                            // Trailing icon\r\n                            var trailingIconEl = this.root.querySelector(constants_1.strings.TRAILING_ICON_SELECTOR);\r\n                            this.trailingIcon_ = trailingIconEl ? iconFactory(trailingIconEl) : null;\r\n                            // Prefix and Suffix\r\n                            this.prefix_ = this.root.querySelector(constants_1.strings.PREFIX_SELECTOR);\r\n                            this.suffix_ = this.root.querySelector(constants_1.strings.SUFFIX_SELECTOR);\r\n                            this.ripple = this.createRipple_(rippleFactory);\r\n                        };\r\n                        MDCTextField.prototype.destroy = function() {\r\n                            if (this.ripple) {\r\n                                this.ripple.destroy();\r\n                            }\r\n                            if (this.lineRipple_) {\r\n                                this.lineRipple_.destroy();\r\n                            }\r\n                            if (this.helperText_) {\r\n                                this.helperText_.destroy();\r\n                            }\r\n                            if (this.characterCounter_) {\r\n                                this.characterCounter_.destroy();\r\n                            }\r\n                            if (this.leadingIcon_) {\r\n                                this.leadingIcon_.destroy();\r\n                            }\r\n                            if (this.trailingIcon_) {\r\n                                this.trailingIcon_.destroy();\r\n                            }\r\n                            if (this.label_) {\r\n                                this.label_.destroy();\r\n                            }\r\n                            if (this.outline_) {\r\n                                this.outline_.destroy();\r\n                            }\r\n                            _super.prototype.destroy.call(this);\r\n                        };\r\n                        /**\r\n                         * Initializes the Text Field's internal state based on the environment's\r\n                         * state.\r\n                         */\r\n                        MDCTextField.prototype.initialSyncWithDOM = function() {\r\n                            this.disabled = this.input_.disabled;\r\n                        };\r\n                        Object.defineProperty(MDCTextField.prototype, \"value\", {\r\n                            get: function get() {\r\n                                return this.foundation.getValue();\r\n                            },\r\n                            /**\r\n                             * @param value The value to set on the input.\r\n                             */\r\n                            set: function set(value) {\r\n                                this.foundation.setValue(value);\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCTextField.prototype, \"disabled\", {\r\n                            get: function get() {\r\n                                return this.foundation.isDisabled();\r\n                            },\r\n                            /**\r\n                             * @param disabled Sets the Text Field disabled or enabled.\r\n                             */\r\n                            set: function set(disabled) {\r\n                                this.foundation.setDisabled(disabled);\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCTextField.prototype, \"valid\", {\r\n                            get: function get() {\r\n                                return this.foundation.isValid();\r\n                            },\r\n                            /**\r\n                             * @param valid Sets the Text Field valid or invalid.\r\n                             */\r\n                            set: function set(valid) {\r\n                                this.foundation.setValid(valid);\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCTextField.prototype, \"required\", {\r\n                            get: function get() {\r\n                                return this.input_.required;\r\n                            },\r\n                            /**\r\n                             * @param required Sets the Text Field to required.\r\n                             */\r\n                            set: function set(required) {\r\n                                this.input_.required = required;\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCTextField.prototype, \"pattern\", {\r\n                            get: function get() {\r\n                                return this.input_.pattern;\r\n                            },\r\n                            /**\r\n                             * @param pattern Sets the input element's validation pattern.\r\n                             */\r\n                            set: function set(pattern) {\r\n                                this.input_.pattern = pattern;\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCTextField.prototype, \"minLength\", {\r\n                            get: function get() {\r\n                                return this.input_.minLength;\r\n                            },\r\n                            /**\r\n                             * @param minLength Sets the input element's minLength.\r\n                             */\r\n                            set: function set(minLength) {\r\n                                this.input_.minLength = minLength;\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCTextField.prototype, \"maxLength\", {\r\n                            get: function get() {\r\n                                return this.input_.maxLength;\r\n                            },\r\n                            /**\r\n                             * @param maxLength Sets the input element's maxLength.\r\n                             */\r\n                            set: function set(maxLength) {\r\n                                // Chrome throws exception if maxLength is set to a value less than zero\r\n                                if (maxLength < 0) {\r\n                                    this.input_.removeAttribute('maxLength');\r\n                                } else {\r\n                                    this.input_.maxLength = maxLength;\r\n                                }\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCTextField.prototype, \"min\", {\r\n                            get: function get() {\r\n                                return this.input_.min;\r\n                            },\r\n                            /**\r\n                             * @param min Sets the input element's min.\r\n                             */\r\n                            set: function set(min) {\r\n                                this.input_.min = min;\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCTextField.prototype, \"max\", {\r\n                            get: function get() {\r\n                                return this.input_.max;\r\n                            },\r\n                            /**\r\n                             * @param max Sets the input element's max.\r\n                             */\r\n                            set: function set(max) {\r\n                                this.input_.max = max;\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCTextField.prototype, \"step\", {\r\n                            get: function get() {\r\n                                return this.input_.step;\r\n                            },\r\n                            /**\r\n                             * @param step Sets the input element's step.\r\n                             */\r\n                            set: function set(step) {\r\n                                this.input_.step = step;\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCTextField.prototype, \"helperTextContent\", {\r\n                            /**\r\n                             * Sets the helper text element content.\r\n                             */\r\n                            set: function set(content) {\r\n                                this.foundation.setHelperTextContent(content);\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCTextField.prototype, \"leadingIconAriaLabel\", {\r\n                            /**\r\n                             * Sets the aria label of the leading icon.\r\n                             */\r\n                            set: function set(label) {\r\n                                this.foundation.setLeadingIconAriaLabel(label);\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCTextField.prototype, \"leadingIconContent\", {\r\n                            /**\r\n                             * Sets the text content of the leading icon.\r\n                             */\r\n                            set: function set(content) {\r\n                                this.foundation.setLeadingIconContent(content);\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCTextField.prototype, \"trailingIconAriaLabel\", {\r\n                            /**\r\n                             * Sets the aria label of the trailing icon.\r\n                             */\r\n                            set: function set(label) {\r\n                                this.foundation.setTrailingIconAriaLabel(label);\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCTextField.prototype, \"trailingIconContent\", {\r\n                            /**\r\n                             * Sets the text content of the trailing icon.\r\n                             */\r\n                            set: function set(content) {\r\n                                this.foundation.setTrailingIconContent(content);\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCTextField.prototype, \"useNativeValidation\", {\r\n                            /**\r\n                             * Enables or disables the use of native validation. Use this for custom validation.\r\n                             * @param useNativeValidation Set this to false to ignore native input validation.\r\n                             */\r\n                            set: function set(useNativeValidation) {\r\n                                this.foundation.setUseNativeValidation(useNativeValidation);\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCTextField.prototype, \"prefixText\", {\r\n                            /**\r\n                             * Gets the text content of the prefix, or null if it does not exist.\r\n                             */\r\n                            get: function get() {\r\n                                return this.prefix_ ? this.prefix_.textContent : null;\r\n                            },\r\n                            /**\r\n                             * Sets the text content of the prefix, if it exists.\r\n                             */\r\n                            set: function set(prefixText) {\r\n                                if (this.prefix_) {\r\n                                    this.prefix_.textContent = prefixText;\r\n                                }\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCTextField.prototype, \"suffixText\", {\r\n                            /**\r\n                             * Gets the text content of the suffix, or null if it does not exist.\r\n                             */\r\n                            get: function get() {\r\n                                return this.suffix_ ? this.suffix_.textContent : null;\r\n                            },\r\n                            /**\r\n                             * Sets the text content of the suffix, if it exists.\r\n                             */\r\n                            set: function set(suffixText) {\r\n                                if (this.suffix_) {\r\n                                    this.suffix_.textContent = suffixText;\r\n                                }\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        /**\r\n                         * Focuses the input element.\r\n                         */\r\n                        MDCTextField.prototype.focus = function() {\r\n                            this.input_.focus();\r\n                        };\r\n                        /**\r\n                         * Recomputes the outline SVG path for the outline element.\r\n                         */\r\n                        MDCTextField.prototype.layout = function() {\r\n                            var openNotch = this.foundation.shouldFloat;\r\n                            this.foundation.notchOutline(openNotch);\r\n                        };\r\n                        MDCTextField.prototype.getDefaultFoundation = function() {\r\n                            // DO NOT INLINE this variable. For backward compatibility, foundations take a Partial<MDCFooAdapter>.\r\n                            // To ensure we don't accidentally omit any methods, we need a separate, strongly typed adapter variable.\r\n                            // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface.\r\n                            var adapter = __assign(__assign(__assign(__assign(__assign({}, this.getRootAdapterMethods_()), this.getInputAdapterMethods_()), this.getLabelAdapterMethods_()), this.getLineRippleAdapterMethods_()), this.getOutlineAdapterMethods_());\r\n                            // tslint:enable:object-literal-sort-keys\r\n                            return new foundation_3.MDCTextFieldFoundation(adapter, this.getFoundationMap_());\r\n                        };\r\n                        MDCTextField.prototype.getRootAdapterMethods_ = function() {\r\n                            var _this = this;\r\n                            // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface.\r\n                            return {\r\n                                addClass: function addClass(className) {\r\n                                    return _this.root.classList.add(className);\r\n                                },\r\n                                removeClass: function removeClass(className) {\r\n                                    return _this.root.classList.remove(className);\r\n                                },\r\n                                hasClass: function hasClass(className) {\r\n                                    return _this.root.classList.contains(className);\r\n                                },\r\n                                registerTextFieldInteractionHandler: function registerTextFieldInteractionHandler(evtType, handler) {\r\n                                    return _this.listen(evtType, handler);\r\n                                },\r\n                                deregisterTextFieldInteractionHandler: function deregisterTextFieldInteractionHandler(evtType, handler) {\r\n                                    return _this.unlisten(evtType, handler);\r\n                                },\r\n                                registerValidationAttributeChangeHandler: function registerValidationAttributeChangeHandler(handler) {\r\n                                    var getAttributesList = function getAttributesList(mutationsList) {\r\n                                        return mutationsList.map(function(mutation) {\r\n                                            return mutation.attributeName;\r\n                                        }).filter(function(attributeName) {\r\n                                            return attributeName;\r\n                                        });\r\n                                    };\r\n                                    var observer = new MutationObserver(function(mutationsList) {\r\n                                        return handler(getAttributesList(mutationsList));\r\n                                    });\r\n                                    var config = {attributes: true};\r\n                                    observer.observe(_this.input_, config);\r\n                                    return observer;\r\n                                },\r\n                                deregisterValidationAttributeChangeHandler: function deregisterValidationAttributeChangeHandler(observer) {\r\n                                    return observer.disconnect();\r\n                                }\r\n                            };\r\n                            // tslint:enable:object-literal-sort-keys\r\n                        };\r\n                        MDCTextField.prototype.getInputAdapterMethods_ = function() {\r\n                            var _this = this;\r\n                            // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface.\r\n                            return {\r\n                                getNativeInput: function getNativeInput() {\r\n                                    return _this.input_;\r\n                                },\r\n                                isFocused: function isFocused() {\r\n                                    return document.activeElement === _this.input_;\r\n                                },\r\n                                registerInputInteractionHandler: function registerInputInteractionHandler(evtType, handler) {\r\n                                    return _this.input_.addEventListener(evtType, handler, events_1.applyPassive());\r\n                                },\r\n                                deregisterInputInteractionHandler: function deregisterInputInteractionHandler(evtType, handler) {\r\n                                    return _this.input_.removeEventListener(evtType, handler, events_1.applyPassive());\r\n                                }\r\n                            };\r\n                            // tslint:enable:object-literal-sort-keys\r\n                        };\r\n                        MDCTextField.prototype.getLabelAdapterMethods_ = function() {\r\n                            var _this = this;\r\n                            return {\r\n                                floatLabel: function floatLabel(shouldFloat) {\r\n                                    return _this.label_ && _this.label_.float(shouldFloat);\r\n                                },\r\n                                getLabelWidth: function getLabelWidth() {\r\n                                    return _this.label_ ? _this.label_.getWidth() : 0;\r\n                                },\r\n                                hasLabel: function hasLabel() {\r\n                                    return Boolean(_this.label_);\r\n                                },\r\n                                shakeLabel: function shakeLabel(shouldShake) {\r\n                                    return _this.label_ && _this.label_.shake(shouldShake);\r\n                                },\r\n                                setLabelRequired: function setLabelRequired(isRequired) {\r\n                                    return _this.label_ && _this.label_.setRequired(isRequired);\r\n                                }\r\n                            };\r\n                        };\r\n                        MDCTextField.prototype.getLineRippleAdapterMethods_ = function() {\r\n                            var _this = this;\r\n                            return {\r\n                                activateLineRipple: function activateLineRipple() {\r\n                                    if (_this.lineRipple_) {\r\n                                        _this.lineRipple_.activate();\r\n                                    }\r\n                                },\r\n                                deactivateLineRipple: function deactivateLineRipple() {\r\n                                    if (_this.lineRipple_) {\r\n                                        _this.lineRipple_.deactivate();\r\n                                    }\r\n                                },\r\n                                setLineRippleTransformOrigin: function setLineRippleTransformOrigin(normalizedX) {\r\n                                    if (_this.lineRipple_) {\r\n                                        _this.lineRipple_.setRippleCenter(normalizedX);\r\n                                    }\r\n                                }\r\n                            };\r\n                        };\r\n                        MDCTextField.prototype.getOutlineAdapterMethods_ = function() {\r\n                            var _this = this;\r\n                            return {\r\n                                closeOutline: function closeOutline() {\r\n                                    return _this.outline_ && _this.outline_.closeNotch();\r\n                                },\r\n                                hasOutline: function hasOutline() {\r\n                                    return Boolean(_this.outline_);\r\n                                },\r\n                                notchOutline: function notchOutline(labelWidth) {\r\n                                    return _this.outline_ && _this.outline_.notch(labelWidth);\r\n                                }\r\n                            };\r\n                        };\r\n                        /**\r\n                         * @return A map of all subcomponents to subfoundations.\r\n                         */\r\n                        MDCTextField.prototype.getFoundationMap_ = function() {\r\n                            return {\r\n                                characterCounter: this.characterCounter_ ? this.characterCounter_.foundationForTextField : undefined,\r\n                                helperText: this.helperText_ ? this.helperText_.foundationForTextField : undefined,\r\n                                leadingIcon: this.leadingIcon_ ? this.leadingIcon_.foundationForTextField : undefined,\r\n                                trailingIcon: this.trailingIcon_ ? this.trailingIcon_.foundationForTextField : undefined\r\n                            };\r\n                        };\r\n                        MDCTextField.prototype.createRipple_ = function(rippleFactory) {\r\n                            var _this = this;\r\n                            var isTextArea = this.root.classList.contains(constants_1.cssClasses.TEXTAREA);\r\n                            var isOutlined = this.root.classList.contains(constants_1.cssClasses.OUTLINED);\r\n                            if (isTextArea || isOutlined) {\r\n                                return null;\r\n                            }\r\n                            // DO NOT INLINE this variable. For backward compatibility, foundations take a Partial<MDCFooAdapter>.\r\n                            // To ensure we don't accidentally omit any methods, we need a separate, strongly typed adapter variable.\r\n                            // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface.\r\n                            var adapter = __assign(__assign({}, component_5.MDCRipple.createAdapter(this)), {\r\n                                isSurfaceActive: function isSurfaceActive() {\r\n                                    return ponyfill.matches(_this.input_, ':active');\r\n                                },\r\n                                registerInteractionHandler: function registerInteractionHandler(evtType, handler) {\r\n                                    return _this.input_.addEventListener(evtType, handler, events_1.applyPassive());\r\n                                },\r\n                                deregisterInteractionHandler: function deregisterInteractionHandler(evtType, handler) {\r\n                                    return _this.input_.removeEventListener(evtType, handler, events_1.applyPassive());\r\n                                }\r\n                            });\r\n                            // tslint:enable:object-literal-sort-keys\r\n                            return rippleFactory(this.root, new foundation_1.MDCRippleFoundation(adapter));\r\n                        };\r\n                        return MDCTextField;\r\n                    }(component_1.MDCComponent);\r\n                    exports.MDCTextField = MDCTextField;\r\n\r\n                    /***/\r\n                }),\r\n\r\n                          /***/ \"./packages/mdc-textfield/constants.ts\":\r\n                /*!*********************************************!*\\\r\n  !*** ./packages/mdc-textfield/constants.ts ***!\r\n  \\*********************************************/\r\n                /*! no static exports found */\r\n                /***/ (function(module, exports, __webpack_require__) {\r\n\r\n                    \"use strict\";\r\n\r\n                    /**\r\n                     * @license\r\n                     * Copyright 2016 Google Inc.\r\n                     *\r\n                     * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n                     * of this software and associated documentation files (the \"Software\"), to deal\r\n                     * in the Software without restriction, including without limitation the rights\r\n                     * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n                     * copies of the Software, and to permit persons to whom the Software is\r\n                     * furnished to do so, subject to the following conditions:\r\n                     *\r\n                     * The above copyright notice and this permission notice shall be included in\r\n                     * all copies or substantial portions of the Software.\r\n                     *\r\n                     * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n                     * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n                     * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n                     * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n                     * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n                     * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n                     * THE SOFTWARE.\r\n                     */\r\n\r\n                    Object.defineProperty(exports, \"__esModule\", {value: true});\r\n                    var strings = {\r\n                        ARIA_CONTROLS: 'aria-controls',\r\n                        INPUT_SELECTOR: '.mdc-text-field__input',\r\n                        LABEL_SELECTOR: '.mdc-floating-label',\r\n                        LEADING_ICON_SELECTOR: '.mdc-text-field__icon--leading',\r\n                        LINE_RIPPLE_SELECTOR: '.mdc-line-ripple',\r\n                        OUTLINE_SELECTOR: '.mdc-notched-outline',\r\n                        PREFIX_SELECTOR: '.mdc-text-field__affix--prefix',\r\n                        SUFFIX_SELECTOR: '.mdc-text-field__affix--suffix',\r\n                        TRAILING_ICON_SELECTOR: '.mdc-text-field__icon--trailing'\r\n                    };\r\n                    exports.strings = strings;\r\n                    var cssClasses = {\r\n                        DISABLED: 'mdc-text-field--disabled',\r\n                        FOCUSED: 'mdc-text-field--focused',\r\n                        FULLWIDTH: 'mdc-text-field--fullwidth',\r\n                        HELPER_LINE: 'mdc-text-field-helper-line',\r\n                        INVALID: 'mdc-text-field--invalid',\r\n                        LABEL_FLOATING: 'mdc-text-field--label-floating',\r\n                        NO_LABEL: 'mdc-text-field--no-label',\r\n                        OUTLINED: 'mdc-text-field--outlined',\r\n                        ROOT: 'mdc-text-field',\r\n                        TEXTAREA: 'mdc-text-field--textarea',\r\n                        WITH_LEADING_ICON: 'mdc-text-field--with-leading-icon',\r\n                        WITH_TRAILING_ICON: 'mdc-text-field--with-trailing-icon'\r\n                    };\r\n                    exports.cssClasses = cssClasses;\r\n                    var numbers = {\r\n                        LABEL_SCALE: 0.75\r\n                    };\r\n                    exports.numbers = numbers;\r\n                    /**\r\n                     * Whitelist based off of https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/HTML5/Constraint_validation\r\n                     * under the \"Validation-related attributes\" section.\r\n                     */\r\n                    var VALIDATION_ATTR_WHITELIST = ['pattern', 'min', 'max', 'required', 'step', 'minlength', 'maxlength'];\r\n                    exports.VALIDATION_ATTR_WHITELIST = VALIDATION_ATTR_WHITELIST;\r\n                    /**\r\n                     * Label should always float for these types as they show some UI even if value is empty.\r\n                     */\r\n                    var ALWAYS_FLOAT_TYPES = ['color', 'date', 'datetime-local', 'month', 'range', 'time', 'week'];\r\n                    exports.ALWAYS_FLOAT_TYPES = ALWAYS_FLOAT_TYPES;\r\n\r\n                    /***/\r\n                }),\r\n\r\n                          /***/ \"./packages/mdc-textfield/foundation.ts\":\r\n                /*!**********************************************!*\\\r\n  !*** ./packages/mdc-textfield/foundation.ts ***!\r\n  \\**********************************************/\r\n                /*! no static exports found */\r\n                /***/ (function(module, exports, __webpack_require__) {\r\n\r\n                    \"use strict\";\r\n\r\n                    /**\r\n                     * @license\r\n                     * Copyright 2016 Google Inc.\r\n                     *\r\n                     * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n                     * of this software and associated documentation files (the \"Software\"), to deal\r\n                     * in the Software without restriction, including without limitation the rights\r\n                     * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n                     * copies of the Software, and to permit persons to whom the Software is\r\n                     * furnished to do so, subject to the following conditions:\r\n                     *\r\n                     * The above copyright notice and this permission notice shall be included in\r\n                     * all copies or substantial portions of the Software.\r\n                     *\r\n                     * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n                     * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n                     * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n                     * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n                     * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n                     * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n                     * THE SOFTWARE.\r\n                     */\r\n\r\n                    var __extends = this && this.__extends || function() {\r\n                        var _extendStatics = function extendStatics(d, b) {\r\n                            _extendStatics = Object.setPrototypeOf || {__proto__: []} instanceof Array && function(d, b) {\r\n                                d.__proto__ = b;\r\n                            } || function(d, b) {\r\n                                for (var p in b) {\r\n                                    if (b.hasOwnProperty(p)) {\r\n                                        d[p] = b[p];\r\n                                    }\r\n                                }\r\n                            };\r\n                            return _extendStatics(d, b);\r\n                        };\r\n                        return function(d, b) {\r\n                            _extendStatics(d, b);\r\n\r\n                            function __() {\r\n                                this.constructor = d;\r\n                            }\r\n\r\n                            d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n                        };\r\n                    }();\r\n                    var __assign = this && this.__assign || function() {\r\n                        __assign = Object.assign || function(t) {\r\n                            for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n                                s = arguments[i];\r\n                                for (var p in s) {\r\n                                    if (Object.prototype.hasOwnProperty.call(s, p)) {\r\n                                        t[p] = s[p];\r\n                                    }\r\n                                }\r\n                            }\r\n                            return t;\r\n                        };\r\n                        return __assign.apply(this, arguments);\r\n                    };\r\n                    Object.defineProperty(exports, \"__esModule\", {value: true});\r\n                    var foundation_1 = __webpack_require__(/*! @material/base/foundation */ \"./packages/mdc-base/foundation.ts\");\r\n                    var constants_1 = __webpack_require__(/*! ./constants */ \"./packages/mdc-textfield/constants.ts\");\r\n                    var POINTERDOWN_EVENTS = ['mousedown', 'touchstart'];\r\n                    var INTERACTION_EVENTS = ['click', 'keydown'];\r\n                    var MDCTextFieldFoundation = /** @class */function(_super) {\r\n                        __extends(MDCTextFieldFoundation, _super);\r\n\r\n                        /**\r\n                         * @param adapter\r\n                         * @param foundationMap Map from subcomponent names to their subfoundations.\r\n                         */\r\n                        function MDCTextFieldFoundation(adapter, foundationMap) {\r\n                            if (foundationMap === void 0) {\r\n                                foundationMap = {};\r\n                            }\r\n                            var _this = _super.call(this, __assign(__assign({}, MDCTextFieldFoundation.defaultAdapter), adapter)) || this;\r\n                            _this.isFocused_ = false;\r\n                            _this.receivedUserInput_ = false;\r\n                            _this.isValid_ = true;\r\n                            _this.useNativeValidation_ = true;\r\n                            _this.helperText_ = foundationMap.helperText;\r\n                            _this.characterCounter_ = foundationMap.characterCounter;\r\n                            _this.leadingIcon_ = foundationMap.leadingIcon;\r\n                            _this.trailingIcon_ = foundationMap.trailingIcon;\r\n                            _this.inputFocusHandler_ = function() {\r\n                                return _this.activateFocus();\r\n                            };\r\n                            _this.inputBlurHandler_ = function() {\r\n                                return _this.deactivateFocus();\r\n                            };\r\n                            _this.inputInputHandler_ = function() {\r\n                                return _this.handleInput();\r\n                            };\r\n                            _this.setPointerXOffset_ = function(evt) {\r\n                                return _this.setTransformOrigin(evt);\r\n                            };\r\n                            _this.textFieldInteractionHandler_ = function() {\r\n                                return _this.handleTextFieldInteraction();\r\n                            };\r\n                            _this.validationAttributeChangeHandler_ = function(attributesList) {\r\n                                return _this.handleValidationAttributeChange(attributesList);\r\n                            };\r\n                            return _this;\r\n                        }\r\n\r\n                        Object.defineProperty(MDCTextFieldFoundation, \"cssClasses\", {\r\n                            get: function get() {\r\n                                return constants_1.cssClasses;\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCTextFieldFoundation, \"strings\", {\r\n                            get: function get() {\r\n                                return constants_1.strings;\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCTextFieldFoundation, \"numbers\", {\r\n                            get: function get() {\r\n                                return constants_1.numbers;\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCTextFieldFoundation.prototype, \"shouldAlwaysFloat_\", {\r\n                            get: function get() {\r\n                                var type = this.getNativeInput_().type;\r\n                                return constants_1.ALWAYS_FLOAT_TYPES.indexOf(type) >= 0;\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCTextFieldFoundation.prototype, \"shouldFloat\", {\r\n                            get: function get() {\r\n                                return this.shouldAlwaysFloat_ || this.isFocused_ || !!this.getValue() || this.isBadInput_();\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCTextFieldFoundation.prototype, \"shouldShake\", {\r\n                            get: function get() {\r\n                                return !this.isFocused_ && !this.isValid() && !!this.getValue();\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCTextFieldFoundation, \"defaultAdapter\", {\r\n                            /**\r\n                             * See {@link MDCTextFieldAdapter} for typing information on parameters and return types.\r\n                             */\r\n                            get: function get() {\r\n                                // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface.\r\n                                return {\r\n                                    addClass: function addClass() {\r\n                                        return undefined;\r\n                                    },\r\n                                    removeClass: function removeClass() {\r\n                                        return undefined;\r\n                                    },\r\n                                    hasClass: function hasClass() {\r\n                                        return true;\r\n                                    },\r\n                                    registerTextFieldInteractionHandler: function registerTextFieldInteractionHandler() {\r\n                                        return undefined;\r\n                                    },\r\n                                    deregisterTextFieldInteractionHandler: function deregisterTextFieldInteractionHandler() {\r\n                                        return undefined;\r\n                                    },\r\n                                    registerInputInteractionHandler: function registerInputInteractionHandler() {\r\n                                        return undefined;\r\n                                    },\r\n                                    deregisterInputInteractionHandler: function deregisterInputInteractionHandler() {\r\n                                        return undefined;\r\n                                    },\r\n                                    registerValidationAttributeChangeHandler: function registerValidationAttributeChangeHandler() {\r\n                                        return new MutationObserver(function() {\r\n                                            return undefined;\r\n                                        });\r\n                                    },\r\n                                    deregisterValidationAttributeChangeHandler: function deregisterValidationAttributeChangeHandler() {\r\n                                        return undefined;\r\n                                    },\r\n                                    getNativeInput: function getNativeInput() {\r\n                                        return null;\r\n                                    },\r\n                                    isFocused: function isFocused() {\r\n                                        return false;\r\n                                    },\r\n                                    activateLineRipple: function activateLineRipple() {\r\n                                        return undefined;\r\n                                    },\r\n                                    deactivateLineRipple: function deactivateLineRipple() {\r\n                                        return undefined;\r\n                                    },\r\n                                    setLineRippleTransformOrigin: function setLineRippleTransformOrigin() {\r\n                                        return undefined;\r\n                                    },\r\n                                    shakeLabel: function shakeLabel() {\r\n                                        return undefined;\r\n                                    },\r\n                                    floatLabel: function floatLabel() {\r\n                                        return undefined;\r\n                                    },\r\n                                    setLabelRequired: function setLabelRequired() {\r\n                                        return undefined;\r\n                                    },\r\n                                    hasLabel: function hasLabel() {\r\n                                        return false;\r\n                                    },\r\n                                    getLabelWidth: function getLabelWidth() {\r\n                                        return 0;\r\n                                    },\r\n                                    hasOutline: function hasOutline() {\r\n                                        return false;\r\n                                    },\r\n                                    notchOutline: function notchOutline() {\r\n                                        return undefined;\r\n                                    },\r\n                                    closeOutline: function closeOutline() {\r\n                                        return undefined;\r\n                                    }\r\n                                };\r\n                                // tslint:enable:object-literal-sort-keys\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        MDCTextFieldFoundation.prototype.init = function() {\r\n                            var _this = this;\r\n                            if (this.adapter.hasLabel() && this.getNativeInput_().required) {\r\n                                this.adapter.setLabelRequired(true);\r\n                            }\r\n                            if (this.adapter.isFocused()) {\r\n                                this.inputFocusHandler_();\r\n                            } else if (this.adapter.hasLabel() && this.shouldFloat) {\r\n                                this.notchOutline(true);\r\n                                this.adapter.floatLabel(true);\r\n                                this.styleFloating_(true);\r\n                            }\r\n                            this.adapter.registerInputInteractionHandler('focus', this.inputFocusHandler_);\r\n                            this.adapter.registerInputInteractionHandler('blur', this.inputBlurHandler_);\r\n                            this.adapter.registerInputInteractionHandler('input', this.inputInputHandler_);\r\n                            POINTERDOWN_EVENTS.forEach(function(evtType) {\r\n                                _this.adapter.registerInputInteractionHandler(evtType, _this.setPointerXOffset_);\r\n                            });\r\n                            INTERACTION_EVENTS.forEach(function(evtType) {\r\n                                _this.adapter.registerTextFieldInteractionHandler(evtType, _this.textFieldInteractionHandler_);\r\n                            });\r\n                            this.validationObserver_ = this.adapter.registerValidationAttributeChangeHandler(this.validationAttributeChangeHandler_);\r\n                            this.setCharacterCounter_(this.getValue().length);\r\n                        };\r\n                        MDCTextFieldFoundation.prototype.destroy = function() {\r\n                            var _this = this;\r\n                            this.adapter.deregisterInputInteractionHandler('focus', this.inputFocusHandler_);\r\n                            this.adapter.deregisterInputInteractionHandler('blur', this.inputBlurHandler_);\r\n                            this.adapter.deregisterInputInteractionHandler('input', this.inputInputHandler_);\r\n                            POINTERDOWN_EVENTS.forEach(function(evtType) {\r\n                                _this.adapter.deregisterInputInteractionHandler(evtType, _this.setPointerXOffset_);\r\n                            });\r\n                            INTERACTION_EVENTS.forEach(function(evtType) {\r\n                                _this.adapter.deregisterTextFieldInteractionHandler(evtType, _this.textFieldInteractionHandler_);\r\n                            });\r\n                            this.adapter.deregisterValidationAttributeChangeHandler(this.validationObserver_);\r\n                        };\r\n                        /**\r\n                         * Handles user interactions with the Text Field.\r\n                         */\r\n                        MDCTextFieldFoundation.prototype.handleTextFieldInteraction = function() {\r\n                            var nativeInput = this.adapter.getNativeInput();\r\n                            if (nativeInput && nativeInput.disabled) {\r\n                                return;\r\n                            }\r\n                            this.receivedUserInput_ = true;\r\n                        };\r\n                        /**\r\n                         * Handles validation attribute changes\r\n                         */\r\n                        MDCTextFieldFoundation.prototype.handleValidationAttributeChange = function(attributesList) {\r\n                            var _this = this;\r\n                            attributesList.some(function(attributeName) {\r\n                                if (constants_1.VALIDATION_ATTR_WHITELIST.indexOf(attributeName) > -1) {\r\n                                    _this.styleValidity_(true);\r\n                                    _this.adapter.setLabelRequired(_this.getNativeInput_().required);\r\n                                    return true;\r\n                                }\r\n                                return false;\r\n                            });\r\n                            if (attributesList.indexOf('maxlength') > -1) {\r\n                                this.setCharacterCounter_(this.getValue().length);\r\n                            }\r\n                        };\r\n                        /**\r\n                         * Opens/closes the notched outline.\r\n                         */\r\n                        MDCTextFieldFoundation.prototype.notchOutline = function(openNotch) {\r\n                            if (!this.adapter.hasOutline()) {\r\n                                return;\r\n                            }\r\n                            if (openNotch) {\r\n                                var labelWidth = this.adapter.getLabelWidth() * constants_1.numbers.LABEL_SCALE;\r\n                                this.adapter.notchOutline(labelWidth);\r\n                            } else {\r\n                                this.adapter.closeOutline();\r\n                            }\r\n                        };\r\n                        /**\r\n                         * Activates the text field focus state.\r\n                         */\r\n                        MDCTextFieldFoundation.prototype.activateFocus = function() {\r\n                            this.isFocused_ = true;\r\n                            this.styleFocused_(this.isFocused_);\r\n                            this.adapter.activateLineRipple();\r\n                            if (this.adapter.hasLabel()) {\r\n                                this.notchOutline(this.shouldFloat);\r\n                                this.adapter.floatLabel(this.shouldFloat);\r\n                                this.styleFloating_(this.shouldFloat);\r\n                                this.adapter.shakeLabel(this.shouldShake);\r\n                            }\r\n                            if (this.helperText_) {\r\n                                this.helperText_.showToScreenReader();\r\n                            }\r\n                        };\r\n                        /**\r\n                         * Sets the line ripple's transform origin, so that the line ripple activate\r\n                         * animation will animate out from the user's click location.\r\n                         */\r\n                        MDCTextFieldFoundation.prototype.setTransformOrigin = function(evt) {\r\n                            if (this.isDisabled() || this.adapter.hasOutline()) {\r\n                                return;\r\n                            }\r\n                            var touches = evt.touches;\r\n                            var targetEvent = touches ? touches[0] : evt;\r\n                            var targetClientRect = targetEvent.target.getBoundingClientRect();\r\n                            var normalizedX = targetEvent.clientX - targetClientRect.left;\r\n                            this.adapter.setLineRippleTransformOrigin(normalizedX);\r\n                        };\r\n                        /**\r\n                         * Handles input change of text input and text area.\r\n                         */\r\n                        MDCTextFieldFoundation.prototype.handleInput = function() {\r\n                            this.autoCompleteFocus();\r\n                            this.setCharacterCounter_(this.getValue().length);\r\n                        };\r\n                        /**\r\n                         * Activates the Text Field's focus state in cases when the input value\r\n                         * changes without user input (e.g. programmatically).\r\n                         */\r\n                        MDCTextFieldFoundation.prototype.autoCompleteFocus = function() {\r\n                            if (!this.receivedUserInput_) {\r\n                                this.activateFocus();\r\n                            }\r\n                        };\r\n                        /**\r\n                         * Deactivates the Text Field's focus state.\r\n                         */\r\n                        MDCTextFieldFoundation.prototype.deactivateFocus = function() {\r\n                            this.isFocused_ = false;\r\n                            this.adapter.deactivateLineRipple();\r\n                            var isValid = this.isValid();\r\n                            this.styleValidity_(isValid);\r\n                            this.styleFocused_(this.isFocused_);\r\n                            if (this.adapter.hasLabel()) {\r\n                                this.notchOutline(this.shouldFloat);\r\n                                this.adapter.floatLabel(this.shouldFloat);\r\n                                this.styleFloating_(this.shouldFloat);\r\n                                this.adapter.shakeLabel(this.shouldShake);\r\n                            }\r\n                            if (!this.shouldFloat) {\r\n                                this.receivedUserInput_ = false;\r\n                            }\r\n                        };\r\n                        MDCTextFieldFoundation.prototype.getValue = function() {\r\n                            return this.getNativeInput_().value;\r\n                        };\r\n                        /**\r\n                         * @param value The value to set on the input Element.\r\n                         */\r\n                        MDCTextFieldFoundation.prototype.setValue = function(value) {\r\n                            // Prevent Safari from moving the caret to the end of the input when the value has not changed.\r\n                            if (this.getValue() !== value) {\r\n                                this.getNativeInput_().value = value;\r\n                            }\r\n                            this.setCharacterCounter_(value.length);\r\n                            var isValid = this.isValid();\r\n                            this.styleValidity_(isValid);\r\n                            if (this.adapter.hasLabel()) {\r\n                                this.notchOutline(this.shouldFloat);\r\n                                this.adapter.floatLabel(this.shouldFloat);\r\n                                this.styleFloating_(this.shouldFloat);\r\n                                this.adapter.shakeLabel(this.shouldShake);\r\n                            }\r\n                        };\r\n                        /**\r\n                         * @return The custom validity state, if set; otherwise, the result of a native validity check.\r\n                         */\r\n                        MDCTextFieldFoundation.prototype.isValid = function() {\r\n                            return this.useNativeValidation_ ? this.isNativeInputValid_() : this.isValid_;\r\n                        };\r\n                        /**\r\n                         * @param isValid Sets the custom validity state of the Text Field.\r\n                         */\r\n                        MDCTextFieldFoundation.prototype.setValid = function(isValid) {\r\n                            this.isValid_ = isValid;\r\n                            this.styleValidity_(isValid);\r\n                            var shouldShake = !isValid && !this.isFocused_ && !!this.getValue();\r\n                            if (this.adapter.hasLabel()) {\r\n                                this.adapter.shakeLabel(shouldShake);\r\n                            }\r\n                        };\r\n                        /**\r\n                         * Enables or disables the use of native validation. Use this for custom validation.\r\n                         * @param useNativeValidation Set this to false to ignore native input validation.\r\n                         */\r\n                        MDCTextFieldFoundation.prototype.setUseNativeValidation = function(useNativeValidation) {\r\n                            this.useNativeValidation_ = useNativeValidation;\r\n                        };\r\n                        MDCTextFieldFoundation.prototype.isDisabled = function() {\r\n                            return this.getNativeInput_().disabled;\r\n                        };\r\n                        /**\r\n                         * @param disabled Sets the text-field disabled or enabled.\r\n                         */\r\n                        MDCTextFieldFoundation.prototype.setDisabled = function(disabled) {\r\n                            this.getNativeInput_().disabled = disabled;\r\n                            this.styleDisabled_(disabled);\r\n                        };\r\n                        /**\r\n                         * @param content Sets the content of the helper text.\r\n                         */\r\n                        MDCTextFieldFoundation.prototype.setHelperTextContent = function(content) {\r\n                            if (this.helperText_) {\r\n                                this.helperText_.setContent(content);\r\n                            }\r\n                        };\r\n                        /**\r\n                         * Sets the aria label of the leading icon.\r\n                         */\r\n                        MDCTextFieldFoundation.prototype.setLeadingIconAriaLabel = function(label) {\r\n                            if (this.leadingIcon_) {\r\n                                this.leadingIcon_.setAriaLabel(label);\r\n                            }\r\n                        };\r\n                        /**\r\n                         * Sets the text content of the leading icon.\r\n                         */\r\n                        MDCTextFieldFoundation.prototype.setLeadingIconContent = function(content) {\r\n                            if (this.leadingIcon_) {\r\n                                this.leadingIcon_.setContent(content);\r\n                            }\r\n                        };\r\n                        /**\r\n                         * Sets the aria label of the trailing icon.\r\n                         */\r\n                        MDCTextFieldFoundation.prototype.setTrailingIconAriaLabel = function(label) {\r\n                            if (this.trailingIcon_) {\r\n                                this.trailingIcon_.setAriaLabel(label);\r\n                            }\r\n                        };\r\n                        /**\r\n                         * Sets the text content of the trailing icon.\r\n                         */\r\n                        MDCTextFieldFoundation.prototype.setTrailingIconContent = function(content) {\r\n                            if (this.trailingIcon_) {\r\n                                this.trailingIcon_.setContent(content);\r\n                            }\r\n                        };\r\n                        /**\r\n                         * Sets character counter values that shows characters used and the total character limit.\r\n                         */\r\n                        MDCTextFieldFoundation.prototype.setCharacterCounter_ = function(currentLength) {\r\n                            if (!this.characterCounter_) {\r\n                                return;\r\n                            }\r\n                            var maxLength = this.getNativeInput_().maxLength;\r\n                            if (maxLength === -1) {\r\n                                throw new Error('MDCTextFieldFoundation: Expected maxlength html property on text input or textarea.');\r\n                            }\r\n                            this.characterCounter_.setCounterValue(currentLength, maxLength);\r\n                        };\r\n                        /**\r\n                         * @return True if the Text Field input fails in converting the user-supplied value.\r\n                         */\r\n                        MDCTextFieldFoundation.prototype.isBadInput_ = function() {\r\n                            // The badInput property is not supported in IE 11 ?.\r\n                            return this.getNativeInput_().validity.badInput || false;\r\n                        };\r\n                        /**\r\n                         * @return The result of native validity checking (ValidityState.valid).\r\n                         */\r\n                        MDCTextFieldFoundation.prototype.isNativeInputValid_ = function() {\r\n                            return this.getNativeInput_().validity.valid;\r\n                        };\r\n                        /**\r\n                         * Styles the component based on the validity state.\r\n                         */\r\n                        MDCTextFieldFoundation.prototype.styleValidity_ = function(isValid) {\r\n                            var INVALID = MDCTextFieldFoundation.cssClasses.INVALID;\r\n                            if (isValid) {\r\n                                this.adapter.removeClass(INVALID);\r\n                            } else {\r\n                                this.adapter.addClass(INVALID);\r\n                            }\r\n                            if (this.helperText_) {\r\n                                this.helperText_.setValidity(isValid);\r\n                            }\r\n                        };\r\n                        /**\r\n                         * Styles the component based on the focused state.\r\n                         */\r\n                        MDCTextFieldFoundation.prototype.styleFocused_ = function(isFocused) {\r\n                            var FOCUSED = MDCTextFieldFoundation.cssClasses.FOCUSED;\r\n                            if (isFocused) {\r\n                                this.adapter.addClass(FOCUSED);\r\n                            } else {\r\n                                this.adapter.removeClass(FOCUSED);\r\n                            }\r\n                        };\r\n                        /**\r\n                         * Styles the component based on the disabled state.\r\n                         */\r\n                        MDCTextFieldFoundation.prototype.styleDisabled_ = function(isDisabled) {\r\n                            var _a = MDCTextFieldFoundation.cssClasses,\r\n                                    DISABLED = _a.DISABLED,\r\n                                    INVALID = _a.INVALID;\r\n                            if (isDisabled) {\r\n                                this.adapter.addClass(DISABLED);\r\n                                this.adapter.removeClass(INVALID);\r\n                            } else {\r\n                                this.adapter.removeClass(DISABLED);\r\n                            }\r\n                            if (this.leadingIcon_) {\r\n                                this.leadingIcon_.setDisabled(isDisabled);\r\n                            }\r\n                            if (this.trailingIcon_) {\r\n                                this.trailingIcon_.setDisabled(isDisabled);\r\n                            }\r\n                        };\r\n                        /**\r\n                         * Styles the component based on the label floating state.\r\n                         */\r\n                        MDCTextFieldFoundation.prototype.styleFloating_ = function(isFloating) {\r\n                            var LABEL_FLOATING = MDCTextFieldFoundation.cssClasses.LABEL_FLOATING;\r\n                            if (isFloating) {\r\n                                this.adapter.addClass(LABEL_FLOATING);\r\n                            } else {\r\n                                this.adapter.removeClass(LABEL_FLOATING);\r\n                            }\r\n                        };\r\n                        /**\r\n                         * @return The native text input element from the host environment, or an object with the same shape for unit tests.\r\n                         */\r\n                        MDCTextFieldFoundation.prototype.getNativeInput_ = function() {\r\n                            // this.adapter may be undefined in foundation unit tests. This happens when testdouble is creating a mock object\r\n                            // and invokes the shouldShake/shouldFloat getters (which in turn call getValue(), which calls this method) before\r\n                            // init() has been called from the MDCTextField constructor. To work around that issue, we return a dummy object.\r\n                            var nativeInput = this.adapter ? this.adapter.getNativeInput() : null;\r\n                            return nativeInput || {\r\n                                disabled: false,\r\n                                maxLength: -1,\r\n                                required: false,\r\n                                type: 'input',\r\n                                validity: {\r\n                                    badInput: false,\r\n                                    valid: true\r\n                                },\r\n                                value: ''\r\n                            };\r\n                        };\r\n                        return MDCTextFieldFoundation;\r\n                    }(foundation_1.MDCFoundation);\r\n                    exports.MDCTextFieldFoundation = MDCTextFieldFoundation;\r\n// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier.\r\n                    exports.default = MDCTextFieldFoundation;\r\n\r\n                    /***/\r\n                }),\r\n\r\n                          /***/ \"./packages/mdc-textfield/helper-text/component.ts\":\r\n                /*!*********************************************************!*\\\r\n  !*** ./packages/mdc-textfield/helper-text/component.ts ***!\r\n  \\*********************************************************/\r\n                /*! no static exports found */\r\n                /***/ (function(module, exports, __webpack_require__) {\r\n\r\n                    \"use strict\";\r\n\r\n                    /**\r\n                     * @license\r\n                     * Copyright 2017 Google Inc.\r\n                     *\r\n                     * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n                     * of this software and associated documentation files (the \"Software\"), to deal\r\n                     * in the Software without restriction, including without limitation the rights\r\n                     * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n                     * copies of the Software, and to permit persons to whom the Software is\r\n                     * furnished to do so, subject to the following conditions:\r\n                     *\r\n                     * The above copyright notice and this permission notice shall be included in\r\n                     * all copies or substantial portions of the Software.\r\n                     *\r\n                     * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n                     * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n                     * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n                     * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n                     * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n                     * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n                     * THE SOFTWARE.\r\n                     */\r\n\r\n                    var __extends = this && this.__extends || function() {\r\n                        var _extendStatics = function extendStatics(d, b) {\r\n                            _extendStatics = Object.setPrototypeOf || {__proto__: []} instanceof Array && function(d, b) {\r\n                                d.__proto__ = b;\r\n                            } || function(d, b) {\r\n                                for (var p in b) {\r\n                                    if (b.hasOwnProperty(p)) {\r\n                                        d[p] = b[p];\r\n                                    }\r\n                                }\r\n                            };\r\n                            return _extendStatics(d, b);\r\n                        };\r\n                        return function(d, b) {\r\n                            _extendStatics(d, b);\r\n\r\n                            function __() {\r\n                                this.constructor = d;\r\n                            }\r\n\r\n                            d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n                        };\r\n                    }();\r\n                    Object.defineProperty(exports, \"__esModule\", {value: true});\r\n                    var component_1 = __webpack_require__(/*! @material/base/component */ \"./packages/mdc-base/component.ts\");\r\n                    var foundation_1 = __webpack_require__(/*! ./foundation */ \"./packages/mdc-textfield/helper-text/foundation.ts\");\r\n                    var MDCTextFieldHelperText = /** @class */function(_super) {\r\n                        __extends(MDCTextFieldHelperText, _super);\r\n\r\n                        function MDCTextFieldHelperText() {\r\n                            return _super !== null && _super.apply(this, arguments) || this;\r\n                        }\r\n\r\n                        MDCTextFieldHelperText.attachTo = function(root) {\r\n                            return new MDCTextFieldHelperText(root);\r\n                        };\r\n                        Object.defineProperty(MDCTextFieldHelperText.prototype, \"foundationForTextField\", {\r\n                            // Provided for access by MDCTextField component\r\n                            get: function get() {\r\n                                return this.foundation;\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        MDCTextFieldHelperText.prototype.getDefaultFoundation = function() {\r\n                            var _this = this;\r\n                            // DO NOT INLINE this variable. For backward compatibility, foundations take a Partial<MDCFooAdapter>.\r\n                            // To ensure we don't accidentally omit any methods, we need a separate, strongly typed adapter variable.\r\n                            // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface.\r\n                            var adapter = {\r\n                                addClass: function addClass(className) {\r\n                                    return _this.root.classList.add(className);\r\n                                },\r\n                                removeClass: function removeClass(className) {\r\n                                    return _this.root.classList.remove(className);\r\n                                },\r\n                                hasClass: function hasClass(className) {\r\n                                    return _this.root.classList.contains(className);\r\n                                },\r\n                                setAttr: function setAttr(attr, value) {\r\n                                    return _this.root.setAttribute(attr, value);\r\n                                },\r\n                                removeAttr: function removeAttr(attr) {\r\n                                    return _this.root.removeAttribute(attr);\r\n                                },\r\n                                setContent: function setContent(content) {\r\n                                    _this.root.textContent = content;\r\n                                }\r\n                            };\r\n                            // tslint:enable:object-literal-sort-keys\r\n                            return new foundation_1.MDCTextFieldHelperTextFoundation(adapter);\r\n                        };\r\n                        return MDCTextFieldHelperText;\r\n                    }(component_1.MDCComponent);\r\n                    exports.MDCTextFieldHelperText = MDCTextFieldHelperText;\r\n\r\n                    /***/\r\n                }),\r\n\r\n                          /***/ \"./packages/mdc-textfield/helper-text/constants.ts\":\r\n                /*!*********************************************************!*\\\r\n  !*** ./packages/mdc-textfield/helper-text/constants.ts ***!\r\n  \\*********************************************************/\r\n                /*! no static exports found */\r\n                /***/ (function(module, exports, __webpack_require__) {\r\n\r\n                    \"use strict\";\r\n\r\n                    /**\r\n                     * @license\r\n                     * Copyright 2016 Google Inc.\r\n                     *\r\n                     * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n                     * of this software and associated documentation files (the \"Software\"), to deal\r\n                     * in the Software without restriction, including without limitation the rights\r\n                     * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n                     * copies of the Software, and to permit persons to whom the Software is\r\n                     * furnished to do so, subject to the following conditions:\r\n                     *\r\n                     * The above copyright notice and this permission notice shall be included in\r\n                     * all copies or substantial portions of the Software.\r\n                     *\r\n                     * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n                     * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n                     * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n                     * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n                     * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n                     * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n                     * THE SOFTWARE.\r\n                     */\r\n\r\n                    Object.defineProperty(exports, \"__esModule\", {value: true});\r\n                    var cssClasses = {\r\n                        HELPER_TEXT_PERSISTENT: 'mdc-text-field-helper-text--persistent',\r\n                        HELPER_TEXT_VALIDATION_MSG: 'mdc-text-field-helper-text--validation-msg',\r\n                        ROOT: 'mdc-text-field-helper-text'\r\n                    };\r\n                    exports.cssClasses = cssClasses;\r\n                    var strings = {\r\n                        ARIA_HIDDEN: 'aria-hidden',\r\n                        ROLE: 'role',\r\n                        ROOT_SELECTOR: \".\" + cssClasses.ROOT\r\n                    };\r\n                    exports.strings = strings;\r\n\r\n                    /***/\r\n                }),\r\n\r\n                          /***/ \"./packages/mdc-textfield/helper-text/foundation.ts\":\r\n                /*!**********************************************************!*\\\r\n  !*** ./packages/mdc-textfield/helper-text/foundation.ts ***!\r\n  \\**********************************************************/\r\n                /*! no static exports found */\r\n                /***/ (function(module, exports, __webpack_require__) {\r\n\r\n                    \"use strict\";\r\n\r\n                    /**\r\n                     * @license\r\n                     * Copyright 2017 Google Inc.\r\n                     *\r\n                     * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n                     * of this software and associated documentation files (the \"Software\"), to deal\r\n                     * in the Software without restriction, including without limitation the rights\r\n                     * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n                     * copies of the Software, and to permit persons to whom the Software is\r\n                     * furnished to do so, subject to the following conditions:\r\n                     *\r\n                     * The above copyright notice and this permission notice shall be included in\r\n                     * all copies or substantial portions of the Software.\r\n                     *\r\n                     * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n                     * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n                     * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n                     * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n                     * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n                     * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n                     * THE SOFTWARE.\r\n                     */\r\n\r\n                    var __extends = this && this.__extends || function() {\r\n                        var _extendStatics = function extendStatics(d, b) {\r\n                            _extendStatics = Object.setPrototypeOf || {__proto__: []} instanceof Array && function(d, b) {\r\n                                d.__proto__ = b;\r\n                            } || function(d, b) {\r\n                                for (var p in b) {\r\n                                    if (b.hasOwnProperty(p)) {\r\n                                        d[p] = b[p];\r\n                                    }\r\n                                }\r\n                            };\r\n                            return _extendStatics(d, b);\r\n                        };\r\n                        return function(d, b) {\r\n                            _extendStatics(d, b);\r\n\r\n                            function __() {\r\n                                this.constructor = d;\r\n                            }\r\n\r\n                            d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n                        };\r\n                    }();\r\n                    var __assign = this && this.__assign || function() {\r\n                        __assign = Object.assign || function(t) {\r\n                            for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n                                s = arguments[i];\r\n                                for (var p in s) {\r\n                                    if (Object.prototype.hasOwnProperty.call(s, p)) {\r\n                                        t[p] = s[p];\r\n                                    }\r\n                                }\r\n                            }\r\n                            return t;\r\n                        };\r\n                        return __assign.apply(this, arguments);\r\n                    };\r\n                    Object.defineProperty(exports, \"__esModule\", {value: true});\r\n                    var foundation_1 = __webpack_require__(/*! @material/base/foundation */ \"./packages/mdc-base/foundation.ts\");\r\n                    var constants_1 = __webpack_require__(/*! ./constants */ \"./packages/mdc-textfield/helper-text/constants.ts\");\r\n                    var MDCTextFieldHelperTextFoundation = /** @class */function(_super) {\r\n                        __extends(MDCTextFieldHelperTextFoundation, _super);\r\n\r\n                        function MDCTextFieldHelperTextFoundation(adapter) {\r\n                            return _super.call(this, __assign(__assign({}, MDCTextFieldHelperTextFoundation.defaultAdapter), adapter)) || this;\r\n                        }\r\n\r\n                        Object.defineProperty(MDCTextFieldHelperTextFoundation, \"cssClasses\", {\r\n                            get: function get() {\r\n                                return constants_1.cssClasses;\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCTextFieldHelperTextFoundation, \"strings\", {\r\n                            get: function get() {\r\n                                return constants_1.strings;\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCTextFieldHelperTextFoundation, \"defaultAdapter\", {\r\n                            /**\r\n                             * See {@link MDCTextFieldHelperTextAdapter} for typing information on parameters and return types.\r\n                             */\r\n                            get: function get() {\r\n                                // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface.\r\n                                return {\r\n                                    addClass: function addClass() {\r\n                                        return undefined;\r\n                                    },\r\n                                    removeClass: function removeClass() {\r\n                                        return undefined;\r\n                                    },\r\n                                    hasClass: function hasClass() {\r\n                                        return false;\r\n                                    },\r\n                                    setAttr: function setAttr() {\r\n                                        return undefined;\r\n                                    },\r\n                                    removeAttr: function removeAttr() {\r\n                                        return undefined;\r\n                                    },\r\n                                    setContent: function setContent() {\r\n                                        return undefined;\r\n                                    }\r\n                                };\r\n                                // tslint:enable:object-literal-sort-keys\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        /**\r\n                         * Sets the content of the helper text field.\r\n                         */\r\n                        MDCTextFieldHelperTextFoundation.prototype.setContent = function(content) {\r\n                            this.adapter.setContent(content);\r\n                        };\r\n                        /**\r\n                         * @param isPersistent Sets the persistency of the helper text.\r\n                         */\r\n                        MDCTextFieldHelperTextFoundation.prototype.setPersistent = function(isPersistent) {\r\n                            if (isPersistent) {\r\n                                this.adapter.addClass(constants_1.cssClasses.HELPER_TEXT_PERSISTENT);\r\n                            } else {\r\n                                this.adapter.removeClass(constants_1.cssClasses.HELPER_TEXT_PERSISTENT);\r\n                            }\r\n                        };\r\n                        /**\r\n                         * @param isValidation True to make the helper text act as an error validation message.\r\n                         */\r\n                        MDCTextFieldHelperTextFoundation.prototype.setValidation = function(isValidation) {\r\n                            if (isValidation) {\r\n                                this.adapter.addClass(constants_1.cssClasses.HELPER_TEXT_VALIDATION_MSG);\r\n                            } else {\r\n                                this.adapter.removeClass(constants_1.cssClasses.HELPER_TEXT_VALIDATION_MSG);\r\n                            }\r\n                        };\r\n                        /**\r\n                         * Makes the helper text visible to the screen reader.\r\n                         */\r\n                        MDCTextFieldHelperTextFoundation.prototype.showToScreenReader = function() {\r\n                            this.adapter.removeAttr(constants_1.strings.ARIA_HIDDEN);\r\n                        };\r\n                        /**\r\n                         * Sets the validity of the helper text based on the input validity.\r\n                         */\r\n                        MDCTextFieldHelperTextFoundation.prototype.setValidity = function(inputIsValid) {\r\n                            var helperTextIsPersistent = this.adapter.hasClass(constants_1.cssClasses.HELPER_TEXT_PERSISTENT);\r\n                            var helperTextIsValidationMsg = this.adapter.hasClass(constants_1.cssClasses.HELPER_TEXT_VALIDATION_MSG);\r\n                            var validationMsgNeedsDisplay = helperTextIsValidationMsg && !inputIsValid;\r\n                            if (validationMsgNeedsDisplay) {\r\n                                this.adapter.setAttr(constants_1.strings.ROLE, 'alert');\r\n                            } else {\r\n                                this.adapter.removeAttr(constants_1.strings.ROLE);\r\n                            }\r\n                            if (!helperTextIsPersistent && !validationMsgNeedsDisplay) {\r\n                                this.hide_();\r\n                            }\r\n                        };\r\n                        /**\r\n                         * Hides the help text from screen readers.\r\n                         */\r\n                        MDCTextFieldHelperTextFoundation.prototype.hide_ = function() {\r\n                            this.adapter.setAttr(constants_1.strings.ARIA_HIDDEN, 'true');\r\n                        };\r\n                        return MDCTextFieldHelperTextFoundation;\r\n                    }(foundation_1.MDCFoundation);\r\n                    exports.MDCTextFieldHelperTextFoundation = MDCTextFieldHelperTextFoundation;\r\n// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier.\r\n                    exports.default = MDCTextFieldHelperTextFoundation;\r\n\r\n                    /***/\r\n                }),\r\n\r\n                          /***/ \"./packages/mdc-textfield/helper-text/index.ts\":\r\n                /*!*****************************************************!*\\\r\n  !*** ./packages/mdc-textfield/helper-text/index.ts ***!\r\n  \\*****************************************************/\r\n                /*! no static exports found */\r\n                /***/ (function(module, exports, __webpack_require__) {\r\n\r\n                    \"use strict\";\r\n\r\n                    /**\r\n                     * @license\r\n                     * Copyright 2019 Google Inc.\r\n                     *\r\n                     * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n                     * of this software and associated documentation files (the \"Software\"), to deal\r\n                     * in the Software without restriction, including without limitation the rights\r\n                     * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n                     * copies of the Software, and to permit persons to whom the Software is\r\n                     * furnished to do so, subject to the following conditions:\r\n                     *\r\n                     * The above copyright notice and this permission notice shall be included in\r\n                     * all copies or substantial portions of the Software.\r\n                     *\r\n                     * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n                     * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n                     * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n                     * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n                     * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n                     * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n                     * THE SOFTWARE.\r\n                     */\r\n\r\n                    function __export(m) {\r\n                        for (var p in m) {\r\n                            if (!exports.hasOwnProperty(p)) {\r\n                                exports[p] = m[p];\r\n                            }\r\n                        }\r\n                    }\r\n\r\n                    Object.defineProperty(exports, \"__esModule\", {value: true});\r\n                    __export(__webpack_require__(/*! ./component */ \"./packages/mdc-textfield/helper-text/component.ts\"));\r\n                    __export(__webpack_require__(/*! ./foundation */ \"./packages/mdc-textfield/helper-text/foundation.ts\"));\r\n                    var constants_1 = __webpack_require__(/*! ./constants */ \"./packages/mdc-textfield/helper-text/constants.ts\");\r\n                    exports.helperTextCssClasses = constants_1.cssClasses;\r\n                    exports.helperTextStrings = constants_1.strings;\r\n\r\n                    /***/\r\n                }),\r\n\r\n                          /***/ \"./packages/mdc-textfield/icon/component.ts\":\r\n                /*!**************************************************!*\\\r\n  !*** ./packages/mdc-textfield/icon/component.ts ***!\r\n  \\**************************************************/\r\n                /*! no static exports found */\r\n                /***/ (function(module, exports, __webpack_require__) {\r\n\r\n                    \"use strict\";\r\n\r\n                    /**\r\n                     * @license\r\n                     * Copyright 2017 Google Inc.\r\n                     *\r\n                     * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n                     * of this software and associated documentation files (the \"Software\"), to deal\r\n                     * in the Software without restriction, including without limitation the rights\r\n                     * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n                     * copies of the Software, and to permit persons to whom the Software is\r\n                     * furnished to do so, subject to the following conditions:\r\n                     *\r\n                     * The above copyright notice and this permission notice shall be included in\r\n                     * all copies or substantial portions of the Software.\r\n                     *\r\n                     * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n                     * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n                     * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n                     * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n                     * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n                     * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n                     * THE SOFTWARE.\r\n                     */\r\n\r\n                    var __extends = this && this.__extends || function() {\r\n                        var _extendStatics = function extendStatics(d, b) {\r\n                            _extendStatics = Object.setPrototypeOf || {__proto__: []} instanceof Array && function(d, b) {\r\n                                d.__proto__ = b;\r\n                            } || function(d, b) {\r\n                                for (var p in b) {\r\n                                    if (b.hasOwnProperty(p)) {\r\n                                        d[p] = b[p];\r\n                                    }\r\n                                }\r\n                            };\r\n                            return _extendStatics(d, b);\r\n                        };\r\n                        return function(d, b) {\r\n                            _extendStatics(d, b);\r\n\r\n                            function __() {\r\n                                this.constructor = d;\r\n                            }\r\n\r\n                            d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n                        };\r\n                    }();\r\n                    Object.defineProperty(exports, \"__esModule\", {value: true});\r\n                    var component_1 = __webpack_require__(/*! @material/base/component */ \"./packages/mdc-base/component.ts\");\r\n                    var foundation_1 = __webpack_require__(/*! ./foundation */ \"./packages/mdc-textfield/icon/foundation.ts\");\r\n                    var MDCTextFieldIcon = /** @class */function(_super) {\r\n                        __extends(MDCTextFieldIcon, _super);\r\n\r\n                        function MDCTextFieldIcon() {\r\n                            return _super !== null && _super.apply(this, arguments) || this;\r\n                        }\r\n\r\n                        MDCTextFieldIcon.attachTo = function(root) {\r\n                            return new MDCTextFieldIcon(root);\r\n                        };\r\n                        Object.defineProperty(MDCTextFieldIcon.prototype, \"foundationForTextField\", {\r\n                            // Provided for access by MDCTextField component\r\n                            get: function get() {\r\n                                return this.foundation;\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        MDCTextFieldIcon.prototype.getDefaultFoundation = function() {\r\n                            var _this = this;\r\n                            // DO NOT INLINE this variable. For backward compatibility, foundations take a Partial<MDCFooAdapter>.\r\n                            // To ensure we don't accidentally omit any methods, we need a separate, strongly typed adapter variable.\r\n                            // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface.\r\n                            var adapter = {\r\n                                getAttr: function getAttr(attr) {\r\n                                    return _this.root.getAttribute(attr);\r\n                                },\r\n                                setAttr: function setAttr(attr, value) {\r\n                                    return _this.root.setAttribute(attr, value);\r\n                                },\r\n                                removeAttr: function removeAttr(attr) {\r\n                                    return _this.root.removeAttribute(attr);\r\n                                },\r\n                                setContent: function setContent(content) {\r\n                                    _this.root.textContent = content;\r\n                                },\r\n                                registerInteractionHandler: function registerInteractionHandler(evtType, handler) {\r\n                                    return _this.listen(evtType, handler);\r\n                                },\r\n                                deregisterInteractionHandler: function deregisterInteractionHandler(evtType, handler) {\r\n                                    return _this.unlisten(evtType, handler);\r\n                                },\r\n                                notifyIconAction: function notifyIconAction() {\r\n                                    return _this.emit(foundation_1.MDCTextFieldIconFoundation.strings.ICON_EVENT, {} /* evtData */, true /* shouldBubble */);\r\n                                }\r\n                            };\r\n                            // tslint:enable:object-literal-sort-keys\r\n                            return new foundation_1.MDCTextFieldIconFoundation(adapter);\r\n                        };\r\n                        return MDCTextFieldIcon;\r\n                    }(component_1.MDCComponent);\r\n                    exports.MDCTextFieldIcon = MDCTextFieldIcon;\r\n\r\n                    /***/\r\n                }),\r\n\r\n                          /***/ \"./packages/mdc-textfield/icon/constants.ts\":\r\n                /*!**************************************************!*\\\r\n  !*** ./packages/mdc-textfield/icon/constants.ts ***!\r\n  \\**************************************************/\r\n                /*! no static exports found */\r\n                /***/ (function(module, exports, __webpack_require__) {\r\n\r\n                    \"use strict\";\r\n\r\n                    /**\r\n                     * @license\r\n                     * Copyright 2016 Google Inc.\r\n                     *\r\n                     * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n                     * of this software and associated documentation files (the \"Software\"), to deal\r\n                     * in the Software without restriction, including without limitation the rights\r\n                     * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n                     * copies of the Software, and to permit persons to whom the Software is\r\n                     * furnished to do so, subject to the following conditions:\r\n                     *\r\n                     * The above copyright notice and this permission notice shall be included in\r\n                     * all copies or substantial portions of the Software.\r\n                     *\r\n                     * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n                     * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n                     * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n                     * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n                     * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n                     * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n                     * THE SOFTWARE.\r\n                     */\r\n\r\n                    Object.defineProperty(exports, \"__esModule\", {value: true});\r\n                    var strings = {\r\n                        ICON_EVENT: 'MDCTextField:icon',\r\n                        ICON_ROLE: 'button'\r\n                    };\r\n                    exports.strings = strings;\r\n                    var cssClasses = {\r\n                        ROOT: 'mdc-text-field__icon'\r\n                    };\r\n                    exports.cssClasses = cssClasses;\r\n\r\n                    /***/\r\n                }),\r\n\r\n                          /***/ \"./packages/mdc-textfield/icon/foundation.ts\":\r\n                /*!***************************************************!*\\\r\n  !*** ./packages/mdc-textfield/icon/foundation.ts ***!\r\n  \\***************************************************/\r\n                /*! no static exports found */\r\n                /***/ (function(module, exports, __webpack_require__) {\r\n\r\n                    \"use strict\";\r\n\r\n                    /**\r\n                     * @license\r\n                     * Copyright 2017 Google Inc.\r\n                     *\r\n                     * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n                     * of this software and associated documentation files (the \"Software\"), to deal\r\n                     * in the Software without restriction, including without limitation the rights\r\n                     * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n                     * copies of the Software, and to permit persons to whom the Software is\r\n                     * furnished to do so, subject to the following conditions:\r\n                     *\r\n                     * The above copyright notice and this permission notice shall be included in\r\n                     * all copies or substantial portions of the Software.\r\n                     *\r\n                     * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n                     * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n                     * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n                     * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n                     * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n                     * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n                     * THE SOFTWARE.\r\n                     */\r\n\r\n                    var __extends = this && this.__extends || function() {\r\n                        var _extendStatics = function extendStatics(d, b) {\r\n                            _extendStatics = Object.setPrototypeOf || {__proto__: []} instanceof Array && function(d, b) {\r\n                                d.__proto__ = b;\r\n                            } || function(d, b) {\r\n                                for (var p in b) {\r\n                                    if (b.hasOwnProperty(p)) {\r\n                                        d[p] = b[p];\r\n                                    }\r\n                                }\r\n                            };\r\n                            return _extendStatics(d, b);\r\n                        };\r\n                        return function(d, b) {\r\n                            _extendStatics(d, b);\r\n\r\n                            function __() {\r\n                                this.constructor = d;\r\n                            }\r\n\r\n                            d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n                        };\r\n                    }();\r\n                    var __assign = this && this.__assign || function() {\r\n                        __assign = Object.assign || function(t) {\r\n                            for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n                                s = arguments[i];\r\n                                for (var p in s) {\r\n                                    if (Object.prototype.hasOwnProperty.call(s, p)) {\r\n                                        t[p] = s[p];\r\n                                    }\r\n                                }\r\n                            }\r\n                            return t;\r\n                        };\r\n                        return __assign.apply(this, arguments);\r\n                    };\r\n                    Object.defineProperty(exports, \"__esModule\", {value: true});\r\n                    var foundation_1 = __webpack_require__(/*! @material/base/foundation */ \"./packages/mdc-base/foundation.ts\");\r\n                    var constants_1 = __webpack_require__(/*! ./constants */ \"./packages/mdc-textfield/icon/constants.ts\");\r\n                    var INTERACTION_EVENTS = ['click', 'keydown'];\r\n                    var MDCTextFieldIconFoundation = /** @class */function(_super) {\r\n                        __extends(MDCTextFieldIconFoundation, _super);\r\n\r\n                        function MDCTextFieldIconFoundation(adapter) {\r\n                            var _this = _super.call(this, __assign(__assign({}, MDCTextFieldIconFoundation.defaultAdapter), adapter)) || this;\r\n                            _this.savedTabIndex_ = null;\r\n                            _this.interactionHandler_ = function(evt) {\r\n                                return _this.handleInteraction(evt);\r\n                            };\r\n                            return _this;\r\n                        }\r\n\r\n                        Object.defineProperty(MDCTextFieldIconFoundation, \"strings\", {\r\n                            get: function get() {\r\n                                return constants_1.strings;\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCTextFieldIconFoundation, \"cssClasses\", {\r\n                            get: function get() {\r\n                                return constants_1.cssClasses;\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        Object.defineProperty(MDCTextFieldIconFoundation, \"defaultAdapter\", {\r\n                            /**\r\n                             * See {@link MDCTextFieldIconAdapter} for typing information on parameters and return types.\r\n                             */\r\n                            get: function get() {\r\n                                // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface.\r\n                                return {\r\n                                    getAttr: function getAttr() {\r\n                                        return null;\r\n                                    },\r\n                                    setAttr: function setAttr() {\r\n                                        return undefined;\r\n                                    },\r\n                                    removeAttr: function removeAttr() {\r\n                                        return undefined;\r\n                                    },\r\n                                    setContent: function setContent() {\r\n                                        return undefined;\r\n                                    },\r\n                                    registerInteractionHandler: function registerInteractionHandler() {\r\n                                        return undefined;\r\n                                    },\r\n                                    deregisterInteractionHandler: function deregisterInteractionHandler() {\r\n                                        return undefined;\r\n                                    },\r\n                                    notifyIconAction: function notifyIconAction() {\r\n                                        return undefined;\r\n                                    }\r\n                                };\r\n                                // tslint:enable:object-literal-sort-keys\r\n                            },\r\n                            enumerable: true,\r\n                            configurable: true\r\n                        });\r\n                        MDCTextFieldIconFoundation.prototype.init = function() {\r\n                            var _this = this;\r\n                            this.savedTabIndex_ = this.adapter.getAttr('tabindex');\r\n                            INTERACTION_EVENTS.forEach(function(evtType) {\r\n                                _this.adapter.registerInteractionHandler(evtType, _this.interactionHandler_);\r\n                            });\r\n                        };\r\n                        MDCTextFieldIconFoundation.prototype.destroy = function() {\r\n                            var _this = this;\r\n                            INTERACTION_EVENTS.forEach(function(evtType) {\r\n                                _this.adapter.deregisterInteractionHandler(evtType, _this.interactionHandler_);\r\n                            });\r\n                        };\r\n                        MDCTextFieldIconFoundation.prototype.setDisabled = function(disabled) {\r\n                            if (!this.savedTabIndex_) {\r\n                                return;\r\n                            }\r\n                            if (disabled) {\r\n                                this.adapter.setAttr('tabindex', '-1');\r\n                                this.adapter.removeAttr('role');\r\n                            } else {\r\n                                this.adapter.setAttr('tabindex', this.savedTabIndex_);\r\n                                this.adapter.setAttr('role', constants_1.strings.ICON_ROLE);\r\n                            }\r\n                        };\r\n                        MDCTextFieldIconFoundation.prototype.setAriaLabel = function(label) {\r\n                            this.adapter.setAttr('aria-label', label);\r\n                        };\r\n                        MDCTextFieldIconFoundation.prototype.setContent = function(content) {\r\n                            this.adapter.setContent(content);\r\n                        };\r\n                        MDCTextFieldIconFoundation.prototype.handleInteraction = function(evt) {\r\n                            var isEnterKey = evt.key === 'Enter' || evt.keyCode === 13;\r\n                            if (evt.type === 'click' || isEnterKey) {\r\n                                evt.preventDefault(); // stop click from causing host label to focus\r\n                                // input\r\n                                this.adapter.notifyIconAction();\r\n                            }\r\n                        };\r\n                        return MDCTextFieldIconFoundation;\r\n                    }(foundation_1.MDCFoundation);\r\n                    exports.MDCTextFieldIconFoundation = MDCTextFieldIconFoundation;\r\n// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier.\r\n                    exports.default = MDCTextFieldIconFoundation;\r\n\r\n                    /***/\r\n                }),\r\n\r\n                          /***/ \"./packages/mdc-textfield/icon/index.ts\":\r\n                /*!**********************************************!*\\\r\n  !*** ./packages/mdc-textfield/icon/index.ts ***!\r\n  \\**********************************************/\r\n                /*! no static exports found */\r\n                /***/ (function(module, exports, __webpack_require__) {\r\n\r\n                    \"use strict\";\r\n\r\n                    /**\r\n                     * @license\r\n                     * Copyright 2019 Google Inc.\r\n                     *\r\n                     * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n                     * of this software and associated documentation files (the \"Software\"), to deal\r\n                     * in the Software without restriction, including without limitation the rights\r\n                     * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n                     * copies of the Software, and to permit persons to whom the Software is\r\n                     * furnished to do so, subject to the following conditions:\r\n                     *\r\n                     * The above copyright notice and this permission notice shall be included in\r\n                     * all copies or substantial portions of the Software.\r\n                     *\r\n                     * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n                     * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n                     * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n                     * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n                     * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n                     * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n                     * THE SOFTWARE.\r\n                     */\r\n\r\n                    function __export(m) {\r\n                        for (var p in m) {\r\n                            if (!exports.hasOwnProperty(p)) {\r\n                                exports[p] = m[p];\r\n                            }\r\n                        }\r\n                    }\r\n\r\n                    Object.defineProperty(exports, \"__esModule\", {value: true});\r\n                    __export(__webpack_require__(/*! ./component */ \"./packages/mdc-textfield/icon/component.ts\"));\r\n                    __export(__webpack_require__(/*! ./foundation */ \"./packages/mdc-textfield/icon/foundation.ts\"));\r\n                    var constants_1 = __webpack_require__(/*! ./constants */ \"./packages/mdc-textfield/icon/constants.ts\");\r\n                    exports.iconCssClasses = constants_1.cssClasses;\r\n                    exports.iconStrings = constants_1.strings;\r\n\r\n                    /***/\r\n                }),\r\n\r\n                          /***/ \"./packages/mdc-textfield/index.ts\":\r\n                /*!*****************************************!*\\\r\n  !*** ./packages/mdc-textfield/index.ts ***!\r\n  \\*****************************************/\r\n                /*! no static exports found */\r\n                /***/ (function(module, exports, __webpack_require__) {\r\n\r\n                    \"use strict\";\r\n\r\n                    /**\r\n                     * @license\r\n                     * Copyright 2019 Google Inc.\r\n                     *\r\n                     * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n                     * of this software and associated documentation files (the \"Software\"), to deal\r\n                     * in the Software without restriction, including without limitation the rights\r\n                     * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n                     * copies of the Software, and to permit persons to whom the Software is\r\n                     * furnished to do so, subject to the following conditions:\r\n                     *\r\n                     * The above copyright notice and this permission notice shall be included in\r\n                     * all copies or substantial portions of the Software.\r\n                     *\r\n                     * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n                     * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n                     * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n                     * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n                     * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n                     * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n                     * THE SOFTWARE.\r\n                     */\r\n\r\n                    function __export(m) {\r\n                        for (var p in m) {\r\n                            if (!exports.hasOwnProperty(p)) {\r\n                                exports[p] = m[p];\r\n                            }\r\n                        }\r\n                    }\r\n\r\n                    Object.defineProperty(exports, \"__esModule\", {value: true});\r\n                    __export(__webpack_require__(/*! ./component */ \"./packages/mdc-textfield/component.ts\"));\r\n                    __export(__webpack_require__(/*! ./constants */ \"./packages/mdc-textfield/constants.ts\"));\r\n                    __export(__webpack_require__(/*! ./foundation */ \"./packages/mdc-textfield/foundation.ts\"));\r\n                    __export(__webpack_require__(/*! ./character-counter/index */ \"./packages/mdc-textfield/character-counter/index.ts\"));\r\n                    __export(__webpack_require__(/*! ./helper-text/index */ \"./packages/mdc-textfield/helper-text/index.ts\"));\r\n                    __export(__webpack_require__(/*! ./icon/index */ \"./packages/mdc-textfield/icon/index.ts\"));\r\n\r\n                    /***/\r\n                })\r\n\r\n                          /******/\r\n                      });\r\n});\r\n//# sourceMappingURL_not_in_use=mdc.textfield.js.map\n"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": -1,
          "_transferSize": 30337,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:11.649Z",
        "time": 85.83600004203618,
        "timings": {
          "blocked": 4.861000029206276,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0.6519999999999992,
          "wait": 78.1270000552088,
          "receive": 2.1959999576210976,
          "_blocked_queueing": 0.8600000292062759,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_connectionId": "1726423",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "parser",
          "url": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513",
          "lineNumber": 1
        },
        "_priority": "High",
        "_resourceType": "script",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/ekat/WEB-RES/js/inputmask.js_javaviewer_7.26.1.11.js",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": ":authority",
              "value": "ekat.festool.de"
            },
            {
              "name": ":method",
              "value": "GET"
            },
            {
              "name": ":path",
              "value": "/ekat/WEB-RES/js/inputmask.js_javaviewer_7.26.1.11.js"
            },
            {
              "name": ":scheme",
              "value": "https"
            },
            {
              "name": "accept",
              "value": "*/*"
            },
            {
              "name": "accept-encoding",
              "value": "gzip, deflate, br, zstd"
            },
            {
              "name": "accept-language",
              "value": "en-GB,en-US;q=0.9,en;q=0.8"
            },
            {
              "name": "if-modified-since",
              "value": "Thu, 20 Aug 2026 07:47:07 GMT"
            },
            {
              "name": "if-none-match",
              "value": "W/\"231439-1787216819880\""
            },
            {
              "name": "priority",
              "value": "u=1"
            },
            {
              "name": "referer",
              "value": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            },
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "sec-fetch-dest",
              "value": "script"
            },
            {
              "name": "sec-fetch-mode",
              "value": "no-cors"
            },
            {
              "name": "sec-fetch-site",
              "value": "same-origin"
            },
            {
              "name": "user-agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            }
          ],
          "queryString": [],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "cache-control",
              "value": "public"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "content-length",
              "value": "38025"
            },
            {
              "name": "content-type",
              "value": "text/javascript"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 09:09:51 GMT"
            },
            {
              "name": "etag",
              "value": "W/\"231439-1787216991675\""
            },
            {
              "name": "expires",
              "value": "Thu, 20 Aug 2026 09:11:51 GMT"
            },
            {
              "name": "last-modified",
              "value": "Thu, 20 Aug 2026 07:47:07 GMT"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "pragma",
              "value": "cache"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "x-robots-tag",
              "value": "noindex"
            }
          ],
          "cookies": [],
          "content": {
            "size": 231439,
            "mimeType": "text/javascript",
            "text": "/*!\r\n * dist/inputmask\r\n * https://github.com/RobinHerbots/Inputmask\r\n * Copyright (c) 2010 - 2020 Robin Herbots\r\n * Licensed under the MIT license\r\n * Version: 5.0.3\r\n */\r\n!function webpackUniversalModuleDefinition(root, factory) {\r\n    if (\"object\" == typeof exports && \"object\" == typeof module) {\r\n        module.exports = factory();\r\n    } else if (\"function\" == typeof define && define.amd) {\r\n        define([], factory);\r\n    } else {\r\n        var a = factory();\r\n        for (var i in a) {\r\n            (\"object\" == typeof exports ? exports : root)[i] = a[i];\r\n        }\r\n    }\r\n}(window, function() {\r\n    return modules = [function(module) {\r\n        module.exports = JSON.parse('{\"BACKSPACE\":8,\"BACKSPACE_SAFARI\":127,\"DELETE\":46,\"DOWN\":40,\"END\":35,\"ENTER\":13,\"ESCAPE\":27,\"HOME\":36,\"INSERT\":45,\"LEFT\":37,\"PAGE_DOWN\":34,\"PAGE_UP\":33,\"RIGHT\":39,\"SPACE\":32,\"TAB\":9,\"UP\":38,\"X\":88,\"CONTROL\":17}');\r\n    }, function(module, exports, __webpack_require__) {\r\n        \"use strict\";\r\n\r\n        function _typeof(obj) {\r\n            return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function _typeof(obj) {\r\n                return typeof obj;\r\n            } : function _typeof(obj) {\r\n                return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\r\n            }, _typeof(obj);\r\n        }\r\n\r\n        var $ = __webpack_require__(2), window = __webpack_require__(3), document = window.document,\r\n                generateMaskSet = __webpack_require__(4).generateMaskSet,\r\n                analyseMask = __webpack_require__(4).analyseMask, maskScope = __webpack_require__(7);\r\n\r\n        function Inputmask(alias, options, internal) {\r\n            if (!(this instanceof Inputmask)) {\r\n                return new Inputmask(alias, options, internal);\r\n            }\r\n            this.el = void 0, this.events = {}, this.maskset = void 0, this.refreshValue = !1,\r\n            !0 !== internal && ($.isPlainObject(alias) ? options = alias : (options = options || {},\r\n            alias && (options.alias = alias)), this.opts = $.extend(!0, {}, this.defaults, options),\r\n                    this.noMasksCache = options && void 0 !== options.definitions, this.userOptions = options || {},\r\n                    resolveAlias(this.opts.alias, options, this.opts), this.isRTL = this.opts.numericInput);\r\n        }\r\n\r\n        function resolveAlias(aliasStr, options, opts) {\r\n            var aliasDefinition = Inputmask.prototype.aliases[aliasStr];\r\n            return aliasDefinition ? (aliasDefinition.alias && resolveAlias(aliasDefinition.alias, void 0, opts),\r\n                    $.extend(!0, opts, aliasDefinition), $.extend(!0, opts, options), !0) : (null === opts.mask && (opts.mask = aliasStr),\r\n                    !1);\r\n        }\r\n\r\n        function importAttributeOptions(npt, opts, userOptions, dataAttribute) {\r\n            function importOption(option, optionData) {\r\n                optionData = void 0 !== optionData ? optionData : npt.getAttribute(dataAttribute + \"-\" + option),\r\n                null !== optionData && (\"string\" == typeof optionData && (0 === option.indexOf(\"on\") ? optionData = window[optionData] : \"false\" === optionData ? optionData = !1 : \"true\" === optionData && (optionData = !0)),\r\n                        userOptions[option] = optionData);\r\n            }\r\n\r\n            if (!0 === opts.importDataAttributes) {\r\n                var attrOptions = npt.getAttribute(dataAttribute), option, dataoptions, optionData, p;\r\n                if (attrOptions && \"\" !== attrOptions && (attrOptions = attrOptions.replace(/'/g, '\"'),\r\n                        dataoptions = JSON.parse(\"{\" + attrOptions + \"}\")), dataoptions) {\r\n                    for (p in optionData = void 0,\r\n                            dataoptions) {\r\n                        if (\"alias\" === p.toLowerCase()) {\r\n                            optionData = dataoptions[p];\r\n                            break;\r\n                        }\r\n                    }\r\n                }\r\n                for (option in importOption(\"alias\", optionData), userOptions.alias && resolveAlias(userOptions.alias, userOptions, opts),\r\n                        opts) {\r\n                    if (dataoptions) {\r\n                        for (p in optionData = void 0, dataoptions) {\r\n                            if (p.toLowerCase() === option.toLowerCase()) {\r\n                                optionData = dataoptions[p];\r\n                                break;\r\n                            }\r\n                        }\r\n                    }\r\n                    importOption(option, optionData);\r\n                }\r\n            }\r\n            return $.extend(!0, opts, userOptions), \"rtl\" !== npt.dir && !opts.rightAlign || (npt.style.textAlign = \"right\"),\r\n            \"rtl\" !== npt.dir && !opts.numericInput || (npt.dir = \"ltr\", npt.removeAttribute(\"dir\"),\r\n                    opts.isRTL = !0), Object.keys(userOptions).length;\r\n        }\r\n\r\n        Inputmask.prototype = {\r\n            dataAttribute: \"data-inputmask\",\r\n            defaults: {\r\n                _maxTestPos: 500,\r\n                placeholder: \"_\",\r\n                optionalmarker: [\"[\", \"]\"],\r\n                quantifiermarker: [\"{\", \"}\"],\r\n                groupmarker: [\"(\", \")\"],\r\n                alternatormarker: \"|\",\r\n                escapeChar: \"\\\\\",\r\n                mask: null,\r\n                regex: null,\r\n                oncomplete: $.noop,\r\n                onincomplete: $.noop,\r\n                oncleared: $.noop,\r\n                repeat: 0,\r\n                greedy: !1,\r\n                autoUnmask: !1,\r\n                removeMaskOnSubmit: !1,\r\n                clearMaskOnLostFocus: !0,\r\n                insertMode: !0,\r\n                insertModeVisual: !0,\r\n                clearIncomplete: !1,\r\n                alias: null,\r\n                onKeyDown: $.noop,\r\n                onBeforeMask: null,\r\n                onBeforePaste: function onBeforePaste(pastedValue, opts) {\r\n                    return $.isFunction(opts.onBeforeMask) ? opts.onBeforeMask.call(this, pastedValue, opts) : pastedValue;\r\n                },\r\n                onBeforeWrite: null,\r\n                onUnMask: null,\r\n                showMaskOnFocus: !0,\r\n                showMaskOnHover: !0,\r\n                onKeyValidation: $.noop,\r\n                skipOptionalPartCharacter: \" \",\r\n                numericInput: !1,\r\n                rightAlign: !1,\r\n                undoOnEscape: !0,\r\n                radixPoint: \"\",\r\n                _radixDance: !1,\r\n                groupSeparator: \"\",\r\n                keepStatic: null,\r\n                positionCaretOnTab: !0,\r\n                tabThrough: !1,\r\n                supportsInputType: [\"text\", \"tel\", \"url\", \"password\", \"search\"],\r\n                ignorables: [8, 9, 19, 27, 33, 34, 35, 36, 37, 38, 39, 40, 45, 46, 93, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 0, 229],\r\n                isComplete: null,\r\n                preValidation: null,\r\n                postValidation: null,\r\n                staticDefinitionSymbol: void 0,\r\n                jitMasking: !1,\r\n                nullable: !0,\r\n                inputEventOnly: !1,\r\n                noValuePatching: !1,\r\n                positionCaretOnClick: \"lvp\",\r\n                casing: null,\r\n                inputmode: \"text\",\r\n                importDataAttributes: !0,\r\n                shiftPositions: !0\r\n            },\r\n            definitions: {\r\n                9: {\r\n                    validator: \"[0-9\\uff11-\\uff19]\",\r\n                    definitionSymbol: \"*\"\r\n                },\r\n                a: {\r\n                    validator: \"[A-Za-z\\u0410-\\u044f\\u0401\\u0451\\xc0-\\xff\\xb5]\",\r\n                    definitionSymbol: \"*\"\r\n                },\r\n                \"*\": {\r\n                    validator: \"[0-9\\uff11-\\uff19A-Za-z\\u0410-\\u044f\\u0401\\u0451\\xc0-\\xff\\xb5]\"\r\n                }\r\n            },\r\n            aliases: {},\r\n            masksCache: {},\r\n            mask: function mask(elems) {\r\n                var that = this;\r\n                return \"string\" == typeof elems && (elems = document.getElementById(elems) || document.querySelectorAll(elems)),\r\n                        elems = elems.nodeName ? [elems] : elems, $.each(elems, function(ndx, el) {\r\n                    var scopedOpts = $.extend(!0, {}, that.opts);\r\n                    if (importAttributeOptions(el, scopedOpts, $.extend(!0, {}, that.userOptions), that.dataAttribute)) {\r\n                        var maskset = generateMaskSet(scopedOpts, that.noMasksCache);\r\n                        void 0 !== maskset && (void 0 !== el.inputmask && (el.inputmask.opts.autoUnmask = !0,\r\n                                el.inputmask.remove()), el.inputmask = new Inputmask(void 0, void 0, !0), el.inputmask.opts = scopedOpts,\r\n                                el.inputmask.noMasksCache = that.noMasksCache, el.inputmask.userOptions = $.extend(!0, {}, that.userOptions),\r\n                                el.inputmask.isRTL = scopedOpts.isRTL || scopedOpts.numericInput, el.inputmask.el = el,\r\n                                el.inputmask.maskset = maskset, $.data(el, \"_inputmask_opts\", scopedOpts), maskScope.call(el.inputmask, {\r\n                            action: \"mask\"\r\n                        }));\r\n                    }\r\n                }), elems && elems[0] && elems[0].inputmask || this;\r\n            },\r\n            option: function option(options, noremask) {\r\n                return \"string\" == typeof options ? this.opts[options] : \"object\" === _typeof(options) ? ($.extend(this.userOptions, options),\r\n                this.el && !0 !== noremask && this.mask(this.el), this) : void 0;\r\n            },\r\n            unmaskedvalue: function unmaskedvalue(value) {\r\n                return this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache),\r\n                        maskScope.call(this, {\r\n                            action: \"unmaskedvalue\",\r\n                            value: value\r\n                        });\r\n            },\r\n            remove: function remove() {\r\n                return maskScope.call(this, {\r\n                    action: \"remove\"\r\n                });\r\n            },\r\n            getemptymask: function getemptymask() {\r\n                return this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache),\r\n                        maskScope.call(this, {\r\n                            action: \"getemptymask\"\r\n                        });\r\n            },\r\n            hasMaskedValue: function hasMaskedValue() {\r\n                return !this.opts.autoUnmask;\r\n            },\r\n            isComplete: function isComplete() {\r\n                return this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache),\r\n                        maskScope.call(this, {\r\n                            action: \"isComplete\"\r\n                        });\r\n            },\r\n            getmetadata: function getmetadata() {\r\n                return this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache),\r\n                        maskScope.call(this, {\r\n                            action: \"getmetadata\"\r\n                        });\r\n            },\r\n            isValid: function isValid(value) {\r\n                return this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache),\r\n                        maskScope.call(this, {\r\n                            action: \"isValid\",\r\n                            value: value\r\n                        });\r\n            },\r\n            format: function format(value, metadata) {\r\n                return this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache),\r\n                        maskScope.call(this, {\r\n                            action: \"format\",\r\n                            value: value,\r\n                            metadata: metadata\r\n                        });\r\n            },\r\n            setValue: function setValue(value) {\r\n                this.el && $(this.el).trigger(\"setvalue\", [value]);\r\n            },\r\n            analyseMask: analyseMask\r\n        }, Inputmask.extendDefaults = function(options) {\r\n            $.extend(!0, Inputmask.prototype.defaults, options);\r\n        }, Inputmask.extendDefinitions = function(definition) {\r\n            $.extend(!0, Inputmask.prototype.definitions, definition);\r\n        }, Inputmask.extendAliases = function(alias) {\r\n            $.extend(!0, Inputmask.prototype.aliases, alias);\r\n        }, Inputmask.format = function(value, options, metadata) {\r\n            return Inputmask(options).format(value, metadata);\r\n        }, Inputmask.unmask = function(value, options) {\r\n            return Inputmask(options).unmaskedvalue(value);\r\n        }, Inputmask.isValid = function(value, options) {\r\n            return Inputmask(options).isValid(value);\r\n        }, Inputmask.remove = function(elems) {\r\n            \"string\" == typeof elems && (elems = document.getElementById(elems) || document.querySelectorAll(elems)),\r\n                    elems = elems.nodeName ? [elems] : elems, $.each(elems, function(ndx, el) {\r\n                el.inputmask && el.inputmask.remove();\r\n            });\r\n        }, Inputmask.setValue = function(elems, value) {\r\n            \"string\" == typeof elems && (elems = document.getElementById(elems) || document.querySelectorAll(elems)),\r\n                    elems = elems.nodeName ? [elems] : elems, $.each(elems, function(ndx, el) {\r\n                el.inputmask ? el.inputmask.setValue(value) : $(el).trigger(\"setvalue\", [value]);\r\n            });\r\n        };\r\n        var escapeRegexRegex = new RegExp(\"(\\\\\" + [\"/\", \".\", \"*\", \"+\", \"?\", \"|\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", \"\\\\\", \"$\", \"^\"].join(\"|\\\\\") + \")\", \"gim\");\r\n        Inputmask.escapeRegex = function(str) {\r\n            return str.replace(escapeRegexRegex, \"\\\\$1\");\r\n        }, Inputmask.dependencyLib = $, window.Inputmask = Inputmask, module.exports = Inputmask;\r\n    }, function(module, exports, __webpack_require__) {\r\n        \"use strict\";\r\n\r\n        function _typeof(obj) {\r\n            return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function _typeof(obj) {\r\n                return typeof obj;\r\n            } : function _typeof(obj) {\r\n                return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\r\n            }, _typeof(obj);\r\n        }\r\n\r\n        var window = __webpack_require__(3), document = window.document;\r\n\r\n        function indexOf(list, elem) {\r\n            for (var i = 0, len = list.length; i < len; i++) {\r\n                if (list[i] === elem) {\r\n                    return i;\r\n                }\r\n            }\r\n            return -1;\r\n        }\r\n\r\n        function isWindow(obj) {\r\n            return null != obj && obj === obj.window;\r\n        }\r\n\r\n        function isArraylike(obj) {\r\n            var length = \"length\" in obj && obj.length, ltype = _typeof(obj);\r\n            return \"function\" !== ltype && !isWindow(obj) && (!(1 !== obj.nodeType || !length) || (\"array\" === ltype || 0 === length || \"number\" == typeof length && 0 < length && length - 1 in obj));\r\n        }\r\n\r\n        function isValidElement(elem) {\r\n            return elem instanceof Element;\r\n        }\r\n\r\n        function DependencyLib(elem) {\r\n            return elem instanceof DependencyLib ? elem : this instanceof DependencyLib ? void (null != elem && elem !== window && (this[0] = elem.nodeName ? elem : void 0 !== elem[0] && elem[0].nodeName ? elem[0] : document.querySelector(elem),\r\n                                                                                                void 0 !== this[0] && null !== this[0] && (this[0].eventRegistry = this[0].eventRegistry || {}))) : new DependencyLib(elem);\r\n        }\r\n\r\n        DependencyLib.prototype = {\r\n            on: function on(events, handler) {\r\n                function addEvent(ev, namespace) {\r\n                    elem.addEventListener ? elem.addEventListener(ev, handler, !1) : elem.attachEvent && elem.attachEvent(\"on\" + ev, handler),\r\n                            eventRegistry[ev] = eventRegistry[ev] || {}, eventRegistry[ev][namespace] = eventRegistry[ev][namespace] || [],\r\n                            eventRegistry[ev][namespace].push(handler);\r\n                }\r\n\r\n                if (isValidElement(this[0])) {\r\n                    for (var eventRegistry = this[0].eventRegistry, elem = this[0], _events = events.split(\" \"), endx = 0; endx < _events.length; endx++) {\r\n                        var nsEvent = _events[endx].split(\".\"), ev = nsEvent[0], namespace = nsEvent[1] || \"global\";\r\n                        addEvent(ev, namespace);\r\n                    }\r\n                }\r\n                return this;\r\n            },\r\n            off: function off(events, handler) {\r\n                var eventRegistry, elem;\r\n\r\n                function removeEvent(ev, namespace, handler) {\r\n                    if (ev in eventRegistry == !0) {\r\n                        if (elem.removeEventListener ? elem.removeEventListener(ev, handler, !1) : elem.detachEvent && elem.detachEvent(\"on\" + ev, handler),\r\n                        \"global\" === namespace) {\r\n                            for (var nmsp in eventRegistry[ev]) {\r\n                                eventRegistry[ev][nmsp].splice(eventRegistry[ev][nmsp].indexOf(handler), 1);\r\n                            }\r\n                        } else {\r\n                            eventRegistry[ev][namespace].splice(eventRegistry[ev][namespace].indexOf(handler), 1);\r\n                        }\r\n                    }\r\n                }\r\n\r\n                function resolveNamespace(ev, namespace) {\r\n                    var evts = [], hndx, hndL;\r\n                    if (0 < ev.length) {\r\n                        if (void 0 === handler) {\r\n                            for (hndx = 0, hndL = eventRegistry[ev][namespace].length; hndx < hndL; hndx++) {\r\n                                evts.push({\r\n                                              ev: ev,\r\n                                              namespace: namespace && 0 < namespace.length ? namespace : \"global\",\r\n                                              handler: eventRegistry[ev][namespace][hndx]\r\n                                          });\r\n                            }\r\n                        } else {\r\n                            evts.push({\r\n                                          ev: ev,\r\n                                          namespace: namespace && 0 < namespace.length ? namespace : \"global\",\r\n                                          handler: handler\r\n                                      });\r\n                        }\r\n                    } else if (0 < namespace.length) {\r\n                        for (var evNdx in eventRegistry) {\r\n                            for (var nmsp in eventRegistry[evNdx]) {\r\n                                if (nmsp === namespace) {\r\n                                    if (void 0 === handler) {\r\n                                        for (hndx = 0,\r\n                                                     hndL = eventRegistry[evNdx][nmsp].length; hndx < hndL; hndx++) {\r\n                                            evts.push({\r\n                                                          ev: evNdx,\r\n                                                          namespace: nmsp,\r\n                                                          handler: eventRegistry[evNdx][nmsp][hndx]\r\n                                                      });\r\n                                        }\r\n                                    } else {\r\n                                        evts.push({\r\n                                                      ev: evNdx,\r\n                                                      namespace: nmsp,\r\n                                                      handler: handler\r\n                                                  });\r\n                                    }\r\n                                }\r\n                            }\r\n                        }\r\n                    }\r\n                    return evts;\r\n                }\r\n\r\n                if (isValidElement(this[0])) {\r\n                    eventRegistry = this[0].eventRegistry, elem = this[0];\r\n                    for (var _events = events.split(\" \"), endx = 0; endx < _events.length; endx++) {\r\n                        for (var nsEvent = _events[endx].split(\".\"), offEvents = resolveNamespace(nsEvent[0], nsEvent[1]), i = 0, offEventsL = offEvents.length; i < offEventsL; i++) {\r\n                            removeEvent(offEvents[i].ev, offEvents[i].namespace, offEvents[i].handler);\r\n                        }\r\n                    }\r\n                }\r\n                return this;\r\n            },\r\n            trigger: function trigger(events, argument_1) {\r\n                if (isValidElement(this[0])) {\r\n                    for (var eventRegistry = this[0].eventRegistry, elem = this[0], _events = \"string\" == typeof events ? events.split(\" \") : [events.type], endx = 0; endx < _events.length; endx++) {\r\n                        var nsEvent = _events[endx].split(\".\"), ev = nsEvent[0], namespace = nsEvent[1] || \"global\";\r\n                        if (void 0 !== document && \"global\" === namespace) {\r\n                            var evnt, i, params = {\r\n                                bubbles: !0,\r\n                                cancelable: !0,\r\n                                detail: argument_1\r\n                            };\r\n                            if (document.createEvent) {\r\n                                try {\r\n                                    evnt = new CustomEvent(ev, params);\r\n                                } catch (e) {\r\n                                    evnt = document.createEvent(\"CustomEvent\"), evnt.initCustomEvent(ev, params.bubbles, params.cancelable, params.detail);\r\n                                }\r\n                                events.type && DependencyLib.extend(evnt, events), elem.dispatchEvent(evnt);\r\n                            } else {\r\n                                evnt = document.createEventObject(), evnt.eventType = ev, evnt.detail = argument_1,\r\n                                events.type && DependencyLib.extend(evnt, events), elem.fireEvent(\"on\" + evnt.eventType, evnt);\r\n                            }\r\n                        } else if (void 0 !== eventRegistry[ev]) {\r\n                            if (events = events.type ? events : DependencyLib.Event(events),\r\n                                    events.detail = arguments.slice(1), \"global\" === namespace) {\r\n                                for (var nmsp in eventRegistry[ev]) {\r\n                                    for (i = 0; i < eventRegistry[ev][nmsp].length; i++) {\r\n                                        eventRegistry[ev][nmsp][i].apply(elem, arguments);\r\n                                    }\r\n                                }\r\n                            } else {\r\n                                for (i = 0; i < eventRegistry[ev][namespace].length; i++) {\r\n                                    eventRegistry[ev][namespace][i].apply(elem, arguments);\r\n                                }\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n                return this;\r\n            }\r\n        }, DependencyLib.isFunction = function(obj) {\r\n            return \"function\" == typeof obj;\r\n        }, DependencyLib.noop = function() {\r\n        }, DependencyLib.isArray = Array.isArray, DependencyLib.inArray = function(elem, arr, i) {\r\n            return null == arr ? -1 : indexOf(arr, elem, i);\r\n        }, DependencyLib.valHooks = void 0, DependencyLib.isPlainObject = function(obj) {\r\n            return \"object\" === _typeof(obj) && !obj.nodeType && !isWindow(obj) && !(obj.constructor && !Object.hasOwnProperty.call(obj.constructor.prototype, \"isPrototypeOf\"));\r\n        }, DependencyLib.extend = function() {\r\n            var options, name, src, copy, copyIsArray, clone, target = arguments[0] || {}, i = 1,\r\n                    length = arguments.length, deep = !1;\r\n            for (\"boolean\" == typeof target && (deep = target, target = arguments[i] || {},\r\n                    i++), \"object\" === _typeof(target) || DependencyLib.isFunction(target) || (target = {}),\r\n                 i === length && (target = this, i--); i < length; i++) {\r\n                if (null != (options = arguments[i])) {\r\n                    for (name in options) {\r\n                        src = target[name],\r\n                                copy = options[name], target !== copy && (deep && copy && (DependencyLib.isPlainObject(copy) || (copyIsArray = DependencyLib.isArray(copy))) ? (clone = copyIsArray ? (copyIsArray = !1,\r\n                                                      src && DependencyLib.isArray(src) ? src : []) : src && DependencyLib.isPlainObject(src) ? src : {},\r\n                                target[name] = DependencyLib.extend(deep, clone, copy)) : void 0 !== copy && (target[name] = copy));\r\n                    }\r\n                }\r\n            }\r\n            return target;\r\n        }, DependencyLib.each = function(obj, callback) {\r\n            var value, i = 0;\r\n            if (isArraylike(obj)) {\r\n                for (var length = obj.length; i < length && (value = callback.call(obj[i], i, obj[i]),\r\n                !1 !== value); i++) {\r\n                    ;\r\n                }\r\n            } else {\r\n                for (i in obj) {\r\n                    if (value = callback.call(obj[i], i, obj[i]),\r\n                    !1 === value) {\r\n                        break;\r\n                    }\r\n                }\r\n            }\r\n            return obj;\r\n        }, DependencyLib.data = function(owner, key, value) {\r\n            if (void 0 === value) {\r\n                return owner.__data ? owner.__data[key] : null;\r\n            }\r\n            owner.__data = owner.__data || {}, owner.__data[key] = value;\r\n        }, \"function\" == typeof window.CustomEvent ? DependencyLib.Event = window.CustomEvent : (DependencyLib.Event = function(event, params) {\r\n            params = params || {\r\n                bubbles: !1,\r\n                cancelable: !1,\r\n                detail: void 0\r\n            };\r\n            var evt = document.createEvent(\"CustomEvent\");\r\n            return evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail),\r\n                    evt;\r\n        }, DependencyLib.Event.prototype = window.Event.prototype), module.exports = DependencyLib;\r\n    }, function(module, exports, __webpack_require__) {\r\n        \"use strict\";\r\n        var __WEBPACK_AMD_DEFINE_RESULT__;\r\n\r\n        function _typeof(obj) {\r\n            return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function _typeof(obj) {\r\n                return typeof obj;\r\n            } : function _typeof(obj) {\r\n                return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\r\n            }, _typeof(obj);\r\n        }\r\n\r\n        __WEBPACK_AMD_DEFINE_RESULT__ = function() {\r\n            return \"undefined\" != typeof window ? window : new (eval(\"require('jsdom').JSDOM\"))(\"\").window;\r\n        }.call(exports, __webpack_require__, exports, module), void 0 === __WEBPACK_AMD_DEFINE_RESULT__ || (module.exports = __WEBPACK_AMD_DEFINE_RESULT__);\r\n    }, function(module, exports, __webpack_require__) {\r\n        \"use strict\";\r\n        var $ = __webpack_require__(2);\r\n\r\n        function generateMaskSet(opts, nocache) {\r\n            var ms;\r\n\r\n            function generateMask(mask, metadata, opts) {\r\n                var regexMask = !1, masksetDefinition, maskdefKey;\r\n                if (null !== mask && \"\" !== mask || (regexMask = null !== opts.regex, mask = regexMask ? (mask = opts.regex,\r\n                        mask.replace(/^(\\^)(.*)(\\$)$/, \"$2\")) : (regexMask = !0, \".*\")), 1 === mask.length && !1 === opts.greedy && 0 !== opts.repeat && (opts.placeholder = \"\"),\r\n                0 < opts.repeat || \"*\" === opts.repeat || \"+\" === opts.repeat) {\r\n                    var repeatStart = \"*\" === opts.repeat ? 0 : \"+\" === opts.repeat ? 1 : opts.repeat;\r\n                    mask = opts.groupmarker[0] + mask + opts.groupmarker[1] + opts.quantifiermarker[0] + repeatStart + \",\" + opts.repeat + opts.quantifiermarker[1];\r\n                }\r\n                return maskdefKey = regexMask ? \"regex_\" + opts.regex : opts.numericInput ? mask.split(\"\").reverse().join(\"\") : mask,\r\n                !1 !== opts.keepStatic && (maskdefKey = \"ks_\" + maskdefKey), void 0 === Inputmask.prototype.masksCache[maskdefKey] || !0 === nocache ? (masksetDefinition = {\r\n                    mask: mask,\r\n                    maskToken: Inputmask.prototype.analyseMask(mask, regexMask, opts),\r\n                    validPositions: {},\r\n                    _buffer: void 0,\r\n                    buffer: void 0,\r\n                    tests: {},\r\n                    excludes: {},\r\n                    metadata: metadata,\r\n                    maskLength: void 0,\r\n                    jitOffset: {}\r\n                }, !0 !== nocache && (Inputmask.prototype.masksCache[maskdefKey] = masksetDefinition,\r\n                        masksetDefinition = $.extend(!0, {}, Inputmask.prototype.masksCache[maskdefKey]))) : masksetDefinition = $.extend(!0, {}, Inputmask.prototype.masksCache[maskdefKey]),\r\n                        masksetDefinition;\r\n            }\r\n\r\n            if ($.isFunction(opts.mask) && (opts.mask = opts.mask(opts)), $.isArray(opts.mask)) {\r\n                if (1 < opts.mask.length) {\r\n                    null === opts.keepStatic && (opts.keepStatic = !0);\r\n                    var altMask = opts.groupmarker[0];\r\n                    return $.each(opts.isRTL ? opts.mask.reverse() : opts.mask, function(ndx, msk) {\r\n                        1 < altMask.length && (altMask += opts.groupmarker[1] + opts.alternatormarker + opts.groupmarker[0]),\r\n                                void 0 === msk.mask || $.isFunction(msk.mask) ? altMask += msk : altMask += msk.mask;\r\n                    }), altMask += opts.groupmarker[1], generateMask(altMask, opts.mask, opts);\r\n                }\r\n                opts.mask = opts.mask.pop();\r\n            }\r\n            return null === opts.keepStatic && (opts.keepStatic = !1), ms = opts.mask && void 0 !== opts.mask.mask && !$.isFunction(opts.mask.mask) ? generateMask(opts.mask.mask, opts.mask, opts) : generateMask(opts.mask, opts.mask, opts),\r\n                    ms;\r\n        }\r\n\r\n        function analyseMask(mask, regexMask, opts) {\r\n            var tokenizer = /(?:[?*+]|\\{[0-9+*]+(?:,[0-9+*]*)?(?:\\|[0-9+*]*)?\\})|[^.?*+^${[]()|\\\\]+|./g,\r\n                    regexTokenizer = /\\[\\^?]?(?:[^\\\\\\]]+|\\\\[\\S\\s]?)*]?|\\\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9][0-9]*|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|c[A-Za-z]|[\\S\\s]?)|\\((?:\\?[:=!]?)?|(?:[?*+]|\\{[0-9]+(?:,[0-9]*)?\\})\\??|[^.?*+^${[()|\\\\]+|./g,\r\n                    escaped = !1, currentToken = new MaskToken(), match, m, openenings = [], maskTokens = [],\r\n                    openingToken, currentOpeningToken, alternator, lastMatch, closeRegexGroup = !1;\r\n\r\n            function MaskToken(isGroup, isOptional, isQuantifier, isAlternator) {\r\n                this.matches = [], this.openGroup = isGroup || !1, this.alternatorGroup = !1, this.isGroup = isGroup || !1,\r\n                        this.isOptional = isOptional || !1, this.isQuantifier = isQuantifier || !1, this.isAlternator = isAlternator || !1,\r\n                        this.quantifier = {\r\n                            min: 1,\r\n                            max: 1\r\n                        };\r\n            }\r\n\r\n            function insertTestDefinition(mtoken, element, position) {\r\n                position = void 0 !== position ? position : mtoken.matches.length;\r\n                var prevMatch = mtoken.matches[position - 1];\r\n                if (regexMask) {\r\n                    0 === element.indexOf(\"[\") || escaped && /\\\\d|\\\\s|\\\\w]/i.test(element) || \".\" === element ? mtoken.matches.splice(position++, 0, {\r\n                        fn: new RegExp(element, opts.casing ? \"i\" : \"\"),\r\n                        static: !1,\r\n                        optionality: !1,\r\n                        newBlockMarker: void 0 === prevMatch ? \"master\" : prevMatch.def !== element,\r\n                        casing: null,\r\n                        def: element,\r\n                        placeholder: void 0,\r\n                        nativeDef: element\r\n                    }) : (escaped && (element = element[element.length - 1]), $.each(element.split(\"\"), function(ndx, lmnt) {\r\n                        prevMatch = mtoken.matches[position - 1], mtoken.matches.splice(position++, 0, {\r\n                            fn: /[a-z]/i.test(opts.staticDefinitionSymbol || lmnt) ? new RegExp(\"[\" + (opts.staticDefinitionSymbol || lmnt) + \"]\", opts.casing ? \"i\" : \"\") : null,\r\n                            static: !0,\r\n                            optionality: !1,\r\n                            newBlockMarker: void 0 === prevMatch ? \"master\" : prevMatch.def !== lmnt && !0 !== prevMatch.static,\r\n                            casing: null,\r\n                            def: opts.staticDefinitionSymbol || lmnt,\r\n                            placeholder: void 0 !== opts.staticDefinitionSymbol ? lmnt : void 0,\r\n                            nativeDef: (escaped ? \"'\" : \"\") + lmnt\r\n                        });\r\n                    })), escaped = !1;\r\n                } else {\r\n                    var maskdef = (opts.definitions ? opts.definitions[element] : void 0) || Inputmask.prototype.definitions[element];\r\n                    maskdef && !escaped ? mtoken.matches.splice(position++, 0, {\r\n                        fn: maskdef.validator ? \"string\" == typeof maskdef.validator ? new RegExp(maskdef.validator, opts.casing ? \"i\" : \"\") : new function() {\r\n                            this.test = maskdef.validator;\r\n                        }() : new RegExp(\".\"),\r\n                        static: maskdef.static || !1,\r\n                        optionality: !1,\r\n                        newBlockMarker: void 0 === prevMatch ? \"master\" : prevMatch.def !== (maskdef.definitionSymbol || element),\r\n                        casing: maskdef.casing,\r\n                        def: maskdef.definitionSymbol || element,\r\n                        placeholder: maskdef.placeholder,\r\n                        nativeDef: element,\r\n                        generated: maskdef.generated\r\n                    }) : (mtoken.matches.splice(position++, 0, {\r\n                        fn: /[a-z]/i.test(opts.staticDefinitionSymbol || element) ? new RegExp(\"[\" + (opts.staticDefinitionSymbol || element) + \"]\", opts.casing ? \"i\" : \"\") : null,\r\n                        static: !0,\r\n                        optionality: !1,\r\n                        newBlockMarker: void 0 === prevMatch ? \"master\" : prevMatch.def !== element && !0 !== prevMatch.static,\r\n                        casing: null,\r\n                        def: opts.staticDefinitionSymbol || element,\r\n                        placeholder: void 0 !== opts.staticDefinitionSymbol ? element : void 0,\r\n                        nativeDef: (escaped ? \"'\" : \"\") + element\r\n                    }), escaped = !1);\r\n                }\r\n            }\r\n\r\n            function verifyGroupMarker(maskToken) {\r\n                maskToken && maskToken.matches && $.each(maskToken.matches, function(ndx, token) {\r\n                    var nextToken = maskToken.matches[ndx + 1];\r\n                    (void 0 === nextToken || void 0 === nextToken.matches || !1 === nextToken.isQuantifier) && token && token.isGroup && (token.isGroup = !1,\r\n                    regexMask || (insertTestDefinition(token, opts.groupmarker[0], 0), !0 !== token.openGroup && insertTestDefinition(token, opts.groupmarker[1]))),\r\n                            verifyGroupMarker(token);\r\n                });\r\n            }\r\n\r\n            function defaultCase() {\r\n                if (0 < openenings.length) {\r\n                    if (currentOpeningToken = openenings[openenings.length - 1], insertTestDefinition(currentOpeningToken, m),\r\n                            currentOpeningToken.isAlternator) {\r\n                        alternator = openenings.pop();\r\n                        for (var mndx = 0; mndx < alternator.matches.length; mndx++) {\r\n                            alternator.matches[mndx].isGroup && (alternator.matches[mndx].isGroup = !1);\r\n                        }\r\n                        0 < openenings.length ? (currentOpeningToken = openenings[openenings.length - 1],\r\n                                currentOpeningToken.matches.push(alternator)) : currentToken.matches.push(alternator);\r\n                    }\r\n                } else {\r\n                    insertTestDefinition(currentToken, m);\r\n                }\r\n            }\r\n\r\n            function reverseTokens(maskToken) {\r\n                function reverseStatic(st) {\r\n                    return st === opts.optionalmarker[0] ? st = opts.optionalmarker[1] : st === opts.optionalmarker[1] ? st = opts.optionalmarker[0] : st === opts.groupmarker[0] ? st = opts.groupmarker[1] : st === opts.groupmarker[1] && (st = opts.groupmarker[0]),\r\n                            st;\r\n                }\r\n\r\n                for (var match in maskToken.matches = maskToken.matches.reverse(), maskToken.matches) {\r\n                    if (Object.prototype.hasOwnProperty.call(maskToken.matches, match)) {\r\n                        var intMatch = parseInt(match);\r\n                        if (maskToken.matches[match].isQuantifier && maskToken.matches[intMatch + 1] && maskToken.matches[intMatch + 1].isGroup) {\r\n                            var qt = maskToken.matches[match];\r\n                            maskToken.matches.splice(match, 1), maskToken.matches.splice(intMatch + 1, 0, qt);\r\n                        }\r\n                        void 0 !== maskToken.matches[match].matches ? maskToken.matches[match] = reverseTokens(maskToken.matches[match]) : maskToken.matches[match] = reverseStatic(maskToken.matches[match]);\r\n                    }\r\n                }\r\n                return maskToken;\r\n            }\r\n\r\n            function groupify(matches) {\r\n                var groupToken = new MaskToken(!0);\r\n                return groupToken.openGroup = !1, groupToken.matches = matches, groupToken;\r\n            }\r\n\r\n            function closeGroup() {\r\n                if (openingToken = openenings.pop(), openingToken.openGroup = !1, void 0 !== openingToken) {\r\n                    if (0 < openenings.length) {\r\n                        if (currentOpeningToken = openenings[openenings.length - 1], currentOpeningToken.matches.push(openingToken),\r\n                                currentOpeningToken.isAlternator) {\r\n                            alternator = openenings.pop();\r\n                            for (var mndx = 0; mndx < alternator.matches.length; mndx++) {\r\n                                alternator.matches[mndx].isGroup = !1,\r\n                                        alternator.matches[mndx].alternatorGroup = !1;\r\n                            }\r\n                            0 < openenings.length ? (currentOpeningToken = openenings[openenings.length - 1],\r\n                                    currentOpeningToken.matches.push(alternator)) : currentToken.matches.push(alternator);\r\n                        }\r\n                    } else {\r\n                        currentToken.matches.push(openingToken);\r\n                    }\r\n                } else {\r\n                    defaultCase();\r\n                }\r\n            }\r\n\r\n            function groupQuantifier(matches) {\r\n                var lastMatch = matches.pop();\r\n                return lastMatch.isQuantifier && (lastMatch = groupify([matches.pop(), lastMatch])),\r\n                        lastMatch;\r\n            }\r\n\r\n            for (regexMask && (opts.optionalmarker[0] = void 0, opts.optionalmarker[1] = void 0); match = regexMask ? regexTokenizer.exec(mask) : tokenizer.exec(mask);) {\r\n                if (m = match[0], regexMask) {\r\n                    switch (m.charAt(0)) {\r\n                        case \"?\":\r\n                            m = \"{0,1}\";\r\n                            break;\r\n\r\n                        case \"+\":\r\n                        case \"*\":\r\n                            m = \"{\" + m + \"}\";\r\n                            break;\r\n\r\n                        case \"|\":\r\n                            if (0 === openenings.length) {\r\n                                var altRegexGroup = groupify(currentToken.matches);\r\n                                altRegexGroup.openGroup = !0, openenings.push(altRegexGroup), currentToken.matches = [],\r\n                                        closeRegexGroup = !0;\r\n                            }\r\n                            break;\r\n                    }\r\n                }\r\n                if (escaped) {\r\n                    defaultCase();\r\n                } else {\r\n                    switch (m.charAt(0)) {\r\n                        case \"(?=\":\r\n                            break;\r\n\r\n                        case \"(?!\":\r\n                            break;\r\n\r\n                        case \"(?<=\":\r\n                            break;\r\n\r\n                        case \"(?<!\":\r\n                            break;\r\n\r\n                        case opts.escapeChar:\r\n                            escaped = !0, regexMask && defaultCase();\r\n                            break;\r\n\r\n                        case opts.optionalmarker[1]:\r\n                        case opts.groupmarker[1]:\r\n                            closeGroup();\r\n                            break;\r\n\r\n                        case opts.optionalmarker[0]:\r\n                            openenings.push(new MaskToken(!1, !0));\r\n                            break;\r\n\r\n                        case opts.groupmarker[0]:\r\n                            openenings.push(new MaskToken(!0));\r\n                            break;\r\n\r\n                        case opts.quantifiermarker[0]:\r\n                            var quantifier = new MaskToken(!1, !1, !0);\r\n                            m = m.replace(/[{}]/g, \"\");\r\n                            var mqj = m.split(\"|\"), mq = mqj[0].split(\",\"),\r\n                                    mq0 = isNaN(mq[0]) ? mq[0] : parseInt(mq[0]),\r\n                                    mq1 = 1 === mq.length ? mq0 : isNaN(mq[1]) ? mq[1] : parseInt(mq[1]);\r\n                            \"*\" !== mq0 && \"+\" !== mq0 || (mq0 = \"*\" === mq1 ? 0 : 1), quantifier.quantifier = {\r\n                                min: mq0,\r\n                                max: mq1,\r\n                                jit: mqj[1]\r\n                            };\r\n                            var matches = 0 < openenings.length ? openenings[openenings.length - 1].matches : currentToken.matches;\r\n                            if (match = matches.pop(), match.isAlternator) {\r\n                                matches.push(match), matches = match.matches;\r\n                                var groupToken = new MaskToken(!0), tmpMatch = matches.pop();\r\n                                matches.push(groupToken), matches = groupToken.matches, match = tmpMatch;\r\n                            }\r\n                            match.isGroup || (match = groupify([match])), matches.push(match), matches.push(quantifier);\r\n                            break;\r\n\r\n                        case opts.alternatormarker:\r\n                            if (0 < openenings.length) {\r\n                                currentOpeningToken = openenings[openenings.length - 1];\r\n                                var subToken = currentOpeningToken.matches[currentOpeningToken.matches.length - 1];\r\n                                lastMatch = currentOpeningToken.openGroup && (void 0 === subToken.matches || !1 === subToken.isGroup && !1 === subToken.isAlternator) ? openenings.pop() : groupQuantifier(currentOpeningToken.matches);\r\n                            } else {\r\n                                lastMatch = groupQuantifier(currentToken.matches);\r\n                            }\r\n                            if (lastMatch.isAlternator) {\r\n                                openenings.push(lastMatch);\r\n                            } else if (lastMatch.alternatorGroup ? (alternator = openenings.pop(),\r\n                                    lastMatch.alternatorGroup = !1) : alternator = new MaskToken(!1, !1, !1, !0), alternator.matches.push(lastMatch),\r\n                                    openenings.push(alternator), lastMatch.openGroup) {\r\n                                lastMatch.openGroup = !1;\r\n                                var alternatorGroup = new MaskToken(!0);\r\n                                alternatorGroup.alternatorGroup = !0, openenings.push(alternatorGroup);\r\n                            }\r\n                            break;\r\n\r\n                        default:\r\n                            defaultCase();\r\n                    }\r\n                }\r\n            }\r\n            for (closeRegexGroup && closeGroup(); 0 < openenings.length;) {\r\n                openingToken = openenings.pop(),\r\n                        currentToken.matches.push(openingToken);\r\n            }\r\n            return 0 < currentToken.matches.length && (verifyGroupMarker(currentToken), maskTokens.push(currentToken)),\r\n            (opts.numericInput || opts.isRTL) && reverseTokens(maskTokens[0]), maskTokens;\r\n        }\r\n\r\n        module.exports = {\r\n            generateMaskSet: generateMaskSet,\r\n            analyseMask: analyseMask\r\n        };\r\n    }, function(module, exports, __webpack_require__) {\r\n        \"use strict\";\r\n        __webpack_require__(6), __webpack_require__(8), __webpack_require__(9), __webpack_require__(10),\r\n                module.exports = __webpack_require__(1);\r\n    }, function(module, exports, __webpack_require__) {\r\n        \"use strict\";\r\n        var Inputmask = __webpack_require__(1);\r\n        Inputmask.extendDefinitions({\r\n                                        A: {\r\n                                            validator: \"[A-Za-z\\u0410-\\u044f\\u0401\\u0451\\xc0-\\xff\\xb5]\",\r\n                                            casing: \"upper\"\r\n                                        },\r\n                                        \"&\": {\r\n                                            validator: \"[0-9A-Za-z\\u0410-\\u044f\\u0401\\u0451\\xc0-\\xff\\xb5]\",\r\n                                            casing: \"upper\"\r\n                                        },\r\n                                        \"#\": {\r\n                                            validator: \"[0-9A-Fa-f]\",\r\n                                            casing: \"upper\"\r\n                                        }\r\n                                    });\r\n        var ipValidatorRegex = new RegExp(\"25[0-5]|2[0-4][0-9]|[01][0-9][0-9]\");\r\n\r\n        function ipValidator(chrs, maskset, pos, strict, opts) {\r\n            return chrs = -1 < pos - 1 && \".\" !== maskset.buffer[pos - 1] ? (chrs = maskset.buffer[pos - 1] + chrs,\r\n                    -1 < pos - 2 && \".\" !== maskset.buffer[pos - 2] ? maskset.buffer[pos - 2] + chrs : \"0\" + chrs) : \"00\" + chrs,\r\n                    ipValidatorRegex.test(chrs);\r\n        }\r\n\r\n        Inputmask.extendAliases({\r\n                                    cssunit: {\r\n                                        regex: \"[+-]?[0-9]+\\\\.?([0-9]+)?(px|em|rem|ex|%|in|cm|mm|pt|pc)\"\r\n                                    },\r\n                                    url: {\r\n                                        regex: \"(https?|ftp)//.*\",\r\n                                        autoUnmask: !1\r\n                                    },\r\n                                    ip: {\r\n                                        mask: \"i[i[i]].j[j[j]].k[k[k]].l[l[l]]\",\r\n                                        definitions: {\r\n                                            i: {\r\n                                                validator: ipValidator\r\n                                            },\r\n                                            j: {\r\n                                                validator: ipValidator\r\n                                            },\r\n                                            k: {\r\n                                                validator: ipValidator\r\n                                            },\r\n                                            l: {\r\n                                                validator: ipValidator\r\n                                            }\r\n                                        },\r\n                                        onUnMask: function onUnMask(maskedValue, unmaskedValue, opts) {\r\n                                            return maskedValue;\r\n                                        },\r\n                                        inputmode: \"numeric\"\r\n                                    },\r\n                                    email: {\r\n                                        mask: \"*{1,64}[.*{1,64}][.*{1,64}][.*{1,63}]@-{1,63}.-{1,63}[.-{1,63}][.-{1,63}]\",\r\n                                        greedy: !1,\r\n                                        casing: \"lower\",\r\n                                        onBeforePaste: function onBeforePaste(pastedValue, opts) {\r\n                                            return pastedValue = pastedValue.toLowerCase(), pastedValue.replace(\"mailto:\", \"\");\r\n                                        },\r\n                                        definitions: {\r\n                                            \"*\": {\r\n                                                validator: \"[0-9\\uff11-\\uff19A-Za-z\\u0410-\\u044f\\u0401\\u0451\\xc0-\\xff\\xb5!#$%&'*+/=?^_`{|}~-]\"\r\n                                            },\r\n                                            \"-\": {\r\n                                                validator: \"[0-9A-Za-z-]\"\r\n                                            }\r\n                                        },\r\n                                        onUnMask: function onUnMask(maskedValue, unmaskedValue, opts) {\r\n                                            return maskedValue;\r\n                                        },\r\n                                        inputmode: \"email\"\r\n                                    },\r\n                                    mac: {\r\n                                        mask: \"##:##:##:##:##:##\"\r\n                                    },\r\n                                    vin: {\r\n                                        mask: \"V{13}9{4}\",\r\n                                        definitions: {\r\n                                            V: {\r\n                                                validator: \"[A-HJ-NPR-Za-hj-npr-z\\\\d]\",\r\n                                                casing: \"upper\"\r\n                                            }\r\n                                        },\r\n                                        clearIncomplete: !0,\r\n                                        autoUnmask: !0\r\n                                    },\r\n                                    ssn: {\r\n                                        mask: \"999-99-9999\",\r\n                                        postValidation: function postValidation(buffer, pos, c, currentResult, opts, maskset, strict) {\r\n                                            return /^(?!219-09-9999|078-05-1120)(?!666|000|9.{2}).{3}-(?!00).{2}-(?!0{4}).{4}$/.test(buffer.join(\"\"));\r\n                                        }\r\n                                    }\r\n                                }), module.exports = Inputmask;\r\n    }, function(module, exports, __webpack_require__) {\r\n        \"use strict\";\r\n\r\n        function _typeof(obj) {\r\n            return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function _typeof(obj) {\r\n                return typeof obj;\r\n            } : function _typeof(obj) {\r\n                return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\r\n            }, _typeof(obj);\r\n        }\r\n\r\n        var $ = __webpack_require__(2), window = __webpack_require__(3), document = window.document,\r\n                ua = window.navigator && window.navigator.userAgent || \"\",\r\n                ie = 0 < ua.indexOf(\"MSIE \") || 0 < ua.indexOf(\"Trident/\"), mobile = \"ontouchstart\" in window,\r\n                iemobile = /iemobile/i.test(ua), iphone = /iphone/i.test(ua) && !iemobile,\r\n                keyCode = __webpack_require__(0);\r\n        module.exports = function maskScope(actionObj, maskset, opts) {\r\n            maskset = maskset || this.maskset, opts = opts || this.opts;\r\n            var inputmask = this, el = this.el, isRTL = this.isRTL || (this.isRTL = opts.numericInput), undoValue, $el,\r\n                    skipKeyPressEvent = !1, skipInputEvent = !1, validationEvent = !1, ignorable = !1, maxLength,\r\n                    mouseEnter = !1, originalPlaceholder = void 0;\r\n\r\n            function getMaskTemplate(baseOnInput, minimalPos, includeMode, noJit, clearOptionalTail) {\r\n                var greedy = opts.greedy;\r\n                clearOptionalTail && (opts.greedy = !1), minimalPos = minimalPos || 0;\r\n                var maskTemplate = [], ndxIntlzr, pos = 0, test, testPos, jitRenderStatic;\r\n                do {\r\n                    if (!0 === baseOnInput && maskset.validPositions[pos]) {\r\n                        testPos = clearOptionalTail && !0 === maskset.validPositions[pos].match.optionality && void 0 === maskset.validPositions[pos + 1] && (!0 === maskset.validPositions[pos].generatedInput || maskset.validPositions[pos].input == opts.skipOptionalPartCharacter && 0 < pos) ? determineTestTemplate(pos, getTests(pos, ndxIntlzr, pos - 1)) : maskset.validPositions[pos],\r\n                                test = testPos.match, ndxIntlzr = testPos.locator.slice(), maskTemplate.push(!0 === includeMode ? testPos.input : !1 === includeMode ? test.nativeDef : getPlaceholder(pos, test));\r\n                    } else {\r\n                        testPos = getTestTemplate(pos, ndxIntlzr, pos - 1), test = testPos.match, ndxIntlzr = testPos.locator.slice();\r\n                        var jitMasking = !0 !== noJit && (!1 !== opts.jitMasking ? opts.jitMasking : test.jit);\r\n                        jitRenderStatic = jitRenderStatic && test.static && test.def !== opts.groupSeparator && null === test.fn || maskset.validPositions[pos - 1] && test.static && test.def !== opts.groupSeparator && null === test.fn,\r\n                                jitRenderStatic || !1 === jitMasking || void 0 === jitMasking || \"number\" == typeof jitMasking && isFinite(jitMasking) && pos < jitMasking ? maskTemplate.push(!1 === includeMode ? test.nativeDef : getPlaceholder(pos, test)) : jitRenderStatic = !1;\r\n                    }\r\n                    pos++;\r\n                } while ((void 0 === maxLength || pos < maxLength) && (!0 !== test.static || \"\" !== test.def) || pos < minimalPos);\r\n                return \"\" === maskTemplate[maskTemplate.length - 1] && maskTemplate.pop(), !1 === includeMode && void 0 !== maskset.maskLength || (maskset.maskLength = pos - 1),\r\n                        opts.greedy = greedy, maskTemplate;\r\n            }\r\n\r\n            function resetMaskSet(soft) {\r\n                maskset.buffer = void 0, !0 !== soft && (maskset.validPositions = {}, maskset.p = 0);\r\n            }\r\n\r\n            function getLastValidPosition(closestTo, strict, validPositions) {\r\n                var before = -1, after = -1, valids = validPositions || maskset.validPositions;\r\n                for (var posNdx in void 0 === closestTo && (closestTo = -1), valids) {\r\n                    var psNdx = parseInt(posNdx);\r\n                    valids[psNdx] && (strict || !0 !== valids[psNdx].generatedInput) && (psNdx <= closestTo && (before = psNdx),\r\n                    closestTo <= psNdx && (after = psNdx));\r\n                }\r\n                return -1 === before || before == closestTo ? after : -1 == after ? before : closestTo - before < after - closestTo ? before : after;\r\n            }\r\n\r\n            function getDecisionTaker(tst) {\r\n                var decisionTaker = tst.locator[tst.alternation];\r\n                return \"string\" == typeof decisionTaker && 0 < decisionTaker.length && (decisionTaker = decisionTaker.split(\",\")[0]),\r\n                        void 0 !== decisionTaker ? decisionTaker.toString() : \"\";\r\n            }\r\n\r\n            function getLocator(tst, align) {\r\n                var locator = (null != tst.alternation ? tst.mloc[getDecisionTaker(tst)] : tst.locator).join(\"\");\r\n                if (\"\" !== locator) {\r\n                    for (; locator.length < align;) {\r\n                        locator += \"0\";\r\n                    }\r\n                }\r\n                return locator;\r\n            }\r\n\r\n            function determineTestTemplate(pos, tests) {\r\n                pos = 0 < pos ? pos - 1 : 0;\r\n                for (var altTest = getTest(pos), targetLocator = getLocator(altTest), tstLocator, closest, bestMatch, ndx = 0; ndx < tests.length; ndx++) {\r\n                    var tst = tests[ndx];\r\n                    tstLocator = getLocator(tst, targetLocator.length);\r\n                    var distance = Math.abs(tstLocator - targetLocator);\r\n                    (void 0 === closest || \"\" !== tstLocator && distance < closest || bestMatch && !opts.greedy && bestMatch.match.optionality && \"master\" === bestMatch.match.newBlockMarker && (!tst.match.optionality || !tst.match.newBlockMarker) || bestMatch && bestMatch.match.optionalQuantifier && !tst.match.optionalQuantifier) && (closest = distance,\r\n                            bestMatch = tst);\r\n                }\r\n                return bestMatch;\r\n            }\r\n\r\n            function getTestTemplate(pos, ndxIntlzr, tstPs) {\r\n                return maskset.validPositions[pos] || determineTestTemplate(pos, getTests(pos, ndxIntlzr ? ndxIntlzr.slice() : ndxIntlzr, tstPs));\r\n            }\r\n\r\n            function getTest(pos, tests) {\r\n                return maskset.validPositions[pos] ? maskset.validPositions[pos] : (tests || getTests(pos))[0];\r\n            }\r\n\r\n            function positionCanMatchDefinition(pos, testDefinition, opts) {\r\n                for (var valid = !1, tests = getTests(pos), tndx = 0; tndx < tests.length; tndx++) {\r\n                    if (tests[tndx].match && (!(tests[tndx].match.nativeDef !== testDefinition.match[opts.shiftPositions ? \"def\" : \"nativeDef\"] || opts.shiftPositions && testDefinition.match.static) || tests[tndx].match.nativeDef === testDefinition.match.nativeDef)) {\r\n                        valid = !0;\r\n                        break;\r\n                    }\r\n                    if (tests[tndx].match && tests[tndx].match.def === testDefinition.match.nativeDef) {\r\n                        valid = void 0;\r\n                        break;\r\n                    }\r\n                }\r\n                return !1 === valid && void 0 !== maskset.jitOffset[pos] && (valid = positionCanMatchDefinition(pos + maskset.jitOffset[pos], testDefinition, opts)),\r\n                        valid;\r\n            }\r\n\r\n            function getTests(pos, ndxIntlzr, tstPs) {\r\n                var maskTokens = maskset.maskToken, testPos = ndxIntlzr ? tstPs : 0,\r\n                        ndxInitializer = ndxIntlzr ? ndxIntlzr.slice() : [0], matches = [], insertStop = !1,\r\n                        latestMatch, cacheDependency = ndxIntlzr ? ndxIntlzr.join(\"\") : \"\";\r\n\r\n                function resolveTestFromToken(maskToken, ndxInitializer, loopNdx, quantifierRecurse) {\r\n                    function handleMatch(match, loopNdx, quantifierRecurse) {\r\n                        function isFirstMatch(latestMatch, tokenGroup) {\r\n                            var firstMatch = 0 === $.inArray(latestMatch, tokenGroup.matches);\r\n                            return firstMatch || $.each(tokenGroup.matches, function(ndx, match) {\r\n                                if (!0 === match.isQuantifier ? firstMatch = isFirstMatch(latestMatch, tokenGroup.matches[ndx - 1]) : Object.prototype.hasOwnProperty.call(match, \"matches\") && (firstMatch = isFirstMatch(latestMatch, match)),\r\n                                        firstMatch) {\r\n                                    return !1;\r\n                                }\r\n                            }), firstMatch;\r\n                        }\r\n\r\n                        function resolveNdxInitializer(pos, alternateNdx, targetAlternation) {\r\n                            var bestMatch, indexPos;\r\n                            if ((maskset.tests[pos] || maskset.validPositions[pos]) && $.each(maskset.tests[pos] || [maskset.validPositions[pos]], function(ndx, lmnt) {\r\n                                if (lmnt.mloc[alternateNdx]) {\r\n                                    return bestMatch = lmnt, !1;\r\n                                }\r\n                                var alternation = void 0 !== targetAlternation ? targetAlternation : lmnt.alternation,\r\n                                        ndxPos = void 0 !== lmnt.locator[alternation] ? lmnt.locator[alternation].toString().indexOf(alternateNdx) : -1;\r\n                                (void 0 === indexPos || ndxPos < indexPos) && -1 !== ndxPos && (bestMatch = lmnt,\r\n                                        indexPos = ndxPos);\r\n                            }), bestMatch) {\r\n                                var bestMatchAltIndex = bestMatch.locator[bestMatch.alternation],\r\n                                        locator = bestMatch.mloc[alternateNdx] || bestMatch.mloc[bestMatchAltIndex] || bestMatch.locator;\r\n                                return locator.slice((void 0 !== targetAlternation ? targetAlternation : bestMatch.alternation) + 1);\r\n                            }\r\n                            return void 0 !== targetAlternation ? resolveNdxInitializer(pos, alternateNdx) : void 0;\r\n                        }\r\n\r\n                        function isSubsetOf(source, target) {\r\n                            function expand(pattern) {\r\n                                for (var expanded = [], start = -1, end, i = 0, l = pattern.length; i < l; i++) {\r\n                                    if (\"-\" === pattern.charAt(i)) {\r\n                                        for (end = pattern.charCodeAt(i + 1); ++start < end;) {\r\n                                            expanded.push(String.fromCharCode(start));\r\n                                        }\r\n                                    } else {\r\n                                        start = pattern.charCodeAt(i),\r\n                                                expanded.push(pattern.charAt(i));\r\n                                    }\r\n                                }\r\n                                return expanded.join(\"\");\r\n                            }\r\n\r\n                            return source.match.def === target.match.nativeDef || !(!(opts.regex || source.match.fn instanceof RegExp && target.match.fn instanceof RegExp) || !0 === source.match.static || !0 === target.match.static) && -1 !== expand(target.match.fn.toString().replace(/[[\\]/]/g, \"\")).indexOf(expand(source.match.fn.toString().replace(/[[\\]/]/g, \"\")));\r\n                        }\r\n\r\n                        function staticCanMatchDefinition(source, target) {\r\n                            return !0 === source.match.static && !0 !== target.match.static && target.match.fn.test(source.match.def, maskset, pos, !1, opts, !1);\r\n                        }\r\n\r\n                        function setMergeLocators(targetMatch, altMatch) {\r\n                            var alternationNdx = targetMatch.alternation,\r\n                                    shouldMerge = void 0 === altMatch || alternationNdx === altMatch.alternation && -1 === targetMatch.locator[alternationNdx].toString().indexOf(altMatch.locator[alternationNdx]);\r\n                            if (!shouldMerge && alternationNdx > altMatch.alternation) {\r\n                                for (var i = altMatch.alternation; i < alternationNdx; i++) {\r\n                                    if (targetMatch.locator[i] !== altMatch.locator[i]) {\r\n                                        alternationNdx = i, shouldMerge = !0;\r\n                                        break;\r\n                                    }\r\n                                }\r\n                            }\r\n                            if (shouldMerge) {\r\n                                targetMatch.mloc = targetMatch.mloc || {};\r\n                                var locNdx = targetMatch.locator[alternationNdx];\r\n                                if (void 0 !== locNdx) {\r\n                                    if (\"string\" == typeof locNdx && (locNdx = locNdx.split(\",\")[0]), void 0 === targetMatch.mloc[locNdx] && (targetMatch.mloc[locNdx] = targetMatch.locator.slice()),\r\n                                    void 0 !== altMatch) {\r\n                                        for (var ndx in altMatch.mloc) {\r\n                                            \"string\" == typeof ndx && (ndx = ndx.split(\",\")[0]),\r\n                                            void 0 === targetMatch.mloc[ndx] && (targetMatch.mloc[ndx] = altMatch.mloc[ndx]);\r\n                                        }\r\n                                        targetMatch.locator[alternationNdx] = Object.keys(targetMatch.mloc).join(\",\");\r\n                                    }\r\n                                    return !0;\r\n                                }\r\n                                targetMatch.alternation = void 0;\r\n                            }\r\n                            return !1;\r\n                        }\r\n\r\n                        function isSameLevel(targetMatch, altMatch) {\r\n                            if (targetMatch.locator.length !== altMatch.locator.length) {\r\n                                return !1;\r\n                            }\r\n                            for (var locNdx = targetMatch.alternation + 1; locNdx < targetMatch.locator.length; locNdx++) {\r\n                                if (targetMatch.locator[locNdx] !== altMatch.locator[locNdx]) {\r\n                                    return !1;\r\n                                }\r\n                            }\r\n                            return !0;\r\n                        }\r\n\r\n                        if (testPos > opts._maxTestPos && void 0 !== quantifierRecurse) {\r\n                            throw \"Inputmask: There is probably an error in your mask definition or in the code. Create an issue on github with an example of the mask you are using. \" + maskset.mask;\r\n                        }\r\n                        if (testPos === pos && void 0 === match.matches) {\r\n                            return matches.push({\r\n                                                    match: match,\r\n                                                    locator: loopNdx.reverse(),\r\n                                                    cd: cacheDependency,\r\n                                                    mloc: {}\r\n                                                }), !0;\r\n                        }\r\n                        if (void 0 !== match.matches) {\r\n                            if (match.isGroup && quantifierRecurse !== match) {\r\n                                if (match = handleMatch(maskToken.matches[$.inArray(match, maskToken.matches) + 1], loopNdx, quantifierRecurse),\r\n                                        match) {\r\n                                    return !0;\r\n                                }\r\n                            } else if (match.isOptional) {\r\n                                var optionalToken = match, mtchsNdx = matches.length;\r\n                                if (match = resolveTestFromToken(match, ndxInitializer, loopNdx, quantifierRecurse),\r\n                                        match) {\r\n                                    if ($.each(matches, function(ndx, mtch) {\r\n                                        mtchsNdx <= ndx && (mtch.match.optionality = !0);\r\n                                    }), latestMatch = matches[matches.length - 1].match, void 0 !== quantifierRecurse || !isFirstMatch(latestMatch, optionalToken)) {\r\n                                        return !0;\r\n                                    }\r\n                                    insertStop = !0, testPos = pos;\r\n                                }\r\n                            } else if (match.isAlternator) {\r\n                                var alternateToken = match, malternateMatches = [], maltMatches,\r\n                                        currentMatches = matches.slice(), loopNdxCnt = loopNdx.length,\r\n                                        altIndex = 0 < ndxInitializer.length ? ndxInitializer.shift() : -1;\r\n                                if (-1 === altIndex || \"string\" == typeof altIndex) {\r\n                                    var currentPos = testPos, ndxInitializerClone = ndxInitializer.slice(),\r\n                                            altIndexArr = [], amndx;\r\n                                    if (\"string\" == typeof altIndex) {\r\n                                        altIndexArr = altIndex.split(\",\");\r\n                                    } else {\r\n                                        for (amndx = 0; amndx < alternateToken.matches.length; amndx++) {\r\n                                            altIndexArr.push(amndx.toString());\r\n                                        }\r\n                                    }\r\n                                    if (void 0 !== maskset.excludes[pos]) {\r\n                                        for (var altIndexArrClone = altIndexArr.slice(), i = 0, exl = maskset.excludes[pos].length; i < exl; i++) {\r\n                                            var excludeSet = maskset.excludes[pos][i].toString().split(\":\");\r\n                                            loopNdx.length == excludeSet[1] && altIndexArr.splice(altIndexArr.indexOf(excludeSet[0]), 1);\r\n                                        }\r\n                                        0 === altIndexArr.length && (delete maskset.excludes[pos], altIndexArr = altIndexArrClone);\r\n                                    }\r\n                                    (!0 === opts.keepStatic || isFinite(parseInt(opts.keepStatic)) && currentPos >= opts.keepStatic) && (altIndexArr = altIndexArr.slice(0, 1));\r\n                                    for (var unMatchedAlternation = !1, ndx = 0; ndx < altIndexArr.length; ndx++) {\r\n                                        amndx = parseInt(altIndexArr[ndx]), matches = [], ndxInitializer = \"string\" == typeof altIndex && resolveNdxInitializer(testPos, amndx, loopNdxCnt) || ndxInitializerClone.slice(),\r\n                                                alternateToken.matches[amndx] && handleMatch(alternateToken.matches[amndx], [amndx].concat(loopNdx), quantifierRecurse) ? match = !0 : 0 === ndx && (unMatchedAlternation = !0),\r\n                                                maltMatches = matches.slice(), testPos = currentPos, matches = [];\r\n                                        for (var ndx1 = 0; ndx1 < maltMatches.length; ndx1++) {\r\n                                            var altMatch = maltMatches[ndx1], dropMatch = !1;\r\n                                            altMatch.match.jit = altMatch.match.jit || unMatchedAlternation, altMatch.alternation = altMatch.alternation || loopNdxCnt,\r\n                                                    setMergeLocators(altMatch);\r\n                                            for (var ndx2 = 0; ndx2 < malternateMatches.length; ndx2++) {\r\n                                                var altMatch2 = malternateMatches[ndx2];\r\n                                                if (\"string\" != typeof altIndex || void 0 !== altMatch.alternation && -1 !== $.inArray(altMatch.locator[altMatch.alternation].toString(), altIndexArr)) {\r\n                                                    if (altMatch.match.nativeDef === altMatch2.match.nativeDef) {\r\n                                                        dropMatch = !0, setMergeLocators(altMatch2, altMatch);\r\n                                                        break;\r\n                                                    }\r\n                                                    if (isSubsetOf(altMatch, altMatch2)) {\r\n                                                        setMergeLocators(altMatch, altMatch2) && (dropMatch = !0, malternateMatches.splice(malternateMatches.indexOf(altMatch2), 0, altMatch));\r\n                                                        break;\r\n                                                    }\r\n                                                    if (isSubsetOf(altMatch2, altMatch)) {\r\n                                                        setMergeLocators(altMatch2, altMatch);\r\n                                                        break;\r\n                                                    }\r\n                                                    if (staticCanMatchDefinition(altMatch, altMatch2)) {\r\n                                                        isSameLevel(altMatch, altMatch2) || void 0 !== el.inputmask.userOptions.keepStatic ? setMergeLocators(altMatch, altMatch2) && (dropMatch = !0,\r\n                                                                malternateMatches.splice(malternateMatches.indexOf(altMatch2), 0, altMatch)) : opts.keepStatic = !0;\r\n                                                        break;\r\n                                                    }\r\n                                                }\r\n                                            }\r\n                                            dropMatch || malternateMatches.push(altMatch);\r\n                                        }\r\n                                    }\r\n                                    matches = currentMatches.concat(malternateMatches), testPos = pos, insertStop = 0 < matches.length,\r\n                                            match = 0 < malternateMatches.length, ndxInitializer = ndxInitializerClone.slice();\r\n                                } else {\r\n                                    match = handleMatch(alternateToken.matches[altIndex] || maskToken.matches[altIndex], [altIndex].concat(loopNdx), quantifierRecurse);\r\n                                }\r\n                                if (match) {\r\n                                    return !0;\r\n                                }\r\n                            } else if (match.isQuantifier && quantifierRecurse !== maskToken.matches[$.inArray(match, maskToken.matches) - 1]) {\r\n                                for (var qt = match, qndx = 0 < ndxInitializer.length ? ndxInitializer.shift() : 0; qndx < (isNaN(qt.quantifier.max) ? qndx + 1 : qt.quantifier.max) && testPos <= pos; qndx++) {\r\n                                    var tokenGroup = maskToken.matches[$.inArray(qt, maskToken.matches) - 1];\r\n                                    if (match = handleMatch(tokenGroup, [qndx].concat(loopNdx), tokenGroup), match) {\r\n                                        if (latestMatch = matches[matches.length - 1].match, latestMatch.optionalQuantifier = qndx >= qt.quantifier.min,\r\n                                                latestMatch.jit = (qndx || 1) * tokenGroup.matches.indexOf(latestMatch) >= qt.quantifier.jit,\r\n                                        latestMatch.optionalQuantifier && isFirstMatch(latestMatch, tokenGroup)) {\r\n                                            insertStop = !0, testPos = pos;\r\n                                            break;\r\n                                        }\r\n                                        return latestMatch.jit && (maskset.jitOffset[pos] = tokenGroup.matches.length - tokenGroup.matches.indexOf(latestMatch)),\r\n                                                !0;\r\n                                    }\r\n                                }\r\n                            } else if (match = resolveTestFromToken(match, ndxInitializer, loopNdx, quantifierRecurse),\r\n                                    match) {\r\n                                return !0;\r\n                            }\r\n                        } else {\r\n                            testPos++;\r\n                        }\r\n                    }\r\n\r\n                    for (var tndx = 0 < ndxInitializer.length ? ndxInitializer.shift() : 0; tndx < maskToken.matches.length; tndx++) {\r\n                        if (!0 !== maskToken.matches[tndx].isQuantifier) {\r\n                            var match = handleMatch(maskToken.matches[tndx], [tndx].concat(loopNdx), quantifierRecurse);\r\n                            if (match && testPos === pos) {\r\n                                return match;\r\n                            }\r\n                            if (pos < testPos) {\r\n                                break;\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n\r\n                function mergeLocators(pos, tests) {\r\n                    var locator = [];\r\n                    return $.isArray(tests) || (tests = [tests]), 0 < tests.length && (void 0 === tests[0].alternation || !0 === opts.keepStatic ? (locator = determineTestTemplate(pos, tests.slice()).locator.slice(),\r\n                                                                  0 === locator.length && (locator = tests[0].locator.slice())) : $.each(tests, function(ndx, tst) {\r\n                        if (\"\" !== tst.def) {\r\n                            if (0 === locator.length) {\r\n                                locator = tst.locator.slice();\r\n                            } else {\r\n                                for (var i = 0; i < locator.length; i++) {\r\n                                    tst.locator[i] && -1 === locator[i].toString().indexOf(tst.locator[i]) && (locator[i] += \",\" + tst.locator[i]);\r\n                                }\r\n                            }\r\n                        }\r\n                    })), locator;\r\n                }\r\n\r\n                if (-1 < pos && (void 0 === maxLength || pos < maxLength)) {\r\n                    if (void 0 === ndxIntlzr) {\r\n                        for (var previousPos = pos - 1, test; void 0 === (test = maskset.validPositions[previousPos] || maskset.tests[previousPos]) && -1 < previousPos;) {\r\n                            previousPos--;\r\n                        }\r\n                        void 0 !== test && -1 < previousPos && (ndxInitializer = mergeLocators(previousPos, test),\r\n                                cacheDependency = ndxInitializer.join(\"\"), testPos = previousPos);\r\n                    }\r\n                    if (maskset.tests[pos] && maskset.tests[pos][0].cd === cacheDependency) {\r\n                        return maskset.tests[pos];\r\n                    }\r\n                    for (var mtndx = ndxInitializer.shift(); mtndx < maskTokens.length; mtndx++) {\r\n                        var match = resolveTestFromToken(maskTokens[mtndx], ndxInitializer, [mtndx]);\r\n                        if (match && testPos === pos || pos < testPos) {\r\n                            break;\r\n                        }\r\n                    }\r\n                }\r\n                return 0 !== matches.length && !insertStop || matches.push({\r\n                                                                               match: {\r\n                                                                                   fn: null,\r\n                                                                                   static: !0,\r\n                                                                                   optionality: !1,\r\n                                                                                   casing: null,\r\n                                                                                   def: \"\",\r\n                                                                                   placeholder: \"\"\r\n                                                                               },\r\n                                                                               locator: [],\r\n                                                                               mloc: {},\r\n                                                                               cd: cacheDependency\r\n                                                                           }), void 0 !== ndxIntlzr && maskset.tests[pos] ? $.extend(!0, [], matches) : (maskset.tests[pos] = $.extend(!0, [], matches),\r\n                        maskset.tests[pos]);\r\n            }\r\n\r\n            function getBufferTemplate() {\r\n                return void 0 === maskset._buffer && (maskset._buffer = getMaskTemplate(!1, 1),\r\n                       void 0 === maskset.buffer && (maskset.buffer = maskset._buffer.slice())), maskset._buffer;\r\n            }\r\n\r\n            function getBuffer(noCache) {\r\n                return void 0 !== maskset.buffer && !0 !== noCache || (maskset.buffer = getMaskTemplate(!0, getLastValidPosition(), !0),\r\n                void 0 === maskset._buffer && (maskset._buffer = maskset.buffer.slice())), maskset.buffer;\r\n            }\r\n\r\n            function refreshFromBuffer(start, end, buffer) {\r\n                var i, p, skipOptionalPartCharacter = opts.skipOptionalPartCharacter,\r\n                        bffr = isRTL ? buffer.slice().reverse() : buffer;\r\n                if (opts.skipOptionalPartCharacter = \"\", !0 === start) {\r\n                    resetMaskSet(), maskset.tests = {},\r\n                            start = 0, end = buffer.length, p = determineNewCaretPosition({\r\n                                                                                              begin: 0,\r\n                                                                                              end: 0\r\n                                                                                          }, !1).begin;\r\n                } else {\r\n                    for (i = start; i < end; i++) {\r\n                        delete maskset.validPositions[i];\r\n                    }\r\n                    p = start;\r\n                }\r\n                var keypress = new $.Event(\"keypress\");\r\n                for (i = start; i < end; i++) {\r\n                    keypress.which = bffr[i].toString().charCodeAt(0), ignorable = !1;\r\n                    var valResult = EventHandlers.keypressEvent.call(el, keypress, !0, !1, !1, p);\r\n                    !1 !== valResult && (p = valResult.forwardPosition);\r\n                }\r\n                opts.skipOptionalPartCharacter = skipOptionalPartCharacter;\r\n            }\r\n\r\n            function casing(elem, test, pos) {\r\n                switch (opts.casing || test.casing) {\r\n                    case \"upper\":\r\n                        elem = elem.toUpperCase();\r\n                        break;\r\n\r\n                    case \"lower\":\r\n                        elem = elem.toLowerCase();\r\n                        break;\r\n\r\n                    case \"title\":\r\n                        var posBefore = maskset.validPositions[pos - 1];\r\n                        elem = 0 === pos || posBefore && posBefore.input === String.fromCharCode(keyCode.SPACE) ? elem.toUpperCase() : elem.toLowerCase();\r\n                        break;\r\n\r\n                    default:\r\n                        if ($.isFunction(opts.casing)) {\r\n                            var args = Array.prototype.slice.call(arguments);\r\n                            args.push(maskset.validPositions), elem = opts.casing.apply(this, args);\r\n                        }\r\n                }\r\n                return elem;\r\n            }\r\n\r\n            function checkAlternationMatch(altArr1, altArr2, na) {\r\n                for (var altArrC = opts.greedy ? altArr2 : altArr2.slice(0, 1), isMatch = !1, naArr = void 0 !== na ? na.split(\",\") : [], naNdx, i = 0; i < naArr.length; i++) {\r\n                    -1 !== (naNdx = altArr1.indexOf(naArr[i])) && altArr1.splice(naNdx, 1);\r\n                }\r\n                for (var alndx = 0; alndx < altArr1.length; alndx++) {\r\n                    if (-1 !== $.inArray(altArr1[alndx], altArrC)) {\r\n                        isMatch = !0;\r\n                        break;\r\n                    }\r\n                }\r\n                return isMatch;\r\n            }\r\n\r\n            function alternate(maskPos, c, strict, fromIsValid, rAltPos, selection) {\r\n                var validPsClone = $.extend(!0, {}, maskset.validPositions), tstClone = $.extend(!0, {}, maskset.tests),\r\n                        lastAlt, alternation, isValidRslt = !1, returnRslt = !1, altPos, prevAltPos, i, validPos,\r\n                        decisionPos, lAltPos = void 0 !== rAltPos ? rAltPos : getLastValidPosition(), nextPos, input,\r\n                        begin, end;\r\n                if (selection && (begin = selection.begin, end = selection.end, selection.begin > selection.end && (begin = selection.end,\r\n                        end = selection.begin)), -1 === lAltPos && void 0 === rAltPos) {\r\n                    lastAlt = 0, prevAltPos = getTest(lastAlt),\r\n                            alternation = prevAltPos.alternation;\r\n                } else {\r\n                    for (; 0 <= lAltPos; lAltPos--) {\r\n                        if (altPos = maskset.validPositions[lAltPos],\r\n                        altPos && void 0 !== altPos.alternation) {\r\n                            if (prevAltPos && prevAltPos.locator[altPos.alternation] !== altPos.locator[altPos.alternation]) {\r\n                                break;\r\n                            }\r\n                            lastAlt = lAltPos, alternation = maskset.validPositions[lastAlt].alternation, prevAltPos = altPos;\r\n                        }\r\n                    }\r\n                }\r\n                if (void 0 !== alternation) {\r\n                    decisionPos = parseInt(lastAlt), maskset.excludes[decisionPos] = maskset.excludes[decisionPos] || [],\r\n                    !0 !== maskPos && maskset.excludes[decisionPos].push(getDecisionTaker(prevAltPos) + \":\" + prevAltPos.alternation);\r\n                    var validInputs = [], resultPos = -1;\r\n                    for (i = decisionPos; i < getLastValidPosition(void 0, !0) + 1; i++) {\r\n                        -1 === resultPos && maskPos <= i && void 0 !== c && (validInputs.push(c),\r\n                                resultPos = validInputs.length - 1), validPos = maskset.validPositions[i], validPos && !0 !== validPos.generatedInput && (void 0 === selection || i < begin || end <= i) && validInputs.push(validPos.input),\r\n                                delete maskset.validPositions[i];\r\n                    }\r\n                    for (-1 === resultPos && void 0 !== c && (validInputs.push(c), resultPos = validInputs.length - 1); void 0 !== maskset.excludes[decisionPos] && maskset.excludes[decisionPos].length < 10;) {\r\n                        for (maskset.tests = {}, resetMaskSet(!0), isValidRslt = !0, i = 0; i < validInputs.length && (nextPos = isValidRslt.caret || getLastValidPosition(void 0, !0) + 1,\r\n                                input = validInputs[i], isValidRslt = isValid(nextPos, input, !1, fromIsValid, !0)); i++) {\r\n                            i === resultPos && (returnRslt = isValidRslt),\r\n                            1 == maskPos && isValidRslt && (returnRslt = {\r\n                                caretPos: i\r\n                            });\r\n                        }\r\n                        if (isValidRslt) {\r\n                            break;\r\n                        }\r\n                        if (resetMaskSet(), prevAltPos = getTest(decisionPos), maskset.validPositions = $.extend(!0, {}, validPsClone),\r\n                                maskset.tests = $.extend(!0, {}, tstClone), !maskset.excludes[decisionPos]) {\r\n                            returnRslt = alternate(maskPos, c, strict, fromIsValid, decisionPos - 1, selection);\r\n                            break;\r\n                        }\r\n                        var decisionTaker = getDecisionTaker(prevAltPos);\r\n                        if (-1 !== maskset.excludes[decisionPos].indexOf(decisionTaker + \":\" + prevAltPos.alternation)) {\r\n                            returnRslt = alternate(maskPos, c, strict, fromIsValid, decisionPos - 1, selection);\r\n                            break;\r\n                        }\r\n                        for (maskset.excludes[decisionPos].push(decisionTaker + \":\" + prevAltPos.alternation),\r\n                                     i = decisionPos; i < getLastValidPosition(void 0, !0) + 1; i++) {\r\n                            delete maskset.validPositions[i];\r\n                        }\r\n                    }\r\n                }\r\n                return returnRslt && !1 === opts.keepStatic || delete maskset.excludes[decisionPos],\r\n                        returnRslt;\r\n            }\r\n\r\n            function isValid(pos, c, strict, fromIsValid, fromAlternate, validateOnly) {\r\n                function isSelection(posObj) {\r\n                    return isRTL ? 1 < posObj.begin - posObj.end || posObj.begin - posObj.end == 1 : 1 < posObj.end - posObj.begin || posObj.end - posObj.begin == 1;\r\n                }\r\n\r\n                strict = !0 === strict;\r\n                var maskPos = pos;\r\n\r\n                function processCommandObject(commandObj) {\r\n                    if (void 0 !== commandObj) {\r\n                        if (void 0 !== commandObj.remove && ($.isArray(commandObj.remove) || (commandObj.remove = [commandObj.remove]),\r\n                                $.each(commandObj.remove.sort(function(a, b) {\r\n                                    return b.pos - a.pos;\r\n                                }), function(ndx, lmnt) {\r\n                                    revalidateMask({\r\n                                                       begin: lmnt,\r\n                                                       end: lmnt + 1\r\n                                                   });\r\n                                }), commandObj.remove = void 0), void 0 !== commandObj.insert && ($.isArray(commandObj.insert) || (commandObj.insert = [commandObj.insert]),\r\n                                $.each(commandObj.insert.sort(function(a, b) {\r\n                                    return a.pos - b.pos;\r\n                                }), function(ndx, lmnt) {\r\n                                    \"\" !== lmnt.c && isValid(lmnt.pos, lmnt.c, void 0 === lmnt.strict || lmnt.strict, void 0 !== lmnt.fromIsValid ? lmnt.fromIsValid : fromIsValid);\r\n                                }), commandObj.insert = void 0), commandObj.refreshFromBuffer && commandObj.buffer) {\r\n                            var refresh = commandObj.refreshFromBuffer;\r\n                            refreshFromBuffer(!0 === refresh ? refresh : refresh.start, refresh.end, commandObj.buffer),\r\n                                    commandObj.refreshFromBuffer = void 0;\r\n                        }\r\n                        void 0 !== commandObj.rewritePosition && (maskPos = commandObj.rewritePosition,\r\n                                commandObj = !0);\r\n                    }\r\n                    return commandObj;\r\n                }\r\n\r\n                function _isValid(position, c, strict) {\r\n                    var rslt = !1;\r\n                    return $.each(getTests(position), function(ndx, tst) {\r\n                        var test = tst.match;\r\n                        if (getBuffer(!0), rslt = null != test.fn ? test.fn.test(c, maskset, position, strict, opts, isSelection(pos)) : (c === test.def || c === opts.skipOptionalPartCharacter) && \"\" !== test.def && {\r\n                            c: getPlaceholder(position, test, !0) || test.def,\r\n                            pos: position\r\n                        }, !1 !== rslt) {\r\n                            var elem = void 0 !== rslt.c ? rslt.c : c, validatedPos = position;\r\n                            return elem = elem === opts.skipOptionalPartCharacter && !0 === test.static ? getPlaceholder(position, test, !0) || test.def : elem,\r\n                                    rslt = processCommandObject(rslt), !0 !== rslt && void 0 !== rslt.pos && rslt.pos !== position && (validatedPos = rslt.pos),\r\n                                    !0 !== rslt && void 0 === rslt.pos && void 0 === rslt.c ? !1 : (!1 === revalidateMask(pos, $.extend({}, tst, {\r\n                                        input: casing(elem, test, validatedPos)\r\n                                    }), fromIsValid, validatedPos) && (rslt = !1), !1);\r\n                        }\r\n                    }), rslt;\r\n                }\r\n\r\n                void 0 !== pos.begin && (maskPos = isRTL ? pos.end : pos.begin);\r\n                var result = !0, positionsClone = $.extend(!0, {}, maskset.validPositions);\r\n                if (!1 === opts.keepStatic && void 0 !== maskset.excludes[maskPos] && !0 !== fromAlternate && !0 !== fromIsValid) {\r\n                    for (var i = maskPos; i < (isRTL ? pos.begin : pos.end); i++) {\r\n                        void 0 !== maskset.excludes[i] && (maskset.excludes[i] = void 0,\r\n                                delete maskset.tests[i]);\r\n                    }\r\n                }\r\n                if ($.isFunction(opts.preValidation) && !0 !== fromIsValid && !0 !== validateOnly && (result = opts.preValidation.call(el, getBuffer(), maskPos, c, isSelection(pos), opts, maskset, pos, strict || fromAlternate),\r\n                        result = processCommandObject(result)), !0 === result) {\r\n                    if (void 0 === maxLength || maskPos < maxLength) {\r\n                        if (result = _isValid(maskPos, c, strict), (!strict || !0 === fromIsValid) && !1 === result && !0 !== validateOnly) {\r\n                            var currentPosValid = maskset.validPositions[maskPos];\r\n                            if (!currentPosValid || !0 !== currentPosValid.match.static || currentPosValid.match.def !== c && c !== opts.skipOptionalPartCharacter) {\r\n                                if (opts.insertMode || void 0 === maskset.validPositions[seekNext(maskPos)] || pos.end > maskPos) {\r\n                                    var skip = !1;\r\n                                    if (maskset.jitOffset[maskPos] && void 0 === maskset.validPositions[seekNext(maskPos)] && (result = isValid(maskPos + maskset.jitOffset[maskPos], c, !0),\r\n                                        !1 !== result && (!0 !== fromAlternate && (result.caret = maskPos), skip = !0)),\r\n                                    pos.end > maskPos && (maskset.validPositions[maskPos] = void 0), !skip && !isMask(maskPos, opts.keepStatic)) {\r\n                                        for (var nPos = maskPos + 1, snPos = seekNext(maskPos); nPos <= snPos; nPos++) {\r\n                                            if (result = _isValid(nPos, c, strict),\r\n                                            !1 !== result) {\r\n                                                result = trackbackPositions(maskPos, void 0 !== result.pos ? result.pos : nPos) || result,\r\n                                                        maskPos = nPos;\r\n                                                break;\r\n                                            }\r\n                                        }\r\n                                    }\r\n                                }\r\n                            } else {\r\n                                result = {\r\n                                    caret: seekNext(maskPos)\r\n                                };\r\n                            }\r\n                        }\r\n                    } else {\r\n                        result = !1;\r\n                    }\r\n                    !1 !== result || !opts.keepStatic || !isComplete(getBuffer()) && 0 !== maskPos || strict || !0 === fromAlternate ? isSelection(pos) && maskset.tests[maskPos] && 1 < maskset.tests[maskPos].length && opts.keepStatic && !strict && !0 !== fromAlternate && (result = alternate(!0)) : result = alternate(maskPos, c, strict, fromIsValid, void 0, pos),\r\n                    !0 === result && (result = {\r\n                        pos: maskPos\r\n                    });\r\n                }\r\n                if ($.isFunction(opts.postValidation) && !0 !== fromIsValid && !0 !== validateOnly) {\r\n                    var postResult = opts.postValidation.call(el, getBuffer(!0), void 0 !== pos.begin ? isRTL ? pos.end : pos.begin : pos, c, result, opts, maskset, strict);\r\n                    void 0 !== postResult && (result = !0 === postResult ? result : postResult);\r\n                }\r\n                result && void 0 === result.pos && (result.pos = maskPos), !1 === result || !0 === validateOnly ? (resetMaskSet(!0),\r\n                        maskset.validPositions = $.extend(!0, {}, positionsClone)) : trackbackPositions(void 0, maskPos, !0);\r\n                var endResult = processCommandObject(result);\r\n                return endResult;\r\n            }\r\n\r\n            function trackbackPositions(originalPos, newPos, fillOnly) {\r\n                if (void 0 === originalPos) {\r\n                    for (originalPos = newPos - 1; 0 < originalPos && !maskset.validPositions[originalPos]; originalPos--) {\r\n                        ;\r\n                    }\r\n                }\r\n                for (var ps = originalPos; ps < newPos; ps++) {\r\n                    if (void 0 === maskset.validPositions[ps] && !isMask(ps, !0)) {\r\n                        var vp = 0 == ps ? getTest(ps) : maskset.validPositions[ps - 1];\r\n                        if (vp) {\r\n                            var tests = getTests(ps).slice();\r\n                            \"\" === tests[tests.length - 1].match.def && tests.pop();\r\n                            var bestMatch = determineTestTemplate(ps, tests), np;\r\n                            if (bestMatch && (!0 !== bestMatch.match.jit || \"master\" === bestMatch.match.newBlockMarker && (np = maskset.validPositions[ps + 1]) && !0 === np.match.optionalQuantifier) && (bestMatch = $.extend({}, bestMatch, {\r\n                                input: getPlaceholder(ps, bestMatch.match, !0) || bestMatch.match.def\r\n                            }), bestMatch.generatedInput = !0, revalidateMask(ps, bestMatch, !0), !0 !== fillOnly)) {\r\n                                var cvpInput = maskset.validPositions[newPos].input;\r\n                                return maskset.validPositions[newPos] = void 0, isValid(newPos, cvpInput, !0, !0);\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n\r\n            function revalidateMask(pos, validTest, fromIsValid, validatedPos) {\r\n                function IsEnclosedStatic(pos, valids, selection) {\r\n                    var posMatch = valids[pos];\r\n                    if (void 0 === posMatch || !0 !== posMatch.match.static || !0 === posMatch.match.optionality || void 0 !== valids[0] && void 0 !== valids[0].alternation) {\r\n                        return !1;\r\n                    }\r\n                    var prevMatch = selection.begin <= pos - 1 ? valids[pos - 1] && !0 === valids[pos - 1].match.static && valids[pos - 1] : valids[pos - 1],\r\n                            nextMatch = selection.end > pos + 1 ? valids[pos + 1] && !0 === valids[pos + 1].match.static && valids[pos + 1] : valids[pos + 1];\r\n                    return prevMatch && nextMatch;\r\n                }\r\n\r\n                var offset = 0, begin = void 0 !== pos.begin ? pos.begin : pos,\r\n                        end = void 0 !== pos.end ? pos.end : pos;\r\n                if (pos.begin > pos.end && (begin = pos.end, end = pos.begin), validatedPos = void 0 !== validatedPos ? validatedPos : begin,\r\n                begin !== end || opts.insertMode && void 0 !== maskset.validPositions[validatedPos] && void 0 === fromIsValid || void 0 === validTest) {\r\n                    var positionsClone = $.extend(!0, {}, maskset.validPositions),\r\n                            lvp = getLastValidPosition(void 0, !0), i;\r\n                    for (maskset.p = begin, i = lvp; begin <= i; i--) {\r\n                        delete maskset.validPositions[i],\r\n                        void 0 === validTest && delete maskset.tests[i + 1];\r\n                    }\r\n                    var valid = !0, j = validatedPos, posMatch = j, t, canMatch;\r\n                    for (validTest && (maskset.validPositions[validatedPos] = $.extend(!0, {}, validTest),\r\n                            posMatch++, j++), i = validTest ? end : end - 1; i <= lvp; i++) {\r\n                        if (void 0 !== (t = positionsClone[i]) && !0 !== t.generatedInput && (end <= i || begin <= i && IsEnclosedStatic(i, positionsClone, {\r\n                            begin: begin,\r\n                            end: end\r\n                        }))) {\r\n                            for (; \"\" !== getTest(posMatch).match.def;) {\r\n                                if (!1 !== (canMatch = positionCanMatchDefinition(posMatch, t, opts)) || \"+\" === t.match.def) {\r\n                                    \"+\" === t.match.def && getBuffer(!0);\r\n                                    var result = isValid(posMatch, t.input, \"+\" !== t.match.def, \"+\" !== t.match.def);\r\n                                    if (valid = !1 !== result, j = (result.pos || posMatch) + 1, !valid && canMatch) {\r\n                                        break;\r\n                                    }\r\n                                } else {\r\n                                    valid = !1;\r\n                                }\r\n                                if (valid) {\r\n                                    void 0 === validTest && t.match.static && i === pos.begin && offset++;\r\n                                    break;\r\n                                }\r\n                                if (!valid && posMatch > maskset.maskLength) {\r\n                                    break;\r\n                                }\r\n                                posMatch++;\r\n                            }\r\n                            \"\" == getTest(posMatch).match.def && (valid = !1), posMatch = j;\r\n                        }\r\n                        if (!valid) {\r\n                            break;\r\n                        }\r\n                    }\r\n                    if (!valid) {\r\n                        return maskset.validPositions = $.extend(!0, {}, positionsClone), resetMaskSet(!0),\r\n                                !1;\r\n                    }\r\n                } else {\r\n                    validTest && getTest(validatedPos).match.cd === validTest.match.cd && (maskset.validPositions[validatedPos] = $.extend(!0, {}, validTest));\r\n                }\r\n                return resetMaskSet(!0), offset;\r\n            }\r\n\r\n            function isMask(pos, strict, fuzzy) {\r\n                var test = getTestTemplate(pos).match;\r\n                if (\"\" === test.def && (test = getTest(pos).match), !0 !== test.static) {\r\n                    return test.fn;\r\n                }\r\n                if (!0 === fuzzy && void 0 !== maskset.validPositions[pos] && !0 !== maskset.validPositions[pos].generatedInput) {\r\n                    return !0;\r\n                }\r\n                if (!0 !== strict && -1 < pos) {\r\n                    if (fuzzy) {\r\n                        var tests = getTests(pos);\r\n                        return tests.length > 1 + (\"\" === tests[tests.length - 1].match.def ? 1 : 0);\r\n                    }\r\n                    var testTemplate = determineTestTemplate(pos, getTests(pos)),\r\n                            testPlaceHolder = getPlaceholder(pos, testTemplate.match);\r\n                    return testTemplate.match.def !== testPlaceHolder;\r\n                }\r\n                return !1;\r\n            }\r\n\r\n            function seekNext(pos, newBlock, fuzzy) {\r\n                void 0 === fuzzy && (fuzzy = !0);\r\n                for (var position = pos + 1; \"\" !== getTest(position).match.def && (!0 === newBlock && (!0 !== getTest(position).match.newBlockMarker || !isMask(position, void 0, !0)) || !0 !== newBlock && !isMask(position, void 0, fuzzy));) {\r\n                    position++;\r\n                }\r\n                return position;\r\n            }\r\n\r\n            function seekPrevious(pos, newBlock) {\r\n                var position = pos, tests;\r\n                if (position <= 0) {\r\n                    return 0;\r\n                }\r\n                for (; 0 < --position && (!0 === newBlock && !0 !== getTest(position).match.newBlockMarker || !0 !== newBlock && !isMask(position, void 0, !0) && (tests = getTests(position),\r\n                                          tests.length < 2 || 2 === tests.length && \"\" === tests[1].match.def));) {\r\n                    ;\r\n                }\r\n                return position;\r\n            }\r\n\r\n            function writeBuffer(input, buffer, caretPos, event, triggerEvents) {\r\n                if (event && $.isFunction(opts.onBeforeWrite)) {\r\n                    var result = opts.onBeforeWrite.call(inputmask, event, buffer, caretPos, opts);\r\n                    if (result) {\r\n                        if (result.refreshFromBuffer) {\r\n                            var refresh = result.refreshFromBuffer;\r\n                            refreshFromBuffer(!0 === refresh ? refresh : refresh.start, refresh.end, result.buffer || buffer),\r\n                                    buffer = getBuffer(!0);\r\n                        }\r\n                        void 0 !== caretPos && (caretPos = void 0 !== result.caret ? result.caret : caretPos);\r\n                    }\r\n                }\r\n                if (void 0 !== input && (input.inputmask._valueSet(buffer.join(\"\")), void 0 === caretPos || void 0 !== event && \"blur\" === event.type || caret(input, caretPos, void 0, void 0, void 0 !== event && \"keydown\" === event.type && (event.keyCode === keyCode.DELETE || event.keyCode === keyCode.BACKSPACE)),\r\n                !0 === triggerEvents)) {\r\n                    var $input = $(input), nptVal = input.inputmask._valueGet();\r\n                    skipInputEvent = !0, $input.trigger(\"input\"), setTimeout(function() {\r\n                        nptVal === getBufferTemplate().join(\"\") ? $input.trigger(\"cleared\") : !0 === isComplete(buffer) && $input.trigger(\"complete\");\r\n                    }, 0);\r\n                }\r\n            }\r\n\r\n            function getPlaceholder(pos, test, returnPL) {\r\n                if (test = test || getTest(pos).match, void 0 !== test.placeholder || !0 === returnPL) {\r\n                    return $.isFunction(test.placeholder) ? test.placeholder(opts) : test.placeholder;\r\n                }\r\n                if (!0 !== test.static) {\r\n                    return opts.placeholder.charAt(pos % opts.placeholder.length);\r\n                }\r\n                if (-1 < pos && void 0 === maskset.validPositions[pos]) {\r\n                    var tests = getTests(pos), staticAlternations = [], prevTest;\r\n                    if (tests.length > 1 + (\"\" === tests[tests.length - 1].match.def ? 1 : 0)) {\r\n                        for (var i = 0; i < tests.length; i++) {\r\n                            if (\"\" !== tests[i].match.def && !0 !== tests[i].match.optionality && !0 !== tests[i].match.optionalQuantifier && (!0 === tests[i].match.static || void 0 === prevTest || !1 !== tests[i].match.fn.test(prevTest.match.def, maskset, pos, !0, opts)) && (staticAlternations.push(tests[i]),\r\n                                !0 === tests[i].match.static && (prevTest = tests[i]), 1 < staticAlternations.length && /[0-9a-bA-Z]/.test(staticAlternations[0].match.def))) {\r\n                                return opts.placeholder.charAt(pos % opts.placeholder.length);\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n                return test.def;\r\n            }\r\n\r\n            function HandleNativePlaceholder(npt, value) {\r\n                if (ie) {\r\n                    if (npt.inputmask._valueGet() !== value && (npt.placeholder !== value || \"\" === npt.placeholder)) {\r\n                        var buffer = getBuffer().slice(), nptValue = npt.inputmask._valueGet();\r\n                        if (nptValue !== value) {\r\n                            var lvp = getLastValidPosition();\r\n                            -1 === lvp && nptValue === getBufferTemplate().join(\"\") ? buffer = [] : -1 !== lvp && clearOptionalTail(buffer),\r\n                                    writeBuffer(npt, buffer);\r\n                        }\r\n                    }\r\n                } else {\r\n                    npt.placeholder !== value && (npt.placeholder = value, \"\" === npt.placeholder && npt.removeAttribute(\"placeholder\"));\r\n                }\r\n            }\r\n\r\n            function determineNewCaretPosition(selectedCaret, tabbed) {\r\n                function doRadixFocus(clickPos) {\r\n                    if (\"\" !== opts.radixPoint && 0 !== opts.digits) {\r\n                        var vps = maskset.validPositions;\r\n                        if (void 0 === vps[clickPos] || vps[clickPos].input === getPlaceholder(clickPos)) {\r\n                            if (clickPos < seekNext(-1)) {\r\n                                return !0;\r\n                            }\r\n                            var radixPos = $.inArray(opts.radixPoint, getBuffer());\r\n                            if (-1 !== radixPos) {\r\n                                for (var vp in vps) {\r\n                                    if (vps[vp] && radixPos < vp && vps[vp].input !== getPlaceholder(vp)) {\r\n                                        return !1;\r\n                                    }\r\n                                }\r\n                                return !0;\r\n                            }\r\n                        }\r\n                    }\r\n                    return !1;\r\n                }\r\n\r\n                if (tabbed && (isRTL ? selectedCaret.end = selectedCaret.begin : selectedCaret.begin = selectedCaret.end),\r\n                selectedCaret.begin === selectedCaret.end) {\r\n                    switch (opts.positionCaretOnClick) {\r\n                        case \"none\":\r\n                            break;\r\n\r\n                        case \"select\":\r\n                            selectedCaret = {\r\n                                begin: 0,\r\n                                end: getBuffer().length\r\n                            };\r\n                            break;\r\n\r\n                        case \"ignore\":\r\n                            selectedCaret.end = selectedCaret.begin = seekNext(getLastValidPosition());\r\n                            break;\r\n\r\n                        case \"radixFocus\":\r\n                            if (doRadixFocus(selectedCaret.begin)) {\r\n                                var radixPos = getBuffer().join(\"\").indexOf(opts.radixPoint);\r\n                                selectedCaret.end = selectedCaret.begin = opts.numericInput ? seekNext(radixPos) : radixPos;\r\n                                break;\r\n                            }\r\n\r\n                        default:\r\n                            var clickPosition = selectedCaret.begin,\r\n                                    lvclickPosition = getLastValidPosition(clickPosition, !0),\r\n                                    lastPosition = seekNext(-1 !== lvclickPosition || isMask(0) ? lvclickPosition : 0);\r\n                            if (clickPosition < lastPosition) {\r\n                                selectedCaret.end = selectedCaret.begin = isMask(clickPosition, !0) || isMask(clickPosition - 1, !0) ? clickPosition : seekNext(clickPosition);\r\n                            } else {\r\n                                var lvp = maskset.validPositions[lvclickPosition],\r\n                                        tt = getTestTemplate(lastPosition, lvp ? lvp.match.locator : void 0, lvp),\r\n                                        placeholder = getPlaceholder(lastPosition, tt.match);\r\n                                if (\"\" !== placeholder && getBuffer()[lastPosition] !== placeholder && !0 !== tt.match.optionalQuantifier && !0 !== tt.match.newBlockMarker || !isMask(lastPosition, opts.keepStatic) && tt.match.def === placeholder) {\r\n                                    var newPos = seekNext(lastPosition);\r\n                                    (newPos <= clickPosition || clickPosition === lastPosition) && (lastPosition = newPos);\r\n                                }\r\n                                selectedCaret.end = selectedCaret.begin = lastPosition;\r\n                            }\r\n                    }\r\n                    return selectedCaret;\r\n                }\r\n            }\r\n\r\n            var EventRuler = {\r\n                on: function on(input, eventName, eventHandler) {\r\n                    var ev = function ev(e) {\r\n                        e.originalEvent && (e = e.originalEvent || e, arguments[0] = e);\r\n                        var that = this, args;\r\n                        if (void 0 === that.inputmask && \"FORM\" !== this.nodeName) {\r\n                            var imOpts = $.data(that, \"_inputmask_opts\");\r\n                            imOpts ? new Inputmask(imOpts).mask(that) : EventRuler.off(that);\r\n                        } else {\r\n                            if (\"setvalue\" === e.type || \"FORM\" === this.nodeName || !(that.disabled || that.readOnly && !(\"keydown\" === e.type && e.ctrlKey && 67 === e.keyCode || !1 === opts.tabThrough && e.keyCode === keyCode.TAB))) {\r\n                                switch (e.type) {\r\n                                    case \"input\":\r\n                                        if (!0 === skipInputEvent || e.inputType && \"insertCompositionText\" === e.inputType) {\r\n                                            return skipInputEvent = !1,\r\n                                                    e.preventDefault();\r\n                                        }\r\n                                        break;\r\n\r\n                                    case \"keydown\":\r\n                                        skipKeyPressEvent = !1, skipInputEvent = !1;\r\n                                        break;\r\n\r\n                                    case \"keypress\":\r\n                                        if (!0 === skipKeyPressEvent) {\r\n                                            return e.preventDefault();\r\n                                        }\r\n                                        skipKeyPressEvent = !0;\r\n                                        break;\r\n\r\n                                    case \"click\":\r\n                                    case \"focus\":\r\n                                        return validationEvent ? (validationEvent = !1, input.blur(), HandleNativePlaceholder(input, (isRTL ? getBufferTemplate().slice().reverse() : getBufferTemplate()).join(\"\")),\r\n                                                setTimeout(function() {\r\n                                                    input.focus();\r\n                                                }, 3e3)) : (args = arguments, setTimeout(function() {\r\n                                            input.inputmask && eventHandler.apply(that, args);\r\n                                        }, 0)), !1;\r\n                                }\r\n                                var returnVal = eventHandler.apply(that, arguments);\r\n                                return !1 === returnVal && (e.preventDefault(), e.stopPropagation()), returnVal;\r\n                            }\r\n                            e.preventDefault();\r\n                        }\r\n                    };\r\n                    input.inputmask.events[eventName] = input.inputmask.events[eventName] || [], input.inputmask.events[eventName].push(ev),\r\n                            -1 !== $.inArray(eventName, [\"submit\", \"reset\"]) ? null !== input.form && $(input.form).on(eventName, ev) : $(input).on(eventName, ev);\r\n                },\r\n                off: function off(input, event) {\r\n                    var events;\r\n                    input.inputmask && input.inputmask.events && (event ? (events = [], events[event] = input.inputmask.events[event]) : events = input.inputmask.events,\r\n                            $.each(events, function(eventName, evArr) {\r\n                                for (; 0 < evArr.length;) {\r\n                                    var ev = evArr.pop();\r\n                                    -1 !== $.inArray(eventName, [\"submit\", \"reset\"]) ? null !== input.form && $(input.form).off(eventName, ev) : $(input).off(eventName, ev);\r\n                                }\r\n                                delete input.inputmask.events[eventName];\r\n                            }));\r\n                }\r\n            }, EventHandlers = {\r\n                keydownEvent: function keydownEvent(e) {\r\n                    var input = this, $input = $(input), k = e.keyCode, pos = caret(input),\r\n                            kdResult = opts.onKeyDown.call(this, e, getBuffer(), pos, opts);\r\n                    if (void 0 !== kdResult) {\r\n                        return kdResult;\r\n                    }\r\n                    if (k === keyCode.BACKSPACE || k === keyCode.DELETE || iphone && k === keyCode.BACKSPACE_SAFARI || e.ctrlKey && k === keyCode.X && !(\"oncut\" in input)) {\r\n                        e.preventDefault(),\r\n                                handleRemove(input, k, pos), writeBuffer(input, getBuffer(!0), maskset.p, e, input.inputmask._valueGet() !== getBuffer().join(\"\"));\r\n                    } else if (k === keyCode.END || k === keyCode.PAGE_DOWN) {\r\n                        e.preventDefault();\r\n                        var caretPos = seekNext(getLastValidPosition());\r\n                        caret(input, e.shiftKey ? pos.begin : caretPos, caretPos, !0);\r\n                    } else {\r\n                        k === keyCode.HOME && !e.shiftKey || k === keyCode.PAGE_UP ? (e.preventDefault(),\r\n                                caret(input, 0, e.shiftKey ? pos.begin : 0, !0)) : (opts.undoOnEscape && k === keyCode.ESCAPE || 90 === k && e.ctrlKey) && !0 !== e.altKey ? (checkVal(input, !0, !1, undoValue.split(\"\")),\r\n                                $input.trigger(\"click\")) : !0 === opts.tabThrough && k === keyCode.TAB ? (!0 === e.shiftKey ? (!0 === getTest(pos.begin).match.static && (pos.begin = seekNext(pos.begin)),\r\n                                pos.end = seekPrevious(pos.begin, !0), pos.begin = seekPrevious(pos.end, !0)) : (pos.begin = seekNext(pos.begin, !0),\r\n                                pos.end = seekNext(pos.begin, !0), pos.end < maskset.maskLength && pos.end--), pos.begin < maskset.maskLength && (e.preventDefault(),\r\n                                caret(input, pos.begin, pos.end))) : e.shiftKey || opts.insertModeVisual && !1 === opts.insertMode && (k === keyCode.RIGHT ? setTimeout(function() {\r\n                            var caretPos = caret(input);\r\n                            caret(input, caretPos.begin);\r\n                        }, 0) : k === keyCode.LEFT && setTimeout(function() {\r\n                            var caretPos_begin = translatePosition(input.inputmask.caretPos.begin),\r\n                                    caretPos_end = translatePosition(input.inputmask.caretPos.end);\r\n                            caret(input, isRTL ? caretPos_begin + (caretPos_begin === maskset.maskLength ? 0 : 1) : caretPos_begin - (0 === caretPos_begin ? 0 : 1));\r\n                        }, 0));\r\n                    }\r\n                    ignorable = -1 !== $.inArray(k, opts.ignorables);\r\n                },\r\n                keypressEvent: function keypressEvent(e, checkval, writeOut, strict, ndx) {\r\n                    var input = this, $input = $(input), k = e.which || e.charCode || e.keyCode;\r\n                    if (!(!0 === checkval || e.ctrlKey && e.altKey) && (e.ctrlKey || e.metaKey || ignorable)) {\r\n                        return k === keyCode.ENTER && undoValue !== getBuffer().join(\"\") && (undoValue = getBuffer().join(\"\"),\r\n                                setTimeout(function() {\r\n                                    $input.trigger(\"change\");\r\n                                }, 0)), skipInputEvent = !0, !0;\r\n                    }\r\n                    if (k) {\r\n                        44 !== k && 46 !== k || 3 !== e.location || \"\" === opts.radixPoint || (k = opts.radixPoint.charCodeAt(0));\r\n                        var pos = checkval ? {\r\n                            begin: ndx,\r\n                            end: ndx\r\n                        } : caret(input), forwardPosition, c = String.fromCharCode(k);\r\n                        maskset.writeOutBuffer = !0;\r\n                        var valResult = isValid(pos, c, strict);\r\n                        if (!1 !== valResult && (resetMaskSet(!0), forwardPosition = void 0 !== valResult.caret ? valResult.caret : seekNext(valResult.pos.begin ? valResult.pos.begin : valResult.pos),\r\n                                maskset.p = forwardPosition), forwardPosition = opts.numericInput && void 0 === valResult.caret ? seekPrevious(forwardPosition) : forwardPosition,\r\n                        !1 !== writeOut && (setTimeout(function() {\r\n                            opts.onKeyValidation.call(input, k, valResult);\r\n                        }, 0), maskset.writeOutBuffer && !1 !== valResult)) {\r\n                            var buffer = getBuffer();\r\n                            writeBuffer(input, buffer, forwardPosition, e, !0 !== checkval);\r\n                        }\r\n                        if (e.preventDefault(), checkval) {\r\n                            return !1 !== valResult && (valResult.forwardPosition = forwardPosition),\r\n                                    valResult;\r\n                        }\r\n                    }\r\n                },\r\n                pasteEvent: function pasteEvent(e) {\r\n                    var input = this, inputValue = this.inputmask._valueGet(!0), caretPos = caret(this), tempValue;\r\n                    isRTL && (tempValue = caretPos.end, caretPos.end = caretPos.begin, caretPos.begin = tempValue);\r\n                    var valueBeforeCaret = inputValue.substr(0, caretPos.begin),\r\n                            valueAfterCaret = inputValue.substr(caretPos.end, inputValue.length);\r\n                    if (valueBeforeCaret == (isRTL ? getBufferTemplate().slice().reverse() : getBufferTemplate()).slice(0, caretPos.begin).join(\"\") && (valueBeforeCaret = \"\"),\r\n                    valueAfterCaret == (isRTL ? getBufferTemplate().slice().reverse() : getBufferTemplate()).slice(caretPos.end).join(\"\") && (valueAfterCaret = \"\"),\r\n                    window.clipboardData && window.clipboardData.getData) {\r\n                        inputValue = valueBeforeCaret + window.clipboardData.getData(\"Text\") + valueAfterCaret;\r\n                    } else {\r\n                        if (!e.clipboardData || !e.clipboardData.getData) {\r\n                            return !0;\r\n                        }\r\n                        inputValue = valueBeforeCaret + e.clipboardData.getData(\"text/plain\") + valueAfterCaret;\r\n                    }\r\n                    var pasteValue = inputValue;\r\n                    if ($.isFunction(opts.onBeforePaste)) {\r\n                        if (pasteValue = opts.onBeforePaste.call(inputmask, inputValue, opts), !1 === pasteValue) {\r\n                            return e.preventDefault();\r\n                        }\r\n                        pasteValue = pasteValue || inputValue;\r\n                    }\r\n                    return checkVal(this, !1, !1, pasteValue.toString().split(\"\")), writeBuffer(this, getBuffer(), seekNext(getLastValidPosition()), e, undoValue !== getBuffer().join(\"\")),\r\n                            e.preventDefault();\r\n                },\r\n                inputFallBackEvent: function inputFallBackEvent(e) {\r\n                    function ieMobileHandler(input, inputValue, caretPos) {\r\n                        if (iemobile) {\r\n                            var inputChar = inputValue.replace(getBuffer().join(\"\"), \"\");\r\n                            if (1 === inputChar.length) {\r\n                                var iv = inputValue.split(\"\");\r\n                                iv.splice(caretPos.begin, 0, inputChar), inputValue = iv.join(\"\");\r\n                            }\r\n                        }\r\n                        return inputValue;\r\n                    }\r\n\r\n                    function analyseChanges(inputValue, buffer, caretPos) {\r\n                        for (var frontPart = inputValue.substr(0, caretPos.begin).split(\"\"), backPart = inputValue.substr(caretPos.begin).split(\"\"), frontBufferPart = buffer.substr(0, caretPos.begin).split(\"\"), backBufferPart = buffer.substr(caretPos.begin).split(\"\"), fpl = frontPart.length >= frontBufferPart.length ? frontPart.length : frontBufferPart.length, bpl = backPart.length >= backBufferPart.length ? backPart.length : backBufferPart.length, bl, i, action = \"\", data = [], marker = \"~\", placeholder; frontPart.length < fpl;) {\r\n                            frontPart.push(\"~\");\r\n                        }\r\n                        for (; frontBufferPart.length < fpl;) {\r\n                            frontBufferPart.push(\"~\");\r\n                        }\r\n                        for (; backPart.length < bpl;) {\r\n                            backPart.unshift(\"~\");\r\n                        }\r\n                        for (; backBufferPart.length < bpl;) {\r\n                            backBufferPart.unshift(\"~\");\r\n                        }\r\n                        var newBuffer = frontPart.concat(backPart), oldBuffer = frontBufferPart.concat(backBufferPart);\r\n                        for (i = 0, bl = newBuffer.length; i < bl; i++) {\r\n                            switch (placeholder = getPlaceholder(translatePosition(i)),\r\n                                    action) {\r\n                                case \"insertText\":\r\n                                    oldBuffer[i - 1] === newBuffer[i] && caretPos.begin == newBuffer.length - 1 && data.push(newBuffer[i]),\r\n                                            i = bl;\r\n                                    break;\r\n\r\n                                case \"insertReplacementText\":\r\n                                    \"~\" === newBuffer[i] ? caretPos.end++ : i = bl;\r\n                                    break;\r\n\r\n                                case \"deleteContentBackward\":\r\n                                    \"~\" === newBuffer[i] ? caretPos.end++ : i = bl;\r\n                                    break;\r\n\r\n                                default:\r\n                                    newBuffer[i] !== oldBuffer[i] && (\"~\" !== newBuffer[i + 1] && newBuffer[i + 1] !== placeholder && void 0 !== newBuffer[i + 1] || (oldBuffer[i] !== placeholder || \"~\" !== oldBuffer[i + 1]) && \"~\" !== oldBuffer[i] ? \"~\" === oldBuffer[i + 1] && oldBuffer[i] === newBuffer[i + 1] ? (action = \"insertText\",\r\n                                            data.push(newBuffer[i]), caretPos.begin--, caretPos.end--) : newBuffer[i] !== placeholder && \"~\" !== newBuffer[i] && (\"~\" === newBuffer[i + 1] || oldBuffer[i] !== newBuffer[i] && oldBuffer[i + 1] === newBuffer[i + 1]) ? (action = \"insertReplacementText\",\r\n                                            data.push(newBuffer[i]), caretPos.begin--) : \"~\" === newBuffer[i] ? (action = \"deleteContentBackward\",\r\n                                    !isMask(translatePosition(i), !0) && oldBuffer[i] !== opts.radixPoint || caretPos.end++) : i = bl : (action = \"insertText\",\r\n                                            data.push(newBuffer[i]), caretPos.begin--, caretPos.end--));\r\n                                    break;\r\n                            }\r\n                        }\r\n                        return {\r\n                            action: action,\r\n                            data: data,\r\n                            caret: caretPos\r\n                        };\r\n                    }\r\n\r\n                    var input = this, inputValue = input.inputmask._valueGet(!0),\r\n                            buffer = (isRTL ? getBuffer().slice().reverse() : getBuffer()).join(\"\"),\r\n                            caretPos = caret(input, void 0, void 0, !0);\r\n                    if (buffer !== inputValue) {\r\n                        inputValue = ieMobileHandler(input, inputValue, caretPos);\r\n                        var changes = analyseChanges(inputValue, buffer, caretPos);\r\n                        switch ((input.inputmask.shadowRoot || document).activeElement !== input && input.focus(),\r\n                                writeBuffer(input, getBuffer()), caret(input, caretPos.begin, caretPos.end, !0),\r\n                                changes.action) {\r\n                            case \"insertText\":\r\n                            case \"insertReplacementText\":\r\n                                $.each(changes.data, function(ndx, entry) {\r\n                                    var keypress = new $.Event(\"keypress\");\r\n                                    keypress.which = entry.charCodeAt(0), ignorable = !1, EventHandlers.keypressEvent.call(input, keypress);\r\n                                }), setTimeout(function() {\r\n                                    $el.trigger(\"keyup\");\r\n                                }, 0);\r\n                                break;\r\n\r\n                            case \"deleteContentBackward\":\r\n                                var keydown = new $.Event(\"keydown\");\r\n                                keydown.keyCode = keyCode.BACKSPACE, EventHandlers.keydownEvent.call(input, keydown);\r\n                                break;\r\n\r\n                            default:\r\n                                applyInputValue(input, inputValue);\r\n                                break;\r\n                        }\r\n                        e.preventDefault();\r\n                    }\r\n                },\r\n                compositionendEvent: function compositionendEvent(e) {\r\n                    $el.trigger(\"input\");\r\n                },\r\n                setValueEvent: function setValueEvent(e, argument_1, argument_2) {\r\n                    var input = this, value = e && e.detail ? e.detail[0] : argument_1;\r\n                    void 0 === value && (value = this.inputmask._valueGet(!0)), applyInputValue(this, value),\r\n                    (e.detail && void 0 !== e.detail[1] || void 0 !== argument_2) && caret(this, e.detail ? e.detail[1] : argument_2);\r\n                },\r\n                focusEvent: function focusEvent(e) {\r\n                    var input = this, nptValue = this.inputmask._valueGet();\r\n                    opts.showMaskOnFocus && nptValue !== getBuffer().join(\"\") && writeBuffer(this, getBuffer(), seekNext(getLastValidPosition())),\r\n                    !0 !== opts.positionCaretOnTab || !1 !== mouseEnter || isComplete(getBuffer()) && -1 !== getLastValidPosition() || EventHandlers.clickEvent.apply(this, [e, !0]),\r\n                            undoValue = getBuffer().join(\"\");\r\n                },\r\n                invalidEvent: function invalidEvent(e) {\r\n                    validationEvent = !0;\r\n                },\r\n                mouseleaveEvent: function mouseleaveEvent() {\r\n                    var input = this;\r\n                    mouseEnter = !1, opts.clearMaskOnLostFocus && (this.inputmask.shadowRoot || document).activeElement !== this && HandleNativePlaceholder(this, originalPlaceholder);\r\n                },\r\n                clickEvent: function clickEvent(e, tabbed) {\r\n                    var input = this;\r\n                    if ((this.inputmask.shadowRoot || document).activeElement === this) {\r\n                        var newCaretPosition = determineNewCaretPosition(caret(this), tabbed);\r\n                        void 0 !== newCaretPosition && caret(this, newCaretPosition);\r\n                    }\r\n                },\r\n                cutEvent: function cutEvent(e) {\r\n                    var input = this, pos = caret(this), clipboardData = window.clipboardData || e.clipboardData,\r\n                            clipData = isRTL ? getBuffer().slice(pos.end, pos.begin) : getBuffer().slice(pos.begin, pos.end);\r\n                    clipboardData.setData(\"text\", isRTL ? clipData.reverse().join(\"\") : clipData.join(\"\")),\r\n                    document.execCommand && document.execCommand(\"copy\"), handleRemove(this, keyCode.DELETE, pos),\r\n                            writeBuffer(this, getBuffer(), maskset.p, e, undoValue !== getBuffer().join(\"\"));\r\n                },\r\n                blurEvent: function blurEvent(e) {\r\n                    var $input = $(this), input = this;\r\n                    if (this.inputmask) {\r\n                        HandleNativePlaceholder(this, originalPlaceholder);\r\n                        var nptValue = this.inputmask._valueGet(), buffer = getBuffer().slice();\r\n                        \"\" !== nptValue && (opts.clearMaskOnLostFocus && (-1 === getLastValidPosition() && nptValue === getBufferTemplate().join(\"\") ? buffer = [] : clearOptionalTail(buffer)),\r\n                        !1 === isComplete(buffer) && (setTimeout(function() {\r\n                            $input.trigger(\"incomplete\");\r\n                        }, 0), opts.clearIncomplete && (resetMaskSet(), buffer = opts.clearMaskOnLostFocus ? [] : getBufferTemplate().slice())),\r\n                                writeBuffer(this, buffer, void 0, e)), undoValue !== getBuffer().join(\"\") && (undoValue = getBuffer().join(\"\"),\r\n                                $input.trigger(\"change\"));\r\n                    }\r\n                },\r\n                mouseenterEvent: function mouseenterEvent() {\r\n                    var input = this;\r\n                    mouseEnter = !0, (this.inputmask.shadowRoot || document).activeElement !== this && (null == originalPlaceholder && this.placeholder !== originalPlaceholder && (originalPlaceholder = this.placeholder),\r\n                                     opts.showMaskOnHover && HandleNativePlaceholder(this, (isRTL ? getBufferTemplate().slice().reverse() : getBufferTemplate()).join(\"\")));\r\n                },\r\n                submitEvent: function submitEvent() {\r\n                    undoValue !== getBuffer().join(\"\") && $el.trigger(\"change\"), opts.clearMaskOnLostFocus && -1 === getLastValidPosition() && el.inputmask._valueGet && el.inputmask._valueGet() === getBufferTemplate().join(\"\") && el.inputmask._valueSet(\"\"),\r\n                    opts.clearIncomplete && !1 === isComplete(getBuffer()) && el.inputmask._valueSet(\"\"),\r\n                    opts.removeMaskOnSubmit && (el.inputmask._valueSet(el.inputmask.unmaskedvalue(), !0),\r\n                            setTimeout(function() {\r\n                                writeBuffer(el, getBuffer());\r\n                            }, 0));\r\n                },\r\n                resetEvent: function resetEvent() {\r\n                    el.inputmask.refreshValue = !0, setTimeout(function() {\r\n                        applyInputValue(el, el.inputmask._valueGet(!0));\r\n                    }, 0);\r\n                }\r\n            }, valueBuffer;\r\n\r\n            function checkVal(input, writeOut, strict, nptvl, initiatingEvent) {\r\n                var inputmask = this || input.inputmask, inputValue = nptvl.slice(), charCodes = \"\", initialNdx = -1,\r\n                        result = void 0;\r\n\r\n                function isTemplateMatch(ndx, charCodes) {\r\n                    for (var targetTemplate = getMaskTemplate(!0, 0).slice(ndx, seekNext(ndx)).join(\"\").replace(/'/g, \"\"), charCodeNdx = targetTemplate.indexOf(charCodes); 0 < charCodeNdx && \" \" === targetTemplate[charCodeNdx - 1];) {\r\n                        charCodeNdx--;\r\n                    }\r\n                    var match = 0 === charCodeNdx && !isMask(ndx) && (getTest(ndx).match.nativeDef === charCodes.charAt(0) || !0 === getTest(ndx).match.static && getTest(ndx).match.nativeDef === \"'\" + charCodes.charAt(0) || \" \" === getTest(ndx).match.nativeDef && (getTest(ndx + 1).match.nativeDef === charCodes.charAt(0) || !0 === getTest(ndx + 1).match.static && getTest(ndx + 1).match.nativeDef === \"'\" + charCodes.charAt(0)));\r\n                    if (!match && 0 < charCodeNdx && !isMask(ndx, !1, !0)) {\r\n                        var nextPos = seekNext(ndx);\r\n                        inputmask.caretPos.begin < nextPos && (inputmask.caretPos = {\r\n                            begin: nextPos\r\n                        });\r\n                    }\r\n                    return match;\r\n                }\r\n\r\n                resetMaskSet(), maskset.tests = {}, initialNdx = opts.radixPoint ? determineNewCaretPosition({\r\n                                                                                                                 begin: 0,\r\n                                                                                                                 end: 0\r\n                                                                                                             }).begin : 0, maskset.p = initialNdx, inputmask.caretPos = {\r\n                    begin: initialNdx\r\n                };\r\n                var staticMatches = [], prevCaretPos = inputmask.caretPos;\r\n                if ($.each(inputValue, function(ndx, charCode) {\r\n                    if (void 0 !== charCode) {\r\n                        if (void 0 === maskset.validPositions[ndx] && inputValue[ndx] === getPlaceholder(ndx) && isMask(ndx, !0) && !1 === isValid(ndx, inputValue[ndx], !0, void 0, void 0, !0)) {\r\n                            maskset.p++;\r\n                            if ((charCode === inputmask.opts.placeholder) && (inputmask.opts.partialSearchMask === !0)) {\r\n                                inputmask.caretPos = {\r\n                                    begin: ndx + 1,\r\n                                    end: ndx + 1\r\n                                };\r\n                            }\r\n                        } else {\r\n                            var keypress = new $.Event(\"_checkval\");\r\n                            keypress.which = charCode.toString().charCodeAt(0), charCodes += charCode;\r\n                            var lvp = getLastValidPosition(void 0, !0);\r\n                            isTemplateMatch(initialNdx, charCodes) ? result = EventHandlers.keypressEvent.call(input, keypress, !0, !1, strict, lvp + 1) : (result = EventHandlers.keypressEvent.call(input, keypress, !0, !1, strict, inputmask.caretPos.begin),\r\n                            result && (initialNdx = inputmask.caretPos.begin + 1, charCodes = \"\")), result ? (void 0 !== result.pos && maskset.validPositions[result.pos] && !0 === maskset.validPositions[result.pos].match.static && void 0 === maskset.validPositions[result.pos].alternation && (staticMatches.push(result.pos),\r\n                            isRTL || (result.forwardPosition = result.pos + 1)), writeBuffer(void 0, getBuffer(), result.forwardPosition, keypress, !1),\r\n                                    inputmask.caretPos = {\r\n                                        begin: result.forwardPosition,\r\n                                        end: result.forwardPosition\r\n                                    }, prevCaretPos = inputmask.caretPos) : inputmask.caretPos = prevCaretPos;\r\n                        }\r\n                    }\r\n                }), 0 < staticMatches.length) {\r\n                    var sndx, validPos, nextValid = seekNext(-1, void 0, !1);\r\n                    if (!isComplete(getBuffer()) && staticMatches.length <= nextValid || isComplete(getBuffer()) && 0 < staticMatches.length && staticMatches.length !== nextValid && 0 === staticMatches[0]) {\r\n                        for (var nextSndx = nextValid; void 0 !== (sndx = staticMatches.shift());) {\r\n                            var keypress = new $.Event(\"_checkval\");\r\n                            if (validPos = maskset.validPositions[sndx], validPos.generatedInput = !0, keypress.which = validPos.input.charCodeAt(0),\r\n                                    result = EventHandlers.keypressEvent.call(input, keypress, !0, !1, strict, nextSndx),\r\n                            result && void 0 !== result.pos && result.pos !== sndx && maskset.validPositions[result.pos] && !0 === maskset.validPositions[result.pos].match.static) {\r\n                                staticMatches.push(result.pos);\r\n                            } else if (!result) {\r\n                                break;\r\n                            }\r\n                            nextSndx++;\r\n                        }\r\n                    } else {\r\n                        for (; sndx = staticMatches.pop();) {\r\n                            validPos = maskset.validPositions[sndx],\r\n                            validPos && (validPos.generatedInput = !0);\r\n                        }\r\n                    }\r\n                }\r\n                if (writeOut) {\r\n                    for (var vndx in writeBuffer(input, getBuffer(), result ? result.forwardPosition : void 0, initiatingEvent || new $.Event(\"checkval\"), initiatingEvent && \"input\" === initiatingEvent.type),\r\n                            maskset.validPositions) {\r\n                        !0 !== maskset.validPositions[vndx].match.generated && delete maskset.validPositions[vndx].generatedInput;\r\n                    }\r\n                }\r\n            }\r\n\r\n            function unmaskedvalue(input) {\r\n                if (input) {\r\n                    if (void 0 === input.inputmask) {\r\n                        return input.value;\r\n                    }\r\n                    input.inputmask && input.inputmask.refreshValue && applyInputValue(input, input.inputmask._valueGet(!0));\r\n                }\r\n                var umValue = [], vps = maskset.validPositions;\r\n                for (var pndx in vps) {\r\n                    vps[pndx] && vps[pndx].match && (1 != vps[pndx].match.static || !0 !== vps[pndx].generatedInput) && umValue.push(vps[pndx].input);\r\n                }\r\n                var unmaskedValue = 0 === umValue.length ? \"\" : (isRTL ? umValue.reverse() : umValue).join(\"\");\r\n                if ($.isFunction(opts.onUnMask)) {\r\n                    var bufferValue = (isRTL ? getBuffer().slice().reverse() : getBuffer()).join(\"\");\r\n                    unmaskedValue = opts.onUnMask.call(inputmask, bufferValue, unmaskedValue, opts);\r\n                }\r\n                return unmaskedValue;\r\n            }\r\n\r\n            function translatePosition(pos) {\r\n                return !isRTL || \"number\" != typeof pos || opts.greedy && \"\" === opts.placeholder || !el || (pos = el.inputmask._valueGet().length - pos),\r\n                        pos;\r\n            }\r\n\r\n            function caret(input, begin, end, notranslate, isDelete) {\r\n                var range;\r\n                if (void 0 === begin) {\r\n                    return \"selectionStart\" in input && \"selectionEnd\" in input ? (begin = input.selectionStart,\r\n                            end = input.selectionEnd) : window.getSelection ? (range = window.getSelection().getRangeAt(0),\r\n                    range.commonAncestorContainer.parentNode !== input && range.commonAncestorContainer !== input || (begin = range.startOffset,\r\n                            end = range.endOffset)) : document.selection && document.selection.createRange && (range = document.selection.createRange(),\r\n                            begin = 0 - range.duplicate().moveStart(\"character\", -input.inputmask._valueGet().length),\r\n                            end = begin + range.text.length), {\r\n                        begin: notranslate ? begin : translatePosition(begin),\r\n                        end: notranslate ? end : translatePosition(end)\r\n                    };\r\n                }\r\n                if ($.isArray(begin) && (end = isRTL ? begin[0] : begin[1], begin = isRTL ? begin[1] : begin[0]),\r\n                void 0 !== begin.begin && (end = isRTL ? begin.begin : begin.end, begin = isRTL ? begin.end : begin.begin),\r\n                \"number\" == typeof begin) {\r\n                    begin = notranslate ? begin : translatePosition(begin), end = notranslate ? end : translatePosition(end),\r\n                            end = \"number\" == typeof end ? end : begin;\r\n                    var scrollCalc = parseInt(((input.ownerDocument.defaultView || window).getComputedStyle ? (input.ownerDocument.defaultView || window).getComputedStyle(input, null) : input.currentStyle).fontSize) * end;\r\n                    if (input.scrollLeft = scrollCalc > input.scrollWidth ? scrollCalc : 0, input.inputmask.caretPos = {\r\n                        begin: begin,\r\n                        end: end\r\n                    }, opts.insertModeVisual && !1 === opts.insertMode && begin === end && (isDelete || end++),\r\n                    input === (input.inputmask.shadowRoot || document).activeElement) {\r\n                        if (\"setSelectionRange\" in input) {\r\n                            input.setSelectionRange(begin, end);\r\n                        } else if (window.getSelection) {\r\n                            if (range = document.createRange(), void 0 === input.firstChild || null === input.firstChild) {\r\n                                var textNode = document.createTextNode(\"\");\r\n                                input.appendChild(textNode);\r\n                            }\r\n                            range.setStart(input.firstChild, begin < input.inputmask._valueGet().length ? begin : input.inputmask._valueGet().length),\r\n                                    range.setEnd(input.firstChild, end < input.inputmask._valueGet().length ? end : input.inputmask._valueGet().length),\r\n                                    range.collapse(!0);\r\n                            var sel = window.getSelection();\r\n                            sel.removeAllRanges(), sel.addRange(range);\r\n                        } else {\r\n                            input.createTextRange && (range = input.createTextRange(), range.collapse(!0),\r\n                                    range.moveEnd(\"character\", end), range.moveStart(\"character\", begin), range.select());\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n\r\n            function determineLastRequiredPosition(returnDefinition) {\r\n                var buffer = getMaskTemplate(!0, getLastValidPosition(), !0, !0), bl = buffer.length, pos,\r\n                        lvp = getLastValidPosition(), positions = {}, lvTest = maskset.validPositions[lvp],\r\n                        ndxIntlzr = void 0 !== lvTest ? lvTest.locator.slice() : void 0, testPos;\r\n                for (pos = lvp + 1; pos < buffer.length; pos++) {\r\n                    testPos = getTestTemplate(pos, ndxIntlzr, pos - 1),\r\n                            ndxIntlzr = testPos.locator.slice(), positions[pos] = $.extend(!0, {}, testPos);\r\n                }\r\n                var lvTestAlt = lvTest && void 0 !== lvTest.alternation ? lvTest.locator[lvTest.alternation] : void 0;\r\n                for (pos = bl - 1; lvp < pos && (testPos = positions[pos], (testPos.match.optionality || testPos.match.optionalQuantifier && testPos.match.newBlockMarker || lvTestAlt && (lvTestAlt !== positions[pos].locator[lvTest.alternation] && 1 != testPos.match.static || !0 === testPos.match.static && testPos.locator[lvTest.alternation] && checkAlternationMatch(testPos.locator[lvTest.alternation].toString().split(\",\"), lvTestAlt.toString().split(\",\")) && \"\" !== getTests(pos)[0].def)) && buffer[pos] === getPlaceholder(pos, testPos.match)); pos--) {\r\n                    bl--;\r\n                }\r\n                return returnDefinition ? {\r\n                    l: bl,\r\n                    def: positions[bl] ? positions[bl].match : void 0\r\n                } : bl;\r\n            }\r\n\r\n            function clearOptionalTail(buffer) {\r\n                buffer.length = 0;\r\n                for (var template = getMaskTemplate(!0, 0, !0, void 0, !0), lmnt; void 0 !== (lmnt = template.shift());) {\r\n                    buffer.push(lmnt);\r\n                }\r\n                return buffer;\r\n            }\r\n\r\n            function isComplete(buffer) {\r\n                if ($.isFunction(opts.isComplete)) {\r\n                    return opts.isComplete(buffer, opts);\r\n                }\r\n                if (\"*\" !== opts.repeat) {\r\n                    var complete = !1, lrp = determineLastRequiredPosition(!0), aml = seekPrevious(lrp.l);\r\n                    if (void 0 === lrp.def || lrp.def.newBlockMarker || lrp.def.optionality || lrp.def.optionalQuantifier) {\r\n                        complete = !0;\r\n                        for (var i = 0; i <= aml; i++) {\r\n                            var test = getTestTemplate(i).match;\r\n                            if (!0 !== test.static && void 0 === maskset.validPositions[i] && !0 !== test.optionality && !0 !== test.optionalQuantifier || !0 === test.static && buffer[i] !== getPlaceholder(i, test)) {\r\n                                complete = !1;\r\n                                break;\r\n                            }\r\n                        }\r\n                    }\r\n                    return complete;\r\n                }\r\n            }\r\n\r\n            function handleRemove(input, k, pos, strict, fromIsValid) {\r\n                if ((opts.numericInput || isRTL) && (k === keyCode.BACKSPACE ? k = keyCode.DELETE : k === keyCode.DELETE && (k = keyCode.BACKSPACE),\r\n                        isRTL)) {\r\n                    var pend = pos.end;\r\n                    pos.end = pos.begin, pos.begin = pend;\r\n                }\r\n                var lvp = getLastValidPosition(void 0, !0), offset;\r\n                if (pos.end >= getBuffer().length && lvp >= pos.end && (pos.end = lvp + 1), k === keyCode.BACKSPACE ? pos.end - pos.begin < 1 && (pos.begin = seekPrevious(pos.begin)) : k === keyCode.DELETE && pos.begin === pos.end && (pos.end = isMask(pos.end, !0, !0) ? pos.end + 1 : seekNext(pos.end) + 1),\r\n                !1 !== (offset = revalidateMask(pos))) {\r\n                    if (!0 !== strict && !1 !== opts.keepStatic || null !== opts.regex && -1 !== getTest(pos.begin).match.def.indexOf(\"|\")) {\r\n                        var result = alternate(!0);\r\n                        if (result) {\r\n                            var newPos = void 0 !== result.caret ? result.caret : result.pos ? seekNext(result.pos.begin ? result.pos.begin : result.pos) : getLastValidPosition(-1, !0);\r\n                            (k !== keyCode.DELETE || pos.begin > newPos) && pos.begin;\r\n                        }\r\n                    }\r\n                    !0 !== strict && (maskset.p = k === keyCode.DELETE ? pos.begin + offset : pos.begin);\r\n                }\r\n            }\r\n\r\n            function applyInputValue(input, value) {\r\n                input.inputmask.refreshValue = !1, $.isFunction(opts.onBeforeMask) && (value = opts.onBeforeMask.call(inputmask, value, opts) || value),\r\n                        value = value.toString().split(\"\"), checkVal(input, !0, !1, value), undoValue = getBuffer().join(\"\"),\r\n                (opts.clearMaskOnLostFocus || opts.clearIncomplete) && input.inputmask._valueGet() === getBufferTemplate().join(\"\") && -1 === getLastValidPosition() && input.inputmask._valueSet(\"\");\r\n            }\r\n\r\n            function mask(elem) {\r\n                function isElementTypeSupported(input, opts) {\r\n                    function patchValueProperty(npt) {\r\n                        var valueGet, valueSet;\r\n\r\n                        function patchValhook(type) {\r\n                            if ($.valHooks && (void 0 === $.valHooks[type] || !0 !== $.valHooks[type].inputmaskpatch)) {\r\n                                var valhookGet = $.valHooks[type] && $.valHooks[type].get ? $.valHooks[type].get : function(elem) {\r\n                                            return elem.value;\r\n                                        },\r\n                                        valhookSet = $.valHooks[type] && $.valHooks[type].set ? $.valHooks[type].set : function(elem, value) {\r\n                                            return elem.value = value, elem;\r\n                                        };\r\n                                $.valHooks[type] = {\r\n                                    get: function get(elem) {\r\n                                        if (elem.inputmask) {\r\n                                            if (elem.inputmask.opts.autoUnmask) {\r\n                                                return elem.inputmask.unmaskedvalue();\r\n                                            }\r\n                                            var result = valhookGet(elem);\r\n                                            return -1 !== getLastValidPosition(void 0, void 0, elem.inputmask.maskset.validPositions) || !0 !== opts.nullable ? result : \"\";\r\n                                        }\r\n                                        return valhookGet(elem);\r\n                                    },\r\n                                    set: function set(elem, value) {\r\n                                        var result = valhookSet(elem, value);\r\n                                        return elem.inputmask && applyInputValue(elem, value), result;\r\n                                    },\r\n                                    inputmaskpatch: !0\r\n                                };\r\n                            }\r\n                        }\r\n\r\n                        function getter() {\r\n                            return this.inputmask ? this.inputmask.opts.autoUnmask ? this.inputmask.unmaskedvalue() : -1 !== getLastValidPosition() || !0 !== opts.nullable ? (this.inputmask.shadowRoot || document.activeElement) === this && opts.clearMaskOnLostFocus ? (isRTL ? clearOptionalTail(getBuffer().slice()).reverse() : clearOptionalTail(getBuffer().slice())).join(\"\") : valueGet.call(this) : \"\" : valueGet.call(this);\r\n                        }\r\n\r\n                        function setter(value) {\r\n                            valueSet.call(this, value), this.inputmask && applyInputValue(this, value);\r\n                        }\r\n\r\n                        function installNativeValueSetFallback(npt) {\r\n                            EventRuler.on(npt, \"mouseenter\", function() {\r\n                                var input = this, value = this.inputmask._valueGet(!0);\r\n                                value !== (isRTL ? getBuffer().reverse() : getBuffer()).join(\"\") && applyInputValue(this, value);\r\n                            });\r\n                        }\r\n\r\n                        if (!npt.inputmask.__valueGet) {\r\n                            if (!0 !== opts.noValuePatching) {\r\n                                if (Object.getOwnPropertyDescriptor) {\r\n                                    \"function\" != typeof Object.getPrototypeOf && (Object.getPrototypeOf = \"object\" === _typeof(\"test\".__proto__) ? function(object) {\r\n                                        return object.__proto__;\r\n                                    } : function(object) {\r\n                                        return object.constructor.prototype;\r\n                                    });\r\n                                    var valueProperty = Object.getPrototypeOf ? Object.getOwnPropertyDescriptor(Object.getPrototypeOf(npt), \"value\") : void 0;\r\n                                    valueProperty && valueProperty.get && valueProperty.set ? (valueGet = valueProperty.get,\r\n                                            valueSet = valueProperty.set, Object.defineProperty(npt, \"value\", {\r\n                                        get: getter,\r\n                                        set: setter,\r\n                                        configurable: !0\r\n                                    })) : \"input\" !== npt.tagName.toLowerCase() && (valueGet = function valueGet() {\r\n                                        return this.textContent;\r\n                                    }, valueSet = function valueSet(value) {\r\n                                        this.textContent = value;\r\n                                    }, Object.defineProperty(npt, \"value\", {\r\n                                        get: getter,\r\n                                        set: setter,\r\n                                        configurable: !0\r\n                                    }));\r\n                                } else {\r\n                                    document.__lookupGetter__ && npt.__lookupGetter__(\"value\") && (valueGet = npt.__lookupGetter__(\"value\"),\r\n                                            valueSet = npt.__lookupSetter__(\"value\"), npt.__defineGetter__(\"value\", getter),\r\n                                            npt.__defineSetter__(\"value\", setter));\r\n                                }\r\n                                npt.inputmask.__valueGet = valueGet, npt.inputmask.__valueSet = valueSet;\r\n                            }\r\n                            npt.inputmask._valueGet = function(overruleRTL) {\r\n                                return isRTL && !0 !== overruleRTL ? valueGet.call(this.el).split(\"\").reverse().join(\"\") : valueGet.call(this.el);\r\n                            }, npt.inputmask._valueSet = function(value, overruleRTL) {\r\n                                valueSet.call(this.el, null == value ? \"\" : !0 !== overruleRTL && isRTL ? value.split(\"\").reverse().join(\"\") : value);\r\n                            }, void 0 === valueGet && (valueGet = function valueGet() {\r\n                                return this.value;\r\n                            }, valueSet = function valueSet(value) {\r\n                                this.value = value;\r\n                            }, patchValhook(npt.type), installNativeValueSetFallback(npt));\r\n                        }\r\n                    }\r\n\r\n                    \"textarea\" !== input.tagName.toLowerCase() && opts.ignorables.push(keyCode.ENTER);\r\n                    var elementType = input.getAttribute(\"type\"),\r\n                            isSupported = \"input\" === input.tagName.toLowerCase() && -1 !== $.inArray(elementType, opts.supportsInputType) || input.isContentEditable || \"textarea\" === input.tagName.toLowerCase();\r\n                    if (!isSupported) {\r\n                        if (\"input\" === input.tagName.toLowerCase()) {\r\n                            var el = document.createElement(\"input\");\r\n                            el.setAttribute(\"type\", elementType), isSupported = \"text\" === el.type, el = null;\r\n                        } else {\r\n                            isSupported = \"partial\";\r\n                        }\r\n                    }\r\n                    return !1 !== isSupported ? patchValueProperty(input) : input.inputmask = void 0,\r\n                            isSupported;\r\n                }\r\n\r\n                EventRuler.off(elem);\r\n                var isSupported = isElementTypeSupported(elem, opts);\r\n                if (!1 !== isSupported) {\r\n                    el = elem, $el = $(el), originalPlaceholder = el.placeholder, maxLength = void 0 !== el ? el.maxLength : void 0,\r\n                    -1 === maxLength && (maxLength = void 0), \"inputMode\" in el && null === el.getAttribute(\"inputmode\") && (el.inputMode = opts.inputmode,\r\n                            el.setAttribute(\"inputmode\", opts.inputmode)), !0 === isSupported && (opts.showMaskOnFocus = opts.showMaskOnFocus && -1 === [\"cc-number\", \"cc-exp\"].indexOf(el.autocomplete),\r\n                                                                           iphone && (opts.insertModeVisual = !1), EventRuler.on(el, \"submit\", EventHandlers.submitEvent),\r\n                            EventRuler.on(el, \"reset\", EventHandlers.resetEvent), EventRuler.on(el, \"blur\", EventHandlers.blurEvent),\r\n                            EventRuler.on(el, \"focus\", EventHandlers.focusEvent), EventRuler.on(el, \"invalid\", EventHandlers.invalidEvent),\r\n                            EventRuler.on(el, \"click\", EventHandlers.clickEvent), EventRuler.on(el, \"mouseleave\", EventHandlers.mouseleaveEvent),\r\n                            EventRuler.on(el, \"mouseenter\", EventHandlers.mouseenterEvent), EventRuler.on(el, \"paste\", EventHandlers.pasteEvent),\r\n                            EventRuler.on(el, \"cut\", EventHandlers.cutEvent), EventRuler.on(el, \"complete\", opts.oncomplete),\r\n                            EventRuler.on(el, \"incomplete\", opts.onincomplete), EventRuler.on(el, \"cleared\", opts.oncleared),\r\n                            mobile || !0 === opts.inputEventOnly ? el.removeAttribute(\"maxLength\") : (EventRuler.on(el, \"keydown\", EventHandlers.keydownEvent),\r\n                                    EventRuler.on(el, \"keypress\", EventHandlers.keypressEvent)), EventRuler.on(el, \"input\", EventHandlers.inputFallBackEvent),\r\n                            EventRuler.on(el, \"compositionend\", EventHandlers.compositionendEvent)), EventRuler.on(el, \"setvalue\", EventHandlers.setValueEvent),\r\n                            undoValue = getBufferTemplate().join(\"\");\r\n                    var activeElement = (el.inputmask.shadowRoot || document).activeElement;\r\n                    if (\"\" !== el.inputmask._valueGet(!0) || !1 === opts.clearMaskOnLostFocus || activeElement === el) {\r\n                        applyInputValue(el, el.inputmask._valueGet(!0), opts);\r\n                        var buffer = getBuffer().slice();\r\n                        !1 === isComplete(buffer) && opts.clearIncomplete && resetMaskSet(), opts.clearMaskOnLostFocus && activeElement !== el && (-1 === getLastValidPosition() ? buffer = [] : clearOptionalTail(buffer)),\r\n                        (!1 === opts.clearMaskOnLostFocus || opts.showMaskOnFocus && activeElement === el || \"\" !== el.inputmask._valueGet(!0)) && writeBuffer(el, buffer),\r\n                        activeElement === el && caret(el, seekNext(getLastValidPosition()));\r\n                    }\r\n                }\r\n            }\r\n\r\n            if (void 0 !== actionObj) {\r\n                switch (actionObj.action) {\r\n                    case \"isComplete\":\r\n                        return el = actionObj.el, isComplete(getBuffer());\r\n\r\n                    case \"unmaskedvalue\":\r\n                        return void 0 !== el && void 0 === actionObj.value || (valueBuffer = actionObj.value,\r\n                                valueBuffer = ($.isFunction(opts.onBeforeMask) && opts.onBeforeMask.call(inputmask, valueBuffer, opts) || valueBuffer).split(\"\"),\r\n                                checkVal.call(this, void 0, !1, !1, valueBuffer), $.isFunction(opts.onBeforeWrite) && opts.onBeforeWrite.call(inputmask, void 0, getBuffer(), 0, opts)),\r\n                                unmaskedvalue(el);\r\n\r\n                    case \"mask\":\r\n                        mask(el);\r\n                        break;\r\n\r\n                    case \"format\":\r\n                        return valueBuffer = ($.isFunction(opts.onBeforeMask) && opts.onBeforeMask.call(inputmask, actionObj.value, opts) || actionObj.value).split(\"\"),\r\n                                checkVal.call(this, void 0, !0, !1, valueBuffer), actionObj.metadata ? {\r\n                            value: isRTL ? getBuffer().slice().reverse().join(\"\") : getBuffer().join(\"\"),\r\n                            metadata: maskScope.call(this, {\r\n                                action: \"getmetadata\"\r\n                            }, maskset, opts)\r\n                        } : isRTL ? getBuffer().slice().reverse().join(\"\") : getBuffer().join(\"\");\r\n\r\n                    case \"isValid\":\r\n                        actionObj.value ? (valueBuffer = ($.isFunction(opts.onBeforeMask) && opts.onBeforeMask.call(inputmask, actionObj.value, opts) || actionObj.value).split(\"\"),\r\n                                checkVal.call(this, void 0, !0, !1, valueBuffer)) : actionObj.value = isRTL ? getBuffer().slice().reverse().join(\"\") : getBuffer().join(\"\");\r\n                        for (var buffer = getBuffer(), rl = determineLastRequiredPosition(), lmib = buffer.length - 1; rl < lmib && !isMask(lmib); lmib--) {\r\n                            ;\r\n                        }\r\n                        return buffer.splice(rl, lmib + 1 - rl), isComplete(buffer) && actionObj.value === (isRTL ? getBuffer().slice().reverse().join(\"\") : getBuffer().join(\"\"));\r\n\r\n                    case \"getemptymask\":\r\n                        return getBufferTemplate().join(\"\");\r\n\r\n                    case \"remove\":\r\n                        if (el && el.inputmask) {\r\n                            $.data(el, \"_inputmask_opts\", null), $el = $(el);\r\n                            var cv = opts.autoUnmask ? unmaskedvalue(el) : el.inputmask._valueGet(opts.autoUnmask),\r\n                                    valueProperty;\r\n                            cv !== getBufferTemplate().join(\"\") ? el.inputmask._valueSet(cv, opts.autoUnmask) : el.inputmask._valueSet(\"\"),\r\n                                    EventRuler.off(el), Object.getOwnPropertyDescriptor && Object.getPrototypeOf ? (valueProperty = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(el), \"value\"),\r\n                            valueProperty && el.inputmask.__valueGet && Object.defineProperty(el, \"value\", {\r\n                                get: el.inputmask.__valueGet,\r\n                                set: el.inputmask.__valueSet,\r\n                                configurable: !0\r\n                            })) : document.__lookupGetter__ && el.__lookupGetter__(\"value\") && el.inputmask.__valueGet && (el.__defineGetter__(\"value\", el.inputmask.__valueGet),\r\n                                    el.__defineSetter__(\"value\", el.inputmask.__valueSet)), el.inputmask = void 0;\r\n                        }\r\n                        return el;\r\n\r\n                    case \"getmetadata\":\r\n                        if ($.isArray(maskset.metadata)) {\r\n                            var maskTarget = getMaskTemplate(!0, 0, !1).join(\"\");\r\n                            return $.each(maskset.metadata, function(ndx, mtdt) {\r\n                                if (mtdt.mask === maskTarget) {\r\n                                    return maskTarget = mtdt, !1;\r\n                                }\r\n                            }), maskTarget;\r\n                        }\r\n                        return maskset.metadata;\r\n                }\r\n            }\r\n        };\r\n    }, function(module, exports, __webpack_require__) {\r\n        \"use strict\";\r\n\r\n        function _typeof(obj) {\r\n            return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function _typeof(obj) {\r\n                return typeof obj;\r\n            } : function _typeof(obj) {\r\n                return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\r\n            }, _typeof(obj);\r\n        }\r\n\r\n        var Inputmask = __webpack_require__(1), $ = Inputmask.dependencyLib, keyCode = __webpack_require__(0),\r\n                formatCode = {\r\n                    d: [\"[1-9]|[12][0-9]|3[01]\", Date.prototype.setDate, \"day\", Date.prototype.getDate],\r\n                    dd: [\"0[1-9]|[12][0-9]|3[01]\", Date.prototype.setDate, \"day\", function() {\r\n                        return pad(Date.prototype.getDate.call(this), 2);\r\n                    }],\r\n                    ddd: [\"\"],\r\n                    dddd: [\"\"],\r\n                    m: [\"[1-9]|1[012]\", Date.prototype.setMonth, \"month\", function() {\r\n                        return Date.prototype.getMonth.call(this) + 1;\r\n                    }],\r\n                    mm: [\"0[1-9]|1[012]\", Date.prototype.setMonth, \"month\", function() {\r\n                        return pad(Date.prototype.getMonth.call(this) + 1, 2);\r\n                    }],\r\n                    mmm: [\"\"],\r\n                    mmmm: [\"\"],\r\n                    yy: [\"[0-9]{2}\", Date.prototype.setFullYear, \"year\", function() {\r\n                        return pad(Date.prototype.getFullYear.call(this), 2);\r\n                    }],\r\n                    yyyy: [\"[0-9]{4}\", Date.prototype.setFullYear, \"year\", function() {\r\n                        return pad(Date.prototype.getFullYear.call(this), 4);\r\n                    }],\r\n                    h: [\"[1-9]|1[0-2]\", Date.prototype.setHours, \"hours\", Date.prototype.getHours],\r\n                    hh: [\"0[1-9]|1[0-2]\", Date.prototype.setHours, \"hours\", function() {\r\n                        return pad(Date.prototype.getHours.call(this), 2);\r\n                    }],\r\n                    hx: [function(x) {\r\n                        return \"[0-9]{\".concat(x, \"}\");\r\n                    }, Date.prototype.setHours, \"hours\", function(x) {\r\n                        return Date.prototype.getHours;\r\n                    }],\r\n                    H: [\"1?[0-9]|2[0-3]\", Date.prototype.setHours, \"hours\", Date.prototype.getHours],\r\n                    HH: [\"0[0-9]|1[0-9]|2[0-3]\", Date.prototype.setHours, \"hours\", function() {\r\n                        return pad(Date.prototype.getHours.call(this), 2);\r\n                    }],\r\n                    Hx: [function(x) {\r\n                        return \"[0-9]{\".concat(x, \"}\");\r\n                    }, Date.prototype.setHours, \"hours\", function(x) {\r\n                        return function() {\r\n                            return pad(Date.prototype.getHours.call(this), x);\r\n                        };\r\n                    }],\r\n                    M: [\"[1-5]?[0-9]\", Date.prototype.setMinutes, \"minutes\", Date.prototype.getMinutes],\r\n                    MM: [\"0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]\", Date.prototype.setMinutes, \"minutes\", function() {\r\n                        return pad(Date.prototype.getMinutes.call(this), 2);\r\n                    }],\r\n                    s: [\"[1-5]?[0-9]\", Date.prototype.setSeconds, \"seconds\", Date.prototype.getSeconds],\r\n                    ss: [\"0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]\", Date.prototype.setSeconds, \"seconds\", function() {\r\n                        return pad(Date.prototype.getSeconds.call(this), 2);\r\n                    }],\r\n                    l: [\"[0-9]{3}\", Date.prototype.setMilliseconds, \"milliseconds\", function() {\r\n                        return pad(Date.prototype.getMilliseconds.call(this), 3);\r\n                    }],\r\n                    L: [\"[0-9]{2}\", Date.prototype.setMilliseconds, \"milliseconds\", function() {\r\n                        return pad(Date.prototype.getMilliseconds.call(this), 2);\r\n                    }],\r\n                    t: [\"[ap]\"],\r\n                    tt: [\"[ap]m\"],\r\n                    T: [\"[AP]\"],\r\n                    TT: [\"[AP]M\"],\r\n                    Z: [\"\"],\r\n                    o: [\"\"],\r\n                    S: [\"\"]\r\n                }, formatAlias = {\r\n                    isoDate: \"yyyy-mm-dd\",\r\n                    isoTime: \"HH:MM:ss\",\r\n                    isoDateTime: \"yyyy-mm-dd'T'HH:MM:ss\",\r\n                    isoUtcDateTime: \"UTC:yyyy-mm-dd'T'HH:MM:ss'Z'\"\r\n                };\r\n\r\n        function formatcode(match) {\r\n            var dynMatches = new RegExp(\"\\\\d+$\").exec(match[0]);\r\n            if (dynMatches && void 0 !== dynMatches[0]) {\r\n                var fcode = formatCode[match[0][0] + \"x\"].slice(\"\");\r\n                return fcode[0] = fcode[0](dynMatches[0]), fcode[3] = fcode[3](dynMatches[0]), fcode;\r\n            }\r\n            if (formatCode[match[0]]) {\r\n                return formatCode[match[0]];\r\n            }\r\n        }\r\n\r\n        function getTokenizer(opts) {\r\n            if (!opts.tokenizer) {\r\n                var tokens = [], dyntokens = [];\r\n                for (var ndx in formatCode) {\r\n                    if (/\\.*x$/.test(ndx)) {\r\n                        var dynToken = ndx[0] + \"\\\\d+\";\r\n                        -1 === dyntokens.indexOf(dynToken) && dyntokens.push(dynToken);\r\n                    } else {\r\n                        -1 === tokens.indexOf(ndx[0]) && tokens.push(ndx[0]);\r\n                    }\r\n                }\r\n                opts.tokenizer = \"(\" + (0 < dyntokens.length ? dyntokens.join(\"|\") + \"|\" : \"\") + tokens.join(\"+|\") + \")+?|.\",\r\n                        opts.tokenizer = new RegExp(opts.tokenizer, \"g\");\r\n            }\r\n            return opts.tokenizer;\r\n        }\r\n\r\n        function isValidDate(dateParts, currentResult) {\r\n            return (!isFinite(dateParts.rawday) || \"29\" == dateParts.day && !isFinite(dateParts.rawyear) || new Date(dateParts.date.getFullYear(), isFinite(dateParts.rawmonth) ? dateParts.month : dateParts.date.getMonth() + 1, 0).getDate() >= dateParts.day) && currentResult;\r\n        }\r\n\r\n        function isDateInRange(dateParts, opts) {\r\n            var result = !0;\r\n            if (opts.min) {\r\n                if (dateParts.rawyear) {\r\n                    var rawYear = dateParts.rawyear.replace(/[^0-9]/g, \"\"),\r\n                            minYear = opts.min.year.substr(0, rawYear.length);\r\n                    result = minYear <= rawYear;\r\n                }\r\n                dateParts.year === dateParts.rawyear && opts.min.date.getTime() == opts.min.date.getTime() && (result = opts.min.date.getTime() <= dateParts.date.getTime());\r\n            }\r\n            return result && opts.max && opts.max.date.getTime() == opts.max.date.getTime() && (result = opts.max.date.getTime() >= dateParts.date.getTime()),\r\n                    result;\r\n        }\r\n\r\n        function parse(format, dateObjValue, opts, raw) {\r\n            var mask = \"\", match, fcode;\r\n            for (getTokenizer(opts).lastIndex = 0; match = getTokenizer(opts).exec(format);) {\r\n                if (void 0 === dateObjValue) {\r\n                    if (fcode = formatcode(match)) {\r\n                        mask += \"(\" + fcode[0] + \")\";\r\n                    } else {\r\n                        switch (match[0]) {\r\n                            case \"[\":\r\n                                mask += \"(\";\r\n                                break;\r\n\r\n                            case \"]\":\r\n                                mask += \")?\";\r\n                                break;\r\n\r\n                            default:\r\n                                mask += Inputmask.escapeRegex(match[0]);\r\n                        }\r\n                    }\r\n                } else if (fcode = formatcode(match)) {\r\n                    if (!0 !== raw && fcode[3]) {\r\n                        var getFn = fcode[3];\r\n                        mask += getFn.call(dateObjValue.date);\r\n                    } else {\r\n                        fcode[2] ? mask += dateObjValue[\"raw\" + fcode[2]] : mask += match[0];\r\n                    }\r\n                } else {\r\n                    mask += match[0];\r\n                }\r\n            }\r\n            return mask;\r\n        }\r\n\r\n        function pad(val, len) {\r\n            for (val = String(val), len = len || 2; val.length < len;) {\r\n                val = \"0\" + val;\r\n            }\r\n            return val;\r\n        }\r\n\r\n        function analyseMask(maskString, format, opts) {\r\n            var dateObj = {\r\n                date: new Date(1, 0, 1)\r\n            }, targetProp, mask = maskString, match, dateOperation;\r\n\r\n            function extendProperty(value) {\r\n                var correctedValue = value.replace(/[^0-9]/g, \"0\");\r\n                return correctedValue;\r\n            }\r\n\r\n            function setValue(dateObj, value, opts) {\r\n                dateObj[targetProp] = extendProperty(value), dateObj[\"raw\" + targetProp] = value,\r\n                void 0 !== dateOperation && dateOperation.call(dateObj.date, \"month\" == targetProp ? parseInt(dateObj[targetProp]) - 1 : dateObj[targetProp]);\r\n            }\r\n\r\n            if (\"string\" == typeof mask) {\r\n                for (getTokenizer(opts).lastIndex = 0; match = getTokenizer(opts).exec(format);) {\r\n                    var value = mask.slice(0, match[0].length);\r\n                    formatCode.hasOwnProperty(match[0]) && (targetProp = formatCode[match[0]][2], dateOperation = formatCode[match[0]][1],\r\n                            setValue(dateObj, value, opts)), mask = mask.slice(value.length);\r\n                }\r\n                return dateObj;\r\n            }\r\n            if (mask && \"object\" === _typeof(mask) && mask.hasOwnProperty(\"date\")) {\r\n                return mask;\r\n            }\r\n        }\r\n\r\n        function importDate(dateObj, opts) {\r\n            var match, date = \"\";\r\n            for (getTokenizer(opts).lastIndex = 0; match = getTokenizer(opts).exec(opts.inputFormat);) {\r\n                \"d\" === match[0].charAt(0) ? date += pad(dateObj.getDate(), match[0].length) : \"m\" === match[0].charAt(0) ? date += pad(dateObj.getMonth() + 1, match[0].length) : \"yyyy\" === match[0] ? date += dateObj.getFullYear().toString() : \"y\" === match[0].charAt(0) && (date += pad(dateObj.getYear(), match[0].length));\r\n            }\r\n            return date;\r\n        }\r\n\r\n        function getTokenMatch(pos, opts) {\r\n            var calcPos = 0, targetMatch, match, matchLength = 0;\r\n            for (getTokenizer(opts).lastIndex = 0; match = getTokenizer(opts).exec(opts.inputFormat);) {\r\n                var dynMatches = new RegExp(\"\\\\d+$\").exec(match[0]);\r\n                if (matchLength = dynMatches ? parseInt(dynMatches[0]) : match[0].length, calcPos += matchLength,\r\n                pos <= calcPos) {\r\n                    targetMatch = match, match = getTokenizer(opts).exec(opts.inputFormat);\r\n                    break;\r\n                }\r\n            }\r\n            return {\r\n                targetMatchIndex: calcPos - matchLength,\r\n                nextMatch: match,\r\n                targetMatch: targetMatch\r\n            };\r\n        }\r\n\r\n        Inputmask.extendAliases({\r\n                                    datetime: {\r\n                                        mask: function mask(opts) {\r\n                                            return opts.numericInput = !1, formatCode.S = opts.i18n.ordinalSuffix.join(\"|\"),\r\n                                                    opts.inputFormat = formatAlias[opts.inputFormat] || opts.inputFormat, opts.displayFormat = formatAlias[opts.displayFormat] || opts.displayFormat || opts.inputFormat,\r\n                                                    opts.outputFormat = formatAlias[opts.outputFormat] || opts.outputFormat || opts.inputFormat,\r\n                                                    opts.placeholder = \"\" !== opts.placeholder ? opts.placeholder : opts.inputFormat.replace(/[[\\]]/, \"\"),\r\n                                                    opts.regex = parse(opts.inputFormat, void 0, opts), opts.min = analyseMask(opts.min, opts.inputFormat, opts),\r\n                                                    opts.max = analyseMask(opts.max, opts.inputFormat, opts), null;\r\n                                        },\r\n                                        placeholder: \"\",\r\n                                        inputFormat: \"isoDateTime\",\r\n                                        displayFormat: void 0,\r\n                                        outputFormat: void 0,\r\n                                        min: null,\r\n                                        max: null,\r\n                                        skipOptionalPartCharacter: \"\",\r\n                                        i18n: {\r\n                                            dayNames: [\"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\", \"Sun\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\", \"Sunday\"],\r\n                                            monthNames: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\", \"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\r\n                                            ordinalSuffix: [\"st\", \"nd\", \"rd\", \"th\"]\r\n                                        },\r\n                                        preValidation: function preValidation(buffer, pos, c, isSelection, opts, maskset, caretPos, strict) {\r\n                                            if (strict) {\r\n                                                return !0;\r\n                                            }\r\n                                            if (isNaN(c) && buffer[pos] !== c) {\r\n                                                var tokenMatch = getTokenMatch(pos, opts);\r\n                                                if (tokenMatch.nextMatch && tokenMatch.nextMatch[0] === c && 1 < tokenMatch.targetMatch[0].length) {\r\n                                                    var validator = formatCode[tokenMatch.targetMatch[0]][0];\r\n                                                    if (new RegExp(validator).test(\"0\" + buffer[pos - 1])) {\r\n                                                        return buffer[pos] = buffer[pos - 1],\r\n                                                                buffer[pos - 1] = \"0\", {\r\n                                                            fuzzy: !0,\r\n                                                            buffer: buffer,\r\n                                                            refreshFromBuffer: {\r\n                                                                start: pos - 1,\r\n                                                                end: pos + 1\r\n                                                            },\r\n                                                            pos: pos + 1\r\n                                                        };\r\n                                                    }\r\n                                                }\r\n                                            }\r\n                                            return !0;\r\n                                        },\r\n                                        postValidation: function postValidation(buffer, pos, c, currentResult, opts, maskset, strict) {\r\n                                            if (strict) {\r\n                                                return !0;\r\n                                            }\r\n                                            var tokenMatch, validator;\r\n                                            if (!1 === currentResult) {\r\n                                                return tokenMatch = getTokenMatch(pos + 1, opts), tokenMatch.targetMatch && tokenMatch.targetMatchIndex === pos && 1 < tokenMatch.targetMatch[0].length && void 0 !== formatCode[tokenMatch.targetMatch[0]] && (validator = formatCode[tokenMatch.targetMatch[0]][0],\r\n                                                        new RegExp(validator).test(\"0\" + c)) ? {\r\n                                                    insert: [{\r\n                                                        pos: pos,\r\n                                                        c: \"0\"\r\n                                                    }, {\r\n                                                        pos: pos + 1,\r\n                                                        c: c\r\n                                                    }],\r\n                                                    pos: pos + 1\r\n                                                } : currentResult;\r\n                                            }\r\n                                            if (currentResult.fuzzy && (buffer = currentResult.buffer, pos = currentResult.pos),\r\n                                                    tokenMatch = getTokenMatch(pos, opts), tokenMatch.targetMatch && tokenMatch.targetMatch[0] && void 0 !== formatCode[tokenMatch.targetMatch[0]]) {\r\n                                                validator = formatCode[tokenMatch.targetMatch[0]][0];\r\n                                                var part = buffer.slice(tokenMatch.targetMatchIndex, tokenMatch.targetMatchIndex + tokenMatch.targetMatch[0].length);\r\n                                                !1 === new RegExp(validator).test(part.join(\"\")) && 2 === tokenMatch.targetMatch[0].length && maskset.validPositions[tokenMatch.targetMatchIndex] && maskset.validPositions[tokenMatch.targetMatchIndex + 1] && (maskset.validPositions[tokenMatch.targetMatchIndex + 1].input = \"0\");\r\n                                            }\r\n                                            var result = currentResult,\r\n                                                    dateParts = analyseMask(buffer.join(\"\"), opts.inputFormat, opts);\r\n                                            return result && dateParts.date.getTime() == dateParts.date.getTime() && (result = isValidDate(dateParts, result),\r\n                                                    result = result && isDateInRange(dateParts, opts)), pos && result && currentResult.pos !== pos ? {\r\n                                                buffer: parse(opts.inputFormat, dateParts, opts).split(\"\"),\r\n                                                refreshFromBuffer: {\r\n                                                    start: pos,\r\n                                                    end: currentResult.pos\r\n                                                }\r\n                                            } : result;\r\n                                        },\r\n                                        onKeyDown: function onKeyDown(e, buffer, caretPos, opts) {\r\n                                            var input = this;\r\n                                            e.ctrlKey && e.keyCode === keyCode.RIGHT && (this.inputmask._valueSet(importDate(new Date(), opts)),\r\n                                                    $(this).trigger(\"setvalue\"));\r\n                                        },\r\n                                        onUnMask: function onUnMask(maskedValue, unmaskedValue, opts) {\r\n                                            return unmaskedValue ? parse(opts.outputFormat, analyseMask(maskedValue, opts.inputFormat, opts), opts, !0) : unmaskedValue;\r\n                                        },\r\n                                        casing: function casing(elem, test, pos, validPositions) {\r\n                                            return 0 == test.nativeDef.indexOf(\"[ap]\") ? elem.toLowerCase() : 0 == test.nativeDef.indexOf(\"[AP]\") ? elem.toUpperCase() : elem;\r\n                                        },\r\n                                        onBeforeMask: function onBeforeMask(initialValue, opts) {\r\n                                            return \"[object Date]\" === Object.prototype.toString.call(initialValue) && (initialValue = importDate(initialValue, opts)),\r\n                                                    initialValue;\r\n                                        },\r\n                                        insertMode: !1,\r\n                                        shiftPositions: !1,\r\n                                        keepStatic: !1,\r\n                                        inputmode: \"numeric\"\r\n                                    }\r\n                                }), module.exports = Inputmask;\r\n    }, function(module, exports, __webpack_require__) {\r\n        \"use strict\";\r\n        var Inputmask = __webpack_require__(1), $ = Inputmask.dependencyLib, keyCode = __webpack_require__(0);\r\n\r\n        function autoEscape(txt, opts) {\r\n            for (var escapedTxt = \"\", i = 0; i < txt.length; i++) {\r\n                Inputmask.prototype.definitions[txt.charAt(i)] || opts.definitions[txt.charAt(i)] || opts.optionalmarker[0] === txt.charAt(i) || opts.optionalmarker[1] === txt.charAt(i) || opts.quantifiermarker[0] === txt.charAt(i) || opts.quantifiermarker[1] === txt.charAt(i) || opts.groupmarker[0] === txt.charAt(i) || opts.groupmarker[1] === txt.charAt(i) || opts.alternatormarker === txt.charAt(i) ? escapedTxt += \"\\\\\" + txt.charAt(i) : escapedTxt += txt.charAt(i);\r\n            }\r\n            return escapedTxt;\r\n        }\r\n\r\n        function alignDigits(buffer, digits, opts, force) {\r\n            if (0 < buffer.length && 0 < digits && (!opts.digitsOptional || force)) {\r\n                var radixPosition = $.inArray(opts.radixPoint, buffer);\r\n                -1 === radixPosition && (buffer.push(opts.radixPoint), radixPosition = buffer.length - 1);\r\n                for (var i = 1; i <= digits; i++) {\r\n                    isFinite(buffer[radixPosition + i]) || (buffer[radixPosition + i] = \"0\");\r\n                }\r\n            }\r\n            return buffer;\r\n        }\r\n\r\n        function findValidator(symbol, maskset) {\r\n            var posNdx = 0;\r\n            if (\"+\" === symbol) {\r\n                for (posNdx in maskset.validPositions) {\r\n                    ;\r\n                }\r\n                posNdx = parseInt(posNdx);\r\n            }\r\n            for (var tstNdx in maskset.tests) {\r\n                if (tstNdx = parseInt(tstNdx), posNdx <= tstNdx) {\r\n                    for (var ndx = 0, ndxl = maskset.tests[tstNdx].length; ndx < ndxl; ndx++) {\r\n                        if ((void 0 === maskset.validPositions[tstNdx] || \"-\" === symbol) && maskset.tests[tstNdx][ndx].match.def === symbol) {\r\n                            return tstNdx + (void 0 !== maskset.validPositions[tstNdx] && \"-\" !== symbol ? 1 : 0);\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n            return posNdx;\r\n        }\r\n\r\n        function findValid(symbol, maskset) {\r\n            var ret = -1;\r\n            return $.each(maskset.validPositions, function(ndx, tst) {\r\n                if (tst && tst.match.def === symbol) {\r\n                    return ret = parseInt(ndx), !1;\r\n                }\r\n            }), ret;\r\n        }\r\n\r\n        function parseMinMaxOptions(opts) {\r\n            void 0 === opts.parseMinMaxOptions && (null !== opts.min && (opts.min = opts.min.toString().replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), \"g\"), \"\"),\r\n            \",\" === opts.radixPoint && (opts.min = opts.min.replace(opts.radixPoint, \".\")),\r\n                    opts.min = isFinite(opts.min) ? parseFloat(opts.min) : NaN, isNaN(opts.min) && (opts.min = Number.MIN_VALUE)),\r\n            null !== opts.max && (opts.max = opts.max.toString().replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), \"g\"), \"\"),\r\n            \",\" === opts.radixPoint && (opts.max = opts.max.replace(opts.radixPoint, \".\")),\r\n                    opts.max = isFinite(opts.max) ? parseFloat(opts.max) : NaN, isNaN(opts.max) && (opts.max = Number.MAX_VALUE)),\r\n                    opts.parseMinMaxOptions = \"done\");\r\n        }\r\n\r\n        function genMask(opts) {\r\n            opts.repeat = 0, opts.groupSeparator === opts.radixPoint && opts.digits && \"0\" !== opts.digits && (\".\" === opts.radixPoint ? opts.groupSeparator = \",\" : \",\" === opts.radixPoint ? opts.groupSeparator = \".\" : opts.groupSeparator = \"\"),\r\n            \" \" === opts.groupSeparator && (opts.skipOptionalPartCharacter = void 0), 1 < opts.placeholder.length && (opts.placeholder = opts.placeholder.charAt(0)),\r\n            \"radixFocus\" === opts.positionCaretOnClick && \"\" === opts.placeholder && (opts.positionCaretOnClick = \"lvp\");\r\n            var decimalDef = \"0\", radixPointDef = opts.radixPoint;\r\n            !0 === opts.numericInput && void 0 === opts.__financeInput ? (decimalDef = \"1\",\r\n                    opts.positionCaretOnClick = \"radixFocus\" === opts.positionCaretOnClick ? \"lvp\" : opts.positionCaretOnClick,\r\n                    opts.digitsOptional = !1, isNaN(opts.digits) && (opts.digits = 2), opts._radixDance = !1,\r\n                    radixPointDef = \",\" === opts.radixPoint ? \"?\" : \"!\", \"\" !== opts.radixPoint && void 0 === opts.definitions[radixPointDef] && (opts.definitions[radixPointDef] = {},\r\n                    opts.definitions[radixPointDef].validator = \"[\" + opts.radixPoint + \"]\", opts.definitions[radixPointDef].placeholder = opts.radixPoint,\r\n                    opts.definitions[radixPointDef].static = !0, opts.definitions[radixPointDef].generated = !0)) : (opts.__financeInput = !1,\r\n                    opts.numericInput = !0);\r\n            var mask = \"[+]\", altMask;\r\n            if (mask += autoEscape(opts.prefix, opts), \"\" !== opts.groupSeparator ? (void 0 === opts.definitions[opts.groupSeparator] && (opts.definitions[opts.groupSeparator] = {},\r\n                    opts.definitions[opts.groupSeparator].validator = \"[\" + opts.groupSeparator + \"]\",\r\n                    opts.definitions[opts.groupSeparator].placeholder = opts.groupSeparator, opts.definitions[opts.groupSeparator].static = !0,\r\n                    opts.definitions[opts.groupSeparator].generated = !0), mask += opts._mask(opts)) : mask += \"9{+}\",\r\n            void 0 !== opts.digits && 0 !== opts.digits) {\r\n                var dq = opts.digits.toString().split(\",\");\r\n                isFinite(dq[0]) && dq[1] && isFinite(dq[1]) ? mask += radixPointDef + decimalDef + \"{\" + opts.digits + \"}\" : (isNaN(opts.digits) || 0 < parseInt(opts.digits)) && (opts.digitsOptional ? (altMask = mask + radixPointDef + decimalDef + \"{0,\" + opts.digits + \"}\",\r\n                        opts.keepStatic = !0) : mask += radixPointDef + decimalDef + \"{\" + opts.digits + \"}\");\r\n            }\r\n            return mask += autoEscape(opts.suffix, opts), mask += \"[-]\", altMask && (mask = [altMask + autoEscape(opts.suffix, opts) + \"[-]\", mask]),\r\n                    opts.greedy = !1, parseMinMaxOptions(opts), mask;\r\n        }\r\n\r\n        function hanndleRadixDance(pos, c, radixPos, maskset, opts) {\r\n            return opts._radixDance && opts.numericInput && c !== opts.negationSymbol.back && pos <= radixPos && (0 < radixPos || c == opts.radixPoint) && (void 0 === maskset.validPositions[pos - 1] || maskset.validPositions[pos - 1].input !== opts.negationSymbol.back) && (pos -= 1),\r\n                    pos;\r\n        }\r\n\r\n        function decimalValidator(chrs, maskset, pos, strict, opts) {\r\n            var radixPos = maskset.buffer ? maskset.buffer.indexOf(opts.radixPoint) : -1,\r\n                    result = -1 !== radixPos && new RegExp(\"[0-9\\uff11-\\uff19]\").test(chrs);\r\n            return opts._radixDance && result && null == maskset.validPositions[radixPos] ? {\r\n                insert: {\r\n                    pos: radixPos === pos ? radixPos + 1 : radixPos,\r\n                    c: opts.radixPoint\r\n                },\r\n                pos: pos\r\n            } : result;\r\n        }\r\n\r\n        function checkForLeadingZeroes(buffer, opts) {\r\n            var numberMatches = new RegExp(\"(^\" + (\"\" !== opts.negationSymbol.front ? Inputmask.escapeRegex(opts.negationSymbol.front) + \"?\" : \"\") + Inputmask.escapeRegex(opts.prefix) + \")(.*)(\" + Inputmask.escapeRegex(opts.suffix) + (\"\" != opts.negationSymbol.back ? Inputmask.escapeRegex(opts.negationSymbol.back) + \"?\" : \"\") + \"$)\").exec(buffer.slice().reverse().join(\"\")),\r\n                    number = numberMatches ? numberMatches[2] : \"\", leadingzeroes = !1;\r\n            return number && (number = number.split(opts.radixPoint.charAt(0))[0], leadingzeroes = new RegExp(\"^[0\" + opts.groupSeparator + \"]*\").exec(number)),\r\n            !(!leadingzeroes || !(1 < leadingzeroes[0].length || 0 < leadingzeroes[0].length && leadingzeroes[0].length < number.length)) && leadingzeroes;\r\n        }\r\n\r\n        Inputmask.extendAliases({\r\n                                    numeric: {\r\n                                        mask: genMask,\r\n                                        _mask: function _mask(opts) {\r\n                                            return \"(\" + opts.groupSeparator + \"999){+|1}\";\r\n                                        },\r\n                                        digits: \"*\",\r\n                                        digitsOptional: !0,\r\n                                        enforceDigitsOnBlur: !1,\r\n                                        radixPoint: \".\",\r\n                                        positionCaretOnClick: \"radixFocus\",\r\n                                        _radixDance: !0,\r\n                                        groupSeparator: \"\",\r\n                                        allowMinus: !0,\r\n                                        negationSymbol: {\r\n                                            front: \"-\",\r\n                                            back: \"\"\r\n                                        },\r\n                                        prefix: \"\",\r\n                                        suffix: \"\",\r\n                                        min: null,\r\n                                        max: null,\r\n                                        step: 1,\r\n                                        unmaskAsNumber: !1,\r\n                                        roundingFN: Math.round,\r\n                                        inputmode: \"numeric\",\r\n                                        shortcuts: {\r\n                                            k: \"000\",\r\n                                            m: \"000000\"\r\n                                        },\r\n                                        placeholder: \"0\",\r\n                                        greedy: !1,\r\n                                        rightAlign: !0,\r\n                                        insertMode: !0,\r\n                                        autoUnmask: !1,\r\n                                        skipOptionalPartCharacter: \"\",\r\n                                        definitions: {\r\n                                            0: {\r\n                                                validator: decimalValidator\r\n                                            },\r\n                                            1: {\r\n                                                validator: decimalValidator,\r\n                                                definitionSymbol: \"9\"\r\n                                            },\r\n                                            \"+\": {\r\n                                                validator: function validator(chrs, maskset, pos, strict, opts) {\r\n                                                    return opts.allowMinus && (\"-\" === chrs || chrs === opts.negationSymbol.front);\r\n                                                }\r\n                                            },\r\n                                            \"-\": {\r\n                                                validator: function validator(chrs, maskset, pos, strict, opts) {\r\n                                                    return opts.allowMinus && chrs === opts.negationSymbol.back;\r\n                                                }\r\n                                            }\r\n                                        },\r\n                                        preValidation: function preValidation(buffer, pos, c, isSelection, opts, maskset, caretPos, strict) {\r\n                                            if (!1 !== opts.__financeInput && c === opts.radixPoint) {\r\n                                                return !1;\r\n                                            }\r\n                                            var pattern;\r\n                                            if (pattern = opts.shortcuts && opts.shortcuts[c]) {\r\n                                                if (1 < pattern.length) {\r\n                                                    for (var inserts = [], i = 0; i < pattern.length; i++) {\r\n                                                        inserts.push({\r\n                                                                         pos: pos + i,\r\n                                                                         c: pattern[i],\r\n                                                                         strict: !1\r\n                                                                     });\r\n                                                    }\r\n                                                }\r\n                                                return {\r\n                                                    insert: inserts\r\n                                                };\r\n                                            }\r\n                                            var radixPos = $.inArray(opts.radixPoint, buffer), initPos = pos;\r\n                                            if (pos = hanndleRadixDance(pos, c, radixPos, maskset, opts), \"-\" === c || c === opts.negationSymbol.front) {\r\n                                                if (!0 !== opts.allowMinus) {\r\n                                                    return !1;\r\n                                                }\r\n                                                var isNegative = !1, front = findValid(\"+\", maskset),\r\n                                                        back = findValid(\"-\", maskset);\r\n                                                return -1 !== front && (isNegative = [front, back]), !1 !== isNegative ? {\r\n                                                    remove: isNegative,\r\n                                                    caret: initPos\r\n                                                } : {\r\n                                                    insert: [{\r\n                                                        pos: findValidator(\"+\", maskset),\r\n                                                        c: opts.negationSymbol.front,\r\n                                                        fromIsValid: !0\r\n                                                    }, {\r\n                                                        pos: findValidator(\"-\", maskset),\r\n                                                        c: opts.negationSymbol.back,\r\n                                                        fromIsValid: void 0\r\n                                                    }],\r\n                                                    caret: initPos + opts.negationSymbol.back.length\r\n                                                };\r\n                                            }\r\n                                            if (strict) {\r\n                                                return !0;\r\n                                            }\r\n                                            if (-1 !== radixPos && !0 === opts._radixDance && !1 === isSelection && c === opts.radixPoint && void 0 !== opts.digits && (isNaN(opts.digits) || 0 < parseInt(opts.digits)) && radixPos !== pos) {\r\n                                                return {\r\n                                                    caret: opts._radixDance && pos === radixPos - 1 ? radixPos + 1 : radixPos\r\n                                                };\r\n                                            }\r\n                                            if (!1 === opts.__financeInput) {\r\n                                                if (isSelection) {\r\n                                                    if (opts.digitsOptional) {\r\n                                                        return {\r\n                                                            rewritePosition: caretPos.end\r\n                                                        };\r\n                                                    }\r\n                                                    if (!opts.digitsOptional) {\r\n                                                        if (caretPos.begin > radixPos && caretPos.end <= radixPos) {\r\n                                                            return c === opts.radixPoint ? {\r\n                                                                insert: {\r\n                                                                    pos: radixPos + 1,\r\n                                                                    c: \"0\",\r\n                                                                    fromIsValid: !0\r\n                                                                },\r\n                                                                rewritePosition: radixPos\r\n                                                            } : {\r\n                                                                rewritePosition: radixPos + 1\r\n                                                            };\r\n                                                        }\r\n                                                        if (caretPos.begin < radixPos) {\r\n                                                            return {\r\n                                                                rewritePosition: caretPos.begin - 1\r\n                                                            };\r\n                                                        }\r\n                                                    }\r\n                                                } else if (!opts.showMaskOnHover && !opts.showMaskOnFocus && !opts.digitsOptional && 0 < opts.digits && \"\" === this.inputmask.__valueGet.call(this)) {\r\n                                                    return {\r\n                                                        rewritePosition: radixPos\r\n                                                    };\r\n                                                }\r\n                                            }\r\n                                            return {\r\n                                                rewritePosition: pos\r\n                                            };\r\n                                        },\r\n                                        postValidation: function postValidation(buffer, pos, c, currentResult, opts, maskset, strict) {\r\n                                            if (!1 === currentResult) {\r\n                                                return currentResult;\r\n                                            }\r\n                                            if (strict) {\r\n                                                return !0;\r\n                                            }\r\n                                            if (null !== opts.min || null !== opts.max) {\r\n                                                var unmasked = opts.onUnMask(buffer.slice().reverse().join(\"\"), void 0, $.extend({}, opts, {\r\n                                                    unmaskAsNumber: !0\r\n                                                }));\r\n                                                if (null !== opts.min && unmasked < opts.min && (unmasked.toString().length >= opts.min.toString().length || unmasked < 0)) {\r\n                                                    return !1;\r\n                                                }\r\n                                                if (null !== opts.max && unmasked > opts.max) {\r\n                                                    return !1;\r\n                                                }\r\n                                            }\r\n                                            return currentResult;\r\n                                        },\r\n                                        onUnMask: function onUnMask(maskedValue, unmaskedValue, opts) {\r\n                                            if (\"\" === unmaskedValue && !0 === opts.nullable) {\r\n                                                return unmaskedValue;\r\n                                            }\r\n                                            var processValue = maskedValue.replace(opts.prefix, \"\");\r\n                                            return processValue = processValue.replace(opts.suffix, \"\"), processValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), \"g\"), \"\"),\r\n                                            \"\" !== opts.placeholder.charAt(0) && (processValue = processValue.replace(new RegExp(opts.placeholder.charAt(0), \"g\"), \"0\")),\r\n                                                    opts.unmaskAsNumber ? (\"\" !== opts.radixPoint && -1 !== processValue.indexOf(opts.radixPoint) && (processValue = processValue.replace(Inputmask.escapeRegex.call(this, opts.radixPoint), \".\")),\r\n                                                            processValue = processValue.replace(new RegExp(\"^\" + Inputmask.escapeRegex(opts.negationSymbol.front)), \"-\"),\r\n                                                            processValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.negationSymbol.back) + \"$\"), \"\"),\r\n                                                            Number(processValue)) : processValue;\r\n                                        },\r\n                                        isComplete: function isComplete(buffer, opts) {\r\n                                            var maskedValue = (opts.numericInput ? buffer.slice().reverse() : buffer).join(\"\");\r\n                                            return maskedValue = maskedValue.replace(new RegExp(\"^\" + Inputmask.escapeRegex(opts.negationSymbol.front)), \"-\"),\r\n                                                    maskedValue = maskedValue.replace(new RegExp(Inputmask.escapeRegex(opts.negationSymbol.back) + \"$\"), \"\"),\r\n                                                    maskedValue = maskedValue.replace(opts.prefix, \"\"), maskedValue = maskedValue.replace(opts.suffix, \"\"),\r\n                                                    maskedValue = maskedValue.replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator) + \"([0-9]{3})\", \"g\"), \"$1\"),\r\n                                            \",\" === opts.radixPoint && (maskedValue = maskedValue.replace(Inputmask.escapeRegex(opts.radixPoint), \".\")),\r\n                                                    isFinite(maskedValue);\r\n                                        },\r\n                                        onBeforeMask: function onBeforeMask(initialValue, opts) {\r\n                                            var radixPoint = opts.radixPoint || \",\";\r\n                                            isFinite(opts.digits) && (opts.digits = parseInt(opts.digits)), \"number\" != typeof initialValue && \"number\" !== opts.inputType || \"\" === radixPoint || (initialValue = initialValue.toString().replace(\".\", radixPoint));\r\n                                            var valueParts = initialValue.split(radixPoint),\r\n                                                    integerPart = valueParts[0].replace(/[^\\-0-9]/g, \"\"),\r\n                                                    decimalPart = 1 < valueParts.length ? valueParts[1].replace(/[^0-9]/g, \"\") : \"\",\r\n                                                    forceDigits = 1 < valueParts.length;\r\n                                            initialValue = integerPart + (\"\" !== decimalPart ? radixPoint + decimalPart : decimalPart);\r\n                                            var digits = 0;\r\n                                            if (\"\" !== radixPoint && (digits = opts.digitsOptional ? opts.digits < decimalPart.length ? opts.digits : decimalPart.length : opts.digits,\r\n                                            \"\" !== decimalPart || !opts.digitsOptional)) {\r\n                                                var digitsFactor = Math.pow(10, digits || 1);\r\n                                                initialValue = initialValue.replace(Inputmask.escapeRegex(radixPoint), \".\"), isNaN(parseFloat(initialValue)) || (initialValue = (opts.roundingFN(parseFloat(initialValue) * digitsFactor) / digitsFactor).toFixed(digits)),\r\n                                                        initialValue = initialValue.toString().replace(\".\", radixPoint);\r\n                                            }\r\n                                            if (0 === opts.digits && -1 !== initialValue.indexOf(radixPoint) && (initialValue = initialValue.substring(0, initialValue.indexOf(radixPoint))),\r\n                                            null !== opts.min || null !== opts.max) {\r\n                                                var numberValue = initialValue.toString().replace(radixPoint, \".\");\r\n                                                null !== opts.min && numberValue < opts.min ? initialValue = opts.min.toString().replace(\".\", radixPoint) : null !== opts.max && numberValue > opts.max && (initialValue = opts.max.toString().replace(\".\", radixPoint));\r\n                                            }\r\n                                            return alignDigits(initialValue.toString().split(\"\"), digits, opts, forceDigits).join(\"\");\r\n                                        },\r\n                                        onBeforeWrite: function onBeforeWrite(e, buffer, caretPos, opts) {\r\n                                            function stripBuffer(buffer, stripRadix) {\r\n                                                if (!1 !== opts.__financeInput || stripRadix) {\r\n                                                    var position = $.inArray(opts.radixPoint, buffer);\r\n                                                    -1 !== position && buffer.splice(position, 1);\r\n                                                }\r\n                                                if (\"\" !== opts.groupSeparator) {\r\n                                                    for (; -1 !== (position = buffer.indexOf(opts.groupSeparator));) {\r\n                                                        buffer.splice(position, 1);\r\n                                                    }\r\n                                                }\r\n                                                return buffer;\r\n                                            }\r\n\r\n                                            var result, leadingzeroes = checkForLeadingZeroes(buffer, opts);\r\n                                            if (leadingzeroes) {\r\n                                                var buf = buffer.slice().reverse(),\r\n                                                        caretNdx = buf.join(\"\").indexOf(leadingzeroes[0]);\r\n                                                buf.splice(caretNdx, leadingzeroes[0].length);\r\n                                                var newCaretPos = buf.length - caretNdx;\r\n                                                stripBuffer(buf), result = {\r\n                                                    refreshFromBuffer: !0,\r\n                                                    buffer: buf.reverse(),\r\n                                                    caret: caretPos < newCaretPos ? caretPos : newCaretPos\r\n                                                };\r\n                                            }\r\n                                            if (e) {\r\n                                                switch (e.type) {\r\n                                                    case \"blur\":\r\n                                                    case \"checkval\":\r\n                                                        if (null !== opts.min) {\r\n                                                            var unmasked = opts.onUnMask(buffer.slice().reverse().join(\"\"), void 0, $.extend({}, opts, {\r\n                                                                unmaskAsNumber: !0\r\n                                                            }));\r\n                                                            if (null !== opts.min && unmasked < opts.min) {\r\n                                                                return {\r\n                                                                    refreshFromBuffer: !0,\r\n                                                                    buffer: alignDigits(opts.min.toString().replace(\".\", opts.radixPoint).split(\"\"), opts.digits, opts).reverse()\r\n                                                                };\r\n                                                            }\r\n                                                        }\r\n                                                        if (buffer[buffer.length - 1] === opts.negationSymbol.front) {\r\n                                                            var nmbrMtchs = new RegExp(\"(^\" + (\"\" != opts.negationSymbol.front ? Inputmask.escapeRegex(opts.negationSymbol.front) + \"?\" : \"\") + Inputmask.escapeRegex(opts.prefix) + \")(.*)(\" + Inputmask.escapeRegex(opts.suffix) + (\"\" != opts.negationSymbol.back ? Inputmask.escapeRegex(opts.negationSymbol.back) + \"?\" : \"\") + \"$)\").exec(stripBuffer(buffer.slice(), !0).reverse().join(\"\")),\r\n                                                                    number = nmbrMtchs ? nmbrMtchs[2] : \"\";\r\n                                                            0 == number && (result = {\r\n                                                                refreshFromBuffer: !0,\r\n                                                                buffer: [0]\r\n                                                            });\r\n                                                        } else {\r\n                                                            \"\" !== opts.radixPoint && buffer[0] === opts.radixPoint && (result && result.buffer ? result.buffer.shift() : (buffer.shift(),\r\n                                                                    result = {\r\n                                                                        refreshFromBuffer: !0,\r\n                                                                        buffer: stripBuffer(buffer)\r\n                                                                    }));\r\n                                                        }\r\n                                                        if (opts.enforceDigitsOnBlur) {\r\n                                                            result = result || {};\r\n                                                            var bffr = result && result.buffer || buffer.slice().reverse();\r\n                                                            result.refreshFromBuffer = !0, result.buffer = alignDigits(bffr, opts.digits, opts, !0).reverse();\r\n                                                        }\r\n                                                }\r\n                                            }\r\n                                            return result;\r\n                                        },\r\n                                        onKeyDown: function onKeyDown(e, buffer, caretPos, opts) {\r\n                                            var $input = $(this), bffr;\r\n                                            if (e.ctrlKey) {\r\n                                                switch (e.keyCode) {\r\n                                                    case keyCode.UP:\r\n                                                        return this.inputmask.__valueSet.call(this, parseFloat(this.inputmask.unmaskedvalue()) + parseInt(opts.step)),\r\n                                                                $input.trigger(\"setvalue\"), !1;\r\n\r\n                                                    case keyCode.DOWN:\r\n                                                        return this.inputmask.__valueSet.call(this, parseFloat(this.inputmask.unmaskedvalue()) - parseInt(opts.step)),\r\n                                                                $input.trigger(\"setvalue\"), !1;\r\n                                                }\r\n                                            }\r\n                                            if (!e.shiftKey && (e.keyCode === keyCode.DELETE || e.keyCode === keyCode.BACKSPACE || e.keyCode === keyCode.BACKSPACE_SAFARI) && caretPos.begin !== buffer.length) {\r\n                                                if (buffer[e.keyCode === keyCode.DELETE ? caretPos.begin - 1 : caretPos.end] === opts.negationSymbol.front) {\r\n                                                    return bffr = buffer.slice().reverse(),\r\n                                                    \"\" !== opts.negationSymbol.front && bffr.shift(), \"\" !== opts.negationSymbol.back && bffr.pop(),\r\n                                                            $input.trigger(\"setvalue\", [bffr.join(\"\"), caretPos.begin]), !1;\r\n                                                }\r\n                                                if (!0 === opts._radixDance) {\r\n                                                    var radixPos = $.inArray(opts.radixPoint, buffer);\r\n                                                    if (opts.digitsOptional) {\r\n                                                        if (0 === radixPos) {\r\n                                                            return bffr = buffer.slice().reverse(), bffr.pop(), $input.trigger(\"setvalue\", [bffr.join(\"\"), caretPos.begin >= bffr.length ? bffr.length : caretPos.begin]),\r\n                                                                    !1;\r\n                                                        }\r\n                                                    } else if (-1 !== radixPos && (caretPos.begin < radixPos || caretPos.end < radixPos || e.keyCode === keyCode.DELETE && caretPos.begin === radixPos)) {\r\n                                                        return caretPos.begin !== caretPos.end || e.keyCode !== keyCode.BACKSPACE && e.keyCode !== keyCode.BACKSPACE_SAFARI || caretPos.begin++,\r\n                                                                bffr = buffer.slice().reverse(), bffr.splice(bffr.length - caretPos.begin, caretPos.begin - caretPos.end + 1),\r\n                                                                bffr = alignDigits(bffr, opts.digits, opts).join(\"\"), $input.trigger(\"setvalue\", [bffr, caretPos.begin >= bffr.length ? radixPos + 1 : caretPos.begin]),\r\n                                                                !1;\r\n                                                    }\r\n                                                }\r\n                                            }\r\n                                        }\r\n                                    },\r\n                                    currency: {\r\n                                        prefix: \"\",\r\n                                        groupSeparator: \",\",\r\n                                        alias: \"numeric\",\r\n                                        digits: 2,\r\n                                        digitsOptional: !1\r\n                                    },\r\n                                    decimal: {\r\n                                        alias: \"numeric\"\r\n                                    },\r\n                                    integer: {\r\n                                        alias: \"numeric\",\r\n                                        digits: 0\r\n                                    },\r\n                                    percentage: {\r\n                                        alias: \"numeric\",\r\n                                        min: 0,\r\n                                        max: 100,\r\n                                        suffix: \" %\",\r\n                                        digits: 0,\r\n                                        allowMinus: !1\r\n                                    },\r\n                                    indianns: {\r\n                                        alias: \"numeric\",\r\n                                        _mask: function _mask(opts) {\r\n                                            return \"(\" + opts.groupSeparator + \"99){*|1}(\" + opts.groupSeparator + \"999){1|1}\";\r\n                                        },\r\n                                        groupSeparator: \",\",\r\n                                        radixPoint: \".\",\r\n                                        placeholder: \"0\",\r\n                                        digits: 2,\r\n                                        digitsOptional: !1\r\n                                    }\r\n                                }), module.exports = Inputmask;\r\n    }, function(module, exports, __webpack_require__) {\r\n        \"use strict\";\r\n        var _inputmask = _interopRequireDefault(__webpack_require__(1));\r\n\r\n        function _typeof(obj) {\r\n            return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function _typeof(obj) {\r\n                return typeof obj;\r\n            } : function _typeof(obj) {\r\n                return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\r\n            }, _typeof(obj);\r\n        }\r\n\r\n        function _classCallCheck(instance, Constructor) {\r\n            if (!(instance instanceof Constructor)) {\r\n                throw new TypeError(\"Cannot call a class as a function\");\r\n            }\r\n        }\r\n\r\n        function _possibleConstructorReturn(self, call) {\r\n            return !call || \"object\" !== _typeof(call) && \"function\" != typeof call ? _assertThisInitialized(self) : call;\r\n        }\r\n\r\n        function _assertThisInitialized(self) {\r\n            if (void 0 === self) {\r\n                throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\r\n            }\r\n            return self;\r\n        }\r\n\r\n        function _inherits(subClass, superClass) {\r\n            if (\"function\" != typeof superClass && null !== superClass) {\r\n                throw new TypeError(\"Super expression must either be null or a function\");\r\n            }\r\n            subClass.prototype = Object.create(superClass && superClass.prototype, {\r\n                constructor: {\r\n                    value: subClass,\r\n                    writable: !0,\r\n                    configurable: !0\r\n                }\r\n            }), superClass && _setPrototypeOf(subClass, superClass);\r\n        }\r\n\r\n        function _wrapNativeSuper(Class) {\r\n            var _cache = \"function\" == typeof Map ? new Map() : void 0;\r\n            return _wrapNativeSuper = function _wrapNativeSuper(Class) {\r\n                if (null === Class || !_isNativeFunction(Class)) {\r\n                    return Class;\r\n                }\r\n                if (\"function\" != typeof Class) {\r\n                    throw new TypeError(\"Super expression must either be null or a function\");\r\n                }\r\n                if (\"undefined\" != typeof _cache) {\r\n                    if (_cache.has(Class)) {\r\n                        return _cache.get(Class);\r\n                    }\r\n                    _cache.set(Class, Wrapper);\r\n                }\r\n\r\n                function Wrapper() {\r\n                    return _construct(Class, arguments, _getPrototypeOf(this).constructor);\r\n                }\r\n\r\n                return Wrapper.prototype = Object.create(Class.prototype, {\r\n                    constructor: {\r\n                        value: Wrapper,\r\n                        enumerable: !1,\r\n                        writable: !0,\r\n                        configurable: !0\r\n                    }\r\n                }), _setPrototypeOf(Wrapper, Class);\r\n            }, _wrapNativeSuper(Class);\r\n        }\r\n\r\n        function isNativeReflectConstruct() {\r\n            if (\"undefined\" == typeof Reflect || !Reflect.construct) {\r\n                return !1;\r\n            }\r\n            if (Reflect.construct.sham) {\r\n                return !1;\r\n            }\r\n            if (\"function\" == typeof Proxy) {\r\n                return !0;\r\n            }\r\n            try {\r\n                return Date.prototype.toString.call(Reflect.construct(Date, [], function() {\r\n                })),\r\n                        !0;\r\n            } catch (e) {\r\n                return !1;\r\n            }\r\n        }\r\n\r\n        function _construct(Parent, args, Class) {\r\n            return _construct = isNativeReflectConstruct() ? Reflect.construct : function _construct(Parent, args, Class) {\r\n                var a = [null];\r\n                a.push.apply(a, args);\r\n                var Constructor = Function.bind.apply(Parent, a), instance = new Constructor();\r\n                return Class && _setPrototypeOf(instance, Class.prototype), instance;\r\n            }, _construct.apply(null, arguments);\r\n        }\r\n\r\n        function _isNativeFunction(fn) {\r\n            return -1 !== Function.toString.call(fn).indexOf(\"[native code]\");\r\n        }\r\n\r\n        function _setPrototypeOf(o, p) {\r\n            return _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\r\n                return o.__proto__ = p, o;\r\n            }, _setPrototypeOf(o, p);\r\n        }\r\n\r\n        function _getPrototypeOf(o) {\r\n            return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\r\n                return o.__proto__ || Object.getPrototypeOf(o);\r\n            }, _getPrototypeOf(o);\r\n        }\r\n\r\n        function _interopRequireDefault(obj) {\r\n            return obj && obj.__esModule ? obj : {\r\n                default: obj\r\n            };\r\n        }\r\n\r\n        if (document.head.createShadowRoot || document.head.attachShadow) {\r\n            var InputmaskElement = function(_HTMLElement) {\r\n                function InputmaskElement() {\r\n                    var _this;\r\n                    _classCallCheck(this, InputmaskElement), _this = _possibleConstructorReturn(this, _getPrototypeOf(InputmaskElement).call(this));\r\n                    var attributeNames = _this.getAttributeNames(), shadow = _this.attachShadow({\r\n                                                                                                    mode: \"closed\"\r\n                                                                                                }),\r\n                            input = document.createElement(\"input\");\r\n                    for (var attr in input.type = \"text\", shadow.appendChild(input), attributeNames) {\r\n                        Object.prototype.hasOwnProperty.call(attributeNames, attr) && input.setAttribute(\"data-inputmask-\" + attributeNames[attr], _this.getAttribute(attributeNames[attr]));\r\n                    }\r\n                    return new _inputmask.default().mask(input), input.inputmask.shadowRoot = shadow,\r\n                            _this;\r\n                }\r\n\r\n                return _inherits(InputmaskElement, _HTMLElement), InputmaskElement;\r\n            }(_wrapNativeSuper(HTMLElement));\r\n            customElements.define(\"input-mask\", InputmaskElement);\r\n        }\r\n    }], installedModules = {}, __webpack_require__.m = modules, __webpack_require__.c = installedModules,\r\n            __webpack_require__.d = function(exports, name, getter) {\r\n                __webpack_require__.o(exports, name) || Object.defineProperty(exports, name, {\r\n                    enumerable: !0,\r\n                    get: getter\r\n                });\r\n            }, __webpack_require__.r = function(exports) {\r\n        \"undefined\" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(exports, Symbol.toStringTag, {\r\n            value: \"Module\"\r\n        }), Object.defineProperty(exports, \"__esModule\", {\r\n            value: !0\r\n        });\r\n    }, __webpack_require__.t = function(value, mode) {\r\n        if (1 & mode && (value = __webpack_require__(value)), 8 & mode) {\r\n            return value;\r\n        }\r\n        if (4 & mode && \"object\" == typeof value && value && value.__esModule) {\r\n            return value;\r\n        }\r\n        var ns = Object.create(null);\r\n        if (__webpack_require__.r(ns), Object.defineProperty(ns, \"default\", {\r\n            enumerable: !0,\r\n            value: value\r\n        }), 2 & mode && \"string\" != typeof value) {\r\n            for (var key in value) {\r\n                __webpack_require__.d(ns, key, function(key) {\r\n                    return value[key];\r\n                }.bind(null, key));\r\n            }\r\n        }\r\n        return ns;\r\n    }, __webpack_require__.n = function(module) {\r\n        var getter = module && module.__esModule ? function getDefault() {\r\n            return module.default;\r\n        } : function getModuleExports() {\r\n            return module;\r\n        };\r\n        return __webpack_require__.d(getter, \"a\", getter), getter;\r\n    }, __webpack_require__.o = function(object, property) {\r\n        return Object.prototype.hasOwnProperty.call(object, property);\r\n    }, __webpack_require__.p = \"\", __webpack_require__(__webpack_require__.s = 5);\r\n\r\n    function __webpack_require__(moduleId) {\r\n        if (installedModules[moduleId]) {\r\n            return installedModules[moduleId].exports;\r\n        }\r\n        var module = installedModules[moduleId] = {\r\n            i: moduleId,\r\n            l: !1,\r\n            exports: {}\r\n        };\r\n        return modules[moduleId].call(module.exports, module, module.exports, __webpack_require__),\r\n                module.l = !0, module.exports;\r\n    }\r\n\r\n    var modules, installedModules;\r\n});\n"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": -1,
          "_transferSize": 38135,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:11.649Z",
        "time": 98.0439999839291,
        "timings": {
          "blocked": 4.926999993175269,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0.48199999999999976,
          "wait": 89.95499995659291,
          "receive": 2.680000034160912,
          "_blocked_queueing": 0.9469999931752682,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_connectionId": "1726423",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "parser",
          "url": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513",
          "lineNumber": 1
        },
        "_priority": "High",
        "_resourceType": "script",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": ":authority",
              "value": "ekat.festool.de"
            },
            {
              "name": ":method",
              "value": "GET"
            },
            {
              "name": ":path",
              "value": "/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js"
            },
            {
              "name": ":scheme",
              "value": "https"
            },
            {
              "name": "accept",
              "value": "*/*"
            },
            {
              "name": "accept-encoding",
              "value": "gzip, deflate, br, zstd"
            },
            {
              "name": "accept-language",
              "value": "en-GB,en-US;q=0.9,en;q=0.8"
            },
            {
              "name": "if-modified-since",
              "value": "Thu, 20 Aug 2026 07:47:08 GMT"
            },
            {
              "name": "if-none-match",
              "value": "W/\"1174762-1787216819880\""
            },
            {
              "name": "priority",
              "value": "u=1"
            },
            {
              "name": "referer",
              "value": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            },
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "sec-fetch-dest",
              "value": "script"
            },
            {
              "name": "sec-fetch-mode",
              "value": "no-cors"
            },
            {
              "name": "sec-fetch-site",
              "value": "same-origin"
            },
            {
              "name": "user-agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            }
          ],
          "queryString": [],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "cache-control",
              "value": "public"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "content-length",
              "value": "252633"
            },
            {
              "name": "content-type",
              "value": "text/javascript"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 09:09:51 GMT"
            },
            {
              "name": "etag",
              "value": "W/\"1174762-1787216991686\""
            },
            {
              "name": "expires",
              "value": "Thu, 20 Aug 2026 09:11:51 GMT"
            },
            {
              "name": "last-modified",
              "value": "Thu, 20 Aug 2026 07:47:08 GMT"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "pragma",
              "value": "cache"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "x-robots-tag",
              "value": "noindex"
            }
          ],
          "cookies": [],
          "content": {
            "size": 1174762,
            "mimeType": "text/javascript",
            "text": "/*\r\n * Copyright (c) 2025 Quanos Solutions GmbH\r\n */\r\nvar DWUTILS_NODE_TYPE = {\r\n    ELEMENT: 1, ATTRIBUTE: 2, TEXT: 3,\r\n    CDATA: 4, ENTITY_REFERENCE: 5, ENTITY_NODE: 6,\r\n    PROCESSING_INSTRUCTION: 7, COMMENT: 8, DOCUMENT: 9, DOCUMENT_TYPE: 10, DOCUMENT_FRAGMENT: 11\r\n};\r\nvar DWUTILS_READY_STATE = {UNSENT: 0, OPENED: 1, HEADERS_RECEIVED: 2, LOADING: 3, DONE: 4};\r\nvar DWUTILS_NAVIGATION_PATH_DIVIDER = \"|\";\r\nvar DWUTILS_DOUBLE_CLICK_TIME = 250; // Zeit in ms, die für Ausführen des Doppelclicks zur Verfügung stehen\r\n\r\nvar DWUTILS_FUNCTION_TIMEOUT_REGISTRY = new Object();\r\n\r\nvar DWUTILS_FADE_OPACITY_START = 30; // Damit man nicht \"aus dem nichts\" kommt, sondern schon vorher ein bisschen was sieht\r\nvar DWUTILS_FADE_OPACITY_INCREMENT = 10; // Wieviel pro Step die Opacity erhöht werden soll\r\nvar DWUTILS_FADE_STEP_CONTROL_MS = 15; // wieviel ms gewartet werden soll zwischen den Fade Steps\r\nvar DWUTILS_FADE_STEP_WINDOW_MS = 10; // wieviel ms gewartet werden soll zwischen den Fade Steps\r\nvar DWUTILS_XML_ESCAPE_MAP = {\"&\": \"&amp;\", \"'\": \"&apos;\", \"\\\"\": \"&quot;\", \">\": \"&gt;\", \"<\": \"&lt;\"};\r\n\r\nvar DWTOUCH_TOUCH_EMULATION_ENABLED = false; // Damit wir touch.js nicht überall brauchen\r\n\r\nvar DWUTILS_WAIT_CURSOR_COMP_ID = \"dwUtilsShowWaitCursorOverlay\";\r\n\r\n//Sessiontimeout Countdown Timer vars\r\nvar DWUTILS_COUNTDOWN_TIME;\r\nvar DWUTILS_COUNTDOWN_CONTROL_ID;\r\nvar DWUTILS_COUNTDOWN_INTERVAL;\r\n\r\n// Obligatorische Verkürzung\r\nfunction $() {\r\n    return document.getElementById(arguments[0]);\r\n}\r\n\r\nfunction $iframe(iframe, id) {\r\n    if (!iframe || !id) {\r\n        return null;\r\n    }\r\n    try {\r\n        var iframeDocument = iframe.contentWindow || iframe.contentDocument;\r\n        if (iframeDocument.document) {\r\n            iframeDocument = iframeDocument.document;\r\n        }\r\n        if (iframeDocument) {\r\n            return iframeDocument.getElementById(id);\r\n        }\r\n    } catch (exception) {\r\n        // etwaige  Fehler wie \"permission denied\" schlucken... in diesem Fall kann das Element nicht gefunden werden\r\n        // -> NULL\r\n    }\r\n    return null;\r\n}\r\n\r\nif (!String.prototype.replaceAt) {\r\n    String.prototype.replaceAt = function(index, character) {\r\n        return this.substr(0, index) + character + this.substr(index + character.length);\r\n    }\r\n}\r\n\r\nif (!Array.prototype.indexOf) {\r\n// Source: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf\r\n// Production steps of ECMA-262, Edition 5, 15.4.4.14 / Reference: http://es5.github.io/#x15.4.4.14.\r\n    Array.prototype.indexOf = function(searchElement, fromIndex) {\r\n        var k;\r\n        // 1. Let array be the result of calling ToObject passing\r\n        //    the this value as the argument.\r\n        if (this == null) {\r\n            throw new TypeError('\"this\" is null or not defined');\r\n        }\r\n        var array = new Object(this);\r\n        // 2. Let lenValue be the result of calling the Get\r\n        //    internal method of array with the argument \"length\".\r\n        // 3. Let len be ToUint32(lenValue).\r\n        var len = array.length >>> 0;\r\n        // 4. If len is 0, return -1.\r\n        if (len === 0) {\r\n            return -1;\r\n        }\r\n        // 5. If argument fromIndex was passed let n be\r\n        //    ToInteger(fromIndex); else let n be 0.\r\n        var n = +fromIndex || 0;\r\n        if (Math.abs(n) === Infinity) {\r\n            n = 0;\r\n        }\r\n        // 6. If n >= len, return -1.\r\n        if (n >= len) {\r\n            return -1;\r\n        }\r\n        // 7. If n >= 0, then Let k be n.\r\n        // 8. Else, n<0, Let k be len - abs(n).\r\n        //    If k is less than 0, then let k be 0.\r\n        k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);\r\n        // 9. Repeat, while k < len\r\n        while (k < len) {\r\n            // a. Let Pk be ToString(k).\r\n            //   This is implicit for LHS operands of the in operator\r\n            // b. Let kPresent be the result of calling the\r\n            //    HasProperty internal method of array with argument Pk.\r\n            //   This step can be combined with c\r\n            // c. If kPresent is true, then\r\n            //    i.  Let elementK be the result of calling the Get\r\n            //        internal method of array with the argument ToString(k).\r\n            //   ii.  Let same be the result of applying the\r\n            //        Strict Equality Comparison Algorithm to\r\n            //        searchElement and elementK.\r\n            //  iii.  If same is true, return k.\r\n            if (k in array && array[k] === searchElement) {\r\n                return k;\r\n            }\r\n            k++;\r\n        }\r\n        return -1;\r\n    };\r\n}\r\n\r\nif (typeof (Object.create) != 'function') {\r\n    Object.create = (function(undefined) {\r\n        var Temp = function() {\r\n        };\r\n        return function(prototype, propertiesObject) {\r\n            if (prototype !== Object(prototype) && (prototype !== null)) {\r\n                throw TypeError('Argument must be an object, or null');\r\n            }\r\n            Temp.prototype = prototype || {};\r\n            if (propertiesObject !== undefined) {\r\n                Object.defineProperties(Temp.prototype, propertiesObject);\r\n            }\r\n            var result = new Temp();\r\n            Temp.prototype = null;\r\n            // to imitate the case of Object.create(null)\r\n            if (prototype === null) {\r\n                result.__proto__ = null;\r\n            }\r\n            return result;\r\n        };\r\n    })();\r\n}\r\n\r\n/**\r\n * Hilfsmethode. Dient zum Entfernen der Funktionsdeklaration und / oder default Framework Methoden (z.B. dwFrameworkPreEvent)\r\n *\r\n * @param attribute\r\n */\r\nfunction dwUtilsStripFromFunction(attribute, stripFunctionDeclaration, stripDefaultFrameworkMethods) {\r\n    var methods = attribute + \"\";\r\n    if (stripFunctionDeclaration) {\r\n        methods = dwUtilsStripFunctionDeclaration(methods);\r\n    }\r\n    if (stripDefaultFrameworkMethods) {\r\n        methods = dwUtilsStripDefaultFrameworkMethods(methods);\r\n    }\r\n    return methods;\r\n}\r\n\r\nfunction dwUtilsStripFunctionDeclaration(attribute) {\r\n    var methods = attribute + \"\";\r\n    var functionTerm = \"function\";\r\n    var functionTermIdx = -1;\r\n    functionTermIdx = methods.indexOf(functionTerm, functionTermIdx);\r\n    if (functionTermIdx == -1) {\r\n        return methods;\r\n    }\r\n    var methodsStartIdx = methods.indexOf(\"{\", functionTermIdx);\r\n    if (methods.charCodeAt(methodsStartIdx + 1) == 10) {\r\n        methodsStartIdx += 1; // Zeichen nach dem Beginn der Funktions-Deklaration ist ein Breakline\r\n    }\r\n    var methodsEndIdx = methods.lastIndexOf(\"}\");\r\n    if (methods.charCodeAt(methodsEndIdx - 1) == 10) {\r\n        methodsEndIdx -= 1; // Zeichen vor dem Ende der Funktions-Deklaration ist ein Breakline\r\n    }\r\n    methods = attribute.substring(methodsStartIdx + 1, methodsEndIdx);\r\n    return methods;\r\n}\r\n\r\nfunction dwUtilsStripDefaultFrameworkMethods(attribute) {\r\n    var methods = attribute + \"\";\r\n    var windowEventMethodBegin = \"if (window.event)\";\r\n    var preEventMethodBegin = \"dwFwPreEv\";\r\n    var postEventMethodBegin = \"dwFwPostEv\";\r\n    var genericMethodEnd = \";\";\r\n    methods = dwUtilsStripSubstringFromString(methods, windowEventMethodBegin, genericMethodEnd);\r\n    methods = dwUtilsStripSubstringFromString(methods, preEventMethodBegin, genericMethodEnd);\r\n    methods = dwUtilsStripSubstringFromString(methods, postEventMethodBegin, \"(event)\");\r\n    return methods;\r\n}\r\n\r\nfunction dwUtilsStripSubstringFromString(str, methodBegin, methodEnd) {\r\n    var resultString = str;\r\n    var methodStartIdx = str.indexOf(methodBegin);\r\n    if (methodStartIdx > -1) {\r\n        var methodEndIdx = str.indexOf(methodEnd, methodStartIdx);\r\n        var removedString = str.substring(methodStartIdx, methodEndIdx + methodEnd.length);\r\n        // z.B. if (window.event) {event = window.event;}\r\n        if ((removedString.indexOf(\"{\") > -1) && (removedString.indexOf(\"}\") == -1)) {\r\n            methodEndIdx = str.indexOf(\"}\", methodEndIdx);\r\n        }\r\n        resultString = str.substring(0, methodStartIdx) + str.substring(methodEndIdx + methodEnd.length);\r\n        return dwUtilsStripSubstringFromString(resultString, methodBegin, methodEnd);\r\n    }\r\n    return resultString;\r\n}\r\n\r\nfunction dwUtilsTrim(str) {\r\n    return str.replace(/^\\s+|\\s+$/g, '');\r\n}\r\n\r\nfunction dwUtilsReplaceCharacter(string, character, newcharacter) {\r\n    var charmap = new Object();\r\n    charmap[character] = newcharacter;\r\n    return dwUtilsReplaceCharacters(string, charmap);\r\n}\r\n\r\nfunction dwUtilsReplaceCharacters(string, charmap) {\r\n    var result = \"\";\r\n    for (var i = 0; i < string.length; i++) {\r\n        var c = string.charAt(i);\r\n        var mappedChar = charmap[c];\r\n        if (dwUtilsIsDefined(mappedChar)) {\r\n            result += mappedChar;\r\n        } else {\r\n            result += c;\r\n        }\r\n    }\r\n    return result;\r\n}\r\n\r\nfunction dwUtilsIsDefined(value) {\r\n    return (typeof (value) != \"undefined\") && (value != null);\r\n}\r\n\r\nfunction dwUtilsIsEmpty(aString) {\r\n    if (dwUtilsIsDefined(aString)) {\r\n        if (aString === '') {\r\n            return true;\r\n        } else {\r\n            return false;\r\n        }\r\n    } else {\r\n        return true;\r\n    }\r\n}\r\n\r\n/**\r\n * Hilsfmethode, liefert zurück, ob der Text im Array ist\r\n *\r\n * @param array\r\n * @param text\r\n */\r\nfunction dwUtilsIsInArray(array, text) {\r\n    return (dwUtilsGetIndexOfEntry(array, text) != -1);\r\n}\r\n\r\nfunction dwUtilsToArray(collection) {\r\n    var array = [];\r\n    for (var i = 0; i < collection.length; i++) {\r\n        array.push(collection[i]);\r\n    }\r\n    return array;\r\n}\r\n\r\nfunction dwUtilsGetIndexOfEntry(collection, entry) {\r\n    var size = collection.length;\r\n    for (var i = 0; i < size; i++) {\r\n        if (collection[i] == entry) {\r\n            return i;\r\n        }\r\n    }\r\n    return -1;\r\n}\r\n\r\n// comparatorFunction kann null sein, wenn Standardvergleich obj1==obj2 gewünscht\r\nfunction dwUtilsIsArrayEqual(array1, array2, doExactCompare, comparatorFunction) {\r\n    comparatorFunction = comparatorFunction || function(obj1, obj2) {\r\n        return obj1 == obj2\r\n    };\r\n    if (array1 == array2) {\r\n        return true;\r\n    }\r\n    if (array1.length != array2.length) {\r\n        return false;\r\n    }\r\n    if (!doExactCompare) {\r\n        // Shallow Clone ... (Referenzen werden nicht geklont)\r\n        // Notwendig weil die Sortierung des originalen Array nicht geändert werden soll\r\n        array1 = array1.slice(0);\r\n        array2 = array2.slice(0);\r\n        array1.sort();\r\n        array2.sort();\r\n    }\r\n    for (var i = 0; i < array1.length; i++) {\r\n        var entryInArray1 = array1[i];\r\n        var entryInArray2 = array2[i];\r\n        if (!comparatorFunction(entryInArray1, entryInArray2)) {\r\n            return false;\r\n        }\r\n    }\r\n    return true;\r\n}\r\n\r\n/**\r\n * Liefert eine Liste mit allen gefundenen DOM Nodes zurück (oder nur den ersten), die eine bestimmte Regel erfüllen\r\n * DOM wird von Node zu Root-Node durchlaufen.\r\n * @param rootNode\r\n * @param node\r\n * @param comparatorFunction\r\n * @param onlyFirstHit\r\n * @return {Array}\r\n */\r\nfunction dwUtilsFindMatchingNodes(rootNode, node, comparatorFunction, onlyFirstHit) {\r\n    var result = new Array();\r\n\r\n    do {\r\n        if (node == null) {\r\n            break;\r\n        }\r\n        if (comparatorFunction(rootNode, node)) {\r\n            result.push(node);\r\n            if (onlyFirstHit) {\r\n                break;\r\n            }\r\n        }\r\n        if (node == rootNode) {\r\n            break;\r\n        }\r\n    } while (node = node.parentNode);\r\n    return result;\r\n}\r\n\r\nfunction dwUtilsRemoveFromArrayByText(array, text) {\r\n    var result = new Array();\r\n    for (var i = 0; i < array.length; i++) {\r\n        if (array[i] != text) {\r\n            result.push(array[i]);\r\n        }\r\n    }\r\n    return result;\r\n}\r\n\r\nfunction dwUtilsRemoveFromArrayByIndex(array, index) {\r\n    array.splice(index, 1);\r\n    return array;\r\n}\r\n\r\n/**\r\n * Liefert einen Teilausschnitt des Arrays zurück (neuer Array)\r\n * @param array\r\n * @param startIndex : int inklusive\r\n * @param endIndex : int exklusive (oder -1 / undefined falls bis zum Ende)\r\n * @return {*}\r\n */\r\nfunction dwUtilsCreateSubArray(array, startIndex, endIndex) {\r\n    if (!startIndex || (startIndex < 0)) {\r\n        startIndex = 0;\r\n    }\r\n    if (!endIndex || (endIndex == -1) || endIndex > array.length) {\r\n        endIndex = array.length;\r\n    }\r\n\r\n    if ((startIndex == 0) && (endIndex == array.length)) {\r\n        return array;\r\n    }\r\n    var result = new Array();\r\n    for (var i = startIndex; i < endIndex; i++) {\r\n        result.push(array[i]);\r\n    }\r\n    return result;\r\n}\r\n\r\n/**\r\n * Hilfsmethode die den Text unescaped (innerHTML)\r\n * Funktioniert nicht bei allen HTML Elementen (Ausnahmen ggf. <table> relevante Elemente)\r\n *\r\n * @param htmlEscapedText\r\n */\r\nfunction dwUtilsUnescapeHTML(htmlEscapedText) {\r\n    if (htmlEscapedText == \"\") { // Bei Leerstring wird kein Knoten im fakeParent angelegt (auch kein Textknoten)\r\n        return \"\";\r\n    }\r\n    var fakeParent = document.createElement(\"div\");\r\n    fakeParent.innerHTML = htmlEscapedText;\r\n    return fakeParent.firstChild.nodeValue;\r\n}\r\n\r\n/**\r\n * Liefert das aktive Element im DOM. Besser als document.activeElement, da hierüber auch\r\n * das aktive Element ermittelt werden kann, wenn es sich in einem iFrame befindet. Ansonsten\r\n * würde man über document.activeElement nur das iFrame aber nicht das wirklich aktive Element\r\n * zurück erhalten\r\n * @param document\r\n * @returns {Element|boolean}\r\n */\r\nfunction getActiveElement(document) {\r\n    try {\r\n        document = document || window.document;\r\n\r\n        // Check if the active element is in the main web or iframe\r\n        if (document.body === document.activeElement\r\n            || document.activeElement.tagName.toLowerCase() == 'iframe') {\r\n            // Get iframes\r\n            var iframes = document.getElementsByTagName('iframe');\r\n            for (var i = 0; i < iframes.length; i++) {\r\n                var focused = getActiveElement(iframes[i].contentWindow.document); // Recall\r\n                if (focused !== false) {\r\n                    return focused; // The focused\r\n                }\r\n            }\r\n        } else {\r\n            return document.activeElement;\r\n        }\r\n    } catch (e) {\r\n        console.log('cannot find focused element: ' + e);\r\n    }\r\n\r\n    return false;\r\n}\r\n\r\n/**\r\n * Prüft, ob das übergebene Element ein Eingabefeld ist.\r\n * Auch TextAreas zählen als Eingabefelder.\r\n *\r\n * @param element\r\n * @returns {boolean}\r\n */\r\nfunction dwUtilsIsInputTextBox(element) {\r\n    if (!element) {\r\n        return false;\r\n    }\r\n    if (element.tagName == null) {\r\n        // Kein TagName, ist beim Dokument so -> Dann ist das sicher kein Eingabefeld\r\n        return false;\r\n    }\r\n    var tagName = element.tagName.toLowerCase();\r\n    if (tagName === 'textarea') {\r\n        return true;\r\n    }\r\n    if (tagName !== 'input') {\r\n        return false;\r\n    }\r\n    var type = element.getAttribute('type');\r\n    if (type == null) {     // könnte z.B. ein Element vom pdf-js sein\r\n        return false;\r\n    }\r\n    type = type.toLowerCase();\r\n    // if any of these input types is not supported by a browser, it will behave as input type text.\r\n    var inputTypes = ['text', 'password', 'number', 'email', 'tel', 'url', 'search', 'date', 'datetime', 'datetime-local', 'time', 'month', 'week'];\r\n\r\n    return inputTypes.indexOf(type) >= 0;\r\n}\r\n\r\n/*\r\n * Debugfunktion, oeffnet aktuellen DOM in neuem Fenster\r\n */\r\nfunction dwUtilsDebugDOM(doc) {\r\n    var frame = open();\r\n    var writeDocument = frame.document;\r\n    writeDocument.write('<html><head></head><body><table><tr><td nowrap>');\r\n    dwUtilsDebugDOMRec(writeDocument, \"\", doc);\r\n    writeDocument.write('</td></tr></table></body></html>');\r\n    return frame;\r\n}\r\n\r\nfunction dwUtilsDebugWriteHtml(html) {\r\n    var text = html.replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\");\r\n    dwUtilsDebugWrite(text);\r\n}\r\n\r\n/*\r\n * Rekursiv\r\n * Wird von svg_misc_debugOpenSVGInFrame aufgerufen\r\n *\r\n */\r\nfunction dwUtilsDebugDOMRec(writeDocument, prefix, node) {\r\n    var children = node.childNodes;\r\n    writeDocument.write(prefix + node + \",&nbsp;name: \" + node.nodeName + \",&nbsp;value: \" + node.nodeValue + \",&nbsp;data: \" + node.data);\r\n    if (node.nodeType == 1) {\r\n        for (var i = 0; i < node.attributes.length; i++) {\r\n            if (node.attributes.item(i).nodeValue != null) {\r\n                writeDocument.write(\", \" + node.attributes.item(i).nodeName + \"=\\\"\" + node.attributes.item(i).nodeValue + \"\\\"\");\r\n            }\r\n        }\r\n    }\r\n    writeDocument.write('<br>');\r\n    for (var i = 0; i < children.length; i++) {\r\n        dwUtilsDebugDOMRec(writeDocument, prefix + \"&nbsp;&nbsp;&nbsp;&nbsp;\", children.item(i));\r\n    }\r\n}\r\n\r\n/*\r\n * Schreibt einen Text in ein Debug Fenster\r\n */\r\nfunction dwUtilsDebugWrite(text) {\r\n    if (text == null) {\r\n        return;\r\n    }\r\n    try {\r\n        debugdoc.write(text + \"<br>\");\r\n    } catch (exception) {\r\n        var frame = window.open();\r\n        debugdoc = frame.document;\r\n        debugdoc.write(text + \"<br>\");\r\n    }\r\n}\r\n\r\n/**\r\n * Stellt bei einem KeyEvent fest, ob die verwendete Taste die Leertaste oder Entertaste war.\r\n * (Also eine der Tasten, die bei einem Knopf zu einem submit führen würden.)\r\n * @param event\r\n */\r\nfunction dwUtilsKeyIsSpaceOrEnter(event) {\r\n    if (!event) {\r\n        event = window.event;\r\n    }\r\n    var key = event.keyCode || event.which;\r\n    if ((key == 13) || (key == 32)) {\r\n        return true;\r\n    }\r\n    return false;\r\n}\r\n\r\nfunction dwUtilsIsEnter(event) {\r\n    event = dwFrameworkGetEvent(event);\r\n    var key = event.keyCode;\r\n    if (key == 13) {\r\n        return true;\r\n    }\r\n    return false;\r\n}\r\n\r\n/**\r\n * Erweiterung der Stringbefehle\r\n * @param string1 : string Text\r\n * @param string2 : string Zeichenkette zur Prüfung ob der Text damit beginnt\r\n * @param ignoreCase : boolean ignoriere Groß-/Kleinschreibung bei der Abprüfung\r\n */\r\nfunction dwUtilsStringStartsWith(string1, string2, ignoreCase) {\r\n    if ((string1 == null) || (typeof string1 == \"undefined\")) {\r\n        return false; // Objekt nicht bestimmt. Zugriff kann Fehler verursachen\r\n    }\r\n    if ((string2 == null) || (typeof string2 == \"undefined\")) {\r\n        return false; // Objekt nicht bestimmt. Zugriff kann Fehler verursachen\r\n    }\r\n    if (string2.length > string1.length) {\r\n        return false; // Vergleichsstring ist länger, und damit kein gültiger Substring\r\n    }\r\n\r\n    if (ignoreCase) {\r\n        string1 = string1.toLowerCase();\r\n        string2 = string2.toLowerCase();\r\n    }\r\n    for (var i = 0; i < string2.length; i++) {\r\n        if (string1.charAt(i) != string2.charAt(i)) {\r\n            return false;\r\n        }\r\n    }\r\n    return true;\r\n}\r\n\r\n/**\r\n * Erweiterung der Stringbefehle\r\n * @param string1 : string Text\r\n * @param string2 : string Zeichenkette zur Prüfung ob der Text damit ended\r\n * @param ignoreCase : boolean ignoriere Groß-/Kleinschreibung bei der Abprüfung\r\n */\r\nfunction dwUtilsStringEndsWith(string1, string2, ignoreCase) {\r\n    if ((string1 == null) || (typeof string1 == \"undefined\")) {\r\n        return false; // Objekt nicht bestimmt. Zugriff kann Fehler verursachen\r\n    }\r\n    if ((string2 == null) || (typeof string2 == \"undefined\")) {\r\n        return false; // Objekt nicht bestimmt. Zugriff kann Fehler verursachen\r\n    }\r\n    if (string2.length > string1.length) {\r\n        return false; // Vergleichsstring ist länger, und damit kein gültiger Substring\r\n    }\r\n    if (ignoreCase) {\r\n        string1 = string1.toLowerCase();\r\n        string2 = string2.toLowerCase();\r\n    }\r\n    for (var i = (string2.length - 1), j = (string1.length - 1); i >= 0; i--, j--) {\r\n//        alert(\"This (\" + string1.charAt(j) + \"), compareTo(\" + string2.charAt(i) + \") for indices i=\" + i + \" and j=\" + j + \"\\n\" + \"CharCode(This)=\" + string1.charCodeAt(j) + \"\\nCharCode(compareTo)=\" + string2.charCodeAt(i));\r\n        if (string1.charAt(j) != string2.charAt(i)) {\r\n            return false;\r\n        }\r\n    }\r\n    return true;\r\n}\r\n\r\nfunction dwUtilsStringContains(string, value) {\r\n    return string.indexOf(value) != -1;\r\n}\r\n\r\nfunction dwUtilsStringAfter(string, value) {\r\n    var index = string.indexOf(value);\r\n    if (index == -1) {\r\n        return \"\";\r\n    } else {\r\n        return string.substring(index + value.length);\r\n    }\r\n}\r\n\r\nfunction dwUtilsStringBefore(string, value) {\r\n    var index = string.indexOf(value);\r\n    if (index == -1) {\r\n        return \"\";\r\n    } else {\r\n        return string.substring(0, index);\r\n    }\r\n}\r\n\r\nString.prototype.stringBetween = function(startStr, endStr) {\r\n    var startIdx = this.indexOf(startStr);\r\n    if (startIdx == -1) {\r\n        return \"\";\r\n    }  // String kommt nicht vor\r\n    var endIdx = this.lastIndexOf(endStr);\r\n    if ((endIdx == -1) || (endIdx == startIdx)) {\r\n        endIdx = this.length;\r\n    }\r\n    return this.substring(startIdx + 1, endIdx);\r\n}\r\n\r\n/**\r\n * Erweitert einen Navigationspfad\r\n * @param navPath leer oder pipe separierte Index-Werte\r\n * @param childIndices variable Anzahl an Index und/oder pipe-separierten Index-Werten\r\n */\r\nfunction dwUtilsAppendNavigationPath(navPath, concatNavPath) {\r\n    if (navPath == \"\") {\r\n        return concatNavPath;\r\n    } else {\r\n        if (navPath.charAt(navPath.length - 1) == '|') {\r\n            return navPath + concatNavPath;\r\n        } else {\r\n            return navPath + '|' + concatNavPath;\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * Liefert einen bool Wert für die String-Repräsentation (case insensitive) zurück.\r\n * \"true\" -> true\r\n * \"false\" -> false\r\n * null || undefined -> false\r\n * sonst -> false\r\n * @param value\r\n */\r\nfunction dwUtilsToBoolean(value) {\r\n    if (value == null || value == undefined) {\r\n        return false;\r\n    }\r\n    if (value.toLowerCase() == \"true\") {\r\n        return true;\r\n    }\r\n    if (value.toLowerCase() == \"false\") {\r\n        return false;\r\n    }\r\n    return false;\r\n}\r\n\r\n/**\r\n * Objekt zum Kapseln der X und Y Koordinaten (z.B. mouse position)\r\n * @param x\r\n * @param y\r\n */\r\nfunction DWPoint(x, y) {\r\n    this.x = x;\r\n    this.y = y;\r\n    this.toString = function() {\r\n        return \"x=\" + this.x + \" / y=\" + this.y;\r\n    }\r\n}\r\n\r\nDWPoint.prototype.toRectangle = function() {\r\n    return new DWRectangle(this.x, this.y, this.x, this.y);\r\n};\r\n\r\n/**\r\n * Object zum Kapseln der Bounding Box des Objektes\r\n * @param x1\r\n * @param y1\r\n * @param x2\r\n * @param y2\r\n * @constructor\r\n */\r\nfunction DWRectangle(x1, y1, x2, y2) {\r\n    this.x1 = x1;\r\n    this.y1 = y1;\r\n    this.x2 = x2;\r\n    this.y2 = y2;\r\n    this.width = this.x2 - this.x1;\r\n    this.height = this.y2 - this.y1;\r\n}\r\n\r\nDWRectangle.prototype.toString = function() {\r\n    return \"[x1:\" + this.x1 + \",y1:\" + this.y1 + \",x2:\" + this.x2 + \",y2:\" + this.y2 + \"]\";\r\n};\r\n\r\n/**\r\n * Wrapper für die Methode getBoundingClientRect\r\n * Grund: In IE8 liefert das TextRectangle Ergebnis kein 'height' und 'width' Attribut mit\r\n * @param control\r\n * @return {DWRectangle}\r\n */\r\nfunction dwUtilsBoundingClientRectAsDwRectangle(control) {\r\n    var x1 = 0;\r\n    var y1 = 0;\r\n    var x2 = 0;\r\n    var y2 = 0;\r\n    if (control && control.getBoundingClientRect) {\r\n        var rect = control.getBoundingClientRect();\r\n        x1 = Math.round(rect.left);\r\n        y1 = Math.round(rect.top);\r\n        x2 = Math.round(rect.right);\r\n        y2 = Math.round(rect.bottom);\r\n    }\r\n    return new DWRectangle(x1, y1, x2, y2);\r\n}\r\n\r\n/**\r\n * Liefert die aktuellen Maus-Koordinaten zurück\r\n * @param event\r\n */\r\nfunction dwUtilsGetCurrentMousePositionPerEvent(event) {\r\n    if (event == null) { // kann beim IE8 z.B. bei MouseOver passieren\r\n        return new DWPoint(0, 0);\r\n    }\r\n\r\n    var x;\r\n    var y;\r\n    if (event.pageX && event.pageY) {\r\n        x = event.pageX - window.pageXOffset;\r\n        y = event.pageY - window.pageYOffset;\r\n    } else if (event.clientX && event.clientY) {\r\n        x = event.clientX;\r\n        y = event.clientY;\r\n    }\r\n    return new DWPoint(x, y);\r\n}\r\n\r\n/**\r\n * Liefert die relativen Maus-Koordinaten eines Events zur oberen linken Ecke des Html-Elements.\r\n */\r\nfunction dwUtilsGetRelMouseCoords(event, currentElement) {\r\n    var totalOffsetX = 0;\r\n    var totalOffsetY = 0;\r\n\r\n    do {\r\n        totalOffsetX += currentElement.offsetLeft - currentElement.scrollLeft;\r\n        totalOffsetY += currentElement.offsetTop - currentElement.scrollTop;\r\n        currentElement = currentElement.offsetParent;\r\n    }\r\n    while (currentElement != null);\r\n    var point = dwUtilsGetCurrentMousePositionPerEvent(event);\r\n    if (DW_PAGE_SCALE == undefined) {\r\n        var canvasX = point.x - totalOffsetX;\r\n        var canvasY = point.y - totalOffsetY;\r\n    } else {\r\n        var canvasX = point.x / DW_PAGE_SCALE - totalOffsetX;\r\n        var canvasY = point.y / DW_PAGE_SCALE - totalOffsetY;\r\n    }\r\n\r\n    return new DWPoint(canvasX, canvasY);\r\n}\r\n\r\n/**\r\n * Liefert offsetTop (y) und offsetLeft (x) vom Control zum topMostNode. Ist topMostNode nicht gesetzt,\r\n * wird die offset-Bestimmung bis zum Body (viewport) durchgeführt\r\n * @param node : node aktueller Knoten\r\n * @param topMostNode : node_or_null Knoten bis zu dem die offset-Bestimmung durchgeführt werden soll\r\n */\r\nfunction dwUtilsGetCoords(node, topMostNode) {\r\n    // laut Christian OK: um unschöne AJAX-Exceptions in Release-Versionen zu vermeiden, sauber auf node == null reagieren,\r\n    // da aufgrund von Race Conditions in Verbindung mit Timeouts es anscheinend ab und zu passiert, dass null für node übergeben wird\r\n    if ((node == null) && !framework_isDevelopment) {\r\n        return new DWPoint(0, 0);\r\n    }\r\n\r\n    var iterNode = node;\r\n    var offsetTop = 0;\r\n    var offsetLeft = 0;\r\n    if (topMostNode != null) {\r\n        // es gibt viele Ausnahmen die bei der Ermittlung zu berücksichtigen sind\r\n        // Manuelle Berechnung wird nur durchgeführt, wenn topMostNode nicht der Body ist\r\n        while ((iterNode != topMostNode) && iterNode && (iterNode.offsetParent != null)) {\r\n            offsetLeft += iterNode.offsetLeft;\r\n            offsetTop += iterNode.offsetTop;\r\n            var isPositionedAbsolute = dwUtilsGetStyle(node, \"position\") == \"absolute\";\r\n            if (isPositionedAbsolute && !framework_offsetSupport.isBorderIncludedInOffset && !(framework_offsetSupport.isBorderIncludedInTableOffset &&\r\n                ((iterNode.tagName.toLowerCase() == \"table\") || (iterNode.tag.toLowerCase() == \"td\")))) {\r\n                // bei positionierten Elementen wird die Border nicht immer in den offset einberechnet\r\n                var borderTopWidth = parseInt(dwUtilsGetStyle(iterNode, \"borderTopWidth\"));\r\n                if (isNaN(borderTopWidth)) {\r\n                    borderTopWidth = 0;\r\n                }\r\n                var borderLeftWidth = parseInt(dwUtilsGetStyle(iterNode, \"borderLeftWidth\"));\r\n                if (isNaN(borderLeftWidth)) {\r\n                    borderLeftWidth = 0;\r\n                }\r\n                offsetTop += borderTopWidth;\r\n                offsetLeft += borderLeftWidth;\r\n            }\r\n\r\n            iterNode = iterNode.offsetParent;\r\n        }\r\n    } else {\r\n        // siehe https://developer.mozilla.org/en/DOM/element.getBoundingClientRect\r\n        var bounds = dwUtilsBoundingClientRectAsDwRectangle(node);\r\n        offsetLeft = bounds.x1;\r\n        offsetTop = bounds.y1;\r\n        var scrolledContainers = dwUtilsGetScrolledContainers(node);\r\n        for (var i = 0; i < scrolledContainers.length; i++) {\r\n            var scrolledContainer = scrolledContainers[0];\r\n            offsetTop += scrolledContainer.scrollTop;\r\n            offsetLeft += scrolledContainer.scrollLeft;\r\n        }\r\n\r\n    }\r\n    return new DWPoint(offsetLeft, offsetTop);\r\n}\r\n\r\n/**\r\n * Liefert die Koordinaten\r\n * @param node\r\n * @param relativeToViewport true - liefert die Koordinaten relativ zum Viewport zurück (sichtbarer Browser-Ausschnitt)\r\n *                           false - liefert die Koordinaten absolut zurück (unter Berücksichtigung des Scrollings von umschliessenden Scrollpanes)\r\n */\r\nfunction dwUtilsGetLocationOnWindow(node, relativeToViewport, asIntegerPoint) {\r\n    var locationOnWindow = dwUtilsGetCoords(node, null);\r\n    if (!relativeToViewport) {\r\n        return locationOnWindow;\r\n    }\r\n    var iterNode = node;\r\n    var scrollLeft = 0;\r\n    var scrollTop = 0;\r\n    while ((iterNode != null) && (iterNode.offsetParent != null)) {\r\n        scrollLeft += iterNode.scrollLeft;\r\n        scrollTop += iterNode.scrollTop;\r\n        iterNode = iterNode.offsetParent;\r\n    }\r\n    /*\r\n     * Über die while-Schleife wurden zwar alle ScrollElemente gefunden, die sich im body befinden.\r\n     * Das html-Rootelement kann aber auch gescrollt sein (Einblenden von Tastatur => Bereich wird nach oben geschoben\r\n     * und ist damit scrollbar). Dieser ScrollTop- und ScrollLeft-Wert wurde leider in dwUtilsGetCoords und da in\r\n     * dwUtilsBoundingClientRectAsDwRectangle mit einberechnet, weil control.getBoundingClientRect die Koordinaten mit\r\n     * Scrolling enthält... Und deswegen müssen wir es hier wieder abziehen\r\n     */\r\n    scrollTop -= parseInt(document.documentElement.scrollTop);\r\n    scrollLeft -= parseInt(document.documentElement.scrollLeft);\r\n    var x = (locationOnWindow.x - scrollLeft);\r\n    var y = (locationOnWindow.y - scrollTop);\r\n    if (asIntegerPoint) {\r\n        x = parseInt(x);\r\n        y = parseInt(y);\r\n    }\r\n    return new DWPoint(x, y);\r\n}\r\n\r\nfunction dwUtilsIsIntersecting(rect1, rect2, excludeBorder) {\r\n    var isOverLappingHorizontally = ((rect1.x1 > rect2.x1) && (rect1.x1 < rect2.x2) ||\r\n                                     (rect1.x2 > rect2.x1) && (rect1.x2 < rect2.x2));\r\n    var isOverLappingVertically = ((rect1.y1 > rect2.y1) && (rect1.y1 < rect2.y2) ||\r\n                                   (rect1.y2 > rect2.y1) && (rect1.y2 < rect2.y2));\r\n    if (excludeBorder) {\r\n        return (isOverLappingHorizontally && isOverLappingVertically);\r\n    }\r\n\r\n    var isOverLappingHorizontallyIncludingBounds = ((rect1.x1 >= rect2.x1) && (rect1.x1 <= rect2.x2) ||\r\n                                                    (rect1.x2 >= rect2.x1) && (rect1.x2 <= rect2.x2));\r\n    var isOverLappingVerticallyIncludingBounds = ((rect1.y1 >= rect2.y1) && (rect1.y1 <= rect2.y2) ||\r\n                                                  (rect1.y2 >= rect2.y1) && (rect1.y2 <= rect2.y2));\r\n    return (isOverLappingHorizontallyIncludingBounds || isOverLappingVerticallyIncludingBounds);\r\n}\r\n\r\nfunction dwUtilsGetScrollbarWidth(scrolledElement) {\r\n    if (scrolledElement == null) {\r\n        return 0;\r\n    }\r\n    var outerWidth = scrolledElement.offsetWidth;\r\n    var outerHeight = scrolledElement.offsetHeight;\r\n    var innerWidth = scrolledElement.clientWidth;\r\n    var innerHeight = scrolledElement.clientHeight;\r\n    if (!innerWidth) { // Breite = 0, wenn kein Content im Element ist, auch wenn width explizit gesetzt wurde (width wirkt sich nur auf offset aus)\r\n        innerWidth = parseInt(scrolledElement.style.width);\r\n        if (isNaN(innerWidth)) {\r\n            innerWidth = 0;\r\n        }\r\n    }\r\n    if (!innerHeight) { // Höhe = 0, wenn kein Content im Element ist, auch wenn height explizit gesetzt wurde (width wirkt sich nur auf offset aus)\r\n        innerHeight = parseInt(scrolledElement.style.height);\r\n        if (isNaN(innerHeight)) {\r\n            innerHeight = 0;\r\n        }\r\n    }\r\n    var borderWidth = parseInt(dwUtilsGetStyle(scrolledElement, \"borderWidth\"));\r\n    if (isNaN(borderWidth)) {\r\n        borderWidth = 0;\r\n    }\r\n    var scrollbarWidth = outerWidth - innerWidth - (borderWidth * 2);\r\n    var scrollbarHeight = outerHeight - innerHeight - (borderWidth * 2);\r\n    if (scrollbarWidth > 5) { // Vertikale Scrollbar sichtbar\r\n        return scrollbarWidth;\r\n    }\r\n    if (scrollbarHeight > 5) { // Horizontale Scrollbar sichtbar\r\n        return scrollbarHeight;\r\n    }\r\n    return 0;\r\n}\r\n\r\nfunction dwUtilsHasVerticalOverflow(element) {\r\n    if (element == null) {\r\n        return false;\r\n    }\r\n\r\n    return (element.scrollHeight > element.clientHeight);\r\n}\r\n\r\nfunction dwUtilsHasHorizontalOverflow(element) {\r\n    if (element == null) {\r\n        return false;\r\n    }\r\n    return (element.scrollWidth > element.clientWidth);\r\n}\r\n\r\nfunction dwUtilsGetFirstParentScrolledElement(node) {\r\n    var iterNode = node;\r\n    while (iterNode != null) {\r\n        if ((iterNode.scrollLeft != 0) || (iterNode.scrollTop != 0)) {\r\n            return iterNode;\r\n        }\r\n        iterNode = iterNode.offsetParent;\r\n    }\r\n    return null;\r\n}\r\n\r\nfunction dwUtilsGetScrolledContainers(node) {\r\n    var iterNode = node;\r\n    var scrollContainers = new Array();\r\n    while (iterNode != null) {\r\n        if ((iterNode.scrollLeft != 0) || (iterNode.scrollTop != 0)) {\r\n            scrollContainers.push(iterNode);\r\n        }\r\n        iterNode = iterNode.offsetParent;\r\n    }\r\n    return scrollContainers;\r\n}\r\n\r\nfunction dwUtilsGetParentScrollPanes(node) {\r\n    var iterNode = node;\r\n    var scrollPanes = new Array();\r\n    while (iterNode != null) {\r\n        if ((iterNode.className) && (iterNode.className.indexOf(\"guiscrollpane\") > -1)) {\r\n            scrollPanes.push(iterNode);\r\n        }\r\n        iterNode = iterNode.offsetParent;\r\n    }\r\n    return scrollPanes;\r\n}\r\n\r\nfunction dwUtilsRepositionAbsolutePositionedControl(control, mousePoint, positionDeltaX, positionDeltaY) {\r\n    dwUtilsRepositionAbsolutePositionedControlInWindow(null, control, mousePoint, positionDeltaX, positionDeltaY);\r\n}\r\n\r\n/**\r\n * Positioniert das Control neu - unter Berücksichtigung der aktuellen Maus-Koordinaten, der Größe des Controls und\r\n * dem verfügbaren Platz\r\n *\r\n * Diese Methode positioniert das Control in Beziehung zu den absoluten Bildschirmkoordinaten.\r\n * Daher muss das Control das Style-Attribut \"position:absolute\" gesetzt haben.\r\n *\r\n * Nähere Informationen zur Positionierung von Elementen können auf http://de.selfhtml.org/css/eigenschaften/positionierung.htm\r\n * nachgelesen werden.\r\n *\r\n * @param parentWindow Fenster, relativ zu dem das Control dargestellt wird\r\n * @param control\r\n * @param mousePoint\r\n */\r\nfunction dwUtilsRepositionAbsolutePositionedControlInWindow(parentWindow, control, mousePoint, positionDeltaX, positionDeltaY) {\r\n    var possibleDisplayX = mousePoint.x + positionDeltaX;\r\n    var possibleDisplayY = mousePoint.y + positionDeltaY;\r\n    var width;\r\n    var height;\r\n\r\n    // Bestimmung der Fenster-Größe (Hauptfenster)\r\n    if (document.all) {\r\n        width = document.body.clientWidth;\r\n        height = document.body.clientHeight;\r\n    } else {\r\n        width = window.innerWidth;\r\n        height = window.innerHeight;\r\n    }\r\n\r\n//    console.log(\"x: \" + possibleDisplayX + \" control width: \" + width);\r\n\r\n    // wenn es rechts oder unten herauslaufen wuerde dann einpassen\r\n    if (possibleDisplayX + control.offsetWidth > (width - 16)) {\r\n        possibleDisplayX = mousePoint.x - 16 - control.offsetWidth;\r\n//        console.log(\"dwUtilsRepositionAbsolutePositionedControlInWindow: moving left\");\r\n    }\r\n    if (possibleDisplayY + control.offsetHeight > (height - 16)) {\r\n        possibleDisplayY = mousePoint.y - 16 - control.offsetHeight;\r\n//        console.log(\"dwUtilsRepositionAbsolutePositionedControlInWindow: moving up\");\r\n    }\r\n\r\n    // wenn es aber nun oben oder links herauslaufen wuerde dann einpassen nach oben bzw. links\r\n    if (possibleDisplayX < 0) {\r\n        possibleDisplayX = 0;\r\n    }\r\n    if (possibleDisplayY < 0) {\r\n        possibleDisplayY = 0;\r\n    }\r\n\r\n    // Konvertierung zu Bildschirmkoordinaten\r\n    if (parentWindow != null) {\r\n        var windowLoc = dwUtilsGetLocationOnWindow(parentWindow, false, false);\r\n        possibleDisplayX -= windowLoc.x;\r\n        possibleDisplayY -= windowLoc.y;\r\n    } else if (document.all) {\r\n        possibleDisplayX += document.body.scrollLeft;\r\n        possibleDisplayY += document.body.scrollTop;\r\n    } else {\r\n        possibleDisplayX += window.pageXOffset;\r\n        possibleDisplayY += window.pageYOffset;\r\n    }\r\n\r\n    // Wg. Chrome nur setzen wenn geändert, sonst gibts einen Reflow\r\n    var newValueLeft = possibleDisplayX + \"px\";\r\n    var newValueTop = possibleDisplayY + \"px\";\r\n    var newStyles = \"\";\r\n    if (newValueLeft != control.style.left) {\r\n        newStyles += \";left:\" + newValueLeft;\r\n    }\r\n    if (newValueTop != control.style.top) {\r\n        newStyles += \";top:\" + newValueTop;\r\n    }\r\n    dwDomSetStylesViaAttribute(control, newStyles);\r\n}\r\n\r\n/**\r\n * Repositioniert das Popup Fenster und richtet es bei Platzmangel am oberen Rand neu aus (ansonsten zentriert)\r\n * @param uniqueId\r\n */\r\nfunction dwUtilsRepositionChildWindow(uniqueId) {\r\n    var overlay = $(uniqueId + \"_layerdiv\");\r\n    var popup = $(uniqueId + \"_contentdiv\");\r\n    var body = $(\"body\");\r\n    if (!(body && popup && overlay)) {\r\n        return; // Objekte nicht initialisiert ... sollte nie vorkommen\r\n    }\r\n\r\n    // Das Fenster wurde manuell verschoben -> nicht repositionieren\r\n    var windowMoved = (typeof (popup.moved) != \"undefined\") && popup.moved;\r\n\r\n    var mainWrapper = $(\"dwmainwrapper\");\r\n\r\n    if (!windowMoved) {\r\n        var screenWidth = mainWrapper.offsetWidth;\r\n        var popupWidth = dwUtilsGetWidth(popup);\r\n        if (screenWidth <= popupWidth) {\r\n            popup.style.left = \"0px\";\r\n            popup.style.marginLeft = \"0px\";\r\n        } else {\r\n            popup.style.left = \"50%\";\r\n            popup.style.marginLeft = (-popupWidth / 2) + \"px\";\r\n        }\r\n    }\r\n\r\n    var screenHeight = mainWrapper.offsetHeight;\r\n    var popupHeight = dwUtilsGetHeight(popup);\r\n    if (screenHeight <= popupHeight) {\r\n        if (!windowMoved) {\r\n            popup.style.top = \"0px\";\r\n            popup.style.marginTop = \"0px\";\r\n        }\r\n        overlay.style.height = popupHeight + \"px\";\r\n    } else {\r\n        if (!windowMoved) {\r\n            popup.style.top = \"50%\";\r\n            popup.style.marginTop = (-popupHeight / 2) + \"px\";\r\n        }\r\n        overlay.style.height = \"100%\";\r\n    }\r\n}\r\n\r\nfunction dwUtilsDebugElapsedTime(timeStart, timeEnd) {\r\n    if (typeof (timeStart) == \"object\") {\r\n        timeStart = timeStart.getTime();\r\n    }\r\n    if (typeof (timeEnd) == \"object\") {\r\n        timeEnd = timeEnd.getTime();\r\n    }\r\n    var caller = dwUtilsDebugElapsedTime.caller + \"\";\r\n    caller = caller.substring(0, caller.indexOf(\"{\"));\r\n    dwUtilsDebugWrite(caller + \": \" + (timeEnd - timeStart) + \" ms\");\r\n}\r\n\r\n/**\r\n * Erstellt den Navigationspfad zwischen zwei HTML Elementen\r\n * Die Reihenfolge der Pfad-Indizes kann durch den Parameter direction beeinflusst werden\r\n *\r\n * @param fromObj\r\n * @param toObj\r\n * @param direction  Pfad ausgehend vom fromObj oder toObj\r\n */\r\nfunction dwUtilsGetNavigationPath(fromObj, toObj, direction) {\r\n    if (fromObj == null) {\r\n        return null;\r\n    }\r\n    if (toObj == fromObj) {\r\n        return \"\";\r\n    }  // wir befinden uns bereits auf dem gesuchten Element\r\n    var parent = fromObj.parentNode;\r\n    if ((parent == null) || (parent == fromObj)) { // Eine theoretische Rekursion unterbrechen\r\n        return null;\r\n    }  // Abbruchkriterium nicht erfüllt. fromObj entspricht dem body-Element\r\n    var selfIndex = dwDomGetIndexOfElementEntry(fromObj);\r\n    // Es wird immer ein valider selfIndex gefunden, da das eigene Element in der DOM Struktur eingebettet ist\r\n    if (toObj == parent) {\r\n        return selfIndex; // Abbruchkriterium erfüllt\r\n    } else {\r\n        // Aufbau des Pfades in Abhängigkeit der gewünschten Richtung\r\n        var subPath = dwUtilsGetNavigationPath(parent, toObj, direction);\r\n        if (subPath == null) {\r\n            return null; // Navigationspfad nicht gefunden\r\n        }\r\n        if (direction == DWDOM_NAVIGATION_PATH_DIRECTION.TOP_DOWN) {\r\n            return selfIndex + DWUTILS_NAVIGATION_PATH_DIVIDER + subPath;\r\n        } else {\r\n            return subPath + DWUTILS_NAVIGATION_PATH_DIVIDER + selfIndex;\r\n        }\r\n    }\r\n}\r\n\r\nfunction dwUtilsInitArray(size, defaultValue) {\r\n    size = parseInt(size);  // Wenn Javascript size als String interpretiert, wird der String-Wert in den Array übernommen\r\n    // und nicht die Größe definiert\r\n    var arr = new Array(size);\r\n    for (var i = 0; i < size; i++) {\r\n        arr[i] = defaultValue;\r\n    }\r\n    return arr;\r\n}\r\n\r\n/**\r\n * Liefert den angewendeten Stylewert für das entsprechende Attribut\r\n *\r\n * Das Style-Attribut muss als CSS angegeben werden, z.B. \"font-size\"\r\n *\r\n * Angelehnt an http://robertnyman.com/2006/04/24/get-the-rendered-style-of-an-element/\r\n * @param element : nodeObject Knoten, für den der Stylewert ermittelt werden soll\r\n * @param styleAttrib : string CSS-Attribut (z.B. fint-size).\r\n */\r\nfunction dwUtilsGetStyle(element, cssStyleName) {\r\n    var style = \"\";\r\n    if (document.defaultView && document.defaultView.getComputedStyle) {\r\n        style = document.defaultView.getComputedStyle(element, null).getPropertyValue(cssStyleName);\r\n    } else if (element.currentStyle) {\r\n        cssStyleName = cssStyleName.replace(/\\-(\\w)/g, function(strMatch, p1) {\r\n            return p1.toUpperCase();\r\n        });\r\n        style = element.currentStyle[cssStyleName];\r\n    } else if (dwFrameworkShowDevelopmentMessages()) {\r\n        alert(\"dwUtilsGetStyle not possible for this browser!\");\r\n    }\r\n    return style;\r\n}\r\n\r\nfunction dwUtilsGetFontSize(element) {\r\n    var fontSize = parseInt(dwUtilsGetStyle(element, \"font-size\"));\r\n    if (isNaN(fontSize)) {\r\n        fontSize = 11;\r\n    }\r\n    return fontSize;\r\n}\r\n\r\nfunction dwUtilsGetLineHeight(element) {\r\n    var lineHeight = parseInt(dwUtilsGetStyle(element, \"line-height\"));\r\n    if (isNaN(lineHeight)) {\r\n        lineHeight = 13;\r\n    }\r\n    return lineHeight;\r\n}\r\n\r\nfunction dwUtilsGetViewportHeight() {\r\n    var body = $(\"body\");\r\n    // Attribut innerXXX berücksichtigt die Breite der Scrollbar (eingerechnet sofern vorhanden)\r\n    var height = (window.innerHeight || document.documentElement.scrollHeight || (body ? body.offsetHeight : 0)); // IE8 unterstützt kein innerHeight\r\n    return height;\r\n}\r\n\r\nfunction dwUtilsGetViewportWidth() {\r\n    var body = $(\"body\");\r\n    // Attribut innerXXX berücksichtigt die Breite der Scrollbar (eingerechnet sofern vorhanden)\r\n    var width = (window.innerWidth || document.documentElement.scrollWidth || (body ? body.offsetWidth : 0)); // IE8 unterstützt kein innerWidth\r\n    return width;\r\n}\r\n\r\n/**\r\n * Liefert die Größe des Elements, komplett mit Margin/Borders/Padding\r\n *\r\n * @param element\r\n * @param withBorders\r\n */\r\nfunction dwUtilsGetHeight(element) {\r\n    return (element.offsetHeight) ? parseInt(element.offsetHeight) : 0;\r\n}\r\n\r\n/**\r\n * Liefert die Höhe des Elements, ohne Margin/Borders/Padding\r\n * @param element\r\n */\r\nfunction dwUtilsGetContentHeight(element) {\r\n    if (element.clientHeight) {\r\n        return parseInt(element.clientHeight);\r\n    } else {\r\n        // Fallback #1: Höhe und dann umliegende Werte (margin, border, padding) abziehen...\r\n        var height = dwUtilsGetHeight(element);\r\n        if (height) { // definiert und > 0\r\n            var paddingTop = parseInt(dwUtilsGetStyle(element, \"padding-top\") || dwUtilsGetStyle(element, \"padding\") || 0);\r\n            var paddingBottom = parseInt(dwUtilsGetStyle(element, \"padding-bottom\") || dwUtilsGetStyle(element, \"padding\") || 0);\r\n            var marginTop = parseInt(dwUtilsGetStyle(element, \"margin-top\") || dwUtilsGetStyle(element, \"margin\") || 0);\r\n            var marginBottom = parseInt(dwUtilsGetStyle(element, \"margin-bottom\") || dwUtilsGetStyle(element, \"margin\") || 0);\r\n            var borderTop = parseInt(dwUtilsGetStyle(element, \"border-top\") || dwUtilsGetStyle(element, \"border-top-width\") ||\r\n                                     dwUtilsGetStyle(element, \"border\") || 0);\r\n            var borderBottom = parseInt(dwUtilsGetStyle(element, \"border-bottom\") || dwUtilsGetStyle(element, \"border-bottom-width\") ||\r\n                                        dwUtilsGetStyle(element, \"border\") || 0);\r\n            height = height - (paddingTop + paddingBottom + marginTop + marginBottom + borderTop + borderBottom);\r\n            return (height > 0) ? height : 0;\r\n        } else {\r\n            // Fallback #2\r\n            return 0;\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * Liefert die Größe des Elements, komplett mit Margin/Borders/Padding\r\n *\r\n * @param element\r\n * @param withBorders\r\n */\r\nfunction dwUtilsGetWidth(element) {\r\n    return (element.offsetWidth) ? parseInt(element.offsetWidth) : 0;\r\n}\r\n\r\n/**\r\n * Liefert die Breite des Elements, ohne Margin/Borders/Padding\r\n * @param element\r\n */\r\nfunction dwUtilsGetContentWidth(element) {\r\n    if (element.clientWidth) {\r\n        return parseInt(element.clientWidth);\r\n    } else {\r\n        // Fallback #1: Breite und dann umliegende Werte (margin, border, padding) abziehen...\r\n        var width = dwUtilsGetWidth(element);\r\n        if (width) { // definiert und > 0\r\n            var paddingLeft = parseInt(dwUtilsGetStyle(element, \"padding-left\") || dwUtilsGetStyle(element, \"padding\") || 0);\r\n            var paddingRight = parseInt(dwUtilsGetStyle(element, \"padding-right\") || dwUtilsGetStyle(element, \"padding\") || 0);\r\n            var marginLeft = parseInt(dwUtilsGetStyle(element, \"margin-left\") || dwUtilsGetStyle(element, \"margin\") || 0);\r\n            var marginRight = parseInt(dwUtilsGetStyle(element, \"margin-right\") || dwUtilsGetStyle(element, \"margin\") || 0);\r\n            var borderLeft = parseInt(dwUtilsGetStyle(element, \"border-left\") || dwUtilsGetStyle(element, \"border-left-width\") ||\r\n                                      dwUtilsGetStyle(element, \"border\") || 0);\r\n            var borderRight = parseInt(dwUtilsGetStyle(element, \"border-right\") || dwUtilsGetStyle(element, \"border-right-width\") ||\r\n                                       dwUtilsGetStyle(element, \"border\") || 0);\r\n            width = width - (paddingLeft + paddingRight + marginLeft + marginRight + borderLeft + borderRight);\r\n            return (width > 0) ? width : 0;\r\n        } else {\r\n            // Fallback #2\r\n            return 0;\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * Zieht von der Höhe die Margin/Borders/Padding Sachen des Elements ab, damit man mit\r\n * element.setHeight dessen Höhe setzen kann\r\n *\r\n * @param element\r\n * @param height\r\n */\r\nfunction dwUtilsSubstractBordersHeight(element, height) {\r\n    try {\r\n        if (!element.style) {\r\n            return height;\r\n        }\r\n        if (element.style.paddingTop) {\r\n            height -= parseInt(element.style.paddingTop);\r\n        }\r\n        if (element.style.paddingBottom) {\r\n            height -= parseInt(element.style.paddingBottom);\r\n        }\r\n        if (element.style.borderTopWidth) {\r\n            height -= parseInt(element.style.borderTopWidth);\r\n        }\r\n        if (element.style.borderBottomWidth) {\r\n            height -= parseInt(element.style.borderBottomWidth);\r\n        }\r\n        //  if (element.style.marginTop) {\r\n        //    height -= parseInt(element.style.marginTop);\r\n        //  }\r\n        //  if (element.style.marginBottom) {\r\n        //    height -= parseInt(element.style.marginBottom);\r\n        //  }\r\n    } catch (exception) {\r\n        if (dwFrameworkShowDevelopmentMessages()) {\r\n            var exceptionstring = \"Exception while running substractBordersHeight height: \" + height + \" (NaN: \" + isNaN(height) + \")\";\r\n            //      exceptionstring += \"\\n  message: \" + exception.message;\r\n            exceptionstring += \"\\n  object: \" + element + \" typof: \" + typeof (element);\r\n            // Alle Eigenschaften der Exception-Instanz ausgeben\r\n            for (var exceptionproperty in exception) {\r\n                exceptionstring += \"\\n  \" + exceptionproperty + \": \" + exception[exceptionproperty];\r\n            }\r\n            alert(exceptionstring);\r\n        }\r\n    }\r\n    return height;\r\n}\r\n\r\n/**\r\n * Setzt die Größe des Elements, komplett mit Margin/Borders/Padding\r\n *\r\n * @param element\r\n * @param height\r\n */\r\nfunction dwUtilsSetHeight(element, height) {\r\n    // Bestimmung, was ich setzen muss\r\n    height = dwUtilsSubstractBordersHeight(element, height);\r\n    if (height < 0) {\r\n        height = 0;\r\n    }\r\n\r\n    element.style.height = height + \"px\";\r\n}\r\n\r\n/**\r\n * Zeigt den Maus-Wartecursor an. Gleichzeitig wird auch keine Eingabe mehr zugelassen.\r\n */\r\nfunction dwUtilsShowWaitCursor() {\r\n    var dwUtilsShowWaitCursorOverlay = $(DWUTILS_WAIT_CURSOR_COMP_ID);\r\n    if (dwUtilsShowWaitCursorOverlay != null) {\r\n        return;\r\n    }\r\n    var body = document.getElementsByTagName(\"body\")[0];\r\n    var div = document.createElement(\"div\");\r\n    div.id = DWUTILS_WAIT_CURSOR_COMP_ID;\r\n    div.style.zIndex = 999999;\r\n    div.style.position = \"absolute\";\r\n    div.style.top = 0;\r\n    div.style.right = 0;\r\n    div.style.bottom = 0;\r\n    div.style.left = 0;\r\n    div.style.cursor = \"wait\";\r\n    div.style.backgroundColor = \"white\"; // Geht im IE nur wenn hier nicht transparent, sonst kommen die Events durch (Firefox unbekannt)\r\n    div.style.visibility = \"visible\";\r\n    div.style.filter = \"alpha(opacity=0)\";\r\n    div.style.opacity = 0;\r\n    body.appendChild(div);\r\n}\r\n\r\n/**\r\n * Setzt den Mauscursor wieder auf Nicht-Wartend\r\n */\r\nfunction dwUtilsShowNormalCursor() {\r\n    var dwUtilsShowWaitCursorOverlay = $(DWUTILS_WAIT_CURSOR_COMP_ID);\r\n    if (dwUtilsShowWaitCursorOverlay != null) {\r\n        var body = document.getElementsByTagName(\"body\")[0];\r\n        if (dwDomHasChildNode(body, dwUtilsShowWaitCursorOverlay)) {\r\n            body.removeChild(dwUtilsShowWaitCursorOverlay);\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * Legt ein Layer darüber damit man nichts mehr eingeben kann\r\n */\r\nfunction dwUtilsDisableInput() {\r\n    var dwUtilsDisableInputOverlay = $(\"dwUtilsDisableInputOverlay\");\r\n    if (dwUtilsDisableInputOverlay != null) {\r\n        return;\r\n    }\r\n\r\n    var body = document.getElementsByTagName(\"body\")[0];\r\n    var div = document.createElement(\"div\");\r\n    div.id = \"dwUtilsDisableInputOverlay\";\r\n    div.style.zIndex = 999998;\r\n    div.style.position = \"absolute\";\r\n    div.style.top = 0;\r\n    div.style.right = 0;\r\n    div.style.bottom = 0;\r\n    div.style.left = 0;\r\n    div.style.backgroundColor = \"white\"; // Geht im IE nur wenn hier nicht transparent, sonst kommen die Events durch (Firefox unbekannt)\r\n    div.style.visibility = \"visible\";\r\n    div.style.filter = \"alpha(opacity=0)\";\r\n    div.style.opacity = 0;\r\n    body.appendChild(div);\r\n}\r\n\r\n/**\r\n * Erlaubt wieder Eingaben\r\n */\r\nfunction dwUtilsEnableInput() {\r\n    var body = document.getElementsByTagName(\"body\")[0];\r\n    var dwUtilsDisableInputOverlay = $(\"dwUtilsDisableInputOverlay\");\r\n    if (dwUtilsDisableInputOverlay != null) {\r\n        body.removeChild(dwUtilsDisableInputOverlay);\r\n    }\r\n}\r\n\r\nfunction dwUtilsSetOpacity(element, opacityPercent) {\r\n    if (opacityPercent > 99.99) {\r\n        if (typeof (element.style.opacity) != \"undefined\") {\r\n            element.style.opacity = 1;\r\n        }\r\n        element.style.filter = \"\"; // Filter könnte auch woanders bereits gesetzt worden sein\r\n    } else {\r\n        if (typeof (element.style.opacity) != \"undefined\") {\r\n            element.style.opacity = opacityPercent / 100.0;\r\n            element.style.filter = \"\"; // Filter könnte auch woanders bereits gesetzt worden sein\r\n        } else {\r\n            element.style.filter = \"alpha(opacity=\" + opacityPercent + \")\";\r\n        }\r\n    }\r\n}\r\n\r\nfunction dwUtilsFadeInControlCssAnimations(controlId, setVisible, setDisplayBlock) {\r\n    var control = $(controlId);\r\n    if (control == null) {\r\n        return;\r\n    }\r\n    if (setDisplayBlock) {\r\n        control.style.display = 'block';\r\n    }\r\n    if (setVisible) {\r\n        control.style.visibility = \"visible\";\r\n    }\r\n    control.style.animation = \"anim_opacity100 0.2s ease-in-out\";\r\n    dwUtilsSetOpacity(control, 100);\r\n}\r\n\r\nfunction dwUtilsFadeInControl(controlId, setVisible, setDisplayBlock) {\r\n    if (framework_isIE && (parseFloat(framework_browserVersion) < 10.0)) {\r\n        // IE < 10 wird die alte Methode verwendet\r\n    } else if (!framework_isWithAnimations) {\r\n        // Alte Methode macht es richtig\r\n    } else {\r\n        dwUtilsFadeInControlCssAnimations(controlId, setVisible, setDisplayBlock);\r\n        return;\r\n    }\r\n    var control = $(controlId);\r\n    if (control == null) {\r\n        return;\r\n    }\r\n    if (!framework_isWithAnimations) {\r\n        // Gleich alles sichtbar machen und raus\r\n        dwUtilsSetOpacity(control, 100);\r\n        if (setDisplayBlock) {\r\n            control.style.display = 'block';\r\n        }\r\n        if (setVisible) {\r\n            control.style.visibility = \"visible\";\r\n        }\r\n        return;\r\n    }\r\n    try {\r\n        var opacity = DWUTILS_FADE_OPACITY_START;\r\n        dwUtilsSetOpacity(control, opacity);\r\n        if (setDisplayBlock) {\r\n            control.style.display = 'block';\r\n        }\r\n        if (setVisible) {\r\n            control.style.visibility = \"visible\";\r\n        }\r\n        var fadeFunctionId = setInterval(function() {\r\n            opacity += DWUTILS_FADE_OPACITY_INCREMENT;\r\n            if (opacity >= 99) {\r\n                dwUtilsSetOpacity(control, 100);\r\n                clearInterval(fadeFunctionId);\r\n            } else {\r\n                dwUtilsSetOpacity(control, opacity);\r\n            }\r\n        }, DWUTILS_FADE_STEP_CONTROL_MS);\r\n    } catch (exception) {\r\n        // Wenn, dann kracht es oben bei control.style.opacity. D.h. wir müssen es nur noch aktiv schalten\r\n        if (setDisplayBlock) {\r\n            control.style.display = 'block';\r\n        }\r\n        if (setVisible) {\r\n            control.style.visibility = \"visible\";\r\n        }\r\n    }\r\n}\r\n\r\nfunction dwUtilsFadeInWindowCssAnimations(windowId) {\r\n    var contentDiv = $(windowId + \"_contentdiv\");\r\n    var layerDiv = $(windowId + \"_layerdiv\");\r\n    if ((contentDiv == null) || (layerDiv == null)) {\r\n        return;\r\n    }\r\n    if (layerDiv.style.visibility != \"visible\") {\r\n        layerDiv.style.visibility = \"visible\";\r\n    }\r\n    var finalOpacity = layerDiv.style.opacity * 100;\r\n    var animOpacity = Math.max(2, Math.min(4, finalOpacity / 10)) * 10; // gültige Werte: 20, 30 oder 40\r\n    contentDiv.style.animation = \"anim_opacity100 0.2s ease-in-out\";\r\n    layerDiv.style.animation = \"anim_opacity\" + animOpacity + \" 0.2s ease-in-out\";\r\n    dwUtilsSetOpacity(contentDiv, 100);\r\n    dwUtilsSetOpacity(layerDiv, finalOpacity);\r\n}\r\n\r\nfunction dwUtilsFadeInWindow(windowId) {\r\n    if (framework_isIE && (parseFloat(framework_browserVersion) < 10.0)) {\r\n        // IE < 10 wird die alte Methode verwendet\r\n    } else if (!framework_isWithAnimations) {\r\n        // Alte Methode macht es richtig\r\n    } else {\r\n        dwUtilsFadeInWindowCssAnimations(windowId);\r\n        return;\r\n    }\r\n    var contentDiv = $(windowId + \"_contentdiv\");\r\n    var layerDiv = $(windowId + \"_layerdiv\");\r\n    if ((contentDiv == null) || (layerDiv == null)) {\r\n        return;\r\n    }\r\n    var finalOpacity = layerDiv.style.opacity * 100;\r\n    if (!framework_isWithAnimations) {\r\n        // Gleich alles sichtbar machen und raus\r\n        dwUtilsSetOpacity(contentDiv, 100);\r\n        dwUtilsSetOpacity(layerDiv, finalOpacity);\r\n        if (layerDiv.style.visibility != \"visible\") {\r\n            layerDiv.style.visibility = \"visible\";\r\n        }\r\n        return;\r\n    }\r\n    var animateLayerDiv = true;\r\n    try {\r\n        var opacity = finalOpacity - 10; // Damit man nicht \"aus dem nichts\" kommt, sondern schon vorher ein bisschen was sieht (analog zu DWUTILS_FADE_OPACITY_START)\r\n        dwUtilsSetOpacity(contentDiv, opacity);\r\n        if (animateLayerDiv) {\r\n            dwUtilsSetOpacity(layerDiv, opacity * (finalOpacity / 100.0));\r\n        } else {\r\n            dwUtilsSetOpacity(layerDiv, finalOpacity);\r\n        }\r\n        if (layerDiv.style.visibility != \"visible\") {\r\n            layerDiv.style.visibility = \"visible\";\r\n        }\r\n        var fadeFunctionId = setInterval(function() {\r\n            opacity += DWUTILS_FADE_OPACITY_INCREMENT;\r\n            if (opacity >= 99) {\r\n                dwUtilsSetOpacity(contentDiv, 100);\r\n                if (animateLayerDiv) {\r\n                    dwUtilsSetOpacity(layerDiv, finalOpacity);\r\n                }\r\n                clearInterval(fadeFunctionId);\r\n            } else {\r\n                dwUtilsSetOpacity(contentDiv, opacity);\r\n                if (animateLayerDiv) {\r\n                    dwUtilsSetOpacity(layerDiv, opacity * (finalOpacity / 100.0));\r\n                }\r\n            }\r\n        }, DWUTILS_FADE_STEP_WINDOW_MS);\r\n    } catch (exception) {\r\n        // Wenn, dann kracht es oben bei contentDiv.style.opacity. Wir müssen also nur noch\r\n        // unsere Sachen anzeigen, opacity können die dann nicht haben\r\n        if (layerDiv.style.visibility != \"visible\") {\r\n            layerDiv.style.visibility = \"visible\";\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * Führt die Methode zeitlich verzögert aus. Die timeoutId wird als Referenz in der Registry verwendet.\r\n * Wurde die Methode erfolgreich ausgeführt, wird die Referenz aus der Registry entfernt (assoziatives Array)\r\n * @param event\r\n * @param func\r\n * @param timeoutId\r\n * @param timeout\r\n */\r\nfunction dwUtilsSetDelayedFunction(event, func, timeoutId, timeout) {\r\n    DWUTILS_FUNCTION_TIMEOUT_REGISTRY[timeoutId] = setTimeout(func + \";dwUtilsReleaseDelayedFunction(\\\"\" + timeoutId + \"\\\");\", timeout);\r\n}\r\n\r\n/**\r\n * Entfernt den Eintrag aus der Registry (assoziatives Array). Ist aktuell noch eine Id gefunden, wird der zeitlich\r\n * verzögerte Funtkionsaufruf entfernt.\r\n * @param timeoutId\r\n */\r\nfunction dwUtilsReleaseDelayedFunction(timeoutId) {\r\n    if (DWUTILS_FUNCTION_TIMEOUT_REGISTRY[timeoutId] != null) {\r\n        clearTimeout(DWUTILS_FUNCTION_TIMEOUT_REGISTRY[timeoutId]);\r\n        delete (DWUTILS_FUNCTION_TIMEOUT_REGISTRY[timeoutId]);\r\n    }\r\n}\r\n\r\n/**\r\n * Liefert das Ziel HTML Element zurück\r\n * siehe http://www.quirksmode.org/js/events_properties.html#target\r\n * @param event\r\n */\r\nfunction dwUtilsGetEventTarget(event) {\r\n    var eventTarget = null;\r\n    if (event.target) {// W3C Standard\r\n        eventTarget = event.target;\r\n    } else if (event.srcElement) { // IE\r\n        eventTarget = event.srcElement;\r\n    }\r\n    return eventTarget;\r\n}\r\n\r\n/**\r\n * Liefert das Ziel der Mouse-Out Bewegung zurück (wohin verlässt die Maus den Bereich ...)\r\n * @param event\r\n */\r\nfunction dwUtilsGetMouseOutEventTarget(event) {\r\n    event = dwFrameworkGetEvent(event);\r\n    var mouseOutTarget = null;\r\n    if (event.relatedTarget) {\r\n        mouseOutTarget = event.relatedTarget;\r\n    } else if (event.toElement) {\r\n        mouseOutTarget = event.toElement;\r\n    }\r\n    return mouseOutTarget;\r\n}\r\n\r\nfunction dwUtilsGetMouseEnteredFromEventTarget(event) {\r\n    event = dwFrameworkGetEvent(event);\r\n    var mouseEnteredFrom = null;\r\n    if (event.relatedTarget) {\r\n        mouseEnteredFrom = event.relatedTarget;\r\n    } else if (event.fromElement) {\r\n        mouseEnteredFrom = event.fromElement;\r\n    }\r\n    return mouseEnteredFrom;\r\n}\r\n\r\n/**\r\n * Simple Clone Methode. Überträgt alle Eigenschaften/Properties\r\n * @param obj\r\n * @return {Object}\r\n */\r\nfunction dwUtilsCloneObject(obj) {\r\n    var clonedObject = {};\r\n    for (var attrib in obj) {\r\n        clonedObject[attrib] = obj[attrib];\r\n    }\r\n    return clonedObject;\r\n}\r\n\r\nfunction dwUtilsGetEventKeyCode(event) {\r\n    // Im IE ist teilweise nur das Attribut keyCode gefüllt. Ist das Attribut which gefüllt hat es den gleichen Wert wie keyCode\r\n    // Im Firefox wird bei keyPressed Events der keyCode auf '0' gesetzt - hier muss der Wert explizit aus which ausgewertet werden\r\n    // Der Wert '0' wird durch den impliziten Cast als 'false' interpretiert\r\n    // Durch diesen Ansatz lässt sich ein keyCode für alle Key-Events ermitteln und zurückliefern (keyUp, keyDown, keyPressed)\r\n    var keyCode = null;\r\n    if (event.keyCode) { // Key Code beinhaltet die Informationen für KEY_UP und KEY_DOWN Events\r\n        keyCode = event.keyCode;\r\n    } else if (event.which) { // Which beinhaltet die Informationen für KEY_PRESSED Events (insbesondere in Firefox)\r\n        keyCode = event.which;\r\n    }\r\n    return keyCode;\r\n}\r\n\r\n/**\r\n * Überprüfen, ob ein Event innerhalb eines Elements ausgelöst wurde.\r\n */\r\nfunction dwUtilsCheckMouseOutsideElement(event, element) {\r\n    var dwPoint = dwUtilsGetRelMouseCoords(event, element);\r\n    if (dwPoint == null) {\r\n        return false;\r\n    }\r\n    if ((dwPoint.x >= element.offsetWidth) || (dwPoint.y >= element.offsetHeight)\r\n        || (dwPoint.x < 0) || (dwPoint.y < 0)) {\r\n        return true;\r\n    }\r\n    return false;\r\n}\r\n\r\n/**\r\n * Liefert die Parameter einer Methode (String-Darstellung)\r\n * z.B. function foo(\"test1, test2\", \"test3, event, 123)\r\n * @param methodString\r\n */\r\nfunction dwUtilsGetFunctionParameters(methodString) {\r\n    var params = methodString.substring(methodString.indexOf(\"(\") + 1, methodString.indexOf(\")\"));\r\n    var pattern = \"\\\".[^\\\"]*.\\\"|[A-Za-z0-9]+\";\r\n    params = params.match(new RegExp(pattern, \"g\")); // global search\r\n    return params;\r\n}\r\n\r\n/**\r\n * Liefert den Namen einer Methode (String-Darstellung) oder null, falls es keine Funktion ist\r\n * @param methodString\r\n */\r\nfunction dwUtilsGetFunctionName(methodString) {\r\n    methodString = dwUtilsTrim(methodString);\r\n    if (dwUtilsStringStartsWith(methodString, \"function\", false)) {\r\n        var methodName = methodString.substring(\"function\".length, methodString.indexOf(\"(\"));\r\n        methodName = dwUtilsTrim(methodName);\r\n        return methodName;\r\n    } else {\r\n        return null;\r\n    }\r\n}\r\n\r\n/**\r\n * Liefert die Zeit als HH:MM:SS\r\n */\r\nfunction dwUtilsGetGermanTime() {\r\n    var date = new Date();\r\n    var hours = prefixStringWithCharsUpToLength(date.getHours(), '0', 2);\r\n    var minutes = prefixStringWithCharsUpToLength(date.getMinutes(), '0', 2);\r\n    var seconds = prefixStringWithCharsUpToLength(date.getSeconds(), '0', 2);\r\n    return hours + \":\" + minutes + \":\" + seconds;\r\n}\r\n\r\n/**\r\n * Liefert das Datum als TT.MM.JJJJ\r\n */\r\nfunction dwUtilsGetGermanDate() {\r\n    var date = new Date();\r\n    var day = prefixStringWithCharsUpToLength(date.getDate(), '0', 2);\r\n    var month = prefixStringWithCharsUpToLength(date.getMonth() + 1, '0', 2);\r\n    var year = date.getFullYear();\r\n    return day + \".\" + month + \".\" + year;\r\n}\r\n\r\n\r\n/**\r\n * Siehe StrUtils.prefixStringWithCharsUpToLength\r\n * @param string\r\n * @param character\r\n * @param length\r\n */\r\nfunction prefixStringWithCharsUpToLength(string, character, length) {\r\n    string = string + \"\"; // Damit wir nicht aus versehen mit Nummern arbeiten\r\n    if (string.length == length) {\r\n        return string;\r\n    } else if (string.length < length) {\r\n        while (string.length < length) {\r\n            string = character + string;\r\n        }\r\n        return string;\r\n    } else {\r\n        return string.substring(0, length);\r\n    }\r\n}\r\n\r\nfunction dwUtilsGetBaseApplicationUrl() {\r\n    // URL (in der Browser Zeile) hat den Pfad /app - dieser wird entfernt und die Basis url zur Anwendung zurückgeliefert\r\n    var url = window.location.href;\r\n    if (url.indexOf(\"#\") > -1) {\r\n        // Ist der aufgerufenen URL ein '#' Zeichen abgehängt muss dieses vorher entfernt werden.\r\n        // Andernfalls werden die URL Parameter ggf. als Fragment an die URL angehängt und stehen dem Server nicht zur Verfügung\r\n        url = url.substring(0, url.indexOf(\"#\"));\r\n    }\r\n    var baseUrl = url;\r\n    if (baseUrl.indexOf(\"?\") > -1) {\r\n        baseUrl = baseUrl.substring(0, baseUrl.indexOf(\"?\"));\r\n    }\r\n\r\n    if (dwUtilsStringEndsWith(baseUrl, \"/\", false)) {\r\n        baseUrl = baseUrl.substring(0, baseUrl.length - 1);\r\n    }\r\n    if (dwUtilsStringEndsWith(baseUrl, \"/app\", false)) {\r\n        baseUrl = baseUrl.substring(0, baseUrl.length - \"/app\".length);\r\n    }\r\n    return baseUrl;\r\n}\r\n\r\nfunction dwUtilsEvaluateJavascript(methods, waitForPendingLibraries) {\r\n//    while (waitForPendingLibraries && (DWDOM_PENDING_SCRIPT_FILES.length > 0)) {\r\n//        // Warten ...\r\n//        // Reihenfolge der auszuführenden Befehle darf sich nicht verändern, daher darf hier kein\r\n//        // setTimeout verwendet werden\r\n//    }\r\n//    eval(methods);\r\n    if (waitForPendingLibraries && (DWDOM_PENDING_SCRIPT_FILES.length > 0)) {\r\n        setTimeout(function() {\r\n            dwUtilsEvaluateJavascript(methods, waitForPendingLibraries);\r\n        }, 200);\r\n    } else {\r\n        eval(methods);\r\n    }\r\n\r\n}\r\n\r\n/**\r\n * Splittet den String\r\n * Normale Split Methode ist nicht immer ausreichend. Für einen Leerstring wird ein Array der Länge 1 zurückgeliefert,\r\n * wenn nicht returnBlanks auf false gesetzt wird.\r\n * @param string\r\n * @param delimiter\r\n * @param returnBlanks\r\n */\r\nfunction dwUtilsSplit(string, delimiter, returnBlanks) {\r\n    if (string == null) {\r\n        return new Array();\r\n    }\r\n    if ((string == \"\") && !returnBlanks) {\r\n        return new Array();\r\n    }\r\n    var array = string.split(delimiter);\r\n    if (!returnBlanks) {\r\n        array = dwUtilsRemoveFromArrayByText(array, \"\");\r\n    }\r\n    return array;\r\n}\r\n\r\n/**\r\n * Überprüft ob ein HTML-Element zumindest eine der übergebenen CSS-Klassen enthält.\r\n *\r\n * @param iterElement                   Iterator auf dem HTML-Element\r\n * @param classNamesToBeCheckedArray    Array, welches die Klassennamen enthält, die auf dem HTML-Element überprüft werden sollen\r\n * @returns {boolean}                   true, falls das HTML-Element zumindest eine der Klassen aus classNamesToBeCheckedArray enthält\r\n */\r\nfunction dwUtilsHasElementAtLeastOneOfClasses(iterElement, classNamesToBeCheckedArray) {\r\n    var elementClasses = iterElement.className;\r\n    if (!elementClasses) {\r\n        return false;\r\n    }\r\n    var classNameArray = elementClasses.split(\" \");\r\n    for (var i = 0; i < classNamesToBeCheckedArray.length; i++) {\r\n        if (dwUtilsIsInArray(classNameArray, classNamesToBeCheckedArray[i])) {\r\n            return true;\r\n        }\r\n    }\r\n    return false;\r\n}\r\n\r\nfunction dwUtilsTrimLeft(string) {\r\n    var startIdx = 0;\r\n    for (var i = 0; i < string.length - 1; i++) {\r\n        if (string.charAt(i) == ' ') {\r\n            startIdx = i + 1;\r\n        } else {\r\n            break;\r\n        }\r\n    }\r\n    return string.substring(startIdx);\r\n}\r\n\r\nfunction dwUtilsColorHex2RGB(hexColor) {\r\n    var hexCode = hexColor.replace(/#/, '');\r\n    var rgb = new Array();\r\n    rgb[\"red\"] = parseInt(hexCode.substr(0, 2), 16);\r\n    rgb[\"green\"] = parseInt(hexCode.substr(2, 2), 16);\r\n    rgb[\"blue\"] = parseInt(hexCode.substr(4, 2), 16);\r\n    return rgb;\r\n}\r\n\r\n/**\r\n * Wandelt RGB in OLE Format um (Integer Wert zur Repräsentation)\r\n * @param red\r\n * @param green\r\n * @param blue\r\n */\r\nfunction dwUtilsColorRGB2Integer(red, green, blue) {\r\n    return (red + green * 256 + blue * 65536);\r\n}\r\n\r\nfunction dwUtilsColorHex2Integer(hexColor) {\r\n    var rgb = dwUtilsColorHex2RGB(hexColor);\r\n    return dwUtilsColorRGB2Integer(rgb[\"red\"], rgb[\"green\"], rgb[\"blue\"]);\r\n}\r\n\r\n/**\r\n * Simple Sortier-Funktion für Nummern\r\n * @param num1\r\n * @param num2\r\n * @param asc\r\n */\r\nfunction dwUtilsSortNumberAsc(num1, num2) {\r\n    return (num1 - num2);\r\n}\r\n\r\n/**\r\n * Ermittelt ob eine Komponente für die Event-Koordinaten gefunden wurde, die innerhalb des\r\n * Scroll-Containers (event target) liegt (in IE)\r\n * Bei Einbindung des IE8 in einem Frame muss die Information speziell ermittelt werden\r\n * @param e\r\n * @return true wenn innerhalb des Containers geklickt wurde\r\n *         false wenn die Scrollbars gedrückt wurden (outside)\r\n */\r\nfunction dwUtilsComponentFromPoint(e) {\r\n    var target = dwUtilsGetEventTarget(e);\r\n    if (target.componentFromPoint) {\r\n        var comp = target.componentFromPoint(e.clientX, e.clientY);\r\n        if ((comp == null) || (comp == \"outside\")) {\r\n            if (!framework_isIE8) {\r\n                return false;\r\n            }\r\n        } else {\r\n            return true;\r\n        }\r\n    }\r\n    // IE8 hat eine fehlerhafte Erkennung der Informationen wenn man innerhalb von i/frames ist\r\n    var bounds = dwUtilsBoundingClientRectAsDwRectangle(target);\r\n    var scrollBarWidth = dwUtilsGetScrollbarWidth(target);\r\n    if ((e.clientY >= bounds.y1) &&\r\n        (e.clientY <= (bounds.y1 + target.offsetHeight - scrollBarWidth)) &&\r\n        (e.clientX >= bounds.x1) &&\r\n        (e.clientX <= (bounds.x1 + target.offsetWidth - scrollBarWidth))) {\r\n        return true;\r\n    } else {\r\n        return false;\r\n    }\r\n}\r\n\r\n/**\r\n * Überprüft, ob irgendwo auf die Scollbar (inkl. deren Buttons) geklickt wurde\r\n */\r\nfunction dwUtilsIsClickOnScrollBar(e) {\r\n    if (framework_isIE) {\r\n        var target = dwUtilsGetEventTarget(e);\r\n        if ((target != null) && target.componentFromPoint) {\r\n            return !dwUtilsComponentFromPoint(e);\r\n        }\r\n    } else if (framework_isFirefox) {\r\n        if (e.originalTarget != null) {\r\n            try {\r\n                e.originalTarget.tagName;\r\n            } catch (ex) {\r\n                return true;\r\n            }\r\n        }\r\n    } else if (framework_isSafari || framework_isOpera) { // Überprüfung für Safari und Opera\r\n        var target = dwUtilsGetEventTarget(e);\r\n        var scrollBarV = target.offsetWidth - target.clientWidth;\r\n        var scrollBarH = target.offsetHeight - target.clientHeight;\r\n        if ((scrollBarV > 0) && (e.srcElement == target)) {\r\n            if (e.offsetX > target.clientWidth - scrollBarV) {\r\n                return true;\r\n            }\r\n        }\r\n        if ((scrollBarH > 0) && (e.srcElement == target)) {\r\n            if (e.offsetY > target.clientHeight - scrollBarH) {\r\n                return true;\r\n            }\r\n        }\r\n    }\r\n\r\n    return false;\r\n}\r\n\r\n/**\r\n * Überprüft, ob auf ein Tag mit dem übergebenen Tagnamen geklickt wurde\r\n */\r\nfunction dwUtilsIsClickOnTagType(e, tagName) {\r\n    var target = dwUtilsGetEventTarget(e);\r\n    if (target && target.tagName && (target.tagName.toLowerCase() == tagName.toLowerCase())) {\r\n        return true;\r\n    } else {\r\n        return false;\r\n    }\r\n}\r\n\r\nfunction dwUtilsLoadUrlInTarget(/*string*/ url, /*string*/ target, /*optional*/ method, /*optional*/ baseUrl,\r\n                                /*optional*/ errorCallback) {\r\n    var form = dwUtilsParseUrlToForm(url, target, method || \"get\", baseUrl);\r\n    var body = document.getElementsByTagName(\"body\")[0];\r\n    body.appendChild(form);\r\n    try {\r\n        form.submit();\r\n    } catch (exception) {\r\n        // Kann sein, dass der Popupblocker erst einmal die Ausführung verhindert.\r\n        // Im Firefox wird hier eine Exception geworfen.\r\n        // Das Formular wird unten in removeChild trotzdem sauber ausgehängt und der Dialog kommt trotzdem sauber, wenn\r\n        // man es nachträglich im gelben Bereich im Firefox erlaubt\r\n        if (DWAJAX_SHOW_ERRORS) {\r\n            if (typeof (errorCallback) == \"function\") {\r\n                errorCallback(\"Url: \" + url + \"\\nTarget: \" + target);\r\n            }\r\n        }\r\n    }\r\n    try {\r\n        body.removeChild(form);\r\n    } catch (exception) {\r\n    }\r\n}\r\n\r\nfunction dwUtilsGetLogDate() {\r\n    var date = new Date();\r\n    var string = \"\";\r\n    string += dwUtilsPrefixStringWithCharsUpToLength(date.getHours() + \"\", \"0\", 2);\r\n    string += \":\";\r\n    string += dwUtilsPrefixStringWithCharsUpToLength(date.getMinutes() + \"\", \"0\", 2);\r\n    string += \":\";\r\n    string += dwUtilsPrefixStringWithCharsUpToLength(date.getSeconds() + \"\", \"0\", 2);\r\n    string += \".\";\r\n    string += dwUtilsPrefixStringWithCharsUpToLength(date.getMilliseconds() + \"\", \"0\", 3);\r\n    return string;\r\n}\r\n\r\nfunction dwUtilsPrefixStringWithCharsUpToLength(string, char, length) {\r\n    while (string.length < length) {\r\n        string = char + string;\r\n    }\r\n    return string;\r\n}\r\n\r\nfunction dwUtilsPadStringWithCharsUpToLength(string, char, length) {\r\n    while (string.length < length) {\r\n        string += char;\r\n    }\r\n    return string;\r\n}\r\n\r\nfunction dwUtilsToHex(string) {\r\n    var result = \"\";\r\n    for (var i = 0; i < string.length; i++) {\r\n        result += dwUtilsCharCodeToHex(string.charCodeAt(i));\r\n    }\r\n    return result;\r\n}\r\n\r\nfunction dwUtilsParseUrlToForm(/*string*/ url, /*string*/ target, /*string*/ method, /*string*/ baseUrl) {\r\n    var form = document.createElement(\"form\");\r\n    form.setAttribute(\"style\", \"visibility:hidden; overflow:hidden; display:inline; z-Index: -1000; position:absolute; left:-1px; top:-1px; width: 1px; height:1px\");\r\n    if (FRAMEWORK_LOGCHANNELS.isActive(\"J2EE_URL\")) {\r\n        dwUtilsLogUrl(url);\r\n    }\r\n    var fragment;\r\n    if (dwUtilsStringContains(url, \"#\")) {\r\n        fragment = dwUtilsStringAfter(url, \"#\");\r\n        url = dwUtilsStringBefore(url, \"#\");\r\n    }\r\n    if (dwUtilsStringContains(url, \"?\")) {\r\n        var after = dwUtilsStringAfter(url, \"?\");\r\n        if (dwUtilsIsEmpty(baseUrl)) {\r\n            url = dwUtilsStringBefore(url, \"?\");\r\n        } else {\r\n            url = baseUrl;\r\n        }\r\n        var splitted = after.split(\"&\");\r\n        for (var i = 0; i < splitted.length; i++) {\r\n            var item = splitted[i];\r\n            var input = document.createElement(\"input\");\r\n            input.setAttribute(\"type\", \"hidden\");\r\n            if (dwUtilsStringContains(item, \"=\")) {\r\n                var keyValue = item.split(\"=\");\r\n                input.setAttribute(\"name\", decodeURIComponent(keyValue[0]));\r\n                if (keyValue.length == 2) {\r\n                    var value = keyValue[1];\r\n                    // Beim dekodieren wird der Wert %2B zu '+' gewandelt. Dieses '+' Zeichen darf nicht zu einem Leerzeichen interpretiert werden\r\n                    // Die manuelle Ersetzung von + zu Leerzeichen muss daher vor dem dekodieren durchgeführt werden\r\n                    value = dwUtilsReplaceCharacter(value, '+', ' ');\r\n                    value = decodeURIComponent(value);\r\n                    input.setAttribute(\"value\", value);\r\n                }\r\n            } else {\r\n                input.setAttribute(\"name\", decodeURIComponent(item));\r\n            }\r\n            form.appendChild(input);\r\n            form.appendChild(document.createElement(\"br\"));\r\n        }\r\n    }\r\n    if (dwUtilsIsDefined(fragment)) {\r\n        url = url + \"#\" + fragment;\r\n    }\r\n    form.setAttribute(\"action\", url);\r\n    form.setAttribute(\"method\", method);\r\n    form.setAttribute(\"target\", target);\r\n    form.setAttribute(\"enctype\", \"application/x-www-form-urlencoded\");\r\n    return form;\r\n}\r\n\r\nfunction dwUtilsLogUrl(url) {\r\n    try {\r\n        var queryString = dwUtilsStringAfter(url, \"?\");\r\n        if (queryString === \"\") {\r\n            return;\r\n        }\r\n\r\n        var paramList = queryString.split(\"&\");\r\n\r\n        for (var i = 0; i < paramList.length; i++) {\r\n            var paramString = paramList[i];\r\n            var param = paramString.split(\"=\");\r\n\r\n            var key = param[0];\r\n            var value = param.length === 2 ? param[1] : null;\r\n\r\n            var message = key;\r\n            if (value != null) {\r\n                message += \"=\" + value;\r\n            } else {\r\n                // Vereinfachung des Logging ... (ein NULL Wert wurde zumindest im ersten Teil-String bereits protokolliert)\r\n                value = \"\";\r\n            }\r\n\r\n            var valueUriDecoded = decodeURIComponent(dwUtilsReplaceCharacter(value, '+', ' '));\r\n\r\n            message += \" (uriDecoded: '\" + decodeURIComponent(key) + \"'='\" + valueUriDecoded + \"' AsHex: '\" + dwUtilsToHex(value) + \"' AsDecodedUriHex: '\" + dwUtilsToHex(valueUriDecoded) + \"')\";\r\n\r\n            dwFrameworkLog(\"J2EE_URL\", message);\r\n        }\r\n\r\n    } catch (exception) {\r\n        var exceptionName = exception.name || \"<Unknown Error>\";\r\n        var exceptionMessage = exception.message || exception;\r\n        dwFrameworkLog(\"J2EE_ERROR\", exceptionName + \" - \" + exceptionMessage);\r\n    }\r\n}\r\n\r\nfunction dwUtilsSendData(/*string*/ url, /*string*/ contentType, /*string*/ bearerToken, /*string*/ content, errorCallback) {\r\n    var xmlHttp = dwUtilsCreateXmlHttpRequest(true);\r\n    xmlHttp.open(\"POST\", url, true);\r\n    xmlHttp.setRequestHeader(\"Content-type\", contentType);\r\n    if (bearerToken) {\r\n        xmlHttp.setRequestHeader(\"Authorization\", \"Bearer \" + bearerToken);\r\n    }\r\n    dwDomAddEventListener(xmlHttp, \"onreadystatechange\", function() {\r\n        if (xmlHttp.readyState == DWUTILS_READY_STATE.DONE) {\r\n            var successful = true;\r\n            if (xmlHttp.status == 0) {\r\n                successful = false;\r\n                if (DWAJAX_LOG_ERRORS) {\r\n                    // Direkter Aufruf von \"dwAjaxToServer\" - damit die Nachricht zuverlässig vor Anzeige eines Alerts zum Server übertragen wird (dwAjaxCurrentlySending könnte 'true' sein)\r\n                    dwAjaxToServer(new Date().getTime(), false, [\"error@DW@url@DW@\" + (xmlHttp.status) + \"@DWSUB@\" + (url || \"\") + \"@DWSUB@\" + (content || \"\")], true, new Date().getTime());\r\n                }\r\n                if (DWAJAX_SHOW_ERRORS) {\r\n                    if (typeof (errorCallback) == \"function\") {\r\n                        errorCallback(\"Status: Connection Aborted\" + \"\\nUrl: \" + url + \"\\nParameter: \" + content);\r\n                    }\r\n                }\r\n            } else if (xmlHttp.status >= 400) {\r\n                successful = false;\r\n                if (DWAJAX_LOG_ERRORS) {\r\n                    // Direkter Aufruf von \"dwAjaxToServer\" - damit die Nachricht zuverlässig vor Anzeige eines Alerts zum Server übertragen wird (dwAjaxCurrentlySending könnte 'true' sein)\r\n                    dwAjaxToServer(new Date().getTime(), false, [\"error@DW@url@DW@\" + (xmlHttp.status) + \"@DWSUB@\" + (url || \"\") + \"@DWSUB@\" + (content || \"\")], true, new Date().getTime());\r\n                }\r\n                if (DWAJAX_SHOW_ERRORS) {\r\n                    if (typeof (errorCallback) == \"function\") {\r\n                        errorCallback(\"Status: \" + xmlHttp.status + \"\\nUrl: \" + url + \"\\nParameter: \" + content);\r\n                    }\r\n                }\r\n            }\r\n            // Erfolgreicher Aufruf ...\r\n            if (typeof (dwAjaxFireCustomEvent) != \"undefined\") {\r\n                var rootWindowId = dwFrameworkGetRootWindowId();\r\n                var uri = url;\r\n                dwAjaxInvisibleUriLoaded(null, rootWindowId, rootWindowId, \"uri=\" + encodeURIComponent(uri) + \"@DWSUB@success=\" + successful + \"@DWSUB@__INT_statuscode=\" + xmlHttp.status, true);\r\n            }\r\n        }\r\n    });\r\n    xmlHttp.send(content);\r\n}\r\n\r\nfunction dwUtilsLoadUrlInInvisibleTarget(/*string*/ url, /*string*/ method, /*function(string, int, string, string)*/ errorCallback,\r\n                                         /*string*/ transferType, /*boolean*/ doNotLogErrors, /*boolean*/ doNotFireInvisibleUriLoadedEvent,\r\n                                         /*function(int, string)*/ successCallback, /*map<string,string>*/ requestHeaderMap, /*string*/logtype, /*string*/ logChannel) {\r\n    if (!dwUtilsIsDefined(transferType)) {\r\n        transferType = \"AUTO\";\r\n    }\r\n    var baseLoc = window.location.href.substring(0, window.location.href.indexOf(\"/\", \"https://\".length));\r\n\r\n    var forceAjaxTransferType = (transferType === \"AJAX\");\r\n    var preferAjaxTransferType = (transferType === \"AUTO\") &&\r\n                                 (dwUtilsStringStartsWith(url, baseLoc, false) || dwUtilsStringStartsWith(url, \"/\", false));\r\n    var errorLogType = logtype ? logtype : \"error\"\r\n    if (forceAjaxTransferType || preferAjaxTransferType) {\r\n        var qs = \"\";\r\n        if (method == \"POST\") {\r\n            qs = dwUtilsStringAfter(url, \"?\");\r\n            url = dwUtilsStringBefore(url, \"?\");\r\n        }\r\n        var xmlHttp = dwUtilsCreateXmlHttpRequest(true, requestHeaderMap);\r\n        xmlHttp.open(method, url, true);\r\n        xmlHttp.setRequestHeader(\"Content-type\", \"application/x-www-form-urlencoded;charset=UTF-8\");\r\n        // Laut W3C sollte Connection und Content-Length nicht interpretiert werden\r\n        // http://www.w3.org/TR/XMLHttpRequest/#the-setrequestheader%28%29-method\r\n        // Connection 'close' kann aber ggf. Vorteile mit sich bringen. Request Header werden gesetzt, ggf. aber von Browsern ignoriert (z.B. Chrome)\r\n        dwDomAddEventListener(xmlHttp, \"onreadystatechange\", function() {\r\n            if (xmlHttp.readyState == DWUTILS_READY_STATE.DONE) {\r\n                var successful = true;\r\n                if (xmlHttp.status == 0) {\r\n                    successful = false;\r\n                    if (DWAJAX_LOG_ERRORS && !doNotLogErrors) {\r\n                        // Direkter Aufruf von \"dwAjaxToServer\" - damit die Nachricht zuverlässig vor Anzeige eines Alerts zum Server übertragen wird (dwAjaxCurrentlySending könnte 'true' sein)\r\n                        dwAjaxToServer(new Date().getTime(), false, dwUtilsBuildErrorUpdates(errorLogType, xmlHttp.status, url, qs, logChannel), true, new Date().getTime());\r\n                    }\r\n                    if (DWAJAX_SHOW_ERRORS) {\r\n                        if (typeof (errorCallback) == \"function\") {\r\n                            errorCallback(\"Status: Connection Aborted\" + \"\\nUrl: \" + url + \"\\nParameter: \" + qs, xmlHttp.status, url, qs);\r\n                        }\r\n                    }\r\n                } else if (xmlHttp.status >= 400) {\r\n                    successful = false;\r\n                    if (DWAJAX_LOG_ERRORS && !doNotLogErrors) {\r\n                        // Direkter Aufruf von \"dwAjaxToServer\" - damit die Nachricht zuverlässig vor Anzeige eines Alerts zum Server übertragen wird (dwAjaxCurrentlySending könnte 'true' sein)\r\n                        dwAjaxToServer(new Date().getTime(), false, dwUtilsBuildErrorUpdates(errorLogType, xmlHttp.status, url, qs, logChannel), true, new Date().getTime());\r\n                    }\r\n                    if (DWAJAX_SHOW_ERRORS) {\r\n                        if (typeof (errorCallback) == \"function\") {\r\n                            errorCallback(\"Status: \" + xmlHttp.status + \"\\nUrl: \" + url + \"\\nParameter: \" + qs, xmlHttp.status, url, qs);\r\n                        }\r\n                    }\r\n                }\r\n\r\n                // Erfolgreicher Aufruf ...\r\n                if (successful && (typeof (successCallback) == \"function\")) {\r\n                    successCallback(xmlHttp.status, xmlHttp.response);\r\n                }\r\n\r\n                if (!doNotFireInvisibleUriLoadedEvent) {\r\n                    if (typeof (dwAjaxFireCustomEvent) != \"undefined\") {\r\n                        var rootWindowId = dwFrameworkGetRootWindowId();\r\n                        var uri = url;\r\n                        if (qs) {\r\n                            uri += \"?\" + qs;\r\n                        }\r\n                        dwAjaxInvisibleUriLoaded(null, rootWindowId, rootWindowId, \"uri=\" + encodeURIComponent(uri) + \"@DWSUB@success=\" + successful + \"@DWSUB@__INT_statuscode=\" + xmlHttp.status, true);\r\n                    }\r\n                }\r\n            }\r\n        });\r\n        xmlHttp.send(qs);\r\n    } else {\r\n        var body = document.getElementsByTagName(\"body\")[0];\r\n\r\n        var containers = document.getElementsByName(\"invisiblerequest\");\r\n        var idSuffix = \"_\" + containers.length;\r\n\r\n        var container = document.createElement(\"div\");\r\n        dwDomSetDomAttribute(container, \"name\", \"invisiblerequest\");\r\n        dwDomSetDomAttribute(container, \"id\", \"invisiblerequest\" + idSuffix);\r\n\r\n        var form = dwUtilsParseUrlToForm(url, container.id + \"_target\", method);\r\n//        form.setAttribute(\"acceptCharset\", \"UTF-8\"); // Wirklich notwendig?!\r\n        form.setAttribute(\"name\", container.id + \"_form\");\r\n        form.setAttribute(\"id\", container.id + \"_form\");\r\n        container.appendChild(form);\r\n\r\n        var iframe = document.createElement(\"iframe\");\r\n        iframe.style.border = 0;\r\n        iframe.border = 0;\r\n        iframe.style.height = 0;\r\n        iframe.style.width = 0;\r\n        dwDomSetDomAttribute(iframe, \"name\", container.id + \"_target\");\r\n\r\n        function cleanup() {\r\n            body.removeChild(container);\r\n            body = null;\r\n            container = null;\r\n            form = null;\r\n            iframe = null;\r\n        }\r\n\r\n        // Iframe muss vor den Event-Handlern hinzugefügt werden. In bestimmten Browsern (z.B. Chrome) wird beim append bereits ein onload ausgelöst\r\n        container.appendChild(iframe);\r\n        body.appendChild(container);\r\n\r\n        iframe.onload = function() {\r\n            if (typeof (dwAjaxFireCustomEvent) != \"undefined\") {\r\n                var rootWindowId = dwFrameworkGetRootWindowId();\r\n                var uri = url;\r\n                if (qs) {\r\n                    uri += \"?\" + qs;\r\n                }\r\n                // Auch bei Fehlern (z.B. 404 wird meistens onload ausgelöst und nicht onerror. Eine genaue Unterscheidung zwischen\r\n                // success und fehlgeschlagenen Aufrufen ist nicht erkennbar. Nachdem im Fehlerfall zumindest auch die \"Fehlerseite\"\r\n                // geladen wurde liefern wir 'true' als success Information zurück.\r\n                dwAjaxInvisibleUriLoaded(null, rootWindowId, rootWindowId, \"uri=\" + encodeURIComponent(uri) + \"@DWSUB@success=true@DWSUB@__INT_statuscode=200\", true);\r\n            }\r\n            if (cleanup) {\r\n                cleanup();\r\n                cleanup = null;\r\n            }\r\n        };\r\n        iframe.onerror = function() {\r\n            // Methode wird verm. nicht zuverlässig von den Browsern unterstützt. Error Handling\r\n            if (cleanup) {\r\n                cleanup();\r\n                cleanup = null;\r\n            }\r\n        };\r\n        setTimeout(function() {\r\n            if (cleanup) {\r\n                cleanup();\r\n                cleanup = null;\r\n            }\r\n        }, 10000);\r\n\r\n        form.submit();\r\n    }\r\n}\r\n\r\nfunction dwUtilsBuildErrorUpdates(/*string*/errorLogType, /*int*/status, /*string*/url,/*string*/ qs,/*string*/ logChannel) {\r\n    var result = errorLogType + \"@DW@url@DW@\" + status + \"@DWSUB@\" + (url || \"\") + \"@DWSUB@\" + (qs || \"\");\r\n    if (logChannel) {\r\n        result = result + \"@DWSUB@\" + logChannel;\r\n    }\r\n    return [result]\r\n}\r\n\r\nfunction dwUtilsCreateXmlHttpRequest(noCache, /*map<string,string>*/ requestHeaderMap) {\r\n    var xmlHttp = null;\r\n    if (window.XMLHttpRequest) {\r\n        xmlHttp = new XMLHttpRequest();\r\n    }\r\n    if (xmlHttp && noCache) {\r\n        function xmlHttpRequestNoCacheHeaderFunc() {\r\n            if (xmlHttp.readyState == DWUTILS_READY_STATE.OPENED) { // opened - in diesen Zustand lassen sich Request Header setzen\r\n                xmlHttp.setRequestHeader(\"Expires\", 0); //  Datei in jedem Fall neu laden\r\n                xmlHttp.setRequestHeader(\"Pragma\", \"no-cache\"); // An Proxy-Agenten: Datei bitte nicht auf Proxy-Server speichern!\r\n                xmlHttp.setRequestHeader(\"Cache-Control\", \"no-cache,no-store,must-revalidate,post-check=0,pre-check=0\"); // Anweisung an den Browser: keinen Cache benutzen, sondern von Originalseite laden\r\n                xmlHttp.setRequestHeader(\"P3P\", \"CP=\\\"CAO PSA OUR\\\"\");\r\n\r\n                // Optionale zusätzliche Request-Header\r\n                if ((typeof (requestHeaderMap) != \"undefined\") && (requestHeaderMap != null)) {\r\n                    try {\r\n                        const mapIterator = requestHeaderMap.entries();\r\n                        let entry = null;\r\n                        while (((entry = mapIterator.next()) != null) && !entry.done) {\r\n                            xmlHttp.setRequestHeader(entry.value[0], entry.value[1]);\r\n                        }\r\n                    } catch (e) {\r\n                        alert(\"dwUtilsCreateXmlHttpRequest(): Wrong type for parameter 'requestHeaderMap' (must be a map).\" + e);\r\n                    }\r\n                }\r\n\r\n                dwDomRemoveEventListener(xmlHttp, \"onreadystatechange\", xmlHttpRequestNoCacheHeaderFunc);\r\n            }\r\n        }\r\n\r\n        dwDomAddEventListener(xmlHttp, \"onreadystatechange\", xmlHttpRequestNoCacheHeaderFunc, false);\r\n    }\r\n    return xmlHttp;\r\n}\r\n\r\nfunction dwUtilsCanvasDrawEllipse(canvasContext, x, y, width, height, color, fill) {\r\n    var k = 0.5522848;\r\n    var offsetX = (width / 2) * k;\r\n    var offsetY = (height / 2) * k;\r\n    var xMiddle = x + width / 2;\r\n    var yMiddle = y + height / 2;\r\n    var xEnd = x + width;\r\n    var yEnd = y + height;\r\n    canvasContext.strokeStyle = color;\r\n    canvasContext.fillStyle = color;\r\n    canvasContext.beginPath();\r\n    canvasContext.moveTo(x, yMiddle);\r\n    canvasContext.bezierCurveTo(x, yMiddle - offsetY, xMiddle - offsetX, y, xMiddle, y);\r\n    canvasContext.bezierCurveTo(xMiddle + offsetX, y, xEnd, yMiddle - offsetY, xEnd, yMiddle);\r\n    canvasContext.bezierCurveTo(xEnd, yMiddle + offsetY, xMiddle + offsetX, yEnd, xMiddle, yEnd);\r\n    canvasContext.bezierCurveTo(xMiddle - offsetX, yEnd, x, yMiddle + offsetY, x, yMiddle);\r\n    if (fill) {\r\n        canvasContext.fill();\r\n    }\r\n    canvasContext.closePath();\r\n    canvasContext.stroke();\r\n}\r\n\r\n\r\nfunction dwUtilsCanvasDrawRect(canvasContext, x, y, width, height, color, fill) {\r\n    canvasContext.strokeStyle = color;\r\n    canvasContext.fillStyle = color;\r\n    if (fill) {\r\n        canvasContext.fillRect(x, y, width, height);\r\n    } else {\r\n        canvasContext.strokeRect(x, y, width, height);\r\n    }\r\n}\r\n\r\nfunction dwUtilsCanvasDrawLine(canvasContext, x, y, x2, y2, color) {\r\n    canvasContext.strokeStyle = color;\r\n    canvasContext.beginPath();\r\n    canvasContext.moveTo(x, y);\r\n    canvasContext.lineTo(x2, y2);\r\n    canvasContext.stroke();\r\n    canvasContext.closePath();\r\n}\r\n\r\nfunction dwUtilsCanvasDrawImage(canvasContext, img, srcX, srcY, srcWidth, srcHeight, destX, destY, destWidth, destHeight) {\r\n    //console.log(\"Drawing context: \" + canvasContext + \" \" + canvasContext.width + \"x\" + canvasContext.height +\r\n    //            \" img: \" + img + \" \" + img.width + \"x\" + img.height + \" src: \" + srcX+\"x\"+srcY + \"|\" + srcWidth + \"x\" + srcHeight +\r\n    //            \" dest: \" + destX + \"x\" + destY + \"|\" + destWidth + \"x\" + destHeight);\r\n    canvasContext.drawImage(img, srcX, srcY, srcWidth, srcHeight, destX, destY, destWidth, destHeight);\r\n}\r\n\r\nfunction dwUtilsCanvasGetImageData(canvasContext, srcX, srcY, srcWidth, srcHeight) {\r\n    return canvasContext.getImageData(srcX, srcY, srcWidth, srcHeight);\r\n}\r\n\r\nfunction dwUtilsCanvasPutImageData(canvasContext, srcX, srcY, imageData) {\r\n    canvasContext.putImageData(imageData, srcX, srcY);\r\n}\r\n\r\n/**\r\n * Aus Kompatibilitätsgründen zum EC.jjs in Java müssen Großbuchstaben zurückgegeben werden\r\n * @param cc\r\n * @return {String}\r\n */\r\nfunction dwUtilsCharCodeToHex(cc) {\r\n    return cc.toString(16).toUpperCase();\r\n}\r\n\r\n/**\r\n * Siehe EC.jjs in Java\r\n */\r\nfunction dwUtilsJjs(string) {\r\n    var out = \"\";\r\n    for (var i = 0; i < string.length; i++) {\r\n        var ch = string.charAt(i);\r\n        var cc = string.charCodeAt(i);\r\n        if (cc > 0xfff) {\r\n            out += \"\\\\u\" + dwUtilsCharCodeToHex(cc);\r\n        } else if (cc > 0xff) {\r\n            out += \"\\\\u0\" + dwUtilsCharCodeToHex(cc);\r\n        } else if (cc > 0x7f) {\r\n            out += \"\\\\u00\" + dwUtilsCharCodeToHex(cc);\r\n        } else if (cc < 32) {\r\n            if (ch == '\\f') {\r\n                out += '\\\\f';\r\n            } else if (ch == '\\r') {\r\n                out += '\\\\r';\r\n            } else if (ch == '\\n') {\r\n                out += '\\\\n';\r\n            } else if (ch == '\\b') {\r\n                out += '\\\\b';\r\n            } else if (ch == '\\t') {\r\n                out += '\\\\t';\r\n            } else if (cc > 0xf) {\r\n                out += \"\\\\u00\" + dwUtilsCharCodeToHex(cc);\r\n            } else {\r\n                out += \"\\\\u000\" + dwUtilsCharCodeToHex(cc);\r\n            }\r\n        } else {\r\n            if (ch == '\"') {\r\n                out += '\\\\\"';\r\n            } else if (ch == '\\\\') {\r\n                out += '\\\\\\\\';\r\n            } else if (ch == '\\'') {\r\n                out += '\\\\\\'';\r\n            } else if (ch == '/') {\r\n                out += '\\\\/';\r\n            } else {\r\n                out += ch;\r\n            }\r\n        }\r\n    }\r\n    return out;\r\n}\r\n\r\nfunction dwUtilsCountString(string, stringInside) {\r\n    if ((string.length == 0) || (stringInside.length == 0)) {\r\n        return 0;\r\n    }\r\n    var counter = 0;\r\n    var index = string.indexOf(stringInside);\r\n    while (index != -1) {\r\n        counter++;\r\n        if (string.charAt(index) == '#') {\r\n            string = string.replaceAt(index, '-');\r\n        } else {\r\n            string = string.replaceAt(index, '#');\r\n        }\r\n        index = string.indexOf(stringInside);\r\n    }\r\n    return counter;\r\n}\r\n\r\nfunction dwUtilsCutHtmlTags(text) {\r\n    if (dwUtilsStringStartsWith(text, \"<html>\", true)) {\r\n        text = text.substring(6);\r\n    }\r\n    if (dwUtilsStringEndsWith(text, \"</html>\", true)) {\r\n        text = text.substring(0, text.length - 7);\r\n    }\r\n    return text;\r\n}\r\n\r\nfunction dwUtilsSetCountdownTime(time) {\r\n    DWUTILS_COUNTDOWN_TIME = time;\r\n}\r\n\r\nfunction dwUtilsSetCountDownControlId(controlId) {\r\n    DWUTILS_COUNTDOWN_CONTROL_ID = controlId;\r\n}\r\n\r\nfunction dwUtilsInitCountdown() {\r\n    if (DWUTILS_COUNTDOWN_CONTROL_ID != null) {\r\n        if (DWUTILS_COUNTDOWN_INTERVAL) {\r\n            clearInterval(DWUTILS_COUNTDOWN_INTERVAL);\r\n        }\r\n        DWUTILS_COUNTDOWN_INTERVAL = setInterval(\"dwUtilsCountdown()\", 1000); // jede Sekunde die Anzeige anpassen\r\n    }\r\n}\r\n\r\nfunction dwUtilsCountdown() {\r\n    var container = $(DWUTILS_COUNTDOWN_CONTROL_ID);\r\n    if (container == null) {\r\n        return;\r\n    }\r\n    DWUTILS_COUNTDOWN_TIME--;\r\n    var minutes = Math.floor(DWUTILS_COUNTDOWN_TIME / 60);\r\n    var seconds = DWUTILS_COUNTDOWN_TIME % 60;\r\n    if (DWUTILS_COUNTDOWN_TIME < 0) {\r\n        container.innerHTML = \"00:00\";\r\n        if (DWUTILS_COUNTDOWN_INTERVAL) {\r\n            window.clearInterval(DWUTILS_COUNTDOWN_INTERVAL); // aufräumen\r\n        }\r\n    } else {\r\n        var time = \"\";\r\n        if (minutes < 10) {\r\n            time = \"0\";\r\n        }\r\n        time += minutes;\r\n        time += \":\";\r\n        if (seconds < 10) {\r\n            time += \"0\";\r\n        }\r\n        time += seconds;\r\n        container.innerHTML = time;\r\n    }\r\n}\r\n\r\nfunction dwUtilsCopyToClipboardWithClipboardJS(text) {\r\n    var event = document.createEvent('MouseEvents');\r\n    var dummyNode = $(\"body\"); // Lib arbeitet normalerweise in Verbindung mit DOM Elementen, die ein Event auslösen ... wir rufen es einfach so auf\r\n    event.initMouseEvent('click', true, true, null, 1, 0, 0, 0, 0,\r\n                         false, false, false, false, 0, dummyNode);\r\n    Object.defineProperty(event, 'currentTarget', {writable: false, value: dummyNode}); // Funktioniert nicht im IE11\r\n    Object.defineProperty(event, 'delegateTarget', {writable: false, value: dummyNode});\r\n\r\n\r\n    var cb = new ClipboardJS('.null', { // Fake Identifier (nicht benötigt)\r\n        text: function() {\r\n            return text;\r\n        }\r\n    });\r\n\r\n    cb.on('success', function(e) {\r\n        cb.off('error');\r\n        cb.off('success');\r\n    });\r\n\r\n    cb.on('error', function(e) {\r\n        var rootWindowId = dwFrameworkGetRootWindowId();\r\n\r\n        var currentRootNode = document.getElementById(\"dwmainwrapper\");\r\n        var childWindows = dwDomGetChildrenByTagname(currentRootNode, \"div\", {\"class\": \"guiwindow_child_container\"}, false);\r\n        var mostRecentChildWindow = null; // Popup mit höchtem z-Index\r\n        for (var i = 0; i < childWindows.length; i++) {\r\n            var childWindow = childWindows[i];\r\n            if ((mostRecentChildWindow == null) || (childWindow.style.zIndex > mostRecentChildWindow.style.zIndex)) {\r\n                mostRecentChildWindow = childWindow;\r\n            }\r\n        }\r\n        if (mostRecentChildWindow) {\r\n            rootWindowId = mostRecentChildWindow.id.substring(0, mostRecentChildWindow.id.indexOf(\"_\"));\r\n        }\r\n\r\n        if (rootWindowId) {\r\n            var params = \"text=\" + e.text;\r\n            dwAjaxAddUpdate(rootWindowId + \"@DW@\" + rootWindowId + \"@DW@__custom_openCopyDialog@DW@\" + params, true, true);\r\n\r\n        }\r\n        cb.off('error');\r\n        cb.off('success');\r\n        // Ist das Event nicht Synchron ausgelöst bleibt ggf. ein TextArea Objekt zurück. Das wird explizit gesucht und entfernt\r\n        var body = $(\"body\");\r\n        var bodyChildren = body.children;\r\n        var lastChild = bodyChildren[bodyChildren.length - 1];\r\n        if ((lastChild.tagName.toLowerCase() === \"textarea\") && ((lastChild.style.left === \"-9999px\") || (lastChild.style.right === \"-9999px\"))) {\r\n            body.removeChild(lastChild);\r\n        }\r\n    });\r\n\r\n    cb.onClick(event);\r\n}\r\n\r\nfunction dwUtilsCopyToClipboard(text) {\r\n    if (navigator.clipboard && window.isSecureContext) {\r\n        navigator.clipboard.writeText(text).then(function() {\r\n            // succesfully copied. Nothing to do\r\n        }, function() {\r\n            dwUtilsCopyToClipboardWithClipboardJS(text);\r\n        });\r\n    } else {\r\n        dwUtilsCopyToClipboardWithClipboardJS(text);\r\n    }\r\n}\r\n\r\n\r\nfunction dwUtilArrayBufferToBase64(buffer) {\r\n    var binary = '';\r\n    var bytes = new Uint8Array(buffer);\r\n    var len = bytes.byteLength;\r\n    for (var i = 0; i < len; i++) {\r\n        binary += String.fromCharCode(bytes[i]);\r\n    }\r\n    return window.btoa(binary);\r\n}\r\n\r\nlet debounceTimerMap = new Map();\r\n\r\n/**\r\n * Ruft eine Funktion mit verzögerung auf.\r\n * Wenn die funktion for Ablaufen der verzögerung nochmal aufgerufen wird, startet der timer neu.\r\n */\r\nfunction dwUtilsDebounce(controlId, func, timeout) {\r\n    let timer = debounceTimerMap.get(controlId);\r\n    clearTimeout(timer);\r\n    timer = setTimeout(function() {\r\n        func.apply(this);\r\n        debounceTimerMap.delete(controlId);\r\n    }, timeout);\r\n    debounceTimerMap.set(controlId, timer);\r\n}\r\n\r\nfunction dwUtilsGetDebounceTime(controlId) {\r\n    const control = $(controlId);\r\n    return control.getAttribute(\"debounce\");\r\n}\r\n\n/*\r\n * Copyright (c) 2016 Docware GmbH\r\n */\r\nvar DWDOM_NAVIGATION_PATH_DIRECTION = {BOTTOM_UP: \"bottom_up\", TOP_DOWN: \"top_down\"};\r\n\r\nvar DWDOM_PENDING_SCRIPT_FILES = new Array();\r\n\r\nvar dwDomPendingScriptFilesAccessLock = false;\r\n\r\n/**\r\n * Entfernt die Liste der Kindknoten (von-bis) aus dem Parent\r\n * @param children\r\n * @param startIdx : int\r\n * @param howMany : int\r\n */\r\nfunction dwDomRemoveChildren(children, startIdx, howMany) {\r\n    if (!children || !(children.length)) { // Abbruch wenn children null/undefined oder keine Kinder gelöscht werden sollen\r\n        if (dwFrameworkShowDevelopmentMessages()) {\r\n            alert(\"InvalidArgumentException calling dwDomRemoveChildren: children null or empty\");\r\n        }\r\n        return;\r\n    }\r\n\r\n    var parent = children[0].parentNode;\r\n    var endIdx = Math.min(children.length, startIdx + howMany) - 1;\r\n    var numToDelete = endIdx - startIdx;\r\n    for (var i = 0; i <= numToDelete; i++) {\r\n        parent.removeChild(children[endIdx - i]);\r\n    }\r\n}\r\n\r\nfunction dwDomRemoveSelf(node) {\r\n    if (!node) {\r\n        if (dwFrameworkShowDevelopmentMessages()) {\r\n            alert(\"InvalidArgumentException calling dwDomRemoveSelf: node null\");\r\n        }\r\n        return;\r\n    }\r\n    var parent = node.parentNode;\r\n    parent.removeChild(node);\r\n}\r\n\r\nfunction dwDomRemoveElementChildNodes(node, startIdx, howMany) {\r\n    var children = dwDomGetElementChildNodes(node);\r\n    howMany = (typeof (howMany) == \"undefined\") ? children.length - startIdx : howMany;\r\n    dwDomRemoveChildren(children, startIdx, howMany);\r\n}\r\n\r\nfunction dwDomRemoveAllElementChildNodes(node) {\r\n    var children = dwDomGetElementChildNodes(node);\r\n    if (children.length == 0) {\r\n        // Es gibt nichts zu entfernen. Abbruch\r\n        return;\r\n    }\r\n    var startIdx = 0;\r\n    var endIdx = children.length;\r\n    dwDomRemoveChildren(children, startIdx, endIdx);\r\n}\r\n\r\n/**\r\n * Entfernt die Knoten (Elemente, Texte, ...) zwischen startIdx und startIdx+howMany\r\n * Werden die Parameter startIdx und howMany nicht gesetzt, werden alle Knoten entfernt\r\n */\r\nfunction dwDomRemoveChildNodes(node, startIdx, howMany) {\r\n    var children = node.childNodes;\r\n    howMany = (typeof (howMany) == \"undefined\") ? children.length - startIdx : howMany;\r\n    dwDomRemoveChildren(children, startIdx, howMany);\r\n}\r\n\r\nfunction dwDomRemoveAllChildNodes(node) {\r\n    // Laut http://jsperf.com/innerhtml-vs-removechild/256 am schnellsten\r\n    var child;\r\n    while (child = node.firstChild) {\r\n        node.removeChild(child);\r\n    }\r\n}\r\n\r\nfunction dwDomGetIndexOfElementEntry(element) {\r\n    var parentNode = element.parentNode;\r\n    if (parentNode == null) {\r\n        return -1;\r\n    }\r\n    var children = dwDomGetElementChildNodes(parentNode);\r\n    return dwUtilsGetIndexOfEntry(children, element);\r\n}\r\n\r\nfunction dwDomGetIndexOfNodeEntry(node) {\r\n    var parentNode = node.parentNode;\r\n    if (parentNode) {\r\n        var childNodes = parentNode.childNodes;\r\n        return dwUtilsGetIndexOfEntry(childNodes, node);\r\n    } else {\r\n        return -1;\r\n    }\r\n}\r\n\r\nfunction dwDomRemoveChildrenByType(node, nodeType) {\r\n    var childrenByType = dwDomGetChildNodesByType(node, nodeType);\r\n    dwDomRemoveChildren(childrenByType, 0, childrenByType.length);\r\n}\r\n\r\n/**\r\n * Entfernt alle Inhalts-Tabellen-Zeilen.\r\n * @param tableRowContainer DOM Container mit 'tr' Unterknoten (entweder table oder tbody)\r\n * @param hasHeader Indikator, ob es sich bei der ersten Zeile der Tabelle um den Header handelt\r\n */\r\nfunction dwDomRemoveTableContentRows(tableRowContainer, hasHeader) {\r\n    var firstContentRow = (hasHeader) ? 1 : 0;\r\n    if (firstContentRow) { // Hat Header ...\r\n        dwDomRemoveElementChildNodes(tableRowContainer, firstContentRow);\r\n    } else { // Hat keinen Header\r\n        dwDomRemoveAllElementChildNodes(tableRowContainer)\r\n    }\r\n}\r\n\r\n/**\r\n * Erstellt automatisch die fehlenden Kind-Knoten\r\n *\r\n * Diese Methode ist nur notwendig, wenn Zugriffe auf ein Grid-Layout durchgeführt werden.\r\n * Ansonsten sollte die notwendige DOM Struktur bereits vorhanden sein\r\n *\r\n * @param parentNode : node Knoten in den die erstellten Kindknoten eingefügt werden sollen\r\n * @param requiredNodesCount : int Anzahl der dummy Knoten die erstellt und eingefügt werden sollen\r\n * @param nodeName : string  Name des Elements, z.B. tr oder td\r\n * @param elementModelFromServer : htmlstring_or_null html string zur Erstellung des Elements (z.B. <tr align='right'>). NULL erlaubt\r\n */\r\nfunction dwDomAutoCreateMissingElementChildNodes(parentNode, requiredNodesCount, nodeName, elementModelFromServer) {\r\n    var elementModel;\r\n    var docFrag = document.createDocumentFragment();\r\n    for (var i = 0; i < requiredNodesCount; i++) {\r\n        // Jeder Knoten muss neu generiert werden (oder gecloned) - Objekte können dem DOM nur einmalig hinzugefügt werden\r\n        if (elementModelFromServer) {\r\n            elementModel = dwDomParseStringToNodes(elementModelFromServer);\r\n        } else {\r\n            elementModel = document.createElement(nodeName);\r\n        }\r\n        docFrag.appendChild(elementModel);\r\n    }\r\n    parentNode.appendChild(docFrag);\r\n}\r\n\r\n/**\r\n * Erstellt die erwartete Knotenstruktur, wenn diese automatisch generiert werden soll.\r\n *\r\n * Diese Methode ist nur notwendig, wenn Zugriffe auf ein Grid-Layout durchgeführt werden.\r\n * Ansonsten sollte die notwendige DOM Struktur bereits vorhanden sein\r\n *\r\n * Sollen nur notwendige neue Zeilen generiert werden, und die Zelle am Ende der entsprechenden Zeile appended werden\r\n * muss der columnIdx auf den Wert '-1' gesetzt werden\r\n * @param control : node\r\n * @param rowIdx : int\r\n * @param columnIdx : int\r\n * @param trElementModelFromServer : htmlstring_or_null\r\n * @param tdElementModelFromServer : htmlstring_or_null\r\n */\r\nfunction dwDomAutoCreateMissingElementNodeStructure(control, rowIdx, columnIdx, trElementModelFromServer, tdElementModelFromServer) {\r\n    // Fehlende Zeilen (tr Knoten) erstellen\r\n    var rowContainer = dwDomGetRealRowContainerNode(control);\r\n    var currentRowCount = dwDomGetElementChildNodes(rowContainer).length;\r\n    dwDomAutoCreateMissingElementChildNodes(rowContainer, (rowIdx + 1) - currentRowCount, \"tr\", trElementModelFromServer);\r\n    // In der letzten Zeile fehlende td Knoten erstellen (ohne den aktuell darzustellenden)\r\n    var cellContainer = dwDomGetChildAtIndex(rowContainer, rowIdx);\r\n    var currentCellCount = dwDomGetElementChildNodes(cellContainer).length;\r\n    if (columnIdx == -1) {\r\n        return;\r\n    }  // Keine Spalten generieren - z.B. bei appendChild Operationen\r\n    dwDomAutoCreateMissingElementChildNodes(cellContainer, columnIdx - currentCellCount, \"td\", tdElementModelFromServer);\r\n}\r\n\r\n/**\r\n * Liefert das Kind an der Index-Position\r\n * Ist der Index zu groß wird NULL zruückgeliefert\r\n *\r\n * Bei Aktionen, die fehlende Zellen automatisch generieren sollen, muss die Methode \"dwDomAutoCreateMissingElementNodeStructure\"\r\n * vorher ausgeführt werden, um die notwendige Struktur bereits aufzubauen\r\n *\r\n * @param parentNode\r\n * @param siblingIdx\r\n */\r\nfunction dwDomGetChildAtIndex(parentNode, childIdx) {\r\n    var childNodes = dwDomGetElementChildNodes(parentNode);\r\n    if (childIdx >= childNodes.length) {\r\n        if (dwFrameworkShowDevelopmentMessages()) {\r\n            alert(\"ArrayIndexOutOfBounds in dwDomGetChildAtIndex: \" + childIdx + \" / \" + childNodes.length);\r\n        }\r\n        return null;\r\n    } else {\r\n        return childNodes[childIdx];\r\n    }\r\n}\r\n\r\n/**\r\n * Navigiert in die Tiefe des DOM und liefert den ersten Knoten zurück, der den gesuchten Node-Namen hat (z.B. table)\r\n * @param parentNode : node\r\n * @param nodeName : string\r\n */\r\nfunction dwDomGetFirstChildByName(parentNode, nodeName) {\r\n    var match = null;\r\n    for (var i = 0; i < parentNode.childNodes.length; i++) {\r\n        var childNode = parentNode.childNodes[i];\r\n        if (childNode.nodeType != DWUTILS_NODE_TYPE.ELEMENT) {\r\n            continue;\r\n        }\r\n        if (childNode.nodeName.toLowerCase() == nodeName) {\r\n            match = childNode;\r\n            break;\r\n        } else {\r\n            var potentialMatch = dwDomGetFirstChildByName(childNode, nodeName);\r\n            if (potentialMatch != null) {\r\n                match = potentialMatch;\r\n                break;\r\n            }\r\n        }\r\n    }\r\n    return match;\r\n}\r\n\r\n/**\r\n * Liefert den Knoten zurück, in dem die TR Knoten eingebettet sind.\r\n * Ist tableNode kein 'table' Knoten, wird NULL zurückgeliefert.\r\n * @param tableNode : node tbody node (wenn vorhanden), table node oder null sonst\r\n */\r\nfunction dwDomGetRealRowContainerNode(tableNode) {\r\n    if (tableNode.nodeName.toLowerCase() == \"tbody\") {\r\n        return tableNode;\r\n    }    // Knoten ist bereits tbody - keine weitere Überprüfung der Kinder notwendig\r\n    if (tableNode.nodeName.toLowerCase() != \"table\") {\r\n        // Knoten ist weder tbody noch table.\r\n        throw (\"Node invalid. Expected nodename 'table', but found '\" + tableNode.nodeName + \"'. Returning null\");\r\n    }\r\n    // Aktueller Knoten ist 'table'. Row-Container kann table oder tbody sein\r\n    var tableChildNode = dwDomGetFirstElementChild(tableNode);\r\n    if (tableChildNode != null) {\r\n        // tbody als Kindelement gefunden. Dies ist der Container für die tr Elemente\r\n        if (tableChildNode.nodeName.toLowerCase() == \"tbody\") {\r\n            return tableChildNode;\r\n        }\r\n    }\r\n    return tableNode;\r\n}\r\n\r\n/**\r\n * Liefert das Control zurück, das ausgehend vom control mit Hilfe des navigationPaths erreicht wird\r\n *\r\n * Der Pfad kann als Array (von Zahlen), String (mit '|' delimiter) oder als eine einzelne Zahl angegeben werden\r\n *\r\n * @param control : node\r\n * @param navigationPath : array_or_string_or_number\r\n */\r\nfunction dwDomFindContainer(control, navigationPath, preferTBodyIfContainerIsTable) {\r\n    var navigationCommands;\r\n    if (typeof (navigationPath) == \"string\") {\r\n        navigationCommands = navigationPath.split(DWUTILS_NAVIGATION_PATH_DIVIDER);\r\n    } else if (typeof (navigationPath) == \"number\") {\r\n        navigationCommands = new Array(navigationPath + \"\");\r\n    } else {\r\n        navigationCommands = navigationPath;\r\n    }\r\n    var currentNode = control;\r\n    for (var i = 0; i < navigationCommands.length; i++) {\r\n        if (currentNode.nodeName.toLowerCase() == \"table\") {\r\n            currentNode = dwDomGetRealRowContainerNode(currentNode);\r\n        }\r\n        if (navigationCommands[i] == \"\") {\r\n            continue;\r\n        }\r\n        var childIdx = parseInt(navigationCommands[i]);\r\n        currentNode = dwDomGetChildAtIndex(currentNode, childIdx);\r\n        if (currentNode == null) {\r\n            return null;\r\n        }\r\n    }\r\n    if (preferTBodyIfContainerIsTable) {\r\n        if (currentNode.nodeName.toLowerCase() == \"table\") {\r\n            currentNode = dwDomGetRealRowContainerNode(currentNode);\r\n        }\r\n    }\r\n    return currentNode;\r\n}\r\n\r\n/**\r\n * Parsed den XML/HTML String und liefert die entsprechende Knoten-Struktur zurück\r\n *\r\n * Ein eigener Parser wurde früher mal ausprobiert. Aber das ist knifflig und man muss auch die HTML Sachen wie &uml;\r\n * zurückwandeln.\r\n *\r\n * Daher wurde das Verfahren der HTML-> Nodes Umwandlung auf innerHTML umgesetzt.\r\n * Intern wird eine valide HTML Struktur aufgebaut, und das innerHTML bei <td> Objekten automatisch um table und tr ergänzt\r\n *\r\n * Bei Link-Elementen (<a href=\"#\">) kann vor dem # Zeichen die aktuelle Seiten-URL ergänzt werden. Beim Zugriff auf das Attribut (href)\r\n * mit Javascript wird der Wert immer mit Prefix zurückgeliefert (da kein Protokoll an der URL angegeben ist)\r\n *\r\n * Die Methode \"cloneNode(true)\" darf nicht auf die generierten Knoten ausgeführt werden, da sonst Attribute wie \"selected\" verloren gehen\r\n *\r\n * Aus Performancegründen (das ist die Methode die bei AJAX am meisten CPU verbrät wurde auf alles verzichtet, was nicht nötig ist)\r\n * Laut jsperf geht das hier mit innerHtml am schnellsten http://jsperf.com/comparing-ways-to-append-dom-elements\r\n *\r\n * @param node-Objekt basierend auf dem htmlString\r\n */\r\nfunction dwDomParseStringToNodes(htmlString) {\r\n    if (dwFrameworkShowDevelopmentMessages() && (htmlString.indexOf(\"<script\") >= 0)) {\r\n        throw (\"No script tag allowed in node-string. Use dwDomAddScript(...) instead for: '\" + htmlString + \"'.\");\r\n    }\r\n\r\n    var fakeNode = document.createElement(\"div\");\r\n    var firstCharactersLowercase = (htmlString.length >= 4) ? htmlString.substring(0, 4).toLowerCase() : \"\";\r\n    var result;\r\n\r\n    if ((firstCharactersLowercase == \"<td \") || (firstCharactersLowercase == \"<th \") ||\r\n        (firstCharactersLowercase == \"<td>\") || (firstCharactersLowercase == \"<th>\")) {\r\n        fakeNode.innerHTML = \"<table><tbody><tr>\" + htmlString + \"</tr></tbody></table>\";\r\n        result = fakeNode.childNodes[0].childNodes[0].childNodes[0].childNodes[0];\r\n    } else if ((firstCharactersLowercase == \"<tr \") || (firstCharactersLowercase == \"<tr>\")) {\r\n        fakeNode.innerHTML = \"<table><tbody>\" + htmlString + \"</tbody></table>\";\r\n        result = fakeNode.childNodes[0].childNodes[0].childNodes[0];\r\n    } else {\r\n        fakeNode.innerHTML = htmlString;\r\n        result = fakeNode.childNodes[0];\r\n    }\r\n    if (result.tagName.toLowerCase() == \"tbody\") {\r\n        result = result.childNodes[0];\r\n    }\r\n    return result;\r\n}\r\n\r\n/**\r\n * Liefert den Knoten-Namen zurück, sofern der HTML String mit einem '<' beginnt\r\n * @param htmlString\r\n */\r\nfunction dwDomGetInitialTagname(htmlString) {\r\n    if (!dwUtilsStringStartsWith(htmlString, \"<\", false)) {\r\n        return \"\";\r\n    }\r\n    var idxSpace = htmlString.indexOf(\" \");\r\n    var idxClosingTag = htmlString.indexOf(\">\");\r\n    var idxEmptyTag = htmlString.indexOf(\"/>\");\r\n    var idxTagnameEnd = 999999;\r\n    if (idxSpace > -1) {\r\n        idxTagnameEnd = Math.min(idxTagnameEnd, idxSpace);\r\n    }\r\n    if (idxClosingTag > -1) {\r\n        idxTagnameEnd = Math.min(idxTagnameEnd, idxClosingTag);\r\n    }\r\n    if (idxEmptyTag > -1) {\r\n        idxTagnameEnd = Math.min(idxTagnameEnd, idxEmptyTag);\r\n    }\r\n    return htmlString.substring(1, idxTagnameEnd).toLowerCase();\r\n}\r\n\r\n/**\r\n * Fügt den Wert des Style Attributs dem aktuellen Node hinzu.\r\n *\r\n * Style ist kein Attribut im eigentlichen Sinn (key:value) sondern (key:named-array).\r\n * @param node\r\n * @param styleValue Wert des aktuellen Style-Attributs das kopiert werden soll\r\n */\r\nfunction dwDomAddStyleAttribute(node, styleValue) {\r\n    var styles = dwUtilsSplit(styleValue, \";\", false);\r\n    for (var j = 0; j < styles.length; j++) {\r\n        var style = styles[j].split(\":\");\r\n        var key = dwFrameworkCssToJavascriptProperty(style[0]);\r\n        var value = style[1];\r\n        node.style[key] = value;\r\n    }\r\n}\r\n\r\n/**\r\n * Setzt einen Kindknoten.\r\n *\r\n * Ist ein Knoten an der Index-Position vorhanden wird dieser ersetzt. Entspricht der Index der aktuellen Anzahl\r\n * von Kindknoten, wird der neue Knoten angehängt.\r\n * Andernfalls wird eine Fehlermeldung ausgegeben\r\n * @param parentControl\r\n * @param index : int index, darf aktueller Anzahl der Knoten nicht überschreiten\r\n * @param content\r\n */\r\nfunction dwDomSetChild(parentControl, index, content) {\r\n    var childElements = dwDomGetElementChildNodes(parentControl);\r\n    var nodeToReplace = childElements.length > index ? childElements[index] : null;\r\n    if (nodeToReplace != null) {\r\n        // Index zugreifbar. Knoten ersetzen\r\n        dwDomReplaceChild(parentControl, index, content);\r\n    } else if (childElements.length == index) {\r\n        // Index nicht zugreifbar - entspricht aber currentlength + 1. Knoten am Ende anfügen\r\n        dwDomAppendChild(parentControl, content);\r\n    } else {\r\n        // Lücke zwischen vorhandenen Knoten und Index der gesetzt werden soll. Fehlerzustand.\r\n        throw (\"Setting of node failed. Tried to set node \" + index + \" of \" + childElements.length + \".\");\r\n    }\r\n}\r\n\r\n/**\r\n * Parsed den content in eine DOM Knotenstruktur und fügt den neuen Knoten an das parentControl hinzu\r\n * @param parentControl\r\n * @param content\r\n */\r\nfunction dwDomAppendChild(parentControl, content) {\r\n    if ((parentControl == null) || (parentControl.nodeType != DWUTILS_NODE_TYPE.ELEMENT)) {\r\n        throw (\"Failed to append content to node.\"); // Dieser Fall sollte nie auftreten.\r\n    }\r\n    var contentNode = dwDomParseStringToNodes(content);\r\n    parentControl.appendChild(contentNode);\r\n}\r\n\r\n/**\r\n * Parsed den content in eine DOM Knotenstruktur und fügt den neuen Knoten an das parentControl hinzu\r\n * @param parentControl\r\n * @param content\r\n */\r\nfunction dwDomAppendChildren(parentControl, contentArray) {\r\n    if ((parentControl == null) || (parentControl.nodeType != DWUTILS_NODE_TYPE.ELEMENT)) {\r\n        throw (\"Failed to append content to node.\"); // Dieser Fall sollte nie auftreten.\r\n    }\r\n    var docFrag = document.createDocumentFragment();\r\n    for (var i = 0; i < contentArray.length; i++) {\r\n        docFrag.appendChild(dwDomParseStringToNodes(contentArray[i]));\r\n    }\r\n    parentControl.appendChild(docFrag);\r\n}\r\n\r\n/**\r\n * Fügt einem generischen Kind (mit Ausgangspunkt parentControl und navigationPath) Knoten hinzu\r\n * @param parentControl\r\n * @param navigationPath\r\n * @param content\r\n */\r\nfunction dwDomGenericAppendChild(parentControl, navigationPath, content) {\r\n    var control = dwDomFindContainer(parentControl, navigationPath, true);\r\n    dwDomAppendChild(control, content);\r\n}\r\n\r\n/**\r\n * Fügt ein Kind dem DOM an der Position hinzu.\r\n *\r\n * Kann der Index keinem vorhandenen Element zugeordnet werden, wird\r\n * das Kind dem Control am Ende (als letztes Kind) hinzugefügt\r\n * Ist der Index 0, wird er am Anfang eingefügt (und damit auch vor Text-Knoten). Bei allen anderen Index Werten wird die\r\n * Position relativ zu der Anzahl der Elemente (ohne Text-Knoten) ausgewertet\r\n * @param parentControl\r\n * @param insertIdx\r\n * @param content\r\n */\r\nfunction dwDomInsertChild(parentControl, insertIdx, content) {\r\n    insertIdx = parseInt(insertIdx); // sicher ist sicher ...\r\n\r\n    var isAppend = ((insertIdx == 0) && (parentControl.childNodes.length == 0)) ||\r\n                   ((insertIdx > 0) && (insertIdx == dwDomGetElementChildNodes(parentControl).length));\r\n\r\n    if (isAppend) {\r\n        dwDomAppendChild(parentControl, content);\r\n    } else {\r\n        var newChildNode = dwDomParseStringToNodes(content);\r\n        if (insertIdx == 0) {\r\n            // Normalerweise wird der Knoten relativ zu den Elementen eingruppiert. Index 0 ist die Ausnahme ...\r\n            // Es muss mindestens einen Unterknoten geben (ansonsten wäre isAppend getriggert worden)\r\n            parentControl.insertBefore(newChildNode, parentControl.childNodes[insertIdx]);\r\n        } else {\r\n            var elementChildNodes = dwDomGetElementChildNodes(parentControl);\r\n            parentControl.insertBefore(newChildNode, elementChildNodes[insertIdx]);\r\n        }\r\n    }\r\n}\r\n\r\nfunction dwDomReplaceChild(parentControl, childIdx, content) {\r\n    var replaceableChild = dwDomGetChildAtIndex(parentControl, childIdx);\r\n    if (replaceableChild == null) {\r\n        throw (\"Insert failed. Cell index to replace could not be accessed\\nParent(inner): '\" + parentControl.innerHTML + \"'\\nIndex: \" + childIdx);\r\n    }\r\n    var newChild = dwDomParseStringToNodes(content);\r\n    parentControl.replaceChild(newChild, replaceableChild);\r\n}\r\n\r\n/**\r\n * Verschiebt das durch Index vorgegebene Kindelement an die erste Position (vor alle anderen Elemente *und* Textknoten)\r\n */\r\nfunction dwDomMoveToFront(parentControl, index) {\r\n    index = parseInt(index); // sicher ist sicher...\r\n    var childNodes = parentControl.childNodes;\r\n    if (childNodes.length == 1) {\r\n        // es gibt nur das eine Kind, nichts zu tun\r\n        return;\r\n    }\r\n    var child = dwDomGetChildAtIndex(parentControl, index);\r\n    // Kind entfernen\r\n    dwDomRemoveChild(parentControl, index);\r\n    // vor dem ersten Knoten wieder einfügen\r\n    parentControl.insertBefore(child, parentControl.childNodes[0]);\r\n}\r\n\r\n/**\r\n * Verschiebt das durch Index vorgegebene Kindelement an die letzte Position (hinter alle anderen Elemente *und* Textknoten)\r\n */\r\nfunction dwDomMoveToBack(parentControl, index) {\r\n    index = parseInt(index); // sicher ist sicher...\r\n    var childNodes = parentControl.childNodes;\r\n    if (childNodes.length == 1) {\r\n        // es gibt nur das eine Kind, nichts zu tun\r\n        return;\r\n    }\r\n    var child = dwDomGetChildAtIndex(parentControl, index);\r\n    // Kind entfernen\r\n    dwDomRemoveChild(parentControl, index);\r\n    // hinten wieder anhängen\r\n    parentControl.appendChild(child);\r\n}\r\n\r\n/**\r\n * Vertauscht zwei durch Indizes gegebene Kindelemente\r\n */\r\nfunction dwDomSwitchChildren(parentControl, index1, index2) {\r\n    index1 = parseInt(index1); // sicher ist sicher ...\r\n    index2 = parseInt(index2); // sicher ist sicher ...\r\n    // richtige Reihenfolge sicherstellen\r\n    if (index1 > index2) {\r\n        var dummy = index1;\r\n        index1 = index2;\r\n        index2 = dummy;\r\n    }\r\n    var child1 = dwDomGetChildAtIndex(parentControl, index1);\r\n    if (child1 == null) {\r\n        throw (\"Switching failed. Cell index could not be accessed\\nParent(inner): '\" + parentControl.innerHTML + \"'\\nIndex: \" + index1);\r\n    }\r\n    var child2 = dwDomGetChildAtIndex(parentControl, index2);\r\n    if (child2 == null) {\r\n        throw (\"Switching failed. Cell index could not be accessed\\nParent(inner): '\" + parentControl.innerHTML + \"'\\nIndex: \" + index2);\r\n    }\r\n    var elementChildNodes = dwDomGetElementChildNodes(parentControl);\r\n    dwDomRemoveChild(parentControl, index1);\r\n    parentControl.insertBefore(child2, elementChildNodes[index1]);\r\n    dwDomRemoveChild(parentControl, index2);\r\n    if (index2 == elementChildNodes.length) {\r\n        // Element am Ende anhängen\r\n        parentControl.appendChild(child1);\r\n    } else {\r\n        parentControl.insertBefore(child1, elementChildNodes[index2]);\r\n    }\r\n}\r\n\r\n/**\r\n * Entfernt den Kindknoten an Index-Position 'itemIdx' des ParentControls.\r\n * Wird der Methode kein 'itemIdx' übergeben, wird der letzte Kindknoten gelöscht\r\n * @param parentControl\r\n * @param itemIdx\r\n */\r\nfunction dwDomRemoveChild(parentControl, itemIdx) {\r\n    var nodes = dwDomGetElementChildNodes(parentControl);\r\n    if (itemIdx == undefined) {\r\n        itemIdx = nodes.length - 1;\r\n    }\r\n    dwDomRemoveChildren(nodes, itemIdx, 1);\r\n}\r\n\r\n/**\r\n * Setzt eine Javascript-Methode für einen Event-Typ.\r\n * Registrierte Methoden, die bislang diesem Event-Typ zugeordnet waren, werden bei dieser Aktion gelöscht.\r\n * @param control\r\n * @param eventType\r\n * @param method\r\n */\r\nfunction dwDomSetEvent(control, eventType, method, withEventBubbling) {\r\n    var fullMethodBlock = \"dwFwPreEv(event,\" + withEventBubbling + \",this);\" + // Methode wird per default vor den eigentlichen Event-Methoden ausgeführt\r\n                          method +\r\n                          \";dwFwPostEv(event)\"; // Methode wird per default nach den eigentlichen Event-Methoden ausgeführt\r\n    var actualMethodBlock = (method.length == 0) ? method : fullMethodBlock; // Gibt es keine Methode mehr, ist Bubbling erlaubt (kein pre/post)\r\n\r\n    if ((!framework_isIE7) && control.setAttribute) {\r\n        control.setAttribute(eventType, actualMethodBlock);\r\n    } else {\r\n        // IE7 kann keine Attribute setzen, die auch als Property zugreifbar sind (z.B. Event Handler wie onclick, ...)\r\n        // Elemente wie 'document' haben kein setAttribute - hier muss weiterhin mit eval gearbeitet werden\r\n        // um das Event browserübergreifend zu setzen ...\r\n        eval(\"control.\" + eventType + \" = function (event) {\" + actualMethodBlock + \"};\");\r\n    }\r\n}\r\n\r\n\r\n/**\r\n * Registriert eine Javascript-Methode für einen Event-Typ.\r\n * Ist für diesen Event-Typ noch kein Event-Handler eingerichtet, wird das Event ohne Prüfung gesetzt\r\n * Ist diese Methode (identische Signatur) bereits für diesen Event-Typ registriert, wird der Befehl ignoriert.\r\n *\r\n * Es kann sein, dass Änderungen an den Event-Typ Registrierungen nicht durch Browser-Tools (DeveloperToolbar, Firebug) erkennbar sind.\r\n * Dies kann zu einer Abweichung in der HTML Struktur zwischen Ajax- und nicht-Ajax führen.\r\n * @param control\r\n * @param eventType\r\n * @param method\r\n */\r\nfunction dwDomAddEvent(control, eventType, method, withEventBubbling) {\r\n    var eventHandler = dwDomGetEventsForType(control, eventType, true);\r\n    if (eventHandler == null || eventHandler == undefined) {\r\n        // Kein Eventhandler für diesen Typ registriert. Event wird ohne weitere Prüfung gesetzt\r\n        dwDomSetEvent(control, eventType, method, withEventBubbling);\r\n        return;\r\n    }\r\n    if (eventHandler.indexOf(method) >= 0) {\r\n        return;\r\n    } // Identische Signatur. Keine weitere Aktion notwendig\r\n    if ((eventHandler != \"\") && (!dwUtilsStringEndsWith(eventHandler, \";\", false))) {\r\n        eventHandler += \";\";\r\n    } // Jede Javascript-Methode muss mit einem \";\" enden.\r\n    eventHandler += method;\r\n    dwDomSetEvent(control, eventType, eventHandler, withEventBubbling);\r\n}\r\n\r\n/**\r\n * Entfernt die Methode für den Event-Typ.\r\n * Ist die Methode bislang nicht registriert gewesen, wird der Befehl ignoriert.\r\n * @param control\r\n * @param eventType\r\n * @param method\r\n */\r\nfunction dwDomRemoveEvent(control, eventType, method) {\r\n    var eventHandler = dwDomGetEventsForType(control, eventType, true);\r\n    if (eventHandler == null || eventHandler == undefined) {\r\n        return;\r\n    }\r\n    if (method.indexOf(\"(\") < 0) {\r\n        // Signatur der Methode muss vollständig sein, um sie zu löschen.\r\n        // Erste Methode mit diesem Methoden-Namen wird ermittelt und gelöscht (inklusive Methoden-Parameter)\r\n        dwDomRemoveEventIgnoringSignature(control, eventType, method);\r\n        return;\r\n    }\r\n    eventHandler = eventHandler.replace(method, \"\");\r\n    while (eventHandler.length >= 2) {\r\n        var last = eventHandler[eventHandler.length - 1];\r\n        var secondLast = eventHandler[eventHandler.length - 2];\r\n        if ((last == ';') && (secondLast == ';')) {\r\n            eventHandler = eventHandler.substring(0, eventHandler.length - 1);\r\n        } else {\r\n            break;\r\n        }\r\n    }\r\n    dwDomSetEvent(control, eventType, eventHandler, false);\r\n}\r\n\r\nfunction dwDomAddEventListener(element, eventType, func, useCapture) {\r\n    if (dwUtilsStringStartsWith(eventType, \"on\", false)) {\r\n        eventType = dwUtilsStringAfter(eventType, \"on\");\r\n    }\r\n    if (element.addEventListener) {\r\n        element.addEventListener(eventType, func, useCapture);\r\n    } else if (element.attachEvent) {\r\n        element.attachEvent(\"on\" + eventType, func);\r\n    }\r\n}\r\n\r\nfunction dwDomRemoveEventListener(element, eventType, func) {\r\n    if (dwUtilsStringStartsWith(eventType, \"on\", false)) {\r\n        eventType = dwUtilsStringAfter(eventType, \"on\");\r\n    }\r\n    if (element.removeEventListener) {\r\n        element.removeEventListener(eventType, func, false);\r\n    } else if (element.detachEvent) {\r\n        element.detachEvent(\"on\" + eventType, func);\r\n    }\r\n}\r\n\r\n/**\r\n * Entfernt eine Methode (unabhängig der Methoden-Parameter)\r\n *\r\n * @param control\r\n * @param eventType\r\n * @param methodWithoutSignature\r\n */\r\nfunction dwDomRemoveEventIgnoringSignature(control, eventType, methodWithoutSignature) {\r\n    var eventHandler = dwDomGetEventsForType(control, eventType, true);\r\n    if (eventHandler == null || eventHandler == undefined) {\r\n        return;\r\n    }\r\n    if (eventHandler.indexOf(methodWithoutSignature + \"(\") > -1) {\r\n        var startIdx = eventHandler.indexOf(methodWithoutSignature);\r\n        var endIdx = -1;\r\n        var inStringChar = null;\r\n        var isInString = inStringChar != null;\r\n        var parentheses = new Array();\r\n        for (var i = (startIdx + methodWithoutSignature.length); i < eventHandler.length; i++) {\r\n            var aChar = eventHandler.charAt(i);\r\n            var isEscaped = (aChar == \"\\\\\");\r\n            if (isEscaped) {\r\n                i++;\r\n                aChar = eventHandler.charAt(i);\r\n            }\r\n\r\n            if ((aChar == \"'\") || (aChar == \"\\\"\")) {\r\n                if (isEscaped) {\r\n                    continue;\r\n                } else {\r\n                    if (inStringChar == aChar) {\r\n                        inStringChar = null;\r\n                    } else if (inStringChar == null) {\r\n                        inStringChar = aChar;\r\n                    }\r\n                    isInString = inStringChar != null;\r\n                    continue;\r\n                }\r\n            }\r\n\r\n            if (aChar == \"(\" && !isInString) {\r\n                parentheses.push(parentheses.length + \"\");\r\n            }\r\n            if (aChar == \")\" && !isInString) {\r\n                parentheses.pop();\r\n            }\r\n            if (aChar == \";\") {\r\n                if (!isInString && (parentheses.length == 0)) {\r\n                    endIdx = i;\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n        var method = eventHandler.substring(startIdx, endIdx + 1);\r\n        dwDomRemoveEvent(control, eventType, method);\r\n    }\r\n}\r\n\r\n/**\r\n * Entfernt den Event-Typ (und damit alle registrierten Javascript-Methoden für diesen Typ)\r\n *\r\n * @param control\r\n * @param eventType\r\n */\r\nfunction dwDomRemoveEventType(control, eventType) {\r\n    eval(\"control.\" + eventType + \"=''\");\r\n    control.removeAttribute(eventType);\r\n}\r\n\r\n/**\r\n * Liefert alle registrierten Event-Methoden für den gewünschten Event-Typ (z.B. onmouseover) auf dem Control\r\n *\r\n * @param control\r\n * @param eventType\r\n * @param doStrip : boolean Indikator, ob der umrahmende Funktions-String entfernt werden soll\r\n */\r\nfunction dwDomGetEventsForType(control, eventType, doStrip) {\r\n    var eventHandler = null;\r\n    if (control.getAttribute) {\r\n        eventHandler = control.getAttribute(eventType);\r\n    } else {\r\n        // Bei 'document' oder ähnlichen Elementen gibt es diese Methode nicht. Wir versuchen das Event direkt auszulesen\r\n        eventHandler = eval(\"control.\" + eventType);\r\n    }\r\n    if (eventHandler != null && doStrip) {\r\n        eventHandler = dwUtilsStripFromFunction(eventHandler, true, true);\r\n    }\r\n    return eventHandler;\r\n}\r\n\r\nfunction dwDomAddAttributeEventListener(control, attribute, listener) {\r\n    if (control) {\r\n        if (control.addEventListener) { // W3C - unterstützt durch alle Browser >= IE9\r\n            control.addEventListener(\"DOMAttrModified\", listener, false);\r\n        } else if (control.attachEvent) { // veraltete Browser ...\r\n            control.attachEvent(\"onpropertychange\", listener);\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * Scrollt innerhalb eines Scroll Containers (GuiScrollpane) zu einem Knoten, der durch den Index innerhalb des Controls (z.B. Tree) ermittelt wird\r\n *\r\n * @param scrollContainerId uniqueId des Scroll Containers (GuiScrollpane)\r\n * @param controlId uniqueId des Controls in dem der gesuchte Knoten liegt\r\n * @param navigationPath pfad ausgehend vom control bis zum parent des durch den nodeIndex gesuchten Elements\r\n * @param nodeIndex Knotenindex innerhalb des Controls\r\n */\r\nfunction dwDomScrollToNode(scrollContainerId, controlId, navigationPath, nodeIndex) {\r\n    var scrollContainer = $(scrollContainerId);\r\n    if (!scrollContainer) {\r\n        return;\r\n    }\r\n    if (scrollContainer.style.overflow == \"hidden\") {\r\n        scrollContainer = getScrollingChildByBreadthFirstSearch(scrollContainer);\r\n    }\r\n    var control = $(controlId);\r\n    if (!control) {\r\n        return;\r\n    }\r\n    control = dwDomFindContainer(control, navigationPath, true);\r\n    if (!control) {\r\n        return;\r\n    }\r\n    var node = dwDomGetChildAtIndex(control, nodeIndex); // HTML Element an Index 'nodeIndex' - relativ zu Control\r\n    var coords = dwUtilsGetCoords(node, scrollContainer);\r\n    var offsetTop = coords.y;\r\n    var offsetLeft = coords.x;\r\n\r\n    if (control.className && control.className == \"guitable_row\") {\r\n        // In diesem Fall müssen wir um den Headerhöhe weiter runter, weil der Header die oberste Zeile verdeckt\r\n        offsetTop -= 25;\r\n    }\r\n\r\n    scrollContainer.scrollTop = offsetTop;\r\n    scrollContainer.scrollLeft = offsetLeft;\r\n    var id = scrollContainer.id;\r\n    var scrollTopInput = $(id + \"_scrollTop\"); // siehe GuiScrollpane - muss immer gefunden werden\r\n    var scrollLeftInput = $(id + \"_scrollLeft\");\r\n    if ((scrollTopInput != null) && (scrollLeftInput != null)) {\r\n        // Bei GuiScrollpane werden Input Controls generiert, in denen die aktuelle Scrolling Position steht\r\n        // Sobald dieses Control zur UniqueId gefunden wird, aktualisieren wir die gespeicherte Scrolling\r\n        // Position\r\n        dwHelperScrollPaneValueChanged(id);\r\n    }\r\n}\r\n\r\n/**\r\n * Scrollt innerhalb einer Liste (<select>) zur angegebenen Indexposition\r\n * @param controlId\r\n * @param nodeIndex\r\n */\r\nfunction dwDomScrollToListEntry(controlId, nodeIndex) {\r\n    var control = $(controlId);\r\n    if (framework_isIE) {\r\n        // in IE sind die offset-Werte der Listenelemente 0. Daher können wir hier nicht einfach\r\n        // offsetTop verwenden oder über offsetHeight die Scrollhöhe berechnen. Wir verwenden daher die\r\n        // FontSize der Liste zusammen mit dem Faktor 1.2 für die LineHeight. Dieser Faktor wird vom IE verwendet,\r\n        // wenn die LineHeight den Standardwert \"normal\" hat. Da wir im Framework die LineHeight nicht setzen\r\n        // (außer beim Separator, der aber nicht Vorfahre einer Liste sein kann), können wir davon ausgehen,\r\n        // dass die LineHeight auf \"normal\" steht. Sollte LineHeight im Framework irgendwann verwendet werden,\r\n        // müsste hier noch eine entsprechende Abfrage dazukommen.\r\n        var fontSize = dwUtilsGetStyle(control, \"font-size\");\r\n        var lineHeightFactor = 1.2;\r\n        var fontSizeNumber = parseInt(fontSize);\r\n        var size = lineHeightFactor * fontSizeNumber;\r\n        var sizeRounded = Math.round(size);\r\n        var scrollTop = sizeRounded * nodeIndex\r\n        control.scrollTop = scrollTop;\r\n    } else {\r\n        var node = dwDomGetChildAtIndex(control, nodeIndex); // HTML Element an Index 'nodeIndex' - relativ zu Control\r\n        control.scrollTop = node.offsetTop;\r\n    }\r\n\r\n}\r\n\r\n/**\r\n * Scrollt zu einem HTML Kind-Knoten anhand der Id. Kind Element wird oberstes sichtbares Element im Scrollbereich\r\n * @param controlId ID des Scroll-Containers\r\n * @param childId ID des Kind-Knotens\r\n */\r\nfunction dwDomScrollToListNode(controlId, childId) {\r\n    var control = $(controlId);\r\n    var child = $(childId);\r\n    var coords = dwUtilsGetCoords(child, control);\r\n    control.scrollTop = coords.y;\r\n    //update vom $controlId_scrollTop - wird dan zB. von dwHelperScrollToStoredPosition verwendet\r\n    var scrollTopTextField = $(controlId + \"_scrollTop\");\r\n    if (scrollTopTextField != null) {\r\n        scrollTopTextField.value = coords.y;\r\n    }\r\n\r\n}\r\n\r\n/**\r\n * Verschiebt einen Knoten innerhalb eines Parent Containers von Index oldChildIndex nach newChildIndex\r\n * Sind beide Indizes identisch wird keine Aktion durchgeführt\r\n * @param container\r\n * @param oldChildIndex\r\n * @param newChildIndex\r\n */\r\nfunction dwDomMoveNode(container, oldChildIndex, newChildIndex) {\r\n    if (oldChildIndex == newChildIndex) {\r\n        return; // nichts zu tun\r\n    }\r\n    var nodeChildren = dwDomGetElementChildNodes(container);\r\n    var doAppend = (newChildIndex == (nodeChildren.length - 1)); // Knoten soll als letzter Kind-Knoten eingehängt werden\r\n    var nodeAtOldIndex = nodeChildren[oldChildIndex];\r\n    var node = container.removeChild(nodeAtOldIndex);\r\n    nodeChildren = dwDomGetElementChildNodes(container);\r\n    var nodeAtNewIndex = nodeChildren[newChildIndex];\r\n    if (doAppend) {\r\n        // Neuer Knoten muss am Ende eingehängt werden (append)\r\n        container.appendChild(node);\r\n    } else {\r\n        // Neuer Knoten wird in der Liste der Kinder eingehängt.\r\n        container.insertBefore(node, nodeAtNewIndex);\r\n    }\r\n}\r\n\r\n/**\r\n * Liefert alle Kinder-Knoten vom typ \"Element\".\r\n *\r\n * Im Firefox wird meist ein leerer Textknoten vor dem ersten Element-Knoten im DOM eingebaut.\r\n * Dies wirkt sich auf alle Aktionen aus, auf die mit Hilfe eines Index auf einen Kind-Knoten zugegriffen wird (insert/remove)\r\n * @param parentControl\r\n */\r\nfunction dwDomGetElementChildNodes(parentControl) {\r\n    if (framework_isIE7 || framework_isIE8) {\r\n        // In alten Browsern (IE8 oder älter) werden bei element.children auch Kommentar-Knoten zurückgeliefert ...\r\n        return dwDomGetChildNodesByType(parentControl, DWUTILS_NODE_TYPE.ELEMENT);\r\n    } else {\r\n        // Vernünftige Browser können direkt children verwenden (im Gegensatz zu childNodes sind in children nur Elemente\r\n        return (parentControl.children || new Array());\r\n    }\r\n}\r\n\r\nfunction dwDomGetChildNodesByType(parentControl, nodeType) {\r\n    var nodes = new Array();\r\n    if (parentControl == null) {\r\n        return nodes;\r\n    }\r\n    for (var i = 0; i < parentControl.childNodes.length; i++) {\r\n        var childNode = parentControl.childNodes[i];\r\n        if (childNode.nodeType == nodeType) {\r\n            nodes.push(childNode);\r\n        }\r\n    }\r\n    return nodes;\r\n}\r\n\r\n/**\r\n * Liefert zurück, ob ein Element enthalten ist\r\n *\r\n * @param parentControl\r\n * @param node\r\n * @return {Boolean}\r\n */\r\nfunction dwDomHasChildNode(parentControl, node) {\r\n    if (parentControl == null) {\r\n        return false;\r\n    }\r\n    for (var i = 0; i < parentControl.childNodes.length; i++) {\r\n        if (parentControl.childNodes[i] == node) {\r\n            return true;\r\n        }\r\n    }\r\n    return false;\r\n}\r\n\r\n/**\r\n * Liefert das erste \"Element\"\r\n *\r\n * Im Firefox wird meist ein leerer Textknoten vor dem ersten Element-Knoten im DOM eingebaut.\r\n * Dies wirkt sich auf alle Aktionen aus, auf die mit Hilfe eines Index auf einen Kind-Knoten zugegriffen wird (insert/remove)\r\n * @param parentControl\r\n */\r\nfunction dwDomGetFirstElementChild(parentControl) {\r\n    return dwDomGetFirstChildNodeByType(parentControl, DWUTILS_NODE_TYPE.ELEMENT);\r\n}\r\n\r\nfunction dwDomGetFirstChildNodeByType(parentControl, nodeType) {\r\n    if (parentControl == null) {\r\n        return null;\r\n    }\r\n    for (var i = 0; i < parentControl.childNodes.length; i++) {\r\n        if (parentControl.childNodes[i].nodeType == nodeType) {\r\n            return parentControl.childNodes[i];\r\n        }\r\n    }\r\n    return null;\r\n}\r\n\r\nfunction dwDomSetListSelection(control, selectedIndices) {\r\n    for (var idx = 0; idx < control.options.length; idx++) {\r\n        var option = control.options[idx];\r\n        var shouldBeSelected = dwUtilsIsInArray(selectedIndices, idx);\r\n        if (option.selected && !shouldBeSelected) {\r\n            option.selected = false;\r\n        } else if (!option.selected && shouldBeSelected) {\r\n            option.selected = true;\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * Setzt die Selektion auf den einzelnen Listen-Einträgen und aktualisiert das Textfeld mit der Auflistung der selektierten Einträge\r\n * Liste generiert mit HtmlListRenderer. Jeder Listen-Eintrag ein Attribut zum Auslesen der aktuellen Selektion aufweisen (checked, selected\r\n * @param control\r\n * @param listUniqueId\r\n * @param selectedIndices array : Array von Indizes, die selektiert werden sollen\r\n * @param attribute string : Attribut-Key zum auslesen des Selektionszustandes (checked, selected)\r\n */\r\nfunction dwDomSetCustomListSelection(control, listUniqueId, selectedIndices, attribute, updateDisplay) {\r\n    var listControl = $(listUniqueId);\r\n    var nodeTag = listControl.getAttribute(\"nodeTag\");\r\n    var listEntries = listControl.getElementsByTagName(nodeTag);\r\n    var listSize = listEntries.length;\r\n    for (var idx = 0; idx < listSize; idx++) {\r\n        var entry = listEntries[idx];\r\n        var shouldBeSelected = dwUtilsIsInArray(selectedIndices, idx);\r\n        var isSelected = dwDomGetDomAttribute(entry, attribute);\r\n        if (typeof isSelected == \"string\") {\r\n            isSelected = (isSelected == \"true\");\r\n        }\r\n        if (isSelected && !shouldBeSelected) {\r\n            dwDomRemoveDomAttribute(entry, attribute);\r\n        } else if (!isSelected && shouldBeSelected) {\r\n            dwDomSetDomAttribute(entry, attribute, \"true\");\r\n        }\r\n    }\r\n    var selectedIndicesString = selectedIndices.join(\"|\");\r\n    var uniqueId = control.id;\r\n    $(listUniqueId + \"_selectedindices\").value = selectedIndicesString;\r\n    dwHelperHighlightListIndices(uniqueId, listUniqueId, selectedIndicesString);\r\n    if (updateDisplay) {\r\n        var renderMode = listControl.getAttribute(\"renderMode\");\r\n        dwHelperUpdateComboboxValue(uniqueId, listUniqueId, renderMode);\r\n    }\r\n\r\n}\r\n\r\nfunction dwDomSetDomText(control, text, escape) {\r\n    if (dwUtilsStringStartsWith(text, \"<html>\", false) && dwUtilsStringEndsWith(text, \"</html>\", false)) {\r\n        text = text.substring(6, text.length - 7);\r\n        escape = false;\r\n    }\r\n    if (!escape) {\r\n        control.innerHTML = text;\r\n    } else {\r\n        dwDomRemoveAllChildNodes(control);\r\n        if (text.length > 0) {\r\n            // ältere IE Browser legen für leere Text-Inhalte keine Knoten an ...\r\n            var textNode = document.createTextNode(text);\r\n            control.appendChild(textNode);\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * Setzt einen Text neben einem DOM Element. Der Text kann auch HTML Fragmente beinhalten (z.B. GuiLabel Texte)\r\n * @param control\r\n * @param text\r\n * @param escape\r\n */\r\nfunction dwDomSetDomNextSiblingText(control, text, escape) {\r\n    if (dwUtilsStringStartsWith(text, \"<html>\", false) && dwUtilsStringEndsWith(text, \"</html>\", false)) {\r\n        text = text.substring(6, text.length - 7);\r\n        escape = false;\r\n    }\r\n    if (!control) { // sollte nicht vorkommen\r\n        return;\r\n    }\r\n\r\n    var parent = control.parentNode;\r\n    var siblingIndex = dwDomGetIndexOfNodeEntry(control) + 1;\r\n    dwDomRemoveChildNodes(parent, siblingIndex);\r\n    if (text.length == \"\") { // Alt-Informationen komplett entfernt. Nichts neues anzufügen\r\n        return;\r\n    }\r\n    if (!escape) { // Texte wie \"&uuml;\" dürfen nicht escaped werden (würde zu \"&amp;uuml;\")\r\n        var priorContent = parent.innerHTML;\r\n        parent.innerHTML = priorContent + text;\r\n    } else { // keine HTML Notation im Text - ein einfacher Text-Knoten ist ausreichend\r\n        var textNode = document.createTextNode(text);\r\n        parent.appendChild(textNode);\r\n    }\r\n}\r\n\r\n/**\r\n * Fügt Class Names zum Class-Attribut über Javascript Notation hinzu.\r\n *\r\n * Vorhandene Class Names bleiben dem Control erhalten.\r\n * @param control\r\n * @param newClassNames leerzeichen separierte Liste von Classnames\r\n */\r\nfunction dwDomAddClass(control, newClassNames) {\r\n    var classNames = \"\";\r\n    if (control.className) {\r\n        classNames = control.className;\r\n        if (!dwUtilsStringEndsWith(classNames, \" \", false)) {\r\n            classNames += \" \";\r\n        }\r\n    }\r\n    classNames += newClassNames;\r\n    control.className = classNames;\r\n}\r\n\r\n/**\r\n * Entfernt einen oder mehrere Class Names aus dem Class Attribut\r\n *\r\n * @param control\r\n * @param removeableClassNames  leerzeichen separierte Liste von Classnames\r\n */\r\nfunction dwDomRemoveClass(control, removeableClassNames) {\r\n    if (control.className) {\r\n        if (removeableClassNames == control.className) {\r\n            control.className = \"\";\r\n            return;\r\n        }\r\n        var classNamesToRemove = dwUtilsSplit(removeableClassNames, \" \", false);\r\n        // Es gibt ein 'class' Attribut\r\n        var classNames = dwUtilsSplit(control.className, \" \", false);\r\n        var classNamesAfterRemoval = new Array();\r\n        for (var i = classNames.length - 1; i >= 0; i--) {\r\n            if (!dwUtilsIsInArray(classNamesToRemove, classNames[i])) {\r\n                classNamesAfterRemoval.push(classNames[i]);\r\n            }\r\n        }\r\n        control.className = classNamesAfterRemoval.join(\" \");\r\n    }\r\n}\r\n\r\nfunction dwDomRemoveNodeById(controlId) {\r\n    var control = $(controlId);\r\n    if (control != null) {\r\n        var parentNode = control.parentNode;\r\n        if (parentNode != null) { // NULL bei 'body' möglich\r\n            parentNode.removeChild(control);\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * Entfernt das Attribut\r\n * @param control\r\n * @param key\r\n */\r\nfunction dwDomRemoveDomAttribute(control, key) {\r\n    try {\r\n        control[key] = null; // Wert zurücksetzen\r\n        delete control[key]; // Wertn entfernen. Setzt voraus, dass die Eigenschaften des Controls als 'assoziatives Array' verwaltet werden\r\n    } catch (exception) {\r\n        // Fallback wird unten auf jeden Fall überprüft\r\n    }\r\n    // Fallback. Wert wird als Attribut aus dem DOM Baum entfernt (ausserhalb des assoziativen Arrays)\r\n    control.removeAttribute(key);\r\n}\r\n\r\n/**\r\n * Setzt den Attribut-Wert\r\n *\r\n * Der Wert wird einerseits in der \".\" Notation gesetzt, und zudem als setAttribute.\r\n * Notwendig, da abhängig vom Browser / Attribut eine andere Notation vom Browser ausgewertet wird.\r\n * @param control\r\n * @param key\r\n * @param value numeric_or_string_or_bool Wert der gesetzt werden soll. Muss bereits in den erwarteten Typ umgewandelt sein\r\n */\r\nfunction dwDomSetDomAttribute(control, key, value) {\r\n    try {\r\n        // Setzt voraus, dass die Eigenschaften des Controls als 'assoziatives Array' verwaltet werden\r\n        control[key] = value;\r\n    } catch (exception) {\r\n        // Fallback wird unten auf jeden Fall gesetzt\r\n    }\r\n    // Fallback. Wert wird als Attribut dem DOM Baum hinzugefügt (ausserhalb des assoziativen Arrays)\r\n    control.setAttribute(key, value);\r\n}\r\n\r\n/**\r\n * Liefert den Attribut-Wert zurück\r\n * @param control\r\n * @param key\r\n */\r\nfunction dwDomGetDomAttribute(control, key) {\r\n    if (!control) {\r\n        if (framework_isDevelopment) {\r\n            throw (\"dwDomGetDomAttribute: control is null. Params: control = \" + control + \", Key = \" + key);\r\n        } else {\r\n            // In einer Produktiv-Umgebung versuchen wir den fehlerhaften Aufruf zu schlucken\r\n            return \"\";\r\n        }\r\n    }\r\n    try {\r\n        var value = control[key];\r\n        if (value != undefined) {\r\n            return value;\r\n        }\r\n        if (control.getAttribute) {\r\n            return control.getAttribute(key);\r\n        } else {\r\n            // In einer Produktiv-Umgebung versuchen wir den fehlerhaften Aufruf zu schlucken.\r\n            // In der Entwicklungsumgebung ist es hingegen interessant die Ursachen für den fehlerhaften Aufruf zu ermitteln\r\n            return framework_isDevelopment ? null : \"\";\r\n        }\r\n    } catch (exception) {\r\n        // Fehler bei Aufruf der Named Properties\r\n        if (control.getAttribute) {\r\n            return control.getAttribute(key);\r\n        } else {\r\n            // In einer Produktiv-Umgebung versuchen wir den fehlerhaften Aufruf zu schlucken.\r\n            // In der Entwicklungsumgebung ist es hingegen interessant die Ursachen für den fehlerhaften Aufruf zu ermitteln\r\n            return framework_isDevelopment ? null : \"\";\r\n        }\r\n    }\r\n}\r\n\r\nfunction dwDomGetDomAttributeOrDefault(control, key, defaultValue) {\r\n    if (control == null) {\r\n        return defaultValue;\r\n    }\r\n    var val = dwDomGetDomAttribute(control, key);\r\n    return (val != null) ? val : defaultValue;\r\n}\r\n\r\nfunction dwDomHasAttribute(control, attrib) {\r\n    if (control.hasAttribute) {\r\n        return control.hasAttribute(attrib);\r\n    } else if (control.nodeType && (control.nodeType == DWUTILS_NODE_TYPE.ELEMENT)) { // Nicht alle Objekte haben getAttribute Methode (z.B. document / text nodes / ...)\r\n        // Impliziter Cast von Objekten zu 'true' kann nicht fehlerfrei angewendet werden.\r\n        // Undefined, NULL, NaN, 0 und \"\" werden als false interpretiert. Leerstring (oder ggf \"0\") könnten falsch interpretiert werden\r\n        var value = control.getAttribute(attrib);\r\n        return (typeof value != \"undefined\") && (value != null);\r\n    } else {\r\n        return false;\r\n    }\r\n}\r\n\r\n/**\r\n * Erweitert den Attribut-Wert\r\n * @param control\r\n * @param key\r\n * @param valueToAppend\r\n */\r\nfunction dwDomAppendDomAttributeValue(control, key, valueToAppend) {\r\n    try {\r\n        var oldValue = control[key];\r\n        if (!oldValue) {\r\n            oldValue = \"\";\r\n        }\r\n        control[key] = oldValue + valueToAppend;\r\n    } catch (exception) {\r\n        oldValue = control.getAttribute(key);\r\n        if (!oldValue) {\r\n            oldValue = \"\";\r\n        }\r\n        control.setAttribute(oldValue + valueToAppend);\r\n    }\r\n\r\n}\r\n\r\nfunction dwDomSetBrowserTitle(text) {\r\n    document.title = text;\r\n}\r\n\r\nfunction dwDomSelectInTextField(control, all, startPos, endPos) {\r\n    if (all) {\r\n        control.select();\r\n    } else {\r\n        if (control.setSelectionRange) {\r\n            control.style.visibility = \"visible\";\r\n            control.focus();\r\n            control.setSelectionRange(startPos, endPos);\r\n        } else if (control.createTextRange) {\r\n            var range = control.createTextRange();\r\n            range.moveStart(\"character\", startPos);\r\n            range.moveEnd(\"character\", endPos - control.value.length);\r\n            range.select();\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * Setzt das Fav Icon\r\n * @param iconUrl\r\n */\r\nfunction dwDomSetFavIcon(iconUrl) {\r\n    var head = document.getElementsByTagName(\"head\")[0];\r\n    var link = dwDomGetFavIcon();\r\n    if (!link) {\r\n        link = document.createElement(\"link\");\r\n        dwDomSetDomAttribute(link, \"rel\", \"shortcut icon\");\r\n        head.appendChild(link);\r\n    }\r\n    dwDomSetDomAttribute(link, \"href\", iconUrl);\r\n}\r\n\r\nfunction dwDomGetFavIcon() {\r\n    var head = document.getElementsByTagName(\"head\")[0];\r\n    var linkTags = head.getElementsByTagName(\"link\");\r\n    for (var i = 0; i < linkTags.length; i++) {\r\n        var link = linkTags[i];\r\n        if (link.rel == \"shortcut icon\") {\r\n            return link;\r\n        }\r\n    }\r\n    return null;\r\n}\r\n\r\n/**\r\n * Entfernt das Fav Icon aus dem HEAD - wenn es gesetzt war\r\n */\r\nfunction dwDomRemoveFavIconIfPossible() {\r\n    var link = dwDomGetFavIcon();\r\n    if (link) {\r\n        var head = document.getElementsByTagName(\"head\")[0];\r\n        head.removeChild(link);\r\n    }\r\n}\r\n\r\n/**\r\n * Setzt einen CSS Style über Javascript-Notation\r\n *\r\n * @param control\r\n * @param command\r\n */\r\nfunction dwDomSetStyle(control, key, value) {\r\n    control.style[key] = value;\r\n}\r\n\r\n/**\r\n * Entfernt einen CSS Style über Javascript-Notation\r\n * @param control\r\n * @param key\r\n */\r\nfunction dwDomRemoveStyle(control, key) {\r\n    dwDomSetStyle(control, key, \"\");\r\n}\r\n\r\n/**\r\n * Setzt das Class-Attribute über Javascript Notation.\r\n * Es können mehrere Classnames gesetzt werden (Leerzeichen separariert)\r\n *\r\n * Vorhandene Werte werden überschrieben.\r\n *\r\n * @param control\r\n * @param command\r\n */\r\nfunction dwDomSetClass(control, value) {\r\n    control.className = value;\r\n}\r\n\r\nfunction dwDomAddJavascriptListenerTag(control, objectEvent, forObjectId, methods) {\r\n    var scriptTag = document.createElement(\"script\");\r\n    scriptTag.setAttribute(\"type\", \"text/javascript\");\r\n    scriptTag.setAttribute(\"for\", forObjectId);\r\n    scriptTag.setAttribute(\"event\", objectEvent);\r\n    scriptTag.text = methods; // script kann keine Kinder haben. Der Inhalt wird direkt als TEXT gespeichert\r\n    control.appendChild(scriptTag);\r\n}\r\n\r\nfunction dwDomRemoveJavascriptListenerTag(node, objectEvent, forObjectId) {\r\n    var nodesToRemove = dwDomGetChildrenByTagname(node, \"script\", {\"event\": objectEvent, \"for\": forObjectId}, false);\r\n    for (var i = 0; i < nodesToRemove.length; i++) {\r\n        node.removeChild(nodesToRemove[i]);\r\n    }\r\n}\r\n\r\nfunction dwDomAddJavascriptFile(node, filename) {\r\n    DWDOM_PENDING_SCRIPT_FILES.push(filename);\r\n    var scriptTag = document.createElement(\"script\");\r\n    scriptTag.setAttribute(\"type\", \"text/javascript\");\r\n    scriptTag.onreadystatechange = function() {\r\n        if ((scriptTag.readyState == \"loaded\") || (scriptTag.readyState == \"complete\")) {\r\n            scriptTag.onreadystatechange = scriptTag.onload = null;\r\n            dwDomCheckScriptLibraryLoaded(scriptTag);\r\n        }\r\n    };\r\n    scriptTag.onload = function() {\r\n        scriptTag.onreadystatechange = scriptTag.onload = null;\r\n        dwDomCheckScriptLibraryLoaded(scriptTag);\r\n    };\r\n    scriptTag.setAttribute(\"src\", filename);\r\n    scriptTag.setAttribute(\"async\", \"true\");\r\n    scriptTag.setAttribute(\"defer\", \"false\");\r\n    node.appendChild(scriptTag);\r\n}\r\n\r\nfunction dwDomRemoveJavascriptFile(node, filename) {\r\n    var nodesToRemove = dwDomGetChildrenByTagname(node, \"script\", {\"src\": filename}, false);\r\n    for (var i = 0; i < nodesToRemove.length; i++) {\r\n        node.removeChild(nodesToRemove[i]);\r\n        DWDOM_PENDING_SCRIPT_FILES = dwUtilsRemoveFromArrayByText(DWDOM_PENDING_SCRIPT_FILES, filename);\r\n    }\r\n\r\n}\r\n\r\nfunction dwDomAddJavascriptTagForFunction(control, methods) {\r\n    var scriptTag = document.createElement(\"script\");\r\n    scriptTag.setAttribute(\"type\", \"text/javascript\");\r\n    scriptTag.text = methods; // script kann keine Kinder haben. Der Inhalt wird direkt als TEXT gespeichert\r\n    control.appendChild(scriptTag);\r\n}\r\n\r\nfunction dwDomCheckScriptLibraryLoaded(scriptTag) {\r\n    if (!dwDomPendingScriptFilesAccessLock) {\r\n        dwDomPendingScriptFilesAccessLock = true;\r\n        var pendingScriptFiles = new Array();\r\n        for (var i = 0; i < DWDOM_PENDING_SCRIPT_FILES.length; i++) {\r\n            if (DWDOM_PENDING_SCRIPT_FILES[i] != scriptTag.getAttribute(\"src\")) {\r\n                pendingScriptFiles.push(DWDOM_PENDING_SCRIPT_FILES[i]);\r\n            }\r\n        }\r\n        DWDOM_PENDING_SCRIPT_FILES = pendingScriptFiles;\r\n        dwDomPendingScriptFilesAccessLock = false;\r\n    }\r\n}\r\n\r\nfunction dwDomAddJavascriptFunction(newFunction) {\r\n    var functionName = dwUtilsGetFunctionName(newFunction);\r\n    eval(\"window.\" + functionName + \"=\" + newFunction);\r\n}\r\n\r\nfunction dwDomRemoveJavascriptFunction(functionToRemove) {\r\n    var functionName = dwUtilsGetFunctionName(functionToRemove);\r\n    dwDomRemoveJavascriptFunctionByName(functionName);\r\n}\r\n\r\nfunction dwDomRemoveJavascriptFunctionByName(functionName) {\r\n    window[functionName] = null;\r\n}\r\n\r\n/**\r\n * Liefert Kinder mit dem Tagname und den gewünschten Attributen zurück\r\n * @param string : tagname\r\n * @param array_of_objects : attributes\r\n * @param boolean : deepSearch wenn false, werden nur die direkten Kinder mit dem TagName zurückgeliefert,\r\n *                             wenn true werden alle Kinder rekursiv berücksichtigt\r\n */\r\nfunction dwDomGetChildrenByTagname(node, tagname, attributes, deepSearch) {\r\n    var nodesToFilter = new Array();\r\n    if (deepSearch) {\r\n        nodesToFilter = node.getElementsByTagName(tagname);\r\n    } else {\r\n        var tempNodesToFilter = dwDomGetElementChildNodes(node);\r\n        for (var tempNodeIdx = 0; tempNodeIdx < tempNodesToFilter.length; tempNodeIdx++) {\r\n            var tempNodeToFilter = tempNodesToFilter[tempNodeIdx];\r\n            if (tempNodeToFilter.tagName.toLowerCase() == tagname.toLowerCase()) {\r\n                nodesToFilter.push(tempNodeToFilter);\r\n            }\r\n        }\r\n    }\r\n    var filteredNodes = new Array();\r\n    for (var i = 0; i < nodesToFilter.length; i++) {\r\n        var nodeToFilter = nodesToFilter[i];\r\n        var isOk = true;\r\n        for (var attribName in attributes) {\r\n            var attribValue = attributes[attribName];\r\n            if (!(dwDomHasAttribute(nodeToFilter, attribName) && (nodeToFilter.getAttribute(attribName) == attribValue))) {\r\n                isOk = false;\r\n            }\r\n        }\r\n        if (isOk) {\r\n            filteredNodes.push(nodeToFilter);\r\n        }\r\n    }\r\n    return filteredNodes;\r\n}\r\n\r\nfunction dwDomGetTextContent(node, excludedTags) {\r\n    if (typeof (excludedTags) == \"undefined\") {\r\n        return node.textContent;\r\n    }\r\n    var text = \"\";\r\n    if ((node.nodeType == DWUTILS_NODE_TYPE.TEXT) || (node.nodeType == DWUTILS_NODE_TYPE.CDATA)) {\r\n        text += node.nodeValue; // Text anfügen\r\n    } else if ((node.nodeType != DWUTILS_NODE_TYPE.COMMENT) && (node.nodeName && !dwUtilsIsInArray(excludedTags, node.nodeName.toLowerCase()))) {\r\n        for (var i = 0; i < node.childNodes.length; i++) {\r\n            var childNode = node.childNodes[i];\r\n            text += dwDomGetTextContent(childNode, excludedTags);\r\n        }\r\n    }\r\n    return text;\r\n}\r\n\r\n/**\r\n * Liefert zu einem Listen-Eintrag den Wert zurück\r\n *\r\n * Manuell generierte Listen (als Ersatz für \"select\" Tag) können unterschiedliche HtmlTags für die Anzeige der Werte verwenden\r\n * Entsprechend ist die Bestimmung des \"Labels\" abhängig vom Render-Modus\r\n * @param listUniqueId\r\n * @param index\r\n * @param listRenderMode\r\n */\r\nfunction dwDomGetListEntryText(listUniqueId, index, listRenderMode) {\r\n    var entry = dwHelperGetListNodeForIndex(listUniqueId, index);\r\n    if (listRenderMode == \"checkbox\") {\r\n        var textNode = entry.nextSibling;\r\n\r\n        while ((textNode != null) && !((textNode.nodeType == DWUTILS_NODE_TYPE.ELEMENT) && (textNode.nodeName.toLowerCase() == \"span\"))) {\r\n            textNode = textNode.nextSibling; // #TEXT und img Tags überspringen\r\n        }\r\n        if (textNode != null) {\r\n            return dwUtilsUnescapeHTML(dwUtilsTrim(textNode.innerHTML));\r\n        } else {\r\n            return \"\";\r\n        }\r\n    } else if (listRenderMode == \"text\") {\r\n        if (entry.nodeType == DWUTILS_NODE_TYPE.TEXT) {\r\n            return dwUtilsUnescapeHTML(dwUtilsTrim(entry.data));\r\n        } else {\r\n            var textNode = entry.childNodes[0]; // erstes Kind-Element ist entweder ein img-Tag oder direkt das span-Tag mit dem Text\r\n\r\n            while ((textNode != null) && !((textNode.nodeType == DWUTILS_NODE_TYPE.ELEMENT) && (textNode.nodeName.toLowerCase() == \"span\"))) {\r\n                textNode = textNode.nextSibling; // #TEXT und img Tags überspringen\r\n            }\r\n            if (textNode != null) {\r\n                return dwUtilsUnescapeHTML(dwUtilsTrim(textNode.innerHTML));\r\n            } else {\r\n                return \"\";\r\n            }\r\n        }\r\n    }\r\n    return null;\r\n}\r\n\r\nfunction dwDomRemoveCustomListEntry(control, listUniqueId, index) {\r\n    var indexAsInt = parseInt(index);\r\n    var entry = dwHelperGetListNodeForIndex(listUniqueId, indexAsInt);\r\n    var parentNode = entry.parentNode;\r\n    var nextEntry = dwHelperGetListNodeForIndex(listUniqueId, indexAsInt + 1);\r\n    while ((entry.nextSibling != null) && (entry.nextSibling != nextEntry)) {\r\n        // Sibling-Knoten die zu diesem Index-Eintrag gehören\r\n        parentNode.removeChild(entry.nextSibling);\r\n    }\r\n    parentNode.removeChild(entry); // Knoten, identifiziert durch 'index' Angabe;\r\n}\r\n\r\n/**\r\n * Eintrag aus der Liste von Checkboxen entfernen. Befehle abhängig von HtmlListRenderer\r\n * @param control\r\n * @param listUniqueId\r\n * @param index\r\n */\r\nfunction dwDomRemoveCheckboxListEntry(control, listUniqueId, index) {\r\n    dwDomRemoveCustomListEntry(control, listUniqueId, index); // ggf. ist ein Bild notwendig\r\n}\r\n\r\nfunction dwDomAppendCheckboxListEntry(control, listUniqueId, checkboxHtml, imageHtml, textHtml) {\r\n    var listControl = $(listUniqueId);\r\n    dwDomAppendChild(listControl, checkboxHtml);\r\n    if (imageHtml != \"\") {\r\n        dwDomAppendChild(listControl, imageHtml);\r\n    }\r\n    dwDomAppendChild(listControl, textHtml);\r\n}\r\n\r\nfunction dwDomInsertCheckboxListEntry(control, listUniqueId, checkboxHtml, imageHtml, textHtml, index) {\r\n    var listControl = $(listUniqueId);\r\n    var listSize = dwDomGetDomAttribute(listControl, \"size\");\r\n    if (index == listSize) {\r\n        dwDomAppendCheckboxListEntry(control, listUniqueId, checkboxHtml, imageHtml, textHtml);\r\n    } else {\r\n        var oldNodeForIndex = dwHelperGetListNodeForIndex(listUniqueId, index);\r\n        var parentNode = oldNodeForIndex.parentNode;\r\n        var checkboxNode = dwDomParseStringToNodes(checkboxHtml);\r\n        var textNode = dwDomParseStringToNodes(textHtml);\r\n        parentNode.insertBefore(textNode, oldNodeForIndex);\r\n        parentNode.insertBefore(checkboxNode, textNode);\r\n        if (imageHtml != \"\") {\r\n            var imageNode = dwDomParseStringToNodes(imageHtml);\r\n            parentNode.insertBefore(imageNode, textNode);\r\n        }\r\n    }\r\n}\r\n\r\nfunction dwDomAddToFunction(functionName, commandsToAdd) {\r\n    if (!(typeof window[functionName] == \"function\")) {\r\n        // Es kann nur eine Methode modifziert werden, die bereits vorhanden ist.\r\n        // Im Fall von z.B. dwRelayout gehen wir davon aus, dass diese Methode vorher generiert worden sein muss (GuiWindow)\r\n        alert(\"Exception: Function \" + functionName + \" not found.\\n\" +\r\n              \"Failed to run dwDomAddToFunction.\");\r\n    }\r\n    var func = window[functionName].toString();\r\n    func = dwUtilsStripFromFunction(func, true, true); // function() {...} abgeschnitten\r\n    func = dwUtilsTrim(func);\r\n    if (func != \"\") {\r\n        func += DWFRAMEWORK_CLEANUP_FUNCTION_NEXT_METHOD_STRING;\r\n    }\r\n    func += commandsToAdd;\r\n    window[functionName] = new Function(func);\r\n}\r\n\r\nfunction dwDomAppendToInnerFunctionParameter(functionName, innerFunctionName, innerFunctionParameterValueToAppend) {\r\n    if (!(typeof window[functionName] == \"function\")) {\r\n        // Es kann nur eine Methode modifziert werden, die bereits vorhanden ist.\r\n        // Im Fall von z.B. dwRelayout gehen wir davon aus, dass diese Methode vorher generiert worden sein muss (GuiWindow)\r\n        alert(\"Exception: Function \" + functionName + \" not found.\\n\" +\r\n              \"Failed to run dwDomAppendToInnerFunctionParameter.\");\r\n    }\r\n    var func = window[functionName].toString();\r\n    func = dwUtilsStripFromFunction(func, true, true);\r\n    func = dwUtilsTrim(func);\r\n\r\n    var innerFunctionIdx = func.indexOf(innerFunctionName + \" (\");\r\n    if (innerFunctionIdx == -1) {\r\n        innerFunctionIdx = func.indexOf(innerFunctionName + \"(\");\r\n    }\r\n    if (innerFunctionIdx == -1) {\r\n        alert(\"Exception: Inner function string '\" + innerFunctionName + \"' not found.\");\r\n        return; // Methode nicht gefunden\r\n    }\r\n    var innerFunctionEnd = \");\";\r\n    var innerFunctionEndIdx = func.indexOf(innerFunctionEnd, innerFunctionIdx + innerFunctionName.length) + innerFunctionEnd.length;\r\n    var innerFunction = func.substring(innerFunctionIdx, innerFunctionEndIdx);\r\n    var parameters = dwUtilsGetFunctionParameters(innerFunction);\r\n    var parameterValue = \"\";\r\n    if (parameters != null) {\r\n        if (parameters.length == 1) {\r\n            parameterValue = parameters[0].replace(/\"/g, \"\");\r\n        }\r\n        if (parameterValue.length > 0) {\r\n            parameterValue += \",\";\r\n        }\r\n    }\r\n    parameterValue += innerFunctionParameterValueToAppend;\r\n\r\n    var modifiedFunc = func.substring(0, innerFunctionIdx).concat(innerFunctionName).concat(\"(\\\"\").concat(parameterValue).concat(\"\\\");\").concat(func.substring(innerFunctionEndIdx));\r\n    window[functionName] = new Function(modifiedFunc);\r\n}\r\n\r\nfunction dwDomSetImageSource(control, src, onSuccessHandler, onFailureHandler, retryCounter) {\r\n    control.onload = function() {\r\n        if (!dwDomValidateImage(this)) {\r\n            retryCounter = retryCounter || 0;\r\n//            framework_logger.log(\"dwDomSetImageSource: not valid. retry \" + retryCounter);\r\n            if (retryCounter >= 5) {\r\n//                framework_logger.log(\"dwDomSetImageSource: rage quit. src=\" + src + \" - id: \" + control.id);\r\n                if (onFailureHandler) {\r\n                    onFailureHandler();\r\n                }\r\n                return;\r\n            }\r\n            dwDomSetImageSource(control, src, onSuccessHandler, onFailureHandler, retryCounter + 1);\r\n            return;\r\n        }\r\n//        framework_logger.log(\"dwDomSetImageSource: valid\");\r\n        if (onSuccessHandler) {\r\n//            framework_logger.log(\"dwDomSetImageSource: notify success handler\");\r\n            onSuccessHandler();\r\n        }\r\n    };\r\n    control.onerror = function() {\r\n        retryCounter = retryCounter || 0;\r\n//        framework_logger.log(\"dwDomSetImageSource: on error. retry \" + retryCounter);\r\n        if (retryCounter >= 5) {\r\n//            framework_logger.log(\"dwDomSetImageSource: rage quit. src=\" + src + \" - id: \" + control.id);\r\n            if (onFailureHandler) {\r\n                onFailureHandler();\r\n            }\r\n            return;\r\n        }\r\n        setTimeout(function() {\r\n            dwDomSetImageSource(control, src, onSuccessHandler, onFailureHandler, retryCounter + 1);\r\n        }, 50);\r\n    };\r\n//    framework_logger.log(\"Setting src to \" + src);\r\n    var retryParam = \"\";\r\n    if (retryCounter) {\r\n        retryParam = \"&retry=\" + retryCounter;\r\n    }\r\n    control.src = src + retryParam;\r\n}\r\n\r\nfunction dwDomValidateImage(image) {\r\n    if (dwUtilsIsDefined(image.complete) && !image.complete) {\r\n        return false;\r\n    }\r\n\r\n    if (dwUtilsIsDefined(image.naturalWidth) && (image.naturalWidth == 0)) {\r\n        return false;\r\n    }\r\n    if (dwUtilsIsDefined(image.naturalHeight) && (image.naturalHeight == 0)) {\r\n        return false;\r\n    }\r\n    return true;\r\n}\r\n\r\n// Wenn man z.B. left und top setzt über Javascript, bla.style.left = und bla.style.top, dann gibt das zwei Repaints/Reflows\r\n// Diese Methode hier kann man machen, damit es nur einen Repaint/Reflow erzeugt. Es wird dann der geänderte Style direkt über cssText\r\n// gesetzt\r\nfunction dwDomSetStylesViaAttribute(node, styles) {\r\n    var newCssText = \"\";\r\n    var newValuesArray = dwUtilsSplit(styles, \";\", false);\r\n    var newKeysLowercase = new Array();\r\n    for (var j = 0; j < newValuesArray.length; j++) {\r\n        var item = newValuesArray[j];\r\n        if (dwUtilsStringContains(item, \":\")) {\r\n            var key = dwUtilsTrim(dwUtilsStringBefore(item, \":\"));\r\n            newKeysLowercase.push(key.toLowerCase());\r\n        }\r\n    }\r\n\r\n    var oldValuesArray = dwUtilsSplit(node.style.cssText, \";\", false);\r\n    for (var j = 0; j < oldValuesArray.length; j++) {\r\n        var item = oldValuesArray[j];\r\n        if (dwUtilsStringContains(item, \":\")) {\r\n            var key = dwUtilsTrim(dwUtilsStringBefore(item, \":\"));\r\n            if (!dwUtilsIsInArray(newKeysLowercase, key.toLowerCase())) {\r\n                if (newCssText.length > 0) {\r\n                    newCssText += \";\";\r\n                }\r\n                newCssText += item;\r\n            }\r\n        }\r\n    }\r\n    if (newCssText.length > 0) {\r\n        newCssText += \";\";\r\n    }\r\n    newCssText += styles;\r\n    if (newCssText != node.style.cssText) {\r\n        node.style.cssText = newCssText;\r\n    }\r\n}\r\n\r\n/**\r\n * In den Head des Documents wird ein neuer Style hinzugefügt.\r\n * Das entspricht einem dynamischen Erweitern der css-Definitionen\r\n * @param styleString\r\n */\r\nfunction dwDomSetGlobalStyleIfNotExists(styleString) {\r\n    var styleText = '<style>' + styleString + '</style>';\r\n    var found = false;\r\n    document.head.childNodes.forEach((elem) => {\r\n        if (elem.childNodes.length > 0 && elem.childNodes[0].textContent === styleString) {\r\n            found = true;\r\n        }\r\n    })\r\n    if (!found) {\r\n        document.head.insertAdjacentHTML('beforeend', styleText);\r\n    }\r\n}\n/*\r\n * Copyright (c) 2025 Quanos Solutions GmbH\r\n */\r\nvar DWFRAMEWORK_CALLBACK_DELAY = 1000;\r\nvar DWFRAMEWORK_CALLBACK_DELAY_ACTIVE_SESSION_CHECK = 20000;\r\nvar DWFRAMEWORK_CLEANUP_FUNCTION_NEXT_METHOD_STRING = \"dwHelperDoNothing();\";\r\nvar DWFRAMEWORK_CLEANUP_RELAYOUT_FUNCTION_NAME = \"dwRelayoutCleanup\";\r\nvar DWFRAMEWORK_CLEANUP_RELAYOUT_INNER_FUNCTION_NAME = \"dwFrameworkCheckIds\";\r\nvar DWFRAMEWORK_FORCE_LOGGING_TO_BROWSER = false; // Browser-Logging: framework_logger.log()\r\n\r\nvar DOCTYPE_HTML_5 = \"<!DOCTYPE html>\";\r\n\r\n// Kopie ist in J2EEHandler\r\nvar DWFRAMEWORK_BROWSER_TYPE_IE = \"ie\";\r\nvar DWFRAMEWORK_BROWSER_TYPE_FIREFOX = \"firefox\";\r\nvar DWFRAMEWORK_BROWSER_TYPE_OPERA = \"opera\";\r\nvar DWFRAMEWORK_BROWSER_TYPE_CHROME = \"chrome\";\r\nvar DWFRAMEWORK_BROWSER_TYPE_SAFARI = \"safari\";\r\nvar DWFRAMEWORK_BROWSER_TYPE_EDGE = \"edge\";\r\n//EdgeChromium (Microsoft Edge) behandeln wie Chrome, da das am besten zu funktionieren scheint\r\nvar DWFRAMEWORK_BROWSER_TYPE_EDGE_CHROMIUM = \"edge_chromium\";\r\n\r\nvar dwFrameworkHtmlSubmitInProgress = false;\r\nvar dwFrameworkInitFinished = false;\r\nvar dwFrameworkThreadIdCache = new Object();\r\n\r\nvar dwFrameworkRestoreScrollPositions = new Object();\r\n\r\nvar dwFrameworkHintCounter = 0;\r\n\r\nvar dwFrameworkMoveCurrentPopupElement = null;\r\nvar dwFrameworkMoveCurrentPopupLastMousePos = null;\r\n\r\nvar dwFrameworkRefreshingPage = false; // Flag, ob die Seite gerade neu geladen wird per JavaScript bzw. Formular\r\nvar dwFrameworkCloseWindowSilently = false; // Bei true wird kein Event closedSubWindowEvent beim Schließen gefeuert\r\nvar dwFrameworkEmbeddedInShop = false; // Bei true wird kein Event closedSubWindowEvent beim Schließen gefeuert\r\n\r\nvar FRAMEWORK_LOGCHANNELS = {\r\n    channels: {},\r\n    isActive: function(channel) {\r\n        return (this.channels[channel] === true);\r\n    },\r\n    activate: function(channel) {\r\n        this.channels[channel] = true;\r\n    },\r\n\r\n    deactivate: function(channel) {\r\n        this.channels[channel] = false;\r\n    }\r\n};\r\n\r\nfunction dwFrameworkLog(channel, message) {\r\n    if (FRAMEWORK_LOGCHANNELS.isActive(channel)) {\r\n        framework_logger.log(new Date().toUTCString() + \"\\t\" + channel + \"\\t\" + message + \"\\t [:\" + dwUtilsGetFunctionName((arguments.callee.caller || \"\").toString()) + \"]\");\r\n    }\r\n}\r\n\r\n// Klassennamen für Elemente für die Event Bubbling erlaubt bleiben muss, obwohl Eventbubbling eigentlich abgeschalten\r\n// werden sollte. Variablennamen nicht ändern, da er als String in ImageViewer360CssResource.java verwendet wird!\r\nvar forceEventBubblingClassNames = new Set();\r\n\r\nfunction dwFrameworkGetRootWindowId() {\r\n    var submitForm = dwFrameworkFindSubmitForm(\"\");\r\n    for (var i = 0; i < submitForm.childNodes.length; i++) {\r\n        var formChild = submitForm.childNodes[i];\r\n        if (formChild.nodeName.toLowerCase() == \"input\") {\r\n            var formChildName = formChild.getAttribute(\"name\");\r\n            if (formChildName == \"__windowid\") {\r\n                return formChild.value;\r\n            }\r\n        }\r\n    }\r\n    return \"\";\r\n}\r\n\r\n/**\r\n * Submitted das Formular\r\n *\r\n * @param eventHandlerComponentId Die Komponente aus dem Komponentenbaum die es ausgelöst hat (z.B: Table)\r\n * @param receiverid Die Komponente die das Event abarbeitet\r\n * @param actiontosubmit\r\n */\r\nfunction dwFrameworkSubmitForm(eventHandlerComponentId, receiverid, actiontosubmit) {\r\n    if (dwFrameworkHtmlSubmitInProgress) {\r\n        return; // Formular bereits abgesendet. Server verarbeitet die Anfrage bereits. Client darf keine neue Anfrage senden\r\n        // bis er neu gezeichnet wurde\r\n    }\r\n    dwFrameworkHtmlSubmitInProgress = true;\r\n    var submitForm = dwFrameworkFindSubmitForm(eventHandlerComponentId);\r\n    // Die Id die etwas gemacht hat speichern\r\n    for (var i = 0; i < submitForm.childNodes.length; i++) {\r\n        var formChild = submitForm.childNodes[i];\r\n        if (formChild.nodeName.toLowerCase() == \"input\") {\r\n            var formChildName = formChild.getAttribute(\"name\");\r\n            if (formChildName == \"id__submit_eventHandlerComponentId\") {\r\n                formChild.value = eventHandlerComponentId;\r\n            } else if (formChildName == \"id__submit_action\") {\r\n                formChild.value = actiontosubmit;\r\n            } else if (formChildName == \"id__submit_receiverId\") {\r\n                formChild.value = receiverid;\r\n            }\r\n        }\r\n    }\r\n    submitForm.submit();\r\n}\r\n\r\n/**\r\n * Sendet das Formular nach einem CLICK Event zeitverzögert ab.\r\n *\r\n * Bei einem DBLCLICK Event wird mind. 1 Click-Event ausgelöst (Browser-abhängig). Damit auch im HTML Modus\r\n * die Möglichkeit besteht, auf DBLCLICK Events zu reagieren, darf nach diesem Event nicht sofort die Seite submitted werden\r\n *\r\n * Wir warten explizit ein Zeitintervall ab, ob der Browser das DBLCLICK Event auslöst. Ist eine Methode für das\r\n * DBLCLICK Event registriert, wird das CLICK Event 'gelöscht' - d.h. für das CLICK Event wird kein Submit ausgeführt -\r\n * und der Submit für den DBLCLICK ausgeführt.\r\n *\r\n * @param event\r\n * @param submitFunc\r\n */\r\nfunction dwFrameworkSubmitFormClick(event, submitFunc, windowId) {\r\n    var eventType = event.type.toLocaleLowerCase();\r\n    if (eventType == \"click\") {\r\n        var strgInput = $(windowId + \"_strgKeyPressed\");\r\n        strgInput.value = event.ctrlKey;\r\n        // Position des geklickten Elements im HTML Dokumentenfluss auslesen und mitgeben (x:y)\r\n        var control = dwUtilsGetEventTarget(event);\r\n        var controlPosition = dwUtilsGetLocationOnWindow(control, true, true);\r\n        var positionInput = $(windowId + \"___POINT_controlPosition\");\r\n        positionInput.value = controlPosition.x + \":\" + controlPosition.y;\r\n        dwUtilsSetDelayedFunction(event, submitFunc, \"SUBMIT_FORM_CLICK\", DWUTILS_DOUBLE_CLICK_TIME);\r\n    }\r\n}\r\n\r\n/**\r\n * Sendet das Formluar nach einem DBLCLICK ab\r\n * Ein vorhandenes CLICK Event (timeout - siehe dwFrameworkSubmitFormClick) wird entfernt\r\n * @param event\r\n * @param submitFunc\r\n */\r\nfunction dwFrameworkSubmitFormDblClick(event, submitFunc) {\r\n    var eventType = event.type.toLocaleLowerCase();\r\n    if (eventType == \"dblclick\") {\r\n        dwUtilsReleaseDelayedFunction(\"SUBMIT_FORM_CLICK\");\r\n        eval(submitFunc);\r\n    }\r\n}\r\n\r\nfunction dwFrameworkOnSubmit(event) {\r\n    // Im HTML Modus / bei explizitem Abschicken des Formulars wird die Methode \"dwFrameworkSubmitForm\" verwendet und das Flag gesetzt\r\n    // Implizite Form Submits (automatischer Form Submit z.B. wenn nur 1 Eingabeelement gefunden) werden dadurch unterbunden\r\n    return dwFrameworkHtmlSubmitInProgress;\r\n}\r\n\r\n/**\r\n * Zeigt die Seite neu an (per Formularsubmit)\r\n */\r\nfunction dwFrameworkRefreshPage() {\r\n    dwFrameworkRefreshingPage = true;\r\n    dwFrameworkSubmitForm(\"\", \"\", \"refresh\");\r\n}\r\n\r\n/**\r\n * Zeigt die Seite mit dem aktuellen RootWindow neu an (per Javascript).\r\n */\r\nfunction dwFrameworkRefreshPageJs() {\r\n    // Nach einem Refresh muss Init neu durchlaufen werden\r\n    // Sonst wird Ajax schon auf einer halb geladenen Seite ausgeführt und es werden evtl. Properties auf Controls gesetzt, die im html noch nicht geladen sind\r\n    dwFrameworkInitFinished = false;\r\n    dwFrameworkRefreshingPage = true; // Notwendig, damit das Framework nicht deaktiviert und ein closedSubWindow-Event gefeuert wird\r\n    dwFrameworkLoadRootWindowJs(dwFrameworkGetRootWindowId());\r\n}\r\n\r\n/**\r\n * Zeigt die Seite für die übergebene rootWindowId neu an (per Javascript).\r\n */\r\nfunction dwFrameworkLoadRootWindowJs(rootWindowId) {\r\n    dwFrameworkRefreshingPage = true;\r\n    window.location.replace(\"app?timestamp=\" + new Date().getTime() + \"&id__submit_action=refresh&__windowid=\" + rootWindowId);\r\n}\r\n\r\nfunction dwFrameworkFindSubmitForm(childId) {\r\n    if (childId == \"\") {\r\n        return document.forms[0]; // Spezialfall z.B. für Refresh\r\n    } else {\r\n        var submitForm = $(childId);\r\n        return dwFrameworkFindSubmitFormForNode(submitForm);\r\n    }\r\n}\r\n\r\nfunction dwFrameworkFindSubmitFormForNode(submitForm) {\r\n    while ((submitForm != null) && (submitForm.tagName) && (submitForm.tagName.toLowerCase() != \"form\")) {\r\n        submitForm = submitForm.parentNode;\r\n    }\r\n    if (submitForm && submitForm.tagName && submitForm.tagName.toLowerCase() == \"form\") {\r\n        return submitForm;\r\n    } else {\r\n        return null;\r\n    }\r\n}\r\n\r\n/**\r\n * Zeigt eine interne Nachricht an\r\n */\r\nfunction dwFrameworkShowHint(idsuffix, text, backgroundColor, color) {\r\n    var id = \"internal_messagebox_\" + idsuffix;\r\n    var timeString = dwUtilsGetGermanTime();\r\n    var hintNode = $(id);\r\n    if (hintNode == null) {\r\n        hintNode = document.createElement(\"span\");\r\n        hintNode.setAttribute(\"id\", id);\r\n        hintNode.style.position = \"absolute\";\r\n        hintNode.style.zIndex = 99999;\r\n        hintNode.style.right = \"0px\";\r\n        hintNode.style.top = (dwFrameworkHintCounter * 13) + \"px\"; // voneinander unabhänige Hinweise vertikal angeordnet anzeigen (Zeilenhöhe ist 13px)\r\n        hintNode.style.fontWeight = \"bold\";\r\n        hintNode.style.backgroundColor = backgroundColor;\r\n        hintNode.style.color = color;\r\n        hintNode.style.fontSize = \"11px\";\r\n        hintNode.style.lineHeight = \"13px\";\r\n        var textNode = document.createTextNode(timeString + \" \" + text);\r\n        hintNode.appendChild(textNode);\r\n\r\n        // Einhängen\r\n        var bodyNode = $(\"body\");\r\n        bodyNode.insertBefore(hintNode, bodyNode.childNodes[0]);\r\n        dwFrameworkHintCounter++;\r\n    } else {\r\n        var textNode = document.createTextNode(timeString + \" \" + text);\r\n        hintNode.style.backgroundColor = backgroundColor;\r\n        hintNode.style.color = color;\r\n        hintNode.replaceChild(textNode, hintNode.childNodes.item(0));\r\n    }\r\n}\r\n\r\n/**\r\n * Wird vor Events aufgerufen\r\n *\r\n * @param e\r\n */\r\nfunction dwFrameworkPreEvent(event, withEventBubbling, htmlElement) {\r\n    // Events werden nicht immer sofort verarbeitet (z.B. onscroll nach Abarbeiten aller DOM Manipulationen)\r\n    // Es ist daher nicht garantiert, das event.srcElement noch im DOM Baum hängt\r\n    event = dwFrameworkGetEvent(event);\r\n    if (!withEventBubbling && !isForcedEventBubblingSource(event)) {\r\n        dwFrameworkDisableEventBubbling(event);\r\n    }\r\n    dwHelperCallHotkeyIfPossible(event);\r\n    dwHelperCloseCurrentlyOpenedContextMenu(event);\r\n    dwHelperCloseCurrentlyOpenedMenubarEntry(event);\r\n    dwHelperHideCurrentlyVisibleTooltips(event);\r\n    dwHelperCloseCurrentlyOpenedComboboxes(event);\r\n    dwHelperFireWindowAutoCloseIfPossible(event, htmlElement);\r\n    if (DWTOUCH_TOUCH_EMULATION_ENABLED) {\r\n        dwTouchEmulateTouchEvent(event);\r\n    }\r\n}\r\n\r\n// Soll für das srcElement trotz witheventBubbling = false das Eventbubbling stattfinden?\r\nfunction isForcedEventBubblingSource(event) {\r\n    return event.bubbles && (event.srcElement !== undefined) && forceEventBubblingClassNames.has(event.srcElement.className);\r\n}\r\n/**\r\n * Wird nach Events aufgerufen\r\n *\r\n * @param e\r\n */\r\nfunction dwFrameworkPostEvent(event) {\r\n    dwHelperRemoveDeprecatedPopupsIfPossible();\r\n}\r\n\r\n/**\r\n * Verhindert die Browser-Standard-Funktion (History Back) der \"Backspace\" Taste\r\n * (wenn aktuell kein Eingabefeld ausgewählt ist)\r\n * @param event\r\n */\r\nfunction dwFrameworkPreventBackspaceHistoryBack(event) {\r\n    event = dwFrameworkGetEvent(event);\r\n    if (dwUtilsGetEventKeyCode(event) == VIRTUAL_KEYCODES.KEY_BACK_SPACE) {\r\n        var eventTarget = dwUtilsGetEventTarget(event);\r\n\r\n        if (typeof (eventTarget.tagName) == \"undefined\") {\r\n            return;\r\n        }\r\n\r\n        var isReadonly = dwDomHasAttribute(eventTarget, \"readonly\");\r\n        if (isReadonly) {\r\n            dwFrameworkPreventDefaultBehaviour(event);\r\n            return;\r\n        }\r\n        var isDisabled = dwDomHasAttribute(eventTarget, \"disabled\");\r\n        if (isDisabled) {\r\n            dwFrameworkPreventDefaultBehaviour(event);\r\n            return;\r\n        }\r\n\r\n        var doPrevent = true;\r\n        var tagName = eventTarget.tagName.toLowerCase();\r\n        var contentEditable = (typeof (eventTarget.contentEditable) != \"undefined\") && (eventTarget.contentEditable == \"true\");\r\n        if (contentEditable) {\r\n            // Nicht verhindern...\r\n            doPrevent = false;\r\n        } else if (tagName == \"input\") {\r\n            var preventableInputTypes = [\"checkbox\", \"radio\", \"submit\", \"button\", \"reset\"];\r\n            // Nur verhindern, wenn es sich um kein Eingabe-Feld handelt ...\r\n            doPrevent = (dwUtilsIsInArray(preventableInputTypes, eventTarget.type));\r\n        } else if (tagName == \"textarea\") {\r\n            // Nicht verhindern...\r\n            doPrevent = false;\r\n        }\r\n\r\n        if (doPrevent) {\r\n            dwFrameworkPreventDefaultBehaviour(event);\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * Verhindert die Browser-Standard-Funktion (Kontextmenu) der \"Rechte-Maus\" Taste\r\n * Wenn das Attribut allowDefaultContextmenu gesetzt ist, wird das Standardverhalten zugelassen, wenn nicht disabled.\r\n * @param event\r\n */\r\nfunction dwFrameworkPreventContextMenu(event) {\r\n    event = dwFrameworkGetEvent(event);\r\n\r\n    var eventTarget = dwUtilsGetEventTarget(event);\r\n    if (typeof (eventTarget.tagName) == \"undefined\") {\r\n        dwFrameworkPreventDefaultBehaviour(event);\r\n        return;\r\n    }\r\n\r\n    var isDisabled = dwDomHasAttribute(eventTarget, \"disabled\");\r\n    if (isDisabled) {\r\n        dwFrameworkPreventDefaultBehaviour(event);\r\n        return;\r\n    }\r\n\r\n    var allow = dwDomHasAttribute(eventTarget, \"allowDefaultContextmenu\");\r\n    while (!allow && !(eventTarget.tagName == \"body\" || eventTarget.tagName == \"BODY\")) {\r\n        eventTarget = eventTarget.parentNode;\r\n        allow = dwDomHasAttribute(eventTarget, \"allowDefaultContextmenu\");\r\n    }\r\n\r\n    if (!allow) {\r\n        dwFrameworkPreventDefaultBehaviour(event);\r\n    }\r\n}\r\n\r\n/**\r\n * Entfernt alle unnötigen Popups von der Seite (die mit dwHelperPopupToBody in den Body verschoben wurden).\r\n * Popups können übrig bleiben, wenn man ein Popup öffnet und dann wegnavigiert\r\n */\r\nfunction dwHelperRemoveDeprecatedPopupsIfPossible() {\r\n    // Im IE8 kommen bereits Events, obwohl er noch die Seite aufbaut\r\n    if (!dwFrameworkInitFinished) {\r\n        return;\r\n    }\r\n    var body = $(\"body\");\r\n    var elements = dwDomGetElementChildNodes(body);\r\n    for (var i = 0; i < elements.length; i++) {\r\n        var element = elements[i];\r\n        if (dwDomHasAttribute(element, \"referrerId\")) {\r\n            var referrerId = element.getAttribute(\"referrerId\");\r\n            if ($(referrerId) == null) { // referrer gelöscht -> Popup entfernen\r\n                //gecachte Iframe Elemente für Heavyweight popups nicht entfernen\r\n                if (!dwPopup_isCachedPopUpByWrapperId(element.id)) {\r\n                    body.removeChild(element);\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\n\r\n/**\r\n * Darüberliegende Controls sollen das Event nicht mehr haben\r\n *\r\n * Methode wird an vielen Stellen direkt aufgerufen. Bei Verwendung von setTimeout geht das Event selbst verloren\r\n * An dieser Stelle soll die aufrufende Methode ohne Fehler bearbeitet werden können (z.B. dwAjaxDefaultOnCustomListChange)\r\n * @param event Event oder NULL\r\n */\r\nfunction dwFrameworkDisableEventBubbling(event) {\r\n    if (event == null) {\r\n        return;\r\n    }\r\n    if (event.stopPropagation) { // W3C Standard\r\n        event.stopPropagation();\r\n    } else {\r\n        event.cancelBubble = true;   // IE\r\n    }\r\n}\r\n\r\n/**\r\n * Standard-Verhalten der aktuellen Komponente wird unterdrückt (z.B. Link-Aufruf bei <a> Tags)\r\n *\r\n * Für die Unterdrückung der Standard-Events eines Controls gibt es 2 Möglichkeiten\r\n * - Variante 1: return false;\r\n *               Befehl wird an der Stelle ausgeführt, an der er im Methoden-String aufgeführt wird\r\n *               Bei onclick='foo1();return false;foo2();' wird nur foo1 ausgeführt\r\n * - Variante 2: preventDefaultBehaviour\r\n *               Befehl setzt den Rückgabewert, führt allerdings noch alle Methoden des Listeners bis zum Ende aus\r\n *               Bei onclick='foo1();preventDefaultBehaviour(event);foo2();' werden beide Methoden ausgeführt\r\n *\r\n * Die Verwendung von preventDefaultBehaviour erlaubt es, das Default-Verhalten zu deaktiveren, und weiterhin\r\n * ungeachtet der vorherigen definierten Methoden für den Listener, neue Event-Methoden zu registrieren/auszuführen\r\n * @param event\r\n */\r\nfunction dwFrameworkPreventDefaultBehaviour(event) {\r\n    if (event.preventDefault) { // W3C Standard\r\n        event.preventDefault();\r\n    }\r\n    event.returnValue = false;  // IE\r\n}\r\n\r\n/**\r\n * Wandelt css Notation in Javascript um\r\n * - background-color zu backgroundColor\r\n * - z-index zu zIndex\r\n * - usw.\r\n *\r\n * @param name\r\n */\r\nfunction dwFrameworkCssToJavascriptProperty(name) {\r\n    var result = \"\";\r\n    var doUppercase = false;\r\n    for (var i = 0; i < name.length; i++) {\r\n        var char_ = name.charAt(i);\r\n        if (char_ == '-') {\r\n            doUppercase = true;\r\n        } else {\r\n            if (doUppercase) {\r\n                result += (char_ + \"\").toUpperCase();\r\n                doUppercase = false;\r\n            } else {\r\n                result += char_;\r\n            }\r\n        }\r\n    }\r\n    return result;\r\n}\r\n\r\nfunction dwFrameworkJavascriptToCssProperty(name) {\r\n    var result = \"\";\r\n    for (var i = 0; i < name.length; i++) {\r\n        var aChar = name.charAt(i);\r\n        if (aChar == aChar.toUpperCase()) {\r\n            result += \"-\";\r\n            result += aChar.toLowerCase();\r\n        } else {\r\n            result += aChar;\r\n        }\r\n    }\r\n    return result;\r\n}\r\n\r\n/**\r\n * Wechselt den Tab-Reiter des Tabbed Pane Controls (Alte Implementierung - alle Content Tabs herausgeneriert)\r\n * Ist der Tab bereits selektiert wird keine weitere Aktion ausgeführt.\r\n *\r\n * @param controlId     Tabbed Pane ControlId\r\n * @param tabIndex      Index des auszuwählenden Tabbed Pane Entries\r\n */\r\nfunction dwHelperSwitchToTabbedPaneEntry(controlId, tabIndex) {\r\n    var tabbedPane = $(controlId);\r\n    var controlHeightWorkaroundForOpera = dwUtilsGetHeight(tabbedPane);\r\n    var selectedTabInputControl = $(controlId + \"_selectedTab\");\r\n    if ((selectedTabInputControl != null) && (selectedTabInputControl.value == tabIndex)) {\r\n        return;\r\n    } // Klick auf den aktuell selektierten Tab-Reiter\r\n    var oldSelectionIndex = selectedTabInputControl.value;\r\n    // Alte Tab Selektion bearbeiten (ausblenden / style anpassen)\r\n    var oldLink = $(controlId + \"_link\" + oldSelectionIndex);\r\n    var oldContent = $(controlId + \"_tab\" + oldSelectionIndex);\r\n    oldLink.className = \"guitabbedpane_tabinactive\";\r\n    oldContent.style.display = \"none\";\r\n    // Neue Tab Selektion bearbeiten (einblenden / style anpassen)\r\n    var newLink = $(controlId + \"_link\" + tabIndex);\r\n    var newContent = $(controlId + \"_tab\" + tabIndex);\r\n    newLink.className = \"guitabbedpane_tabactive\";\r\n    newContent.style.display = \"block\"; // Von inline auf block wg. Chrome loose 100% Höhe sonst nicht\r\n    selectedTabInputControl.value = tabIndex;\r\n    if (framework_isOpera) {\r\n        // Opera merkt sich die Höhe 100% nicht\r\n        dwUtilsSetHeight(tabbedPane, controlHeightWorkaroundForOpera);\r\n    }\r\n}\r\n\r\n/**\r\n * Übermittelt einen Request zum Wechsel des Tab-Reiters des TabbedPaneControls\r\n * Ist der gewünschte Tab bereits selektiert, wird kein Request ausgelöst\r\n * @param eventHandlerComponentId\r\n * @param controlId\r\n * @param elementIndex\r\n */\r\nfunction dwHelperRenderNewTabbedPaneEntry(eventHandlerComponentId, controlId, elementIndex) {\r\n    var selectedTabInputControl = $(controlId + \"_selectedTab\");\r\n    if ((selectedTabInputControl != null) && (selectedTabInputControl.value == elementIndex)) {\r\n        return;\r\n    } // Klick auf den aktuell selektierten Tab-Reiter\r\n    selectedTabInputControl.value = elementIndex;\r\n    dwFrameworkSubmitForm(eventHandlerComponentId, controlId, \"tabbedPaneTabChangedEvent\");\r\n}\r\n\r\nfunction dwHelperUpdateNotifyingScrollPanelHeaderScrollPosition(controlId) {\r\n    var control = $(controlId);\r\n    if (control == null) {\r\n        return;\r\n    }\r\n    var headerControlId = dwDomGetDomAttribute(control, \"headerId\");\r\n    if (!headerControlId) {\r\n        // NULL oder leer ... es gibt keinen zugehörigen Header\r\n        return;\r\n    }\r\n    var headerControl = $(headerControlId);\r\n    headerControl.style.marginLeft = -(control.scrollLeft - 2) + \"px\";     // etwas weiter rechts, damit kein Text durchscheint\r\n}\r\n\r\nfunction dwHelperUpdateNotifyingScrollPanelColumnScrollPosition(scrollPaneId) {\r\n    var scrollPane = $(scrollPaneId);\r\n    if (scrollPane == null) {\r\n        return;\r\n    }\r\n    let scrollRect = scrollPane.getBoundingClientRect();\r\n    let offsetLeft = 0;\r\n    let offsetRight = 0;\r\n    let firstColPanels = dwDomGetDomAttribute(scrollPane, \"firstColPanels\");\r\n    if (firstColPanels) {\r\n        var panelIds = firstColPanels.split(\",\");\r\n        for (var i = 0; i < panelIds.length; i++) {\r\n            var panel = $(panelIds[i] + \"_layoutdiv\");\r\n            if (panel) {\r\n                panel.style.zIndex = \"300\";\r\n                panel.style.marginLeft = scrollPane.scrollLeft + \"px\";\r\n                let fixedCells = panel.getElementsByClassName('r-table-cell');\r\n                for (let j = 0; j < fixedCells.length; j++) {\r\n                    fixedCells[j].classList.add(\"fixed\");\r\n                }\r\n\r\n            }\r\n            var scrollRectClient = panel.getBoundingClientRect();\r\n            var offset = scrollRectClient.width;\r\n            offsetLeft = Math.max(offsetLeft, offset);\r\n        }\r\n    }\r\n    var lastColPanels = dwDomGetDomAttribute(scrollPane, \"lastColPanels\");\r\n    if (lastColPanels) {\r\n        var panelIds = lastColPanels.split(\",\");\r\n\r\n        var diff = -4;\r\n        if (framework_isIE && (scrollPane.scrollWidth - scrollPane.clientWidth > 0)) {\r\n            // Beim IE11 verschieben sich die Buttons, falls die horizontale Scrollbar vorhanden ist, zu weit nach links.\r\n            diff = 10;\r\n        }\r\n        for (var i = 0; i < panelIds.length; i++) {\r\n            var panel = $(panelIds[i] + \"_layoutdiv\");\r\n            if (panel) {\r\n                panel.style.zIndex = \"300\";                                   // etwas weiter rechts, damit kein Text durchscheint\r\n                panel.style.marginLeft = -(scrollPane.scrollWidth - scrollPane.clientWidth - scrollPane.scrollLeft - diff) + \"px\";\r\n\r\n                let fixedCells = panel.getElementsByClassName('r-table-cell');\r\n                for (let j = 0; j < fixedCells.length; j++) {\r\n                    fixedCells[j].classList.add(\"fixed\");\r\n                }\r\n\r\n                var scrollRectClient = panel.getBoundingClientRect();\r\n                var offset = scrollRectClient.width;\r\n                offsetRight = Math.max(offsetRight, offset);\r\n\r\n            }\r\n        }\r\n    }\r\n\r\n    // Alle RCell der R-Table\r\n    let children = scrollPane.getElementsByClassName('r-table-cell');\r\n    // left und right ist der Bereich, der von den fixen Zellen belegt wird\r\n    let left = scrollPane.getBoundingClientRect().left + offsetLeft;\r\n    let right = scrollPane.getBoundingClientRect().left + scrollPane.getBoundingClientRect().width - offsetRight;\r\n\r\n    for (let i = 0; i < children.length; i++) {\r\n        if (!children[i].classList.contains(\"fixed\")) {\r\n            var control = children[i].parentNode;\r\n            // Alle mit zIndex >= 300 sind fixierte Zellen oder Linien\r\n            if (control && control.style.zIndex < 300) {\r\n                // Zeichne die Zelle nicht in dem von den fixen Zellen belegten Bereich\r\n                setClipPathToControl(control, left, right);\r\n            }\r\n        }\r\n    }\r\n\r\n}\r\n\r\n/**\r\n * Schneide rechts und links das Control ab. Wird fürs scrollen der R-Table benötigt, damit nichts durchscheint.\r\n * @param control\r\n * @param left\r\n * @param right\r\n */\r\nfunction setClipPathToControl(control, left, right) {\r\n    let boundingRect = control.getBoundingClientRect();\r\n    left = left - boundingRect.left;\r\n    right = boundingRect.left + boundingRect.width - right;\r\n\r\n    if (right > 0 || left > 0) {\r\n        control.style['clip-path'] = 'inset(0px ' + Math.max(0, right) + 'px 0px ' + Math.max(0, left) + 'px)';\r\n    } else {\r\n        control.style['clip-path'] = 'none';\r\n    }\r\n}\r\n\r\n/**\r\n * Speichert sich das aktuell selektierte Control\r\n */\r\nfunction dwHelperStoreFocus(windowId, controlId) {\r\n    $(windowId + \"_focusComponent\").value = controlId;\r\n}\r\n\r\n/**\r\n * Versucht, das Element zu fokusieren. Da wir bei Plain Html mit Popup das darunterliegende Hauptfenster nicht\r\n * rendern, machen wir eine Überprüfung ob es das Element überhaupt gibt\r\n */\r\nfunction dwHelperTryFocus(windowId) {\r\n    var elementIdFocused = $(windowId + \"_focusComponent\").value;\r\n    if (elementIdFocused == \"\") {\r\n        return false;\r\n    }\r\n    return dwHelperTryFocusOnNode(elementIdFocused);\r\n}\r\n\r\nfunction dwHelperTryFocusOnNode(elementIdToFocus) {\r\n    var element = $(elementIdToFocus);\r\n    if (element != null) {\r\n        try {\r\n            element.focus();\r\n            return true;\r\n        } catch (exception) {\r\n            // ignore\r\n        }\r\n    }\r\n    return false;\r\n}\r\n\r\n/**\r\n * Scrolle das Div mit der übergebenen id oder dessen erstes scrollbares Kind an die in den zugeordneten Inputfeldern abgelegte Position\r\n * @param uniqueId\r\n */\r\nfunction dwHelperScrollToStoredPosition(uniqueId) {\r\n    var div = $(uniqueId);\r\n    if ((div != null) && (div.style.overflow == \"hidden\") && !((div.getAttribute(\"horizontalScrollEnabled\") == \"false\") && (div.getAttribute(\"verticalScrollEnabled\") == \"false\"))) {\r\n        div = getScrollingChildByBreadthFirstSearch(div);\r\n    }\r\n    if (div != null) {\r\n        var scrollTopTextField = $(uniqueId + \"_scrollTop\");\r\n        var scrollLeftTextField = $(uniqueId + \"_scrollLeft\");\r\n        if (scrollTopTextField.value != div.scrollTop) {\r\n            div.scrollTop = scrollTopTextField.value;\r\n        }\r\n        if (scrollLeftTextField.value != div.scrollLeft) {\r\n            div.scrollLeft = scrollLeftTextField.value;\r\n        }\r\n    }\r\n}\r\n\r\nfunction getScrollingChildByBreadthFirstSearch(startElement) {\r\n    var queue = new Array();\r\n    queue.push(startElement);\r\n    while (queue.length > 0) {\r\n        var element = queue.shift();\r\n        if ((dwUtilsGetStyle(element, \"overflow\") == \"auto\") || (dwUtilsGetStyle(element, \"overflow-x\") == \"auto\")\r\n            || (dwUtilsGetStyle(element, \"overflow-y\") == \"auto\")) {\r\n            // gesuchtes scrollendes Kindelement gefunden\r\n            return element;\r\n        }\r\n        // noch nicht gefunden; alle Kindelemente in die Queue.\r\n        for (var i = 0; i < element.children.length; i++) {\r\n            queue.push(element.children[i]);\r\n        }\r\n    }\r\n    return null;\r\n}\r\n\r\n/**\r\n * Speichere die Scrollposition des Divs mit der übergebenen id in zugeordneten Inputfeldern\r\n * @param uniqueId\r\n */\r\nfunction dwHelperScrollPaneValueChanged(uniqueId) {\r\n    var div = $(uniqueId);\r\n    if ((div != null) && (div.style.overflow == \"hidden\")) {\r\n        div = getScrollingChildByBreadthFirstSearch(div);\r\n    }\r\n\r\n    if (div != null) {\r\n        var scrollTopTextField = $(uniqueId + \"_scrollTop\");\r\n        scrollTopTextField.value = div.scrollTop;\r\n        var scrollLeftTextField = $(uniqueId + \"_scrollLeft\");\r\n        scrollLeftTextField.value = div.scrollLeft;\r\n    }\r\n}\r\n\r\n/**\r\n * Hat sich die Scrollposition des Divs mit der übergebenen id im Vergleich zu den Werten der zugeordneten Inputfelder verändert?\r\n * @param uniqueId\r\n */\r\nfunction dwHelperHasScrollPaneValueChanged(uniqueId) {\r\n    var div = $(uniqueId);\r\n    if ((div != null) && (div.style.overflow == \"hidden\")) {\r\n        div = getScrollingChildByBreadthFirstSearch(div);\r\n    }\r\n\r\n    if (div != null) {\r\n        var scrollTopTextField = $(uniqueId + \"_scrollTop\");\r\n        var scrollLeftTextField = $(uniqueId + \"_scrollLeft\");\r\n        if ((scrollTopTextField != null) && (scrollLeftTextField != null)) {\r\n            return (scrollTopTextField.value != div.scrollTop) || (scrollLeftTextField.value != div.scrollLeft);\r\n        }\r\n    }\r\n    return true;\r\n}\r\n\r\n/**\r\n * Synchronisiere die horizontale Scrollposition der Tabelle für den Header und der Tabelle für den Inhalt\r\n * (damit wir den Inhalt bei fixem Header vertikal scrollen können, werden Header und Inhalt in zwei separaten\r\n * Tabellen angezeigt)\r\n * @param uniqueId         Die Id der Tabelle\r\n * @param usesFixedColumns Verwendet die Tabelle fixierte Spalten?\r\n * @param fixedTable       Handelt es sich um die Tabelle mit den fixierten Spalten (nur sinnvoll in Kombination mit usesFixedColumns)\r\n */\r\nfunction dwHelperTableContentScrolled(uniqueId, usesFixedColumns, fixedTable) {\r\n    // Logik mit fixierten Spalten\r\n    if (usesFixedColumns) {\r\n        // Temporäres Deaktivieren vom onscroll-Listener auf dem anderen Tabellen-Div mit Timeout notwendig, weil sich die\r\n        // beiden onscroll-Listener sonst gegenseitig aufrufen würden und die Tabelle dadurch nicht mehr sauber scrollen würde\r\n        var thisContentDiv;\r\n        var otherContentDiv;\r\n        if (fixedTable) {\r\n            thisContentDiv = $(uniqueId + '_fixedContentDiv');\r\n            otherContentDiv = $(uniqueId + '_contentDiv');\r\n        } else {\r\n            thisContentDiv = $(uniqueId + '_contentDiv');\r\n            otherContentDiv = $(uniqueId + '_fixedContentDiv');\r\n        }\r\n\r\n        if (thisContentDiv && otherContentDiv) {\r\n            // Vertikale Scrollposition vom anderen Tabellen-Div anpassen\r\n            var scrollTop = thisContentDiv.scrollTop;\r\n            dwHelperTableScrollElementVerticalWithFixedColumns(otherContentDiv, scrollTop);\r\n\r\n            // Vertikale Scrollposition von der vertikalen ScrollBar anpassen\r\n            dwHelperTableScrollElementVerticalWithFixedColumns($(uniqueId + '_verticalScrollBarDiv'), scrollTop);\r\n        }\r\n\r\n        if (!fixedTable) {\r\n            // Header und Tabelleninhalt mit horizontaler ScrollBar synchronisieren bei der scrollbaren Tabelle\r\n            dwHelperTableScrollHorizontalWithFixedColumns(uniqueId);\r\n        }\r\n\r\n        return;\r\n    }\r\n\r\n    // Ohne fixierte Spalten\r\n    var headerDiv = $(uniqueId + \"_headerDiv\");\r\n\r\n    if (headerDiv != null) {\r\n        var contentDiv = $(uniqueId + \"_contentDiv\");\r\n        var newValue = (-contentDiv.scrollLeft) + \"px\";\r\n        // Wg. Chrome nur setzen wenn geändert\r\n        if (newValue != headerDiv.style.marginLeft) {\r\n            headerDiv.style.marginLeft = newValue;\r\n        }\r\n    }\r\n\r\n    // Neues Feature SCROLLING_ON_DEMAND (TM) :-)\r\n    var scrollRight = $(uniqueId + \"_contentDivScrollRight\");\r\n    if (scrollRight) {\r\n        var table = $(uniqueId + \"_contentTable\");\r\n        var tableHeight = dwUtilsGetContentHeight(table);\r\n        var childRight = dwDomGetChildAtIndex(scrollRight, 0);\r\n        var contentDiv = $(uniqueId + \"_contentDiv\");\r\n\r\n        childRight.style.height = tableHeight + \"px\";\r\n        scrollRight.scrollTop = contentDiv.scrollTop;\r\n\r\n        var scrollBottom = $(uniqueId + \"_contentDivScrollBottom\");\r\n        var tableWidth = dwUtilsGetContentWidth(table);\r\n        var childBottom = dwDomGetChildAtIndex(scrollBottom, 0);\r\n        childBottom.style.width = tableWidth + \"px\";\r\n\r\n        scrollBottom.scrollLeft = contentDiv.scrollLeft;\r\n    }\r\n}\r\n\r\nfunction dwHelperTableContentResized(uniqueId, autoResize, useFixedColumns) {\r\n    if (autoResize) {\r\n        var headerTable = $(uniqueId + \"_headerTable\");\r\n        if (headerTable) {\r\n            var contentDiv = $(uniqueId + \"_contentDiv\");\r\n            var headerRow = dwDomGetRealRowContainerNode(headerTable).children[0];\r\n            var lastColumn = headerRow.children[headerRow.children.length - 1];\r\n            if (lastColumn) {\r\n                var labelDiv = dwDomFindContainer(lastColumn, \"0|1\", true);\r\n                if (labelDiv) {\r\n                    var columnWidth = dwDomGetDomAttribute(labelDiv, \"columnwidth\");\r\n                    if (!columnWidth) {\r\n                        var width = parseInt(labelDiv.style.width);\r\n                        dwDomSetDomAttribute(labelDiv, \"columnwidth\", width);\r\n                        columnWidth = width;\r\n                    }\r\n                    var newColumnWidth = columnWidth;\r\n                    if (dwUtilsHasVerticalOverflow(contentDiv)) {\r\n                        // Bei einem Resize muss bestimmt werden, ob eine Scrollbar angezeigt wird\r\n                        // Hier ist aber nur die vertikale Scrollbar von belang. In diesem Fall muss der Header ~17px breiter sein\r\n                        newColumnWidth += dwUtilsGetScrollbarWidth(contentDiv);\r\n                    }\r\n                    labelDiv.style.width = newColumnWidth + \"px\";\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    if (useFixedColumns) {\r\n        var table = $(uniqueId);\r\n        if (!table) {\r\n            return;\r\n        }\r\n\r\n        var tableParent = table.parentNode;\r\n        if (tableParent) {\r\n            // Breite der gesamten Tabelle sowie der einzelnen Tabellen für fixierte und scrollbare Spalten bestimmen\r\n            var tableWidth = dwUtilsGetWidth(tableParent);\r\n\r\n            var headerHeight = 0;\r\n            var fixedHeaderTable = $(uniqueId + '_fixedHeaderTable');\r\n            var fixedHeaderTableWidth = 0;\r\n            if (fixedHeaderTable) {\r\n                headerHeight = dwUtilsGetHeight(fixedHeaderTable);\r\n                fixedHeaderTableWidth = dwUtilsGetWidth(fixedHeaderTable) - 1; // fixedHeaderTable ist 1 größer als fixedHeaderDiv\r\n            }\r\n\r\n            var headerTable = $(uniqueId + '_headerTable');\r\n            var headerTableWidth = 0;\r\n            if (headerTable) {\r\n                headerTableWidth = dwUtilsGetWidth(headerTable);\r\n            }\r\n\r\n            var tableContentWidth = fixedHeaderTableWidth + headerTableWidth;\r\n            var scrollbarWidth = parseInt(dwDomGetDomAttribute(tableParent, \"scrollbarWidth\"));\r\n\r\n            // Falls die Scrollbar über den Inhalt geblendet wird (z.B. Firefox), ist die Breite 0 -> 12 Pixel als Default\r\n            // nehmen, da die Paginierungs-Buttons ansonsten vertikal abgeschnitten werden\r\n            if (scrollbarWidth == 0) {\r\n                scrollbarWidth = 12;\r\n            }\r\n\r\n            // Höhe und Sichtbarkeit der horizontalen ScrollBar anpassen\r\n            // -1 ist jeweils notwendig für die korrekte Positionierung wie früher ohne fixierte Spalten\r\n            var horizontalScrollBarHeight = -1;\r\n            var horizontalScrollBar = $(uniqueId + '_horizontalScrollBarDiv');\r\n            if (horizontalScrollBar) {\r\n                horizontalScrollBar.style.height = (scrollbarWidth - 1) + 'px';\r\n                if ((headerTableWidth == 0) || (tableWidth >= tableContentWidth)) {\r\n                    horizontalScrollBar.style.display = 'none';\r\n                } else {\r\n                    horizontalScrollBarHeight = scrollbarWidth - 1;\r\n                    horizontalScrollBar.style.display = 'block';\r\n                }\r\n            }\r\n\r\n            // Verfügbare Höhe für die Tabellen-Inhalte berechnen\r\n            var tableHeight = dwUtilsGetHeight(tableParent);\r\n            var contentHeight = tableHeight - headerHeight - horizontalScrollBarHeight;\r\n\r\n            // BrowseButtons sind nur dann vorhanden, wenn die Tabelle seitenweise dargestellt wird\r\n            var browseButtons = $(uniqueId + '_browseButtons');\r\n            if (browseButtons) {\r\n                contentHeight -= 24; // BrowseButtons sind immer 24px hoch und dwUtilsGetHeight() liefert hier sonst manchmal zu große Werte\r\n            }\r\n\r\n            var fixedContentDiv = $(uniqueId + '_fixedContentDiv');\r\n            if (fixedContentDiv) {\r\n                fixedContentDiv.style.height = contentHeight + 'px';\r\n            }\r\n\r\n            var contentDiv = $(uniqueId + '_contentDiv');\r\n            if (contentDiv) {\r\n                contentDiv.style.height = contentHeight + 'px';\r\n            }\r\n\r\n            var contentTable = $(uniqueId + '_contentTable');\r\n            var tableContentHeight = 0;\r\n            if (contentTable) {\r\n                tableContentHeight = dwUtilsGetHeight(contentTable);\r\n            }\r\n\r\n            // Breite, Höhe und Sichtbarkeit der vertikalen ScrollBar anpassen\r\n            var verticalScrollBarWidth = 0;\r\n            var verticalScrollBar = $(uniqueId + '_verticalScrollBarDiv');\r\n            if (verticalScrollBar) {\r\n                verticalScrollBar.style.top = headerHeight + 'px';\r\n                verticalScrollBar.style.width = (scrollbarWidth - 1) + 'px';\r\n                verticalScrollBar.style.height = contentHeight + 'px';\r\n                if (contentHeight >= tableContentHeight) {\r\n                    verticalScrollBar.style.display = 'none';\r\n                } else {\r\n                    verticalScrollBarWidth = scrollbarWidth - 1;\r\n                    verticalScrollBar.style.display = 'block';\r\n                }\r\n\r\n                var verticalScrollBarContent = $(uniqueId + '_verticalScrollBarContentDiv');\r\n                if (verticalScrollBarContent) {\r\n                    verticalScrollBarContent.style.height = tableContentHeight + 'px';\r\n                }\r\n            }\r\n\r\n            // Breite der horizontalen ScrollBar erst jetzt setzen, weil diese auch davon abhängig ist, ob für den Inhalt\r\n            // eine vertikale ScrollBar benötigt wird\r\n            if (horizontalScrollBar) {\r\n                horizontalScrollBar.style.width = (tableWidth - verticalScrollBarWidth) + 'px';\r\n\r\n                var emptyContentTableDiv = $(uniqueId + '_emptyContentTableDiv');\r\n                if (emptyContentTableDiv) {\r\n                    emptyContentTableDiv.style.width = (tableContentWidth - verticalScrollBarWidth) + 'px';\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * Horizontale Scrollposition von der horizontalen ScrollBar an die scrollbaren Spalten übertragen bei Verwendung von fixierten Spalten.\r\n *\r\n * @param uniqueId\r\n */\r\nfunction dwHelperTableScrollHorizontalWithFixedColumns(uniqueId) {\r\n    var horizontalScrollBarDiv = $(uniqueId + '_horizontalScrollBarDiv');\r\n    if (horizontalScrollBarDiv) {\r\n        var headerDiv = $(uniqueId + '_headerDiv');\r\n        if (headerDiv) {\r\n            headerDiv.scrollLeft = horizontalScrollBarDiv.scrollLeft;\r\n        }\r\n\r\n        var contentDiv = $(uniqueId + '_contentDiv');\r\n        if (contentDiv) {\r\n            contentDiv.scrollLeft = horizontalScrollBarDiv.scrollLeft;\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * Vertikale Scrollposition von der vertikalen ScrollBar an die Tabelle übertragen bei Verwendung von fixierten Spalten.\r\n *\r\n * @param uniqueId\r\n */\r\nfunction dwHelperTableScrollVerticalWithFixedColumns(uniqueId) {\r\n    var verticalScrollBarDiv = $(uniqueId + '_verticalScrollBarDiv');\r\n    if (verticalScrollBarDiv) {\r\n        // Vertikale Scrollposition von den beiden Tabellen-Divs für fixierte und scrollbare Spalten anpassen\r\n        var scrollTop = verticalScrollBarDiv.scrollTop;\r\n        dwHelperTableScrollElementVerticalWithFixedColumns($(uniqueId + '_fixedContentDiv'), scrollTop);\r\n        dwHelperTableScrollElementVerticalWithFixedColumns($(uniqueId + '_contentDiv'), scrollTop);\r\n    }\r\n}\r\n\r\nfunction dwHelperTableScrollElementVerticalWithFixedColumns(element, scrollTop) {\r\n    if (element) {\r\n        // Evtl. bereits vorhandenes Timeout am Element abbrechen\r\n        if (element.onscrollTimeoutHandler) {\r\n            clearTimeout(element.onscrollTimeoutHandler);\r\n            element.onscrollTimeoutHandler = null;\r\n        }\r\n\r\n        // onscroll-Funktion am Element merken und temporär entfernen\r\n        var onscrollFunction = element.onscroll;\r\n        if (onscrollFunction) {\r\n            element.oldOnscrollFunction = onscrollFunction;\r\n            element.onscroll = null;\r\n        }\r\n\r\n        // Jetzt erst das Element scrollen\r\n        element.scrollTop = scrollTop;\r\n\r\n        // Über ein Timeout die onscroll-Funktion wieder am Element setzen\r\n        if (element.oldOnscrollFunction) {\r\n            var onscrollTimeoutHandler = setTimeout(function() {\r\n                element.onscroll = element.oldOnscrollFunction;\r\n                element.oldOnscrollFunction = null;\r\n                element.onscrollTimeoutHandler = null;\r\n            }, 100);\r\n            element.onscrollTimeoutHandler = onscrollTimeoutHandler;\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * Speichere die Scrollposition des Selects mit der übergebenen Id im zugeordneten Inputfeld\r\n * @param uniqueId\r\n */\r\nfunction dwHelperListScrollValueChanged(uniqueId) {\r\n    var scrollTopTextField = $(uniqueId + \"_scrollTop\");\r\n    var list = $(uniqueId);\r\n    scrollTopTextField.value = list.scrollTop;\r\n}\r\n\r\n/**\r\n * Speichere die Cursorposition des übergebenen Textbereichs\r\n * @param textarea\r\n */\r\nfunction dwHelperStoreCaretPosition(textarea) {\r\n    // textarea ist das Textarea-Element\r\n    // Suche das zugeordnete Textfeld für die Cursor-Position\r\n    var textfield = $(textarea.id + \"_Position\");\r\n    var caretPos = 0;\r\n\r\n    if (typeof (textarea.selectionStart) == \"number\") { // Firefox und IE9\r\n        caretPos = textarea.selectionStart;\r\n    } else if (document.selection) { // IE < 9\r\n        var range = document.selection.createRange().duplicate();\r\n        range.moveStart('character', -textarea.value.length);\r\n        caretPos = range.text.length;\r\n    }\r\n    textfield.value = caretPos;\r\n}\r\n\r\n/**\r\n * Setze die Cursorposition des Textbereichs mit der übergebenen Id\r\n * anhand des in einem zugeordneten Textfeld gespeicherten Wertes\r\n * @param textareaId\r\n */\r\nfunction dwHelperSetStoredCaretPosition(textareaId, scrollToCaret) {\r\n    var pos = $(textareaId + \"_Position\").value;\r\n    var textarea = $(textareaId);\r\n    var parentScrollPanes = dwUtilsGetParentScrollPanes(textarea);\r\n    var parentScrollPanePositions = new Array();\r\n    for (var i = 0; i < parentScrollPanes.length; i++) {\r\n        var parentScrollPaneId = parentScrollPanes[i].id;\r\n        if (!dwFrameworkRestoreScrollPositions[parentScrollPaneId]) {\r\n            parentScrollPanePositions.push(new DWPoint(parentScrollPanes[i].scrollLeft, parentScrollPanes[i].scrollTop));\r\n        }\r\n    }\r\n\r\n    if (textarea.createTextRange) { // IE. Caret-Position wird automatisch in den sichtbaren Ausschnitt einer Scrollpane geschoben\r\n        var range = textarea.createTextRange();\r\n        range.collapse(true);\r\n        range.moveEnd('character', pos);\r\n        range.moveStart('character', pos);\r\n        range.select();\r\n    } else if (textarea.setSelectionRange) {\r\n        // Früher wurde hier noch etwas Spezielles gemacht, aber inzwischen benötigt das der Firefox nicht mehr\r\n    } else if (typeof (textarea.selectionStart) == \"number\") {\r\n        textarea.selectionStart = pos;\r\n        textarea.selectionEnd = pos;\r\n    }\r\n    textarea.blur();\r\n\r\n    for (var i = 0; i < parentScrollPanePositions.length; i++) {\r\n        dwFrameworkRestoreScrollPositions[parentScrollPanes[i].id] = parentScrollPanePositions[i];\r\n    }\r\n    if (textarea.createTextRange) {\r\n        dwHelperResetScrollPositions();\r\n        if (scrollToCaret) {\r\n            dwHelperScrollToCaretPositionOfTextarea(textareaId, pos);\r\n        }\r\n    } else {\r\n        setTimeout(function() { // Key-Event löst nachgelagertes Scrolling zur textarea aus. Reset muss nach dem Key-Event bedingten Scrolling ausgeführt werden\r\n            dwHelperResetScrollPositions();\r\n            dwHelperScrollToCaretPositionOfTextarea(textareaId, pos);\r\n        }, 10);\r\n    }\r\n}\r\n\r\nfunction dwHelperResetScrollPositions() {\r\n    for (var id in dwFrameworkRestoreScrollPositions) {\r\n        var parentScrollPane = $(id);\r\n        var parentScrollPanePosition = dwFrameworkRestoreScrollPositions[id];\r\n        if (parentScrollPane\r\n            && ((parentScrollPane.scrollTop != parentScrollPanePosition.y)\r\n                || (parentScrollPane.scrollLeft != parentScrollPanePosition.x))) {\r\n            parentScrollPane.scrollTop = parentScrollPanePosition.y;\r\n            parentScrollPane.scrollLeft = parentScrollPanePosition.x;\r\n        }\r\n        delete dwFrameworkRestoreScrollPositions[id];\r\n    }\r\n}\r\n\r\n/**\r\n * Entfernt das Caret in der Textarea, wenn kein Text selektiert ist\r\n * @param textareaId\r\n */\r\nfunction dwHelperRemoveCaretIfNoSelection(textareaId) {\r\n    var textarea = $(textareaId);\r\n    if (textarea) { // Textarea nicht gefunden (NULL oder undefined)\r\n        setTimeout(function() {\r\n            if (textarea.selectionStart == textarea.selectionEnd) {\r\n                textarea.blur();\r\n            }\r\n        }, 20);\r\n    }\r\n}\r\n\r\n/**\r\n * Positioniert die Scrollpane (die direkt um eine Textarea liegt), so dass die aktuelle\r\n * Caret Position in den Fokus gerückt wird\r\n * @param textareaId\r\n * @param caretPosition\r\n */\r\nfunction dwHelperScrollToCaretPositionOfTextarea(textareaId, caretPosition) {\r\n    var textarea = $(textareaId);\r\n    if (!textarea) { // Textarea nicht gefunden (NULL oder undefined)\r\n        return;\r\n    }\r\n    if ((textarea.parentNode == null) || (textarea.parentNode.className != \"guiscrollpane\")) {\r\n        // Textarea ist nicht in einer Scrollpane eingehängt. Es soll maximal die Parent-Scrollpane verändert werden,\r\n        // nicht die anderen Container die ggf. weitere Elemente beinhalten. Abbruch.\r\n        return;\r\n    }\r\n    var scrollpane = textarea.parentNode;\r\n    var inputScrollTop = $(scrollpane.id + \"_scrollTop\");\r\n    var inputScrollLeft = $(scrollpane.id + \"_scrollLeft\");\r\n\r\n    var fontFamily = textarea.style.fontFamily;\r\n    var fontSize = dwUtilsGetFontSize(textarea);\r\n    var lineHeight = dwUtilsGetLineHeight(textarea);\r\n\r\n    var textUpToCaret = textarea.value.substring(0, caretPosition);\r\n    var lines = dwUtilsSplit(textUpToCaret, \"\\n\", true);\r\n    var textLine = (lines.length > 0) ? lines[lines.length - 1] : \"\";\r\n    var caretPositionX = dwHelperGetSizeForText(textLine, fontFamily, fontSize, lineHeight, \"\\n\").width;\r\n    var caretPositionY = dwHelperGetSizeForText(textUpToCaret, fontFamily, fontSize, lineHeight, \"\\n\").height;\r\n    inputScrollTop.value = caretPositionY;\r\n    inputScrollLeft.value = caretPositionX;\r\n    dwHelperScrollToStoredPosition(scrollpane.id);\r\n}\r\n\r\n/**\r\n * Aktualisiert die eigene Größe (width/height) von Komponenten mit Text-Inhalt (z.B. GuiTextArea)\r\n * @param control\r\n * @param checkLineWrap true, wenn nach attribut lineWrap gesucht und dessen Wert ausgewertet werden soll\r\n *                      false, wenn die Zeilen nicht an der Breite des Parents (z.B. Scrollpane) umgebrochen werden sollen\r\n */\r\nfunction dwHelperUpdateOwnSize(control, checkLineWrap) {\r\n    try {\r\n        if (!control) {\r\n            return;\r\n        }\r\n        var parentControl = control.parentElement;\r\n        if (framework_isIE7 && (parentControl.nodeName.toLowerCase() == \"span\")) {\r\n            parentControl = parentControl.parentElement;\r\n        }\r\n        var scrollbarWidth = dwUtilsGetScrollbarWidth(parentControl);\r\n        var extraLength = (scrollbarWidth > 0) ? scrollbarWidth : 17; // muss ggf. addiert werden, falls Scrollbars notwendig sind\r\n        var lineWrap = \"false\";\r\n        if (checkLineWrap && (control.getAttribute(\"lineWrap\") != null)) {\r\n            lineWrap = control.getAttribute(\"lineWrap\");\r\n        }\r\n        if (lineWrap == \"true\") {\r\n            // FF wendet die 100% minHeight bei der Berechnung der scrollHeight bereits an. Wir benötigen aber den tatsächlich notwendigen\r\n            // Platz für die Auswertung der scrollHeight\r\n            control.style.minHeight = \"0px\";\r\n            var requiresResetMinSizes = true;\r\n            var scrollHeight = control.scrollHeight;\r\n            if (dwUtilsHasElementAtLeastOneOfClasses(parentControl, [\"guiscrollpane\", \"modern_scrollpane_design_thin\"])) {\r\n                if ((!(control.getAttribute(\"noScrollHeightResize\"))) && (scrollHeight > 0) && (scrollHeight + extraLength) > parentControl.offsetHeight) {\r\n                    scrollHeight += extraLength;\r\n                    control.setAttribute(\"noScrollHeightResize\", \"true\");\r\n                }\r\n                if (framework_isIE7) {\r\n                    control.style.width = control.style.minWidth;\r\n                } else {\r\n                    control.style.width = \"100%\";\r\n                }\r\n                if (parentControl.clientWidth) {\r\n                    control.style.height = calculateComponentContentHeight(control, parentControl.clientWidth) + \"px\";\r\n                } else {\r\n                    setTimeout(function() {\r\n                        // Workaround für den Fall, dass der Layouter noch nicht fertig ist. Der eigentliche Aufruf wird etwas\r\n                        // verzögert in die Event Queue geschoben...\r\n                        control.style.height = calculateComponentContentHeight(control, parentControl.clientWidth) + \"px\";\r\n                    }, 50);\r\n                }\r\n            }\r\n            if (requiresResetMinSizes) {\r\n                control.style.minHeight = \"100%\";\r\n                control.style.minWidth = \"100%\";\r\n            }\r\n        } else {\r\n            var textSize = dwHelperGetSizeForTextControl(control);\r\n            var widthToApply = textSize.width;\r\n            var heightToApply = textSize.height;\r\n            if (parentControl.className == \"guiscrollpane\") {\r\n                if ((widthToApply + extraLength) > parentControl.offsetWidth) {\r\n                    widthToApply += extraLength;\r\n                }\r\n                if ((heightToApply + extraLength) > parentControl.offsetHeight &&\r\n                    widthToApply > parentControl.offsetWidth) {\r\n                    //fuegt Scrollbar-Breite hinzu, aber nur wenn ein horizontal Scrollbar gezeigt werden soll\r\n                    heightToApply += extraLength;\r\n                }\r\n            }\r\n            control.style.width = widthToApply + \"px\";\r\n            control.style.height = heightToApply + \"px\";\r\n            control.style.minHeight = parentControl.clientHeight + \"px\";\r\n            control.style.minWidth = parentControl.clientWidth + \"px\";\r\n        }\r\n    } catch (exception) {\r\n        // Funktion der Controls darf nicht eingeschränkt werden ...\r\n    }\r\n}\r\n\r\n/**\r\n * Die Methode wird benutzt um die Höhe von Text in der Komponente zu berechnen.\r\n * Momentan wird sie nur in der \"Textarea\" Komponente mit dem \"lineWrap\" Attribute verwendet.\r\n *\r\n * Das Problem ist, dass die \"dwHelperGetSizeForTextControl\" Methode bei der Berechnung nicht berücksichtigt, dass\r\n * die Zeilen im \"Textarea\" die länger als die erlaubte Breite sind, in die nächste Zeile übertragen werden.\r\n * Das verursacht, dass die Höhe des Textes (zweimal) grösser ist als die Methode berechnet.\r\n *\r\n * In dieser Methode wird jede Zeile (gesplittet an \\n) geprüft. Ist eine Zeile größer als die maximal verfügbare/erlaubte Breite der\r\n * Textarea, wird dies erkannt und ermittelt, auf wie viele Zeilen sich der eingegebene Text erstrecken wird, um diese\r\n * Beschränkungen nicht zu verletzen.\r\n *\r\n * Diese Berechnung fliesst in die Ermittlung der Gesamthöhe der (Textarea) Komponente mit ein.\r\n *\r\n * @param control die Komponente, für die die Gesamthöhe des Textes berechnet wird\r\n * @param maxWidth maximale Breite einer Zeile\r\n * @returns {number} die berechnete Höhe des Textes\r\n */\r\nfunction calculateComponentContentHeight(control, maxWidth) {\r\n    var totalHeight = 0;\r\n    var fontSize = dwUtilsGetFontSize(control);\r\n    var lineHeight = dwUtilsGetLineHeight(control);\r\n    var fontFamily = control.style.fontFamily;\r\n    if (control.value) {\r\n        var lines = control.value.split('\\n');\r\n        for (var i = 0; i < lines.length; i++) {\r\n            var text = dwUtilsReplaceCharacters(lines[i], DWUTILS_XML_ESCAPE_MAP);\r\n            if (text == \"\") {\r\n                //leere Zeile - ein leeres Buchstaben wird hinzugefuegt, damit die Hoehe berechnet werden kann\r\n                text = \" \";\r\n            }\r\n            var size = dwHelperGetSizeForText(text, fontFamily, fontSize, lineHeight, \"\\n\");\r\n            if (size.width > maxWidth) { //die Zeile zu breit\r\n                //wie viele Zeilen werden benötigt, damit die maximale Breite nicht überschreitet wird\r\n                var cellsCount = (Math.ceil(size.width / maxWidth));\r\n                totalHeight = totalHeight + cellsCount * size.height; //berechne die Höhe des Textes\r\n            } else {\r\n                totalHeight = totalHeight + size.height;\r\n            }\r\n        }\r\n    }\r\n    return totalHeight;\r\n}\r\n\r\nfunction dwHelperGetSizeForTextControl(control) {\r\n    var fontSize = dwUtilsGetFontSize(control);\r\n    var lineHeight = dwUtilsGetLineHeight(control);\r\n    var fontFamily = control.style.fontFamily;\r\n    if (control.value) {\r\n        var text = dwUtilsReplaceCharacters(control.value, DWUTILS_XML_ESCAPE_MAP);        // Größenberechnung schlägt fehl, falls < enthalten\r\n        return dwHelperGetSizeForText(text, fontFamily, fontSize, lineHeight, \"\\n\");\r\n    } else {\r\n        // Alternative zum Auslesen des Textes, z.B. eines Span Elements, ...\r\n        var textNodes = dwDomGetChildNodesByType(control, DWUTILS_NODE_TYPE.TEXT);\r\n        var size = {width: 0, height: 0};\r\n        for (var i = 0; i < textNodes.length; i++) {\r\n            var textNode = textNodes[i];\r\n            var text = dwUtilsReplaceCharacters(textNode.data, DWUTILS_XML_ESCAPE_MAP);        // Größenberechnung schlägt fehl, falls < enthalten\r\n            var tempSize = dwHelperGetSizeForText(text, fontFamily, fontSize, lineHeight, \"\\r\"); // \\r ist der Multiline Trenner bei Textareas\r\n            if (tempSize.width > size.width) {\r\n                size.width = tempSize.width;\r\n            }\r\n            if (tempSize.height > size.height) {\r\n                size.height = tempSize.height;\r\n            }\r\n        }\r\n        return size;\r\n    }\r\n}\r\n\r\nfunction dwHelperGetSizeForText(text, fontFamily, fontSize, lineHeight, lineDivider) {\r\n    var container = document.getElementById(\"dwhelpertextcontainer\");\r\n    if (!container) {\r\n        container = document.createElement(\"div\");\r\n        container.style.visibility = \"hidden\";\r\n        container.style.position = \"absolute\";\r\n        container.style.left = \"-10000px\";\r\n        container.style.top = \"-10000px\";\r\n        container.style.whiteSpace = \"pre\"; // Leerzeichen müssen erhalten bleiben ...\r\n        container.id = \"dwhelpertextcontainer\";\r\n        document.getElementById(\"body\").appendChild(container);\r\n    }\r\n    container.style.fontSize = fontSize + \"px\";\r\n    container.style.fontFamily = fontFamily || \"inherit\"; // Font-Family (z.B. Monospace) kann die Darstellung beeinflussen\r\n    container.style.lineHeight = lineHeight + \"px\";\r\n\r\n    var textLines = dwUtilsSplit(text, lineDivider, true);\r\n    var containerText = textLines.join(\"<br>\");\r\n    dwDomSetDomText(container, containerText, false);\r\n    var width = container.offsetWidth;\r\n    var height = container.offsetHeight;\r\n    return {width: width, height: height};\r\n}\r\n\r\nfunction dwHelperShowMenu(event, menuId) {\r\n    event = dwFrameworkGetEvent(event);\r\n    var popup = dwPopup_getPopup(DW_POPUP_TYPE.MENUBAR);\r\n    var menubarentryId = menuId + \"_menu\";\r\n    var menubarentry = $(menubarentryId);\r\n    var menu = $(menuId);\r\n    if (event && (event.type == \"click\")) {\r\n        var currentlyOpenedContextMenuPopupLocal = currentlyOpenedContextMenuPopup;\r\n        if (currentlyOpenedContextMenuPopupLocal) {\r\n            currentlyOpenedContextMenuPopup = null;\r\n            currentlyOpenedContextMenuPopupLocal.close();\r\n        }\r\n        if (popup.isVisible()) {\r\n            popup.close();\r\n            return;\r\n        }\r\n\r\n    }\r\n    if (event && (event.type == \"mouseenter\")) {\r\n        if (!popup.isVisible()) {\r\n            // Popup ist noch ausgeblendet. Keine Reaktion auf Maus Bewegungen ...\r\n            return;\r\n        }\r\n        if (popup.wrapper) {\r\n            popup.closeSubmenus();\r\n        } else {\r\n            popup.close();\r\n        }\r\n    }\r\n\r\n    popup = dwPopup_wrapControl(menu, DW_POPUP_TYPE.MENUBAR, dwHelperRedirectContextMenuEventsToWrapper);\r\n    if (!popup.isVisible()) {\r\n        popup.setInvisiblePosition();\r\n    }\r\n    popup.setReferrer(menubarentry);\r\n    if (!popup.isVisible()) {\r\n        popup.fadeIn();\r\n    }\r\n    if (popup.wrapper) {\r\n        popup.adjustWrapper();\r\n    }\r\n}\r\n\r\nfunction dwHelperSelectMenuItem(event, menuItemId, eventHandlerComponentId) {\r\n    var menu = (menuItemId != eventHandlerComponentId) ? dwPopup_getPopup(DW_POPUP_TYPE.CONTEXTMENU) : dwPopup_getPopup(DW_POPUP_TYPE.MENUBAR);\r\n    menu.selectMenuItem(menuItemId);\r\n    if (event.type == \"click\") {\r\n        dwFrameworkDisableEventBubbling(event);\r\n        if (menu.isMenuItemClickable()) {\r\n            if (typeof (dwAjaxMenuItemOnClick) != \"undefined\") {\r\n                dwAjaxMenuItemOnClick(event, eventHandlerComponentId, menuItemId, \"guiWindowId=\" + $(menuItemId).getAttribute(\"guiWindowId\"), true);\r\n            } else if (typeof (dwSwingFrameworkFireCallbackEvent) != \"undefined\") {\r\n                var actualActivatingControl = document.getElementsByName(\"___ID_actualActivatingControl\")[0].value;\r\n                var activatingControl = document.getElementsByName(\"___ID_activatingControl\")[0].value;\r\n                dwSwingFrameworkFireCallbackEvent(\"menuItemEvent\", menuItemId + \"@DWSUB@\" + actualActivatingControl + \"@DWSUB@\" + activatingControl);\r\n            }\r\n            menu.close();\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * Toggled den Classname zur Anzeige des Toggle-Buttons\r\n * @param control\r\n */\r\nfunction dwHelperToggleButton(control) {\r\n    var classNames = control.className;\r\n    if (classNames.indexOf(\"guitogglebutton_up\") > -1) {\r\n        dwDomRemoveClass(control, \"guitogglebutton_up\");\r\n        dwDomAddClass(control, \"guitogglebutton_down\");\r\n    } else {\r\n        dwDomRemoveClass(control, \"guitogglebutton_down\");\r\n        dwDomAddClass(control, \"guitogglebutton_up\");\r\n    }\r\n}\r\n\r\n/**\r\n * positioniert und zeigt das Kontextmenü zu einer Komponente bei rechtem Mausklick\r\n */\r\nfunction dwHelperShowContextMenu(event, eventHandlerComponentId, elementId, contextMenuId, itemsToDeactivate, activeItems,\r\n                                 guiWindowId) {\r\n    if (!event) {\r\n        event = window.event;\r\n    }\r\n    // Explizites ausblenden ggf. für Safari notwendig... alle normalen Browser kommen ohne diese Zeilen aus\r\n//    var previousContextMenu = dwPopup_getPopup(DW_POPUP_TYPE.CONTEXTMENU);\r\n//    previousContextMenu.setVisible(false);\r\n    // rechte Maustaste? Abfragen für verschiedene Browser, siehe http://de.selfhtml.org/navigation/anzeige/rechte_maustaste.htm\r\n    if ((event.type && event.type == \"contextmenu\") || (event.button && event.button == 2) || (event.which && event.which == 3)) {\r\n        // Wir müssen hier auch ein Click losschicken, damit die Komponente selektiert wird (z.B: Treeknoten), das geht aktuell nur für Ajax\r\n\r\n        var contextMenu = $(contextMenuId);\r\n        if (contextMenu != null) {\r\n            contextMenu.dwParentElement = $(elementId);\r\n            for (var i = 0; i < activeItems.length; i++) {\r\n                var uniqueId = activeItems[i];\r\n                var item = $(uniqueId + \"_menu\");\r\n                if (item == null) {\r\n                    item = $(uniqueId);\r\n                }\r\n                if (item != null) {\r\n                    var onclickHandler = item.getAttribute(\"deactivatedOnclickHandler\");\r\n                    if ((onclickHandler != null) && (onclickHandler != \"\")) {\r\n                        item.setAttribute(\"onclick\", onclickHandler);\r\n                        item.setAttribute(\"deactivatedOnclickHandler\", \"\");\r\n                    }\r\n                    var onmouseoverHandler = item.getAttribute(\"deactivatedOnmouseoverHandler\");\r\n                    if ((onmouseoverHandler != null) && (onmouseoverHandler != \"\")) {\r\n                        item.setAttribute(\"onmouseover\", onmouseoverHandler);\r\n                        item.setAttribute(\"deactivatedOnmouseoverHandler\", \"\");\r\n                    }\r\n                    item.style.color = \"\";\r\n                }\r\n            }\r\n            for (var i = 0; i < itemsToDeactivate.length; i++) {\r\n                var uniqueId = itemsToDeactivate[i];\r\n                var item = $(uniqueId + \"_menu\");\r\n                if (item == null) {\r\n                    item = $(uniqueId);\r\n                }\r\n                if (item != null) {\r\n                    var onclickHandler = item.getAttribute(\"onclick\");\r\n                    var deactivatedOnclickHandler = item.getAttribute(\"deactivatedOnclickHandler\");\r\n                    if ((deactivatedOnclickHandler == null) || (deactivatedOnclickHandler == \"\")) {\r\n                        item.setAttribute(\"onclick\", \"dwFrameworkDisableEventBubbling(event);return false;\");\r\n                        item.setAttribute(\"deactivatedOnclickHandler\", onclickHandler);\r\n                    }\r\n                    var onmouseoverHandler = item.getAttribute(\"onmouseover\");\r\n                    var deactivatedOnmouseoverHandler = item.getAttribute(\"deactivatedOnmouseoverHandler\");\r\n                    if ((deactivatedOnmouseoverHandler == null) || (deactivatedOnmouseoverHandler == \"\")) {\r\n                        item.setAttribute(\"onmouseover\", \"dwFrameworkDisableEventBubbling(event);return false;\");\r\n                        item.setAttribute(\"deactivatedOnmouseoverHandler\", onmouseoverHandler);\r\n                    }\r\n\r\n                    item.style.color = \"#c0c0c0\";\r\n                }\r\n            }\r\n            var eventHandlerComponent = $(eventHandlerComponentId);\r\n            var eventTarget = dwUtilsGetEventTarget(event);\r\n            var actualActivatingControl = dwHelperFindActualActivatingControl(eventHandlerComponent, eventTarget,\r\n                                                                              (eventHandlerComponentId != elementId));\r\n\r\n            if (actualActivatingControl == null) {\r\n                return;\r\n            }\r\n            var id__submit_contextMenuActualActivatingControl;\r\n            if (actualActivatingControl != null) {\r\n                // Ein Element mit ID wurde gefunden und wird als actualActivatingControl gesetzt\r\n                id__submit_contextMenuActualActivatingControl = actualActivatingControl.getAttribute(\"id\");\r\n            } else {\r\n                // Bestimmung des eigentlichen Knotens, auf dem das Event ausgelöst wurde, muss über Koordinaten ausgehend\r\n                // von der eventhandler Komponente ausgegeben werden. Die entsprechende Komponente muss den Navigationspfad\r\n                // danach analysieren und das richtige Element bestimmen können (z.B. Zeile / Spalte / ...)\r\n                id__submit_contextMenuActualActivatingControl = \"|PATH|\" + dwUtilsGetNavigationPath(eventTarget, eventHandlerComponent, DWDOM_NAVIGATION_PATH_DIRECTION.BOTTOM_UP);\r\n            }\r\n            var actualActivatingControlInput = $(guiWindowId + \"___ID_actualActivatingControl\");\r\n            if (!actualActivatingControlInput && (typeof (dwSwingFrameworkCreateHiddenInput) != \"undefined\")) {\r\n                actualActivatingControlInput = dwSwingFrameworkCreateHiddenInput(guiWindowId, \"___ID_actualActivatingControl\");\r\n            }\r\n            actualActivatingControlInput.value = id__submit_contextMenuActualActivatingControl;\r\n            // Wir müssen ein Rechtsklick Event rüberschicken\r\n            if (actualActivatingControl != null && typeof (dwAjaxDefaultOnRightClick) != \"undefined\") {\r\n                dwAjaxDefaultOnRightClick(event, eventHandlerComponentId, id__submit_contextMenuActualActivatingControl, \"\", true);\r\n            }\r\n            var mousePos = dwUtilsGetCurrentMousePositionPerEvent(event);\r\n            // Damit wir nicht über dem Kontextmenü das Browserkontextmenü anzeigen, weil das Kontextmenü selbst\r\n            // keinen contextmenü Eintrag hat. Deshalb zeigen wir es ein bisschen verschoben an\r\n            mousePos.x += 4;\r\n            currentlyOpenedContextMenuPopup = dwPopup_getPopup(DW_POPUP_TYPE.CONTEXTMENU);\r\n            // Wir müssen hier außerhalb dieses Abarbeitungsthreads gehen, weil er nur dann die richtige Größe für\r\n            // das Teil hat. Wenn man setTimeout auskommentiert, dann wird das Control zu weit unten angezeigt, wenn\r\n            // man in der Stücklistentabelle am unteren Fensterrand rechts klickt\r\n            if (!currentlyOpenedContextMenuPopup.isHeavyWeight() || (typeof (dwSwingFrameworkCreateHiddenInput) != \"undefined\")) {\r\n                // Heavy Weight Controls werden durch expliziten Aufruf von dwHelperShowHeavyWeightContextMenu\r\n                // nach der Aktualisierung angezeigt\r\n                setTimeout(function() {\r\n                    dwHelperInternalWrapAndShowContextMenu(contextMenu, mousePos);\r\n                }, 100);\r\n            }\r\n            var activatingControl = $(guiWindowId + \"___ID_activatingControl\");\r\n            if (!activatingControl && (typeof (dwSwingFrameworkCreateHiddenInput) != \"undefined\")) {\r\n                activatingControl = dwSwingFrameworkCreateHiddenInput(guiWindowId, \"___ID_activatingControl\");\r\n            }\r\n            activatingControl.value = elementId;\r\n        }\r\n    }\r\n}\r\n\r\nfunction dwHelperShowHeavyWeightContextMenu(contextMenuId, position) {\r\n    if (currentlyOpenedContextMenuPopup && currentlyOpenedContextMenuPopup.isHeavyWeight()) {\r\n        var contextMenu = $(contextMenuId);\r\n        dwHelperInternalWrapAndShowContextMenu(contextMenu, position);\r\n    }\r\n}\r\n\r\nfunction dwHelperInternalWrapAndShowContextMenu(contextMenu, mousePos) {\r\n    var popup = dwPopup_wrapControl(contextMenu, DW_POPUP_TYPE.CONTEXTMENU, dwHelperRedirectContextMenuEventsToWrapper);\r\n    popup.setInvisiblePosition();\r\n    popup.fadeIn();\r\n    popup.adjustWrapper();\r\n    popup.setPosition(mousePos);\r\n}\r\n\r\n/**\r\n * Wrapper Funktion für Combobox Events innerhalb eines IFrames. Verwendet bei Heavy-Weight Popups.\r\n * Events die im Wrapper ausgelöst werden, werden zum noch im Haupt-Fenster eingebundenen Popup-Objekt weitergeleitet\r\n * Bei mouseover/mouseout (Hover) wird 'this' umgesetzt auf die Objekte im Wrapper\r\n * @param popup\r\n * @param control\r\n */\r\nfunction dwHelperRedirectComboboxPopupEventsToWrapper(popup, control) {\r\n    var rows = control.children;\r\n    var originalRows = $(control.id).children;\r\n    for (var i = 0; i < rows.length; i++) {\r\n        // Closure notwendig zur Kapselung der Variable 'i' in der internen Funktion\r\n        // Ansonsten würde die redirect-Methode immer auf dem gleichen row Element (dem letzten) aufgerufen werden\r\n        (function(i) {\r\n            var row = rows[i];\r\n            var rowInParentDoc = originalRows[i];\r\n            if (row.onclick) {\r\n                row.onclick = function(event) {\r\n                    event = dwFrameworkGetEvent(event);\r\n                    var thisContext = (row.tagName.toLowerCase() == \"input\") ? row : rowInParentDoc;\r\n                    dwPopup_redirectEvent(event, rowInParentDoc, thisContext);\r\n                };\r\n            }\r\n            if (row.onchange) {\r\n                row.onchange = function(event) {\r\n                    event = dwFrameworkGetEvent(event);\r\n                    dwPopup_redirectEvent(event, rowInParentDoc, rowInParentDoc);\r\n                    // Checked Flag wird explizit in das HTML Fragment im Hauptfenster geschrieben\r\n                    if (row.checked) {\r\n                        rowInParentDoc.setAttribute(\"checked\", \"checked\");\r\n                    } else {\r\n                        rowInParentDoc.removeAttribute(\"checked\");\r\n                    }\r\n                };\r\n            }\r\n            var rowHoverRedirect = function(event) {\r\n                event = dwFrameworkGetEvent(event);\r\n                dwPopup_redirectEvent(event, rowInParentDoc, row);\r\n            };\r\n            if (row.onmouseover) {\r\n                row.onmouseover = rowHoverRedirect;\r\n            }\r\n            if (row.onmouseout) {\r\n                row.onmouseout = rowHoverRedirect;\r\n            }\r\n        })(i);\r\n    }\r\n    if (framework_isIE8 || framework_isIELegacyMode) {\r\n        // Im Internet Explorer 8 werden Event Informationen nicht als Parameter übergeben - es gibt nur ein globales Event\r\n        // Objekt im window Scope. Das aktuelle Event wird ausgewertet und für spätere Zugriffe auf das Event Objekt als dw_event im Window abgelegt\r\n        // In der getEvent Methode kann dieses Objekt ausgelesen werden\r\n        window.dw_event = dwFrameworkGetEvent(event);\r\n    }\r\n}\r\n\r\n/**\r\n * Wrapper Funktion für Contextmenu Events innerhalb eines IFrames. Verwendet bei Heavy-Weight Popups.\r\n * Events die im Wrapper ausgelöst werden, werden zum noch im Haupt-Fenster eingebundenen Contextmenu-Objekt weitergeleitet\r\n * Bei mouseover/mouseout (Hover) wird 'this' umgesetzt auf die Objekte im Wrapper\r\n * @param popup\r\n * @param control\r\n */\r\nfunction dwHelperRedirectContextMenuEventsToWrapper(popup, control) {\r\n    var rows = control.getElementsByTagName(\"tr\");\r\n    for (var i = 0; i < rows.length; i++) {\r\n        (function(i) {\r\n            var row = rows[i];\r\n            if (row.id) {\r\n                var rowInParentDoc = document.getElementById(row.id);\r\n                // Prüfung des Knotens (existiert Eventlistener) im Hauptdokument aufgrund IE8 Einschränkungen (im IFrame ist der Knoten ggf. ohne Event-Listener)\r\n                if (rowInParentDoc.onclick) {\r\n                    row.onclick = function(event) {\r\n                        if (framework_isIE8 && popup.wrapper) {\r\n                            // Im Internet Explorer 8 werden Event Informationen nicht als Parameter übergeben - es gibt nur ein globales Event\r\n                            // Objekt im window Scope. In unserem Einsatzfall wird das Event im iframe ausgelöst, und an eine Komponente\r\n                            // im parent (window) weitergeleitet. In diesem parent window existiert allerdings noch kein Event Objekt\r\n                            // -> Event wird explizit an den Parent übergeben. In der getEvent Methode kann dieses Objekt ausgelesen werden\r\n                            event = popup.wrapper.contentWindow.event;\r\n                            popup.wrapper.contentWindow.parent.dw_event = event;\r\n                        }\r\n                        dwPopup_redirectEvent(event, rowInParentDoc, rowInParentDoc);\r\n                    };\r\n                }\r\n                var rowHoverRedirect = function(event) {\r\n                    if (framework_isIE8 && popup.wrapper) {\r\n                        // Im Internet Explorer 8 werden Event Informationen nicht als Parameter übergeben - es gibt nur ein globales Event\r\n                        // Objekt im window Scope. In unserem Einsatzfall wird das Event im iframe ausgelöst, und an eine Komponente\r\n                        // im parent (window) weitergeleitet. In diesem parent window existiert allerdings noch kein Event Objekt\r\n                        // -> Event wird explizit an den Parent übergeben. In der getEvent Methode kann dieses Objekt ausgelesen werden\r\n                        event = popup.wrapper.contentWindow.event;\r\n                        popup.wrapper.contentWindow.parent.dw_event = event;\r\n                    }\r\n                    dwPopup_redirectEvent(event, rowInParentDoc, row);\r\n                };\r\n                if (rowInParentDoc.onmouseenter) {\r\n                    row.onmouseenter = rowHoverRedirect;\r\n                }\r\n                if (rowInParentDoc.onmouseleave) {\r\n                    row.onmouseleave = rowHoverRedirect;\r\n                }\r\n            }\r\n        })(i);\r\n    }\r\n    if (framework_isIE8) {\r\n        // Im Internet Explorer 8 werden Event Informationen nicht als Parameter übergeben - es gibt nur ein globales Event\r\n        // Objekt im window Scope. In unserem Einsatzfall wird das Event im iframe ausgelöst, und an eine Komponente\r\n        // im parent (window) weitergeleitet. In diesem parent window existiert allerdings noch kein Event Objekt\r\n        // -> Event wird explizit an den Parent übergeben. In der getEvent Methode kann dieses Objekt ausgelesen werden\r\n        window.dw_event = dwFrameworkGetEvent(event);\r\n    }\r\n}\r\n\r\n/**\r\n * Navigiert von Node zu topMost und liefert den ersten Knoten zurück, der ein ID Attribut hat\r\n *\r\n * Bei Komponenten, die nicht im Komponentenbaum zugreifbar sind (z.B. Tabelle / Tree) darf der topMost Knoten\r\n * bei der Ermittlung der ID nicht berücksichtigt werden (forbidTopMost).\r\n * Kann keine ID gefunden werden, wird NULL zurückgeliefert. Die Bestimmung des Objektes muss dann auf andere Weise erfolgen\r\n * (z.B. Koordinaten)\r\n * @param topMost\r\n * @param node\r\n * @param forbidTopMost\r\n */\r\nfunction dwHelperFindActualActivatingControl(topMost, node, forbidTopMost) {\r\n    do {\r\n        // 1. Abbruchkriterium: Wenn ich beim obersten angekommen bin, dann ist Schluss\r\n        if (topMost == node) {\r\n            if (forbidTopMost) {\r\n                return null; // z.B. im GuiTable NICHT in die Tabelle geklickt\r\n            } else {\r\n                return topMost;\r\n            }\r\n        }\r\n\r\n        if ((node.nodeName.toLowerCase() == \"td\") && (node.childNodes.length == 1)) {\r\n            // Die ersten drei Verschachtelten anschauen\r\n            var childNode = node.childNodes[0];\r\n            for (var i = 0; i < 3; i++) {\r\n                if (dwDomHasAttribute(childNode, \"id\")) {\r\n                    return childNode;\r\n                }\r\n                if (childNode.childNodes.length == 1) {\r\n                    childNode = childNode.childNodes[0];\r\n                } else {\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n        if ((dwDomHasAttribute(node, \"id\")) && (node.getAttribute(\"id\").indexOf(\"_\") == -1)) {\r\n            return node;\r\n        }\r\n    } while (node = node.parentNode);\r\n\r\n    return null;\r\n}\r\n\r\nfunction dwHelperRotateMarquee(uniqueId, startId) {\r\n    var mainElement = $(uniqueId);\r\n    if (!mainElement) {\r\n        // Gibts nicht mehr\r\n        return;\r\n    }\r\n    if (mainElement.marqueeposition < 0) {\r\n        // Wurde händisch gestoppt\r\n        return;\r\n    }\r\n    if (mainElement.marqueeStartId && (mainElement.marqueeStartId != startId)) {\r\n        // Der Marquee wurde schon wieder neu gestartet. Ich laufe jetzt nicht mehr weiter (dafür gibts einen anderen Thread der jetzt läuft)\r\n        return;\r\n    }\r\n\r\n    var foregroundElement = $(uniqueId + \"_foreground\");\r\n    var mainWidth = dwUtilsGetWidth(mainElement);\r\n    var mainContentWidth = dwUtilsGetContentWidth(mainElement);\r\n    var mainOffsets = mainWidth - mainContentWidth;\r\n    var foregroundWidth = dwUtilsGetWidth(foregroundElement);\r\n    var position = mainElement.marqueeposition;\r\n    var direction = mainElement.marqueedirection;\r\n    // Variante für Marquee von links nach rechts, nach link, nach rechts usw. ist mal aktiviert (analog Swing Default)\r\n    if (true) {\r\n        if (direction == 'e') {\r\n            position++;\r\n            if (position > mainWidth - mainOffsets - foregroundWidth) {\r\n                direction = 'w';\r\n                position--;\r\n            }\r\n        } else {\r\n            position--;\r\n            if (position < 0) {\r\n                direction = 'e';\r\n                position++;\r\n            }\r\n        }\r\n    } else {\r\n        // Wenn wir rechts anstossen, dann fangen wir links wieder an\r\n        position++;\r\n        if (position > mainWidth - mainOffsets - foregroundWidth) {\r\n            position = 0;\r\n        }\r\n    }\r\n\r\n    mainElement.marqueeposition = position;\r\n    mainElement.marqueedirection = direction;\r\n    foregroundElement.style.left = position + \"px\";\r\n\r\n    setTimeout(\"dwHelperRotateMarquee('\" + uniqueId + \"', '\" + startId + \"')\", mainElement.intervalMs);\r\n}\r\n\r\nfunction dwHelperStartMarquee(uniqueId, intervalMs) {\r\n    var mainElement = $(uniqueId);\r\n    if (!mainElement) {\r\n        // Gibts nicht mehr\r\n        return;\r\n    }\r\n    dwHelperStopMarquee(uniqueId);\r\n    mainElement.marqueeStartId = new Date().getTime() + '_' + Math.random();\r\n    mainElement.marqueedirection = 'r';\r\n    mainElement.marqueeposition = 0;\r\n    mainElement.intervalMs = intervalMs;\r\n    dwHelperRotateMarquee(uniqueId, mainElement.marqueeStartId);\r\n}\r\n\r\nfunction dwHelperStopMarquee(uniqueId) {\r\n    var mainElement = $(uniqueId);\r\n    if (!mainElement) {\r\n        // Gibts nicht mehr\r\n        return;\r\n    }\r\n\r\n    // Marquee händisch stoppen\r\n    mainElement.marqueeposition = -1;\r\n}\r\n\r\nfunction dwHelperCloseCurrentlyOpenedMenubarEntry(event) {\r\n    if ((event.type == \"mousemove\") || (event.type == \"mouseover\") || (event.type == \"mouseout\") || (event.type == \"mouseenter\") || (event.type == \"mouseleave\") || event.type == \"keyup\") {\r\n        // Event Typen, bei denen das Kontext-Menü nicht geschlossen werden darf ...\r\n        return;\r\n    }\r\n\r\n    var popup = dwPopup_getPopup(DW_POPUP_TYPE.MENUBAR);\r\n    if (!popup) {\r\n        return;\r\n    }\r\n    var eventTarget = dwUtilsGetEventTarget(event);\r\n    if (popup.containsNode(eventTarget) || popup.referrerContainsNode(eventTarget)) {\r\n        return;\r\n    }\r\n    popup.close();\r\n}\r\n\r\nfunction dwHelperCloseCurrentlyOpenedContextMenu(event) {\r\n    var currentlyOpenedContextMenuPopupLocal = currentlyOpenedContextMenuPopup;\r\n    if (currentlyOpenedContextMenuPopupLocal != null) {\r\n        if (dwAjaxCurrentlySending) {\r\n            // Wir zeigen es an, weil der Server es gewünscht hat. Passieren noch weitere Sachen (z.B. im IParts\r\n            // irgendwelche Scrolls, weil man ein Bild aktualisiert (obwohl man in demselben Knoten ist)), dann\r\n            // dürfen wir es nicht schließen\r\n            return;\r\n        }\r\n        var currentlyOpenedContextMenu = currentlyOpenedContextMenuPopupLocal.getControlForContent();\r\n        // bei Safari bzw. generell auch MacOS kommt nach Öffnen des Kontextmenüs (z.B. in der Stückliste) noch ein mouseup,\r\n        // welches das KM wieder schließt\r\n        var nativeMobileOSOrMacMouseUp = (framework_isSafari || framework_isAndroid || framework_isMacOS) && (event.type == \"mouseup\");\r\n        if ((event.type == \"mousemove\") || (event.type == \"mouseover\") || (event.type == \"mouseout\")\r\n            || (event.type == \"mouseenter\") || (event.type == \"mouseleave\") || nativeMobileOSOrMacMouseUp) {\r\n            // Event Typen, bei denen das Kontext-Menü nicht geschlossen werden darf ...\r\n            return;\r\n        }\r\n        var evtTarget = dwUtilsGetEventTarget(event);\r\n\r\n        // Scroll-Events ignorieren, die nicht auf einem (Groß-)Vater-Element oder Kind-Element des aktiven Kontext-Menüs stattgefunden haben\r\n        if ((event.type == \"scroll\") && (currentlyOpenedContextMenu == null)) {\r\n            return; // ... dieses Problem wird einfach geschluckt ... warum auch immer ab und an unnötige Scroll Befehle kommen\r\n        }\r\n\r\n        if (((currentlyOpenedContextMenu == null) || (currentlyOpenedContextMenu.style == null)) && !framework_isDevelopment) {\r\n            return; //... dieses Problem wird einfach geschluckt in einer gebauten Version\r\n        }\r\n\r\n        // Ist das Popup-Menü überhaupt noch sichtbar?\r\n        if ((currentlyOpenedContextMenu.style.display == \"none\") || (dwDomGetIndexOfElementEntry(currentlyOpenedContextMenu) == -1)) {\r\n            currentlyOpenedContextMenuPopup = null;\r\n            currentlyOpenedContextMenuPopupLocal.close();\r\n            return;\r\n        }\r\n\r\n        if (currentlyOpenedContextMenuPopupLocal.containsNode(evtTarget, true)) {\r\n            // Methode wird nach jeder Event-Behandlung (post-Event) eingebunden\r\n            // Elemente die z.B. bei einem Click zunächst den Fokus bekommen, dürfen nicht\r\n            // automatisch das Context-Menu schliessen, wenn das fokussierte ELement im Menu liegt\r\n            // Um das Kontext-Menu gezielt zu schliessen kann von diesen Elementen die Methode\r\n            // dwHelperHideMenu im onclick gerufen werden\r\n            return;\r\n        }\r\n\r\n        if ((event.type == \"scroll\") && (currentlyOpenedContextMenu != null) && (currentlyOpenedContextMenu.dwParentElement != null)\r\n            && (dwUtilsGetNavigationPath(currentlyOpenedContextMenu.dwParentElement, evtTarget, DWDOM_NAVIGATION_PATH_DIRECTION.TOP_DOWN) == null)\r\n            && (dwUtilsGetNavigationPath(evtTarget, currentlyOpenedContextMenu.dwParentElement, DWDOM_NAVIGATION_PATH_DIRECTION.TOP_DOWN) == null)) {\r\n            return;\r\n        }\r\n\r\n        if (event.type == \"resize\") {\r\n            if (!dwFrameworkDisplayResized()) {\r\n                // Nur reagieren, wenn sich die Fenster-Größe tatsächlich geändert hat...\r\n                return;\r\n            }\r\n            if (evtTarget && evtTarget.tagName && (!(evtTarget.tagName.toLowerCase() == \"body\"))) {\r\n                // Nur reagieren, wenn der Auslöser der Body / das Window Objekt waren\r\n                // In der Stückliste kann ein Resize Event z.B. durch die Scrollpane ausgelöst werden (Anzeige Sub-Menu)\r\n                return;\r\n            }\r\n        }\r\n        currentlyOpenedContextMenuPopup = null;\r\n        currentlyOpenedContextMenuPopupLocal.close();\r\n    }\r\n}\r\n\r\n// Vergleichsfunktion. Sucht nach DOM Nodes mit dem ontooltip Attribut. Ist der ontooltip auf einer Kind-Komponente gesetzt\r\n// sind alle notwendigen Informationen bereits in diesem ontooltip Befehl angegeben (z.B. aktuelle ID / Zelle bei einem Server-Tooltip)\r\nfunction dwHelperTableTooltipComparatorFunction(table, node) {\r\n    if (node && (node.tagName != null) && (node.className != null) && (node.tagName.toLowerCase() == \"td\")) {\r\n        if (node.className.indexOf(\"guitable_content\") > -1) {\r\n            var columnIndex = dwDomGetIndexOfNodeEntry(node);\r\n            if ((columnIndex >= 0) && node.parentNode) {\r\n                var rowIndex = dwDomGetIndexOfNodeEntry(node.parentNode);\r\n                table.currentTooltipCell = new DWPoint(columnIndex, rowIndex);\r\n            } else {\r\n                table.currentTooltipCell = new DWPoint(-1, -1);\r\n            }\r\n        } else if (node.className.indexOf(\"guitable_header\") > -1) {\r\n            var columnIndex = dwDomGetIndexOfNodeEntry(node);\r\n            table.currentTooltipHeaderColumn = columnIndex;\r\n        }\r\n    }\r\n    return (node && dwDomHasAttribute(node, \"ontooltip\"));\r\n}\r\n\r\n/**\r\n * Steuerung der Tooltip Anzeige auf Tabellen Komponenten (und deren Kinder)\r\n * Für die Steuerung werden auf der Tabelle Hilfs-Objekte angelegt\r\n * - lastTooltipCell: Zelle in der der letzte Tooltip dargestellt wurde\r\n * - lastTooltipNode: DOM Element auf dem der letzte Tooltip registriert war (z.B. Table für Event-Listener auf der Tabelle)\r\n *\r\n * Temporär werden die Attribute \"currentTooltipCell bzw. currentTooltipHeaderColumn geschrieben zur Bestimmung, ob die\r\n * Mouse sich noch innerhalb der Tabellen-Bereiche befindet, in denen Tooltips gezeichnet werden könnnen.\r\n * @param event\r\n * @param tableId\r\n */\r\nfunction dwHelperHandleTooltipOnTable(event, tableId) {\r\n    // Im IE8 kommen bereits Events, obwohl er noch die Seite aufbaut\r\n    if (!dwFrameworkInitFinished) {\r\n        return;\r\n    }\r\n    if (currentlyOpenedContextMenuPopup != null) {\r\n        return; // Aktuell wird ein Contextmenu angezeigt. In diesem Fall soll kein Tooltip dargestellt werden\r\n    }\r\n    var table = $(tableId);\r\n    if (!table) {\r\n        // Bereits entfernt ...\r\n        return;\r\n    }\r\n    // Das könnte man machen, um nicht jedes Mal synchron den ganzen Table Dom zu durchsuchen\r\n    //var now = new Date().getTime();\r\n    //if (typeof(table.dwFrameworkLastTooltipCheckMs) != \"undefined\") {\r\n    //    var diff = now-table.dwFrameworkLastTooltipCheckMs;\r\n    //    if (diff < 100) {\r\n    //        return;\r\n    //    }\r\n    //}\r\n    //table.dwFrameworkLastTooltipCheckMs = now;\r\n\r\n    var evtTarget = dwUtilsGetEventTarget(event);\r\n\r\n    // Temporäre Informationen zur gefundenen Zelle / Überschriften Spalte werden automatisch bereinigt\r\n    // damit Änderungen explizit festgestellt werden können\r\n    dwHelperResetTemporaryTableTooltipMarker(table);\r\n\r\n    var matches = dwUtilsFindMatchingNodes(table, evtTarget, dwHelperTableTooltipComparatorFunction, true);\r\n    if (matches.length >= 1) {\r\n        if (!dwTooltip_isTooltipVisible() && !table.hasTooltipToken) {\r\n            // Die Positionierung des Tooltips (insbesondere am rechten/unteren Rand) ist abhängig von der Tooltip-Größe\r\n            // Ein Tooltip darf nicht sofort eingeblendet werden, wenn der Inhalt noch unbekannt ist (z.B. Anfrage vom Server)\r\n            // Wir setzen in diesem Fall das 'hasTooltipToken' Flag - damit nach dem Delay die Anfrage an den Server abgesetzt werden kann\r\n            table.lastTooltipNode = null;\r\n            table.lastTooltipCell = null;\r\n            var timer = table.timer;\r\n            if (timer) {\r\n                clearTimeout(timer);\r\n            }\r\n            if (!dwHelperIsCursorIntersectingTableTooltipArea(table)) {\r\n                return;\r\n            }\r\n            var eventForRecall = event;\r\n            if ((typeof (framework_isJ2EEBrowser) != \"undefined\") && (framework_isIE8 || framework_isIELegacyMode)) {\r\n                eventForRecall = dwUtilsCloneObject(event);\r\n            }\r\n            table.timer = setTimeout(function() {\r\n                dwTooltip_createTooltip(-1, -1);\r\n                table.hasTooltipToken = \"true\";\r\n                dwHelperHandleTooltipOnTable(eventForRecall, tableId);\r\n            }, DWTOOLTIP_DELAY_DEFAULT_VALUE);\r\n            return;\r\n        }\r\n        table.timer = null;\r\n        table.hasTooltipToken = null;\r\n        var tooltipNode = matches[0];\r\n        var currentTooltipCell = table.currentTooltipCell || new DWPoint(-1, -1);\r\n        if (dwHelperHasTooltipOnTableChanged(table, tooltipNode, currentTooltipCell)) {\r\n            // In der Methode moveTooltip wird die Cursor Position nur neu gesetzt, wenn der Tooltip bereits sichtbar ist\r\n            // Bereits vor dem Einblenden muss die aktuelle Position bekannt werden, damit Flackern vermieden werden kann (Veränderung der Scroll-Bereiche)\r\n            // Bei Tooltip-Listenern wird der Tooltip erst eingeblendet, wenn der Text aktualisiert wird - hier steht kein Event\r\n            // zur Verfügung -> neue Cursor Position wird hier bereits explizit gesetzt\r\n            dwTooltip_lastMousePointer = dwUtilsGetCurrentMousePositionPerEvent(event);\r\n            if (dwHelperIsTableTooltipNodeRequestingDataFromServer(table, tooltipNode)) {\r\n                var eventParameter = \"__POINT_cellPosition=\" + currentTooltipCell.x + \":\" + currentTooltipCell.y;\r\n                // ActualActivatingControl darf nur übertragen werden, wenn der Listener auf einer Kind-Komponente registriert ist\r\n//                if (tooltipNode.id) {\r\n//                    eventParameter += \"@DWSUB@__ID_actualActivatingControl=\" + tooltipNode.id;\r\n//                }\r\n                // Aktuelle Anzahl an laufenden Server-Requests abfragen. Bei erster Abfrage noch nicht gesetzt -> 0 setzen\r\n                var currentServerRequestCount = dwDomGetDomAttribute(table, \"serverRequestCount\") || 0;\r\n                currentServerRequestCount++;\r\n                dwDomSetDomAttribute(table, \"serverRequestCount\", currentServerRequestCount);\r\n                if (currentServerRequestCount > 1) {\r\n                    // Schnelle Mausbewegungen. Flackern / Anzeige veralteter Tooltips soll vermieden werden\r\n                    // Tooltip wird ausgeblendet und erst wenn die Maus still ist wieder neu eingeblendet\r\n                    // Flackern war insbesondere bei IE und größeren Tabellen ein Problem\r\n                    dwTooltip_hideTooltips();\r\n\r\n                }\r\n                dwAjaxDefaultTooltipShow(event, tableId, tableId, eventParameter, true);\r\n            } else {\r\n                var tooltipCommand = dwDomGetDomAttribute(tooltipNode, \"ontooltip\");\r\n                // Tooltip soll nun wirklich angezeigt werden. Den temporär gespeicherten Befehl für die Anzeige emulieren wir\r\n                // als wäre er direkt aus einem Eventlistener heraus aufgerufen und reichen das (ggf. geklonte) Event Objekt weiter\r\n                // das ggf. im Tooltip Befehl benötigt wird\r\n                var func = function(event) {\r\n                    eval(tooltipCommand);\r\n                };\r\n                func(event);\r\n                // Nicht zwingend notwendig, aber wir räumen die Funktion auf um die Referenz explizit freizugeben\r\n                func = null;\r\n                if (!dwTooltip_isTooltipVisible()) {\r\n                    dwTooltip_fadeInTooltip();\r\n                }\r\n            }\r\n            table.lastTooltipNode = tooltipNode;\r\n            table.lastTooltipCell = currentTooltipCell;\r\n        }\r\n        dwTooltip_moveTooltip(event);\r\n        table.lastTooltipTarget = evtTarget;\r\n    }\r\n}\r\n\r\nfunction dwHelperIsCursorIntersectingTableTooltipArea(table) {\r\n    return (table.currentTooltipCell || (typeof table.currentTooltipHeaderColumn != \"undefined\"));\r\n}\r\n\r\nfunction dwHelperIsTableTooltipNodeRequestingDataFromServer(table, tooltipNode) {\r\n    return (tooltipNode == table) && (table.hasAttribute(\"requestFromServer\")) && (dwDomGetDomAttribute(table, \"requestFromServer\") == \"true\");\r\n}\r\n\r\nfunction dwHelperResetTemporaryTableTooltipMarker(table) {\r\n    table.currentTooltipCell = null;\r\n    table.currentTooltipHeaderColumn = null;\r\n}\r\n\r\n/**\r\n * Server bestätigt die Bearbeitung der Anfrage.\r\n * Server muss diese Methode auch aufrufen, wenn der Tooltip ausgeblendet werden muss (kein Tooltip mehr bestimmbar)\r\n * @param tableId\r\n * @return {*}\r\n */\r\nfunction dwHelperHandleTooltipOnTableUpdateServerResponseReceived(tableId) {\r\n    var table = $(tableId);\r\n    if (!table) {\r\n        return 0; // bereits entfernt ...\r\n    }\r\n    var currentServerRequestCount = dwDomGetDomAttribute(table, \"serverRequestCount\"); // Wert muss gesetzt sein ( > 0)\r\n    currentServerRequestCount--;\r\n    dwDomSetDomAttribute(table, \"serverRequestCount\", currentServerRequestCount);\r\n    return currentServerRequestCount;\r\n}\r\n\r\nfunction dwHelperHasTooltipOnTableChanged(table, currentNode, currentCell) {\r\n    if (!table) {\r\n        return true;\r\n    }\r\n    var lastTooltipCell = table.lastTooltipCell;\r\n    var lastTooltipNode = table.lastTooltipNode;\r\n    return ((lastTooltipNode != currentNode) || (lastTooltipCell.toString() != currentCell.toString()))\r\n}\r\n\r\nfunction dwHelperHandleTooltipOnTableUpdate(text, width, height, tableId, tooltipControlId) {\r\n    var table = $(tableId);\r\n    if (!table) {\r\n        return; // bereits entfernt ...\r\n    }\r\n    // Control bestimmen, auf dem Tooltip gezeichnet wird (entweder Tabelle oder Kind Komponente (AbstractGuiContorl) der Tabelle)\r\n    // Entspricht dem 'currentTarget' - dem Control auf dem ontooltip registriert ist\r\n    var tooltipControl = $(tooltipControlId);\r\n    if (!tooltipControl) {\r\n        return; // bereits entfernt ...\r\n    }\r\n    // Abgleich, ob die Komponente, die den Tooltip angefordert hat, noch immer die aktive ist (oder ein anderer Tooltip angezeigt wird)\r\n    if (tooltipControl != table.lastTooltipNode) {\r\n        return;\r\n    }\r\n\r\n    if (dwDomGetDomAttribute(table, \"serverRequestCount\") > 0) {\r\n        return;\r\n    }\r\n    dwTooltip_updateTooltip(text, width, height);\r\n    if (!dwTooltip_isTooltipVisible()) { // Aktuell noch unsichtbar. Erste Anzeige eines Tooltips auf der Tabelle. Delay ist bereits abgewartet\r\n        dwTooltip_fadeInTooltip();\r\n    }\r\n}\r\n\r\nfunction dwHelperHandleTooltipOnTableLeave(event, tableId) {\r\n    if (!dwFrameworkInitFinished) {\r\n        return;\r\n    }\r\n    var table = $(tableId);\r\n    if (!table) {\r\n        return;\r\n    }\r\n    if (table.timer) {\r\n        clearTimeout(table.timer);\r\n    }\r\n    if (!dwTooltip_isTooltipVisible()) {\r\n        return;\r\n    }\r\n    var happenedEventElement = dwUtilsGetMouseOutEventTarget(event);\r\n    // Ist das Ziel der Mouse-Out Bewegung der Tooltip? Tooltip nicht ausblenden\r\n    var isTooltip = (dwUtilsFindMatchingNodes($(\"tooltipspan\"), happenedEventElement, function(rootNode, node) {\r\n        return node == $(\"tooltipspan\")\r\n    }, true).length == 1);\r\n    if (isTooltip) {\r\n        return;\r\n    }\r\n    var match = dwUtilsFindMatchingNodes(table, happenedEventElement, function(rootNode, node) {\r\n        return node == table;\r\n    }, true);\r\n    if (match.length == 0) {\r\n        dwTooltip_hideTooltips();\r\n        table.hasTooltipToken = null;\r\n        table.lastTooltipNode = null;\r\n        table.lastTooltipCell = null;\r\n        table.lastTooltipTarget = null;\r\n    }\r\n}\r\n\r\n/**\r\n * Blendet die sichtbaren Tooltips nach neuen Events automatisch aus\r\n * Verhindert, dass der Tooltip bei Ajax Events (Anzeige neuer Inhalte eines Panels) erhalten bleibt\r\n * @param event\r\n */\r\nfunction dwHelperHideCurrentlyVisibleTooltips(event) {\r\n    // focus wird geworfen wenn ein Element den Fokus bekommt, scroll wird geworfen, wenn ein Element gescrollt wird\r\n    // mouseout Event wird bereits explizit bei mouseout der Tooltip Komponenten gerufen und muss nicht explizit im pre-Event getriggert werden\r\n    if ((event.type != \"mouseover\") && (event.type != \"mousemove\") && (event.type != \"focus\") && (event.type != \"scroll\") && (event.type != \"mouseout\") && (event.type != \"mouseenter\")) {\r\n        // bei Touch-Emulation nur die emulierten MouseEvents berücksichtigen (sonst werden Tooltips sofort wieder geschlossen)\r\n        if (DWTOUCH_TOUCH_EMULATION_ENABLED && !event.dwTouch) {\r\n            return;\r\n        }\r\n\r\n        var evtTarget = dwUtilsGetEventTarget(event);\r\n        if (event.type == \"resize\") {\r\n            if (!dwFrameworkDisplayResized()) {\r\n                // Nur reagieren, wenn sich die Fenster-Größe tatsächlich geändert hat...\r\n                return;\r\n            }\r\n            if (evtTarget && evtTarget.tagName && (!(evtTarget.tagName.toLowerCase() == \"body\"))) {\r\n                // Nur reagieren, wenn der Auslöser der Body / das Window Objekt waren.\r\n                // In der Stückliste kann ein Resize Event z.B. durch die Scrollpane ausgelöst werden\r\n                return;\r\n            }\r\n        }\r\n        dwTooltip_hideTooltips();\r\n    }\r\n}\r\n\r\n/**\r\n * Schliesst das zuletzt geöffnete Popup einer selbst gezeichneten Combobox (keine SELECT Darstellung)\r\n * @param event\r\n */\r\nfunction dwHelperCloseCurrentlyOpenedComboboxes(event) {\r\n    try {\r\n        if ((currentlyOpenedComboboxPopup != null) && !currentlyOpenedComboboxPopup.isProcessing) {\r\n            currentlyOpenedComboboxPopup.isProcessing = true;\r\n            var comboboxListControl = currentlyOpenedComboboxPopup.getControlForContent();\r\n            if ((event.type == \"load\") || (event.type == \"mouseover\") || (event.type == \"mouseout\") || (event.type == \"mousemove\") || (event.type == \"mouseenter\") || (event.type == \"mouseleave\")) {\r\n                // Events, die die Sichtbarkeit des Popups nicht beeinflussen dürfen\r\n                return;\r\n            }\r\n            var evtTarget = dwUtilsGetEventTarget(event);\r\n            if (currentlyOpenedComboboxPopup.referrerContainsNode(evtTarget)) {\r\n//        if (dwUtilsGetNavigationPath(dwUtilsGetEventTarget(event), currentlyOpenedComboboxPopup.parentNode, DWDOM_NAVIGATION_PATH_DIRECTION.TOP_DOWN) != null) {\r\n                // Event, ausgelöst innerhalb des Containers. Die Sichtbarkeit muss durch die Komponente selbst gesteuert werden\r\n                // Bei Checkbox Darstellung muss nach Klick das Fenster geöffnet bleiben, bei Text-Darstellung geschlossen\r\n                return;\r\n            }\r\n            if (currentlyOpenedComboboxPopup.containsNode(evtTarget)) {\r\n                // Event, ausgelöst innerhalb des Popup Containers. Das Popup liegt nicht mehr im Combobox-Container selbst sondern\r\n                // wird in den Body umgehängt.\r\n                return;\r\n            }\r\n\r\n            if ((event.type == \"resize\") && (!dwFrameworkDisplayResized())) {\r\n                // Hoch moderne Browser (IE8 / IE9) werfen manchmal wild mit resize Events um sich. Nicht immer hat sich die Größe geändert ...\r\n                return;\r\n            }\r\n\r\n            // Keine Kriterien gefunden, die das schliessen des Popups verhindern\r\n            currentlyOpenedComboboxPopup.setVisible(false);\r\n            currentlyOpenedComboboxPopup.removeReferrer();\r\n            var popupVisibilityControl = $(comboboxListControl.id + \"_visibility\");\r\n            if (popupVisibilityControl != null) {\r\n                // Control ist ggf. in der Zwischenzeit ausgebaut...\r\n                dwDomSetDomAttribute(popupVisibilityControl, \"value\", \"false\");\r\n            }\r\n            currentlyOpenedComboboxPopup = null;\r\n        }\r\n    } finally {\r\n        if (currentlyOpenedComboboxPopup != null) {\r\n            currentlyOpenedComboboxPopup.isProcessing = false;\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * Löst ein Mouse Clicked - Event auf dem Parent-Window des geklickten Elements aus\r\n * @param event\r\n */\r\nfunction dwHelperFireWindowAutoCloseIfPossible(event, htmlElement) {\r\n    var autoCloseEvents = new Array(\"click\", \"mouseup\", \"mousedown\", \"scroll\");\r\n    if (!dwUtilsIsInArray(autoCloseEvents, event.type)) {\r\n        return;\r\n    }\r\n    var evtTarget = dwUtilsGetEventTarget(event);\r\n\r\n    // bei \"autoCloseWindows == false\" soll das evtTarget keine angezeigten GuiWindows mit aktivem autoClose-Flag schließen\r\n    if (dwDomGetDomAttribute(evtTarget, \"autoCloseWindows\") == \"false\") {\r\n        return;\r\n    }\r\n\r\n    // Erst bei einem echten Scrollen mit veränderter Scrollposition das AutoClose durchführen\r\n    // (der Android System-Browser hat ansonsten Probleme mit AutoClose-Fenstern)\r\n    if (event.type == \"scroll\") {\r\n        if ((evtTarget == null) || !dwHelperHasScrollPaneValueChanged(evtTarget.id)) {\r\n            return;\r\n        }\r\n    }\r\n\r\n    try {\r\n        var submitForm = dwFrameworkFindSubmitFormForNode(evtTarget);\r\n    } catch (exception) {\r\n        // Form nicht gefunden, z.B. Klick auf 'overlay'\r\n        return;\r\n    }\r\n    if (submitForm == null) {\r\n        // Form nicht gefunden. Element aktuell nicht mehr im DOM Baum (z.B. onscroll Handler erst nach Abarbeiten aller DOM Befehle ausgeführt)\r\n        return;\r\n    }\r\n    var formId = submitForm.id;\r\n    var windowId = formId.substring(0, formId.indexOf(\"_\"));\r\n    var currentRootNode = document.getElementById(\"dwmainwrapper\");\r\n\r\n\r\n    var childWindows = dwDomGetChildrenByTagname(currentRootNode, \"div\", {\"class\": \"guiwindow_child_container\"}, false);\r\n    var mostRecentChildWindow = null; // Popup mit höchtem z-Index\r\n    for (var i = 0; i < childWindows.length; i++) {\r\n        var childWindow = childWindows[i];\r\n        if ((mostRecentChildWindow == null) || (childWindow.style.zIndex > mostRecentChildWindow.style.zIndex)) {\r\n            mostRecentChildWindow = childWindow;\r\n        }\r\n    }\r\n\r\n    var endNodeChildWindow = $(windowId + \"_contentdiv\"); // NULL wenn Target im Hauptfenster geklickt wurde\r\n\r\n    // Autoclose wird ausgelöst, wenn es ein Kind-Fenster gibt, das Kind-Fenster das Attribut gesetzt hat, und\r\n    // das Event nicht innerhalb des Kind-Fensters ausgelöst wurde\r\n    var isAutoClose = (mostRecentChildWindow != null) && (dwDomGetDomAttribute(mostRecentChildWindow, \"autoclose\")) &&\r\n                      (mostRecentChildWindow != endNodeChildWindow);\r\n\r\n    if (isAutoClose && typeof (dwAjaxDefaultOnMouseDown) != \"undefined\") {\r\n        if ((htmlElement == currentRootNode) || (htmlElement == endNodeChildWindow)) {\r\n            if (event.type == \"click\") {\r\n                dwAjaxDefaultOnMouseDown(event, windowId, windowId, \"\", true);\r\n                ajaxLastClickTarget = undefined; // Vermeidung von Doppelklick Logik\r\n            }\r\n        } else {\r\n            var token = mostRecentChildWindow.getAttribute(\"autoCloseFired\");\r\n            if ((token == \"null\") || (token != \"true\")) {\r\n                dwAjaxDefaultOnMouseDown(event, windowId, windowId, \"\", true);\r\n                ajaxLastClickTarget = undefined; // Vermeidung von Doppelklick Logik\r\n                mostRecentChildWindow.setAttribute(\"autoCloseFired\", \"true\");\r\n            }\r\n\r\n            if (event.type == \"click\") {\r\n                mostRecentChildWindow.setAttribute(\"autoCloseFired\", null);\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\nfunction __internal_fireHtmlWindowCloseEventIfPossible(event, htmlElement, windowId) {\r\n    // Im HTML Modus kann ich nur 1 Action zum Server schicken\r\n    // Nur wenn Popup Fenster angezeigt werden (mind. 1 ) und auf dem aktuell ausgewerteten click-Handler\r\n    // noch keine Submit-Methode registriert ist, wird der Form-Submit zur AutoClose Prüfung an den Server geschickt\r\n    var body = document.getElementsByTagName(\"body\")[0];\r\n    var children = dwDomGetElementChildNodes(body);\r\n\r\n    for (var i = 0; i < children.length; i++) {\r\n        var child = children[i];\r\n        if (child.id && child.id.indexOf(\"_contentdiv\") > -1) {\r\n            var registeredMethods = dwUtilsStripFromFunction(htmlElement[\"on\" + event.type], true, true);\r\n            if (registeredMethods.indexOf(\"dwFrameworkSubmitForm\") == -1) {\r\n                dwFrameworkSubmitForm(windowId, windowId, \"mouseClickedEvent\");\r\n            }\r\n            break;\r\n        }\r\n    }\r\n}\r\n\r\nfunction dwHelperCallHotkeyIfPossible(event) {\r\n    if ((typeof (dwHotkeyRegistry) != \"undefined\") && ((event.type == \"keydown\") || (event.type == \"keyup\"))) {\r\n        // Für beide Event-Typen muss ein Listener definiert sein, der im Hotkey-Fall das Default-Verhalten (z.B. History Öffnen bei ctrl+h)\r\n        // verhindert. Der Callback darf allerdings nur einmalig ausgelöst werden.\r\n        // This bezieht sich in diesem Fall immer auf window (http://www.quirksmode.org/js/this.html)\r\n        // Wir benötigen das eventTarget nur als Semaphor (hotkey nur einmalig ausführen)\r\n        var eventTarget = document.getElementsByTagName(\"body\")[0];\r\n        if (event.type == \"keydown\") {\r\n            var executed = dwHotkeyRegistry.callHotkeyByKey(event);\r\n            if (executed) {\r\n                eventTarget.setAttribute(\"preventKeyup\", \"preventKeyUp\");\r\n            }\r\n        } else {\r\n            if (eventTarget.getAttribute(\"preventKeyup\") != null) {\r\n                eventTarget.setAttribute(\"preventKeyup\", null);\r\n            } else {\r\n                dwHotkeyRegistry.callHotkeyByKey(event);\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * Highlighted die übergebenen List-Indices (Custom Layout).\r\n *\r\n * Der Knoten, der gehighlighted wird, bestimmt sich aus der Id des Listen-Eintrags (<uniqueId>_<index>)\r\n * Vorhandene Highlights werden entfernt, wenn diese nicht in der Liste der übergebenen Indices definiert sind\r\n * (z.B. selektierte Einträge)\r\n *\r\n * @param uniqueId\r\n * @param indices : string | separierter String von Indices\r\n */\r\nfunction dwHelperHighlightListIndices(uniqueId, listUniqueId, indices) {\r\n    var popup = dwPopup_getPopupById(listUniqueId);\r\n    var listNode = (popup) ? popup.getControlForContent() : $(listUniqueId);\r\n    var oldScrollTop = listNode.scrollTop;\r\n    var selectionClassName = listNode.getAttribute(\"selectionClassName\");\r\n    if (selectionClassName == null) {\r\n        return; // Kein Highlighting zu setzen (z.B. Checkbox-Darstellung)\r\n    }\r\n    var highlightedIndices = listNode.getAttribute(\"highlightedIndices\");\r\n    var indicesList = dwUtilsSplit(indices, \"|\", false);\r\n    var highlightedIndicesList = dwUtilsSplit(highlightedIndices, \"|\", false);\r\n    // Highlighting von den alten Elementen entfernen, sofern diese nicht in der IndiZes Liste aufgeführt sind\r\n    for (var i = 0; i < highlightedIndicesList.length; i++) {\r\n        var index = highlightedIndicesList[i];\r\n        if (!dwUtilsIsInArray(indices, index)) {\r\n            var nodeWithHighlight = dwHelperGetListNodeForIndex(listUniqueId, index); // z.B. ein DIV / Input Element\r\n            if (nodeWithHighlight != null) {\r\n                dwDomRemoveClass(nodeWithHighlight, selectionClassName);\r\n            } // else : Knoten in der Zwischenzeit gelöscht.\r\n        }\r\n    }\r\n    // Highlighting für neue Elemente/Indizes setzen\r\n    for (i = 0; i < indicesList.length; i++) {\r\n        index = indicesList[i];\r\n        var nodeWithHighlight = dwHelperGetListNodeForIndex(listUniqueId, index);\r\n        if ((!dwDomHasAttribute(nodeWithHighlight, \"class\")) || (nodeWithHighlight.className.indexOf(selectionClassName) == -1)) {\r\n            dwDomAddClass(nodeWithHighlight, selectionClassName);\r\n        }\r\n    }\r\n    listNode.setAttribute(\"highlightedIndices\", indicesList.join(\"|\"));\r\n    listNode.scrollTop = oldScrollTop; // Falls sich durch das setzen der ClassNames die Positionierung ändert kann\r\n    // diese wiederhergestellt werden\r\n}\r\n\r\n/**\r\n * Aktualisiert den Wert der selektierten IDs ( | getrennte Liste von Indices in hidden Textfeld)\r\n *\r\n * Übergebener Index wird in Abhängigkeit des Selektionszustandes und des Select-Verhaltens (single vs multi)\r\n * in der Liste der IDs (Indizes) berücksichtigt\r\n * @param event\r\n * @param uniqueId\r\n * @param index\r\n * @param attribute\r\n */\r\nfunction dwHelperUpdateListSelectionIndices(event, uniqueId, listUniqueId, index, attribute) {\r\n    var entry = dwHelperGetListNodeForIndex(listUniqueId, index);\r\n    var isMultiSelect = $(listUniqueId).getAttribute(\"multiple\") == \"true\";\r\n    var selectedIndicesNode = $(listUniqueId + \"_selectedindices\"); // INPUT type hidden\r\n    var selectedIndices = dwDomGetDomAttribute(selectedIndicesNode, \"value\");\r\n    var isSelected = dwDomGetDomAttribute(entry, attribute);\r\n    if (typeof isSelected == \"string\") { // z.B. bei Listeneinträgen im DIV Format\r\n        isSelected = (isSelected == \"true\");\r\n    }\r\n\r\n    if (!isMultiSelect) {\r\n        var selectedIndicesList = dwUtilsSplit(selectedIndices, \"|\", false);\r\n        for (var i = 0; i < selectedIndicesList.length; i++) {\r\n            var selectedIdx = selectedIndicesList[i];\r\n            if (selectedIdx != index) {\r\n                var entryToDeselect = dwHelperGetListNodeForIndex(listUniqueId, selectedIdx);\r\n                dwDomSetDomAttribute(entryToDeselect, attribute, false);\r\n            }\r\n        }\r\n        selectedIndices = index;\r\n    } else {\r\n        if (isSelected) {\r\n            if (selectedIndices != \"\") {\r\n                selectedIndices += \"|\";\r\n            }\r\n            selectedIndices += index;\r\n        } else {\r\n            selectedIndices = dwUtilsRemoveFromArrayByText(dwUtilsSplit(selectedIndices, \"|\", false), index).join(\"|\");\r\n        }\r\n    }\r\n    dwDomSetDomAttribute(selectedIndicesNode, \"value\", selectedIndices);\r\n}\r\n\r\nfunction dwHelperToggleListSelectionState(event, listUniqueId, index, attribute) {\r\n    var entry = dwHelperGetListNodeForIndex(listUniqueId, index);\r\n    var oldState = dwDomGetDomAttribute(entry, attribute);\r\n    if (typeof oldState == \"string\") {\r\n        oldState = oldState == \"true\";\r\n    }\r\n    var newState = !oldState;\r\n    dwDomSetDomAttribute(entry, attribute, newState + \"\");\r\n}\r\n\r\nfunction dwHelperListTypeAheadKeyDownHandler(event, uniqueId, listUniqueId, typeInterval) {\r\n    event = dwFrameworkGetEvent(event);\r\n    if (dwUtilsGetEventKeyCode(event) == VIRTUAL_KEYCODES.KEY_BACK_SPACE) {\r\n        dwFrameworkPreventDefaultBehaviour(event);\r\n        return;\r\n    }\r\n    if ((dwUtilsGetEventKeyCode(event) == VIRTUAL_KEYCODES.KEY_ENTER) || (dwUtilsGetEventKeyCode(event) == VIRTUAL_KEYCODES.KEY_ESC)) {\r\n        dwFrameworkPreventDefaultBehaviour(event);\r\n        dwAjaxDefaultOnKeyUp(event, uniqueId, uniqueId, \"\", true);\r\n        return;\r\n    }\r\n    var listControl = $(listUniqueId);\r\n    var inputControl = $(uniqueId + \"_focus\");\r\n    var timestamp = listControl.getAttribute(\"timestamp\");\r\n    var currentTime = new Date().getTime();\r\n    if ((timestamp == null) || ((currentTime - timestamp) > typeInterval)) {\r\n        inputControl.value = \"\";\r\n    } else {\r\n        // Eingabe fortsetzen\r\n    }\r\n    listControl.setAttribute(\"timestamp\", currentTime);\r\n}\r\n\r\nfunction dwHelperListTypeAheadKeyUpHandler(event, uniqueId, listUniqueId, typeInterval, listRenderType) {\r\n    var listControl = $(listUniqueId);\r\n    var isMultiSelect = dwDomGetDomAttribute(listControl, \"multiple\") == \"true\";\r\n    var listSize = dwDomGetDomAttribute(listControl, \"size\");\r\n    var inputElement = $(uniqueId + \"_focus\");\r\n    if (inputElement == null) {\r\n        return; // Sollte nie auftreten - auf diesem Element wird der Handler registriert\r\n    }\r\n    var typedKeys = inputElement.value;\r\n    if (typedKeys == \"\") {\r\n        return; // Keine Eingabe -> keine neue Selektion\r\n    }\r\n    var startIdx = listControl.getAttribute(\"lastSelectedIdx\");\r\n    if (startIdx == null) {\r\n        var selectedIndicesList = dwUtilsSplit($(listUniqueId + \"_selectedindices\").value, \"|\", false);\r\n        if (selectedIndicesList.length == 0) {\r\n            startIdx = 0;\r\n        } else {\r\n            startIdx = selectedIndicesList[selectedIndicesList.length - 1];\r\n        }\r\n    } else {\r\n        startIdx++;\r\n    }\r\n    if (!isMultiSelect) {\r\n        var threadId = listControl.getAttribute(\"threadId\");\r\n        if (threadId != null) {\r\n            window.clearTimeout(threadId);\r\n            listControl.removeAttribute(\"threadId\");\r\n        }\r\n    }\r\n    var matchingEntryIdx = dwHelperGetMatchingListEntryIndex(uniqueId, listUniqueId, typedKeys, startIdx, listSize, listRenderType);\r\n    if (matchingEntryIdx > -1) {\r\n        listControl.setAttribute(\"lastSelectedIdx\", matchingEntryIdx);\r\n        listControl.setAttribute(\"typedKeys\", typedKeys);\r\n        var matchingEntry = dwHelperGetListNodeForIndex(listUniqueId, matchingEntryIdx);\r\n        listControl.scrollTop = matchingEntry.offsetTop; // Scrolling zum ausgewählten Eintrag. Eintrag wird \"top\" angezeigt\r\n        dwHelperListScrollValueChanged(listUniqueId);\r\n        if (!isMultiSelect) {\r\n            dwHelperHighlightListIndices(uniqueId, listUniqueId, matchingEntryIdx + \"\");\r\n            var attribute = (listRenderType == \"checkbox\") ? \"checked\" : \"selected\";\r\n            dwDomSetDomAttribute(matchingEntry, attribute, \"true\");\r\n            dwHelperUpdateListSelectionIndices(event, uniqueId, listUniqueId, matchingEntryIdx, attribute);\r\n            var postEvent = dwDomGetEventsForType(matchingEntry, \"onclick\", true);\r\n            postEvent = postEvent.replace(\"dwFwPreEv(event,false,this);\", \"\");\r\n            postEvent = postEvent.replace(\"dwFwPostEv(event)\", \"\");\r\n            postEvent = postEvent.replace(\"dwHelperToggleComboboxPopupVisibility('\" + uniqueId + \"');\", \"\");\r\n            // Event Objekt ist in den durch setTimeout aufgerufenen Methoden nicht mehr verfügbar\r\n            // Firefox4 findet in der setTimeout Methode keine gültige Referenz mehr auf das Event Objekt und bringt eine Fehlermeldung\r\n            // Der Verweis auf 'event' Objekte (immer der erste Parameter) wird explizit entfernt und durch NULL ersetzt\r\n            // so dass die Anzahl der Parameter für den Methodenaufruf nicht verändert wird\r\n            postEvent = postEvent.replace(/\\(event/g, \"(null\");\r\n            var threadId = setTimeout(postEvent, typeInterval);\r\n            listControl.setAttribute(\"threadId\", threadId);\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * Liefert den Listen-Index für die eingegebenen Zeichen. Am Ende der Liste wird automatisch mit der Suche am\r\n * List-Anfang begonnen. Ist bis zum Ende der Liste der Eintrag nicht gefunden, wird -1 zurückgeliefert\r\n * @param uniqueId\r\n * @param listUniqueId\r\n * @param typedKeys\r\n * @param startIdx\r\n * @param listSize\r\n * @param listRenderType\r\n */\r\nfunction dwHelperGetMatchingListEntryIndex(uniqueId, listUniqueId, typedKeys, startIdx, listSize, listRenderType) {\r\n    var forceReset = (startIdx == -1);\r\n    if (forceReset) {\r\n        startIdx = 0;\r\n    }\r\n    for (var i = startIdx; i < listSize; i++) {\r\n        var entryText = dwDomGetListEntryText(listUniqueId, i, listRenderType);\r\n        if (dwUtilsStringStartsWith(entryText, typedKeys, true)) {\r\n            return i;\r\n        }\r\n    }\r\n    if (!forceReset) {\r\n        return dwHelperGetMatchingListEntryIndex(uniqueId, listUniqueId, typedKeys, -1, listSize, listRenderType);\r\n    }\r\n    return -1;\r\n}\r\n\r\n/**\r\n * Liefert den HTML Knoten für die Index-Position zurück. Notwendig für die Ermittlung ist die Auswertung der Kind-Elemente\r\n * eines Knoten-Typs (z.B. DIV oder INPUT)\r\n * @param listUniqueId\r\n * @param index\r\n */\r\nfunction dwHelperGetListNodeForIndex(listUniqueId, index) {\r\n    var popup = dwPopup_getPopupById(listUniqueId);\r\n    // Das Popup ist entweder bereits geschlossen, oder die Darstellung der Liste erfolgt direkt auf der Seite (ohne Popup)\r\n    var listControl = popup ? popup.getControlForContent() : $(listUniqueId);\r\n    var nodeTag = listControl.getAttribute(\"nodeTag\");\r\n    var childNodes = listControl.getElementsByTagName(nodeTag);\r\n    if ((index == -1) || (index >= childNodes.length)) {\r\n        return null;\r\n    }\r\n    return childNodes[index];\r\n}\r\n\r\nfunction dwHelperGetListCount(listUniqueId) {\r\n    var popup = dwPopup_getPopupById(listUniqueId);\r\n    // Das Popup ist entweder bereits geschlossen, oder die Darstellung der Liste erfolgt direkt auf der Seite (ohne Popup)\r\n    var listControl = popup ? popup.getControlForContent() : $(listUniqueId);\r\n    var nodeTag = listControl.getAttribute(\"nodeTag\");\r\n    return listControl.getElementsByTagName(nodeTag).length;\r\n}\r\n\r\n/**\r\n * Setzt die Sichtbarkeit der List-Komponente im Browser\r\n * Aufruf bei Einbindung der Liste in einer Combobox (\"Popup\"-Sichtbarkeit)\r\n * @param uniqueId\r\n */\r\nfunction dwHelperToggleComboboxPopupVisibility(uniqueId) {\r\n    var body = $(\"body\");\r\n    var combobox = $(uniqueId);\r\n    if (dwDomHasAttribute(combobox, \"disabled\")) {\r\n        return;\r\n    }\r\n    var listId = uniqueId + \"_list\";\r\n    var popup = dwPopup_wrapControlWithoutCache($(listId), listId + \"_wrapper\", null, dwHelperRedirectComboboxPopupEventsToWrapper);\r\n    var contentControl = popup.getControlForContent();\r\n    if (!popup.isVisible()) {\r\n        var selectedIndices = $(listId + \"_selectedindices\").value;\r\n        var selectedIndicesList = dwUtilsSplit(selectedIndices, \"|\", false);\r\n        var scrollIndex = (selectedIndicesList.length == 0) ? 0 : selectedIndicesList[0];\r\n        popup.setReferrer(combobox);\r\n        // Styling wird nur auf Combobox angewendet. Das Popup liest sich diese Informationen zur Laufzeit ein\r\n        contentControl.style.backgroundColor = dwUtilsGetStyle(combobox, \"background-color\");\r\n        contentControl.style.color = dwUtilsGetStyle(combobox, \"color\");\r\n        popup.setVisible(true);\r\n        popup.setSize(-1, popup.control.offsetHeight);\r\n        var prefWidth = dwUtilsGetWidth(popup.control);\r\n        var comboWidth = dwUtilsGetWidth(combobox);\r\n        // Zeigt immer 8 an (empirisch ermittelt)\r\n        if (dwHelperGetListCount(listId) > 8) {\r\n            // Scrollbar draufrechnen\r\n            prefWidth += 22;\r\n        }\r\n        // Wenns dann kleiner ist als die Combobox selbst, dann mind diese Breite nehmen\r\n        if (prefWidth < comboWidth) {\r\n            prefWidth = comboWidth;\r\n        }\r\n        popup.setSize(prefWidth, popup.control.offsetHeight);\r\n        popup.adjustWrapper();\r\n        dwHelperHighlightListIndices(uniqueId, listId, selectedIndices);\r\n        var scrollToNode = dwHelperGetListNodeForIndex(listId, scrollIndex);\r\n        if (scrollToNode != null) {\r\n            contentControl.scrollTop = scrollToNode.offsetTop;\r\n        }\r\n        currentlyOpenedComboboxPopup = popup;\r\n    } else {\r\n        popup.setVisible(false);\r\n        popup.removeReferrer();\r\n    }\r\n}\r\n\r\n/**\r\n * Positioniert ein Popup Element am Bildschirm. Ist am unteren Rand nicht genug Platz, wird das Popup oberhalb des Opener gezeichnet\r\n * @param opener aufrufende Komponente\r\n * @param popup popup. wird unterhalb der aufrufenden Komponente gezeichnet, wenn ausreichend Platz verfügbar ist. andernfalls oberhalb\r\n */\r\nfunction dwHelperPositionPopup(opener, popup) {\r\n    var layoutControl = popup.getControlForLayout();\r\n    var popupHeight = parseInt(layoutControl.style.height);\r\n    if (!popupHeight) {\r\n        popupHeight = layoutControl.offsetHeight;\r\n    }\r\n    var popupTop = parseInt(layoutControl.style.top);\r\n\r\n    var bodyHeight = document.getElementsByTagName(\"body\")[0].offsetHeight;\r\n    var openerLocationOnViewport = dwUtilsGetLocationOnWindow(opener, true, false);\r\n\r\n    var borderWidth = parseInt(dwUtilsGetStyle(opener, \"border-width\"));\r\n    if (isNaN(borderWidth)) {\r\n        borderWidth = 0;\r\n    }\r\n    var scrolledContainer = dwUtilsGetFirstParentScrolledElement(opener);\r\n    var scrollbarWidth = (scrolledContainer != null) ? dwUtilsGetScrollbarWidth(scrolledContainer) : 0;\r\n    var position = dwUtilsGetStyle(layoutControl, \"position\");\r\n    var openerHeight = dwUtilsGetHeight(opener);\r\n    if (position == \"absolute\") {\r\n        layoutControl.style.margin = 0; // Margins beeinflussen die Position des Containers (left/top)\r\n        var location = new DWPoint(0, 0);\r\n        location.x = (openerLocationOnViewport.x);\r\n        if (bodyHeight < (openerLocationOnViewport.y + popupHeight + openerHeight + scrollbarWidth)) {\r\n            location.y = (openerLocationOnViewport.y - popupHeight);\r\n        } else {\r\n            location.y = (openerLocationOnViewport.y + openerHeight);\r\n        }\r\n        popup.setPosition(location);\r\n    } else if (position == \"relative\") {\r\n        if (bodyHeight < (openerLocationOnViewport.y + popupHeight + openerHeight + scrollbarWidth)) {\r\n            layoutControl.style.marginTop = (-borderWidth - popupTop - popupHeight) + \"px\";\r\n        } else {\r\n            layoutControl.style.marginTop = -borderWidth + \"px\";\r\n        }\r\n    }\r\n}\r\n\r\nfunction dwHelperToggleComboboxValueManuallyEnteredState(uniqueId, newState) {\r\n    var element = $(uniqueId + \"_isValueEntered\");\r\n    element.value = newState + \"\";\r\n}\r\n\r\nfunction dwHelperForceOnChangeIfEnterPressed(event) {\r\n    if (dwUtilsIsEnter(event)) {\r\n        this.blur();\r\n        this.focus();\r\n    }\r\n}\r\n\r\n/**\r\n * Aktualisiert den Wert des Combobox-Display-Textfeldes\r\n *\r\n * Ausgewertet werden die Einträge des \"selectedids\" Elements\r\n * Zukünftiges FIXME_MM Einträge sind \"unsortiert\". Im HTML Modus ist die Reihenfolge anhand er Index-Position aufsteigend sortiert.\r\n * Es fehlt allgemein noch die Schaltfläche zum Sortieren\r\n * @param uniqueId\r\n * @param listRenderMode\r\n */\r\nfunction dwHelperUpdateComboboxValue(uniqueId, listUniqueId, listRenderMode) {\r\n    var selectedIndicesNode = $(listUniqueId + \"_selectedindices\"); // INPUT type hidden\r\n    var selectedIndices = dwDomGetDomAttribute(selectedIndicesNode, \"value\");\r\n    var comboboxDisplay = $(uniqueId + \"_input\");\r\n    var listControl = $(listUniqueId);\r\n    var multiValueSeparator = listControl.getAttribute(\"multiValueSeparator\");\r\n    var selectedIndicesList = dwUtilsSplit(selectedIndices, \"|\", false);\r\n    var textToDisplay = \"\";\r\n    for (var i = 0; i < selectedIndicesList.length; i++) {\r\n        if (i > 0) {\r\n            textToDisplay = textToDisplay.concat(multiValueSeparator);\r\n        }\r\n        var selectedIdx = selectedIndicesList[i];\r\n        var entryText = dwDomGetListEntryText(listUniqueId, selectedIdx, listRenderMode);\r\n        textToDisplay = textToDisplay.concat(entryText);\r\n    }\r\n    comboboxDisplay.value = textToDisplay;\r\n    // Eigentlich sollte im onChange bereits ein focus() ausgeführt werden.\r\n    // Beim Aufruf dieser Methode (z.B. aus Spaltenfilter Dialog) lag der Focus allerdings danach auf dem BODY Element\r\n    // Der Fokus wird nochmal korrigiert und auf das _focus Element der Combobox umgesetzt\r\n    var activeElement = getActiveElement(document);\r\n    if ((activeElement == document.getElementById(\"body\") || ((activeElement != null) && (activeElement.id == \"focus_wrapper\")))) {\r\n        $(uniqueId + \"_focus\").focus();\r\n    }\r\n}\r\n\r\nfunction dwHelperSetNextSpinnerValue(spinnerControlId) {\r\n    var inputControlId = spinnerControlId + \"_input\";\r\n    var spinnerControl = $(spinnerControlId);\r\n    var inputControl = $(inputControlId);\r\n    var step = spinnerControl.getAttribute(\"stepSize\") * 1;\r\n    var max = spinnerControl.getAttribute(\"maxValue\") * 1;\r\n    var currentValue = inputControl.value * 1;\r\n    if (currentValue == \"\") {\r\n        currentValue = 0;\r\n    }\r\n    var newValue = currentValue;\r\n    if ((currentValue + step) <= max) {\r\n        newValue += step;\r\n    } else {\r\n        // Größer als max -> dann setze auf max\r\n        newValue = max;\r\n    }\r\n    inputControl.value = newValue + \"\";\r\n    return newValue;\r\n}\r\n\r\nfunction dwHelperSetPreviousSpinnerValue(spinnerControlId) {\r\n    var inputControlId = spinnerControlId + \"_input\";\r\n    var spinnerControl = $(spinnerControlId);\r\n    var inputControl = $(inputControlId);\r\n    var step = spinnerControl.getAttribute(\"stepSize\") * 1;\r\n    var min = spinnerControl.getAttribute(\"minValue\") * 1;\r\n    var currentValue = inputControl.value * 1;\r\n    if (currentValue == \"\") {\r\n        currentValue = 0;\r\n    }\r\n    var newValue = currentValue;\r\n    if ((currentValue - step) >= min) {\r\n        newValue -= step;\r\n    } else {\r\n        // Kleiner als min -> setze auf min\r\n        // Weil, falls Step 5 und min -1, dann würde man mit dem Spinner nicht auf -1 kommen, wenn der aktuelle Wert z.B. 5 ist\r\n        newValue = min;\r\n    }\r\n    inputControl.value = newValue;\r\n    return newValue;\r\n}\r\n\r\n/**\r\n * Workaround für Datei-Download in Firefox\r\n * Die Komponente für die Übertragung der Datei wird automatisch entfernt, wenn die Übertragung abgeschlossen ist.\r\n * Ist im Firefox allerdings ein 2-stufiger Download eingestellt (Stufe 1: Öffnen vs. Speichern / Stufe 2: Speicherort wählen)\r\n * steht im 2. Schritt die Datei nicht mehr zur Verfügung, wenn die Komponente die diese angefordert hat (IFrame) bereits entfernt wurde\r\n *\r\n * Die Komponente, die die Datei anfordert wird dynamisch im Browser generiert (und nicht in den DOM eingebaut)\r\n * So ist gewährleistet, dass Firefox auch für den 2. Schritt auf die Datei zugreifen kann.\r\n * @param eventHandlerComponentId\r\n * @param uniqueId\r\n * @param url\r\n */\r\nfunction dwHelperDownloadFileInFirefox(eventHandlerComponentId, uniqueId, url) {\r\n    if (framework_isFirefox) { // IE kann mit diesem Mechanismus nicht umgehen ...\r\n        var fileName = url.substring(url.lastIndexOf(\"/\") + 1);\r\n        var link = document.createElement('a');\r\n        link.href = url;\r\n        link.target = '_blank';\r\n        link.download = fileName || 'unknown';\r\n\r\n        var event = document.createEvent('MouseEvents');\r\n        event.initMouseEvent('click', true, true, null, 1, 0, 0, 0, 0,\r\n                             false, false, false, false, 0, null);\r\n        link.dispatchEvent(event);\r\n    }\r\n}\r\n\r\n\r\nfunction dwFrameworkGetEvent(event) {\r\n    // Event Objekt (z.B. als funktionsparameter übergeben)\r\n    // Wenn null oder undefined, dann globales Window Event (z.B. IE8)\r\n    // Wenn null oder undefined, dann docware Event (z.B. IE8 - bei Event Delegation zwischen IFrame und Hauptfenster)\r\n    return event || window.event || window.dw_event;\r\n}\r\n\r\nfunction dwFrameworkShowDevelopmentMessages() {\r\n    return framework_showDevelopmentHints;\r\n}\r\n\r\nfunction dwActiveSessionCheck() {\r\n    if ((!framework_isActive) || (framework_activeSessionCheckMode == \"none\")) {\r\n        // Ist die Verbindung komplett verloren gegangen (und die Ajax Anfragen eingestellt)\r\n        // kann auch der Ping eingestellt werden\r\n        if (typeof (framework_activeSessionCheckId) != \"undefined\") {\r\n            clearInterval(framework_activeSessionCheckId);\r\n        }\r\n        return;\r\n    }\r\n\r\n    var baseUrl = dwUtilsGetBaseApplicationUrl();\r\n    var url = baseUrl + \"/activeSessionCheck?userId=\" + framework_userId + \"&mode=\" + framework_activeSessionCheckMode;\r\n\r\n    try {\r\n        var xmlHttp = dwUtilsCreateXmlHttpRequest(true);\r\n        if (xmlHttp != null) {\r\n            xmlHttp.open(\"GET\", url, framework_isChrome); // Nur bei Chrome muss/darf der xmlHttp-Request asynchron sein\r\n            xmlHttp.send(null);\r\n        }\r\n    } catch (e) {\r\n        //ignorieren\r\n    }\r\n}\r\n\r\nfunction dwFrameworkInitFramework(userId, isDevelopment, isDevelopmentQFTest, showDevelopmentHints, isMobileView, isMobileBrowser,\r\n                                  isTouchBrowser, isPointerBrowser, isMSPointerBrowser, isEmulateTouchEvents,\r\n                                  isWithAnimations, childThreadCount, isWithPing, activeSessionCheckMode, isWithCanvas, isWithVideo, isIELegacyMode,\r\n                                  isIEHeavyWeightPopupAllowed, isSecured, isNonModalWindow, browserType, browserVersion, isWithStaticConnection,\r\n                                  doctype, hiddenscroll, activeLogChannels, isOffline, isWithHistoryEntryOnInit) {\r\n    // Wenn das nicht vorhanden ist, dann ist man in Swing\r\n    framework_isJ2EEBrowser = true;\r\n    framework_userId = userId;\r\n    framework_isDevelopment = isDevelopment;\r\n    framework_isDevelopmentQFTest = isDevelopmentQFTest;\r\n    framework_showDevelopmentHints = showDevelopmentHints;\r\n    framework_isMobileView = isMobileView;\r\n    framework_isMobileBrowser = isMobileBrowser;\r\n    framework_isTouchBrowser = isTouchBrowser;\r\n    framework_isPointerBrowser = isPointerBrowser;\r\n    framework_isMSPointerBrowser = isMSPointerBrowser;\r\n    framework_isWithAnimations = isWithAnimations;\r\n    framework_childThreadCount = childThreadCount;\r\n    framework_activeSessionCheckMode = activeSessionCheckMode;\r\n    framework_isWithCanvas = isWithCanvas;\r\n    framework_isWithVideo = isWithVideo;\r\n    framework_browserType = browserType;\r\n    framework_browserVersion = browserVersion;\r\n    framework_isIELegacyMode = isIELegacyMode;\r\n    framework_isIEHeavyWeightPopupAllowed = isIEHeavyWeightPopupAllowed;\r\n    framework_isSecured = isSecured;\r\n    framework_isNonModalWindow = isNonModalWindow;\r\n\r\n    // MacOS?\r\n    framework_isMacOS = false;\r\n    if (navigator.userAgent) {\r\n        framework_isMacOS = dwUtilsStringStartsWith(navigator.platform, 'Mac', true);\r\n    }\r\n\r\n    framework_isFirefox = framework_browserType == DWFRAMEWORK_BROWSER_TYPE_FIREFOX;\r\n    framework_isIE = framework_browserType == DWFRAMEWORK_BROWSER_TYPE_IE;\r\n    framework_isEdge = framework_browserType == DWFRAMEWORK_BROWSER_TYPE_EDGE;\r\n    framework_isOpera = framework_browserType == DWFRAMEWORK_BROWSER_TYPE_OPERA;\r\n    framework_isSafari = framework_browserType == DWFRAMEWORK_BROWSER_TYPE_SAFARI;\r\n    framework_isChrome = (framework_browserType == DWFRAMEWORK_BROWSER_TYPE_CHROME) || (framework_browserType == DWFRAMEWORK_BROWSER_TYPE_EDGE_CHROMIUM);\r\n    framework_isIE7 = (framework_browserType == DWFRAMEWORK_BROWSER_TYPE_IE) && (framework_browserVersion.indexOf(\"7.\") != -1);\r\n    framework_isIE8 = (framework_browserType == DWFRAMEWORK_BROWSER_TYPE_IE) && (framework_browserVersion.indexOf(\"8.\") != -1);\r\n    framework_isIE9 = (framework_browserType == DWFRAMEWORK_BROWSER_TYPE_IE) && (framework_browserVersion.indexOf(\"9.\") != -1);\r\n    framework_isOffline = isOffline;\r\n\r\n    framework_hiddenscroll = hiddenscroll;\r\n\r\n    for (var i = 0; i < activeLogChannels.length; i++) {\r\n        FRAMEWORK_LOGCHANNELS.activate(activeLogChannels[i]);\r\n    }\r\n\r\n    framework_doctype = doctype;\r\n\r\n    // History relevante Sachen\r\n    framework_html5HistoryEnabled = (typeof (window.onpopstate) != \"undefined\");\r\n    framework_html5HistoryCurrentState = dwFrameworkCreateBrowserHistoryState(\"\");\r\n\r\n    // Browser-Informationen für mobile Endgeräte\r\n    framework_isiOS = false;\r\n    framework_isAndroid = false;\r\n    framework_mobileOSVersion = -1;\r\n    if (navigator.userAgent) {\r\n        // Mit Einführung von iOS 13 hat Apple eine bessere Unterstützung für die einzelnen UIs eingeführt (z.B. ipados, ...)\r\n        // In diesem Zuge wurde der User Agent String verallgemeinert.\r\n        // Ein iPAD mit iOS 13 meldet sich als\r\n        // Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.1 Safari/605.1.15\r\n        // Für eine Unterscheidung zwischen Mac und iPad untersuchen wir, ob das Gerät eine Touch Oberfläche hat => iOS\r\n        framework_isiOS = (/iPad|iPhone|iPod/.test(navigator.platform) || (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1));\r\n        // Android Geräte geben als platform Android oder Linux Version (Linux armvx, wobei x=version) zurück\r\n        // bei Linux prüfen wir zusätzlich den UserAgend auf Android um festzustellen, ob es auch wirklich Android ist\r\n        framework_isAndroid = /Android/.test(navigator.platform) ||\r\n                              ((/Linux/.test(navigator.platform)) && (/Android/.test(navigator.userAgent) || (/Edg/.test(navigator.userAgent)\r\n                                                                      || (/Chrome/.test(navigator.userAgent)))));\r\n        framework_isEdgeChromium = (framework_browserType == DWFRAMEWORK_BROWSER_TYPE_EDGE_CHROMIUM) && (/Edg/.test(navigator.userAgent));\r\n\r\n        if (framework_isiOS) {\r\n            var osNameIndex = navigator.userAgent.indexOf(\"CPU OS \");\r\n            var osVersionString = navigator.userAgent.substr(osNameIndex + 7, 3).replace(\"_\", \".\");\r\n            framework_mobileOSVersion = parseFloat(osVersionString);\r\n        } else if (framework_isAndroid) {\r\n            var osNameIndex = navigator.userAgent.indexOf(\"Android \");\r\n            var osVersionString = navigator.userAgent.substr(osNameIndex + 8, 3);\r\n            framework_mobileOSVersion = parseFloat(osVersionString);\r\n        }\r\n    }\r\n\r\n    framework_isQuirks = document.compatMode.toLowerCase() == \"backcompat\";\r\n    framework_lastServerRequest = new Date().getTime();\r\n    framework_logger = new DwLogger(DWFRAMEWORK_FORCE_LOGGING_TO_BROWSER);\r\n    framework_offsetSupport = dwFrameworkGetOffsetSupport();\r\n\r\n    // wenn framework_isActive, dann nicht mehr Pingen\r\n    framework_isActive = true;\r\n    window.onpagehide = function(event) {\r\n        if (!event.persisted && (typeof (dwFrameworkShutdownFrameworkBrowser) != \"undefined\")) {\r\n            dwFrameworkShutdownFrameworkBrowser();\r\n        }\r\n    };\r\n\r\n    // Error Handler\r\n    window.onerror = dwFrameworkErrorHandler;\r\n\r\n    // Default Close\r\n    var bodyNode = $(\"body\");\r\n    bodyNode.onmouseup = function(event) {\r\n        dwFrameworkDefaultClose(event);\r\n    };\r\n\r\n    // Browser Vor/Zurück\r\n    if (framework_html5HistoryEnabled) {\r\n        // Soll hier ein History Eintrag gesetzt werden?\r\n        if (isWithHistoryEntryOnInit) {\r\n            dwFrameworkPushBrowserHistoryState();\r\n        }\r\n\r\n        window.onpopstate = function(event) {\r\n            dwFrameworkOnPopState(event);\r\n        };\r\n    }\r\n\r\n    if (dwFrameworkShowDevelopmentMessages()) {\r\n        dwFrameworkShowHint(\"AJAX\", \"browser \" + framework_browserType + \" \" + framework_browserVersion +\r\n                                    \"; userId \" + framework_userId +\r\n                                    \"; isMobileView \" + framework_isMobileView +\r\n                                    \"; isMobileBrowser \" + framework_isMobileBrowser +\r\n                                    \"; isTouchBrowser: \" + framework_isTouchBrowser +\r\n                                    \"; isPointerBrowser: \" + framework_isPointerBrowser +\r\n                                    \"; isMSPointerBrowser: \" + framework_isMSPointerBrowser +\r\n                                    \"; isEmulateTouchEvents: \" + isEmulateTouchEvents +\r\n                                    \"; isNonModalWindow: \" + framework_isNonModalWindow,\r\n                            \"#ffffcc\", \"#000000\");\r\n    }\r\n\r\n    // Touch Effekte\r\n    if (isEmulateTouchEvents) {\r\n        dwTouchEnableTouchEmulation();\r\n    } else if (framework_isTouchBrowser) {\r\n        dwTouchRegisterTouchFunctionsInBrowser();\r\n    }\r\n\r\n    dwFrameworkPreventCtrlPSForPrint();\r\n\r\n    if (buildPopupWrapperCache) {\r\n        buildPopupWrapperCache();\r\n    }\r\n    if (dwTooltip_createTooltip) {\r\n        // Vorsorgliche Initialisierung der Tooltip Komponente\r\n        dwTooltip_createTooltip(-1, -1);\r\n    }\r\n\r\n    // aktuelle Breite und Höhe merken, um bei Ausrichtungsänderungen auf das Ändern der Breite und Höhe warten\r\n    // zu können (ist unter Android notwendig, da die Breite und Höhe dort erst NACH dem onorientationchange-Event angepasst wird)\r\n    framework_displayWidth = dwUtilsGetViewportWidth();\r\n    framework_displayHeight = dwUtilsGetViewportHeight();\r\n    framework_displayOrientation = 0;\r\n\r\n    // auf Ausrichtungsänderungen reagieren\r\n    if (window.orientation != null) { // Mechanismus für die meisten mobilen Browser (nicht für mobilen Firefox)\r\n        framework_displayOrientation = window.orientation;\r\n        window.onorientationchange = function() {\r\n            dwFrameworkCheckOrientationOrSizeChanged(0);\r\n        };\r\n    } else if ((window.DeviceOrientationEvent) && framework_isMobileBrowser) { // Der mobile Firefox verwendet diesen Mechanismus (evtl. auch andere Gecko-basierte mobile Browser)\r\n        window.ondeviceorientation = function(event) {\r\n            // event.alpha stellt den Drehwinkel dar -> diesen auf BrowserInfo.DISPLAY_ORIENTATION_* normieren (analog zu anderen Browsern)\r\n            var displayOrientation = event.alpha;\r\n            var numDegrees = 30; // Anzahl Grad (jeweils +/-) um den jeweiligen Ausrichtungswinkel herum für das Erkennen einer Ausrichtung\r\n            if ((displayOrientation > 180 - numDegrees) && (displayOrientation < 180 + numDegrees)) {\r\n                displayOrientation = 0; // BrowserInfo.DISPLAY_ORIENTATION_PORTRAIT\r\n            } else if ((displayOrientation > 90 - numDegrees) && (displayOrientation < 90 + numDegrees)) {\r\n                displayOrientation = 90; // BrowserInfo.DISPLAY_ORIENTATION_LANDSCAPE_LEFT\r\n            } else if ((displayOrientation > 360 - numDegrees) || (displayOrientation < numDegrees)) {\r\n                displayOrientation = 180; // BrowserInfo.DISPLAY_ORIENTATION_UPSIDE_DOWN\r\n            } else if ((displayOrientation > 270 - numDegrees) && (displayOrientation < 270 + numDegrees)) {\r\n                displayOrientation = -90; // BrowserInfo.DISPLAY_ORIENTATION_LANDSCAPE_RIGHT\r\n            } else {\r\n                displayOrientation = -1; // Ausrichtung nicht ändern außerhalb +/-numDegrees um den jeweiligen Ausrichtungswinkel herum\r\n            }\r\n\r\n            if ((displayOrientation != -1) && (framework_displayOrientation != displayOrientation)) {\r\n                framework_displayOrientation = displayOrientation;\r\n\r\n                // beim IE kommt bei Größenveränderung vom Browserfenster kein DeviceOrientationEvent -> auch auf Größenänderung reagieren\r\n                // und hier kein dwFrameworkCheckOrientationOrSizeChanged() aufrufen, damit kein doppelter Event kommt\r\n                if (!framework_isIE) {\r\n                    dwFrameworkCheckOrientationOrSizeChanged(0);\r\n                }\r\n            }\r\n        };\r\n\r\n    } else { // als letztes Fallback einfach auf die Größenänderung des Fensters reagieren (notwendig z.B. für IE und Desktop-Browser)\r\n        if (bodyNode.offsetWidth >= bodyNode.offsetHeight) { // aufgrund des Seitenverhältnisses die Ausrichtung erraten\r\n            framework_displayOrientation = 0; // BrowserInfo.DISPLAY_ORIENTATION_PORTRAIT\r\n        } else {\r\n            framework_displayOrientation = 90; // BrowserInfo.DISPLAY_ORIENTATION_LANDSCAPE_LEFT\r\n        }\r\n    }\r\n\r\n    // Beim Resize muss dwFrameworkCheckOrientationOrSizeChanged immer gerufen werden, da nur dort die Größenvariablen gesetzt werden\r\n    dwDomAddEvent(bodyNode, \"onresize\", \"dwFrameworkCheckOrientationOrSizeChanged(0);\", false);\r\n\r\n    framework_isWithPing = isWithPing;\r\n    if (isWithPing) {\r\n        framework_pingId = setInterval(dwFrameworkPing, DWFRAMEWORK_CALLBACK_DELAY);\r\n    }\r\n\r\n    framework_isWithStaticConnection = isWithStaticConnection;\r\n\r\n    if (framework_activeSessionCheckMode != \"none\") {\r\n        dwActiveSessionCheck();//gleich den ersten Request schicken, sonst kann der Benutzer Tab schliessen befor der Request im Interval verschickt wird\r\n        framework_activeSessionCheckId = setInterval(dwActiveSessionCheck, DWFRAMEWORK_CALLBACK_DELAY_ACTIVE_SESSION_CHECK);\r\n    }\r\n}\r\n\r\n/**\r\n * Ctrl + P und Ctrl + S verhindern, damit der Nutzer über unsere Funktionen zum Drucken/Speichern der Daten gehen muss,\r\n * die teilweise nur eingeschränkt abhängig von Konfiguration und Rechten verfügbar sind.\r\n */\r\nfunction dwFrameworkPreventCtrlPSForPrint() {\r\n    var bodyNode = $(\"body\");\r\n    bodyNode.onkeydown = function(event) {\r\n        if ((event.ctrlKey || event.metaKey) && (event.key == \"s\" || event.key == \"p\" || event.charCode == 16 || event.charCode == 112 || event.keyCode == 80 || event.keyCode == 83)) {\r\n            event.preventDefault();\r\n            return false;\r\n        }\r\n    };\r\n}\r\n\r\n// Leider ist es so, dass man in Browsern nicht unbedingt mitbekommen, wenn der Autofill Mechanismus Textfelder vorausgefüllt hat\r\n// Wir arbeiten ja mit onchange/oninput bzw. keyup und die werden beide im aktuellen Firefox nicht gerufen, wenn Firefox autofilled hat\r\n// Zukünftig wird es noch schwieriger, da soll man per JS gar nicht mehr mitbekommen, wenn es vorausgefüllt wird, weil es sonst\r\n// dazu führt, dass man bei einer XSS Lücke die Logindaten einer anderen Seite abgreifen kann\r\nfunction dwFrameworkSendAutoFill() {\r\n    var list = document.getElementsByTagName('input');\r\n    for (var i = 0; i < list.length; i++) {\r\n        var c = list[i];\r\n        if ((c.type == 'text') || (c.type == 'password')) {\r\n            if ((c.value != '') && (typeof (c.oninput) != 'undefined') && dwUtilsStringContains(c.className, \"guitextfield\")) {\r\n                if (typeof (dwAjaxAddUpdate) == \"function\") {\r\n                    // Methode ist im GWT Umfeld nicht verfügbar\r\n                    dwAjaxAddUpdate(c.id + \"@DW@autoFillValue@DW@\" + c.value, false, true);\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\nfunction dwFrameworkInitFrameworkFinished() {\r\n    if (framework_isWithStaticConnection && typeof (dwAjaxNewStaticConnection) != \"undefined\") {\r\n        dwAjaxNewStaticConnection();\r\n    }\r\n    dwFrameworkInitFinished = true;\r\n    // updateSizes erzeugt evtl. Events, die bei dwFrameworkInitFinished == false nicht geworfen werden würden,\r\n    // so dass wir das explizit ganz am Schluss hier machen\r\n    dwResizeRegistryGetInstance().updateSizes();\r\n\r\n    // Aktiviere den Fix, wenn es Android oder Edge im Tabletmodus ist. Bei Android werden sonst die Eingabefelder öfters überdeckt\r\n    softkeyboardFix.install();\r\n\r\n    // Aktiviere den Tiffconverter\r\n    QUANOS_TIFF_CONVERTER.install();\r\n\r\n    // Wir müssen leider dem Firefox etwas Zeit geben, weil man hier noch nicht die vorausgefüllten Felder zuverlässig ausgefüllt bekommt!\r\n    setTimeout(function() {\r\n        dwFrameworkSendAutoFill();\r\n    }, 100);\r\n}\r\n\r\nfunction dwFrameworkCheckOrientationOrSizeChanged(checkCounter) {\r\n    // Test bei jedem Resize, ob es schon installiert ist oder nicht mehr benötigt wird\r\n    softkeyboardFix.install();\r\n\r\n    if (softkeyboardFix.isInstalled()) {\r\n        // Prüfe, ob sich die Größe nur geändert hat, weil die Tastatur eingeblendet wurde.\r\n        // In diesem Fall schlucke den Resizeevent\r\n        if (!softkeyboardFix.reallySizeChanged()) {\r\n            // Die Veränderung ist durch ein-/ausblenden des Keyboards ausgelöst worden ...\r\n            if (!softkeyboardFix.isSoftkeyboardVisible()) {\r\n                let edgeDesktop = framework_isEdgeChromium && isNaN(framework_mobileOSVersion);\r\n                let edgeMobile = framework_isEdgeChromium && (framework_mobileOSVersion > -1);\r\n                let chromeDesktop = framework_isChrome && !framework_isEdgeChromium && isNaN(framework_mobileOSVersion);\r\n                let chromeMobile = framework_isChrome && !framework_isEdgeChromium && (framework_mobileOSVersion > -1);\r\n                if (chromeMobile || chromeDesktop || edgeMobile || edgeDesktop) {\r\n                    // Hier kein blur, weil sich dadurch die Bildschirmtastatur sofort wieder schließt seit Chrome 108\r\n                } else {\r\n                    // Keyboard wurde ausgeblendet. Die tatsächliche Seitenhöhe entspricht der gemerkten maximalen Seitenhöhe\r\n                    const activeElement = getActiveElement(document);\r\n                    if (activeElement && activeElement.tagName && dwUtilsIsInputTextBox(activeElement)) {\r\n                        // Workaround für JAVA_VIEWER-7172. Die Eingabeelemente behalten bei Android den Focus, obwohl sie nicht mehr fokusiert sind\r\n                        // Der Workaround sendet einen blur, wenn erkannt wird, dass die Tastatur nicht mehr angezeigt wird.\r\n                        // Der Grund für dieses Verhalten ist:\r\n                        // Bei Touch Browsern werden mouseup/down Befehle manuell via Javascript ausgelöst (laut SB unterstützt iOS diese Events nicht)\r\n                        // Bei diesen Befehlen werden bereits die entsprechenden Mouse Listener ausgelöst.\r\n                        // Das doppelte Auslösen der Events wird verhindert indem das Default Verhalten abgebrochen wird (preventDefault) und das Event\r\n                        // nicht an den Browser weiter geleitet wird\r\n                        // Im dwTouchEnd wird daher bereits der focus() manuell auf Eingabecontrols gesetzt, hier machen wir manuell den blur()\r\n                        activeElement.blur();\r\n                    }\r\n                }\r\n            }\r\n            return;\r\n        }\r\n        // Größe hat sich echt geändert (Am Handy wahrscheinlich rotiert)\r\n        softkeyboardFix.setNewWidth();\r\n    }\r\n\r\n    if (window.orientation != null) {\r\n        framework_displayOrientation = window.orientation;\r\n    }\r\n\r\n    var bodyNode = $(\"body\");\r\n    var displayWidth = dwUtilsGetViewportWidth();\r\n    var displayHeight = dwUtilsGetViewportHeight();\r\n\r\n    // so lange den Check über setTimeout() wiederholen, bis die Ausrichtungsänderung auch im Body durch eine veränderte\r\n    // Breite und Höhe angekommen ist (dies kann unter Android anscheinend ein paar Millisekunden dauern...)\r\n    if (dwFrameworkDisplayResized()) {\r\n        if (framework_isiOS) {\r\n            // Workaround für einen Apple iOS Bug, der ggf. mit Version 12.x eingeführt wurde. Probleme haben mehrere Nutzer\r\n            // https://developer.apple.com/forums/thread/128949.\r\n            // Auch im Xamarin Umfeld ist dieses neue Apple Feature dokumentiert\r\n            // https://github.com/xamarin/Xamarin.Forms/issues/9872\r\n            // Beim Rendering der weißen Seite ist die Ursache, dass Apple an die Browser Schnittstelle die Größe weitergibt\r\n            // die bei Anzeige der Toolbar/Statusbar zur Verfügung steht. Nur werden diese beiden Symbolleisten nicht dargestellt\r\n            // Der Scrolling Befehl forciert die Darstellung der Symbolleisten - so dass der weiße Bereich weg ist.\r\n            setTimeout(function() {\r\n                // Länge des Timeouts kann ggf. verkürzt werden - ich habe mich am \"original\" orientiert\r\n                // https://stackoverflow.com/questions/62717621/white-space-at-page-bottom-after-device-rotation-in-ios-safari\r\n                window.scrollTo(0, 1);\r\n            }, 500);\r\n\r\n        }\r\n        framework_displayWidth = displayWidth;\r\n        framework_displayHeight = displayHeight;\r\n        if (typeof (dwAjaxDefaultOnDisplayOrientationChanged) != \"undefined\") {\r\n            dwAjaxDefaultOnDisplayOrientationChanged(\"@DWSUB@__INT_displayOrientation=\" + framework_displayOrientation\r\n                                                     + \"@DWSUB@__INT_displayWidth=\" + framework_displayWidth\r\n                                                     + \"@DWSUB@__INT_displayHeight=\" + framework_displayHeight, true);\r\n        }\r\n    } else if (checkCounter < 30) { // nach maximal 30 Versuchen (d.h. 3000ms) aufgeben\r\n        setTimeout(function() {\r\n            dwFrameworkCheckOrientationOrSizeChanged(checkCounter + 1)\r\n        }, 100);\r\n    }\r\n}\r\n\r\n/**\r\n * Methode liefert zurück, ob bei einem resize Event sich auch die Display-Größe verändert hat\r\n *\r\n * Notwendig, weil resize Events (bei älteren Browsern) auch gerufen werden, wenn sich einzelne DOM Elemente in der\r\n * Größe geändert haben, und bei einem (richtigen) resize Contextmenü und Tooltips beendet werden sollen\r\n *\r\n * Die Methode muss vor dwFrameworkCheckOrientationOrSizeChanged aufgerufen werden - andernfalls wird immer false zurückgeliefert.\r\n */\r\nfunction dwFrameworkDisplayResized() {\r\n    if (!dwFrameworkInitFinished) {\r\n        return false;\r\n    }\r\n    var displayWidth = dwUtilsGetViewportWidth();\r\n    var displayHeight = dwUtilsGetViewportHeight();\r\n\r\n    // so lange den Check über setTimeout() wiederholen, bis die Ausrichtungsänderung auch im Body durch eine veränderte\r\n    // Breite und Höhe angekommen ist (dies kann unter Android anscheinend ein paar Millisekunden dauern...)\r\n    var displayIsSame = (framework_displayWidth == framework_displayHeight);\r\n    var displayWidthIsChanged = (framework_displayWidth != displayWidth);\r\n    var displayHeightIsChanged = (framework_displayHeight != displayHeight);\r\n    return (displayIsSame || displayWidthIsChanged || displayHeightIsChanged);\r\n}\r\n\r\n/**\r\n * Es kann sein, das das onresize (und damit dwRelayout) mehrfach gerufen wird (z.B. Android Browser)\r\n * Verwendet man die Methode dwFrameworkFireOnceForEvent wird die eigentliche Funktion erst dann gerufen,\r\n * wenn 100ms kein neuer Funktions-Aufruf verzeichnet wurde\r\n */\r\nfunction dwFrameworkFireOnceForEvent(cacheId, functionToFire) {\r\n    var threadId = dwFrameworkThreadIdCache[cacheId];\r\n    if (threadId != null) {\r\n        clearTimeout(threadId);\r\n        delete dwFrameworkThreadIdCache[cacheId];\r\n    }\r\n    var args = arguments;\r\n    threadId = setTimeout(function() {\r\n        if (functionToFire) { // Methode gefunden ...\r\n            // http://stackoverflow.com/questions/676721/calling-dynamic-function-with-dynamic-parameters-in-javascript\r\n            this[functionToFire].apply(this, Array.prototype.slice.call(args, 2));\r\n        }\r\n        delete dwFrameworkThreadIdCache[cacheId];\r\n    }, 100);\r\n    dwFrameworkThreadIdCache[cacheId] = threadId;\r\n}\r\n\r\nvar softkeyboardFix = new SoftkeyboardFix();\r\n\r\n/**\r\n * Klasse, die das spezielle Verhalten beim der Softwaretastatur bei Andriod und Edge handelt\r\n * siehe: https://confluence.docware.de/x/EQADB  (Android: Eingabefelder nicht von Softtastatur überdecken)\r\n *\r\n * In IE11 oder Firefox funktioniert der Debug Modus nicht - hier kommt es nur kurz zu einem Resize-Flackern\r\n * @constructor\r\n */\r\nfunction SoftkeyboardFix() {\r\n    var _self = this;\r\n    var debugMode = false;\r\n    var debugShowInstallFrame = false;\r\n    var isInstalled = false;\r\n    var lastWidth = -1;\r\n    var lastHeight = -1;\r\n    var heightOfBrowserHeader = -1;\r\n    var widthToHeightMap = {};\r\n    var lastHeightOfGetHeight = -1;\r\n\r\n    /**\r\n     * Prüft, ob für diesen Browser/Betriebsystem der Fix nötig ist\r\n     * @returns {boolean}\r\n     */\r\n    var needFix = function() {\r\n        if (debugMode) {\r\n            return true;\r\n        }\r\n        // Bei Android Geräten immer den fix verwenden, da wir hier sicher wissen dass es ich um ein Gerät handelt\r\n        // bei dem die Softkeytastatur erscheint\r\n        if (framework_isAndroid) {\r\n            return true;\r\n        }\r\n        // Ansonsten bei Firefox bzw. Offline den Fix verwenden, solange sie auf einem Touchgerät laufen, da\r\n        // auch hier die Softkeytastatur eingeblendet werden könnte und dies kein Resize auslösen darf\r\n        if (framework_isTouchBrowser && (framework_isFirefox || framework_isOffline)) {\r\n            return true;\r\n        }\r\n        return false;\r\n    };\r\n\r\n    /**\r\n     * Ein Eingabefeld hat den aktuellen Focus\r\n     * @returns {boolean}\r\n     */\r\n    var inputHasFocus = function() {\r\n        return dwUtilsIsInputTextBox(getActiveElement(document));\r\n    };\r\n\r\n\r\n    /**\r\n     * Aktuelle Höhe des Browserfensters. Mit dem Workaround um die Tastatur nicht mitzurechnen\r\n     * @returns {*}\r\n     */\r\n    var getHeight = function() {\r\n        if (!inputHasFocus()) {\r\n            // Solange kein Inputfield den Focus hat, kann man immer einfach die wirkliche Größe zurückliefern, da\r\n            // hier keine Tastatur eingeblendet sein kann\r\n            return getRealHeight();\r\n        } else {\r\n            var height;\r\n            // Jetzt wird es umständlich, da evtl. die Tastatur angezeigt wird.\r\n            // Falls für die Breite schon mal eine Höhe ermittelt wurde, nehme diese\r\n            height = widthToHeightMap[getWidth()];\r\n\r\n            if (height === undefined) {\r\n                // Ne, Noch keine Höhe da gewesen\r\n                // Falls die Höhe des Browserheaders schon bekannt ist, berechne die wahrscheinliche Höhe als screenHöhe minus Browserheader\r\n                if (heightOfBrowserHeader >= 0) {\r\n                    height = window.screen.availHeight - heightOfBrowserHeader;\r\n                } else {\r\n                    // kompletter Notausgang, hier kann man eigentlich nie landen, aber was will man machen\r\n                    // machen wir es so falsch wie ohne fix\r\n                    height = window.innerHeight;\r\n                }\r\n            }\r\n            return height;\r\n        }\r\n    };\r\n\r\n    var getRealHeight = function() {\r\n        // Kein Focus auf einem Inputfeld -> es ist sicher kein Keyboard an und die\r\n        // Höhe kann einfach vom Fenster ausgelesen werden und als Wert für später gespeichert werden\r\n        var height = window.innerHeight;\r\n        // So hoch scheint die Eingabeleiste vom Browser zu sein\r\n        heightOfBrowserHeader = window.screen.availHeight - height;\r\n        // und diesen Wert in der Map zu der Breite speichern\r\n        widthToHeightMap[getWidth()] = height;\r\n\r\n        return height;\r\n    };\r\n\r\n    /**\r\n     * Browserfensterbreite\r\n     * @returns {number}\r\n     */\r\n    var getWidth = function() {\r\n        return window.innerWidth;\r\n    };\r\n\r\n\r\n    /**\r\n     * Modifiziere den Wrapper und Body, so dass die Höhe manuell gesetzt wird und Scrolling möglich ist\r\n     * @param installfix\r\n     */\r\n    var prepareDom = function(installfix) {\r\n        isInstalled = installfix;\r\n\r\n        var bodyNode = $(\"body\");\r\n        var mainWrapper = $(\"dwmainwrapper\");\r\n\r\n        if (installfix) {\r\n            mainWrapper.style.height = getHeight() + \"px\";\r\n            if (debugShowInstallFrame) {\r\n                mainWrapper.style.border = \"2px solid red\";\r\n            }\r\n            bodyNode.style.overflow = \"auto\";\r\n            _self.setNewWidth();\r\n        } else {\r\n            mainWrapper.style.height = \"100%\";\r\n            if (debugShowInstallFrame) {\r\n                mainWrapper.style.border = \"2px solid black\";\r\n            }\r\n            bodyNode.style.overflow = \"hidden\";\r\n            lastHeight = -1;\r\n            lastWidth = -1;\r\n        }\r\n    };\r\n\r\n    /**\r\n     * Die Neu ermittelte Höhe in dem Wrapper setzen\r\n     */\r\n    this.setNewWidth = function() {\r\n        var mainWrapper = $(\"dwmainwrapper\");\r\n        mainWrapper.style.height = getHeight() + \"px\";\r\n\r\n        lastHeight = getHeight();\r\n        lastWidth = getWidth();\r\n\r\n    };\r\n\r\n\r\n    /**\r\n     * Prüfe, ob sich die Höhe oder Breite wirklich geändert hat\r\n     * @returns {boolean}\r\n     */\r\n    this.reallySizeChanged = function() {\r\n        if (lastWidth != getWidth()) {\r\n            return true;\r\n        }\r\n        if (lastHeight != getHeight()) {\r\n            return true;\r\n        }\r\n\r\n        return false;\r\n    };\r\n\r\n    /**\r\n     * Abgleich zwischen Wrapper und Browser Größenberechnung.\r\n     *\r\n     * Die Tastatur ist eingeblendet, wenn die berechnete Browser Größe kleiner ist, als die im Wrapper hinterlegte\r\n     * @returns {boolean}\r\n     */\r\n    this.isSoftkeyboardVisible = function() {\r\n        var realSizeChange = this.reallySizeChanged();\r\n        if (realSizeChange) {\r\n            return false;\r\n        }\r\n        if (lastHeight === -1) {\r\n            return false;\r\n        }\r\n        return lastHeight > dwUtilsGetViewportHeight();\r\n    };\r\n\r\n    /**\r\n     * Modifiziere den Wrapper, falls es beim diesem Browser/Betriebssystem nötig ist\r\n     * @returns {boolean}\r\n     */\r\n    this.install = function() {\r\n        if (needFix()) {\r\n            if (!isInstalled) {\r\n                prepareDom(true);\r\n            }\r\n            return true;\r\n        } else {\r\n            if (isInstalled) {\r\n                prepareDom(false);\r\n            }\r\n        }\r\n        return false;\r\n    };\r\n\r\n    this.isInstalled = function() {\r\n        return isInstalled;\r\n    }\r\n}\r\n\r\nfunction dwFrameworkOnResize() {\r\n    dwFrameworkFireOnceForEvent(\"dw_framework_onresize\", \"dwRelayout\");\r\n}\r\n\r\nfunction dwFrameworkGetMajorBrowserVersion(userAgent, versionIndicator) {\r\n    var versionIndicatorIdx = userAgent.indexOf(versionIndicator);\r\n    var version = \"\";\r\n    if (versionIndicatorIdx > -1) {\r\n        var withoutIndicator = userAgent.substring(versionIndicatorIdx + versionIndicator.length);\r\n        withoutIndicator = dwUtilsTrimLeft(withoutIndicator);\r\n        version = parseInt(withoutIndicator);\r\n    }\r\n    if (version == \"\") {\r\n        if (versionIndicator.toLowerCase() == \"msie\") {\r\n            return 8;\r\n        } else {\r\n            return 1;\r\n        }\r\n    }\r\n    return version;\r\n}\r\n\r\nfunction dwFrameworkGetOffsetSupport() {\r\n    var bodyNode = $(\"body\");\r\n    var noVisibilityStyle = \"visibility:hidden;\";\r\n    var noBorderStyle = \"border:0;\";\r\n    var noPaddingStyle = \"padding:0;\";\r\n    var positionAbsoluteToTopLeftCornerStyle = \"position:absolute;top:0;left:0;\";\r\n    var noMarginStyle = \"margin:0;\";\r\n\r\n    var childStyle = positionAbsoluteToTopLeftCornerStyle + noMarginStyle + noPaddingStyle +\r\n                     \"width:1px;height:1px;border:5px solid #000000;\";\r\n    var containerStyle = positionAbsoluteToTopLeftCornerStyle + noMarginStyle + noVisibilityStyle +\r\n                         \"width:1px;height:1px;\" + noBorderStyle;\r\n    var childDivHtml = \"<div style=\\\"\" + childStyle + \"\\\" ><div></div></div>\";\r\n    var childTableHtml = \"<table style=\\\"\" + childStyle + \"\\\" cellpadding='0' cellspacing='0'><tr><td></td></tr></table>\";\r\n\r\n    var container = document.createElement(\"div\");\r\n    container.style.cssText = containerStyle;\r\n    bodyNode.insertBefore(container, bodyNode.firstChild);\r\n\r\n    var docFrag = document.createDocumentFragment();\r\n    docFrag.appendChild(dwDomParseStringToNodes(childDivHtml));\r\n    docFrag.appendChild(dwDomParseStringToNodes(childTableHtml));\r\n    container.appendChild(docFrag);\r\n\r\n    var childDiv = dwDomGetChildAtIndex(container, 0);\r\n    var subChildDiv = dwDomGetChildAtIndex(childDiv, 0); // Verwendet für Offset-Berechnung (wird Border berücksichtigt)\r\n    var childTable = dwDomGetChildAtIndex(container, 1);\r\n\r\n    var isBorderIncludedInOffset = (subChildDiv.offsetTop) && (subChildDiv.offsetTop == 5);\r\n    var isBorderIncludedInTableOffset = (childTable.offsetTop) && (childTable.offsetTop == 5);\r\n\r\n    childDiv.style.overflow = \"hidden\";\r\n    childDiv.style.position = \"relative\";\r\n\r\n    var isBorderSubstractedForInvisibleOverflow = (subChildDiv.offsetTop) && (subChildDiv.offsetTop == -5);\r\n\r\n    bodyNode.removeChild(container);\r\n    container = childDiv = subChildDiv = childTable = null;\r\n    var offsetSupport = {\r\n        isBorderIncludedInOffset: isBorderIncludedInOffset,\r\n        isBorderIncludedInTableOffset: isBorderIncludedInTableOffset,\r\n        isBorderSubstractedForInvisibleOverflow: isBorderSubstractedForInvisibleOverflow\r\n    };\r\n    return offsetSupport;\r\n}\r\n\r\nfunction dwFrameworkDefaultClose(event) {\r\n    if (typeof (dwTableColumnResizeDragStopEvent) != \"undefined\") {\r\n        dwTableColumnResizeDragStopEvent(event);\r\n    }\r\n    if (typeof (dwSplitDragStopEvent) != \"undefined\") {\r\n        dwSplitDragStopEvent(event);\r\n    }\r\n}\r\n\r\nfunction dwFrameworkOpenWindow(windowUniqueId, url, width, height, resizable) {\r\n    var opened = false;\r\n    try {\r\n        opened = window.open(url, windowUniqueId,\r\n                             \"width=\" + width + \",height=\" + height + \",location=no,menubar=no,resizable=\" + (resizable ? \"yes\" : \"no\")\r\n                             + \",status=no,titlebar=no,toolbar=no\", false);\r\n    } catch (exception) {\r\n    }\r\n    return opened;\r\n}\r\n\r\nfunction dwFrameworkOpenTab(url) {\r\n    var opened = false;\r\n    try {\r\n        opened = window.open(url, \"_blank\");\r\n    } catch (exception) {\r\n    }\r\n    return opened;\r\n}\r\n\r\nfunction dwFrameworkSetAsynchronousFlag(event, doAsynchronousCall) {\r\n    if (!dwFrameworkInitFinished) {\r\n        return;\r\n    }\r\n    if (event) {\r\n        event.asynchronous = doAsynchronousCall;\r\n        if (framework_isIE8 || framework_isIELegacyMode) {\r\n            window.dw_asynchronous = doAsynchronousCall;\r\n        }\r\n    }\r\n}\r\n\r\nfunction dwFrameworkShutdownFrameworkBrowser() {\r\n    // Bei einem per JavaScript getriggerten Refresh das Framework natürlich nicht deaktivieren\r\n    if (!framework_isActive || dwFrameworkRefreshingPage) {\r\n        dwFrameworkRefreshingPage = false;\r\n        return;\r\n    }\r\n    framework_isActive = false;\r\n\r\n    if (!dwFrameworkCloseWindowSilently) {\r\n        // URL zur Banachrichtigung des Servers über das geschlossene Fenster; funktioniert je nach Browser leider nicht\r\n        // per AJAX oder window.open(url, '_self') -> XMLHttpRequest verwenden\r\n        try {\r\n            var closeSubWindowUrl = \"app?closedSubWindow=\" + dwFrameworkGetRootWindowId() + \"&tabWindowId=\" + dwFrameworkGetTabWindowId();\r\n            var xmlHttp = dwUtilsCreateXmlHttpRequest(true);\r\n            if (xmlHttp != null) {\r\n                xmlHttp.open(\"GET\", closeSubWindowUrl, framework_isChrome); // Nur bei Chrome muss/darf der xmlHttp-Request asynchron sein\r\n                xmlHttp.send(null);\r\n\r\n                // Bei Chrome wegen dem asynchronen xmlHttp-Request beim Schließen vom MasterRootWindow noch kurz warten,\r\n                // damit evtl. geöffnete nicht-modale Fenster noch geschlossen werden können\r\n                if (framework_isChrome && ((typeof (framework_isNonModalWindow) == 'undefined') || !framework_isNonModalWindow) && !dwFrameworkEmbeddedInShop) {\r\n                    sleep(2000);\r\n                }\r\n            }\r\n        } catch (exception) {\r\n            // Ignorieren\r\n        }\r\n    }\r\n}\r\n\r\nfunction dwFrameworkGetTabWindowId() {\r\n    return document.getElementById(\"body\").getAttribute(\"tabWindowId\")\r\n}\r\n\r\nfunction dwFrameworkShowLostConnectionBanner(countdown) {\r\n    $(\"lostConnectionBanner\").style.display = \"block\";\r\n    $(\"lostConnectionBannerTimer\").innerHTML = countdown + \"s\";\r\n}\r\n\r\nfunction dwFrameworkHideLostConnectionBanner() {\r\n    $(\"lostConnectionBanner\").style.display = \"none\";\r\n}\r\n\r\nfunction dwFrameworkInitWindow(windowId) {\r\n    // Firefox fixes\r\n    if (framework_isFirefox) {\r\n        dwFrameworkFixAutocomplete();\r\n    }\r\n}\r\n\r\n/**\r\n * Braucht man für Firefox. Dort ist das setzen von unbekannten Parametern nur über setAttribute möglich.\r\n */\r\nfunction dwFrameworkFixAutocomplete() {\r\n    for (var i = 0; i < document.forms.length; i++) {\r\n        document.forms[i].setAttribute(\"autocomplete\", \"off\");\r\n    }\r\n}\r\n\r\n/**\r\n * Skript läuft alle DWFRAMEWORK_CALLBACK_DELAY Millisekunden (aktuell 1 Sekunde)\r\n */\r\nfunction dwFrameworkPing() {\r\n    if ((!framework_isActive) || (!framework_isWithPing)) {\r\n        if (typeof (framework_pingId) != \"undefined\") {\r\n            clearInterval(framework_pingId);\r\n        }\r\n        return;\r\n    }\r\n    // Wenn er sowieso schon was macht, dann muss er keinen Ping senden\r\n    // Falls andere Sachen in der Liste stehen würden (außer Ping),\r\n    // dann macht das auch nichts, weil er nach dem aktuellen Senden\r\n    // dann nochmal direkt nachschaut, ob sich etwas neues angesammelt hat\r\n    // und er dann gleich wieder sendet\r\n    if (!dwAjaxCurrentlySending) {\r\n        var shouldPing = false;\r\n        if (framework_childThreadCount > 0) {\r\n            // Alle DWFRAMEWORK_CALLBACK_DELAY ms schauen ob etwas neues da ist\r\n            shouldPing = true;\r\n        } else {\r\n            // Nur alle 3 Minuten einen Ping machen wg. Refresh der Session\r\n            if (new Date().getTime() - framework_lastServerRequest > 3 * 60 * 1000) {\r\n                shouldPing = true;\r\n            }\r\n        }\r\n        if (shouldPing && typeof (dwAjaxAddUpdate) != \"undefined\") {\r\n            // Wenn es nur ein Ping ist, dann ignorieren wir Fehler (Server nicht erreichbar, soll ja so sein, weil\r\n            // mittendrin die Verbindung auch mal weg sein kann und es trotzdem richtig weiterläuft)\r\n            var shouldIgnoreErrors = (dwAjaxUpdates.length == 0);\r\n            dwAjaxAddUpdate(\"ping\", false, true);\r\n            dwAjaxSendUpdates(shouldIgnoreErrors, true);\r\n        }\r\n    }\r\n}\r\n\r\nfunction dwHelperDoNothing() {\r\n} // Verwendet als Trennzeichen zwischen den Methoden z.B. in der dwRelayout Methode\r\n\r\n/**\r\n * Überprüft ob die übergebenen unique Ids noch im DOM erreichbar sind\r\n * @param uniqueIds string : komma separierter String von uniqueids\r\n * @return array : array von Indizes. Indexposition definiert, welcher Methoden-Index aus einer Funktion gelöscht werden soll\r\n */\r\nfunction dwFrameworkCheckIds(uniqueIds) {\r\n    var uniqueIdsToCheck = dwUtilsSplit(uniqueIds, \",\", false);\r\n    var invalidIdxs = new Array();\r\n    for (var i = 0; i < uniqueIdsToCheck.length; i++) {\r\n        var uniqueIdToCheck = uniqueIdsToCheck[i];\r\n        if (!$(uniqueIdToCheck)) {\r\n            invalidIdxs.push(i);\r\n        }\r\n    }\r\n    return invalidIdxs;\r\n}\r\n\r\n/**\r\n * Entfernt interne Methodenaufrufe, die sich auf nicht mehr existierende IDs beziehen und korrigiert die Parameter\r\n * der Methode \"dwFrameworkCheckIds\"\r\n * Dieser Mechanismus setzt voraus, dass die Methoden durch DWFRAMEWORK_NEXT_METHOD_STRING getrennt sind\r\n * @param functionNameToCleanup string : Name der Funktion, die bereinigt werden soll\r\n * @param invalidIdxs array : String Array von IDs die nicht mehr zugeordnet werden konnten\r\n */\r\nfunction dwFrameworkCleanupDeprecatedMethods(functionNameToCleanup, functionNameOfCleanup, checkFunctionNameOfCleanup, invalidIdxs) {\r\n    if (!(typeof window[functionNameToCleanup] == \"function\")) {\r\n        // Es kann nur eine Methode bereinigt werden, die bereits vorhanden ist.\r\n        // Im Fall von z.B. dwRelayout gehen wir davon aus, dass diese Methode vorher generiert worden sein muss (GuiWindow)\r\n        alert(\"Exception: Function \" + functionNameToCleanup + \" not found.\\n\" +\r\n              \"Failed to run dwFrameworkCleanupDeprecatedMethods.\");\r\n    }\r\n    var func = window[functionNameToCleanup].toString();\r\n    func = dwUtilsStripFromFunction(func, true, true); // function() {...} abgeschnitten\r\n    func = dwUtilsTrim(func); // Left + Right Trim\r\n    // Bereinigung der einzelnen Methoden-Aufrufe (herauslöschen von Methoden die zu nicht vorhandenen IDs gehören)\r\n    var funcCommands = dwUtilsSplit(func, DWFRAMEWORK_CLEANUP_FUNCTION_NEXT_METHOD_STRING, false);\r\n    var processedCommands = new Object();\r\n    for (var i = 0, j = 0; i < funcCommands.length; i++) {\r\n        var funcCommand = funcCommands[i];\r\n        var invalidIdx = invalidIdxs[j];\r\n        if (i == invalidIdx) {\r\n            j++;\r\n        } else if (processedCommands[funcCommand] == \"set\") {\r\n            // Bereits verarbeitet - Duplikat ignorieren und aus Check-Methode entfernen\r\n            invalidIdxs.push(i);\r\n        } else {\r\n            processedCommands[funcCommand] = \"set\";\r\n        }\r\n    }\r\n\r\n    func = \"\";\r\n    for (var processedCommand in processedCommands) {\r\n        if (func.length > 0) {\r\n            func += DWFRAMEWORK_CLEANUP_FUNCTION_NEXT_METHOD_STRING;\r\n        }\r\n        func += processedCommand;\r\n    }\r\n    window[functionNameToCleanup] = new Function(func);\r\n\r\n    // Bereinigung der Cleanup Methode\r\n\r\n    if (!(typeof window[functionNameOfCleanup] == \"function\")) {\r\n        // Es kann nur eine Methode bereinigt werden, die bereits vorhanden ist.\r\n        // Im Fall von z.B. dwRelayout gehen wir davon aus, dass diese Methode vorher generiert worden sein muss (GuiWindow)\r\n        alert(\"Exception: Function \" + functionNameOfCleanup + \" not found.\\n\" +\r\n              \"Failed to run dwFrameworkCleanupDeprecatedMethods.\");\r\n    }\r\n    var cleanupFunction = window[functionNameOfCleanup].toString();\r\n    cleanupFunction = dwUtilsStripFromFunction(cleanupFunction, true, true); // function() {...} abgeschnitten\r\n    cleanupFunction = dwUtilsTrim(cleanupFunction); // Left + Right Trim\r\n\r\n    var innerFunctionName = checkFunctionNameOfCleanup;\r\n    var innerFunctionIdx = cleanupFunction.indexOf(innerFunctionName + \" (\");\r\n    if (innerFunctionIdx == -1) {\r\n        innerFunctionIdx = cleanupFunction.indexOf(innerFunctionName + \"(\");\r\n    }\r\n    if (innerFunctionIdx == -1) {\r\n        alert(\"Exception: Inner function string '\" + innerFunctionName + \"' not found.\");\r\n        return; // Methode nicht gefunden\r\n    }\r\n    var innerFunctionEnd = \");\";\r\n    var innerFunctionEndIdx = cleanupFunction.indexOf(innerFunctionEnd, innerFunctionIdx + innerFunctionName.length) + innerFunctionEnd.length;\r\n    var innerFunction = cleanupFunction.substring(innerFunctionIdx, innerFunctionEndIdx);\r\n    var parameters = dwUtilsGetFunctionParameters(innerFunction);\r\n    var parameterValue = \"\";\r\n    if (parameters.length == 1) {\r\n        parameterValue = parameters[0].replace(/\"/g, \"\");\r\n    }\r\n    parameters = dwUtilsSplit(parameterValue, \",\", false);\r\n    invalidIdxs.sort(dwUtilsSortNumberAsc);\r\n    var cleanParameters = new Array();\r\n    for (var i = 0, j = 0; i < parameters.length; i++) {\r\n        var invalidIdx = invalidIdxs[j];\r\n        if (i == invalidIdx) {\r\n            j++;\r\n        } else {\r\n            var param = parameters[i];\r\n            cleanParameters.push(param);\r\n        }\r\n    }\r\n    parameterValue = cleanParameters.join(\",\");\r\n\r\n    var modifiedFunc = cleanupFunction.substring(0, innerFunctionIdx).concat(innerFunctionName).concat(\"(\\\"\").concat(parameterValue).concat(\"\\\");\").concat(cleanupFunction.substring(innerFunctionEndIdx));\r\n    window[functionNameOfCleanup] = new Function(modifiedFunc);\r\n}\r\n\r\n/**\r\n * Repositioniert bei Bedarf den zentrierten Knoten innerhalb eines Parent Container (wie Scrollpane).\r\n * Bei Verwendung des Gridbag Layouts werden die Inhalte zentriert dargestellt, sofern es keine Zelle gibt, die eine\r\n * Gewichtung gesetzt bekommen hat. Bei Verwendung des Flow-Layouts wird der Container immer zentriert\r\n * Ist der darzustellende Inhalt in dieser Dimension größer als der umschliessende Container (z.B. Scrollpane), darf der Inhalt nicht mehr\r\n * zentriert sondern an der Kante anliegend dargestellt werden. (overflow hat Probleme, bei negativem margin-top / margin-left)\r\n *\r\n * Ist der darzustellende Inhalt kleiner als die Scrollpane muss entsprechend die Zentrierung wieder gewährleistet werden\r\n * @param uniqueId string : UniqueId der Gui Komponente, der das Gridbag Layout zugeordnet ist (z.B. GuiPanel)\r\n * @param scrollPaneUniqueId string : UniqueId der GuiScrollpane\r\n * @param navigationPath string : Navigationspfad von der Gui Komponente (mit Layout) zum zentrierten DOM Knoten\r\n * @param styleName : string : StyleName der angepasst werden soll (height / width). Andere Stylenamen nicht zulässig!\r\n */\r\nfunction dwFrameworkRelayoutCenteredNodeInParentContainer(uniqueId, scrollPaneUniqueId, navigationPath, styleName) {\r\n    var control = $(uniqueId);\r\n    var scroller = $(scrollPaneUniqueId);\r\n    if ((control == null) || (scroller == null)) {\r\n        // In der Relayout-Methode sind ggf. noch Verweise auf nicht mehr existierende Komponenten\r\n        // Im Anschluss an den fehlerhaften Aufruf wird die Methode automatisch aus dwRelayout gelöscht (dwFrameworkModifyInnerComponentJsFunction)\r\n//        dwUtilsDebugWrite(\"Exception: Either layout component or scrollpane not found. Failed to run dwFrameworkRelayoutCenteredNodeInParentContainer. - \" + uniqueId + \" / \" + scrollPaneUniqueId);\r\n        return;\r\n    }\r\n    var centeredNode = dwDomFindContainer(control, navigationPath, false);\r\n    var offsetName = \"offset\" + styleName.substring(0, 1).toUpperCase() + styleName.substring(1);\r\n    var scrollDim = scroller[offsetName];\r\n    var styleTopOrLeft = (styleName == \"height\") ? \"top\" : \"left\";\r\n    var styleMarginTopOrLeft = \"margin\" + styleTopOrLeft.substring(0, 1).toUpperCase() + styleTopOrLeft.substring(1);\r\n    // offsetGröße der centeredNode entspricht ggf. nicht der Größe des Inhalts (z.B. durch left / right Attribute beeinflusst)\r\n    // Aktueller Wert des Containers wird aufgrund der offsetGrößen der Kind-Container bestimmt\r\n    var containers = dwDomGetElementChildNodes(centeredNode);\r\n    var styleValue = 0;\r\n    for (var i = 0; i < containers.length; i++) {\r\n        var container = containers[i];\r\n        var containerOffset = container[offsetName];\r\n        var containerPosition = dwUtilsGetCoords(container, centeredNode);\r\n        var positionYorX = (styleName == \"height\") ? \"y\" : \"x\";\r\n        styleValue = Math.max(styleValue, containerOffset + containerPosition[positionYorX]);\r\n    }\r\n    if (scrollDim < styleValue) {\r\n        // Zentrierung von guilayoutgridbag_centered entfernen\r\n        dwDomSetStyle(centeredNode, styleTopOrLeft, \"0px\");\r\n        dwDomSetStyle(centeredNode, styleMarginTopOrLeft, \"0px\");\r\n    } else {\r\n        // Zentrierung wiederherstellen ...\r\n        dwDomSetStyle(centeredNode, styleTopOrLeft, \"50%\");\r\n        dwDomSetStyle(centeredNode, styleMarginTopOrLeft, -(Math.floor(styleValue / 2)) + \"px\");\r\n    }\r\n}\r\n\r\nfunction skipErrorForBrowser(message) {\r\n    // Firebug macht manchmal Probleme in QFTest. Meldungen dieses Scripts sollten wir ignorieren\r\n    if (framework_isDevelopmentQFTest && (typeof (url) != \"undefined\") && (url.indexOf(\"http://getfirebug.com/firebug-lite.js#startOpened\") == 0)) {\r\n        return true;\r\n    }\r\n\r\n    if (framework_isDevelopmentQFTest && message && (message.includes(\"_qf\"))) {\r\n        return true;\r\n    }\r\n\r\n    let showError = isDolphinBrowser();\r\n\r\n    if (!showError) {\r\n        showError = isXiaomiBrowser();\r\n    }\r\n\r\n    return showError;\r\n}\r\n\r\nfunction isDolphinBrowser() {\r\n    //Wenn es kein mobiler Browser ist, muss die u.s. Prüfung garnicht durchlaufen werden\r\n    if (!framework_isMobileBrowser) {\r\n        return false;\r\n    }\r\n\r\n    var userAgentString = navigator.userAgent.toLowerCase();\r\n\r\n    //Dolphin Browser identifizieren\r\n    //Leider ist dieser Browser nur schwer zu identifizieren, da er sich als Mozilla und Chrome Browser gleichzeitig ausgibt.\r\n    //Die eigentliche Unterscheidung dieses Browser liegt im Kürzel \"wv\".\r\n    //Es ist allerdings nicht sichergestellt, das sich der UserAgent- String dieses Browser irgendwann mal ändert\r\n    //Da nicht genau klar ist, ob die Fehlermeldung für alle mobilen Browser abgeschalten werden kann,\r\n    //werden vorläufig nur die beide u.s. Browser ausgenommen\r\n    let mozillaStringIndicator = userAgentString.indexOf(\"mozilla\");\r\n    if (mozillaStringIndicator > -1) {\r\n        let chromeStringIndicator = userAgentString.indexOf(\"chrome\");\r\n        if (chromeStringIndicator > -1) {\r\n            let number = userAgentString.indexOf(\"wv\");\r\n            if (number > -1) {\r\n                let versionNumber = userAgentString.indexOf(\"version/4.0\");\r\n                if (versionNumber > -1) {\r\n                    return true;\r\n                }\r\n            }\r\n        }\r\n    }\r\n    return false;\r\n}\r\n\r\nfunction isXiaomiBrowser() {\r\n    if (!framework_isMobileBrowser) {\r\n        return false;\r\n    }\r\n\r\n    var userAgentString = navigator.userAgent.toLowerCase();\r\n    //Xiaomi-Browser identifizieren\r\n    //Dieser Browser sendet seinen Namen als Klarstring\r\n    let xiaomiStringIndicator = userAgentString.indexOf(\"xiaomi\")\r\n    if (xiaomiStringIndicator > -1) {\r\n        return true;\r\n    }\r\n}\r\n\r\n/**\r\n * Gibt eine Alert-Nachricht mit der aktuellen Fehlermeldung aus (z.B. generiert durch 'throw')\r\n *\r\n * Der onError Mechanismus ist (noch nicht) standardisiert, wird allerdings von IE und Firefox unterstützt.\r\n * Ist im Internet Explorer der Debugger aktiviert, wird der onerror Handler umgangen und der Debugger angezeigt\r\n *\r\n * Aus Sicherheitsgründen hat sich z.B. die Mozilla Foundation dazu entschieden, das 'caller' Objekt nicht zu füllen\r\n * Die aufrufende Methode kann daher nicht implizit ermittelt werden.\r\n * siehe https://bugzilla.mozilla.org/show_bug.cgi?id=355430\r\n * @param message Fehlermeldungs-Text. Im IE lediglich die Aussage, dass ein nicht abgefangener Fehler aufgetreten ist\r\n * @param url   URL Pfad zur Javascript Datei, in der der Fehler aufgetreten ist. Nur IE\r\n * @param line  Zeile in der der Javascript Fehler aufgetreten ist. Nur IE\r\n */\r\nfunction dwFrameworkErrorHandler(message, url, line, col, error) {\r\n\r\n    //Workaround für den Xiaomi und Dolphin Browser, der offensichtliche Fehler in der Renderengine hat,\r\n    //die zu einem Fehler führen\r\n    //Nach Rückspräche mit Andreas Hofmann und Manfred Mälzer, wird die OnErrorMessage für die beiden Browser deaktiviert\r\n    //Sollten noch weitere Fehler mit diesen Browsern auftreten so sollte überlegt werden, die Erkennung In der\r\n    //Klasse J2EEServlet , Methode getBrowserInfo ergänzt werden\r\n    if (skipErrorForBrowser(message)) {\r\n        return;\r\n    }\r\n\r\n\r\n    if (DWAJAX_LOG_ERRORS) {\r\n        var logLevel = dwFrameworkInitFinished ? \"error\" : \"debug\";\r\n        // Direkter Aufruf von \"dwAjaxToServer\" - damit die Nachricht zuverlässig vor Anzeige eines Alerts zum Server übertragen wird (dwAjaxCurrentlySending könnte 'true' sein)\r\n        dwAjaxToServer(new Date().getTime(), false, [logLevel + \"@DW@html@DW@\" + (message || \"\") + \"@DWSUB@\" + (url || \"\") + \"@DWSUB@\" + (line || \"\") + \"@DWSUB@\" + dwFrameworkGetStacktrace(\"\")], true, new Date().getTime());\r\n    }\r\n\r\n    if (message === \"ResizeObserver loop limit exceeded\") {\r\n        // Fehlermeldung wird in Chrome nur in der Console protokolliert, ohne sich real auf die Darstellung auszuwirken.\r\n        // Aufgetreten bei der Darstellung von mp4 Dateien in der Dokumentation.\r\n        // In der Fehlerbehandlung wird die Nachricht nun geschluckt. So lässt sich zumindest die mp4 Datei laden und manuell abspielen.\r\n        return;\r\n    }\r\n\r\n    if (message.endsWith(\"ReferenceError: member called after shutdown\")) {\r\n        return;\r\n    }\r\n\r\n    var output = \"HTML Exception\\n\\n\";\r\n    output += \"Message: \" + message + \"\\n\\n\";\r\n    if (arguments.length > 1) {\r\n        output += \"URL: \" + url + \"\\n\";\r\n    }\r\n    if (arguments.length > 2) {\r\n        output += \"Line: \" + line + \"\\n\";\r\n    }\r\n    if (dwFrameworkInitFinished) {\r\n        dwDialogShowErrorDialog(output);\r\n    }\r\n    return true;\r\n}\r\n\r\nfunction dwFrameworkGetStacktrace(exception) {\r\n    if (exception && exception.stack) {\r\n        return exception.stack;\r\n    }\r\n    var stack = [];\r\n    var func = arguments.callee.caller;\r\n    while (func) {\r\n        var name = func.name || dwUtilsGetFunctionName(func.toString());\r\n        stack.push(name);\r\n        func = func.caller;\r\n    }\r\n    return stack.join(\"\\n\");\r\n}\r\n\r\nfunction dwFrameworkExceptionHandler(exception) {\r\n    if ((typeof (framework_isActive) == 'undefined') || !framework_isActive) {\r\n        return;\r\n    }\r\n\r\n    var name = exception.name || \"Error\";\r\n    var message = exception.message || exception || \"unknown\";\r\n\r\n    if (framework_isDevelopmentQFTest && message.includes(\"_qf\")) {\r\n        return;\r\n    }\r\n\r\n    var url = \"\";\r\n    var line = \"\";\r\n    var stack = dwFrameworkGetStacktrace(exception);\r\n\r\n    if (DWAJAX_LOG_ERRORS) {\r\n        var logLevel = dwFrameworkInitFinished ? \"error\" : \"debug\";\r\n        // Direkter Aufruf von \"dwAjaxToServer\" - damit die Nachricht zuverlässig vor Anzeige eines Alerts zum Server übertragen wird (dwAjaxCurrentlySending könnte 'true' sein)\r\n        dwAjaxToServer(new Date().getTime(), false, [logLevel + \"@DW@html@DW@\" + name + \": \" + message + \"@DWSUB@\" + url + \"@DWSUB@\" + line + \"@DWSUB@\" + stack], true, new Date().getTime());\r\n    }\r\n    if (DWAJAX_SHOW_ERRORS && dwFrameworkInitFinished) {\r\n        dwDialogShowErrorDialog(name + \": \" + message + \"\\n\\nStacktrace:\\n\" + stack);\r\n    }\r\n}\r\n\r\n/**\r\n * Klick für Auswahl in einer Tabelle ans Framework übermitteln.\r\n * Dabei müssen Parameter für die angeklickte Zeile und Strg übermittelt werden.\r\n * @param event\r\n * @param tableId\r\n * @param index\r\n * @param windowId\r\n */\r\nfunction dwFrameworkTableRowSelection(event, tableId, index, windowId) {\r\n    var clickedRowInput = $(tableId + \"_clickedRow\");\r\n    clickedRowInput.value = index;\r\n    var strgInput = $(windowId + \"_strgKeyPressed\");\r\n    strgInput.value = event.ctrlKey;\r\n    dwFrameworkSubmitForm(tableId, tableId, \"tableSelectionEvent\");\r\n}\r\n\r\n/**\r\n * Klick für Sortierung in einer Tabelle ans Framework übermitteln.\r\n * Dabei muss ein Parameter für die angeklickte Spalte übermittelt werden.\r\n * @param tableId\r\n * @param index\r\n */\r\nfunction dwFrameworkTableSort(tableId, index) {\r\n    var clickedColumnInput = $(tableId + \"_clickedColumn\");\r\n    clickedColumnInput.value = index;\r\n    dwFrameworkSubmitForm(tableId, tableId, \"tableColumnSortedEvent\");\r\n}\r\n\r\nvar calculatedTextSizes = [];\r\n\r\n/**\r\n * Ermittelt die Größe eines Textes, indem ein dummy Text-div eingefügt wird und seine Größe dadurch vom Browser\r\n * berechnet wird. Anschließend speichert man sich die Größe, schmeißt das Element wieder weg und feuert das Event, dass\r\n * dem Control sagt welche Größe es wirklich haben müsste.\r\n *\r\n * @param fontFamily\r\n * @param fontSize\r\n * @param fontStyle\r\n * @param fontWeight\r\n * @param params        Liste der guids/Texte, die berechnet werden sollen einer guid folgt immer der dazugehörige Text\r\n */\r\nfunction dwFrameworkMeasureTextSize(fontFamily, fontSize, fontStyle, fontWeight, params) {\r\n    const hiddenDiv = document.createElement(\"div\");\r\n    // Absolute und ganz weit oben links, damit keine Scrollbox erscheint.\r\n    // display none darf man nicht verwenden, sonst hat das Control die Größe 0\r\n    hiddenDiv.style.visibility = \"hidden\";\r\n    hiddenDiv.style.position = \"absolute\";\r\n    hiddenDiv.style.left = \"-1000px\";\r\n    hiddenDiv.style.top = \"-1000px\";\r\n    hiddenDiv.style.zIndex = 1;\r\n\r\n    // Font einstellen\r\n    hiddenDiv.style.fontFamily = fontFamily;\r\n    hiddenDiv.style.fontSize = fontSize;\r\n    hiddenDiv.style.fontStyle = fontStyle;\r\n    hiddenDiv.style.fontWeight = fontWeight;\r\n\r\n\r\n    const spanNodes = [];\r\n\r\n    for (var i = 0; i < params.length - 1; i += 2) {\r\n        const guid = params[i];\r\n        const text = params[i + 1];\r\n        const spanNode = document.createElement(\"span\");\r\n\r\n        spanNode.style.fontFamily = 'inherit';\r\n        spanNode.style.fontSize = 'inherit';\r\n        spanNode.style.fontStyle = 'inherit';\r\n        spanNode.style.fontWeight = 'inherit';\r\n        spanNode.style.position = 'absolute';\r\n        spanNode.style.whiteSpace = 'pre';\r\n\r\n        // Textnode erstellen und dem Span anhängen\r\n        const textNode = document.createTextNode(text);\r\n        spanNode.appendChild(textNode);\r\n\r\n        //Jetzt den Span in das hiddenDiv\r\n        hiddenDiv.appendChild(spanNode);\r\n\r\n        spanNodes.push({\r\n                           node: spanNode,\r\n                           guid: guid,\r\n                       })\r\n    }\r\n\r\n    // Hiddendiv in den DOM und die Breite und Höhe ermitteln\r\n    const bodyNode = $(\"body\");\r\n    bodyNode.appendChild(hiddenDiv);\r\n\r\n    spanNodes.forEach(function(elem) {\r\n        calculatedTextSizes.push({\r\n                                     width: elem.node.offsetWidth,\r\n                                     height: elem.node.offsetHeight,\r\n                                     guid: elem.guid\r\n                                 })\r\n    });\r\n\r\n    // temporären Node wieder entfernen\r\n    bodyNode.removeChild(hiddenDiv);\r\n}\r\n\r\n\r\n/**\r\n * Die berechneten Textgrößen an den Server zurückmelden. Die Parameternamen sind durchnummeriert.\r\n * Also\r\n * width1=xx@DWSUB@height1=yy@DWSUB@guid1=zzz@DWSUB@width2=xx@DWSUB@height2=yy@DWSUB@guid2=zzz...\r\n * @param eventHandlerId\r\n * @param elementId\r\n */\r\nfunction dwFrameworkSendTextSizes(eventHandlerId, elementId) {\r\n    let params = '';\r\n    if (calculatedTextSizes.length > 0) {\r\n        for (var i = 0; i < calculatedTextSizes.length; i++) {\r\n            const elem = calculatedTextSizes[i];\r\n            if (i > 0) {\r\n                params += \"@DWSUB@\";\r\n            }\r\n            params += \"width\" + i + \"=\" + elem.width + \"@DWSUB@\" + \"height\" + i + \"=\" + elem.height + \"@DWSUB@\" + \"elemGuid\" + i + \"=\" + elem.guid;\r\n        }\r\n        calculatedTextSizes = [];\r\n\r\n        dwAjaxAddUpdate(eventHandlerId + \"@DW@\" + elementId + \"@DW@__custom_systemmeasuretextsize\" + \"@DW@\" + params\r\n                        + \"@DW@\", true);\r\n    }\r\n}\r\n\r\n\r\n/**\r\n * Ermittelt die Position und Ausdehnung eines Controls.\r\n * @param eventHandlerId\r\n * @param elementId\r\n */\r\nfunction dwFrameworkGetControlBounds(eventHandlerId, elementId) {\r\n    var element = $(elementId);\r\n    var absPointChild = dwUtilsGetLocationOnWindow(element, true); // Absolute Koordinaten bestimmen\r\n    var params = \"left=\" + absPointChild.x + \"@DWSUB@\" + \"top=\" + absPointChild.y + \"@DWSUB@\"\r\n                 + \"width=\" + element.offsetWidth + \"@DWSUB@\" + \"height=\" + element.offsetHeight;\r\n    dwAjaxAddUpdate(eventHandlerId + \"@DW@\" + elementId + \"@DW@__custom_controlbounds\" + elementId + \"@DW@\" + params\r\n                    + \"@DW@\", true);\r\n}\r\n\r\nfunction dwFrameworkOnPopState(event) {\r\n    var currentState = event ? event.state : history.state; // Ergebnis ist das gleiche. Fallback falls Aufruf ohne Event Objekt\r\n    if (currentState == null) {\r\n        // Wir können nichts damit anfangen\r\n        dwAjaxAddUpdate(windowId + \"@DW@browserNavigationBackward@DW@\" + \"firstCall\", true);\r\n        return;\r\n    }\r\n\r\n    if (currentState.timestamp === framework_html5HistoryCurrentState.timestamp) {\r\n        // Nichts geändert\r\n        return;\r\n    }\r\n    var windowId = dwFrameworkGetRootWindowId();\r\n    // In der Vergangenheit wurde der Timestamp mit einem \\t terminiert. Hinter diesem Wert konnten weitere Parameter ggf. angehängt sein\r\n    // Der Text wurde aber imho nie gesetzt. Vielleicht der Versuch die Bookmark Logik anzubinden.\r\n    // Im ersten PoC wurde diese Komplexität entfernt und nur mit einem reinen Timestamp gearbeitet für die Unterscheidung der Richtung\r\n    var timeCurrent = parseInt(framework_html5HistoryCurrentState.timestamp);\r\n    var timeNew = parseInt(currentState.timestamp);\r\n    if (timeNew < timeCurrent) {\r\n        dwAjaxAddUpdate(windowId + \"@DW@browserNavigationBackward@DW@\" + currentState.bookmark, true);\r\n    } else {\r\n        dwAjaxAddUpdate(windowId + \"@DW@browserNavigationForward@DW@\" + currentState.bookmark, true);\r\n    }\r\n\r\n    framework_html5HistoryCurrentState = currentState;\r\n}\r\n\r\nfunction dwFrameworkCreateBrowserHistoryState(bookmark) {\r\n    var timestamp = new Date().getTime();\r\n    bookmark = bookmark || \"\";\r\n    if (bookmark === \"\") {\r\n        bookmark = window.location.hash;\r\n        if (dwUtilsStringStartsWith(bookmark, \"#\", false)) {\r\n            bookmark = bookmark.substring(1);\r\n        }\r\n    }\r\n    return {\r\n        timestamp: timestamp,\r\n        bookmark: bookmark\r\n    }\r\n}\r\n\r\nfunction dwFrameworkPushBrowserHistoryState() {\r\n    if (!framework_html5HistoryEnabled) {\r\n        // Zugriff auf die HTML5 Browser History API muss erlaubt sein - ansonsten werden Fehler ausgelöst\r\n        return;\r\n    }\r\n    // Eintrag in die Browser History schreiben. Der interne Status (hier: timestamp) wird bei onpopstate Events an den Listener gegeben\r\n    // So lässt sich anhand des Zeitstempels der Browser History Aktion und des letzten gemerkten Zustandes erkennen,\r\n    // welche Aktion intern ausgelöst werden muss. Title und URL sind optionale Parameter. Bei leerer URL wird die aktuelle Adresse in der Browser Zeile beibehalten\r\n    var state = dwFrameworkCreateBrowserHistoryState(\"\");\r\n    framework_html5HistoryCurrentState = state;\r\n\r\n    try {\r\n        window.history.pushState(state, \"\", null);\r\n    } catch (exception) {\r\n    }\r\n}\r\n\r\nfunction dwFrameworkMovePopupStart(event, id) {\r\n    dwFrameworkMoveCurrentPopupElement = $(id);\r\n    dwFrameworkMoveCurrentPopupLastMousePos = dwUtilsGetCurrentMousePositionPerEvent(event);\r\n}\r\n\r\nfunction dwFrameworkMovePopupStop() {\r\n    dwFrameworkMoveCurrentPopupElement = null;\r\n    dwFrameworkMoveCurrentPopupLastMousePos = null;\r\n}\r\n\r\nfunction dwFrameworkMovePopup(event) {\r\n    if (dwFrameworkMoveCurrentPopupElement == null) {\r\n        return;\r\n    }\r\n    var lastMousePos = dwFrameworkMoveCurrentPopupLastMousePos;\r\n    dwFrameworkMoveCurrentPopupLastMousePos = dwUtilsGetCurrentMousePositionPerEvent(event);\r\n    var x = parseInt(dwFrameworkMoveCurrentPopupElement.style.marginLeft);\r\n    var y = parseInt(dwFrameworkMoveCurrentPopupElement.style.marginTop);\r\n    x -= (lastMousePos.x - dwFrameworkMoveCurrentPopupLastMousePos.x);\r\n    y -= (lastMousePos.y - dwFrameworkMoveCurrentPopupLastMousePos.y);\r\n    dwFrameworkMoveCurrentPopupElement.style.marginLeft = x + \"px\";\r\n    dwFrameworkMoveCurrentPopupElement.style.marginTop = y + \"px\";\r\n}\r\n\r\nfunction dwFrameworkUpdateBrowserFeatures() {\r\n    var params = \"\";\r\n    for (var featureName in FEATURE_MAPPING) {\r\n        if (!FEATURE_MAPPING.hasOwnProperty(featureName)) {\r\n            continue;\r\n        }\r\n        if (params.length > 0) {\r\n            params += \"&\";\r\n        }\r\n        params += featureName + \"=\" + hasSupportForFeature(featureName);\r\n    }\r\n    if (params) { // Mindestens ein Parameter wurde gesetzt\r\n        var baseUrl = dwUtilsGetBaseApplicationUrl();\r\n        var url = baseUrl + \"/WEB-RES/browserinfo/update?\" + params;\r\n\r\n        var xmlHttp = dwUtilsCreateXmlHttpRequest(true);\r\n        xmlHttp.open(\"GET\", url, true);\r\n        xmlHttp.setRequestHeader(\"Content-type\", \"application/x-www-form-urlencoded;charset=UTF-8\");\r\n        dwDomAddEventListener(xmlHttp, \"onreadystatechange\", function() {\r\n            if (xmlHttp.readyState == DWUTILS_READY_STATE.DONE) {\r\n                if (xmlHttp.status == 200) {\r\n                    dwFrameworkRefreshPageJs();\r\n                }\r\n            }\r\n        });\r\n        xmlHttp.send(\"\");\r\n    }\r\n}\r\n\r\nfunction dwFrameworkRegisterPdfMessageHandler(pdf) {\r\n    if (!pdf) {\r\n        return;\r\n    }\r\n    pdf.messageHandler = {\r\n        onMessage: function(/*array*/ parameter) {\r\n            var xmlHttp = dwUtilsCreateXmlHttpRequest(true);\r\n            var url = parameter[0] || \"\";\r\n            if (!url) {\r\n                return;\r\n            }\r\n            // Absolute URL Verlinkungen müssen weiterhin erhalten bleiben\r\n            if ((url.indexOf(\"http://\") == -1) && (url.indexOf(\"https://\") == -1)) {\r\n                var baseUrl = dwUtilsGetBaseApplicationUrl();\r\n                var contextNameStartIdx = baseUrl.indexOf(\"/\", \"https://\".length);\r\n                var contextName = \"\";\r\n                if (contextNameStartIdx > -1) {\r\n                    contextName = baseUrl.substring(contextNameStartIdx);\r\n                    if (dwUtilsStringStartsWith(url, contextName, false)) {\r\n                        // In der Vergangenheit wurde bei relativen URLs der context-Name der Anwendung als Prefix verwendet\r\n                        // Der context-Name muss kurz bereinigt werden, bevor die URL zusammengebaut wird.\r\n                        baseUrl = baseUrl.substring(0, contextNameStartIdx);\r\n                    }\r\n                }\r\n\r\n                url = baseUrl + url;\r\n            }\r\n            xmlHttp.open(\"get\", url, true);\r\n            xmlHttp.onreadystatechange = function() {\r\n                if (this.readyState == DWUTILS_READY_STATE.DONE) {\r\n                    if (this.status == 200) {\r\n                        dwAjaxAddUpdate(\"ping\", true);\r\n                    }\r\n                }\r\n            };\r\n            xmlHttp.send();\r\n        }\r\n    }\r\n}\r\n\r\nfunction dwFrameworkInitResponsiveTextfield(uniqueId, maskOptions) {\r\n    var control = $(uniqueId);\r\n    var component = mdc.textfield.MDCTextField.attachTo(control);\r\n    component.foundation.setUseNativeValidation(false);\r\n    component.foundation.adapter.registerTextFieldInteractionHandler(\"input\", function(event) {\r\n        var input = component.foundation.adapter.getNativeInput();\r\n        if (input.inputmask) {\r\n            var unmaskedValue = input.inputmask.unmaskedvalue(); // masked value wird als eigentlicher Wert (input.value) ausgelesen und übertragen\r\n            unmaskedValue = unmaskedValue.replace('-', ''); // aus irgendeinem Grund ab und zu enthält inputmask.unmaskedvalue() das '-' Zeichen\r\n            dwAjaxDefaultOnChange(event, uniqueId, uniqueId + \"_input\", \"complete=\" + input.inputmask.isComplete() + \"@DWSUB@unmasked=\" + unmaskedValue + \"@DWSUB@emptymask=\" + input.inputmask.getemptymask(), true);\r\n        } else {\r\n            // Ohne Maske ist der Text immer \"vollständig\" (da keine Maske erfüllt werden muss). Maskiert und unmaskiert sind das gleiche\r\n            dwAjaxDefaultOnChange(event, uniqueId, uniqueId + \"_input\", \"complete=true@DWSUB@unmasked=\" + input.value + \"@DWSUB@emptymask=\", true);\r\n        }\r\n    });\r\n    control.component = component;\r\n    control.componenthelper = new mdc.textfield.MDCTextFieldHelperText($(uniqueId + \"_helper\"));\r\n    try {\r\n        // Insbesondere bei REGEXP kann es vorkommen, dass man ein absolut ungültiges Format auslöst. Es sollte hier keine Fehlermeldung mit Reload kommen (Endlosschleife)\r\n        // oder die Verarbeitung komplett im Wald sein (onload) - sondern nur loggen und ignorieren\r\n        // Im Fehlerfall schreibt er die Maske noch nicht in die Komponente (Format Befehl)\r\n        Inputmask.format(\"\", maskOptions);\r\n        Inputmask(maskOptions).mask($(uniqueId + \"_input\"));\r\n    } catch (error) {\r\n        dwFrameworkLog(\"J2EE_ERRORS\", \"Failed to set input mask (id='\" + uniqueId + \"' cause='\" + (error.message || error) + \"')\");\r\n    }\r\n}\r\n\r\nfunction dwFrameworkDestroyResponsiveTextfield(uniqueId) {\r\n    $(uniqueId).component.destroy();\r\n}\r\n\r\nfunction dwFrameworkValidateResponsiveTextfield(uniqueId, isValid, message) {\r\n    var component = $(uniqueId).component;\r\n    component.foundation.setValid(isValid);\r\n    component.foundation.setHelperTextContent(message);\r\n}\r\n\r\nfunction dwFrameworkDisableResponsiveTextfield(uniqueId, disable) {\r\n    $(uniqueId).component.foundation.setDisabled(disable);\r\n}\r\n\r\nfunction dwFrameworkSetPlaceholderOnResponsiveTextfield(uniqueId, placeholder) {\r\n    var placeHolderComponent = $(uniqueId + \"_placeholder\");\r\n    if (placeHolderComponent) { // Nur vorhanden, wenn \"Outline\" gewünscht sind. Bei leerem Text würde eine Lücke in Border entstehen ...\r\n        dwDomSetDomText(placeHolderComponent, placeholder, true);\r\n        if (placeholder === \"\") {\r\n            placeHolderComponent.parentNode.style.display = \"none\";\r\n        } else {\r\n            placeHolderComponent.parentNode.style.display = \"\";\r\n        }\r\n        $(uniqueId).component.layout();\r\n    } else {\r\n        // Fehlen die Outline Tags - wird das Attribut aktualisiert (Plain HTML Mechanismus)\r\n        placeHolderComponent = $(uniqueId + \"_input\");\r\n        dwDomSetDomAttribute(placeHolderComponent, \"placeholder\", placeholder);\r\n    }\r\n}\r\n\r\nfunction dwFrameworkToggleGuiWindowMaximized(controlId) {\r\n    var img = $(controlId + \"_child_title_maximize_img\");\r\n    var windowDiv = $(controlId + \"_contentdiv\");\r\n\r\n    // Eine eventuelle manuelle Verschiebung des Fensters aufheben\r\n    windowDiv.moving = false;\r\n    windowDiv.moved = false;\r\n\r\n    if (img.className == \"guiwindow_child_title_restore_img\") {\r\n        img.className = \"guiwindow_child_title_maximize_img\";\r\n        windowDiv.style.width = windowDiv.origWidth;\r\n        windowDiv.style.height = windowDiv.origHeight;\r\n    } else {\r\n        img.className = \"guiwindow_child_title_restore_img\";\r\n        windowDiv.origWidth = windowDiv.style.width;\r\n        windowDiv.origHeight = windowDiv.style.height;\r\n        windowDiv.style.width = \"100%\";\r\n        windowDiv.style.height = \"100%\";\r\n    }\r\n    dwUtilsRepositionChildWindow(controlId);\r\n}\r\n\r\n\r\n// Ab hier verkürzte Methodennamen, da diese sehr häufig im generierten JavaScript vorkommen\r\n/**\r\n * Wird vor Events aufgerufen\r\n *\r\n * @param e\r\n * @see #dwFrameworkPreEvent\r\n */\r\nfunction dwFwPreEv(event, withEventBubbling, htmlElement) {\r\n    dwFrameworkPreEvent(event, withEventBubbling, htmlElement);\r\n}\r\n\r\n/**\r\n * Wird nach Events aufgerufen\r\n *\r\n * @param e\r\n * @see #dwFrameworkPostEvent\r\n */\r\nfunction dwFwPostEv(event) {\r\n    dwFrameworkPostEvent(event);\r\n}\r\n\r\n/**\r\n * Exception-Handling\r\n *\r\n * @param exception\r\n * @see dwFrameworkExceptionHandler\r\n */\r\nfunction dwFwExH(exception) {\r\n    dwFrameworkExceptionHandler(exception);\r\n}\r\n\r\n/**\r\n * Setzt das Flag, um das Event-Handling (a)synchron auszuführen\r\n *\r\n * @param event\r\n * @param doAsynchronousCall\r\n * @see #dwFrameworkSetAsynchronousFlag\r\n */\r\nfunction dwFwAsync(event, doAsynchronousCall) {\r\n    dwFrameworkSetAsynchronousFlag(event, doAsynchronousCall);\r\n}\r\n\r\n/**\r\n * Start für das Verschieben von dem Kind-Fenster mit der übergebenen {@code uniqueId}.\r\n *\r\n * @param event\r\n * @param uniqueId\r\n */\r\nfunction moveChildWindowStart(event, uniqueId) {\r\n    if (event.button != 0) { // Nur bei Linksklick\r\n        return;\r\n    }\r\n\r\n    var windowContentDiv = $(uniqueId + \"_contentdiv\");\r\n    if (windowContentDiv) {\r\n        windowContentDiv.moving = true;\r\n        windowContentDiv.moveOffsetX = parseInt(windowContentDiv.style.marginLeft) - event.screenX;\r\n        windowContentDiv.moveOffsetY = parseInt(windowContentDiv.style.marginTop) - event.screenY;\r\n    }\r\n}\r\n\r\n/**\r\n * Das Kind-Fenster mit der übergebenen {@code uniqueId} wird gerade verschoben.\r\n *\r\n * @param event\r\n * @param uniqueId\r\n */\r\nfunction moveChildWindowMoving(event, uniqueId) {\r\n    var windowContentDiv = $(uniqueId + \"_contentdiv\");\r\n    // Ist das moving-Flag vorhanden und gesetzt (wurde also vorher moveChildWindowStart() aufgerufen)?\r\n    if (windowContentDiv && (typeof (windowContentDiv.moving) != \"undefined\") && windowContentDiv.moving) {\r\n        var minimumVisibleSize = 25;\r\n\r\n        // Der linke Ursprung ist abhängig davon, ob das Fenster normal dargestellt wird (left=50%) oder maximiert\r\n        var leftOffset;\r\n        if (windowContentDiv.style.left == \"50%\") {\r\n            leftOffset = 0;\r\n        } else {\r\n            leftOffset = framework_displayWidth / 2;\r\n        }\r\n\r\n        // x-Koordinate nur beim obersten Kind-Fenster anpassen\r\n        var width = dwUtilsGetWidth(windowContentDiv);\r\n        windowContentDiv.style.marginLeft = Math.max(leftOffset - framework_displayWidth / 2 - width + minimumVisibleSize,\r\n                                                     Math.min(leftOffset + framework_displayWidth / 2 - minimumVisibleSize,\r\n                                            windowContentDiv.moveOffsetX + event.screenX)) + \"px\";\r\n\r\n        // Alle Kind-Fenster verschieben? Wird auch als Flag am obersten Kind-Fenster gemerkt für moveChildWindowEnd()\r\n        var moveAllChildWindows = event.ctrlKey;\r\n        if (moveAllChildWindows) {\r\n            windowContentDiv.movedAllChildWindows = true;\r\n        }\r\n\r\n        var childWindows = getChildWindowsToMove(windowContentDiv, moveAllChildWindows);\r\n        for (var i = 0; i < childWindows.length; i++) {\r\n            var childWindowContentDiv = childWindows[i];\r\n\r\n            // Der obere Ursprung ist abhängig davon, ob das Fenster normal dargestellt wird (top=50%) oder maximiert bzw.\r\n            // mit maximaler vertikaler Höhe\r\n            var topOffset;\r\n            if (childWindowContentDiv.style.top == \"50%\") {\r\n                topOffset = 0;\r\n            } else if (childWindowContentDiv == windowContentDiv) { // Verschobenes oberstes Fenster ist maximiert\r\n                topOffset = framework_displayHeight / 2;\r\n            } else {\r\n                // Bei allen anderen maximierten Fenstern die Positionierung anpassen, damit diese vertikal sauber mitverschoben werden\r\n                childWindowContentDiv.style.top = \"50%\";\r\n                topOffset = 0;\r\n            }\r\n\r\n            // y-Koordinate immer auf die y-Koordinate vom obersten Kind-Fenster setzen zum gemeinsamen Verschieben\r\n            var height = dwUtilsGetHeight(childWindowContentDiv);\r\n            childWindowContentDiv.style.marginTop = Math.max(topOffset - framework_displayHeight / 2 - height + minimumVisibleSize,\r\n                                                             Math.min(topOffset + framework_displayHeight / 2 - minimumVisibleSize,\r\n                                                    windowContentDiv.moveOffsetY + event.screenY)) + \"px\";\r\n\r\n            // Opacity auf 10% stellen bei allen darunterliegenden Kind-Fenstern, damit deren Inhalt besser erkennbar ist\r\n            if (childWindowContentDiv != windowContentDiv) {\r\n                var childWindowUniqueId = childWindowContentDiv.id.substring(0, childWindowContentDiv.id.length - \"_contentdiv\".length);\r\n                var windowLayerDiv = $(childWindowUniqueId + \"_layerdiv\");\r\n                if (windowLayerDiv) {\r\n                    dwUtilsSetOpacity(windowLayerDiv, 10);\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * Ende für das Verschieben von dem Kind-Fenster mit der übergebenen {@code uniqueId}.\r\n *\r\n * @param event\r\n * @param uniqueId\r\n */\r\nfunction moveChildWindowEnd(event, uniqueId) {\r\n    var windowContentDiv = $(uniqueId + \"_contentdiv\");\r\n    if (windowContentDiv && (typeof (windowContentDiv.moving) != \"undefined\") && windowContentDiv.moving) {\r\n        var childWindows = getChildWindowsToMove(windowContentDiv, windowContentDiv.movedAllChildWindows);\r\n        for (var i = 0; i < childWindows.length; i++) {\r\n            var childWindowContentDiv = childWindows[i];\r\n            childWindowContentDiv.moving = false;\r\n            childWindowContentDiv.moved = true;\r\n\r\n            // Event an den Server mit den neuen Koordinaten schicken\r\n            var childWindowUniqueId = childWindowContentDiv.id.substring(0, childWindowContentDiv.id.length - \"_contentdiv\".length);\r\n            var childWindowLocation = dwUtilsGetLocationOnWindow(childWindowContentDiv, false, true);\r\n            dwAjaxAddUpdate(childWindowUniqueId + \"@DW@\" + childWindowUniqueId + \"@DW@onLocationChangedEvent@DW@absX=\"\r\n                            + childWindowLocation.x + \"@DWSUB@absY=\" + childWindowLocation.y, false, true);\r\n        }\r\n        windowContentDiv.movedAllChildWindows = false;\r\n        dwAjaxSendUpdates(false, true);\r\n    }\r\n}\r\n\r\n/**\r\n * Bestimmt alle Kind-Fenster inkl. dem übergebenen Kind-Fenster, die verschoben werden sollen.\r\n *\r\n * @param windowContentDiv\r\n * @param moveAllChildWindows\r\n * @returns\r\n */\r\nfunction getChildWindowsToMove(windowContentDiv, moveAllChildWindows) {\r\n    var childWindowsToMove;\r\n    if (moveAllChildWindows) {\r\n        childWindowsToMove = dwDomGetChildrenByTagname(windowContentDiv.parentNode, \"div\", {\"class\": \"guiwindow_child_container\"}, false);\r\n    } else {\r\n        childWindowsToMove = new Array();\r\n        childWindowsToMove.push(windowContentDiv);\r\n    }\r\n    return childWindowsToMove;\r\n}\r\n\r\n/**\r\n * Benutzt html2pdf um aus einem HTML String ein PDF zu machen. Schickt das Pdf dann an den Server zurück.\r\n * @param html Inhalt des Pdfs als String\r\n */\r\nfunction dwHtmlStringToPdf(uniqueid, html, transactionid) {\r\n    //funktioniert ohne timeout nicht. Unbekannt warum\r\n    setTimeout(function() {\r\n        //alle Elemente die die Klasse avoidbreak haben bei pageBreak vermeiden + 1cm Rand\r\n        //Render Fensterbreite auf 800 damit Media Querys im css die Darstellung bei kleiner Fenstergröße nicht beeinflussen\r\n        const opts = {\r\n            pagebreak: {avoid: '.avoidbreak'},\r\n            margin: 1,\r\n            jsPDF: {unit: 'cm'},\r\n            html2canvas: {windowWidth: 800, scale: 1}\r\n        };\r\n        var worker = html2pdf().set(opts).from(html).toPdf();\r\n        worker.outputPdf('arraybuffer', {}).then(function(pdfData) {\r\n            dwAjaxReturnPdfData(uniqueid, transactionid, pdfData);\r\n        });\r\n\r\n    }, 500);\r\n}\r\n\r\nvar html5QrcodeScanner;\r\n\r\n/**\r\n * Scanner starten\r\n * @param html Inhalt des Pdfs als String\r\n */\r\nfunction dwStartScanner(uniqueId, transactionId) {\r\n    //funktioniert ohne timeout nicht. Unbekannt warum\r\n    setTimeout(function() {\r\n        html5QrcodeScanner = new Html5QrcodeScanner(\"qr-reader\", {fps: 10, qrbox: 250});\r\n        html5QrcodeScanner.render(function(decodedText, decodedResult) {\r\n            dwAjaxReturnScanResult(uniqueId, transactionId, decodedText, decodedResult);\r\n            dwStopScanner();\r\n        });\r\n    }, 500);\r\n}\r\n\r\nfunction dwStopScanner() {\r\n    if (html5QrcodeScanner != null) {\r\n        html5QrcodeScanner.clear();\r\n        html5QrcodeScanner = null;\r\n    }\r\n}\r\n\r\n/**\r\n * Setze die Hoverklassen neu. Alte entfernen und neue zusätzlich ans Control hängen\r\n * @param control\r\n * @param classNamesAsStringWithSpace\r\n */\r\nfunction dwAjaxSetHoverClasses(control, classNamesAsStringWithSpace) {\r\n    if (control != null) {\r\n        dwRemoveAllHoverClasses(control);\r\n        if (classNamesAsStringWithSpace) {\r\n            var classNames = dwUtilsSplit(classNamesAsStringWithSpace, \" \", false);\r\n            for (var i = classNames.length - 1; i >= 0; i--) {\r\n                dwDomAddClass(control, classNames[i]);\r\n            }\r\n        }\r\n    }\r\n\r\n\r\n    function dwRemoveAllHoverClasses(control) {\r\n        if (control.className) {\r\n            var classNames = dwUtilsSplit(control.className, \" \", false);\r\n            var classNamesAfterRemoval = new Array();\r\n            for (var i = classNames.length - 1; i >= 0; i--) {\r\n                if (!classNames[i].startsWith(\"dw-hover-class-\")) {\r\n                    classNamesAfterRemoval.push(classNames[i]);\r\n                }\r\n            }\r\n            control.className = classNamesAfterRemoval.join(\" \");\r\n        }\r\n    }\r\n\r\n}\r\n\n/*\r\n * Copyright (c) 2018 Docware GmbH\r\n */\r\nvar DWSPLIT_MINIMUM_COMPONENT_SIZE = 20;\r\n// Ausrichtung der Splitpane: column/row\r\nvar dwSplitDragType = null;\r\n// Startposition des Drag-Vorgangs\r\nvar dwSplitDragStartCoords = null;\r\n// Komponenten, deren Größen sich ändern\r\nvar dwSplitDragComponent1 = null;\r\nvar dwSplitDragComponent2 = null;\r\n// Mindestgrößen der Komponenten\r\nvar dwSplitDragComponent1Min = null;\r\nvar dwSplitDragComponent2Min = null;\r\n// Startwerte (Breite/Höhe) der Komponenten \r\nvar dwSplitDragComponent1Start = null;\r\nvar dwSplitDragComponent2Start = null;\r\n// Die Id der GuiSplitPane\r\nvar dwSplitDragUniqueId = null;\r\n// Maus wurde wirklich bewegt und damit Dragvorgang durchgeführt, sonst evtl. nur Klick\r\nvar dwSplitDragged = false;\r\n// Die Id der GuiSplitPane\r\nvar dwSplitDragEventHandlerComponentId = null;\r\n// Wie breit der Divider ist\r\nvar dwSplitDragDividerSize = null;\r\n// Wie breit der Divider ist wenn ein Kind komplett eingeklappt ist\r\nvar dwSplitDragDividerSizeTilted = null;\r\n// Wie breit die SplitPane ist\r\nvar dwSplitDragSplitPaneSize = null;\r\n// Soll die aktualisierte Position via Ajax übermittelt werden\r\nvar dwSplitDragDoAjaxCallback = null;\r\n// Flag, ob gerade ein SplitPane-Divider bewegt wird und ein transparentes DIV darübergelegt wurde\r\nvar dwSplitTransparentOverlayIsUsed;\r\n//ID von Split Pane im Dokument-Viewer\r\nvar dwSplitPaneID;\r\n//ID von transparent Panel-Overlay von PDF-Viewer\r\nvar dwPdfViewerOverlayID;\r\n\r\nfunction dwSplitInitDragAndDrop() {\r\n    // Auf body sind Listener registriert für den 'auto close' Mechanismus von Popup-Fenstern\r\n    // Alle Mouse-Events werden ab Body automatisch geschluckt und dringen nicht mehr zum document durch\r\n    // Body erstreckt sich auf 100% des Viewports und wird als Ersatz für document verwendet\r\n    var body = $(\"body\");\r\n    dwDomAddEvent(body, \"onmousemove\", \"dwSplitDragEvent(event);\", false);\r\n}\r\n\r\nfunction dwSplitDragStartEvent(event, eventHandlerComponentId, uniqueId, type, firstcellid, secondcellid) {\r\n    if (dwSplitDragType != null) {\r\n        return;\r\n    }\r\n    dwFrameworkPreventDefaultBehaviour(event);\r\n    dwSplitDragStartCoords = dwSplitGetPageCoordinates(event);\r\n    dwSplitDragComponent1 = $(firstcellid);\r\n    dwSplitDragComponent2 = $(secondcellid);\r\n    dwSplitDragType = type;\r\n    dwSplitDragComponent1Min = dwSplitGetMinimumSize(dwSplitDragComponent1, dwSplitDragType, DWSPLIT_MINIMUM_COMPONENT_SIZE);\r\n    dwSplitDragComponent2Min = dwSplitGetMinimumSize(dwSplitDragComponent2, dwSplitDragType, DWSPLIT_MINIMUM_COMPONENT_SIZE);\r\n    dwSplitDragEventHandlerComponentId = eventHandlerComponentId;\r\n    dwSplitDragUniqueId = uniqueId;\r\n    dwSplitDragDoAjaxCallback = true;\r\n    if (dwSplitDragType == \"column\") {\r\n        dwSplitDragDividerSize = parseInt($(dwSplitDragUniqueId + \"_divider\").style.width);\r\n        dwSplitDragSplitPaneSize = dwSplitParsePixel($(dwSplitDragUniqueId).offsetWidth);\r\n        dwSplitDragComponent1Start = dwSplitParsePixel(dwSplitDragComponent1.offsetWidth);\r\n        dwSplitDragComponent2Start = dwSplitParsePixel(dwSplitDragComponent2.offsetWidth);\r\n    } else if (dwSplitDragType == \"row\") {\r\n        dwSplitDragDividerSize = parseInt($(dwSplitDragUniqueId + \"_divider\").style.height);\r\n        dwSplitDragSplitPaneSize = dwSplitParsePixel($(dwSplitDragUniqueId).offsetHeight);\r\n        dwSplitDragComponent1Start = dwSplitParsePixel(dwSplitDragComponent1.offsetHeight);\r\n        dwSplitDragComponent2Start = dwSplitParsePixel(dwSplitDragComponent2.offsetHeight);\r\n    }\r\n    dwSplitDragged = false;\r\n\r\n    //  dragFirst.style.visibility  = \"hidden\";\r\n    //  dragSecond.style.visibility = \"hidden\";\r\n}\r\n\r\nfunction dwSplitDragEvent(event) {\r\n    // Im IE8 kommen bereits Events, obwohl er noch die Seite aufbaut\r\n    if (!dwFrameworkInitFinished) {\r\n        return;\r\n    }\r\n    if (dwSplitDragType == null) {\r\n        return;\r\n    }\r\n    // Berechne die Koordinaten der Mausbewegung\r\n    var newCoords = dwSplitGetPageCoordinates(event);\r\n    // Neue Größen für die Elemente berechnen\r\n    var sizes = dwSplitDragGetNewSizes(event);\r\n    var newFirstSize = sizes[0];\r\n    var newSecondSize = sizes[1];\r\n    if (newFirstSize + dwSplitDragDividerSize + newSecondSize > dwSplitDragSplitPaneSize) {\r\n        return;\r\n    }\r\n    dwSplitDragged = true;\r\n    var parent = dwSplitDragComponent1.parentNode;\r\n    var allChildren = dwDomGetElementChildNodes(parent);\r\n    var dragBorder = allChildren[1];  // Reihenfolge fix: component1, border, component2\r\n    // Neue Größen setzen\r\n    if (dwSplitDragType == \"column\") {\r\n        dwSplitDragComponent1.style.width = newFirstSize + \"px\";\r\n        dragBorder.style.left = newFirstSize + \"px\";\r\n        // Größe des rechten Containers wird nicht über 'width' sondern left und right definiert.\r\n        // Die Abprüfung auf die minimal-Breite des rechten Containers wurde bereits vorher durchgeführt\r\n        dwSplitDragComponent2.style.left = (newFirstSize + dwSplitDragDividerSize) + \"px\";\r\n    } else if (dwSplitDragType == \"row\") {\r\n        dwSplitDragComponent1.style.height = newFirstSize + \"px\";\r\n        dragBorder.style.top = newFirstSize + \"px\";\r\n        // Größe des unteren Containers wird nicht über 'height' sondern top und bottom definiert.\r\n        // Die Abprüfung auf die minimal-Höhe des unteren Containers wurde bereits vorher durchgeführt\r\n        dwSplitDragComponent2.style.top = (newFirstSize + dwSplitDragDividerSize) + \"px\";\r\n    }\r\n    if (dwSplitDragDoAjaxCallback) {\r\n        var params = \"leftSize=\" + newFirstSize + \"@DWSUB@\" + \"rightSize=\" + newSecondSize;\r\n        dwAjaxSplitpaneDragging(event, dwSplitDragEventHandlerComponentId, dwSplitDragUniqueId, params, true);\r\n    }\r\n}\r\n\r\n/**\r\n * Liefert die Länge der gezogenen Strecke mit dem Divider. Also den Unterschied zwischen Position-Start und Position-Ende\r\n * des Divider-Drag-Events.\r\n *\r\n * @param event Das DividerDragEvent\r\n * @returns {*}\r\n */\r\nfunction dwSplitGetDragDifference(event) {\r\n    // Im getilteten Modus hat Drag einen seltsamen Zustand herbeigeführt\r\n    var splitPane = $(dwSplitDragUniqueId);\r\n    if ((splitPane == null) || splitPane.hasAttribute(\"oldDividerRatio\")) {    // SplitPane ist getiltet, kein MouseDrag möglich\r\n        return 0;\r\n    }\r\n\r\n    var difference;\r\n    var newCoords = dwSplitGetPageCoordinates(event);\r\n    if (dwSplitDragStartCoords == null) {\r\n        dwSplitDragStartCoords = dwSplitGetPageCoordinates(event);\r\n    }\r\n    if ((dwSplitDragType == \"column\")) {\r\n        difference = newCoords[0] - dwSplitDragStartCoords[0];\r\n    } else if (dwSplitDragType == \"row\") {\r\n        difference = newCoords[1] - dwSplitDragStartCoords[1];\r\n    }\r\n\r\n    return difference;\r\n}\r\n\r\nfunction dwSplitDragGetNewSizes(event) {\r\n    var newFirstSize, newSecondSize;\r\n    var difference = dwSplitGetDragDifference(event);\r\n    newFirstSize = dwSplitDragComponent1Start + difference;\r\n    if (newFirstSize < dwSplitDragComponent1Min) {\r\n        newFirstSize = dwSplitDragComponent1Min;\r\n    }\r\n\r\n    newSecondSize = dwSplitDragSplitPaneSize - dwSplitDragDividerSize - newFirstSize;\r\n    if (newSecondSize < dwSplitDragComponent2Min) {\r\n        newSecondSize = dwSplitDragComponent2Min;\r\n    }\r\n    var sizes = new Array();\r\n    sizes[0] = newFirstSize;\r\n    sizes[1] = newSecondSize;\r\n    return sizes;\r\n}\r\n\r\nfunction dwSplitDragStopEvent(event) {\r\n    var textField = $(dwSplitDragUniqueId + \"_dividerPosition\");\r\n    if (textField != null) {              // Komponente könnte schon weggeblendet sein\r\n        // Neue Größen setzen\r\n        if (dwSplitDragType == \"column\") {\r\n            textField.value = dwSplitDragComponent1.style.width;\r\n        } else if (dwSplitDragType == \"row\") {\r\n            textField.value = dwSplitDragComponent1.style.height;\r\n        }\r\n\r\n        //Hat sich an der Position beim drag nichts geändert, wird keine Ajaxrückmeldung gegeben\r\n        //Kommt vor, wenn z.B. nur geklickt wurde, aber da das DragEvent auf MouseDown hört, wird es trotzdem ausgelöst\r\n        // Spezialfall ist nur, wenn man mit dem Drag des Dividers genau da aufhört, wo man angefangen hat. Aber genau den Pixel zu\r\n        // treffen ist auch schwer und zufällig.\r\n        var difference = dwSplitGetDragDifference(event);\r\n        if (dwSplitDragDoAjaxCallback && (difference != 0)) {\r\n            var sizes = dwSplitDragGetNewSizes(event);\r\n            //Hier wird tilt=0 mitgegeben, da durch ein drag die splitpane nicht getilted werden kann.\r\n            //Es kann höchstens sein, das die Splitpane schon getilted war, daher ein Kind eingeklappt ist, und durch\r\n            //einen Drag das eingeklappte Kind wieder geöffnet wird. Dadurch ist die splitpane nicht mehr getilted.\r\n            var params = \"leftSize=\" + sizes[0] + \"@DWSUB@\" + \"rightSize=\" + sizes[1] + \"@DWSUB@\" + \"tilt=0\";\r\n            dwAjaxSplitpaneDragged(event, dwSplitDragEventHandlerComponentId, dwSplitDragUniqueId, params, true);\r\n        }\r\n    }\r\n\r\n    dwSplitDragType = null;\r\n    dwSplitDragStartCoords = null;\r\n    dwSplitDragComponent1 = null;\r\n    dwSplitDragComponent2 = null;\r\n    dwSplitDragComponent1Min = null;\r\n    dwSplitDragComponent2Min = null;\r\n    dwSplitDragComponent1Start = null;\r\n    dwSplitDragComponent2Start = null;\r\n    dwSplitDragEventHandlerComponentId = null;\r\n    dwSplitDragUniqueId = null;\r\n    dwSplitDragDividerSize = null;\r\n    dwSplitDragSplitPaneSize = null;\r\n    dwSplitDragDoAjaxCallback = null;\r\n    dwSplitDragged = false;\r\n}\r\n\r\nfunction dwSplitGetMinimumSize(splitpanel, dragType, defaultValue) {\r\n    var splitpanelContent = dwDomGetElementChildNodes(splitpanel);\r\n    if (splitpanelContent.length == 1) {\r\n        if ((dragType == \"column\") && (splitpanelContent[0].style.minWidth)) {\r\n            var minWidth = dwSplitParsePixel(splitpanelContent[0].style.minWidth);\r\n            return (Math.max(minWidth, defaultValue));\r\n        } else if ((dragType == \"row\") && (splitpanelContent[0].style.minHeight)) {\r\n            var minHeight = dwSplitParsePixel(splitpanelContent[0].style.minHeight);\r\n            return (Math.max(minHeight, defaultValue));\r\n        } else {\r\n            return defaultValue;\r\n        }\r\n    } else {\r\n        return defaultValue;\r\n    }\r\n}\r\n\r\nfunction dwSplitParsePixel(pixelValue) {\r\n    if (pixelValue == \"\") {\r\n        return 0;\r\n    }\r\n    return parseInt(pixelValue);\r\n}\r\n\r\nfunction dwSplitGetPageCoordinates(event) {\r\n    //  if (dragUseAlternativeMouseCoords) {\r\n    //    return new Array(event.clientX, event.clientY);\r\n    //  } else {\r\n    return new Array((document.all && window.event) ? window.event.clientX : event.pageX,\r\n                     (document.all && window.event) ? window.event.clientY : event.pageY);\r\n    //  }\r\n}\r\n\r\n/**\r\n * Fügt ein transparentes Panel auf PDF-Viewer, weil beim mobile -> desktop oder desktop -> mobile Wechsel wird\r\n * es entfernt. Wenn es schon ein solches Panel existiert - wird es nicht noch einmal hinzugefügt.\r\n * Verwendet im Legacy-Layout\r\n */\r\nfunction addPdfViewerOverlayIfNotExistsLegacy() {\r\n    if (dwSplitDragged && dwPdfViewerOverlayID != null && document.getElementById(dwSplitPaneID + \"_overlay\") == null) {\r\n        var dwSplitChildWithOverlay = document.getElementById(dwPdfViewerOverlayID);\r\n        if (dwSplitChildWithOverlay !== null) {\r\n            addTransparentOverlayLegacy(dwSplitChildWithOverlay, dwSplitPaneID);\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * Falls die Breite oder die Höhe eines Videos < Parent-Element, die Tag-Breite auf 100% setzen,\r\n * damit das Video umskaliert werden kann und im Parent-Element passt.\r\n * Wenn jedoch die Video-Breite kleiner als die Parent-Element-Breite ist,\r\n * dann nichts machen (width=\"\"), weil die umskalierung nicht notwendig ist\r\n * (mit width=100% wird das Video mit größen Pixeln gezeigt und wird nicht schön).\r\n *\r\n * @param videoId\r\n */\r\nfunction dwAdjustVideoSize(videoId) {\r\n    var videoElement = document.getElementById(videoId);\r\n    if (videoElement != null) {\r\n        var width = videoElement.videoWidth;\r\n\r\n        if (width > videoElement.parentElement.clientWidth) {\r\n            videoElement.style.width = \"100%\";\r\n        } else {\r\n            videoElement.style.width = \"\";\r\n        }\r\n\r\n        var height = videoElement.videoHeight;\r\n\r\n        if (height > videoElement.parentElement.clientHeight) {\r\n            videoElement.style.height = \"100%\";\r\n        } else {\r\n            videoElement.style.height = \"\";\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * Installiert einen zusätzlichen MouseDown-Listener, um über das linke bzw. rechte Kind während des Draggens\r\n * des SplitPane-Dividers ein transparentes DIV zu legen\r\n *\r\n * @param Angabe, ob erstes oder zweites Kind der SplitPane überblendet werden soll\r\n * @param splitPaneID id der Splitpane\r\n */\r\nfunction dwSplitAddLayerWhileDragging(isFirstChild, splitPaneID) {\r\n    dwSplitPaneID = splitPaneID;\r\n    var divider = $(splitPaneID + \"_divider\");\r\n    var oldDividerMouseDown = divider.onmousedown;\r\n\r\n    divider.onmousedown = function(event) {\r\n        if (!dwSplitTransparentOverlayIsUsed) {    // Es könnte 2. MouseDown kommen ohne MouseUp (Klick außerhalb)\r\n            dwSplitTransparentOverlayIsUsed = true;\r\n            var firstChild = $(splitPaneID + \"_firstchildcell\");\r\n            var secondChild = $(splitPaneID + \"_secondchildcell\");\r\n            var dwSplitChildWithOverlay = isFirstChild ? firstChild : secondChild;\r\n            dwPdfViewerOverlayID = dwSplitChildWithOverlay.id;\r\n            addTransparentOverlayLegacy(dwSplitChildWithOverlay, splitPaneID);\r\n        }\r\n\r\n        if (oldDividerMouseDown) {                 // Eigentliches Draggen\r\n            oldDividerMouseDown(event);\r\n        }\r\n    };\r\n}\r\n\r\nfunction addTransparentOverlayLegacy(dwSplitChildWithOverlay, splitPaneID) {\r\n    // nur bei IE ist Hintergrundfarbe nötig, sonst funktionieren die Events nicht\r\n    var bgColor = framework_isIE ? \"background-color:#FFFFFF;\" : \"\";\r\n\r\n    // Und dann auf dem Parent von dem GuiViewerElement das transparente Div hinzufügen, damit das DragEvent vom SplitpaneDivider weiter ankommt\r\n    if (dwSplitChildWithOverlay.children.length == 1) {\r\n        // Bei allen GuiViewern (außer Html) ist direkt der IFrame in der SplitPane -> Overlay muss davor eingehängt werden\r\n        dwDomInsertChild(dwSplitChildWithOverlay, 0, \"<div id='\" + splitPaneID + \"_overlay' style='filter:alpha(opacity=1); opacity:0.01; -ms-filter:alpha(opacity=1);\"\r\n                                                     + bgColor + \"width:100%;height:100%;position:absolute' z-index='1'>\");\r\n    } else {\r\n        // Bei Html gibt es zwei Inputs und dann die Scrollpane mit dem IFrame -> Overlay muss nach der Scrollpane hängen\r\n        dwDomAppendChild(dwSplitChildWithOverlay, \"<div id='\" + splitPaneID + \"_overlay' style='filter:alpha(opacity=1); opacity:0.01; -ms-filter:alpha(opacity=1);\"\r\n                                                  + bgColor + \"width:100%;height:100%;position:absolute' z-index='1'>\");\r\n    }\r\n}\r\n\r\nfunction dwSplitAddLayerWhileDraggingForResponsive(isFirstChild, splitPaneID_, panelID) {\r\n    dwSplitPaneID = splitPaneID_;\r\n    var divider = $(dwSplitPaneID + \"_divider\");\r\n    var oldDividerMouseDown = divider.onmousedown;\r\n    dwPdfViewerOverlayID = panelID;\r\n\r\n    divider.onmousedown = function(event) {\r\n        if (!dwSplitTransparentOverlayIsUsed) {    // Es könnte 2. MouseDown kommen ohne MouseUp (Klick außerhalb)\r\n            dwSplitTransparentOverlayIsUsed = true;\r\n            addTransparentDivToDOM(panelID);\r\n        }\r\n\r\n        if (oldDividerMouseDown) {                 // Eigentliches Draggen\r\n            oldDividerMouseDown(event);\r\n        }\r\n    };\r\n}\r\n\r\nfunction addTransparentDivToDOM(panelID) {\r\n    // Das ist das Panel mit LayoutBorder in dem das GuiViewer(das PDF) Element steckt\r\n    var panelForOverlay = $(panelID);\r\n    // In dem Panel steckt das LayoutBorder-Div\r\n    var children = dwDomGetElementChildNodes(panelForOverlay);\r\n    var child = children[0];\r\n    // Hier holt man sich die verschiedenen Divs für North, South, Center, East, West\r\n    children = dwDomGetElementChildNodes(child);\r\n    // Jetzt das Center Element holen, weil hier das GuiViewer-Element steckt\r\n    child = children[2];\r\n\r\n    // Und dann auf dem Parent von dem GuiViewerElement das transparente Div hinzufügen, damit das DragEvent vom SplitpaneDivider weiter ankommt\r\n    dwDomInsertChild(child, 0, createTransparentDiv());\r\n}\r\n\r\nfunction createTransparentDiv() {\r\n    var bgColor = framework_isIE ? \"background-color:#FFFFFF;\" : \"\";\r\n    return \"<div id='\" + dwSplitPaneID + \"_overlay' style='filter:alpha(opacity=1); opacity:0.01; -ms-filter:alpha(opacity=1);\"\r\n           + bgColor + \"width:100%;height:100%;position:absolute' z-index='1'>\";\r\n}\r\n\r\n/**\r\n * Fügt ein transparentes Panel auf PDF-Viewer, weil beim mobile -> desktop oder desktop -> mobile Wechsel wird\r\n * es entfernt. Wenn es schon ein solches Panel existiert - wird es nicht noch einmal hinzugefügt.\r\n */\r\nfunction addPdfViewerOverlayIfNotExists() {\r\n    if (dwSplitDragged && dwPdfViewerOverlayID != null && document.getElementById(dwSplitPaneID + \"_overlay\") == null) {\r\n        var dwSplitChildWithOverlay = document.getElementById(dwPdfViewerOverlayID);\r\n        if (dwSplitChildWithOverlay !== null) {\r\n            addTransparentDivToDOM(dwPdfViewerOverlayID);\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * Draggen des Dividers endet nicht immer nur mit MouseUp (z.B. Maus aus Fenster herausbewegen und dort loslassen),\r\n * daher explizit den Drag-Vorgang beenden und transparentes DIV wieder entfernen\r\n */\r\nfunction dwSplitRemoveLayerAfterDragging(isFirstChild, splitPaneID) {\r\n    dwDomRemoveNodeById(splitPaneID + \"_overlay\"); // Node eventuell nicht vorhanden - falls Event nicht durch Drag&Drop ausgelöst wurde\r\n    dwSplitTransparentOverlayIsUsed = false;\r\n}\r\n\r\n/**\r\n * Bei Klick auf die Kreise eines Splitpane-Dividers soll die Dividerposition auf 0 (tiltToZero == true) oder auf\r\n * maxWidth (horizontal == true) gesetzt werden und bei erneutem Klick in die Ursprungsposition zurückgesetzt werden.\r\n *\r\n * Diese Funktion ist momentan nur in Responsive vorhanden\r\n *\r\n * @param splitPaneID\r\n * @param tiltToZero\r\n * @param horizontal\r\n * @param dividerSizeTilted\r\n */\r\nfunction dwSplitTilt(event, splitPaneID, tiltToZero, horizontal, dividerSizeTilted) {\r\n    //splitTilt wird von MouseUp getriggert. Es kann passieren, dass MouseUp ohne vorheriges MouseDown durchkommt (z.B. durch\r\n    //gedrückt halten der Maus). In dem Fall hier abbrechen, sonst werden nachfolgend nicht alle nötigen Resize Events gefeuert\r\n\r\n    if ((event instanceof MouseEvent) && (dwSplitDragType == null)) {\r\n        return;\r\n    }\r\n    //nur bei linksklick\r\n    if (event.button != 0) {\r\n        return;\r\n    }\r\n\r\n    var hasCustomTiltEvent = false;             // Nachsehen, ob ein customTiltEvent registriert ist\r\n    var divider = $(dwSplitDragUniqueId + \"_divider\");\r\n    if (divider && dwDomHasAttribute(divider, \"customEventType\")) {\r\n        hasCustomTiltEvent = true;\r\n    }\r\n\r\n    var splitPane = $(splitPaneID);\r\n    dwSplitDragDividerSizeTilted = dividerSizeTilted;\r\n    if (dwSplitDragStartCoords != null) {\r\n        // Nur wenn Maus nicht bzw. max. 3 Pixel bewegt wird, auf-/zuklappen. Sonst ist es nur ein Verändern der Dividerposition\r\n        var newCoords = dwSplitGetPageCoordinates(event);\r\n        if ((4 < Math.abs(newCoords[0] - dwSplitDragStartCoords[0])) || (4 < Math.abs(newCoords[1] - dwSplitDragStartCoords[1]))) {\r\n            return;         // Draggen mit 4 Pixeln oder mehr Bewegung werden als Verschieben des Dividers intepretiert\r\n        }\r\n        // Bei Draggen bix max. 3 Pixel wird es dennoch als Tilt interpretiert\r\n        dwSplitDragged = false;\r\n    }\r\n\r\n    if (!dwSplitDragged && hasCustomTiltEvent) {      // Nur wenn nicht schon gedraggt wurde (gar keine Mausbewegung), sondern geklickt, customTilt auslösen\r\n        var paramType = dwDomGetDomAttribute(divider, \"customEventType\");\r\n        dwAjaxFireCustomEvent(dwSplitDragUniqueId, dwSplitDragUniqueId, paramType, '', true);\r\n        return;       // Jetzt keinen Tilt, sondern das CustomTilt durchführen\r\n    }\r\n\r\n    var divider = $(splitPaneID + \"_divider\");\r\n    var dividerWidth = Math.max(divider.offsetWidth, dwSplitDragDividerSizeTilted);\r\n    var dividerHeight = Math.max(divider.offsetHeight, dwSplitDragDividerSizeTilted);\r\n    var dividerMaxOffset = horizontal ? dividerWidth : dividerHeight;\r\n    var dividerPos = horizontal ? divider.offsetLeft : divider.offsetTop;\r\n    var oldDividerRatio = splitPane.getAttribute(\"oldDividerRatio\");    // vom html-Attribut auslesen, falls getilted wurde\r\n    var splitPaneSize = horizontal ? splitPane.offsetWidth : splitPane.offsetHeight;\r\n    //Um die maxPos zu berechnen, wird die Breite/Höhe des Dividers genommen, welche am Größten ist.\r\n    //Da der Divider seine Größe zwischen tilted und nicht tilted ändern kann, muss diese vorher ermittelt werden\r\n    var maxPos = horizontal ? splitPane.offsetWidth - dividerMaxOffset : splitPane.offsetHeight - dividerMaxOffset;\r\n    var newPos = horizontal ? 0 : maxPos;\r\n\r\n    var wasTilt = (tiltToZero && (dividerPos == 0)) || (dividerPos >= maxPos);\r\n    if (wasTilt) {                                          // alte Ratio auslesen\r\n        newPos = oldDividerRatio * splitPaneSize / 100;     // neue Größe bestimmen\r\n        splitPane.removeAttribute(\"oldDividerRatio\");       // und Attribut entfernen\r\n    } else {\r\n        splitPane.setAttribute(\"oldDividerRatio\", dividerPos * 100 / splitPaneSize);    // jetzt wird getilted, aktuelle Position des Dividers merken\r\n        newPos = tiltToZero ? 0 : maxPos;\r\n    }\r\n\r\n    if (horizontal) {\r\n        dwAjaxGenericSetNodeStyle(splitPane, ['', '', '0', 'width', newPos + \"px\"]);\r\n        dwAjaxGenericSetNodeStyle(splitPane, ['', '', '1', 'left', newPos + \"px\"]);\r\n        dwAjaxGenericSetNodeStyle(splitPane, ['', '', '2', 'left', (newPos + divider.offsetWidth) + \"px\"]);\r\n    } else {\r\n        dwAjaxGenericSetNodeStyle(splitPane, ['', '', '0', 'height', newPos + \"px\"]);\r\n        dwAjaxGenericSetNodeStyle(splitPane, ['', '', '1', 'top', newPos + \"px\"]);\r\n        dwAjaxGenericSetNodeStyle(splitPane, ['', '', '2', 'top', (newPos + divider.offsetHeight) + \"px\"]);\r\n    }\r\n    $(splitPaneID + \"_dividerPosition\").value = newPos;\r\n\r\n    if (dwSplitDragDoAjaxCallback) {\r\n        // Ajax Rückmeldung für das Resize der Komponenten\r\n        var isTilt = (newPos == maxPos) || (newPos == 0);\r\n        var params = \"leftSize=\" + newPos + \"@DWSUB@\" + \"rightSize=\" + (maxPos - newPos) + \"@DWSUB@\" + \"tilt=\" + (isTilt ? \"1\" : \"0\");\r\n        dwAjaxSplitpaneDragged(event, dwSplitDragEventHandlerComponentId, dwSplitDragUniqueId, params, true);\r\n    }\r\n\r\n    dwSplitDragType = null;\r\n    dwSplitDragStartCoords = null;\r\n    dwSplitDragComponent1 = null;\r\n    dwSplitDragComponent2 = null;\r\n    dwSplitDragComponent1Min = null;\r\n    dwSplitDragComponent2Min = null;\r\n    dwSplitDragComponent1Start = null;\r\n    dwSplitDragComponent2Start = null;\r\n    dwSplitDragEventHandlerComponentId = null;\r\n    dwSplitDragUniqueId = null;\r\n    dwSplitDragDividerSize = null;\r\n    dwSplitDragDividerSizeTilted = null;\r\n    dwSplitDragSplitPaneSize = null;\r\n    dwSplitDragDoAjaxCallback = null;\r\n}\r\n\r\n\n/*\r\n * Copyright (c) 2025 Quanos Solutions GmbH\r\n */\r\nvar DW_IMAGE_DIR_MODE = false;\r\n/**\r\n * Sammlung von Methoden zur Anzeige des Bildes inkl. Overview-Panel\r\n */\r\nvar DW_IMAGE_IN_ZOOM_EVENT = false;\r\n\r\n// ZoomSlider wird bewegt\r\nvar DW_IMAGE_SLIDER_MOVE = false;\r\n\r\n// Rotes Rechteck im Overview-Panel wird bewegt\r\nvar DW_IMAGE_NAVRECT_MOVE = false;\r\n\r\n// Zoom-to-Rect: Rechteck wird aufgezogen, Start-Position speichern\r\nvar DW_IMAGE_ZOOMRECT;\r\n\r\n// Image verschieben, Start-Position speichern\r\nvar DW_IMAGE_DRAGRECT;\r\n\r\nvar DW_LINK_STYLE_NONE = 0;\r\nvar DW_LINK_STYLE_LINE = 1;\r\nvar DW_LINK_STYLE_RECT = 2;\r\nvar DW_LINK_STYLE_ELLIPSE = 3;\r\nvar DW_LINK_STYLE_ELLIPSE_FULL = 4;\r\nvar DW_LINK_STYLE_FULL = 5;\r\nvar DW_LINK_STYLE_REDESIGN_RECT = 6;\r\n\r\nvar DW_IMAGE_LAST_ELEMENT_ID;\r\nvar DW_IMAGE_LAST_ZOOM = 1.0;\r\nvar DW_IMAGE_LAST_HOTSPOT_KEY;\r\nvar DW_IMAGE_LAST_HOTSPOT_KEY_VER;\r\n\r\nvar DW_IMAGE_BIAS = 1.5; // das Bias mal größere Bild wird als neues Bild genommen\r\n\r\nvar DW_PAGE_SCALE;\r\n\r\n/*\r\n * Normalerweise wird das Bild über URL Parameter geholt, also z.B.\r\n * irgend/eine/url?tileX=3&tileY=3&imgW=2000&imgH=2000&inctrans=true\r\n * aber im Falle von GWT müssen wir die richtigen Bilder auf der Platte finden.\r\n * Es ist ja kein Server vorhanden\r\n */\r\nfunction dwImageViewerSetDirMode(value) {\r\n    DW_IMAGE_DIR_MODE = value;\r\n}\r\n\r\nfunction dwImageViewerGetImage(elementId) {\r\n    var imageElement = $(elementId + \"_tiles\");\r\n    if (imageElement == null) {\r\n        imageElement = $(elementId + \"_image\");\r\n    }\r\n    return imageElement;\r\n}\r\n\r\n/**\r\n * Initialisiert den Viewer mit allen notwendigen Parametern. Bei Ajax wird über diese\r\n * Methode auch reinitialisiert\r\n */\r\nfunction dwImageViewerInitStart(elementId, imgSrcPrefix, dwWidth, dwHeight, curImageWidth, curImageHeight,\r\n                                openButtonUrl, closeButtonUrl, panClosedUrl, panOpenedUrl, panOpenedRUrl,\r\n                                overviewClosedWidth, overviewClosedHeight, overviewOpenWidth, overviewOpenHeight,\r\n                                clientUpscale, clientDownscale, isWithHiddenZoom, tileSize, useOriginalImage, useTiffOnClient, autoCloseWindows, transpixelUrl,\r\n                                panOpened, panCorner, zoomToRect, unmarkedHotspotsVisible, isMultiSelection, openPanWindowText,\r\n                                closePanWindowText, initialHidePanWindow, forceNoPanWindow, viewerType, plainImageOnly, dontZoomSmallImagesAtStart, debug) {\r\n    var image = dwImageViewerGetImage(elementId);\r\n    if (image == null) { // kann durch die Verwendung von setTimeout() passieren\r\n        return;\r\n    }\r\n\r\n    image.dwTileInfosForAllZoomLevels = new Object();\r\n    image.elementId = elementId;\r\n    image.dwWidth = dwWidth; // Original-Bildbreite\r\n    image.dwHeight = dwHeight; // Original-Bildhöhe\r\n    image.dwCurrentZoomLevel = panOpened ? 2.0 : 1.0;\r\n    image.dwImgSrcPrefix = imgSrcPrefix;\r\n    image.dwOrigImageWidth = curImageWidth; // Die erste ausgelieferte Version (maximal 750x500)\r\n    image.dwOrigImageHeight = curImageHeight; // Die erste ausgelieferte Version (maximal 750x500)\r\n    image.dwCurrentImageWidth = curImageWidth; // Aktuelle Bildgröße\r\n    image.dwCurrentImageHeight = curImageHeight; // Aktuelle Bildgröße\r\n    image.dwOpenButtonUrl = openButtonUrl;\r\n    image.dwCloseButtonUrl = closeButtonUrl;\r\n    image.dwPanClosedUrl = panClosedUrl;\r\n    image.dwPanOpenedUrl = panOpenedUrl;\r\n    image.dwPanOpenedRUrl = panOpenedRUrl;\r\n    image.dwOverviewClosedWidth = overviewClosedWidth;\r\n    image.dwOverviewClosedHeight = overviewClosedHeight;\r\n    image.dwOverviewOpenWidth = overviewOpenWidth;\r\n    image.dwOverviewOpenHeight = overviewOpenHeight;\r\n    image.dwClientUpscale = clientUpscale;\r\n    image.dwClientDownscale = clientDownscale;\r\n    image.dwIsWithHiddenZoom = isWithHiddenZoom;\r\n    image.panOpened = panOpened;\r\n    image.panCorner = panCorner;\r\n    image.panZoom2Rect = !zoomToRect; // Damit es im Toggle unten richtig gesetzt wird\r\n    image.dwTileSize = Math.floor(tileSize);\r\n    image.useOriginalImage = useOriginalImage;\r\n    image.useTiffOnClient = useTiffOnClient;\r\n    image.autoCloseWindows = autoCloseWindows;\r\n    image.transpixelUrl = transpixelUrl;\r\n    image.hotspots = new Array();\r\n    image.unmarkedHotspotsVisible = unmarkedHotspotsVisible;\r\n    image.isMultiSelection = isMultiSelection;\r\n    image.dwOpenPanWindowText = openPanWindowText;\r\n    image.dwClosePanWindowText = closePanWindowText;\r\n    image.dwInitialHidePanWindow = initialHidePanWindow;\r\n    image.dwForceNoPanWindow = forceNoPanWindow || plainImageOnly; //Bei der plain Anzeige kein PanWindow\r\n    image.viewerType = viewerType;\r\n    image.plainImageOnly = plainImageOnly;\r\n    image.dontZoomSmallImagesAtStart = dontZoomSmallImagesAtStart;\r\n    image.debug = debug;\r\n    image.logger = new DwLogger(!(typeof (framework_isJ2EEBrowser) != \"undefined\"));\r\n    image.log = function(msg) {\r\n        if (image.debug) {\r\n            var date = new Date();\r\n            var timestamp = date.getDate() + \".\" + (date.getMonth() + 1) + \".\" + date.getFullYear() + \" \" + date.getHours() + \":\" + date.getMinutes() + \":\" + date.getSeconds() + \":\" + date.getMilliseconds();\r\n            var lines = msg.split(\"\\n\");\r\n            for (var i = 0; i < lines.length; i++) {\r\n                var line = lines[i];\r\n                if (line) { // Leerzeilen werden ausgefiltert ...\r\n                    image.logger.log(timestamp + \" - \" + line);\r\n                }\r\n            }\r\n        }\r\n    };\r\n    image.logGroupStart = function(msg) {\r\n        if (image.debug) {\r\n            image.logger.groupStart(msg);\r\n        }\r\n    };\r\n    image.logGroupEnd = function() {\r\n        if (image.debug) {\r\n            image.logger.groupEnd();\r\n        }\r\n    };\r\n\r\n    // Um den Scale der gesamten Seite im PackAndGo zu unterstützen\r\n    var rootPanel = document.getElementById(\"gwtGuiWindowRootLayoutPanel\");\r\n    if ((rootPanel != undefined) && (typeof (rootPanel.style.transform) != \"undefined\") && (typeof (rootPanel.style.transform.match) != \"undefined\")) {\r\n        var trans = rootPanel.style.transform;\r\n        var matches = trans.match(/(scale)|(\\d(.\\d+)?)/g);\r\n        if (matches != null) {\r\n            for (var index = 0; index < matches.length; index++) {\r\n                if (matches[index] === \"scale\") {\r\n                    DW_PAGE_SCALE = matches[index + 1];\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    dwImageViewerSetPan(elementId);\r\n    dwImageViewerToggleZoomRect(elementId);\r\n}\r\n\r\nfunction dwImageViewerInitEnd(elementId) {\r\n    var image = dwImageViewerGetImage(elementId);\r\n    if (image == null) { // kann durch die Verwendung von setTimeout() passieren\r\n        return;\r\n    }\r\n\r\n    if (!dwImageViewerUpdateOverviewVisibility(elementId, image.dwInitialHidePanWindow)) {\r\n        // Overview-Fenster kann nicht angezeigt werden -> Zoom initial auf 100% setzen\r\n        image.dwCurrentZoomLevel = 1.0;\r\n    }\r\n\r\n    dwImageViewerAddHotspotSpans(elementId, false);\r\n\r\n    var sliderKnob = $(elementId + \"_sliderKnob\");\r\n    var sliderImage = $(elementId + \"_slider\");\r\n    sliderKnob.style.left = ((sliderImage.offsetWidth - sliderKnob.offsetWidth)\r\n                             * imageViewerSliderZoomToLogarithm(image.dwCurrentZoomLevel) / 2000.0) - 1 + \"px\";\r\n\r\n    var imagescroll = $(elementId + \"_imagescroll\");\r\n    if (imagescroll.addEventListener) {\r\n        if (!image.plainImageOnly) {\r\n            imagescroll.addEventListener('DOMMouseScroll', function(event) {\r\n                dwImageViewerMouseWheel(event, elementId)\r\n            }, false);\r\n        }\r\n    }\r\n\r\n    dwImageViewerInitEndPartTwo(elementId, false);\r\n}\r\n\r\nfunction dwImageViewerInitEndPartTwo(elementId, isUpdateHotpots) {\r\n    var image = dwImageViewerGetImage(elementId);\r\n    if (image == null) { // kann durch die Verwendung von setTimeout() passieren\r\n        return;\r\n    }\r\n\r\n    setTimeout(function() {\r\n        if (DW_IMAGE_LAST_ELEMENT_ID == elementId) {\r\n            image.dwCurrentZoomLevel = DW_IMAGE_LAST_ZOOM;\r\n\r\n            // Hotspot-Daten von vorheriger Instanz mit gleicher elementId übernehmen\r\n            if (image.lastHotspotKey == null) {\r\n                image.lastHotspotKey = DW_IMAGE_LAST_HOTSPOT_KEY;\r\n                image.lastHotspotKeyVer = DW_IMAGE_LAST_HOTSPOT_KEY_VER;\r\n            }\r\n        } else {\r\n            DW_IMAGE_LAST_ELEMENT_ID = elementId;\r\n\r\n            // Hotspot-Daten von vorheriger Instanz zurücksetzen\r\n            DW_IMAGE_LAST_HOTSPOT_KEY = null;\r\n            DW_IMAGE_LAST_HOTSPOT_KEY_VER = null;\r\n        }\r\n        if (dwImageViewerSetNormalizedZoom_immediately(image, true, null)) {\r\n            DW_IMAGE_LAST_ZOOM = image.dwCurrentZoomLevel;\r\n        }\r\n\r\n        if (!isUpdateHotpots) {\r\n            if ((image.lastHotspotKey != null) && !image.isMultiSelection) {\r\n                // letzten Hotspot-Key und KeyVer merken, da diese durch dwImageMarkHotspotsForKey() zurückgesetzt werden\r\n                var lastHotspotKey = image.lastHotspotKey;\r\n                var lastHotspotKeyVer = image.lastHotspotKeyVer;\r\n\r\n                // explizit dwImageScrollToHotspotForKey() nach dem Markieren aufrufen, da der Hotspot evtl. schon markiert\r\n                // war und dann nicht dorthin gescrollt werden würde\r\n                dwImageMarkHotspotsForKey(elementId, lastHotspotKey, lastHotspotKeyVer, false, false, false, null);\r\n                dwImageScrollToHotspotForKey(elementId, lastHotspotKey, lastHotspotKeyVer);\r\n            }\r\n\r\n            image.style.visibility = \"visible\";\r\n            image.initialized = true;\r\n\r\n            // Im IPP nicht vorhanden\r\n            if (image.viewerType != \"viewerimagesvgnative\") {\r\n                if (typeof (dwAjaxImageLoaded) != \"undefined\") {\r\n                    dwAjaxImageLoaded(null, elementId, elementId, \"\", true);\r\n                } else if (typeof (dwSwingFrameworkFireCallbackEvent) != \"undefined\") {\r\n                    dwSwingFrameworkFireCallbackEvent(\"imageLoadedEvent\", \"\");\r\n                }\r\n            }\r\n            dwImageViewerUpdateOverviewVisibility(elementId, image.dwInitialHidePanWindow);  // Pan-Window zuverlässig ein/ausblenden, nachdem jetzt Breite/Höhe feststeht\r\n        }\r\n    }, 50); // 10ms funktioniert unter iOS nicht\r\n\r\n    if (!image.unmarkedHotspotsVisible) {\r\n        dwImageSetUnmarkedHotspotsVisibility(elementId, false);\r\n    }\r\n}\r\n\r\nfunction dwImageViewerAddHotspotSpans(elementId, isUpdateHotpots) {\r\n    let image = dwImageViewerGetImage(elementId);\r\n    if (image == null) { // kann durch die Verwendung von setTimeout() passieren\r\n        return;\r\n    }\r\n\r\n    for (let i = 0; i < image.hotspots.length; i++) {\r\n        let hotspot = image.hotspots[i];\r\n        image.log(\"addHotspotToImage (key=\" + hotspot.key + \")\");\r\n        hotspot.addToImage(elementId);\r\n    }\r\n\r\n    if (isUpdateHotpots) {\r\n        dwImageViewerInitEndPartTwo(elementId, true);\r\n    }\r\n}\r\n\r\nfunction dwImageViewerModifyFileOnlyMode(src) {\r\n    if (DW_IMAGE_DIR_MODE) {\r\n        var charmap = {};\r\n        charmap['?'] = '/';\r\n        charmap['&'] = '_';\r\n        charmap['='] = '_';\r\n        charmap['.'] = '_';\r\n        return dwUtilsReplaceCharacters(src, charmap) + \".png\";\r\n    } else {\r\n        return src;\r\n    }\r\n}\r\n\r\nfunction dwImageViewerGetMinHeightForViewerControls() {\r\n    var minHeight;\r\n\r\n    // 255px = GuiViewerUtils.OVERVIEW_HEIGHT_OPEN * 1.5 bei Desktop-GUI bzw. 200px bei mobilen Anwendungen auf Smartphones\r\n    // (480px = MobileGui.MINIMUM_WIDTH_FOR_2_VIEWS)\r\n    if (framework_isMobileView && ((framework_displayWidth < 480) || (framework_displayHeight < 480))) {\r\n        minHeight = 200;\r\n    } else {\r\n        minHeight = 255;\r\n    }\r\n    return minHeight;\r\n}\r\n\r\nfunction dwImageViewerUpdateOverviewVisibility(elementId, hidePanWindow) {\r\n    var control = $(elementId);\r\n    if (control == null) {\r\n        return true;\r\n    }\r\n    var overview = $(elementId + \"_overview\");\r\n    var image = dwImageViewerGetImage(elementId);\r\n    if (image == null) { // kann durch die Verwendung von setTimeout() passieren\r\n        return;\r\n    }\r\n    if (image.dwForceNoPanWindow) {\r\n        dwDomSetStyle(overview, \"display\", \"none\");\r\n        return false;\r\n    }\r\n    var minHeight = dwImageViewerGetMinHeightForViewerControls();\r\n\r\n    if (!hidePanWindow && (control.offsetHeight > minHeight)) {\r\n        dwDomSetStyle(overview, \"display\", \"\");\r\n        return true;\r\n    } else {\r\n        if (overview.offsetHeight > 0) { // offsetHeight merken, würde sonst 0, wenn unsichtbar\r\n            overview.oldOffsetHeight = overview.offsetHeight;\r\n        }\r\n        dwDomSetStyle(overview, \"display\", \"none\");\r\n        return false;\r\n    }\r\n}\r\n\r\nfunction dwImageViewerHotspot(elementId, x1, y1, x2, y2, linkStyle, linkStyleMark, linkStyleFocused,\r\n                              color, colorMark, colorFocused,\r\n                              marked, focused, key, keyVer, uniqueId, text, type,\r\n                              isWithHover, colorHover, isWithOutline, colorOutline, fontSize, fontName, fontWeight) {\r\n    this.elementId = elementId;\r\n    this.x1 = x1;\r\n    this.y1 = y1;\r\n    this.x2 = x2;\r\n    this.y2 = y2;\r\n    this.width = x2 - x1;\r\n    this.height = y2 - y1;\r\n    this.linkStyle = linkStyle;\r\n    this.linkStyleMark = linkStyleMark;\r\n    this.linkStyleFocused = linkStyleFocused;\r\n    this.color = color;\r\n    this.colorMark = colorMark;\r\n    this.colorFocused = colorFocused;\r\n    this.isWithHover = isWithHover;\r\n    this.colorHover = colorHover;\r\n    this.isWithOutline = isWithOutline;\r\n    this.colorOutline = colorOutline;\r\n    this.marked = marked;\r\n    this.focused = focused;\r\n    this.key = key;\r\n    this.keyVer = keyVer;\r\n    this.uniqueId = uniqueId;\r\n    this.text = text;\r\n    this.type = type;\r\n    this.fontSize = fontSize;\r\n    this.fontName = fontName;\r\n    this.fontWeight = fontWeight;\r\n    this.manualClickUrl = null;\r\n    this.manualClickTarget = null;\r\n    this.manualDoubleClickUrl = null;\r\n    this.manualDoubleClickTarget = null;\r\n}\r\n\r\n/**\r\n * ändert den Fokusiert-Status der beiden übergebenen Hotspots. Ein Fokusierter Hotspot ist ein Hotspot der geklickt wurde\r\n * oder der über den \"Weiterschalten\"-Button im ImageOverlay fokusiert wurde. Fokusiert-Status hilft zu unterscheiden\r\n * wenn es mehrere Hotspots mit gleichem Key gibt und die nah beiandner liegen, welcher Hotspot gerade der \"aktive\" ist\r\n * den man über den \"Weiterschalten-\"Button bekommen hat.\r\n * @param elementId\r\n * @param uniqueIdOfNewFocusedHotspot\r\n * @param uniqueIdOfOldFocusedHotspot\r\n */\r\nfunction dwChangeFocusOfHotspot(elementId, uniqueIdOfNewFocusedHotspot, uniqueIdOfOldFocusedHotspot) {\r\n    var image = dwImageViewerGetImage(elementId);\r\n    // Find the hotspots\r\n    var newHotspot, oldHotspot;\r\n    for (let i = 0; i < image.hotspots.length; i++) {\r\n        if (image.hotspots[i].uniqueId === uniqueIdOfNewFocusedHotspot) {\r\n            newHotspot = image.hotspots[i];\r\n        } else if ((uniqueIdOfOldFocusedHotspot !== null) && (image.hotspots[i].uniqueId === uniqueIdOfOldFocusedHotspot)) {\r\n            oldHotspot = image.hotspots[i];\r\n        }\r\n    }\r\n\r\n    if (oldHotspot != undefined) {\r\n        var oldHotspotSpan = $(uniqueIdOfOldFocusedHotspot);\r\n        oldHotspotSpan.hotspot.focused = false;\r\n        dwImagePaintHotspot(oldHotspotSpan);\r\n    }\r\n\r\n    if (newHotspot != undefined) {\r\n        var newHotspotSpan = $(uniqueIdOfNewFocusedHotspot);\r\n        newHotspotSpan.hotspot.focused = true;\r\n        dwImagePaintHotspot(newHotspotSpan);\r\n        dwImageScrollToHotspot(uniqueIdOfNewFocusedHotspot);\r\n    }\r\n}\r\n\r\ndwImageViewerHotspot.prototype.addToImage = function(elementId) {\r\n    var image = dwImageViewerGetImage(elementId);\r\n    if (image == null) { // kann durch die Verwendung von setTimeout() passieren\r\n        return;\r\n    }\r\n\r\n\r\n    var hotspotSpanClickArea = document.createElement(\"span\");\r\n    hotspotSpanClickArea.hotspot = this;\r\n    hotspotSpanClickArea.id = this.uniqueId;\r\n    hotspotSpanClickArea.style.position = \"absolute\";\r\n    hotspotSpanClickArea.style.left = \"0px\";\r\n    hotspotSpanClickArea.style.top = \"0px\";\r\n    hotspotSpanClickArea.style.width = \"100%\";\r\n    hotspotSpanClickArea.style.height = \"100%\";\r\n    hotspotSpanClickArea.style.visibility = \"visible\";\r\n    hotspotSpanClickArea.style.backgroundColor = \"transparent\";\r\n    hotspotSpanClickArea.style.cursor = \"pointer\";\r\n    hotspotSpanClickArea.style.mixBlendMode = \"darken\";\r\n    if (framework_isDevelopmentQFTest) {\r\n        hotspotSpanClickArea.setAttribute(\"compname\", \"hotspot_\" + this.key);\r\n        hotspotSpanClickArea.setAttribute(\"compclass\", \"javax.swing.JLabel\");\r\n    }\r\n\r\n    // Vorher rausziehen. Im Event handler geht this ja auf die Function\r\n    var elementId = this.elementId;\r\n    var key = this.key;\r\n    var keyVer = this.keyVer;\r\n    var uniqueId = this.uniqueId;\r\n    var hotspotClickfunction = function(event) {\r\n        event = dwFrameworkGetEvent(event);\r\n        // bei Touch-Emulation nur die emulierten MouseEvents berücksichtigen (sonst wird der Event bei Desktop-Browsern doppelt ausgewertet)\r\n        if (DWTOUCH_TOUCH_EMULATION_ENABLED && !event.dwTouch) {\r\n            return;\r\n        }\r\n        // Wenn gerade Zeichnungsausschnitt auswählen aktiv ist, möchte man keine Hotspotselektion machen, sondern einen Ausschnitt wählen\r\n        // Sonst würde das Event zum Auswählen des Ausschnitts nicht mehr kommen, wenn das Hotspot-click event ausgelöst wird.\r\n        if (image.panZoom2Rect) {\r\n            return;\r\n        }\r\n        image.log(\"clicked hotspot (key=\" + key + \" keyver=\" + keyVer + \")\");\r\n        var rightClicked = event.button == 2;\r\n        dwImageMarkHotspotsForKey(elementId, key, keyVer, !image.isMultiSelection, false, rightClicked, uniqueId);\r\n\r\n        if (framework_isMobileView && (hotspotSpanClickArea.hotspot.text != \"\")) {\r\n            dwTooltip_delayShowTooltip(event, hotspotSpanClickArea.hotspot.text, 0);\r\n        }\r\n\r\n        dwFrameworkDisableEventBubbling(event);\r\n        if ((this.hotspot.manualClickUrl != null) && (this.hotspot.manualClickTarget != null)) {\r\n            dwUtilsLoadUrlInTarget(this.hotspot.manualClickUrl, this.hotspot.manualClickTarget)\r\n        } else if (typeof (dwAjaxAddUpdate) != \"undefined\") {\r\n            dwAjaxAddUpdate(elementId + \"@DW@\" + elementId + \"@DW@imageHotspotClickedEvent@DW@hotspotId=\" + dwImageGetMarkedHotspotIds(elementId).join(\"|\") +\r\n                            \"@DWSUB@focusedHotspotId=\" + dwImageGetFocusedHotspotId(elementId) +\r\n                            \"@DWSUB@mouseButton=\" + (event.button + 1), true);\r\n        } else if (typeof (dwSwingFrameworkFireCallbackEvent) != \"undefined\") {\r\n            dwSwingFrameworkFireCallbackEvent(\"imageHotspotClickedEvent\", uniqueId + \"@DWSUB@\" + (event.button + 1));\r\n        } else if (typeof (hotspotClicked) != \"undefined\") {\r\n            // GWT\r\n            hotspotClicked(key, 1);\r\n        } else {\r\n            // Hier kann es sich nur um eine IPP Anwendung handeln (ansonsten existiert dwAjaxAddUpdate)\r\n            // Firefox lässt den Zugriff auf parent Methoden/Attribute nicht zu, wenn der parent in einer anderen Domain ist (XSS Schutz)\r\n            // -> permission denied\r\n            try {\r\n                if (typeof (parent.highlightPartlistRow) != \"undefined\") {\r\n                    parent.highlightPartlistRow(key, true);\r\n                }\r\n            } catch (exception) {\r\n                // Alternative Ursache (zu XSS) - siehe https://bugzilla.mozilla.org/show_bug.cgi?id=911444\r\n            }\r\n        }\r\n    };\r\n\r\n    // Unbedingt immer auf mousedown lassen, weil nur bei Mousedown-Event die Clicks von Linksklick, Rechtsklick und auch\r\n    // die Touchemulation durchkommt. Bei onClick z.b. kommt nämlich kein Rechtsklick vom Browser an und Hotspots sollen\r\n    // auch bei Rechtsklick selektiert werden.\r\n    hotspotSpanClickArea.onmousedown = hotspotClickfunction;\r\n\r\n    hotspotSpanClickArea.ondblclick = function(event) {\r\n        event = dwFrameworkGetEvent(event);\r\n        // bei Touch-Emulation nur die emulierten MouseEvents berücksichtigen (sonst wird der Event bei Desktop-Browsern doppelt ausgewertet)\r\n        if (DWTOUCH_TOUCH_EMULATION_ENABLED && !event.dwTouch) {\r\n            return;\r\n        }\r\n        // Teilweise kommt es vor durch unglückliches schnelles links und dann rechtsklick, dass er das als\r\n        // dblClick wertet. Deshalb bei DblClick mit rechter Mouse hier nichts machen.\r\n        var rightClicked = event.button == 2;\r\n        if (rightClicked) {\r\n            return;\r\n        }\r\n        // Bei einem Doppelclick lassen wir nur den letzten Klick zu und deselektieren alle anderen Einträge\r\n        dwImageMarkHotspotsForKey(elementId, key, keyVer, true, false, false, uniqueId);\r\n        dwFrameworkDisableEventBubbling(event);\r\n        if ((this.hotspot.manualDoubleClickUrl != null) && (this.hotspot.manualDoubleClickTarget != null)) {\r\n            dwUtilsLoadUrlInTarget(this.hotspot.manualDoubleClickUrl, this.hotspot.manualDoubleClickTarget)\r\n        } else if (typeof (dwAjaxAddUpdate) != \"undefined\") {\r\n            dwAjaxAddUpdate(elementId + \"@DW@\" + elementId + \"@DW@imageHotspotDoubleClickedEvent@DW@hotspotId=\" + uniqueId +\r\n                            \"@DWSUB@mouseButton=\" + (event.button + 1), true);\r\n        } else if (typeof (dwSwingFrameworkFireCallbackEvent) != \"undefined\") {\r\n            dwSwingFrameworkFireCallbackEvent(\"imageHotspotDoubleClickedEvent\", uniqueId + \"@DWSUB@\" + (event.button + 1));\r\n        } else if (typeof (hotspotClicked) != \"undefined\") {\r\n            // GWT\r\n            hotspotClicked(key, 2);\r\n        } else {\r\n            // Hier kann es sich nur um eine IPP Anwendung handeln (ansonsten existiert dwAjaxAddUpdate)\r\n            // Firefox lässt den Zugriff auf parent Methoden/Attribute nicht zu, wenn der parent in einer anderen Domain ist (XSS Schutz)\r\n            // -> permission denied\r\n            try {\r\n                if (typeof (parent.loadAssembly) != \"undefined\") {\r\n                    if (hotspotSpanClickArea.hotspot.type == \"G\") {\r\n                        // IPP Bildportierung\r\n                        parent.loadAssembly(key, \"\", \"\");\r\n                    }\r\n                }\r\n            } catch (exception) {\r\n                // Alternative Ursache (zu XSS) - siehe https://bugzilla.mozilla.org/show_bug.cgi?id=911444\r\n            }\r\n        }\r\n    };\r\n    hotspotSpanClickArea.onmouseover = function(event) {\r\n        if (event == null) {\r\n            // IE8\r\n            event = window.event;\r\n        }\r\n        if (hotspotSpanClickArea.hotspot.text != \"\") {\r\n            dwTooltip_delayShowTooltip(event, hotspotSpanClickArea.hotspot.text, DWTOOLTIP_DELAY_DEFAULT_VALUE);\r\n        }\r\n    };\r\n    hotspotSpanClickArea.onmouseout = function(event) {\r\n        // onmouseout bei echten mobilen Browsern mit Touch-Emulation (aktuell nur IE >= 10 auf Windows Tablets) ignorieren,\r\n        // wenn es sich nicht um einen durch die Touch-Emulation erzeugten Event handelt\r\n        if (framework_isMobileBrowser && DWTOUCH_TOUCH_EMULATION_ENABLED && !event.dwTouch) {\r\n            return;\r\n        }\r\n\r\n        dwTooltip_hideTooltips();\r\n    };\r\n    this.span = hotspotSpanClickArea;\r\n    var hotspotDivClick = $(elementId + \"_hotspots_click\");\r\n    hotspotSpanClickArea.hotspot = this;\r\n    hotspotDivClick.appendChild(hotspotSpanClickArea);\r\n\r\n\r\n    dwImagePaintHotspot(hotspotSpanClickArea);\r\n};\r\n\r\ndwImageViewerHotspot.prototype.resizeForImage = function(image, imageLeft, imageTop, imageWidth, imageHeight) {\r\n    var hotspotWidth = Math.min(imageWidth, (this.width / image.dwFactor * image.dwCurrentZoomLevel));\r\n    var hotspotHeight = Math.min(imageHeight, (this.height / image.dwFactor * image.dwCurrentZoomLevel));\r\n\r\n    //-1 weil wenn die Größe des Hotspotviews gleich der Größe des Bildes ist, wird manchmal schon\r\n    // das Scrollpane gezeigt, weil das Hotspotview zu groß für Scrollpane ist\r\n    let left = Math.max(0, (this.x1 / image.dwFactor * image.dwCurrentZoomLevel) - 1);\r\n    let top = Math.max(0, (this.y1 / image.dwFactor * image.dwCurrentZoomLevel) - 1);\r\n    this.span.style.left = left + \"px\";\r\n    this.span.style.top = top + \"px\";\r\n\r\n    this.span.width = hotspotWidth; // notwendig für den Canvas von Ellipsen, schadet aber auch sonst nicht\r\n    this.span.style.width = hotspotWidth + \"px\";\r\n    this.span.height = hotspotHeight; // notwendig für den Canvas von Ellipsen, schadet aber auch sonst nicht\r\n    this.span.style.height = hotspotHeight + \"px\";\r\n\r\n    if (this.span.dwCanvas != null) {\r\n        // Beim Canvas muss bei jedem Resize neu gezeichnet werden\r\n        dwImagePaintHotspot(this.span);\r\n    }\r\n    this.span.style.visibility = \"visible\";\r\n};\r\n\r\ndwImageViewerHotspot.prototype.setManualClickUrl = function(url, target) {\r\n    this.manualClickUrl = url;\r\n    this.manualClickTarget = target;\r\n};\r\n\r\ndwImageViewerHotspot.prototype.setManualDoubleClickUrl = function(url, target) {\r\n    this.manualDoubleClickUrl = url;\r\n    this.manualDoubleClickTarget = target;\r\n};\r\n\r\n/**\r\n * Wird gerufen wenn gezoomt werden soll. Bildanpassung passiert aber ein paar Millisekunden später.\r\n * @param image Dom Element id_image\r\n * @param zoom Wieviel reingezoomt werden soll (1.0 = gesamtes Bild anzeigen)\r\n * @param when wieviel millisekunden gewartet werden soll\r\n */\r\nfunction dwImageViewerSetNormalizedZoom(image, zoom, centerPoint, when) {\r\n    if (image == null) { // kann evtl. durch verzögerte Zoom-Aufrufe vom Server passieren\r\n        return;\r\n    }\r\n\r\n    if (zoom <= 1.0001) {\r\n        zoom = 1.0;\r\n    }\r\n    if (zoom >= 19.999) {\r\n        zoom = 20.0;\r\n    }\r\n    var zoomChanged = !(Math.abs(image.dwCurrentZoomLevel - zoom) < 0.0001);\r\n    if (!zoomChanged && (zoom > 1)) {\r\n        return;\r\n    }\r\n    image.dwCurrentZoomLevel = zoom;\r\n    DW_IMAGE_LAST_ZOOM = zoom;\r\n    if (zoomChanged) {\r\n        if (typeof (dwAjaxAddUpdate) != \"undefined\") {\r\n            dwAjaxAddUpdate(image.elementId + \"@DW@\" + image.elementId + \"@DW@imageZoomChangedEvent@DW@zoom=\" + zoom, true);\r\n        } else if (typeof (dwSwingFrameworkFireCallbackEvent) != \"undefined\") {\r\n            dwSwingFrameworkFireCallbackEvent(\"imageZoomChangedEvent\", zoom);\r\n        }\r\n    }\r\n    if (when <= 0) {\r\n        dwImageViewerSetNormalizedZoom_immediately(image, false, centerPoint);\r\n    } else {\r\n        setTimeout(function() {\r\n            dwImageViewerSetNormalizedZoom_immediately(image, false, centerPoint);\r\n        }, when);\r\n    }\r\n}\r\n\r\n/**\r\n * Normalisierten Zoomfaktor umrechnen in Slider-Bereich (von 100 bis 2000)\r\n */\r\nfunction imageViewerSliderZoomToLogarithm(value) {\r\n    var zoomValue = value * 100;\r\n    var minValue = 100;\r\n    var maxValue = 2000;\r\n    if ((zoomValue >= maxValue) || (zoomValue <= minValue)) {\r\n        return zoomValue;\r\n    }\r\n\r\n    var y = zoomValue;\r\n    var weite = maxValue - minValue;\r\n    var logBauch = 2.0;\r\n    var f = weite * (1 + (Math.log((y - 100) / (maxValue - 100) * (Math.exp(logBauch) - Math.exp(-logBauch))\r\n                                   + Math.exp(-logBauch)) / logBauch));\r\n    return f / 2 + minValue;\r\n}\r\n\r\n/**\r\n * Wert innerhalb des Slider-Bereichs (von 100 bis 2000) umrechnen in normalisierten Zoomfaktor\r\n */\r\nfunction imageViewerSliderLogarithmToZoom(logValue) {\r\n    var minValue = 100;\r\n    var maxValue = 2000;\r\n    var x = logValue - minValue;\r\n    var weite = maxValue - minValue;\r\n    var logBauch = 2.0;\r\n    return (Math.exp((x / weite * 2 * logBauch) - logBauch) - Math.exp(-logBauch))\r\n           / (Math.exp(logBauch) - Math.exp(-logBauch)) * (maxValue / 100 - 1) + 1;\r\n}\r\n\r\n/**\r\n * Setzt den neuen Zoomfaktor sofort\r\n *\r\n * @param image\r\n */\r\nfunction dwImageViewerSetNormalizedZoom_immediately(image, forceNewImage, centerPoint) {\r\n    if ((image == null) || (image.parentNode == null)) { // kann durch die Verwendung von setTimeout() passieren\r\n        // Außerdem beim wilden klicken GWT + IE11 im IE10 Kompatibilitätsmodus und außerdem in\r\n        // der HMI Software (NICHT! wenn man den IE11 der HMI normal öffnet)\r\n        return false;\r\n    }\r\n\r\n    var sliderImage = $(image.elementId + \"_slider\");\r\n    var sliderKnob = $(image.elementId + \"_sliderKnob\");\r\n    if ((sliderImage != null) && (sliderKnob != null)) { // kann durch die Verwendung von setTimeout() passieren\r\n        var knobWidth = sliderKnob.offsetWidth;\r\n        sliderKnob.style.left = (((sliderImage.offsetWidth - knobWidth)\r\n                                  * imageViewerSliderZoomToLogarithm(image.dwCurrentZoomLevel) / 2000.0) - 1) + \"px\";\r\n    }\r\n\r\n    var displayWidth = image.parentNode.offsetWidth;\r\n    var displayHeight = image.parentNode.offsetHeight;\r\n    if ((displayWidth == 0) || (displayHeight == 0)) {\r\n        return false;\r\n    }\r\n\r\n    // Falls die Breite oder Höhe vom Parent <= 10 Pixel ist, so ist der Parent gerade z.B. in einem DockingPanel ausgeblendet\r\n    // und der entsprechende Faktor würde viel zu groß werden, was in der Anzeige dann zu viel zu großen Hotspots führen\r\n    // kann. Das Problem tritt primär in Chrome auf beim Aufklappen von einem DockingPanel.\r\n    var factorX = image.dwWidth / displayWidth;\r\n    var factorY = image.dwHeight / displayHeight;\r\n    var isHeightLimited = ((factorX < factorY) && (displayHeight > 10)) || (displayWidth <= 10); // Ob das Bild in die Höhe eher beschränkt ist wie in die Breite\r\n    image.dwFactor = (isHeightLimited) ? factorY : factorX;\r\n    if (image.dontZoomSmallImagesAtStart && image.dwFactor < 1) {\r\n        // In dem Modus dontZoomSmallImagesAtStart werden nur große Bilder in das Control eingepasst\r\n        // kleine Bilder nicht groß gezoomt. Zoomen ist aber natürlich schon möglich\r\n        image.dwFactor = 1;\r\n    }\r\n    var newImageDisplayWidth = Math.round(image.dwCurrentZoomLevel * image.dwWidth / image.dwFactor);\r\n    var newImageDisplayHeight = Math.round(image.dwCurrentZoomLevel * image.dwHeight / image.dwFactor);\r\n    if (!forceNewImage && (parseInt(image.style.height) == newImageDisplayHeight) && (parseInt(image.style.width) == newImageDisplayWidth)) {\r\n        dwImageViewerScrollUpdate(image.elementId, false);\r\n        dwImageViewerRepositionPanWindow(image.elementId);\r\n        return false;\r\n    }\r\n    if (centerPoint == null) {\r\n        centerPoint = dwImageViewerGetImageCenterPoint(image);\r\n    }\r\n    if (image.dwIsWithHiddenZoom) {\r\n        image.style.visibility = \"hidden\";           // wird erst in dwImageLoadImageInSrc wieder sichtbar gemacht\r\n        if (image.hotspots != null) {\r\n            for (var i = 0; i < image.hotspots.length; i++) {\r\n                var hotspot = image.hotspots[i];\r\n                hotspot.span.style.visibility = \"hidden\";\r\n            }\r\n        }\r\n    }\r\n    var imageWidthToBeSet = newImageDisplayWidth;\r\n    var imageHeightToBeSet = newImageDisplayHeight;\r\n    var imageLeftToBeSet = 0;\r\n    var imageTopToBeSet = 0;\r\n    // Zentrieren wenn nötig\r\n    if (newImageDisplayWidth < displayWidth) {\r\n        imageLeftToBeSet = (displayWidth - newImageDisplayWidth) / 2.0;\r\n    }\r\n    if (newImageDisplayHeight < displayHeight) {\r\n        imageTopToBeSet = (displayHeight - newImageDisplayHeight) / 2.0;\r\n    }\r\n    // Damit der imageViewer weiß, ob Scrollbars angezeigt werden ihm den Zustand schicken, damit er es bei sich speichert\r\n    // Leider liefert dwUtilsHasVerticalScrollbar bzw dwUtilsHasHorizontalScrollbar nicht zuverlässig ein richtiges Ergebnis zurück...\r\n    var imagescroll = $(image.elementId + \"_imagescroll\");\r\n\r\n    // zweifache Width, weil man die Pfeile der horizontalen Scrollbar auch noch einrechnen muss\r\n    var offset = (2 * dwUtilsGetScrollbarWidth(imagescroll));\r\n    var verticalScrollbarVisible = (newImageDisplayHeight > displayHeight);\r\n    var horizontalScrollbarVisible = verticalScrollbarVisible ? (newImageDisplayWidth > (displayWidth - offset)) : (newImageDisplayWidth > displayWidth);\r\n    var params = \"horizontal=\" + horizontalScrollbarVisible + \"@DWSUB@\" + \"vertical=\" + verticalScrollbarVisible;\r\n    if (typeof (dwAjaxAddUpdate) != \"undefined\") {\r\n        dwAjaxAddUpdate(image.elementId + \"@DW@\" + image.elementId + \"@DW@__custom_scrollbarVisibilityChanged@DW@\" + params, true);\r\n    } else if (typeof (dwSwingFrameWorkCallbackEvent) != \"undefined\") {\r\n        dwSwingFrameworkFireCallbackEvent(\"__custom_scrollbarVisibilityChanged\", uniqueId + \"@DWSUB@\" + params);\r\n    }\r\n\r\n    if (image.dwCurrentZoomLevel <= 1.0001) {\r\n        // Bug im IE und Chrome: wenn gleichzeitig beide Scrollbars angezeigt werden und man hier dann die Größe des Image anpasst, so dass kein Scrolling mehr notwendig ist,\r\n        // bleiben die Scrollbars trotzdem sichtbar\r\n        // deshalb wird hier im imageScroll DIV das Scrolling erst einmal abgeschalten und erst nach den Größenänderungen wieder eingeschalten (siehe unten)\r\n        dwDomSetStyle(image.parentNode, \"overflow\", \"hidden\");\r\n    }\r\n\r\n    if (dwImageElementIsTag(image, \"object\")) {\r\n        //bei Object-Tag (z.B. SVG) die Attribute margin-left/margin-top setzen statt left/top\r\n        dwDomSetStylesViaAttribute(image, \"width:\" + (imageWidthToBeSet - 2) + \"px;\" +\r\n                                          \"height:\" + (imageHeightToBeSet - 2) + \"px;\" +\r\n                                          \"margin-left: \" + Math.floor(imageLeftToBeSet) + \"px;\" +\r\n                                          \"margin-top: \" + Math.floor(imageTopToBeSet) + \"px;\");\r\n    } else {\r\n        dwDomSetStylesViaAttribute(image, \"width:\" + imageWidthToBeSet + \"px;\" +\r\n                                          \"height:\" + imageHeightToBeSet + \"px;\" +\r\n                                          \"left:\" + imageLeftToBeSet + \"px;\" +\r\n                                          \"top:\" + imageTopToBeSet + \"px;\");\r\n    }\r\n\r\n    dwImageViewerSetImageCenterPoint(image, centerPoint);\r\n\r\n    var hotspotClickLayer = $(image.elementId + \"_hotspots_click\");\r\n    if (hotspotClickLayer != null) {\r\n        dwDomSetStylesViaAttribute(hotspotClickLayer, \"left:\" + imageLeftToBeSet + \"px;\" +\r\n                                                      \"top:\" + imageTopToBeSet + \"px;\" +\r\n                                                      \"width:\" + imageWidthToBeSet + \"px;\" +\r\n                                                      \"height:\" + imageHeightToBeSet + \"px\");\r\n    }\r\n\r\n    if (image.hotspots != null) {\r\n        for (var i = 0; i < image.hotspots.length; i++) {\r\n            var hotspot = image.hotspots[i];\r\n            hotspot.resizeForImage(image, imageLeftToBeSet, imageTopToBeSet, imageWidthToBeSet, imageHeightToBeSet);\r\n        }\r\n    }\r\n\r\n    if (image.dwCurrentZoomLevel <= 1.0001) {\r\n        // Bug im IE und Chrome. siehe oben\r\n        // Scrolling im imagescroll DIV wieder einschalten\r\n        dwDomSetStyle(image.parentNode, \"overflow\", \"auto\");\r\n    }\r\n\r\n    if (image.useOriginalImage) {\r\n        dwImageLoadImageInSrc(image, image.dwWidth, image.dwHeight, forceNewImage);\r\n    } else if ((newImageDisplayWidth < image.dwWidth) && image.dwClientDownscale && (image.dwTileSize == 0)) { // nicht bei Tiling\r\n        dwImageLoadImageInSrc(image, image.dwWidth, image.dwHeight, forceNewImage);\r\n    } else if ((newImageDisplayWidth > image.dwWidth) && image.dwClientUpscale) {\r\n        dwImageLoadImageInSrc(image, image.dwWidth, image.dwHeight, forceNewImage);\r\n    } else {\r\n        // Neues Bild laden wenn nötig, solange runter und raufskalieren bis ein passendes da ist\r\n        var newImageWidth = image.dwWidth;\r\n        var newImageHeight = image.dwHeight;\r\n        var lastValueWidth = newImageWidth;\r\n        // Solange wir ein zu großes Bild haben, nehmen wir ein kleineres Bild\r\n        // Berechnungsalgorithmuss muss mit dem in ImageTilingCacher übereinstimmen, sonst gibt es einen Unterschied\r\n        // zwischen Tiling Cache und den angeforderten hier\r\n        var factor = 1.0;\r\n        var lastFactor = factor;\r\n        var doScaling = true;\r\n        while ((newImageWidth > newImageDisplayWidth) && doScaling) {\r\n            lastValueWidth = newImageWidth;\r\n            lastFactor = factor;\r\n            if (factor == 1.0) {\r\n                factor = DW_IMAGE_BIAS;\r\n            } else {\r\n                factor *= DW_IMAGE_BIAS;\r\n            }\r\n\r\n            // so lange skalieren bis newImageWidth und newImageHeight gerade kleiner sind als ImageConverter.TILE_SIZE = 512\r\n            doScaling = (newImageWidth > 512) || (newImageHeight > 512);\r\n\r\n            newImageWidth = Math.floor(image.dwWidth / factor);\r\n            newImageHeight = Math.floor(image.dwHeight / factor);\r\n            // Damit es nicht unendlich in der While Schleife hängen bleibt, wenn man z.B. Anzeigegröße 0 hat\r\n            if (newImageWidth == lastValueWidth) {\r\n                break;\r\n            }\r\n        }\r\n        // Nun haben wir eins zuviel runterge-whiled, z.B: Anzeigebreite 700, Bild aber Breite 600. Wir müssen nun das nächst-höhere nehmen\r\n        factor = lastFactor;\r\n        newImageWidth = Math.floor(image.dwWidth / factor);\r\n        newImageHeight = Math.floor(image.dwHeight / factor);\r\n        dwImageLoadImageInSrc(image, newImageWidth, newImageHeight, forceNewImage);\r\n        dwImageViewerScrollUpdate(image.elementId, true);\r\n        dwImageViewerRepositionPanWindow(image.elementId);\r\n        return true;\r\n    }\r\n    dwImageViewerScrollUpdate(image.elementId, true);\r\n    dwImageViewerRepositionPanWindow(image.elementId);\r\n    return false;\r\n}\r\n\r\n/**\r\n * Scrollt bei Mouseklick in das Nav-Overview-Fenster an die entsprechende Stelle im Bild.\r\n */\r\nfunction dwImageViewerGotoMousePos(event, elementId) {\r\n    dwFrameworkDisableEventBubbling(event);\r\n    var image = dwImageViewerGetImage(elementId);\r\n    if (image == null) { // kann durch die Verwendung von setTimeout() passieren\r\n        return;\r\n    }\r\n\r\n    var preview = $(elementId + \"_imgPreview\");\r\n\r\n    var eventPoint = dwUtilsGetRelMouseCoords(event, preview);\r\n    if (eventPoint.x < 0 || eventPoint.x > 170) {\r\n        // Wir sind außerhalb des Bildbereichs\r\n        return;\r\n    }\r\n    var newX = eventPoint.x / preview.offsetWidth * image.dwWidth;\r\n    var newY = eventPoint.y / preview.offsetHeight * image.dwHeight;\r\n\r\n    var point = new DWPoint(newX, newY);\r\n    dwImageViewerSetImageCenterPoint(image, point);\r\n}\r\n\r\n/**\r\n * Aktualisiert die Position des Nav-Overview-Rechtecks, wenn das Bild gescrollt wurde oder sich die Größe des\r\n * Anzeigebereichs geändert hat.\r\n */\r\nfunction dwImageViewerScrollUpdate(elementId, zoomFactorChanged) {\r\n    var image = dwImageViewerGetImage(elementId);\r\n    if (image == null) { // kann durch die Verwendung von setTimeout() passieren\r\n        return;\r\n    }\r\n    if (image.dwTileSize > 0) {\r\n        var currentImageWidth = image.dwLastImageWidthForTiles;\r\n        var offsetWidth = image.offsetWidth;\r\n        var offsetHeight = image.offsetHeight;\r\n        for (var zoomLevelKey in image.dwTileInfosForAllZoomLevels) {\r\n            var tilesInfo = image.dwTileInfosForAllZoomLevels[zoomLevelKey];\r\n            if (tilesInfo != null) {\r\n                var tiles = tilesInfo.tiles;\r\n                var imageWidth = tilesInfo.imageWidth;\r\n                var imageHeight = tilesInfo.imageHeight;\r\n                var tileSize = tilesInfo.tileSize;\r\n                var isCurrentZoomLevel = imageWidth == currentImageWidth;\r\n\r\n                // beim reinen Scrollen müssen nur die Kacheln vom aktuellen Zoom-Level aktualisiert werden\r\n                if (isCurrentZoomLevel || zoomFactorChanged) {\r\n                    dwImageViewerUpdateTiles(image, offsetWidth, offsetHeight, tiles, imageWidth, imageHeight, tileSize,\r\n                                             isCurrentZoomLevel);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    // Scrollen im IE während zoom2rect aktiv: Wird als Klick für zoom interpretiert, daher ausschalten\r\n    if (DW_IMAGE_ZOOMRECT != null) {\r\n        DW_IMAGE_ZOOMRECT = null;\r\n        var zoomRect = $(elementId + \"_zoom2rect\");\r\n        zoomRect.style.display = \"none\";\r\n    }\r\n\r\n    var previewImg = $(elementId + \"_imgPreview\");\r\n    var previewImgWidth = previewImg.offsetWidth;\r\n    var previewImgHeight = previewImg.offsetHeight;\r\n\r\n    // weil manchmal das kleine Rechteck die falsche Position hat nach Wechsel auf eine andere Zeichnung\r\n    if (image.panOpened && (previewImgWidth == 0)) {\r\n        setTimeout(function() {\r\n            dwImageViewerScrollUpdate(elementId, false)\r\n        }, 50);\r\n        return;\r\n    }\r\n\r\n    previewImg.style.visibility = \"visible\";\r\n\r\n    var displayWidth = image.parentNode.clientWidth;\r\n    var displayHeight = image.parentNode.clientHeight;\r\n\r\n    var factorX = image.dwWidth / displayWidth;\r\n    var factorY = image.dwHeight / displayHeight;\r\n    var isHeightLimited = factorX < factorY; // Ob das Bild in die Höhe eher beschränkt ist wie in die Breite\r\n    var dwFactor = isHeightLimited ? factorY : factorX;\r\n\r\n    var newWidthInt = parseInt(image.dwCurrentZoomLevel * image.dwWidth / dwFactor);\r\n    var newHeightInt = parseInt(image.dwCurrentZoomLevel * image.dwHeight / dwFactor);\r\n\r\n    var newLeft = Math.max(previewImg.offsetLeft, Math.min(previewImg.offsetLeft + previewImg.offsetWidth - 1, previewImg.offsetLeft + parseInt(previewImgWidth * image.parentNode.scrollLeft / newWidthInt)));\r\n    var newTop = Math.max(previewImg.offsetTop, Math.min(previewImg.offsetTop + previewImg.offsetHeight - 1, previewImg.offsetTop + parseInt(previewImgHeight * image.parentNode.scrollTop / newHeightInt)));\r\n    var newWidth = Math.max(1, Math.min(previewImg.offsetWidth - 1, parseInt(previewImgWidth * displayWidth / newWidthInt)));\r\n    var newHeight = Math.max(1, Math.min(previewImg.offsetHeight - 1, parseInt(previewImgHeight * displayHeight / newHeightInt)));\r\n\r\n    // Dafür sorgen, dass es nicht woanders gezeichnet wird als über dem previewImg, auch wenn es mal in IE8 in der VM\r\n    // so langsam ist, dass es Rechenfehler gibt. Liegt aber auch an der aktuellen Eventverkettung JFRAME-429\r\n    if (newLeft + newWidth > previewImg.offsetLeft + previewImg.offsetWidth - 1) {\r\n        newLeft = previewImg.offsetLeft + previewImg.offsetWidth - 1 - newWidth;\r\n    }\r\n    if (newTop + newHeight > previewImg.offsetTop + previewImg.offsetHeight - 1) {\r\n        newTop = previewImg.offsetTop + previewImg.offsetHeight - 1 - newHeight;\r\n    }\r\n\r\n    var drawRect = $(elementId + \"_imageNavRect\");\r\n    dwDomSetStylesViaAttribute(drawRect, \"left:\" + newLeft + \"px;\" +\r\n                                         \"top:\" + newTop + \"px;\" +\r\n                                         \"width:\" + newWidth + \"px;\" +\r\n                                         \"height:\" + newHeight + \"px;\" +\r\n                                         \"visibility:visible\");\r\n\r\n    var drawRectInner = $(elementId + \"_imageNavRectInner\");\r\n    dwDomSetStylesViaAttribute(drawRectInner, \"width:\" + Math.max(0, newWidth - 1) + \"px;\" +\r\n                                              \"height:\" + Math.max(0, newHeight - 1) + \"px;\" +\r\n                                              \"visibility:visible\");\r\n\r\n}\r\n\r\n/**\r\n * Bei Größenänderungen des Fensters soll sich das Overview-Fenster neu ausrichten (es könnte in einer der rechten\r\n * Ecken sein).\r\n */\r\nfunction dwImageViewerScrollResize(elementId, hidePanWindow) {\r\n    if (!dwFrameworkInitFinished) {\r\n        return;\r\n    }\r\n    var image = dwImageViewerGetImage(elementId);\r\n    if (image == null) { // die Zeichnung existiert nicht mehr\r\n        return;\r\n    }\r\n\r\n    setTimeout(function() {\r\n        dwImageViewerUpdateOverviewVisibility(elementId, hidePanWindow);\r\n    }, 10);\r\n\r\n    if ((typeof (image) == \"undefined\") || (typeof (image.initialized) == \"undefined\") || (!image.initialized)) {\r\n        // Viewer ist noch nicht fertig initialisiert worden, oder bereits wieder entfernt\r\n        return;\r\n    }\r\n\r\n    // beim Maximieren von Desktop-Browsern und für die mobile GUI setTimeout() verwenden, da ansonsten falsche Breiten-\r\n    // und Höhenangaben in dwImageViewerCornerClicked() ausgewertet werden\r\n    setTimeout(function() {\r\n        dwImageViewerSetNormalizedZoom_immediately(image, true);\r\n    }, 50);\r\n}\r\n\r\n/**\r\n * Beim Drücken der Maustaste soll der Cursor geändert werden, bewegen scrollt das Bild.\r\n */\r\nfunction dwImageViewerImageMouseDown(e, elementId) {\r\n    if (dwUtilsIsClickOnScrollBar(e)) {\r\n        return;\r\n    }\r\n    dwImageViewerSetImageCursor(elementId, \"dwClosedCursor\");\r\n    var imagescroll = $(elementId + \"_imagescroll\");\r\n    DW_IMAGE_DRAGRECT = dwUtilsGetRelMouseCoords(e, imagescroll);\r\n}\r\n\r\n/**\r\n * Bewegen der Maus zum Verschieben der Zeichnung\r\n */\r\nfunction dwImageViewerImageMouseMove(event, elementId) {\r\n    if (DW_IMAGE_DRAGRECT != null) {\r\n        var imagescroll = $(elementId + \"_imagescroll\");\r\n        var dwPoint = dwUtilsGetRelMouseCoords(event, imagescroll);\r\n        imagescroll.scrollLeft -= dwPoint.x - DW_IMAGE_DRAGRECT.x;\r\n        imagescroll.scrollTop -= dwPoint.y - DW_IMAGE_DRAGRECT.y;\r\n        DW_IMAGE_DRAGRECT = dwUtilsGetRelMouseCoords(event, imagescroll);\r\n    }\r\n}\r\n\r\n/**\r\n * Zeigt das graue Bild mit der Lupe und setzt den Pointer-Cursor auf dem Thumbnail-Bild\r\n * @param event\r\n * @param elementId\r\n */\r\nfunction dwImageViewerImageMouseOverShowHoverPicture(event, elementId, completeElementId, withMagnifier) {\r\n    if (withMagnifier) {\r\n        var overlay = document.getElementById(elementId + \"_magnifier_overlay\");\r\n        if (!overlay) {\r\n            // bei 360°-Bildern gibts kein _imagescroll, hier wird die Id als completElementId übergeben\r\n            let scrollId = completeElementId ? completeElementId : elementId + \"_imagescroll\";\r\n            var imagescroll = document.getElementById(scrollId);\r\n            if (imagescroll != null) {\r\n                // Wir erzeugen ein DIV als Overlay, das beim MouseOut (auf sich selbst!) wieder entfernt wird\r\n                // damit klappt es auch bei komplett ausfüllenden Bildern, was bei background nicht ginge\r\n                let overlay = document.createElement(\"div\");\r\n                overlay.id = elementId + \"_magnifier_overlay\";\r\n                overlay.style.backgroundColor = 'rgba(0, 0, 0, 0.25)';\r\n                overlay.style.position = 'absolute';\r\n                overlay.style.width = '100%';\r\n                overlay.style.height = '100%';\r\n                overlay.style.cursor = 'pointer';\r\n                imagescroll.appendChild(overlay);\r\n                var controlForMouseOut = overlay; // der MouseOut-Listener muss aufs Overlay\r\n                if (imagescroll.plainImageOnly == false) {\r\n                    controlForMouseOut = imagescroll;       // die grab-Ebene hat höheren z-Index, daher Listener direkt auf den pannellum-Container\r\n                }\r\n                controlForMouseOut.onmouseout = function() {\r\n                    // Hier wieder entfernen\r\n                    dwImageViewerImageMouseOutHideHoverPicture(event, elementId);\r\n                };\r\n            }\r\n\r\n            var magnifier = document.getElementById(elementId + \"_magnifier\");\r\n            if (magnifier != null) {\r\n                magnifier.style.visibility = 'visible';\r\n            }\r\n        }\r\n    }\r\n\r\n    var tiles = document.getElementById(elementId + \"_tiles\");\r\n    if (tiles != null) {\r\n        var images = tiles.getElementsByTagName('img');\r\n        //soll eigentlich nur ein Bild sein\r\n        if (images != null && images.length > 0) {\r\n            for (var i = 0; i < images.length; i++) {\r\n                images[i].style.cursor = 'pointer';\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * Versteckt das graue Bild mit der Lupe\r\n * @param event\r\n * @param elementId\r\n */\r\nfunction dwImageViewerImageMouseOutHideHoverPicture(event, elementId) {\r\n    var overlay = document.getElementById(elementId + \"_magnifier_overlay\");\r\n    if (overlay != null) {\r\n        overlay.remove();\r\n    }\r\n\r\n    var magnifier = document.getElementById(elementId + \"_magnifier\");\r\n    if (magnifier != null) {\r\n        magnifier.style.visibility = 'hidden';\r\n    }\r\n}\r\n\r\n/**\r\n * Verschieben der Zeichnung abbrechen\r\n */\r\nfunction dwImageViewerImageMouseOut(elementId) {\r\n    if (DW_IMAGE_DRAGRECT != null) {\r\n        dwImageViewerStopImageDrag(elementId);\r\n    }\r\n}\r\n\r\n/**\r\n * Beim Loslassen der Maustaste soll der Cursor wiederhergestellt werden.\r\n */\r\nfunction dwImageViewerImageMouseUp(elementId) {\r\n    if (DW_IMAGE_DRAGRECT != null) {\r\n        dwImageViewerStopImageDrag(elementId);\r\n    }\r\n}\r\n\r\nfunction dwImageViewerStopImageDrag(elementId) {\r\n    dwImageViewerSetImageCursor(elementId, \"dwOpenCursor\");\r\n    DW_IMAGE_DRAGRECT = null;\r\n}\r\n\r\nfunction dwImageViewerSetImageCursor(elementId, cursorId) {\r\n    var image = dwImageViewerGetImage(elementId);\r\n    if (image == null) { // die Zeichnung existiert nicht mehr\r\n        return;\r\n    }\r\n\r\n    var cursorURL = image.getAttribute(cursorId);\r\n    image.style.cursor = cursorURL;\r\n    $(elementId + \"_imagescroll\").style.cursor = cursorURL;\r\n}\r\n\r\n/**\r\n * Scrollen durch Bewegen des Mausrades\r\n */\r\nfunction dwImageViewerMouseWheel(event, elementId) {\r\n    if (DW_IMAGE_IN_ZOOM_EVENT) {\r\n        return;\r\n    }\r\n    DW_IMAGE_IN_ZOOM_EVENT = true;\r\n    try {\r\n        var viewerElement = $(elementId);\r\n        var image = dwImageViewerGetImage(elementId);\r\n        if (image == null) { // kann durch die Verwendung von setTimeout() passieren\r\n            return;\r\n        }\r\n\r\n        if (image.plainImageOnly) {\r\n            DW_IMAGE_IN_ZOOM_EVENT = false;\r\n            return;\r\n        }\r\n\r\n        var diff = 0;\r\n        if (event.wheelDelta) { // IE\r\n            diff = -event.wheelDelta;\r\n        }\r\n        if (event.detail) {     // FF\r\n            diff = event.detail / 3;\r\n        }\r\n        var newZoom = image.dwCurrentZoomLevel;\r\n        var zoomFactor = (diff < 0) ? 1.2 : 1 / 1.2;\r\n        newZoom = newZoom * zoomFactor;\r\n        newZoom = Math.min(20, Math.max(1, newZoom));\r\n        var viewerWidth = viewerElement.offsetWidth;\r\n        var viewerHeight = viewerElement.offsetHeight;\r\n        var eventPointRelativeToImage = dwUtilsGetRelMouseCoords(event, image);\r\n        var eventPointRelativeToDisplay = dwUtilsGetRelMouseCoords(event, viewerElement);\r\n        var factor = Math.max(image.dwWidth / image.offsetWidth, image.dwHeight / image.offsetHeight);\r\n        var newX = (eventPointRelativeToImage.x - image.offsetLeft) * factor;\r\n        var newY = (eventPointRelativeToImage.y - image.offsetTop) * factor;\r\n        // Jetzt würde newX/newY so gemacht werden, dass es in die Mitte kommt. Das wollen wir aber nicht. Wir verschieben\r\n        // es, so dass der Punkt wieder unter der Maus gemacht wird\r\n        newX -= (eventPointRelativeToDisplay.x - (viewerWidth / 2)) * factor / zoomFactor;\r\n        newY -= (eventPointRelativeToDisplay.y - (viewerHeight / 2)) * factor / zoomFactor;\r\n        var newCenterPoint = new DWPoint(newX, newY);\r\n        // Direkt machen (-1) weil wir sonst beim nächsten hier noch nicht die neuesten image.offsetLeft usw. hätten\r\n        dwImageViewerSetNormalizedZoom(image, newZoom, newCenterPoint, -1);\r\n    } catch (exception) {\r\n    }\r\n    if (event.preventDefault) {\r\n        event.preventDefault();\r\n    }\r\n    event.returnValue = false;\r\n    DW_IMAGE_IN_ZOOM_EVENT = false;\r\n}\r\n\r\nfunction setLoadingVisible(imageId, value) {\r\n    var loadingLayer = $(imageId + \"_loading\");\r\n    if (loadingLayer) {\r\n        dwDomSetStyle(loadingLayer, \"display\", value ? \"\" : \"none\")\r\n    }\r\n}\r\n\r\nfunction dwImageLoadImageInSrc(image, width, height, forceNewImage) {\r\n    if (image.useOriginalImage) {\r\n        var src = image.dwImgSrcPrefix + \"&forViewer=true\";\r\n        if (image.useTiffOnClient) {\r\n            image.setAttribute(\"qs_need_tiff_conversion\", true);\r\n            src += \"&accepttiff=true\"\r\n        }\r\n\r\n        var loadedImage = image.hasAttribute(\"q_loaded_image\") ? image.getAttribute(\"q_loaded_image\") : undefined;\r\n\r\n        if (loadedImage !== src) {\r\n            // Orignalbild\r\n            image.onload = function() {\r\n                image.dwLoaded = true;\r\n                if (image.hotspots != null) {\r\n                    for (var i = 0; i < image.hotspots.length; i++) {\r\n                        var hotspot = image.hotspots[i];\r\n                        if (hotspot.span.dwCanvas) {\r\n                            dwImagePaintHotspot(hotspot.span);\r\n                        }\r\n                    }\r\n                }\r\n                // Loading mit verzögerung abschalten, weil das Rendern am Browser noch etwas brauchen kann und man sonst ein leeres Bild sieht\r\n                setTimeout(function() {\r\n                    setLoadingVisible(image.elementId, false);\r\n                }, 200);\r\n            };\r\n            image.dwLoaded = false;\r\n\r\n            image.setAttribute(\"q_loaded_image\", src);\r\n\r\n            image.src = src;\r\n\r\n            // Loadingpanel\r\n            setLoadingVisible(image.elementId, true);\r\n        }\r\n    } else {\r\n        // Schauen ob es wirklich eine neue Version ist\r\n        if (forceNewImage || (image.dwCurrentImageWidth != width)) {\r\n            image.dwCurrentImageWidth = width;\r\n            image.dwCurrentImageHeight = height;\r\n            if (image.dwTileSize > 0) {\r\n                // Breite und Höhe des Gesamtbildes für alle Kacheln bestimmen\r\n                var imageWidth = width;\r\n                var imageHeight = height;\r\n                if (image.dwClientUpscale) {\r\n                    if (imageWidth > image.dwWidth) {\r\n                        imageWidth = image.dwWidth;\r\n                    }\r\n                    if (imageHeight > image.dwHeight) {\r\n                        imageHeight = image.dwHeight;\r\n                    }\r\n                }\r\n                image.dwLastImageWidthForTiles = imageWidth;\r\n                image.dwLastImageHeightForTiles = imageHeight;\r\n\r\n                var zoomLevelKey = imageWidth + \"x\" + imageHeight;\r\n                var tilesInfo = image.dwTileInfosForAllZoomLevels[zoomLevelKey];\r\n                if (tilesInfo == null) {\r\n                    tilesInfo = new Object();\r\n                    tilesInfo.imageWidth = imageWidth;\r\n                    tilesInfo.imageHeight = imageHeight;\r\n                    tilesInfo.tileSize = image.dwTileSize;\r\n                    tilesInfo.tiles = dwImageViewerCreateTilesArray(imageWidth, imageHeight, tilesInfo.tileSize);\r\n                    image.dwTileInfosForAllZoomLevels[zoomLevelKey] = tilesInfo;\r\n                } else {\r\n                    // bereits existierende Kacheln vom aktuellen Zoom-Level als aktiv setzen\r\n                    dwImageViewerSetCurrentTiles(image, tilesInfo.tiles, tilesInfo.imageWidth, tilesInfo.imageHeight, tilesInfo.tileSize);\r\n                }\r\n\r\n                // Kacheln entfernen, die noch nicht geladen wurden\r\n                dwImageViewerRemoveUnloadedTilesForOtherZoomLevels(image, imageWidth);\r\n            } else {\r\n                // kein Tiling\r\n                image.onload = function() {\r\n                    image.dwLoaded = true;\r\n                    if (image.hotspots != null) {\r\n                        for (var i = 0; i < image.hotspots.length; i++) {\r\n                            var hotspot = image.hotspots[i];\r\n                            if (hotspot.span.dwCanvas) {\r\n                                dwImagePaintHotspot(hotspot.span);\r\n                            }\r\n                        }\r\n                    }\r\n                };\r\n                image.dwLoaded = false;\r\n                image.src = image.dwImgSrcPrefix + \"&width=\" + width + \"&height=\" + height + \"&inctrans=true\";\r\n            }\r\n        }\r\n    }\r\n    image.style.visibility = \"visible\";\r\n    if (framework_doctype == DOCTYPE_HTML_5) {\r\n        image.style.overflow = \"hidden\";\r\n    }\r\n    if (dwFrameworkShowDevelopmentMessages()) {\r\n        dwFrameworkShowHint(\"IMAGE\", \"IMAGE ORIG (Server): \" + image.dwWidth + \"x\" + image.dwHeight +\r\n                                     \" SRC (Client): \" + width + \"x\" + height, \"#ffca58\", \"#000000\");\r\n    }\r\n}\r\n\r\n/**\r\n * Alle noch nicht geladenen Kacheln entfernen (außer für den aktuellen Zoom-Level mit der übergebenen Kachelnbreite).\r\n */\r\nfunction dwImageViewerRemoveUnloadedTilesForOtherZoomLevels(image, imageWidth) {\r\n    for (var otherZoomLevelKey in image.dwTileInfosForAllZoomLevels) {\r\n        var tilesInfoForOtherZoomLevel = image.dwTileInfosForAllZoomLevels[otherZoomLevelKey];\r\n        if ((tilesInfoForOtherZoomLevel != null) && (tilesInfoForOtherZoomLevel.imageWidth != imageWidth)) {\r\n            var tiles = tilesInfoForOtherZoomLevel.tiles;\r\n            for (var posY = 0; posY < tiles.length; posY++) {\r\n                var row = tiles[posY];\r\n                if (row != null) {\r\n                    for (var posX = 0; posX < row.length; posX++) {\r\n                        dwImageViewerRemoveTileFromRow(image, row, posX, false);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * Alle Kacheln des übergebenen Kachel-Arrays in den Vordergrund bringen und alle nicht mehr benötigten Kacheln anderer\r\n * Zoom-Levels entfernen.\r\n */\r\nfunction dwImageViewerSetCurrentTiles(image, tiles, imageWidth, imageHeight, tileSize) {\r\n    for (var posY = 0; posY < tiles.length; posY++) {\r\n        var row = tiles[posY];\r\n        if (row != null) {\r\n            for (var posX = 0; posX < row.length; posX++) {\r\n                var tileDiv = row[posX];\r\n                if (tileDiv != null) {\r\n                    try {\r\n                        if (image.contains(tileDiv)) {\r\n                            image.removeChild(tileDiv);\r\n                        }\r\n                    } catch (e) {\r\n                        // kann passieren, wenn tileDiv gerade entfernt wurde\r\n                    }\r\n                    image.appendChild(tileDiv);\r\n\r\n                    // falls die Kachel bereits geladen wurde, alle teilweise überdeckten Kacheln von anderen Zoom-Levels entfernen\r\n                    if (tileDiv.dwLoaded) {\r\n                        dwImageViewerRemoveOtherZoomLevelTiles(image, posX, posY, imageWidth, imageHeight, true);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * Erzeugt eine Kachel für eine bestimmte Position\r\n */\r\nfunction dwImageViewerCreateTile(image, tiles, x, y, imageWidth, imageHeight, tileSize) {\r\n    var tileDiv = document.createElement(\"span\");\r\n    tiles[y][x] = tileDiv;\r\n    tileDiv.style.position = \"absolute\";\r\n    tileDiv.style.left = (tileSize * x) + \"px\";\r\n    tileDiv.style.top = (tileSize * y) + \"px\";\r\n    if (!image.autoCloseWindows) {\r\n        tileDiv.autoCloseWindows = false;\r\n    }\r\n\r\n    var tile = document.createElement(\"img\");\r\n    tile.id = image.elementId + \"_tile_\" + x + \"_\" + y + \"_\" + imageWidth + \"x\" + imageHeight;\r\n    tile.style.height = \"100%\";\r\n    tile.style.width = \"100%\";\r\n    tileDiv.tile = tile;\r\n    tileDiv.appendChild(tile);\r\n\r\n    if ((framework_browserType == DWFRAMEWORK_BROWSER_TYPE_IE) && (framework_browserVersion.indexOf(\"11.\") != -1)) {\r\n        // IE 11 kann nicht mit mehreren onload umgehen, deshalb der Workaround ohne transpixel.png\r\n        // onload für echte Kachel\r\n        tile.onload = function() {\r\n            try {\r\n                if (tileDiv.dwRemoved) {\r\n                    tileDiv.dwLoaded = false;\r\n                    tile.onload = null;\r\n                    tile.src = image.transpixelUrl;\r\n                    return;\r\n                }\r\n\r\n                tileDiv.dwLoaded = true;\r\n                var isCurrentZoomLevel = imageWidth == image.dwLastImageWidthForTiles;\r\n                dwImageViewerRemoveOtherZoomLevelTiles(image, x, y, imageWidth, imageHeight, isCurrentZoomLevel);\r\n                if (image.hotspots != null) {\r\n                    for (var i = 0; i < image.hotspots.length; i++) {\r\n                        var hotspot = image.hotspots[i];\r\n                        if (hotspot.span.dwCanvas) {\r\n                            dwImagePaintHotspot(hotspot.span);\r\n                        }\r\n                    }\r\n                }\r\n            } catch (exception) {\r\n                // Zeile bitte so lassen damit wir immer alle Codestellen per Volltextsuche finden. Das kann man nicht auslagern in eine Datei.\r\n                if (typeof (framework_isActive) == 'undefined' || !framework_isActive) {\r\n                    return;\r\n                }\r\n                throw exception;\r\n            }\r\n        };\r\n\r\n        // Kachel-URL setzen\r\n        var src = image.dwImgSrcPrefix;\r\n        src += (src.indexOf(\"?\") == -1) ? \"?\" : \"&\";\r\n        src += \"tileX=\" + x + \"&tileY=\" + y + \"&imgW=\" + imageWidth + \"&imgH=\" + imageHeight + \"&inctrans=true\";\r\n        src = dwImageViewerModifyFileOnlyMode(src);\r\n        tile.src = src;\r\n        image.appendChild(tileDiv);\r\n    } else {\r\n        // onload für image.transpixelUrl\r\n        tile.onload = function() {\r\n            try {\r\n                if (tileDiv.dwRemoved) {\r\n                    tile.onload = null;\r\n                    return;\r\n                }\r\n\r\n                // onload für echte Kachel\r\n                tile.onload = function() {\r\n                    try {\r\n                        if (tileDiv.dwRemoved) {\r\n                            tileDiv.dwLoaded = false;\r\n                            tile.onload = null;\r\n                            tile.src = image.transpixelUrl;\r\n                            return;\r\n                        }\r\n\r\n                        tileDiv.dwLoaded = true;\r\n                        var isCurrentZoomLevel = imageWidth == image.dwLastImageWidthForTiles;\r\n                        dwImageViewerRemoveOtherZoomLevelTiles(image, x, y, imageWidth, imageHeight, isCurrentZoomLevel);\r\n                        if (image.hotspots != null) {\r\n                            for (var i = 0; i < image.hotspots.length; i++) {\r\n                                var hotspot = image.hotspots[i];\r\n                                if (hotspot.span.dwCanvas) {\r\n                                    dwImagePaintHotspot(hotspot.span);\r\n                                }\r\n                            }\r\n                        }\r\n                    } catch (exception) {\r\n                        // Zeile bitte so lassen damit wir immer alle Codestellen per Volltextsuche finden. Das kann man nicht auslagern in eine Datei.\r\n                        if (typeof (framework_isActive) == 'undefined' || !framework_isActive) {\r\n                            return;\r\n                        }\r\n                        throw exception;\r\n                    }\r\n                };\r\n\r\n                // Kachel-URL setzen\r\n                var src = image.dwImgSrcPrefix;\r\n                src += (src.indexOf(\"?\") == -1) ? \"?\" : \"&\";\r\n                src += \"tileX=\" + x + \"&tileY=\" + y + \"&imgW=\" + imageWidth + \"&imgH=\" + imageHeight + \"&inctrans=true\";\r\n                src = dwImageViewerModifyFileOnlyMode(src);\r\n                tile.src = src;\r\n            } catch (exception) {\r\n                // Zeile bitte so lassen damit wir immer alle Codestellen per Volltextsuche finden. Das kann man nicht auslagern in eine Datei.\r\n                if (typeof (framework_isActive) == 'undefined' || !framework_isActive) {\r\n                    return;\r\n                }\r\n                throw exception;\r\n            }\r\n        };\r\n        tile.src = image.transpixelUrl;\r\n        image.appendChild(tileDiv);\r\n    }\r\n}\r\n\r\n/**\r\n * Erzeugt das Kachel-Array beim Ändern der Auflösungsstufe.\r\n */\r\nfunction dwImageViewerCreateTilesArray(imageWidth, imageHeight, tileSize) {\r\n    var maxTilesX = Math.ceil(imageWidth / tileSize);\r\n    var maxTilesY = Math.ceil(imageHeight / tileSize);\r\n\r\n    // Neues Kachel-Array anlegen\r\n    var tiles = new Array(maxTilesY);\r\n    for (var i = 0; i < maxTilesY; i++) {\r\n        tiles[i] = new Array(maxTilesX);\r\n    }\r\n\r\n    return tiles;\r\n}\r\n\r\n/**\r\n * Entfernt die Kachel an der angegebenen x-Position aus der übergebenen Zeile (je nach Wert von removeAlsoIfLoaded auch dann,\r\n * wenn sie bereits geladen wurde).\r\n */\r\nfunction dwImageViewerRemoveTileFromRow(image, tilesRow, posX, removeAlsoIfLoaded) {\r\n    var tileDiv = tilesRow[posX];\r\n    if ((tileDiv != null) && (removeAlsoIfLoaded || !tileDiv.dwLoaded)) {\r\n        tileDiv.dwRemoved = true;\r\n        tileDiv.tile.src = image.transpixelUrl;\r\n        try {\r\n            image.removeChild(tileDiv);\r\n        } catch (e) {\r\n            // kann passieren, wenn tileDiv noch nicht image als Kind hinzugefügt wurde\r\n        }\r\n        try {\r\n            tileDiv.removeChild(tileDiv.tile);\r\n        } catch (e) {\r\n            // nur zur Sicherheit, damit bei dieser Aufräumaktion keine Exception fliegt\r\n        }\r\n        tilesRow[posX] = null;\r\n    }\r\n}\r\n\r\n/**\r\n * Fügt fehlende Kacheln hinzu, wenn sich der Anzeigebereich bei gleicher Auflösungsstufe (isCurrentZoomLevel == true) ändert\r\n * (z.B. durch Scrollen) und aktualisiert die Größen und Positionen der Kacheln basierend auf dem aktuellen Zoom.\r\n */\r\nfunction dwImageViewerUpdateTiles(image, offsetWidth, offsetHeight, tiles, imageWidth, imageHeight, tileSize, isCurrentZoomLevel) {\r\n    var maxTilesX = Math.ceil(imageWidth / tileSize);\r\n    var maxTilesY = Math.ceil(imageHeight / tileSize);\r\n\r\n    // tileSize an den aktuellen Darstellungsbereich für das Bild anpassen (kann größer als die erzeugten Tiles sein)\r\n    tileSize = Math.round(tileSize * offsetWidth / imageWidth);\r\n\r\n    // alle Kacheln in x- und y-Richtung\r\n    var startTilesX = 0;\r\n    var startTilesY = 0;\r\n    var endTilesX = maxTilesX - 1;\r\n    var endTilesY = maxTilesY - 1;\r\n\r\n    if (isCurrentZoomLevel) {\r\n        // nur sichtbare Kacheln in x- und y-Richtung bestimmen\r\n        var imagescroll = image.parentElement;\r\n        if (!imagescroll) { // kann passieren, wenn es beim Kacheln zu einem Fehler gekommen ist\r\n            return;\r\n        }\r\n\r\n        var visTop = imagescroll.scrollTop;\r\n        var visLeft = imagescroll.scrollLeft;\r\n        var visWidth = Math.min(offsetWidth, imagescroll.clientWidth);\r\n        var visHeight = Math.min(offsetHeight, imagescroll.clientHeight);\r\n\r\n        // Anzahl der benötigten Kacheln in x- und y-Richtung\r\n        startTilesX = Math.max(0, Math.min(maxTilesX - 1, Math.floor(visLeft / tileSize)));\r\n        startTilesY = Math.max(0, Math.min(maxTilesY - 1, Math.floor(visTop / tileSize)));\r\n        endTilesX = Math.min(maxTilesX - 1, Math.ceil((visLeft + visWidth) / tileSize));\r\n        endTilesY = Math.min(maxTilesY - 1, Math.ceil((visTop + visHeight) / tileSize));\r\n    }\r\n\r\n    for (var posY = 0; posY < maxTilesY; posY++) {\r\n        var row = tiles[posY];\r\n        if (row == null) {\r\n            // nur beim aktuellen Zoom-Level und im sichtbaren Bereich neue Kachel-Zeilen hinzufügen\r\n            if ((isCurrentZoomLevel) && (posY >= startTilesY) && (posY <= endTilesY)) {\r\n                row = new Array(endTilesX);\r\n                tiles[posY] = row;\r\n            } else {\r\n                continue;\r\n            }\r\n        }\r\n        for (var posX = 0; posX < maxTilesX; posX++) {\r\n            var tileDiv = row[posX];\r\n            if (tileDiv == null) {\r\n                // nur beim aktuellen Zoom-Level und im sichtbaren Bereich neue Kacheln hinzufügen\r\n                if ((isCurrentZoomLevel) && (posY >= startTilesY) && (posY <= endTilesY) && (posX >= startTilesX) && (posX <= endTilesX)) {\r\n                    dwImageViewerCreateTile(image, tiles, posX, posY, imageWidth, imageHeight, tileSize);\r\n                    tileDiv = row[posX];\r\n                } else {\r\n                    continue;\r\n                }\r\n            }\r\n\r\n            // beim aktuellen Zoom-Level alle noch nicht geladenen Kacheln im nicht sichtbaren Bereich entfernen\r\n            if (isCurrentZoomLevel && !tileDiv.dwLoaded && !((posY >= startTilesY) && (posY <= endTilesY) && (posX >= startTilesX) && (posX <= endTilesX))) {\r\n                dwImageViewerRemoveTileFromRow(image, row, posX, false);\r\n                continue;\r\n            }\r\n\r\n            // Kachel-Position und -Größe anpassen\r\n            tileDiv.style.left = (tileSize * posX) + \"px\";\r\n            tileDiv.style.top = (tileSize * posY) + \"px\";\r\n            if (posX == maxTilesX - 1) {\r\n                tileDiv.style.width = (offsetWidth - posX * tileSize) + \"px\";\r\n            } else {\r\n                tileDiv.style.width = tileSize + \"px\";\r\n            }\r\n            if (posY == maxTilesY - 1) {\r\n                tileDiv.style.height = (offsetHeight - posY * tileSize) + \"px\";\r\n            } else {\r\n                tileDiv.style.height = tileSize + \"px\";\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * Entfernt alle zumindest teilweise überdeckten Kacheln aus anderen Zoom-Levels, um Speicher zu sparen und für bessere Performance\r\n * auf mobilen Endgeräten (größere Auflösungen werden nur beim aktuellen Zoomlevel mit isCurrentZoomLevel == true entfernt).\r\n */\r\nfunction dwImageViewerRemoveOtherZoomLevelTiles(image, posX, posY, imageWidth, imageHeight, isCurrentZoomLevel) {\r\n    for (var otherZoomLevelKey in image.dwTileInfosForAllZoomLevels) {\r\n        var tilesInfoForOtherZoomLevel = image.dwTileInfosForAllZoomLevels[otherZoomLevelKey];\r\n        if ((tilesInfoForOtherZoomLevel != null) && ((tilesInfoForOtherZoomLevel.imageWidth < imageWidth)\r\n                                                     || (isCurrentZoomLevel && (tilesInfoForOtherZoomLevel.imageWidth > imageWidth)))) { // größere Auflösungen nur beim aktuellen Zoomlevel entfernen\r\n            var otherTiles = tilesInfoForOtherZoomLevel.tiles;\r\n            var otherTileSize = tilesInfoForOtherZoomLevel.tileSize;\r\n            var otherImageWidth = tilesInfoForOtherZoomLevel.imageWidth;\r\n            var otherImageHeight = tilesInfoForOtherZoomLevel.imageHeight;\r\n            var otherMaxTilesX = Math.ceil(otherImageWidth / otherTileSize); // inkl. unvollständigen Kacheln rechts\r\n            var otherMaxTilesY = Math.ceil(otherImageHeight / otherTileSize); // inkl. unvollständigen Kacheln unten\r\n\r\n            // Bestimmung der zumindest teilweise überdeckten Kacheln der anderen Auflösung in x- und y-Richtung\r\n            var tilePosFactorX = otherImageWidth / imageWidth;\r\n            var tilePosFactorY = otherImageHeight / imageHeight;\r\n            var startTilesX = Math.max(0, Math.min(otherMaxTilesX - 1, Math.floor(posX * tilePosFactorX)));\r\n            var startTilesY = Math.max(0, Math.min(otherMaxTilesY - 1, Math.floor(posY * tilePosFactorY)));\r\n            var endTilesX = Math.min(otherMaxTilesX - 1, Math.max(startTilesX, Math.ceil((posX + 1) * tilePosFactorX))); // 1 Kachel breit\r\n            var endTilesY = Math.min(otherMaxTilesY - 1, Math.max(startTilesY, Math.ceil((posY + 1) * tilePosFactorY))); // 1 Kachel hoch\r\n            for (var otherPosY = startTilesY; otherPosY <= endTilesY; otherPosY++) {\r\n                var otherRow = otherTiles[otherPosY];\r\n                if (otherRow != null) {\r\n                    for (var otherPosX = startTilesX; otherPosX <= endTilesX; otherPosX++) {\r\n                        dwImageViewerRemoveTileFromRow(image, otherRow, otherPosX, true);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * Zoomt in das Bild um den Faktor howMuch\r\n */\r\nfunction dwImageViewerZoomIn(elementId, howMuch) {\r\n    var image = dwImageViewerGetImage(elementId);\r\n    if (image == null) { // kann durch die Verwendung von setTimeout() passieren\r\n        return;\r\n    }\r\n\r\n    var zoomLevel = image.dwCurrentZoomLevel * (1.25 * howMuch);\r\n    dwImageViewerSetNormalizedZoom(image, zoomLevel, null, 50);\r\n}\r\n\r\n/**\r\n * Zoomt aus dem Bild um den Faktor howMuch\r\n */\r\nfunction dwImageViewerZoomOut(elementId, howMuch) {\r\n    var image = dwImageViewerGetImage(elementId);\r\n    if (image == null) { // kann durch die Verwendung von setTimeout() passieren\r\n        return;\r\n    }\r\n\r\n    var zoomLevel = image.dwCurrentZoomLevel / (1.25 * howMuch);\r\n    dwImageViewerSetNormalizedZoom(image, zoomLevel, null, 50);\r\n}\r\n\r\n/**\r\n * Zoomt 1:1\r\n */\r\nfunction dwImageViewerZoomFit(elementId) {\r\n    var image = dwImageViewerGetImage(elementId);\r\n    if (image == null) { // kann durch die Verwendung von setTimeout() passieren\r\n        return;\r\n    }\r\n\r\n    dwImageViewerSetNormalizedZoom(image, 1.0, null, 50);\r\n}\r\n\r\n/**\r\n * Liefert den Bildpunkt des Originalbildes der gerade in der Mitte angezeigt wird.\r\n * @param image\r\n */\r\nfunction dwImageViewerGetImageCenterPoint(image) {\r\n    var displayWidth = image.parentNode.offsetWidth;\r\n    var displayHeight = image.parentNode.offsetHeight;\r\n    var imageWidth = image.offsetWidth;\r\n    var imageHeight = image.offsetHeight;\r\n    var imageOrigWidth = image.dwWidth;\r\n    var imageOrigHeight = image.dwHeight;\r\n\r\n    if (displayWidth > imageWidth) {\r\n        var centerPointX = imageOrigWidth / 2.0;\r\n    } else {\r\n        var centerScreen = displayWidth / 2.0;\r\n        var centerPointX = (imageOrigWidth / imageWidth) * (image.parentNode.scrollLeft + centerScreen);\r\n    }\r\n    if (displayHeight > imageHeight) {\r\n        var centerPointY = imageOrigHeight / 2.0;\r\n    } else {\r\n        var centerScreen = displayHeight / 2.0;\r\n        var centerPointY = (imageOrigHeight / imageHeight) * (image.parentNode.scrollTop + centerScreen);\r\n    }\r\n\r\n    return new DWPoint(centerPointX, centerPointY);\r\n}\r\n\r\n/**\r\n * Scrollt zu einer bestimmten Bildposition\r\n * @param imageId\r\n * @param x\r\n * @param y\r\n */\r\nfunction dwImageViewerScrollImageToPosition(imageId, x, y) {\r\n    var image = dwImageViewerGetImage(imageId);\r\n    if (image == null) { // kann durch die Verwendung von setTimeout() passieren\r\n        return;\r\n    }\r\n\r\n    dwImageViewerScrollToPoint(image, new DWPoint(x, y), false);\r\n}\r\n\r\n/**\r\n * Zentriert auf die Bildkoordinate\r\n */\r\nfunction dwImageViewerSetImageCenterPoint(image, centerPoint) {\r\n    dwImageViewerScrollToPoint(image, centerPoint, true);\r\n}\r\n\r\n/**\r\n * Scrollt zu einer bestimmten Position\r\n * @param image\r\n * @param point\r\n * @param center gibt an, ob die Position zentriert werden soll\r\n */\r\nfunction dwImageViewerScrollToPoint(image, point, center) {\r\n    var displayWidth = image.parentNode.offsetWidth;\r\n    var displayHeight = image.parentNode.offsetHeight;\r\n    var imageWidth = parseInt(image.style.width);\r\n    var imageHeight = parseInt(image.style.height);\r\n    var imageOrigWidth = image.dwWidth;\r\n    var imageOrigHeight = image.dwHeight;\r\n\r\n    var newX = null;\r\n    var newY = null;\r\n    if (displayWidth < imageWidth) {\r\n        newX = point.x / (imageOrigWidth / imageWidth);\r\n        if (center) {\r\n            newX -= displayWidth / 2.0;\r\n        }\r\n    } else {\r\n        if (image.parentNode.scrollLeft != 0) {\r\n            // Im IE8 steht noch ein Scrollwert drin\r\n            newX = 0;\r\n        }\r\n    }\r\n    if (displayHeight < imageHeight) {\r\n        newY = point.y / (imageOrigHeight / imageHeight);\r\n        if (center) {\r\n            newY -= displayHeight / 2.0;\r\n        }\r\n    } else {\r\n        if (image.parentNode.scrollTop != 0) {\r\n            // Im IE8 steht noch ein Scrollwert drin\r\n            newY = 0;\r\n        }\r\n    }\r\n    if (newX != null) {\r\n        image.parentNode.scrollLeft = parseInt(newX);\r\n    }\r\n    if (newY != null) {\r\n        image.parentNode.scrollTop = parseInt(newY);\r\n    }\r\n}\r\n\r\nfunction dwImageViewerSetScrollPos(imageId, posX, posY) {\r\n    var image = dwImageViewerGetImage(imageId);\r\n    if (image == null) { // kann durch die Verwendung von setTimeout() passieren\r\n        return;\r\n    }\r\n\r\n    image.parentNode.scrollLeft = posX;\r\n    image.parentNode.scrollTop = posY;\r\n}\r\n\r\n\r\nfunction dwImageViewerSliderMoved(elementId, event) {\r\n    if (!event) {\r\n        event = window.event;\r\n    }\r\n    var target = dwUtilsGetEventTarget(event);\r\n    if ((event.type == \"click\") && (target.id != elementId + \"_slider\")) {     // z.B. Klick auf Knob\r\n        return;\r\n    }\r\n\r\n    var image = dwImageViewerGetImage(elementId);\r\n    if (image == null) { // kann durch die Verwendung von setTimeout() passieren\r\n        return;\r\n    }\r\n\r\n    var slider = $(elementId + \"_slider\");\r\n\r\n    var dwPoint = dwUtilsGetRelMouseCoords(event, slider);\r\n\r\n    var sliderKnob = $(elementId + \"_sliderKnob\");\r\n    var knobWidth = sliderKnob.offsetWidth;\r\n    var zoom = imageViewerSliderLogarithmToZoom(2000 * ((dwPoint.x - 3) / (slider.offsetWidth - knobWidth)));\r\n    dwImageViewerSetNormalizedZoom(image, zoom, null, 50);\r\n}\r\n\r\n/**\r\n * Zeichnet das gerade aufgezogene Rechteck zum Zoomen.\r\n */\r\nfunction dwImageViewerInternalDrawZoomRect(elementId, right, bottom) {\r\n    var zoomRect = $(elementId + \"_zoom2rect\");\r\n    var left = DW_IMAGE_ZOOMRECT.x;\r\n    var top = DW_IMAGE_ZOOMRECT.y;\r\n    if (right > left) {\r\n        zoomRect.style.left = left + \"px\";\r\n        zoomRect.style.width = right - left + \"px\";\r\n    } else {\r\n        zoomRect.style.left = right + \"px\";\r\n        zoomRect.style.width = left - right + \"px\";\r\n    }\r\n    if (bottom > top) {\r\n        zoomRect.style.top = top + \"px\";\r\n        zoomRect.style.height = bottom - top + \"px\";\r\n    } else {\r\n        zoomRect.style.top = bottom + \"px\";\r\n        zoomRect.style.height = top - bottom + \"px\";\r\n    }\r\n}\r\n\r\nfunction setCoursorStyleOnChildrenOfElement(cursor, elementId) {\r\n    for (var i = 0; i < $(elementId).getElementsByTagName('span').length; i++) {\r\n        var elem = $(elementId).getElementsByTagName('span')[i];\r\n        elem.style.cursor = cursor;\r\n    }\r\n}\r\n\r\n/**\r\n * (De-)/Aktivieren des Zoom-2-Rect-Modus\r\n * Dabei werden alle alten Listener ausgetauscht und zwischengespeichert und bei Deaktivieren wieder zurückgesetzt.\r\n */\r\nfunction dwImageViewerToggleZoomRect(elementId) {\r\n    var image = dwImageViewerGetImage(elementId);\r\n    if (image == null) { // kann durch die Verwendung von setTimeout() passieren\r\n        return;\r\n    }\r\n\r\n    image.panZoom2Rect = !image.panZoom2Rect;\r\n    dwImageViewerSetButtonPressed($(elementId + \"_zoomrect\"), image.panZoom2Rect);\r\n\r\n    var imageScroll = $(elementId + \"_imagescroll\");\r\n    var zoom2Rect = $(elementId + \"_zoom2rect\");\r\n\r\n    $(elementId).setAttribute(\"touchemulation\", !image.panZoom2Rect + \"\");\r\n\r\n    if (image.panZoom2Rect) {\r\n        // Zur Visualisierung dass man gerade einen Zeichnungsausschnitt wählt\r\n        image.style.cursor = \"crosshair\";\r\n        imageScroll.style.cursor = \"crosshair\";\r\n        var hotspotClickLayer = $(image.elementId + \"_hotspots_click\");\r\n        hotspotClickLayer.style.cursor = \"crosshair\";\r\n\r\n        setCoursorStyleOnChildrenOfElement(\"crosshair\", elementId);\r\n\r\n        image.dwImageViewerOldZoomMouseMove = zoom2Rect.onmousemove;\r\n        zoom2Rect.onmousemove = function(event) {\r\n        };\r\n\r\n        image.dwImageViewerOldImageMouseDown = image.onmousedown;\r\n        image.onmousedown = function(event) {\r\n        };\r\n\r\n        image.dwImageViewerOldImageMouseMove = image.onmousemove;\r\n        image.onmousemove = function(event) {\r\n        };\r\n\r\n        image.dwImageViewerOldImageMouseUp = image.onmouseup;\r\n        image.onmouseup = function(event) {\r\n        };\r\n\r\n        image.dwImageViewerOldScrollMouseDown = imageScroll.onmousedown;\r\n        imageScroll.onmousedown = function(event) {\r\n            event = dwFrameworkGetEvent(event);\r\n\r\n            /* Klick auf Scrollbar wird fälschlicherweise als MouseDown erkannt.\r\n             Für den IE wird in scrollUpdate das image.panZoom2Rect auf null zurückgesetzt, ein mouseUp kommt nicht mehr.\r\n             Im FF wird anhand des originalTargets geschaut, ob es ein Bestandteil der scrollbar ist. Blöderweise ist\r\n             das tagName aber nicht zugreifbar, daher wird davon ausgegangen, dass bei einer Exception auf die\r\n             Scrollbar geklickt wurde.\r\n             */\r\n            if (event.originalTarget != null) {\r\n                try {\r\n                    event.originalTarget.tagName;\r\n                } catch (e) {\r\n                    return;\r\n                }\r\n            }\r\n            // für internet explorer: Bei Klick auf Scrollbar nichts tun\r\n            var target = dwUtilsGetEventTarget(event);\r\n            if (target.componentFromPoint) {\r\n                if (!dwUtilsComponentFromPoint(event)) {\r\n                    return;\r\n                }\r\n            }\r\n\r\n            var imageScroll = $(elementId + \"_imagescroll\");\r\n            var relCoords = dwUtilsGetRelMouseCoords(event, imageScroll);\r\n            if (relCoords.x >= 0) {    // in mobiler Variante kommen nochmal 2 mouseDowns mit negativen Koordinaten\r\n                DW_IMAGE_ZOOMRECT = new DWPoint(relCoords.x, relCoords.y);\r\n                var zoomRect = $(elementId + \"_zoom2rect\");\r\n                zoomRect.style.left = relCoords.x + \"px\";\r\n                zoomRect.style.top = relCoords.y + \"px\";\r\n                zoomRect.style.width = \"0px\";\r\n                zoomRect.style.height = \"0px\";\r\n                zoomRect.style.display = \"inline\";\r\n            }\r\n        };\r\n\r\n        image.dwImageViewerOldScrollMouseMove = imageScroll.onmousemove;\r\n        imageScroll.onmousemove = function(event) {\r\n            if (DW_IMAGE_ZOOMRECT != null) {\r\n                event = dwFrameworkGetEvent(event);\r\n                var relCoords = dwUtilsGetRelMouseCoords(event, $(elementId + \"_imagescroll\"));\r\n                if (relCoords.x >= 0) {    // in mobiler Variante kommen nochmal 2 mouseDowns mit negativen Koordinaten\r\n                    dwImageViewerInternalDrawZoomRect(elementId, relCoords.x, relCoords.y);\r\n                }\r\n            }\r\n        };\r\n\r\n        image.dwImageViewerOldScrollMouseUp = imageScroll.onmouseup;\r\n        imageScroll.onmouseup = function(event) {\r\n            if (DW_IMAGE_ZOOMRECT == null) {\r\n                return;\r\n            }\r\n            var zoomRect = $(elementId + \"_zoom2rect\");\r\n            if (zoomRect.offsetWidth > 3 && zoomRect.offsetHeight > 3) {\r\n                var image = dwImageViewerGetImage(elementId);\r\n                if (image == null) { // kann durch die Verwendung von setTimeout() passieren\r\n                    return;\r\n                }\r\n\r\n                var displayWidth = image.offsetWidth;\r\n                var displayHeight = image.offsetHeight;\r\n\r\n                var factor = Math.max(image.dwWidth / displayWidth, image.dwHeight / displayHeight);\r\n                var widthOnUnzoomed = zoomRect.offsetWidth / image.dwCurrentZoomLevel;\r\n                var heightOnUnzoomed = zoomRect.offsetHeight / image.dwCurrentZoomLevel;\r\n\r\n                var zoom = Math.min(image.parentNode.offsetWidth / widthOnUnzoomed, image.parentNode.offsetHeight / heightOnUnzoomed);\r\n                var centerPoint = new DWPoint((zoomRect.offsetLeft + zoomRect.offsetWidth / 2 - image.offsetLeft) * factor,\r\n                                              (zoomRect.offsetTop + zoomRect.offsetHeight / 2 - image.offsetTop) * factor);\r\n\r\n                dwImageViewerSetNormalizedZoom(image, zoom, centerPoint, 50);\r\n            }\r\n\r\n            DW_IMAGE_ZOOMRECT = null;\r\n            zoomRect.style.display = \"none\";\r\n        };\r\n    } else {\r\n        // Und auch wieder abschalten\r\n        image.style.cursor = \"inherit\";\r\n        imageScroll.style.cursor = \"inherit\";\r\n        var hotspotClickLayer = $(image.elementId + \"_hotspots_click\");\r\n        setCoursorStyleOnChildrenOfElement(\"pointer\", elementId);\r\n\r\n        hotspotClickLayer.style.cursor = \"inherit\";\r\n        if (image.dwImageViewerOldScrollMouseDown != null) {\r\n            zoom2Rect.onmousemove = image.dwImageViewerOldZoomMouseMove;\r\n            image.onmousedown = image.dwImageViewerOldImageMouseDown;\r\n            image.onmousemove = image.dwImageViewerOldImageMouseMove;\r\n            image.onmouseup = image.dwImageViewerOldImageMouseUp;\r\n            imageScroll.onmousedown = image.dwImageViewerOldScrollMouseDown;\r\n            imageScroll.onmouseup = image.dwImageViewerOldScrollMouseUp;\r\n            imageScroll.onmousemove = image.dwImageViewerOldScrollMouseMove;\r\n\r\n            image.dwImageViewerOldZoomMouseMove = null;\r\n            image.dwImageViewerOldImageMouseDown = null;\r\n            image.dwImageViewerOldImageMouseMove = null;\r\n            image.dwImageViewerOldImageMouseUp = null;\r\n            image.dwImageViewerOldScrollMouseDown = null;\r\n            image.dwImageViewerOldScrollMouseUp = null;\r\n            image.dwImageViewerOldScrollMouseMove = null;\r\n\r\n            // Cursor zurücksetzen\r\n            dwImageViewerStopImageDrag(elementId);\r\n        }\r\n    }\r\n    if (typeof (dwAjaxGuiViewerImageZoomToRectStateChanged) != \"undefined\") {\r\n        dwAjaxGuiViewerImageZoomToRectStateChanged(elementId, elementId, image.panZoom2Rect, true);\r\n    } else if (typeof (callbackHandler) != \"undefined\") {\r\n        var ietkTop = (parent.ietktop) ? parent.ietktop : parent.parent.ietktop;\r\n        callbackHandler(ietkTop, \"genericRubberband\", image.panZoom2Rect ? \"1\" : \"0\");\r\n    }\r\n}\r\n\r\nfunction dwImageViewerTogglePan(elementId) {\r\n    var image = dwImageViewerGetImage(elementId);\r\n    if (image == null) { // kann durch die Verwendung von setTimeout() passieren\r\n        return;\r\n    }\r\n\r\n    image.panOpened = !image.panOpened;\r\n    dwImageViewerSetPan(elementId);\r\n\r\n    if (image.panOpened) {\r\n        // Hier muss es immer ausgeführt werden, auch wenn wir nicht zoomen. Hier werden die Slider Elemente hingerückt\r\n        var newZoomLevel = image.dwCurrentZoomLevel;\r\n        if (newZoomLevel < 2) {\r\n            newZoomLevel = 2.0;\r\n        }\r\n        // damit dwImageViewerSetNormalizedZoom() auch auf jeden Fall komplett ausgeführt wird\r\n        image.dwCurrentZoomLevel = 0;\r\n        dwImageViewerSetNormalizedZoom(image, newZoomLevel, null, 50);\r\n    }\r\n    if (typeof (dwAjaxGuiViewerImagePanOpenStateChanged) != \"undefined\") {\r\n        dwAjaxGuiViewerImagePanOpenStateChanged(elementId, elementId, image.panOpened, true);\r\n    } else if (typeof (callbackHandler) != \"undefined\") {\r\n        var ietkTop = (parent.ietktop) ? parent.ietktop : parent.parent.ietktop;\r\n        callbackHandler(ietkTop, \"genericPanWindow\", image.panOpened ? \"1\" : \"0\");\r\n    }\r\n}\r\n\r\n/**\r\n * Setzt das Pressed-Hintergrundbild für den Button und disabled das MouseOver.\r\n */\r\nfunction dwImageViewerSetButtonPressed(button, pressed) {\r\n    // Wenn die Funktion ohne den Button aufgerufen wird einfach nichts machen. Im Redesign ist der Button\r\n    // nicht über HTML-Mitteln gelöst sondenr mit nem RButton der für seinen Zustand schon selbst sorgt\r\n    if (button != null) {\r\n        if (pressed) {\r\n            dwDomRemoveEvent(button, \"onmouseout\", \" this.style.backgroundImage = \\\"url('\" + button.getAttribute(\"background-default\") + \"')\\\";\");\r\n            dwDomRemoveEvent(button, \"onmouseover\", \" this.style.backgroundImage = \\\"url('\" + button.getAttribute(\"background-hover\") + \"')\\\";\");\r\n\r\n            button.style.backgroundImage = \"url('\" + button.getAttribute(\"background-pressed\") + \"')\";\r\n            dwDomAddEvent(button, \"onmouseout\", \" this.style.backgroundImage = \\\"url('\" + button.getAttribute(\"background-pressed\") + \"')\\\";\");\r\n            dwDomAddEvent(button, \"onmouseover\", \" this.style.backgroundImage = \\\"url('\" + button.getAttribute(\"background-pressed\") + \"')\\\";\");\r\n            button.onmouseup = function(event) {\r\n            };\r\n        } else {\r\n            dwDomRemoveEvent(button, \"onmouseout\", \" this.style.backgroundImage = \\\"url('\" + button.getAttribute(\"background-pressed\") + \"')\\\";\");\r\n            dwDomRemoveEvent(button, \"onmouseover\", \" this.style.backgroundImage = \\\"url('\" + button.getAttribute(\"background-pressed\") + \"')\\\";\");\r\n\r\n            button.style.backgroundImage = \"url('\" + button.getAttribute(\"background-default\") + \"')\";\r\n            dwDomAddEvent(button, \"onmouseout\", \" this.style.backgroundImage = \\\"url('\" + button.getAttribute(\"background-default\") + \"')\\\";\");\r\n            dwDomAddEvent(button, \"onmouseover\", \" this.style.backgroundImage = \\\"url('\" + button.getAttribute(\"background-hover\") + \"')\\\";\");\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * Öffnet den Notiz-Dialog für die Zeichnung\r\n * @param menuItemId id des MenuEintrags aus dem Zeichnungs-Kontextmenü zum Editieren der Notizen\r\n */\r\nfunction dwImageViewerEditNotes(event, menuItemId) {\r\n    $(menuItemId).onclick(event);\r\n}\r\n\r\nfunction dwImageViewerSetPan(elementId) {\r\n    var image = dwImageViewerGetImage(elementId);\r\n    if (image == null) { // kann durch die Verwendung von setTimeout() passieren\r\n        return;\r\n    }\r\n\r\n    var overview = $(elementId + \"_overview\");\r\n    var slider = $(elementId + \"_slider\");\r\n    var imgPreview = $(elementId + \"_imgPreview\");\r\n    var drawRect = $(elementId + \"_imageNavRect\");\r\n    var openButton = $(elementId + \"_openbutton\");\r\n\r\n    var mouseOver = openButton.getAttribute(\"onmouseover\") + \"\"; // im IE kann es ein Event Objekt sein, deshalb mit \"\" zu String\r\n    if (image.panOpened) {\r\n        dwDomSetStylesViaAttribute(overview, \"width:\" + image.dwOverviewOpenWidth + \"px;height:\" + image.dwOverviewOpenHeight + \"px\");\r\n        slider.style.display = \"inline\";\r\n        imgPreview.style.display = \"inline\";\r\n        drawRect.style.display = \"inline\";\r\n        mouseOver = mouseOver.replace(dwUtilsJjs(image.dwOpenPanWindowText), dwUtilsJjs(image.dwClosePanWindowText));\r\n    } else {\r\n        dwDomSetStylesViaAttribute(overview, \"width:\" + image.dwOverviewClosedWidth + \"px;height:\" + image.dwOverviewClosedHeight + \"px\");\r\n        slider.style.display = \"none\";\r\n        imgPreview.style.display = \"none\";\r\n        drawRect.style.display = \"none\";\r\n        mouseOver = mouseOver.replace(dwUtilsJjs(image.dwClosePanWindowText), dwUtilsJjs(image.dwOpenPanWindowText));\r\n    }\r\n    // Tooltip ändern durch direkte Anpassung des Textes\r\n    openButton.setAttribute(\"onmouseover\", mouseOver);\r\n\r\n    drawRect.oldTop = 0;\r\n    drawRect.oldScrollTop = 0;\r\n    dwImageViewerSetButtonPressed(openButton, image.panOpened);\r\n\r\n    for (var j = 0; j < 2; j++) {\r\n        for (var i = 0; i < 2; i++) {\r\n            var corner = $(elementId + \"_overview\" + \"_arrow\" + (i + j * 2));\r\n            corner.style.display = image.panOpened ? \"inline\" : \"none\";\r\n        }\r\n    }\r\n\r\n    dwImageViewerRepositionPanWindow(elementId, image.panCorner);\r\n}\r\n\r\n/**\r\n * Reaktion auf Klick auf einen der Eckpunkte zum Verschieben des Overview-Panels\r\n */\r\nfunction dwImageViewerPanWindowCornerClicked(event, elementId, corner) {\r\n    dwFrameworkDisableEventBubbling(event);\r\n    dwImageViewerRepositionPanWindow(elementId, corner);\r\n}\r\n\r\n/**\r\n * Anpassen der Position des Overview-Panels bei Größenänderungen des Fensters,\r\n * Verschieben der SplitPane-Dividers, Anzeige/Verbergen der Scrollbalken\r\n */\r\nfunction dwImageViewerRepositionPanWindow(elementId, corner) {\r\n    var viewer = $(elementId);\r\n    var image = dwImageViewerGetImage(elementId);\r\n    if (image == null) { // kann durch die Verwendung von setTimeout() passieren\r\n        return;\r\n    }\r\n\r\n    var overview = $(elementId + \"_overview\");\r\n    var imagescroll = $(elementId + \"_imagescroll\");\r\n    var openButton = $(elementId + \"_openbutton\");\r\n    var openButtonImage = dwDomGetChildAtIndex(openButton, 0);\r\n\r\n    if ((viewer == null) || (image == null) || (overview == null) || (imagescroll == null)) { // kann durch die Verwendung von setTimeout() passieren\r\n        return;\r\n    }\r\n\r\n    if (corner != null) {\r\n        image.panCorner = corner;\r\n    }\r\n\r\n    // Breite der vertikalen Scrollbar\r\n    var hScroll = imagescroll.offsetWidth - imagescroll.clientWidth;\r\n    // Höhe der horizontalen Scrollbar\r\n    var vScroll = imagescroll.offsetHeight - imagescroll.clientHeight;\r\n\r\n    // Im IE 10 zeigt er normalerweise keine Scrollbars an, nur wenn man über das Element fährt. Deshalb kommt hier 0 zurück\r\n    // Berücksichtigen müssen wir die Scrollbars aber trotzdem\r\n    if (hScroll <= 0) {\r\n        hScroll = 17;\r\n    }\r\n    if (vScroll <= 0) {\r\n        vScroll = 17;\r\n    }\r\n    if (image.panCorner < 2) {\r\n        // Oben\r\n        overview.style.top = \"0\";\r\n    } else {\r\n        // Unten\r\n        var diff = viewer.offsetHeight - overview.offsetHeight - vScroll;\r\n        overview.style.top = diff + \"px\";\r\n    }\r\n\r\n    if (image.panCorner % 2 == 0) {\r\n        if (corner != null) {\r\n            // Links\r\n            overview.style.left = \"0\";\r\n            if (image.panOpened) {\r\n                // Links offen\r\n                overview.style.backgroundImage = \"url(\" + image.dwPanOpenedUrl + \")\";\r\n                openButtonImage.src = image.dwCloseButtonUrl;\r\n            } else {\r\n                // Links geschlossen\r\n                overview.style.backgroundImage = \"url(\" + image.dwPanClosedUrl + \")\";\r\n                openButtonImage.src = image.dwOpenButtonUrl;\r\n            }\r\n            var left = framework_isMobileView ? \"8px\" : \"9px\";\r\n            $(elementId + \"_zoominbutton\").style.left = left;\r\n            $(elementId + \"_zoomoutbutton\").style.left = left;\r\n            $(elementId + \"_zoomfitbutton\").style.left = left;\r\n            var zoomRect = $(elementId + \"_zoomrect\");\r\n            if (zoomRect != null) {\r\n                zoomRect.style.left = left;\r\n            }\r\n            $(elementId + \"_openbutton\").style.left = left;\r\n            $(elementId + \"_pandiv\").style.left = \"0px\";\r\n        }\r\n    } else {\r\n        // Rechts\r\n        var diff = viewer.offsetWidth - overview.offsetWidth - hScroll;\r\n        overview.style.left = diff + \"px\";\r\n        if (corner != null) {\r\n            if (image.panOpened) {\r\n                // Rechts offen\r\n                overview.style.backgroundImage = \"url(\" + image.dwPanOpenedRUrl + \")\";\r\n                openButtonImage.src = image.dwOpenButtonUrl;\r\n                var left = framework_isMobileView ? \"154px\" : \"155px\"; // = Gesamtbreite - BUTTON_WIDTH - GENERAL_INSETS\r\n                $(elementId + \"_zoominbutton\").style.left = left;\r\n                $(elementId + \"_zoomoutbutton\").style.left = left;\r\n                $(elementId + \"_zoomfitbutton\").style.left = left;\r\n                var zoomRect = $(elementId + \"_zoomrect\");\r\n                if (zoomRect != null) {\r\n                    zoomRect.style.left = left;\r\n                }\r\n                $(elementId + \"_openbutton\").style.left = left;\r\n            } else {\r\n                // Rechts geschlossen\r\n                overview.style.backgroundImage = \"url(\" + image.dwPanClosedUrl + \")\";\r\n                openButtonImage.src = image.dwCloseButtonUrl;\r\n                var left = framework_isMobileView ? \"8px\" : \"9px\";\r\n                $(elementId + \"_zoominbutton\").style.left = left;\r\n                $(elementId + \"_zoomoutbutton\").style.left = left;\r\n                $(elementId + \"_zoomfitbutton\").style.left = left;\r\n                var zoomRect = $(elementId + \"_zoomrect\");\r\n                if (zoomRect != null) {\r\n                    zoomRect.style.left = left;\r\n                }\r\n                $(elementId + \"_openbutton\").style.left = left;\r\n                $(elementId + \"_pandiv\").style.left = \"0px\";\r\n            }\r\n        }\r\n        $(elementId + \"_pandiv\").style.left = framework_isMobileView ? \"-44px\" : \"-32px\"; // = SLIDER_X - GENERAL_INSETS\r\n    }\r\n\r\n    if (corner != null) {\r\n        if (typeof (dwAjaxGuiViewerImagePanPositionChanged) != \"undefined\") {\r\n            dwAjaxGuiViewerImagePanPositionChanged(elementId, elementId, corner, true);\r\n        } else if (typeof (callbackHandler) != \"undefined\") {\r\n            var nr;\r\n            var IPP_POSITION_TOP_LEFT = 1;\r\n            var IPP_POSITION_BOTTOM_LEFT = 2;\r\n            var IPP_POSITION_BOTTOM_RIGHT = 3;\r\n            var IPP_POSITION_TOP_RIGHT = 4;\r\n            var JV_POSITION_TOP_LEFT = 0;\r\n            var JV_POSITION_TOP_RIGHT = 1;\r\n            var JV_POSITION_BOTTOM_LEFT = 2;\r\n            var JV_POSITION_BOTTOM_RIGHT = 3;\r\n            if (corner == JV_POSITION_TOP_LEFT) {\r\n                nr = IPP_POSITION_TOP_LEFT;\r\n            }\r\n            if (corner == JV_POSITION_BOTTOM_LEFT) {\r\n                nr = IPP_POSITION_BOTTOM_LEFT;\r\n            }\r\n            if (corner == JV_POSITION_BOTTOM_RIGHT) {\r\n                nr = IPP_POSITION_BOTTOM_RIGHT;\r\n            }\r\n            if (corner == JV_POSITION_TOP_RIGHT) {\r\n                nr = IPP_POSITION_TOP_RIGHT;\r\n            }\r\n            var ietkTop = (parent.ietktop) ? parent.ietktop : parent.parent.ietktop;\r\n            callbackHandler(ietkTop, \"genericPanWindowLocation\", nr);\r\n        }\r\n    }\r\n\r\n    overview.style.visibility = \"visible\";\r\n}\r\n\r\nfunction dwImageViewerAddHotspot(elementId, x1, y1, x2, y2, linkStyle, linkStyleMark, linkStyleFocused,\r\n                                 color, colorMark, colorFocused,\r\n                                 marked, focused, key, keyVer, uniqueId, text, type,\r\n                                 isWithHover, colorHover, isWithOutline, colorOutline, fontSize, fontName, fontWeight) {\r\n    var image = dwImageViewerGetImage(elementId);\r\n    if (image == null) { // kann durch die Verwendung von setTimeout() passieren\r\n        return;\r\n    }\r\n\r\n    var hotspot = new dwImageViewerHotspot(elementId, x1, y1, x2, y2, linkStyle, linkStyleMark, linkStyleFocused,\r\n                                           color, colorMark, colorFocused,\r\n                                           marked, focused, key, keyVer, uniqueId, text, type,\r\n                                           isWithHover, colorHover, isWithOutline, colorOutline, fontSize, fontName, fontWeight);\r\n    image.hotspots.push(hotspot);\r\n    return hotspot;\r\n}\r\n\r\nfunction dwImageViewerRemoveAllHotspots(elementId) {\r\n    let image = dwImageViewerGetImage(elementId);\r\n    if (image == null) { // kann durch die Verwendung von setTimeout() passieren\r\n        return;\r\n    }\r\n\r\n    let existingHotspots = image.hotspots;\r\n    image.hotspots = new Array();\r\n    for (let i = 0; i < existingHotspots.length; i++) {\r\n        let hotspotSpan = existingHotspots[i].span;\r\n        if (hotspotSpan != null) {\r\n            dwDomRemoveSelf(hotspotSpan);\r\n        }\r\n    }\r\n}\r\n\r\nfunction dwImageMarkHotspot(uniqueId, marked, scrollToMarkedHotspot, focused) {\r\n    var hotspotSpan = $(uniqueId);\r\n    var wasMarked = hotspotSpan.hotspot.marked;\r\n    hotspotSpan.hotspot.marked = marked;\r\n    hotspotSpan.hotspot.focused = focused;\r\n    dwImagePaintHotspot(hotspotSpan);\r\n    if (marked && !wasMarked && scrollToMarkedHotspot) {\r\n        dwImageScrollToHotspot(uniqueId);\r\n        return true;\r\n    }\r\n    return false;\r\n}\r\n\r\nfunction dwImageScrollToHotspot(uniqueId) {\r\n    var hotspotSpan = $(uniqueId);\r\n    var image = dwImageViewerGetImage(hotspotSpan.hotspot.elementId);\r\n    if (image != null) {\r\n        dwImageViewerSetImageCenterPoint(image, new DWPoint(hotspotSpan.hotspot.x1 + hotspotSpan.hotspot.width / 2,\r\n                                                            hotspotSpan.hotspot.y1 + hotspotSpan.hotspot.height / 2));\r\n    }\r\n}\r\n\r\nfunction dwImagePaintHotspot(hotspotSpan) {\r\n    var hotspot = hotspotSpan.hotspot;\r\n    var image = dwImageViewerGetImage(hotspot.elementId);\r\n    if (image == null) { // kann durch die Verwendung von setTimeout() passieren\r\n        return;\r\n    }\r\n\r\n    //Bei SVG Zeichnungen müssen Hotspotfarben manuell gesetzt werden, weil die Hotspots direkt im SVG gezeichnet sind\r\n    // Mind. hier muss man ändern wenn man EPlan SVG will\r\n    if ((image) && (image.viewerType == \"viewerimagesvgnative\")) {\r\n        dwImageSVGPaintHotspot(hotspot);\r\n        return;\r\n    }\r\n    var hotspotMarked = hotspot.marked;\r\n    var hotspotFocused = hotspot.focused;\r\n    var hotspotLinkStyle = hotspot.linkStyle;\r\n    var hotspotColor = hotspot.color;\r\n    if (hotspotMarked) {\r\n        if (hotspotFocused) {\r\n            hotspotLinkStyle = hotspot.linkStyleFocused;\r\n            hotspotColor = hotspot.colorFocused;\r\n        } else {\r\n            hotspotLinkStyle = hotspot.linkStyleMark;\r\n            hotspotColor = hotspot.colorMark;\r\n        }\r\n    } else {\r\n        if ((image) && !image.unmarkedHotspotsVisible) {\r\n            hotspotLinkStyle = DW_LINK_STYLE_NONE;\r\n            hotspotColor = \"transparent\"; // Ignoriert, da ohne Shape\r\n        }\r\n    }\r\n\r\n    var didWithCanvas = false;\r\n    var isEllipse = ((hotspotLinkStyle == DW_LINK_STYLE_ELLIPSE) || (hotspotLinkStyle == DW_LINK_STYLE_ELLIPSE_FULL));\r\n    // Nur bei Ellipse Canvas nehmen\r\n    if (isEllipse && framework_isWithCanvas) {\r\n        if (!hotspotSpan.dwCanvas) {\r\n            // Canvas anlegen\r\n            hotspotSpan.dwCanvas = document.createElement(\"canvas\");\r\n            hotspotSpan.appendChild(hotspotSpan.dwCanvas);\r\n            hotspotSpan.dwContext = hotspotSpan.dwCanvas.getContext(\"2d\");\r\n            hotspotSpan.dwContext.imageSmoothingEnabled = true;\r\n        }\r\n\r\n        image = dwImageViewerGetImage(hotspot.elementId);\r\n        if (!image) {\r\n            return; // kann bei Verwendung von Timeouts passieren, wenn die Zeichnung inzwischen gar nicht mehr angezeigt wird\r\n        }\r\n\r\n        var hotspotX = Math.floor(parseFloat(hotspotSpan.style.left) - parseFloat(image.style.left));\r\n        var hotspotY = Math.floor(parseFloat(hotspotSpan.style.top) - parseFloat(image.style.top));\r\n        var hotspotWidth = Math.ceil(parseFloat(hotspotSpan.style.width));\r\n        var hotspotHeight = Math.ceil(parseFloat(hotspotSpan.style.height));\r\n        if ((hotspotWidth <= 0.001) || (hotspotHeight <= 0.001)) {\r\n            // Noch nicht initialisiert\r\n            return;\r\n        }\r\n\r\n\r\n        // Nun die Hotspots zeichnen\r\n        if ((hotspotLinkStyle == DW_LINK_STYLE_FULL) || (hotspotLinkStyle == DW_LINK_STYLE_RECT)) {\r\n            dwImageDrawRectForHotspot(hotspotSpan, hotspotX, hotspotY, hotspotWidth, hotspotHeight, hotspotColor, hotspotLinkStyle);\r\n            didWithCanvas = true;\r\n        } else if ((hotspotLinkStyle == DW_LINK_STYLE_ELLIPSE_FULL) || (hotspotLinkStyle == DW_LINK_STYLE_ELLIPSE)) {\r\n            dwImageDrawEllipseForHotspot(hotspotSpan, hotspotX, hotspotY, hotspotWidth, hotspotHeight, hotspotColor, hotspotLinkStyle);\r\n            didWithCanvas = true;\r\n        } else if (hotspotLinkStyle == DW_LINK_STYLE_LINE) {\r\n            dwImageDrawLineForHotspot(hotspotSpan, hotspotX, hotspotY, hotspotWidth, hotspotHeight, hotspotColor);\r\n            didWithCanvas = true;\r\n        } else if (hotspotLinkStyle == DW_LINK_STYLE_NONE) {\r\n            // Nichts zu tun\r\n        }\r\n    }\r\n\r\n    if (didWithCanvas) {\r\n        // Bei Canvas brauchen wir das hier nicht anzeigen\r\n        hotspotSpan.style.borderWidth = \"0px\";\r\n        hotspotSpan.style.borderBottomWidth = \"0px\";\r\n        hotspotSpan.style.borderColor = \"transparent\";\r\n        hotspotSpan.style.backgroundColor = \"transparent\";\r\n        dwUtilsSetOpacity(hotspotSpan, 100);\r\n        dwUtilsSetOpacity(hotspotSpan.dwCanvas, 100);\r\n    } else {\r\n        dwUtilsSetOpacity(hotspotSpan, 100);\r\n        // Nach umschalten müssen wir das auch so machen\r\n        if (hotspotSpan.dwCanvas) {\r\n            dwUtilsSetOpacity(hotspotSpan.dwCanvas, 0);\r\n        }\r\n        // Ellipsen gehen nicht, deshalb Fallback auf Rect\r\n        if ((hotspotLinkStyle == DW_LINK_STYLE_FULL) || (hotspotLinkStyle == DW_LINK_STYLE_ELLIPSE_FULL)) {\r\n            hotspotSpan.style.borderWidth = \"0px\";\r\n            hotspotSpan.style.borderBottomWidth = \"0px\";\r\n            hotspotSpan.style.borderColor = \"transparent\";\r\n            hotspotSpan.style.backgroundColor = hotspotColor;\r\n        } else if ((hotspotLinkStyle == DW_LINK_STYLE_RECT) || (hotspotLinkStyle == DW_LINK_STYLE_ELLIPSE)) {\r\n            hotspotSpan.style.borderWidth = \"1px\";\r\n            hotspotSpan.style.borderBottomWidth = \"1px\";\r\n            hotspotSpan.style.borderStyle = \"solid\";\r\n            hotspotSpan.style.borderColor = hotspotColor;\r\n            hotspotSpan.style.backgroundColor = \"transparent\";\r\n        } else if (hotspotLinkStyle == DW_LINK_STYLE_LINE) {\r\n            hotspotSpan.style.borderWidth = \"0px\";\r\n            hotspotSpan.style.borderBottomWidth = \"1px\";\r\n            hotspotSpan.style.borderStyle = \"solid\";\r\n            hotspotSpan.style.borderColor = hotspotColor;\r\n            hotspotSpan.style.backgroundColor = \"transparent\";\r\n        } else if (hotspotLinkStyle == DW_LINK_STYLE_NONE) {\r\n            hotspotSpan.style.borderWidth = \"0px\";\r\n            hotspotSpan.style.borderBottomWidth = \"0px\";\r\n            hotspotSpan.style.borderColor = \"transparent\";\r\n            hotspotSpan.style.backgroundColor = \"transparent\";\r\n        } else if (hotspotLinkStyle == DW_LINK_STYLE_REDESIGN_RECT) {\r\n            // Im MaterialTheme soll der Hotspot fest einen gräulich/schwarzen Rahmen erhalten. Die Farbe die sonst\r\n            // für den Hotspot konfiguriert ist wird dann hier als Füllfarbe für das Rechteck verwendet.\r\n            hotspotSpan.style.borderWidth = \"1px\";\r\n            hotspotSpan.style.borderBottomWidth = \"1px\";\r\n            hotspotSpan.style.borderColor = \"#707070\";\r\n            hotspotSpan.style.backgroundColor = hotspotColor;\r\n        }\r\n    }\r\n}\r\n\r\nfunction dwImageDrawEllipseForHotspot(hotspotSpan, srcX, srcY, srcWidth, srcHeight, hotspotColor, hotspotLinkStyle) {\r\n    // Ellipse in jede Richtung um ellipsePaddingFactor größer als rechteckigen Bereich darstellen, damit die Ellipse\r\n    // nicht zu klein wird und der klickbare Bereich als in die Ellipse eingepasstes Rechteck stimmt (analog zu Classic);\r\n    // in der mobilen GUI keine Vergrößerung vornehmen, da dort die Hotspots sowieso schon vergrößert sind\r\n    var ellipsePaddingFactor = framework_isMobileView ? 0 : 0.2;\r\n    hotspotSpan.dwCanvas.style.position = \"absolute\";\r\n    hotspotSpan.dwCanvas.style.left = (-hotspotSpan.width * ellipsePaddingFactor) + \"px\";\r\n    hotspotSpan.dwCanvas.style.top = (-hotspotSpan.height * ellipsePaddingFactor) + \"px\";\r\n    hotspotSpan.dwCanvas.width = hotspotSpan.width * (1 + 2 * ellipsePaddingFactor);\r\n    hotspotSpan.dwCanvas.height = hotspotSpan.height * (1 + 2 * ellipsePaddingFactor);\r\n    hotspotSpan.dwCanvas.style.cursor = \"pointer\";\r\n\r\n    // Ellipse bei (1, 1) beginnen lassen bis (width - 2, height - 2), damit die Ellipse an den Rändern u.a. wegen Anti-Aliasing\r\n    // von dem Canvas nicht abgeschnitten wird\r\n    dwUtilsCanvasDrawEllipse(hotspotSpan.dwContext, 1, 1, hotspotSpan.dwCanvas.width - 2, hotspotSpan.dwCanvas.height - 2,\r\n                             hotspotColor, hotspotLinkStyle == DW_LINK_STYLE_ELLIPSE_FULL);\r\n}\r\n\r\nfunction dwImageDrawLineForHotspot(hotspotSpan, srcX, srcY, srcWidth, srcHeight, hotspotColor) {\r\n    hotspotSpan.dwCanvas.style.position = \"absolute\";\r\n    hotspotSpan.dwCanvas.style.left = \"0px\";\r\n    hotspotSpan.dwCanvas.style.top = \"0px\";\r\n    hotspotSpan.dwCanvas.width = hotspotSpan.width;\r\n    hotspotSpan.dwCanvas.height = hotspotSpan.height;\r\n    hotspotSpan.dwCanvas.style.cursor = \"pointer\";\r\n\r\n    dwUtilsCanvasDrawLine(hotspotSpan.dwContext, 0, hotspotSpan.dwCanvas.height - 1, hotspotSpan.dwCanvas.width,\r\n                          hotspotSpan.dwCanvas.height - 1, hotspotColor);\r\n}\r\n\r\nfunction dwImageDrawRectForHotspot(hotspotSpan, srcX, srcY, srcWidth, srcHeight, hotspotColor, hotspotLinkStyle) {\r\n    hotspotSpan.dwCanvas.style.position = \"absolute\";\r\n    hotspotSpan.dwCanvas.style.left = \"0px\";\r\n    hotspotSpan.dwCanvas.style.top = \"0px\";\r\n    hotspotSpan.dwCanvas.width = srcWidth;\r\n    hotspotSpan.dwCanvas.height = srcHeight;\r\n\r\n    dwUtilsCanvasDrawRect(hotspotSpan.dwContext, 0, 0, hotspotSpan.dwCanvas.width, hotspotSpan.dwCanvas.height,\r\n                          hotspotColor, hotspotLinkStyle == DW_LINK_STYLE_FULL);\r\n}\r\n\r\n/*\r\n * Es gibt keine separate dwImageClearHotspotMarks() Methode, weil:\r\n * 1. Sowohl der Zugriff auf image über $(elementId + \"_image\")\r\n * als auch das Durchlaufen aller Hotspots würde doppelt gemacht werden müssen\r\n * 2. Es könnte ein Flackern auftreten, wenn ein bereits markierter Hotspot erneut markiert werden soll,\r\n * weil er vorher zunächst gelöscht werden würde. Dieses Problem tritt in der kombinierten Methode nicht auf.\r\n *\r\n * Das Löschen aller Hotspot-Markierungen kann mit <code>dwImageMarkHotspotsForKey(elementId, \"\", \"\", true, false)</code> erfolgen.\r\n */\r\nfunction dwImageMarkHotspotsForKey(elementId, key, keyVer, clearHotspotMarks, scrollToMarkedHotspot, rightClicked, uniqueIdOfFocusedHotspot) {\r\n    var image = dwImageViewerGetImage(elementId);\r\n\r\n    // kann passieren, wenn diese Methode über setTimeout() von dwImageViewerInitEnd() aufgerufen wird und das image nicht mehr existiert\r\n    if (image == null) {\r\n        return;\r\n    }\r\n\r\n    dwImageSetLastHotspotKey(elementId, key, keyVer);\r\n    var markedHotspotIds = dwImageGetMarkedHotspotIds(elementId);\r\n\r\n    for (var i = 0; i < image.hotspots.length; i++) {\r\n        var hotspot = image.hotspots[i];\r\n        var markHotspot = (hotspot.key === key) && (hotspot.keyVer === keyVer);\r\n        if (clearHotspotMarks || markHotspot) {\r\n            // Wenn die Multiselektion aktiv ist und die anderen Hotspots nicht wieder \"entmarked\" werden sollen\r\n            // dann das markHotspot überschreiben in Abhängkeit davon ob der Hotspot schon markiert war. Das toggeled\r\n            // quasi die Selektion dieses Hotspots. Das darf aber nur bei Linksklick passieren, sonst wundert man sich\r\n            // warum der Hotspot deselektiert wird, wenn man das Kontextmenü vom Bild auf ihm aufrufen möchte\r\n            if (image.isMultiSelection && !clearHotspotMarks && !rightClicked) {\r\n                markHotspot = !dwUtilsIsInArray(markedHotspotIds, hotspot.uniqueId);\r\n            }\r\n            var focused = hotspot.uniqueId === uniqueIdOfFocusedHotspot;\r\n            var didScroll = dwImageMarkHotspot(hotspot.uniqueId, markHotspot, scrollToMarkedHotspot, focused);\r\n            if (didScroll) {\r\n                scrollToMarkedHotspot = false;\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\nfunction dwImageGetFocusedHotspotId(elementId) {\r\n    var image = dwImageViewerGetImage(elementId);\r\n\r\n    // kann passieren, wenn diese Methode über setTimeout() von dwImageViewerInitEnd() aufgerufen wird und das image nicht mehr existiert\r\n    if (image == null) {\r\n        return;\r\n    }\r\n    for (var i = 0; i < image.hotspots.length; i++) {\r\n        var hotspot = image.hotspots[i];\r\n        var hotspotSpan = $(hotspot.uniqueId);\r\n        var isFocused = hotspotSpan.hotspot.focused;\r\n        if (isFocused) {\r\n            return hotspot.uniqueId\r\n        }\r\n    }\r\n    return \"\";\r\n}\r\n\r\nfunction dwImageGetMarkedHotspotIds(elementId) {\r\n    var image = dwImageViewerGetImage(elementId);\r\n\r\n    // kann passieren, wenn diese Methode über setTimeout() von dwImageViewerInitEnd() aufgerufen wird und das image nicht mehr existiert\r\n    if (image == null) {\r\n        return;\r\n    }\r\n    var markedHotspotIds = [];\r\n    for (var i = 0; i < image.hotspots.length; i++) {\r\n        var hotspot = image.hotspots[i];\r\n        var hotspotSpan = $(hotspot.uniqueId);\r\n        var isMarked = hotspotSpan.hotspot.marked;\r\n        if (isMarked) {\r\n            markedHotspotIds.push(hotspot.uniqueId);\r\n        }\r\n    }\r\n    return markedHotspotIds;\r\n}\r\n\r\n/*\r\n * Scrollt in dem Bild zur angegebenen elementId zum Hotspot mit den angegebenen Daten.\r\n */\r\nfunction dwImageScrollToHotspotForKey(elementId, key, keyVer) {\r\n    var image = dwImageViewerGetImage(elementId);\r\n\r\n    // kann passieren, wenn das image nicht mehr existiert\r\n    if (image == null) {\r\n        return;\r\n    }\r\n\r\n    for (var i = 0; i < image.hotspots.length; i++) {\r\n        var hotspot = image.hotspots[i];\r\n        if ((hotspot.key == key) && (hotspot.keyVer == keyVer)) {\r\n            dwImageScrollToHotspot(hotspot.uniqueId);\r\n            return;\r\n        }\r\n    }\r\n}\r\n\r\n/*\r\n * Muss aufgerufen werden, um sich den letzten gewählten Hotspot zu merken (z.B. wenn zwischenzeitlich der ImageViewer\r\n * mal durch andere Controls ausgetauscht wurde).\r\n */\r\nfunction dwImageSetLastHotspotKey(elementId, key, keyVer) {\r\n    // Hotspot-Daten für neue Instanzen mit gleicher elementId merken\r\n    DW_IMAGE_LAST_HOTSPOT_KEY = key;\r\n    DW_IMAGE_LAST_HOTSPOT_KEY_VER = keyVer;\r\n\r\n    // Hotspot-Daten in dieser Instanz merken (notwendigen bei mehreren gleichzeitigen ImageViewern)\r\n    var image = dwImageViewerGetImage(elementId);\r\n\r\n    // kann passieren, wenn das image nicht mehr existiert\r\n    if (image == null) {\r\n        return;\r\n    }\r\n\r\n    image.lastHotspotKey = key;\r\n    image.lastHotspotKeyVer = keyVer;\r\n}\r\n\r\n/**\r\n * Schaltet die Hotspots an/aus\r\n * @param elementId\r\n */\r\nfunction dwImageToggleUnmarkedHotspotsVisibility(elementId) {\r\n    var image = dwImageViewerGetImage(elementId);\r\n    if (image == null) { // kann durch die Verwendung von setTimeout() passieren\r\n        return;\r\n    }\r\n\r\n    dwImageSetUnmarkedHotspotsVisibility(elementId, !image.unmarkedHotspotsVisible);\r\n}\r\n\r\n/**\r\n * Schaltet die Hotspots an/aus\r\n * @param elementId\r\n */\r\nfunction dwImageSetUnmarkedHotspotsVisibility(elementId, value) {\r\n    var image = dwImageViewerGetImage(elementId);\r\n    if (image == null) { // kann durch die Verwendung von setTimeout() passieren\r\n        return;\r\n    }\r\n\r\n    image.unmarkedHotspotsVisible = value;\r\n    for (var i = 0; i < image.hotspots.length; i++) {\r\n        var hotspot = image.hotspots[i];\r\n        var hotspotSpan = $(hotspot.uniqueId);\r\n        dwImagePaintHotspot(hotspotSpan)\r\n    }\r\n}\r\n\r\nfunction dwImageSetMultiSelection(elementId, value) {\r\n    var image = dwImageViewerGetImage(elementId)\r\n    if (image == null) { // kann durch die Verwendung von setTimeout() passieren\r\n        return;\r\n    }\r\n\r\n    image.isMultiSelection = value;\r\n}\r\n\r\n/**\r\n * Reagiert auf mouseover / mouseout Events der Leisten zum Blättern zwischen den Bildern\r\n *\r\n * Delegiert wichtige Mouse Event Handler zu anderen Objekten weiter\r\n * @param 1:isOver, 0:isOut, -1:ShowAlways\r\n */\r\nfunction dwImageNavigationBarMouseMoveHandler(elementId, navigationBarId, isOver) {\r\n    var imagescroll = $(elementId + \"_imagescroll\");\r\n    var navigationBar = $(navigationBarId);\r\n    var nextBar = $(elementId + \"_nav_next\");\r\n    if (nextBar) {\r\n        if (dwUtilsHasVerticalOverflow(imagescroll)) {\r\n            var scrollWidth = dwUtilsGetScrollbarWidth(imagescroll);\r\n            nextBar.style.right = scrollWidth + \"px\";\r\n        } else {\r\n            nextBar.style.right = \"0\";\r\n        }\r\n    }\r\n    if (isOver == 1) {     // einblenden\r\n        dwUtilsSetOpacity(navigationBar, 100);\r\n        navigationBar.onclick = function(event) {\r\n            dwImageNavigationBarMouseClickedHandler(event, elementId, navigationBar.getAttribute(\"imageIndex\"))\r\n        };\r\n        navigationBar.ondblclick = function(event) {\r\n            var intersectingHotspot = dwImageIsNavigationBarMouseClickIntersectingHotspot(event, elementId);\r\n            if (intersectingHotspot) {\r\n                dwImageNavigationBarEventRedirectHandler(event, intersectingHotspot.span);\r\n            }\r\n        };\r\n        navigationBar.onmousemove = function(event) {\r\n            var intersectingHotspot = dwImageIsNavigationBarMouseClickIntersectingHotspot(event, elementId);\r\n            if (intersectingHotspot) {\r\n                // Aktuell wird ein Hotspot überlagert ...\r\n                if (navigationBar.hotspotWithTooltip) {\r\n                    if (navigationBar.hotspotWithTooltip.span.id != intersectingHotspot.span.id) {\r\n                        // Alten Hotspot Tooltip ausblenden ...\r\n                        dwImageNavigationBarDispatchMouseEvent(event, \"mouseout\", navigationBar.hotspotWithTooltip.span);\r\n                        // Neuen Hotspot Tooltip einblenden ...\r\n                        dwImageNavigationBarDispatchMouseEvent(event, \"mouseover\", intersectingHotspot.span);\r\n                        navigationBar.hotspotWithTooltip = intersectingHotspot;\r\n                    }\r\n                    // Aktuelle Mouse Position an den Tooltip weitergeben (onmousemove)\r\n                    dwImageNavigationBarEventRedirectHandler(event, intersectingHotspot.span);\r\n                } else {\r\n                    dwImageNavigationBarDispatchMouseEvent(event, \"mouseover\", intersectingHotspot.span);\r\n                    navigationBar.hotspotWithTooltip = intersectingHotspot;\r\n                }\r\n\r\n            } else {\r\n                var oldHotspot = navigationBar.hotspotWithTooltip;\r\n                if (oldHotspot) {\r\n                    dwImageNavigationBarDispatchMouseEvent(event, \"mouseout\", oldHotspot.span);\r\n                    navigationBar.hotspotWithTooltip = null;\r\n                }\r\n            }\r\n\r\n        };\r\n\r\n        var defaultRedirectFunction = function(event) {\r\n            var imagescroll = $(elementId + \"_imagescroll\");\r\n            dwImageNavigationBarEventRedirectHandler(event, imagescroll);\r\n        };\r\n        navigationBar.onmouseup = defaultRedirectFunction;\r\n        navigationBar.onmousewheel = defaultRedirectFunction;\r\n        if (!(navigationBar.getAttribute(\"inited\")) && navigationBar.addEventListener) {\r\n            navigationBar.setAttribute(\"inited\", true);\r\n            navigationBar.addEventListener('DOMMouseScroll',\r\n                                           function(event) {\r\n                                               dwImageViewerMouseWheel(event, elementId);\r\n                                               if (nextBar && dwUtilsHasVerticalOverflow(imagescroll)) {\r\n                                                   var scrollWidth = dwUtilsGetScrollbarWidth(imagescroll);\r\n                                                   nextBar.style.right = scrollWidth + \"px\";\r\n                                               }\r\n                                           }, false);\r\n        }\r\n\r\n    } else if (isOver == 0) {     // ausblenden\r\n        dwUtilsSetOpacity(navigationBar, 0.1);\r\n        // Listener werden dynamisch hinzugefügt / entfernt. Bei Verwendung von addEventListener/removeEventListener müsste jedoch\r\n        // die gesetzte/entfernte Methode als Variable vorgehalten werden. Ziel des Mechanismus ist eine Vermeidung,\r\n        // die Listener doppelt zu setzen. Das wird für \"DOMMouseScroll\" durch setzen eines init Flags realisiert\r\n        navigationBar.onclick = function() {\r\n        };\r\n        navigationBar.ondblclick = function() {\r\n        };\r\n        navigationBar.onmouseup = function() {\r\n        };\r\n        navigationBar.onmousemove = function() {\r\n        };\r\n        navigationBar.onmousewheel = function() {\r\n        };\r\n        navigationBar.hotspotWithTooltip = null;\r\n    } else if (isOver == -1) {  // Dauerhaft anzeigen\r\n        dwUtilsSetOpacity(navigationBar, 100);\r\n        navigationBar.onclick = function(event) {\r\n            dwImageNavigationBarMouseClickedHandler(event, elementId, navigationBar.getAttribute(\"imageIndex\"))\r\n        };\r\n    }\r\n}\r\n\r\n/**\r\n * Klick auf Layer zum Blättern ziwschen den Bildern. Ist unterhalb der geklickten Fläche ein Hotspot\r\n * wird die Hotspot Aktion ausgelöst. Andernfalls die Blätter-Aktion\r\n * @param event\r\n * @param elementId\r\n * @param imageIndex\r\n */\r\nfunction dwImageNavigationBarMouseClickedHandler(event, elementId, imageIndex) {\r\n    event = dwFrameworkGetEvent(event);\r\n    var intersectingHotspot = dwImageIsNavigationBarMouseClickIntersectingHotspot(event, elementId);\r\n    if (intersectingHotspot) { // Hotspot Objekt wurde zurückgeliefert\r\n        var eventType = (framework_isMobileView) ? \"onclick\" : \"onmousedown\";\r\n        intersectingHotspot.span[eventType](event);\r\n        return;\r\n    }\r\n    if (typeof (dwAjaxAddUpdate) != \"undefined\") {\r\n        dwAjaxAddUpdate(elementId + \"@DW@\" + elementId + \"@DW@imageIndexChangeEvent@DW@imageIndex=\" + imageIndex, true);\r\n    } else if (typeof (dwSwingFrameworkFireCallbackEvent) != \"undefined\") {\r\n        dwSwingFrameworkFireCallbackEvent(\"imageIndexChangeEvent\", imageIndex);\r\n    } else if (typeof (loadPicture) != \"undefined\") {\r\n        loadPicture(imageIndex);\r\n    }\r\n\r\n}\r\n\r\n/**\r\n * Generiert ein mouse-event auf Basis des alten Events (z.B. mousemove/mouseover/mouseout) und feuert dies auf dem target ab.\r\n * @param event\r\n * @param type\r\n * @param target\r\n */\r\nfunction dwImageNavigationBarDispatchMouseEvent(event, type, target) {\r\n    var mouseEvent = document.createEvent(\"MouseEvents\");\r\n    mouseEvent.initMouseEvent(type, false, true, event.view, 0, event.screenX, event.screenY,\r\n                              event.clientX, event.clientY, event.ctrlKey, event.altKey, event.shiftKey,\r\n                              event.metaKey, 0, target);\r\n    target.dispatchEvent(mouseEvent);\r\n}\r\n\r\n/**\r\n * Convinience Methode zur Event Delagation an ein anderes HTML DOM Element\r\n * @param event\r\n * @param eventTarget\r\n */\r\nfunction dwImageNavigationBarEventRedirectHandler(event, eventTarget) {\r\n    if (!eventTarget) {\r\n        return;\r\n    }\r\n    event = dwFrameworkGetEvent(event);\r\n    var func = eventTarget[\"on\" + event.type];\r\n    if (func) {\r\n        func.apply(eventTarget, new Array(event));\r\n    }\r\n}\r\n\r\n/**\r\n * Liefert den Hotspot zurück, der für die aktuelle Mouse Position gefunden wurde\r\n * NULL wenn kein Hotspot zur Mouse Position gefunden wurde\r\n *\r\n * Bei der Bestimmung wird nicht nur die (relative) Hotspot Position bestimmt (diese ist relativ zur Hotspot Paint Area)\r\n * sondern auch die Position dieser Hotspot Paint Area berücksichtigt\r\n * Grund: ImageScroll füllt die gesamte Viewer Fläche aus,\r\n *        die Hotspot Area ggf. nur einen Teilbereich,\r\n *        und der Hotspot nur eine Teilfläche der Paint Area\r\n * @param event\r\n * @param elementId\r\n * @return Hotspot oder NULL\r\n */\r\nfunction dwImageIsNavigationBarMouseClickIntersectingHotspot(event, elementId) {\r\n    event = dwFrameworkGetEvent(event);\r\n    var image = dwImageViewerGetImage(elementId);\r\n    if (image == null) { // kann durch die Verwendung von setTimeout() passieren\r\n        return;\r\n    }\r\n\r\n    var imagescroll = $(elementId + \"_imagescroll\");\r\n    // Da diese Navigationsicons/bars auch in WebGl vorhanden sind und dort kein imagescroll vorhanden ist hier einfach aussteigen\r\n    // Die Hotspots sind in WebGl eigens gelöst.\r\n    if (imagescroll != null) {\r\n        var hotspotsPaintArea = $(elementId + \"_hotspots_click\");\r\n        var mouseCoords = dwUtilsGetRelMouseCoords(event, imagescroll);\r\n        for (var i = 0; i < image.hotspots.length; i++) {\r\n            var hotspot = image.hotspots[i];\r\n            if (hotspot.span == null) {\r\n                continue;\r\n            }\r\n            var x1 = parseInt(hotspotsPaintArea.style.left) + parseInt(hotspot.span.style.left);\r\n            var x2 = x1 + parseInt(hotspot.span.style.width);\r\n            var y1 = parseInt(hotspotsPaintArea.style.top) + parseInt(hotspot.span.style.top);\r\n            var y2 = y1 + parseInt(hotspot.span.style.height);\r\n            if ((mouseCoords.x >= x1) && (mouseCoords.x <= x2) && (mouseCoords.y >= y1) && mouseCoords.y <= y2) {\r\n                // Wenn über dem gefundenen Hotspot das kleine Image eines Navigationsbuttons (vor oder zurück) liegt,\r\n                // dann \"gewinnt\" doch die Navigation und nicht der Hotspot. Wenn ein Hotspot die gesamte Breite eines Bildes\r\n                // einnimmt, ist die Navigation sonst nicht mehr erreichbar\r\n                if (dwImageIsMouseClickIntersectingNavButtonImages(event, elementId)) {\r\n                    return null;\r\n                }\r\n                return hotspot;\r\n            }\r\n        }\r\n    }\r\n    return null;\r\n}\r\n\r\n// Prüft, ob sich an der aktuellen Mausposition einer der Navigationsbuttons bzw. genauer deren Images befindet\r\nfunction dwImageIsMouseClickIntersectingNavButtonImages(event, elementId) {\r\n    var viewer = $(elementId);\r\n    // Mausposition\r\n    var mouseCoords = dwUtilsGetRelMouseCoords(event, viewer);\r\n\r\n    // Vor- und zurück Button\r\n    return dwImageIsMouseClickIntersectingNavButtonImage(\"_nav_next\", elementId, mouseCoords) ||\r\n           dwImageIsMouseClickIntersectingNavButtonImage(\"_nav_previous\", elementId, mouseCoords);\r\n}\r\n\r\n// Prüft, ob sich an der aktuellen Mausposition das Image eines bestimmten Navigationsbuttons befindet\r\nfunction dwImageIsMouseClickIntersectingNavButtonImage(suffix, elementId, mouseCoords) {\r\n    // Navigationsbutton\r\n    var navButton = $(elementId + suffix);\r\n    if (navButton) {\r\n        // Image\r\n        var navButtonImage = dwDomGetChildAtIndex(navButton, 0);\r\n        if (navButtonImage) {\r\n            var x1 = parseInt(navButton.offsetLeft) + parseInt(navButtonImage.offsetLeft);\r\n            var x2 = x1 + parseInt(navButtonImage.offsetWidth);\r\n            var y1 = parseInt(navButton.offsetTop) + parseInt(navButtonImage.offsetTop);\r\n            var y2 = y1 + parseInt(navButtonImage.offsetHeight);\r\n            if ((mouseCoords.x >= x1) && (mouseCoords.x <= x2) && (mouseCoords.y >= y1) && mouseCoords.y <= y2) {\r\n                // Treffer\r\n                return true;\r\n            }\r\n        }\r\n    }\r\n    return false;\r\n}\r\n\r\n\r\nfunction dwImageViewerGetVisibleRect(elementId) {\r\n    var image = dwImageViewerGetImage(elementId);\r\n    if (image == null) { // kann durch die Verwendung von setTimeout() passieren\r\n        return;\r\n    }\r\n\r\n    var imagescroll = $(elementId + \"_imagescroll\");\r\n    if ((image == null) || (imagescroll == null)) { // kann evtl. passieren, wenn der Server den sichtbaren Bereich von einem nicht mehr vorhandenen ImageViewer abfragt\r\n        return\r\n    }\r\n\r\n    var scaleFactor = Math.max(image.dwWidth / image.offsetWidth, image.dwHeight / image.offsetHeight);\r\n    if (typeof (dwAjaxFireCustomEvent) != \"undefined\") {\r\n        dwAjaxFireCustomEvent(elementId, elementId, \"getImageVisibleRectEvent\",\r\n                              \"x=\" + Math.round(imagescroll.scrollLeft * scaleFactor)\r\n                              + \"@DWSUB@y=\" + Math.round(imagescroll.scrollTop * scaleFactor)\r\n                              + \"@DWSUB@width=\" + Math.round(imagescroll.clientWidth * scaleFactor)\r\n                              + \"@DWSUB@height=\" + Math.round(imagescroll.clientHeight * scaleFactor), true);\r\n    } else if (typeof (dwSwingFrameworkFireCallbackEvent) != \"undefined\") {\r\n        dwSwingFrameworkFireCallbackEvent(\"getImageVisibleRectEvent\", \"x=\" + Math.round(imagescroll.scrollLeft * scaleFactor)\r\n                                                                      + \"@DWSUB@y=\" + Math.round(imagescroll.scrollTop * scaleFactor)\r\n                                                                      + \"@DWSUB@width=\" + Math.round(imagescroll.clientWidth * scaleFactor)\r\n                                                                      + \"@DWSUB@height=\" + Math.round(imagescroll.clientHeight * scaleFactor), true);\r\n    }\r\n}\r\n\r\nfunction dwImageElementIsTag(element, tagName) {\r\n    if ((element) && (element.tagName) && (tagName)) {\r\n        return (element.tagName.toUpperCase() == tagName.toUpperCase());\r\n    } else {\r\n        return false;\r\n    }\r\n}\r\n\r\nfunction dwImageWriteToLog(elementId, msg) {\r\n    var image = dwImageViewerGetImage(elementId);\r\n    if (image == null) { // kann durch die Verwendung von setTimeout() passieren\r\n        return;\r\n    }\r\n\r\n    image.log(msg);\r\n}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\n/*\r\n * Copyright (c) 2024 Quanos Solutions GmbH\r\n */\r\n\r\n// Pannellum 2.5.6, https://github.com/mpetroff/pannellum\r\nwindow.libpannellum=function(E,g,p){function Ba(K){function ja(a,e){return 1==a.level&&1!=e.level?-1:1==e.level&&1!=a.level?1:e.timestamp-a.timestamp}function Q(a,e){return a.level!=e.level?a.level-e.level:a.diff-e.diff}function ka(a,e,c,g,l,h){this.vertices=a;this.side=e;this.level=c;this.x=g;this.y=l;this.path=h.replace(\"%s\",e).replace(\"%l\",c).replace(\"%x\",g).replace(\"%y\",l)}function Ja(a,e,g,p,l){var h;var d=e.vertices;h=la(a,d.slice(0,3));var u=la(a,d.slice(3,6)),x=la(a,d.slice(6,9)),d=la(a,d.slice(9,\r\n12)),t=h[0]+u[0]+x[0]+d[0];-4==t||4==t?h=!1:(t=h[1]+u[1]+x[1]+d[1],h=-4==t||4==t?!1:4!=h[2]+u[2]+x[2]+d[2]);if(h){h=e.vertices;u=h[0]+h[3]+h[6]+h[9];x=h[1]+h[4]+h[7]+h[10];d=h[2]+h[5]+h[8]+h[11];t=Math.sqrt(u*u+x*x+d*d);d=Math.asin(d/t);u=Math.atan2(x,u)-p;u+=u>Math.PI?-2*Math.PI:u<-Math.PI?2*Math.PI:0;u=Math.abs(u);e.diff=Math.acos(Math.sin(g)*Math.sin(d)+Math.cos(g)*Math.cos(d)*Math.cos(u));u=!1;for(x=0;x<c.nodeCache.length;x++)if(c.nodeCache[x].path==e.path){u=!0;c.nodeCache[x].timestamp=c.nodeCacheTimestamp++;\r\nc.nodeCache[x].diff=e.diff;c.currentNodes.push(c.nodeCache[x]);break}u||(e.timestamp=c.nodeCacheTimestamp++,c.currentNodes.push(e),c.nodeCache.push(e));if(e.level<c.level){var d=m.cubeResolution*Math.pow(2,e.level-m.maxLevel),u=Math.ceil(d*m.invTileResolution)-1,x=d%m.tileResolution*2,k=2*d%m.tileResolution;0===k&&(k=m.tileResolution);0===x&&(x=2*m.tileResolution);t=0.5;if(e.x==u||e.y==u)t=1-m.tileResolution/(m.tileResolution+k);var y=1-t,d=[],s=t,z=t,D=t,I=y,A=y,B=y;if(k<m.tileResolution)if(e.x==\r\nu&&e.y!=u){if(A=z=0.5,\"d\"==e.side||\"u\"==e.side)B=D=0.5}else e.x!=u&&e.y==u&&(I=s=0.5,\"l\"==e.side||\"r\"==e.side)&&(B=D=0.5);x<=m.tileResolution&&(e.x==u&&(s=0,I=1,\"l\"==e.side||\"r\"==e.side)&&(D=0,B=1),e.y==u&&(z=0,A=1,\"d\"==e.side||\"u\"==e.side)&&(D=0,B=1));k=[h[0],h[1],h[2],h[0]*s+h[3]*I,h[1]*t+h[4]*y,h[2]*D+h[5]*B,h[0]*s+h[6]*I,h[1]*z+h[7]*A,h[2]*D+h[8]*B,h[0]*t+h[9]*y,h[1]*z+h[10]*A,h[2]*D+h[11]*B];k=new ka(k,e.side,e.level+1,2*e.x,2*e.y,m.fullpath);d.push(k);e.x==u&&x<=m.tileResolution||(k=[h[0]*s+\r\nh[3]*I,h[1]*t+h[4]*y,h[2]*D+h[5]*B,h[3],h[4],h[5],h[3]*t+h[6]*y,h[4]*z+h[7]*A,h[5]*D+h[8]*B,h[0]*s+h[6]*I,h[1]*z+h[7]*A,h[2]*D+h[8]*B],k=new ka(k,e.side,e.level+1,2*e.x+1,2*e.y,m.fullpath),d.push(k));e.x==u&&x<=m.tileResolution||e.y==u&&x<=m.tileResolution||(k=[h[0]*s+h[6]*I,h[1]*z+h[7]*A,h[2]*D+h[8]*B,h[3]*t+h[6]*y,h[4]*z+h[7]*A,h[5]*D+h[8]*B,h[6],h[7],h[8],h[9]*s+h[6]*I,h[10]*t+h[7]*y,h[11]*D+h[8]*B],k=new ka(k,e.side,e.level+1,2*e.x+1,2*e.y+1,m.fullpath),d.push(k));e.y==u&&x<=m.tileResolution||\r\n(k=[h[0]*t+h[9]*y,h[1]*z+h[10]*A,h[2]*D+h[11]*B,h[0]*s+h[6]*I,h[1]*z+h[7]*A,h[2]*D+h[8]*B,h[9]*s+h[6]*I,h[10]*t+h[7]*y,h[11]*D+h[8]*B,h[9],h[10],h[11]],k=new ka(k,e.side,e.level+1,2*e.x,2*e.y+1,m.fullpath),d.push(k));for(e=0;e<d.length;e++)Ja(a,d[e],g,p,l)}}}function ta(){return[-1,1,-1,1,1,-1,1,-1,-1,-1,-1,-1,1,1,1,-1,1,1,-1,-1,1,1,-1,1,-1,1,1,1,1,1,1,1,-1,-1,1,-1,-1,-1,-1,1,-1,-1,1,-1,1,-1,-1,1,-1,1,1,-1,1,-1,-1,-1,-1,-1,-1,1,1,1,-1,1,1,1,1,-1,1,1,-1,-1]}function ua(a,e,c){var g=Math.sin(e);e=Math.cos(e);\r\nif(\"x\"==c)return[a[0],e*a[1]+g*a[2],e*a[2]-g*a[1],a[3],e*a[4]+g*a[5],e*a[5]-g*a[4],a[6],e*a[7]+g*a[8],e*a[8]-g*a[7]];if(\"y\"==c)return[e*a[0]-g*a[2],a[1],e*a[2]+g*a[0],e*a[3]-g*a[5],a[4],e*a[5]+g*a[3],e*a[6]-g*a[8],a[7],e*a[8]+g*a[6]];if(\"z\"==c)return[e*a[0]+g*a[1],e*a[1]-g*a[0],a[2],e*a[3]+g*a[4],e*a[4]-g*a[3],a[5],e*a[6]+g*a[7],e*a[7]-g*a[6],a[8]]}function ma(a){return[a[0],a[4],a[8],a[12],a[1],a[5],a[9],a[13],a[2],a[6],a[10],a[14],a[3],a[7],a[11],a[15]]}function Ka(a){La(a,a.path+\".\"+m.extension,\r\nfunction(e,c){a.texture=e;a.textureLoaded=c?2:1},va.crossOrigin)}function la(a,e){var c=[a[0]*e[0]+a[1]*e[1]+a[2]*e[2],a[4]*e[0]+a[5]*e[1]+a[6]*e[2],a[11]+a[8]*e[0]+a[9]*e[1]+a[10]*e[2],1/(a[12]*e[0]+a[13]*e[1]+a[14]*e[2])],g=c[0]*c[3],l=c[1]*c[3],c=c[2]*c[3],h=[0,0,0];-1>g&&(h[0]=-1);1<g&&(h[0]=1);-1>l&&(h[1]=-1);1<l&&(h[1]=1);if(-1>c||1<c)h[2]=1;return h}function Ea(){console.log(\"Reducing canvas size due to error 1286!\");A.width=Math.round(A.width/2);A.height=Math.round(A.height/2)}var A=g.createElement(\"canvas\");\r\nA.style.width=A.style.height=\"100%\";K.appendChild(A);var c,a,U,V,$,R,wa,ga,m,z,F,ca,Fa,Y,na,va;this.init=function(L,e,Ca,H,l,h,d,u){function x(a){if(E){var e=a*a*4,h=new Uint8ClampedArray(e),c=u.backgroundColor?u.backgroundColor:[0,0,0];c[0]*=255;c[1]*=255;c[2]*=255;for(var b=0;b<e;b++)h[b++]=c[0],h[b++]=c[1],h[b++]=c[2];a=new ImageData(h,a,a);for(t=0;6>t;t++)0==m[t].width&&(m[t]=a)}}e===p&&(e=\"equirectangular\");if(\"equirectangular\"!=e&&\"cubemap\"!=e&&\"multires\"!=e)throw console.log(\"Error: invalid image type specified!\"),\r\n{type:\"config error\"};z=e;m=L;F=Ca;va=u||{};if(c){U&&(a.detachShader(c,U),a.deleteShader(U));V&&(a.detachShader(c,V),a.deleteShader(V));a.bindBuffer(a.ARRAY_BUFFER,null);a.bindBuffer(a.ELEMENT_ARRAY_BUFFER,null);c.texture&&a.deleteTexture(c.texture);if(c.nodeCache)for(L=0;L<c.nodeCache.length;L++)a.deleteTexture(c.nodeCache[L].texture);a.deleteProgram(c);c=p}ga=p;var t,E=!1,y;if(\"cubemap\"==z)for(t=0;6>t;t++)0<m[t].width?(y===p&&(y=m[t].width),y!=m[t].width&&console.log(\"Cube faces have inconsistent widths: \"+\r\ny+\" vs. \"+m[t].width)):E=!0;\"cubemap\"==z&&0!==(y&y-1)&&(navigator.userAgent.toLowerCase().match(/(iphone|ipod|ipad).* os 8_/)||navigator.userAgent.toLowerCase().match(/(iphone|ipod|ipad).* os 9_/)||navigator.userAgent.toLowerCase().match(/(iphone|ipod|ipad).* os 10_/)||navigator.userAgent.match(/Trident.*rv[ :]*11\\./))||(a||(a=A.getContext(\"experimental-webgl\",{alpha:!1,depth:!1})),a&&1286==a.getError()&&Ea());if(!a&&(\"multires\"==z&&m.hasOwnProperty(\"fallbackPath\")||\"cubemap\"==z)&&(\"WebkitAppearance\"in\r\ng.documentElement.style||navigator.userAgent.match(/Trident.*rv[ :]*11\\./)||-1!==navigator.appVersion.indexOf(\"MSIE 10\"))){R&&K.removeChild(R);R=g.createElement(\"div\");R.className=\"pnlm-world\";H=m.basePath?m.basePath+m.fallbackPath:m.fallbackPath;var Q=\"frblud\".split(\"\"),S=0;l=function(){var a=g.createElement(\"canvas\");a.className=\"pnlm-face pnlm-\"+Q[this.side]+\"face\";R.appendChild(a);var e=a.getContext(\"2d\");a.style.width=this.width+4+\"px\";a.style.height=this.height+4+\"px\";a.width=this.width+4;a.height=\r\nthis.height+4;e.drawImage(this,2,2);var h=e.getImageData(0,0,a.width,a.height),c=h.data,b,d;for(b=2;b<a.width-2;b++)for(d=0;4>d;d++)c[4*(b+a.width)+d]=c[4*(b+2*a.width)+d],c[4*(b+a.width*(a.height-2))+d]=c[4*(b+a.width*(a.height-3))+d];for(b=2;b<a.height-2;b++)for(d=0;4>d;d++)c[4*(b*a.width+1)+d]=c[4*(b*a.width+2)+d],c[4*((b+1)*a.width-2)+d]=c[4*((b+1)*a.width-3)+d];for(d=0;4>d;d++)c[4*(a.width+1)+d]=c[4*(2*a.width+2)+d],c[4*(2*a.width-2)+d]=c[4*(3*a.width-3)+d],c[4*(a.width*(a.height-2)+1)+d]=c[4*\r\n(a.width*(a.height-3)+2)+d],c[4*(a.width*(a.height-1)-2)+d]=c[4*(a.width*(a.height-2)-3)+d];for(b=1;b<a.width-1;b++)for(d=0;4>d;d++)c[4*b+d]=c[4*(b+a.width)+d],c[4*(b+a.width*(a.height-1))+d]=c[4*(b+a.width*(a.height-2))+d];for(b=1;b<a.height-1;b++)for(d=0;4>d;d++)c[b*a.width*4+d]=c[4*(b*a.width+1)+d],c[4*((b+1)*a.width-1)+d]=c[4*((b+1)*a.width-2)+d];for(d=0;4>d;d++)c[d]=c[4*(a.width+1)+d],c[4*(a.width-1)+d]=c[4*(2*a.width-2)+d],c[a.width*(a.height-1)*4+d]=c[4*(a.width*(a.height-2)+1)+d],c[4*(a.width*\r\na.height-1)+d]=c[4*(a.width*(a.height-1)-2)+d];e.putImageData(h,0,0);D.call(this)};var D=function(){0<this.width?($===p&&($=this.width),$!=this.width&&console.log(\"Fallback faces have inconsistent widths: \"+$+\" vs. \"+this.width)):E=!0;S++;6==S&&($=this.width,K.appendChild(R),d())},E=!1;for(t=0;6>t;t++)h=new Image,h.crossOrigin=va.crossOrigin?va.crossOrigin:\"anonymous\",h.side=t,h.onload=l,h.onerror=D,h.src=\"multires\"==z?H.replace(\"%s\",Q[t])+\".\"+m.extension:m[t].src;x($)}else{if(!a)throw console.log(\"Error: no WebGL support detected!\"),\r\n{type:\"no webgl\"};\"cubemap\"==z&&x(y);m.fullpath=m.basePath?m.basePath+m.path:m.path;m.invTileResolution=1/m.tileResolution;L=ta();wa=[];for(t=0;6>t;t++)wa[t]=L.slice(12*t,12*t+12),L=ta();L=0;if(\"equirectangular\"==z){if(L=a.getParameter(a.MAX_TEXTURE_SIZE),Math.max(m.width/2,m.height)>L)throw console.log(\"Error: The image is too big; it's \"+m.width+\"px wide, but this device's maximum supported size is \"+2*L+\"px.\"),{type:\"webgl size error\",width:m.width,maxWidth:2*L};}else if(\"cubemap\"==z&&y>a.getParameter(a.MAX_CUBE_MAP_TEXTURE_SIZE))throw console.log(\"Error: The image is too big; it's \"+\r\ny+\"px wide, but this device's maximum supported size is \"+L+\"px.\"),{type:\"webgl size error\",width:y,maxWidth:L};u===p||u.horizonPitch===p&&u.horizonRoll===p||(ga=[u.horizonPitch==p?0:u.horizonPitch,u.horizonRoll==p?0:u.horizonRoll]);y=a.TEXTURE_2D;a.viewport(0,0,a.drawingBufferWidth,a.drawingBufferHeight);a.getShaderPrecisionFormat&&(e=a.getShaderPrecisionFormat(a.FRAGMENT_SHADER,a.HIGH_FLOAT))&&1>e.precision&&(oa=oa.replace(\"highp\",\"mediump\"));U=a.createShader(a.VERTEX_SHADER);e=s;\"multires\"==z&&\r\n(e=k);a.shaderSource(U,e);a.compileShader(U);V=a.createShader(a.FRAGMENT_SHADER);e=pa;\"cubemap\"==z?(y=a.TEXTURE_CUBE_MAP,e=qa):\"multires\"==z&&(e=bb);a.shaderSource(V,e);a.compileShader(V);c=a.createProgram();a.attachShader(c,U);a.attachShader(c,V);a.linkProgram(c);a.getShaderParameter(U,a.COMPILE_STATUS)||console.log(a.getShaderInfoLog(U));a.getShaderParameter(V,a.COMPILE_STATUS)||console.log(a.getShaderInfoLog(V));a.getProgramParameter(c,a.LINK_STATUS)||console.log(a.getProgramInfoLog(c));a.useProgram(c);\r\nc.drawInProgress=!1;e=u.backgroundColor?u.backgroundColor:[0,0,0];a.clearColor(e[0],e[1],e[2],1);a.clear(a.COLOR_BUFFER_BIT);c.texCoordLocation=a.getAttribLocation(c,\"a_texCoord\");a.enableVertexAttribArray(c.texCoordLocation);\"multires\"!=z?(ca||(ca=a.createBuffer()),a.bindBuffer(a.ARRAY_BUFFER,ca),a.bufferData(a.ARRAY_BUFFER,new Float32Array([-1,1,1,1,1,-1,-1,1,1,-1,-1,-1]),a.STATIC_DRAW),a.vertexAttribPointer(c.texCoordLocation,2,a.FLOAT,!1,0,0),c.aspectRatio=a.getUniformLocation(c,\"u_aspectRatio\"),\r\na.uniform1f(c.aspectRatio,a.drawingBufferWidth/a.drawingBufferHeight),c.psi=a.getUniformLocation(c,\"u_psi\"),c.theta=a.getUniformLocation(c,\"u_theta\"),c.f=a.getUniformLocation(c,\"u_f\"),c.h=a.getUniformLocation(c,\"u_h\"),c.v=a.getUniformLocation(c,\"u_v\"),c.vo=a.getUniformLocation(c,\"u_vo\"),c.rot=a.getUniformLocation(c,\"u_rot\"),a.uniform1f(c.h,H/(2*Math.PI)),a.uniform1f(c.v,l/Math.PI),a.uniform1f(c.vo,h/Math.PI*2),\"equirectangular\"==z&&(c.backgroundColor=a.getUniformLocation(c,\"u_backgroundColor\"),a.uniform4fv(c.backgroundColor,\r\ne.concat([1]))),c.texture=a.createTexture(),a.bindTexture(y,c.texture),\"cubemap\"==z?(a.texImage2D(a.TEXTURE_CUBE_MAP_POSITIVE_X,0,a.RGB,a.RGB,a.UNSIGNED_BYTE,m[1]),a.texImage2D(a.TEXTURE_CUBE_MAP_NEGATIVE_X,0,a.RGB,a.RGB,a.UNSIGNED_BYTE,m[3]),a.texImage2D(a.TEXTURE_CUBE_MAP_POSITIVE_Y,0,a.RGB,a.RGB,a.UNSIGNED_BYTE,m[4]),a.texImage2D(a.TEXTURE_CUBE_MAP_NEGATIVE_Y,0,a.RGB,a.RGB,a.UNSIGNED_BYTE,m[5]),a.texImage2D(a.TEXTURE_CUBE_MAP_POSITIVE_Z,0,a.RGB,a.RGB,a.UNSIGNED_BYTE,m[0]),a.texImage2D(a.TEXTURE_CUBE_MAP_NEGATIVE_Z,\r\n0,a.RGB,a.RGB,a.UNSIGNED_BYTE,m[2])):m.width<=L?(a.uniform1i(a.getUniformLocation(c,\"u_splitImage\"),0),a.texImage2D(y,0,a.RGB,a.RGB,a.UNSIGNED_BYTE,m)):(a.uniform1i(a.getUniformLocation(c,\"u_splitImage\"),1),H=g.createElement(\"canvas\"),H.width=m.width/2,H.height=m.height,H=H.getContext(\"2d\"),H.drawImage(m,0,0),l=H.getImageData(0,0,m.width/2,m.height),a.texImage2D(y,0,a.RGB,a.RGB,a.UNSIGNED_BYTE,l),c.texture2=a.createTexture(),a.activeTexture(a.TEXTURE1),a.bindTexture(y,c.texture2),a.uniform1i(a.getUniformLocation(c,\r\n\"u_image1\"),1),H.drawImage(m,-m.width/2,0),l=H.getImageData(0,0,m.width/2,m.height),a.texImage2D(y,0,a.RGB,a.RGB,a.UNSIGNED_BYTE,l),a.texParameteri(y,a.TEXTURE_WRAP_S,a.CLAMP_TO_EDGE),a.texParameteri(y,a.TEXTURE_WRAP_T,a.CLAMP_TO_EDGE),a.texParameteri(y,a.TEXTURE_MIN_FILTER,a.LINEAR),a.texParameteri(y,a.TEXTURE_MAG_FILTER,a.LINEAR),a.activeTexture(a.TEXTURE0)),a.texParameteri(y,a.TEXTURE_WRAP_S,a.CLAMP_TO_EDGE),a.texParameteri(y,a.TEXTURE_WRAP_T,a.CLAMP_TO_EDGE),a.texParameteri(y,a.TEXTURE_MIN_FILTER,\r\na.LINEAR),a.texParameteri(y,a.TEXTURE_MAG_FILTER,a.LINEAR)):(c.vertPosLocation=a.getAttribLocation(c,\"a_vertCoord\"),a.enableVertexAttribArray(c.vertPosLocation),Fa||(Fa=a.createBuffer()),Y||(Y=a.createBuffer()),na||(na=a.createBuffer()),a.bindBuffer(a.ARRAY_BUFFER,Y),a.bufferData(a.ARRAY_BUFFER,new Float32Array([0,0,1,0,1,1,0,1]),a.STATIC_DRAW),a.bindBuffer(a.ELEMENT_ARRAY_BUFFER,na),a.bufferData(a.ELEMENT_ARRAY_BUFFER,new Uint16Array([0,1,2,0,2,3]),a.STATIC_DRAW),c.perspUniform=a.getUniformLocation(c,\r\n\"u_perspMatrix\"),c.cubeUniform=a.getUniformLocation(c,\"u_cubeMatrix\"),c.level=-1,c.currentNodes=[],c.nodeCache=[],c.nodeCacheTimestamp=0);H=a.getError();if(0!==H)throw console.log(\"Error: Something went wrong with WebGL!\",H),{type:\"webgl error\"};d()}};this.destroy=function(){K!==p&&(A!==p&&K.contains(A)&&K.removeChild(A),R!==p&&K.contains(R)&&K.removeChild(R));if(a){var c=a.getExtension(\"WEBGL_lose_context\");c&&c.loseContext()}};this.resize=function(){var g=E.devicePixelRatio||1;A.width=A.clientWidth*\r\ng;A.height=A.clientHeight*g;a&&(1286==a.getError()&&Ea(),a.viewport(0,0,a.drawingBufferWidth,a.drawingBufferHeight),\"multires\"!=z&&a.uniform1f(c.aspectRatio,A.clientWidth/A.clientHeight))};this.resize();this.setPose=function(a,c){ga=[a,c]};this.render=function(g,e,k,s){var l,h=0;s===p&&(s={});s.roll&&(h=s.roll);if(ga!==p){l=ga[0];var d=ga[1],u=g,x=e,t=Math.cos(d)*Math.sin(g)*Math.sin(l)+Math.cos(g)*(Math.cos(l)*Math.cos(e)+Math.sin(d)*Math.sin(l)*Math.sin(e)),E=-Math.sin(g)*Math.sin(d)+Math.cos(g)*\r\nMath.cos(d)*Math.sin(e);g=Math.cos(d)*Math.cos(l)*Math.sin(g)+Math.cos(g)*(-Math.cos(e)*Math.sin(l)+Math.cos(l)*Math.sin(d)*Math.sin(e));g=Math.asin(Math.max(Math.min(g,1),-1));e=Math.atan2(E,t);l=[Math.cos(u)*(Math.sin(d)*Math.sin(l)*Math.cos(x)-Math.cos(l)*Math.sin(x)),Math.cos(u)*Math.cos(d)*Math.cos(x),Math.cos(u)*(Math.cos(l)*Math.sin(d)*Math.cos(x)+Math.sin(x)*Math.sin(l))];d=[-Math.cos(g)*Math.sin(e),Math.cos(g)*Math.cos(e)];d=Math.acos(Math.max(Math.min((l[0]*d[0]+l[1]*d[1])/(Math.sqrt(l[0]*\r\nl[0]+l[1]*l[1]+l[2]*l[2])*Math.sqrt(d[0]*d[0]+d[1]*d[1])),1),-1));0>l[2]&&(d=2*Math.PI-d);h+=d}if(a||\"multires\"!=z&&\"cubemap\"!=z){if(\"multires\"!=z)k=2*Math.atan(Math.tan(0.5*k)/(a.drawingBufferWidth/a.drawingBufferHeight)),k=1/Math.tan(0.5*k),a.uniform1f(c.psi,e),a.uniform1f(c.theta,g),a.uniform1f(c.rot,h),a.uniform1f(c.f,k),!0===F&&\"equirectangular\"==z&&(a.bindTexture(a.TEXTURE_2D,c.texture),a.texImage2D(a.TEXTURE_2D,0,a.RGB,a.RGB,a.UNSIGNED_BYTE,m)),a.drawArrays(a.TRIANGLES,0,6);else{l=a.drawingBufferWidth/\r\na.drawingBufferHeight;d=2*Math.atan(Math.tan(k/2)*a.drawingBufferHeight/a.drawingBufferWidth);d=1/Math.tan(d/2);l=[d/l,0,0,0,0,d,0,0,0,0,100.1/-99.9,20/-99.9,0,0,-1,0];for(d=1;d<m.maxLevel&&a.drawingBufferWidth>m.tileResolution*Math.pow(2,d-1)*Math.tan(k/2)*0.707;)d++;c.level=d;d=[1,0,0,0,1,0,0,0,1];d=ua(d,-h,\"z\");d=ua(d,-g,\"x\");d=ua(d,e,\"y\");d=[d[0],d[1],d[2],0,d[3],d[4],d[5],0,d[6],d[7],d[8],0,0,0,0,1];a.uniformMatrix4fv(c.perspUniform,!1,new Float32Array(ma(l)));a.uniformMatrix4fv(c.cubeUniform,\r\n!1,new Float32Array(ma(d)));h=[l[0]*d[0],l[0]*d[1],l[0]*d[2],0,l[5]*d[4],l[5]*d[5],l[5]*d[6],0,l[10]*d[8],l[10]*d[9],l[10]*d[10],l[11],-d[8],-d[9],-d[10],0];c.nodeCache.sort(ja);if(200<c.nodeCache.length&&c.nodeCache.length>c.currentNodes.length+50)for(l=c.nodeCache.splice(200,c.nodeCache.length-200),d=0;d<l.length;d++)a.deleteTexture(l[d].texture);c.currentNodes=[];d=\"fbudlr\".split(\"\");for(l=0;6>l;l++)u=new ka(wa[l],d[l],1,0,0,m.fullpath),Ja(h,u,g,e,k);c.currentNodes.sort(Q);for(g=S.length-1;0<=\r\ng;g--)-1===c.currentNodes.indexOf(S[g].node)&&(S[g].node.textureLoad=!1,S.splice(g,1));if(0===S.length)for(g=0;g<c.currentNodes.length;g++)if(e=c.currentNodes[g],!e.texture&&!e.textureLoad){e.textureLoad=!0;setTimeout(Ka,0,e);break}if(!c.drawInProgress){c.drawInProgress=!0;a.clear(a.COLOR_BUFFER_BIT);for(g=0;g<c.currentNodes.length;g++)1<c.currentNodes[g].textureLoaded&&(a.bindBuffer(a.ARRAY_BUFFER,Fa),a.bufferData(a.ARRAY_BUFFER,new Float32Array(c.currentNodes[g].vertices),a.STATIC_DRAW),a.vertexAttribPointer(c.vertPosLocation,\r\n3,a.FLOAT,!1,0,0),a.bindBuffer(a.ARRAY_BUFFER,Y),a.vertexAttribPointer(c.texCoordLocation,2,a.FLOAT,!1,0,0),a.bindTexture(a.TEXTURE_2D,c.currentNodes[g].texture),a.drawElements(a.TRIANGLES,6,a.UNSIGNED_SHORT,0));c.drawInProgress=!1}}if(s.returnImage!==p)return A.toDataURL(\"image/png\")}else for(l=$/2,s={f:\"translate3d(-\"+(l+2)+\"px, -\"+(l+2)+\"px, -\"+l+\"px)\",b:\"translate3d(\"+(l+2)+\"px, -\"+(l+2)+\"px, \"+l+\"px) rotateX(180deg) rotateZ(180deg)\",u:\"translate3d(-\"+(l+2)+\"px, -\"+l+\"px, \"+(l+2)+\"px) rotateX(270deg)\",\r\nd:\"translate3d(-\"+(l+2)+\"px, \"+l+\"px, -\"+(l+2)+\"px) rotateX(90deg)\",l:\"translate3d(-\"+l+\"px, -\"+(l+2)+\"px, \"+(l+2)+\"px) rotateX(180deg) rotateY(90deg) rotateZ(180deg)\",r:\"translate3d(\"+l+\"px, -\"+(l+2)+\"px, -\"+(l+2)+\"px) rotateY(270deg)\"},k=1/Math.tan(k/2),k=k*A.clientWidth/2+\"px\",e=\"perspective(\"+k+\") translateZ(\"+k+\") rotateX(\"+g+\"rad) rotateY(\"+e+\"rad) \",k=Object.keys(s),g=0;6>g;g++)if(h=R.querySelector(\".pnlm-\"+k[g]+\"face\"))h.style.webkitTransform=e+s[k[g]],h.style.transform=e+s[k[g]]};this.isLoading=\r\nfunction(){if(a&&\"multires\"==z)for(var g=0;g<c.currentNodes.length;g++)if(!c.currentNodes[g].textureLoaded)return!0;return!1};this.getCanvas=function(){return A};var S=[],La=function(){function c(){var d=this;this.texture=this.callback=null;this.image=new Image;this.image.crossOrigin=l?l:\"anonymous\";var e=function(){if(0<d.image.width&&0<d.image.height){var c=d.image;a.bindTexture(a.TEXTURE_2D,d.texture);a.texImage2D(a.TEXTURE_2D,0,a.RGB,a.RGB,a.UNSIGNED_BYTE,c);a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MAG_FILTER,\r\na.LINEAR);a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MIN_FILTER,a.LINEAR);a.texParameteri(a.TEXTURE_2D,a.TEXTURE_WRAP_S,a.CLAMP_TO_EDGE);a.texParameteri(a.TEXTURE_2D,a.TEXTURE_WRAP_T,a.CLAMP_TO_EDGE);a.bindTexture(a.TEXTURE_2D,null);d.callback(d.texture,!0)}else d.callback(d.texture,!1);S.length?(c=S.shift(),d.loadTexture(c.src,c.texture,c.callback)):k[g++]=d};this.image.addEventListener(\"load\",e);this.image.addEventListener(\"error\",e)}function e(a,c,e,g){this.node=a;this.src=c;this.texture=e;this.callback=\r\ng}var g=4,k={},l;c.prototype.loadTexture=function(a,c,e){this.texture=c;this.callback=e;this.image.src=a};for(var h=0;h<g;h++)k[h]=new c;return function(c,h,m,p){l=p;p=a.createTexture();g?k[--g].loadTexture(h,p,m):S.push(new e(c,h,p,m));return p}}()}var s=\"attribute vec2 a_texCoord;varying vec2 v_texCoord;void main() {gl_Position = vec4(a_texCoord, 0.0, 1.0);v_texCoord = a_texCoord;}\",k=\"attribute vec3 a_vertCoord;attribute vec2 a_texCoord;uniform mat4 u_cubeMatrix;uniform mat4 u_perspMatrix;varying mediump vec2 v_texCoord;void main(void) {gl_Position = u_perspMatrix * u_cubeMatrix * vec4(a_vertCoord, 1.0);v_texCoord = a_texCoord;}\",\r\noa=\"precision highp float;\\nuniform float u_aspectRatio;\\nuniform float u_psi;\\nuniform float u_theta;\\nuniform float u_f;\\nuniform float u_h;\\nuniform float u_v;\\nuniform float u_vo;\\nuniform float u_rot;\\nconst float PI = 3.14159265358979323846264;\\nuniform sampler2D u_image0;\\nuniform sampler2D u_image1;\\nuniform bool u_splitImage;\\nuniform samplerCube u_imageCube;\\nvarying vec2 v_texCoord;\\nuniform vec4 u_backgroundColor;\\nvoid main() {\\nfloat x = v_texCoord.x * u_aspectRatio;\\nfloat y = v_texCoord.y;\\nfloat sinrot = sin(u_rot);\\nfloat cosrot = cos(u_rot);\\nfloat rot_x = x * cosrot - y * sinrot;\\nfloat rot_y = x * sinrot + y * cosrot;\\nfloat sintheta = sin(u_theta);\\nfloat costheta = cos(u_theta);\\nfloat a = u_f * costheta - rot_y * sintheta;\\nfloat root = sqrt(rot_x * rot_x + a * a);\\nfloat lambda = atan(rot_x / root, a / root) + u_psi;\\nfloat phi = atan((rot_y * costheta + u_f * sintheta) / root);\",\r\nqa=oa+\"float cosphi = cos(phi);\\ngl_FragColor = textureCube(u_imageCube, vec3(cosphi*sin(lambda), sin(phi), cosphi*cos(lambda)));\\n}\",pa=oa+\"lambda = mod(lambda + PI, PI * 2.0) - PI;\\nvec2 coord = vec2(lambda / PI, phi / (PI / 2.0));\\nif(coord.x < -u_h || coord.x > u_h || coord.y < -u_v + u_vo || coord.y > u_v + u_vo)\\ngl_FragColor = u_backgroundColor;\\nelse {\\nif(u_splitImage) {\\nif(coord.x < 0.0)\\ngl_FragColor = texture2D(u_image0, vec2((coord.x + u_h) / u_h, (-coord.y + u_v + u_vo) / (u_v * 2.0)));\\nelse\\ngl_FragColor = texture2D(u_image1, vec2((coord.x + u_h) / u_h - 1.0, (-coord.y + u_v + u_vo) / (u_v * 2.0)));\\n} else {\\ngl_FragColor = texture2D(u_image0, vec2((coord.x + u_h) / (u_h * 2.0), (-coord.y + u_v + u_vo) / (u_v * 2.0)));\\n}\\n}\\n}\",\r\nbb=\"varying mediump vec2 v_texCoord;uniform sampler2D u_sampler;void main(void) {gl_FragColor = texture2D(u_sampler, v_texCoord);}\";return{renderer:function(g,k,p,s){return new Ba(g,k,p,s)}}}(window,document);\r\nwindow.pannellum=function(E,g,p){function Ba(s,k){function oa(){var a=g.createElement(\"div\");a.innerHTML=\"\\x3c!--[if lte IE 9]><i></i><![endif]--\\x3e\";if(1==a.getElementsByTagName(\"i\").length)K();else{ra=b.hfov;Ga=b.pitch;var f;if(\"cubemap\"==b.type){P=[];for(a=0;6>a;a++)P.push(new Image),P[a].crossOrigin=b.crossOrigin;q.load.lbox.style.display=\"block\";q.load.lbar.style.display=\"none\"}else if(\"multires\"==b.type)a=JSON.parse(JSON.stringify(b.multiRes)),b.basePath&&b.multiRes.basePath&&!/^(?:[a-z]+:)?\\/\\//i.test(b.multiRes.basePath)?\r\na.basePath=b.basePath+b.multiRes.basePath:b.multiRes.basePath?a.basePath=b.multiRes.basePath:b.basePath&&(a.basePath=b.basePath),P=a;else if(!0===b.dynamic)P=b.panorama;else{if(b.panorama===p){K(b.strings.noPanoramaError);return}P=new Image}if(\"cubemap\"==b.type)for(var n=6,c=function(){n--;0===n&&pa()},d=function(a){var ea=g.createElement(\"a\");ea.href=a.target.src;ea.textContent=ea.href;K(b.strings.fileAccessError.replace(\"%s\",ea.outerHTML))},a=0;a<P.length;a++)f=b.cubeMap[a],\"null\"==f?(console.log(\"Will use background instead of missing cubemap face \"+\r\na),c()):(b.basePath&&!qa(f)&&(f=b.basePath+f),P[a].onload=c,P[a].onerror=d,P[a].src=I(f));else if(\"multires\"==b.type)pa();else if(f=\"\",b.basePath&&(f=b.basePath),!0!==b.dynamic){f=qa(b.panorama)?b.panorama:f+b.panorama;P.onload=function(){E.URL.revokeObjectURL(this.src);pa()};var e=new XMLHttpRequest;e.onloadend=function(){if(200!=e.status){var a=g.createElement(\"a\");a.href=f;a.textContent=a.href;K(b.strings.fileAccessError.replace(\"%s\",a.outerHTML))}Ba(this.response);q.load.msg.innerHTML=\"\"};e.onprogress=\r\nfunction(a){if(a.lengthComputable){q.load.lbarFill.style.width=a.loaded/a.total*100+\"%\";var b,ea;1E6<a.total?(b=\"MB\",ea=(a.loaded/1E6).toFixed(2),a=(a.total/1E6).toFixed(2)):1E3<a.total?(b=\"kB\",ea=(a.loaded/1E3).toFixed(1),a=(a.total/1E3).toFixed(1)):(b=\"B\",ea=a.loaded,a=a.total);q.load.msg.innerHTML=ea+\" / \"+a+\" \"+b}else q.load.lbox.style.display=\"block\",q.load.lbar.style.display=\"none\"};try{e.open(\"GET\",f,!0)}catch(h){K(b.strings.malformedURLError)}e.responseType=\"blob\";e.setRequestHeader(\"Accept\",\r\n\"image/*,*/*;q=0.9\");e.withCredentials=\"use-credentials\"===b.crossOrigin;e.send()}b.draggable&&J.classList.add(\"pnlm-grab\");J.classList.remove(\"pnlm-grabbing\");Ma=!0===b.dynamicUpdate;b.dynamic&&Ma&&(P=b.panorama,pa())}}function qa(a){return/^(?:[a-z]+:)?\\/\\//i.test(a)||\"/\"==a[0]||\"blob:\"==a.slice(0,5)}function pa(){C||(C=new libpannellum.renderer(M));Sa||(Sa=!0,W.addEventListener(\"mousedown\",ka,!1),g.addEventListener(\"mousemove\",ua,!1),g.addEventListener(\"mouseup\",ma,!1),b.mouseZoom&&(J.addEventListener(\"mousewheel\",\r\nU,!1),J.addEventListener(\"DOMMouseScroll\",U,!1)),b.doubleClickZoom&&W.addEventListener(\"dblclick\",Ja,!1),s.addEventListener(\"mozfullscreenchange\",d,!1),s.addEventListener(\"webkitfullscreenchange\",d,!1),s.addEventListener(\"msfullscreenchange\",d,!1),s.addEventListener(\"fullscreenchange\",d,!1),E.addEventListener(\"resize\",z,!1),E.addEventListener(\"orientationchange\",z,!1),b.disableKeyboardCtrl||(s.addEventListener(\"keydown\",V,!1),s.addEventListener(\"keyup\",R,!1),s.addEventListener(\"blur\",$,!1)),g.addEventListener(\"mouseleave\",\r\nma,!1),\"\"===g.documentElement.style.pointerAction&&\"\"===g.documentElement.style.touchAction?(W.addEventListener(\"pointerdown\",A,!1),W.addEventListener(\"pointermove\",c,!1),W.addEventListener(\"pointerup\",a,!1),W.addEventListener(\"pointerleave\",a,!1)):(W.addEventListener(\"touchstart\",Ka,!1),W.addEventListener(\"touchmove\",la,!1),W.addEventListener(\"touchend\",Ea,!1)),E.navigator.pointerEnabled&&(s.style.touchAction=\"none\"));va();x(b.hfov);setTimeout(function(){},500)}function Ba(a){var f=new FileReader;\r\nf.addEventListener(\"loadend\",function(){var n=f.result;if(navigator.userAgent.toLowerCase().match(/(iphone|ipod|ipad).* os 8_/)){var c=n.indexOf(\"\\u00ff\\u00c2\");(0>c||65536<c)&&K(b.strings.iOS8WebGLError)}c=n.indexOf(\"<x:xmpmeta\");if(-1<c&&!0!==b.ignoreGPanoXMP){var d=n.substring(c,n.indexOf(\"</x:xmpmeta>\")+12),e=function(a){var b;0<=d.indexOf(a+'=\"')?(b=d.substring(d.indexOf(a+'=\"')+a.length+2),b=b.substring(0,b.indexOf('\"'))):0<=d.indexOf(a+\">\")&&(b=d.substring(d.indexOf(a+\">\")+a.length+1),b=b.substring(0,\r\nb.indexOf(\"<\")));return b!==p?Number(b):null},n=e(\"GPano:FullPanoWidthPixels\"),c=e(\"GPano:CroppedAreaImageWidthPixels\"),g=e(\"GPano:FullPanoHeightPixels\"),h=e(\"GPano:CroppedAreaImageHeightPixels\"),l=e(\"GPano:CroppedAreaTopPixels\"),k=e(\"GPano:PoseHeadingDegrees\"),m=e(\"GPano:PosePitchDegrees\"),e=e(\"GPano:PoseRollDegrees\");null!==n&&null!==c&&null!==g&&null!==h&&null!==l&&(0>aa.indexOf(\"haov\")&&(b.haov=c/n*360),0>aa.indexOf(\"vaov\")&&(b.vaov=h/g*180),0>aa.indexOf(\"vOffset\")&&(b.vOffset=-180*((l+h/2)/g-\r\n0.5)),null!==k&&0>aa.indexOf(\"northOffset\")&&(b.northOffset=k,!1!==b.compass&&(b.compass=!0)),null!==m&&null!==e&&(0>aa.indexOf(\"horizonPitch\")&&(b.horizonPitch=m),0>aa.indexOf(\"horizonRoll\")&&(b.horizonRoll=e)))}P.src=E.URL.createObjectURL(a)});f.readAsBinaryString!==p?f.readAsBinaryString(a):f.readAsText(a)}function K(a){a===p&&(a=b.strings.genericWebGLError);q.errorMsg.innerHTML=\"<p>\"+a+\"</p>\";v.load.style.display=\"none\";q.load.box.style.display=\"none\";q.errorMsg.style.display=\"table\";Na=!0;G=\r\np;M.style.display=\"none\";B(\"error\",a)}function ja(a){var b=Q(a);fa.style.left=b.x+\"px\";fa.style.top=b.y+\"px\";clearTimeout(ja.t1);clearTimeout(ja.t2);fa.style.display=\"block\";fa.style.opacity=1;ja.t1=setTimeout(function(){fa.style.opacity=0},2E3);ja.t2=setTimeout(function(){fa.style.display=\"none\"},2500);a.preventDefault()}function Q(a){var b=s.getBoundingClientRect(),n={};n.x=(a.clientX||a.pageX)-b.left;n.y=(a.clientY||a.pageY)-b.top;return n}function ka(a){a.preventDefault();s.focus();if(G&&b.draggable){var f=\r\nQ(a);if(b.hotSpotDebug){var n=ta(a);console.log(\"Pitch: \"+n[0]+\", Yaw: \"+n[1]+\", Center Pitch: \"+b.pitch+\", Center Yaw: \"+b.yaw+\", HFOV: \"+b.hfov)}t();Da();b.roll=0;w.hfov=0;ha=!0;N=Date.now();xa=f.x;ya=f.y;Oa=b.yaw;Pa=b.pitch;J.classList.add(\"pnlm-grabbing\");J.classList.remove(\"pnlm-grab\");B(\"mousedown\",a);F()}}function Ja(a){b.minHfov===b.hfov?da.setHfov(ra,1E3):(a=ta(a),da.lookAt(a[0],a[1],b.minHfov,1E3))}function ta(a){var f=Q(a);a=C.getCanvas();var n=a.clientWidth,c=a.clientHeight;a=f.x/n*2-\r\n1;var c=(1-f.y/c*2)*c/n,e=1/Math.tan(b.hfov*Math.PI/360),d=Math.sin(b.pitch*Math.PI/180),g=Math.cos(b.pitch*Math.PI/180),f=e*g-c*d,n=Math.sqrt(a*a+f*f),c=180*Math.atan((c*g+e*d)/n)/Math.PI;a=180*Math.atan2(a/n,f/n)/Math.PI+b.yaw;-180>a&&(a+=360);180<a&&(a-=360);return[c,a]}function ua(a){if(ha&&G){N=Date.now();var f=C.getCanvas(),n=f.clientWidth,f=f.clientHeight;a=Q(a);var c=180*(Math.atan(xa/n*2-1)-Math.atan(a.x/n*2-1))/Math.PI*b.hfov/90+Oa;w.yaw=(c-b.yaw)%360*0.2;b.yaw=c;n=360*Math.atan(Math.tan(b.hfov/\r\n360*Math.PI)*f/n)/Math.PI;n=180*(Math.atan(a.y/f*2-1)-Math.atan(ya/f*2-1))/Math.PI*n/90+Pa;w.pitch=0.2*(n-b.pitch);b.pitch=n}}function ma(a){ha&&(ha=!1,15<Date.now()-N&&(w.pitch=w.yaw=0),J.classList.add(\"pnlm-grab\"),J.classList.remove(\"pnlm-grabbing\"),N=Date.now(),B(\"mouseup\",a))}function Ka(a){if(G&&b.draggable){t();Da();b.roll=0;w.hfov=0;var f=Q(a.targetTouches[0]);xa=f.x;ya=f.y;if(2==a.targetTouches.length){var n=Q(a.targetTouches[1]);xa+=0.5*(n.x-f.x);ya+=0.5*(n.y-f.y);Ha=Math.sqrt((f.x-n.x)*\r\n(f.x-n.x)+(f.y-n.y)*(f.y-n.y))}ha=!0;N=Date.now();Oa=b.yaw;Pa=b.pitch;B(\"touchstart\",a);F()}}function la(a){if(b.draggable&&(a.preventDefault(),G&&(N=Date.now()),ha&&G)){var f=Q(a.targetTouches[0]),n=f.x,c=f.y;2==a.targetTouches.length&&-1!=Ha&&(a=Q(a.targetTouches[1]),n+=0.5*(a.x-f.x),c+=0.5*(a.y-f.y),f=Math.sqrt((f.x-a.x)*(f.x-a.x)+(f.y-a.y)*(f.y-a.y)),x(b.hfov+0.1*(Ha-f)),Ha=f);f=b.hfov/360*b.touchPanSpeedCoeffFactor;n=(xa-n)*f+Oa;w.yaw=(n-b.yaw)%360*0.2;b.yaw=n;c=(c-ya)*f+Pa;w.pitch=0.2*(c-b.pitch);\r\nb.pitch=c}}function Ea(){ha=!1;150<Date.now()-N&&(w.pitch=w.yaw=0);Ha=-1;N=Date.now();B(\"touchend\",event)}function A(a){\"touch\"==a.pointerType&&G&&b.draggable&&(ia.push(a.pointerId),za.push({clientX:a.clientX,clientY:a.clientY}),a.targetTouches=za,Ka(a),a.preventDefault())}function c(a){if(\"touch\"==a.pointerType&&b.draggable)for(var f=0;f<ia.length;f++)if(a.pointerId==ia[f]){za[f].clientX=a.clientX;za[f].clientY=a.clientY;a.targetTouches=za;la(a);a.preventDefault();break}}function a(a){if(\"touch\"==\r\na.pointerType){for(var b=!1,n=0;n<ia.length;n++)a.pointerId==ia[n]&&(ia[n]=p),ia[n]&&(b=!0);b||(ia=[],za=[],Ea());a.preventDefault()}}function U(a){G&&(\"fullscreenonly\"!=b.mouseZoom||Aa)&&(a.preventDefault(),t(),N=Date.now(),a.wheelDeltaY?(x(b.hfov-0.05*a.wheelDeltaY),w.hfov=0>a.wheelDelta?1:-1):a.wheelDelta?(x(b.hfov-0.05*a.wheelDelta),w.hfov=0>a.wheelDelta?1:-1):a.detail&&(x(b.hfov+1.5*a.detail),w.hfov=0<a.detail?1:-1),F())}function V(a){t();N=Date.now();Da();b.roll=0;var f=a.which||a.keycode;0>\r\nb.capturedKeyNumbers.indexOf(f)||(a.preventDefault(),27==f?Aa&&h():wa(f,!0))}function $(){for(var a=0;10>a;a++)r[a]=!1}function R(a){var f=a.which||a.keycode;0>b.capturedKeyNumbers.indexOf(f)||(a.preventDefault(),wa(f,!1))}function wa(a,b){var n=!1;switch(a){case 109:case 189:case 17:case 173:r[0]!=b&&(n=!0);r[0]=b;break;case 107:case 187:case 16:case 61:r[1]!=b&&(n=!0);r[1]=b;break;case 38:r[2]!=b&&(n=!0);r[2]=b;break;case 87:r[6]!=b&&(n=!0);r[6]=b;break;case 40:r[3]!=b&&(n=!0);r[3]=b;break;case 83:r[7]!=\r\nb&&(n=!0);r[7]=b;break;case 37:r[4]!=b&&(n=!0);r[4]=b;break;case 65:r[8]!=b&&(n=!0);r[8]=b;break;case 39:r[5]!=b&&(n=!0);r[5]=b;break;case 68:r[9]!=b&&(n=!0),r[9]=b}n&&b&&(ba=\"undefined\"!==typeof performance&&performance.now()?performance.now():Date.now(),F())}function ga(){if(G){var a=!1,f=b.pitch,n=b.yaw,c=b.hfov,e;e=\"undefined\"!==typeof performance&&performance.now()?performance.now():Date.now();ba===p&&(ba=e);var d=(e-ba)*b.hfov/1700,d=Math.min(d,1);r[0]&&!0===b.keyboardZoom&&(x(b.hfov+(0.8*w.hfov+\r\n0.5)*d),a=!0);r[1]&&!0===b.keyboardZoom&&(x(b.hfov+(0.8*w.hfov-0.2)*d),a=!0);if(r[2]||r[6])b.pitch+=(0.8*w.pitch+0.2)*d,a=!0;if(r[3]||r[7])b.pitch+=(0.8*w.pitch-0.2)*d,a=!0;if(r[4]||r[8])b.yaw+=(0.8*w.yaw-0.2)*d,a=!0;if(r[5]||r[9])b.yaw+=(0.8*w.yaw+0.2)*d,a=!0;a&&(N=Date.now());if(b.autoRotate){if(0.001<e-ba){var a=(e-ba)/1E3,g=(w.yaw/a*d-0.2*b.autoRotate)*a,g=(0<-b.autoRotate?1:-1)*Math.min(Math.abs(b.autoRotate*a),Math.abs(g));b.yaw+=g}b.autoRotateStopDelay&&(b.autoRotateStopDelay-=e-ba,0>=b.autoRotateStopDelay&&\r\n(b.autoRotateStopDelay=!1,Z=b.autoRotate,b.autoRotate=0))}O.pitch&&(m(\"pitch\"),f=b.pitch);O.yaw&&(m(\"yaw\"),n=b.yaw);O.hfov&&(m(\"hfov\"),c=b.hfov);0<d&&!b.autoRotate&&(a=1-b.friction,r[4]||r[5]||r[8]||r[9]||O.yaw||(b.yaw+=w.yaw*d*a),r[2]||r[3]||r[6]||r[7]||O.pitch||(b.pitch+=w.pitch*d*a),r[0]||r[1]||O.hfov||x(b.hfov+w.hfov*d*a));ba=e;0<d&&(w.yaw=0.8*w.yaw+(b.yaw-n)/d*0.2,w.pitch=0.8*w.pitch+(b.pitch-f)/d*0.2,w.hfov=0.8*w.hfov+(b.hfov-c)/d*0.2,f=b.autoRotate?Math.abs(b.autoRotate):5,w.yaw=Math.min(f,\r\nMath.max(w.yaw,-f)),w.pitch=Math.min(f,Math.max(w.pitch,-f)),w.hfov=Math.min(f,Math.max(w.hfov,-f)));r[0]&&r[1]&&(w.hfov=0);(r[2]||r[6])&&(r[3]||r[7])&&(w.pitch=0);(r[4]||r[8])&&(r[5]||r[9])&&(w.yaw=0)}}function m(a){var f=O[a],n=Math.min(1,Math.max((Date.now()-f.startTime)/1E3/(f.duration/1E3),0)),n=f.startPosition+b.animationTimingFunction(n)*(f.endPosition-f.startPosition);if(f.endPosition>f.startPosition&&n>=f.endPosition||f.endPosition<f.startPosition&&n<=f.endPosition||f.endPosition===f.startPosition)n=\r\nf.endPosition,w[a]=0,delete O[a];b[a]=n}function z(){d(\"resize\")}function F(){Ta||(Ta=!0,ca())}function ca(){if(!Za)if(Fa(),Qa&&clearTimeout(Qa),ha||!0===X)requestAnimationFrame(ca);else if(r[0]||r[1]||r[2]||r[3]||r[4]||r[5]||r[6]||r[7]||r[8]||r[9]||b.autoRotate||O.pitch||O.yaw||O.hfov||0.01<Math.abs(w.yaw)||0.01<Math.abs(w.pitch)||0.01<Math.abs(w.hfov))ga(),0<=b.autoRotateInactivityDelay&&Z&&Date.now()-N>b.autoRotateInactivityDelay&&!b.autoRotate&&(b.autoRotate=Z,da.lookAt(Ga,p,ra,3E3)),requestAnimationFrame(ca);\r\nelse if(C&&(C.isLoading()||!0===b.dynamic&&Ma))requestAnimationFrame(ca);else{B(\"animatefinished\",{pitch:da.getPitch(),yaw:da.getYaw(),hfov:da.getHfov()});Ta=!1;ba=p;var a=b.autoRotateInactivityDelay-(Date.now()-N);0<a?Qa=setTimeout(function(){b.autoRotate=Z;da.lookAt(Ga,p,ra,3E3);F()},a):0<=b.autoRotateInactivityDelay&&Z&&(b.autoRotate=Z,da.lookAt(Ga,p,ra,3E3),F())}}function Fa(){var a;if(G){var f=C.getCanvas();!1!==b.autoRotate&&(360<b.yaw?b.yaw-=360:-360>b.yaw&&(b.yaw+=360));a=b.yaw;var n=0;if(b.avoidShowingBackground){var c=\r\nb.hfov/2,d=180*Math.atan2(Math.tan(c/180*Math.PI),f.width/f.height)/Math.PI;b.vaov>b.haov?Math.min(Math.cos((b.pitch-c)/180*Math.PI),Math.cos((b.pitch+c)/180*Math.PI)):n=c*(1-Math.min(Math.cos((b.pitch-d)/180*Math.PI),Math.cos((b.pitch+d)/180*Math.PI)))}var c=b.maxYaw-b.minYaw,d=-180,e=180;360>c&&(d=b.minYaw+b.hfov/2+n,e=b.maxYaw-b.hfov/2-n,c<b.hfov&&(d=e=(d+e)/2),b.yaw=Math.max(d,Math.min(e,b.yaw)));!1===b.autoRotate&&(360<b.yaw?b.yaw-=360:-360>b.yaw&&(b.yaw+=360));!1!==b.autoRotate&&a!=b.yaw&&ba!==\r\np&&(b.autoRotate*=-1);a=2*Math.atan(Math.tan(b.hfov/180*Math.PI*0.5)/(f.width/f.height))/Math.PI*180;f=b.minPitch+a/2;n=b.maxPitch-a/2;b.maxPitch-b.minPitch<a&&(f=n=(f+n)/2);isNaN(f)&&(f=-90);isNaN(n)&&(n=90);b.pitch=Math.max(f,Math.min(n,b.pitch));C.render(b.pitch*Math.PI/180,b.yaw*Math.PI/180,b.hfov*Math.PI/180,{roll:b.roll*Math.PI/180});b.hotSpots.forEach(Ca);b.compass&&(Ia.style.transform=\"rotate(\"+(-b.yaw-b.northOffset)+\"deg)\",Ia.style.webkitTransform=\"rotate(\"+(-b.yaw-b.northOffset)+\"deg)\")}}\r\nfunction Y(a,b,c,d){this.w=a;this.x=b;this.y=c;this.z=d}function na(a){var f;f=a.alpha;var c=a.beta;a=a.gamma;c=[c?c*Math.PI/180/2:0,a?a*Math.PI/180/2:0,f?f*Math.PI/180/2:0];f=[Math.cos(c[0]),Math.cos(c[1]),Math.cos(c[2])];c=[Math.sin(c[0]),Math.sin(c[1]),Math.sin(c[2])];f=new Y(f[0]*f[1]*f[2]-c[0]*c[1]*c[2],c[0]*f[1]*f[2]-f[0]*c[1]*c[2],f[0]*c[1]*f[2]+c[0]*f[1]*c[2],f[0]*f[1]*c[2]+c[0]*c[1]*f[2]);f=f.multiply(new Y(Math.sqrt(0.5),-Math.sqrt(0.5),0,0));c=E.orientation?-E.orientation*Math.PI/180/2:\r\n0;f=f.multiply(new Y(Math.cos(c),0,-Math.sin(c),0)).toEulerAngles();\"number\"==typeof X&&10>X?X+=1:10===X?($a=f[2]/Math.PI*180+b.yaw,X=!0,requestAnimationFrame(ca)):(b.pitch=f[0]/Math.PI*180,b.roll=-f[1]/Math.PI*180,b.yaw=-f[2]/Math.PI*180+$a)}function va(){try{var a={};b.horizonPitch!==p&&(a.horizonPitch=b.horizonPitch*Math.PI/180);b.horizonRoll!==p&&(a.horizonRoll=b.horizonRoll*Math.PI/180);b.backgroundColor!==p&&(a.backgroundColor=b.backgroundColor);C.init(P,b.type,b.dynamic,b.haov*Math.PI/180,\r\nb.vaov*Math.PI/180,b.vOffset*Math.PI/180,S,a);!0!==b.dynamic&&(P=p)}catch(f){if(\"webgl error\"==f.type||\"no webgl\"==f.type)K();else if(\"webgl size error\"==f.type)K(b.strings.textureSizeError.replace(\"%s\",f.width).replace(\"%s\",f.maxWidth));else throw K(b.strings.unknownError),f;}}function S(){if(b.sceneFadeDuration&&C.fadeImg!==p){C.fadeImg.style.opacity=0;var a=C.fadeImg;delete C.fadeImg;setTimeout(function(){M.removeChild(a);B(\"scenechangefadedone\")},b.sceneFadeDuration)}Ia.style.display=b.compass?\r\n\"inline\":\"none\";L();q.load.box.style.display=\"none\";sa!==p&&(M.removeChild(sa),sa=p);G=!0;B(\"load\");F()}function La(a){a.pitch=Number(a.pitch)||0;a.yaw=Number(a.yaw)||0;var f=g.createElement(\"div\");f.className=\"pnlm-hotspot-base\";f.className=a.cssClass?f.className+(\" \"+a.cssClass):f.className+(\" pnlm-hotspot pnlm-sprite pnlm-\"+D(a.type));var c=g.createElement(\"span\");a.text&&(c.innerHTML=D(a.text));var d;if(a.video){d=g.createElement(\"video\");var e=a.video;b.basePath&&!qa(e)&&(e=b.basePath+e);d.src=\r\nI(e);d.controls=!0;d.style.width=a.width+\"px\";M.appendChild(f);c.appendChild(d)}else if(a.image){e=a.image;b.basePath&&!qa(e)&&(e=b.basePath+e);d=g.createElement(\"a\");d.href=I(a.URL?a.URL:e,!0);d.target=\"_blank\";c.appendChild(d);var h=g.createElement(\"img\");h.src=I(e);h.style.width=a.width+\"px\";h.style.paddingTop=\"5px\";M.appendChild(f);d.appendChild(h);c.style.maxWidth=\"initial\"}else if(a.URL){d=g.createElement(\"a\");d.href=I(a.URL,!0);if(a.attributes)for(e in a.attributes)d.setAttribute(e,a.attributes[e]);\r\nelse d.target=\"_blank\";M.appendChild(d);f.className+=\" pnlm-pointer\";c.className+=\" pnlm-pointer\";d.appendChild(f)}else a.sceneId&&(f.onclick=f.ontouchend=function(){f.clicked||(f.clicked=!0,y(a.sceneId,a.targetPitch,a.targetYaw,a.targetHfov));return!1},f.className+=\" pnlm-pointer\",c.className+=\" pnlm-pointer\"),M.appendChild(f);if(a.createTooltipFunc)a.createTooltipFunc(f,a.createTooltipArgs);else if(a.text||a.video||a.image)f.classList.add(\"pnlm-tooltip\"),f.appendChild(c),c.style.width=c.scrollWidth-\r\n20+\"px\",c.style.marginLeft=-(c.scrollWidth-f.offsetWidth)/2+\"px\",c.style.marginTop=-c.scrollHeight-12+\"px\";a.clickHandlerFunc&&(f.addEventListener(\"click\",function(b){a.clickHandlerFunc(b,a.clickHandlerArgs)},\"false\"),f.className+=\" pnlm-pointer\",c.className+=\" pnlm-pointer\");a.div=f}function L(){Ua||(b.hotSpots?(b.hotSpots=b.hotSpots.sort(function(a,b){return a.pitch<b.pitch}),b.hotSpots.forEach(La)):b.hotSpots=[],Ua=!0,b.hotSpots.forEach(Ca))}function e(){var a=b.hotSpots;Ua=!1;delete b.hotSpots;\r\nif(a)for(var f=0;f<a.length;f++){var c=a[f].div;if(c){for(;c.parentNode&&c.parentNode!=M;)c=c.parentNode;M.removeChild(c)}delete a[f].div}}function Ca(a){var f=Math.sin(a.pitch*Math.PI/180),c=Math.cos(a.pitch*Math.PI/180),d=Math.sin(b.pitch*Math.PI/180),e=Math.cos(b.pitch*Math.PI/180),g=Math.cos((-a.yaw+b.yaw)*Math.PI/180),h=f*d+c*g*e;if(90>=a.yaw&&-90<a.yaw&&0>=h||(90<a.yaw||-90>=a.yaw)&&0>=h)a.div.style.visibility=\"hidden\";else{var l=Math.sin((-a.yaw+b.yaw)*Math.PI/180),k=Math.tan(b.hfov*Math.PI/\r\n360);a.div.style.visibility=\"visible\";var m=C.getCanvas(),p=m.clientWidth,m=m.clientHeight,f=[-p/k*l*c/h/2,-p/k*(f*e-c*g*d)/h/2],c=Math.sin(b.roll*Math.PI/180),d=Math.cos(b.roll*Math.PI/180),f=[f[0]*d-f[1]*c,f[0]*c+f[1]*d];f[0]+=(p-a.div.offsetWidth)/2;f[1]+=(m-a.div.offsetHeight)/2;p=\"translate(\"+f[0]+\"px, \"+f[1]+\"px) translateZ(9999px) rotate(\"+b.roll+\"deg)\";a.scale&&(p+=\" scale(\"+ra/b.hfov/h+\")\");a.div.style.webkitTransform=p;a.div.style.MozTransform=p;a.div.style.transform=p}}function H(a){b=\r\n{};var f,c,d=\"haov vaov vOffset northOffset horizonPitch horizonRoll\".split(\" \");aa=[];for(f in Va)Va.hasOwnProperty(f)&&(b[f]=Va[f]);for(f in k.default)if(k.default.hasOwnProperty(f))if(\"strings\"==f)for(c in k.default.strings)k.default.strings.hasOwnProperty(c)&&(b.strings[c]=D(k.default.strings[c]));else b[f]=k.default[f],0<=d.indexOf(f)&&aa.push(f);if(null!==a&&\"\"!==a&&k.scenes&&k.scenes[a]){var e=k.scenes[a];for(f in e)if(e.hasOwnProperty(f))if(\"strings\"==f)for(c in e.strings)e.strings.hasOwnProperty(c)&&\r\n(b.strings[c]=D(e.strings[c]));else b[f]=e[f],0<=d.indexOf(f)&&aa.push(f);b.scene=a}for(f in k)if(k.hasOwnProperty(f))if(\"strings\"==f)for(c in k.strings)k.strings.hasOwnProperty(c)&&(b.strings[c]=D(k.strings[c]));else b[f]=k[f],0<=d.indexOf(f)&&aa.push(f)}function l(a){if((a=a?a:!1)&&\"preview\"in b){var c=b.preview;b.basePath&&!qa(c)&&(c=b.basePath+c);sa=g.createElement(\"div\");sa.className=\"pnlm-preview-img\";sa.style.backgroundImage=\"url('\"+I(c).replace(/\"/g,\"%22\").replace(/'/g,\"%27\")+\"')\";M.appendChild(sa)}var c=\r\nb.title,d=b.author;a&&(\"previewTitle\"in b&&(b.title=b.previewTitle),\"previewAuthor\"in b&&(b.author=b.previewAuthor));b.hasOwnProperty(\"title\")||(q.title.innerHTML=\"\");b.hasOwnProperty(\"author\")||(q.author.innerHTML=\"\");b.hasOwnProperty(\"title\")||b.hasOwnProperty(\"author\")||(q.container.style.display=\"none\");v.load.innerHTML=\"<p>\"+b.strings.loadButtonLabel+\"</p>\";q.load.boxp.innerHTML=b.strings.loadingLabel;for(var e in b)if(b.hasOwnProperty(e))switch(e){case \"title\":q.title.innerHTML=D(b[e]);q.container.style.display=\r\n\"inline\";break;case \"author\":var h=D(b[e]);b.authorURL&&(h=g.createElement(\"a\"),h.href=I(b.authorURL,!0),h.target=\"_blank\",h.innerHTML=D(b[e]),h=h.outerHTML);q.author.innerHTML=b.strings.bylineLabel.replace(\"%s\",h);q.container.style.display=\"inline\";break;case \"fallback\":h=g.createElement(\"a\");h.href=I(b[e],!0);h.target=\"_blank\";h.textContent=\"Click here to view this panorama in an alternative viewer.\";var k=g.createElement(\"p\");k.textContent=\"Your browser does not support WebGL.\";k.appendChild(g.createElement(\"br\"));\r\nk.appendChild(h);q.errorMsg.innerHTML=\"\";q.errorMsg.appendChild(k);break;case \"hfov\":x(Number(b[e]));break;case \"autoLoad\":!0===b[e]&&C===p&&(q.load.box.style.display=\"inline\",v.load.style.display=\"none\",oa());break;case \"showZoomCtrl\":v.zoom.style.display=b[e]&&!1!=b.showControls?\"block\":\"none\";break;case \"showFullscreenCtrl\":v.fullscreen.style.display=b[e]&&!1!=b.showControls&&(\"fullscreen\"in g||\"mozFullScreen\"in g||\"webkitIsFullScreen\"in g||\"msFullscreenElement\"in g)?\"block\":\"none\";break;case \"hotSpotDebug\":Wa.style.display=\r\nb[e]?\"block\":\"none\";break;case \"showControls\":b[e]||(v.orientation.style.display=\"none\",v.zoom.style.display=\"none\",v.fullscreen.style.display=\"none\");break;case \"orientationOnByDefault\":b[e]&&Ra()}a&&(c?b.title=c:delete b.title,d?b.author=d:delete b.author)}function h(){if(G&&!Na)if(Aa)g.exitFullscreen?g.exitFullscreen():g.mozCancelFullScreen?g.mozCancelFullScreen():g.webkitCancelFullScreen?g.webkitCancelFullScreen():g.msExitFullscreen&&g.msExitFullscreen();else try{s.requestFullscreen?s.requestFullscreen():\r\ns.mozRequestFullScreen?s.mozRequestFullScreen():s.msRequestFullscreen?s.msRequestFullscreen():s.webkitRequestFullScreen()}catch(a){}}function d(a){g.fullscreenElement||g.fullscreen||g.mozFullScreen||g.webkitIsFullScreen||g.msFullscreenElement?(v.fullscreen.classList.add(\"pnlm-fullscreen-toggle-button-active\"),Aa=!0):(v.fullscreen.classList.remove(\"pnlm-fullscreen-toggle-button-active\"),Aa=!1);\"resize\"!==a&&B(\"fullscreenchange\",Aa);C.resize();x(b.hfov);F()}function u(a){var c=b.minHfov;\"multires\"==\r\nb.type&&C&&!b.multiResMinHfov&&(c=Math.min(c,C.getCanvas().width/(b.multiRes.cubeResolution/90*0.9)));if(c>b.maxHfov)return console.log(\"HFOV bounds do not make sense (minHfov > maxHfov).\"),b.hfov;var d=b.hfov,d=a<c?c:a>b.maxHfov?b.maxHfov:a;b.avoidShowingBackground&&C&&(a=C.getCanvas(),d=Math.min(d,360*Math.atan(Math.tan((b.maxPitch-b.minPitch)/360*Math.PI)/a.height*a.width)/Math.PI));return d}function x(a){b.hfov=u(a);B(\"zoomchange\",b.hfov)}function t(){O={};Z=b.autoRotate?b.autoRotate:Z;b.autoRotate=\r\n!1}function Ya(){Na&&(q.load.box.style.display=\"none\",q.errorMsg.style.display=\"none\",Na=!1,M.style.display=\"block\",B(\"errorcleared\"));G=!1;v.load.style.display=\"none\";q.load.box.style.display=\"inline\";oa()}function y(a,c,d,h,g){G||(g=!0);G=!1;O={};var m,q;if(b.sceneFadeDuration&&!g&&(m=C.render(b.pitch*Math.PI/180,b.yaw*Math.PI/180,b.hfov*Math.PI/180,{returnImage:!0}),m!==p)){g=new Image;g.className=\"pnlm-fade-img\";g.style.transition=\"opacity \"+b.sceneFadeDuration/1E3+\"s\";g.style.width=\"100%\";g.style.height=\r\n\"100%\";g.onload=function(){y(a,c,d,h,!0)};g.src=m;M.appendChild(g);C.fadeImg=g;return}g=\"same\"===c?b.pitch:c;m=\"same\"===d?b.yaw:\"sameAzimuth\"===d?b.yaw+(b.northOffset||0)-(k.scenes[a].northOffset||0):d;q=\"same\"===h?b.hfov:h;e();H(a);w.yaw=w.pitch=w.hfov=0;l();g!==p&&(b.pitch=g);m!==p&&(b.yaw=m);q!==p&&(b.hfov=q);B(\"scenechange\",a);Ya()}function Da(){E.removeEventListener(\"deviceorientation\",na);v.orientation.classList.remove(\"pnlm-orientation-button-active\");X=!1}function Ra(){\"function\"===typeof DeviceMotionEvent.requestPermission?\r\nDeviceOrientationEvent.requestPermission().then(function(a){\"granted\"==a&&(X=1,E.addEventListener(\"deviceorientation\",na),v.orientation.classList.add(\"pnlm-orientation-button-active\"))}):(X=1,E.addEventListener(\"deviceorientation\",na),v.orientation.classList.add(\"pnlm-orientation-button-active\"))}function D(a){return k.escapeHTML?String(a).split(/&/g).join(\"&amp;\").split('\"').join(\"&quot;\").split(\"'\").join(\"&#39;\").split(\"<\").join(\"&lt;\").split(\">\").join(\"&gt;\").split(\"/\").join(\"&#x2f;\").split(\"\\n\").join(\"<br>\"):\r\nString(a).split(\"\\n\").join(\"<br>\")}function I(a,b){try{var c=decodeURIComponent(ab(a)).replace(/[^\\w:]/g,\"\").toLowerCase()}catch(d){return\"about:blank\"}return 0===c.indexOf(\"javascript:\")||0===c.indexOf(\"vbscript:\")?(console.log(\"Script URL removed.\"),\"about:blank\"):b&&0===c.indexOf(\"data:\")?(console.log(\"Data URI removed from link.\"),\"about:blank\"):a}function ab(a){return a.replace(/&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/ig,function(a,b){b=b.toLowerCase();return\"colon\"===b?\":\":\"#\"===b.charAt(0)?\r\n\"x\"===b.charAt(1)?String.fromCharCode(parseInt(b.substring(2),16)):String.fromCharCode(+b.substring(1)):\"\"})}function B(a){if(a in T)for(var b=T[a].length;0<b;b--)T[a][T[a].length-b].apply(null,[].slice.call(arguments,1))}var da=this,b,C,sa,ha=!1,N=Date.now(),xa=0,ya=0,Ha=-1,Oa=0,Pa=0,r=Array(10),Aa=!1,G,Na=!1,Sa=!1,P,ba,w={yaw:0,pitch:0,hfov:0},Ta=!1,X=!1,$a=0,Qa,Z=0,ra,Ga,O={},T={},aa=[],Ma=!1,Ua=!1,Za=!1,Va={hfov:100,minHfov:50,multiResMinHfov:!1,maxHfov:120,pitch:0,minPitch:p,maxPitch:p,yaw:0,\r\nminYaw:-180,maxYaw:180,roll:0,haov:360,vaov:180,vOffset:0,autoRotate:!1,autoRotateInactivityDelay:-1,autoRotateStopDelay:p,type:\"equirectangular\",northOffset:0,showFullscreenCtrl:!0,dynamic:!1,dynamicUpdate:!1,doubleClickZoom:!0,keyboardZoom:!0,mouseZoom:!0,showZoomCtrl:!0,autoLoad:!1,showControls:!0,orientationOnByDefault:!1,hotSpotDebug:!1,backgroundColor:[0,0,0],avoidShowingBackground:!1,animationTimingFunction:function(a){return 0.5>a?2*a*a:-1+(4-2*a)*a},draggable:!0,disableKeyboardCtrl:!1,crossOrigin:\"anonymous\",\r\ntouchPanSpeedCoeffFactor:1,capturedKeyNumbers:[16,17,27,37,38,39,40,61,65,68,83,87,107,109,173,187,189],friction:0.15,strings:{loadButtonLabel:\"Click to<br>Load<br>Panorama\",loadingLabel:\"Loading...\",bylineLabel:\"by %s\",noPanoramaError:\"No panorama image was specified.\",fileAccessError:\"The file %s could not be accessed.\",malformedURLError:\"There is something wrong with the panorama URL.\",iOS8WebGLError:\"Due to iOS 8's broken WebGL implementation, only progressive encoded JPEGs work for your device (this panorama uses standard encoding).\",\r\ngenericWebGLError:\"Your browser does not have the necessary WebGL support to display this panorama.\",textureSizeError:\"This panorama is too big for your device! It's %spx wide, but your device only supports images up to %spx wide. Try another device. (If you're the author, try scaling down the image.)\",unknownError:\"Unknown error. Check developer console.\"}};s=\"string\"===typeof s?g.getElementById(s):s;s.classList.add(\"pnlm-container\");s.tabIndex=0;var J=g.createElement(\"div\");J.className=\"pnlm-ui\";\r\ns.appendChild(J);var M=g.createElement(\"div\");M.className=\"pnlm-render-container\";s.appendChild(M);var W=g.createElement(\"div\");W.className=\"pnlm-dragfix\";J.appendChild(W);var fa=g.createElement(\"span\");fa.className=\"pnlm-about-msg\";fa.innerHTML='<a href=\"https://pannellum.org/\" target=\"_blank\">Pannellum</a> 2.5.6';J.appendChild(fa);W.addEventListener(\"contextmenu\",ja);var q={},Wa=g.createElement(\"div\");Wa.className=\"pnlm-sprite pnlm-hot-spot-debug-indicator\";J.appendChild(Wa);q.container=g.createElement(\"div\");\r\nq.container.className=\"pnlm-panorama-info\";q.title=g.createElement(\"div\");q.title.className=\"pnlm-title-box\";q.container.appendChild(q.title);q.author=g.createElement(\"div\");q.author.className=\"pnlm-author-box\";q.container.appendChild(q.author);J.appendChild(q.container);q.load={};q.load.box=g.createElement(\"div\");q.load.box.className=\"pnlm-load-box\";q.load.boxp=g.createElement(\"p\");q.load.box.appendChild(q.load.boxp);q.load.lbox=g.createElement(\"div\");q.load.lbox.className=\"pnlm-lbox\";q.load.lbox.innerHTML=\r\n'<div class=\"pnlm-loading\"></div>';q.load.box.appendChild(q.load.lbox);q.load.lbar=g.createElement(\"div\");q.load.lbar.className=\"pnlm-lbar\";q.load.lbarFill=g.createElement(\"div\");q.load.lbarFill.className=\"pnlm-lbar-fill\";q.load.lbar.appendChild(q.load.lbarFill);q.load.box.appendChild(q.load.lbar);q.load.msg=g.createElement(\"p\");q.load.msg.className=\"pnlm-lmsg\";q.load.box.appendChild(q.load.msg);J.appendChild(q.load.box);q.errorMsg=g.createElement(\"div\");q.errorMsg.className=\"pnlm-error-msg pnlm-info-box\";\r\nJ.appendChild(q.errorMsg);var v={};v.container=g.createElement(\"div\");v.container.className=\"pnlm-controls-container\";J.appendChild(v.container);v.load=g.createElement(\"div\");v.load.className=\"pnlm-load-button\";v.load.addEventListener(\"click\",function(){l();Ya()});J.appendChild(v.load);v.zoom=g.createElement(\"div\");v.zoom.className=\"pnlm-zoom-controls pnlm-controls\";v.zoomIn=g.createElement(\"div\");v.zoomIn.className=\"pnlm-zoom-in pnlm-sprite pnlm-control\";v.zoomIn.addEventListener(\"click\",function(){G&&\r\n(x(b.hfov-5),F())});v.zoom.appendChild(v.zoomIn);v.zoomOut=g.createElement(\"div\");v.zoomOut.className=\"pnlm-zoom-out pnlm-sprite pnlm-control\";v.zoomOut.addEventListener(\"click\",function(){G&&(x(b.hfov+5),F())});v.zoom.appendChild(v.zoomOut);v.container.appendChild(v.zoom);v.fullscreen=g.createElement(\"div\");v.fullscreen.addEventListener(\"click\",h);v.fullscreen.className=\"pnlm-fullscreen-toggle-button pnlm-sprite pnlm-fullscreen-toggle-button-inactive pnlm-controls pnlm-control\";(g.fullscreenEnabled||\r\ng.mozFullScreenEnabled||g.webkitFullscreenEnabled||g.msFullscreenEnabled)&&v.container.appendChild(v.fullscreen);v.orientation=g.createElement(\"div\");v.orientation.addEventListener(\"click\",function(a){X?Da():Ra()});v.orientation.addEventListener(\"mousedown\",function(a){a.stopPropagation()});v.orientation.addEventListener(\"touchstart\",function(a){a.stopPropagation()});v.orientation.addEventListener(\"pointerdown\",function(a){a.stopPropagation()});v.orientation.className=\"pnlm-orientation-button pnlm-orientation-button-inactive pnlm-sprite pnlm-controls pnlm-control\";\r\nvar Xa=!1;E.DeviceOrientationEvent&&\"https:\"==location.protocol&&0<=navigator.userAgent.toLowerCase().indexOf(\"mobi\")&&(v.container.appendChild(v.orientation),Xa=!0);var Ia=g.createElement(\"div\");Ia.className=\"pnlm-compass pnlm-controls pnlm-control\";J.appendChild(Ia);k.firstScene?H(k.firstScene):k.default&&k.default.firstScene?H(k.default.firstScene):H(null);l(!0);var ia=[],za=[];Y.prototype.multiply=function(a){return new Y(this.w*a.w-this.x*a.x-this.y*a.y-this.z*a.z,this.x*a.w+this.w*a.x+this.y*\r\na.z-this.z*a.y,this.y*a.w+this.w*a.y+this.z*a.x-this.x*a.z,this.z*a.w+this.w*a.z+this.x*a.y-this.y*a.x)};Y.prototype.toEulerAngles=function(){var a=Math.atan2(2*(this.w*this.x+this.y*this.z),1-2*(this.x*this.x+this.y*this.y)),b=Math.asin(2*(this.w*this.y-this.z*this.x)),c=Math.atan2(2*(this.w*this.z+this.x*this.y),1-2*(this.y*this.y+this.z*this.z));return[a,b,c]};this.isLoaded=function(){return Boolean(G)};this.getPitch=function(){return b.pitch};this.setPitch=function(a,c,d,e){N=Date.now();if(1E-6>=\r\nMath.abs(a-b.pitch))return\"function\"==typeof d&&d(e),this;(c=c==p?1E3:Number(c))?(O.pitch={startTime:Date.now(),startPosition:b.pitch,endPosition:a,duration:c},\"function\"==typeof d&&setTimeout(function(){d(e)},c)):b.pitch=a;F();return this};this.getPitchBounds=function(){return[b.minPitch,b.maxPitch]};this.setPitchBounds=function(a){b.minPitch=Math.max(-90,Math.min(a[0],90));b.maxPitch=Math.max(-90,Math.min(a[1],90));return this};this.getYaw=function(){return(b.yaw+540)%360-180};this.setYaw=function(a,\r\nc,d,e){N=Date.now();if(1E-6>=Math.abs(a-b.yaw))return\"function\"==typeof d&&d(e),this;c=c==p?1E3:Number(c);a=(a+180)%360-180;c?(180<b.yaw-a?a+=360:180<a-b.yaw&&(a-=360),O.yaw={startTime:Date.now(),startPosition:b.yaw,endPosition:a,duration:c},\"function\"==typeof d&&setTimeout(function(){d(e)},c)):b.yaw=a;F();return this};this.getYawBounds=function(){return[b.minYaw,b.maxYaw]};this.setYawBounds=function(a){b.minYaw=Math.max(-360,Math.min(a[0],360));b.maxYaw=Math.max(-360,Math.min(a[1],360));return this};\r\nthis.getHfov=function(){return b.hfov};this.setHfov=function(a,c,d,e){N=Date.now();if(1E-6>=Math.abs(a-b.hfov))return\"function\"==typeof d&&d(e),this;(c=c==p?1E3:Number(c))?(O.hfov={startTime:Date.now(),startPosition:b.hfov,endPosition:u(a),duration:c},\"function\"==typeof d&&setTimeout(function(){d(e)},c)):x(a);F();return this};this.getHfovBounds=function(){return[b.minHfov,b.maxHfov]};this.setHfovBounds=function(a){b.minHfov=Math.max(0,a[0]);b.maxHfov=Math.max(0,a[1]);return this};this.lookAt=function(a,\r\nc,d,e,g,h){e=e==p?1E3:Number(e);a!==p&&1E-6<Math.abs(a-b.pitch)&&(this.setPitch(a,e,g,h),g=p);c!==p&&1E-6<Math.abs(c-b.yaw)&&(this.setYaw(c,e,g,h),g=p);d!==p&&1E-6<Math.abs(d-b.hfov)&&(this.setHfov(d,e,g,h),g=p);\"function\"==typeof g&&g(h);return this};this.getNorthOffset=function(){return b.northOffset};this.setNorthOffset=function(a){b.northOffset=Math.min(360,Math.max(0,a));F();return this};this.getHorizonRoll=function(){return b.horizonRoll};this.setHorizonRoll=function(a){b.horizonRoll=Math.min(90,\r\nMath.max(-90,a));C.setPose(b.horizonPitch*Math.PI/180,b.horizonRoll*Math.PI/180);F();return this};this.getHorizonPitch=function(){return b.horizonPitch};this.setHorizonPitch=function(a){b.horizonPitch=Math.min(90,Math.max(-90,a));C.setPose(b.horizonPitch*Math.PI/180,b.horizonRoll*Math.PI/180);F();return this};this.startAutoRotate=function(a,c){a=a||Z||1;c=c===p?Ga:c;b.autoRotate=a;da.lookAt(c,p,ra,3E3);F();return this};this.stopAutoRotate=function(){Z=b.autoRotate?b.autoRotate:Z;b.autoRotate=!1;b.autoRotateInactivityDelay=\r\n-1;return this};this.stopMovement=function(){t();w={yaw:0,pitch:0,hfov:0}};this.getRenderer=function(){return C};this.setUpdate=function(a){Ma=!0===a;C===p?pa():F();return this};this.mouseEventToCoords=function(a){return ta(a)};this.loadScene=function(a,b,c,d){!1!==G&&y(a,b,c,d);return this};this.getScene=function(){return b.scene};this.addScene=function(a,b){k.scenes[a]=b;return this};this.removeScene=function(a){if(b.scene===a||!k.scenes.hasOwnProperty(a))return!1;delete k.scenes[a];return!0};this.toggleFullscreen=\r\nfunction(){h();return this};this.getConfig=function(){return b};this.getContainer=function(){return s};this.addHotSpot=function(a,c){if(c===p&&b.scene===p)b.hotSpots.push(a);else{var d=c!==p?c:b.scene;if(k.scenes.hasOwnProperty(d))k.scenes[d].hasOwnProperty(\"hotSpots\")||(k.scenes[d].hotSpots=[],d==b.scene&&(b.hotSpots=k.scenes[d].hotSpots)),k.scenes[d].hotSpots.push(a);else throw\"Invalid scene ID!\";}if(c===p||b.scene==c)La(a),G&&Ca(a);return this};this.removeHotSpot=function(a,c){if(c===p||b.scene==\r\nc){if(!b.hotSpots)return!1;for(var d=0;d<b.hotSpots.length;d++)if(b.hotSpots[d].hasOwnProperty(\"id\")&&b.hotSpots[d].id===a){for(var e=b.hotSpots[d].div;e.parentNode!=M;)e=e.parentNode;M.removeChild(e);delete b.hotSpots[d].div;b.hotSpots.splice(d,1);return!0}}else if(k.scenes.hasOwnProperty(c)){if(!k.scenes[c].hasOwnProperty(\"hotSpots\"))return!1;for(d=0;d<k.scenes[c].hotSpots.length;d++)if(k.scenes[c].hotSpots[d].hasOwnProperty(\"id\")&&k.scenes[c].hotSpots[d].id===a)return k.scenes[c].hotSpots.splice(d,\r\n1),!0}else return!1};this.resize=function(){C&&z()};this.isLoaded=function(){return G};this.isOrientationSupported=function(){return Xa||!1};this.stopOrientation=function(){Da()};this.startOrientation=function(){Xa&&Ra()};this.isOrientationActive=function(){return Boolean(X)};this.on=function(a,b){T[a]=T[a]||[];T[a].push(b);return this};this.off=function(a,b){if(!a)return T={},this;if(b){var c=T[a].indexOf(b);0<=c&&T[a].splice(c,1);0==T[a].length&&delete T[a]}else delete T[a];return this};this.destroy=\r\nfunction(){Za=!0;clearTimeout(Qa);C&&C.destroy();Sa&&(g.removeEventListener(\"mousemove\",ua,!1),g.removeEventListener(\"mouseup\",ma,!1),s.removeEventListener(\"mozfullscreenchange\",d,!1),s.removeEventListener(\"webkitfullscreenchange\",d,!1),s.removeEventListener(\"msfullscreenchange\",d,!1),s.removeEventListener(\"fullscreenchange\",d,!1),E.removeEventListener(\"resize\",z,!1),E.removeEventListener(\"orientationchange\",z,!1),s.removeEventListener(\"keydown\",V,!1),s.removeEventListener(\"keyup\",R,!1),s.removeEventListener(\"blur\",\r\n$,!1),g.removeEventListener(\"mouseleave\",ma,!1));s.innerHTML=\"\";s.classList.remove(\"pnlm-container\")}}return{viewer:function(g,k){return new Ba(g,k)}}}(window,document);\r\n\n/*\r\n * Copyright (c) 2024 Quanos Solutions GmbH\r\n */\r\n\r\n\r\nfunction open360(id, imageUrl, hotspotsOfImage, plainImageOnly) {\r\n    forceEventBubblingClassNames.add(\"pnlm-dragfix\");\r\n    var config = {\r\n        \"type\": \"equirectangular\",\r\n        \"panorama\": imageUrl,\r\n        \"autoLoad\": true,\r\n        \"hotSpots\": hotspotsOfImage\r\n    };\r\n    var viewer360 = pannellum.viewer(id, config);\r\n    var parent = $(id);\r\n    if (parent) {\r\n        parent.viewer360 = viewer360;\r\n    }\r\n    viewer360.getContainer().plainImageOnly = plainImageOnly;\r\n    let grabLayer = viewer360.getContainer().children[0];\r\n    if (plainImageOnly) {\r\n        grabLayer.style.zIndex = 0; // \"pnlm-ui pnlm-grab\"-Ebene in den Hintergrund, um Zoomen zu deaktivieren\r\n    } else {\r\n        // Das MouseUp kommt nicht an (am document), daher feuern wir es direkt, damit das Grabben im Bild beendet wird\r\n        grabLayer.onmouseup = function(event) {\r\n            var mouseUpEvent = mouseUpEvent = new MouseEvent(\"mouseup\");\r\n            document.dispatchEvent(mouseUpEvent);\r\n        }\r\n    }\r\n    viewer360Resized(id, plainImageOnly);\r\n}\r\n\r\nfunction viewer360Resized(id, hidePanWindow) {\r\n    var viewer360 = $(id).viewer360;\r\n    if (viewer360 == null) {\r\n        return;\r\n    }\r\n    viewer360.resize();\r\n    updateViewer360ControlsVisibility(viewer360, hidePanWindow);\r\n}\r\n\r\nfunction updateViewer360ControlsVisibility(viewer360, hidePanWindow) {\r\n    var container = viewer360.getContainer();\r\n    if (container == null) {\r\n        return;\r\n    }\r\n    console.log(\"resize from adjust\");\r\n    var minHeight = dwImageViewerGetMinHeightForViewerControls();\r\n    if (!hidePanWindow && (container.offsetHeight > minHeight)) {\r\n        setViewer360ControlsVisible(viewer360, true);\r\n    } else {\r\n        setViewer360ControlsVisible(viewer360, false);\r\n    }\r\n}\r\n\r\nfunction setViewer360ControlsVisible(viewer360, visible) {\r\n    let control = viewer360.getContainer().querySelector(\".pnlm-controls-container\");\r\n    if (control) {\r\n        dwDomSetStyle(control, \"display\", visible ? \"\" : \"none\");\r\n    }\r\n}\r\n\r\nfunction colorizeHotspot360(hotSpotDiv, linkStyleValue, color) {\r\n    switch (linkStyleValue) {\r\n        case 2:     // Rechteck\r\n            hotSpotDiv.style.backgroundColor = \"transparent\";\r\n            hotSpotDiv.style.borderColor = color;\r\n            hotSpotDiv.style.borderWidth = \"2px\";\r\n            break;\r\n        case 3:     // Ellipse\r\n            hotSpotDiv.style.backgroundColor = \"transparent\";\r\n            hotSpotDiv.style.borderColor = color;\r\n            hotSpotDiv.style.borderRadius = \"50%\";\r\n            hotSpotDiv.style.borderWidth = \"2px\";\r\n            break;\r\n        case 4:     // EllipseFull\r\n            hotSpotDiv.style.backgroundColor = color;\r\n            hotSpotDiv.style.borderColor = color;\r\n            hotSpotDiv.style.borderRadius = \"50px\";\r\n            break;\r\n        default:     // Rechteck gefüllt\r\n            hotSpotDiv.style.backgroundColor = color;\r\n            hotSpotDiv.style.borderColor = color;\r\n    }\r\n}\r\n\r\nfunction setTooltipForHotspot(tooltip, hotSpotDiv) {\r\n    var span = document.createElement('span');\r\n    span.classList.add('custom-tooltip');\r\n    span.classList.add('guitooltip');\r\n\r\n    span.innerHTML = dwUtilsUnescapeHTML(tooltip);\r\n    hotSpotDiv.appendChild(span);\r\n    span.style.marginLeft = -(span.scrollWidth - hotSpotDiv.offsetWidth) / 2 + 'px';\r\n    span.style.marginTop = -span.scrollHeight - 12 + 'px';\r\n}\r\n\r\nfunction setClickListenerForHotspot(hotSpotDiv, parentUniqueId) {\r\n    hotSpotDiv.parentUniqueId = parentUniqueId;\r\n    hotSpotDiv.onclick = function(event) {\r\n        colorizeHotspot360(hotSpotDiv, hotSpotDiv.linkStyleValuePressed, hotSpotDiv.backgroundColorPressed);\r\n        markHotspots360(parentUniqueId, hotSpotDiv.uniqueId, false);\r\n\r\n        // hier hat man selbst geklickt, daher soll kein Scrollen zum Hotspot erfolgen. Allerdings bekommt man vom der\r\n        // Stückliste die Benachrichtigung, dass sich die Selektion geändert hat. Man muss jetzt irgendwie unterscheiden\r\n        // zwischen Klick in Stückliste oder auf den Hotspot der Zeichnung. Daher wird hier bei allen Hotspots mit gleichem Link\r\n        // ein Flag gesetzt, um ein Scrollen zu unterbinden.\r\n        var hotSpotDivs = document.querySelectorAll(\"div.hotspot360rect\");\r\n        for (var i = 0; i < hotSpotDivs.length; i++) {\r\n            var tempHotSpotDiv = hotSpotDivs[i];\r\n            // bei mehreren Tbumbnails darf nur nicht zu dem Hotspot gescrollt werden, den man gerade geklickt hat\r\n            // zum Hotspot mit gleicher Nummer im anderen Thumbnail aber schon\r\n            if (tempHotSpotDiv.parentUniqueId == parentUniqueId) {\r\n                if (hotSpotDiv.key == tempHotSpotDiv.key) {\r\n                    hotSpotDivs[i].dontScroll = true;\r\n                }\r\n            }\r\n        }\r\n\r\n        dwAjaxAddUpdate(parentUniqueId + \"@DW@\" + hotSpotDiv.uniqueId + \"@DW@imageHotspotClickedEvent@DW@hotspotId=\"\r\n                        + hotSpotDiv.uniqueId + \"|\" + \"@DWSUB@mouseButton=\" + (event.button + 1), true);\r\n    }\r\n}\r\n\r\nfunction setDblClickListenerForHotspot(hotSpotDiv, parentUniqueId) {\r\n    hotSpotDiv.ondblclick = function(event) {\r\n        event = dwFrameworkGetEvent(event);\r\n\r\n        if (typeof (dwAjaxAddUpdate) != \"undefined\") {\r\n            dwAjaxAddUpdate(parentUniqueId + \"@DW@\" + hotSpotDiv.uniqueId + \"@DW@imageHotspotDoubleClickedEvent@DW@hotspotId=\"\r\n                            + hotSpotDiv.uniqueId + \"@DWSUB@mouseButton=\" + (event.button + 1), true);\r\n        }\r\n    }\r\n}\r\n\r\nfunction setTextForHotspot(linkKey, hotSpotDiv) {\r\n    var textNode = document.createElement('div');\r\n    textNode.style.cursor = \"pointer\";\r\n    textNode.style.textAlign = \"center\";\r\n    hotSpotDiv.key = linkKey;\r\n    textNode.innerHTML = linkKey;\r\n    hotSpotDiv.appendChild(textNode);\r\n    textNode.style.lineHeight = textNode.offsetWidth + 'px';    // vertikal zentrieren\r\n}\r\n\r\n/**\r\n * Speichert die Hotspot Daten für linkStyle und Backgroundfarbe\r\n * @param hotSpotDiv\r\n * @param jsonObject\r\n */\r\nfunction saveHotspotData(hotSpotDiv, jsonObject) {\r\n    hotSpotDiv.linkStyleValue = jsonObject.linkStyle;\r\n    hotSpotDiv.linkStyleValuePressed = jsonObject.linkStylePressed;\r\n    hotSpotDiv.backgroundColor = jsonObject.bgColor;\r\n    hotSpotDiv.backgroundColorPressed = jsonObject.bgColorPressed;\r\n}\r\n\r\nfunction saveHotspotCoordinates(hotSpotDiv, jsonObject) {\r\n    hotSpotDiv.pitch = jsonObject.pitch;\r\n    hotSpotDiv.yaw = jsonObject.yaw;\r\n}\r\n\r\n/**\r\n * Die Funktion in der originalen Lib heißt leider nur createTooltipFunc() ist aber de facto eine Methode zum generellen\r\n * Erzeugen des Hotspots. Deswegen heißt sie zumindest auf unserer Seite so.\r\n * @param hotSpotDiv\r\n * @param json in json stehen die Parameter des Hotspots als Json-Objekt, siehe Hotspot360.getAsStringFor360Viewer()\r\n */\r\nfunction createHotspotWithTooltip(hotSpotDiv, json) {\r\n    var jsonObject = JSON.parse(json);\r\n\r\n    saveHotspotCoordinates(hotSpotDiv, jsonObject);\r\n\r\n    // Hotspot uniqueID vergeben, damit man ihn wiederfinden kann um ihn z.B. zu markieren zu können\r\n    hotSpotDiv.uniqueId = jsonObject.uniqueId;\r\n\r\n    saveHotspotData(hotSpotDiv, jsonObject);\r\n\r\n    colorizeHotspot360(hotSpotDiv, hotSpotDiv.linkStyleValue, hotSpotDiv.backgroundColor);\r\n\r\n    setTextForHotspot(jsonObject.linkKey, hotSpotDiv);\r\n\r\n    setClickListenerForHotspot(hotSpotDiv, jsonObject.parentUniqueId);\r\n\r\n    setDblClickListenerForHotspot(hotSpotDiv, jsonObject.parentUniqueId);\r\n\r\n    setTooltipForHotspot(jsonObject.tooltip, hotSpotDiv);\r\n}\r\n\r\nfunction markHotspots360(id, markedIds, scrollTo) {\r\n    var markedHotspotIds = markedIds.split(',');\r\n    var hotSpotDivs = document.querySelectorAll(\"div.hotspot360rect\");\r\n    var viewer = $(id).viewer360;\r\n    if (!viewer) {\r\n        return;\r\n    }\r\n\r\n    for (var i = 0; i < hotSpotDivs.length; i++) {\r\n        var hotSpotDiv = hotSpotDivs[i];\r\n        var uniqueId = hotSpotDiv.uniqueId;\r\n\r\n        // da wir über ALLE 360°-Hotspot iterieren, könnten sie auch von einem anderen Zeichnungs-Thumbnail sein\r\n        var parentUniqueId = hotSpotDiv.parentUniqueId;\r\n        if (parentUniqueId == id) {\r\n            if (markedHotspotIds.includes(uniqueId)) {\r\n                colorizeHotspot360(hotSpotDiv, hotSpotDiv.linkStyleValuePressed, hotSpotDiv.backgroundColorPressed);\r\n                if (scrollTo) {\r\n                    if (hotSpotDiv.dontScroll === true) {   // Hier wird das Flag zurückgesetzt. Man kam initial vom Hotspot, also nicht scrollen\r\n                        hotSpotDiv.dontScroll = false;\r\n                    } else {\r\n                        viewer.lookAt(hotSpotDiv.pitch / 1.0, hotSpotDiv.yaw / 1.0, undefined, 500);\r\n                    }\r\n                }\r\n            } else {\r\n                colorizeHotspot360(hotSpotDiv, hotSpotDiv.linkStyleValue, hotSpotDiv.backgroundColor);\r\n            }\r\n        }\r\n    }\r\n}\n/*\r\n * Copyright (c) 2015 Docware GmbH\r\n */\r\n\r\n// NULL oder Id des Timer-Thread (setTimeout)\r\nvar dwTooltip_timeoutIntervalId = null;\r\n// Wo die Maus zuletzt war, wenn er wartet, um den Tooltip anzuzeigen\r\nvar dwTooltip_lastMousePointer = null;\r\n\r\nvar DWTOOLTIP_DELAY_DEFAULT_VALUE = 250;\r\nvar DWTOOLTIP_TEXT_FOR_EVENTLISTENER = \"__FROM__SERVER__\";\r\n\r\n/**\r\n * Zeitverzögerte Anzeige des Tooltips\r\n * @param event\r\n * @param text\r\n * @param delay\r\n * @param width optional\r\n * @param height optional\r\n */\r\nfunction dwTooltip_delayShowTooltip(event, text, delay, width, height, currentTarget) {\r\n    if (!dwTooltip_isTooltipEventAllowed(event, currentTarget)) {\r\n        return false;\r\n    }\r\n    if ((text == null) || (text == \"\") || ((currentlyOpenedContextMenuPopup != null) && currentlyOpenedContextMenuPopup.isVisible())) {\r\n        return false;\r\n    } else if (text != DWTOOLTIP_TEXT_FOR_EVENTLISTENER) {\r\n        // Bei Anfragen des Tooltip-Textes vom Server wird die Ajax Schnittstelle aufgerufen. Diese Schnittstelle\r\n        // verarbeitet nur Anfragen, wenn das Flag noch nicht 'true' ist\r\n        event.preventTooltip = true;\r\n    }\r\n\r\n    // Tooltip soll nur für die aktuelle Komponente (im Vordergrund) ausgelöst werden. Tooltips die in der Hierarchie dahinter\r\n    // stehen müssen unterdrückt werden (z.B. Tooltip auf Toolbar bzw Toolbar Button -> Toolbar Button Tooltip anzeigen)\r\n    // Update August 2013: Das können wir nicht machen, weil darunter z.B: ein GuiToolbutton kein Hover Farbverlauf mehr bekommt.\r\n    //dwFrameworkDisableEventBubbling(event);\r\n    if (dwTooltip_timeoutIntervalId != null) {\r\n        clearTimeout(dwTooltip_timeoutIntervalId);\r\n    }\r\n    dwTooltip_lastMousePointer = dwUtilsGetCurrentMousePositionPerEvent(event);\r\n\r\n    var eventForServerTooltip = event;\r\n    // In IE8 bleiben Event Objekte in einem setTimeout nicht erhalten. Clone damit das aufrufende Control bestimmt werden kann\r\n    var isJ2EEBrowser = typeof (framework_isJ2EEBrowser) != \"undefined\";\r\n    if (isJ2EEBrowser && (framework_isIE8 || framework_isIELegacyMode)) {\r\n        eventForServerTooltip = dwUtilsCloneObject(event);\r\n    }\r\n    dwTooltip_timeoutIntervalId = setTimeout(function() {\r\n        if (text == DWTOOLTIP_TEXT_FOR_EVENTLISTENER) {\r\n            dwTooltip_showServerTooltip(eventForServerTooltip);\r\n        } else {\r\n            dwTooltip_showTooltip(text, width, height);\r\n        }\r\n    }, delay);\r\n    return false;\r\n\r\n}\r\n\r\n/**\r\n * Anzeige des Tooltips\r\n * Methode kann nur aus tooltip_delayShowTooltip aufgerufen werden.\r\n *\r\n * Im IE Quirksmodus kann es intern zu Verzögerungen kommen, wenn die Höhe des Viewports oder des Controls berechnet werden muss\r\n * Dies liegt an der tiefen Verschachtelung von Tabellen (> 16)\r\n * Im IE Loose Modus ist die Darstellung des Tooltips performant\r\n * @param text\r\n * @param point\r\n */\r\nfunction dwTooltip_showTooltip(text, width, height) {\r\n    if (dwTooltip_timeoutIntervalId != null) {\r\n        // Tooltip soll angezeigt werden - es ist noch kein onmouseout Event eingangen\r\n        try {\r\n            dwTooltip_createTooltip(width, height);\r\n            dwTooltip_updateTooltip(text, width, height);\r\n            dwTooltip_fadeInTooltip();\r\n        } catch (exception) {\r\n            // Framework_Logger ist zu diesem Zeitpunkt auch noch nicht initialisiert\r\n            // Daher gibt es keine Ausgabe an dieser Stelle\r\n            // framework_logger.log(\"Failed to create tooltip '\" + text + \"' (cause=\" + exception + \")\");\r\n        }\r\n    }\r\n}\r\n\r\nfunction dwTooltip_showServerTooltip(event) {\r\n    if (dwTooltip_timeoutIntervalId != null) {\r\n        var control = dwUtilsGetEventTarget(event);\r\n        if (control && dwDomHasAttribute(control, \"ontooltip\")) {\r\n            var tooltipCommand = dwDomGetDomAttribute(control, \"ontooltip\");\r\n            // Tooltip soll nun wirklich angezeigt werden. Den temporär gespeicherten Befehl für die Anzeige emulieren wir\r\n            // als wäre er direkt aus einem Eventlistener heraus aufgerufen und reichen das (ggf. geklonte) Event Objekt weiter\r\n            // das ggf. im Tooltip Befehl benötigt wird\r\n            var func = function(event) {\r\n                eval(tooltipCommand);\r\n            };\r\n            func(event);\r\n            // Nicht zwingend notwendig, aber wir räumen die Funktion auf um die Referenz explizit freizugeben\r\n            func = null;\r\n        }\r\n    }\r\n}\r\n\r\nfunction dwTooltip_updateTooltip(text, width, height) {\r\n    var popup = dwTooltip_getPopup();\r\n    var startingTag = dwDomGetInitialTagname(text);\r\n    if ((startingTag != \"\") && (dwUtilsStringEndsWith(text, \"</\" + startingTag + \">\", false))) {\r\n        // HTML Konstrukt - direkt als innerHTML setzen\r\n        popup.getControlForContent().innerHTML = text;\r\n    } else {\r\n        // Text Konstrukt - Alternative um das Layout des Tooltips vorzugeben.\r\n        // Diese Logik ist aus der alten tooltips.js unverändert übernommen (Fallback)\r\n        // Per default werden die Tooltips im HTML Format an den Client übermittelt\r\n        dwTooltip_setTextTooltip(text);\r\n    }\r\n    popup.setSize(width, height);\r\n    popup.setPosition(dwTooltip_getTooltipLocation());\r\n}\r\n\r\nfunction dwTooltip_fadeInTooltip() {\r\n    if (!dwTooltip_isTooltipVisible()) {\r\n        var popup = dwTooltip_getPopup();\r\n        // Wir müssen es schon mal anzeigen, um es richtig zu positionieren (damit es nicht rechts oder unten aus dem Fenster rausläuft)\r\n        popup.setInvisiblePosition();\r\n        popup.fadeIn();\r\n        popup.setPosition(dwTooltip_getTooltipLocation());\r\n    }\r\n}\r\n\r\nfunction dwTooltip_isTooltipVisible() {\r\n    var popup = dwTooltip_getPopup();\r\n    return popup.isVisible();\r\n}\r\n\r\nfunction dwTooltip_moveTooltip(event) {\r\n    if (!dwFrameworkInitFinished) {\r\n        return;\r\n    }\r\n    var popup = dwTooltip_getPopup();\r\n    if (popup.isVisible()) {\r\n        // Wir merken uns die letzte Position, damit nach dem Timeout der Tooltip an der richtigen Position angezeigt wird\r\n        dwTooltip_lastMousePointer = dwUtilsGetCurrentMousePositionPerEvent(event);\r\n        popup.setPosition(dwTooltip_getTooltipLocation());\r\n    }\r\n}\r\n\r\n/**\r\n * Blendet einen Tooltip aus.\r\n * Timer für die zeitverzögerte Anzeige eines Tooltips wird zurückgesetzt, sofern vorhanden.\r\n *\r\n * Auf diese Weise wird verhindert, dass ein Tooltip zeitverzögert angezeigt wird, dessen Element bereits verlassen wurde\r\n */\r\nfunction dwTooltip_hideTooltips() {\r\n    if (dwTooltip_timeoutIntervalId != null) {\r\n        clearTimeout(dwTooltip_timeoutIntervalId);\r\n        dwTooltip_timeoutIntervalId = null;\r\n    }\r\n    // Tooltip Komponente darf nicht aus dem DOM gelöscht werden.\r\n    // Bei Dropdown-Listen im Firefox wird bei der Mausbewegung über die Optionen jeweils ein\r\n    // onmouseout und onmouseover Event gefeuert. Löscht/Setzt man zu diesem Zeitpunkt ein Element\r\n    // im DOM Baum, wird das Auswahlfenster der Dropdown-Liste automatisch geschlossen.\r\n    var popup = dwTooltip_getPopup();\r\n    if (popup) {\r\n        popup.setVisible(false);\r\n    }\r\n}\r\n\r\nfunction dwTooltip_createTooltip(width, height) {\r\n    var popup = dwTooltip_getPopup();\r\n    if (!popup) {\r\n        // Framework_Logger ist zu diesem Zeitpunkt auch noch nicht initialisiert\r\n        // Daher gibt es keine Ausgabe an dieser Stelle\r\n        //framework_logger.log(\"Failed to find tooltip in cache. Skipped command.\");\r\n        return;\r\n    }\r\n    if (!popup.control) {\r\n        // Komponente noch nicht im DOM eingebunden. Wir erstellen uns das SPAN Element und fügen es dem Body hinzu\r\n        var control = document.createElement(\"span\");\r\n        control.setAttribute(\"id\", \"tooltipspan\");\r\n        control.className = \"guitooltip\";\r\n        // Tooltip wird nur für die Anzeige von Informationen verwendet. Events müssen nicht umgeleitet werden\r\n        dwPopup_wrapControl(control, DW_POPUP_TYPE.TOOLTIP, null);\r\n        popup.appendToBody();\r\n    }\r\n\r\n    popup.setSize(width, height);\r\n    popup.setVisible(false);\r\n}\r\n\r\n/**\r\n * Methode zum setzen von textuellen Inhalten (\\n, @IMAGE@ ...)\r\n * Diese Logik ist aus der alten tooltips.js unverändert übernommen (Fallback)\r\n * Per default werden die Tooltips im HTML Format an den Client übermittelt\r\n * @param text\r\n */\r\nfunction dwTooltip_setTextTooltip(text) {\r\n    // workaround => mozilla macht leere eintraege\r\n    var tmpstringarray = text.split(/\\n/);\r\n    var stringarray = new Array();\r\n    for (var i = 0; i < tmpstringarray.length; i++) {\r\n        if (tmpstringarray[i] != \"\") {\r\n            stringarray[stringarray.length] = tmpstringarray[i];\r\n        }\r\n    }\r\n    // Tooltip-Span ist in der Methode tooltip_showtooltip bereits erstellt und in den DOM Baum eingehängt worden\r\n    var tooltipspan = dwTooltip_getPopup().getControlForContent();\r\n    // Vorhandenes Tooltip-Element zurücksetzen (Inhalte löschen)\r\n    dwDomRemoveAllChildNodes(tooltipspan);\r\n    // Tooltip Nachricht schreiben\r\n    var docFrag = document.createDocumentFragment();\r\n    for (var i = 0; i < stringarray.length; i++) {\r\n        var tableNode = document.createElement(\"table\");\r\n        tableNode.setAttribute(\"border\", \"0\");\r\n        tableNode.setAttribute(\"cellspacing\", \"0\");\r\n        tableNode.setAttribute(\"cellpadding\", \"0\");\r\n        tableNode.style.backgroundColor = \"transparent\";\r\n        docFrag.appendChild(tableNode);\r\n        var tbodyNode = document.createElement(\"tbody\");\r\n        tableNode.appendChild(tbodyNode);\r\n        var trNode = document.createElement(\"tr\");\r\n        tbodyNode.appendChild(trNode);\r\n        var textValue = stringarray[i];\r\n        textValue.replace(/@NEWLINE@/g, \"\\n\");\r\n        textValue.replace(/@CRETURN@/g, \"\\n\");\r\n        while (textValue.indexOf(\"@IMAGE@\") > -1) {\r\n            var startIndex = textValue.indexOf(\"@IMAGE@\");\r\n            var stopIndex = textValue.indexOf(\"@/IMAGE@\");\r\n            var aSubstring = textValue.substring(0, startIndex);\r\n            if (aSubstring != \"\") {\r\n                var titleNode = document.createTextNode(aSubstring);\r\n                var tdNode = document.createElement(\"td\");\r\n                dwTooltip_setStyleDefaults(tdNode);\r\n                trNode.appendChild(tdNode);\r\n                tdNode.appendChild(titleNode);\r\n            }\r\n            aSubstring = textValue.substring(startIndex + \"@IMAGE@\".length, stopIndex);\r\n            var imgNode = document.createElement(\"img\");\r\n            imgNode.setAttribute(\"src\", \"../\" + aSubstring);\r\n            imgNode.setAttribute(\"border\", \"0\");\r\n            var tdNode = document.createElement(\"td\");\r\n            dwTooltip_setStyleDefaults(tdNode);\r\n            trNode.appendChild(tdNode);\r\n            tdNode.appendChild(imgNode);\r\n            textValue = textValue.substring(stopIndex + \"@/IMAGE@\".length);\r\n        }\r\n        if (textValue != \"\") {\r\n            var titleNode = document.createTextNode(textValue);\r\n            var tdNode = document.createElement(\"td\");\r\n            dwTooltip_setStyleDefaults(tdNode);\r\n            trNode.appendChild(tdNode);\r\n            tdNode.appendChild(titleNode);\r\n        }\r\n    }\r\n    tooltipspan.appendChild(docFrag);\r\n}\r\n\r\nfunction dwTooltip_setStyleDefaults(tdNode) {\r\n    tdNode.setAttribute(\"valign\", \"top\");\r\n    tdNode.style.backgroundColor = \"transparent\";\r\n    tdNode.style.verticalAlign = \"top\";\r\n    tdNode.style.whiteSpace = \"nowrap\";\r\n}\r\n\r\nfunction dwTooltip_getPopup() {\r\n    return dwPopup_getPopup(DW_POPUP_TYPE.TOOLTIP);\r\n}\r\n\r\nfunction dwTooltip_getTooltipLocation() {\r\n    return (dwTooltip_lastMousePointer) ? new DWPoint(dwTooltip_lastMousePointer.x + 16, dwTooltip_lastMousePointer.y + 5) : null;\r\n}\r\n\r\n/**\r\n * Tooltip Event darf nur einmal ausgelöst werden, danach muss die Event Propagation verhindert werden ...\r\n * @param event\r\n */\r\nfunction dwTooltip_isTooltipEventAllowed(event, currentTarget) {\r\n    if (!event || event.preventTooltip) { // Standard-Verfahren\r\n        // Tooltips werden durch mouseover ausgelöst. Das mouseover Event muss bis zu einem Event-Handler durchgereicht werden\r\n        // gleichermaßen muss verhindert werden, dass mehrere Tooltips angezeigt werden.\r\n        // Das erste Tooltip Event setzt das Flag \"preventTooltip\" -> Weitere Elemente in der Hierarchie ignorieren dann\r\n        // die Tooltip anzeige für dieses Event\r\n        return false;\r\n    }\r\n\r\n    var isJ2EEBrowser = typeof (framework_isJ2EEBrowser) != \"undefined\";\r\n    if (isJ2EEBrowser && framework_isIE8 && currentTarget) { // IE8 kann das Event-Objekt nicht verändern ...\r\n        // Ist ein Tooltip bereits bei einem Kind-Element ausgelöst worden wird ein weiteres auslösen verhindert ...\r\n        // Ist kein Abbruchkriterium bekannt (Control das aktuell das event hat) kann die Untersuchung nicht durchgeführt werden\r\n        var iterNode = dwUtilsGetEventTarget(event);\r\n        while ((iterNode != null) && (iterNode != currentTarget)) {\r\n\r\n            var eventHandler = dwDomGetEventsForType(iterNode, \"onmouseover\", true);\r\n            if (eventHandler && (eventHandler.indexOf(\"dwTooltip_delayShowTooltip\") > -1)) {\r\n                return false; // Prevent Event Propagation!\r\n            }\r\n            iterNode = iterNode.parentNode;\r\n        }\r\n    }\r\n    return true;\r\n}\n/*\r\n * Copyright (c) 2016 Docware GmbH\r\n */\r\n\r\nvar DW_HEAVYWEIGHT_POPUP_ENABLED = true;\r\n\r\n// Cache damit IFRAME Objekte nicht immer neu generiert werden müssen\r\nvar DW_POPUP_WRAPPER_CACHE = new Object(); // key == type | value == popup\r\n\r\nvar DW_POPUP_TYPE = {\r\n    TOOLTIP: \"tooltip\",\r\n    CONTEXTMENU: \"contextmenu\",\r\n    MENUBAR: \"menubar\",\r\n    VIEWER_TOOLTIP: \"viewertooltip\"\r\n};\r\nvar DW_POPUP_SHADOW_BORDERS = {\r\n    TOP: 2,\r\n    RIGHT: 2,\r\n    BOTTOM: 2,\r\n    LEFT: 0\r\n};\r\n\r\n/**\r\n * Baut die vordefinierten IFrame Wrapper für Tooltips / Contextmenü (rechte Maustaste) auf.\r\n * Diese Wrapper werden einmalig erzeugt und wiederverwendet\r\n */\r\nfunction buildPopupWrapperCache() {\r\n    for (var popupTypeKey in DW_POPUP_TYPE) {\r\n        var popupType = DW_POPUP_TYPE[popupTypeKey];\r\n        DW_POPUP_WRAPPER_CACHE[popupType] = __internal_dwPopup_createPopup(__internal_dwPopup_getWrapperId(popupType));\r\n    }\r\n}\r\n\r\n/**\r\n * Simple Bean für Speicherung der Wrapper-Informationen. Popup wird für Heavyweight und Lightweight verwendet\r\n * Bei Lightweight Popups sind die Attribute \"wrapper\" und \"document\" NULL\r\n *\r\n * Wird das Popup relativ zu einem anderen Objekt ausgerichtet (Referrer) wird dynamisch das Attribut 'referrer' gesetzt\r\n * @constructor\r\n */\r\nfunction DWPopup() {\r\n    this.__name = null;\r\n    this.wrapper = null;\r\n    this.control = null;\r\n    this.document = null;\r\n}\r\n\r\nDWPopup.prototype.getDocument = function() {\r\n    return this.document || document;\r\n};\r\nDWPopup.prototype.getControlForLayout = function() {\r\n    return this.wrapper || this.control; // Control für die Positionierung / Anpassung der Größe\r\n};\r\nDWPopup.prototype.getControlForContent = function() {\r\n    return this.control; // Control für die Darstellung des Inhalts (inkl. Border / Shadow)\r\n};\r\nDWPopup.prototype.isVisible = function() {\r\n    var control = this.getControlForLayout();\r\n    return control ? control.style.display != \"none\" : false;\r\n};\r\n\r\nDWPopup.prototype.setVisible = function(visible) {\r\n    var control = this.getControlForLayout();\r\n    if (control) {\r\n        // Wg. Chrome Reflow nur setzen wenn geändert\r\n        var newValue = (visible) ? \"block\" : \"none\";\r\n        if (newValue != control.style.display) {\r\n            control.style.display = newValue;\r\n        }\r\n    }\r\n};\r\nDWPopup.prototype.fadeIn = function() {\r\n    var layoutControl = this.getControlForLayout();\r\n    if (framework_isWithAnimations) {\r\n        dwUtilsSetOpacity(layoutControl, DWUTILS_FADE_OPACITY_START);\r\n    }\r\n    this.setVisible(true);\r\n    this.adjustWrapper();\r\n    dwUtilsFadeInControl(layoutControl.id, false, false);\r\n};\r\n\r\nDWPopup.prototype.setPosition = function(position) {\r\n    if (position) {\r\n        var layoutControl = this.getControlForLayout();\r\n        if ((layoutControl.parentNode != null) && (layoutControl.parentNode.offsetTop == 0)) {\r\n            // Ist das parent-Control am oberen Rand -> positionieren, relativ zu window\r\n            dwUtilsRepositionAbsolutePositionedControlInWindow(dwFrameworkFindSubmitForm(this.getControlForLayout().id), this.getControlForLayout(), position, 0, 0);\r\n        } else {\r\n            // Ist das parent-Control irgendwo in der Seite eingebaut (z.B. Lightweight->Sub-Menu) -> relativ zu parent\r\n            layoutControl.style.left = position.x + \"px\";\r\n            layoutControl.style.top = position.y + \"px\";\r\n        }\r\n    }\r\n};\r\n/**\r\n * Setzt Position relativ zu einem Caller (z.B. Sub Menu)\r\n */\r\nDWPopup.prototype.setChildPosition = function(childPopup, insetTop, insetLeft) {\r\n    var childContentControl = childPopup.getControlForContent();\r\n    var childLayoutControl = childPopup.getControlForLayout();\r\n    var caller = this.getDocument().getElementById(childContentControl.id);\r\n    var callerParentCoords = dwUtilsGetCoords(caller.parentNode, null);\r\n    var childPopupHeight = dwUtilsGetContentHeight(childLayoutControl);\r\n    var childPopupWidth = dwUtilsGetContentWidth(childLayoutControl);\r\n\r\n    var rootWindow = $(dwFrameworkGetRootWindowId());\r\n    var windowWidth = dwUtilsGetContentWidth(rootWindow);\r\n    var windowHeight = dwUtilsGetContentHeight(rootWindow);\r\n\r\n    // Manuelle Bestimmung der Location - rechterhand vom Popup-Fenster aus dem das Untermenü aufgerufen wird\r\n    // Bestimmung könnte ggf. in Popup Klasse eingebaut werden (setPositionByParent o.ä.)\r\n    var possibleChildPosition = new DWPoint(insetLeft, insetTop);\r\n    var possibleChildPositionInWindow = new DWPoint(insetLeft, insetTop);\r\n    if (this.wrapper) {\r\n        // Bei heavyweight Komponenten ist das Child Popup in einem IFrame (im Body des Hauptfenster) gerendert\r\n        // Position muss relativ zum viewport berechnet werden. Grundlage ist dabei die Position des MenuItem im Parent Popup.\r\n        possibleChildPositionInWindow.x += (this.getPosition().x + callerParentCoords.x);\r\n        possibleChildPositionInWindow.y += (this.getPosition().y + callerParentCoords.y);\r\n\r\n        possibleChildPosition = possibleChildPositionInWindow;\r\n    } else {\r\n        possibleChildPositionInWindow.x += callerParentCoords.x;\r\n        possibleChildPositionInWindow.y += callerParentCoords.y;\r\n    }\r\n    if (possibleChildPositionInWindow.y + childPopupHeight > windowHeight - 16) {\r\n        var diff = windowHeight - 16 - possibleChildPositionInWindow.y - childPopupHeight;\r\n        possibleChildPosition.y += diff;\r\n    }\r\n    if (possibleChildPositionInWindow.x + childPopupWidth > windowWidth - 16) {\r\n        var diff = windowWidth - 16 - possibleChildPositionInWindow.x - childPopupWidth;\r\n        possibleChildPosition.x += diff;\r\n    }\r\n\r\n    childPopup.setPosition(new DWPoint(possibleChildPosition.x, possibleChildPosition.y));\r\n};\r\n\r\nDWPopup.prototype.getPosition = function() {\r\n    var layoutControl = this.getControlForLayout();\r\n    var x = parseInt(layoutControl.style.left);\r\n    var y = parseInt(layoutControl.style.top);\r\n    return new DWPoint(x, y);\r\n};\r\nDWPopup.prototype.createChildPopup = function(childId, wrapperParent, eventRedirector) {\r\n//    if (this.child) {\r\n//        this.child.setVisible(false);\r\n//        this.child.removeFromBody();\r\n//    }\r\n\r\n    var doc = this.getDocument();\r\n    var callerId = dwUtilsStringBefore(childId, \"_\");\r\n    var caller = doc.getElementById(callerId);\r\n    if (caller) {\r\n        // Abprüfen, ob der Caller (der Menüeintrag aus dem das Child Popup heraus aufgerufen wurde) disabled ist\r\n        if (caller.disabled == true) {\r\n            return null; // Fenster darf nicht erzeugt werden\r\n        }\r\n    }\r\n    var childControl = doc.getElementById(childId);\r\n    return dwPopup_wrapControlWithoutCache(childControl, childId + \"_wrapper\", wrapperParent, eventRedirector);\r\n};\r\n\r\nDWPopup.prototype.close = function() {\r\n    if (this.clearHovers) {\r\n        this.clearHovers(this.getControlForContent());\r\n    }\r\n    if (this.closeSubmenus) {\r\n        this.closeSubmenus();\r\n    }\r\n    this.setVisible(false);\r\n    if (this.referrer) {\r\n        this.removeReferrer();\r\n    } else {\r\n        this.removeFromBody();\r\n    }\r\n};\r\n\r\n/**\r\n * Setzt einen Referrer. Das Popup wird relativ zum Referrer angezeigt (unterhalb). Verwendung findet dieser Mechanismus\r\n * z.B. für die Anzeige von Combobox-Popups\r\n * Bei Lightweight Popups wird das DOM Element aus der aktuellen DOM Position in den BODY verschoben\r\n * Bei Heavyweight Popups wird das DOM Element als Clone in den Wrapper eingefügt.\r\n *\r\n * Bei beiden Implementierungen (heavy vs. light) ist auf diese Weise das dargestellte Popup im BODY eingehängt und kann\r\n * absolut positioniert werden\r\n * @param referrer\r\n */\r\nDWPopup.prototype.setReferrer = function(referrer) {\r\n    this.referrer = referrer;\r\n    var originalControl = $(this.control.id);\r\n    var body = $(\"body\");\r\n    if (originalControl.parentNode && (originalControl.parentNode != body)) {\r\n        this.getControlForLayout().setAttribute(\"referrerId\", referrer.id);\r\n        this.control.style.top = \"0px\";\r\n        if (!this.wrapper) {\r\n            originalControl.parentNode.removeChild(originalControl);\r\n            body.appendChild(originalControl);\r\n        }\r\n    }\r\n    // Positionierung relativ zum Referrer\r\n    dwHelperPositionPopup(referrer, this);\r\n};\r\n/**\r\n * Entfernt den Referrer. Die Aktionen, die bei setReferrer umgesetzt wurden, werde rückgängig gemacht\r\n * Die Methode stellt sicher, dass das Popup implizit unsichtbar geschalten wird\r\n */\r\nDWPopup.prototype.removeReferrer = function() {\r\n    if (!dwPopup_isCachedPopup(this)) {\r\n        this.removeFromBody();\r\n    }\r\n    // Kommentar, warum dwUtilsIsDefined nötig ist von MM: Das Problem tritt nur in Firefox auf (zumindest nicht in IE).\r\n    // Es hängt zusammen mit dem setReferrer bzw. removeReferrer Mechanismus durch den die Komponente „umgehängt“ wird, von der eigentlichen Stelle in den Body (und umgekehrt).\r\n    // Das Problem ist allerdings, dass er sporadisch zwar sich aus dem parent entfernt, aber wenn man dann nochmal nach der id sucht findet man noch ein Vorkommen das\r\n    // eingehängt ist.. (wann in der Verkettung der Events hier etwas schief geht hab ich noch nicht 100% erkannt).\r\n    // Lösungsansätze die beide funktioniert hatten (entweder/oder):\r\n    // - beim removeReferrer nur einhängen, wenn $(this.control.id) nicht existiert nachdem es vom body entfernt wurde\r\n    // - beim setReferrer solange wiederholen bis wirklich kein Objekt mehr nach dem entfernen vorkommt, erst dann im Body einhängen\r\n    // Grund warum es am Ende nicht mehr klappte ist, dass am Ende ein unsichtbares Element an Original-Stelle existierte und ein weiteres\r\n    // mit gleicher ID im Body ... und viele Ereignisse auf die ID gehen ...\r\n    if (!this.wrapper && !dwUtilsIsDefined($(this.control.id))) {\r\n        this.referrer.appendChild(this.control);\r\n    }\r\n\r\n    this.control.style.display = \"none\";\r\n    this.referrer = null;\r\n};\r\n/**\r\n * Positioniert das Popup in einen nicht sichtbaren Bereich. Im Anschluss kann das Popup sichtbar geschalten\r\n * und korrekt positioniert werden. Ohne diesen Mechanismus wurde das Popup beim Einblenden kurz am Ende des Seiteninhalts\r\n * gezeichnet bevor es korrekt positioniert wurde (für die eigentliche Positionierung muss das Popup sichtbar sein)\r\n */\r\nDWPopup.prototype.setInvisiblePosition = function() {\r\n    if (!this.isVisible()) {\r\n        var layoutControl = this.getControlForLayout();\r\n        var treatAsIe8 = !dwFrameworkInitFinished; // Init noch nicht abgeschlossen. Browser kann ggf. noch nicht ermittelt worden sein. Wird wie IE8 behandelt\r\n        if (!treatAsIe8 || framework_isIE8 || framework_isIE9) {\r\n            // In IE8 wird ein resize Event ausgelöst wenn das Control unterhalb / rechts des vorherigen Viewport Bereichs geschoben wird\r\n            // Der Browser registriert tatsächliche Größenänderungen was zum automatischen schliessen von jeglichen Popups führt (Tooltip/Contextmenu ...)\r\n            // Aus diesem Grund wird im IE8 der Inhalt in den nicht-sichtbaren Bereich (oben/links) verschoben\r\n            // In IE9 wird auch ein resize Event ausgelöst (16 px Unterschied). Zur Vorsicht auch hier das alte Verfahren\r\n            layoutControl.style.top = (-dwUtilsGetViewportHeight()) + \"px\";\r\n            layoutControl.style.left = \"0px\";\r\n        } else {\r\n            // In IE10 wird ein zwar auch ein resize Event ausgelöst - aber ohne Änderung der Höhe/Breite -> keine negativen Seiteneffekte\r\n            // In IE11 und FF wird kein resize Event ausgelöst\r\n            layoutControl.style.top = (dwUtilsGetViewportHeight() + 200) + \"px\";\r\n        }\r\n    }\r\n};\r\nDWPopup.prototype.appendToBody = function() {\r\n    var layoutControl = this.getControlForLayout();\r\n    var alreadyAppended = (layoutControl.parentNode != null);\r\n    if (!alreadyAppended) {\r\n        var body = document.getElementsByTagName(\"body\")[0];\r\n        body.appendChild(this.getControlForLayout());\r\n    }\r\n};\r\nDWPopup.prototype.removeFromBody = function() {\r\n    var body = document.getElementsByTagName(\"body\")[0];\r\n    var layoutControl = this.getControlForLayout();\r\n    if (!dwPopup_isCachedPopup(this) && (layoutControl.parentNode == body)) {\r\n        body.removeChild(this.getControlForLayout());\r\n        if (this.wrapper) {\r\n            // Selektion einer Eingabe-Komponente kann fehlschlagen nachdem der iframe entfernt wurde\r\n            // Der Fokus wird explizit auf die zuletzt fokussierte Komponente gesetzt (und damit das richtige window)\r\n            __internal_resetFocus();\r\n        }\r\n    }\r\n};\r\n/**\r\n * Passt den Inhalt (z.B. SPAN / DIV) im Iframe an den Wrapper an.\r\n * Hat der Wrapper keine feste Größe in px, wird keine Aktion ausgeführt\r\n */\r\nDWPopup.prototype.adjustContent = function() {\r\n    if (this.wrapper && this.control) {\r\n        this.control.style.width = this.wrapper.style.width;\r\n        this.control.style.height = this.wrapper.style.height;\r\n\r\n        if (this.wrapper.style.width != \"auto\") {\r\n            this.wrapper.style.width = (parseInt(this.wrapper.style.width) + DW_POPUP_SHADOW_BORDERS.LEFT + DW_POPUP_SHADOW_BORDERS.RIGHT) + \"px\";\r\n        }\r\n        if (this.wrapper.style.height != \"auto\") {\r\n            this.wrapper.style.height = (parseInt(this.wrapper.style.height) + DW_POPUP_SHADOW_BORDERS.TOP + DW_POPUP_SHADOW_BORDERS.BOTTOM) + \"px\";\r\n        }\r\n    }\r\n};\r\n/**\r\n * Passt den Wrapper an den Inhalt an\r\n * Bei 'auto' Wert für width/height wird dieser ermittelt (offsetHeight/offsetWidth) und für den Wrapper übernommen\r\n */\r\nDWPopup.prototype.adjustWrapper = function() {\r\n    if (this.wrapper && this.control) {\r\n        if ((this.control.style.width == \"\") || (this.control.style.width == \"auto\") || (this.wrapper.style.width == \"auto\")) {\r\n            var width = (framework_isIE8 || framework_isIELegacyMode) ? this.control.clientWidth : this.control.offsetWidth;\r\n            this.wrapper.style.width = (width + DW_POPUP_SHADOW_BORDERS.LEFT + DW_POPUP_SHADOW_BORDERS.RIGHT) + \"px\";\r\n        }\r\n        if ((this.control.style.height == \"\") || (this.control.style.height == \"auto\") || (this.wrapper.style.height == \"auto\")) {\r\n            var height = (framework_isIE8 || framework_isIELegacyMode) ? this.control.clientHeight : this.control.offsetHeight;\r\n            this.wrapper.style.height = (height + DW_POPUP_SHADOW_BORDERS.TOP + DW_POPUP_SHADOW_BORDERS.BOTTOM) + \"px\";\r\n        }\r\n        this.wrapper.style.maxWidth = null;\r\n        this.wrapper.style.maxHeight = null;\r\n    }\r\n};\r\n/**\r\n * Setzt eine fixe Größe (in Pixel). Bei '-1' wird intern der Wert auf 'auto' gesetzt.\r\n * Bei Heavyweight Popups wird der Inhalt an die Größe des Wrappers angeglichen\r\n * @param width\r\n * @param height\r\n */\r\nDWPopup.prototype.setSize = function(width, height) {\r\n    var layoutControl = this.getControlForLayout();\r\n    var newWidth = \"auto\";\r\n    if (width && (width > 0)) {\r\n        if (this.wrapper) {\r\n            this.wrapper.style.maxWidth = null;\r\n        }\r\n        newWidth = width;\r\n        if (framework_isIELegacyMode && !this.isHeavyWeight()) {\r\n            var widthFilter = dwUtilsGetStyle(layoutControl, \"filter\") || \"\";\r\n            if (widthFilter && widthFilter.indexOf(\"Microsoft.Shadow\") > -1) {\r\n                newWidth -= parseInt(dwUtilsStringAfter(widthFilter, \"Strength=\")) || 0;\r\n            }\r\n        }\r\n        newWidth = newWidth + \"px\";\r\n    }\r\n    var newHeight = \"auto\";\r\n    if (height && (height > 0)) {\r\n        if (this.wrapper) {\r\n            this.wrapper.style.maxHeight = null;\r\n        }\r\n        newHeight = height;\r\n        if (framework_isIELegacyMode && !this.isHeavyWeight()) {\r\n            // In bestimmten Konstellationen hat der Browser (im Legacy Modus, mehrere Verschachtelungen) den Schatten\r\n            // zur gesetzten/ausgelesenen Höhe addiert. Bei jedem erneuten Öffnen wurde der Dialog dadurch größer ...\r\n            var heightFilter = dwUtilsGetStyle(layoutControl, \"filter\") || \"\";\r\n            if (heightFilter && heightFilter.indexOf(\"Microsoft.Shadow\") > -1) {\r\n                newHeight -= parseInt(dwUtilsStringAfter(heightFilter, \"Strength=\")) || 0;\r\n            }\r\n        }\r\n        newHeight = newHeight + \"px\";\r\n    }\r\n    layoutControl.style.width = newWidth;\r\n    layoutControl.style.height = newHeight;\r\n    this.adjustContent();\r\n};\r\n\r\nDWPopup.prototype.getBounds = function() {\r\n    var layoutControl = this.getControlForLayout();\r\n    var bounds = dwUtilsBoundingClientRectAsDwRectangle(layoutControl);\r\n    return bounds;\r\n};\r\n\r\nDWPopup.prototype.containsNode = function(node) {\r\n    return dwUtilsGetNavigationPath(node, this.getControlForContent(), DWDOM_NAVIGATION_PATH_DIRECTION.TOP_DOWN) != null;\r\n};\r\n\r\nDWPopup.prototype.referrerContainsNode = function(node) {\r\n    return dwUtilsGetNavigationPath(node, this.referrer, DWDOM_NAVIGATION_PATH_DIRECTION.TOP_DOWN) != null;\r\n};\r\n\r\nDWPopup.prototype.isHeavyWeight = function() {\r\n    return __internal_dwPopup_isHeavyweight() && this.supportsHeavyWeight();\r\n};\r\n\r\nDWPopup.prototype.supportsHeavyWeight = function() {\r\n    // Im Kompatibilitätsmodus (legacy mode) werden die Größe des Contextmenu und Menubar Einträge falsch berechnet (Darstellung 0x0)\r\n    // Hier wird der IFrame Mechanismus (heavyweight) explizit umgangen.\r\n    return (!framework_isIELegacyMode ||\r\n            ((this.__name.indexOf(\"_submenu\") == -1) &&\r\n             (this.__name.indexOf(DW_POPUP_TYPE.CONTEXTMENU) == -1) &&\r\n             (this.__name.indexOf(DW_POPUP_TYPE.MENUBAR) == -1)));\r\n};\r\n\r\nDWPopup.prototype.__internal_prepareHeavyWeightPopup = function(wrapperId, wrapperParent) {\r\n    if (!this.isHeavyWeight()) {\r\n        return this;\r\n    }\r\n    var wrapper = document.createElement(\"iframe\");\r\n    wrapper.setAttribute(\"id\", wrapperId);\r\n    wrapper.style.position = \"absolute\";\r\n    wrapper.style.backgroundColor = \"transparent\";\r\n    wrapper.frameBorder = \"0px\";\r\n    wrapper.style.border = 0;\r\n    wrapper.scrolling = \"no\";\r\n    // Bei der \"Offset\" Bestimmung der Elemente im IFrame wirkt sich (sporadisch) dessen Default Size aus (300 x 150)\r\n    // Die Größe des IFrames wird initial stark limitiert, und erst bei setSize\r\n    wrapper.style.maxWidth = \"1px\";\r\n    wrapper.style.maxHeight = \"1px\";\r\n    wrapper.style.display = \"none\";\r\n    if (wrapperParent) {\r\n        wrapperParent.appendChild(wrapper);\r\n    } else {\r\n        document.getElementsByTagName(\"body\")[0].appendChild(wrapper);\r\n    }\r\n    var doc = __internal_dwPopup_computeHeavyweightDocument(wrapper);\r\n    if (doc != null) {\r\n        doc.open();\r\n        doc.write(framework_doctype);\r\n        doc.close();\r\n        var globalHead = document.getElementsByTagName(\"head\")[0];\r\n        var head = doc.getElementsByTagName(\"head\")[0];\r\n        if (framework_isIE) {\r\n            var meta = doc.createElement(\"meta\");\r\n            dwDomSetDomAttribute(meta, \"http-equiv\", \"X-UA-Compatible\");\r\n            dwDomSetDomAttribute(meta, \"content\", \"IE=\" + parseInt(framework_browserVersion));\r\n            head.appendChild(meta);\r\n        }\r\n\r\n        var linkTags = globalHead.getElementsByTagName(\"link\");\r\n        for (var i = 0; i < linkTags.length; i++) {\r\n            var linkTag = linkTags[i];\r\n            if (linkTag.rel == \"stylesheet\") {\r\n                var link = doc.createElement(\"link\");\r\n                dwDomSetDomAttribute(link, \"rel\", \"stylesheet\");\r\n                dwDomSetDomAttribute(link, \"type\", \"text/css\");\r\n                dwDomSetDomAttribute(link, \"href\", dwDomGetDomAttribute(linkTag, \"href\"));\r\n                head.appendChild(link);\r\n            }\r\n        }\r\n        // SCRIPT Tags sollten nicht im Wrapper definiert sein - ansonsten ist nicht gewährleistet, dass die globalen\r\n        // Objekte korrekt gesetzt sind.\r\n        // Funktionen sollten immer auf den ursprünglichen DOM Elementen ausgeführt werden (event-redirection)\r\n//            var baseScript = doc.createElement(\"script\");\r\n//            dwDomSetDomAttribute(baseScript, \"type\", \"text/javascript\");\r\n//            dwDomSetDomAttribute(baseScript, \"src\", \"WEB-RES/js/base.js\"); <= Mittlerweile sind die JS Dateien in der URL versioniert, das würde also so nicht mehr funktionieren\r\n//            head.appendChild(baseScript);\r\n        var body = doc.getElementsByTagName(\"body\")[0];\r\n        var html = body.parentNode;\r\n        html.style.backgroundColor = \"transparent\";\r\n        body.style.backgroundColor = \"transparent\";\r\n\r\n        this.wrapper = wrapper;\r\n        this.document = doc;\r\n        // Beim entfernen des Wrappers aus dem BODY wird der Seiten-Inhalt sofort zurückgesetzt (kein eingebundenes CSS, kein Body-Inhalt, ...)\r\n        // da kein src gesetzt ist\r\n//            popup.removeFromBody();\r\n    }\r\n    return this;\r\n};\r\n\r\nfunction dwPopup_isCachedPopup(popup) {\r\n    for (var cachedPopupKey in DW_POPUP_WRAPPER_CACHE) {\r\n        if (popup == DW_POPUP_WRAPPER_CACHE[cachedPopupKey]) {\r\n            return true;\r\n        }\r\n    }\r\n    return false;\r\n}\r\n\r\nfunction dwPopup_isCachedPopUpByWrapperId(popupId) {\r\n    for (var cachedPopupKey in DW_POPUP_WRAPPER_CACHE) {\r\n        var wrapper = DW_POPUP_WRAPPER_CACHE[cachedPopupKey].wrapper;\r\n        if (wrapper && popupId == wrapper.id) {\r\n            return true;\r\n        }\r\n    }\r\n    return false;\r\n}\r\n\r\n/**\r\n * Injiziert das Control in einen vordefinierten Wrapper (siehe verfügbare Popup Typen)\r\n * @param control       darzustellendes Control\r\n * @param popupType     gültiger Popup-Typ\r\n * @param eventRedirector Funktion zur Umleitung der Events (ausgelöst im IFrame) - zur Weiterleitung an den Context der Hauptseite\r\n *                        Hinweis: Javascript (base.js / viewer.js) steht nur in der Hauptseite zur Verfügung\r\n * @return DWPopup\r\n */\r\nfunction dwPopup_wrapControl(control, popupType, eventRedirector) {\r\n    var popup = DW_POPUP_WRAPPER_CACHE[popupType];\r\n    return __internal_dwPopup_wrapControl(popup, control, eventRedirector);\r\n}\r\n\r\n/**\r\n * Injiziert das Control in einen Wrapper. Wrapper werden dynamisch erzeugt und müssen am Ende über z.B. removeFromBody entfernt werden\r\n * Ist ein Wrapper für das Control in der aktuellen Seite bereits eingebaut wird dieser wiederverwendet.\r\n * @param control\r\n * @param wrapperId         entspricht i.d.R. <control.id>_wrapper\r\n * @param wrapperParent     z.B. window.parent um einen Wrapper für ein submenu im Hauptfenster einzuhängen, sonst NULL\r\n * @param eventRedirector\r\n * @return DWPopup\r\n */\r\nfunction dwPopup_wrapControlWithoutCache(control, wrapperId, wrapperParent, eventRedirector) {\r\n    var popup = dwPopup_getPopupById(control.id) || __internal_dwPopup_createPopup(wrapperId, wrapperParent);\r\n    return __internal_dwPopup_wrapControl(popup, control, eventRedirector);\r\n}\r\n\r\nfunction __internal_dwPopup_wrapControl(popup, control, eventRedirector) {\r\n    if (popup.isHeavyWeight()) {\r\n        if (!popup.document) {\r\n            // bei einem Wechsel der Seite (ausblenden / neuladen) kann ggf. das document undefined sein\r\n            // Zugriff auf den Body ist dann nicht mehr möglich (geteElementsByTagName) -> vorher Abbruch\r\n            popup.control = control;\r\n            return popup;\r\n        }\r\n        var body = popup.document.getElementsByTagName(\"body\")[0];\r\n        var dwParentElement = control.dwParentElement;\r\n        dwDomRemoveAllChildNodes(body);\r\n        if (control.parentNode) {\r\n            // Bereits eingebaut ...\r\n            control = dwDomParseStringToNodes(control.outerHTML);\r\n        }\r\n        control.style.display = \"block\";\r\n        body.appendChild(control);\r\n        if (eventRedirector) {\r\n            eventRedirector(popup, control);\r\n        }\r\n        var zIndex = dwUtilsGetStyle(control, \"z-index\");\r\n        if ((zIndex == null) || (zIndex == \"\")) {\r\n            zIndex = 0;\r\n        }\r\n        popup.wrapper.style.zIndex = zIndex;\r\n    }\r\n\r\n    // dwParentElement merken, sonst wird u.U. fälschlicherweise das Contextmenü im dwHelperCloseCurrentlyOpenedContextMenu geschlossen (nach OnScroll-Event)\r\n    if (!control.dwParentElement) {\r\n        control.dwParentElement = dwParentElement;\r\n    }\r\n    popup.control = control;\r\n    return popup;\r\n}\r\n\r\n/**\r\n * Leitet die ausgelösten Events zu einem anderen Event-Handler um. 'this' kann explizit für die Event Verarbeitung vorgegeben werden\r\n * @param event\r\n * @param eventTarget\r\n * @param thisScope\r\n */\r\nfunction dwPopup_redirectEvent(event, eventTarget, thisScope) {\r\n    if (!eventTarget) {\r\n        return;\r\n    }\r\n    event = dwFrameworkGetEvent(event);\r\n    var func = eventTarget[\"on\" + event.type];\r\n    if (func) {\r\n        func.apply(thisScope, new Array(event));\r\n    }\r\n}\r\n\r\nfunction dwPopup_getPopup(popupType) {\r\n    return DW_POPUP_WRAPPER_CACHE[popupType];\r\n}\r\n\r\nfunction dwPopup_getPopupById(id, controlId) {\r\n    var popup = new DWPopup();\r\n    popup.__name = id;\r\n    if (popup.isHeavyWeight()) {\r\n        popup.wrapper = $(id + \"_wrapper\");\r\n        if (!popup.wrapper) {\r\n            return null;\r\n        }\r\n        popup.document = __internal_dwPopup_computeHeavyweightDocument(popup.wrapper);\r\n    }\r\n    controlId = controlId || id;\r\n    popup.control = popup.getDocument().getElementById(controlId);\r\n    var referrerId = popup.getControlForLayout().getAttribute(\"referrerId\");\r\n    if (referrerId) {\r\n        popup.referrer = $(referrerId);\r\n    }\r\n    return popup;\r\n}\r\n\r\nfunction __internal_dwPopup_getWrapperId(popupType) {\r\n    return popupType + \"_wrapper\";\r\n}\r\n\r\nfunction __internal_dwPopup_isHeavyweight() {\r\n    return DW_HEAVYWEIGHT_POPUP_ENABLED && (framework_isIE) && (framework_isIEHeavyWeightPopupAllowed);\r\n}\r\n\r\nfunction __internal_dwPopup_createPopup(wrapperId, wrapperParent) {\r\n    var popup = ((wrapperId.indexOf(DW_POPUP_TYPE.CONTEXTMENU) == 0) || (wrapperId.indexOf(DW_POPUP_TYPE.MENUBAR) == 0)) ?\r\n                new DWMenuPopup() :\r\n                new DWPopup();\r\n    popup.__name = wrapperId;\r\n    if (popup.isHeavyWeight()) {\r\n        return popup.__internal_prepareHeavyWeightPopup(wrapperId, wrapperParent);\r\n    } else {\r\n        return popup;\r\n    }\r\n}\r\n\r\nfunction __internal_dwPopup_computeHeavyweightDocument(wrapper) {\r\n    var doc = null;\r\n    if (wrapper.contentDocument) {\r\n        doc = wrapper.contentDocument;\r\n    } else if (wrapper.contentWindow && wrapper.contentWindow.document) {\r\n        doc = wrapper.contentWindow.document;\r\n    } else {\r\n        doc = wrapper.document;\r\n    }\r\n    return doc;\r\n}\r\n\r\nfunction __internal_resetFocus() {\r\n    var focusComponentId = \"focus_wrapper\";\r\n    if (!$(focusComponentId)) {\r\n        // Beim Entfernen eines IFrames verschluckt sich der IE - Eingabekomponenten funktionieren danach nicht mehr korrekt\r\n        // KeyCodes werden noch registriert, allerdings wirken sich die Eingaben nicht mehr auf den value aus\r\n        // Die zuletzt fokussierte Komponente wird fokussiert. Schlägt dieser Versuch fehl, wird eine Dummy-Eingabekomponente\r\n        // fokussiert und selektiert - das Verhalten des IE ist danach wieder erwartungsgemäß\r\n        var component = document.createElement(\"input\");\r\n        dwDomSetDomAttribute(component, \"type\", \"text\");\r\n        dwDomSetDomAttribute(component, \"id\", focusComponentId);\r\n        dwDomSetDomAttribute(component, \"name\", focusComponentId);\r\n        dwDomSetStyle(component, \"position\", \"absolute\");\r\n        dwDomSetStyle(component, \"left\", \"-10px\");\r\n        dwDomSetStyle(component, \"top\", \"-10px\");\r\n        dwDomSetStyle(component, \"width\", \"0px\");\r\n        dwDomSetStyle(component, \"height\", \"0px\");\r\n        dwDomSetStyle(component, \"border\", \"0\");\r\n        dwDomSetStyle(component, \"padding\", \"0\");\r\n        dwDomSetStyle(component, \"margin\", \"0\");\r\n        $(\"body\").appendChild(component);\r\n    }\r\n    var focusSuccessful = dwHelperTryFocusOnNode(focusComponentId);\r\n    $(focusComponentId).select();\r\n}\r\n\r\nDWMenuPopup.prototype = new DWPopup();\r\n\r\nfunction DWMenuPopup() {\r\n    var selectionPath = new Array();\r\n    var openedSubmenus = new Object();\r\n\r\n    this.selectMenuItem = function(menuItemId) {\r\n        var menuItem = $(menuItemId);\r\n        var newSelectionPath = new Array();\r\n        var node = menuItem;\r\n        while ((node != null) && node.tagName && (node.tagName.toLowerCase() != \"form\")) {\r\n            if (node.id) {\r\n                newSelectionPath.unshift(node.id);\r\n            }\r\n            node = node.parentNode;\r\n        }\r\n\r\n        var firstDifference = 0;\r\n\r\n        for (var i = firstDifference; i < newSelectionPath.length; i++) {\r\n            if ((i < selectionPath.length) && (newSelectionPath[i] == selectionPath[i])) {\r\n                firstDifference++;\r\n            } else {\r\n                break;\r\n            }\r\n        }\r\n//        framework_logger.log(\"First diff: \" + firstDifference);\r\n//        framework_logger.log(\"Old: \" + selectionPath);\r\n//        framework_logger.log(\"New: \" + newSelectionPath);\r\n        var previousSelectionCount = selectionPath.length;\r\n        for (i = (previousSelectionCount - 1); i >= firstDifference; i--) {\r\n            var previousItemId = selectionPath[i];\r\n            var previousSubmenu = $(previousItemId + \"_submenu\");\r\n            if (previousSubmenu) {\r\n                var previousSubmenuPopup = dwPopup_getPopupById(previousSubmenu.id);\r\n                if (previousSubmenuPopup) {\r\n                    previousSubmenuPopup.close();\r\n                    openedSubmenus[previousSubmenu.id] = null;\r\n                    delete openedSubmenus[previousSubmenu.id];\r\n                }\r\n            }\r\n\r\n            var parentItemId = selectionPath[selectionPath.length - 2];\r\n            var parent = $(parentItemId);\r\n            if (parent && (parent.className == \"guimenupopup\")) {\r\n                var previousItem = (dwPopup_getPopupById(parentItemId) || this).getDocument().getElementById(previousItemId);\r\n                if (previousItem) {\r\n//                    framework_logger.log(\"Remove class from \" + previousItemId);\r\n                    dwDomRemoveClass(previousItem, \"guimenuitem-hovered\");\r\n                }\r\n            }\r\n\r\n            selectionPath.pop();\r\n        }\r\n\r\n        for (i = firstDifference; i < newSelectionPath.length; i++) {\r\n            var newItemId = newSelectionPath[i];\r\n            selectionPath.push(newItemId);\r\n            var parentItemId = selectionPath[selectionPath.length - 2];\r\n            var parent = $(parentItemId);\r\n            if (parent && (parent.className == \"guimenupopup\")) {\r\n//                framework_logger.log(\"Add class to \" + newItemId);\r\n                var newItem = (dwPopup_getPopupById(parentItemId) || this).getDocument().getElementById(newItemId);\r\n                if (!newItem) {\r\n                    continue;\r\n                } // kann bei Aufruf via Mnemonic vorkommen\r\n                dwDomAddClass(newItem, \"guimenuitem-hovered\");\r\n                if (framework_isIE8 || framework_isIELegacyMode) {\r\n                    newItem.offsetWidth; // man muss es nicht verstehen ...\r\n                }\r\n            }\r\n        }\r\n\r\n        var currentItemId = selectionPath[selectionPath.length - 1];\r\n        if ($(currentItemId + \"_submenu\")) {\r\n//            framework_logger.log(\"Choose entry from path: \" + selectionPath)\r\n            var parentMenu = selectionPath[selectionPath.length - 2];\r\n            var parentPopup = dwPopup_getPopupById(parentMenu) || this;\r\n            var childPopup = parentPopup.createChildPopup(currentItemId + \"_submenu\", null, dwHelperRedirectContextMenuEventsToWrapper);\r\n            openedSubmenus[parentMenu] = childPopup;\r\n            childPopup.setInvisiblePosition();\r\n            childPopup.setVisible(true);\r\n//            childPopup.adjustWrapper();\r\n//            parentPopup.setChildPosition(childPopup, -3, 0);\r\n            setTimeout(function() {\r\n                childPopup.adjustWrapper();\r\n                parentPopup.setChildPosition(childPopup, -3, 0);\r\n            }, 50); // rendering/repaint ist manchmal verzögert/zu langsam\r\n        }\r\n    };\r\n    this.isMenuItemClickable = function() {\r\n        var currentItemId = selectionPath[selectionPath.length - 1];\r\n        return !($(currentItemId + \"_submenu\"));\r\n    };\r\n\r\n    this.closeSubmenus = function() {\r\n        for (var id in openedSubmenus) {\r\n            if (openedSubmenus.hasOwnProperty(id)) {\r\n                var openedSubmenu = openedSubmenus[id];\r\n                openedSubmenu.setVisible(false);\r\n                this.clearHovers(openedSubmenu.getControlForContent());\r\n                if (openedSubmenu.referrer) {\r\n                    openedSubmenu.removeReferrer();\r\n                } else {\r\n                    openedSubmenu.removeFromBody();\r\n                }\r\n            }\r\n        }\r\n    };\r\n\r\n    this.clearHovers = function(menu) {\r\n        if (!menu) {\r\n            return;\r\n        }\r\n        // div guimenupopup -> table -> tbody -> tr guimenuitem\r\n        var menuiItems = menu.children[0].children[0];\r\n        for (var i = 0; i < menuiItems.childElementCount; i++) {\r\n            dwDomRemoveClass(menuiItems.children[i], 'guimenuitem-hovered');\r\n        }\r\n    };\r\n\r\n    /**\r\n     * Methode zur Bestimmung ob der Knoten innerhalb des aktuellen Popups (oder damit verbundenen) liegt\r\n     *\r\n     * Basis Implementierung aus DWPopup muss hierzu überlagert werden, da DWPopup keine Verwaltung der offenen Kinder hat\r\n     * @param node\r\n     * @param includeSubmenus\r\n     * @return {Boolean}\r\n     */\r\n    this.containsNode = function(node, includeSubmenus) {\r\n        var containsNode = dwUtilsGetNavigationPath(node, this.getControlForContent(), DWDOM_NAVIGATION_PATH_DIRECTION.TOP_DOWN) != null;\r\n        if (!includeSubmenus || containsNode) {\r\n            return containsNode;\r\n        }\r\n        for (var id in openedSubmenus) {\r\n            if (openedSubmenus.hasOwnProperty(id)) {\r\n                var openedSubmenu = openedSubmenus[id];\r\n                var submenuContainsNode = openedSubmenu.containsNode(node, false);\r\n                if (submenuContainsNode) {\r\n                    return true;\r\n                }\r\n            }\r\n        }\r\n        return false;\r\n    };\r\n}\r\n\n/*\r\n * Copyright (c) 2017 Docware GmbH\r\n */\r\nvar DWTABLECOLUMNRESIZE_DELAY = 10;\r\nvar dwTableColumnResizeColumnIndex = null;\r\nvar dwTableColumnResizeColumnIndexWithFixedColumns = null;\r\n// Startposition des Drag-Vorgangs\r\nvar dwTableColumnResizeDragStartCoords = null;\r\nvar dwTableColumnResizeInitialColumnWidth = null;\r\nvar dwTableColumnResizeInitialFixedTableWidth = null;\r\n\r\n// Die Id der GuiTable\r\nvar dwTableColumnResizeDragUniqueId = null;\r\n\r\n// Fixierte Spalten oder scrollbare Spalten?\r\nvar dwTableColumnResizeDragFixedColumn = false;\r\n\r\n// Die Id vom EventHandler\r\nvar dwTableColumnResizeDragEventHandlerComponentId = null;\r\n\r\nvar dwTableColumnResizeHeaderCell = null;\r\nvar dwTableColumnResizeFixedTable = null;\r\nvar dwTableColumnResizeColumnCount = 0;\r\n\r\n// Für den Inhalt\r\nvar dwTableColumnContentResizeRuns = false;\r\nvar dwTableColumnContentResizeNewValue = null;\r\n\r\nfunction dwTableColumnResizeInitDragAndDrop() {\r\n    // Auf body sind Listener registriert für den 'auto close' Mechanismus von Popup-Fenstern\r\n    // Alle Mouse-Events werden ab Body automatisch geschluckt und dringen nicht mehr zum document durch\r\n    // Body erstreckt sich auf 100% des Viewports und wird als Ersatz für document verwendet\r\n    var body = $(\"body\");\r\n    dwDomAddEvent(body, \"onmousemove\", \"dwTableColumnResizeDragEvent(event);\", false);\r\n}\r\n\r\nfunction dwTableColumnResizeDragStartEvent(event, eventHandlerComponentId, uniqueId, index, indexWithFixedColumns, isFixedColumn) {\r\n    if (dwTableColumnResizeColumnIndex != null) {\r\n        return;\r\n    }\r\n    dwFrameworkPreventDefaultBehaviour(event);\r\n    dwTableColumnResizeDragStartCoords = dwTableColumnResizeGetPageCoordinates(event);\r\n    dwTableColumnResizeColumnIndex = index;\r\n    dwTableColumnResizeColumnIndexWithFixedColumns = indexWithFixedColumns;\r\n    dwTableColumnResizeDragEventHandlerComponentId = eventHandlerComponentId;\r\n    dwTableColumnResizeDragUniqueId = uniqueId;\r\n    dwTableColumnResizeDragFixedColumn = isFixedColumn;\r\n    dwTableColumnResizeHeaderCell = getHeaderCell();\r\n    dwTableColumnResizeColumnCount = getHeaderColumnCount();\r\n    dwTableColumnResizeInitialColumnWidth = dwTableColumnResizeHeaderCell.offsetWidth;\r\n    dwTableColumnContentResizeNewValue = dwTableColumnResizeInitialColumnWidth;\r\n\r\n    if (isFixedColumn) {\r\n        dwTableColumnResizeFixedTable = $(dwTableColumnResizeDragUniqueId + \"_enclosingFixedTable\");\r\n        if (dwTableColumnResizeFixedTable) {\r\n            dwTableColumnResizeInitialFixedTableWidth = dwTableColumnResizeFixedTable.offsetWidth;\r\n        }\r\n    }\r\n}\r\n\r\nfunction getHeaderRow() {\r\n    var headerTable = $(dwTableColumnResizeDragUniqueId + (dwTableColumnResizeDragFixedColumn ? \"_fixedHeaderTable\" : \"_headerTable\"));\r\n    var rowOrTBody = dwDomGetChildAtIndex(headerTable, 0);\r\n    var row = rowOrTBody;\r\n    if (rowOrTBody.nodeName.toLowerCase() == \"tbody\") {\r\n        row = dwDomGetChildAtIndex(rowOrTBody, 0);\r\n    }\r\n    return row;\r\n}\r\n\r\nfunction getHeaderCell() {\r\n    var row = getHeaderRow();\r\n    var td = dwDomGetChildAtIndex(row, dwTableColumnResizeColumnIndex);\r\n    var div = dwDomGetChildAtIndex(td, 0);\r\n    if (dwTableColumnResizeColumnIndex == 0) {\r\n        return dwDomGetChildAtIndex(div, 0);\r\n    } else {\r\n        return dwDomGetChildAtIndex(div, 1);\r\n    }\r\n\r\n}\r\n\r\nfunction getHeaderColumnCount() {\r\n    return dwDomGetElementChildNodes(getHeaderRow()).length;\r\n}\r\n\r\nfunction getRealTableColumnWidth(headerColumnIdx, headerColumnWidth) {\r\n    if ((headerColumnIdx != (dwTableColumnResizeColumnCount - 1)) || dwTableColumnResizeDragFixedColumn) {\r\n        return headerColumnWidth;\r\n    }\r\n    var contentDiv = $(dwTableColumnResizeDragUniqueId + \"_contentDiv\");\r\n    if (dwUtilsHasVerticalOverflow(contentDiv)) {\r\n        headerColumnWidth -= dwUtilsGetScrollbarWidth(contentDiv);\r\n    }\r\n    return headerColumnWidth;\r\n}\r\n\r\nfunction dwTableColumnResizeDragEvent(event) {\r\n    if (dwTableColumnResizeColumnIndex == null) {\r\n        return;\r\n    }\r\n\r\n    // Berechne die Koordinaten der Mausbewegung\r\n    var newCoords = dwTableColumnResizeGetPageCoordinates(event);\r\n    // Neue Größen für die Elemente berechnen\r\n    var difference = newCoords[0] - dwTableColumnResizeDragStartCoords[0];\r\n    var newWidthInt = dwTableColumnResizeInitialColumnWidth + difference;\r\n    if (newWidthInt < 16) {\r\n        newWidthInt = 16;\r\n    }\r\n    var newWidthPx = newWidthInt + \"px\";\r\n    dwTableColumnResizeHeaderCell.style.width = newWidthPx;\r\n    if (dwTableColumnResizeColumnIndex == (dwTableColumnResizeColumnCount - 1)) {\r\n        // Letzte Spalte wurde bewusst in der Breite angepasst. Der Wert für columnwidth muss angeglichen werden\r\n        // Dieser Wert wird z.B. bei Resize Aktionen ausgewertet (notwendig damit nicht scrollbalken-Breite manuell rausgereichnet/reingerechnet werden muss)\r\n        dwDomSetDomAttribute(dwTableColumnResizeHeaderCell, \"columnwidth\", getRealTableColumnWidth(dwTableColumnResizeColumnIndex, newWidthInt));\r\n    }\r\n\r\n    // Bei Änderung der Spaltenbreite einer fixierten Spalte muss die Breite der gesamten fixierten Tabelle ebenfalls angepasst werden\r\n    if (dwTableColumnResizeDragFixedColumn && dwTableColumnResizeInitialFixedTableWidth) {\r\n        var newFixedTableWidthInt = dwTableColumnResizeInitialFixedTableWidth + difference;\r\n        dwTableColumnResizeFixedTable.style.width = newFixedTableWidthInt + \"px\";\r\n    }\r\n\r\n    // Bei Änderung der Spaltenbreite in einer Tabelle mit fixierten Spalten muss dwHelperTableContentResized() aufgerufen\r\n    // werden, um die horizontale ScrollBar anzupassen\r\n    if (dwTableColumnResizeDragFixedColumn || (dwTableColumnResizeColumnIndex != dwTableColumnResizeColumnIndexWithFixedColumns)) {\r\n        dwHelperTableContentResized(dwTableColumnResizeDragUniqueId, false, true);\r\n    }\r\n\r\n    dwTableColumnContentResizeNewValue = newWidthPx;\r\n    if (!dwTableColumnContentResizeRuns) {\r\n        dwTableColumnContentResizeInBackground();\r\n    }\r\n}\r\n\r\nfunction dwTableColumnContentResizeInBackground() {\r\n    dwTableColumnContentResizeRuns = true;\r\n    // In Thread anstossen\r\n    setTimeout(function() {\r\n        // Breite der Inhalts-Spalte kann für die letzte Spalte abweichen - und muss ggf. neu berechnet werden\r\n        dwTableColumnContentResizeNewValue = getRealTableColumnWidth(dwTableColumnResizeColumnIndex, parseInt(dwTableColumnContentResizeNewValue)) + \"px\";\r\n        dwTableColumnContentResize();\r\n    }, DWTABLECOLUMNRESIZE_DELAY);\r\n}\r\n\r\nfunction dwTableColumnContentResize() {\r\n    while (true) {\r\n        var myValue = dwTableColumnContentResizeNewValue;\r\n        try {\r\n            var contentTable = $(dwTableColumnResizeDragUniqueId + (dwTableColumnResizeDragFixedColumn ? \"_fixedContentTable\" : \"_contentTable\"));\r\n            var rowContainer = dwDomGetRealRowContainerNode(contentTable);\r\n            var rows = dwDomGetChildrenByTagname(rowContainer, \"tr\", {}, false);\r\n            for (var i = 0; i < rows.length; i++) {\r\n                var row = rows[i];\r\n                var cell = dwDomGetChildAtIndex(dwDomGetChildAtIndex(row, dwTableColumnResizeColumnIndex), 0);\r\n                cell.style.width = myValue;\r\n                if (dwTableColumnContentResizeNewValue != myValue) {\r\n                    break;\r\n                }\r\n            }\r\n        } catch (exception) {\r\n        }\r\n        if (dwTableColumnContentResizeNewValue == myValue) {\r\n            // Wert ist gleich geblieben\r\n            dwTableColumnContentResizeRuns = false;\r\n            return;\r\n        }\r\n    }\r\n}\r\n\r\nfunction dwTableColumnResizeDragStopEvent(event) {\r\n    if (dwTableColumnResizeColumnIndex == null) {\r\n        return;\r\n    }\r\n    dwTableColumnContentResize();\r\n\r\n    var inputFieldName = dwTableColumnResizeDragUniqueId + \"_columnWidth_\" + dwTableColumnResizeColumnIndexWithFixedColumns;\r\n    $(inputFieldName).value = dwTableColumnResizeHeaderCell.offsetWidth;\r\n    dwAjaxTableColumnResized(event, dwTableColumnResizeDragEventHandlerComponentId, dwTableColumnResizeDragUniqueId, dwTableColumnResizeColumnIndexWithFixedColumns, \"\", true);\r\n\r\n    dwTableColumnResizeDragStartCoords = null;\r\n    dwTableColumnResizeDragEventHandlerComponentId = null;\r\n    dwTableColumnResizeDragUniqueId = null;\r\n    dwTableColumnResizeDragFixedColumn = false;\r\n\r\n    dwTableColumnResizeColumnIndex = null;\r\n    dwTableColumnResizeColumnIndexWithFixedColumns = null;\r\n    dwTableColumnResizeHeaderCell = null;\r\n    dwTableColumnResizeFixedTable = null;\r\n    dwTableColumnResizeInitialColumnWidth = null;\r\n    dwTableColumnResizeInitialFixedTableWidth = null;\r\n}\r\n\r\nfunction dwTableColumnResizeParsePixel(pixelValue) {\r\n    if (pixelValue == \"\") {\r\n        return 0;\r\n    }\r\n    return parseInt(pixelValue);\r\n}\r\n\r\nfunction dwTableColumnResizeGetPageCoordinates(event) {\r\n    return new Array(document.all ? window.event.clientX : event.pageX,\r\n                     document.all ? window.event.clientY : event.pageY);\r\n}\n/*\r\n * Copyright (c) 2018 Docware GmbH\r\n */\r\n\r\n/**\r\n * Verwaltet Informationen über Controls, die bei Größenänderungen benachrichtigt werden sollen.\r\n */\r\n\r\n\r\nvar dwResizeRegistry = dwResizeRegistryGetInstance();\r\n\r\n/**\r\n * Klasse zur Verwaltung der Controls mit Resize-Listenern\r\n */\r\nfunction DwResizeRegistry() {\r\n    this.dwResizeRegistryControlCache = {};\r\n    this.isUpdating = false;\r\n}\r\n\r\nfunction dwResizeRegistryGetInstance() {\r\n    if (dwResizeRegistry == null) {\r\n        dwResizeRegistry = new DwResizeRegistry();\r\n    }\r\n    return dwResizeRegistry;\r\n}\r\n\r\n/**\r\n * Ein Control zur Überwachung der Größe hinzufügen (Resize-Listener installieren)\r\n */\r\nDwResizeRegistry.prototype.addControl = function(eventHandlerComponentId, controlId, parentId) {\r\n    var data = this.dwResizeRegistryControlCache[controlId];\r\n    if (data) {\r\n        return;\r\n    }\r\n    data = {};\r\n    data.eventHandlerComponentId = eventHandlerComponentId;\r\n    data.controlId = controlId;\r\n    data.parentId = parentId;\r\n    data.width = 0;\r\n    data.height = 0;\r\n    this.dwResizeRegistryControlCache[controlId] = data;\r\n\r\n    if (dwFrameworkInitFinished) {\r\n        var control = $(data.controlId);                    // initiales resize-Event feuern\r\n        if (control != null) {\r\n            var updateControls = {};\r\n            this.checkControl(control, data, updateControls);\r\n            this.notifyControls(updateControls);\r\n        }\r\n    }\r\n};\r\n\r\n/**\r\n * Ein Control von der Überwachung der Größe entfernen (Resize-Listener deinstallieren)\r\n */\r\nDwResizeRegistry.prototype.removeControl = function(controlId) {\r\n    delete this.dwResizeRegistryControlCache[controlId];\r\n};\r\n\r\n/**\r\n * Änderungen der Größe feststellen, neue Größen speichern und Änderungen weiter propagieren\r\n */\r\nDwResizeRegistry.prototype.updateSizes = function() {\r\n    if (this.isUpdating) {\r\n        return;\r\n    }\r\n    this.isUpdating = true;\r\n    try {\r\n        var updateControls = {};\r\n        // zuerst Ermitteln der Controls mit Größenänderungen\r\n        for (var id in this.dwResizeRegistryControlCache) {\r\n            if (this.dwResizeRegistryControlCache.hasOwnProperty(id)) {\r\n                var data = this.dwResizeRegistryControlCache[id];\r\n                var control = $(data.controlId);\r\n                if (control == null) {\r\n                    // nicht mehr sichtbar -> entfernen\r\n                    delete this.dwResizeRegistryControlCache[data.controlId];\r\n                } else {\r\n                    this.checkControl(control, data, updateControls);\r\n                }\r\n            }\r\n        }\r\n        this.notifyControls(updateControls);\r\n    } finally {\r\n        // Im Fehlerfall Flag trotzdem sauber bereinigen sonst würde er nie mehr in die Methode gelangen\r\n        this.isUpdating = false;\r\n    }\r\n};\r\n/**\r\n * Überprüft, ob sich die Höhe/Breite eines Controls geändert hat\r\n */\r\nDwResizeRegistry.prototype.checkControl = function(control, data, updateControls) {\r\n    var currentWidth = control.offsetWidth;\r\n    var currentHeight = control.offsetHeight;\r\n    if ((data.width !== currentWidth) || (data.height !== currentHeight)) {\r\n        data.oldWidth = data.width;           // alte Breite/Höhe merken\r\n        data.oldHeight = data.height;\r\n        data.width = currentWidth;            // aktuelle Breite/Höhe setzen\r\n        data.height = currentHeight;\r\n        var absPointChild = dwUtilsGetLocationOnWindow(control, true);\r\n        var absPointParent = new DWPoint(0, 0);\r\n        if (data.parentId) {\r\n            // parentId kann leer sein ...\r\n            var parent = $(data.parentId);\r\n            if (parent != null) {\r\n                absPointParent = dwUtilsGetLocationOnWindow(parent, true);\r\n            }\r\n        }\r\n        data.relX = absPointChild.x - absPointParent.x;\r\n        data.relY = absPointChild.y - absPointParent.y;\r\n        data.absX = absPointChild.x;\r\n        data.absY = absPointChild.y;\r\n        updateControls[data.controlId] = data;\r\n    }\r\n};\r\n\r\n/**\r\n * Informiert alle Controls über Größenänderungen\r\n */\r\nDwResizeRegistry.prototype.notifyControls = function(updateControls) {\r\n    // nun diese Controls benachrichtigen\r\n    for (var id in updateControls) {\r\n        if (updateControls.hasOwnProperty(id)) {\r\n            var data = updateControls[id];\r\n\r\n            var newWidth = \"newWidth=\" + data.width + \"@DWSUB@\";\r\n            var newHeight = \"newHeight=\" + data.height + \"@DWSUB@\";\r\n            var relX = \"relX=\" + data.relX + \"@DWSUB@\";\r\n            var relY = \"relY=\" + data.relY + \"@DWSUB@\";\r\n            var absX = \"absX=\" + data.absX + \"@DWSUB@\";\r\n            var absY = \"absY=\" + data.absY;\r\n\r\n            var params = newWidth + newHeight + relX + relY + absX + absY;\r\n            var control = $(data.controlId);\r\n            if (control != null) {\r\n                var onClientSideResize = dwDomGetDomAttribute(control, \"onresizeClientSide\"); // Workaround für clientseitige Resize-Listener\r\n                if (onClientSideResize != null) {\r\n                    eval(onClientSideResize);  // die eigentliche Funktion versteckt sich im Attributwert\r\n                }\r\n            }\r\n            dwAjaxDefaultOnResize(null, data.eventHandlerComponentId, data.controlId, params, true);\r\n        }\r\n    }\r\n};\r\n\n/*\r\n * Copyright (c) 2018 Docware GmbH\r\n */\r\n\r\n//\r\n// Hinweis: Prototype Methoden werden nicht für jede Instanz in den Speicher geladen, sondern einmalig für die JS Klasse\r\n// Sie sind Methoden-Implementierungen in der Klassendefinition selbst vorzuziehen (z.B. this.myMethod = function()...)\r\n// Sie dürfen erst nach den Vererbungsregeln definiert werden\r\n//\r\n\r\n//\r\n// KONSTANTEN\r\n//\r\nvar DW_HOTKEY_KEY_SEPARATOR = \"_\";\r\nvar dwHotkeyRegistry = dwHotkeyRegistryGetInstance();\r\n// Unterstützte HOTKEY Typen. Typ-spezifische Ableitung muss Methode 'execute' implementieren\r\nvar DW_HOTKEY_TYPE = {\r\n    RECURSIVE_WITH_CALLBACK: \"RECURSIVE_WITH_CALLBACK\",\r\n    RECURSIVE_WITH_ONCLICK: \"RECURSIVE_WITH_CLICK\",\r\n    NEAREST_NEIGHBOUR: \"NEAREST_NEIGHBOUR\"\r\n};\r\n// event[<modifier>Key] dient zum Auslesen, ob der Modifier beim Event gedrückt ist\r\nvar DW_HOTKEY_SUPPORTED_MODIFIERS = new Array(\"ALT\", \"CTRL\", \"SHIFT\");\r\n\r\nvar dwHotkeyRegistryCacheByWindowId = new Object();\r\n\r\n//\r\n// KLASSEN\r\n//\r\n\r\n/**\r\n * Abstrakte Implementierung der Bean für Hotkey Einträge in der Registry\r\n * Muss von DwTempHotkey als Zwischenschicht abgeleitet werden, damit bei der Vererbungshierarchie\r\n * der Konstruktor der Superklasse nicht mit Parametern aufgerufen wird\r\n * @param type\r\n * @param keycode\r\n * @param modifiersArray\r\n */\r\nfunction DwAbstractHotkey(type, keycode, modifiersArray) {\r\n    this.type = type;\r\n    this.keycode = keycode;\r\n    this.modifiersArray = modifiersArray.sort();\r\n}\r\n\r\nDwAbstractHotkey.prototype.doAction = function(event, eventHandlerComponentId, controlId) {\r\n    alert(\"Method 'doAction' needs to be overriden for type '\" + this.type + \"'.\");\r\n};\r\n\r\nDwAbstractHotkey.prototype.getKey = function() {\r\n    return this.keycode + DW_HOTKEY_KEY_SEPARATOR + this.modifiersArray.join(DW_HOTKEY_KEY_SEPARATOR);\r\n};\r\n\r\nDwAbstractHotkey.prototype.fireCallback = function(event, eventHandlerComponentId, controlId) {\r\n    dwFrameworkPreventDefaultBehaviour(event);\r\n    dwFrameworkDisableEventBubbling(event);\r\n    var keycode = dwUtilsGetEventKeyCode(event);\r\n    var key = String.fromCharCode(keycode);\r\n    var hotkey = \"\";\r\n    var modifiers = this.modifiersArray.join(\"+\");\r\n    hotkey = hotkey.concat(modifiers).concat(\"+\").concat(key);\r\n    dwAjaxDefaultOnHotkeyEvent(event, eventHandlerComponentId, controlId,\r\n                               \"hotkey=\" + hotkey + \"@DWSUB@hotkeyType=\" + this.type, true);\r\n};\r\n\r\nDwAbstractHotkey.prototype.fireClick = function(event, controlToClick, resetFocus) {\r\n    var srcControl = dwUtilsGetEventTarget(event);\r\n    // Im IE muss der Focus weg, damit wir onChange des Textfields mitbekommen\r\n    if (resetFocus) {\r\n        try {\r\n            controlToClick.focus();\r\n        } catch (exception) {\r\n        } // nicht fokussierbar\r\n    }\r\n    controlToClick.click();\r\n    if (resetFocus) {\r\n        try {\r\n            srcControl.focus();\r\n        } catch (exception) {\r\n        } // nicht fokussierbar\r\n    }\r\n};\r\n\r\n\r\n/**\r\n * Klasse für Hotkey Einträge, die nur ein Event zum Server schicken\r\n * Keine direkten clientseitigen Aufrufe\r\n * @param keycode\r\n * @param modifiersArray\r\n */\r\nfunction DwRecursiveCallbackHotkey(keycode, modifiersArray) {\r\n    DwAbstractHotkey.call(this, DW_HOTKEY_TYPE.RECURSIVE_WITH_CALLBACK, keycode, modifiersArray);\r\n}\r\n\r\n/**\r\n * Klasse für Hotkey Einträge, die ein clientseitiges Event auslösen (Aufruf der onclick Methode auf dem\r\n * aufgerufenen Element)\r\n * @param keycode\r\n * @param modifiersArray\r\n */\r\nfunction DwExecuteClickHotkey(keycode, modifiersArray) {\r\n    DwAbstractHotkey.call(this, DW_HOTKEY_TYPE.RECURSIVE_WITH_ONCLICK, keycode, modifiersArray);\r\n}\r\n\r\n/**\r\n * Klasse für Mnemonic Hotkey-Einträge\r\n * @param keycode\r\n * @param modifiersArray\r\n */\r\nfunction DwMnemonicHotkey(keycode, modifiersArray) {\r\n    DwAbstractHotkey.call(this, DW_HOTKEY_TYPE.RECURSIVE_WITH_ONCLICK, keycode, modifiersArray);\r\n}\r\n\r\n/**\r\n * Klasse für Hotkey Einträge, die alle nearest neighbours auswertet und mit den registrierten IDs abgleicht\r\n * Bei positivem Match wird das onClick Event ausgelöst (z.B. Defaultbutton)\r\n * @param keycode\r\n * @param modifiersArray\r\n */\r\nfunction DwNearestNeighbourHotkey(keycode, modifiersArray) {\r\n    DwAbstractHotkey.call(this, DW_HOTKEY_TYPE.NEAREST_NEIGHBOUR, keycode, modifiersArray);\r\n}\r\n\r\n/**\r\n * Leere Klasse in der Vererbungshierarchie, so dass Konstruktur der Super-Klasse\r\n * bei Aufbau der Vererbung nicht mit Parametern aufgerufen werden muss\r\n */\r\nfunction DwTempHotkey() {\r\n}\r\n\r\n//\r\n// VERERBUNGEN. DwAbstractHotkey -> DwTempHotkey -> DwRecursiveCallbackHotkey/ ...\r\n//\r\nDwTempHotkey.prototype = DwAbstractHotkey.prototype;\r\nDwRecursiveCallbackHotkey.prototype = new DwTempHotkey();\r\nDwExecuteClickHotkey.prototype = new DwTempHotkey();\r\nDwMnemonicHotkey.prototype = new DwTempHotkey();\r\nDwNearestNeighbourHotkey.prototype = new DwTempHotkey();\r\n\r\n//\r\n// METHODEN. Neue oder überlagernde Methoden in den ableitenden Klassen müssen nach der Vererbungsregel definiert werden!\r\n//\r\nDwRecursiveCallbackHotkey.prototype.doAction = function(event, eventHandlerComponentId, controlId) {\r\n    // Aktion: Callback zu Server. Event auslösen\r\n    var isExecuted = false;\r\n    var srcControl = dwUtilsGetEventTarget(event);\r\n    var control = srcControl;\r\n    while (!isExecuted && (control != null)) {\r\n        if (control.id == controlId) {\r\n            this.fireCallback(event, eventHandlerComponentId, controlId);\r\n            isExecuted = true;\r\n        }\r\n        control = control.parentNode;\r\n    }\r\n    return isExecuted;\r\n};\r\n\r\nDwExecuteClickHotkey.prototype.doAction = function(event, eventHandlerComponentId, controlId) {\r\n    // Aktion: Click Event auslösen.\r\n    var control = $(controlId);\r\n    this.fireClick(event, control, true);\r\n    return true; // nur/immer das erste Hotkey Objekt wird geklickt \r\n};\r\n\r\nDwMnemonicHotkey.prototype.doAction = function(event, eventHandlerComponentId, controlId) {\r\n    var control = $(controlId);\r\n    this.fireClick(event, control, true);\r\n    this.fireCallback(event, eventHandlerComponentId, controlId);\r\n    return true;\r\n};\r\n\r\nDwNearestNeighbourHotkey.prototype.doAction = function(event, eventHandlerComponentId, controlId) {\r\n    // Aktion: Nearest Neighbour finden (z.B. DefaultButton, Cancel Button) und Event auslösen\r\n    if (event.keyCode != this.keycode) {\r\n        return false;\r\n    }\r\n    var srcControl = dwUtilsGetEventTarget(event);\r\n\r\n    var srcControlAllowsFiring = srcControl.getAttribute(\"allowsFiringNearestNeighbour\");\r\n    // Wenn das Attribut nicht vorhanden ist, dann ist es allowed\r\n    if ((srcControlAllowsFiring != null) && (srcControlAllowsFiring == \"false\")) {\r\n        return false;\r\n    }\r\n\r\n    // Wir schauen 1 Ebene(n) hoch\r\n    var iterControl = srcControl.parentNode;\r\n    var panelCounter = 0;\r\n    while (true) {\r\n        if ((panelCounter > 0) || (iterControl == null)) {\r\n            break;\r\n        }\r\n        if (iterControl.nodeType == DWUTILS_NODE_TYPE.ELEMENT) {\r\n            var classNames = iterControl.className;\r\n            classNames = dwUtilsSplit(classNames, \" \", false);\r\n            if (dwUtilsIsInArray(classNames, \"guipanel\")) {\r\n                panelCounter++;\r\n                var nearestNeighbour = this.findNearestNeighbour(iterControl, event.keyCode, controlId, true, true, null);\r\n                if ((nearestNeighbour != null) && !nearestNeighbour.disabled) {\r\n                    this.fireClick(event, nearestNeighbour, true);\r\n                    return true;\r\n                }\r\n            }\r\n        }\r\n        iterControl = iterControl.parentNode;\r\n    }\r\n    return false;\r\n};\r\n\r\n/**\r\n *\r\n * Die Funktion findNearestNeighbour sucht NICHT nach dem nächsten Element im DOM-Baum, welches auf den keyCode registriert ist!\r\n *\r\n * Sondern: Die auf den entsprechenden KeyCode registrierten Elemente werden in der Datenstruktur this.registeredHotkeysByKey gespeichert.\r\n * Wird ein Hotkey-Event ausgelöst wird das Element zurückgegeben, welches sich als erstes registriert hat, daher als erstes in this.registeredHotkeysByKey gespeichert ist und im aktuellen DOM-Baum auch enthalten ist.\r\n * Die Elemente in this.registeredHotkeysByKey werden in @function callHotkeyByKey der Reihe nach abgearbeitet.\r\n *\r\n *\r\n * @param currentNode\r\n * @param keyCode\r\n * @param nearestNeighbourId    die id des elements, welches gerade betrachtet wird und in this.registeredHotkeysByKey registriert ist\r\n * @param doSearchUp            soll im DOM-Baum aufwärts gesucht werden (parentNodes)\r\n * @param doSearchDown          soll im DOM-Baum abwärts gesucht werden (childNodes)\r\n * @param excludedNode\r\n * @returns {*}                 null, wenn nichts gefunden wurde oder die node welche mit der nearestNeighbourId übereinstimmt\r\n */\r\nDwNearestNeighbourHotkey.prototype.findNearestNeighbour = function(currentNode, keyCode, nearestNeighbourId, doSearchUp, doSearchDown, excludedNode) {\r\n    var childNodes = currentNode.childNodes;\r\n    for (var i = 0; i < childNodes.length; i++) {\r\n        var childNode = childNodes[i];\r\n        if (childNode == excludedNode) {\r\n            continue;\r\n        }\r\n        if (childNode.nodeType == DWUTILS_NODE_TYPE.ELEMENT) {\r\n            var childId = childNode.id;\r\n            if (childId == nearestNeighbourId) {\r\n                if (dwUtilsGetStyle(childNode, \"display\") != \"none\") {\r\n                    return childNode; // Button gefunden (Default oder Cancel, abhängig von registrierten Keycode)\r\n                } else {\r\n                    return null; // gefundener Button ist nicht sichtbar\r\n                }\r\n            }\r\n\r\n            if (doSearchDown) {\r\n                var nearestNeighbourNode = this.findNearestNeighbour(childNode, keyCode, nearestNeighbourId, false, true, null);\r\n                if (nearestNeighbourNode != null) {\r\n                    return nearestNeighbourNode;\r\n                }\r\n            }\r\n        }\r\n    }\r\n    if (doSearchUp) {\r\n        var parentNode = currentNode.parentNode;\r\n        if (parentNode != null) {\r\n            var nearestNeighbourNode = this.findNearestNeighbour(parentNode, keyCode, nearestNeighbourId, true, true, currentNode);\r\n            if (nearestNeighbourNode != null) {\r\n                return nearestNeighbourNode;\r\n            }\r\n        }\r\n    }\r\n    return null;\r\n};\r\n\r\nfunction DwHotkeyRegistryEntry(eventHandlerComponentId, controlId, hotkey) {\r\n    this.eventHandlerComponentId = eventHandlerComponentId;\r\n    this.controlId = controlId;\r\n    this.hotkey = hotkey;\r\n}\r\n\r\nDwHotkeyRegistryEntry.prototype.getKey = function() {\r\n    return this.hotkey.getKey();\r\n};\r\n\r\nDwHotkeyRegistryEntry.prototype.doAction = function(event) {\r\n    return this.hotkey.doAction(event, this.eventHandlerComponentId, this.controlId);\r\n};\r\nDwHotkeyRegistryEntry.prototype.fireCallback = function(event) {\r\n    this.hotkey.fireCallback(event, this.eventHandlerComponentId, this.controlId);\r\n};\r\nDwHotkeyRegistryEntry.prototype.equals = function(entry) {\r\n    if (this == entry) {\r\n        return true;\r\n    }\r\n    if ((this.controlId != entry.controlId) || (this.eventHandlerComponentId != entry.eventHandlerComponentId)) {\r\n        return false;\r\n    }\r\n    if ((this.hotkey.keycode != entry.hotkey.keycode) || (this.hotkey.type != entry.hotkey.type)) {\r\n        return false;\r\n    }\r\n    return true;\r\n};\r\n\r\n/**\r\n * Klasse zur Verwaltung der Hotkey Einträge\r\n */\r\nfunction DwHotkeyRegistry() {\r\n    this.registeredHotkeysByKey = new Object();\r\n}\r\n\r\nDwHotkeyRegistry.prototype.getIndex = function(registryEntryValue) {\r\n    var key = registryEntryValue.getKey();\r\n    var registeredHotkeys = this.registeredHotkeysByKey[key];\r\n    if (registeredHotkeys != null) {\r\n        for (var i = 0; i < registeredHotkeys.length; i++) {\r\n            if (registeredHotkeys[i].equals(registryEntryValue)) {\r\n                return i;\r\n            }\r\n        }\r\n    }\r\n    return -1;\r\n};\r\n\r\nDwHotkeyRegistry.prototype.__internalCreateKeyFromEvent = function(event) {\r\n    var keycode = dwUtilsGetEventKeyCode(event);\r\n    var modifiersArray = new Array();\r\n    for (var i = 0; i < DW_HOTKEY_SUPPORTED_MODIFIERS.length; i++) {\r\n        var supportedModifier = DW_HOTKEY_SUPPORTED_MODIFIERS[i];\r\n        if (event[supportedModifier.toLowerCase() + \"Key\"]) {\r\n            modifiersArray.push(supportedModifier);\r\n        }\r\n    }\r\n    return keycode + DW_HOTKEY_KEY_SEPARATOR + modifiersArray.join(DW_HOTKEY_KEY_SEPARATOR);\r\n};\r\n\r\nDwHotkeyRegistry.prototype.__internalRemoveHotkeyEntry = function(eventHandlerComponentId, controlId, hotkey) {\r\n    var registryEntryValue = new DwHotkeyRegistryEntry(eventHandlerComponentId, controlId, hotkey);\r\n    var key = registryEntryValue.getKey();\r\n\r\n    dwHotkeyRegistryStoreSettingsToCache(\"thisWindowId\");\r\n    var windowId;\r\n    for (windowId in dwHotkeyRegistryCacheByWindowId) {\r\n        var windowReg = dwHotkeyRegistryCacheByWindowId[windowId];\r\n        if (windowReg) { // kann durch dwHotkeyRegistryLoadSettingsFromCache() null sein\r\n            var registeredHotkeys = windowReg.registeredHotkeysByKey[key];\r\n            var index = windowReg.getIndex(registryEntryValue);\r\n            if (index != -1) {\r\n                dwUtilsRemoveFromArrayByIndex(registeredHotkeys, index);\r\n                if (registeredHotkeys.length == 0) {\r\n                    windowReg.registeredHotkeysByKey[key] = null; // Entspricht dem Zustand bevor ein erster Eintrag hinzugefügt wurde\r\n                }\r\n            }\r\n        }\r\n    }\r\n    dwHotkeyRegistryLoadSettingsFromCache(\"thisWindowId\");\r\n};\r\n\r\nDwHotkeyRegistry.prototype.__internalAddHotkeyEntry = function(eventHandlerComponentId, controlId, hotkey) {\r\n    var registryEntryValue = new DwHotkeyRegistryEntry(eventHandlerComponentId, controlId, hotkey);\r\n    var registryEntryKey = registryEntryValue.getKey();\r\n\r\n    dwHotkeyRegistryStoreSettingsToCache(\"thisWindowId\");\r\n    var windowId;\r\n    for (windowId in dwHotkeyRegistryCacheByWindowId) {\r\n        var windowReg = dwHotkeyRegistryCacheByWindowId[windowId];\r\n        if (windowReg) { // kann durch dwHotkeyRegistryLoadSettingsFromCache() null sein\r\n            var currentRegisteredEntriesForKey = windowReg.registeredHotkeysByKey[registryEntryKey];\r\n            if (currentRegisteredEntriesForKey == null) {\r\n                // Noch keine Einträge. Liste erstellen\r\n                currentRegisteredEntriesForKey = new Array();\r\n                windowReg.registeredHotkeysByKey[registryEntryKey] = currentRegisteredEntriesForKey;\r\n            }\r\n            currentRegisteredEntriesForKey.push(registryEntryValue);\r\n        }\r\n    }\r\n    dwHotkeyRegistryLoadSettingsFromCache(\"thisWindowId\");\r\n};\r\n\r\nDwHotkeyRegistry.prototype.addRecursiveCallbackHotkeyEntry = function(eventHandlerComponentId, controlId, key, modifiers) {\r\n    var keycode = VIRTUAL_KEYCODES[\"KEY_\" + key.toUpperCase()];\r\n    var modifiersArray = dwUtilsSplit(modifiers, \"+\", false);\r\n    var hotkey = new DwRecursiveCallbackHotkey(keycode, modifiersArray);\r\n    this.__internalAddHotkeyEntry(eventHandlerComponentId, controlId, hotkey);\r\n};\r\nDwHotkeyRegistry.prototype.addExecuteClickHotkeyEntry = function(eventHandlerComponentId, controlId, key, modifiers) {\r\n    var keycode = VIRTUAL_KEYCODES[\"KEY_\" + key.toUpperCase()];\r\n    var modifiersArray = dwUtilsSplit(modifiers, \"+\", false);\r\n    var hotkey = new DwExecuteClickHotkey(keycode, modifiersArray);\r\n    this.__internalAddHotkeyEntry(eventHandlerComponentId, controlId, hotkey);\r\n};\r\nDwHotkeyRegistry.prototype.addMnemonicHotkeyEntry = function(eventHandlerComponentId, controlId, key, modifiers) {\r\n    var keycode = VIRTUAL_KEYCODES[\"KEY_\" + key.toUpperCase()];\r\n    var modifiersArray = dwUtilsSplit(modifiers, \"+\", false);\r\n    var hotkey = new DwMnemonicHotkey(keycode, modifiersArray);\r\n    this.__internalAddHotkeyEntry(eventHandlerComponentId, controlId, hotkey);\r\n};\r\nDwHotkeyRegistry.prototype.addNearestNeighbourHotkeyEntry = function(eventHandlerComponentId, controlId, key, modifiers) {\r\n    var keycode = VIRTUAL_KEYCODES[\"KEY_\" + key.toUpperCase()];\r\n    var modifiersArray = dwUtilsSplit(modifiers, \"+\", false);\r\n    var hotkey = new DwNearestNeighbourHotkey(keycode, modifiersArray);\r\n    this.__internalAddHotkeyEntry(eventHandlerComponentId, controlId, hotkey);\r\n};\r\n\r\nDwHotkeyRegistry.prototype.removeRecursiveCallbackHotkeyEntry = function(eventHandlerComponentId, controlId, key, modifiers) {\r\n    var keycode = VIRTUAL_KEYCODES[\"KEY_\" + key.toUpperCase()];\r\n    var modifiersArray = dwUtilsSplit(modifiers, \"+\", false);\r\n    var hotkey = new DwRecursiveCallbackHotkey(keycode, modifiersArray);\r\n    this.__internalRemoveHotkeyEntry(eventHandlerComponentId, controlId, hotkey);\r\n};\r\nDwHotkeyRegistry.prototype.removeExecuteClickHotkeyEntry = function(eventHandlerComponentId, controlId, key, modifiers) {\r\n    var keycode = VIRTUAL_KEYCODES[\"KEY_\" + key.toUpperCase()];\r\n    var modifiersArray = dwUtilsSplit(modifiers, \"+\", false);\r\n    var hotkey = new DwExecuteClickHotkey(keycode, modifiersArray);\r\n    this.__internalRemoveHotkeyEntry(eventHandlerComponentId, controlId, hotkey);\r\n};\r\nDwHotkeyRegistry.prototype.removeMnemonicHotkeyEntry = function(eventHandlerComponentId, controlId, key, modifiers) {\r\n    var keycode = VIRTUAL_KEYCODES[\"KEY_\" + key.toUpperCase()];\r\n    var modifiersArray = dwUtilsSplit(modifiers, \"+\", false);\r\n    var hotkey = new DwMnemonicHotkey(keycode, modifiersArray);\r\n    this.__internalRemoveHotkeyEntry(eventHandlerComponentId, controlId, hotkey);\r\n};\r\nDwHotkeyRegistry.prototype.removeNearestNeighbourHotkeyEntry = function(eventHandlerComponentId, controlId, key, modifiers) {\r\n    var keycode = VIRTUAL_KEYCODES[\"KEY_\" + key.toUpperCase()];\r\n    var modifiersArray = dwUtilsSplit(modifiers, \"+\", false);\r\n    var hotkey = new DwNearestNeighbourHotkey(keycode, modifiersArray);\r\n    this.__internalRemoveHotkeyEntry(eventHandlerComponentId, controlId, hotkey);\r\n};\r\n\r\nDwHotkeyRegistry.prototype.callHotkeyByKey = function(event) {\r\n    if (!event) {\r\n        event = window.event;\r\n    }\r\n    var srcControl = dwUtilsGetEventTarget(event);\r\n    var key = this.__internalCreateKeyFromEvent(event);\r\n    var registeredHotkeysForKey = this.registeredHotkeysByKey[key];\r\n    if (registeredHotkeysForKey == null) {\r\n        return false; // Keine Hotkeys für dieses Event registriert. Es muss nicht weiter gesucht werden\r\n    }\r\n    var control = srcControl;\r\n    var isExecuted = false;\r\n    var i = 0;\r\n    while (!isExecuted && (i < registeredHotkeysForKey.length)) {\r\n        var registeredHotkeyEntryForKey = registeredHotkeysForKey[i];\r\n        isExecuted = registeredHotkeyEntryForKey.doAction(event);\r\n        i++;\r\n    }\r\n    if (isExecuted) {\r\n        dwFrameworkPreventDefaultBehaviour(event);\r\n    }\r\n    return isExecuted;\r\n};\r\n\r\nfunction dwHotkeyRegistryStoreSettingsToCache(parentWindowId) {\r\n    dwHotkeyRegistryCacheByWindowId[parentWindowId] = dwHotkeyRegistryGetInstance();\r\n    dwHotkeyRegistry = new DwHotkeyRegistry();\r\n}\r\n\r\nfunction dwHotkeyRegistryLoadSettingsFromCache(parentWindowId) {\r\n    dwHotkeyRegistry = dwHotkeyRegistryCacheByWindowId[parentWindowId];\r\n    delete dwHotkeyRegistryCacheByWindowId[parentWindowId];\r\n}\r\n\r\nfunction dwHotkeyRegistryGetInstance() {\r\n    if (dwHotkeyRegistry == null) {\r\n        dwHotkeyRegistry = new DwHotkeyRegistry();\r\n    }\r\n    return dwHotkeyRegistry;\r\n}\n//\r\n// EXPERIMENTELLE IMPLEMENTIERUNG. DIENT ALS MAPPING VON JS KEY CODE ZU KONSTANTE.\r\n// EXPERIMENTELL DESWEGEN, WEIL ES AUF ANDEREN TASTATUREN ALS DEUTSCH EVLT. NICHT PASST\r\n//\r\nvar VIRTUAL_KEYCODES = {\r\n    MOUSE_LEFTBUTTON: 1,\r\n    MOUSE_RIGHTBUTTON: 2,\r\n    MOUSE_MIDDLEBUTTON: 4, // falls 3-Button-Mouse\r\n    KEY_CANCEL: 3, // Control-break Processing\r\n\r\n    KEY_BACK_SPACE: 8,\r\n    KEY_TAB: 9,\r\n    KEY_ENTER: 13,\r\n    KEY_SHIFT: 16,\r\n    KEY_CTRL: 17,\r\n    KEY_ALT: 18,\r\n    KEY_PAUSE: 19,\r\n    KEY_CAPSLOCK: 20,\r\n    KEY_ESC: 27,\r\n    KEY_SPACE: 32,\r\n    KEY_PAGE_UP: 33,\r\n    KEY_PAGE_DOWN: 34,\r\n    KEY_END: 35,\r\n    KEY_HOME: 36,\r\n    KEY_LEFT: 37,\r\n    KEY_UP: 38,\r\n    KEY_RIGHT: 39,\r\n    KEY_DOWN: 40,\r\n    KEY_INSERT: 45,\r\n    KEY_DELETE: 46,\r\n\r\n    KEY_0: 48,\r\n    KEY_1: 49,\r\n    KEY_2: 50,\r\n    KEY_3: 51,\r\n    KEY_4: 52,\r\n    KEY_5: 53,\r\n    KEY_6: 54,\r\n    KEY_7: 55,\r\n    KEY_8: 56,\r\n    KEY_9: 57,\r\n\r\n\r\n    KEY_A: 65,\r\n    KEY_B: 66,\r\n    KEY_C: 67,\r\n    KEY_D: 68,\r\n    KEY_E: 69,\r\n    KEY_F: 70,\r\n    KEY_G: 71,\r\n    KEY_H: 72,\r\n    KEY_I: 73,\r\n    KEY_J: 74,\r\n    KEY_K: 75,\r\n    KEY_L: 76,\r\n    KEY_M: 77,\r\n    KEY_N: 78,\r\n    KEY_O: 79,\r\n    KEY_P: 80,\r\n    KEY_Q: 81,\r\n    KEY_R: 82,\r\n    KEY_S: 83,\r\n    KEY_T: 84,\r\n    KEY_U: 85,\r\n    KEY_V: 86,\r\n    KEY_W: 87,\r\n    KEY_X: 88,\r\n    KEY_Y: 89,\r\n    KEY_Z: 90,\r\n\r\n    KEY_WINDOWS: 91,\r\n    KEY_NUMPAD_0: 96,\r\n    KEY_NUMPAD_1: 97,\r\n    KEY_NUMPAD_2: 98,\r\n    KEY_NUMPAD_3: 99,\r\n    KEY_NUMPAD_4: 100,\r\n    KEY_NUMPAD_5: 101,\r\n    KEY_NUMPAD_6: 102,\r\n    KEY_NUMPAD_7: 103,\r\n    KEY_NUMPAD_8: 104,\r\n    KEY_NUMPAD_9: 105,\r\n\r\n    KEY_NUMPAD_MULTIPLY: 106,\r\n    KEY_NUMPAD_PLUS: 107,\r\n    KEY_NUMPAD_MINUS: 109, // entspricht auch Binde-/Unterstrich\r\n    KEY_NUMPAD_POINT: 110,\r\n    KEY_NUMPAD_DIVIDE: 111,\r\n\r\n    KEY_F1: 112,\r\n    KEY_F2: 113,\r\n    KEY_F3: 114,\r\n    KEY_F4: 115,\r\n    KEY_F5: 116,\r\n    KEY_F6: 117,\r\n    KEY_F7: 118,\r\n    KEY_F8: 119,\r\n    KEY_F9: 120,\r\n    KEY_F10: 121,\r\n    KEY_F11: 122,\r\n    KEY_F12: 123,\r\n\r\n    KEY_NUMLOCK: 144,\r\n    KEY_SCROLLLOCK: 145,\r\n\r\n    // Zeichen Benennungen angelehnt an deutsches Standard-Tastatur-Layout\r\n    KEY_SIGNS_COMMA: 188,\r\n    KEY_SIGNS_POINT: 190,\r\n    KEY_SIGNS_HASH: 191,\r\n    KEY_SIGNS_UUML: 59,\r\n    KEY_SIGNS_OUML: 192,\r\n    KEY_SIGNS_AUML: 222,\r\n    KEY_SIGNS_LESSTHAN: 226,\r\n    KEY_SIGNS_APOSTROPHE: 221,\r\n    KEY_SIGNS_SZ: 219,\r\n    KEY_SIGNS_ZIRKUMFLEX: 220\r\n};\r\n\r\n//var LETTERS = new Array(VIRTUAL_KEYCODES.KEY_A, VIRTUAL_KEYCODES.KEY_B, VIRTUAL_KEYCODES.KEY_C, VIRTUAL_KEYCODES.KEY_D,\r\n//                        VIRTUAL_KEYCODES.KEY_E, VIRTUAL_KEYCODES.KEY_F, VIRTUAL_KEYCODES.KEY_G, VIRTUAL_KEYCODES.KEY_H,\r\n//                        VIRTUAL_KEYCODES.KEY_I, VIRTUAL_KEYCODES.KEY_J, VIRTUAL_KEYCODES.KEY_K, VIRTUAL_KEYCODES.KEY_L,\r\n//                        VIRTUAL_KEYCODES.KEY_M, VIRTUAL_KEYCODES.KEY_N, VIRTUAL_KEYCODES.KEY_O, VIRTUAL_KEYCODES.KEY_P,\r\n//                        VIRTUAL_KEYCODES.KEY_Q, VIRTUAL_KEYCODES.KEY_R, VIRTUAL_KEYCODES.KEY_S, VIRTUAL_KEYCODES.KEY_T,\r\n//                        VIRTUAL_KEYCODES.KEY_U, VIRTUAL_KEYCODES.KEY_V, VIRTUAL_KEYCODES.KEY_W, VIRTUAL_KEYCODES.KEY_X,\r\n//                        VIRTUAL_KEYCODES.KEY_Y, VIRTUAL_KEYCODES.KEY_Z);\r\n//\r\n//var NUMBERS = new Array(VIRTUAL_KEYCODES.KEY_0, VIRTUAL_KEYCODES.KEY_1, VIRTUAL_KEYCODES.KEY_2, VIRTUAL_KEYCODES.KEY_3,\r\n//                        VIRTUAL_KEYCODES.KEY_4, VIRTUAL_KEYCODES.KEY_5, VIRTUAL_KEYCODES.KEY_6, VIRTUAL_KEYCODES.KEY_7,\r\n//                        VIRTUAL_KEYCODES.KEY_8, VIRTUAL_KEYCODES.KEY_9);\r\n//var NUMBERS_NUMPAD = new Array (VIRTUAL_KEYCODES.KEY_NUMPAD_0, VIRTUAL_KEYCODES.KEY_NUMPAD_1, VIRTUAL_KEYCODES.KEY_NUMPAD_2,\r\n//                                VIRTUAL_KEYCODES.KEY_NUMPAD_3, VIRTUAL_KEYCODES.KEY_NUMPAD_4, VIRTUAL_KEYCODES.KEY_NUMPAD_5,\r\n//                                VIRTUAL_KEYCODES.KEY_NUMPAD_6, VIRTUAL_KEYCODES.KEY_NUMPAD_7, VIRTUAL_KEYCODES.KEY_NUMPAD_8,\r\n//                                VIRTUAL_KEYCODES.KEY_NUMPAD_9);\r\n//\r\n//var ALPHANUMERIC = LETTERS.concat(NUMBERS).concat(NUMBERS_NUMPAD);\r\n\r\nfunction dwKeyCodesKeyIsLetter(event) {\r\n    event = dwFrameworkGetEvent(event);\r\n    var keyCode = dwUtilsGetEventKeyCode(event);\r\n    return dwKeyCodesKeyCodeIsLetter(keyCode);\r\n}\r\n\r\nfunction dwKeyCodesKeyCodeIsLetter(keyCode) {\r\n    return ((keyCode >= VIRTUAL_KEYCODES.KEY_A) && (keyCode <= VIRTUAL_KEYCODES.KEY_Z));\r\n}\r\n\r\nfunction dwKeyCodesKeyIsNumber(event, includeNumpadNumbers) {\r\n    event = dwFrameworkGetEvent(event);\r\n    var keyCode = dwUtilsGetEventKeyCode(event);\r\n    return dwKeyCodesKeyCodeIsNumber(keyCode, includeNumpadNumbers);\r\n}\r\n\r\nfunction dwKeyCodesKeyCodeIsNumber(keyCode, includeNumpadNumbers) {\r\n    if ((keyCode >= VIRTUAL_KEYCODES.KEY_0) && (keyCode <= VIRTUAL_KEYCODES.KEY_9)) {\r\n        return true;\r\n    }\r\n    if (includeNumpadNumbers) {\r\n        if ((keyCode >= VIRTUAL_KEYCODES.KEY_NUMPAD_0) && (keyCode <= VIRTUAL_KEYCODES.KEY_NUMPAD_9)) {\r\n            return true;\r\n        }\r\n    }\r\n    return false;\r\n}\r\n\r\nfunction dwKeyCodesKeyIsValidForTypeahead(event) {\r\n    event = dwFrameworkGetEvent(event);\r\n    var keyCode = dwUtilsGetEventKeyCode(event);\r\n    return dwKeyCodesKeyCodeIsValidForTypeahead(keyCode);\r\n}\r\n\r\nfunction dwKeyCodesKeyCodeIsValidForTypeahead(keyCode) {\r\n    if (dwKeyCodesKeyCodeIsLetter(keyCode)) {\r\n        return true;\r\n    }\r\n\r\n    if (keyCode == VIRTUAL_KEYCODES.KEY_SPACE) {\r\n        return true;\r\n    }\r\n\r\n    if (dwKeyCodesKeyCodeIsNumber(keyCode, true)) {\r\n        return true;\r\n    }\r\n\r\n    var numPadSigns = new Array(VIRTUAL_KEYCODES.KEY_NUMPAD_MULTIPLY, VIRTUAL_KEYCODES.KEY_NUMPAD_PLUS,\r\n                                VIRTUAL_KEYCODES.KEY_NUMPAD_MINUS, VIRTUAL_KEYCODES.KEY_NUMPAD_POINT,\r\n                                VIRTUAL_KEYCODES.KEY_NUMPAD_DIVIDE);\r\n    if (dwUtilsIsInArray(numPadSigns, keyCode)) {\r\n        return true;\r\n    }\r\n\r\n    var otherInputSigns = new Array(VIRTUAL_KEYCODES.KEY_SIGNS_COMMA, VIRTUAL_KEYCODES.KEY_SIGNS_APOSTROPHE,\r\n                                    VIRTUAL_KEYCODES.KEY_SIGNS_HASH, VIRTUAL_KEYCODES.KEY_SIGNS_LESSTHAN, VIRTUAL_KEYCODES.KEY_SIGNS_POINT,\r\n                                    VIRTUAL_KEYCODES.KEY_SIGNS_ZIRKUMFLEX, VIRTUAL_KEYCODES.KEY_SIGNS_SZ, VIRTUAL_KEYCODES.KEY_SIGNS_AUML,\r\n                                    VIRTUAL_KEYCODES.KEY_SIGNS_OUML, VIRTUAL_KEYCODES.KEY_SIGNS_UUML);\r\n    if (dwUtilsIsInArray(otherInputSigns, keyCode)) {\r\n        return true;\r\n    }\r\n    return false;\r\n}\n/*\r\n * Copyright (c) 2024 Quanos Service Solutions GmbH\r\n */\r\nvar DWTOUCH_SLIDE_VALUE = 70;\r\nvar DWTOUCH_CLICK_TOLERANCE_VALUE = 30; // entspricht auch der minimalen Größe von Controls\r\n\r\nvar DWTOUCH_FINGERS = -1;\r\nvar DWTOUCH_START_X1 = -1;\r\nvar DWTOUCH_START_Y1 = -1;\r\nvar DWTOUCH_CURRENT_X1 = -1;\r\nvar DWTOUCH_CURRENT_Y1 = -1;\r\nvar DWTOUCH_CURRENT_SCREEN_X1 = -1;\r\nvar DWTOUCH_CURRENT_SCREEN_Y1 = -1;\r\nvar DWTOUCH_START_X2 = -1;\r\nvar DWTOUCH_START_Y2 = -1;\r\nvar DWTOUCH_CURRENT_X2 = -1;\r\nvar DWTOUCH_CURRENT_Y2 = -1;\r\nvar DWTOUCH_IMAGEVIEW = null;\r\nvar DWTOUCH_IMAGEVIEW_START_ZOOMLEVEL = -1;\r\nvar DWTOUCH_SCROLLPANE = null;\r\nvar DWTOUCH_SCROLLPANE_IS_IMAGE = false;\r\nvar DWTOUCH_SCROLLPANE_NATIVE = false;\r\nvar DWTOUCH_START_SCROLL_X = -1;\r\nvar DWTOUCH_START_SCROLL_Y = -1;\r\nvar DWTOUCH_START_SCROLL_DATE = null;\r\n\r\nvar DWTOUCH_SLIDE_DIRECTION_NORTH = \"N\";\r\nvar DWTOUCH_SLIDE_DIRECTION_EAST = \"E\";\r\nvar DWTOUCH_SLIDE_DIRECTION_SOUTH = \"S\";\r\nvar DWTOUCH_SLIDE_DIRECTION_WEST = \"W\";\r\nvar DWTOUCH_SLIDE_DIRECTION_NORTHWEST = \"NW\";\r\nvar DWTOUCH_SLIDE_DIRECTION_NORTHEAST = \"NE\";\r\nvar DWTOUCH_SLIDE_DIRECTION_SOUTHWEST = \"SW\";\r\nvar DWTOUCH_SLIDE_DIRECTION_SOUTHEAST = \"SE\";\r\n\r\nvar DWTOUCH_HANDLER_MOVE_EVENT = null;\r\n\r\nvar DWTOUCH_LONG_PRESS_START_TIME = 0;\r\nvar DWTOUCH_LAST_TOUCH_TIME = 0;\r\nvar DWTOUCH_LAST_TOUCH_TARGET = null;\r\nvar DWTOUCH_TOUCH_TARGET = null;\r\nvar DWTOUCH_TOUCHED_ID = null;\r\nvar DWTOUCH_TOUCH_MOVED = false;\r\n\r\nvar DWTOUCH_TOUCH_EMULATION_CENTER_CLIENT_X = null;\r\nvar DWTOUCH_TOUCH_EMULATION_CENTER_CLIENT_Y = null;\r\nvar DWTOUCH_TOUCHING = false;\r\n\r\nvar DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_1_EVENT = null;\r\nvar DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_2_EVENT = null;\r\n\r\nfunction dwTouchRegisterWindowForTouchMove(windowId) {\r\n    DWTOUCH_HANDLER_MOVE_EVENT = windowId;\r\n}\r\n\r\nfunction dwTouchRemoveSelection(e) {\r\n    // Selektion nicht entfernen, wenn es sich um ein Input-Control (speziell Textfeld) oder TextArea-Control handelt\r\n    if (!dwUtilsIsClickOnTagType(e, \"input\") && !dwUtilsIsClickOnTagType(e, \"textarea\")) {\r\n        window.getSelection().removeAllRanges();\r\n    }\r\n}\r\n\r\nfunction dwTouchRegisterTouchFunctionsInBrowser() {\r\n    // Eventlistener benötigen die Option \"passive:false\".\r\n    // https://developer.mozilla.org/de/docs/Web/API/EventTarget/addEventListener\r\n    // iOS (getestet in iOS 11.x) ignoriert andernfalls die Versuche via event.preventDefault die Standardverarbeitung\r\n    // durch den Browser zu unterbinden (resultiert in page pinch zooms und ggf. Abstürzen des Safari Browsers)\r\n    try {\r\n        var body = $(\"body\");\r\n        body.addEventListener('touchstart', function(e) {\r\n            DWTOUCH_TOUCHING = true;\r\n            try {\r\n                dwTouchStart(e);\r\n            } finally {\r\n                DWTOUCH_TOUCHING = false;\r\n            }\r\n\r\n        }, {passive: false});\r\n        body.addEventListener('touchmove', function(e) {\r\n            DWTOUCH_TOUCHING = true;\r\n            try {\r\n                dwTouchMove(e);\r\n            } finally {\r\n                DWTOUCH_TOUCHING = false;\r\n            }\r\n        }, {passive: false});\r\n        body.addEventListener('touchend', function(e) {\r\n            DWTOUCH_TOUCHING = true;\r\n            try {\r\n                dwTouchEnd(e);\r\n            } finally {\r\n                DWTOUCH_TOUCHING = false;\r\n            }\r\n        }, {passive: false});\r\n\r\n        body.addEventListener(\"selectstart\", function(e) {\r\n            e.preventDefault();\r\n            return false;\r\n        }, false);\r\n\r\n        // für normale MouseEvents registrieren, um deren Standardverhalten zu unterdrücken:\r\n        // - unter iOS und Android für MouseEvents direkt vom Browser (mit dwTouch == false) das EventBubbling abschalten\r\n        // - ansonsten die MouseEvents unterdrücken; außerdem evtl. Selektionen sofort wieder aufheben\r\n        if (framework_isiOS || framework_isAndroid || framework_isFirefox || framework_isChrome) {\r\n\r\n        } else {\r\n            body.addEventListener('mousedown', function(e) {\r\n                dwTouchRemoveSelection(e);\r\n                dwTouchPreventDefaultForEmulatedTouchEvent(e);\r\n            }, true);\r\n            body.addEventListener('mousemove', function(e) {\r\n                dwTouchRemoveSelection(e);\r\n                dwTouchPreventDefaultForEmulatedTouchEvent(e);\r\n            }, true);\r\n            body.addEventListener('mouseup', function(e) {\r\n                dwTouchRemoveSelection(e);\r\n                dwTouchPreventDefaultForEmulatedTouchEvent(e);\r\n            }, true);\r\n            body.addEventListener('click', function(e) {\r\n                dwTouchRemoveSelection(e);\r\n                dwTouchPreventDefaultForEmulatedTouchEvent(e);\r\n            }, true);\r\n            body.addEventListener('dblclick', function(e) {\r\n                dwTouchRemoveSelection(e);\r\n                dwTouchPreventDefaultForEmulatedTouchEvent(e);\r\n            }, true);\r\n        }\r\n    } catch (exception) {\r\n        // IE7 kann das z.B. nicht. Auch im alten Firefox 5.0.1 kommt ein Fehler\r\n    }\r\n}\r\n\r\nfunction dwTouchEnableTouchEmulation() {\r\n    try {\r\n        // für normale MouseEvents registrieren, um in Desktop-Browsern TouchEvents zu emulieren\r\n        var body = $(\"body\");\r\n        body.addEventListener('click', function(e) {\r\n            dwTouchEmulateTouchEvent(e);\r\n        });\r\n        body.addEventListener('dblclick', function(e) {\r\n            dwTouchEmulateTouchEvent(e);\r\n        });\r\n\r\n        // außerdem evtl. Selektionen sofort wieder aufheben\r\n        if (!framework_isPointerBrowser && !framework_isMSPointerBrowser) { // für alle Browser, die KEINE (MS)PointerEvents unterstützen\r\n            body.addEventListener('mousedown', function(e) {\r\n                if (e.button !== 2) {\r\n                    dwTouchRemoveSelection(e);\r\n                }\r\n                dwTouchEmulateTouchEvent(e);\r\n            });\r\n            body.addEventListener('mousemove', function(e) {\r\n                if (e.button !== 2) {\r\n                    dwTouchRemoveSelection(e);\r\n                }\r\n                dwTouchEmulateTouchEvent(e);\r\n            });\r\n            body.addEventListener('mouseup', function(e) {\r\n                if (e.button !== 2) {\r\n                    dwTouchRemoveSelection(e);\r\n                }\r\n                dwTouchEmulateTouchEvent(e);\r\n            });\r\n        } else { // für MSPointerEvents registrieren, um diese in standardisierte MultiTouchEvents umzuwandeln\r\n            // auch für normale MouseEvents registrieren, um diese generell zu unterdrücken\r\n            body.addEventListener('mousedown', function(e) {\r\n                dwTouchRemoveSelection(e);\r\n                dwTouchPreventDefaultForEmulatedTouchEvent(e);\r\n            });\r\n            body.addEventListener('mousemove', function(e) {\r\n                dwTouchRemoveSelection(e);\r\n                dwTouchPreventDefaultForEmulatedTouchEvent(e);\r\n            });\r\n            body.addEventListener('mouseup', function(e) {\r\n                dwTouchRemoveSelection(e);\r\n                dwTouchPreventDefaultForEmulatedTouchEvent(e);\r\n            });\r\n\r\n            // es werden maximal 2 Finger gleichzeitig unterstützt\r\n            body.addEventListener(framework_isPointerBrowser ? 'pointerdown' : 'MSPointerDown', function(e) {\r\n                if (e.button !== 2) {\r\n                    dwTouchRemoveSelection(e);\r\n                }\r\n                dwTouchEmulateTouchEventForMSPointerEvent(e);\r\n            });\r\n            body.addEventListener(framework_isPointerBrowser ? 'pointermove' : 'MSPointerMove', function(e) {\r\n                if (e.button !== 2) {\r\n                    dwTouchRemoveSelection(e);\r\n                }\r\n                dwTouchEmulateTouchEventForMSPointerEvent(e);\r\n            });\r\n            body.addEventListener(framework_isPointerBrowser ? 'pointerup' : 'MSPointerUp', function(e) {\r\n                if (e.button !== 2) {\r\n                    dwTouchRemoveSelection(e);\r\n                }\r\n                dwTouchEmulateTouchEventForMSPointerEvent(e);\r\n            });\r\n        }\r\n\r\n        DWTOUCH_TOUCH_EMULATION_ENABLED = true;\r\n    } catch (exception) {\r\n        // IE7 kann das z.B. nicht. Auch im alten Firefox 5.0.1 kommt ein Fehler\r\n    }\r\n}\r\n\r\nfunction dwTouchEmulateTouchEvent(e) {\r\n    if (DWTOUCH_TOUCHING) { // echter bzw. emulierter TouchEvent wird bereits ausgeführt\r\n        return;\r\n    }\r\n\r\n    if (dwUtilsIsInputTextBox(dwUtilsGetEventTarget(e))) {\r\n        // Auf Inputcontrols keine eigenen Touchfunktionen ausführen\r\n        return;\r\n    }\r\n\r\n\r\n    // dwTouchPreventDefaultForEmulatedTouchEvent() ist wichtig, da ansonsten z.B. Maus-Klicks doppelt bzw. ungewollt ausgeführt werden würden\r\n    DWTOUCH_TOUCHING = true;\r\n    try {\r\n        if (e.type == 'mousedown') {\r\n            // Bei Klick auf Scrollbar nichts tun\r\n            if (dwUtilsIsClickOnScrollBar(e)) {\r\n                return;\r\n            }\r\n            if (dwTouchPreventDefaultForEmulatedTouchEvent(e)) {\r\n                DWTOUCH_TOUCH_TARGET = e.target;\r\n                dwTouchStart(dwTouchCreateEmulatedTouchEvent(e, 'touchstart'));\r\n            }\r\n        } else if (e.type == 'mousemove') {\r\n            if (DWTOUCH_FINGERS > 0) { // entspricht einem echten Touch (= MouseDrag)\r\n                if (dwTouchPreventDefaultForEmulatedTouchEvent(e)) {\r\n                    dwTouchMove(dwTouchCreateEmulatedTouchEvent(e, 'touchmove'));\r\n                }\r\n            }\r\n        } else if (e.type == 'mouseup') {\r\n            if (dwTouchPreventDefaultForEmulatedTouchEvent(e)) {\r\n                if (DWTOUCH_FINGERS > 0) {\r\n                    dwTouchEnd(dwTouchCreateEmulatedTouchEvent(e, 'touchend'));\r\n                }\r\n            }\r\n        } else if (e.type == 'click') {\r\n            dwTouchPreventDefaultForEmulatedTouchEvent(e);\r\n        } else if (e.type == 'dblclick') {\r\n            dwTouchPreventDefaultForEmulatedTouchEvent(e);\r\n        }\r\n    } finally {\r\n        DWTOUCH_TOUCHING = false;\r\n    }\r\n}\r\n\r\nfunction dwTouchEmulateTouchEventForMSPointerEvent(e) {\r\n    if (DWTOUCH_TOUCHING) { // echter bzw. emulierter TouchEvent wird bereits ausgeführt\r\n        return;\r\n    }\r\n\r\n    if (dwUtilsIsInputTextBox(dwUtilsGetEventTarget(e))) {\r\n        // Auf Inputcontrols keine eigenen Touchfunktionen ausführen\r\n        return;\r\n    }\r\n\r\n\r\n    if (dwUtilsIsClickOnScrollBar(e)) {\r\n        return;\r\n    }\r\n\r\n    // dwTouchPreventDefaultForEmulatedTouchEvent() ist wichtig, da ansonsten z.B. Maus-Klicks doppelt bzw. ungewollt ausgeführt werden würden\r\n    DWTOUCH_TOUCHING = true;\r\n    try {\r\n        if ((e.type == 'MSPointerDown') || (e.type == 'pointerdown')) {\r\n            DWTOUCH_FINGERS = -1;\r\n            if (dwTouchPreventDefaultForEmulatedTouchEvent(e)) {\r\n                // Event für den Finger merken (Event für 2. Finger nur dann, wenn das gleiche Target getroffen wurde)\r\n                if (DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_1_EVENT == null) {\r\n                    DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_1_EVENT = e;\r\n                } else if ((DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_2_EVENT == null)\r\n                           && (DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_1_EVENT.target == e.target)) {\r\n                    DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_2_EVENT = e;\r\n                } else {\r\n                    // es werden maximal 2 Finger gleichzeitig unterstützt\r\n                    if (DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_1_EVENT != null) {\r\n                        dwTouchFireMouseEventForTouchEvent(dwTouchCreateEmulatedMultiTouchEvent(DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_1_EVENT, null, 'touchend', e.button), 'mouseup');\r\n                        DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_1_EVENT = null;\r\n                    }\r\n                    if (DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_2_EVENT != null) {\r\n                        dwTouchFireMouseEventForTouchEvent(dwTouchCreateEmulatedMultiTouchEvent(DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_2_EVENT, null, 'touchend', e.button), 'mouseup');\r\n                        DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_2_EVENT = null;\r\n                    }\r\n                    return;\r\n                }\r\n                DWTOUCH_TOUCH_TARGET = e.target;\r\n                dwTouchStart(dwTouchCreateEmulatedMultiTouchEvent(DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_1_EVENT,\r\n                                                                  DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_2_EVENT,\r\n                                                                  'touchstart', e.button));\r\n            }\r\n        } else if ((e.type == 'MSPointerMove') || (e.type == 'pointermove')) {\r\n            if (DWTOUCH_FINGERS > 0) { // entspricht einem echten Touch (= MouseDrag)\r\n                // passenden Finger aufgrund der pointerId des Events herausfinden\r\n                if ((DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_1_EVENT != null)\r\n                    && (DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_1_EVENT.pointerId == e.pointerId)) {\r\n                    DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_1_EVENT = e;\r\n                } else if ((DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_2_EVENT != null)\r\n                           && (DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_2_EVENT.pointerId == e.pointerId)) {\r\n                    DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_2_EVENT = e;\r\n                } else {\r\n                    // kein Event mit passender pointerId gefunden (es werden maximal 2 Finger gleichzeitig unterstützt)\r\n                    // Reset der Events für die beiden Finger, da dieser Zustand nicht unterstützt wird\r\n                    dwTouchPreventDefaultForEmulatedTouchEvent(e);\r\n                    DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_1_EVENT = null;\r\n                    DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_2_EVENT = null;\r\n                    return;\r\n                }\r\n\r\n                if (dwTouchPreventDefaultForEmulatedTouchEvent(e)) {\r\n                    dwTouchMove(dwTouchCreateEmulatedMultiTouchEvent(DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_1_EVENT,\r\n                                                                     DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_2_EVENT,\r\n                                                                     'touchmove', e.button));\r\n                }\r\n            } else {\r\n                // Reset der Events für die beiden Finger, da dieser Zustand nicht unterstützt wird\r\n                DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_1_EVENT = null;\r\n                DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_2_EVENT = null;\r\n            }\r\n        } else if ((e.type == 'MSPointerUp') || (e.type == 'pointerup')) {\r\n            if (DWTOUCH_FINGERS > 0) {\r\n                if (!dwTouchPreventDefaultForEmulatedTouchEvent(e)) {\r\n                    return;\r\n                }\r\n\r\n                // den Event vom losgelassenen Finger entfernen (über die pointerId des Events)\r\n                var fingerEventFound = false;\r\n                if ((DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_2_EVENT != null)\r\n                    && (DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_2_EVENT.pointerId == e.pointerId)) {\r\n                    dwTouchEnd(dwTouchCreateEmulatedMultiTouchEvent(DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_2_EVENT, null, 'touchend', e.button));\r\n                    DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_2_EVENT = null;\r\n                    fingerEventFound = true;\r\n                }\r\n                if ((DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_1_EVENT != null)\r\n                    && (DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_1_EVENT.pointerId == e.pointerId)) {\r\n                    // den Event von Finger 2 zum von Event Finger 1 machen falls der Finger 1 zuerst losgelassen wird\r\n                    dwTouchEnd(dwTouchCreateEmulatedMultiTouchEvent(DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_1_EVENT, null, 'touchend', e.button));\r\n                    DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_1_EVENT = DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_2_EVENT;\r\n                    fingerEventFound = true;\r\n                }\r\n\r\n                if (!fingerEventFound) {\r\n                    // kein Event mit passender pointerId gefunden (es werden maximal 2 Finger gleichzeitig unterstützt)\r\n                    // Reset der Events für die beiden Finger, da dieser Zustand nicht unterstützt wird\r\n                    DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_1_EVENT = null;\r\n                    DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_2_EVENT = null;\r\n                    return;\r\n                }\r\n\r\n                // DWTOUCH_FINGERS korrigieren, falls noch ein Finger (und somit dazugehöriger Event) gedrückt ist\r\n                if (DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_1_EVENT != null) {\r\n                    DWTOUCH_FINGERS = 1;\r\n                }\r\n            } else {\r\n                // Reset der Events für die beiden Finger, da dieser Zustand nicht unterstützt wird\r\n                DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_1_EVENT = null;\r\n                DWTOUCH_TOUCH_EMULATION_MSPOINTER_FINGER_2_EVENT = null;\r\n            }\r\n        }\r\n    } finally {\r\n        DWTOUCH_TOUCHING = false;\r\n    }\r\n}\r\n\r\nfunction dwTouchPreventDefaultForEmulatedTouchEvent(e) {\r\n    if (dwUtilsIsInputTextBox(dwUtilsGetEventTarget(e))) {\r\n        // Auf Inputcontrols keine eigenen Touchfunktionen ausführen\r\n        return false;\r\n    }\r\n\r\n    // TouchEvents nur für Controls ohne eigene Mausinteraktionen emulieren, da sonst deren Eigenverhalten verändert wird\r\n    if (dwTouchFindTargetForTouchEmulation(e.target) != null) {\r\n        dwFrameworkPreventDefaultBehaviour(e);\r\n        return true;\r\n    } else {\r\n        return false;\r\n    }\r\n}\r\n\r\nfunction dwTouchFindTargetForTouchEmulation(target) {\r\n    // Gehe im DOM nach oben bis ein gültiges Target (mit CSS-Klassennamen, kein Layout-Tag, touchemulation == true)\r\n    // für die Touch-Emulation gefunden wird\r\n    try {\r\n        while ((target != null)\r\n               && ((target.className == null) || (target.className == '') || (target.className == 'modern_scrollpane_design_thin')\r\n                   || dwUtilsStringStartsWith(target.className, 'guilayout', false))) {\r\n            target = target.parentNode;\r\n        }\r\n    } catch (exception) {\r\n        return null;\r\n    }\r\n    if ((target != null) && (dwDomGetDomAttribute(target, \"touchemulation\") == \"true\")) {\r\n        return target;\r\n    } else {\r\n        return null;\r\n    }\r\n}\r\n\r\nfunction dwTouchCreateEmulatedTouchEvent(e, type) {\r\n    return dwTouchCreateEmulatedMultiTouchEvent(e, null, type, e.button);\r\n}\r\n\r\nfunction dwTouchCreateEmulatedMultiTouchEvent(e, e2, type, button) {\r\n    // simples Object und kein echtes Event-Objekt (bzw. weiter unten Touch-Objekt) verwenden, da echte TouchEvents von\r\n    // Desktop-Browsern nicht erzeugt werden können und später auch nur die entsprechenden Attribute ausgelesen werden können müssen\r\n    var touchEvent = new Object();\r\n    touchEvent.type = type;\r\n    touchEvent.target = DWTOUCH_TOUCH_TARGET;\r\n    touchEvent.srcElement = DWTOUCH_TOUCH_TARGET;\r\n    touchEvent.view = e.view;\r\n    touchEvent.ctrlKey = e.ctrlKey;\r\n    touchEvent.altKey = e.altKey;\r\n    touchEvent.shiftKey = e.shiftKey;\r\n    touchEvent.metaKey = e.metaKey;\r\n    touchEvent.button = button;\r\n\r\n    // ALT ist gedrückt für \"zweiten Finger\" (funktioniert nur für Zoom, nicht für Pinch)\r\n    if ((e.altKey) && (e2 == null)) {\r\n        if (DWTOUCH_TOUCH_EMULATION_CENTER_CLIENT_X == null) {\r\n            DWTOUCH_TOUCH_EMULATION_CENTER_CLIENT_X = e.clientX;\r\n            DWTOUCH_TOUCH_EMULATION_CENTER_CLIENT_Y = e.clientY;\r\n        }\r\n    } else {\r\n        DWTOUCH_TOUCH_EMULATION_CENTER_CLIENT_X = null;\r\n        DWTOUCH_TOUCH_EMULATION_CENTER_CLIENT_Y = null;\r\n    }\r\n\r\n    // einen bzw. zwei Touches mit DWTOUCH_TOUCH_EMULATION_CENTER_CLIENT_X/Y als Zentrum erzeugen\r\n    if (DWTOUCH_TOUCH_EMULATION_CENTER_CLIENT_X == null) {\r\n        touchEvent.targetTouches = new Array((e2 != null) ? 2 : 1);\r\n        touchEvent.targetTouches[0] = new Object();\r\n        touchEvent.targetTouches[0].clientX = e.clientX;\r\n        touchEvent.targetTouches[0].clientY = e.clientY;\r\n        touchEvent.targetTouches[0].pageX = e.pageX;\r\n        touchEvent.targetTouches[0].pageY = e.pageY;\r\n        touchEvent.targetTouches[0].screenX = e.screenX;\r\n        touchEvent.targetTouches[0].screenY = e.screenY;\r\n        touchEvent.targetTouches[0].target = DWTOUCH_TOUCH_TARGET;\r\n        if (e2 != null) {\r\n            touchEvent.targetTouches[1] = new Object();\r\n            touchEvent.targetTouches[1].clientX = e2.clientX;\r\n            touchEvent.targetTouches[1].clientY = e2.clientY;\r\n            touchEvent.targetTouches[1].pageX = e2.pageX;\r\n            touchEvent.targetTouches[1].pageY = e2.pageY;\r\n            touchEvent.targetTouches[1].screenX = e2.screenX;\r\n            touchEvent.targetTouches[1].screenY = e2.screenY;\r\n            touchEvent.targetTouches[1].target = DWTOUCH_TOUCH_TARGET;\r\n        }\r\n    } else {\r\n        touchEvent.targetTouches = new Array(2);\r\n        touchEvent.targetTouches[0] = new Object();\r\n        touchEvent.targetTouches[0].clientX = e.clientX;\r\n        touchEvent.targetTouches[0].clientY = e.clientY;\r\n        touchEvent.targetTouches[0].pageX = e.pageX;\r\n        touchEvent.targetTouches[0].pageY = e.pageY;\r\n        touchEvent.targetTouches[0].screenX = e.screenX;\r\n        touchEvent.targetTouches[0].screenY = e.screenY;\r\n        touchEvent.targetTouches[0].target = DWTOUCH_TOUCH_TARGET;\r\n\r\n        var deltaX = 2 * (e.clientX - DWTOUCH_TOUCH_EMULATION_CENTER_CLIENT_X);\r\n        var deltaY = 2 * (e.clientY - DWTOUCH_TOUCH_EMULATION_CENTER_CLIENT_Y);\r\n        touchEvent.targetTouches[1] = new Object();\r\n        touchEvent.targetTouches[1].clientX = e.clientX - deltaX;\r\n        touchEvent.targetTouches[1].clientY = e.clientY - deltaY;\r\n        touchEvent.targetTouches[1].pageX = e.pageX - deltaX;\r\n        touchEvent.targetTouches[1].pageY = e.pageY - deltaY;\r\n        touchEvent.targetTouches[1].screenX = e.screenX - deltaX;\r\n        touchEvent.targetTouches[1].screenY = e.screenY - deltaY;\r\n        touchEvent.targetTouches[1].target = DWTOUCH_TOUCH_TARGET;\r\n    }\r\n    return touchEvent;\r\n}\r\n\r\nfunction dwTouchFireMouseEventForTouchEvent(touchEvent, mouseEventType) {\r\n    var numMouseClicks = mouseEventType == \"dblclick\" ? 2 : 1;\r\n    var target = null;\r\n    var mouseEvent = document.createEvent(\"MouseEvents\");\r\n    if ((touchEvent.targetTouches != null) && (touchEvent.targetTouches.length > 0)) {\r\n        mouseEvent.initMouseEvent(mouseEventType, true, true, touchEvent.view, numMouseClicks,\r\n                                  touchEvent.targetTouches[0].screenX, touchEvent.targetTouches[0].screenY,\r\n                                  touchEvent.targetTouches[0].clientX, touchEvent.targetTouches[0].clientY,\r\n                                  touchEvent.ctrlKey, touchEvent.altKey, touchEvent.shiftKey, touchEvent.metaKey, touchEvent.button,\r\n                                  touchEvent.targetTouches[0].target);\r\n        mouseEvent.pageX = touchEvent.targetTouches[0].pageX;\r\n        mouseEvent.pageY = touchEvent.targetTouches[0].pageY;\r\n        target = touchEvent.targetTouches[0].target;\r\n    } else { // z.B. notwendig für touchend\r\n        // Beim TouchEnd wird kein Touchpunkt übergeben, deshalb nehme den, der sich aus touchStart und touchMove ergibt\r\n        // ScreenX/Y wird nicht ausgewertet wird aber übergeben, damit die Werte halbwegs stimmig sind und nicht in der JS-Implementierung ein Bereichcheck\r\n        // fehlschlägt. Im FireFox könnte auch 0 verwendet werden, aber man weiß nicht, ob andere Browser das vertragen\r\n        mouseEvent.initMouseEvent(mouseEventType, true, true, touchEvent.view, numMouseClicks, DWTOUCH_CURRENT_SCREEN_X1, DWTOUCH_CURRENT_SCREEN_Y1, DWTOUCH_CURRENT_X1, DWTOUCH_CURRENT_Y1,\r\n                                  touchEvent.ctrlKey, touchEvent.altKey, touchEvent.shiftKey, touchEvent.metaKey, touchEvent.button,\r\n                                  touchEvent.target);\r\n\r\n        // Die Zuweisung bewirkt im Firefox nichts. Bin nicht sicher, ob man die braucht\r\n        // mouseEvent.pageX scheint readonly zu sein\r\n        mouseEvent.pageX = DWTOUCH_CURRENT_X1;\r\n        mouseEvent.pageY = DWTOUCH_CURRENT_Y1;\r\n        target = touchEvent.target;\r\n    }\r\n\r\n    // Wenn das Event nicht zum Server weitergeleitet werden soll, muss man das Attribut hier übernehmen\r\n    if (touchEvent.skipServer) {\r\n        mouseEvent.skipServer = true;\r\n    }\r\n\r\n    var relTargetCoords = dwUtilsGetRelMouseCoords(mouseEvent, target);\r\n    mouseEvent.offsetX = relTargetCoords.x;\r\n    mouseEvent.offsetY = relTargetCoords.y;\r\n    mouseEvent.dwTouch = true;\r\n    target.dispatchEvent(mouseEvent);\r\n    dwTouchRemoveSelection(touchEvent);\r\n\r\n    // bei mousemove ohne gefundene ScrollPane (innerhalb eines Elements, welches auf mousemove reagiert) des Standardverhalten\r\n    // deaktivieren, weil ansonsten eine evtl. umschließende ScrollPane durch den Browser gescrollt werden würde\r\n    if ((mouseEventType == \"mousemove\") && (DWTOUCH_SCROLLPANE == null) && touchEvent.preventDefault) {\r\n        touchEvent.preventDefault();\r\n    }\r\n}\r\n\r\nfunction dwTouchStart(e) {\r\n    var eventTarget = dwUtilsGetEventTarget(e);\r\n    if (dwUtilsIsInputTextBox(eventTarget)) {\r\n        // Auf Inputcontrols und auch Textareas keine eigenen Touchfunktionen ausführen\r\n        return;\r\n    }\r\n    if (dwFrameworkShowDevelopmentMessages()) {\r\n        dwFrameworkShowHint(\"TOUCH_START\", \"touchStart with \" + e.targetTouches.length + \" finger\" + ((e.targetTouches.length > 1) ? \"s\" : \"\"),\r\n                            \"#ccccff\", \"#000000\");\r\n        dwFrameworkShowHint(\"TOUCH_MOVE\", \"touchMove N/A\", \"#ccccff\", \"#000000\");\r\n        dwFrameworkShowHint(\"TOUCH_END\", \"touchEnd N/A\", \"#ccccff\", \"#000000\");\r\n    }\r\n    if (framework_isiOS) {\r\n        // iOS 11.x hat Stabilitätsprobleme bei Page-Zoom Operationen (Pinch Zoom).\r\n        // https://bugs.webkit.org/show_bug.cgi?id=172206\r\n        // Sicherheitshalber werden ALLE Aktionen abgebrochen, auch das schöne smoothe Scrolling in der Stückliste\r\n        // wird händisch über JS Code durchgeführt ... (für iOS)\r\n        // Natürlich gibt es für jede Regel eine Ausnahme (Bei Eingabecontrols reagiert Safari leider nicht mehr wenn wir das Default Verhalten abschalten, ...)\r\n        dwTouchPreventDefaultBehaviourIfRequired(e);\r\n    }\r\n    if (e.targetTouches.length > 0) {\r\n        if ((DWTOUCH_TOUCHED_ID != null) && ($(DWTOUCH_TOUCHED_ID) != null)) { // notwendig, wenn ein weiterer Finger dazukommt und ein weiteres dwTouchStart() auslöst\r\n            if (typeof (dwAjaxDefaultOnMouseUp) != \"undefined\") {\r\n                dwAjaxDefaultOnMouseUp(e, DWTOUCH_TOUCHED_ID, DWTOUCH_TOUCHED_ID, \"\", true);\r\n            }\r\n        }\r\n        DWTOUCH_LONG_PRESS_START_TIME = new Date().getTime();\r\n        DWTOUCH_FINGERS = 1;\r\n        DWTOUCH_TOUCH_TARGET = e.target;\r\n        DWTOUCH_START_X1 = e.targetTouches[0].clientX;\r\n        DWTOUCH_START_Y1 = e.targetTouches[0].clientY;\r\n        DWTOUCH_CURRENT_X1 = DWTOUCH_START_X1;\r\n        DWTOUCH_CURRENT_Y1 = DWTOUCH_START_Y1;\r\n        DWTOUCH_CURRENT_SCREEN_X1 = e.targetTouches[0].screenX;\r\n        DWTOUCH_CURRENT_SCREEN_Y1 = e.targetTouches[0].screenY;\r\n        DWTOUCH_SCROLLPANE = dwTouchFindScrollPane(e);\r\n        DWTOUCH_SCROLLPANE_NATIVE = false;\r\n        if (DWTOUCH_SCROLLPANE != null) {\r\n            // natives Scrolling auf mobilen Browsern, die diese Funktion unterstützen (der Android System-Browser ab\r\n            // Androis 4.0 liefert leider nicht 'touch' zurück, unterstützt das native Scrolling aber ebenfalls)\r\n            // Safari liefert der Android Browser anscheinend mit, damit die Webseiten, die hart auf IPhone programmiert sind,\r\n            // funktionieren\r\n            DWTOUCH_SCROLLPANE_NATIVE = (dwUtilsGetStyle(DWTOUCH_SCROLLPANE, \"-webkit-overflow-scrolling\") == \"touch\") ||\r\n                                        (framework_isAndroid && framework_isSafari && (framework_mobileOSVersion >= 4.0));\r\n            // Vermeiden der Scroll/Pinch Funktionen durch den Safari Browser (iOS) aufgrund Stabiltätsprobleme / Zoom Probleme\r\n            DWTOUCH_SCROLLPANE_NATIVE = false;\r\n\r\n            DWTOUCH_START_SCROLL_DATE = new Date();\r\n            DWTOUCH_START_SCROLL_X = DWTOUCH_SCROLLPANE.scrollLeft;\r\n            DWTOUCH_START_SCROLL_Y = DWTOUCH_SCROLLPANE.scrollTop;\r\n            e.target.style.webkitTapHighlightColor = \"rgba(0,0,0,0)\";\r\n        }\r\n        if (e.targetTouches.length > 1) {\r\n            if (framework_isiOS) {\r\n                // Bei Pinch Gesten (egal auf welchem Control) wird die Event Weitergabe an den Browser unterbunden -\r\n                // Ursache siehe Beginn der Methode ...\r\n                dwFrameworkPreventDefaultBehaviour(e);\r\n            }\r\n            DWTOUCH_FINGERS = 2;\r\n            DWTOUCH_START_X2 = e.targetTouches[1].clientX;\r\n            DWTOUCH_START_Y2 = e.targetTouches[1].clientY;\r\n            DWTOUCH_CURRENT_X2 = DWTOUCH_START_X2;\r\n            DWTOUCH_CURRENT_Y2 = DWTOUCH_START_Y2;\r\n            DWTOUCH_IMAGEVIEW = dwTouchFindImageViewer(e);\r\n            if (DWTOUCH_IMAGEVIEW != null) {\r\n                DWTOUCH_IMAGEVIEW_START_ZOOMLEVEL = dwImageViewerGetImage(DWTOUCH_IMAGEVIEW.id).dwCurrentZoomLevel;\r\n            }\r\n        } else {\r\n            // genau 1 Finger\r\n            DWTOUCH_TOUCHED_ID = dwTouchFindTargetId(e);\r\n            dwTouchFireMouseEventForTouchEvent(e, \"mousedown\");\r\n        }\r\n    }\r\n}\r\n\r\nfunction dwTouchMove(e) {\r\n    if (dwUtilsIsInputTextBox(dwUtilsGetEventTarget(e))) {\r\n        // Auf Inputcontrols keine eigenen Touchfunktionen ausführen\r\n        return;\r\n    }\r\n\r\n    if (dwFrameworkShowDevelopmentMessages()) {\r\n        dwFrameworkShowHint(\"TOUCH_MOVE\", \"touchMove with \" + e.targetTouches.length + \" finger\" + ((e.targetTouches.length > 1) ? \"s\" : \"\"),\r\n                            \"#ccccff\", \"#000000\");\r\n    }\r\n\r\n    if (DWTOUCH_FINGERS == -1) {\r\n        return;\r\n    }\r\n\r\n    DWTOUCH_TOUCH_MOVED = true;\r\n\r\n    if (e.targetTouches.length > 0) {\r\n        DWTOUCH_CURRENT_X1 = e.targetTouches[0].clientX;\r\n        DWTOUCH_CURRENT_Y1 = e.targetTouches[0].clientY;\r\n        DWTOUCH_CURRENT_SCREEN_X1 = e.targetTouches[0].screenX;\r\n        DWTOUCH_CURRENT_SCREEN_Y1 = e.targetTouches[0].screenY;\r\n    }\r\n    if (e.targetTouches.length > 1) {\r\n        DWTOUCH_FINGERS = 2;\r\n        DWTOUCH_CURRENT_X2 = e.targetTouches[1].clientX;\r\n        DWTOUCH_CURRENT_Y2 = e.targetTouches[1].clientY;\r\n        if (DWTOUCH_START_X2 == -1) {\r\n            // Wir hatten noch keine zwei Finger\r\n            DWTOUCH_START_X2 = DWTOUCH_CURRENT_X2;\r\n            DWTOUCH_START_Y2 = DWTOUCH_CURRENT_Y2;\r\n        }\r\n    }\r\n\r\n    if ((DWTOUCH_FINGERS == 1) && (DWTOUCH_SCROLLPANE != null)) {\r\n        var doPreventDefault = !DWTOUCH_SCROLLPANE_NATIVE;\r\n        var distanceY = DWTOUCH_CURRENT_Y1 - DWTOUCH_START_Y1;\r\n        var distanceX = DWTOUCH_CURRENT_X1 - DWTOUCH_START_X1;\r\n\r\n        if (dwFrameworkShowDevelopmentMessages()) {\r\n            dwFrameworkShowHint(\"TOUCH_MOVE\", \"touchMove with 1 finger: \" + distanceX + \"dx; \" + distanceY + \"dy\", \"#ccccff\", \"#000000\");\r\n        }\r\n        var verticalScrollEnabled = !dwDomHasAttribute(DWTOUCH_SCROLLPANE, \"verticalScrollEnabled\") || (dwDomGetDomAttribute(DWTOUCH_SCROLLPANE, \"verticalScrollEnabled\") == \"true\");\r\n        var horizontalScrollEnabled = !dwDomHasAttribute(DWTOUCH_SCROLLPANE, \"horizontalScrollEnabled\") || (dwDomGetDomAttribute(DWTOUCH_SCROLLPANE, \"horizontalScrollEnabled\") == \"true\");\r\n        if (DWTOUCH_SCROLLPANE_IS_IMAGE || verticalScrollEnabled) {\r\n            if (!DWTOUCH_SCROLLPANE_NATIVE) {\r\n                if (Math.abs(distanceY) > 10) {\r\n                    var scrollTop = DWTOUCH_START_SCROLL_Y - distanceY;\r\n                    if (scrollTop < 1) {\r\n                        scrollTop = 1;\r\n                    }\r\n                    DWTOUCH_SCROLLPANE.scrollTop = scrollTop;\r\n                }\r\n            } else {\r\n                // bei nativem Scrolling unter iOS muss das Standard-Touch-Verhalten deaktiviert werden,\r\n                // wenn aufgrund der Größe des Inhalts gerade kein vertikales Scrolling in dieser ScrollPane stattfindet,\r\n                // um das vertikale Scrollen der ganzen Seite zu verhindern\r\n                if ((!horizontalScrollEnabled || (Math.abs(distanceY) >= Math.abs(distanceX))) && (DWTOUCH_SCROLLPANE.scrollHeight <= DWTOUCH_SCROLLPANE.clientHeight)) {\r\n                    doPreventDefault = true\r\n                }\r\n            }\r\n        }\r\n\r\n        if (DWTOUCH_SCROLLPANE_IS_IMAGE || horizontalScrollEnabled) {\r\n            if (!DWTOUCH_SCROLLPANE_NATIVE) {\r\n                if (Math.abs(distanceX) > 10) {\r\n                    var scrollLeft = DWTOUCH_START_SCROLL_X - distanceX;\r\n                    if (scrollLeft < 1) {\r\n                        scrollLeft = 1;\r\n                    }\r\n                    DWTOUCH_SCROLLPANE.scrollLeft = scrollLeft;\r\n                }\r\n            } else {\r\n                // bei nativem Scrolling unter iOS muss das Standard-Touch-Verhalten deaktiviert werden,\r\n                // wenn aufgrund der Größe des Inhalts gerade kein horizontales Scrolling in dieser ScrollPane stattfindet,\r\n                // um das horizontale Scrollen der ganzen Seite zu verhindern\r\n                if ((!verticalScrollEnabled || (Math.abs(distanceX) >= Math.abs(distanceY))) && (DWTOUCH_SCROLLPANE.scrollWidth <= DWTOUCH_SCROLLPANE.clientWidth)) {\r\n                    doPreventDefault = true\r\n                }\r\n            }\r\n        }\r\n        if (!DWTOUCH_SCROLLPANE_IS_IMAGE && !verticalScrollEnabled && !horizontalScrollEnabled) {\r\n            doPreventDefault = true;\r\n        }\r\n        if (e.preventDefault && doPreventDefault && framework_isiOS) {\r\n            e.preventDefault();//nur im Fall von iOS unterdrucken\r\n        }\r\n    } else if (DWTOUCH_FINGERS == 1) {\r\n        dwTouchFireMouseEventForTouchEvent(e, \"mousemove\");\r\n    } else if ((DWTOUCH_FINGERS == 2) && (DWTOUCH_IMAGEVIEW != null)) {\r\n        var image = dwImageViewerGetImage(DWTOUCH_IMAGEVIEW.id);\r\n        var origDistance = dwTouchGetDistance(DWTOUCH_START_X1, DWTOUCH_START_Y1, DWTOUCH_START_X2, DWTOUCH_START_Y2);\r\n        var newDistance = dwTouchGetDistance(DWTOUCH_CURRENT_X1, DWTOUCH_CURRENT_Y1, DWTOUCH_CURRENT_X2, DWTOUCH_CURRENT_Y2);\r\n        var diff = newDistance - origDistance;\r\n        var zoomLevel = DWTOUCH_IMAGEVIEW_START_ZOOMLEVEL + (diff / 30);\r\n        dwImageViewerSetNormalizedZoom(image, zoomLevel, null, 50);\r\n        if (e.preventDefault) {\r\n            e.preventDefault();\r\n        }\r\n    }\r\n}\r\n\r\nfunction dwTouchGetDistance(x1, y1, x2, y2) {\r\n    return Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));\r\n}\r\n\r\nfunction dwTouchFindTargetId(e) {\r\n    // Gehe im DOM nach oben bis eine gültige ID gefunden wird\r\n    var id = null;\r\n    try {\r\n        var target = dwUtilsGetEventTarget(e);\r\n        while (((id == null) || (id.toString() == \"\")) && (target != null)) {\r\n            id = target.id;\r\n            target = target.parentNode;\r\n        }\r\n    } catch (exception) {\r\n        // Bei einem Fehler die letzte gültige ID beibehalten\r\n    }\r\n    return id;\r\n}\r\n\r\nfunction dwTouchFindScrollPane(e) {\r\n    var iterElement = e.target;\r\n    while (iterElement != null) {\r\n        if (dwUtilsHasElementAtLeastOneOfClasses(iterElement, [\"guiscrollpane\",\r\n                                                               \"guicustomcomboboxpopup\",\r\n                                                               \"guitable_fixed_content_div\",\r\n                                                               \"guitable_scrollable_content_div\",\r\n                                                               \"guitable_scrollable_content_div_with_fixed_columns\"])) {\r\n            DWTOUCH_SCROLLPANE_IS_IMAGE = false;\r\n            var verticalScrollEnabled = !dwDomHasAttribute(iterElement, \"verticalScrollEnabled\") || (dwDomGetDomAttribute(iterElement, \"verticalScrollEnabled\") == \"true\");\r\n            if (framework_isiOS && (iterElement.className.includes(\"guiscrollpane\") && !verticalScrollEnabled)) {\r\n                // Suche nach der primären Scrollpane. In einzelnen Oberflächen sind ggf. Tabellen (nacheinander) in einer\r\n                // großen Scrollpane vorhanden. Die Tabellen für sich sind vollständig dargestellt (und damit nicht scrollbar, deshalb wird hier auch auf verticalScrollEnabled geprüft)\r\n                // Das Scrolling erfolgt in einem parent container. Die Information zum Scrollen muss daher\r\n                // nicht von der vollständig dargestellten Tabelle mit Scrollcontainer sondern vom primären Scrollcontainer\r\n                // verarbeitet werden ...\r\n                return dwUtilsFindMatchingNodes($(\"body\"), iterElement.parentNode, function(rootNode, node) {\r\n                    return node.classList.contains(\"guiscrollpane\");\r\n                }, true).pop() || iterElement;\r\n            }\r\n            return iterElement;\r\n        } else if ((iterElement.id != null) && iterElement.id.indexOf(\"_imagescroll\") > -1) {\r\n            DWTOUCH_SCROLLPANE_IS_IMAGE = true;\r\n            return iterElement;\r\n        } else if ((iterElement.onmousemove) && (iterElement.hotspot == null)) { // sobald ein MouseMove-Listener gefunden wurde (hotspotSpanClickArea ignorieren!),\r\n            return null;                                           // nicht mehr weiter nach einer ScrollPane suchen\r\n        } else {\r\n            iterElement = iterElement.parentNode;\r\n        }\r\n    }\r\n    return null;\r\n}\r\n\r\nfunction dwTouchFindImageViewer(e) {\r\n    var iter = e.target;\r\n    while (iter != null) {\r\n        if (iter.className == \"guiviewerimage\") {\r\n            return iter;\r\n        } else {\r\n            iter = iter.parentNode;\r\n        }\r\n    }\r\n    return null;\r\n}\r\n\r\nfunction dwTouchEnd(e) {\r\n\r\n    dwTouchPreventDoubeTap(e);\r\n    if (dwUtilsIsInputTextBox(dwUtilsGetEventTarget(e))) {\r\n        // Auf Inputcontrols keine eigenen Touchfunktionen ausführen\r\n        // Ausnahme, die Zeit für den letzten Click merken um den doubleClick bei ios abzufangen\r\n        DWTOUCH_LAST_TOUCH_TIME = new Date().getTime();\r\n        return;\r\n    }\r\n\r\n    // Hier drin wird das Event möglicherweise verändert!\r\n    dwTouchPreventDefaultBehaviourIfRequired(e);\r\n\r\n    if (dwFrameworkShowDevelopmentMessages()) {\r\n        dwFrameworkShowHint(\"TOUCH_END\", \"touchEnd\" + ((DWTOUCH_FINGERS > 0) ? \" with \" + DWTOUCH_FINGERS + \" finger\"\r\n                                         + ((DWTOUCH_FINGERS > 1) ? \"s\" : \"\") : \"\"), \"#ccccff\", \"#000000\");\r\n    }\r\n\r\n    if (DWTOUCH_FINGERS == -1) {\r\n        return;\r\n    }\r\n\r\n    if (DWTOUCH_FINGERS == 1) {\r\n        var distanceX = DWTOUCH_CURRENT_X1 - DWTOUCH_START_X1;\r\n        var distanceY = DWTOUCH_CURRENT_Y1 - DWTOUCH_START_Y1;\r\n\r\n        if (dwFrameworkShowDevelopmentMessages()) {\r\n            dwFrameworkShowHint(\"TOUCH_END\", \"touchEnd with 1 finger: \" + distanceX + \"dx; \" + distanceY + \"dy\", \"#ccccff\", \"#000000\");\r\n        }\r\n\r\n        var result = \"\";\r\n        if (distanceX < -DWTOUCH_SLIDE_VALUE) {\r\n            // nach links\r\n            if (distanceY < -DWTOUCH_SLIDE_VALUE) {\r\n                // nach oben\r\n                result = DWTOUCH_SLIDE_DIRECTION_NORTHWEST;\r\n            } else if (distanceY > DWTOUCH_SLIDE_VALUE) {\r\n                // nach unten\r\n                result = DWTOUCH_SLIDE_DIRECTION_SOUTHWEST;\r\n            } else {\r\n                result = DWTOUCH_SLIDE_DIRECTION_WEST;\r\n            }\r\n        } else if (distanceX > DWTOUCH_SLIDE_VALUE) {\r\n            // nach rechts\r\n            if (distanceY < -DWTOUCH_SLIDE_VALUE) {\r\n                // nach oben\r\n                result = DWTOUCH_SLIDE_DIRECTION_NORTHEAST;\r\n            } else if (distanceY > DWTOUCH_SLIDE_VALUE) {\r\n                // nach unten\r\n                result = DWTOUCH_SLIDE_DIRECTION_SOUTHEAST;\r\n            } else {\r\n                result = DWTOUCH_SLIDE_DIRECTION_EAST;\r\n            }\r\n        } else {\r\n            if (distanceY < -DWTOUCH_SLIDE_VALUE) {\r\n                // nach oben\r\n                result = DWTOUCH_SLIDE_DIRECTION_NORTH;\r\n            } else if (distanceY > DWTOUCH_SLIDE_VALUE) {\r\n                // nach unten\r\n                result = DWTOUCH_SLIDE_DIRECTION_SOUTH;\r\n            } else {\r\n                // Nichts gemacht\r\n            }\r\n        }\r\n        if (result != \"\") {\r\n            if (DWTOUCH_HANDLER_MOVE_EVENT != null) {\r\n                if ((result == DWTOUCH_SLIDE_DIRECTION_EAST) || (result == DWTOUCH_SLIDE_DIRECTION_WEST)) {\r\n                    if (DWTOUCH_TOUCHED_ID == null) {\r\n                        DWTOUCH_TOUCHED_ID = DWTOUCH_HANDLER_MOVE_EVENT;\r\n                    }\r\n\r\n                    // JFRAME-125 TODO Der Eventhandler ist aktuell fix auf das GuiWindow (DWTOUCH_HANDLER_MOVE_EVENT) gesetzt, da\r\n                    // Touch-Events bisher auch nur am GuiWindow registriert werden\r\n                    if ($(DWTOUCH_TOUCHED_ID) != null) {\r\n                        if (dwFrameworkShowDevelopmentMessages()) {\r\n                            dwFrameworkShowHint(\"TOUCH_END\", \"touchEnd with gesture: \" + result, \"#ccccff\", \"#000000\");\r\n                        }\r\n\r\n                        if (typeof (dwAjaxDefaultOnTouchEvent) != \"undefined\") {\r\n                            dwAjaxDefaultOnTouchEvent(e, DWTOUCH_HANDLER_MOVE_EVENT, DWTOUCH_TOUCHED_ID, \"touchDirection=\" + result, true);\r\n                        }\r\n                    }\r\n                } else {\r\n                    // Im Tablet-Modus fehlt sonst das MouseUp und die Hoverfarbe beim Hoch-/Runterswipen wird nicht zurückgesetzt. Evtl nicht die finale Lösung.\r\n                    dwTouchFireMouseEventForTouchEvent(e, \"mouseup\");\r\n                }\r\n            }\r\n        } else {\r\n            // Doppelklick erzeugen\r\n            var now = new Date().getTime();\r\n            // für Doppelklick bei Touch doppelte Zeit wie normal (DWUTILS_DOUBLE_CLICK_TIME) zulassen\r\n            if ((now - DWTOUCH_LAST_TOUCH_TIME < 2 * DWUTILS_DOUBLE_CLICK_TIME) && (DWTOUCH_LAST_TOUCH_TARGET != null) && (DWTOUCH_LAST_TOUCH_TARGET == e.target)) {\r\n                if (dwFrameworkShowDevelopmentMessages()) {\r\n                    dwFrameworkShowHint(\"TOUCH_END\", \"touchEnd with double click\", \"#ccccff\", \"#000000\");\r\n                }\r\n\r\n                dwTouchFireMouseEventForTouchEvent(e, \"dblclick\");\r\n                DWTOUCH_LAST_TOUCH_TARGET = null;\r\n                DWTOUCH_LAST_TOUCH_TIME = 0;\r\n            } else {\r\n                DWTOUCH_LAST_TOUCH_TARGET = e.target;\r\n\r\n                // Klick erzeugen, wenn zwischendrin ein touchMove() stattgefunden hat oder TouchEvents emuliert werden\r\n                if ((Math.abs(distanceX) < DWTOUCH_CLICK_TOLERANCE_VALUE) && (Math.abs(distanceY) < DWTOUCH_CLICK_TOLERANCE_VALUE)) {\r\n                    if (dwFrameworkShowDevelopmentMessages()) {\r\n                        dwFrameworkShowHint(\"TOUCH_END\", \"touchEnd with click\", \"#ccccff\", \"#000000\");\r\n                    }\r\n                    var longPress = now - DWTOUCH_LONG_PRESS_START_TIME >= 500;\r\n                    if (longPress) {\r\n                        e.button = 2; // longPress => \"Rechtsklick\"\r\n                    }\r\n                    dwTouchFireMouseEventForTouchEvent(e, \"mouseup\");\r\n                    if (e.button !== 2) {     // Bei Rechtsklick nur mouseup und kein click, sonst gehen u.a. Tabellenselektionen verloren\r\n                        dwTouchFireMouseEventForTouchEvent(e, \"click\");\r\n                    }\r\n                    // Nur für iOS und Chrome notwendig, da nur für iOS die Befehle (default Behaviour) an den Browser größtenteils verhindert werden\r\n                    // Das LongPress Verhalten wird nachträglich gezielt emuliert.\r\n\r\n                    if (longPress && (framework_isiOS || framework_isChrome)) {\r\n                        dwTouchFireMouseEventForTouchEvent(e, \"contextmenu\");\r\n                    }\r\n                } else if (!DWTOUCH_TOUCH_MOVED && dwFrameworkShowDevelopmentMessages()) { // nativer click-Event vom OS\r\n                    dwFrameworkShowHint(\"TOUCH_END\", \"touchEnd with click\", \"#ccccff\", \"#000000\");\r\n                } else {\r\n                    dwTouchFireMouseEventForTouchEvent(e, \"mouseup\");\r\n                }\r\n\r\n                DWTOUCH_LAST_TOUCH_TIME = now;\r\n            }\r\n        }\r\n    }\r\n    var smoothVar_DWTOUCH_START_SCROLLPANE = null;\r\n    var smoothVar_DWTOUCH_START_SCROLL_DATE = null;\r\n    if ((DWTOUCH_FINGERS == 1) && !DWTOUCH_SCROLLPANE_IS_IMAGE && !DWTOUCH_SCROLLPANE_NATIVE) {\r\n        smoothVar_DWTOUCH_START_SCROLLPANE = DWTOUCH_SCROLLPANE;\r\n        smoothVar_DWTOUCH_START_SCROLL_DATE = DWTOUCH_START_SCROLL_DATE;\r\n    }\r\n\r\n    dwTouchReset();\r\n\r\n    if (smoothVar_DWTOUCH_START_SCROLLPANE != null) {\r\n        if (Math.abs(distanceY) > 0.5) {\r\n            setTimeout(function() {\r\n                var endDate = new Date();\r\n                var smoothY = 0;\r\n                var vY = distanceY / (endDate.getTime() - smoothVar_DWTOUCH_START_SCROLL_DATE.getTime());\r\n                if ((endDate.getTime() - smoothVar_DWTOUCH_START_SCROLL_DATE.getTime()) < 500) {\r\n                    smoothY = vY * 250;\r\n                } else {\r\n                    smoothY = 0;\r\n                }\r\n                if (smoothY != 0) {\r\n                    dwTouchSmoothScroll(smoothVar_DWTOUCH_START_SCROLLPANE, smoothVar_DWTOUCH_START_SCROLLPANE.scrollTop, smoothY);\r\n                }\r\n            }, 0);\r\n        }\r\n    }\r\n}\r\n\r\n\r\n/**\r\n * Verhindert manuell das Double-Tap Verhalten im Browser\r\n * iOS 10 ignoriert die bisher funktionierenden meta tags zum Abschalten des zooms via double tap\r\n * https://webkit.org/blog/7367/new-interaction-behaviors-in-ios-10/\r\n * @param e\r\n */\r\nfunction dwTouchPreventDoubeTap(e) {\r\n    var now = new Date().getTime();\r\n    if ((now - DWTOUCH_LAST_TOUCH_TIME < 2 * DWUTILS_DOUBLE_CLICK_TIME)) {\r\n        // DWTOUCH_LAST_TOUCH_TARGET stimmt ggf. nicht immer mit dem Browser-Zustand überein (NULL bzw. DIV kann Double Tap auslösen)\r\n        // Das Attribut ignorieren wir für die Prüfung\r\n        // Dieses abschalten des Browser-Default-Verhaltens wirkt sich nicht auf eigentliche\r\n        // Doppelclicks aus (die im weiteren Verlauf der dwTouchEnd Methode getriggert werden)\r\n        // Hier wird wie gewohnt das DWTOUCH_LAST_TOUCH_TARGET ausgewertet\r\n        dwFrameworkPreventDefaultBehaviour(e);\r\n    }\r\n}\r\n\r\nfunction dwTouchPreventDefaultBehaviourIfRequired(e) {\r\n    var target = dwUtilsGetEventTarget(e);\r\n    if (!target) {\r\n        return false;\r\n    }\r\n    var preventDefaultBehaviour = true;\r\n    var isInputField = dwUtilsIsInputTextBox(target);\r\n    var isSelectOptionField = dwUtilsStringStartsWith(target.tagName, \"option\", true)\r\n                              || dwUtilsStringStartsWith(target.tagName, \"select\", true);\r\n    if ((framework_isiOS && isInputField) || isSelectOptionField) {\r\n        // iOS hat Probleme den Focus zu setzen, wenn das Default Behaviour abgeschalten wurde\r\n        // Programmatisch Focus setzen ist (warum auch immer) verboten - und führt nicht zuverlässig zum Erfolg\r\n        // Ein langer Touch würde funktionieren in Verbindung mit focus() Befehl, aber ist nicht wirklich intuitiv\r\n        // Bei SELECT Tags ist browserübergreifend das Problem, dass ein onChange nicht ausgelöst wird wenn das Standardverhalten\r\n        // unterbunden wird ...\r\n        preventDefaultBehaviour = false;\r\n    }\r\n    if (preventDefaultBehaviour) {\r\n        // Hier drin wird das Event möglicherweise verändert!\r\n        dwFrameworkPreventDefaultBehaviour(e);\r\n    }\r\n    return preventDefaultBehaviour;\r\n}\r\n\r\nfunction dwTouchSmoothScroll(scrollPane, currentValue, distance) {\r\n    if (DWTOUCH_SCROLLPANE != null) {\r\n        // Neuer Touch\r\n        return;\r\n    }\r\n    currentValue -= distance;\r\n    scrollPane.scrollTop = currentValue;\r\n    if (Math.abs(distance) > 2) {\r\n        dwTouchSmoothScroll(scrollPane, currentValue, distance / 2);\r\n    }\r\n}\r\n\r\nfunction dwTouchReset() {\r\n    DWTOUCH_START_X1 = -1;\r\n    DWTOUCH_START_Y1 = -1;\r\n    DWTOUCH_CURRENT_X1 = -1;\r\n    DWTOUCH_CURRENT_Y1 = -1;\r\n    DWTOUCH_CURRENT_SCREEN_X1 = -1;\r\n    DWTOUCH_CURRENT_SCREEN_Y1 = -1;\r\n    DWTOUCH_START_X2 = -1;\r\n    DWTOUCH_START_Y2 = -1;\r\n    DWTOUCH_CURRENT_X2 = -1;\r\n    DWTOUCH_CURRENT_Y2 = -1;\r\n    DWTOUCH_SCROLLPANE = null;\r\n    DWTOUCH_IMAGEVIEW = null;\r\n    DWTOUCH_IMAGEVIEW_START_ZOOMLEVEL = -1;\r\n    DWTOUCH_START_SCROLL_X = -1;\r\n    DWTOUCH_START_SCROLL_Y = -1;\r\n    DWTOUCH_START_SCROLL_DATE = null;\r\n    DWTOUCH_SCROLLPANE_IS_IMAGE = false;\r\n    DWTOUCH_SCROLLPANE_NATIVE = false;\r\n    DWTOUCH_FINGERS = -1;\r\n    DWTOUCH_TOUCHED_ID = null;\r\n    DWTOUCH_TOUCH_MOVED = false;\r\n    DWTOUCH_TOUCH_EMULATION_CENTER_CLIENT_X = null;\r\n    DWTOUCH_TOUCH_EMULATION_CENTER_CLIENT_Y = null;\r\n    DWTOUCH_TOUCHING = false;\r\n    DWTOUCH_LONG_PRESS_START_TIME = 0;\r\n}\r\n\r\n\n// Debug Kanal wird von IE nicht unterstützt\r\n// Firebug API: http://getfirebug.com/wiki/index.php/Console_API\r\n// IE API: http://msdn.microsoft.com/en-us/library/gg589530%28v=vs.85%29.aspx\r\n\r\n/**\r\n * Initialisiert das Logger Objekt. Native Firebug Console steht erst nach dem onload zur Verfügung\r\n * @param forceLoggingInBrowserWindow\r\n */\r\nfunction DwLogger(forceLoggingInBrowserWindow) {\r\n    this.logger = this.__internal_getConsole(forceLoggingInBrowserWindow);\r\n    this.groupStack = new Array();\r\n    this.DW_LOGGER_CHANNELS = {\r\n        INFO: \"info\",\r\n        WARN: \"warn\",\r\n        ERROR: \"error\",\r\n        ASSERT: \"assert\",\r\n        LOG: \"log\",\r\n        DEBUG: \"debug\"\r\n    };\r\n}\r\n\r\nDwLogger.prototype.__internal_getConsole = function(forceLoggingInBrowserWindow) {\r\n    var nativeConsole = null;\r\n    try {\r\n        nativeConsole = (window.console) ? window.console : console;\r\n    } catch (exception) {\r\n        // keine console\r\n    }\r\n    var supportsNativeConsole = (nativeConsole != null); // deckt auch != undefined ab\r\n    if (forceLoggingInBrowserWindow || !supportsNativeConsole) {\r\n        return new DwBrowserLogger(this);\r\n    } else {\r\n        return nativeConsole;\r\n    }\r\n};\r\n\r\nDwLogger.prototype.__internal_log = function(channel, message) {\r\n    if (this.DW_LOGGER_CHANNELS[channel.toUpperCase()]) {\r\n        var indent = \"\";\r\n        for (var i = 0; i < this.groupStack.length; i++) {\r\n            indent += \"  \"; // 2 Spaces\r\n        }\r\n        this.logger[channel.toLowerCase()](indent + message);\r\n    }\r\n};\r\n\r\nDwLogger.prototype.log = function(message) {\r\n    if (this.logger.debug) {\r\n        this.__internal_log(this.DW_LOGGER_CHANNELS.DEBUG, message);\r\n    } else {\r\n        this.__internal_log(this.DW_LOGGER_CHANNELS.LOG, message);\r\n    }\r\n};\r\n\r\nDwLogger.prototype.error = function(message) {\r\n    this.__internal_log(this.DW_LOGGER_CHANNELS.ERROR, message);\r\n};\r\n\r\nDwLogger.prototype.assert = function(expression, message) {\r\n    this.logger[this.DW_LOGGER_CHANNELS.ASSERT.toLowerCase()](expression, message);\r\n};\r\n\r\nDwLogger.prototype.clear = function() {\r\n    this.logger[\"clear\"]();\r\n};\r\n\r\nDwLogger.prototype.dir = function(obj) {\r\n    this.logger.dir(obj);\r\n};\r\n\r\nDwLogger.prototype.profile = function(profileTitle) {\r\n    this.logger.profile(profileTitle);\r\n};\r\n\r\nDwLogger.prototype.profileEnd = function() {\r\n    this.logger.profileEnd();\r\n};\r\n\r\nDwLogger.prototype.groupStart = function(message) {\r\n    if (!this.logger.group) {\r\n        dwLoggerCustomGroupStart(this, message);\r\n    } else {\r\n        this.logger.group(message);\r\n    }\r\n};\r\n\r\nDwLogger.prototype.groupEnd = function() {\r\n    if (!this.logger.groupEnd) {\r\n        dwLoggerCustomGroupEnd(this);\r\n    } else {\r\n        this.logger.groupEnd();\r\n    }\r\n//    this.log(\"<<\");\r\n};\r\n\r\n\r\nfunction dwLoggerCustomGroupStart(logger, message) {\r\n    logger.log(\"GROUP START: \" + message);\r\n    logger.groupStack.push(message);\r\n}\r\n\r\nfunction dwLoggerCustomGroupEnd(logger) {\r\n    logger.log(\"GROUP END: \" + logger.groupStack.pop());\r\n}\r\n\r\n/**\r\n * Kapsel für das Logging auf den Browser\r\n */\r\nfunction DwBrowserLogger(dwLogger) {\r\n    this.logger = dwLogger;\r\n    this.browserdoc = null;\r\n    this.browserwindow = null;\r\n    this.autoretry = 0;\r\n}\r\n\r\nDwBrowserLogger.prototype.__internal_log = function(channel, message) {\r\n    if (message == null) {\r\n        return;\r\n    }\r\n    if (this.browserdoc == null) {\r\n        if ((typeof (framework_isJ2EEBrowser) != \"undefined\") && framework_isJ2EEBrowser) {\r\n            // Im J2EE Fall hat das Popup automatisch eine Minimalgröße. Keine weiteren Vorgaben\r\n            this.browserwindow = window.open(); // kann Popup Blocker auslösen\r\n        } else {\r\n            // Im Swing Fall wird die Größe direkt vorgegeben (und das Popup wiederverwendet)\r\n            this.browserwindow = window.open(\"\", \"dw_browser_logger\", \"width=600, height=400, scrollbars=yes, resizable=yes\"); // kann Popup Blocker auslösen\r\n        }\r\n        this.browserdoc = this.browserwindow.document;\r\n    }\r\n    message = message.replace(/ /g, \"&nbsp;\");\r\n    try {\r\n        this.browserdoc.write(channel.toUpperCase() + \": \" + message + \"<br>\");\r\n    } catch (exception) {\r\n        if (this.autoretry < 3) {\r\n            this.autoretry++;\r\n            this.browserdoc = null;\r\n            this.__internal_log(channel, message);\r\n        }\r\n    }\r\n};\r\n\r\nDwBrowserLogger.prototype.log = function(message) {\r\n    this.__internal_log(this.logger.DW_LOGGER_CHANNELS.LOG, message);\r\n};\r\n\r\nDwBrowserLogger.prototype.info = function(message) {\r\n    this.__internal_log(this.logger.DW_LOGGER_CHANNELS.INFO, message);\r\n};\r\n\r\nDwBrowserLogger.prototype.warn = function(message) {\r\n    this.__internal_log(this.logger.DW_LOGGER_CHANNELS.WARN, message);\r\n};\r\n\r\nDwBrowserLogger.prototype.error = function(message) {\r\n    this.__internal_log(this.logger.DW_LOGGER_CHANNELS.ERROR, message);\r\n};\r\n\r\nDwBrowserLogger.prototype.assert = function(expression, message) {\r\n    if (!eval(expression)) {\r\n        this.__internal_log(this.logger.DW_LOGGER_CHANNELS.ASSERT, message);\r\n    }\r\n};\r\n\r\nDwBrowserLogger.prototype.clear = function() {\r\n    // Beim Schliessen eines Browser-Fensters wird eine Sicherheitsmeldung angezeigt, wenn kein \"Opener\" gesetzt ist\r\n    // Aktuell ist dieser automatisch gesetzt, da wird das Fenster aus unserem eigenen Hauptfenster heraus öffnen\r\n    // Alternativ kann der opener auch manuell gesetzt werden (Kommentar der nächsten Zeile entfernen)\r\n    this.browserwindow.opener = 'dwDummyLogOpener_foo';\r\n    this.browserwindow.close();\r\n    this.browserwindow = null;\r\n    this.browserdoc = null;\r\n};\r\n\r\nDwBrowserLogger.prototype.dir = function(obj) {\r\n    // noch nicht unterstützt\r\n};\r\n\r\nDwBrowserLogger.prototype.profile = function(profileTitle) {\r\n    // noch nicht unterstützt\r\n};\r\n\r\nDwBrowserLogger.prototype.profileEnd = function() {\r\n    // noch nicht unterstützt;\r\n};\r\n\r\nDwBrowserLogger.prototype.group = function(message) {\r\n    this.logger.log(\"GROUP START: \" + message);\r\n    this.logger.groupStack.push(message);\r\n};\r\n\r\nDwBrowserLogger.prototype.groupEnd = function(message) {\r\n    this.logger.log(\"GROUP END: \" + this.logger.groupStack.pop());\r\n};\n/*\r\n * Copyright (c) 2025 Quanos Solutions GmbH\r\n */\r\n\r\n// KONSTANTEN\r\nvar DWAJAX_ACTIVE = true;\r\n\r\nvar DWAJAX_LOG_ERRORS = true;\r\nvar DWAJAX_SHOW_ERRORS = true;\r\nvar DWAJAX_SHOW_EXCEPTIONS = true;\r\nvar DWAJAX_ERROR_DETAIL_MAX_LENGTH = 10000;\r\nvar DWAJAX_REFRESH_AFTER_ERROR = false;\r\n\r\nvar DWAJAX_DEBUG_COMMANDS = false;\r\nvar DWAJAX_SHOW_STACKTRACE = false;\r\n// Eigentlich müssten wir warten bis die Antwort vom Server kommt. Aber es funktioniert bei schnellen Klicks\r\n// nicht, deshalb erst mal disabled, bis wir etwas haben, um die Klicks aufzusammeln, während der Server arbeitet\r\nvar DWAJAX_DISABLE_INPUT = false;\r\nvar DWAJAX_WAIT_CURSOR_MS = 2000; // 2000ms, bei 0 kommt er sofort, bei -1 gar nicht\r\nvar DWAJAX_WAIT_CURSOR_TIMEOUT_ID = null;\r\nvar DWAJAX_TIMEOUT_MS = 999999999;\r\n\r\n// Liste mit Updates die zu senden sind\r\nvar dwAjaxUpdates = new Array();\r\n// Flag ob überhaupt noch die Sanduhr anzuzeigen ist\r\nvar dwAjaxCurrentlySending = false;\r\n// Static Pong Mechanismus. Eine Verbindung, die offen gehalten wird, und der Server gibt darüber Bescheid, wenn der Browser\r\n// etwas aktualisieren soll\r\nvar dwAjaxStaticConnectionXmlHttp = null;\r\nvar dwAjaxStaticConnectionForbiddenCounter = 0;\r\n\r\n// 400er und 500er Fehler bei Ajax-Requests können einfach wiederholt werden. Erst nach 10 Fehlversuchen wird ein Fehler in der GUI gezeigt\r\nvar isRepeatAjaxError = false;\r\nvar repeatAjaxErrorCounter = 0;\r\nvar pageRefreshCounter = 0;\r\n\r\n/**\r\n * Fügt ein Update hinzu\r\n *\r\n * @param command    das Kommando das zum Server gesendet werden soll\r\n * @param doAutoSend soll es gleich geendet werden?\r\n * @param doAsynchronousCall soll (nicht) auf die Antwort gewartet werden?\r\n */\r\nfunction dwAjaxAddUpdate(command, doAutoSend, doAsynchronousCall) {\r\n    dwAjaxUpdates.push(command);\r\n    if (doAutoSend && !dwAjaxCurrentlySending) {\r\n        dwAjaxSendUpdates(false, doAsynchronousCall);\r\n    }\r\n}\r\n\r\n/**\r\n * Sendet eine Liste von Änderungs-Befehlen an den Server\r\n */\r\nfunction dwAjaxSendUpdates(ignoreErrors, doAsynchronousCall) {\r\n    if (!DWAJAX_ACTIVE) {\r\n        // Nach \"Lost connection\" oder \"404\" keine Aktivität mehr, bringt ja nichts\r\n        return;\r\n    }\r\n    if (!dwFrameworkInitFinished) {\r\n        // Init Methode noch nicht abgeschlossen - noch keine Ajax Befehle abfeuern\r\n        return;\r\n    }\r\n    if (dwAjaxCurrentlySending) {\r\n        return;\r\n    }\r\n    if ((typeof (framework_isActive) == 'undefined' || !framework_isActive)) {\r\n        return;\r\n    }\r\n\r\n    if (dwAjaxUpdates.length > 0) {\r\n        // Normalerweise bei DEVELOPMENT Hints zu Ajax anzeigen\r\n        var showHint = dwFrameworkShowDevelopmentMessages();\r\n        if ((dwAjaxUpdates.length == 1) && (dwAjaxUpdates[0] == \"ping\")) {\r\n            // Ausser bei Pings\r\n            showHint = false;\r\n        }\r\n        dwAjaxCurrentlySending = true;\r\n        var dwAjaxTimerStart = new Date().getTime();\r\n\r\n        if (DWAJAX_WAIT_CURSOR_MS == 0) {\r\n            dwUtilsShowWaitCursor();\r\n        } else if (DWAJAX_WAIT_CURSOR_MS > 0) {\r\n            DWAJAX_WAIT_CURSOR_TIMEOUT_ID = setTimeout(dwUtilsShowWaitCursor, DWAJAX_WAIT_CURSOR_MS);\r\n        }\r\n\r\n        if (DWAJAX_DISABLE_INPUT) {\r\n            dwUtilsDisableInput();\r\n        }\r\n\r\n        dwResizeRegistryGetInstance().updateSizes();\r\n\r\n        if (DWAJAX_DEBUG_COMMANDS) {\r\n            for (var i = 0; i < dwAjaxUpdates.length; i++) {\r\n                var line = dwAjaxUpdates[i];\r\n                line = line.replace(/<br>/g, \"&nbsp;\");\r\n                line = line.replace(/</g, \"&lt;\");\r\n                line = line.replace(/>/g, \"&gt;\");\r\n                dwUtilsDebugWrite(\"<pre style=\\\"white-space: nowrap\\\">&nbsp;&nbsp;&nbsp;&gt;&gt;&gt; \" + line + \"</pre>\");\r\n            }\r\n        }\r\n        // Kopie damit wir ja nichts verlieren\r\n        var dwAjaxUpdatesTmp = dwAjaxUpdates;\r\n        dwAjaxUpdates = new Array();\r\n        framework_lastServerRequest = new Date().getTime();\r\n        var currentBrowserRootWindowCommand = \"currentBrowserRootWindow\" + \"@DW@\" + dwFrameworkGetRootWindowId() + \"@DW@\" + framework_displayWidth + \"@DW@\" + framework_displayHeight;\r\n        dwAjaxUpdatesTmp.unshift(currentBrowserRootWindowCommand);\r\n\r\n        dwAjaxToServer(dwAjaxTimerStart, showHint, dwAjaxUpdatesTmp, ignoreErrors, new Date().getTime(), doAsynchronousCall);\r\n    }\r\n}\r\n\r\nfunction getNewUrlForWebapp(path) {\r\n    var url = dwUtilsGetBaseApplicationUrl() + path;\r\n    return url;\r\n}\r\n\r\n// Siehe StaticConnectionUpdater\r\nfunction dwAjaxNewStaticConnection() {\r\n    if (!framework_isActive) {\r\n        return;\r\n    }\r\n    setTimeout(function() {\r\n        if (!framework_isActive) {\r\n            return;\r\n        }\r\n\r\n        dwAjaxStaticConnectionXmlHttp = dwUtilsCreateXmlHttpRequest(true);\r\n        var url = getNewUrlForWebapp(\"/static.connection_\" + dwFrameworkGetRootWindowId()); // StaticConnection pro RootWindow\r\n        dwAjaxStaticConnectionXmlHttp.open(\"POST\", url, true);\r\n        dwAjaxStaticConnectionXmlHttp.setRequestHeader(\"Content-type\", \"text/plain; charset=UTF-8\");\r\n        dwAjaxStaticConnectionXmlHttp.onreadystatechange = function() {\r\n            if (!framework_isActive) {\r\n                return;\r\n            }\r\n            if (dwAjaxStaticConnectionXmlHttp.readyState == DWUTILS_READY_STATE.DONE) {\r\n                try {\r\n                    if (dwAjaxStaticConnectionXmlHttp.status == 200) {\r\n                        // Bei Antwort y (yes), p (ping) oder f (finish) ein AJAX Ping durchführen\r\n                        if ((dwAjaxStaticConnectionXmlHttp.responseText == 'y') || (dwAjaxStaticConnectionXmlHttp.responseText == 'p')\r\n                            || (dwAjaxStaticConnectionXmlHttp.responseText == 'f')) {\r\n                            dwAjaxAddUpdate(\"ping\", true, true);\r\n                            if (dwAjaxStaticConnectionXmlHttp.responseText == 'f') {\r\n                                return; // Fertig -> Static Connection beendet\r\n                            }\r\n                        } else { // Static Connection wurde beendet\r\n                            return;\r\n                        }\r\n                    }\r\n                } catch (exception) {\r\n                }\r\n                if ((dwAjaxStaticConnectionXmlHttp.status == 403) || (dwAjaxStaticConnectionXmlHttp.status == 302)\r\n                    || (dwAjaxStaticConnectionXmlHttp.status == 307)) {\r\n                    // 403 tritt z.B. auf, wenn Tomcat neu gestartet wurde und Browserfenster noch offen ist\r\n                    // 302 oder 307 werden von Login-Systemen für den Redirect auf eine Login-Seite verwendet, was bedeutet,\r\n                    // dass die Session/Login abgelaufen ist\r\n                    dwAjaxStaticConnectionForbiddenCounter++;\r\n                } else {\r\n                    dwAjaxStaticConnectionForbiddenCounter = 0;\r\n                }\r\n                if (dwAjaxStaticConnectionForbiddenCounter < 10) {\r\n                    dwAjaxNewStaticConnection();\r\n                }\r\n            }\r\n        };\r\n        dwAjaxStaticConnectionXmlHttp.send(\"?\");\r\n    }, 0);\r\n}\r\n\r\nfunction sleep(millis) {\r\n    var date = new Date();\r\n    var curDate = null;\r\n    while (curDate - date < millis) {\r\n        curDate = new Date();\r\n    }\r\n}\r\n\r\nfunction dwAjaxToServer(dwAjaxTimerStart, showHint, dwAjaxUpdatesTmp, ignoreErrors, startTime, doAsynchronousCall) {\r\n    var string = \"\";\r\n    for (var i = 0; i < dwAjaxUpdatesTmp.length; i++) {\r\n        var line = dwAjaxUpdatesTmp[i];\r\n        if (string.length > 0) {\r\n            string += \"@DX@\";\r\n        }\r\n        string += line;\r\n    }\r\n    if (typeof (doAsynchronousCall) == 'undefined') {\r\n        // Flag sollte immer gesetzt sein. Im Fehlerfall wird der Default angenommen (asynchron)\r\n        doAsynchronousCall = true;\r\n    }\r\n\r\n    var xmlHttp = dwUtilsCreateXmlHttpRequest(true);\r\n    var url = getNewUrlForWebapp(\"/ajax\");\r\n    xmlHttp.open(\"POST\", url, doAsynchronousCall);\r\n    xmlHttp.setRequestHeader(\"Content-type\", \"text/plain; charset=UTF-8\");\r\n    xmlHttp.onreadystatechange = function() {\r\n        if ((DWAJAX_WAIT_CURSOR_MS > 0) && (new Date().getTime() - dwAjaxTimerStart > DWAJAX_WAIT_CURSOR_MS)) {\r\n            dwUtilsShowWaitCursor();\r\n        }\r\n        try {\r\n            if (showHint) {\r\n                if (xmlHttp.readyState == DWUTILS_READY_STATE.OPENED) {\r\n                    dwFrameworkShowHint(\"AJAX\", \"SENDING (\" + dwAjaxUpdates.length + \")\", \"#0000dd\", \"#ffffff\");\r\n                } else if (xmlHttp.readyState == DWUTILS_READY_STATE.HEADERS_RECEIVED) {\r\n                    dwFrameworkShowHint(\"AJAX\", \"WAITING FOR SERVER...\", \"#0000dd\", \"#ffffff\");\r\n                } else if (xmlHttp.readyState == DWUTILS_READY_STATE.LOADING) {\r\n                    dwFrameworkShowHint(\"AJAX\", \"RECEIVING\", \"#0000dd\", \"#ffffff\");\r\n                }\r\n            }\r\n            if (xmlHttp.readyState == DWUTILS_READY_STATE.DONE) {\r\n                var shutdownFramework = false;\r\n                switch (xmlHttp.status) {\r\n                    case 200:\r\n                        pageRefreshCounter = 0;\r\n                        repeatAjaxErrorCounter = 0;\r\n                        dwFrameworkHideLostConnectionBanner();\r\n                        if (xmlHttp.responseText == \"\") {\r\n                            // Damit auch hier er ganz normal in GotUpdate reingeht\r\n                            var newValues = new Array();\r\n                        } else {\r\n                            var newValues = xmlHttp.responseText.split('@DX@');\r\n                        }\r\n                        dwAjaxGotUpdate(dwAjaxTimerStart, newValues, showHint);\r\n                        break;\r\n                    case 12029:\r\n                    case 12030:\r\n                    case 12031:\r\n                    case 12152:\r\n                    case 12159:\r\n                    case 12007:\r\n                    case 0:\r\n                        if (pageRefreshCounter < 2) {\r\n                            pageRefreshCounter++;\r\n                            dwAjaxRefreshPage();    // Keine Verbindung\r\n                            return;\r\n                        }\r\n                    case 404:\r\n                        // Bislang wurde bei Status Code 0 und Status Code 404 (keine Verbindung zum Server / Server nicht gefunden)\r\n                        // automatisch ein Fehlerdialog angezeigt.\r\n                        // Stattdessen wird jetzt auch bis zu 30 Sekunden gewartet (insbesondere in Bezug darauf das temporär ein\r\n                        // Verbindungsverlust (z.B. bei mobilen Endgeräten) auftreten kann und es angenehmer ist,\r\n                        // wenn der Nutzer nicht ständig \"neu laden\" drücken muss - ohne zu wissen ob/wann die Verbindung wieder steht.\r\n                        if (ignoreErrors || $(\"lostConnection\")) {\r\n                            // Fehler sollen z.B. ignoriert werden, wenn die Nachricht zur Fehlerübertragung dient (dwAjaxErrorHandler->dwAjaxSendMessage)\r\n                            // oder bereits das Popup angezeigt wird, dass die Verbindung verloren ist (d.h. > 30 Sekunden sind bereits vergangen)\r\n                            break;\r\n                        } else if ((new Date().getTime() - startTime) > 30000) {\r\n                            // Fehler ignorieren ist hier notwendig, damit in der Finish-Methode die bislang vorliegenden Befehle\r\n                            // nicht erneut gesendet werden und erneut der Timer ausgelöst wird (während das Popup angezeigt wird)\r\n                            ignoreErrors = true;\r\n\r\n                            // In der Liste der Updates ist ggf. noch der Befehl drin der nicht übertragen werden konnte\r\n                            // Liste der Befehle muss geleert werden, damit eine ewig neue Verbindung / Übertragung im onFinished ausgelöst wird\r\n                            dwAjaxUpdates = [];\r\n                            dwFrameworkHideLostConnectionBanner();\r\n                            // Länger als 30 Sekunden probiert => Aufgeben. Wir biegen um auf die üblichen Probleme.\r\n                            var exception = new Object();\r\n                            exception.name = \"Ajax error \" + xmlHttp.status + \": \" + xmlHttp.statusText;\r\n                            exception.message = \"Ajax error \" + xmlHttp.status + \": \" + xmlHttp.statusText;\r\n                            dwAjaxErrorHandler(exception, null, 12029, xmlHttp.responseText);\r\n                            shutdownFramework = true;\r\n                            break;\r\n                        } else {\r\n                            // Langsam von 30 herunterzählen ... (damit der Nutzer sieht, wie lange noch probiert wird)\r\n                            setTimeout(function() {\r\n                                var countdown = parseInt(((startTime + 30000 - new Date().getTime()) / 1000));\r\n                                dwFrameworkShowLostConnectionBanner(countdown);\r\n                                // http://www.experts-exchange.com/Programming/Languages/Scripting/JavaScript/Q_23421667.html\r\n                                // http://danweber.blogspot.de/2007/04/ie6-and-error-code-12030.html\r\n                                // Kann 1000 Gründe haben.\r\n                                // Wir wiederholen den Call einfach nochmal\r\n                                dwAjaxToServer(dwAjaxTimerStart, showHint, dwAjaxUpdatesTmp, ignoreErrors, startTime);\r\n                            }, 1000);\r\n                            return;\r\n                        }\r\n                    case 403:\r\n                        // PING Requests ignorieren Fehler (temporär kann Server unerreichbar sein...)\r\n                        // Ist der PING allerdings abgelehnt worden (Status Code 403) werden weitere Versuche abgebrochen (verm. Session invalid)\r\n                        ignoreErrors = false;\r\n\r\n                    default:\r\n                        if (!ignoreErrors) {\r\n                            if (isRepeatAjaxError && (xmlHttp.status >= 400) && (xmlHttp.status < 600) && (repeatAjaxErrorCounter < 10)) {\r\n                                if (repeatAjaxErrorCounter > 5) {\r\n                                    sleep(200);\r\n                                }\r\n                                repeatAjaxErrorCounter++;\r\n                                dwAjaxToServer(dwAjaxTimerStart, showHint, dwAjaxUpdatesTmp, ignoreErrors, startTime);\r\n                                return;\r\n                            }\r\n\r\n                            var exception = new Object();\r\n                            exception.name = \"Ajax error \" + xmlHttp.status + \": \" + xmlHttp.statusText;\r\n                            exception.message = \"Ajax error \" + xmlHttp.status + \": \" + xmlHttp.statusText;\r\n                            dwAjaxErrorHandler(exception, null, xmlHttp.status, xmlHttp.responseText);\r\n                            shutdownFramework = true;\r\n                        }\r\n                }\r\n                dwAjaxDwrFinished(ignoreErrors);\r\n                if (shutdownFramework) {\r\n                    framework_isActive = false; // Framework deaktivieren\r\n                }\r\n            }\r\n        } catch (exception) {\r\n            // Zeile bitte so lassen damit wir immer alle Codestellen per Volltextsuche finden. Das kann man nicht auslagern in eine Datei.\r\n            if (typeof (framework_isActive) == 'undefined' || !framework_isActive) {\r\n                return;\r\n            }\r\n            throw exception;\r\n        }\r\n    };\r\n\r\n    xmlHttp.send(string);\r\n}\r\n\r\n/**\r\n * Setzt die Darstellung zurück (normaler Cursor, ...) und versucht die bisher aufgelaufenen Befehle direkt zu übertragen\r\n *\r\n * Ist \"ignoreErrors\" gesetzt so wird kein Timer / erneuter Fehlerdialog angzeigt, wenn die Datenverbindung noch immer nicht aufgebaut werden konnte\r\n * @param ignoreErrors\r\n */\r\nfunction dwAjaxDwrFinished(ignoreErrors) {\r\n    if (DWAJAX_DISABLE_INPUT) {\r\n        dwUtilsEnableInput();\r\n    }\r\n    try {\r\n        if (DWAJAX_WAIT_CURSOR_TIMEOUT_ID != null) {\r\n            clearTimeout(DWAJAX_WAIT_CURSOR_TIMEOUT_ID);\r\n            DWAJAX_WAIT_CURSOR_TIMEOUT_ID = null;\r\n        }\r\n    } catch (exception) {\r\n    }\r\n\r\n    dwUtilsShowNormalCursor();\r\n    dwAjaxCurrentlySending = false;\r\n    // Nochmal senden falls wieder etwas neu drin ist\r\n    dwAjaxSendUpdates(ignoreErrors, true);\r\n}\r\n\r\n/**\r\n * Vom Server ist eine Anfrage reingekommen\r\n *\r\n * @param newvalues Liste mit Kommandos die am Client ausgeführt werden sollen\r\n */\r\nfunction dwAjaxGotUpdate(dwAjaxTimerStart, commands, showHint) {\r\n    if (!dwFrameworkInitFinished) {\r\n        // Das Html wurde noch nicht komplett geladen, speichere die commandos, damit sie später\r\n        // ausgeführt werden können\r\n        return;\r\n    }\r\n\r\n    var dwAjaxTimerClientStart = new Date();\r\n    try {\r\n        if (commands == null) {\r\n            if (DWAJAX_DEBUG_COMMANDS) {\r\n                alert(\"Ajax got update - but commands was 'null'\");\r\n            }\r\n            throw (\"Ajax got update - but commands was 'null'\");\r\n        }\r\n        if (showHint) {\r\n            dwFrameworkShowHint(\"AJAX\", \"RECEIVED (\" + commands.length + \")\", \"#0000dd\", \"#ffffff\");\r\n        }\r\n        var nrOfCharacters = 0;\r\n        var alreadyShowingWaitCursor = false;\r\n        for (var i = 0; i < commands.length; i++) {\r\n\r\n            if ((DWAJAX_WAIT_CURSOR_MS > 0) && (!alreadyShowingWaitCursor) && (new Date().getTime() - dwAjaxTimerStart > DWAJAX_WAIT_CURSOR_MS)) {\r\n                dwUtilsShowWaitCursor();\r\n                alreadyShowingWaitCursor = true;\r\n            }\r\n            if (DWAJAX_DEBUG_COMMANDS) {\r\n                var line = commands[i];\r\n                line = line.replace(/<br>/g, \"&nbsp;\");\r\n                line = line.replace(/</g, \"&lt;\");\r\n                line = line.replace(/>/g, \"&gt;\");\r\n                dwUtilsDebugWrite(\"<pre style=\\\"white-space: nowrap\\\">&lt;&lt;&lt;&nbsp;&nbsp;&nbsp; \" + line + \"</pre>\");\r\n            }\r\n            nrOfCharacters += commands[i].length;\r\n            var command = commands[i].split(\"@DW@\");\r\n            var control = null;\r\n            var action = null;\r\n\r\n            if (command.length < 1) {\r\n                throw \"NO_ACTION_FOUND\";\r\n            } else {\r\n                action = command[0];\r\n            }\r\n\r\n            // Ab hier kommen die Implementierungen\r\n            // Aktionen die nur 1 Angabe benötigen (Aktion)\r\n            if (action == \"refreshPage\") {\r\n                dwAjaxRefreshPage();\r\n            } else if (action == \"setBookmarkValue\") {\r\n                dwAjaxSetBookmarkValue(command[1]);\r\n            } else if (action == \"setChildThreadCount\") {\r\n                dwAjaxSetChildThreadCount(command[1]);\r\n            } else if (action == \"evaluateJavascript\") {\r\n                var javascriptMethods = command[1];\r\n                dwUtilsEvaluateJavascript(javascriptMethods, true);\r\n            } else if (action == \"addJavascriptFunction\") {\r\n                var functionCode = command[1];\r\n                dwDomAddJavascriptFunction(functionCode);\r\n            } else if (action == \"removeJavascriptFunction\") {\r\n                var functionCode = command[1];\r\n                dwDomRemoveJavascriptFunction(functionCode);\r\n            } else if (action == \"addJavascriptFile\") {\r\n                var filename = command[1];\r\n                dwAjaxAddJavascriptFile(filename);\r\n            } else if (action == \"removeJavascriptFile\") {\r\n                var filename = command[1];\r\n                dwAjaxRemoveJavascriptFile(filename);\r\n            } else if (action == \"addJavascriptListenerTagForControl\") {\r\n                dwAjaxAddJavascriptListenerTag(command);\r\n            } else if (action == \"setGlobalStyleIfNotExists\") {\r\n                dwDomSetGlobalStyleIfNotExists(command[1]);\r\n            } else if (action == \"removeJavascriptListenerTagForControl\") {\r\n                dwAjaxRemoveJavascriptListenerTag(command);\r\n            } else if (action == \"addToInnerFunction\") {\r\n                var functionName = command[1];\r\n                var commandsToAdd = command[2];\r\n                dwDomAddToFunction(functionName, commandsToAdd);\r\n            } else if (action == \"addToInnerFunctionParameter\") {\r\n                var functionName = command[1];\r\n                var innerFunctionName = command[2];\r\n                var innerFunctionParameterValueToAppend = command[3];\r\n                dwDomAppendToInnerFunctionParameter(functionName, innerFunctionName, innerFunctionParameterValueToAppend);\r\n            } else if (action == \"setBrowserTitle\") {\r\n                dwDomSetBrowserTitle(command[1]);\r\n            } else if (action == \"setFavIcon\") {\r\n                dwDomSetFavIcon(command[1]);\r\n            } else if (action == \"removeFavIcon\") {\r\n                dwDomRemoveFavIconIfPossible();\r\n            } else if (action == \"showException\") {\r\n                var stackTrace = command[2];\r\n                dwAjaxServerExceptionHandler(command[1], stackTrace);\r\n            } else if (action == \"initCountdown\") {\r\n                dwUtilsInitCountdown();\r\n            } else if (action == \"setCountdownTime\") {\r\n                dwUtilsSetCountdownTime(command[1]);\r\n            } else if (action == \"htmlToPDf\") {\r\n                dwHtmlStringToPdf(command[1], command[2], command[3]);\r\n            } else if (action == \"scanQrCode\") {\r\n                dwStartScanner(command[1], command[2], command[3], command[4]);\r\n            } else if (action == \"startCamera\") {\r\n                dwCameraStartVideo(command[1], command[2], command[3]);\r\n            } else if (action == \"stopCamera\") {\r\n                dwCameraStopVideo();\r\n            } else if (action == \"takePicture\") {\r\n                dwCameraTakeSnapshot();\r\n            } else if (action == \"cropPicture\") {\r\n                dwCameraStartCrop();\r\n            } else if (action == \"rotatePicture\") {\r\n                dwCameraRotatePicture();\r\n            } else if (action == \"savePicture\") {\r\n                dwCameraSavePicture();\r\n            } else {\r\n                // Aktionen die auf einen Knoten im DOM ausgeführt werden, und sich somit fest auf ein Control beziehen (uniqueId)\r\n                if (command.length < 2) {\r\n                    // Wenn es weniger als 2 Kommandos gibt, dann ist @DW@ folglich gar nicht in dem Kommando-String enthalten\r\n                    // und es handelt sich ziemlich sicher nicht um eine Antwort vom ApplicationServer, sondern z.B. von\r\n                    // einem Login-System -> prüfe, ob es sich um eine HTML-Seite handelt, und lade die Seite in diesem Fall neu\r\n                    if ((command.length > 0) && dwUtilsStringStartsWith(command[0], \"<HTML>\", true)) {\r\n                        dwFrameworkRefreshPage();\r\n                        return;\r\n                    }\r\n\r\n                    throw \"NO_ID_FOUND\";\r\n                } else {\r\n                    var controlId = command[1];\r\n                    control = $(controlId);\r\n                    if (control == null) {\r\n                        if (dwAjaxIgnoreControlNotFound(action, controlId)) { // Soll ignoriert werden, dass das Control nicht gefunden werden konnte?\r\n                            continue;\r\n                        } else {\r\n                            throw \"CONTROL_NOT_FOUND\";\r\n                        }\r\n                    }\r\n                }\r\n                if (action == \"removeDomAttribute\") {\r\n                    dwAjaxRemoveDomAttribute(control, command);\r\n                } else if (action == \"setDomAttribute\") {\r\n                    var key = command[2];\r\n                    var value = command[3];\r\n                    dwAjaxSetDomAttribute(control, key, value);\r\n                } else if (action == \"appendDomAttributeValue\") {\r\n                    var key = command[2];\r\n                    var value = command[3];\r\n                    dwAjaxAppendDomAttributeValue(control, key, value);\r\n                } else if (action == \"setDomMultiSelection\") {\r\n                    dwAjaxSetDomMultiSelection(control, command);\r\n                } else if (action == \"removeDomMultiSelection\") {\r\n                    dwAjaxRemoveDomMultiSelection(control, command);\r\n                } else if (action == \"setCustomMultiSelection\") {\r\n                    dwAjaxSetCustomMultiSelection(control, command);\r\n                } else if (action == \"removeCustomMultiSelection\") {\r\n                    dwAjaxRemoveCustomMultiSelection(control, command);\r\n                } else if (action == \"selectInTextField\") {\r\n                    var all = command[2] == \"true\";\r\n                    var startPos = command[3];\r\n                    var endPos = command[4];\r\n                    dwDomSelectInTextField(control, all, startPos, endPos);\r\n                } else if (action == \"setStyle\") {\r\n                    var key = command[2];\r\n                    var value = command[3];\r\n                    key = dwFrameworkCssToJavascriptProperty(key);\r\n                    dwDomSetStyle(control, key, value);\r\n                } else if (action == \"setStyleIgnoreControlNotFound\") {\r\n                    var key = command[2];\r\n                    var value = command[3];\r\n                    key = dwFrameworkCssToJavascriptProperty(key);\r\n                    dwDomSetStyle(control, key, value);\r\n                } else if (action == \"removeStyle\") {\r\n                    var key = command[2];\r\n                    key = dwFrameworkCssToJavascriptProperty(key);\r\n                    dwDomRemoveStyle(control, key);\r\n                } else if (action == \"setClass\") {\r\n                    var value = command[2];\r\n                    dwDomSetClass(control, value);\r\n                } else if (action == \"addClass\") {\r\n                    dwAjaxAddClass(control, command);\r\n                } else if (action == \"removeClass\") {\r\n                    dwAjaxRemoveClass(control, command);\r\n                } else if (action == \"removeTableRow\") {\r\n                    dwAjaxRemoveTableRow(control, command);\r\n                } else if (action == \"removeLastTableRow\") {\r\n                    dwAjaxRemoveLastTableRow(control, command);\r\n                } else if (action == \"removeTableContentRows\") {\r\n                    dwAjaxRemoveTableContentRows(control, command);\r\n                } else if (action == \"addTableRow\") {\r\n                    dwAjaxAddTableRow(control, command);\r\n                } else if (action == \"addTableRows\") {\r\n                    dwAjaxAddTableRows(control, command);\r\n                } else if (action == \"insertTableRow\") {\r\n                    dwAjaxInsertTableRow(control, command);\r\n                } else if (action == \"setDomText\") {\r\n                    dwAjaxSetDomText(control, command);\r\n                } else if (action == \"setDomNextSiblingText\") {\r\n                    dwAjaxSetDomNextSiblingText(control, command);\r\n                } else if (action == \"removeDomText\") {\r\n                    dwAjaxRemoveDomText(control, command);\r\n                } else if (action == \"removeDomSiblingText\") {\r\n                    dwAjaxRemoveDomSiblingText(control, command);\r\n                } else if (action == \"setNode\") {\r\n                    dwAjaxSetNode(control, command);\r\n                } else if (action == \"addNode\") {\r\n                    dwAjaxAddNode(control, command);\r\n                } else if (action == \"addNodes\") {\r\n                    dwAjaxAddNodes(control, command);\r\n                } else if (action == \"insertNode\") {\r\n                    dwAjaxInsertNode(control, command);\r\n                } else if (action == \"replaceNode\") {\r\n                    dwAjaxReplaceNode(control, command);\r\n                } else if (action == \"moveToFront\") {\r\n                    dwAjaxMoveToFront(control, command);\r\n                } else if (action == \"moveToBack\") {\r\n                    dwAjaxMoveToBack(control, command);\r\n                } else if (action == \"switchNodes\") {\r\n                    dwAjaxSwitchChildNodes(control, command);\r\n                } else if (action == \"removeChildNode\") {\r\n                    dwAjaxRemoveChildNode(control, command);\r\n                } else if (action == \"removeAllChildNodes\") {\r\n                    dwDomRemoveAllChildNodes(control);\r\n                } else if (action == \"removeNode\") {\r\n                    dwDomRemoveNodeById(command[1]);\r\n                } else if (action == \"addOptionNode\") {\r\n                    dwAjaxAddOptionNode(control, command);\r\n                } else if (action == \"insertOptionNode\") {\r\n                    dwAjaxInsertOptionNode(control, command);\r\n                } else if (action == \"addCheckboxListEntry\") {\r\n                    dwAjaxAddCheckboxListEntry(control, command);\r\n                } else if (action == \"insertCheckboxListEntry\") {\r\n                    dwAjaxInsertCheckboxListEntry(control, command);\r\n                } else if (action == \"removeCheckboxListEntry\") {\r\n                    dwAjaxRemoveCheckboxListEntry(control, command);\r\n                } else if (action == \"removeCustomListEntry\") {\r\n                    dwAjaxRemoveCustomListEntry(control, command);\r\n                } else if (action == \"scrollToListEntry\") {\r\n                    dwAjaxScrollToListEntry(control, command);\r\n                } else if (action == \"replaceSelf\") {\r\n                    dwAjaxReplaceSelf(control, command);\r\n                } else if (action == \"replaceParent\") {\r\n                    dwAjaxReplaceParent(control, command);\r\n                } else if (action == \"removeParent\") {\r\n                    dwAjaxRemoveParent(control, command);\r\n                } else if (action == \"setEvent\") {\r\n                    var key = command[2];\r\n                    var value = command[3];\r\n                    var withEventBubbling = (command[4] == \"true\");\r\n                    dwDomSetEvent(control, key, value, withEventBubbling);\r\n                } else if (action == \"removeEvent\") {\r\n                    var key = command[2];\r\n                    var value = command[3];\r\n                    dwDomRemoveEvent(control, key, value);\r\n                } else if (action == \"removeEventType\") {\r\n                    dwDomRemoveEventType(control, command[2]);\r\n                } else if (action == \"addEvent\") {\r\n                    var key = command[2];\r\n                    var value = command[3];\r\n                    var withEventBubbling = (command[4] == \"true\");\r\n                    dwDomAddEvent(control, key, value, withEventBubbling);\r\n                } else if (action == \"addJavascriptFileToNode\") {\r\n                    // Standard AddNode Mechanismus nicht verwendbar, der mit innerHTML arbeitet\r\n                    // Script Tags müssen clientseitig mit createElement eingebunden werden\r\n                    var filename = command[2];\r\n                    dwDomAddJavascriptFile(control, filename);\r\n                } else if (action == \"addJavascriptListenerTagForControlToNode\") {\r\n                    var objectEvent = command[2];\r\n                    var forObjectId = command[3];\r\n                    var javascriptMethods = command[4];\r\n                    dwDomAddJavascriptListenerTag(control, objectEvent, forObjectId, javascriptMethods);\r\n                } else if (action == \"removeJavascriptListenerTagForControlFromNode\") {\r\n                    var objectEvent = command[2];\r\n                    var forObjectId = command[3];\r\n                    dwDomRemoveJavascriptListenerTag(control, objectEvent, forObjectId);\r\n                } else if (action == \"addHotkeyRecursiveCallback\") {\r\n                    if (dwHotkeyRegistry != null) {\r\n                        var eventHandlerComponentId = command[1];\r\n                        var uniqueId = command[2];\r\n                        var key = command[3];\r\n                        var modifiers = command[4];\r\n                        dwHotkeyRegistry.addRecursiveCallbackHotkeyEntry(eventHandlerComponentId, uniqueId, key, modifiers);\r\n                    }\r\n                } else if (action == \"addHotkeyNearestNeighbour\") {\r\n                    if (dwHotkeyRegistry != null) {\r\n                        var eventHandlerComponentId = command[1];\r\n                        var uniqueId = command[2];\r\n                        var key = command[3];\r\n                        var modifiers = command[4];\r\n                        dwHotkeyRegistry.addNearestNeighbourHotkeyEntry(eventHandlerComponentId, uniqueId, key, modifiers);\r\n                    }\r\n                } else if (action == \"addHotkeyExecuteClick\") {\r\n                    if (dwHotkeyRegistry != null) {\r\n                        var eventHandlerComponentId = command[1];\r\n                        var uniqueId = command[2];\r\n                        var key = command[3];\r\n                        var modifiers = command[4];\r\n                        dwHotkeyRegistry.addExecuteClickHotkeyEntry(eventHandlerComponentId, uniqueId, key, modifiers);\r\n                    }\r\n                } else if (action == \"addHotkeyMnemonic\") {\r\n                    if (dwHotkeyRegistry != null) {\r\n                        var eventHandlerComponentId = command[1];\r\n                        var uniqueId = command[2];\r\n                        var key = command[3];\r\n                        var modifiers = command[4];\r\n                        dwHotkeyRegistry.addMnemonicHotkeyEntry(eventHandlerComponentId, uniqueId, key, modifiers);\r\n                    }\r\n                } else if (action == \"removeHotkeyRecursiveCallback\") {\r\n                    if (dwHotkeyRegistry != null) {\r\n                        var eventHandlerComponentId = command[1];\r\n                        var uniqueId = command[2];\r\n                        var key = command[3];\r\n                        var modifiers = command[4];\r\n                        dwHotkeyRegistry.removeRecursiveCallbackHotkeyEntry(eventHandlerComponentId, uniqueId, key, modifiers);\r\n                    }\r\n                } else if (action == \"removeHotkeyNearestNeighbour\") {\r\n                    if (dwHotkeyRegistry != null) {\r\n                        var eventHandlerComponentId = command[1];\r\n                        var uniqueId = command[2];\r\n                        var key = command[3];\r\n                        var modifiers = command[4];\r\n                        dwHotkeyRegistry.removeNearestNeighbourHotkeyEntry(eventHandlerComponentId, uniqueId, key, modifiers);\r\n                    }\r\n                } else if (action == \"removeHotkeyExecuteClick\") {\r\n                    if (dwHotkeyRegistry != null) {\r\n                        var eventHandlerComponentId = command[1];\r\n                        var uniqueId = command[2];\r\n                        var key = command[3];\r\n                        var modifiers = command[4];\r\n                        dwHotkeyRegistry.removeExecuteClickHotkeyEntry(eventHandlerComponentId, uniqueId, key, modifiers);\r\n                    }\r\n                } else if (action == \"removeHotkeyMnemonic\") {\r\n                    if (dwHotkeyRegistry != null) {\r\n                        var eventHandlerComponentId = command[1];\r\n                        var uniqueId = command[2];\r\n                        var key = command[3];\r\n                        var modifiers = command[4];\r\n                        dwHotkeyRegistry.removeMnemonicHotkeyEntry(eventHandlerComponentId, uniqueId, key, modifiers);\r\n                    }\r\n                } else if (action == \"genericSetNodeStyle\") {\r\n                    dwAjaxGenericSetNodeStyle(control, command);\r\n                } else if (action == \"genericRemoveNodeStyle\") {\r\n                    dwAjaxGenericRemoveNodeStyle(control, command);\r\n                } else if (action == \"genericSetClass\") {\r\n                    dwAjaxGenericSetClass(control, command);\r\n                } else if (action == \"genericAddClass\") {\r\n                    dwAjaxGenericAddClass(control, command);\r\n                } else if (action == \"genericRemoveClass\") {\r\n                    dwAjaxGenericRemoveClass(control, command);\r\n                } else if (action == \"genericSetDomAttribute\") {\r\n                    dwAjaxGenericSetDomAttribute(control, command);\r\n                } else if (action == \"genericRemoveDomAttribute\") {\r\n                    dwAjaxGenericRemoveDomAttribute(control, command);\r\n                } else if (action == \"genericSetDomText\") {\r\n                    dwAjaxGenericSetDomText(control, command);\r\n                } else if (action == \"genericSetDomNextSiblingText\") {\r\n                    dwAjaxGenericSetDomNextSiblingText(control, command);\r\n                } else if (action == \"genericAddNode\") {\r\n                    dwAjaxGenericAddNode(control, command);\r\n                } else if (action == \"genericInsertNode\") {\r\n                    dwAjaxGenericInsertNode(control, command);\r\n                } else if (action == \"genericInsertTableRow\") {\r\n                    dwAjaxGenericInsertTableRow(control, command);\r\n                } else if (action == \"genericRemoveNode\") {\r\n                    dwAjaxGenericRemoveNode(control, command);\r\n                } else if (action == \"genericRemoveNodes\") {\r\n                    dwAjaxGenericRemoveNodes(control, command);\r\n                } else if (action == \"genericRemoveAllChildNodes\") {\r\n                    dwAjaxGenericRemoveAllChildNodes(control, command);\r\n                } else if (action == \"genericReplaceNode\") {\r\n                    dwAjaxGenericReplaceNode(control, command);\r\n                } else if (action == \"genericRemoveEvent\") {\r\n                    dwAjaxGenericRemoveEvent(control, command);\r\n                } else if (action == \"genericRemoveEventType\") {\r\n                    dwAjaxGenericRemoveEventType(control, command);\r\n                } else if (action == \"genericAddEvent\") {\r\n                    dwAjaxGenericAddEvent(control, command);\r\n                } else if (action == \"genericScrollToNode\") {\r\n                    dwAjaxGenericScrollToNode(control, command);\r\n                } else if (action == \"genericMoveNode\") {\r\n                    dwAjaxGenericMoveNode(control, command);\r\n                } else if (action == \"setHoverClasses\") {\r\n                    dwAjaxSetHoverClasses(control, command[2]);\r\n                }\r\n            }\r\n        }\r\n        var dwAjaxTimerEnd = new Date();\r\n        if (showHint) {\r\n            var serverTimeElapsed = dwAjaxTimerClientStart.getTime() - dwAjaxTimerStart;\r\n            var clientTimeElapsed = dwAjaxTimerEnd.getTime() - dwAjaxTimerClientStart.getTime();\r\n//            var timeString = dwAjaxTimerEnd.getHours() + \":\" + dwAjaxTimerEnd.getMinutes() + \":\" + dwAjaxTimerEnd.getSeconds();\r\n            dwFrameworkShowHint(\"AJAX\", \"AJAX SERVER: \" + serverTimeElapsed + \"ms CLIENT: \" +\r\n                                        clientTimeElapsed + \"ms SIZE: \" + nrOfCharacters + \" characters\", \"#BBFFBB\", \"#000000\");\r\n        }\r\n        // Durch Änderungen am DOM könnten sich Control-Größen geändert haben und man will nicht auf die nächste Anfrage\r\n        // vom Client zum Server warten (evtl. kommt keine z.B. von Notizen -> allg. Info springen)\r\n        dwResizeRegistryGetInstance().updateSizes();\r\n    } catch (exception) {\r\n        if (typeof (exception) == \"string\") {\r\n            var text = exception;\r\n            exception = new Object();\r\n            exception.name = text;\r\n            exception.message = text;\r\n        }\r\n        var additionalInfo = (commands == null) ? \"null\" : commands[i];\r\n        dwAjaxErrorHandler(exception, additionalInfo, null, null);\r\n    }\r\n}\r\n\r\nvar ignoreControlNotFoundOnActions = [\r\n    'setStyle',\r\n    'removeStyle',\r\n    'removeDomAttribute',\r\n    'setDomAttribute',\r\n    'appendDomAttributeValue',\r\n    'removeStyle',\r\n    'genericSetNodeStyle',\r\n    'genericRemoveNodeStyle',\r\n    'genericSetDomAttribute',\r\n    'genericRemoveDomAttribute'\r\n];\r\n\r\n/**\r\n * Soll während der Abarbeitung der AJAX Updates ignoriert werden, dass das Control mit der angegebenen <i>controlId</i>\r\n * nicht gefunden werden konnte?\r\n * @param controlId\r\n * @return {@code true} falls das fehlende Control ignoriert und die Abarbeitung des aktuellen AJAX Updates abgebrochen werden soll\r\n */\r\nfunction dwAjaxIgnoreControlNotFound(action, controlId) {\r\n    if (!framework_isDevelopment) {\r\n        // Im Releasemode soll CONTROL_NOT_FOUND ignoriert werden, wenn es sich um einfache Styleänderungen handelt.\r\n        // Im Prinzip dürfte das nicht passieren, aber die Anzeige des Fehlers macht deutlich mehr Ärger, als wenn man eben die Farbe nicht setzt.\r\n        for (var i = 0; i < ignoreControlNotFoundOnActions.length; i++) {\r\n            if (action === ignoreControlNotFoundOnActions[i]) {\r\n                return true;\r\n            }\r\n        }\r\n    }\r\n\r\n    // beim Öffnen der Tastatur unter iOS können kurzfristig die Elemente von AutoClose-Popup-Fenstern\r\n    // (enden auf \"_layerdiv\" und \"_contentdiv\") nicht gefunden werden -> fehlendes Control ignorieren\r\n    if (framework_isiOS && (dwUtilsStringEndsWith(controlId, \"_layerdiv\", false) || dwUtilsStringEndsWith(controlId, \"_contentdiv\", false))) {\r\n        return true;\r\n    }\r\n    // In Einzelfällen können Komponenten im Komponentenbaum hängen, die nicht im DOM-Baum sind (z.B. Inhalte einer inaktiven TabbedPaneEntry)\r\n    // Gibt es dort dann ein HeavyWeightControl, wird bei Anzeige eines modalen Fensters setVisible geschickt. Das auf dem Server abzufangen,\r\n    // wäre sehr aufwändig, deswegen wird dann explizit mitgeschickt, dass nichtvorhandene Controls ignoriert werden sollen.\r\n    if (action == \"setStyleIgnoreControlNotFound\") {\r\n        return true;\r\n    }\r\n\r\n    return false;\r\n}\r\n\r\n/**\r\n * Lädt die Seite neu\r\n */\r\nfunction dwAjaxRefreshPage() {\r\n    dwFrameworkRefreshPageJs();\r\n}\r\n\r\n/**\r\n * Setzt den Bookmark Wert neu\r\n */\r\nfunction dwAjaxSetBookmarkValue(value) {\r\n    var oldHash = (window.location.hash.indexOf('#') == 0) ? window.location.hash.substring(1) : window.location.hash;\r\n    if (oldHash == value) {\r\n        return;\r\n    }\r\n    window.location.hash = value;\r\n    if (framework_html5HistoryEnabled) {\r\n        var state = dwFrameworkCreateBrowserHistoryState(value);\r\n\r\n        try {\r\n            history.replaceState(state, document.title, window.location.href);\r\n        } catch (exception) {\r\n        }\r\n\r\n        framework_html5HistoryCurrentState = state;\r\n    }\r\n}\r\n\r\n/**\r\n * Setzt, wieviel Kindthreads gerade im Hintergrund aktiv sind\r\n */\r\nfunction dwAjaxSetChildThreadCount(value) {\r\n    framework_childThreadCount = parseInt(value);\r\n}\r\n\r\nfunction dwAjaxAddJavascriptFile(filename) {\r\n    var head = document.getElementsByTagName(\"head\")[0];\r\n    dwDomAddJavascriptFile(head, filename);\r\n}\r\n\r\nfunction dwAjaxRemoveJavascriptFile(filename) {\r\n    var head = document.getElementsByTagName(\"head\")[0];\r\n    dwDomRemoveJavascriptFile(head, filename);\r\n}\r\n\r\nfunction dwAjaxAddJavascriptListenerTag(command) {\r\n    var objectEvent = command[1];\r\n    var forObjectId = command[2];\r\n    var methods = command[3];\r\n    var head = document.getElementsByTagName(\"head\")[0];\r\n    dwDomAddJavascriptListenerTag(head, objectEvent, forObjectId, methods);\r\n}\r\n\r\nfunction dwAjaxRemoveJavascriptListenerTag(command) {\r\n    var objectEvent = command[1];\r\n    var forObjectId = command[2];\r\n    var head = document.getElementsByTagName(\"head\")[0];\r\n    dwDomRemoveJavascriptListenerTag(head, objectEvent, forObjectId);\r\n}\r\n\r\n\r\n/**\r\n * Löscht ein Dom Attribut\r\n */\r\nfunction dwAjaxRemoveDomAttribute(control, command) {\r\n    var key = command[2];\r\n    dwDomRemoveDomAttribute(control, key);\r\n}\r\n\r\n/**\r\n * Setzt ein Dom Attribut\r\n *\r\n * @param control\r\n * @param command\r\n */\r\nfunction dwAjaxSetDomAttribute(control, key, value) {\r\n    dwDomSetDomAttribute(control, key, value);\r\n}\r\n\r\n/**\r\n * Erweitert ein (textbasiertes) Dom-Attribut\r\n * @param control\r\n * @param key\r\n * @param valueToAppend\r\n */\r\nfunction dwAjaxAppendDomAttributeValue(control, key, valueToAppend) {\r\n    dwDomAppendDomAttributeValue(control, key, valueToAppend);\r\n}\r\n\r\n/**\r\n * Selektiert Einträge in einer Multi-Select-Auswahl\r\n *\r\n * @param control\r\n * @param command\r\n */\r\nfunction dwAjaxSetDomMultiSelection(control, command) {\r\n    // GuiList Control (Multi-Selection möglich). Jeder Index durch Divider \"|\" getrennt.\r\n    // Es wird mind 1 Wert erwartet.\r\n    // prüfen ob das eigentliche objekt in dem array ist -> ansonsten deselekt\r\n    var selectionValue = command[2];\r\n    var selectedIndices = dwUtilsSplit(selectionValue, \"|\", false);\r\n    dwDomSetListSelection(control, selectedIndices);\r\n}\r\n\r\n/**\r\n * Deselektiert (alle) Einträge aus einer Multi-Select-Auswahl\r\n * @param control\r\n * @param command\r\n */\r\nfunction dwAjaxRemoveDomMultiSelection(control, command) {\r\n    var value = command[2];\r\n    if (value == null || value == undefined) {\r\n        // Alle Einträge deselektieren\r\n        dwDomSetListSelection(control, new Array());\r\n    } else {\r\n        // Dieser Fall wird aktuell noch nicht server-seitig unterstützt\r\n    }\r\n}\r\n\r\n/**\r\n * Selektiert Eitnräge in einer Multi Select Auswahl (generiert mit HtmlListRenderer).\r\n * @param control\r\n * @param command\r\n */\r\nfunction dwAjaxSetCustomMultiSelection(control, command) {\r\n    var listUniqueId = command[2];\r\n    var selectionValue = command[3];\r\n    var attribute = command[4];\r\n    var updateDisplay = (command[5] == \"true\");\r\n    var selectedIndices = dwUtilsSplit(selectionValue, \"|\", false);\r\n    dwDomSetCustomListSelection(control, listUniqueId, selectedIndices, attribute, updateDisplay);\r\n}\r\n\r\nfunction dwAjaxRemoveCustomMultiSelection(control, command) {\r\n    var listUniqueId = command[2];\r\n    var attribute = command[3];\r\n    var listControl = $(listUniqueId);\r\n    var updateDisplay = (command[5] == \"true\");\r\n    dwDomSetCustomListSelection(control, listUniqueId, new Array(), attribute, updateDisplay);\r\n    listControl.setAttribute(\"highlightedIndices\", \"\");\r\n}\r\n\r\n/**\r\n * Fügt Class Names zum Class-Attribut über Javascript Notation hinzu.\r\n *\r\n * Vorhandene Class Names bleiben dem Control erhalten.\r\n * @param control\r\n * @param command\r\n */\r\nfunction dwAjaxAddClass(control, command) {\r\n    var value = command[2]; // Leerzeichen separierte Liste\r\n    dwDomAddClass(control, value);\r\n}\r\n\r\n/**\r\n * Entfernt einen oder mehrere Class Names aus dem Class Attribut\r\n *\r\n * @param control\r\n * @param command\r\n */\r\nfunction dwAjaxRemoveClass(control, command) {\r\n    var value = command[2]; // Leerzeichen separierte Liste\r\n    dwDomRemoveClass(control, value);\r\n}\r\n\r\n/**\r\n * Löscht aus der Tabelle eine Zeile\r\n *\r\n * @param control\r\n * @param command\r\n */\r\nfunction dwAjaxRemoveTableRow(control, command) {\r\n    var index = parseInt(command[2]);\r\n    var tableRowContainer = dwDomGetRealRowContainerNode(control);\r\n    dwDomRemoveChild(tableRowContainer, index);\r\n}\r\n\r\nfunction dwAjaxRemoveLastTableRow(control, command) {\r\n    var tableRowContainer = dwDomGetRealRowContainerNode(control);\r\n    dwDomRemoveChild(tableRowContainer);\r\n}\r\n\r\n/**\r\n * Löscht alle Inhalts-Zeilen aus der Tabelle\r\n * @param control\r\n * @param command\r\n */\r\nfunction dwAjaxRemoveTableContentRows(control, command) {\r\n    var hasHeader = dwUtilsToBoolean(command[2]);\r\n    var tableRowContainer = dwDomGetRealRowContainerNode(control);\r\n    dwDomRemoveTableContentRows(tableRowContainer, hasHeader);\r\n}\r\n\r\n/**\r\n * Hängt eine Zeile an die Tabelle an\r\n *\r\n * @param control\r\n * @param command\r\n */\r\nfunction dwAjaxAddTableRow(control, command) {\r\n    control = dwDomGetRealRowContainerNode(control);\r\n    var content = command[2];\r\n    dwDomAppendChild(control, content);\r\n}\r\n\r\n/**\r\n * Fügt mehrere Zeilen hinzu\r\n *\r\n * @param control\r\n * @param command\r\n */\r\nfunction dwAjaxAddTableRows(control, command) {\r\n    control = dwDomGetRealRowContainerNode(control);\r\n    var contentArray = new Array();\r\n    for (var i = 2; i < command.length; i++) {\r\n        contentArray[i - 2] = command[i];\r\n    }\r\n    dwDomAppendChildren(control, contentArray);\r\n}\r\n\r\nfunction dwAjaxInsertTableRow(control, command) {\r\n    var rowIndex = parseInt(command[2]);\r\n    var content = command[3];\r\n    var tableRowContainer = dwDomGetRealRowContainerNode(control);\r\n    dwDomInsertChild(tableRowContainer, rowIndex, content);\r\n}\r\n\r\nfunction dwAjaxSetDomText(control, command) {\r\n    var value = command[2];\r\n    var escape = dwUtilsToBoolean(command[3]);\r\n    dwDomSetDomText(control, value, escape);\r\n}\r\n\r\nfunction dwAjaxSetDomNextSiblingText(control, command) {\r\n    var value = command[2];\r\n    var escape = dwUtilsToBoolean(command[3]);\r\n    dwDomSetDomNextSiblingText(control, value, escape);\r\n}\r\n\r\n/**\r\n * Löscht alle Text-Unterknoten eines Elements. Andere Unterknoten (wie Elemente) werden nicht entfernt\r\n *\r\n * @param control\r\n * @param command\r\n */\r\nfunction dwAjaxRemoveDomText(control, command) {\r\n    var textNodes = dwDomGetChildNodesByType(control, DWUTILS_NODE_TYPE.TEXT);\r\n    dwDomRemoveChildren(textNodes, 0, textNodes.length);\r\n}\r\n\r\n/**\r\n * Löscht den nächsten Knoten, wenn dieser vom Typ 'Text' ist\r\n * @param control\r\n * @param command\r\n */\r\nfunction dwAjaxRemoveDomSiblingText(control, command) {\r\n    var siblingNode = control.nextSibling;\r\n    // Nur löschen, wenn Sibling vorhanden und Typ 'Text'\r\n    if ((siblingNode != null) && (siblingNode.nodeType == DWUTILS_NODE_TYPE.TEXT)) {\r\n        control.parentNode.removeChild(siblingNode);\r\n    }\r\n}\r\n\r\nfunction dwAjaxSetNode(control, command) {\r\n    var index = parseInt(command[2]);\r\n    var content = command[3];\r\n\r\n}\r\n\r\n/**\r\n * Fügt einen Knoten hinzu\r\n *\r\n * @param control\r\n * @param command\r\n */\r\nfunction dwAjaxAddNode(control, command) {\r\n    var content = command[2];\r\n    dwDomAppendChild(control, content);\r\n}\r\n\r\n/**\r\n * Fügt mehrere Knoten hinzu\r\n *\r\n * @param control\r\n * @param command\r\n */\r\nfunction dwAjaxAddNodes(control, command) {\r\n    var contentArray = new Array();\r\n    for (var i = 2; i < command.length; i++) {\r\n        contentArray[i - 2] = command[i];\r\n    }\r\n    dwDomAppendChildren(control, contentArray);\r\n}\r\n\r\nfunction dwAjaxAddOptionNode(control, command) {\r\n    var value = command[2];\r\n    var label = command[3];\r\n    var option = document.createElement(\"option\");\r\n    option.text = label;\r\n    option.value = value;\r\n    if (framework_isIE) {\r\n        control.options.add(option);\r\n    } else {\r\n        control.appendChild(option);\r\n    }\r\n}\r\n\r\nfunction dwAjaxInsertOptionNode(control, command) {\r\n    var value = command[2];\r\n    var label = command[3];\r\n    var index = command[4];\r\n    var option = document.createElement(\"option\");\r\n    option.text = label;\r\n    option.value = value;\r\n    if (framework_isIE) {\r\n        control.options.add(option, index);\r\n    } else {\r\n        control.insertBefore(option, control.childNodes[index]);\r\n    }\r\n}\r\n\r\nfunction dwAjaxAddCheckboxListEntry(control, command) {\r\n    var listUniqueId = command[2];\r\n    var checkbox = command[3];\r\n    var image = command[4];\r\n    var text = command[5];\r\n    dwDomAppendCheckboxListEntry(control, listUniqueId, checkbox, image, text);\r\n}\r\n\r\nfunction dwAjaxInsertCheckboxListEntry(control, command) {\r\n    var listUniqueId = command[2];\r\n    var checkbox = command[3];\r\n    var image = command[4];\r\n    var text = command[5];\r\n    var index = command[6];\r\n    dwDomInsertCheckboxListEntry(control, listUniqueId, checkbox, image, text, index);\r\n}\r\n\r\nfunction dwAjaxRemoveCheckboxListEntry(control, command) {\r\n    var listUniqueId = command[2];\r\n    var index = command[3];\r\n    dwDomRemoveCheckboxListEntry(control, listUniqueId, index);\r\n}\r\n\r\nfunction dwAjaxRemoveCustomListEntry(control, command) {\r\n    var listUniqueId = command[2];\r\n    var index = command[3];\r\n    dwDomRemoveCustomListEntry(control, listUniqueId, index);\r\n}\r\n\r\n/**\r\n * Fügt im Dom einen Knoten hinzu\r\n *\r\n * @param control\r\n * @param command\r\n */\r\nfunction dwAjaxInsertNode(control, command) {\r\n    var itemIdx = parseInt(command[2]);\r\n    var content = command[3];\r\n    dwDomInsertChild(control, itemIdx, content);\r\n}\r\n\r\n/**\r\n * Ersetzt einen Knoten\r\n *\r\n * @param control\r\n * @param command\r\n */\r\nfunction dwAjaxReplaceNode(control, command) {\r\n    var itemIdx = parseInt(command[2]);\r\n    var content = command[3];\r\n    dwDomReplaceChild(control, itemIdx, content);\r\n}\r\n\r\n/**\r\n * Verschiebt ein Element an erste Stelle (vor Elemente und Textknoten)\r\n * @param control\r\n * @param command\r\n */\r\nfunction dwAjaxMoveToFront(control, command) {\r\n    var index = parseInt(command[2]);\r\n    dwDomMoveToFront(control, index);\r\n}\r\n\r\n/**\r\n * Verschiebt ein Element an letzte Stelle (hinter Elemente und Textknoten)\r\n * @param control\r\n * @param command\r\n */\r\nfunction dwAjaxMoveToBack(control, command) {\r\n    var index = parseInt(command[2]);\r\n    dwDomMoveToBack(control, index);\r\n}\r\n\r\n/**\r\n * Vertauscht zwei Kindelemente\r\n * @param control\r\n * @param command\r\n */\r\nfunction dwAjaxSwitchChildNodes(control, command) {\r\n    var index1 = parseInt(command[2]);\r\n    var index2 = parseInt(command[3]);\r\n    dwDomSwitchChildren(control, index1, index2);\r\n}\r\n\r\n/**\r\n * Löscht einen Kindknoten\r\n *\r\n * @param control\r\n * @param command\r\n */\r\nfunction dwAjaxRemoveChildNode(control, command) {\r\n    var itemIdx = parseInt(command[2]);\r\n    dwDomRemoveChild(control, itemIdx);\r\n}\r\n\r\nfunction dwAjaxReplaceSelf(control, command) {\r\n    var parentNode = control.parentNode;\r\n    parentNode.replaceChild(dwDomParseStringToNodes(command[2]), control);\r\n}\r\n\r\nfunction dwAjaxReplaceParent(control, command) {\r\n    dwAjaxReplaceSelf(control.parentNode, command);\r\n}\r\n\r\nfunction dwAjaxRemoveParent(control, command) {\r\n    var parent = control.parentNode;\r\n    var grandparent = parent.parentNode;\r\n    grandparent.removeChild(parent);\r\n}\r\n\r\nfunction dwAjaxGenericSetNodeStyle(control, command) {\r\n    var navigationString = command[2];\r\n    var key = command[3];\r\n    var value = command[4];\r\n    key = dwFrameworkCssToJavascriptProperty(key);\r\n    var container = dwDomFindContainer(control, navigationString, false);\r\n    dwDomSetStyle(container, key, value);\r\n}\r\n\r\nfunction dwAjaxGenericRemoveNodeStyle(control, command) {\r\n    var navigationString = command[2];\r\n    var key = command[3];\r\n    key = dwFrameworkCssToJavascriptProperty(key);\r\n    var container = dwDomFindContainer(control, navigationString, false);\r\n    dwDomSetStyle(container, key, \"\");\r\n}\r\n\r\nfunction dwAjaxGenericSetClass(control, command) {\r\n    var navigationString = command[2];\r\n    var value = command[3];\r\n    var container = dwDomFindContainer(control, navigationString, false);\r\n    dwDomSetClass(container, value);\r\n}\r\n\r\nfunction dwAjaxGenericAddClass(control, command) {\r\n    var navigationString = command[2];\r\n    var value = command[3];\r\n    var container = dwDomFindContainer(control, navigationString, false);\r\n    dwDomAddClass(container, value);\r\n}\r\n\r\nfunction dwAjaxGenericRemoveClass(control, command) {\r\n    var navigationString = command[2];\r\n    var value = command[3];\r\n    var container = dwDomFindContainer(control, navigationString, false);\r\n    dwDomRemoveClass(container, value);\r\n}\r\n\r\nfunction dwAjaxGenericSetDomAttribute(control, command) {\r\n    var navigationString = command[2];\r\n    var key = command[3];\r\n    var value = command[4];\r\n    var container = dwDomFindContainer(control, navigationString, false);\r\n    dwAjaxSetDomAttribute(container, key, value);\r\n}\r\n\r\nfunction dwAjaxGenericRemoveDomAttribute(control, command) {\r\n    var navigationString = command[2];\r\n    var key = command[3];\r\n    var container = dwDomFindContainer(control, navigationString, false);\r\n    dwAjaxRemoveDomAttribute(container, key);\r\n}\r\n\r\nfunction dwAjaxGenericSetDomText(control, command) {\r\n    var navigationString = command[2];\r\n    var text = command[3];\r\n    var escape = dwUtilsToBoolean(command[4]);\r\n    var container = dwDomFindContainer(control, navigationString, false);\r\n    dwDomSetDomText(container, text, escape);\r\n}\r\n\r\nfunction dwAjaxGenericSetDomNextSiblingText(control, command) {\r\n    var navigationPath = command[2];\r\n    var text = command[3];\r\n    var escape = dwUtilsToBoolean(command[4]);\r\n    var container = dwDomFindContainer(control, navigationPath, false);\r\n    dwDomSetDomNextSiblingText(container, text, escape);\r\n}\r\n\r\nfunction dwAjaxGenericAddNode(control, command) {\r\n    var navigationString = command[2];\r\n    var content = command[3];\r\n    var container = dwDomFindContainer(control, navigationString, true);\r\n    dwDomAppendChild(container, content);\r\n}\r\n\r\nfunction dwAjaxGenericInsertNode(control, command) {\r\n    var navigationString = command[2];\r\n    var insertAt = parseInt(command[3]);\r\n    var content = command[4];\r\n    var container = dwDomFindContainer(control, navigationString, true);\r\n    dwDomInsertChild(container, insertAt, content);\r\n}\r\n\r\nfunction dwAjaxGenericInsertTableRow(control, command) {\r\n    var navigationString = command[2]\r\n    var rowIndex = parseInt(command[3]);\r\n    var content = command[4];\r\n    var tableRowContainer = dwDomFindContainer(control, navigationString, true);\r\n    dwDomInsertChild(tableRowContainer, rowIndex, content);\r\n}\r\n\r\nfunction dwAjaxGenericRemoveNode(control, command) {\r\n    var navigationString = command[2];\r\n    var itemIdx = parseInt(command[3]);\r\n    var container = dwDomFindContainer(control, navigationString, true);\r\n    dwDomRemoveChild(container, itemIdx);\r\n}\r\n\r\nfunction dwAjaxGenericRemoveNodes(control, command) {\r\n    var navigationString = command[2];\r\n    var itemIdx = parseInt(command[3]);\r\n    var howMany = parseInt(command[4]);\r\n    var container = dwDomFindContainer(control, navigationString, true);\r\n    dwDomRemoveElementChildNodes(container, itemIdx, howMany);\r\n}\r\n\r\nfunction dwAjaxGenericRemoveAllChildNodes(control, command) {\r\n    var navigationString = command[2];\r\n    var container = dwDomFindContainer(control, navigationString, true);\r\n    dwDomRemoveAllChildNodes(container);\r\n}\r\n\r\nfunction dwAjaxGenericReplaceNode(control, command) {\r\n    var navigationString = command[2];\r\n    var itemIdx = parseInt(command[3]);\r\n    var content = command[4];\r\n    var container = dwDomFindContainer(control, navigationString, true);\r\n    dwDomReplaceChild(container, itemIdx, content);\r\n}\r\n\r\nfunction dwAjaxGenericRemoveEvent(control, command) {\r\n    var navigationString = command[2];\r\n    var eventType = command[3];\r\n    var method = command[4];\r\n    var container = dwDomFindContainer(control, navigationString, true);\r\n    dwDomRemoveEvent(container, eventType, method);\r\n}\r\n\r\nfunction dwAjaxGenericRemoveEventType(control, command) {\r\n    var navigationString = command[2];\r\n    var eventType = command[3];\r\n    var container = dwDomFindContainer(control, navigationString, true);\r\n    dwDomRemoveEventType(container, eventType);\r\n}\r\n\r\nfunction dwAjaxGenericAddEvent(control, command) {\r\n    var navigationString = command[2];\r\n    var eventType = command[3];\r\n    var method = command[4];\r\n    var container = dwDomFindContainer(control, navigationString, true);\r\n    dwDomAddEvent(container, eventType, method, false);\r\n}\r\n\r\nfunction dwAjaxGenericScrollToNode(control, command) {\r\n    var scrolledId = command[2];\r\n    var navigationPath = command[3];\r\n    var nodeIndex = parseInt(command[4]);\r\n    dwDomScrollToNode(control.id, scrolledId, navigationPath, nodeIndex);\r\n}\r\n\r\nfunction dwAjaxScrollToListEntry(control, command) {\r\n    var nodeIndex = parseInt(command[2]);\r\n    dwDomScrollToListEntry(control.id, nodeIndex);\r\n}\r\n\r\nfunction dwAjaxGenericMoveNode(control, command) {\r\n    var navigationString = command[2];\r\n    var oldNodeIndex = parseInt(command[3]);\r\n    var newNodeIndex = parseInt(command[4]);\r\n    var container = dwDomFindContainer(control, navigationString, true);\r\n    dwDomMoveNode(container, oldNodeIndex, newNodeIndex);\r\n}\r\n\r\n/**\r\n * Zeigt eine Nachricht an. Kann später in eine Javascript Konsole umgeleitet werden.\r\n * MS Status Codes (> 12000) siehe http://msdn.microsoft.com/en-us/library/windows/desktop/aa383770%28v=vs.85%29.aspx\r\n *\r\n * @param command\r\n * @param doAutoSend\r\n */\r\nfunction dwAjaxErrorHandler(exception, additionalInformation, xmlHttpStatus, xmlHttpResponseText) {\r\n    if (!framework_isActive) {\r\n        // Kann bei CTRL-R auftreten. Mittlerweile wird bei onunload framework_isActive auf false gesetzt\r\n        // damit wir das hier erkennen\r\n        return;\r\n    }\r\n    if ((exception != null) && (exception.name)) {\r\n        if ((exception.name.indexOf(\"commands was 'null'\") > 0) || // Neustart\r\n            ((xmlHttpStatus != null) && (\r\n                    (xmlHttpStatus == 0) ||    // Ajax nicht erreichbar\r\n                    (xmlHttpStatus == 404) ||  // Andere Anwendung aktiv (IPP?)\r\n                    (xmlHttpStatus == 403) ||  // Forbidden, d.h. Server neu gestartet oder wirklich forbidden\r\n                    (xmlHttpStatus == 12029))) // Connection to server failed\r\n        ) {\r\n            if (xmlHttpStatus == 403) { // Server wurde neu gestartet oder Session ist nicht mehr gültig\r\n                DWAJAX_ACTIVE = false;\r\n                if (dwFrameworkShowDevelopmentMessages()) {\r\n                    dwFrameworkShowHint(\"AJAX\", \"Invalid or expired session: \" + exception.name, \"#FF0000\", \"#000000\");\r\n                } else {\r\n                    if (xmlHttpResponseText && dwUtilsStringStartsWith(xmlHttpResponseText, \"http\", true)) {\r\n                        window.location.href = xmlHttpResponseText;\r\n                    } else {\r\n                        // Bei nicht-modalen Fenstern und einem Fehler 403 das Fenster schließen (z.B. bei einer neuen Session)\r\n                        if ((typeof (framework_isNonModalWindow) != 'undefined') && framework_isNonModalWindow) {\r\n                            dwFrameworkCloseWindowSilently = true;\r\n                            window.close();\r\n                        } else { // Bei modalen Fenstern (Hauptfenster) einen Fehlerdialog anzeigen bzgl. ungültiger Session\r\n                            // Bei Aufruf ohne Secure Start hat der Benutzer die Option die Sitzung neu zu starten\r\n                            // Beim Neustart werden die alten Startparameter berücksichtigt\r\n                            var isSecured = (typeof (framework_isSecured) != \"undefined\") && framework_isSecured;\r\n                            dwDialogShowInvalidSession(!isSecured);\r\n\r\n                            // Framework deaktivieren, so dass z.B. auch keine Notifizierung beim Schließen des Fensters mehr verschickt wird\r\n                            framework_isActive = false;\r\n                            dwFrameworkHideLostConnectionBanner();\r\n                        }\r\n                    }\r\n                }\r\n            } else {\r\n                if (dwFrameworkShowDevelopmentMessages()) {\r\n                    dwFrameworkShowHint(\"AJAX\", \"Lost connection to server: \" + exception.name, \"#FF0000\", \"#000000\");\r\n                } else {\r\n                    dwDialogShowLostConnection();\r\n                    dwFrameworkHideLostConnectionBanner();\r\n                }\r\n            }\r\n\r\n            return;\r\n        }\r\n    }\r\n\r\n    if (!exception) {\r\n        return; // Ohne Exception kein Exception Handling ...\r\n    }\r\n    var exceptionName = exception.name || \"Error\";\r\n    var exceptionMessage = exception.message || exception || \"unknown\";\r\n    var exceptionDetails = additionalInformation || \"\";\r\n    if (!framework_isDevelopment && (exceptionDetails.length > DWAJAX_ERROR_DETAIL_MAX_LENGTH)) {\r\n        exceptionDetails = exceptionDetails.substring(0, DWAJAX_ERROR_DETAIL_MAX_LENGTH) + \"...\";\r\n    }\r\n    var exceptionStack = dwFrameworkGetStacktrace(exception);\r\n\r\n    // Wenn keine ID gefunden wurde, dann den Fehler nicht loggen, weil der Request komplett ungültig ist und demzufolge\r\n    // vermutlich gar nicht vom ApplicationServer, sondern z.B. einem Login-System stammt\r\n    if (DWAJAX_LOG_ERRORS && (exceptionName != \"NO_ID_FOUND\")) {\r\n        // Direkter Aufruf von \"dwAjaxToServer\" - damit die Nachricht zuverlässig vor Anzeige eines Alerts zum Server übertragen wird (dwAjaxCurrentlySending könnte 'true' sein)\r\n        // Schliesst ein Anwender bei einer Alert Nachricht den Browser / Tab kann andernfalls die Information verloren gehen.\r\n        var message = \"@DWSUB@\" + exceptionMessage + \"@DWSUB@\" + dwAjaxErrorHandlerGetEncodedExceptionDetail(exceptionDetails) + \"@DWSUB@\";\r\n        dwAjaxToServer(new Date().getTime(), false, [\"error@DW@ajax@DW@\" + exceptionName + message +\r\n                                                     exceptionStack], true, new Date().getTime());\r\n    }\r\n    var skipDefaultHandling = false;\r\n    if (typeof (pluginOnAjaxErrorHandler) == \"function\") {\r\n        skipDefaultHandling = pluginOnAjaxErrorHandler(exception, additionalInformation, xmlHttpStatus, xmlHttpResponseText);\r\n    }\r\n\r\n    if (DWAJAX_SHOW_ERRORS && !skipDefaultHandling) {\r\n        var errorInfo = exceptionName + \": \" + exceptionMessage + \"\\n\\nStacktrace:\\n\" + exceptionStack;\r\n        if (additionalInformation != null) {\r\n            errorInfo += \"\\n\\nAdditional information:\\n\";\r\n            errorInfo += additionalInformation;\r\n        }\r\n        dwDialogShowErrorDialog(errorInfo);\r\n    }\r\n    if (DWAJAX_REFRESH_AFTER_ERROR && !skipDefaultHandling) {\r\n        dwFrameworkRefreshPageJs();\r\n    }\r\n}\r\n\r\n// Die exceptionDetails werden jetzt \"codiert\" in Form von Bytes in UTF-8, weil manche Server Sicherheitsprobleme\r\n// mit dem übertragenen HTML Code haben (aufgetreten bei Claas)\r\nfunction dwAjaxErrorHandlerGetEncodedExceptionDetail(exceptionDetails) {\r\n    var message = exceptionDetails.replace(/@DW@/g, \"@ERR@\").replace(/@DWSUB@/g, \"@ERRSUB@\");\r\n    // UTF-8 Bytes\r\n    try {\r\n        return new TextEncoder().encode(message);\r\n    } catch (exception) {\r\n        // Wenn beim Encodieren etwas schief geht, dann doch die Originalmessage übertragen\r\n        return message;\r\n    }\r\n}\r\n\r\nfunction dwAjaxServerExceptionHandler(errorString, stacktrace) {\r\n    if (DWAJAX_SHOW_EXCEPTIONS) {\r\n        var name = \"Server Exception\";\r\n        var message = errorString || \"unknown\";\r\n        var errorInfo = name + \": \" + message;\r\n        if (DWAJAX_SHOW_STACKTRACE || framework_isDevelopment) {\r\n            if (stacktrace) {\r\n                errorInfo += \"\\n\\nStacktrace:\\n\" + stacktrace;\r\n            }\r\n        }\r\n        var skipDefaultHandling = false;\r\n        if (typeof (pluginOnServerErrorHandler) == \"function\") {\r\n            skipDefaultHandling = pluginOnServerErrorHandler(name, message, stacktrace);\r\n        }\r\n        if (skipDefaultHandling) {\r\n            return;\r\n        }\r\n\r\n        dwDialogShowErrorDialog(errorInfo);\r\n    }\r\n    if (DWAJAX_REFRESH_AFTER_ERROR) {\r\n        dwFrameworkRefreshPageJs();\r\n    }\r\n}\r\n\r\n// ########### AB HIER SIND DIE DEFAULT EVENTS###########################################\r\n\r\nfunction dwAjaxDefaultOnChange(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    dwFrameworkDisableEventBubbling(event);\r\n    var control = $(controlId);\r\n\r\n    // control kann z.B. null sein, wenn im IE ein Textfeld mit OnChange-Listener entfernt wird, wo der IE (warum auch immer)\r\n    // dann nochmal einen OnInput-Event feuert, das Control aber nicht mehr im DOM vorhanden ist\r\n    if (!control) {\r\n        return;\r\n    }\r\n\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@onChangeEvent@DW@\" + eventParameters + \"@DW@\" + control.value, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxDefaultOnChangeWithDebounce(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    dwUtilsDebounce(controlId, function() {\r\n        dwAjaxDefaultOnChange(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend)\r\n    }, dwUtilsGetDebounceTime(controlId))\r\n}\r\n\r\nfunction dwAjaxDefaultOnKeyPress(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    dwFrameworkDisableEventBubbling(event);\r\n    eventParameters += \"@DWSUB@__INT_keyCode=\" + event.keyCode;\r\n    eventParameters = dwAjaxAddKeyModifiersToEventParameters(event, eventParameters);\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@keyPressedEvent@DW@\" + eventParameters, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxDefaultOnKeyUp(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    dwFrameworkDisableEventBubbling(event);\r\n    var control = $(controlId);\r\n    eventParameters += \"@DWSUB@__INT_keyCode=\" + event.keyCode;\r\n    if (event.keyCode === undefined) {\r\n        //Beim Autofill des Chrome Browsers\r\n        return;\r\n    }\r\n    eventParameters = dwAjaxAddKeyModifiersToEventParameters(event, eventParameters);\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@keyReleasedEvent@DW@\" + eventParameters + \"@DW@\" + control.value, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxDefaultOnKeyDown(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    dwFrameworkDisableEventBubbling(event);\r\n    eventParameters += \"@DWSUB@__INT_keyCode=\" + event.keyCode;\r\n    if (event.keyCode === undefined) {\r\n        //Beim Autofill des Chrome Browsers\r\n        return;\r\n    }\r\n    eventParameters = dwAjaxAddKeyModifiersToEventParameters(event, eventParameters);\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@keyTypedEvent@DW@\" + eventParameters, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n    //  var keyCode = event.keyCode ? event.keyCode : event.which;\r\n    //  var key     = String.fromCharCode(keyCode);\r\n    //  var isShiftPressed = event.shiftKey;\r\n    //  var val = control.value;\r\n    //  if (keyCode == 8) {\r\n    //     Backspace -> delete 1 char\r\n    //  } else if (keyCode >= 32 && keyCode <= 128) {\r\n    //    if (!isShiftPressed) {\r\n    //      key = key.toLowerCase();\r\n    //      val += key;\r\n    //    }\r\n    //  }\r\n    //  dwAjaxSendUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@keyTypedEvent@DW@\" + key);\r\n    //  var str = control.value;\r\n    //  if (keyCode == 8) {\r\n    //    // Backspace\r\n    //    if (control.value.length > 0) {\r\n    //      str = control.value.substring(0, control.value.length - 1);\r\n    //    }\r\n    //  } else if (keyCode == 12 || keyCode == 38 || keyCode == 40 || keyCode == 13 || keyCode == 45 || keyCode == 32 || keyCode == 18 || keyCode == 16 || keyCode == 9 || keyCode == 36 || keyCode == 115) {\r\n    //    // ignore\r\n    //    return;\r\n    //  } else {\r\n    //    str += key;\r\n    //  }\r\n\r\n    //  setTimeout(function() {dwAjaxSendUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@keyTypedEvent@DW@\" + control.value) }, 0)\r\n}\r\n\r\nfunction dwAjaxAddActualActivatingControlToEventParameters(event, control, eventParameters) {\r\n    var actualActivatingControl = dwHelperFindActualActivatingControl(control, dwUtilsGetEventTarget(event), false);\r\n    if (actualActivatingControl != null) {\r\n        if (eventParameters == \"\") {\r\n            eventParameters += \"__ID_actualActivatingControl=\" + actualActivatingControl.id;\r\n        } else {\r\n            eventParameters += \"@DWSUB@__ID_actualActivatingControl=\" + actualActivatingControl.id;\r\n        }\r\n    }\r\n\r\n    return eventParameters;\r\n}\r\n\r\nfunction dwAjaxAddKeyModifiersToEventParameters(event, eventParameters) {\r\n    if (eventParameters == \"\") {\r\n        eventParameters = \"strgKeyPressed=\" + event.ctrlKey;\r\n    } else {\r\n        eventParameters += \"@DWSUB@strgKeyPressed=\" + event.ctrlKey;\r\n    }\r\n    eventParameters += \"@DWSUB@shiftKeyPressed=\" + event.shiftKey;\r\n\r\n    return eventParameters;\r\n}\r\n\r\nfunction dwAjaxDefaultOnClick(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    // Abfrage auf event.defaultPrevented verhindert bei touch-Emulation das mehrfache Ausführen eines Events.\r\n    // Die fehlende Unterstützung von event.defaultPrevented für IE8 spielt bei Touch-Emulation keine Rolle\r\n    if ((event != null) && event.defaultPrevented) {\r\n        return;\r\n    }\r\n\r\n//    dwUtilsDebugWrite(new Date() + \" onClick\");\r\n    dwFrameworkDisableEventBubbling(event);\r\n    var eventTarget = dwUtilsGetEventTarget(event);\r\n\r\n    // Damit wir keinen Klick doppelt machen, sondern einen Doppelklick\r\n    if ((typeof (ajaxLastClickTarget) != \"undefined\") && (ajaxLastClickTarget == eventTarget)) {\r\n        // das zuletzt geklickte Element war dasselbe\r\n        if ((ajaxLastClickTime + DWUTILS_DOUBLE_CLICK_TIME >= new Date().getTime())) {\r\n            // Innerhalb von 250ms auf dasselbe Element geklickt, wir ignorieren das Event, weil dann ein Doppelklick gefeuert wird\r\n            return;\r\n        }\r\n    }\r\n\r\n    ajaxLastClickTime = new Date().getTime();\r\n    ajaxLastClickTarget = eventTarget;\r\n\r\n    eventParameters = dwAjaxAddActualActivatingControlToEventParameters(event, $(controlId), eventParameters);\r\n    eventParameters = dwAjaxAddKeyModifiersToEventParameters(event, eventParameters);\r\n    var control = $(controlId);\r\n    var coords = dwUtilsGetLocationOnWindow(control, true, true);\r\n    eventParameters += \"@DWSUB@__POINT_controlPosition=\" + coords.x + \":\" + coords.y; // Sendet die aktuellen Koordinaten an den Server.\r\n    // Koordinaten können z.B. für die Positionierung von GuiWindows verwendet werden\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@mouseClickedEvent@DW@\" + eventParameters, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxDefaultOnDblClick(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    // Abfrage auf event.defaultPrevented verhindert bei touch-Emulation das mehrfache Ausführen eines Events.\r\n    // Die fehlende Unterstützung von event.defaultPrevented für IE8 spielt bei Touch-Emulation keine Rolle\r\n    if ((event != null) && event.defaultPrevented) {\r\n        return;\r\n    }\r\n\r\n//    dwUtilsDebugWrite(new Date() + \" onDblClick\");\r\n    dwFrameworkDisableEventBubbling(event);\r\n\r\n    var eventTarget = dwUtilsGetEventTarget(event);\r\n\r\n    // Damit wir nich zwei Doppelklicks ausführen\r\n    if ((typeof (ajaxLastDoubleClickTarget) != \"undefined\") && (ajaxLastDoubleClickTarget == eventTarget)) {\r\n        // das zuletzt doppelgeklickte Element war dasselbe\r\n        if ((ajaxLastDoubleClickTime + DWUTILS_DOUBLE_CLICK_TIME >= new Date().getTime())) {\r\n            // Innerhalb von 250ms kommen zwei Doppelklick Events auf dasselbe Element, wir ignorieren das Event\r\n            return;\r\n        }\r\n    }\r\n    ajaxLastDoubleClickTime = new Date().getTime();\r\n    ajaxLastDoubleClickTarget = eventTarget;\r\n\r\n    eventParameters = dwAjaxAddActualActivatingControlToEventParameters(event, $(controlId), eventParameters);\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@mouseDoubleClickedEvent@DW@\" + eventParameters, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxDefaultOnRightClick(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    //    dwUtilsDebugWrite(new Date() + \" onClick\");\r\n    dwFrameworkDisableEventBubbling(event);\r\n\r\n    if (eventParameters == \"\") {\r\n        eventParameters = \"strgKeyPressed=\" + event.ctrlKey;\r\n    } else {\r\n        eventParameters += \"@DWSUB@strgKeyPressed=\" + event.ctrlKey;\r\n    }\r\n    var control = $(controlId);\r\n    var coords = dwUtilsGetLocationOnWindow(control, true, true);\r\n    eventParameters += \"@DWSUB@__POINT_controlPosition=\" + coords.x + \":\" + coords.y; // Sendet die aktuellen Koordinaten an den Server.\r\n    // Koordinaten können z.B. für die Positionierung von GuiWindows verwendet werden\r\n    var mousePoint = dwUtilsGetCurrentMousePositionPerEvent(event);\r\n    eventParameters += \"@DWSUB@__POINT_mousePoint=\" + mousePoint.x + \":\" + mousePoint.y; // Koordinaten des Mouse Clicks (in Bezug auf Viewport)\r\n\r\n    eventParameters = dwAjaxAddActualActivatingControlToEventParameters(event, control, eventParameters);\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@mouseRightClickedEvent@DW@\" + eventParameters, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxDefaultOnMouseEnter(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    if (!dwFrameworkInitFinished) {\r\n        return;\r\n    }\r\n    dwFrameworkDisableEventBubbling(event);\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@mouseEnteredEvent@DW@\" + eventParameters, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxDefaultOnMouseLeave(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    if (!dwFrameworkInitFinished) {\r\n        return;\r\n    }\r\n    dwFrameworkDisableEventBubbling(event);\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@mouseExitedEvent@DW@\" + eventParameters, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxDefaultOnMouseOver(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    if (!dwFrameworkInitFinished) {\r\n        return;\r\n    }\r\n    dwFrameworkDisableEventBubbling(event);\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@mouseMovedOverEvent@DW@\" + eventParameters, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxDefaultOnMouseOut(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    if (!dwFrameworkInitFinished) {\r\n        return;\r\n    }\r\n    dwFrameworkDisableEventBubbling(event);\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@mouseMovedOutEvent@DW@\" + eventParameters, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxDefaultOnMouseMove(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    if (!dwFrameworkInitFinished) {\r\n        return;\r\n    }\r\n    dwFrameworkDisableEventBubbling(event);\r\n    var eventHandler = $(eventHandlerComponentId);\r\n    if (!eventHandler.mouseMoveIntervalTimer) {\r\n        eventHandler.mouseMoveIntervalTimer = window.setInterval(function() {\r\n            eventHandler.mouseMoveEventGranted = true;\r\n            if (eventHandler.mouseMovedTimestamp && ((eventHandler.mouseMovedTimestamp + 3000) < new Date().getTime())) {\r\n                // Bei 3 Sekunden Inaktivität wird das Intervall gestoppt ...\r\n                window.clearInterval(eventHandler.mouseMoveIntervalTimer);\r\n                eventHandler.mouseMoveIntervalTimer = null;\r\n            }\r\n        }, 100); // Intervall übermittelt alle 100ms eine neue Positionsangabe an den Server\r\n    }\r\n    if (!eventHandler.mouseMoveEventGranted) {\r\n        return;\r\n    }\r\n    eventHandler.mouseMoveEventGranted = false;\r\n    var relMouseCoords = dwUtilsGetRelMouseCoords(event, $(eventHandlerComponentId));\r\n    if (eventHandler.mousePoint && (eventHandler.mousePoint.x == relMouseCoords.x) && (eventHandler.mousePoint.y == relMouseCoords.y)) {\r\n        return; // Aktuelle Position hat sich nicht geändert...\r\n    }\r\n    eventHandler.mousePoint = relMouseCoords;\r\n    eventHandler.mouseMovedTimestamp = new Date().getTime();\r\n    if (eventParameters.length > 0) {\r\n        eventParameters += \"@DWSUB@\";\r\n    }\r\n    eventParameters += \"__POINT_mousePoint=\" + relMouseCoords.x + \":\" + relMouseCoords.y;\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@mouseMovedEvent@DW@\" + eventParameters, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxAddMouseButtonToEventParameters(event, eventParameters) {\r\n    var mouseButton = 0;\r\n    if (event.which) { // Browser außer IE\r\n        mouseButton = event.which;\r\n    } else if (event.button) { // IE\r\n        if (event.button == 1) { // Links (Bit 1)\r\n            mouseButton = 1;\r\n        } else if (event.button == 4) { // Mitte (Bit 3)\r\n            mouseButton = 2;\r\n        } else if (event.button == 3) { // Rechts (Bit 2)\r\n            mouseButton = 3;\r\n        }\r\n    }\r\n\r\n    if (eventParameters == \"\") {\r\n        eventParameters = \"mouseButton=\" + mouseButton;\r\n    } else {\r\n        eventParameters += \"@DWSUB@mouseButton=\" + mouseButton;\r\n    }\r\n\r\n    return eventParameters;\r\n}\r\n\r\nfunction dwAjaxDefaultOnMouseDown(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    // Abfrage auf event.defaultPrevented verhindert bei touch-Emulation das mehrfache Ausführen eines Events.\r\n    // Die fehlende Unterstützung von event.defaultPrevented für IE8 spielt bei Touch-Emulation keine Rolle\r\n    if ((event != null) && event.defaultPrevented) {\r\n        return;\r\n    }\r\n\r\n    dwFrameworkDisableEventBubbling(event);\r\n\r\n    eventParameters = dwAjaxAddActualActivatingControlToEventParameters(event, $(controlId), eventParameters);\r\n    eventParameters = dwAjaxAddMouseButtonToEventParameters(event, eventParameters);\r\n    eventParameters = dwAjaxAddKeyModifiersToEventParameters(event, eventParameters);\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@mousePressedEvent@DW@\" + eventParameters, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxDefaultOnMouseUp(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    // Abfrage auf event.defaultPrevented verhindert bei touch-Emulation das mehrfache Ausführen eines Events.\r\n    // Die fehlende Unterstützung von event.defaultPrevented für IE8 spielt bei Touch-Emulation keine Rolle\r\n    if ((event != null) && event.defaultPrevented) {\r\n        return;\r\n    }\r\n\r\n    //Das Event soll explizit nicht zum Server geschickt werden\r\n    if ((event != null) && event.skipServer) {\r\n        return;\r\n    }\r\n\r\n    dwFrameworkDefaultClose(event);\r\n    dwFrameworkDisableEventBubbling(event);\r\n\r\n    eventParameters = dwAjaxAddActualActivatingControlToEventParameters(event, $(controlId), eventParameters);\r\n    eventParameters = dwAjaxAddMouseButtonToEventParameters(event, eventParameters);\r\n    eventParameters = dwAjaxAddKeyModifiersToEventParameters(event, eventParameters);\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@mouseReleasedEvent@DW@\" + eventParameters, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxDefaultOnResize(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    // Abfrage auf event.defaultPrevented verhindert bei touch-Emulation das mehrfache Ausführen eines Events.\r\n    // Die fehlende Unterstützung von event.defaultPrevented für IE8 spielt bei Touch-Emulation keine Rolle\r\n    if ((event != null) && event.defaultPrevented) {\r\n        return;\r\n    }\r\n\r\n    if (eventParameters != \"\") {\r\n        eventParameters += \"@DWSUB@\";\r\n    }\r\n    var control = $(controlId);\r\n    eventParameters += \"newWidth=\" + control.clientWidth;\r\n    eventParameters += \"@DWSUB@newHeight=\" + control.clientHeight;\r\n    eventParameters += \"@DWSUB@hasVerticalOverflow=\" + dwUtilsHasVerticalOverflow(control);\r\n    eventParameters += \"@DWSUB@hasHorizontalOverflow=\" + dwUtilsHasHorizontalOverflow(control);\r\n\r\n    dwFrameworkDisableEventBubbling(event);\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@onresizeEvent@DW@\" + eventParameters, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\n\r\n// AB HIER SIND DIE CUSTOM EVENTS\r\n\r\nfunction dwAjaxMenuItemOnClick(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    dwFrameworkDisableEventBubbling(event);\r\n    // Bei Klick der rechten Maustaste wir das Contextmenü angezeigt und die Id der zugeordneten Komponente in dem\r\n    // versteckten Input-Field abgespeichert. Wir lesen uns die ID aus und ergänzen die Event-Parameter die zum\r\n    // Server gesendet werden\r\n    var guiWindowId = \"\";\r\n    var paramArray = eventParameters.split(\"@DWSUB@\");\r\n    var guiWindowIdString = \"guiWindowId=\";\r\n    for (var i = 0; i < paramArray.length; i++) {\r\n        var paramVal = paramArray[i];\r\n        if (dwUtilsStringStartsWith(paramVal, guiWindowIdString, false)) {\r\n            guiWindowId = paramVal.substring(guiWindowIdString.length);\r\n            break;\r\n        }\r\n    }\r\n\r\n    var activatingControl = $(guiWindowId + \"___ID_activatingControl\");\r\n    var activatingControlId = activatingControl.value;\r\n    if (activatingControlId == \"\") {\r\n        // Es handelt sich nicht um ein Popup-Menu sondern um einen Click auf einen Menubar Eintrag\r\n        // In diesem Fall ist das aufrufende Control die Komponente mit der eventHandlerComponentId\r\n        activatingControlId = eventHandlerComponentId;\r\n    }\r\n    var activatingControlParam = \"__ID_activatingControl=\" + activatingControlId;\r\n    if (eventParameters != \"\") {\r\n        eventParameters += \"@DWSUB@\";\r\n    }\r\n    eventParameters += activatingControlParam;\r\n    var actualActivatingControl = $(guiWindowId + \"___ID_actualActivatingControl\");\r\n    var actualActivatingControlValue = actualActivatingControl.value;\r\n    if (actualActivatingControlValue != \"\") {\r\n        var actualActivatingControlParam;\r\n        if (actualActivatingControlValue.indexOf(\"|PATH|\") == 0) {\r\n            actualActivatingControlValue = actualActivatingControlValue.substring(\"|PATH|\".length);\r\n            // ID konnte nicht genau bestimmt werden. Navigationspfad wurde ermittelt (von EventHandler zu EventTarget)\r\n            actualActivatingControlParam = \"__PATH_actualActivatingControl=\" + activatingControlId + \"|PATH|\" + actualActivatingControlValue;\r\n        } else {\r\n            actualActivatingControlParam = \"__ID_actualActivatingControl=\" + actualActivatingControlValue;\r\n        }\r\n        eventParameters += \"@DWSUB@\";\r\n        eventParameters += actualActivatingControlParam;\r\n    }\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@menuItemEvent@DW@\" + eventParameters, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxButtonOnClick(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    // Ergänzung der Vollständigkeit halber auch hier ... (wird mitunter aus einem onclick ausgelöst ...)\r\n    // Abfrage auf event.defaultPrevented verhindert bei touch-Emulation das mehrfache Ausführen eines Events.\r\n    // Die fehlende Unterstützung von event.defaultPrevented für IE8 spielt bei Touch-Emulation keine Rolle\r\n    if ((event != null) && event.defaultPrevented) {\r\n        return;\r\n    }\r\n\r\n    dwFrameworkDisableEventBubbling(event);\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@actionPerformedEvent@DW@\" + eventParameters, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxCheckboxOnChange(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    dwFrameworkDisableEventBubbling(event);\r\n    var control = $(controlId);\r\n    if ((typeof (control.getAttribute('disabled')) != \"undefined\") && (control.getAttribute('disabled') == 'disabled')) {\r\n        return;\r\n    }\r\n    if ((event.type.toLowerCase() == \"click\") || (event.type.toLowerCase() == \"mousedown\")) {\r\n        // Click (Stand 11.04.2016). Zusätzlich wird vorausschauend auch auf ein potentielles mousedown reagiert (radio button wurde abgeändert)\r\n        // Es ist nicht anzunehmen, dass beide Listener auf dem Control registriert sind und diesen Befehl auslösen können\r\n        control.checked = !control.checked;\r\n        // On Change wird anscheined nicht gerufen, daher springen wir nicht mit return raus\r\n    }\r\n    // Übergebene controlId ist <uniqueId>_input\r\n    // Server erwartet die uniqueId zur weiteren Update/Event-Verarbeitung\r\n    var controlIdLength = controlId.length - \"_input\".length;\r\n    controlId = controlId.substring(0, controlIdLength);\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@onChangeEvent@DW@\" + eventParameters + \"@DW@\" + control.checked, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxRadioButtonOnChange(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    dwFrameworkDisableEventBubbling(event);\r\n    var control = $(controlId);\r\n    if ((typeof (control.getAttribute('disabled')) != \"undefined\") && (control.getAttribute('disabled') == 'disabled')) {\r\n        return;\r\n    }\r\n    if ((event.type.toLowerCase() == \"click\") || (event.type.toLowerCase() == \"mousedown\")) {\r\n        // mousedown (Stand 11.04.2016). Zusätzlich wird weiterhin auch auf ein potentielles click reagiert\r\n        // Es ist nicht anzunehmen, dass beide Listener auf dem Control registriert sind und diesen Befehl auslösen können\r\n        dwDomSetDomAttribute(control, \"checked\", \"true\");\r\n        control.checked = true;\r\n        // On Change wird anscheined nicht gerufen, daher springen wir nicht mit return raus\r\n    }\r\n\r\n    // Übergebene controlId ist <uniqueId>_input\r\n    // Server erwartet die uniqueId zur weiteren Update/Event-Verarbeitung\r\n    var controlIdLength = controlId.length - \"_input\".length;\r\n    controlId = controlId.substring(0, controlIdLength);\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@onChangeEvent@DW@\" + eventParameters + \"@DW@\" + control.checked, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxListOnChange(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    dwFrameworkDisableEventBubbling(event);\r\n    var control = $(controlId);\r\n    var command = eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@onChangeEvent@DW@\" + eventParameters;\r\n    for (var i = 0; i < control.options.length; i++) {\r\n        if (control.options[i].selected) {\r\n            command += \"@DW@\" + i;\r\n        }\r\n    }\r\n    dwAjaxAddUpdate(command, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxGuiViewerImagePanPositionChanged(eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    var command = eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@imagePanPositionChangedEvent@DW@pos=\" + eventParameters;\r\n    dwAjaxAddUpdate(command, doAutoSend, true);\r\n}\r\n\r\nfunction dwAjaxGuiViewerImagePanOpenStateChanged(eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    var command = eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@imagePanOpenStateChangedEvent@DW@state=\" + eventParameters;\r\n    dwAjaxAddUpdate(command, doAutoSend, true);\r\n}\r\n\r\nfunction dwAjaxGuiViewerImageZoomToRectStateChanged(eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    var command = eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@imageZoomToRectStateChangedEvent@DW@state=\" + eventParameters;\r\n    dwAjaxAddUpdate(command, doAutoSend, true);\r\n}\r\n\r\nfunction dwAjaxCustomListOnChange(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    dwFrameworkDisableEventBubbling(event);\r\n    var index = dwAjaxGetEventParameterValue(eventParameters, \"index\");\r\n    var attribute = dwAjaxGetEventParameterValue(eventParameters, \"attribute\");\r\n    var listUniqueId = dwAjaxGetEventParameterValue(eventParameters, \"listUniqueId\");\r\n    dwHelperUpdateListSelectionIndices(event, controlId, listUniqueId, index, attribute);\r\n    var selectedIndicesNode = $(listUniqueId + \"_selectedindices\"); // Input type hidden. Wert in Helper Methode aktualisiert\r\n    var selectedIndices = dwUtilsSplit(dwDomGetDomAttribute(selectedIndicesNode, \"value\"), \"|\", false);\r\n    var command = eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@onChangeEvent@DW@\" + eventParameters;\r\n    for (var i = 0; i < selectedIndices.length; i++) {\r\n        command += \"@DW@\" + selectedIndices[i];\r\n    }\r\n    dwAjaxAddUpdate(command, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxOnFileSelection(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    dwFrameworkDisableEventBubbling(event);\r\n    var target = dwUtilsGetEventTarget(event);\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@fileSelectedEvent@DW@\" + eventParameters + \"@DW@\" + target.value, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxTreeNodeExpansion(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    dwFrameworkDisableEventBubbling(event);\r\n    if ((typeof (event.returnValue) != \"undefined\") && !event.returnValue) {\r\n        return;\r\n    }\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@treeExpansionEvent@DW@\" + eventParameters, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxTreeNodeCollapse(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    dwFrameworkDisableEventBubbling(event);\r\n    if ((typeof (event.returnValue) != \"undefined\") && !event.returnValue) {\r\n        return;\r\n    }\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@treeCollapseEvent@DW@\" + eventParameters, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxTreeNodeSelection(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    dwFrameworkDisableEventBubbling(event);\r\n    if ((typeof (event.returnValue) != \"undefined\") && !event.returnValue) {\r\n        return;\r\n    }\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@treeSelectionEvent@DW@\" + eventParameters, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxTableRowSelection(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    dwFrameworkDisableEventBubbling(event);\r\n    if ((typeof (event.returnValue) != \"undefined\") && !event.returnValue) {\r\n        return;\r\n    }\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@tableSelectionEvent@DW@\" + eventParameters\r\n                    + \"@DW@\" + event.ctrlKey + \"@DW@\" + event.shiftKey, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxTreeTableRowSelection(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    dwFrameworkDisableEventBubbling(event);\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@treeTableSelectionEvent@DW@\" + eventParameters\r\n                    + \"@DW@\" + event.ctrlKey + \"@DW@\" + event.shiftKey, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxTableScrolled(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    dwFrameworkDisableEventBubbling(event);\r\n    if (eventParameters.length > 0) {\r\n        eventParameters += \"@DWSUB@\";\r\n    }\r\n    var tableContentScroller = $(eventHandlerComponentId + \"_contentDiv\");\r\n    if (!tableContentScroller) {\r\n        // In älteren Browsern wird ggf. bereits ein scrolled Event ausgelöst bevor der gesamte Inhalt aufgebaut wurde\r\n        // Event macht keinen Sinn ohne Zugriff auf die eig. Werte.\r\n        return;\r\n    }\r\n    eventParameters += \"__INT_xScrollOffset=\" + tableContentScroller.scrollLeft + \"@DWSUB@__INT_yScrollOffset=\" + tableContentScroller.scrollTop;\r\n\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@tableScrolledEvent@DW@\" + eventParameters, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxToggleButton(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    dwFrameworkDisableEventBubbling(event);\r\n    dwHelperToggleButton($(controlId));\r\n    dwAjaxButtonOnClick(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxImageHotspotOnClick(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    dwFrameworkDisableEventBubbling(event);\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@imageHotspotClickedEvent@DW@\" + eventParameters, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxImageHotspotOnDoubleClick(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    dwFrameworkDisableEventBubbling(event);\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@imageHotspotDoubleClickedEvent@DW@\" + eventParameters, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxImageLoaded(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    dwFrameworkDisableEventBubbling(event);\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@imageLoadedEvent@DW@\" + eventParameters, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxInvisibleUriLoaded(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@invisibleUriLoadedEvent@DW@\" + eventParameters, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\n/**\r\n * Aktualisiert die Dividerposition der Splitpane Komponente\r\n * @param event\r\n * @param eventHandlerComponentId\r\n * @param controlId\r\n * @param eventParameters\r\n * @param doAutoSend\r\n */\r\nfunction dwAjaxSplitpaneDragging(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    var splitpaneDividerTextField = $(controlId + \"_dividerPosition\");\r\n    if (splitpaneDividerTextField == null) {   // kann passieren, wenn die Komponente durch den ersten Klick schon ausgeblendet wurde\r\n        dwSplitDragStopEvent(event);         // da mouseUp u.U. nicht mehr kommt, explizit aufrufen, um Dragaktion abzubrechen\r\n        return;\r\n    }\r\n    var splitpaneDividerPosition = parseInt(splitpaneDividerTextField.value);\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@splitpaneDividerMovingEvent@DW@\" + eventParameters\r\n                    + \"@DW@\" + splitpaneDividerPosition, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxFocusLost(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@onFocusLostEvent@DW@\" + eventParameters, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxFocusGained(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@onFocusGainedEvent@DW@\" + eventParameters, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\n/**\r\n * Aktualisiert die Dividerposition der Splitpane Komponente\r\n * @param event\r\n * @param eventHandlerComponentId\r\n * @param controlId\r\n * @param eventParameters\r\n * @param doAutoSend\r\n */\r\nfunction dwAjaxSplitpaneDragged(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    var splitpaneDividerTextField = $(controlId + \"_dividerPosition\");\r\n    var splitpaneDividerPosition = parseInt(splitpaneDividerTextField.value);\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@splitpaneDividerMovedEvent@DW@\" + eventParameters\r\n                    + \"@DW@\" + splitpaneDividerPosition, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxTableColumnResized(event, eventHandlerComponentId, controlId, index, eventParameters, doAutoSend) {\r\n    var textfieldId = controlId + \"_columnWidth_\" + index;\r\n    var textfield = $(textfieldId);\r\n    var newWidth = parseInt(textfield.value);\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@tableColumnResizedEvent@DW@\" + eventParameters + \"@DWSUB@index=\" + index + \"@DWSUB@newWidth=\" + newWidth, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxTableSort(event, eventHandlerComponentId, controlId, index, eventParameters, doAutoSend) {\r\n    var control = $(controlId);\r\n    var coords = dwUtilsGetLocationOnWindow(control, true, true);\r\n    if (eventParameters != \"\") {\r\n        eventParameters += \"@DWSUB@\";\r\n    }\r\n    eventParameters += \"__POINT_controlPosition=\" + coords.x + \":\" + coords.y; // Sendet die aktuellen Koordinaten an den Server.\r\n    // Koordinaten können z.B. für die Positionierung von speziellen Popup-Menüs für Sortierung oder Filterung verwendet werden\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@tableColumnSortedEvent@DW@\" + eventParameters + \"@DW@\" + index, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxTabbedPaneTabChanged(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    var headerLink = dwUtilsFindMatchingNodes($(eventHandlerComponentId), dwUtilsGetEventTarget(event), function(rootNode, node) {\r\n        return (node.tagName) && (node.tagName.toLowerCase() == \"th\");\r\n    }, true);\r\n    if (headerLink.length == 0) {\r\n        return;\r\n    }\r\n    var index = dwUtilsStringAfter(headerLink[0].id, \"_link\");\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@tabbedPaneTabChangedEvent@DW@\" + eventParameters + \"@DW@\" + index, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxTabbedPaneCustomRemoveTab(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    var headerLink = dwUtilsFindMatchingNodes($(eventHandlerComponentId), dwUtilsGetEventTarget(event), function(rootNode, node) {\r\n        return (node.tagName) && (node.tagName.toLowerCase() == \"th\");\r\n    }, true);\r\n    if (headerLink.length == 0) {\r\n        return;\r\n    }\r\n    var index = dwUtilsStringAfter(headerLink[0].id, \"_link\");\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@__custom_RemoveTab@DW@\" + eventParameters + \"@DW@\" + index, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxScrollpaneScrolled(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    if (!dwHelperHasScrollPaneValueChanged(controlId)) {\r\n        return;\r\n    }\r\n\r\n    dwHelperScrollPaneValueChanged(controlId);\r\n    var div = $(controlId);\r\n    if (div != null) {\r\n        var vertical = parseInt(div.scrollTop);\r\n        var horizontal = parseInt(div.scrollLeft);\r\n        if (eventParameters != \"\") {\r\n            eventParameters += \"@DWSUB@\";\r\n        }\r\n        eventParameters += \"left=\" + horizontal + \"@DWSUB@\";\r\n        eventParameters += \"top=\" + vertical + \"@DWSUB@\";\r\n        eventParameters += \"scrollWidth=\" + parseInt(div.scrollWidth) + \"@DWSUB@\"\r\n        eventParameters += \"scrollHeight=\" + parseInt(div.scrollHeight) + \"@DWSUB@\";\r\n        eventParameters += \"divWidth=\" + parseInt(div.clientWidth) + \"@DWSUB@\";\r\n        eventParameters += \"divHeight=\" + parseInt(div.clientHeight) + \"@DWSUB@\";\r\n        dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@scrollpaneScrolledEvent@DW@\" + eventParameters\r\n                        + \"@DW@\" + horizontal + \"@DW@\" + vertical, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n    }\r\n}\r\n\r\nfunction dwAjaxWindowClosing(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    dwFrameworkDisableEventBubbling(event);\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@closingEvent@DW@\" + eventParameters, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxWindowToggleMaximize(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    dwFrameworkDisableEventBubbling(event);\r\n\r\n    dwFrameworkToggleGuiWindowMaximized(controlId);\r\n\r\n    // Resize Listener müssen wir informieren\r\n    dwResizeRegistryGetInstance().updateSizes();\r\n\r\n\r\n    eventParameters += \"@DWSUB@toggleMaximized=true\";\r\n    return dwAjaxDefaultOnResize(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxDefaultTooltipShow(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    var preventTooltip = !dwTooltip_isTooltipEventAllowed(event, $(controlId));\r\n    if (preventTooltip) {\r\n        return;\r\n    }\r\n    event.preventTooltip = true;\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@tooltipWillShowEvent@DW@\" + eventParameters, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxSpinnerOnChange(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    dwFrameworkDisableEventBubbling(event);\r\n    var direction = dwAjaxGetEventParameterValue(eventParameters, \"direction\");\r\n    var newValue = $(controlId + \"_input\").value;\r\n    if (direction != null) {\r\n        if (direction.toLowerCase() == \"next\") {\r\n            newValue = dwHelperSetNextSpinnerValue(controlId);\r\n        } else if (direction.toLowerCase() == \"previous\") {\r\n            newValue = dwHelperSetPreviousSpinnerValue(controlId);\r\n        }\r\n    }\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@onChangeEvent@DW@\" + eventParameters + \"@DW@\" + newValue, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxDefaultOnHotkeyEvent(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    dwFrameworkDisableEventBubbling(event);\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@hotkeyEvent@DW@\" + eventParameters, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxDefaultOnTouchEvent(event, eventHandlerComponentId, controlId, eventParameters, doAutoSend) {\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@touchEvent@DW@\" + eventParameters, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\nfunction dwAjaxDefaultOnDisplayOrientationChanged(eventParameters, doAutoSend) {\r\n    // die ID des aktuellen Fensters auslesen und als eventHandlerComponentId und controlId verwenden\r\n    var windowId = null;\r\n    var nodes = dwDomGetChildrenByTagname(document.forms[0], \"input\");\r\n    for (var i = 0; i < nodes.length; i++) {\r\n        if (nodes[i].getAttribute(\"name\") == \"__windowid\") {\r\n            windowId = nodes[i].getAttribute(\"value\");\r\n            break;\r\n        }\r\n    }\r\n    if (windowId != null) {\r\n        dwAjaxAddUpdate(windowId + \"@DW@\" + windowId + \"@DW@displayOrientationChangedEvent@DW@\" + eventParameters, doAutoSend, true);\r\n    }\r\n}\r\n\r\nfunction dwAjaxFireCustomEvent(eventHandlerComponentId, controlId, customEventType, eventParameters, doAutoSend) {\r\n    dwAjaxFireCustomEventWithEvent(null, eventHandlerComponentId, controlId, customEventType, eventParameters, doAutoSend, true);\r\n}\r\n\r\nfunction dwAjaxFireCustomEventWithEvent(event, eventHandlerComponentId, controlId, customEventType, eventParameters, doAutoSend) {\r\n    if ((event != null) && event.dwTouch) {\r\n        eventParameters += \"@DWSUB@\" + \"dwTouch=true\";\r\n    }\r\n    dwAjaxAddUpdate(eventHandlerComponentId + \"@DW@\" + controlId + \"@DW@__custom_\" + customEventType + \"@DW@\" + eventParameters, doAutoSend, dwAjaxIsAsynchronousCommand(event));\r\n}\r\n\r\n/**\r\n * Liest aus den übergebenen Event Parametern den Wert für den gewünschten Key aus\r\n * @param eventParameters\r\n * @param parameterKey\r\n * @return Wert oder NULL wenn key nicht gefunden\r\n */\r\nfunction dwAjaxGetEventParameterValue(eventParameters, parameterKey) {\r\n    var paramArray = eventParameters.split(\"@DWSUB@\");\r\n    var paramSearchId = parameterKey += \"=\";\r\n    for (var i = 0; i < paramArray.length; i++) {\r\n        var paramEntry = paramArray[i];\r\n        if (dwUtilsStringStartsWith(paramEntry, paramSearchId, false)) {\r\n            return paramEntry.substring(paramSearchId.length);\r\n        }\r\n    }\r\n    return null;\r\n}\r\n\r\nfunction dwAjaxIsAsynchronousCommand(event) {\r\n    event = dwFrameworkGetEvent(event);\r\n    if (typeof (event) == 'undefined') {\r\n        return true; // Default\r\n    }\r\n    if (typeof (window.dw_asynchronous) != 'undefined') {\r\n        // Im IE8 (oder compat mode) kann ggf. das Event Objekt verändert werden\r\n        return window.dw_asynchronous;\r\n    }\r\n    if (typeof (event.asynchronous) == 'undefined') {\r\n        return true; // Kann z.B. vorkommen, wenn Events manuell erzeugt werden ...\r\n    }\r\n    return event.asynchronous;\r\n}\r\n\r\nfunction dwAjaxReturnPdfData(controlId, transactionid, arraybuffer) {\r\n    var result = dwUtilArrayBufferToBase64(arraybuffer)\r\n    dwAjaxAddUpdate(controlId + \"@DW@\" + controlId + \"@DW@__custom_pdfCreationFinishedEvent@DW@data=\" + result + \"@DWSUB@transactionId=\" + transactionid, true, true)\r\n}\r\n\r\n\r\nfunction dwAjaxReturnScanResult(controlId, transactionid, decodedText, decodedResult) {\r\n    dwAjaxAddUpdate(controlId + \"@DW@\" + controlId + \"@DW@__custom_QrCodeScanFinishedEvent@DW@decodedText=\" + decodedText + \"@DWSUB@decodedResult=\" + decodedResult + \"@DWSUB@transactionId=\" + transactionid, true, true)\r\n}\r\n\r\n\r\n\r\n\r\n\n/*\r\n * Copyright (c) 2014 Docware GmbH\r\n */\r\n\r\nvar DW_LAZYLOAD_DEBUG_ACTIVE = false;\r\nvar DW_LAZYLOAD_WORKER_STATE = {BUSY: \"busy\", FREE: \"free\"};\r\n\r\nfunction DW_LAZYLOAD_WORKER() {\r\n    var state = DW_LAZYLOAD_WORKER_STATE.FREE;\r\n    var id = \"\";\r\n    var dpi = 0;\r\n}\r\n\r\n// pageNo hat als ersten Seitenindex 1 und nicht 0\r\nfunction dwLazyLoadPage(controlId, pageNo) {\r\n    var control = $(controlId);\r\n    if (control == null) {\r\n        return;\r\n    }\r\n    dwLazyLoadDebug(\"dwLazyLoadPage: show page \" + pageNo);\r\n\r\n    function __internal_updateTodoList(pageNo) {\r\n        if ((pageNo < 1) || (pageNo > count)) {\r\n            return; // ungültige Angabe\r\n        }\r\n        control.current = pageNo;\r\n        var startPage = pageNo - preloadPreviousCount;\r\n        if (startPage < 1) {\r\n            startPage = 1;\r\n        }\r\n        var endPage = pageNo + preloadNextCount;\r\n        if (endPage > count) {\r\n            endPage = count;\r\n        }\r\n        var dpi = parseInt(dwDomGetDomAttribute(control, \"dpi\")); // dpi erst jetzt bestimmen, könnte sich nämlich geändert haben\r\n        dwLazyLoadDebug(\"__internal_updateToDoList: from \" + startPage + \" to \" + endPage);\r\n        pageLoop:for (var i = startPage; i <= endPage; i++) {\r\n            var page = $(controlId + \"_\" + i);\r\n            var pageDPI = parseInt(dwDomGetDomAttributeOrDefault(page, \"dpi\", \"0\"));\r\n            var loaded = page && (pageDPI >= dpi);\r\n            if (loaded) {\r\n                dwLazyLoadDebug(\"Ignoring page: \" + i + \". Reason: already done (pagedpi: \" + pageDPI + \" - dpi: \" + dpi);\r\n                continue;\r\n            }\r\n            for (var workerIdx = 0; workerIdx < workerCount; workerIdx++) {\r\n                if ((workers[workerIdx].id == controlId + \"_\" + i) && (workers[workerIdx].dpi >= dpi)) {\r\n                    dwLazyLoadDebug(\"Ignoring page: \" + i + \". Reason: already working on it (\" + workerIdx + \")\");\r\n                    continue pageLoop;\r\n                }\r\n            }\r\n            if (todoList.indexOf(i) == -1) {\r\n                todoList.push(i);\r\n            }\r\n        }\r\n        todoList.sort(__internal_sort);\r\n        dwLazyLoadDebug(\"__internal_updateTodoList: \" + todoList);\r\n    }\r\n\r\n    function __internal_sort(val1, val2) {\r\n        var diff1 = val1 - pageNo;\r\n        var diff2 = val2 - pageNo;\r\n        // Aufsteigende Gewichtung. Wichtigste Teile am Ende des Array zum Abarbeiten (POP)\r\n        if (diff1 == 0) {\r\n            return +1;\r\n        }\r\n        if (diff2 == 0) {\r\n            return -1;\r\n        }\r\n        if (diff1 == diff2) {\r\n            return 0;\r\n        }\r\n        var previousCount = (preloadPreviousCount > 0) ? preloadPreviousCount : 1;\r\n        var nextCount = (preloadNextCount > 0) ? preloadNextCount : 1;\r\n        var weightedDiff1 = (diff1 >= 0) ? (diff1 / nextCount) : (diff1 / previousCount);\r\n        var weightedDiff2 = (diff2 >= 0) ? (diff2 / nextCount) : (diff2 / previousCount);\r\n        return Math.abs(weightedDiff2) - Math.abs(weightedDiff1);\r\n    }\r\n\r\n    function __internal_doProcessTodoList(workerIndex) {\r\n        var todoList = dwDomGetDomAttribute(control, \"todoList\");\r\n        dwLazyLoadDebug(\"__internal_doProcessTodoList: \" + todoList);\r\n        if (todoList.length == 0) {\r\n            return;\r\n        }\r\n        if (workers[workerIndex].state == DW_LAZYLOAD_WORKER_STATE.BUSY) {\r\n            return;\r\n        }\r\n        var pageIdx = parseInt(todoList.pop());\r\n        var dpi = parseInt(dwDomGetDomAttribute(control, \"dpi\")); // dpi erst jetzt bestimmen, könnte sich nämlich geändert haben\r\n        workers[workerIndex].state = DW_LAZYLOAD_WORKER_STATE.BUSY;\r\n        workers[workerIndex].id = controlId + \"_\" + pageIdx;\r\n        workers[workerIndex].dpi = dpi;\r\n        dwDomSetDomAttribute(control, \"workers\", workers);\r\n        dwDomSetDomAttribute(control, \"todoList\", todoList);\r\n        var page = $(controlId + \"_\" + pageIdx);\r\n        dwLazyLoadDebug(\"Processing page \" + pageIdx + \". Found: \" + (page != null) + \" (\" + controlId + \")\");\r\n        if (!page) {\r\n            workers[workerIndex].state = DW_LAZYLOAD_WORKER_STATE.FREE;\r\n            workers[workerIndex].id = \"\";\r\n            workers[workerIndex].dpi = 0;\r\n            dwDomSetDomAttribute(control, \"workers\", workers);\r\n            __internal_doProcessTodoList(workerIndex);\r\n            return;\r\n        }\r\n        var pageSrc = dwDomGetDomAttribute(page, \"data-src\") + \"&dpi=\" + dpi;\r\n        dwDomSetImageSource(page, pageSrc, function() {\r\n            dwLazyLoadDebug(\"__internal_doProcessTodoList: dpi[\" + dpi + \"] for page '\" + pageIdx + \"' set\");\r\n            dwDomSetDomAttribute(page, \"dpi\", dpi);\r\n            workers[workerIndex].state = DW_LAZYLOAD_WORKER_STATE.FREE;\r\n            workers[workerIndex].id = \"\";\r\n            workers[workerIndex].dpi = 0;\r\n            dwDomSetDomAttribute(control, \"workers\", workers);\r\n            __internal_doProcessTodoList(workerIndex);\r\n        }, function() {\r\n            workers[workerIndex].state = DW_LAZYLOAD_WORKER_STATE.FREE;\r\n            workers[workerIndex].id = \"\";\r\n            workers[workerIndex].dpi = 0;\r\n            dwDomSetDomAttribute(control, \"workers\", workers);\r\n            __internal_doProcessTodoList(workerIndex);\r\n        });\r\n    }\r\n\r\n    var preloadPreviousCount = dwDomGetDomAttribute(control, \"preload_previous\");\r\n    var preloadNextCount = dwDomGetDomAttribute(control, \"preload_next\");\r\n    var count = dwDomGetDomAttribute(control, \"count\");\r\n    preloadPreviousCount = preloadPreviousCount ? parseInt(preloadPreviousCount) : 0;\r\n    preloadNextCount = preloadNextCount ? parseInt(preloadNextCount) : 0;\r\n    count = count ? parseInt(count) : 0;\r\n\r\n    var workerCount = 4;\r\n    var workers = dwDomGetDomAttribute(control, \"workers\") || dwUtilsInitArray(workerCount, new DW_LAZYLOAD_WORKER());\r\n\r\n    var todoList = dwDomGetDomAttribute(control, \"todoList\") || new Array();\r\n    dwLazyLoadDebug(\"TODO-LIST: \" + todoList + \" - Length: \" + todoList.length);\r\n    dwLazyLoadDebug(\"WORKER-LIST: \" + workers + \" - Length: \" + workers.length);\r\n    __internal_updateTodoList(pageNo);\r\n\r\n    dwDomSetDomAttribute(control, \"todoList\", todoList);\r\n    dwDomSetDomAttribute(control, \"workers\", workers);\r\n\r\n    for (var i = 0; i < workers.length; i++) {\r\n        __internal_doProcessTodoList(i);\r\n    }\r\n}\r\n\r\nfunction dwLazyLoadDebug(msg) {\r\n    if (DW_LAZYLOAD_DEBUG_ACTIVE) {\r\n        framework_logger.log(msg);\r\n    }\r\n}\n/*\r\n * Copyright (c) 2017 Docware GmbH\r\n */\r\n\r\nfunction DwFile(file, controlId) {\r\n    this.nativeFile = file;\r\n    this.name = file.name || file || '';\r\n    this.size = file.size || 0;\r\n    this.type = file.type || '';\r\n    this.lastmodified = file.lastModifiedDate || new Date();\r\n    this.controlId = controlId; // kann null / undefined sein bei drag&drop\r\n\r\n    this.dateTo_yyyyMMdd = function() {\r\n        return this.lastmodified.getTime();\r\n    }\r\n}\r\n\r\nfunction dwFileUploadOnDrop(event, fileUploadPanelEventHandlerComponentId, fileUploadPanelId) {\r\n    dwFrameworkPreventDefaultBehaviour(event);\r\n    var control = dwUtilsGetEventTarget(event);\r\n    if (dwDomHasAttribute(control, \"disabled\")) {\r\n        dwDomRemoveClass(control, \"guidropzone_invalid\");\r\n        return;\r\n    }\r\n    dwDomRemoveClass(control, \"guidropzone_entered\");\r\n    if (event.dataTransfer) {\r\n        dwFileUploadAddMultipleFiles(fileUploadPanelEventHandlerComponentId, fileUploadPanelId, event.dataTransfer.files);\r\n        dwFileUploadAddFilesFinished(fileUploadPanelEventHandlerComponentId, fileUploadPanelId);\r\n        dwAjaxSendUpdates(false);\r\n    }\r\n}\r\n\r\nfunction dwFileUploadOnDragEnter(event) {\r\n    dwFrameworkPreventDefaultBehaviour(event);\r\n    var control = dwUtilsGetEventTarget(event);\r\n    if (dwDomHasAttribute(control, \"disabled\")) {\r\n        dwDomAddClass(control, \"guidropzone_invalid\");\r\n    } else {\r\n        dwDomAddClass(control, \"guidropzone_entered\");\r\n    }\r\n}\r\n\r\nfunction dwFileUploadOnDragLeave(event) {\r\n    dwFrameworkPreventDefaultBehaviour(event);\r\n    var control = dwUtilsGetEventTarget(event);\r\n    if (dwDomHasAttribute(control, \"disabled\")) {\r\n        dwDomRemoveClass(control, \"guidropzone_invalid\");\r\n    } else {\r\n        dwDomRemoveClass(control, \"guidropzone_entered\");\r\n    }\r\n}\r\n\r\nfunction dwFileUploadOnDragOver(event) {\r\n    dwFrameworkPreventDefaultBehaviour(event);\r\n}\r\n\r\n\r\nfunction dwFileUploadAddFile(event, fileUploadPanelEventHandlerComponentId, fileUploadPanelId) {\r\n    var clickedButton = dwUtilsGetEventTarget(dwFrameworkGetEvent(event));\r\n    var fileUploadIframeDocument = dwFileUploadFindIframeDocument(fileUploadPanelId);\r\n    var fileUploadForm = fileUploadIframeDocument.getElementById(\"submitform\");\r\n    //Auf Typ Button testen\r\n    if (clickedButton.tagName && clickedButton.tagName.toLowerCase() != \"button\") {\r\n        var match = dwUtilsFindMatchingNodes($(fileUploadPanelEventHandlerComponentId), clickedButton, function(rootNode, node) {\r\n            return (node.tagName) && (node.tagName.toLowerCase() == \"button\");\r\n        }, true);\r\n        if (match.length) {\r\n            clickedButton = match[0];\r\n        }\r\n    }\r\n    var inputFile = fileUploadIframeDocument.createElement(\"input\");\r\n    inputFile.type = \"file\";\r\n    var existingInputs = fileUploadForm.getElementsByTagName(\"input\");\r\n    inputFile.name = \"file_\" + existingInputs.length;\r\n    inputFile.id = \"file_\" + existingInputs.length;\r\n    var isMultipleSelection = dwDomGetDomAttribute(clickedButton, \"multiple\") == \"multiple\";\r\n    if (isMultipleSelection) {\r\n        inputFile.multiple = \"multiple\";\r\n    }\r\n    inputFile.onchange = function() {\r\n        if (this.files) {\r\n            dwFileUploadAddMultipleFiles(fileUploadPanelEventHandlerComponentId, fileUploadPanelId, this.files, inputFile.id);\r\n        } else {\r\n            dwFileUploadAddSingleFile(fileUploadPanelEventHandlerComponentId, fileUploadPanelId, new DwFile(inputFile.value, inputFile.id));\r\n        }\r\n        dwFileUploadAddFilesFinished(fileUploadPanelEventHandlerComponentId, fileUploadPanelId);\r\n        dwAjaxSendUpdates(false);\r\n    };\r\n    fileUploadForm.appendChild(inputFile);\r\n    inputFile.click();\r\n}\r\n\r\nfunction dwFileUploadAddMultipleFiles(fileUploadPanelEventHandlerComponentId, fileUploadPanelId, files, controlId) {\r\n    for (var i = 0; i < files.length; i++) {\r\n        var file = new DwFile(files[i], controlId);\r\n        dwFileUploadAddSingleFile(fileUploadPanelEventHandlerComponentId, fileUploadPanelId, file);\r\n    }\r\n}\r\n\r\nfunction dwFileUploadAddSingleFile(fileUploadPanelEventHandlerComponentId, fileUploadPanelId, file) {\r\n    var fileUploadIframeDocument = dwFileUploadFindIframeDocument(fileUploadPanelId);\r\n    var fileUploadForm = fileUploadIframeDocument.getElementById(\"submitform\");\r\n    var fileList = fileUploadForm.fileList;\r\n    if (!fileList) {\r\n        fileList = new Array();\r\n        fileUploadForm.fileList = fileList;\r\n    }\r\n    fileList.push(file);\r\n    var eventParameter = \"filename=\" + file.name + \"@DWSUB@filesize=\" + file.size + \"@DWSUB@type=\" + file.type + \"@DWSUB@lastmodified=\" + file.dateTo_yyyyMMdd();\r\n    dwAjaxFireCustomEvent(fileUploadPanelEventHandlerComponentId, fileUploadPanelId, \"ADD_FILE\", eventParameter, false);\r\n}\r\n\r\nfunction dwFileUploadAddFilesFinished(fileUploadPanelEventHandlerComponentId, fileUploadPanelId) {\r\n    dwAjaxFireCustomEvent(fileUploadPanelEventHandlerComponentId, fileUploadPanelId, \"ADD_FILES_FINISHED\", \"\", false);\r\n}\r\n\r\nfunction dwFileUploadRemoveFile(fileUploadPanelId, index) {\r\n    var fileUploadIframeDocument = dwFileUploadFindIframeDocument(fileUploadPanelId);\r\n    var fileUploadForm = fileUploadIframeDocument.getElementById(\"submitform\");\r\n    var fileList = fileUploadForm.fileList;\r\n    var fileItem = fileList[index];\r\n    dwUtilsRemoveFromArrayByIndex(fileList, index);\r\n\r\n    if (fileItem.controlId) {\r\n        var fileInputControl = $(fileItem.controlId);\r\n        if (!fileInputControl) {\r\n            return;\r\n        }\r\n        if (fileInputControl.files && fileInputControl.files.length > 1) {\r\n            fileInputControl.files = dwUtilsRemoveFromArrayByIndex(fileInputControl.files, index);\r\n        } else {\r\n            dwDomRemoveSelf(fileInputControl);\r\n        }\r\n    }\r\n}\r\n\r\nfunction dwFileUploadTransferFiles(fileUploadPanelId) {\r\n    var fileUploadIframeDocument = dwFileUploadFindIframeDocument(fileUploadPanelId);\r\n    var fileUploadForm = fileUploadIframeDocument.getElementById(\"submitform\");\r\n    var fileList = fileUploadForm.fileList;\r\n    if ((typeof (FormData) != \"undefined\") && fileList) {\r\n//    if (FormData && fileList) {\r\n        var uri = $(fileUploadPanelId).getElementsByTagName(\"iframe\")[0].src;\r\n        var xhr = new XMLHttpRequest();\r\n        var fd = new FormData();\r\n\r\n        xhr.open(\"POST\", uri, true);\r\n        xhr.onreadystatechange = function() {\r\n            if (xhr.readyState == DWUTILS_READY_STATE.DONE && xhr.status == 200) {\r\n                // Handle response.\r\n            }\r\n        };\r\n        for (var i = 0; i < fileList.length; i++) {\r\n            var file = fileList[i];\r\n            fd.append(file.name, file.nativeFile);\r\n        }\r\n        // Initiate a multipart/form-data upload\r\n        xhr.send(fd);\r\n\r\n//        for (var i = 0; i < fileList.length; i++) {\r\n//            dwFileUploadTransferFile(fileUploadPanelId, fileList[i]);\r\n//        }\r\n    } else {\r\n        fileUploadForm.submit();\r\n    }\r\n\r\n}\r\n\r\nfunction dwFileUploadTransferFile(fileUploadPanelId, file) {\r\n    var uri = $(fileUploadPanelId).getElementsByTagName(\"iframe\")[0].src;\r\n    var xhr = new XMLHttpRequest();\r\n    var fd = new FormData();\r\n\r\n    xhr.open(\"POST\", uri, true);\r\n    xhr.onreadystatechange = function() {\r\n        if (xhr.readyState == DWUTILS_READY_STATE.DONE && xhr.status == 200) {\r\n            // Handle response.\r\n//            alert(xhr.responseText); // handle response.\r\n        }\r\n    };\r\n    fd.append(file.name, file.nativeFile);\r\n    // Initiate a multipart/form-data upload\r\n    xhr.send(fd);\r\n}\r\n\r\n\r\nfunction dwFileUploadFindIframeDocument(fileUploadPanelId) {\r\n    var fileUploadPanel = $(fileUploadPanelId);\r\n    var fileUploadIframe = fileUploadPanel.getElementsByTagName(\"iframe\")[0]; // muss da sein ...\r\n\r\n    var fileUploadIframeDocument = fileUploadIframe.contentWindow || fileUploadIframe.contentDocument;\r\n    if (fileUploadIframeDocument.document) {\r\n        fileUploadIframeDocument = fileUploadIframeDocument.document;\r\n    }\r\n    return fileUploadIframeDocument;\r\n}\r\n\n/*\r\n * Copyright (c) 2021 Quanos Service Solutions GmbH\r\n */\r\n\r\nvar DW_DIALOG_TEXTS = new Object(); // Hashmap<id<Hashmap<key, translation>>\r\n\r\n/**\r\n * Speichert die Übersetzungstexte für eine Dialog Instanz / ID\r\n * @param id\r\n * @param textForTitle\r\n * @param textForMessage\r\n * @param textForDetailLink\r\n * @param textForCopyToClipboard\r\n * @param textForRetryButton\r\n * @param textForDetails\r\n */\r\nfunction dwDialogStoreDialogTranslations(id, textForTitle, textForMessage, textForDetailLink, textForCopyToClipboard, textForRetryButton, textForDetails) {\r\n    DW_DIALOG_TEXTS[id] = {\r\n        textForTitle: textForTitle,\r\n        textForMessage: textForMessage,\r\n        textForDetailLink: textForDetailLink,\r\n        textForCopyToClipboard: textForCopyToClipboard,\r\n        textForRetryButton: textForRetryButton,\r\n        textForDetails: textForDetails\r\n    }\r\n}\r\n\r\n/**\r\n * Klasse zur Darstellung eines Dialogs (z.B. für Fehlermeldungen). Layout angelehnt an Framework Dialoge\r\n * Parameter (title / message / ...) werden nur als Fallback ausgewertet, sofern keine Übersetzungstexte vorab übertragen wurden\r\n * @param id\r\n * @param title\r\n * @param message\r\n * @param linkTextDetail\r\n * @param buttonTextRetry\r\n * @param details\r\n * @constructor\r\n */\r\nvar DWDialog = function(id, title, message, linkTextDetail, copyToClipboardText, buttonTextRetry, details) {\r\n    var _self = this;\r\n    var texts = DW_DIALOG_TEXTS[id] || new Object();\r\n    title = texts.textForTitle || title;\r\n    message = texts.textForMessage || message;\r\n    linkTextDetail = texts.textForDetailLink || linkTextDetail;\r\n    copyToClipboardText = texts.textForCopyToClipboard || copyToClipboardText;\r\n\r\n    if (buttonTextRetry) {\r\n        buttonTextRetry = texts.textForRetryButton || buttonTextRetry;\r\n    }\r\n\r\n    if (details) {\r\n        details = texts.textForDetails || details;\r\n    }\r\n\r\n    this.visible = false;\r\n\r\n    this.__getWidth = function(withDetails) {\r\n        var width = withDetails ? 650 : 450;\r\n        return Math.min(width, framework_displayWidth);\r\n    };\r\n    this.__getHeight = function(withDetails) {\r\n        var height = withDetails ? 250 : 145;\r\n        // 15 ist Header, eine Zeile ist 18\r\n        var heightCalculated = 15 + (dwUtilsCountString(message, \"<br>\") + 1) * 18;\r\n        height = Math.max(heightCalculated, height);\r\n\r\n        if (buttonTextRetry) {\r\n            height += 23 + 2 * 8; // Button-Höhe + 2x Padding\r\n        }\r\n\r\n        return Math.min(height, framework_displayHeight);\r\n    };\r\n    this.__getMarginForCentering = function(size) {\r\n        return parseInt(-size / 2);\r\n    };\r\n    this.__create = function() {\r\n        this.fragment = document.createElement(\"div\");\r\n        this.fragment.id = id;\r\n        var dialogOverlay = document.createElement(\"div\");\r\n        dialogOverlay.id = id + \"_dialog_overlay\";\r\n        dialogOverlay.className = \"guiwindow_child_overlay\";\r\n        dialogOverlay.style.zIndex = 50000;\r\n        dialogOverlay.onclick = function(event) {\r\n            dwFrameworkDisableEventBubbling(event);\r\n        };\r\n        dialogOverlay.onmousedown = function(event) {\r\n            dwFrameworkDisableEventBubbling(event);\r\n        };\r\n        dialogOverlay.onmouseup = function(event) {\r\n            dwFrameworkDisableEventBubbling(event);\r\n        };\r\n        dialogOverlay.onmousemove = function(event) {\r\n            dwFrameworkDisableEventBubbling(event);\r\n        };\r\n        dialogOverlay.onkeydown = function(event) {\r\n            dwFrameworkDisableEventBubbling(event);\r\n        };\r\n        dialogOverlay.onkeypress = function(event) {\r\n            dwFrameworkDisableEventBubbling(event);\r\n        };\r\n        dialogOverlay.onkeyup = function(event) {\r\n            dwFrameworkDisableEventBubbling(event);\r\n        };\r\n        this.fragment.appendChild(dialogOverlay);\r\n\r\n        var width = this.__getWidth(false);\r\n        var height = this.__getHeight(false);\r\n        var marginLeft = this.__getMarginForCentering(width);\r\n        var marginTop = this.__getMarginForCentering(height);\r\n        var dialogContainer = document.createElement(\"div\");\r\n        dialogContainer.id = id + \"_dialog_container\";\r\n        dialogContainer.className = \"guiwindow_child_container\";\r\n        dialogContainer.style.width = width + \"px\";\r\n        dialogContainer.style.marginLeft = marginLeft + \"px\";\r\n        dialogContainer.style.height = height + \"px\";\r\n        dialogContainer.style.marginTop = marginTop + \"px\";\r\n        dialogContainer.style.zIndex = 50001;\r\n        dialogContainer.onclick = function(event) {\r\n            dwFrameworkDisableEventBubbling(event);\r\n        };\r\n        dialogContainer.onmousedown = function(event) {\r\n            dwFrameworkDisableEventBubbling(event);\r\n        };\r\n        dialogContainer.onmouseup = function(event) {\r\n            dwFrameworkDisableEventBubbling(event);\r\n        };\r\n        dialogContainer.onmousemove = function(event) {\r\n            dwFrameworkDisableEventBubbling(event);\r\n        };\r\n        dialogContainer.onkeydown = function(event) {\r\n            dwFrameworkDisableEventBubbling(event);\r\n        };\r\n        dialogContainer.onkeypress = function(event) {\r\n            dwFrameworkDisableEventBubbling(event);\r\n        };\r\n        dialogContainer.onkeyup = function(event) {\r\n            dwFrameworkDisableEventBubbling(event);\r\n        };\r\n\r\n        this.fragment.appendChild(dialogContainer);\r\n\r\n        var dialogTitle = document.createElement(\"div\");\r\n        //dialogTitle.appendChild(document.createTextNode(title)); // escaped\r\n        dialogTitle.innerHTML = title;\r\n        dialogTitle.className = \"guiwindow_child_title\";\r\n        dialogTitle.style.right = \"0\";\r\n        dialogTitle.style.backgroundImage = \"none\";\r\n        dialogContainer.appendChild(dialogTitle);\r\n\r\n        var dialogContentContainer = document.createElement(\"div\");\r\n        dialogContentContainer.className = \"guiwindow_child_content\";\r\n        dialogContentContainer.style.top = \"23px\";\r\n        dialogContainer.appendChild(dialogContentContainer);\r\n\r\n        var dialogContentContainerPanel = document.createElement(\"div\");\r\n        dialogContentContainerPanel.className = \"guipanel\";\r\n        dialogContentContainerPanel.style.padding = \"8px\";\r\n        dialogContentContainerPanel.style.height = \"100%\";\r\n        dialogContentContainerPanel.style.width = \"100%\";\r\n        dialogContentContainer.appendChild(dialogContentContainerPanel);\r\n\r\n        var dialogContentMessage = document.createElement(\"div\");\r\n        dialogContentMessage.innerHTML = message;\r\n        dialogContentMessage.className = \"guilabel\";\r\n        dialogContentMessage.style.whiteSpace = \"normal\";\r\n        dialogContentContainerPanel.appendChild(dialogContentMessage);\r\n\r\n        if (details) {\r\n            var dialogContentMessageDetailsPanel = document.createElement(\"div\");\r\n            dialogContentMessageDetailsPanel.id = id + \"_dialog_details_panel\";\r\n            dialogContentMessageDetailsPanel.className = \"guipanel\";\r\n            dialogContentMessageDetailsPanel.style.top = \"48px\";\r\n            dialogContentMessageDetailsPanel.style.bottom = \"44px\";\r\n            dialogContentMessageDetailsPanel.style.left = \"8px\";\r\n            dialogContentMessageDetailsPanel.style.right = \"8px\";\r\n            dialogContentMessageDetailsPanel.style.display = \"none\";\r\n            dialogContentContainerPanel.appendChild(dialogContentMessageDetailsPanel);\r\n\r\n            var dialogContentMessageDetails = document.createElement(\"textarea\");\r\n            dialogContentMessageDetails.textContent = details;\r\n            dialogContentMessageDetails.className = \"guitextarea cursor_text\";\r\n            dialogContentMessageDetails.readOnly = true;\r\n            dialogContentMessageDetails.style.width = \"100%\";\r\n            dialogContentMessageDetails.style.height = \"100%\";\r\n            dialogContentMessageDetails.style.overflow = \"auto\";\r\n            dialogContentMessageDetailsPanel.appendChild(dialogContentMessageDetails);\r\n        }\r\n\r\n        if (details || buttonTextRetry) {\r\n            var dialogContentToButtonsSeparatorPanel = document.createElement(\"div\");\r\n            dialogContentToButtonsSeparatorPanel.className = \"guipanel\";\r\n            dialogContentToButtonsSeparatorPanel.style.bottom = \"36px\";\r\n            dialogContentToButtonsSeparatorPanel.style.left = \"8px\";\r\n            dialogContentToButtonsSeparatorPanel.style.right = \"8px\";\r\n            dialogContentContainerPanel.appendChild(dialogContentToButtonsSeparatorPanel);\r\n\r\n            var dialogContentToButtonsSeparator = document.createElement(\"div\");\r\n            dialogContentToButtonsSeparator.className = \"guiseparator_h\";\r\n            dialogContentToButtonsSeparatorPanel.appendChild(dialogContentToButtonsSeparator);\r\n        }\r\n\r\n        if (details) {\r\n            var dialogLinkToDetailsPanel = document.createElement(\"div\");\r\n            dialogLinkToDetailsPanel.className = \"guipanel\";\r\n            dialogLinkToDetailsPanel.style.bottom = \"8px\";\r\n            dialogLinkToDetailsPanel.style.left = \"8px\";\r\n            dialogContentContainerPanel.appendChild(dialogLinkToDetailsPanel);\r\n\r\n            var dialogCopyDetailsToClipboard = document.createElement(\"button\");\r\n            dialogCopyDetailsToClipboard.innerHTML = copyToClipboardText;\r\n            dialogCopyDetailsToClipboard.className = \"guibutton_linkenabled\";\r\n            dialogCopyDetailsToClipboard.style.paddingLeft = \"20px\";\r\n            dialogCopyDetailsToClipboard.style.display = \"none\";\r\n            dialogCopyDetailsToClipboard.style.height = \"22px\";\r\n            dialogCopyDetailsToClipboard.onclick = dwUtilsCopyToClipboard(details);\r\n\r\n            var dialogLinkToDetails = document.createElement(\"button\");\r\n            dialogLinkToDetails.innerHTML = linkTextDetail;\r\n            dialogLinkToDetails.className = \"guibutton_linkenabled\";\r\n            dialogLinkToDetails.onclick = function() {\r\n                var isVisible = $(id + \"_dialog_details_panel\").style.display == \"\";\r\n                _self.__showDetails(!isVisible);\r\n                dialogCopyDetailsToClipboard.style.display = !isVisible ? \"\" : \"none\";\r\n            };\r\n\r\n            dialogLinkToDetailsPanel.appendChild(dialogLinkToDetails);\r\n            dialogLinkToDetailsPanel.appendChild(dialogCopyDetailsToClipboard);\r\n        }\r\n\r\n        if (buttonTextRetry) {\r\n            var dialogButtonToReloadPanel = document.createElement(\"div\");\r\n            dialogButtonToReloadPanel.className = \"guipanel\";\r\n            dialogButtonToReloadPanel.style.bottom = \"8px\";\r\n            dialogButtonToReloadPanel.style.right = \"8px\";\r\n            dialogContentContainerPanel.appendChild(dialogButtonToReloadPanel);\r\n\r\n            var dialogButtonToReload = document.createElement(\"button\");\r\n            dialogButtonToReload.innerHTML = buttonTextRetry;\r\n            dialogButtonToReload.className = \"guibutton_enabled\";\r\n            dialogButtonToReload.id = id + \"_dialog_retry_button\";\r\n            dialogButtonToReload.style.height = \"23px\";\r\n            dialogButtonToReload.style.minWidth = \"100px\";\r\n            dialogButtonToReload.style.paddingLeft = \"4px\";\r\n            dialogButtonToReload.style.paddingRight = \"4px\";\r\n            dialogButtonToReload.onclick = function() {\r\n                _self.__retry();\r\n            };\r\n            dialogButtonToReloadPanel.appendChild(dialogButtonToReload);\r\n        }\r\n    };\r\n\r\n    this.__create();\r\n\r\n    this.__showDetails = function(visible) {\r\n        var container = $(id + \"_dialog_container\");\r\n        var width = this.__getWidth(visible);\r\n        var height = this.__getHeight(visible);\r\n        var marginLeft = this.__getMarginForCentering(width);\r\n        var marginTop = this.__getMarginForCentering(height);\r\n        var display = visible ? \"\" : \"none\";\r\n        $(id + \"_dialog_details_panel\").style.display = display;\r\n        container.style.height = height + \"px\";\r\n        container.style.marginTop = marginTop + \"px\";\r\n        container.style.width = width + \"px\";\r\n        container.style.marginLeft = marginLeft + \"px\";\r\n\r\n        this.__focusButton();\r\n//        window.getSelection().selectAllChildren($(id + \"_dialog_details_panel\"));\r\n    };\r\n\r\n    this.__retry = function() {\r\n        dwFrameworkRefreshPage();\r\n    };\r\n\r\n    this.__focusButton = function() {\r\n        if ($(id + \"_dialog_retry_button\")) {\r\n            $(id + \"_dialog_retry_button\").focus();\r\n        }\r\n    };\r\n\r\n    this.setVisible = function(visible) {\r\n        if ((typeof (url) != \"undefined\") && url.indexOf(\"chrome://\") == 0) {\r\n            // Nein es geht nicht um den Chrome Browser sondern um Firefox. Die interne Engine hat auch einen Begriff wie \"chrome\"\r\n            // Browser interne Meldungen bringen wir nicht als unsere Fehler. mit window.onError catchen wir ja alles\r\n            return;\r\n        }\r\n        if (this.visible == visible) {\r\n            return;\r\n        }\r\n        this.visible = visible;\r\n        var body = $(\"body\");\r\n        if (visible) {\r\n            body.appendChild(this.fragment);\r\n            this.__focusButton();\r\n            if (framework_isIE) {\r\n                var objectTags = document.getElementsByTagName(\"object\");\r\n                for (var i = 0; i < objectTags.length; i++) {\r\n                    var object = objectTags[i];\r\n                    object.style.visibility = \"hidden\";\r\n                }\r\n            }\r\n            dwTooltip_hideTooltips();\r\n        } else {\r\n            body.removeChild(this.fragment);\r\n        }\r\n    };\r\n};\r\n\r\nfunction dwDialogShowErrorDialog(details) {\r\n    var body = $(\"body\");\r\n    var dialog = $(\"error\");\r\n    if (dialog) {\r\n        // Dialog wird bereits angezeigt\r\n        return;\r\n    }\r\n    dialog = new DWDialog(\"error\", \"An error occurred\", \"A communication error occurred. Do you want to retry?\", \"Details\", \"Copy to Clipboard\", \"Reload\", details);\r\n    dialog.setVisible(true);\r\n}\r\n\r\n// Aktuell noch keinen generischen Fehlerdialog bei Requests (im Hintergrund) anzeigen. Nachricht könnte zudem nur angezeigt werden bei gleicher Domain\r\n//function dwDialogShowLoadUrlErrorDialog(details) {\r\n//    var body = $(\"body\");\r\n//    var dialog = $(\"loadError\");\r\n//    if (dialog) {\r\n//        // Dialog wird bereits angezeigt\r\n//        return;\r\n//    }\r\n//    dialog = new DWDialog(\"loadError\", \"An error occurred\", \"A communication error occurred. Do you want to retry?\", \"Details\", \"Reload\", details);\r\n//    dialog.setVisible(true);\r\n//}\r\n\r\nfunction dwDialogShowLostConnection() {\r\n    var body = $(\"body\");\r\n    var dialog = $(\"lostConnection\");\r\n    if (dialog) {\r\n        // Dialog wird bereits angezeigt\r\n        return;\r\n    }\r\n    dialog = new DWDialog(\"lostConnection\", \"Lost connection to server\", \"A communication error occurred. Do you want to retry?\", null, null, \"Reload\", null);\r\n    dialog.setVisible(true);\r\n}\r\n\r\nfunction dwDialogShowInvalidSession(showReloadButton) {\r\n    var body = $(\"body\");\r\n    var dialog = $(\"invalidSession\");\r\n    if (dialog) {\r\n        // Dialog wird bereits angezeigt\r\n        return;\r\n    }\r\n    var buttonText = showReloadButton ? \"Reload\" : null;\r\n    dialog = new DWDialog(\"invalidSession\", \"Invalid or expired session\", \"The current session has expired. Please restart the application.\", null, null, buttonText, null);\r\n    if (showReloadButton) {\r\n        dialog.__retry = function() {\r\n            // Refresh Action ist leider nicht hinreichend. Bei der Location Reload Methode wird der Bookmark String korrekt übertragen\r\n            // und intern das Laden des Bookmarks ausgelöst\r\n            window.location.reload(true);\r\n        }\r\n    }\r\n    //500ms delay bevor die meldung angezeigt wird\r\n    var delayInterval = setInterval(function() {\r\n        dialog.setVisible(true);\r\n        clearInterval(delayInterval);\r\n    }, 500);\r\n}\r\n\r\nfunction dwDialogShowMessageDialog(title, message) {\r\n    var body = $(\"body\");\r\n    var dialog = $(\"message\");\r\n    if (dialog) {\r\n        // Dialog wird bereits angezeigt\r\n        return;\r\n    }\r\n    dialog = new DWDialog(\"message\", title, message, null, null, \"Close\", null);\r\n    dialog.setVisible(true);\r\n}\n/*\r\n * Copyright (c) 2025 Quanos Solutions GmbH\r\n */\r\n/**\r\n * Sammlung von Methoden zur Anzeige von SVG\r\n */\r\n\r\n// Erzeugt einen Hotspot (nur für Anzeige)\r\nfunction dwImageSVGCreateHotspot(root, textNode, hotspot, unmarkedHotspotsVisible) {\r\n    if ((root) && (textNode) && (hotspot)) {\r\n        var bBoxRectangle = dwImageSVGGetBBox(textNode);\r\n\r\n        dwImageWriteToLog(hotspot.elementId, \"create svg hotspot (id=\" + hotspot.uniqueId + \" key=\" + hotspot.key + \" keyver=\" + hotspot.keyVer + \")\");\r\n        var node = dwImageSVGPaintHotspotNode(hotspot, null, bBoxRectangle, unmarkedHotspotsVisible);\r\n        if (node) {\r\n            node.setAttribute(\"id\", hotspot.uniqueId);\r\n            if (textNode.hasAttribute(\"transform\")) { // Vermeidung von Browser Hinweisen, dass 'NULL' als transform gesetzt würde ...\r\n                node.setAttribute(\"transform\", textNode.getAttribute(\"transform\")); //Transformation\r\n            } else if ((textNode.tagName === \"tspan\") && (textNode.parentNode.hasAttribute(\"transform\"))) {\r\n                node.setAttribute(\"transform\", textNode.parentNode.getAttribute(\"transform\")); //Transformation\r\n            }\r\n\r\n            node.setAttribute(\"textBoundingBox\", bBoxRectangle.x1 + \" \" + bBoxRectangle.y1 + \" \" + bBoxRectangle.width + \" \" + bBoxRectangle.height);\r\n\r\n            //im SVG einhängen\r\n            dwImageSVGInsertHotspot(root, textNode, node);\r\n\r\n            //Position der Hotspots (Clickbereich) anpassen\r\n            dwImageSVGTransformHotspot(root, node, hotspot, bBoxRectangle);\r\n\r\n            dwImageWriteToLog(hotspot.elementId, \"inserted svg hotspot (id=\" + hotspot.uniqueId + \" \" +\r\n                                                 \"key=\" + hotspot.key + \" \" +\r\n                                                 \"keyver=\" + hotspot.keyVer + \" \" +\r\n                                                 \"bbox=(x1=\" + hotspot.x1 + \", x2=\" + hotspot.x2 + \", y1=\" + hotspot.y1 + \", y2=\" + hotspot.y2 + \"))\");\r\n        }\r\n    }\r\n}\r\n\r\nfunction dwImageSVGGetBBox(textNode) {\r\n    if (textNode.getBBox) {\r\n        var bBox = textNode.getBBox();\r\n        return new DWRectangle(bBox.x, bBox.y, bBox.x + bBox.width, bBox.y + bBox.height);\r\n    } else {\r\n        var extent = textNode.getExtentOfChar(0);\r\n        var width = textNode.getComputedTextLength();\r\n        return new DWRectangle(extent.x, extent.y, extent.x + width, extent.y + extent.height);\r\n    }\r\n}\r\n\r\nfunction dwImageSVGInsertHotspot(root, textNode, hotspotNode) {\r\n    if ((root) && (textNode) && (textNode.parentNode) && (hotspotNode)) {\r\n        //Zeichenbereich: Hotspot vor Text einhängen\r\n        try {\r\n            var parentNode = textNode.parentNode;\r\n            //Parent ist ein switch und der Text eine Alternative\r\n            if (dwImageSVGNodeIsInSwitch(root, textNode, false)) {\r\n                //Gruppe um Rect und Text erzeugen\r\n                var group = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\r\n                parentNode.insertBefore(group, textNode);\r\n                group.appendChild(hotspotNode);\r\n                group.appendChild(textNode);\r\n            } else {    //Rect vor Text einhängen\r\n                if (textNode.tagName === \"tspan\") {\r\n                    textNode = parentNode;\r\n                    parentNode = parentNode.parentNode;\r\n                }\r\n                parentNode.insertBefore(hotspotNode, textNode);\r\n            }\r\n        } catch (exception) {\r\n        }\r\n    }\r\n}\r\n\r\nfunction dwImageSVGNodeIsInSwitch(root, node, recursively) {\r\n    if ((node) && (node.parentNode) && (node.parentNode.tagName) && (node != root)) {\r\n        var isSwitch = (node.parentNode.tagName.toLowerCase() == \"switch\");\r\n        if (isSwitch) {\r\n            return true;\r\n        } else {\r\n            if (recursively) {\r\n                return dwImageSVGNodeIsInSwitch(root, node.parentNode, recursively);\r\n            } else {\r\n                return false;\r\n            }\r\n        }\r\n    } else {\r\n        return false;\r\n    }\r\n}\r\n\r\n//Matrix aus transform-Attribute in SVGMatrix wandeln (damit Matrizenoperationen ausgeführt werden können)\r\nfunction dwImageSVGCreateMatrixFromString(matrix) {\r\n    var svgMatrix = null;\r\n    if (matrix) {\r\n        try {\r\n            svgMatrix = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\").createSVGMatrix();\r\n            var matrixStr = matrix.substring(matrix.indexOf(\"(\") + 1, matrix.indexOf(\")\"));\r\n            var array = matrixStr.split(\" \");\r\n            svgMatrix.a = array[0];\r\n            svgMatrix.b = array[1];\r\n            svgMatrix.c = array[2];\r\n            svgMatrix.d = array[3];\r\n            svgMatrix.e = array[4];\r\n            svgMatrix.f = array[5];\r\n        } catch (exception) {\r\n        }\r\n    }\r\n    return svgMatrix;\r\n}\r\n\r\nfunction dwImageSVGGetHotspotMatrix(root, node) {\r\n    var matrix = null;\r\n    if ((root) && (node)) {\r\n        try {\r\n            //Im IE 10 liefert getTransformToElement bei einem Switch falsche Werte\r\n            //deshalb hier die Matrix aus dem Transform-Attribut mit der Transformation des Switch-Knotens multiplizieren\r\n            if (dwImageSVGNodeIsInSwitch(root, node, true)) {\r\n                var matrixSVG = dwImageSVGCreateMatrixFromString(node.getAttribute(\"transform\"));\r\n\r\n                //1. Parent = Group, 2. Parent = switch-Knoten und darauf dann das getTransformToElement\r\n                matrix = dwImageSVGTransformToElement(root, node.parentNode.parentNode).inverse();\r\n                matrix = matrix.multiply(matrixSVG);\r\n            } else {\r\n                matrix = dwImageSVGTransformToElement(root, node).inverse();\r\n            }\r\n        } catch (exception) {\r\n            //Nix tun\r\n        }\r\n    }\r\n\r\n    if (!matrix) {\r\n        //Einheitsmatrix\r\n        matrix = dwImageSVGCreateMatrixFromString(\"matrix(1 0 0 1 0 0)\");\r\n    }\r\n    return matrix;\r\n}\r\n\r\nfunction dwImageSVGTransformToElement(fromElement, toElement) {\r\n    if (fromElement && toElement) {\r\n        //Bei Chrome wurde getTransformToElement ab Version 48 ausgebaut\r\n        //Workaround von http://jointjs.com/blog/get-transform-to-element-polyfill.html\r\n        if (fromElement.getTransformToElement) {\r\n            return fromElement.getTransformToElement(toElement);\r\n        } else {\r\n            return toElement.getScreenCTM().inverse().multiply(fromElement.getScreenCTM());\r\n        }\r\n    }\r\n    return null;\r\n}\r\n\r\nfunction getViewbox(root) {\r\n    if ((root) && (root.hasAttribute(\"viewBox\"))) {\r\n        return root.getAttribute(\"viewBox\");\r\n    }\r\n    return null;\r\n}\r\n\r\nfunction dwImageSVGTransformHotspot(root, node, hotspot, bBoxRectangle) {\r\n    if ((root) && (node) && (hotspot) && (bBoxRectangle)) {\r\n        try {\r\n            // see http://stackoverflow.com/questions/10623809/get-bounding-box-of-element-accounting-for-its-transform\r\n            var pts = [\r\n                root.createSVGPoint(), root.createSVGPoint(),\r\n                root.createSVGPoint(), root.createSVGPoint()\r\n            ];\r\n\r\n            pts[0].x = bBoxRectangle.x1;\r\n            pts[0].y = bBoxRectangle.y1;\r\n            pts[1].x = bBoxRectangle.x1 + bBoxRectangle.width;\r\n            pts[1].y = bBoxRectangle.y1;\r\n            pts[2].x = bBoxRectangle.x1 + bBoxRectangle.width;\r\n            pts[2].y = bBoxRectangle.y1 + bBoxRectangle.height;\r\n            pts[3].x = bBoxRectangle.x1;\r\n            pts[3].y = bBoxRectangle.y1 + bBoxRectangle.height;\r\n\r\n            var matrix = dwImageSVGGetHotspotMatrix(root, node);\r\n            dwImageWriteToLog(hotspot.elementId, \"using transformation matrix '\" + matrix + \"' \" +\r\n                                                 \"(id=\" + hotspot.uniqueId + \" key=\" + hotspot.key + \" keyver=\" + hotspot.keyVer + \")\");\r\n\r\n            // Transformation unter Berücksichtigung der Transformations-Matrix (min/max)\r\n            var xMin = Infinity;\r\n            var xMax = -Infinity;\r\n            var yMin = Infinity;\r\n            var yMax = -Infinity;\r\n            pts.forEach(function(pt) {\r\n                pt = pt.matrixTransform(matrix);\r\n                xMin = Math.min(xMin, pt.x);\r\n                xMax = Math.max(xMax, pt.x);\r\n                yMin = Math.min(yMin, pt.y);\r\n                yMax = Math.max(yMax, pt.y);\r\n            });\r\n\r\n            // Bounding Box relativ zum Root bestimmen\r\n            var newBoundingBox = {\r\n                x: xMin,\r\n                y: yMin,\r\n                width: xMax - xMin,\r\n                height: yMax - yMin\r\n            };\r\n            //Viewbox berücksichtigen (x,y)\r\n            var viewBox = getViewbox(root);\r\n            if (viewBox) {\r\n                var vbArray = dwUtilsSplit(dwUtilsReplaceCharacter(viewBox, ' ', ','), ',', false);\r\n                if (vbArray.length == 4) {\r\n                    newBoundingBox.x -= parseFloat(dwUtilsTrim(vbArray[0])); //x-Verschiebung\r\n                    newBoundingBox.y -= parseFloat(dwUtilsTrim(vbArray[1])); //y-Verschiebung\r\n                }\r\n            }\r\n            //Position im Hotspot anpassen\r\n            hotspot.x1 = newBoundingBox.x;\r\n            hotspot.x2 = newBoundingBox.x + newBoundingBox.width;\r\n            hotspot.y1 = newBoundingBox.y;\r\n            hotspot.y2 = newBoundingBox.y + newBoundingBox.height;\r\n            hotspot.width = parseFloat(newBoundingBox.width);\r\n            hotspot.height = parseFloat(newBoundingBox.height);\r\n        } catch (exception) {\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * Bestimmung der Hotspot Informationen.\r\n *\r\n * Die Koordinaten des (Mouse-)Events werden aus dem absoluten Koordinaten System (relativ zu Viewport) umgewandelt\r\n * in interne Koordinaten, relativ zum SVG Objekt.\r\n *\r\n * Im Anschluss wird ein HIT Test ausgeführt. Bei mehreren Treffern wird optimiert, und das \"Original\" Objekt verwendet\r\n * sofern die Maus direkt über einer Linie war.\r\n *\r\n * Die gefundene Hotspot Information wird als Hashmap zurückgeliefert {hotspot : <hotspot>, node : <node>}\r\n *\r\n * @param event\r\n * @param elementId\r\n * @param ignoreSimpleHotspots\r\n * @returns {*}\r\n */\r\nfunction dwImageSVGGetBestSuitableHotspotForMouseLocation(event, elementId, ignoreSimpleHotspots) {\r\n    var image = dwImageViewerGetImage(elementId);\r\n    if (!image) {\r\n        return;\r\n    }\r\n\r\n    if (ignoreSimpleHotspots !== true) {\r\n        var matchSimpleHotspot = dwImageSVGGetSimpleHotspotAtPoint(image, event.clientX, event.clientY);\r\n        if (matchSimpleHotspot) {\r\n            return matchSimpleHotspot;\r\n        }\r\n    }\r\n\r\n    var imageLocation = dwUtilsGetLocationOnWindow(image, true, true);\r\n    var relativePositionToImage = new DWPoint(event.clientX - imageLocation.x, event.clientY - imageLocation.y);\r\n\r\n    var intersectionList = dwImageSVGGetIntersectionListForCoord(image, relativePositionToImage.x, relativePositionToImage.y);\r\n\r\n    var result = null;\r\n\r\n    for (var i = 0; i < intersectionList.length; i++) {\r\n        var match = dwImageSVGGetHotspotForOutlineNode(image, intersectionList[i]);\r\n        if (match) {\r\n            var nodeId = match.node.getAttribute(\"id\");\r\n            if (!result) {\r\n                // Bei einem Klon ist das Interesse am zugehörigen realen Knoten ...\r\n                var isClone = nodeId.indexOf(\"_clone\") > -1;\r\n                if (isClone) {\r\n                    var originalNodeName = nodeId.substring(0, nodeId.indexOf(\"_clone\"));\r\n                    match.node = image.contentDocument.getElementById(originalNodeName);\r\n                }\r\n                result = match;\r\n            } else {\r\n                var isClone = nodeId.indexOf(\"_clone\") > -1;\r\n                if (!isClone) {\r\n                    result = match;\r\n                }\r\n            }\r\n            if (result) {\r\n                break;\r\n            }\r\n        }\r\n    }\r\n    return result;\r\n}\r\n\r\nfunction dwImageSVGImageScrollpaneOnDoubleClickListener(event, elementId) {\r\n    var image = dwImageViewerGetImage(elementId);\r\n    if (!image) {\r\n        return;\r\n    }\r\n\r\n    var match = dwImageSVGGetBestSuitableHotspotForMouseLocation(event, elementId, false);\r\n    if (!match) {\r\n        return;\r\n    }\r\n\r\n    if (!match.isOutlineElement) {\r\n        // Der Listener ist nur für die Outlineelemente, die normalen Hotspots haben eigene Eventlistener\r\n        return;\r\n    }\r\n\r\n    var hotspotSpanClickArea = $(match.hotspot.uniqueId);\r\n    if (hotspotSpanClickArea && hotspotSpanClickArea.ondblclick) {\r\n        hotspotSpanClickArea.ondblclick(event);\r\n    }\r\n}\r\n\r\nfunction dwImageSVGImageScrollpaneOnClickListener(event, elementId) {\r\n    var image = dwImageViewerGetImage(elementId);\r\n    if (!image) {\r\n        return;\r\n    }\r\n\r\n    var match = dwImageSVGGetBestSuitableHotspotForMouseLocation(event, elementId, false);\r\n    if (!match) {\r\n        return;\r\n    }\r\n\r\n    if (!match.isOutlineElement) {\r\n        // Der Listener ist nur für die Outlineelemente, die normalen Hotspots haben eigene Eventlistener\r\n        return;\r\n    }\r\n\r\n    var hotspotSpanClickArea = $(match.hotspot.uniqueId);\r\n    if (hotspotSpanClickArea.onclick) {\r\n        hotspotSpanClickArea.onclick(event);\r\n    } else if (hotspotSpanClickArea.onmousedown) {\r\n        hotspotSpanClickArea.onmousedown(event);\r\n    }\r\n}\r\n\r\nfunction dwImageSVGImageScrollPaneOnMouseMoveListener(event, elementId) {\r\n    var image = dwImageViewerGetImage(elementId);\r\n    if (!image) {\r\n        return;\r\n    }\r\n\r\n    event = dwFrameworkGetEvent(event);\r\n\r\n    var lastOutlineMatch = image.lastOutlineMatch;\r\n    // Ignoriere die 'einfachen' Hotspots bei der Suche, da es nur um das Einfärben der outline-Elemente beim Hover geht.\r\n    // Falls ein 'einfacher' Hotspot über den Bereichen wäre, dann würde das Element nicht mehr eingefärbt\r\n    var match = dwImageSVGGetBestSuitableHotspotForMouseLocation(event, elementId, true);\r\n\r\n    if ((lastOutlineMatch == null) && (match == null)) {\r\n        return;\r\n    } else if ((lastOutlineMatch != null) && (match != null)) {\r\n        if ((lastOutlineMatch.hotspot.key == match.hotspot.key) &&\r\n            (lastOutlineMatch.node == match.node)) {\r\n            return;\r\n        }\r\n    }\r\n    if (lastOutlineMatch && lastOutlineMatch.hotspot.isWithHover) {\r\n        dwUtilsGetEventTarget(event).style.cursor = image.getAttribute(\"dwOpenCursor\");\r\n        dwImageSVGPaintHotspotOutline(lastOutlineMatch.hotspot, lastOutlineMatch.node, false);\r\n        dwTooltip_hideTooltips();\r\n    }\r\n\r\n    if (match && match.hotspot.isWithHover) {\r\n        dwUtilsGetEventTarget(event).style.cursor = \"pointer\";\r\n        dwImageSVGPaintHotspotOutline(match.hotspot, match.node, true);\r\n        dwTooltip_delayShowTooltip(event, match.hotspot.text, DWTOOLTIP_DELAY_DEFAULT_VALUE);\r\n    }\r\n    image.lastOutlineMatch = match;\r\n}\r\n\r\n/**\r\n * Liefert eine Liste mit SVGElementen zurück, die sich mit den Koordinaten überlappen\r\n * @param image\r\n * @param x\r\n * @param y\r\n * @returns {Array}\r\n */\r\nfunction dwImageSVGGetIntersectionListForCoord(image, x, y) {\r\n    var svgDocument = image.contentDocument;\r\n    if (!svgDocument) {\r\n        return [];\r\n    }\r\n    var root = svgDocument.documentElement;\r\n    if (!root) {\r\n        return [];\r\n    }\r\n\r\n    if (!image.hasHoverOrOutline) {\r\n        // Flag wird gesetzt, wenn es mind. 1 Hotspot gibt, bei dem das Flag gesetzt ist (DWK Konfiguration für hotspots)\r\n        // Nur dann muss (wegen Solidworks Mechanik) der vertikale Schnitt im SVG untersucht werden ob es Überschneidungen\r\n        // mit einem Hotspot gibt (highlight der hotspot Fläche bei mouse over)\r\n        return [];\r\n    }\r\n\r\n    var intersectionList = [];\r\n    if (svgDocument.elementsFromPoint) { // FF und Chrome\r\n        // Firefox ignoriert seit über 8 Jahren den SVG Standard, der die Methode getIntersectionList vorgibt\r\n        // Chrome kann zwar getIntersectionList - allerdings wird hier die BoundingBox (großes Rechteck) als Fläche zugrunde gelegt -> fehlerhafte Ermittlung\r\n        // IE unterstützt die getIntersectionList Methode korrekt\r\n        intersectionList = svgDocument.elementsFromPoint(x, y);\r\n    } else if (root.getIntersectionList) {\r\n        var intersectionRect = root.createSVGRect();\r\n        intersectionRect.x = x;\r\n        intersectionRect.y = y;\r\n        intersectionRect.width = intersectionRect.height = 1;\r\n        intersectionList = root.getIntersectionList(intersectionRect, null);\r\n    } else {\r\n        // Nachteil dieser Methode: es wird nur eine Fläche zurückgeliefert. Es kann auch eine ungünstige/falsche sein.\r\n        var intersectionElement = svgDocument.elementFromPoint(x, y);\r\n        if (intersectionElement) {\r\n            intersectionList.push(intersectionElement);\r\n        }\r\n    }\r\n    return intersectionList;\r\n}\r\n\r\n\r\n/**\r\n * Ermittelt, ob es an der Position eine einfache clickAerea für einen Hotspot gibt und liefert eine Struktur mit Hotspot,\r\n * dem node zurück.\r\n * @param image\r\n * @param x\r\n * @param y\r\n * @returns {{node: Element, hotspot: *, isOutlineElement: boolean}}\r\n */\r\nfunction dwImageSVGGetSimpleHotspotAtPoint(image, x, y) {\r\n    var element = document.elementFromPoint(x, y);\r\n\r\n    var hotspot = dwImageSVGGetHotspotByElement(image, element);\r\n\r\n    if (hotspot) {\r\n        return {\r\n            node: element,\r\n            hotspot: hotspot,\r\n            isOutlineElement: false\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * Liefert den Hotspot zu dieser ClickAerea zurück.\r\n * @param image\r\n * @param element\r\n * @returns {*}\r\n */\r\nfunction dwImageSVGGetHotspotByElement(image, element) {\r\n    if (element) {\r\n        if (image) {\r\n            for (var i = 0; i < image.hotspots.length; i++) {\r\n                var hotspot = image.hotspots[i];\r\n                if (element.id === hotspot.uniqueId) {\r\n                    return hotspot;\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * Liefert nur die Hotspot-ID ohne einen evtl. Suffix zurück (z.B. {@code filter_1234_ajsdhfkasjhdf => 1234}).\r\n *\r\n * @param nodeId\r\n * @returns Hotspot-ID ohne einen evtl. Suffix\r\n */\r\nfunction getHotspotIdWithoutSuffix(nodeId) {\r\n    let hotspotIdStrings = nodeId.split(\"_\");\r\n    if (hotspotIdStrings.length >= 2) {\r\n        return hotspotIdStrings[1];\r\n    } else {\r\n        return \"\";\r\n    }\r\n}\r\n\r\n/**\r\n * Liefert die Hotspot-ID inkl. einen evtl. Suffix zurück (z.B. {@code filter_1234_ajsdhfkasjhdf => 1234_ajsdhfkasjhdf}).\r\n *\r\n * @param nodeId\r\n * @returns Hotspot-ID inkl. einen evtl. Suffix\r\n */\r\nfunction getHostpotIdIncludingSuffix(nodeId) {\r\n    let hotspotIdSuffixIndex = nodeId.indexOf(\"_\");\r\n    if ((hotspotIdSuffixIndex >= 0) && (hotspotIdSuffixIndex < nodeId.length - 1)) {\r\n        return nodeId.substring(hotspotIdSuffixIndex + 1);\r\n    } else {\r\n        return \"\";\r\n    }\r\n}\r\n\r\n/**\r\n * Liefert die Hotspot Information (matching zwischen hotspot.key und node.class) zurück\r\n * @param image\r\n * @param node\r\n * @returns {{node: *, hotspot: *}}\r\n */\r\nfunction dwImageSVGGetHotspotForOutlineNode(image, node) {\r\n    let isASPLMversion2OrHigher = dwImageSVGIsASPLMOutlineVersionOrHigher(node.ownerDocument, 2);\r\n    while (node && node.tagName) {\r\n        if ((node.tagName === \"g\") && node.className.baseVal) {\r\n            if (isASPLMversion2OrHigher) {\r\n                return null;\r\n            }\r\n            var classNames = dwUtilsSplit(node.className.baseVal, \" \", false);\r\n            for (var i = 0; i < image.hotspots.length; i++) {\r\n                var hotspot = image.hotspots[i];\r\n                if (dwUtilsIsInArray(classNames, hotspot.key)) {\r\n                    return {\r\n                        node: node,\r\n                        hotspot: hotspot,\r\n                        isOutlineElement: true\r\n                    }\r\n                }\r\n            }\r\n        } else if (node.tagName === \"text\") {\r\n            if (dwImageSVGIsWithOutlinesByASPLM(node.ownerDocument)) {\r\n                // Spezielle Logik für Hotspots / Outlines aus dem ASPLM Umfeld\r\n                // Anhand des Text-Knotens wird der zugehörige \"hotspot_\" Knoten gesucht in dem die Outline Informationen\r\n                // zusammengefasst sind. Berücksichtigt werden muss, dass nur der Prefix fest ist, der Suffix bei den IDs ist variabel\r\n                let text = dwDomGetTextContent(node, [\"desc\", \"metadata\", \"title\"]).trim();\r\n                const hotspot = getHotspotForOutlineNodeById(text);\r\n                if (hotspot) {\r\n                    return hotspot;\r\n                }\r\n            }\r\n        } else if ((node.tagName === \"path\") || (node.tagName === \"rect\")) {\r\n            if (dwImageSVGIsWithOutlinesByASPLM(node.ownerDocument)) {\r\n                let hotspotId = getHotspotIdWithoutSuffix(node.id);\r\n                const hotspot = getHotspotForOutlineNodeById(hotspotId);\r\n                if (hotspot) {\r\n                    return hotspot;\r\n                }\r\n            }\r\n        }\r\n\r\n        function getHotspotForOutlineNodeById(hotspotId) {\r\n            for (let i = 0; i < image.hotspots.length; i++) {\r\n                let hotspot = image.hotspots[i];\r\n                if (hotspotId === hotspot.key) {\r\n                    let hotspotIdWithSuffix = getHostpotIdIncludingSuffix(node.id); // ID inkl. Suffix des Hotspots, z.B. 280 oder 280_1_\r\n                    let outlineNode = node.ownerDocument.getElementById(\"hotspot_\" + hotspotIdWithSuffix);\r\n                    if (!outlineNode) {\r\n                        // Standardmäßig sollte immer ein passendes image mit identischer ID zu einem Text Node existieren\r\n                        // Sicherheitshalber machen wir einen Fallback - der aber nie großartig zuschlagen sollte\r\n                        // Beim Highlight spielt die genaue ID nur eine nebensächliche Rolle - es werden alle Outlines\r\n                        // zu einem Basis Hotspot Key (zb 280 und damit 280, 280_ 280_1 280_1_ 280_2, ... usw ) angezeigt\r\n                        outlineNode = dwImageSVGFindMatchingNodesForPartialId(node.ownerDocument, \"hotspot_\" + hotspot.key).getFirst();\r\n                    }\r\n                    if (outlineNode) {\r\n                        return {\r\n                            node: outlineNode,\r\n                            hotspot: hotspot,\r\n                            isOutlineElement: true\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n            return null;\r\n        }\r\n\r\n        node = node.parentNode;\r\n    }\r\n}\r\n\r\nfunction dwImageSVGRemoveAllHotspots(elementId) {\r\n    let image = dwImageViewerGetImage(elementId);\r\n    if (image == null) { // kann durch die Verwendung von setTimeout() passieren\r\n        return;\r\n    }\r\n\r\n    let svgDoc = image.contentDocument;\r\n    if ((svgDoc) && (svgDoc.documentElement) && (svgDoc.documentElement.getElementById)) {\r\n        let existingHotspots = image.hotspots;\r\n        for (let i = 0; i < existingHotspots.length; i++) {\r\n            var node = svgDoc.documentElement.getElementById(existingHotspots[i].uniqueId);\r\n            if (node != null) {\r\n                dwDomRemoveSelf(node);\r\n            }\r\n        }\r\n    }\r\n\r\n    dwImageViewerRemoveAllHotspots(elementId);\r\n\r\n    // Flag \"isAlreadyHotspot\" in den Text-Elementen zurücksetzen\r\n    if (image.contentDocument) {\r\n        let textNodes = image.contentDocument.getElementsByTagName(\"text\");\r\n        let tspanNodes = image.contentDocument.getElementsByTagName(\"tspan\");\r\n        let textElements = [];\r\n        textElements = textElements.concat(dwUtilsToArray(textNodes));\r\n        textElements = textElements.concat(dwUtilsToArray(tspanNodes));\r\n        if ((textElements) && (textElements.length > 0)) {\r\n            for (let i = 0; i < textElements.length; i++) {\r\n                let textNode = textElements[i];\r\n                textNode.removeAttribute(\"isAlreadyHotspot\");\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\nfunction dwImageSVGMakeHotspots(image) {\r\n    if (image) {\r\n        var svgDoc = image.contentDocument;\r\n        if ((svgDoc) && (svgDoc.documentElement)) {\r\n            dwImageWriteToLog(image.elementId, \"Preparing Hotspot Creation: found documentElement\");\r\n            var root = svgDoc.documentElement;\r\n            var isBrowserEdge = (framework_isIE && (parseFloat(framework_browserVersion) > 11.0));\r\n            var isOutlinesByASPLM = root.getAttribute(\"svg_outline_generator\") === \"asplm\";\r\n            try {\r\n                // Alle Textelemente im SVG\r\n                // Ein TEXT Element kann kein / ein / beliebig viele TSPAN Elementen beinhalten\r\n                // Beinhaltet ein TEXT Element genau ein TSPAN Element (mit dem vollständigen Text)\r\n                // so wird das Hotspot matching für diesen Text aktuell mehrfach durchlaufen\r\n                var textNodes = image.contentDocument.getElementsByTagName(\"text\");\r\n                var tspanNodes = image.contentDocument.getElementsByTagName(\"tspan\");\r\n                var textElements = [];\r\n                textElements = textElements.concat(dwUtilsToArray(textNodes));\r\n                textElements = textElements.concat(dwUtilsToArray(tspanNodes));\r\n                if ((textElements) && (textElements.length > 0)) {\r\n                    dwImageWriteToLog(image.elementId, \"Preparing Hotspot Creation: found text elements (count=\" + textElements.length + \" - text=\" + textNodes.length + \" - tspan=\" + tspanNodes.length + \")\");\r\n                    //image.log(\"dwImageSVGMakeHotspots - Texts found\");\r\n                    var isSpacePreserve = false;\r\n                    if ((framework_isFirefox) && (root.hasAttribute(\"xml:space\")) && (root.getAttribute(\"xml:space\") == \"preserve\")) {\r\n                        //Verhalten im Firefox: wenn Attribut 'xml:space=\"preserve\"' gesetzt ist, liefert getBBox() auf den Textnodes falsche Werte (width zu groß)\r\n                        //Workaround: xml:space auf default setzen und nach der Berechnung der Hotspots wieder zurück auf preserve\r\n                        isSpacePreserve = true;\r\n                        root.setAttribute(\"xml:space\", \"default\");\r\n                    }\r\n\r\n                    var hotspot = null;\r\n                    //alle Hotspots durchlaufen und nach entsprechenden Textelementen im SVG suchen\r\n                    dwImageWriteToLog(image.elementId, \"Preparing Hotspot Creation: found hotspots (count=\" + image.hotspots.length + \")\");\r\n                    for (var i = 0; i < image.hotspots.length; i++) {\r\n                        hotspot = image.hotspots[i];\r\n                        if (hotspot != null) {\r\n                            //image.log(\"found hotspot \" + i + \"(key=\" + hotspot.key + \")\");\r\n                            var textHotSpot = hotspot.key;\r\n                            if (textHotSpot != \"\") {\r\n                                //image.log(\"found \" + textElements.length + \" textfragments\");\r\n                                for (var j = 0; j < textElements.length; j++) {\r\n                                    var textNode = textElements[j];\r\n                                    //Hotspot gefunden (Text stimmt überein und ist noch kein Hotspot)\r\n                                    if (dwImageIsHotspotNode(svgDoc, textNode, hotspot)) {\r\n                                        if (textNode.hasAttribute(\"isAlreadyHotspot\")) {\r\n                                            continue;\r\n                                        }\r\n\r\n                                        //Hotspot erzeugen\r\n                                        dwImageSVGCreateHotspot(root, textNode, hotspot, image.unmarkedHotspotsVisible);\r\n                                        //dieses Textnode als \"schon verarbeitet\" kennzeichnen\r\n                                        textNode.setAttribute(\"isAlreadyHotspot\", \"1\");\r\n\r\n                                        if (dwImageSVGIsWithHoverOrOutline(hotspot)) {\r\n                                            image.hasHoverOrOutline = true;\r\n                                            // Lattice Webmaster Konturen\r\n                                            // Ein übergeordnetes SVG Element ist ein Anchor Tag. Das Parent Element des Anchors wird\r\n                                            // mit einem classname analog zum IsoDraw Mechanismus (classname = hotspot.key) geflagt\r\n                                            var node = textNode;\r\n                                            while ((node != null) && (node.tagName != \"svg\")) {\r\n                                                if ((node.tagName == \"a\") && node.hasAttribute(\"xlink:href\")) {\r\n                                                    node = node.parentNode; // übergeordnete Group auswählen\r\n                                                    node.setAttribute(\"class\", hotspot.key);\r\n                                                    break;\r\n                                                }\r\n                                                node = node.parentNode;\r\n                                            }\r\n\r\n                                            if (node.className.baseVal != hotspot.key) {\r\n                                                var isoDraw73Hotspots = (svgDoc.getElementsByClassName(\"hotspot_\" + hotspot.key));\r\n                                                if (isoDraw73Hotspots && isoDraw73Hotspots.length) {\r\n                                                    for (var isoDrawHotspotIdx = 0; isoDrawHotspotIdx < isoDraw73Hotspots.length; isoDrawHotspotIdx++) {\r\n                                                        var isoDrawHotspot = isoDraw73Hotspots[isoDrawHotspotIdx];\r\n                                                        var classNames = isoDrawHotspot.getAttribute(\"class\") || \"\";\r\n                                                        if (classNames) {\r\n                                                            classNames += \" \";\r\n                                                        }\r\n                                                        classNames += hotspot.key;\r\n                                                        isoDrawHotspot.setAttribute(\"class\", classNames);\r\n                                                    }\r\n                                                } else if (isOutlinesByASPLM) {\r\n                                                    let parentNode = textNode.parentNode;\r\n                                                    let outlineNode = null;\r\n                                                    while ((parentNode != null) && (parentNode.tagName.toLowerCase() !== \"svg\")) {\r\n                                                        let parentNodeId = parentNode.getAttribute(\"id\");\r\n                                                        if (!dwUtilsStringStartsWith(parentNodeId, \"hotspot_\", false)) {\r\n                                                            // Offen ist, ob die while-Schleife notwendig ist,\r\n                                                            // aber das Navigieren zum potentiellen Root erlaubt eine höhere Flexibilität der Datenstrukturen.\r\n                                                            // Vorkommen kann diese Struktur zb. bei <symbol><text> Kombinationen (zb Motorcode_Benzin).\r\n                                                            parentNode = parentNode.parentNode;\r\n                                                            continue;\r\n                                                        }\r\n                                                        outlineNode = parentNode;\r\n                                                        let hotspotIdWithSuffix = getHostpotIdIncludingSuffix(parentNodeId); // ID inkl. Suffix des Hotspots, z.B. 280 oder 280_1_\r\n                                                        let hotspotId = getHotspotIdWithoutSuffix(parentNodeId);\r\n                                                        let outlinePathId = \"path_\" + hotspotId;\r\n                                                        let outlinePaths = dwImageSVGFindMatchingNodesForPartialId(svgDoc, outlinePathId).getNodes();\r\n                                                        if (outlinePaths.length === 0) {\r\n                                                            let outlinePath = dwImageSVGCreateOutlinePathRectForASPLM(svgDoc, outlineNode, \"path_\" + hotspotIdWithSuffix)\r\n                                                            outlinePaths.push(outlinePath);\r\n                                                        }\r\n                                                        outlinePaths.forEach(node => node.setAttribute(\"pointer-events\", \"visibleFill\"));\r\n                                                        // Class Mechanismus wird für die Erkennung der Outlines verwendet\r\n                                                        // Bei Mouse-Move Effekten werden Elemente mit class=hotspot.key ermittelt und\r\n                                                        // die Outline visualisiert\r\n                                                        outlineNode.setAttribute(\"class\", hotspot.key)\r\n                                                        break;\r\n                                                    }\r\n                                                } else {\r\n                                                    // Solidworks Composer Konturen\r\n                                                    // In Abhängigkeit des SVG Formats (z.B. Solidworks Composer Quellformat) steht die zum Text-Hotspot\r\n                                                    // zugehörige Kontur/Fläche in keinem logischen Zusammenhang.\r\n                                                    // Bei der Überprüfung der überlappenden SVG Elemente wird nach Eigenschaften gesucht,\r\n                                                    // die auf eine Kontur/Fläche schließen lassen und so künstlich die logische Verknüpfung zum\r\n                                                    // Stücklisten-Hotspot hergestellt\r\n\r\n                                                    var intersectingNodes = null;\r\n                                                    //Problem im Edge Browser: getBoundingClientRect liefert keine verwertbaren Koordinaten, deshalb stattdessen getBBox verwenden\r\n                                                    if (isBrowserEdge) {\r\n                                                        var textBounds = textNode.getBBox();\r\n                                                        intersectingNodes = dwImageSVGGetIntersectionListForCoord(image, textBounds.x + textBounds.width / 2, textBounds.y + textBounds.height / 2);\r\n                                                    } else {\r\n                                                        var textBounds = textNode.getBoundingClientRect();\r\n                                                        intersectingNodes = dwImageSVGGetIntersectionListForCoord(image, textBounds.left + textBounds.width / 2, textBounds.top + textBounds.height / 2);\r\n                                                    }\r\n\r\n                                                    for (var intersectingNodeIdx = 0; intersectingNodeIdx < intersectingNodes.length; intersectingNodeIdx++) {\r\n                                                        var intersectedNode = intersectingNodes[intersectingNodeIdx];\r\n                                                        var outlineNode = intersectedNode;\r\n                                                        while (outlineNode != null) {\r\n                                                            // In der Pfad Struktur kann (aber muss nicht) ein Anchor Tag auftauchen\r\n                                                            // Indikator ist aber idR die group mit der ID \"hotspot.<zahl>\", auf die das Class Attribut gesetzt werden muss\r\n                                                            // Die Parent Struktur wird komplett durchlaufen auf der Suche nach einem passenden Element\r\n                                                            if (outlineNode.id && dwUtilsStringStartsWith(outlineNode.id, \"hotspot.\", true)) {\r\n                                                                outlineNode.setAttribute(\"class\", hotspot.key);\r\n                                                                outlineNode.style.transition = \"opacity ease 0.2s\";\r\n                                                                intersectingNodeIdx = intersectingNodes.length;\r\n                                                                break;\r\n                                                            }\r\n                                                            outlineNode = outlineNode.parentNode;\r\n                                                        }\r\n                                                    }\r\n                                                }\r\n                                            }\r\n                                        }\r\n                                        //Schleife beenden, damit Hotspot-Koordinaten nicht vom nächsten Textvorkommen wieder überschrieben werden\r\n                                        break;\r\n                                    }\r\n                                }\r\n\r\n                                if (dwImageSVGIsWithHoverOrOutline(hotspot)) {\r\n                                    if (!dwImageSVGIsWithOutlinesByASPLM(svgDoc)) {\r\n                                        // Für die Visualisierung wird idR eine Kopie der Outline erzeugt\r\n                                        // und bei Highlight die Linien-Dicke/Farbe beeinflusst (ohne das Original zu verändern)\r\n                                        // Bei Daten aus ASPLM ist dieser Ansatz unnötig - das SVG wird nicht unnötig \"aufgebläht\"\r\n                                        dwImageSVGPCreateHotspotOutlineClone(hotspot);\r\n                                    }\r\n                                    dwImageSVGPaintHotspotOutlineForKey(hotspot, false);\r\n                                }\r\n                            }\r\n                        }\r\n                    }\r\n                    if (dwImageSVGIsWithRerenderUnlinkedImageHotspots(root)) {\r\n                        let unlinkedTextElements = [];\r\n                        let linkedTextElementsWithoutHover = []\r\n                        // Schleife muss erneut durchlaufen werden, diesmal erst Text dann Hotspot - damit leichter Textelemente ohne Verlinkung identifiziert werden können\r\n                        for (let i = 0; i < textElements.length; i++) {\r\n                            let textNode = textElements[i];\r\n                            if (textNode.hasAttribute(\"isAlreadyHotspot\")) {\r\n                                // Es kann Hotspots geben die keine Outline haben\r\n                                let text = dwDomGetTextContent(textNode, [\"desc\", \"metadata\", \"title\"]).trim();\r\n                                for (let j = 0; j < image.hotspots.length; j++) {\r\n                                    let hotspot = image.hotspots[j];\r\n                                    if (hotspot.key === text && !dwImageSVGIsWithHoverOrOutline(hotspot)) {\r\n                                        linkedTextElementsWithoutHover.push(textNode);\r\n                                        break;\r\n                                    }\r\n                                }\r\n                                continue;\r\n                            }\r\n                            unlinkedTextElements.push(textNode);\r\n                        }\r\n                        dwImageSVGRenderUnlinkedImageHotspots(svgDoc, unlinkedTextElements);\r\n                        dwImageSVGRenderUnhoverableImageHotspots(svgDoc, linkedTextElementsWithoutHover);\r\n                    }\r\n\r\n                    if (isSpacePreserve) {\r\n                        //nach dem Laden der Hotspots Attribut wieder auf xml:space=preserve zurücksetzen\r\n                        root.setAttribute(\"xml:space\", \"preserve\");\r\n                    }\r\n\r\n                    //Nochmal laden, damit die geänderten Hotspotpositionen auch angezeigt werden\r\n                    dwImageViewerSetNormalizedZoom_immediately(image, true);\r\n                }\r\n            } catch (exception) {\r\n                dwImageWriteToLog(image.elementId, \"Error while making hotspots: \" + exception.toString());\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\n// Prüft auf Schriftgröße, -art und -gewichtung. Ist ein Wert nicht angegeben, gilt dies als gültig\r\nfunction isValidFont(textNode, hotspot) {\r\n    if ((textNode == null) || (hotspot == null)) {\r\n        dwImageWriteToLog(image.elementId, \"Font check failed. TextNode = \" + textNode + \", hotspot = \" + hotspot);\r\n        return false;\r\n    }\r\n\r\n    try {\r\n        if (!isValidFontSize(textNode, hotspot) || (!isValidFontName(textNode, hotspot) || (!isValidFontWeight(textNode, hotspot)))) {\r\n            return false;\r\n        }\r\n    } catch (exception) {\r\n        dwImageWriteToLog(image.elementId, \"Error on comparing font size, name or weight\");\r\n        return false;\r\n    }\r\n    return true;\r\n}\r\n\r\nfunction isValidFontSize(textNode, hotspot) {\r\n    // Fehlt die font-Size Angabe, ist der Hotspot auf jeden Fall gültig\r\n    if (hotspot.fontSize.length === 0) {\r\n        return true;\r\n    }\r\n\r\n    // beide Werte auf 2 Stellen runden, weil window.getComputedStyle(node).fontSize zwar auch in der Workbench\r\n    // zur Bestimmung der Schriftgröße verwendet wird, aber anscheinend (browserabhängig?)\r\n    // unterschiedliche Werte liefert (Bsp.: in der DB steht fontsize 3.53, wir berechnen hier 3.528px)\r\n    const fontSizeNode = ((Math.round(parseFloat(dwUtilsGetStyle(textNode, \"font-size\")) * 100)) / 100);\r\n    const fontSizeHotspot = ((Math.round(parseFloat(hotspot.fontSize) * 100)) / 100);\r\n    return checkWithTolerance(fontSizeNode, fontSizeHotspot, 0.03);\r\n}\r\n\r\n// Werte mit Toleranz vergleichen\r\nfunction checkWithTolerance(valueToBeChecked, valueTarget, tolerance) {\r\n    // Alles Zahlen?\r\n    if (!parseFloat(valueToBeChecked) || !parseFloat(valueTarget) || !parseFloat(tolerance)) {\r\n        return false;\r\n    }\r\n    // Liegt der Wert im Toleranzbereich?\r\n    const toleranceMin = ((Math.round(parseFloat(valueTarget - tolerance) * 100)) / 100);\r\n    const toleranceMax = ((Math.round(parseFloat(valueTarget + tolerance) * 100)) / 100);\r\n    return ((valueToBeChecked >= toleranceMin) && (valueToBeChecked <= toleranceMax));\r\n}\r\n\r\nfunction isValidFontName(textNode, hotspot) {\r\n    // Fehlt die Schriftart Angabe, ist der Hotspot auf jeden Fall gültig\r\n    if (hotspot.fontName.length === 0) {\r\n        return true;\r\n    }\r\n    const fontNameNode = dwUtilsGetStyle(textNode, \"font-family\");\r\n    return (hotspot.fontName === fontNameNode);\r\n}\r\n\r\nfunction isValidFontWeight(textNode, hotspot) {\r\n    // Fehlt die Gewichtung, ist der Hotspot auf jeden Fall gültig\r\n    if (hotspot.fontWeight.length === 0) {\r\n        return true;\r\n    }\r\n    const fontWeightNode = dwUtilsGetStyle(textNode, \"font-weight\");\r\n    return (hotspot.fontWeight === fontWeightNode);\r\n}\r\n\r\n\r\n//neuen Knoten ins SVG einhängen (vor altem Knoten) und alten Knoten entfernen\r\nfunction dwImageSVGReplaceNode(oldNode, newNode, attributesToCopy) {\r\n    if ((oldNode) && (oldNode.parentNode) && (newNode)) {\r\n        if (attributesToCopy instanceof Array) {\r\n            for (var i = 0; i < attributesToCopy.length; i++) {\r\n                var attributeName = attributesToCopy[i];\r\n                //framework_logger.log(\"copying svg attribute '\" + attributeName + \"' = '\" + oldNode.getAttribute(attributeName) + \"'\");\r\n                newNode.setAttribute(attributeName, oldNode.getAttribute(attributeName));\r\n            }\r\n        }\r\n        var parentNode = oldNode.parentNode;\r\n        parentNode.replaceChild(newNode, oldNode);\r\n    }\r\n}\r\n\r\nfunction dwImageSVGPaintHotspot(hotspot) {\r\n    if (hotspot) {\r\n        var image = dwImageViewerGetImage(hotspot.elementId);\r\n        if (image) {\r\n            var svgDoc = image.contentDocument;\r\n            if ((svgDoc) && (svgDoc.documentElement) && (svgDoc.documentElement.getElementById)) {\r\n                // Repaint des Knotens (z.B. nach Selektion). Der Knoten muss vorher bereits erzeugt worden sein.\r\n                var node = svgDoc.documentElement.getElementById(hotspot.uniqueId);\r\n                if (!node) {\r\n                    return;\r\n                }\r\n                // Vorhandene Bounding Box auslesen und für den repaint verwenden\r\n                var boundingBoxArray = node.getAttribute(\"textBoundingBox\").split(\" \");\r\n                var bBoxRectangle = new DWRectangle(parseFloat(boundingBoxArray[0]), parseFloat(boundingBoxArray[1]), parseFloat(boundingBoxArray[0]) + parseFloat(boundingBoxArray[2]), parseFloat(boundingBoxArray[1]) + parseFloat(boundingBoxArray[3]));\r\n                //Hotspots zeichnen (Rechteck, Ellipse...)\r\n                dwImageSVGPaintHotspotNode(hotspot, node, bBoxRectangle, image.unmarkedHotspotsVisible);\r\n\r\n                if (dwImageSVGIsWithHoverOrOutline(hotspot)) {\r\n                    dwImageSVGPaintHotspotOutlineForKey(hotspot, false);\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\nfunction dwImageSVGCreateNewNodeIfRequired(oldNode, nodeType) {\r\n    var node = null;\r\n    if (!oldNode) {\r\n        // Knoten gibts noch nicht - neu erzeugen\r\n        node = document.createElementNS(\"http://www.w3.org/2000/svg\", nodeType);\r\n    } else if (!dwImageElementIsTag(oldNode, nodeType)) {\r\n        // Knoten gibt es schon, ist aber ein anderer Typ, deshalb neu erzeugen und Attribute kopieren\r\n        node = document.createElementNS(\"http://www.w3.org/2000/svg\", nodeType);\r\n        // Übernimmt wichtige Attribute aus dem alten Knoten, und ersetzt diesen danach im DOM durch den neuen Knoten\r\n        dwImageSVGReplaceNode(oldNode, node, [\"id\", \"transform\", \"textBoundingBox\"]);\r\n    } else {\r\n        //Knoten gibt es schon und ist der gleiche typ\r\n        node = oldNode;\r\n    }\r\n    return node;\r\n}\r\n\r\nfunction dwImageSVGPaintHotspotOutline(hotspot, outlineNode, isHover) {\r\n    // Bei Solidworks Composer sind die Konturen/Hotspotflächen initial transparent (opacity)\r\n    // Hier wird nicht die Farbe gesetzt, sondern der Hover/Selektionseffekt durch Anpassung des Attributs erzielt\r\n    if (dwImageSVGIsWithOutlinesByASPLM(outlineNode.ownerDocument)) {\r\n        let outlineNodeId = outlineNode.getAttribute(\"id\");\r\n        let basicHotspotIdSuffix = outlineNodeId.substring(\"hotspot_\".length);\r\n        let basicHotspotIdUnderscoreIdx = basicHotspotIdSuffix.indexOf(\"_\"); // Hat die Id einen Suffix in sich (z.B. text_123_ oder text_123_1)\r\n        if (basicHotspotIdUnderscoreIdx >= 0) {\r\n            // kürzt den Suffix von 123_1 auf 123\r\n            // Basic Suffix wird verwendet zur Bestimmung aller passenden Hotspot Texte/Outlines zu dem Hotspot Key\r\n            basicHotspotIdSuffix = basicHotspotIdSuffix.substring(0, basicHotspotIdUnderscoreIdx);\r\n        }\r\n\r\n        let textNodeId = \"text_\" + basicHotspotIdSuffix;\r\n        let outlineFilterId = \"filter_\" + basicHotspotIdSuffix;\r\n        // Suche nach allen passenden Text-Knoten (beginnend mit textNodeId)\r\n        // Bei ID 16 können aber auch 160, 161, ...1600, ... zurückgeliefert werden. Das muss erst mal noch gefiltert werden\r\n        let textNodes = dwImageSVGFindMatchingNodesForPartialId(outlineNode.ownerDocument, textNodeId).getNodes();\r\n        let outlineFilterNodes = dwImageSVGFindMatchingNodesForPartialId(outlineNode.ownerDocument, outlineFilterId).getNodes();\r\n        if (isHover || hotspot.marked) {\r\n            for (let i = 0; i < outlineFilterNodes.length; i++) {\r\n                let outlineFilter = outlineFilterNodes[i];\r\n                outlineFilter.setAttribute(\"filter\", \"url(#HighlightMe)\");\r\n            }\r\n            let highLightTextFilterExists = outlineNode.ownerDocument.getElementById(\"HighlightText\");\r\n            for (let i = 0; i < textNodes.length; i++) {\r\n                let textNode = textNodes[i];\r\n                if (!dwUtilsStringContains(textNode.className.baseVal, \" st_high\")) {\r\n                    textNode.className.baseVal = textNode.className.baseVal + \" st_high\";\r\n                }\r\n                if (highLightTextFilterExists) {\r\n                    textNode.setAttribute(\"filter\", \"url(#HighlightText)\");\r\n                }\r\n            }\r\n        } else {\r\n            for (let i = 0; i < outlineFilterNodes.length; i++) {\r\n                let outlineFilter = outlineFilterNodes[i];\r\n                outlineFilter.setAttribute(\"filter\", \"url(#NoHighlight)\");\r\n            }\r\n            for (let i = 0; i < textNodes.length; i++) {\r\n                let textNode = textNodes[i];\r\n                // Nicht kompatibel mit IE11 ... (unterstützt keine fat arrow und filter Methoden)\r\n                let classNames = textNode.className.baseVal.split(\" \");\r\n                let resultingClassNames = [];\r\n                for (let cIdx = 0; cIdx < classNames.length; cIdx++) {\r\n                    let className = classNames[cIdx];\r\n                    if (className === \"st_high\") {\r\n                        continue;\r\n                    }\r\n                    resultingClassNames.push(className);\r\n                }\r\n                textNode.className.baseVal = resultingClassNames.join(\" \");\r\n                textNode.removeAttribute(\"filter\");\r\n            }\r\n        }\r\n        return;\r\n    }\r\n    if (outlineNode.hasAttribute(\"opacity\")) {\r\n        if (isHover || hotspot.marked) {\r\n            outlineNode.setAttribute(\"opacity\", \"0.5\");\r\n        } else {\r\n            outlineNode.setAttribute(\"opacity\", \"0\");\r\n        }\r\n        return;\r\n    }\r\n\r\n    // TODO Methodik näher beschreiben, Worfklow ggf. optimieren (d.h. original Attribut im onload setzen, ...)?\r\n    // Bei IsoDraw werden die (stroke-) Farben gesetzt\r\n    if (!outlineNode.hasAttribute(\"stroke\")) {\r\n        // zuerst Originalfarbe setzen, damit man wieder zur Ursprungsfarbe zurückgehen kann\r\n        // sonst wird u.U. bei dwImageSVGGetHotspotOriginalColor die Selektionsfarbe als Originalfarbe reingeschrieben und das Teil nicht mehr deselektiert\r\n        outlineNode.style.stroke = dwImageSVGGetHotspotOriginalColor(outlineNode, \"stroke\");\r\n    }\r\n\r\n    //strokeColor setzen (je nachdem, ob der Knoten gehovert, selektiert oder in der Originalfarbe angezeigt werden soll)\r\n    dwImageSVGSetHotspotOutlineColorAttribute(hotspot, outlineNode, isHover, \"stroke\");\r\n\r\n\r\n    // DAIMLER DATEN\r\n    //if (outlineNode.children.length > 0) {\r\n    //    var child = outlineNode.children[0];\r\n    //    if (child.hasAttribute(\"visibility\")) {\r\n    //        var visValue = isHover || hotspot.marked ? \"visible\" : \"visible\";\r\n    //        child.setAttribute(\"visibility\", visValue);\r\n    //    }\r\n    //}\r\n\r\n    //in den Kindknoten nach Elementen suchen, die bereits eine Füllfarbe haben und dort explizit die aktuelle Farbe setzen\r\n    dwImageSVGPaintHotspotOutlineFixColor(hotspot, outlineNode, isHover, true);\r\n}\r\n\r\nfunction dwImageSVGPaintHotspotOutlineForKey(hotspot, isHover) {\r\n    var svgDocument = dwImageSVGGetDocument(hotspot.elementId);\r\n    if (!svgDocument) {\r\n        return;\r\n    }\r\n    var elementsByClassname = svgDocument.getElementsByClassName(hotspot.key);\r\n    if (elementsByClassname) {\r\n        for (var j = 0; j < elementsByClassname.length; j++) {\r\n            var elementByClassname = elementsByClassname[j];\r\n            if (elementByClassname.tagName.toLowerCase() == \"g\") {\r\n                dwImageSVGPaintHotspotOutline(hotspot, elementByClassname, isHover);\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\nfunction dwImageSVGIsWithOutlinesByASPLM(svgDocument) {\r\n    let root = dwImageSVGGetRootElement(svgDocument);\r\n    if (!root) {\r\n        return false;\r\n    }\r\n    return root.getAttribute(\"svg_outline_generator\") === \"asplm\";\r\n}\r\n\r\nfunction dwImageSVGIsASPLMOutlineVersionOrHigher(svgDocument, version) {\r\n    if (!dwImageSVGIsWithOutlinesByASPLM(svgDocument)) {\r\n        return false;\r\n    }\r\n    let root = dwImageSVGGetRootElement(svgDocument);\r\n    if (!root) {\r\n        return false;\r\n    }\r\n    let outlineVersion = root.getAttribute(\"svg_outline_version\");\r\n    if (!outlineVersion) {\r\n        return false;\r\n    }\r\n    return parseInt(outlineVersion) >= parseInt(version);\r\n}\r\n\r\nfunction dwImageSVGCreatePointForASPLM(svgDocument, x, y) {\r\n    const pt = svgDocument.documentElement.createSVGPoint();\r\n    pt.x = x;\r\n    pt.y = y;\r\n\r\n    return pt.matrixTransform(svgDocument.documentElement.getScreenCTM().inverse());\r\n}\r\n\r\n\r\nfunction dwImageSVGCreateOutlinePathRectForASPLM(svgDocument, hotspotNode, outlinePathId) {\r\n    let boundRect = hotspotNode.getBoundingClientRect();\r\n    // For embedded SVG in html page DOM to SVG transformation is needed\r\n    let boundRectTxy = dwImageSVGCreatePointForASPLM(svgDocument, boundRect.x, boundRect.y);\r\n    let boundRectTxy2 = dwImageSVGCreatePointForASPLM(svgDocument, boundRect.x + boundRect.width, boundRect.y + boundRect.height);\r\n\r\n    let newRect = svgDocument.createElementNS(\"http://www.w3.org/2000/svg\", 'rect');\r\n    newRect.setAttribute(\"id\", outlinePathId);\r\n    newRect.setAttribute(\"x\", boundRectTxy.x);\r\n    newRect.setAttribute(\"y\", boundRectTxy.y);\r\n    newRect.setAttribute(\"width\", Math.abs(boundRectTxy2.x - boundRectTxy.x));\r\n    newRect.setAttribute(\"height\", Math.abs(boundRectTxy2.y - boundRectTxy.y));\r\n    newRect.setAttribute(\"fill\", \"none\");\r\n    newRect.setAttribute(\"pointer-events\", \"visibleFill\");\r\n\r\n    let hotspotPathsGroup = svgDocument.getElementById(\"hotspot-paths\");\r\n    if (!hotspotPathsGroup) {\r\n        hotspotPathsGroup = svgDocument.createElementNS(\"http://www.w3.org/2000/svg\", \"g\")\r\n        hotspotPathsGroup.setAttribute(\"id\", \"hotspot-paths\");\r\n        svgDocument.documentElement.appendChild(hotspotPathsGroup)\r\n    }\r\n\r\n    const hotspotPath = dwDomGetFirstElementChild(hotspotPathsGroup);\r\n    if (!hotspotPath) {\r\n        hotspotPathsGroup.appendChild(newRect);\r\n        return newRect;\r\n    }\r\n\r\n    if (hotspotPath.tagName === \"path\") {\r\n        // Noch keine Rectangles hinzugefügt. Keine weitere Sortierung der Rectangles nach Größe notwendig\r\n        hotspotPathsGroup.insertBefore(newRect, hotspotPath);\r\n        return newRect;\r\n    }\r\n\r\n    // Sortierung nach Größe der Rectangles (größte zuerst, damit kleinere darüber liegen)\r\n    const rectangles = hotspotPathsGroup.querySelectorAll(\"rect\");\r\n    for (const nextBigger of rectangles) {\r\n        const nextBiggerBoundRect = nextBigger.getBoundingClientRect();\r\n        if (boundRect.width * boundRect.height > nextBiggerBoundRect.width * nextBiggerBoundRect.height) {\r\n            hotspotPathsGroup.insertBefore(newRect, nextBigger);\r\n            return newRect;\r\n        }\r\n    }\r\n\r\n    // Es ist davon auszugehen, dass mindestens 1 Rectangle vorher definiert war - ansonsten ist es bereits vor dem ersten\r\n    // path Element eingefügt\r\n    // Rectangle ist das kleinste und muss direkt vor dem ersten Path bzw. ganz hinten eingefügt werden, falls es keinen\r\n    // Path gibt\r\n    if (hotspotPath) {\r\n        hotspotPathsGroup.insertBefore(newRect, hotspotPath);\r\n    } else {\r\n        hotspotPathsGroup.appendChild(newRect);\r\n    }\r\n\r\n    return newRect\r\n}\r\n\r\nfunction dwImageSVGHighlightUnlinkedHotspotsByASPLM(svgDoc, nodes) {\r\n    if (!dwImageSVGIsWithOutlinesByASPLM(svgDoc)) {\r\n        return;\r\n    }\r\n\r\n    // Zunächst alle nicht verlinkten Hotspot-Nummern ermitteln\r\n    let unlinkedNodes = [];\r\n    let unlinkedHotspotIds = [];\r\n    for (let i = 0; i < nodes.length; i++) {\r\n        let node = nodes[i];\r\n        let nodeId = node.getAttribute(\"id\");\r\n        if (!nodeId || !dwUtilsStringStartsWith(nodeId, \"text_\", false)) {\r\n            continue;\r\n        }\r\n        unlinkedNodes.push(node);\r\n        unlinkedHotspotIds.push(getHotspotIdWithoutSuffix(nodeId));\r\n    }\r\n\r\n    // Jetzt diese Hotspots gedimmt darstellen\r\n    for (let i = 0; i < unlinkedNodes.length; i++) {\r\n        let node = unlinkedNodes[i];\r\n        let hotspotId = unlinkedHotspotIds[i];\r\n        let filter = dwImageSVGFindMatchingNodesForPartialId(svgDoc, \"filter_\" + hotspotId).getNodes();\r\n        if ((filter != null) && (filter.length > 0)) {\r\n            filter.forEach(filterNode => {\r\n                // Jetzt überprüfen, ob es sich um eine Gruppe handelt und Hotspots innerhalb dieser Gruppe in der Stückliste\r\n                // vorhanden sind -> in diesem Fall die Gruppe nicht gedimmt darstellen\r\n                let groupHotspotIds = dwImageSVGFindAllGroupHotspotIdsForPartialId(svgDoc, filterNode);\r\n                let linkedHotspotFound = false;\r\n                for (let groupIndex = 0; groupIndex < groupHotspotIds.length; groupIndex++) {\r\n                    if (!dwUtilsIsInArray(unlinkedHotspotIds, groupHotspotIds[groupIndex])) {\r\n                        linkedHotspotFound = true;\r\n                        break;\r\n                    }\r\n                }\r\n                if (!linkedHotspotFound) {\r\n                    // Alle FilterNodes, die mit der HotspotId beginnen (z.B. 1234, 1234_44213) als inaktiv markieren\r\n                    filterNode.setAttribute(\"filter\", \"url(#DimmedInactive)\");\r\n                } else if (filterNode.getAttribute(\"filter\") === \"url(#DimmedInactive)\") {\r\n                    filterNode.setAttribute(\"filter\", \"url(#NoHighlight)\");\r\n                }\r\n            });\r\n        }\r\n\r\n        node.className.baseVal = node.className.baseVal + \" st_dimmed\";\r\n    }\r\n}\r\n\r\nfunction dwImageSVGFindMatchingNodesForPartialId(svgDoc, partialId) {\r\n    let possibleMatches = svgDoc.querySelectorAll('[id^=' + partialId + \"]\");\r\n    let matches = [];\r\n    for (let i = 0; i < possibleMatches.length; i++) {\r\n        let possibleMatchId = possibleMatches[i].getAttribute(\"id\");\r\n        if ((possibleMatchId === partialId) || dwUtilsStringStartsWith(possibleMatchId, partialId + \"_\", false)) {\r\n            let match = svgDoc.getElementById(possibleMatchId);\r\n            if (match) {\r\n                matches.push(match);\r\n            }\r\n        }\r\n    }\r\n    return {\r\n        getNodes: function() {\r\n            return matches\r\n        },\r\n        getFirst: function() {\r\n            return matches.length ? matches[0] : null\r\n        }\r\n    };\r\n}\r\n\r\nfunction dwImageSVGFindAllGroupHotspotIdsForPartialId(svgDoc, groupNode) {\r\n    // Ab AS-PLM Outline Version 2 werden die ehemals notwendigen filtered_hotspot_ Gruppen nicht mehr generiert.\r\n    // -> Filter sind verlinkt mit der original Hotspot-Gruppe.\r\n    let childNodeIdPrefix = dwImageSVGIsASPLMOutlineVersionOrHigher(svgDoc, 2) ? \"hotspot_\" : \"filtered_hotspot_\";\r\n\r\n    let todoNodes = [groupNode];\r\n    let groupHotspots = [];\r\n    while (todoNodes.length) {\r\n        let todoNode = todoNodes.pop();\r\n        let todoNodeId = dwDomGetDomAttribute(todoNode, \"id\");\r\n        if (todoNodeId && dwUtilsStringStartsWith(todoNodeId, \"text_\", false)) {\r\n            groupHotspots.push(getHotspotIdWithoutSuffix(todoNodeId)); // Hotspot in der Gruppe gefunden\r\n        } else {\r\n            let elements = dwDomGetElementChildNodes(todoNode);\r\n            if (elements && elements.length) {\r\n                // Alle Kind-Elemente auf den Stack pushen zur weiteren Untersuchung\r\n                for (let i = 0; i < elements.length; i++) {\r\n                    todoNodes.push(elements[i]);\r\n                }\r\n            } else if (todoNodeId && dwUtilsStringStartsWith(todoNodeId, \"filter_\", false)) {\r\n                // use-Tags mit \"filter_*\" haben nur einen ShadowRoot, der nicht normal über dwDomGetElementChildNodes()\r\n                // seine Kind-Elemente zurückgibt. Stattdessen das darin befindliche g-Tag mit \"filtered_hotspot_*\" suchen\r\n                // und dieses als Kind auf den Stack pushen zur weiteren Untersuchung.\r\n\r\n                let hotspotId = getHotspotIdWithoutSuffix(todoNodeId);\r\n                let childNodes = dwImageSVGFindMatchingNodesForPartialId(svgDoc, childNodeIdPrefix + hotspotId).getNodes();\r\n                if (childNodes) {\r\n                    todoNodes.push(...childNodes);\r\n                }\r\n            }\r\n        }\r\n    }\r\n    return groupHotspots;\r\n}\r\n\r\nfunction dwImageSVGGetRootElement(svgDocument) {\r\n    if (!svgDocument) {\r\n        return null;\r\n    }\r\n    return svgDocument.documentElement;\r\n}\r\n\r\nfunction dwImageSVGPCreateHotspotOutlineClone(hotspot) {\r\n    var svgDocument = dwImageSVGGetDocument(hotspot.elementId);\r\n    if (!svgDocument) {\r\n        return;\r\n    }\r\n\r\n    var elementsByClassname = svgDocument.getElementsByClassName(hotspot.key);\r\n    if (elementsByClassname) {\r\n        for (var j = 0; j < elementsByClassname.length; j++) {\r\n            var elementByClassname = elementsByClassname[j];\r\n            if (elementByClassname.tagName.toLowerCase() == \"g\") {\r\n                if (elementByClassname.hasAttribute(\"isCloned\")) {\r\n                    continue;\r\n                }\r\n                if (elementByClassname.hasAttribute(\"dw_stroke_big_clone\")) {\r\n                    continue;\r\n                }\r\n                var groupClone = elementByClassname.cloneNode(true);\r\n                groupClone.setAttribute(\"id\", elementByClassname.getAttribute(\"id\") + \"_clone\");\r\n                groupClone.setAttribute(\"dw_stroke_big_clone\", \"1\");\r\n                groupClone.style.stroke = \"transparent\";\r\n                groupClone.style.opacity = \"0\";\r\n                dwImageSVGModifyStroke(groupClone, \"#00FF00\", 10, true);\r\n\r\n                elementByClassname.parentNode.appendChild(groupClone);\r\n                elementByClassname.setAttribute(\"isCloned\", \"1\");\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\nfunction dwImageSVGModifyStroke(node, strokeColor, strokeWidthMultiplier, recursive) {\r\n    node.style.stroke = strokeColor;\r\n    var strokeWidth = node.style.strokeWidth || node.getAttribute(\"stroke-width\");\r\n    if (strokeWidth) {\r\n        // Beim Anpassen der Width (z.B. für den unsichtbaren Clone) muss immer auch die Unit beachtet werden (z.B. mm bei Solidworks Composer)\r\n        var strokeWidthVal = parseFloat(strokeWidth);\r\n        var strokeWidthUnit = \"\";\r\n        if (strokeWidthVal != strokeWidth) {\r\n            strokeWidthUnit = strokeWidth.substring((strokeWidthVal + \"\").length);\r\n        }\r\n        node.style.strokeWidth = (strokeWidthVal * strokeWidthMultiplier) + strokeWidthUnit;\r\n    }\r\n    if (recursive) {\r\n        for (var i = 0; i < node.childNodes.length; i++) {\r\n            var childNode = node.childNodes[i];\r\n            if (childNode.nodeType == DWUTILS_NODE_TYPE.ELEMENT) {\r\n                dwImageSVGModifyStroke(childNode, strokeColor, strokeWidthMultiplier, recursive);\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\nfunction dwImageSVGGetDocument(elementId) {\r\n    var image = dwImageViewerGetImage(elementId);\r\n    return (image != null) ? image.contentDocument : null;\r\n}\r\n\r\nfunction dwImageSVGPaintHotspotNode(hotspot, oldNode, bBoxRectangle, unmarkedHotspotsVisible) {\r\n    var linkStyle = dwImageSVGGetHotspotLinkStyle(hotspot, unmarkedHotspotsVisible);\r\n    var hotspotNode = null;\r\n    if (bBoxRectangle) {\r\n        var hotspotVisibility = \"visible\";\r\n        var color = dwImageSVGGetHotspotColor(hotspot);\r\n        dwImageWriteToLog(hotspot.elementId, \"paint svg hotspot (id=\" + hotspot.uniqueId + \" key=\" + hotspot.key + \" keyver=\" + hotspot.keyVer + \" bBox=\" + bBoxRectangle.toString() + \" linkstyle=\" + linkStyle + \" marked=\" + hotspot.marked + \")\");\r\n        if (linkStyle == DW_LINK_STYLE_RECT) {\r\n            hotspotNode = dwImageSVGCreateNewRect(bBoxRectangle.x1, bBoxRectangle.y1, bBoxRectangle.width, bBoxRectangle.height, oldNode);\r\n            hotspotNode.style.fill = \"none\";\r\n        } else if (linkStyle == DW_LINK_STYLE_FULL) {\r\n            hotspotNode = dwImageSVGCreateNewRect(bBoxRectangle.x1, bBoxRectangle.y1, bBoxRectangle.width, bBoxRectangle.height, oldNode);\r\n            hotspotNode.style.fill = color;\r\n        } else if (linkStyle == DW_LINK_STYLE_ELLIPSE) {\r\n            hotspotNode = dwImageSVGCreateNewEllipse(bBoxRectangle.x1, bBoxRectangle.y1, bBoxRectangle.width, bBoxRectangle.height, oldNode);\r\n            hotspotNode.style.fill = \"none\";\r\n        } else if (linkStyle == DW_LINK_STYLE_ELLIPSE_FULL) {\r\n            hotspotNode = dwImageSVGCreateNewEllipse(bBoxRectangle.x1, bBoxRectangle.y1, bBoxRectangle.width, bBoxRectangle.height, oldNode);\r\n            hotspotNode.style.fill = color;\r\n        } else if (linkStyle == DW_LINK_STYLE_LINE) {\r\n            hotspotNode = dwImageSVGCreateNewLine(bBoxRectangle.x1, bBoxRectangle.y1, bBoxRectangle.width, bBoxRectangle.height, oldNode);\r\n        } else {\r\n            hotspotNode = dwImageSVGCreateNewRect(bBoxRectangle.x1, bBoxRectangle.y1, bBoxRectangle.width, bBoxRectangle.height, oldNode);\r\n            hotspotVisibility = \"hidden\";\r\n        }\r\n        //Allgemeine Eigenschaften\r\n        hotspotNode.setAttribute(\"stroke\", color);\r\n        hotspotNode.setAttribute(\"stroke-width\", \"0.5\");\r\n        hotspotNode.setAttribute(\"visibility\", hotspotVisibility);\r\n        hotspotNode.setAttribute(\"dw_hotspot_rect\", \"true\");\r\n    }\r\n    return hotspotNode;\r\n}\r\n\r\n//Hotspot - Rechteck erzeugen\r\nfunction dwImageSVGCreateNewRect(x, y, width, height, oldNode) {\r\n    var node = dwImageSVGCreateNewNodeIfRequired(oldNode, \"rect\");\r\n    node.setAttribute(\"x\", x);\r\n    node.setAttribute(\"y\", y);\r\n    node.setAttribute(\"width\", width);\r\n    node.setAttribute(\"height\", height);\r\n    return node;\r\n}\r\n\r\n//Hotspot - Ellipse erzeugen\r\nfunction dwImageSVGCreateNewEllipse(x, y, width, height, oldNode) {\r\n    var node = dwImageSVGCreateNewNodeIfRequired(oldNode, \"ellipse\");\r\n    //Center der Ellipse (1 Pixel verschoben zur Textbox)\r\n    node.setAttribute(\"cx\", parseInt(x) + parseInt(Math.floor(width / 2)) + parseInt(1));\r\n    node.setAttribute(\"cy\", parseInt(y) + parseInt(Math.floor(height / 2)) + parseInt(1));\r\n    //\"Breite\" und \"Höhe\"\r\n    node.setAttribute(\"rx\", (Math.floor(width / 2)) + 2);\r\n    node.setAttribute(\"ry\", (Math.floor(height / 2)) + 2);\r\n    return node;\r\n}\r\n\r\n//Hotspot - Linie (Unterstrich) erzeugen\r\nfunction dwImageSVGCreateNewLine(x, y, width, height, oldNode) {\r\n    var node = dwImageSVGCreateNewNodeIfRequired(oldNode, \"line\");\r\n    //Koordinaten\r\n    node.setAttribute(\"x1\", x);\r\n    node.setAttribute(\"y1\", parseInt(y) + parseInt(height));\r\n    node.setAttribute(\"x2\", parseInt(x) + parseInt(width));\r\n    node.setAttribute(\"y2\", node.getAttribute(\"y1\"));\r\n    return node;\r\n}\r\n\r\nfunction dwImageSVGGetHotspotLinkStyle(hotspot, unmarkedHotspotsVisible) {\r\n    if (hotspot) {\r\n        var hotspotLinkStyle = hotspot.linkStyle;\r\n        if (hotspot.marked) {\r\n            dwImageWriteToLog(hotspot.elementId, \"mark svg hotspot (id=\" + hotspot.uniqueId + \" key=\" + hotspot.key + \" keyver=\" + hotspot.keyVer + \")\");\r\n            hotspotLinkStyle = hotspot.linkStyleMark;\r\n        } else if (!unmarkedHotspotsVisible) { //Keine Hotspots anzeigen\r\n            hotspotLinkStyle = DW_LINK_STYLE_NONE;\r\n        }\r\n        return hotspotLinkStyle;\r\n    }\r\n    return DW_LINK_STYLE_NONE;\r\n}\r\n\r\n//Farbe für 'normale' Hotspotknoten (Texte)\r\nfunction dwImageSVGGetHotspotColor(hotspot) {\r\n    var hotspotColor = \"#ffffff\";\r\n    if (hotspot) {\r\n        hotspotColor = hotspot.color;\r\n        if (hotspot.marked) {\r\n            hotspotColor = hotspot.colorMark;\r\n        }\r\n    }\r\n    return hotspotColor;\r\n}\r\n\r\n//Farbe für Hover und Konturen (colorAttribute z.B. \"fill\" oder \"stroke\")\r\nfunction dwImageSVGGetHotspotColorOutline(hotspot, node, isHover, colorAttribute) {\r\n    var hotspotColor = \"#ffffff\";\r\n    if (hotspot) {\r\n        // Aktuell wird als 'default' die Farbe Schwarz angenommen, aber falls der Knoten eine eigene Fillcolor hat, wird diese verwendet\r\n        // Es kann (bei farbigen Zeichnungen) notwendig sein, alle Kinder recursiv zu untersuchen, und (mit Backup der Originalfarbe)\r\n        // via inline Befehl die Farbe um-/zurückzusetzen\r\n        hotspotColor = dwImageSVGGetHotspotOriginalColor(node, colorAttribute);\r\n        if (isHover && hotspot.isWithHover) {\r\n            hotspotColor = hotspot.colorHover;\r\n        }\r\n        if (hotspot.marked && hotspot.isWithOutline) {\r\n            hotspotColor = hotspot.colorOutline;\r\n        }\r\n    }\r\n    return hotspotColor;\r\n}\r\n\r\nfunction dwImageSVGOnLoad(elementId) {\r\n    dwImageSVGLoadHotspots(elementId, new Date().getTime(), 0);\r\n}\r\n\r\nfunction dwImageSVGOnError(elementId) {\r\n    dwImageWriteToLog(elementId, \"Error occurs while loading SVG!\");\r\n}\r\n\r\nfunction dwImageSVGOnAbort(elementId) {\r\n    dwImageWriteToLog(elementId, \"Loading SVG aborted!\");\r\n}\r\n\r\n// Hotspots laden (nach 30s aufgeben)\r\nfunction dwImageSVGLoadHotspots(elementId, startTime, counter) {\r\n    var image = dwImageViewerGetImage(elementId);\r\n    if (image) {\r\n        counter++;\r\n        // Im GWT können wir nicht mit parent.dwImageOnLoad arbeiten. Deshalb ist hier eine erweiterte Erkennung,\r\n        // ob das SVG schon komplett geladen ist.\r\n        var mustWait = false;\r\n        try {\r\n            if ((typeof (image) == \"undefined\") || (typeof (image.initialized) == \"undefined\") || (!image.initialized)) {\r\n                mustWait = true;\r\n            } else if (typeof (image.contentDocument) == \"undefined\") {\r\n                // IE Probleme\r\n                mustWait = true;\r\n            } else if (typeof (image.contentDocument.documentElement) == \"undefined\") {\r\n                // IE Probleme\r\n                mustWait = true;\r\n            } else {\r\n                var textNodes = image.contentDocument.getElementsByTagName(\"text\");\r\n                image.contentDocument.documentElement.getElementsByTagName(\"text\");\r\n                if (framework_isIE) {\r\n                    // IE feuert das onload etwas früh. Eine saubere Erkennung ist so nicht möglich\r\n                    // Serverseitig wird ein Element am Ende des SVG ROOT eingefügt. Ist dieses Element\r\n                    // geladen gehen wir davon aus, dass das SVG komplett geladen wurde ...\r\n                    mustWait = (image.contentDocument.getElementById(\"DOCWARE_END_NODE\") == null);\r\n                }\r\n                if (textNodes && textNodes.length) {\r\n                    // In Chrome ist die Layout Phase ggf. noch nicht vollständig abgeschlossen und die BBOx nicht ermittelbar - wir machen hier einen simplen Check\r\n                    for (var i = 0; i < textNodes.length; i++) {\r\n                        var textNode = textNodes[i];\r\n                        if (dwImageSVGIsEmptyText(textNode)) {\r\n                            continue;\r\n                        }\r\n\r\n                        mustWait = !dwImageSVGValidateTextBBox(textNode);\r\n                        if (!mustWait) {\r\n                            // Annahme: Ist ein Textknoten korrekt ermittelt, sollte die offset Bestimmung auch für alle weiteren Textknoten korrekt sein\r\n                            // Es wird nur der erste Knoten untersucht und abgebrochen.\r\n                            break;\r\n\r\n                            // Defensiver Ansatz für die ASPLM Daten. Hier kann es sein, dass bestimmte Textelemente (z.B. Symbol für Motorcode_Benzin)\r\n                            // als erstes Textelement gefunden werden. Ist in diesen Daten auch ein <use> Filter Element hinterlegt, ist eine BBox Bestimmung für den Text nicht möglich.\r\n                            // Entsprechend werden alle potentiellen weiteren Textknoten ermittelt und geprüft ob eine bbox Bestimmung erfolgreich ist.\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n        } catch (e) {\r\n            mustWait = true;\r\n        }\r\n        if (mustWait) {\r\n            // Methode \"dwImageViewerInitStart\" noch nicht vollständig durchlaufen - Initialisierung der Anwendung noch nicht abgeschlossen\r\n            if ((new Date().getTime() - startTime) > 30000) {\r\n                dwImageWriteToLog(elementId, \"SVG OnLoad - Cancelled (attempt=\" + counter + \" past time=\" + (new Date().getTime() - startTime) + \"ms)\");\r\n                return;\r\n            } else {\r\n                setTimeout(function() {\r\n                    dwImageSVGLoadHotspots(elementId, startTime, counter);\r\n                }, 50);\r\n                return;\r\n            }\r\n        }\r\n        dwImageWriteToLog(elementId, \"SVG OnLoad - Creating Hotspots (attempt=\" + counter + \" past time=\" + (new Date().getTime() - startTime) + \"ms)\");\r\n        dwImageSVGLoadCSSDefs(image);\r\n        dwImageSVGMakeHotspots(image);\r\n        dwImageWriteToLog(elementId, \"SVG OnLoad - Created Hotspots (past time=\" + (new Date().getTime() - startTime) + \"ms)\");\r\n\r\n        //Loaded.\r\n        // TODO Umstellung der Initialisierung. Harmonisierung mit 2D Load Behaviour. Umstellung des 2D Init Bereichs,\r\n        // dass hier auch alle Tiles geprüft werden auf dwLoaded Flag und erst nach Laden aller Tiles das Event geworfen wird\r\n        // KOPIE von dwImageViewerInitEnd (gegen Ende der Methode)\r\n        if (typeof (dwAjaxImageLoaded) != \"undefined\") {\r\n            dwAjaxImageLoaded(null, elementId, elementId, \"\", true);\r\n        } else if (typeof (dwSwingFrameworkFireCallbackEvent) != \"undefined\") {\r\n            dwSwingFrameworkFireCallbackEvent(\"imageLoadedEvent\", \"\");\r\n        }\r\n    }\r\n}\r\n\r\nfunction dwImageSVGIsWithHoverOrOutline(hotspot) {\r\n    if (!hotspot) {\r\n        return false;\r\n    }\r\n    return (hotspot.isWithHover || hotspot.isWithOutline);\r\n}\r\n\r\nfunction dwImageSVGIsWithRerenderUnlinkedImageHotspots(root) {\r\n    if (root.getAttribute(\"svg_outline_generator\") === \"asplm\") {\r\n        return true;\r\n    }\r\n    // Weitere IF Abfragen ergänzbar ...\r\n    return false;\r\n}\r\n\r\nfunction dwImageIsHotspotNode(svgDoc, node, hotspot) {\r\n    var nodeText = dwDomGetTextContent(node, [\"desc\", \"metadata\", \"title\"]).trim();\r\n\r\n    var isHotspot = nodeText === hotspot.key;\r\n    if (!isHotspot) {\r\n        return false;\r\n    }\r\n    // Prüfung der Font-Size (wenn der Hotspot eine bestimmte Fontsize haben muss, dann dies berücksichtigen)\r\n    // Außerdem Prüfung auf Schriftart und Gewichtung\r\n    if (!isValidFont(node, hotspot)) {\r\n        return false;\r\n    }\r\n\r\n    if (dwImageSVGIsWithOutlinesByASPLM(svgDoc)) {\r\n        // Das Text-Element muss eine ID haben, die mit \"text_\" beginnt\r\n        let elementId = node.getAttribute(\"id\");\r\n        if (!elementId || (elementId.length === 0) || (elementId.indexOf(\"text_\") !== 0)) {\r\n            return false;\r\n        }\r\n\r\n        // Das Text-Element muss sich in einem Element vom Typ \"g\" befinden mit einer ID, die mit \"hotspot_\" beginnt\r\n        let parentNode = node.parentNode;\r\n        while (parentNode !== null) {\r\n            if (parentNode.tagName && (parentNode.tagName.toLowerCase() === \"g\") && (parentNode.getAttribute(\"id\").indexOf(\"hotspot_\") === 0)) {\r\n                return true;\r\n            }\r\n            parentNode = parentNode.parentNode;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\n/**\r\n * Zeichnet die Hotspots, die in der Stückliste nicht verlinkt sind\r\n * @param svgDoc\r\n * @param unlinkedTextElements\r\n */\r\nfunction dwImageSVGRenderUnlinkedImageHotspots(svgDoc, unlinkedTextElements) {\r\n    if (dwImageSVGIsWithOutlinesByASPLM(svgDoc)) {\r\n        dwImageSVGHighlightUnlinkedHotspotsByASPLM(svgDoc, unlinkedTextElements);\r\n    }\r\n}\r\n\r\n/**\r\n * Zeichnet die Hotspots, die in der Stückliste verlinkt sind, aber kein Hover/Outline Flag haben\r\n * @param svgDoc\r\n * @param linkedTextElementsWithoutHover\r\n */\r\nfunction dwImageSVGRenderUnhoverableImageHotspots(svgDoc, linkedTextElementsWithoutHover) {\r\n    if (dwImageSVGIsWithOutlinesByASPLM(svgDoc)) {\r\n        dwImageSVGHighlightUnlinkedHotspotsByASPLM(svgDoc, linkedTextElementsWithoutHover);\r\n    }\r\n}\r\n\r\n//rekursiv alle Unterknoten, die bereits eine fill-Farbe oder eine stroke-Farbe haben, mit der aktuellen Farbe überschreiben\r\nfunction dwImageSVGPaintHotspotOutlineFixColor(hotspot, node, isHover, recursive) {\r\n    if (!node) {\r\n        return;\r\n    }\r\n\r\n    // DAIMLER DATEN\r\n    //if (node.ownerDocument.getElementById(\"hotspots\") != null) {\r\n    //    node.style.fill = \"none\";\r\n    //}\r\n\r\n    // Knoten die wir für die Hotspot Darstellung eingefügt haben (\"Rectangles\" o.ä.) müssen ignoriert werden\r\n    // Diese werden in entsprechender Methode bereits korrekt eingefärbt\r\n    if (node.hasAttribute(\"dw_hotspot_rect\")) {\r\n        return;\r\n    }\r\n\r\n    dwImageSVGSetHotspotOutlineColorAttribute(hotspot, node, isHover, \"fill\");\r\n    dwImageSVGSetHotspotOutlineColorAttribute(hotspot, node, isHover, \"stroke\");\r\n\r\n    if (recursive) {\r\n        for (var i = 0; i < node.childNodes.length; i++) {\r\n            var childNode = node.childNodes[i];\r\n            if (childNode.nodeType == DWUTILS_NODE_TYPE.ELEMENT) {\r\n                dwImageSVGPaintHotspotOutlineFixColor(hotspot, childNode, isHover, recursive);\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\n//colorAttribute z.B. \"fill\" oder \"stroke\"\r\nfunction dwImageSVGGetHotspotOriginalColor(node, colorAttribute) {\r\n    //aktuelle Farbe des Elements\r\n    var nodeColor = dwImageSVGGetHotspotOutlineColorAttribute(node, colorAttribute);\r\n    if (nodeColor) {\r\n        var colorSaveName = \"save_\" + colorAttribute + \"Color\";\r\n        if (!node.hasAttribute(colorSaveName)) {\r\n            node.setAttribute(colorSaveName, nodeColor);\r\n        }\r\n        return node.getAttribute(colorSaveName);\r\n    }\r\n    //Default ist Schwarz\r\n    return \"#000000\";\r\n}\r\n\r\n\r\nfunction dwImageSVGSetHotspotOutlineColorAttribute(hotspot, node, isHover, colorAttribute) {\r\n    var color = dwImageSVGGetHotspotOutlineColorAttribute(node, colorAttribute);\r\n    //neue Farbe nur setzen, wenn es \"stroke- oder fill-\" Farbe bereits gibt...\r\n    if (color) {\r\n        //... und nur wenn es nicht auf \"none\" steht\r\n        if (color != \"none\") {\r\n            node.style.transition = colorAttribute + \" ease 0.2s\";\r\n            //aktuelle Farbe bestimmt (z.B. abhängig davon, ob der Knoten gerade gehovert oder selektiert ist)\r\n            var newColor = dwImageSVGGetHotspotColorOutline(hotspot, node, isHover, colorAttribute);\r\n            if (colorAttribute == \"stroke\") {\r\n                node.style.stroke = newColor;\r\n            }\r\n            if (colorAttribute == \"fill\") {\r\n                node.style.fill = newColor;\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\nfunction dwImageSVGGetHotspotOutlineColorAttribute(node, colorAttribute) {\r\n    if (!node) {\r\n        return null;\r\n    }\r\n\r\n    //Erst style, dann attribute...\r\n    var color = null;\r\n\r\n    //stroke\r\n    if (colorAttribute == \"stroke\") {\r\n        color = node.style.stroke;\r\n    }\r\n    //fill\r\n    if (colorAttribute == \"fill\") {\r\n        color = node.style.fill;\r\n    }\r\n    if (!color) {\r\n        color = node.getAttribute(colorAttribute);\r\n    }\r\n    return color;\r\n}\r\n\r\nfunction dwImageSVGValidateTextBBox(textNode) {\r\n    let bbox = dwImageSVGGetBBox(textNode);\r\n    return (bbox.width !== 0 && bbox.height !== 0);\r\n}\r\n\r\nfunction dwImageSVGIsEmptyText(textNode) {\r\n    let textNodeContent = dwDomGetTextContent(textNode, [\"desc\", \"metadata\", \"title\"]).trim();\r\n    return textNodeContent.length === 0;\r\n}\r\n\r\n\r\nfunction dwImageSVGLoadCSSDefs(image) {\r\n    var defs = new DwSvgStyleDef(image.contentDocument, true);\r\n}\r\n\r\nfunction DwSvgStyleDef(svgDocument, autoAddInlineStyles) {\r\n    this.cssRules = {};\r\n    if (!svgDocument) {\r\n        return;\r\n    }\r\n    var parse = function(css) {\r\n        var rules = {};\r\n        css = removeComments(css);\r\n        var blocks = css.split('}');\r\n        blocks.pop();\r\n        var len = blocks.length;\r\n        for (var i = 0; i < len; i++) {\r\n            var pair = blocks[i].split('{');\r\n            rules[dwUtilsTrim(pair[0])] = parseCSSBlock(pair[1]);\r\n        }\r\n        return rules;\r\n    };\r\n\r\n    var parseCSSBlock = function(css) {\r\n        var rule = {};\r\n        var declarations = dwUtilsSplit(css, \";\", false);\r\n        var len = declarations.length;\r\n        for (var i = 0; i < len; i++) {\r\n            var loc = declarations[i].indexOf(':');\r\n            var property = dwUtilsTrim(declarations[i].substring(0, loc));\r\n            var value = dwUtilsTrim(declarations[i].substring(loc + 1));\r\n            if (property != \"\" && value != \"\") {\r\n                rule[property] = value;\r\n            }\r\n        }\r\n        return rule;\r\n    };\r\n\r\n    var removeComments = function(css) {\r\n        return css.replace(/\\/\\*(\\r|\\n|.)*\\*\\//g, \"\");\r\n    };\r\n\r\n    var styleDefs = svgDocument.getElementsByTagName(\"style\");\r\n    if (styleDefs.length && styleDefs[0].childNodes.length) { // Annahme: es gibt entweder keinen oder einen style Block im SVG ... nicht mehrere.\r\n        this.cssRules = parse(styleDefs[0].childNodes[0].textContent);\r\n        if (autoAddInlineStyles) {\r\n            var groups = svgDocument.getElementsByTagName(\"g\");\r\n            for (var grpIdx = 0; grpIdx < groups.length; grpIdx++) {\r\n                var group = groups[grpIdx];\r\n                if (!group.className.baseVal) {\r\n                    continue;\r\n                }\r\n                this.classToInlineStyles(group);\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\nDwSvgStyleDef.prototype.getStyle = function(node, attrib) {\r\n    if (node.hasAttribute(attrib)) {\r\n        return node.getAttribute(attrib);\r\n    }\r\n    var className = node.className.baseVal;\r\n    var classDef = this.cssRules[\".\" + className];\r\n    if (classDef) {\r\n        return classDef[attrib];\r\n    }\r\n    return \"\";\r\n};\r\n\r\nDwSvgStyleDef.prototype.classToInlineStyles = function(node) {\r\n    var className = node.className.baseVal;\r\n    var classDef = this.cssRules[\".\" + className];\r\n    if (!classDef) {\r\n        return;\r\n    }\r\n    var inlineStyles = [];\r\n    for (var styleName in classDef) {\r\n        if (!classDef.hasOwnProperty(styleName)) {\r\n            continue;\r\n        }\r\n        if (node.hasAttribute(styleName)) {\r\n            // Inline gewinnt ...\r\n            continue;\r\n        }\r\n        var styleValue = classDef[styleName];\r\n        inlineStyles.push(styleName + \": \" + styleValue);\r\n    }\r\n    var newInlineStyles = (node.getAttribute(\"style\") + \";\" || \"\") + inlineStyles.join(\";\");\r\n    node.setAttribute(\"style\", newInlineStyles);\r\n};\n;(function() {\r\n    var UTIF = {};\r\n\r\n// Make available for import by `require()`\r\n    if (typeof module == \"object\") {\r\n        module.exports = UTIF;\r\n    } else {\r\n        self.UTIF = UTIF;\r\n    }\r\n\r\n    function log() {\r\n        if (typeof process == \"undefined\" || process.env.NODE_ENV == \"development\") {\r\n            console.log.apply(console, arguments);\r\n        }\r\n    }\r\n\r\n    (function(UTIF) {\r\n\r\n// Following lines add a JPEG decoder  to UTIF.JpegDecoder\r\n        (function() {\r\n            \"use strict\";\r\n            var W = function a1() {\r\n                function W(p) {\r\n                    this.message = \"JPEG error: \" + p\r\n                }\r\n\r\n                W.prototype = new Error;\r\n                W.prototype.name = \"JpegError\";\r\n                W.constructor = W;\r\n                return W\r\n            }(), ak = function ag() {\r\n                var p = new Uint8Array([0, 1, 8, 16, 9, 2, 3, 10, 17, 24, 32, 25, 18, 11, 4, 5, 12, 19, 26, 33, 40, 48, 41, 34, 27, 20, 13, 6, 7, 14, 21, 28, 35, 42, 49, 56, 57, 50, 43, 36, 29, 22, 15, 23, 30, 37, 44, 51, 58, 59, 52, 45, 38, 31, 39, 46, 53, 60, 61, 54, 47, 55, 62, 63]),\r\n                        t = 4017, ac = 799, ah = 3406, ao = 2276, ar = 1567, ai = 3784, s = 5793, ad = 2896;\r\n\r\n                function ak(Q) {\r\n                    if (Q == null) {\r\n                        Q = {};\r\n                    }\r\n                    if (Q.w == null) {\r\n                        Q.w = -1;\r\n                    }\r\n                    this.V = Q.n;\r\n                    this.N = Q.w\r\n                }\r\n\r\n                function a5(Q, h) {\r\n                    var f = 0, G = [], n, E, a = 16, F;\r\n                    while (a > 0 && !Q[a - 1]) {\r\n                        a--\r\n                    }\r\n                    G.push({children: [], index: 0});\r\n                    var C = G[0];\r\n                    for (n = 0; n < a; n++) {\r\n                        for (E = 0; E < Q[n]; E++) {\r\n                            C = G.pop();\r\n                            C.children[C.index] = h[f];\r\n                            while (C.index > 0) {\r\n                                C = G.pop()\r\n                            }\r\n                            C.index++;\r\n                            G.push(C);\r\n                            while (G.length <= n) {\r\n                                G.push(F = {children: [], index: 0});\r\n                                C.children[C.index] = F.children;\r\n                                C = F\r\n                            }\r\n                            f++\r\n                        }\r\n                        if (n + 1 < a) {\r\n                            G.push(F = {children: [], index: 0});\r\n                            C.children[C.index] = F.children;\r\n                            C = F\r\n                        }\r\n                    }\r\n                    return G[0].children\r\n                }\r\n\r\n                function a2(Q, h, f) {\r\n                    return 64 * ((Q.P + 1) * h + f)\r\n                }\r\n\r\n                function a7(Q, h, f, G, n, E, a, C, F, d) {\r\n                    if (d == null) {\r\n                        d = !1;\r\n                    }\r\n                    var T = f.m, U = f.Z, z = h, J = 0, V = 0, r = 0, D = 0, a8, q = 0, X, O, _, N, e, K, x = 0, k, g,\r\n                            R, c;\r\n\r\n                    function Y() {\r\n                        if (V > 0) {\r\n                            V--;\r\n                            return J >> V & 1\r\n                        }\r\n                        J = Q[h++];\r\n                        if (J === 255) {\r\n                            var I = Q[h++];\r\n                            if (I) {\r\n                                if (I === 220 && d) {\r\n                                    h += 2;\r\n                                    var l = Z(Q, h);\r\n                                    h += 2;\r\n                                    if (l > 0 && l !== f.s) {\r\n                                        throw new DNLMarkerError(\"Found DNL marker (0xFFDC) while parsing scan data\", l)\r\n                                    }\r\n                                } else if (I === 217) {\r\n                                    if (d) {\r\n                                        var M = q * 8;\r\n                                        if (M > 0 && M < f.s / 10) {\r\n                                            throw new DNLMarkerError(\"Found EOI marker (0xFFD9) while parsing scan data, \" + \"possibly caused by incorrect `scanLines` parameter\", M)\r\n                                        }\r\n                                    }\r\n                                    throw new EOIMarkerError(\"Found EOI marker (0xFFD9) while parsing scan data\")\r\n                                }\r\n                                throw new W(\"unexpected marker\")\r\n                            }\r\n                        }\r\n                        V = 7;\r\n                        return J >>> 7\r\n                    }\r\n\r\n                    function u(I) {\r\n                        var l = I;\r\n                        while (!0) {\r\n                            l = l[Y()];\r\n                            switch (typeof l) {\r\n                                case\"number\":\r\n                                    return l;\r\n                                case\"object\":\r\n                                    continue\r\n                            }\r\n                            throw new W(\"invalid huffman sequence\")\r\n                        }\r\n                    }\r\n\r\n                    function m(I) {\r\n                        var e = 0;\r\n                        while (I > 0) {\r\n                            e = e << 1 | Y();\r\n                            I--\r\n                        }\r\n                        return e\r\n                    }\r\n\r\n                    function j(I) {\r\n                        if (I === 1) {\r\n                            return Y() === 1 ? 1 : -1\r\n                        }\r\n                        var e = m(I);\r\n                        if (e >= 1 << I - 1) {\r\n                            return e\r\n                        }\r\n                        return e + (-1 << I) + 1\r\n                    }\r\n\r\n                    function v(X, I) {\r\n                        var l = u(X.J), M = l === 0 ? 0 : j(l), N = 1;\r\n                        X.D[I] = X.Q += M;\r\n                        while (N < 64) {\r\n                            var S = u(X.i), i = S & 15, A = S >> 4;\r\n                            if (i === 0) {\r\n                                if (A < 15) {\r\n                                    break\r\n                                }\r\n                                N += 16;\r\n                                continue\r\n                            }\r\n                            N += A;\r\n                            var o = p[N];\r\n                            X.D[I + o] = j(i);\r\n                            N++\r\n                        }\r\n                    }\r\n\r\n                    function $(X, I) {\r\n                        var l = u(X.J), M = l === 0 ? 0 : j(l) << F;\r\n                        X.D[I] = X.Q += M\r\n                    }\r\n\r\n                    function b(X, I) {\r\n                        X.D[I] |= Y() << F\r\n                    }\r\n\r\n                    function P(X, I) {\r\n                        if (r > 0) {\r\n                            r--;\r\n                            return\r\n                        }\r\n                        var N = E, l = a;\r\n                        while (N <= l) {\r\n                            var M = u(X.i), S = M & 15, i = M >> 4;\r\n                            if (S === 0) {\r\n                                if (i < 15) {\r\n                                    r = m(i) + (1 << i) - 1;\r\n                                    break\r\n                                }\r\n                                N += 16;\r\n                                continue\r\n                            }\r\n                            N += i;\r\n                            var A = p[N];\r\n                            X.D[I + A] = j(S) * (1 << F);\r\n                            N++\r\n                        }\r\n                    }\r\n\r\n                    function a4(X, I) {\r\n                        var N = E, l = a, M = 0, S, i;\r\n                        while (N <= l) {\r\n                            var A = I + p[N], o = X.D[A] < 0 ? -1 : 1;\r\n                            switch (D) {\r\n                                case 0:\r\n                                    i = u(X.i);\r\n                                    S = i & 15;\r\n                                    M = i >> 4;\r\n                                    if (S === 0) {\r\n                                        if (M < 15) {\r\n                                            r = m(M) + (1 << M);\r\n                                            D = 4\r\n                                        } else {\r\n                                            M = 16;\r\n                                            D = 1\r\n                                        }\r\n                                    } else {\r\n                                        if (S !== 1) {\r\n                                            throw new W(\"invalid ACn encoding\")\r\n                                        }\r\n                                        a8 = j(S);\r\n                                        D = M ? 2 : 3\r\n                                    }\r\n                                    continue;\r\n                                case 1:\r\n                                case 2:\r\n                                    if (X.D[A]) {\r\n                                        X.D[A] += o * (Y() << F)\r\n                                    } else {\r\n                                        M--;\r\n                                        if (M === 0) {\r\n                                            D = D === 2 ? 3 : 0\r\n                                        }\r\n                                    }\r\n                                    break;\r\n                                case 3:\r\n                                    if (X.D[A]) {\r\n                                        X.D[A] += o * (Y() << F)\r\n                                    } else {\r\n                                        X.D[A] = a8 << F;\r\n                                        D = 0\r\n                                    }\r\n                                    break;\r\n                                case 4:\r\n                                    if (X.D[A]) {\r\n                                        X.D[A] += o * (Y() << F)\r\n                                    }\r\n                                    break\r\n                            }\r\n                            N++\r\n                        }\r\n                        if (D === 4) {\r\n                            r--;\r\n                            if (r === 0) {\r\n                                D = 0\r\n                            }\r\n                        }\r\n                    }\r\n\r\n                    function H(X, I, x, l, M) {\r\n                        var S = x / T | 0, i = x % T;\r\n                        q = S * X.A + l;\r\n                        var A = i * X.h + M, o = a2(X, q, A);\r\n                        I(X, o)\r\n                    }\r\n\r\n                    function w(X, I, x) {\r\n                        q = x / X.P | 0;\r\n                        var l = x % X.P, M = a2(X, q, l);\r\n                        I(X, M)\r\n                    }\r\n\r\n                    var y = G.length;\r\n                    if (U) {\r\n                        if (E === 0) {\r\n                            K = C === 0 ? $ : b\r\n                        } else {\r\n                            K = C === 0 ? P : a4\r\n                        }\r\n                    } else {\r\n                        K = v\r\n                    }\r\n                    if (y === 1) {\r\n                        g = G[0].P * G[0].c\r\n                    } else {\r\n                        g = T * f.R\r\n                    }\r\n                    while (x <= g) {\r\n                        var L = n ? Math.min(g - x, n) : g;\r\n                        if (L > 0) {\r\n                            for (O = 0; O < y; O++) {\r\n                                G[O].Q = 0\r\n                            }\r\n                            r = 0;\r\n                            if (y === 1) {\r\n                                X = G[0];\r\n                                for (e = 0; e < L; e++) {\r\n                                    w(X, K, x);\r\n                                    x++\r\n                                }\r\n                            } else {\r\n                                for (e = 0; e < L;\r\n                                     e++) {\r\n                                    for (O = 0; O < y; O++) {\r\n                                        X = G[O];\r\n                                        R = X.h;\r\n                                        c = X.A;\r\n                                        for (_ = 0; _ < c; _++) {\r\n                                            for (N = 0; N < R; N++) {\r\n                                                H(X, K, x, _, N)\r\n                                            }\r\n                                        }\r\n                                    }\r\n                                    x++\r\n                                }\r\n                            }\r\n                        }\r\n                        V = 0;\r\n                        k = an(Q, h);\r\n                        if (!k) {\r\n                            break\r\n                        }\r\n                        if (k.u) {\r\n                            var a6 = L > 0 ? \"unexpected\" : \"excessive\";\r\n                            h = k.offset\r\n                        }\r\n                        if (k.M >= 65488 && k.M <= 65495) {\r\n                            h += 2\r\n                        } else {\r\n                            break\r\n                        }\r\n                    }\r\n                    return h - z\r\n                }\r\n\r\n                function al(Q, h, f) {\r\n                    var G = Q.$, n = Q.D, E, a, C, F, d, T, U, z, J, V, Y, u, m, j, v, $, b;\r\n                    if (!G) {\r\n                        throw new W(\"missing required Quantization Table.\")\r\n                    }\r\n                    for (var r = 0; r < 64; r += 8) {\r\n                        J = n[h + r];\r\n                        V = n[h + r + 1];\r\n                        Y = n[h + r + 2];\r\n                        u = n[h + r + 3];\r\n                        m = n[h + r + 4];\r\n                        j = n[h + r + 5];\r\n                        v = n[h + r + 6];\r\n                        $ = n[h + r + 7];\r\n                        J *= G[r];\r\n                        if ((V | Y | u | m | j | v | $) === 0) {\r\n                            b = s * J + 512 >> 10;\r\n                            f[r] = b;\r\n                            f[r + 1] = b;\r\n                            f[r + 2] = b;\r\n                            f[r + 3] = b;\r\n                            f[r + 4] = b;\r\n                            f[r + 5] = b;\r\n                            f[r + 6] = b;\r\n                            f[r + 7] = b;\r\n                            continue\r\n                        }\r\n                        V *= G[r + 1];\r\n                        Y *= G[r + 2];\r\n                        u *= G[r + 3];\r\n                        m *= G[r + 4];\r\n                        j *= G[r + 5];\r\n                        v *= G[r + 6];\r\n                        $ *= G[r + 7];\r\n                        E = s * J + 128 >> 8;\r\n                        a = s * m + 128 >> 8;\r\n                        C = Y;\r\n                        F = v;\r\n                        d = ad * (V - $) + 128 >> 8;\r\n                        z = ad * (V + $) + 128 >> 8;\r\n                        T = u << 4;\r\n                        U = j << 4;\r\n                        E = E + a + 1 >> 1;\r\n                        a = E - a;\r\n                        b = C * ai + F * ar + 128 >> 8;\r\n                        C = C * ar - F * ai + 128 >> 8;\r\n                        F = b;\r\n                        d = d + U + 1 >> 1;\r\n                        U = d - U;\r\n                        z = z + T + 1 >> 1;\r\n                        T = z - T;\r\n                        E = E + F + 1 >> 1;\r\n                        F = E - F;\r\n                        a = a + C + 1 >> 1;\r\n                        C = a - C;\r\n                        b = d * ao + z * ah + 2048 >> 12;\r\n                        d = d * ah - z * ao + 2048 >> 12;\r\n                        z = b;\r\n                        b = T * ac + U * t + 2048 >> 12;\r\n                        T = T * t - U * ac + 2048 >> 12;\r\n                        U = b;\r\n                        f[r] = E + z;\r\n                        f[r + 7] = E - z;\r\n                        f[r + 1] = a + U;\r\n                        f[r + 6] = a - U;\r\n                        f[r + 2] = C + T;\r\n                        f[r + 5] = C - T;\r\n                        f[r + 3] = F + d;\r\n                        f[r + 4] = F - d\r\n                    }\r\n                    for (var P = 0; P < 8; ++P) {\r\n                        J = f[P];\r\n                        V = f[P + 8];\r\n                        Y = f[P + 16];\r\n                        u = f[P + 24];\r\n                        m = f[P + 32];\r\n                        j = f[P + 40];\r\n                        v = f[P + 48];\r\n                        $ = f[P + 56];\r\n                        if ((V | Y | u | m | j | v | $) === 0) {\r\n                            b = s * J + 8192 >> 14;\r\n                            if (b < -2040) {\r\n                                b = 0\r\n                            } else if (b >= 2024) {\r\n                                b = 255\r\n                            } else {\r\n                                b = b + 2056 >> 4\r\n                            }\r\n                            n[h + P] = b;\r\n                            n[h + P + 8] = b;\r\n                            n[h + P + 16] = b;\r\n                            n[h + P + 24] = b;\r\n                            n[h + P + 32] = b;\r\n                            n[h + P + 40] = b;\r\n                            n[h + P + 48] = b;\r\n                            n[h + P + 56] = b;\r\n                            continue\r\n                        }\r\n                        E = s * J + 2048 >> 12;\r\n                        a = s * m + 2048 >> 12;\r\n                        C = Y;\r\n                        F = v;\r\n                        d = ad * (V - $) + 2048 >> 12;\r\n                        z = ad * (V + $) + 2048 >> 12;\r\n                        T = u;\r\n                        U = j;\r\n                        E = (E + a + 1 >> 1) + 4112;\r\n                        a = E - a;\r\n                        b = C * ai + F * ar + 2048 >> 12;\r\n                        C = C * ar - F * ai + 2048 >> 12;\r\n                        F = b;\r\n                        d = d + U + 1 >> 1;\r\n                        U = d - U;\r\n                        z = z + T + 1 >> 1;\r\n                        T = z - T;\r\n                        E = E + F + 1 >> 1;\r\n                        F = E - F;\r\n                        a = a + C + 1 >> 1;\r\n                        C = a - C;\r\n                        b = d * ao + z * ah + 2048 >> 12;\r\n                        d = d * ah - z * ao + 2048 >> 12;\r\n                        z = b;\r\n                        b = T * ac + U * t + 2048 >> 12;\r\n                        T = T * t - U * ac + 2048 >> 12;\r\n                        U = b;\r\n                        J = E + z;\r\n                        $ = E - z;\r\n                        V = a + U;\r\n                        v = a - U;\r\n                        Y = C + T;\r\n                        j = C - T;\r\n                        u = F + d;\r\n                        m = F - d;\r\n                        if (J < 16) {\r\n                            J = 0\r\n                        } else if (J >= 4080) {\r\n                            J = 255\r\n                        } else {\r\n                            J >>= 4\r\n                        }\r\n                        if (V < 16) {\r\n                            V = 0\r\n                        } else if (V >= 4080) {\r\n                            V = 255\r\n                        } else {\r\n                            V >>= 4\r\n                        }\r\n                        if (Y < 16) {\r\n                            Y = 0\r\n                        } else if (Y >= 4080) {\r\n                            Y = 255\r\n                        } else {\r\n                            Y >>= 4\r\n                        }\r\n                        if (u < 16) {\r\n                            u = 0\r\n                        } else if (u >= 4080) {\r\n                            u = 255\r\n                        } else {\r\n                            u >>= 4\r\n                        }\r\n                        if (m < 16) {\r\n                            m = 0\r\n                        } else if (m >= 4080) {\r\n                            m = 255\r\n                        } else {\r\n                            m >>= 4\r\n                        }\r\n                        if (j < 16) {\r\n                            j = 0\r\n                        } else if (j >= 4080) {\r\n                            j = 255\r\n                        } else {\r\n                            j >>= 4\r\n                        }\r\n                        if (v < 16) {\r\n                            v = 0\r\n                        } else if (v >= 4080) {\r\n                            v = 255\r\n                        } else {\r\n                            v >>= 4\r\n                        }\r\n                        if ($ < 16) {\r\n                            $ = 0\r\n                        } else if ($ >= 4080) {\r\n                            $ = 255\r\n                        } else {\r\n                            $ >>= 4\r\n                        }\r\n                        n[h + P] = J;\r\n                        n[h + P + 8] = V;\r\n                        n[h + P + 16] = Y;\r\n                        n[h + P + 24] = u;\r\n                        n[h + P + 32] = m;\r\n                        n[h + P + 40] = j;\r\n                        n[h + P + 48] = v;\r\n                        n[h + P + 56] = $\r\n                    }\r\n                }\r\n\r\n                function a0(Q, h) {\r\n                    var f = h.P, G = h.c, n = new Int16Array(64);\r\n                    for (var E = 0; E < G; E++) {\r\n                        for (var a = 0; a < f; a++) {\r\n                            var C = a2(h, E, a);\r\n                            al(h, C, n)\r\n                        }\r\n                    }\r\n                    return h.D\r\n                }\r\n\r\n                function an(Q, h, f) {\r\n                    if (f == null) {\r\n                        f = h;\r\n                    }\r\n                    var G = Q.length - 1, n = f < h ? f : h;\r\n                    if (h >= G) {\r\n                        return null\r\n                    }\r\n                    var E = Z(Q, h);\r\n                    if (E >= 65472 && E <= 65534) {\r\n                        return {u: null, M: E, offset: h}\r\n                    }\r\n                    var a = Z(Q, n);\r\n                    while (!(a >= 65472 && a <= 65534)) {\r\n                        if (++n >= G) {\r\n                            return null\r\n                        }\r\n                        a = Z(Q, n)\r\n                    }\r\n                    return {u: E.toString(16), M: a, offset: n}\r\n                }\r\n\r\n                ak.prototype = {\r\n                    parse(Q, h) {\r\n                        if (h == null) {\r\n                            h = {};\r\n                        }\r\n                        var f = h.F, E = 0, a = null, C = null, F, d, T = 0;\r\n\r\n                        function G() {\r\n                            var o = Z(Q, E);\r\n                            E += 2;\r\n                            var B = E + o - 2, V = an(Q, B, E);\r\n                            if (V && V.u) {\r\n                                B = V.offset\r\n                            }\r\n                            var ab = Q.subarray(E, B);\r\n                            E += ab.length;\r\n                            return ab\r\n                        }\r\n\r\n                        function n(F) {\r\n                            var o = Math.ceil(F.o / 8 / F.X), B = Math.ceil(F.s / 8 / F.B);\r\n                            for (var Y = 0; Y < F.W.length; Y++) {\r\n                                R = F.W[Y];\r\n                                var ab = Math.ceil(Math.ceil(F.o / 8) * R.h / F.X),\r\n                                        af = Math.ceil(Math.ceil(F.s / 8) * R.A / F.B), ap = o * R.h, aq = B * R.A,\r\n                                        ae = 64 * aq * (ap + 1);\r\n                                R.D = new Int16Array(ae);\r\n                                R.P = ab;\r\n                                R.c = af\r\n                            }\r\n                            F.m = o;\r\n                            F.R = B\r\n                        }\r\n\r\n                        var U = [], z = [], J = [], V = Z(Q, E);\r\n                        E += 2;\r\n                        if (V !== 65496) {\r\n                            throw new W(\"SOI not found\")\r\n                        }\r\n                        V = Z(Q, E);\r\n                        E += 2;\r\n                        markerLoop:while (V !== 65497) {\r\n                            var Y, u, m;\r\n                            switch (V) {\r\n                                case 65504:\r\n                                case 65505:\r\n                                case 65506:\r\n                                case 65507:\r\n                                case 65508:\r\n                                case 65509:\r\n                                case 65510:\r\n                                case 65511:\r\n                                case 65512:\r\n                                case 65513:\r\n                                case 65514:\r\n                                case 65515:\r\n                                case 65516:\r\n                                case 65517:\r\n                                case 65518:\r\n                                case 65519:\r\n                                case 65534:\r\n                                    var j = G();\r\n                                    if (V === 65504) {\r\n                                        if (j[0] === 74 && j[1] === 70 && j[2] === 73 && j[3] === 70 && j[4] === 0) {\r\n                                            a = {\r\n                                                version: {d: j[5], T: j[6]},\r\n                                                K: j[7],\r\n                                                j: j[8] << 8 | j[9],\r\n                                                H: j[10] << 8 | j[11],\r\n                                                S: j[12],\r\n                                                I: j[13],\r\n                                                C: j.subarray(14, 14 + 3 * j[12] * j[13])\r\n                                            }\r\n                                        }\r\n                                    }\r\n                                    if (V === 65518) {\r\n                                        if (j[0] === 65 && j[1] === 100 && j[2] === 111 && j[3] === 98 && j[4] === 101) {\r\n                                            C = {\r\n                                                version: j[5] << 8 | j[6],\r\n                                                k: j[7] << 8 | j[8],\r\n                                                q: j[9] << 8 | j[10],\r\n                                                a: j[11]\r\n                                            }\r\n                                        }\r\n                                    }\r\n                                    break;\r\n                                case 65499:\r\n                                    var v = Z(Q, E), b;\r\n                                    E += 2;\r\n                                    var $ = v + E - 2;\r\n                                    while (E < $) {\r\n                                        var r = Q[E++], P = new Uint16Array(64);\r\n                                        if (r >> 4 === 0) {\r\n                                            for (u = 0; u < 64; u++) {\r\n                                                b = p[u];\r\n                                                P[b] = Q[E++]\r\n                                            }\r\n                                        } else if (r >> 4 === 1) {\r\n                                            for (u = 0; u < 64; u++) {\r\n                                                b = p[u];\r\n                                                P[b] = Z(Q, E);\r\n                                                E += 2\r\n                                            }\r\n                                        } else {\r\n                                            throw new W(\"DQT - invalid table spec\")\r\n                                        }\r\n                                        U[r & 15] = P\r\n                                    }\r\n                                    break;\r\n                                case 65472:\r\n                                case 65473:\r\n                                case 65474:\r\n                                    if (F) {\r\n                                        throw new W(\"Only single frame JPEGs supported\")\r\n                                    }\r\n                                    E += 2;\r\n                                    F = {};\r\n                                    F.G = V === 65473;\r\n                                    F.Z = V === 65474;\r\n                                    F.precision = Q[E++];\r\n                                    var D = Z(Q, E), a4, q = 0, H = 0;\r\n                                    E += 2;\r\n                                    F.s = f || D;\r\n                                    F.o = Z(Q, E);\r\n                                    E += 2;\r\n                                    F.W = [];\r\n                                    F._ = {};\r\n                                    var a8 = Q[E++];\r\n                                    for (Y = 0; Y < a8; Y++) {\r\n                                        a4 = Q[E];\r\n                                        var w = Q[E + 1] >> 4, y = Q[E + 1] & 15;\r\n                                        if (q < w) {\r\n                                            q = w\r\n                                        }\r\n                                        if (H < y) {\r\n                                            H = y\r\n                                        }\r\n                                        var X = Q[E + 2];\r\n                                        m = F.W.push({h: w, A: y, L: X, $: null});\r\n                                        F._[a4] = m - 1;\r\n                                        E += 3\r\n                                    }\r\n                                    F.X = q;\r\n                                    F.B = H;\r\n                                    n(F);\r\n                                    break;\r\n                                case 65476:\r\n                                    var O = Z(Q, E);\r\n                                    E += 2;\r\n                                    for (Y = 2; Y < O;) {\r\n                                        var _ = Q[E++], N = new Uint8Array(16), e = 0;\r\n                                        for (u = 0; u < 16; u++, E++) {\r\n                                            e += N[u] = Q[E]\r\n                                        }\r\n                                        var K = new Uint8Array(e);\r\n                                        for (u = 0; u < e; u++, E++) {\r\n                                            K[u] = Q[E]\r\n                                        }\r\n                                        Y += 17 + e;\r\n                                        (_ >> 4 === 0 ? J : z)[_ & 15] = a5(N, K)\r\n                                    }\r\n                                    break;\r\n                                case 65501:\r\n                                    E += 2;\r\n                                    d = Z(Q, E);\r\n                                    E += 2;\r\n                                    break;\r\n                                case 65498:\r\n                                    var x = ++T === 1 && !f, R;\r\n                                    E += 2;\r\n                                    var k = Q[E++], g = [];\r\n                                    for (Y = 0; Y < k; Y++) {\r\n                                        var c = Q[E++], L = F._[c];\r\n                                        R = F.W[L];\r\n                                        R.index = c;\r\n                                        var a6 = Q[E++];\r\n                                        R.J = J[a6 >> 4];\r\n                                        R.i = z[a6 & 15];\r\n                                        g.push(R)\r\n                                    }\r\n                                    var I = Q[E++], l = Q[E++], M = Q[E++];\r\n                                    try {\r\n                                        var S = a7(Q, E, F, g, d, I, l, M >> 4, M & 15, x);\r\n                                        E += S\r\n                                    } catch (ex) {\r\n                                        if (ex instanceof DNLMarkerError) {\r\n                                            return this.parse(Q, {F: ex.s})\r\n                                        } else if (ex instanceof EOIMarkerError) {\r\n                                            break markerLoop\r\n                                        }\r\n                                        throw ex\r\n                                    }\r\n                                    break;\r\n                                case 65500:\r\n                                    E += 4;\r\n                                    break;\r\n                                case 65535:\r\n                                    if (Q[E] !== 255) {\r\n                                        E--\r\n                                    }\r\n                                    break;\r\n                                default:\r\n                                    var i = an(Q, E - 2, E - 3);\r\n                                    if (i && i.u) {\r\n                                        E = i.offset;\r\n                                        break\r\n                                    }\r\n                                    if (E >= Q.length - 1) {\r\n                                        break markerLoop\r\n                                    }\r\n                                    throw new W(\"JpegImage.parse - unknown marker: \" + V.toString(16))\r\n                            }\r\n                            V = Z(Q, E);\r\n                            E += 2\r\n                        }\r\n                        this.width = F.o;\r\n                        this.height = F.s;\r\n                        this.g = a;\r\n                        this.b = C;\r\n                        this.W = [];\r\n                        for (Y = 0; Y < F.W.length; Y++) {\r\n                            R = F.W[Y];\r\n                            var A = U[R.L];\r\n                            if (A) {\r\n                                R.$ = A\r\n                            }\r\n                            this.W.push({index: R.index, e: a0(F, R), l: R.h / F.X, t: R.A / F.B, P: R.P, c: R.c})\r\n                        }\r\n                        this.p = this.W.length;\r\n                        return undefined\r\n                    }, Y(Q, h, f) {\r\n                        if (f == null) {\r\n                            f = !1;\r\n                        }\r\n                        var G = this.width / Q, n = this.height / h, E, a, C, F, d, T, U, z, J, V, Y = 0, u,\r\n                                m = this.W.length, j = Q * h * m, v = new Uint8ClampedArray(j), $ = new Uint32Array(Q),\r\n                                b = 4294967288, r;\r\n                        for (U = 0; U < m; U++) {\r\n                            E = this.W[U];\r\n                            a = E.l * G;\r\n                            C = E.t * n;\r\n                            Y = U;\r\n                            u = E.e;\r\n                            F = E.P + 1 << 3;\r\n                            if (a !== r) {\r\n                                for (d = 0; d < Q; d++) {\r\n                                    z = 0 | d * a;\r\n                                    $[d] = (z & b) << 3 | z & 7\r\n                                }\r\n                                r = a\r\n                            }\r\n                            for (T = 0; T < h; T++) {\r\n                                z = 0 | T * C;\r\n                                V = F * (z & b) | (z & 7) << 3;\r\n                                for (d = 0; d < Q; d++) {\r\n                                    v[Y] = u[V + $[d]];\r\n                                    Y += m\r\n                                }\r\n                            }\r\n                        }\r\n                        var P = this.V;\r\n                        if (!f && m === 4 && !P) {\r\n                            P = new Int32Array([-256, 255, -256, 255, -256, 255, -256, 255])\r\n                        }\r\n                        if (P) {\r\n                            for (U = 0; U < j;) {\r\n                                for (z = 0, J = 0; z < m; z++, U++, J += 2) {\r\n                                    v[U] = (v[U] * P[J] >> 8) + P[J + 1]\r\n                                }\r\n                            }\r\n                        }\r\n                        return v\r\n                    }, get f() {\r\n                        if (this.b) {\r\n                            return !!this.b.a\r\n                        }\r\n                        if (this.p === 3) {\r\n                            if (this.N === 0) {\r\n                                return !1\r\n                            } else if (this.W[0].index === 82 && this.W[1].index === 71 && this.W[2].index === 66) {\r\n                                return !1\r\n                            }\r\n                            return !0\r\n                        }\r\n                        if (this.N === 1) {\r\n                            return !0\r\n                        }\r\n                        return !1\r\n                    }, z: function aj(Q) {\r\n                        var h, f, G;\r\n                        for (var n = 0, E = Q.length; n < E; n += 3) {\r\n                            h = Q[n];\r\n                            f = Q[n + 1];\r\n                            G = Q[n + 2];\r\n                            Q[n] = h - 179.456 + 1.402 * G;\r\n                            Q[n + 1] = h + 135.459 - .344 * f - .714 * G;\r\n                            Q[n + 2] = h - 226.816 + 1.772 * f\r\n                        }\r\n                        return Q\r\n                    }, O: function aa(Q) {\r\n                        var h, f, G, n, E = 0;\r\n                        for (var a = 0, C = Q.length; a < C; a += 4) {\r\n                            h = Q[a];\r\n                            f = Q[a + 1];\r\n                            G = Q[a + 2];\r\n                            n = Q[a + 3];\r\n                            Q[E++] = -122.67195406894 + f * (-660635669420364e-19 * f + .000437130475926232 * G - 54080610064599e-18 * h + .00048449797120281 * n - .154362151871126) + G * (-.000957964378445773 * G + .000817076911346625 * h - .00477271405408747 * n + 1.53380253221734) + h * (.000961250184130688 * h - .00266257332283933 * n + .48357088451265) + n * (-.000336197177618394 * n + .484791561490776);\r\n                            Q[E++] = 107.268039397724 + f * (219927104525741e-19 * f - .000640992018297945 * G + .000659397001245577 * h + .000426105652938837 * n - .176491792462875) + G * (-.000778269941513683 * G + .00130872261408275 * h + .000770482631801132 * n - .151051492775562) + h * (.00126935368114843 * h - .00265090189010898 * n + .25802910206845) + n * (-.000318913117588328 * n - .213742400323665);\r\n                            Q[E++] = -20.810012546947 + f * (-.000570115196973677 * f - 263409051004589e-19 * G + .0020741088115012 * h - .00288260236853442 * n + .814272968359295) + G * (-153496057440975e-19 * G - .000132689043961446 * h + .000560833691242812 * n - .195152027534049) + h * (.00174418132927582 * h - .00255243321439347 * n + .116935020465145) + n * (-.000343531996510555 * n + .24165260232407)\r\n                        }\r\n                        return Q.subarray(0, E)\r\n                    }, r: function a3(Q) {\r\n                        var h, f, G;\r\n                        for (var n = 0, E = Q.length; n < E; n += 4) {\r\n                            h = Q[n];\r\n                            f = Q[n + 1];\r\n                            G = Q[n + 2];\r\n                            Q[n] = 434.456 - h - 1.402 * G;\r\n                            Q[n + 1] = 119.541 - h + .344 * f + .714 * G;\r\n                            Q[n + 2] = 481.816 - h - 1.772 * f\r\n                        }\r\n                        return Q\r\n                    }, U: function as(Q) {\r\n                        var h, f, G, n, E = 0;\r\n                        for (var a = 0, C = Q.length; a < C; a += 4) {\r\n                            h = Q[a];\r\n                            f = Q[a + 1];\r\n                            G = Q[a + 2];\r\n                            n = Q[a + 3];\r\n                            Q[E++] = 255 + h * (-6747147073602441e-20 * h + .0008379262121013727 * f + .0002894718188643294 * G + .003264231057537806 * n - 1.1185611867203937) + f * (26374107616089404e-21 * f - 8626949158638572e-20 * G - .0002748769067499491 * n - .02155688794978967) + G * (-3878099212869363e-20 * G - .0003267808279485286 * n + .0686742238595345) - n * (.0003361971776183937 * n + .7430659151342254);\r\n                            Q[E++] = 255 + h * (.00013596372813588848 * h + .000924537132573585 * f + .00010567359618683593 * G + .0004791864687436512 * n - .3109689587515875) + f * (-.00023545346108370344 * f + .0002702845253534714 * G + .0020200308977307156 * n - .7488052167015494) + G * (6834815998235662e-20 * G + .00015168452363460973 * n - .09751927774728933) - n * (.0003189131175883281 * n + .7364883807733168);\r\n                            Q[E++] = 255 + h * (13598650411385308e-21 * h + .00012423956175490851 * f + .0004751985097583589 * G - 36729317476630424e-22 * n - .05562186980264034) + f * (.00016141380598724676 * f + .0009692239130725186 * G + .0007782692450036253 * n - .44015232367526463) + G * (5.068882914068769e-7 * G + .0017778369011375071 * n - .7591454649749609) - n * (.0003435319965105553 * n + .7063770186160144)\r\n                        }\r\n                        return Q.subarray(0, E)\r\n                    }, getData: function(Q) {\r\n                        var h = Q.width, f = Q.height, G = Q.forceRGB, n = Q.isSourcePDF;\r\n                        if (this.p > 4) {\r\n                            throw new W(\"Unsupported color mode\")\r\n                        }\r\n                        var E = this.Y(h, f, n);\r\n                        if (this.p === 1 && G) {\r\n                            var a = E.length, C = new Uint8ClampedArray(a * 3), F = 0;\r\n                            for (var d = 0; d < a; d++) {\r\n                                var T = E[d];\r\n                                C[F++] = T;\r\n                                C[F++] = T;\r\n                                C[F++] = T\r\n                            }\r\n                            return C\r\n                        } else if (this.p === 3 && this.f) {\r\n                            return this.z(E)\r\n                        } else if (this.p === 4) {\r\n                            if (this.f) {\r\n                                if (G) {\r\n                                    return this.O(E)\r\n                                }\r\n                                return this.r(E)\r\n                            } else if (G) {\r\n                                return this.U(E)\r\n                            }\r\n                        }\r\n                        return E\r\n                    }\r\n                };\r\n                return ak\r\n            }();\r\n\r\n            function a9(p, t) {\r\n                return p[t] << 24 >> 24\r\n            }\r\n\r\n            function Z(p, t) {\r\n                return p[t] << 8 | p[t + 1]\r\n            }\r\n\r\n            function am(p, t) {\r\n                return (p[t] << 24 | p[t + 1] << 16 | p[t + 2] << 8 | p[t + 3]) >>> 0\r\n            }\r\n\r\n            UTIF.JpegDecoder = ak\r\n        }());\r\n\r\n//UTIF.JpegDecoder = PDFJS.JpegImage;\r\n\r\n\r\n        UTIF.encodeImage = function(rgba, w, h, metadata) {\r\n            var idf = {\r\n                \"t256\": [w],\r\n                \"t257\": [h],\r\n                \"t258\": [8, 8, 8, 8],\r\n                \"t259\": [1],\r\n                \"t262\": [2],\r\n                \"t273\": [1000], // strips offset\r\n                \"t277\": [4],\r\n                \"t278\": [h], /* rows per strip */\r\n                \"t279\": [w * h * 4], // strip byte counts\r\n                \"t282\": [[72, 1]],\r\n                \"t283\": [[72, 1]],\r\n                \"t284\": [1],\r\n                \"t286\": [[0, 1]],\r\n                \"t287\": [[0, 1]],\r\n                \"t296\": [1],\r\n                \"t305\": [\"Photopea (utif.js)\"],\r\n                \"t338\": [1]\r\n            };\r\n            if (metadata) {\r\n                for (var i in metadata) {\r\n                    idf[i] = metadata[i];\r\n                }\r\n            }\r\n\r\n            var prfx = new Uint8Array(UTIF.encode([idf]));\r\n            var img = new Uint8Array(rgba);\r\n            var data = new Uint8Array(1000 + w * h * 4);\r\n            for (var i = 0; i < prfx.length; i++) {\r\n                data[i] = prfx[i];\r\n            }\r\n            for (var i = 0; i < img.length; i++) {\r\n                data[1000 + i] = img[i];\r\n            }\r\n            return data.buffer;\r\n        }\r\n\r\n        UTIF.encode = function(ifds) {\r\n            var LE = false;\r\n            var data = new Uint8Array(20000), offset = 4, bin = LE ? UTIF._binLE : UTIF._binBE;\r\n            data[0] = data[1] = LE ? 73 : 77;\r\n            bin.writeUshort(data, 2, 42);\r\n\r\n            var ifdo = 8;\r\n            bin.writeUint(data, offset, ifdo);\r\n            offset += 4;\r\n            for (var i = 0; i < ifds.length; i++) {\r\n                var noffs = UTIF._writeIFD(bin, UTIF._types.basic, data, ifdo, ifds[i]);\r\n                ifdo = noffs[1];\r\n                if (i < ifds.length - 1) {\r\n                    if ((ifdo & 3) != 0) {\r\n                        ifdo += (4 - (ifdo & 3));\r\n                    }  // make each IFD start at multiple of 4\r\n                    bin.writeUint(data, noffs[0], ifdo);\r\n                }\r\n            }\r\n            return data.slice(0, ifdo).buffer;\r\n        }\r\n\r\n        UTIF.decode = function(buff, prm) {\r\n            if (prm == null) {\r\n                prm = {parseMN: true, debug: false};\r\n            }  // read MakerNote, debug\r\n            var data = new Uint8Array(buff), offset = 0;\r\n\r\n            var id = UTIF._binBE.readASCII(data, offset, 2);\r\n            offset += 2;\r\n            var bin = id == \"II\" ? UTIF._binLE : UTIF._binBE;\r\n            var num = bin.readUshort(data, offset);\r\n            offset += 2;\r\n\r\n            var ifdo = bin.readUint(data, offset);\r\n            offset += 4;\r\n            var ifds = [];\r\n            while (true) {\r\n                var cnt = bin.readUshort(data, ifdo), typ = bin.readUshort(data, ifdo + 4);\r\n                if (cnt != 0) {\r\n                    if (typ < 1 || 13 < typ) {\r\n                        log(\"error in TIFF\");\r\n                        break\r\n                    }\r\n                }\r\n                ;\r\n                UTIF._readIFD(bin, data, ifdo, ifds, 0, prm);\r\n\r\n                ifdo = bin.readUint(data, ifdo + 2 + cnt * 12);\r\n                if (ifdo == 0) {\r\n                    break;\r\n                }\r\n            }\r\n            return ifds;\r\n        }\r\n\r\n        UTIF.decodeImage = function(buff, img, ifds) {\r\n            if (img.data) {\r\n                return;\r\n            }\r\n            var data = new Uint8Array(buff);\r\n            var id = UTIF._binBE.readASCII(data, 0, 2);\r\n\r\n            if (img[\"t256\"] == null) {\r\n                return;\r\n            }\t// No width => probably not an image\r\n            img.isLE = id == \"II\";\r\n            img.width = img[\"t256\"][0];  //delete img[\"t256\"];\r\n            img.height = img[\"t257\"][0];  //delete img[\"t257\"];\r\n\r\n            var cmpr = img[\"t259\"] ? img[\"t259\"][0] : 1;  //delete img[\"t259\"];\r\n            var fo = img[\"t266\"] ? img[\"t266\"][0] : 1;  //delete img[\"t266\"];\r\n            if (img[\"t284\"] && img[\"t284\"][0] == 2) {\r\n                log(\"PlanarConfiguration 2 should not be used!\");\r\n            }\r\n            if (cmpr == 7 && img[\"t258\"] && img[\"t258\"].length > 3) {\r\n                img[\"t258\"] = img[\"t258\"].slice(0, 3);\r\n            }\r\n\r\n            var spp = img[\"t277\"] ? img[\"t277\"][0] : 1;\r\n            var bps = img[\"t258\"] ? img[\"t258\"][0] : 1;\r\n            var bipp = bps * spp;  // bits per pixel\r\n            /*\r\n\tvar bipp;  // bits per pixel\r\n\tif(img[\"t258\"]) bipp = Math.min(32,img[\"t258\"][0])*img[\"t258\"].length;\r\n\telse            bipp = (img[\"t277\"]?img[\"t277\"][0]:1);\r\n\t*/\r\n            // Some .NEF files have t258==14, even though they use 16 bits per pixel\r\n            if (cmpr == 1 && img[\"t279\"] != null && img[\"t278\"] && img[\"t262\"][0] == 32803) {\r\n                bipp = Math.round((img[\"t279\"][0] * 8) / (img.width * img[\"t278\"][0]));\r\n            }\r\n            if (img[\"t50885\"] && img[\"t50885\"][0] == 4) {\r\n                bipp = img[\"t258\"][0] * 3;\r\n            }  // RAW_CANON_40D_SRAW_V103.CR2\r\n            var bipl = Math.ceil(img.width * bipp / 8) * 8;\r\n            var soff = img[\"t273\"];\r\n            if (soff == null || img[\"t322\"]) {\r\n                soff = img[\"t324\"];\r\n            }\r\n            var bcnt = img[\"t279\"];\r\n            if (cmpr == 1 && soff.length == 1) {\r\n                bcnt = [img.height * (bipl >>> 3)];\r\n            }\r\n            if (bcnt == null || img[\"t322\"]) {\r\n                bcnt = img[\"t325\"];\r\n            }\r\n            //bcnt[0] = Math.min(bcnt[0], data.length);  // Hasselblad, \"RAW_HASSELBLAD_H3D39II.3FR\"\r\n            var bytes = new Uint8Array(img.height * (bipl >>> 3)), bilen = 0;\r\n\r\n            if (img[\"t322\"] != null) // tiled\r\n            {\r\n                var tw = img[\"t322\"][0], th = img[\"t323\"][0];\r\n                var tx = Math.floor((img.width + tw - 1) / tw);\r\n                var ty = Math.floor((img.height + th - 1) / th);\r\n                var tbuff = new Uint8Array(Math.ceil(tw * th * bipp / 8) | 0);\r\n                console.log(\"====\", tx, ty);\r\n                for (var y = 0; y < ty; y++) {\r\n                    for (var x = 0; x < tx; x++) {\r\n                        var i = y * tx + x;\r\n                        tbuff.fill(0);\r\n                        UTIF.decode._decompress(img, ifds, data, soff[i], bcnt[i], cmpr, tbuff, 0, fo, tw, th);\r\n                        // Might be required for 7 too. Need to check\r\n                        if (cmpr == 6) {\r\n                            bytes = tbuff;\r\n                        } else {\r\n                            UTIF._copyTile(tbuff, Math.ceil(tw * bipp / 8) | 0, th, bytes, Math.ceil(img.width * bipp / 8) | 0, img.height, Math.ceil(x * tw * bipp / 8) | 0, y * th);\r\n                        }\r\n                    }\r\n                }\r\n                bilen = bytes.length * 8;\r\n            } else\t// stripped\r\n            {\r\n                if (soff == null) {\r\n                    return;\r\n                }\r\n                var rps = img[\"t278\"] ? img[\"t278\"][0] : img.height;\r\n                rps = Math.min(rps, img.height);\r\n                //console.log(\"====\", img.width, rps);\r\n                for (var i = 0; i < soff.length; i++) {\r\n                    UTIF.decode._decompress(img, ifds, data, soff[i], bcnt[i], cmpr, bytes, Math.ceil(bilen / 8) | 0, fo, img.width, rps);\r\n                    bilen += bipl * rps;\r\n                }\r\n                bilen = Math.min(bilen, bytes.length * 8);\r\n            }\r\n            img.data = new Uint8Array(bytes.buffer, 0, Math.ceil(bilen / 8) | 0);\r\n        }\r\n\r\n        UTIF.decode._decompress = function(img, ifds, data, off, len, cmpr, tgt, toff, fo, w, h)  // fill order\r\n        {\r\n            if (img[\"t271\"] && img[\"t271\"][0] == \"Panasonic\" && img[\"t45\"] && img[\"t45\"][0] == 6) {\r\n                cmpr = 34316;\r\n            }\r\n            //console.log(\"compression\", cmpr);\r\n            //var time = Date.now();\r\n            if (false) {\r\n            } else if (cmpr == 1/* || (len==tgt.length && cmpr!=32767)*/) {\r\n                for (var j = 0; j < len; j++) {\r\n                    tgt[toff + j] = data[off + j];\r\n                }\r\n            } else if (cmpr == 2) {\r\n                UTIF.decode._decodeG2(data, off, len, tgt, toff, w, fo);\r\n            } else if (cmpr == 3) {\r\n                UTIF.decode._decodeG3(data, off, len, tgt, toff, w, fo, img[\"t292\"] ? ((img[\"t292\"][0] & 1) == 1) : false);\r\n            } else if (cmpr == 4) {\r\n                UTIF.decode._decodeG4(data, off, len, tgt, toff, w, fo);\r\n            } else if (cmpr == 5) {\r\n                UTIF.decode._decodeLZW(data, off, len, tgt, toff, 8);\r\n            } else if (cmpr == 6) {\r\n                UTIF.decode._decodeOldJPEG(img, data, off, len, tgt, toff);\r\n            } else if (cmpr == 7 || cmpr == 34892) {\r\n                UTIF.decode._decodeNewJPEG(img, data, off, len, tgt, toff);\r\n            } else if (cmpr == 8 || cmpr == 32946) {\r\n                var src = new Uint8Array(data.buffer, off + 2, len - 6);\r\n                var bin = UTIF._inflateRaw(src);\r\n                if (toff + bin.length <= tgt.length) {\r\n                    tgt.set(bin, toff);\r\n                }\r\n            } else if (cmpr == 9) {\r\n                UTIF.decode._decodeVC5(data, off, len, tgt, toff, img[\"t33422\"]);\r\n            } else if (cmpr == 32767) {\r\n                UTIF.decode._decodeARW(img, data, off, len, tgt, toff);\r\n            } else if (cmpr == 32773) {\r\n                UTIF.decode._decodePackBits(data, off, len, tgt, toff);\r\n            } else if (cmpr == 32809) {\r\n                UTIF.decode._decodeThunder(data, off, len, tgt, toff);\r\n            } else if (cmpr == 34316) {\r\n                UTIF.decode._decodePanasonic(img, data, off, len, tgt, toff);\r\n            } else if (cmpr == 34713) //for(var j=0; j<len; j++) tgt[toff+j] = data[off+j];\r\n            {\r\n                UTIF.decode._decodeNikon(img, ifds, data, off, len, tgt, toff);\r\n            } else if (cmpr == 34676) {\r\n                UTIF.decode._decodeLogLuv32(img, data, off, len, tgt, toff);\r\n            } else {\r\n                log(\"Unknown compression\", cmpr);\r\n            }\r\n\r\n            //console.log(Date.now()-time);\r\n\r\n            var bps = (img[\"t258\"] ? Math.min(32, img[\"t258\"][0]) : 1);\r\n            var noc = (img[\"t277\"] ? img[\"t277\"][0] : 1), bpp = (bps * noc) >>> 3, bpl = Math.ceil(bps * noc * w / 8);\r\n\r\n            // convert to Little Endian  /*\r\n            if (bps == 16 && !img.isLE && img[\"t33422\"] == null)  // not DNG\r\n            {\r\n                for (var y = 0; y < h; y++) {\r\n                    //console.log(\"fixing endianity\");\r\n                    var roff = toff + y * bpl;\r\n                    for (var x = 1; x < bpl; x += 2) {\r\n                        var t = tgt[roff + x];\r\n                        tgt[roff + x] = tgt[roff + x - 1];\r\n                        tgt[roff + x - 1] = t;\r\n                    }\r\n                }\r\n            }  //*/\r\n\r\n            if (img[\"t317\"] && img[\"t317\"][0] == 2) {\r\n                for (var y = 0; y < h; y++) {\r\n                    var ntoff = toff + y * bpl;\r\n                    if (bps == 16) {\r\n                        for (var j = bpp; j < bpl; j += 2) {\r\n                            var nv = ((tgt[ntoff + j + 1] << 8) | tgt[ntoff + j]) + ((tgt[ntoff + j - bpp + 1] << 8) | tgt[ntoff + j - bpp]);\r\n                            tgt[ntoff + j] = nv & 255;\r\n                            tgt[ntoff + j + 1] = (nv >>> 8) & 255;\r\n                        }\r\n                    } else if (noc == 3) {\r\n                        for (var j = 3; j < bpl; j += 3) {\r\n                            tgt[ntoff + j] = (tgt[ntoff + j] + tgt[ntoff + j - 3]) & 255;\r\n                            tgt[ntoff + j + 1] = (tgt[ntoff + j + 1] + tgt[ntoff + j - 2]) & 255;\r\n                            tgt[ntoff + j + 2] = (tgt[ntoff + j + 2] + tgt[ntoff + j - 1]) & 255;\r\n                        }\r\n                    } else {\r\n                        for (var j = bpp; j < bpl; j++) {\r\n                            tgt[ntoff + j] = (tgt[ntoff + j] + tgt[ntoff + j - bpp]) & 255;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        UTIF.decode._decodePanasonic = function(img, data, off, len, tgt, toff) {\r\n\r\n            var img_buffer = data.buffer;\r\n\r\n            var rawWidth = img[\"t2\"][0];\r\n            var rawHeight = img[\"t3\"][0];\r\n            var bitsPerSample = img[\"t10\"][0];\r\n            var RW2_Format = img[\"t45\"][0];\r\n\r\n            var bidx = 0;\r\n            var imageIndex = 0;\r\n            var vpos = 0;\r\n            var byte = 0;\r\n            var arr_a, arr_b;\r\n            var bytes = (RW2_Format == 6 ? new Uint32Array(18) : new Uint8Array(16));\r\n            var i, j, sh, pred = [0, 0], nonz = [0, 0], isOdd, idx = 0, pixel_base;\r\n            var row, col, crow;\r\n            var buffer = new Uint8Array(0x4000);\r\n            var result = new Uint16Array(tgt.buffer);\r\n\r\n            function getDataRaw(bits) {\r\n                if (vpos == 0) {\r\n                    var arr_a = new Uint8Array(img_buffer, off + imageIndex + 0x1ff8, 0x4000 - 0x1ff8);\r\n                    var arr_b = new Uint8Array(img_buffer, off + imageIndex, 0x1ff8);\r\n                    buffer.set(arr_a);\r\n                    buffer.set(arr_b, arr_a.length);\r\n                    imageIndex += 0x4000;\r\n                }\r\n                if (RW2_Format == 5) {\r\n                    for (i = 0; i < 16; i++) {\r\n                        bytes[i] = buffer[vpos++];\r\n                        vpos &= 0x3FFF;\r\n                    }\r\n                } else {\r\n                    vpos = (vpos - bits) & 0x1ffff;\r\n                    byte = vpos >> 3 ^ 0x3ff0;\r\n                    return (buffer[byte] | buffer[byte + 1] << 8) >> (vpos & 7) & ~((-1) << bits);\r\n                }\r\n            }\r\n\r\n            // Raw Format 6\r\n            function getBufferDataRW6(i) {\r\n                return buffer[vpos + 15 - i];\r\n            }\r\n\r\n            function readPageRW6() {\r\n                bytes[0] = (getBufferDataRW6(0) << 6) | (getBufferDataRW6(1) >> 2); // 14 bit\r\n                bytes[1] = (((getBufferDataRW6(1) & 0x3) << 12) | (getBufferDataRW6(2) << 4) | (getBufferDataRW6(3) >> 4)) & 0x3fff;\r\n                bytes[2] = (getBufferDataRW6(3) >> 2) & 0x3;\r\n                bytes[3] = ((getBufferDataRW6(3) & 0x3) << 8) | getBufferDataRW6(4);\r\n                bytes[4] = (getBufferDataRW6(5) << 2) | (getBufferDataRW6(6) >> 6);\r\n                bytes[5] = ((getBufferDataRW6(6) & 0x3f) << 4) | (getBufferDataRW6(7) >> 4);\r\n                bytes[6] = (getBufferDataRW6(7) >> 2) & 0x3;\r\n                bytes[7] = ((getBufferDataRW6(7) & 0x3) << 8) | getBufferDataRW6(8);\r\n                bytes[8] = ((getBufferDataRW6(9) << 2) & 0x3fc) | (getBufferDataRW6(10) >> 6);\r\n                bytes[9] = ((getBufferDataRW6(10) << 4) | (getBufferDataRW6(11) >> 4)) & 0x3ff;\r\n                bytes[10] = (getBufferDataRW6(11) >> 2) & 0x3;\r\n                bytes[11] = ((getBufferDataRW6(11) & 0x3) << 8) | getBufferDataRW6(12);\r\n                bytes[12] = (((getBufferDataRW6(13) << 2) & 0x3fc) | getBufferDataRW6(14) >> 6) & 0x3ff;\r\n                bytes[13] = ((getBufferDataRW6(14) << 4) | (getBufferDataRW6(15) >> 4)) & 0x3ff;\r\n                vpos += 16;\r\n                byte = 0;\r\n            }\r\n\r\n            function readPageRw6_bps12() {\r\n                bytes[0] = (getBufferDataRW6(0) << 4) | (getBufferDataRW6(1) >> 4);\r\n                bytes[1] = (((getBufferDataRW6(1) & 0xf) << 8) | (getBufferDataRW6(2))) & 0xfff;\r\n                bytes[2] = (getBufferDataRW6(3) >> 6) & 0x3;\r\n                bytes[3] = ((getBufferDataRW6(3) & 0x3f) << 2) | (getBufferDataRW6(4) >> 6);\r\n                bytes[4] = ((getBufferDataRW6(4) & 0x3f) << 2) | (getBufferDataRW6(5) >> 6);\r\n                bytes[5] = ((getBufferDataRW6(5) & 0x3f) << 2) | (getBufferDataRW6(6) >> 6);\r\n                bytes[6] = (getBufferDataRW6(6) >> 4) & 0x3;\r\n                bytes[7] = ((getBufferDataRW6(6) & 0xf) << 4) | (getBufferDataRW6(7) >> 4);\r\n                bytes[8] = ((getBufferDataRW6(7) & 0xf) << 4) | (getBufferDataRW6(8) >> 4);\r\n                bytes[9] = ((getBufferDataRW6(8) & 0xf) << 4) | (getBufferDataRW6(9) >> 4);\r\n                bytes[10] = (getBufferDataRW6(9) >> 2) & 0x3;\r\n                bytes[11] = ((getBufferDataRW6(9) & 0x3) << 6) | (getBufferDataRW6(10) >> 2);\r\n                bytes[12] = ((getBufferDataRW6(10) & 0x3) << 6) | (getBufferDataRW6(11) >> 2);\r\n                bytes[13] = ((getBufferDataRW6(11) & 0x3) << 6) | (getBufferDataRW6(12) >> 2);\r\n                bytes[14] = getBufferDataRW6(12) & 0x3;\r\n                bytes[15] = getBufferDataRW6(13);\r\n                bytes[16] = getBufferDataRW6(14);\r\n                bytes[17] = getBufferDataRW6(15);\r\n\r\n                vpos += 16;\r\n                byte = 0;\r\n            }\r\n\r\n            // Main loop\r\n            function resetPredNonzeros() {\r\n                pred[0] = 0;\r\n                pred[1] = 0;\r\n                nonz[0] = 0;\r\n                nonz[1] = 0;\r\n            }\r\n\r\n            if (RW2_Format == 7) {\r\n                throw RW2_Format;\r\n\r\n                // Skatch of version 7\r\n                /*\r\n                    var pixels_per_block = bitsPerSample == 14 ? 9 : 10;\r\n                        rowbytes = 0|(rawWidth / pixels_per_block * 16);\r\n                    for (row = 0; row < rawHeight - 15; row += 16) {\r\n                        var rowstoread = Math.min(16, rawHeight - row);\r\n                        var readlen = rowbytes*rowstoread;\r\n                        buffer = new Uint8Array(image.slice(bidx, bidx+readlen));\r\n                        vpos = 0;\r\n                        bidx += readlen;\r\n                        i = 0;\r\n                        for (crow = 0; crow < rowstoread; crow++) {\r\n                            idx = (row + crow) * rawWidth;\r\n                            for (col = 0; col <= rawWidth - pixels_per_block; col += pixels_per_block) {\r\n                                for(j=0; j < pixels_per_block; j++) bytes[j] = buffer[i++];\r\n                                if (bitsPerSample == 12) {\r\n                                    result[idx ] = ((bytes[1] & 0xF) << 8) + bytes[0];\r\n                                    result[idx + 1] = 16 * bytes[2] + (bytes[1] >> 4);\r\n                                    result[idx + 2] = ((bytes[4] & 0xF) << 8) + bytes[3];\r\n                                    result[idx + 3] = 16 * bytes[5] + (bytes[4] >> 4);\r\n                                    result[idx + 4] = ((bytes[7] & 0xF) << 8) + bytes[6];\r\n                                    result[idx + 5] = 16 * bytes[8] + (bytes[7] >> 4);\r\n                                    result[idx + 6] = ((bytes[10] & 0xF) << 8) + bytes[9];\r\n                                    result[idx + 7] = 16 * bytes[11] + (bytes[10] >> 4);\r\n                                    result[idx + 8] = ((bytes[13] & 0xF) << 8) + bytes[12];\r\n                                    result[idx + 9] = 16 * bytes[14] + (bytes[13] >> 4);\r\n                                } else if (bitsPerSample == 14) {\r\n                                    result[idx] = bytes[0] + ((bytes[1] & 0x3F) << 8);\r\n                                    result[idx + 1] = (bytes[1] >> 6) + 4 * (bytes[2]) + ((bytes[3] & 0xF) << 10);\r\n                                    result[idx + 2] = (bytes[3] >> 4) + 16 * (bytes[4]) + ((bytes[5] & 3) << 12);\r\n                                    result[idx + 3] = ((bytes[5] & 0xFC) >> 2) + (bytes[6] << 6);\r\n                                    result[idx + 4] = bytes[7] + ((bytes[8] & 0x3F) << 8);\r\n                                    result[idx + 5] = (bytes[8] >> 6) + 4 * bytes[9] + ((bytes[10] & 0xF) << 10);\r\n                                    result[idx + 6] = (bytes[10] >> 4) + 16 * bytes[11] + ((bytes[12] & 3) << 12);\r\n                                    result[idx + 7] = ((bytes[12] & 0xFC) >> 2) + (bytes[13] << 6);\r\n                                    result[idx + 8] = bytes[14] + ((bytes[15] & 0x3F) << 8);\r\n                                }\r\n                            }\r\n                        }\r\n                    }\r\n                    */\r\n            } else if (RW2_Format == 6) {\r\n                var is12bit = bitsPerSample == 12,\r\n                        readPageRw6Fn = is12bit ? readPageRw6_bps12 : readPageRW6,\r\n                        pixelsPerBlock = is12bit ? 14 : 11,\r\n                        pixelbase0 = is12bit ? 0x80 : 0x200,\r\n                        pixelbase_compare = is12bit ? 0x800 : 0x2000,\r\n                        spix_compare = is12bit ? 0x3fff : 0xffff,\r\n                        pixel_mask = is12bit ? 0xfff : 0x3fff,\r\n                        blocksperrow = rawWidth / pixelsPerBlock,\r\n                        rowbytes = blocksperrow * 16,\r\n                        bufferSize = is12bit ? 18 : 14;\r\n\r\n                for (row = 0; row < rawHeight - 15; row += 16) {\r\n                    var rowstoread = Math.min(16, rawHeight - row);\r\n                    var readlen = rowbytes * rowstoread;\r\n                    buffer = new Uint8Array(img_buffer, off + bidx, readlen);//new Uint8Array(image.slice(bidx, bidx+readlen));\r\n                    vpos = 0;\r\n                    bidx += readlen;\r\n                    for (crow = 0, col = 0; crow < rowstoread; crow++, col = 0) {\r\n                        idx = (row + crow) * rawWidth;\r\n                        for (var rblock = 0; rblock < blocksperrow; rblock++) {\r\n                            readPageRw6Fn();\r\n                            resetPredNonzeros();\r\n                            sh = 0;\r\n                            pixel_base = 0;\r\n                            for (i = 0; i < pixelsPerBlock; i++) {\r\n                                isOdd = i & 1;\r\n                                if (i % 3 == 2) {\r\n                                    var base = byte < bufferSize ? bytes[byte++] : 0;\r\n                                    if (base == 3) {\r\n                                        base = 4;\r\n                                    }\r\n                                    pixel_base = pixelbase0 << base;\r\n                                    sh = 1 << base;\r\n                                }\r\n                                var epixel = byte < bufferSize ? bytes[byte++] : 0;\r\n                                if (pred[isOdd]) {\r\n                                    epixel *= sh;\r\n                                    if (pixel_base < pixelbase_compare && nonz[isOdd] > pixel_base) {\r\n                                        epixel += nonz[isOdd] - pixel_base;\r\n                                    }\r\n                                    nonz[isOdd] = epixel;\r\n                                } else {\r\n                                    pred[isOdd] = epixel;\r\n                                    if (epixel) {\r\n                                        nonz[isOdd] = epixel;\r\n                                    } else {\r\n                                        epixel = nonz[isOdd];\r\n                                    }\r\n                                }\r\n                                result[idx + col++] = (epixel - 0xf) <= spix_compare ? (epixel - 0xf) & spix_compare : ((epixel + 0x7ffffff1) >> 0x1f) & pixel_mask;\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n            } else if (RW2_Format == 5) {\r\n                var blockSize = bitsPerSample == 12 ? 10 : 9;\r\n                for (row = 0; row < rawHeight; row++) {\r\n                    for (col = 0; col < rawWidth; col += blockSize) {\r\n                        getDataRaw(0);\r\n                        // Tuhle podminku pouziva i RW2_Format 7\r\n                        if (bitsPerSample == 12) {\r\n                            result[idx++] = ((bytes[1] & 0xF) << 8) + bytes[0];\r\n                            result[idx++] = 16 * bytes[2] + (bytes[1] >> 4);\r\n                            result[idx++] = ((bytes[4] & 0xF) << 8) + bytes[3];\r\n                            result[idx++] = 16 * bytes[5] + (bytes[4] >> 4);\r\n                            result[idx++] = ((bytes[7] & 0xF) << 8) + bytes[6];\r\n                            result[idx++] = 16 * bytes[8] + (bytes[7] >> 4);\r\n                            result[idx++] = ((bytes[10] & 0xF) << 8) + bytes[9];\r\n                            result[idx++] = 16 * bytes[11] + (bytes[10] >> 4);\r\n                            result[idx++] = ((bytes[13] & 0xF) << 8) + bytes[12];\r\n                            result[idx++] = 16 * bytes[14] + (bytes[13] >> 4);\r\n                        } else if (bitsPerSample == 14) {\r\n                            result[idx++] = bytes[0] + ((bytes[1] & 0x3F) << 8);\r\n                            result[idx++] = (bytes[1] >> 6) + 4 * (bytes[2]) + ((bytes[3] & 0xF) << 10);\r\n                            result[idx++] = (bytes[3] >> 4) + 16 * (bytes[4]) + ((bytes[5] & 3) << 12);\r\n                            result[idx++] = ((bytes[5] & 0xFC) >> 2) + (bytes[6] << 6);\r\n                            result[idx++] = bytes[7] + ((bytes[8] & 0x3F) << 8);\r\n                            result[idx++] = (bytes[8] >> 6) + 4 * bytes[9] + ((bytes[10] & 0xF) << 10);\r\n                            result[idx++] = (bytes[10] >> 4) + 16 * bytes[11] + ((bytes[12] & 3) << 12);\r\n                            result[idx++] = ((bytes[12] & 0xFC) >> 2) + (bytes[13] << 6);\r\n                            result[idx++] = bytes[14] + ((bytes[15] & 0x3F) << 8);\r\n                        }\r\n                    }\r\n                }\r\n                //console.log(result[1000000 - 1])\r\n            } else if (RW2_Format == 4) {\r\n                for (row = 0; row < rawHeight; row++) {\r\n                    for (col = 0; col < rawWidth; col++) {\r\n                        i = col % 14;\r\n                        isOdd = i & 1;\r\n                        if (i == 0) {\r\n                            resetPredNonzeros();\r\n                        }\r\n                        if (i % 3 == 2) {\r\n                            sh = 4 >> (3 - getDataRaw(2));\r\n                        }\r\n                        if (nonz[isOdd]) {\r\n                            j = getDataRaw(8);\r\n                            if (j != 0) {\r\n                                pred[isOdd] -= 0x80 << sh;\r\n                                if (pred[isOdd] < 0 || sh == 4) {\r\n                                    pred[isOdd] &= ~((-1) << sh);\r\n                                }\r\n                                pred[isOdd] += j << sh;\r\n                            }\r\n                        } else {\r\n                            nonz[isOdd] = getDataRaw(8);\r\n                            if (nonz[isOdd] || i > 11) {\r\n                                pred[isOdd] = nonz[isOdd] << 4 | getDataRaw(4);\r\n                            }\r\n                        }\r\n                        result[idx++] = pred[col & 1];\r\n                    }\r\n                }\r\n            } else {\r\n                throw RW2_Format;\r\n            }\r\n        }\r\n\r\n\r\n        UTIF.decode._decodeVC5 = function() {\r\n            var x = [1, 0, 1, 0, 2, 2, 1, 1, 3, 7, 1, 2, 5, 25, 1, 3, 6, 48, 1, 4, 6, 54, 1, 5, 7, 111, 1, 8, 7, 99, 1, 6, 7, 105, 12, 0, 7, 107, 1, 7, 8, 209, 20, 0, 8, 212, 1, 9, 8, 220, 1, 10, 9, 393, 1, 11, 9, 394, 32, 0, 9, 416, 1, 12, 9, 427, 1, 13, 10, 887, 1, 18, 10, 784, 1, 14, 10, 790, 1, 15, 10, 835, 60, 0, 10, 852, 1, 16, 10, 885, 1, 17, 11, 1571, 1, 19, 11, 1668, 1, 20, 11, 1669, 100, 0, 11, 1707, 1, 21, 11, 1772, 1, 22, 12, 3547, 1, 29, 12, 3164, 1, 24, 12, 3166, 1, 25, 12, 3140, 1, 23, 12, 3413, 1, 26, 12, 3537, 1, 27, 12, 3539, 1, 28, 13, 7093, 1, 35, 13, 6283, 1, 30, 13, 6331, 1, 31, 13, 6335, 180, 0, 13, 6824, 1, 32, 13, 7072, 1, 33, 13, 7077, 320, 0, 13, 7076, 1, 34, 14, 12565, 1, 36, 14, 12661, 1, 37, 14, 12669, 1, 38, 14, 13651, 1, 39, 14, 14184, 1, 40, 15, 28295, 1, 46, 15, 28371, 1, 47, 15, 25320, 1, 42, 15, 25336, 1, 43, 15, 25128, 1, 41, 15, 27300, 1, 44, 15, 28293, 1, 45, 16, 50259, 1, 48, 16, 50643, 1, 49, 16, 50675, 1, 50, 16, 56740, 1, 53, 16, 56584, 1, 51, 16, 56588, 1, 52, 17, 113483, 1, 61, 17, 113482, 1, 60, 17, 101285, 1, 55, 17, 101349, 1, 56, 17, 109205, 1, 57, 17, 109207, 1, 58, 17, 100516, 1, 54, 17, 113171, 1, 59, 18, 202568, 1, 62, 18, 202696, 1, 63, 18, 218408, 1, 64, 18, 218412, 1, 65, 18, 226340, 1, 66, 18, 226356, 1, 67, 18, 226358, 1, 68, 19, 402068, 1, 69, 19, 405138, 1, 70, 19, 405394, 1, 71, 19, 436818, 1, 72, 19, 436826, 1, 73, 19, 452714, 1, 75, 19, 452718, 1, 76, 19, 452682, 1, 74, 20, 804138, 1, 77, 20, 810279, 1, 78, 20, 810790, 1, 79, 20, 873638, 1, 80, 20, 873654, 1, 81, 20, 905366, 1, 82, 20, 905430, 1, 83, 20, 905438, 1, 84, 21, 1608278, 1, 85, 21, 1620557, 1, 86, 21, 1621582, 1, 87, 21, 1621583, 1, 88, 21, 1747310, 1, 89, 21, 1810734, 1, 90, 21, 1810735, 1, 91, 21, 1810863, 1, 92, 21, 1810879, 1, 93, 22, 3621725, 1, 99, 22, 3621757, 1, 100, 22, 3241112, 1, 94, 22, 3494556, 1, 95, 22, 3494557, 1, 96, 22, 3494622, 1, 97, 22, 3494623, 1, 98, 23, 6482227, 1, 102, 23, 6433117, 1, 101, 23, 6989117, 1, 103, 23, 6989119, 1, 105, 23, 6989118, 1, 104, 23, 7243449, 1, 106, 23, 7243512, 1, 107, 24, 13978233, 1, 111, 24, 12964453, 1, 109, 24, 12866232, 1, 108, 24, 14486897, 1, 113, 24, 13978232, 1, 110, 24, 14486896, 1, 112, 24, 14487026, 1, 114, 24, 14487027, 1, 115, 25, 25732598, 1, 225, 25, 25732597, 1, 189, 25, 25732596, 1, 188, 25, 25732595, 1, 203, 25, 25732594, 1, 202, 25, 25732593, 1, 197, 25, 25732592, 1, 207, 25, 25732591, 1, 169, 25, 25732590, 1, 223, 25, 25732589, 1, 159, 25, 25732522, 1, 235, 25, 25732579, 1, 152, 25, 25732575, 1, 192, 25, 25732489, 1, 179, 25, 25732573, 1, 201, 25, 25732472, 1, 172, 25, 25732576, 1, 149, 25, 25732488, 1, 178, 25, 25732566, 1, 120, 25, 25732571, 1, 219, 25, 25732577, 1, 150, 25, 25732487, 1, 127, 25, 25732506, 1, 211, 25, 25732548, 1, 125, 25, 25732588, 1, 158, 25, 25732486, 1, 247, 25, 25732467, 1, 238, 25, 25732508, 1, 163, 25, 25732552, 1, 228, 25, 25732603, 1, 183, 25, 25732513, 1, 217, 25, 25732587, 1, 168, 25, 25732520, 1, 122, 25, 25732484, 1, 128, 25, 25732562, 1, 249, 25, 25732505, 1, 187, 25, 25732504, 1, 186, 25, 25732483, 1, 136, 25, 25928905, 1, 181, 25, 25732560, 1, 255, 25, 25732500, 1, 230, 25, 25732482, 1, 135, 25, 25732555, 1, 233, 25, 25732568, 1, 222, 25, 25732583, 1, 145, 25, 25732481, 1, 134, 25, 25732586, 1, 167, 25, 25732521, 1, 248, 25, 25732518, 1, 209, 25, 25732480, 1, 243, 25, 25732512, 1, 216, 25, 25732509, 1, 164, 25, 25732547, 1, 140, 25, 25732479, 1, 157, 25, 25732544, 1, 239, 25, 25732574, 1, 191, 25, 25732564, 1, 251, 25, 25732478, 1, 156, 25, 25732546, 1, 139, 25, 25732498, 1, 242, 25, 25732557, 1, 133, 25, 25732477, 1, 162, 25, 25732515, 1, 213, 25, 25732584, 1, 165, 25, 25732514, 1, 212, 25, 25732476, 1, 227, 25, 25732494, 1, 198, 25, 25732531, 1, 236, 25, 25732530, 1, 234, 25, 25732529, 1, 117, 25, 25732528, 1, 215, 25, 25732527, 1, 124, 25, 25732526, 1, 123, 25, 25732525, 1, 254, 25, 25732524, 1, 253, 25, 25732523, 1, 148, 25, 25732570, 1, 218, 25, 25732580, 1, 146, 25, 25732581, 1, 147, 25, 25732569, 1, 224, 25, 25732533, 1, 143, 25, 25732540, 1, 184, 25, 25732541, 1, 185, 25, 25732585, 1, 166, 25, 25732556, 1, 132, 25, 25732485, 1, 129, 25, 25732563, 1, 250, 25, 25732578, 1, 151, 25, 25732501, 1, 119, 25, 25732502, 1, 193, 25, 25732536, 1, 176, 25, 25732496, 1, 245, 25, 25732553, 1, 229, 25, 25732516, 1, 206, 25, 25732582, 1, 144, 25, 25732517, 1, 208, 25, 25732558, 1, 137, 25, 25732543, 1, 241, 25, 25732466, 1, 237, 25, 25732507, 1, 190, 25, 25732542, 1, 240, 25, 25732551, 1, 131, 25, 25732554, 1, 232, 25, 25732565, 1, 252, 25, 25732475, 1, 171, 25, 25732493, 1, 205, 25, 25732492, 1, 204, 25, 25732491, 1, 118, 25, 25732490, 1, 214, 25, 25928904, 1, 180, 25, 25732549, 1, 126, 25, 25732602, 1, 182, 25, 25732539, 1, 175, 25, 25732545, 1, 141, 25, 25732559, 1, 138, 25, 25732537, 1, 177, 25, 25732534, 1, 153, 25, 25732503, 1, 194, 25, 25732606, 1, 160, 25, 25732567, 1, 121, 25, 25732538, 1, 174, 25, 25732497, 1, 246, 25, 25732550, 1, 130, 25, 25732572, 1, 200, 25, 25732474, 1, 170, 25, 25732511, 1, 221, 25, 25732601, 1, 196, 25, 25732532, 1, 142, 25, 25732519, 1, 210, 25, 25732495, 1, 199, 25, 25732605, 1, 155, 25, 25732535, 1, 154, 25, 25732499, 1, 244, 25, 25732510, 1, 220, 25, 25732600, 1, 195, 25, 25732607, 1, 161, 25, 25732604, 1, 231, 25, 25732473, 1, 173, 25, 25732599, 1, 226, 26, 51465122, 1, 116, 26, 51465123, 0, 1],\r\n                    o, C, k, P = [3, 3, 3, 3, 2, 2, 2, 1, 1, 1], V = 24576, ar = 16384, H = 8192, az = ar | H;\r\n\r\n            function d(t) {\r\n                var E = t[1], h = t[0][E >>> 3] >>> 7 - (E & 7) & 1;\r\n                t[1]++;\r\n                return h\r\n            }\r\n\r\n            function ag(t, E) {\r\n                if (o == null) {\r\n                    o = {};\r\n                    for (var h = 0; h < x.length; h += 4) {\r\n                        o[x[h + 1]] = x.slice(h, h + 4)\r\n                    }\r\n                }\r\n                var L = d(t), g = o[L];\r\n                while (g == null) {\r\n                    L = L << 1 | d(t);\r\n                    g = o[L]\r\n                }\r\n                var n = g[3];\r\n                if (n != 0) {\r\n                    n = d(t) == 0 ? n : -n;\r\n                }\r\n                E[0] = g[2];\r\n                E[1] = n\r\n            }\r\n\r\n            function m(t, E) {\r\n                for (var h = 0; h < E; h++) {\r\n                    if ((t & 1) == 1) {\r\n                        t++;\r\n                    }\r\n                    t = t >>> 1\r\n                }\r\n                return t\r\n            }\r\n\r\n            function A(t, E) {\r\n                return t >> E\r\n            }\r\n\r\n            function O(t, E, h, L, g, n) {\r\n                E[h] = A(A(11 * t[g] - 4 * t[g + n] + t[g + n + n] + 4, 3) + t[L], 1);\r\n                E[h + n] = A(A(5 * t[g] + 4 * t[g + n] - t[g + n + n] + 4, 3) - t[L], 1)\r\n            }\r\n\r\n            function J(t, E, h, L, g, n) {\r\n                var W = t[g - n] - t[g + n], j = t[g], $ = t[L];\r\n                E[h] = A(A(W + 4, 3) + j + $, 1);\r\n                E[h + n] = A(A(-W + 4, 3) + j - $, 1)\r\n            }\r\n\r\n            function y(t, E, h, L, g, n) {\r\n                E[h] = A(A(5 * t[g] + 4 * t[g - n] - t[g - n - n] + 4, 3) + t[L], 1);\r\n                E[h + n] = A(A(11 * t[g] - 4 * t[g - n] + t[g - n - n] + 4, 3) - t[L], 1)\r\n            }\r\n\r\n            function q(t) {\r\n                t = t < 0 ? 0 : t > 4095 ? 4095 : t;\r\n                t = k[t] >>> 2;\r\n                return t\r\n            }\r\n\r\n            function av(t, E, h, L, g, n) {\r\n                L = new Uint16Array(L.buffer);\r\n                var W = Date.now(), j = UTIF._binBE, $ = E + h, r, u, X, I, ax, a3, R, ai, aa, ap, ah, ae, aD, al, i,\r\n                        aE, T, B;\r\n                E += 4;\r\n                var a5 = n[0] == 1;\r\n                while (E < $) {\r\n                    var S = j.readShort(t, E), s = j.readUshort(t, E + 2);\r\n                    E += 4;\r\n                    if (S == 12) {\r\n                        r = s;\r\n                    } else if (S == 20) {\r\n                        u = s;\r\n                    } else if (S == 21) {\r\n                        X = s;\r\n                    } else if (S == 48) {\r\n                        I = s;\r\n                    } else if (S == 53) {\r\n                        ax = s;\r\n                    } else if (S == 35) {\r\n                        a3 = s;\r\n                    } else if (S == 62) {\r\n                        R = s;\r\n                    } else if (S == 101) {\r\n                        ai = s;\r\n                    } else if (S == 109) {\r\n                        aa = s;\r\n                    } else if (S == 84) {\r\n                        ap = s;\r\n                    } else if (S == 106) {\r\n                        ah = s;\r\n                    } else if (S == 107) {\r\n                        ae = s;\r\n                    } else if (S == 108) {\r\n                        aD = s;\r\n                    } else if (S == 102) {\r\n                        al = s;\r\n                    } else if (S == 104) {\r\n                        i = s;\r\n                    } else if (S == 105) {\r\n                        aE = s;\r\n                    } else {\r\n                        var F = S < 0 ? -S : S, D = F & 65280, _ = 0;\r\n                        if (F & az) {\r\n                            if (F & H) {\r\n                                _ = s & 65535;\r\n                                _ += (F & 255) << 16\r\n                            } else {\r\n                                _ = s & 65535\r\n                            }\r\n                        }\r\n                        if ((F & V) == V) {\r\n                            if (T == null) {\r\n                                T = [];\r\n                                for (var M = 0; M < 4; M++) {\r\n                                    T[M] = new Int16Array((u >>> 1) * (X >>> 1));\r\n                                }\r\n                                B = new Int16Array((u >>> 1) * (X >>> 1));\r\n                                C = new Int16Array(1024);\r\n                                for (var M = 0; M < 1024; M++) {\r\n                                    var aG = M - 512, p = Math.abs(aG),\r\n                                            r = Math.floor(768 * p * p * p / (255 * 255 * 255)) + p;\r\n                                    C[M] = Math.sign(aG) * r\r\n                                }\r\n                                k = new Uint16Array(4096);\r\n                                var aA = (1 << 16) - 1;\r\n                                for (var M = 0; M < 4096; M++) {\r\n                                    var at = M, a1 = aA * (Math.pow(113, at / 4095) - 1) / 112;\r\n                                    k[M] = Math.min(a1, aA)\r\n                                }\r\n                            }\r\n                            var w = T[R], v = m(u, 1 + P[I]), N = m(X, 1 + P[I]);\r\n                            if (I == 0) {\r\n                                for (var b = 0; b < N; b++) {\r\n                                    for (var G = 0; G < v; G++) {\r\n                                        var c = E + (b * v + G) * 2;\r\n                                        w[b * (u >>> 1) + G] = t[c] << 8 | t[c + 1]\r\n                                    }\r\n                                }\r\n                            } else {\r\n                                var a7 = [t, E * 8], a4 = [], ay = 0, aw = v * N, f = [0, 0], Q = 0, s = 0;\r\n                                while (ay < aw) {\r\n                                    ag(a7, f);\r\n                                    Q = f[0];\r\n                                    s = f[1];\r\n                                    while (Q > 0) {\r\n                                        a4[ay++] = s;\r\n                                        Q--\r\n                                    }\r\n                                }\r\n                                var l = (I - 1) % 3, aF = l != 1 ? v : 0, a2 = l != 0 ? N : 0;\r\n                                for (var b = 0; b < N; b++) {\r\n                                    var af = (b + a2) * (u >>> 1) + aF, au = b * v;\r\n                                    for (var G = 0; G < v; G++) {\r\n                                        w[af + G] = C[a4[au + G] + 512] * ax\r\n                                    }\r\n                                }\r\n                                if (l == 2) {\r\n                                    var i = u >>> 1, an = v * 2, a9 = N * 2;\r\n                                    for (var b = 0; b < N; b++) {\r\n                                        for (var G = 0; G < an; G++) {\r\n                                            var M = b * 2 * i + G, a = b * i + G, e = N * i + a;\r\n                                            if (b == 0) {\r\n                                                O(w, B, M, e, a, i);\r\n                                            } else if (b == N - 1) {\r\n                                                y(w, B, M, e, a, i);\r\n                                            } else {\r\n                                                J(w, B, M, e, a, i)\r\n                                            }\r\n                                        }\r\n                                    }\r\n                                    var Z = w;\r\n                                    w = B;\r\n                                    B = Z;\r\n                                    for (var b = 0; b < a9; b++) {\r\n                                        for (var G = 0; G < v; G++) {\r\n                                            var M = b * i + 2 * G, a = b * i + G, e = v + a;\r\n                                            if (G == 0) {\r\n                                                O(w, B, M, e, a, 1);\r\n                                            } else if (G == v - 1) {\r\n                                                y(w, B, M, e, a, 1);\r\n                                            } else {\r\n                                                J(w, B, M, e, a, 1)\r\n                                            }\r\n                                        }\r\n                                    }\r\n                                    var Z = w;\r\n                                    w = B;\r\n                                    B = Z;\r\n                                    var aC = [], aB = 2 - ~~((I - 1) / 3);\r\n                                    for (var K = 0; K < 3; K++) {\r\n                                        aC[K] = aa >> 14 - K * 2 & 3;\r\n                                    }\r\n                                    var a6 = aC[aB];\r\n                                    if (a6 != 0) {\r\n                                        for (var b = 0; b < a9; b++) {\r\n                                            for (var G = 0; G < an;\r\n                                                 G++) {\r\n                                                var M = b * i + G;\r\n                                                w[M] = w[M] << a6\r\n                                            }\r\n                                        }\r\n                                    }\r\n                                }\r\n                            }\r\n                            if (I == 9 && R == 3) {\r\n                                var a8 = T[0], ab = T[1], aq = T[2], as = T[3];\r\n                                for (var b = 0; b < X;\r\n                                     b += 2) {\r\n                                    for (var G = 0; G < u; G += 2) {\r\n                                        var U = b * u + G, c = (b >>> 1) * (u >>> 1) + (G >>> 1), z = a8[c],\r\n                                                ao = ab[c] - 2048, ak = aq[c] - 2048, ad = as[c] - 2048,\r\n                                                aj = (ao << 1) + z,\r\n                                                a0 = (ak << 1) + z, aH = z + ad, am = z - ad;\r\n                                        if (a5) {\r\n                                            L[U] = q(aH);\r\n                                            L[U + 1] = q(a0);\r\n                                            L[U + u] = q(aj);\r\n                                            L[U + u + 1] = q(am)\r\n                                        } else {\r\n                                            L[U] = q(aj);\r\n                                            L[U + 1] = q(aH);\r\n                                            L[U + u] = q(am);\r\n                                            L[U + u + 1] = q(a0)\r\n                                        }\r\n                                    }\r\n                                }\r\n                            }\r\n                            E += _ * 4\r\n                        } else if (F == 16388) {\r\n                            E += _ * 4\r\n                        } else if (D == 8192 || D == 8448 || D == 9216) {\r\n                        } else {\r\n                            throw F.toString(16)\r\n                        }\r\n                    }\r\n                }\r\n                console.log(Date.now() - W)\r\n            }\r\n\r\n            return av\r\n        }()\r\n\r\n\r\n        UTIF.decode._decodeLogLuv32 = function(img, data, off, len, tgt, toff) {\r\n            var w = img.width, qw = w * 4;\r\n            var io = 0, out = new Uint8Array(qw);\r\n\r\n            while (io < len) {\r\n                var oo = 0;\r\n                while (oo < qw) {\r\n                    var c = data[off + io];\r\n                    io++;\r\n                    if (c < 128) {\r\n                        for (var j = 0; j < c; j++) {\r\n                            out[oo + j] = data[off + io + j];\r\n                        }\r\n                        oo += c;\r\n                        io += c;\r\n                    } else {\r\n                        c = c - 126;\r\n                        for (var j = 0; j < c; j++) {\r\n                            out[oo + j] = data[off + io];\r\n                        }\r\n                        oo += c;\r\n                        io++;\r\n                    }\r\n                }\r\n\r\n                for (var x = 0; x < w; x++) {\r\n                    tgt[toff + 0] = out[x];\r\n                    tgt[toff + 1] = out[x + w];\r\n                    tgt[toff + 2] = out[x + w * 2];\r\n                    tgt[toff + 4] = out[x + w * 3];\r\n                    toff += 6;\r\n                }\r\n            }\r\n        }\r\n\r\n        UTIF.decode._ljpeg_diff = function(data, prm, huff) {\r\n            var getbithuff = UTIF.decode._getbithuff;\r\n            var len, diff;\r\n            len = getbithuff(data, prm, huff[0], huff);\r\n            diff = getbithuff(data, prm, len, 0);\r\n            if ((diff & (1 << (len - 1))) == 0) {\r\n                diff -= (1 << len) - 1;\r\n            }\r\n            return diff;\r\n        }\r\n        UTIF.decode._decodeARW = function(img, inp, off, src_length, tgt, toff) {\r\n            var raw_width = img[\"t256\"][0], height = img[\"t257\"][0], tiff_bps = img[\"t258\"][0];\r\n            var bin = (img.isLE ? UTIF._binLE : UTIF._binBE);\r\n            //console.log(raw_width, height, tiff_bps, raw_width*height, src_length);\r\n            var arw2 = (raw_width * height == src_length) || (raw_width * height * 1.5 == src_length);\r\n            //arw2 = true;\r\n            //console.log(\"ARW2: \", arw2, raw_width*height, src_length, tgt.length);\r\n            if (!arw2) {  //\"sony_arw_load_raw\"; // not arw2\r\n                height += 8;\r\n                var prm = [off, 0, 0, 0];\r\n                var huff = new Uint16Array(32770);\r\n                var tab = [0xf11, 0xf10, 0xe0f, 0xd0e, 0xc0d, 0xb0c, 0xa0b, 0x90a, 0x809,\r\n                           0x708, 0x607, 0x506, 0x405, 0x304, 0x303, 0x300, 0x202, 0x201];\r\n                var i, c, n, col, row, sum = 0;\r\n                var ljpeg_diff = UTIF.decode._ljpeg_diff;\r\n\r\n                huff[0] = 15;\r\n                for (n = i = 0; i < 18; i++) {\r\n                    var lim = 32768 >>> (tab[i] >>> 8);\r\n                    for (var c = 0; c < lim; c++) {\r\n                        huff[++n] = tab[i];\r\n                    }\r\n                }\r\n                for (col = raw_width; col--;) {\r\n                    for (row = 0; row < height + 1; row += 2) {\r\n                        if (row == height) {\r\n                            row = 1;\r\n                        }\r\n                        sum += ljpeg_diff(inp, prm, huff);\r\n                        if (row < height) {\r\n                            var clr = (sum) & 4095;\r\n                            UTIF.decode._putsF(tgt, (row * raw_width + col) * tiff_bps, clr << (16 - tiff_bps));\r\n                        }\r\n                    }\r\n                }\r\n                return;\r\n            }\r\n            if (raw_width * height * 1.5 == src_length) {\r\n                //console.log(\"weird compression\");\r\n                for (var i = 0; i < src_length; i += 3) {\r\n                    var b0 = inp[off + i + 0], b1 = inp[off + i + 1], b2 = inp[off + i + 2];\r\n                    tgt[toff + i] = (b1 << 4) | (b0 >>> 4);\r\n                    tgt[toff + i + 1] = (b0 << 4) | (b2 >>> 4);\r\n                    tgt[toff + i + 2] = (b2 << 4) | (b1 >>> 4);\r\n                }\r\n                return;\r\n            }\r\n\r\n            var pix = new Uint16Array(16);\r\n            var row, col, val, max, min, imax, imin, sh, bit, i, dp;\r\n\r\n            var data = new Uint8Array(raw_width + 1);\r\n            for (row = 0; row < height; row++) {\r\n                //fread (data, 1, raw_width, ifp);\r\n                for (var j = 0; j < raw_width; j++) {\r\n                    data[j] = inp[off++];\r\n                }\r\n                for (dp = 0, col = 0; col < raw_width - 30; dp += 16) {\r\n                    max = 0x7ff & (val = bin.readUint(data, dp));\r\n                    min = 0x7ff & (val >>> 11);\r\n                    imax = 0x0f & (val >>> 22);\r\n                    imin = 0x0f & (val >>> 26);\r\n                    for (sh = 0; sh < 4 && 0x80 << sh <= max - min; sh++) {\r\n                        ;\r\n                    }\r\n                    for (bit = 30, i = 0; i < 16; i++) {\r\n                        if (i == imax) {\r\n                            pix[i] = max;\r\n                        } else if (i == imin) {\r\n                            pix[i] = min;\r\n                        } else {\r\n                            pix[i] = ((bin.readUshort(data, dp + (bit >> 3)) >>> (bit & 7) & 0x7f) << sh) + min;\r\n                            if (pix[i] > 0x7ff) {\r\n                                pix[i] = 0x7ff;\r\n                            }\r\n                            bit += 7;\r\n                        }\r\n                    }\r\n                    for (i = 0; i < 16; i++, col += 2) {\r\n                        //RAW(row,col) = curve[pix[i] << 1] >> 2;\r\n                        var clr = pix[i] << 1;   //clr = 0xffff;\r\n                        UTIF.decode._putsF(tgt, (row * raw_width + col) * tiff_bps, clr << (16 - tiff_bps));\r\n                    }\r\n                    col -= col & 1 ? 1 : 31;\r\n                }\r\n            }\r\n        }\r\n\r\n        UTIF.decode._decodeNikon = function(img, imgs, data, off, src_length, tgt, toff) {\r\n            var nikon_tree = [\r\n                [0, 0, 1, 5, 1, 1, 1, 1, 1, 1, 2, 0, 0, 0, 0, 0, 0,\t/* 12-bit lossy */\r\n                 5, 4, 3, 6, 2, 7, 1, 0, 8, 9, 11, 10, 12],\r\n                [0, 0, 1, 5, 1, 1, 1, 1, 1, 1, 2, 0, 0, 0, 0, 0, 0,\t/* 12-bit lossy after split */\r\n                 0x39, 0x5a, 0x38, 0x27, 0x16, 5, 4, 3, 2, 1, 0, 11, 12, 12],\r\n                [0, 0, 1, 4, 2, 3, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,  /* 12-bit lossless */\r\n                 5, 4, 6, 3, 7, 2, 8, 1, 9, 0, 10, 11, 12],\r\n                [0, 0, 1, 4, 3, 1, 1, 1, 1, 1, 2, 0, 0, 0, 0, 0, 0,\t/* 14-bit lossy */\r\n                 5, 6, 4, 7, 8, 3, 9, 2, 1, 0, 10, 11, 12, 13, 14],\r\n                [0, 0, 1, 5, 1, 1, 1, 1, 1, 1, 1, 2, 0, 0, 0, 0, 0,\t/* 14-bit lossy after split */\r\n                 8, 0x5c, 0x4b, 0x3a, 0x29, 7, 6, 5, 4, 3, 2, 1, 0, 13, 14],\r\n                [0, 0, 1, 4, 2, 2, 3, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0,\t/* 14-bit lossless */\r\n                 7, 6, 8, 5, 9, 4, 10, 3, 11, 12, 2, 0, 1, 13, 14]];\r\n\r\n            var raw_width = img[\"t256\"][0], height = img[\"t257\"][0], tiff_bps = img[\"t258\"][0];\r\n\r\n            var tree = 0, split = 0;\r\n            var make_decoder = UTIF.decode._make_decoder;\r\n            var getbithuff = UTIF.decode._getbithuff;\r\n\r\n            var mn = imgs[0].exifIFD.makerNote, md = mn[\"t150\"] ? mn[\"t150\"] : mn[\"t140\"], mdo = 0;  //console.log(mn,md);\r\n            //console.log(md[0].toString(16), md[1].toString(16), tiff_bps);\r\n            var ver0 = md[mdo++], ver1 = md[mdo++];\r\n            if (ver0 == 0x49 || ver1 == 0x58) {\r\n                mdo += 2110;\r\n            }\r\n            if (ver0 == 0x46) {\r\n                tree = 2;\r\n            }\r\n            if (tiff_bps == 14) {\r\n                tree += 3;\r\n            }\r\n\r\n            var vpred = [[0, 0], [0, 0]], bin = (img.isLE ? UTIF._binLE : UTIF._binBE);\r\n            for (var i = 0; i < 2; i++) {\r\n                for (var j = 0; j < 2; j++) {\r\n                    vpred[i][j] = bin.readShort(md, mdo);\r\n                    mdo += 2;\r\n                }\r\n            }  // not sure here ... [i][j] or [j][i]\r\n            //console.log(vpred);\r\n\r\n\r\n            var max = 1 << tiff_bps & 0x7fff, step = 0;\r\n            var csize = bin.readShort(md, mdo);\r\n            mdo += 2;\r\n            if (csize > 1) {\r\n                step = Math.floor(max / (csize - 1));\r\n            }\r\n            if (ver0 == 0x44 && ver1 == 0x20 && step > 0) {\r\n                split = bin.readShort(md, 562);\r\n            }\r\n\r\n\r\n            var i;\r\n            var row, col;\r\n            var len, shl, diff;\r\n            var min_v = 0;\r\n            var hpred = [0, 0];\r\n            var huff = make_decoder(nikon_tree[tree]);\r\n\r\n            //var g_input_offset=0, bitbuf=0, vbits=0, reset=0;\r\n            var prm = [off, 0, 0, 0];\r\n            //console.log(split);  split = 170;\r\n\r\n            for (min_v = row = 0; row < height; row++) {\r\n                if (split && row == split) {\r\n                    //free (huff);\r\n                    huff = make_decoder(nikon_tree[tree + 1]);\r\n                    //max_v += (min_v = 16) << 1;\r\n                }\r\n                for (col = 0; col < raw_width; col++) {\r\n                    i = getbithuff(data, prm, huff[0], huff);\r\n                    len = i & 15;\r\n                    shl = i >>> 4;\r\n                    diff = (((getbithuff(data, prm, len - shl, 0) << 1) + 1) << shl) >>> 1;\r\n                    if ((diff & (1 << (len - 1))) == 0) {\r\n                        diff -= (1 << len) - (shl == 0 ? 1 : 0);\r\n                    }\r\n                    if (col < 2) {\r\n                        hpred[col] = vpred[row & 1][col] += diff;\r\n                    } else {\r\n                        hpred[col & 1] += diff;\r\n                    }\r\n\r\n                    var clr = Math.min(Math.max(hpred[col & 1], 0), (1 << tiff_bps) - 1);\r\n                    var bti = (row * raw_width + col) * tiff_bps;\r\n                    UTIF.decode._putsF(tgt, bti, clr << (16 - tiff_bps));\r\n                }\r\n            }\r\n        }\r\n// put 16 bits\r\n        UTIF.decode._putsF = function(dt, pos, val) {\r\n            val = val << (8 - (pos & 7));\r\n            var o = (pos >>> 3);\r\n            dt[o] |= val >>> 16;\r\n            dt[o + 1] |= val >>> 8;\r\n            dt[o + 2] |= val;\r\n        }\r\n\r\n\r\n        UTIF.decode._getbithuff = function(data, prm, nbits, huff) {\r\n            var zero_after_ff = 0;\r\n            var get_byte = UTIF.decode._get_byte;\r\n            var c;\r\n\r\n            var off = prm[0], bitbuf = prm[1], vbits = prm[2], reset = prm[3];\r\n\r\n            //if (nbits > 25) return 0;\r\n            //if (nbits <  0) return bitbuf = vbits = reset = 0;\r\n            if (nbits == 0 || vbits < 0) {\r\n                return 0;\r\n            }\r\n            while (!reset && vbits < nbits && (c = data[off++]) != -1 &&\r\n                   !(reset = zero_after_ff && c == 0xff && data[off++])) {\r\n                //console.log(\"byte read into c\");\r\n                bitbuf = (bitbuf << 8) + c;\r\n                vbits += 8;\r\n            }\r\n            c = (bitbuf << (32 - vbits)) >>> (32 - nbits);\r\n            if (huff) {\r\n                vbits -= huff[c + 1] >>> 8;  //console.log(c, huff[c]>>8);\r\n                c = huff[c + 1] & 255;\r\n            } else {\r\n                vbits -= nbits;\r\n            }\r\n            if (vbits < 0) {\r\n                throw \"e\";\r\n            }\r\n\r\n            prm[0] = off;\r\n            prm[1] = bitbuf;\r\n            prm[2] = vbits;\r\n            prm[3] = reset;\r\n\r\n            return c;\r\n        }\r\n\r\n        UTIF.decode._make_decoder = function(source) {\r\n            var max, len, h, i, j;\r\n            var huff = [];\r\n\r\n            for (max = 16; max != 0 && !source[max]; max--) {\r\n                ;\r\n            }\r\n            var si = 17;\r\n\r\n            huff[0] = max;\r\n            for (h = len = 1; len <= max; len++) {\r\n                for (i = 0; i < source[len]; i++, ++si) {\r\n                    for (j = 0; j < 1 << (max - len); j++) {\r\n                        if (h <= 1 << max) {\r\n                            huff[h++] = (len << 8) | source[si];\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n            return huff;\r\n        }\r\n\r\n        UTIF.decode._decodeNewJPEG = function(img, data, off, len, tgt, toff) {\r\n            len = Math.min(len, data.length - off);\r\n            var tables = img[\"t347\"], tlen = tables ? tables.length : 0, buff = new Uint8Array(tlen + len);\r\n\r\n            if (tables) {\r\n                var SOI = 216, EOI = 217, boff = 0;\r\n                for (var i = 0; i < (tlen - 1); i++) {\r\n                    // Skip EOI marker from JPEGTables\r\n                    if (tables[i] == 255 && tables[i + 1] == EOI) {\r\n                        break;\r\n                    }\r\n                    buff[boff++] = tables[i];\r\n                }\r\n\r\n                // Skip SOI marker from data\r\n                var byte1 = data[off], byte2 = data[off + 1];\r\n                if (byte1 != 255 || byte2 != SOI) {\r\n                    buff[boff++] = byte1;\r\n                    buff[boff++] = byte2;\r\n                }\r\n                for (var i = 2; i < len; i++) {\r\n                    buff[boff++] = data[off + i];\r\n                }\r\n            } else {\r\n                for (var i = 0; i < len; i++) {\r\n                    buff[i] = data[off + i];\r\n                }\r\n            }\r\n\r\n            if (img[\"t262\"][0] == 32803 || (img[\"t259\"][0] == 7 && img[\"t262\"][0] == 34892)) // lossless JPEG (used in DNG files)\r\n            {\r\n                var bps = img[\"t258\"][0];//, dcdr = new LosslessJpegDecoder();\r\n                //var time = Date.now();\r\n                var out = UTIF.LosslessJpegDecode(buff), olen = out.length;  //console.log(olen);\r\n                //var out = ULLJPG(buff), olen=out.length;  //console.log(olen);\r\n                //console.log(Date.now()-time);\r\n\r\n                if (false) {\r\n                } else if (bps == 16) {\r\n                    if (img.isLE) {\r\n                        for (var i = 0; i < olen; i++) {\r\n                            tgt[toff + (i << 1)] = (out[i] & 255);\r\n                            tgt[toff + (i << 1) + 1] = (out[i] >>> 8);\r\n                        }\r\n                    } else {\r\n                        for (var i = 0; i < olen; i++) {\r\n                            tgt[toff + (i << 1)] = (out[i] >>> 8);\r\n                            tgt[toff + (i << 1) + 1] = (out[i] & 255);\r\n                        }\r\n                    }\r\n                } else if (bps == 14 || bps == 12 || bps == 10) {  // 4 * 14 == 56 == 7 * 8\r\n                    var rst = 16 - bps;\r\n                    for (var i = 0; i < olen; i++) {\r\n                        UTIF.decode._putsF(tgt, i * bps, out[i] << rst);\r\n                    }\r\n                } else if (bps == 8) {\r\n                    for (var i = 0; i < olen; i++) {\r\n                        tgt[toff + i] = out[i];\r\n                    }\r\n                } else {\r\n                    throw new Error(\"unsupported bit depth \" + bps);\r\n                }\r\n            } else {\r\n                var parser = new UTIF.JpegDecoder();\r\n                parser.parse(buff);\r\n                var decoded = parser.getData({\r\n                                                 \"width\": parser.width,\r\n                                                 \"height\": parser.height,\r\n                                                 \"forceRGB\": true,\r\n                                                 \"isSourcePDF\": false\r\n                                             });\r\n                for (var i = 0; i < decoded.length; i++) {\r\n                    tgt[toff + i] = decoded[i];\r\n                }\r\n            }\r\n\r\n            // PhotometricInterpretation is 6 (YCbCr) for JPEG, but after decoding we populate data in\r\n            // RGB format, so updating the tag value\r\n            if (img[\"t262\"][0] == 6) {\r\n                img[\"t262\"][0] = 2;\r\n            }\r\n        }\r\n\r\n        UTIF.decode._decodeOldJPEGInit = function(img, data, off, len) {\r\n            var SOI = 216, EOI = 217, DQT = 219, DHT = 196, DRI = 221, SOF0 = 192, SOS = 218;\r\n            var joff = 0, soff = 0, tables, sosMarker, isTiled = false, i, j, k;\r\n            var jpgIchgFmt = img[\"t513\"], jifoff = jpgIchgFmt ? jpgIchgFmt[0] : 0;\r\n            var jpgIchgFmtLen = img[\"t514\"], jiflen = jpgIchgFmtLen ? jpgIchgFmtLen[0] : 0;\r\n            var soffTag = img[\"t324\"] || img[\"t273\"] || jpgIchgFmt;\r\n            var ycbcrss = img[\"t530\"], ssx = 0, ssy = 0;\r\n            var spp = img[\"t277\"] ? img[\"t277\"][0] : 1;\r\n            var jpgresint = img[\"t515\"];\r\n\r\n            if (soffTag) {\r\n                soff = soffTag[0];\r\n                isTiled = (soffTag.length > 1);\r\n            }\r\n\r\n            if (!isTiled) {\r\n                if (data[off] == 255 && data[off + 1] == SOI) {\r\n                    return {jpegOffset: off};\r\n                }\r\n                if (jpgIchgFmt != null) {\r\n                    if (data[off + jifoff] == 255 && data[off + jifoff + 1] == SOI) {\r\n                        joff = off + jifoff;\r\n                    } else {\r\n                        log(\"JPEGInterchangeFormat does not point to SOI\");\r\n                    }\r\n\r\n                    if (jpgIchgFmtLen == null) {\r\n                        log(\"JPEGInterchangeFormatLength field is missing\");\r\n                    } else if (jifoff >= soff || (jifoff + jiflen) <= soff) {\r\n                        log(\"JPEGInterchangeFormatLength field value is invalid\");\r\n                    }\r\n\r\n                    if (joff != null) {\r\n                        return {jpegOffset: joff};\r\n                    }\r\n                }\r\n            }\r\n\r\n            if (ycbcrss != null) {\r\n                ssx = ycbcrss[0];\r\n                ssy = ycbcrss[1];\r\n            }\r\n\r\n            if (jpgIchgFmt != null) {\r\n                if (jpgIchgFmtLen != null) {\r\n                    if (jiflen >= 2 && (jifoff + jiflen) <= soff) {\r\n                        if (data[off + jifoff + jiflen - 2] == 255 && data[off + jifoff + jiflen - 1] == SOI) {\r\n                            tables = new Uint8Array(jiflen - 2);\r\n                        } else {\r\n                            tables = new Uint8Array(jiflen);\r\n                        }\r\n\r\n                        for (i = 0; i < tables.length; i++) {\r\n                            tables[i] = data[off + jifoff + i];\r\n                        }\r\n                        log(\"Incorrect JPEG interchange format: using JPEGInterchangeFormat offset to derive tables\");\r\n                    } else {\r\n                        log(\"JPEGInterchangeFormat+JPEGInterchangeFormatLength > offset to first strip or tile\");\r\n                    }\r\n                }\r\n            }\r\n\r\n            if (tables == null) {\r\n                var ooff = 0, out = [];\r\n                out[ooff++] = 255;\r\n                out[ooff++] = SOI;\r\n\r\n                var qtables = img[\"t519\"];\r\n                if (qtables == null) {\r\n                    throw new Error(\"JPEGQTables tag is missing\");\r\n                }\r\n                for (i = 0; i < qtables.length; i++) {\r\n                    out[ooff++] = 255;\r\n                    out[ooff++] = DQT;\r\n                    out[ooff++] = 0;\r\n                    out[ooff++] = 67;\r\n                    out[ooff++] = i;\r\n                    for (j = 0; j < 64; j++) {\r\n                        out[ooff++] = data[off + qtables[i] + j];\r\n                    }\r\n                }\r\n\r\n                for (k = 0; k < 2; k++) {\r\n                    var htables = img[(k == 0) ? \"t520\" : \"t521\"];\r\n                    if (htables == null) {\r\n                        throw new Error(((k == 0) ? \"JPEGDCTables\" : \"JPEGACTables\") + \" tag is missing\");\r\n                    }\r\n                    for (i = 0; i < htables.length; i++) {\r\n                        out[ooff++] = 255;\r\n                        out[ooff++] = DHT;\r\n                        //out[ooff++] = 0; out[ooff++] = 67; out[ooff++] = i;\r\n                        var nc = 19;\r\n                        for (j = 0; j < 16; j++) {\r\n                            nc += data[off + htables[i] + j];\r\n                        }\r\n\r\n                        out[ooff++] = (nc >>> 8);\r\n                        out[ooff++] = nc & 255;\r\n                        out[ooff++] = (i | (k << 4));\r\n                        for (j = 0; j < 16; j++) {\r\n                            out[ooff++] = data[off + htables[i] + j];\r\n                        }\r\n                        for (j = 0; j < nc; j++) {\r\n                            out[ooff++] = data[off + htables[i] + 16 + j];\r\n                        }\r\n                    }\r\n                }\r\n\r\n                out[ooff++] = 255;\r\n                out[ooff++] = SOF0;\r\n                out[ooff++] = 0;\r\n                out[ooff++] = 8 + 3 * spp;\r\n                out[ooff++] = 8;\r\n                out[ooff++] = (img.height >>> 8) & 255;\r\n                out[ooff++] = img.height & 255;\r\n                out[ooff++] = (img.width >>> 8) & 255;\r\n                out[ooff++] = img.width & 255;\r\n                out[ooff++] = spp;\r\n                if (spp == 1) {\r\n                    out[ooff++] = 1;\r\n                    out[ooff++] = 17;\r\n                    out[ooff++] = 0;\r\n                } else {\r\n                    for (i = 0; i < 3; i++) {\r\n                        out[ooff++] = i + 1;\r\n                        out[ooff++] = (i != 0) ? 17 : (((ssx & 15) << 4) | (ssy & 15));\r\n                        out[ooff++] = i;\r\n                    }\r\n                }\r\n\r\n                if (jpgresint != null && jpgresint[0] != 0) {\r\n                    out[ooff++] = 255;\r\n                    out[ooff++] = DRI;\r\n                    out[ooff++] = 0;\r\n                    out[ooff++] = 4;\r\n                    out[ooff++] = (jpgresint[0] >>> 8) & 255;\r\n                    out[ooff++] = jpgresint[0] & 255;\r\n                }\r\n\r\n                tables = new Uint8Array(out);\r\n            }\r\n\r\n            var sofpos = -1;\r\n            i = 0;\r\n            while (i < (tables.length - 1)) {\r\n                if (tables[i] == 255 && tables[i + 1] == SOF0) {\r\n                    sofpos = i;\r\n                    break;\r\n                }\r\n                i++;\r\n            }\r\n\r\n            if (sofpos == -1) {\r\n                var tmptab = new Uint8Array(tables.length + 10 + 3 * spp);\r\n                tmptab.set(tables);\r\n                var tmpoff = tables.length;\r\n                sofpos = tables.length;\r\n                tables = tmptab;\r\n\r\n                tables[tmpoff++] = 255;\r\n                tables[tmpoff++] = SOF0;\r\n                tables[tmpoff++] = 0;\r\n                tables[tmpoff++] = 8 + 3 * spp;\r\n                tables[tmpoff++] = 8;\r\n                tables[tmpoff++] = (img.height >>> 8) & 255;\r\n                tables[tmpoff++] = img.height & 255;\r\n                tables[tmpoff++] = (img.width >>> 8) & 255;\r\n                tables[tmpoff++] = img.width & 255;\r\n                tables[tmpoff++] = spp;\r\n                if (spp == 1) {\r\n                    tables[tmpoff++] = 1;\r\n                    tables[tmpoff++] = 17;\r\n                    tables[tmpoff++] = 0;\r\n                } else {\r\n                    for (i = 0; i < 3; i++) {\r\n                        tables[tmpoff++] = i + 1;\r\n                        tables[tmpoff++] = (i != 0) ? 17 : (((ssx & 15) << 4) | (ssy & 15));\r\n                        tables[tmpoff++] = i;\r\n                    }\r\n                }\r\n            }\r\n\r\n            if (data[soff] == 255 && data[soff + 1] == SOS) {\r\n                var soslen = (data[soff + 2] << 8) | data[soff + 3];\r\n                sosMarker = new Uint8Array(soslen + 2);\r\n                sosMarker[0] = data[soff];\r\n                sosMarker[1] = data[soff + 1];\r\n                sosMarker[2] = data[soff + 2];\r\n                sosMarker[3] = data[soff + 3];\r\n                for (i = 0; i < (soslen - 2); i++) {\r\n                    sosMarker[i + 4] = data[soff + i + 4];\r\n                }\r\n            } else {\r\n                sosMarker = new Uint8Array(2 + 6 + 2 * spp);\r\n                var sosoff = 0;\r\n                sosMarker[sosoff++] = 255;\r\n                sosMarker[sosoff++] = SOS;\r\n                sosMarker[sosoff++] = 0;\r\n                sosMarker[sosoff++] = 6 + 2 * spp;\r\n                sosMarker[sosoff++] = spp;\r\n                if (spp == 1) {\r\n                    sosMarker[sosoff++] = 1;\r\n                    sosMarker[sosoff++] = 0;\r\n                } else {\r\n                    for (i = 0; i < 3; i++) {\r\n                        sosMarker[sosoff++] = i + 1;\r\n                        sosMarker[sosoff++] = (i << 4) | i;\r\n                    }\r\n                }\r\n                sosMarker[sosoff++] = 0;\r\n                sosMarker[sosoff++] = 63;\r\n                sosMarker[sosoff++] = 0;\r\n            }\r\n\r\n            return {jpegOffset: off, tables: tables, sosMarker: sosMarker, sofPosition: sofpos};\r\n        }\r\n\r\n        UTIF.decode._decodeOldJPEG = function(img, data, off, len, tgt, toff) {\r\n            var i, dlen, tlen, buff, buffoff;\r\n            var jpegData = UTIF.decode._decodeOldJPEGInit(img, data, off, len);\r\n\r\n            if (jpegData.jpegOffset != null) {\r\n                dlen = off + len - jpegData.jpegOffset;\r\n                buff = new Uint8Array(dlen);\r\n                for (i = 0; i < dlen; i++) {\r\n                    buff[i] = data[jpegData.jpegOffset + i];\r\n                }\r\n            } else {\r\n                tlen = jpegData.tables.length;\r\n                buff = new Uint8Array(tlen + jpegData.sosMarker.length + len + 2);\r\n                buff.set(jpegData.tables);\r\n                buffoff = tlen;\r\n\r\n                buff[jpegData.sofPosition + 5] = (img.height >>> 8) & 255;\r\n                buff[jpegData.sofPosition + 6] = img.height & 255;\r\n                buff[jpegData.sofPosition + 7] = (img.width >>> 8) & 255;\r\n                buff[jpegData.sofPosition + 8] = img.width & 255;\r\n\r\n                if (data[off] != 255 || data[off + 1] != SOS) {\r\n                    buff.set(jpegData.sosMarker, buffoff);\r\n                    buffoff += sosMarker.length;\r\n                }\r\n                for (i = 0; i < len; i++) {\r\n                    buff[buffoff++] = data[off + i];\r\n                }\r\n                buff[buffoff++] = 255;\r\n                buff[buffoff++] = EOI;\r\n            }\r\n\r\n            var parser = new UTIF.JpegDecoder();\r\n            parser.parse(buff);\r\n            var decoded = parser.getData({\r\n                                             \"width\": parser.width,\r\n                                             \"height\": parser.height,\r\n                                             \"forceRGB\": true,\r\n                                             \"isSourcePDF\": false\r\n                                         });\r\n            for (var i = 0; i < decoded.length; i++) {\r\n                tgt[toff + i] = decoded[i];\r\n            }\r\n\r\n            // PhotometricInterpretation is 6 (YCbCr) for JPEG, but after decoding we populate data in\r\n            // RGB format, so updating the tag value\r\n            if (img[\"t262\"] && img[\"t262\"][0] == 6) {\r\n                img[\"t262\"][0] = 2;\r\n            }\r\n        }\r\n\r\n        UTIF.decode._decodePackBits = function(data, off, len, tgt, toff) {\r\n            var sa = new Int8Array(data.buffer), ta = new Int8Array(tgt.buffer), lim = off + len;\r\n            while (off < lim) {\r\n                var n = sa[off];\r\n                off++;\r\n                if (n >= 0 && n < 128) {\r\n                    for (var i = 0; i < n + 1; i++) {\r\n                        ta[toff] = sa[off];\r\n                        toff++;\r\n                        off++;\r\n                    }\r\n                }\r\n                if (n >= -127 && n < 0) {\r\n                    for (var i = 0; i < -n + 1; i++) {\r\n                        ta[toff] = sa[off];\r\n                        toff++;\r\n                    }\r\n                    off++;\r\n                }\r\n            }\r\n            return toff;\r\n        }\r\n\r\n        UTIF.decode._decodeThunder = function(data, off, len, tgt, toff) {\r\n            var d2 = [0, 1, 0, -1], d3 = [0, 1, 2, 3, 0, -3, -2, -1];\r\n            var lim = off + len, qoff = toff * 2, px = 0;\r\n            while (off < lim) {\r\n                var b = data[off], msk = (b >>> 6), n = (b & 63);\r\n                off++;\r\n                if (msk == 3) {\r\n                    px = (n & 15);\r\n                    tgt[qoff >>> 1] |= (px << (4 * (1 - qoff & 1)));\r\n                    qoff++;\r\n                }\r\n                if (msk == 0) {\r\n                    for (var i = 0; i < n; i++) {\r\n                        tgt[qoff >>> 1] |= (px << (4 * (1 - qoff & 1)));\r\n                        qoff++;\r\n                    }\r\n                }\r\n                if (msk == 2) {\r\n                    for (var i = 0; i < 2; i++) {\r\n                        var d = (n >>> (3 * (1 - i))) & 7;\r\n                        if (d != 4) {\r\n                            px += d3[d];\r\n                            tgt[qoff >>> 1] |= (px << (4 * (1 - qoff & 1)));\r\n                            qoff++;\r\n                        }\r\n                    }\r\n                }\r\n                if (msk == 1) {\r\n                    for (var i = 0; i < 3; i++) {\r\n                        var d = (n >>> (2 * (2 - i))) & 3;\r\n                        if (d != 2) {\r\n                            px += d2[d];\r\n                            tgt[qoff >>> 1] |= (px << (4 * (1 - qoff & 1)));\r\n                            qoff++;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        UTIF.decode._dmap = {\"1\": 0, \"011\": 1, \"000011\": 2, \"0000011\": 3, \"010\": -1, \"000010\": -2, \"0000010\": -3};\r\n        UTIF.decode._lens = (function() {\r\n            var addKeys = function(lens, arr, i0, inc) {\r\n                for (var i = 0; i < arr.length; i++) {\r\n                    lens[arr[i]] = i0 + i * inc;\r\n                }\r\n            }\r\n\r\n            var termW = \"00110101,000111,0111,1000,1011,1100,1110,1111,10011,10100,00111,01000,001000,000011,110100,110101,\" // 15\r\n                        + \"101010,101011,0100111,0001100,0001000,0010111,0000011,0000100,0101000,0101011,0010011,0100100,0011000,00000010,00000011,00011010,\" // 31\r\n                        + \"00011011,00010010,00010011,00010100,00010101,00010110,00010111,00101000,00101001,00101010,00101011,00101100,00101101,00000100,00000101,00001010,\" // 47\r\n                        + \"00001011,01010010,01010011,01010100,01010101,00100100,00100101,01011000,01011001,01011010,01011011,01001010,01001011,00110010,00110011,00110100\";\r\n\r\n            var termB = \"0000110111,010,11,10,011,0011,0010,00011,000101,000100,0000100,0000101,0000111,00000100,00000111,000011000,\" // 15\r\n                        + \"0000010111,0000011000,0000001000,00001100111,00001101000,00001101100,00000110111,00000101000,00000010111,00000011000,000011001010,000011001011,000011001100,000011001101,000001101000,000001101001,\" // 31\r\n                        + \"000001101010,000001101011,000011010010,000011010011,000011010100,000011010101,000011010110,000011010111,000001101100,000001101101,000011011010,000011011011,000001010100,000001010101,000001010110,000001010111,\" // 47\r\n                        + \"000001100100,000001100101,000001010010,000001010011,000000100100,000000110111,000000111000,000000100111,000000101000,000001011000,000001011001,000000101011,000000101100,000001011010,000001100110,000001100111\";\r\n\r\n            var makeW = \"11011,10010,010111,0110111,00110110,00110111,01100100,01100101,01101000,01100111,011001100,011001101,011010010,011010011,011010100,011010101,011010110,\"\r\n                        + \"011010111,011011000,011011001,011011010,011011011,010011000,010011001,010011010,011000,010011011\";\r\n\r\n            var makeB = \"0000001111,000011001000,000011001001,000001011011,000000110011,000000110100,000000110101,0000001101100,0000001101101,0000001001010,0000001001011,0000001001100,\"\r\n                        + \"0000001001101,0000001110010,0000001110011,0000001110100,0000001110101,0000001110110,0000001110111,0000001010010,0000001010011,0000001010100,0000001010101,0000001011010,\"\r\n                        + \"0000001011011,0000001100100,0000001100101\";\r\n\r\n            var makeA = \"00000001000,00000001100,00000001101,000000010010,000000010011,000000010100,000000010101,000000010110,000000010111,000000011100,000000011101,000000011110,000000011111\";\r\n\r\n            termW = termW.split(\",\");\r\n            termB = termB.split(\",\");\r\n            makeW = makeW.split(\",\");\r\n            makeB = makeB.split(\",\");\r\n            makeA = makeA.split(\",\");\r\n\r\n            var lensW = {}, lensB = {};\r\n            addKeys(lensW, termW, 0, 1);\r\n            addKeys(lensW, makeW, 64, 64);\r\n            addKeys(lensW, makeA, 1792, 64);\r\n            addKeys(lensB, termB, 0, 1);\r\n            addKeys(lensB, makeB, 64, 64);\r\n            addKeys(lensB, makeA, 1792, 64);\r\n            return [lensW, lensB];\r\n        })();\r\n\r\n        UTIF.decode._decodeG4 = function(data, off, slen, tgt, toff, w, fo) {\r\n            var U = UTIF.decode, boff = off << 3, len = 0, wrd = \"\";\t// previous starts with 1\r\n            var line = [], pline = [];\r\n            for (var i = 0; i < w; i++) {\r\n                pline.push(0);\r\n            }\r\n            pline = U._makeDiff(pline);\r\n            var a0 = 0, a1 = 0, a2 = 0, b1 = 0, b2 = 0, clr = 0;\r\n            var y = 0, mode = \"\", toRead = 0;\r\n            var bipl = Math.ceil(w / 8) * 8;\r\n\r\n            while ((boff >>> 3) < off + slen) {\r\n                b1 = U._findDiff(pline, a0 + (a0 == 0 ? 0 : 1), 1 - clr), b2 = U._findDiff(pline, b1, clr);\t// could be precomputed\r\n                var bit = 0;\r\n                if (fo == 1) {\r\n                    bit = (data[boff >>> 3] >>> (7 - (boff & 7))) & 1;\r\n                }\r\n                if (fo == 2) {\r\n                    bit = (data[boff >>> 3] >>> ((boff & 7))) & 1;\r\n                }\r\n                boff++;\r\n                wrd += bit;\r\n                if (mode == \"H\") {\r\n                    if (U._lens[clr][wrd] != null) {\r\n                        var dl = U._lens[clr][wrd];\r\n                        wrd = \"\";\r\n                        len += dl;\r\n                        if (dl < 64) {\r\n                            U._addNtimes(line, len, clr);\r\n                            a0 += len;\r\n                            clr = 1 - clr;\r\n                            len = 0;\r\n                            toRead--;\r\n                            if (toRead == 0) {\r\n                                mode = \"\";\r\n                            }\r\n                        }\r\n                    }\r\n                } else {\r\n                    if (wrd == \"0001\") {\r\n                        wrd = \"\";\r\n                        U._addNtimes(line, b2 - a0, clr);\r\n                        a0 = b2;\r\n                    }\r\n                    if (wrd == \"001\") {\r\n                        wrd = \"\";\r\n                        mode = \"H\";\r\n                        toRead = 2;\r\n                    }\r\n                    if (U._dmap[wrd] != null) {\r\n                        a1 = b1 + U._dmap[wrd];\r\n                        U._addNtimes(line, a1 - a0, clr);\r\n                        a0 = a1;\r\n                        wrd = \"\";\r\n                        clr = 1 - clr;\r\n                    }\r\n                }\r\n                if (line.length == w && mode == \"\") {\r\n                    U._writeBits(line, tgt, toff * 8 + y * bipl);\r\n                    clr = 0;\r\n                    y++;\r\n                    a0 = 0;\r\n                    pline = U._makeDiff(line);\r\n                    line = [];\r\n                }\r\n                //if(wrd.length>150) {  log(wrd);  break;  throw \"e\";  }\r\n            }\r\n        }\r\n\r\n        UTIF.decode._findDiff = function(line, x, clr) {\r\n            for (var i = 0; i < line.length; i += 2) {\r\n                if (line[i] >= x && line[i + 1] == clr) {\r\n                    return line[i];\r\n                }\r\n            }\r\n        }\r\n\r\n        UTIF.decode._makeDiff = function(line) {\r\n            var out = [];\r\n            if (line[0] == 1) {\r\n                out.push(0, 1);\r\n            }\r\n            for (var i = 1; i < line.length; i++) {\r\n                if (line[i - 1] != line[i]) {\r\n                    out.push(i, line[i]);\r\n                }\r\n            }\r\n            out.push(line.length, 0, line.length, 1);\r\n            return out;\r\n        }\r\n\r\n        UTIF.decode._decodeG2 = function(data, off, slen, tgt, toff, w, fo) {\r\n            var U = UTIF.decode, boff = off << 3, len = 0, wrd = \"\";\r\n            var line = [];\r\n            var clr = 0;\r\n            var y = 0;\r\n            var bipl = Math.ceil(w / 8) * 8;\r\n\r\n            while ((boff >>> 3) < off + slen) {\r\n                var bit = 0;\r\n                if (fo == 1) {\r\n                    bit = (data[boff >>> 3] >>> (7 - (boff & 7))) & 1;\r\n                }\r\n                if (fo == 2) {\r\n                    bit = (data[boff >>> 3] >>> ((boff & 7))) & 1;\r\n                }\r\n                boff++;\r\n                wrd += bit;\r\n\r\n                len = U._lens[clr][wrd];\r\n                if (len != null) {\r\n                    U._addNtimes(line, len, clr);\r\n                    wrd = \"\";\r\n                    if (len < 64) {\r\n                        clr = 1 - clr;\r\n                    }\r\n                    if (line.length == w) {\r\n                        U._writeBits(line, tgt, toff * 8 + y * bipl);\r\n                        line = [];\r\n                        y++;\r\n                        clr = 0;\r\n                        if ((boff & 7) != 0) {\r\n                            boff += 8 - (boff & 7);\r\n                        }\r\n                        if (len >= 64) {\r\n                            boff += 8;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        UTIF.decode._decodeG3 = function(data, off, slen, tgt, toff, w, fo, twoDim) {\r\n            var U = UTIF.decode, boff = off << 3, len = 0, wrd = \"\";\r\n            var line = [], pline = [];\r\n            for (var i = 0; i < w; i++) {\r\n                line.push(0);\r\n            }\r\n            var a0 = 0, a1 = 0, a2 = 0, b1 = 0, b2 = 0, clr = 0;\r\n            var y = -1, mode = \"\", toRead = 0, is1D = true;\r\n            var bipl = Math.ceil(w / 8) * 8;\r\n            while ((boff >>> 3) < off + slen) {\r\n                b1 = U._findDiff(pline, a0 + (a0 == 0 ? 0 : 1), 1 - clr), b2 = U._findDiff(pline, b1, clr);\t// could be precomputed\r\n                var bit = 0;\r\n                if (fo == 1) {\r\n                    bit = (data[boff >>> 3] >>> (7 - (boff & 7))) & 1;\r\n                }\r\n                if (fo == 2) {\r\n                    bit = (data[boff >>> 3] >>> ((boff & 7))) & 1;\r\n                }\r\n                boff++;\r\n                wrd += bit;\r\n\r\n                if (is1D) {\r\n                    if (U._lens[clr][wrd] != null) {\r\n                        var dl = U._lens[clr][wrd];\r\n                        wrd = \"\";\r\n                        len += dl;\r\n                        if (dl < 64) {\r\n                            U._addNtimes(line, len, clr);\r\n                            clr = 1 - clr;\r\n                            len = 0;\r\n                        }\r\n                    }\r\n                } else {\r\n                    if (mode == \"H\") {\r\n                        if (U._lens[clr][wrd] != null) {\r\n                            var dl = U._lens[clr][wrd];\r\n                            wrd = \"\";\r\n                            len += dl;\r\n                            if (dl < 64) {\r\n                                U._addNtimes(line, len, clr);\r\n                                a0 += len;\r\n                                clr = 1 - clr;\r\n                                len = 0;\r\n                                toRead--;\r\n                                if (toRead == 0) {\r\n                                    mode = \"\";\r\n                                }\r\n                            }\r\n                        }\r\n                    } else {\r\n                        if (wrd == \"0001\") {\r\n                            wrd = \"\";\r\n                            U._addNtimes(line, b2 - a0, clr);\r\n                            a0 = b2;\r\n                        }\r\n                        if (wrd == \"001\") {\r\n                            wrd = \"\";\r\n                            mode = \"H\";\r\n                            toRead = 2;\r\n                        }\r\n                        if (U._dmap[wrd] != null) {\r\n                            a1 = b1 + U._dmap[wrd];\r\n                            U._addNtimes(line, a1 - a0, clr);\r\n                            a0 = a1;\r\n                            wrd = \"\";\r\n                            clr = 1 - clr;\r\n                        }\r\n                    }\r\n                }\r\n                if (wrd.endsWith(\"000000000001\")) // needed for some files\r\n                {\r\n                    if (y >= 0) {\r\n                        U._writeBits(line, tgt, toff * 8 + y * bipl);\r\n                    }\r\n                    if (twoDim) {\r\n                        if (fo == 1) {\r\n                            is1D = ((data[boff >>> 3] >>> (7 - (boff & 7))) & 1) == 1;\r\n                        }\r\n                        if (fo == 2) {\r\n                            is1D = ((data[boff >>> 3] >>> ((boff & 7))) & 1) == 1;\r\n                        }\r\n                        boff++;\r\n                    }\r\n                    //log(\"EOL\",y, \"next 1D:\", is1D);\r\n                    wrd = \"\";\r\n                    clr = 0;\r\n                    y++;\r\n                    a0 = 0;\r\n                    pline = U._makeDiff(line);\r\n                    line = [];\r\n                }\r\n            }\r\n            if (line.length == w) {\r\n                U._writeBits(line, tgt, toff * 8 + y * bipl);\r\n            }\r\n        }\r\n\r\n        UTIF.decode._addNtimes = function(arr, n, val) {\r\n            for (var i = 0; i < n; i++) {\r\n                arr.push(val);\r\n            }\r\n        }\r\n\r\n        UTIF.decode._writeBits = function(bits, tgt, boff) {\r\n            for (var i = 0; i < bits.length; i++) {\r\n                tgt[(boff + i) >>> 3] |= (bits[i] << (7 - ((boff + i) & 7)));\r\n            }\r\n        }\r\n\r\n        UTIF.decode._decodeLZW = UTIF.decode._decodeLZW = function() {\r\n            var e, U, Z, u, K = 0, V = 0, g = 0, N = 0, O = function() {\r\n                var S = e >>> 3, A = U[S] << 16 | U[S + 1] << 8 | U[S + 2], j = A >>> 24 - (e & 7) - V & (1 << V) - 1;\r\n                e += V;\r\n                return j\r\n            }, h = new Uint32Array(4096 * 4), w = 0, m = function(S) {\r\n                if (S == w) {\r\n                    return;\r\n                }\r\n                w = S;\r\n                g = 1 << S;\r\n                N = g + 1;\r\n                for (var A = 0;\r\n                     A < N + 1; A++) {\r\n                    h[4 * A] = h[4 * A + 3] = A;\r\n                    h[4 * A + 1] = 65535;\r\n                    h[4 * A + 2] = 1\r\n                }\r\n            }, i = function(S) {\r\n                V = S + 1;\r\n                K = N + 1\r\n            }, D = function(S) {\r\n                var A = S << 2, j = h[A + 2], a = u + j - 1;\r\n                while (A != 65535) {\r\n                    Z[a--] = h[A];\r\n                    A = h[A + 1]\r\n                }\r\n                u += j\r\n            }, L = function(S, A) {\r\n                var j = K << 2, a = S << 2;\r\n                h[j] = h[(A << 2) + 3];\r\n                h[j + 1] = a;\r\n                h[j + 2] = h[a + 2] + 1;\r\n                h[j + 3] = h[a + 3];\r\n                K++;\r\n                if (K + 1 == 1 << V && V != 12) {\r\n                    V++\r\n                }\r\n            }, T = function(S, A, j, a, n, q) {\r\n                e = A << 3;\r\n                U = S;\r\n                Z = a;\r\n                u = n;\r\n                var B = A + j << 3, _ = 0, t = 0;\r\n                m(q);\r\n                i(q);\r\n                while (e < B && (_ = O()) != N) {\r\n                    if (_ == g) {\r\n                        i(q);\r\n                        _ = O();\r\n                        if (_ == N) {\r\n                            break;\r\n                        }\r\n                        D(_)\r\n                    } else {\r\n                        if (_ < K) {\r\n                            D(_);\r\n                            L(t, _)\r\n                        } else {\r\n                            L(t, t);\r\n                            D(K - 1)\r\n                        }\r\n                    }\r\n                    t = _\r\n                }\r\n                return u\r\n            };\r\n            return T\r\n        }();\r\n\r\n        UTIF.tags = {};\r\n//UTIF.ttypes = {  256:3,257:3,258:3,   259:3, 262:3,  273:4,  274:3, 277:3,278:4,279:4, 282:5, 283:5, 284:3, 286:5,287:5, 296:3, 305:2, 306:2, 338:3, 513:4, 514:4, 34665:4  };\r\n// start at tag 250\r\n        UTIF._types = function() {\r\n            var main = new Array(250);\r\n            main.fill(0);\r\n            main = main.concat([0, 0, 0, 0, 4, 3, 3, 3, 3, 3, 0, 0, 3, 0, 0, 0, 3, 0, 0, 2, 2, 2, 2, 4, 3, 0, 0, 3, 4, 4, 3, 3, 5, 5, 3, 2, 5, 5, 0, 0, 0, 0, 4, 4, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 3, 5, 5, 3, 0, 3, 3, 4, 4, 4, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);\r\n            var rest = {\r\n                33432: 2,\r\n                33434: 5,\r\n                33437: 5,\r\n                34665: 4,\r\n                34850: 3,\r\n                34853: 4,\r\n                34855: 3,\r\n                34864: 3,\r\n                34866: 4,\r\n                36864: 7,\r\n                36867: 2,\r\n                36868: 2,\r\n                37121: 7,\r\n                37377: 10,\r\n                37378: 5,\r\n                37380: 10,\r\n                37381: 5,\r\n                37383: 3,\r\n                37384: 3,\r\n                37385: 3,\r\n                37386: 5,\r\n                37510: 7,\r\n                37520: 2,\r\n                37521: 2,\r\n                37522: 2,\r\n                40960: 7,\r\n                40961: 3,\r\n                40962: 4,\r\n                40963: 4,\r\n                40965: 4,\r\n                41486: 5,\r\n                41487: 5,\r\n                41488: 3,\r\n                41985: 3,\r\n                41986: 3,\r\n                41987: 3,\r\n                41988: 5,\r\n                41989: 3,\r\n                41990: 3,\r\n                41993: 3,\r\n                41994: 3,\r\n                41995: 7,\r\n                41996: 3,\r\n                42032: 2,\r\n                42033: 2,\r\n                42034: 5,\r\n                42036: 2,\r\n                42037: 2,\r\n                59932: 7\r\n            };\r\n            return {\r\n                basic: {\r\n                    main: main,\r\n                    rest: rest\r\n                },\r\n                gps: {\r\n                    main: [1, 2, 5, 2, 5, 1, 5, 5, 0, 9],\r\n                    rest: {18: 2, 29: 2}\r\n                }\r\n            }\r\n        }();\r\n\r\n        UTIF._readIFD = function(bin, data, offset, ifds, depth, prm) {\r\n            var cnt = bin.readUshort(data, offset);\r\n            offset += 2;\r\n            var ifd = {};\r\n\r\n            if (prm.debug) {\r\n                log(\"   \".repeat(depth), ifds.length - 1, \">>>----------------\");\r\n            }\r\n            for (var i = 0; i < cnt; i++) {\r\n                var tag = bin.readUshort(data, offset);\r\n                offset += 2;\r\n                var type = bin.readUshort(data, offset);\r\n                offset += 2;\r\n                var num = bin.readUint(data, offset);\r\n                offset += 4;\r\n                var voff = bin.readUint(data, offset);\r\n                offset += 4;\r\n\r\n                var arr = [];\r\n                //ifd[\"t\"+tag+\"-\"+UTIF.tags[tag]] = arr;\r\n                if (type == 1 || type == 7) {\r\n                    var no = (num < 5 ? offset - 4 : voff);\r\n                    if (no + num > data.buffer.byteLength) {\r\n                        num = data.buffer.byteLength - no;\r\n                    }\r\n                    arr = new Uint8Array(data.buffer, no, num);\r\n                }\r\n                if (type == 2) {\r\n                    var o0 = (num < 5 ? offset - 4 : voff), c = data[o0],\r\n                            len = Math.max(0, Math.min(num - 1, data.length - o0));\r\n                    if (c < 128 || len == 0) {\r\n                        arr.push(bin.readASCII(data, o0, len));\r\n                    } else {\r\n                        arr = new Uint8Array(data.buffer, o0, len);\r\n                    }\r\n                }\r\n                if (type == 3) {\r\n                    for (var j = 0; j < num; j++) {\r\n                        arr.push(bin.readUshort(data, (num < 3 ? offset - 4 : voff) + 2 * j));\r\n                    }\r\n                }\r\n                if (type == 4\r\n                    || type == 13) {\r\n                    for (var j = 0; j < num; j++) {\r\n                        arr.push(bin.readUint(data, (num < 2 ? offset - 4 : voff) + 4 * j));\r\n                    }\r\n                }\r\n                if (type == 5 || type == 10) {\r\n                    var ri = type == 5 ? bin.readUint : bin.readInt;\r\n                    for (var j = 0; j < num; j++) {\r\n                        arr.push([ri(data, voff + j * 8), ri(data, voff + j * 8 + 4)]);\r\n                    }\r\n                }\r\n                if (type == 8) {\r\n                    for (var j = 0; j < num; j++) {\r\n                        arr.push(bin.readShort(data, (num < 3 ? offset - 4 : voff) + 2 * j));\r\n                    }\r\n                }\r\n                if (type == 9) {\r\n                    for (var j = 0; j < num; j++) {\r\n                        arr.push(bin.readInt(data, (num < 2 ? offset - 4 : voff) + 4 * j));\r\n                    }\r\n                }\r\n                if (type == 11) {\r\n                    for (var j = 0; j < num; j++) {\r\n                        arr.push(bin.readFloat(data, voff + j * 4));\r\n                    }\r\n                }\r\n                if (type == 12) {\r\n                    for (var j = 0; j < num; j++) {\r\n                        arr.push(bin.readDouble(data, voff + j * 8));\r\n                    }\r\n                }\r\n\r\n                if (num != 0 && arr.length == 0) {\r\n                    log(tag, \"unknown TIFF tag type: \", type, \"num:\", num);\r\n                    if (i == 0) {\r\n                        return;\r\n                    }\r\n                    continue;\r\n                }\r\n                if (prm.debug) {\r\n                    log(\"   \".repeat(depth), tag, type, UTIF.tags[tag], arr);\r\n                }\r\n\r\n                ifd[\"t\" + tag] = arr;\r\n\r\n                if (tag == 330 && ifd[\"t272\"] && ifd[\"t272\"][0] == \"DSLR-A100\") {\r\n                } else if (tag == 330 || tag == 34665 || tag == 34853 || (tag == 50740 && bin.readUshort(data, bin.readUint(arr, 0)) < 300) || tag == 61440) {\r\n                    var oarr = tag == 50740 ? [bin.readUint(arr, 0)] : arr;\r\n                    var subfd = [];\r\n                    for (var j = 0; j < oarr.length; j++) {\r\n                        UTIF._readIFD(bin, data, oarr[j], subfd, depth + 1, prm);\r\n                    }\r\n                    if (tag == 330) {\r\n                        ifd.subIFD = subfd;\r\n                    }\r\n                    if (tag == 34665) {\r\n                        ifd.exifIFD = subfd[0];\r\n                    }\r\n                    if (tag == 34853) {\r\n                        ifd.gpsiIFD = subfd[0];\r\n                    }  //console.log(\"gps\", subfd[0]);  }\r\n                    if (tag == 50740) {\r\n                        ifd.dngPrvt = subfd[0];\r\n                    }\r\n                    if (tag == 61440) {\r\n                        ifd.fujiIFD = subfd[0];\r\n                    }\r\n                }\r\n                if (tag == 37500 && prm.parseMN) {\r\n                    var mn = arr;\r\n                    //console.log(bin.readASCII(mn,0,mn.length), mn);\r\n                    if (bin.readASCII(mn, 0, 5) == \"Nikon\") {\r\n                        ifd.makerNote = UTIF[\"decode\"](mn.slice(10).buffer)[0];\r\n                    } else if (bin.readASCII(mn, 0, 5) == \"OLYMP\" || bin.readASCII(mn, 0, 9) == \"OM SYSTEM\") { // ???\r\n                        var inds = [8208, 8224, 8240, 8256, 8272];\r\n                        var subsub = [];\r\n                        UTIF._readIFD(bin, mn, mn[1] == 77 ? 16 : (mn[5] == 85 ? 12 : 8), subsub, depth + 1, prm);\r\n                        var obj = ifd.makerNote = subsub.pop();\r\n                        for (var j = 0; j < inds.length; j++) {\r\n                            var k = \"t\" + inds[j];\r\n                            if (obj[k] == null) {\r\n                                continue;\r\n                            }\r\n                            UTIF._readIFD(bin, mn, obj[k][0], subsub, depth + 1, prm);\r\n                            obj[k] = subsub.pop();\r\n                        }\r\n                        if (obj[\"t12288\"]) {\r\n                            UTIF._readIFD(bin, obj[\"t12288\"], 0, subsub, depth + 1, prm);\r\n                            obj[\"t12288\"] = subsub.pop();\r\n                        }\r\n                    } else if (bin.readUshort(data, voff) < 300 && bin.readUshort(data, voff + 4) <= 12) {\r\n                        var subsub = [];\r\n                        UTIF._readIFD(bin, data, voff, subsub, depth + 1, prm);\r\n                        ifd.makerNote = subsub[0];\r\n                    }\r\n                }\r\n            }\r\n            ifds.push(ifd);\r\n            if (prm.debug) {\r\n                log(\"   \".repeat(depth), \"<<<---------------\");\r\n            }\r\n            return offset;\r\n        }\r\n\r\n        UTIF._writeIFD = function(bin, types, data, offset, ifd) {\r\n            var keys = Object.keys(ifd), knum = keys.length;\r\n            if (ifd[\"exifIFD\"]) {\r\n                knum--;\r\n            }\r\n            if (ifd[\"gpsiIFD\"]) {\r\n                knum--;\r\n            }\r\n            bin.writeUshort(data, offset, knum);\r\n            offset += 2;\r\n\r\n            var eoff = offset + knum * 12 + 4;\r\n\r\n            for (var ki = 0; ki < keys.length; ki++) {\r\n                var key = keys[ki];\r\n                if (key == \"t34665\" || key == \"t34853\") {\r\n                    continue;\r\n                }\r\n                if (key == \"exifIFD\") {\r\n                    key = \"t34665\";\r\n                }\r\n                if (key == \"gpsiIFD\") {\r\n                    key = \"t34853\";\r\n                }\r\n                var tag = parseInt(key.slice(1)), type = types.main[tag];\r\n                if (type == null) {\r\n                    type = types.rest[tag];\r\n                }\r\n                if (type == null || type == 0) {\r\n                    throw new Error(\"unknown type of tag: \" + tag);\r\n                }\r\n                //console.log(offset+\":\", tag, type, eoff);\r\n                var val = ifd[key];\r\n                if (tag == 34665) {\r\n                    var outp = UTIF._writeIFD(bin, types, data, eoff, ifd[\"exifIFD\"]);\r\n                    val = [eoff];\r\n                    eoff = outp[1];\r\n                }\r\n                if (tag == 34853) {\r\n                    var outp = UTIF._writeIFD(bin, UTIF._types.gps, data, eoff, ifd[\"gpsiIFD\"]);\r\n                    val = [eoff];\r\n                    eoff = outp[1];\r\n                }\r\n                if (type == 2) {\r\n                    val = val[0] + \"\\u0000\";\r\n                }\r\n                var num = val.length;\r\n                bin.writeUshort(data, offset, tag);\r\n                offset += 2;\r\n                bin.writeUshort(data, offset, type);\r\n                offset += 2;\r\n                bin.writeUint(data, offset, num);\r\n                offset += 4;\r\n\r\n                var dlen = [-1, 1, 1, 2, 4, 8, 0, 1, 0, 4, 8, 0, 8][type] * num;  //if(dlen<1) throw \"e\";\r\n                var toff = offset;\r\n                if (dlen > 4) {\r\n                    bin.writeUint(data, offset, eoff);\r\n                    toff = eoff;\r\n                }\r\n\r\n                if (type == 1 || type == 7) {\r\n                    for (var i = 0; i < num; i++) {\r\n                        data[toff + i] = val[i];\r\n                    }\r\n                } else if (type == 2) {\r\n                    bin.writeASCII(data, toff, val);\r\n                } else if (type == 3) {\r\n                    for (var i = 0; i < num; i++) {\r\n                        bin.writeUshort(data, toff + 2 * i, val[i]);\r\n                    }\r\n                } else if (type == 4) {\r\n                    for (var i = 0; i < num; i++) {\r\n                        bin.writeUint(data, toff + 4 * i, val[i]);\r\n                    }\r\n                } else if (type == 5 || type == 10) {\r\n                    var wr = type == 5 ? bin.writeUint : bin.writeInt;\r\n                    for (var i = 0; i < num; i++) {\r\n                        var v = val[i], nu = v[0], de = v[1];\r\n                        if (nu == null) {\r\n                            throw \"e\";\r\n                        }\r\n                        wr(data, toff + 8 * i, nu);\r\n                        wr(data, toff + 8 * i + 4, de);\r\n                    }\r\n                } else if (type == 9) {\r\n                    for (var i = 0; i < num; i++) {\r\n                        bin.writeInt(data, toff + 4 * i, val[i]);\r\n                    }\r\n                } else if (type == 12) {\r\n                    for (var i = 0; i < num; i++) {\r\n                        bin.writeDouble(data, toff + 8 * i, val[i]);\r\n                    }\r\n                } else {\r\n                    throw type;\r\n                }\r\n\r\n                if (dlen > 4) {\r\n                    dlen += (dlen & 1);\r\n                    eoff += dlen;\r\n                }\r\n                offset += 4;\r\n            }\r\n            return [offset, eoff];\r\n        }\r\n\r\n        UTIF.toRGBA8 = function(out, scl) {\r\n            function gamma(x) {\r\n                return x < 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1.0 / 2.4) - 0.055;\r\n            }\r\n\r\n\r\n            var w = out.width, h = out.height, area = w * h, qarea = area * 4, data = out.data;\r\n            var img = new Uint8Array(area * 4);\r\n            //console.log(out);\r\n            // 0: WhiteIsZero, 1: BlackIsZero, 2: RGB, 3: Palette color, 4: Transparency mask, 5: CMYK\r\n            var intp = (out[\"t262\"] ? out[\"t262\"][0] : 2), bps = (out[\"t258\"] ? Math.min(32, out[\"t258\"][0]) : 1);\r\n            if (out[\"t262\"] == null && bps == 1) {\r\n                intp = 0;\r\n            }\r\n\r\n            var smpls = out[\"t277\"] ? out[\"t277\"][0] : (out[\"t258\"] ? out[\"t258\"].length : [1, 1, 3, 1, 1, 4, 3][intp]);\r\n            var sfmt = out[\"t339\"] ? out[\"t339\"][0] : null;\r\n            if (intp == 1 && bps == 32 && sfmt != 3) {\r\n                throw \"e\";\r\n            }  // sample format\r\n            var bpl = Math.ceil(smpls * bps * w / 8);\r\n\r\n            //log(\"interpretation: \", intp, \"smpls\", smpls, \"bps\", bps, \"sample format\",sfmt, out);\r\n\r\n            if (false) {\r\n            } else if (intp == 0) {\r\n                scl = 1 / 256; // \"Photopeatest.tif\"\r\n                for (var y = 0; y < h; y++) {\r\n                    var off = y * bpl, io = y * w;\r\n                    if (bps == 1) {\r\n                        for (var i = 0; i < w; i++) {\r\n                            var qi = (io + i) << 2, px = ((data[off + (i >> 3)]) >> (7 - (i & 7))) & 1;\r\n                            img[qi] = img[qi + 1] = img[qi + 2] = (1 - px) * 255;\r\n                            img[qi + 3] = 255;\r\n                        }\r\n                    }\r\n                    if (bps == 4) {\r\n                        for (var i = 0; i < w; i++) {\r\n                            var qi = (io + i) << 2, px = ((data[off + (i >> 1)]) >> (4 - 4 * (i & 1))) & 15;\r\n                            img[qi] = img[qi + 1] = img[qi + 2] = (15 - px) * 17;\r\n                            img[qi + 3] = 255;\r\n                        }\r\n                    }\r\n                    if (bps == 8) {\r\n                        for (var i = 0; i < w; i++) {\r\n                            var qi = (io + i) << 2, px = data[off + i];\r\n                            img[qi] = img[qi + 1] = img[qi + 2] = 255 - px;\r\n                            img[qi + 3] = 255;\r\n                        }\r\n                    }\r\n                    if (bps == 16) {\r\n                        for (var i = 0; i < w; i++) {\r\n                            var qi = (io + i) << 2, o = off + (2 * i), px = (data[o + 1] << 8) | data[o];\r\n                            img[qi] = img[qi + 1] = img[qi + 2] = Math.min(255, 255 - (~~(px * scl)));\r\n                            img[qi + 3] = 255;\r\n                        }\r\n                    } // ladoga.tif\r\n                }\r\n            } else if (intp == 1) {\r\n                if (scl == null) {\r\n                    scl = 1 / 256;\r\n                }\r\n                var f32 = ((data.length & 3) == 0) ? new Float32Array(data.buffer) : null;\r\n\r\n                for (var y = 0; y < h; y++) {\r\n                    var off = y * bpl, io = y * w;\r\n                    if (bps == 1) {\r\n                        for (var i = 0; i < w; i++) {\r\n                            var qi = (io + i) << 2, px = ((data[off + (i >> 3)]) >> (7 - (i & 7))) & 1;\r\n                            img[qi] = img[qi + 1] = img[qi + 2] = (px) * 255;\r\n                            img[qi + 3] = 255;\r\n                        }\r\n                    }\r\n                    if (bps == 2) {\r\n                        for (var i = 0; i < w; i++) {\r\n                            var qi = (io + i) << 2, px = ((data[off + (i >> 2)]) >> (6 - 2 * (i & 3))) & 3;\r\n                            img[qi] = img[qi + 1] = img[qi + 2] = (px) * 85;\r\n                            img[qi + 3] = 255;\r\n                        }\r\n                    }\r\n                    if (bps == 8) {\r\n                        for (var i = 0; i < w; i++) {\r\n                            var qi = (io + i) << 2, px = data[off + i * smpls];\r\n                            img[qi] = img[qi + 1] = img[qi + 2] = px;\r\n                            img[qi + 3] = 255;\r\n                        }\r\n                    }\r\n                    if (bps == 16) {\r\n                        for (var i = 0; i < w; i++) {\r\n                            var qi = (io + i) << 2, o = off + (2 * i), px = (data[o + 1] << 8) | data[o];\r\n                            img[qi] = img[qi + 1] = img[qi + 2] = Math.min(255, ~~(px * scl));\r\n                            img[qi + 3] = 255;\r\n                        }\r\n                    } // ladoga.tif\r\n                    if (bps == 32) {\r\n                        for (var i = 0; i < w; i++) {\r\n                            var qi = (io + i) << 2, o = (off >>> 2) + i, px = f32[o];\r\n                            img[qi] = img[qi + 1] = img[qi + 2] = ~~(0.5 + 255 * px);\r\n                            img[qi + 3] = 255;\r\n                        }\r\n                    }\r\n                }\r\n            } else if (intp == 2) {\r\n                if (bps == 8) {\r\n                    if (smpls == 1) {\r\n                        for (var i = 0; i < area; i++) {\r\n                            img[4 * i] = img[4 * i + 1] = img[4 * i + 2] = data[i];\r\n                            img[4 * i + 3] = 255;\r\n                        }\r\n                    }\r\n                    if (smpls == 3) {\r\n                        for (var i = 0; i < area; i++) {\r\n                            var qi = i << 2, ti = i * 3;\r\n                            img[qi] = data[ti];\r\n                            img[qi + 1] = data[ti + 1];\r\n                            img[qi + 2] = data[ti + 2];\r\n                            img[qi + 3] = 255;\r\n                        }\r\n                    }\r\n                    if (smpls >= 4) {\r\n                        for (var i = 0; i < area; i++) {\r\n                            var qi = i << 2, ti = i * smpls;\r\n                            img[qi] = data[ti];\r\n                            img[qi + 1] = data[ti + 1];\r\n                            img[qi + 2] = data[ti + 2];\r\n                            img[qi + 3] = data[ti + 3];\r\n                        }\r\n                    }\r\n                } else if (bps == 16) {  // 3x 16-bit channel\r\n                    if (smpls == 4) {\r\n                        for (var i = 0; i < area; i++) {\r\n                            var qi = i << 2, ti = i * 8 + 1;\r\n                            img[qi] = data[ti];\r\n                            img[qi + 1] = data[ti + 2];\r\n                            img[qi + 2] = data[ti + 4];\r\n                            img[qi + 3] = data[ti + 6];\r\n                        }\r\n                    }\r\n                    if (smpls == 3) {\r\n                        for (var i = 0; i < area; i++) {\r\n                            var qi = i << 2, ti = i * 6 + 1;\r\n                            img[qi] = data[ti];\r\n                            img[qi + 1] = data[ti + 2];\r\n                            img[qi + 2] = data[ti + 4];\r\n                            img[qi + 3] = 255;\r\n                        }\r\n                    }\r\n                } else if (bps == 32) {\r\n                    var ndt = new Float32Array(data.buffer);  // t339 is [3,3,3]\r\n                    // check the endianity\r\n                    var min = 0;\r\n                    for (var i = 0; i < ndt.length; i++) {\r\n                        min = Math.min(min, ndt[i]);\r\n                    }\r\n                    if (min < 0) {\r\n                        for (var i = 0; i < data.length; i += 4) {\r\n                            var t = data[i];\r\n                            data[i] = data[i + 3];\r\n                            data[i + 3] = t;\r\n                            t = data[i + 1];\r\n                            data[i + 1] = data[i + 2];\r\n                            data[i + 2] = t;\r\n                        }\r\n                    }\r\n                    // gamma correction\r\n                    var pmap = [];\r\n                    for (var i = 0; i < 65536; i++) {\r\n                        pmap.push(gamma(i / 65535));\r\n                    }\r\n                    for (var i = 0; i < ndt.length; i++) {\r\n                        var cv = Math.max(0, Math.min(1, ndt[i]));\r\n                        ndt[i] = pmap[~~(0.5 + cv * 65535)];\r\n                    }\r\n\r\n                    if (smpls == 3) {\r\n                        for (var i = 0; i < area; i++) {\r\n                            var qi = i << 2, ti = i * 3;\r\n                            img[qi] = ~~(0.5 + ndt[ti] * 255);\r\n                            img[qi + 1] = ~~(0.5 + ndt[ti + 1] * 255);\r\n                            img[qi + 2] = ~~(0.5 + ndt[ti + 2] * 255);\r\n                            img[qi + 3] = 255;\r\n                        }\r\n                    } else if (smpls == 4) {\r\n                        for (var i = 0; i < area; i++) {\r\n                            var qi = i << 2, ti = i * 4;\r\n                            img[qi] = ~~(0.5 + ndt[ti] * 255);\r\n                            img[qi + 1] = ~~(0.5 + ndt[ti + 1] * 255);\r\n                            img[qi + 2] = ~~(0.5 + ndt[ti + 2] * 255);\r\n                            img[qi + 3] = ~~(0.5 + ndt[ti + 3] * 255);\r\n                        }\r\n                    } else {\r\n                        throw smpls;\r\n                    }\r\n                } else {\r\n                    throw bps;\r\n                }\r\n            } else if (intp == 3) {\r\n                var map = out[\"t320\"];\r\n                var cn = 1 << bps;\r\n\r\n                var nexta = bps == 8 && smpls > 1 && out[\"t338\"] && out[\"t338\"][0] != 0;\r\n\r\n                for (var y = 0; y < h; y++) {\r\n                    for (var x = 0; x < w; x++) {\r\n                        var i = y * w + x;\r\n                        var qi = i << 2, mi = 0;\r\n                        var dof = y * bpl;\r\n                        if (false) {\r\n                        } else if (bps == 1) {\r\n                            mi = (data[dof + (x >>> 3)] >>> (7 - (x & 7))) & 1;\r\n                        } else if (bps == 2) {\r\n                            mi = (data[dof + (x >>> 2)] >>> (6 - 2 * (x & 3))) & 3;\r\n                        } else if (bps == 4) {\r\n                            mi = (data[dof + (x >>> 1)] >>> (4 - 4 * (x & 1))) & 15;\r\n                        } else if (bps == 8) {\r\n                            mi = data[dof + x * smpls];\r\n                        } else {\r\n                            throw bps;\r\n                        }\r\n                        img[qi] = (map[mi] >> 8);\r\n                        img[qi + 1] = (map[cn + mi] >> 8);\r\n                        img[qi + 2] = (map[cn + cn + mi] >> 8);\r\n                        img[qi + 3] = nexta ? data[dof + x * smpls + 1] : 255;\r\n                    }\r\n                }\r\n            } else if (intp == 5) {\r\n                var gotAlpha = smpls > 4 ? 1 : 0;\r\n                for (var i = 0; i < area; i++) {\r\n                    var qi = i << 2, si = i * smpls;\r\n\r\n                    if (window.UDOC) {\r\n                        var C = data[si], M = data[si + 1], Y = data[si + 2], K = data[si + 3];\r\n                        var c = UDOC.C.cmykToRgb([C * (1 / 255), M * (1 / 255), Y * (1 / 255), K * (1 / 255)]);\r\n                        img[qi] = ~~(0.5 + 255 * c[0]);\r\n                        img[qi + 1] = ~~(0.5 + 255 * c[1]);\r\n                        img[qi + 2] = ~~(0.5 + 255 * c[2]);\r\n                    } else {\r\n                        var C = 255 - data[si], M = 255 - data[si + 1], Y = 255 - data[si + 2],\r\n                                K = (255 - data[si + 3]) * (1 / 255);\r\n                        img[qi] = ~~(C * K + 0.5);\r\n                        img[qi + 1] = ~~(M * K + 0.5);\r\n                        img[qi + 2] = ~~(Y * K + 0.5);\r\n                    }\r\n\r\n                    img[qi + 3] = 255 * (1 - gotAlpha) + data[si + 4] * gotAlpha;\r\n                }\r\n            } else if (intp == 6 && out[\"t278\"]) {  // only for DSC_1538.TIF\r\n                var rps = out[\"t278\"][0];\r\n                for (var y = 0; y < h; y += rps) {\r\n                    var i = (y * w), len = rps * w;\r\n\r\n                    for (var j = 0; j < len; j++) {\r\n                        var qi = 4 * (i + j), si = 3 * i + 4 * (j >>> 1);\r\n                        var Y = data[si + (j & 1)], Cb = data[si + 2] - 128, Cr = data[si + 3] - 128;\r\n\r\n                        var r = Y + ((Cr >> 2) + (Cr >> 3) + (Cr >> 5));\r\n                        var g = Y - ((Cb >> 2) + (Cb >> 4) + (Cb >> 5)) - ((Cr >> 1) + (Cr >> 3) + (Cr >> 4) + (Cr >> 5));\r\n                        var b = Y + (Cb + (Cb >> 1) + (Cb >> 2) + (Cb >> 6));\r\n\r\n                        img[qi] = Math.max(0, Math.min(255, r));\r\n                        img[qi + 1] = Math.max(0, Math.min(255, g));\r\n                        img[qi + 2] = Math.max(0, Math.min(255, b));\r\n                        img[qi + 3] = 255;\r\n                    }\r\n                }\r\n            } else if (intp == 32845) {\r\n\r\n                for (var y = 0; y < h; y++) {\r\n                    for (var x = 0; x < w; x++) {\r\n                        var si = (y * w + x) * 6, qi = (y * w + x) * 4;\r\n                        var L = (data[si + 1] << 8) | data[si];\r\n\r\n                        var L = Math.pow(2, (L + 0.5) / 256 - 64);\r\n                        var u = (data[si + 3] + 0.5) / 410;\r\n                        var v = (data[si + 5] + 0.5) / 410;\r\n\r\n                        // Luv to xyY\r\n                        var sX = (9 * u) / (6 * u - 16 * v + 12);\r\n                        var sY = (4 * v) / (6 * u - 16 * v + 12);\r\n                        var bY = L;\r\n\r\n                        // xyY to XYZ\r\n                        var X = (sX * bY) / sY, Y = bY, Z = (1 - sX - sY) * bY / sY;\r\n\r\n\r\n                        var r = 2.690 * X - 1.276 * Y - 0.414 * Z\r\n                        var g = -1.022 * X + 1.978 * Y + 0.044 * Z\r\n                        var b = 0.061 * X - 0.224 * Y + 1.163 * Z\r\n\r\n                        img[qi] = gamma(Math.min(r, 1)) * 255;\r\n                        img[qi + 1] = gamma(Math.min(g, 1)) * 255;\r\n                        img[qi + 2] = gamma(Math.min(b, 1)) * 255;\r\n                        img[qi + 3] = 255;\r\n                    }\r\n                }\r\n            } else {\r\n                log(\"Unknown Photometric interpretation: \" + intp);\r\n            }\r\n            return img;\r\n        }\r\n\r\n        UTIF.replaceIMG = function(imgs) {\r\n            if (imgs == null) {\r\n                imgs = document.getElementsByTagName(\"img\");\r\n            }\r\n            var sufs = [\"tif\", \"tiff\", \"dng\", \"cr2\", \"nef\"]\r\n            for (var i = 0; i < imgs.length; i++) {\r\n                var img = imgs[i], src = img.getAttribute(\"src\");\r\n                if (src == null) {\r\n                    continue;\r\n                }\r\n                var suff = src.split(\".\").pop().toLowerCase();\r\n                if (sufs.indexOf(suff) == -1) {\r\n                    continue;\r\n                }\r\n                var xhr = new XMLHttpRequest();\r\n                UTIF._xhrs.push(xhr);\r\n                UTIF._imgs.push(img);\r\n                xhr.open(\"GET\", src);\r\n                xhr.responseType = \"arraybuffer\";\r\n                xhr.onload = UTIF._imgLoaded;\r\n                xhr.send();\r\n            }\r\n        }\r\n\r\n        UTIF._xhrs = [];\r\n        UTIF._imgs = [];\r\n        UTIF._imgLoaded = function(e) {\r\n            var ind = UTIF._xhrs.indexOf(e.target), img = UTIF._imgs[ind];\r\n            UTIF._xhrs.splice(ind, 1);\r\n            UTIF._imgs.splice(ind, 1);\r\n\r\n            img.setAttribute(\"src\", UTIF.bufferToURI(e.target.response));\r\n        }\r\n\r\n        UTIF.bufferToURI = function(buff) {\r\n            var ifds = UTIF.decode(buff);  //console.log(ifds);\r\n            var vsns = ifds, ma = 0, page = vsns[0];\r\n            if (ifds[0].subIFD) {\r\n                vsns = vsns.concat(ifds[0].subIFD);\r\n            }\r\n            for (var i = 0; i < vsns.length; i++) {\r\n                var img = vsns[i];\r\n                if (img[\"t258\"] == null || img[\"t258\"].length < 3) {\r\n                    continue;\r\n                }\r\n                var ar = img[\"t256\"] * img[\"t257\"];\r\n                if (ar > ma) {\r\n                    ma = ar;\r\n                    page = img;\r\n                }\r\n            }\r\n            UTIF.decodeImage(buff, page, ifds);\r\n            var rgba = UTIF.toRGBA8(page), w = page.width, h = page.height;\r\n\r\n            var cnv = document.createElement(\"canvas\");\r\n            cnv.width = w;\r\n            cnv.height = h;\r\n            var ctx = cnv.getContext(\"2d\");\r\n            var imgd = new ImageData(new Uint8ClampedArray(rgba.buffer), w, h);\r\n            ctx.putImageData(imgd, 0, 0);\r\n            return cnv.toDataURL();\r\n        }\r\n\r\n\r\n        UTIF._binBE =\r\n                {\r\n                    nextZero: function(data, o) {\r\n                        while (data[o] != 0) {\r\n                            o++;\r\n                        }\r\n                        return o;\r\n                    },\r\n                    readUshort: function(buff, p) {\r\n                        return (buff[p] << 8) | buff[p + 1];\r\n                    },\r\n                    readShort: function(buff, p) {\r\n                        var a = UTIF._binBE.ui8;\r\n                        a[0] = buff[p + 1];\r\n                        a[1] = buff[p + 0];\r\n                        return UTIF._binBE.i16[0];\r\n                    },\r\n                    readInt: function(buff, p) {\r\n                        var a = UTIF._binBE.ui8;\r\n                        a[0] = buff[p + 3];\r\n                        a[1] = buff[p + 2];\r\n                        a[2] = buff[p + 1];\r\n                        a[3] = buff[p + 0];\r\n                        return UTIF._binBE.i32[0];\r\n                    },\r\n                    readUint: function(buff, p) {\r\n                        var a = UTIF._binBE.ui8;\r\n                        a[0] = buff[p + 3];\r\n                        a[1] = buff[p + 2];\r\n                        a[2] = buff[p + 1];\r\n                        a[3] = buff[p + 0];\r\n                        return UTIF._binBE.ui32[0];\r\n                    },\r\n                    readASCII: function(buff, p, l) {\r\n                        var s = \"\";\r\n                        for (var i = 0; i < l; i++) {\r\n                            s += String.fromCharCode(buff[p + i]);\r\n                        }\r\n                        return s;\r\n                    },\r\n                    readFloat: function(buff, p) {\r\n                        var a = UTIF._binBE.ui8;\r\n                        for (var i = 0; i < 4; i++) {\r\n                            a[i] = buff[p + 3 - i];\r\n                        }\r\n                        return UTIF._binBE.fl32[0];\r\n                    },\r\n                    readDouble: function(buff, p) {\r\n                        var a = UTIF._binBE.ui8;\r\n                        for (var i = 0; i < 8; i++) {\r\n                            a[i] = buff[p + 7 - i];\r\n                        }\r\n                        return UTIF._binBE.fl64[0];\r\n                    },\r\n\r\n                    writeUshort: function(buff, p, n) {\r\n                        buff[p] = (n >> 8) & 255;\r\n                        buff[p + 1] = n & 255;\r\n                    },\r\n                    writeInt: function(buff, p, n) {\r\n                        var a = UTIF._binBE.ui8;\r\n                        UTIF._binBE.i32[0] = n;\r\n                        buff[p + 3] = a[0];\r\n                        buff[p + 2] = a[1];\r\n                        buff[p + 1] = a[2];\r\n                        buff[p + 0] = a[3];\r\n                    },\r\n                    writeUint: function(buff, p, n) {\r\n                        buff[p] = (n >> 24) & 255;\r\n                        buff[p + 1] = (n >> 16) & 255;\r\n                        buff[p + 2] = (n >> 8) & 255;\r\n                        buff[p + 3] = (n >> 0) & 255;\r\n                    },\r\n                    writeASCII: function(buff, p, s) {\r\n                        for (var i = 0; i < s.length; i++) {\r\n                            buff[p + i] = s.charCodeAt(i);\r\n                        }\r\n                    },\r\n                    writeDouble: function(buff, p, n) {\r\n                        UTIF._binBE.fl64[0] = n;\r\n                        for (var i = 0; i < 8; i++) {\r\n                            buff[p + i] = UTIF._binBE.ui8[7 - i];\r\n                        }\r\n                    }\r\n                }\r\n        UTIF._binBE.ui8 = new Uint8Array(8);\r\n        UTIF._binBE.i16 = new Int16Array(UTIF._binBE.ui8.buffer);\r\n        UTIF._binBE.i32 = new Int32Array(UTIF._binBE.ui8.buffer);\r\n        UTIF._binBE.ui32 = new Uint32Array(UTIF._binBE.ui8.buffer);\r\n        UTIF._binBE.fl32 = new Float32Array(UTIF._binBE.ui8.buffer);\r\n        UTIF._binBE.fl64 = new Float64Array(UTIF._binBE.ui8.buffer);\r\n\r\n        UTIF._binLE =\r\n                {\r\n                    nextZero: UTIF._binBE.nextZero,\r\n                    readUshort: function(buff, p) {\r\n                        return (buff[p + 1] << 8) | buff[p];\r\n                    },\r\n                    readShort: function(buff, p) {\r\n                        var a = UTIF._binBE.ui8;\r\n                        a[0] = buff[p + 0];\r\n                        a[1] = buff[p + 1];\r\n                        return UTIF._binBE.i16[0];\r\n                    },\r\n                    readInt: function(buff, p) {\r\n                        var a = UTIF._binBE.ui8;\r\n                        a[0] = buff[p + 0];\r\n                        a[1] = buff[p + 1];\r\n                        a[2] = buff[p + 2];\r\n                        a[3] = buff[p + 3];\r\n                        return UTIF._binBE.i32[0];\r\n                    },\r\n                    readUint: function(buff, p) {\r\n                        var a = UTIF._binBE.ui8;\r\n                        a[0] = buff[p + 0];\r\n                        a[1] = buff[p + 1];\r\n                        a[2] = buff[p + 2];\r\n                        a[3] = buff[p + 3];\r\n                        return UTIF._binBE.ui32[0];\r\n                    },\r\n                    readASCII: UTIF._binBE.readASCII,\r\n                    readFloat: function(buff, p) {\r\n                        var a = UTIF._binBE.ui8;\r\n                        for (var i = 0; i < 4; i++) {\r\n                            a[i] = buff[p + i];\r\n                        }\r\n                        return UTIF._binBE.fl32[0];\r\n                    },\r\n                    readDouble: function(buff, p) {\r\n                        var a = UTIF._binBE.ui8;\r\n                        for (var i = 0; i < 8; i++) {\r\n                            a[i] = buff[p + i];\r\n                        }\r\n                        return UTIF._binBE.fl64[0];\r\n                    },\r\n\r\n                    writeUshort: function(buff, p, n) {\r\n                        buff[p] = (n) & 255;\r\n                        buff[p + 1] = (n >> 8) & 255;\r\n                    },\r\n                    writeInt: function(buff, p, n) {\r\n                        var a = UTIF._binBE.ui8;\r\n                        UTIF._binBE.i32[0] = n;\r\n                        buff[p + 0] = a[0];\r\n                        buff[p + 1] = a[1];\r\n                        buff[p + 2] = a[2];\r\n                        buff[p + 3] = a[3];\r\n                    },\r\n                    writeUint: function(buff, p, n) {\r\n                        buff[p] = (n >>> 0) & 255;\r\n                        buff[p + 1] = (n >>> 8) & 255;\r\n                        buff[p + 2] = (n >>> 16) & 255;\r\n                        buff[p + 3] = (n >>> 24) & 255;\r\n                    },\r\n                    writeASCII: UTIF._binBE.writeASCII\r\n                }\r\n        UTIF._copyTile = function(tb, tw, th, b, w, h, xoff, yoff) {\r\n            //log(\"copyTile\", tw, th,  w, h, xoff, yoff);\r\n            var xlim = Math.min(tw, w - xoff);\r\n            var ylim = Math.min(th, h - yoff);\r\n            for (var y = 0; y < ylim; y++) {\r\n                var tof = (yoff + y) * w + xoff;\r\n                var sof = y * tw;\r\n                for (var x = 0; x < xlim; x++) {\r\n                    b[tof + x] = tb[sof + x];\r\n                }\r\n            }\r\n        }\r\n\r\n        UTIF._inflateRaw = function() {\r\n            var H = {};\r\n            H.H = {};\r\n            H.H.N = function(N, W) {\r\n                var R = Uint8Array, i = 0, m = 0, J = 0, h = 0, Q = 0, X = 0, u = 0, w = 0, d = 0, v, C;\r\n                if (N[0] == 3 && N[1] == 0) {\r\n                    return W ? W : new R(0);\r\n                }\r\n                var V = H.H, n = V.b, A = V.e, l = V.R, M = V.n, I = V.A, e = V.Z, b = V.m, Z = W == null;\r\n                if (Z) {\r\n                    W = new R(N.length >>> 2 << 5);\r\n                }\r\n                while (i == 0) {\r\n                    i = n(N, d, 1);\r\n                    m = n(N, d + 1, 2);\r\n                    d += 3;\r\n                    if (m == 0) {\r\n                        if ((d & 7) != 0) {\r\n                            d += 8 - (d & 7);\r\n                        }\r\n                        var D = (d >>> 3) + 4, q = N[D - 4] | N[D - 3] << 8;\r\n                        if (Z) {\r\n                            W = H.H.W(W, w + q);\r\n                        }\r\n                        W.set(new R(N.buffer, N.byteOffset + D, q), w);\r\n                        d = D + q << 3;\r\n                        w += q;\r\n                        continue\r\n                    }\r\n                    if (Z) {\r\n                        W = H.H.W(W, w + (1 << 17));\r\n                    }\r\n                    if (m == 1) {\r\n                        v = b.J;\r\n                        C = b.h;\r\n                        X = (1 << 9) - 1;\r\n                        u = (1 << 5) - 1\r\n                    }\r\n                    if (m == 2) {\r\n                        J = A(N, d, 5) + 257;\r\n                        h = A(N, d + 5, 5) + 1;\r\n                        Q = A(N, d + 10, 4) + 4;\r\n                        d += 14;\r\n                        var E = d, j = 1;\r\n                        for (var c = 0; c < 38; c += 2) {\r\n                            b.Q[c] = 0;\r\n                            b.Q[c + 1] = 0\r\n                        }\r\n                        for (var c = 0;\r\n                             c < Q; c++) {\r\n                            var K = A(N, d + c * 3, 3);\r\n                            b.Q[(b.X[c] << 1) + 1] = K;\r\n                            if (K > j) {\r\n                                j = K\r\n                            }\r\n                        }\r\n                        d += 3 * Q;\r\n                        M(b.Q, j);\r\n                        I(b.Q, j, b.u);\r\n                        v = b.w;\r\n                        C = b.d;\r\n                        d = l(b.u, (1 << j) - 1, J + h, N, d, b.v);\r\n                        var r = V.V(b.v, 0, J, b.C);\r\n                        X = (1 << r) - 1;\r\n                        var S = V.V(b.v, J, h, b.D);\r\n                        u = (1 << S) - 1;\r\n                        M(b.C, r);\r\n                        I(b.C, r, v);\r\n                        M(b.D, S);\r\n                        I(b.D, S, C)\r\n                    }\r\n                    while (!0) {\r\n                        var T = v[e(N, d) & X];\r\n                        d += T & 15;\r\n                        var p = T >>> 4;\r\n                        if (p >>> 8 == 0) {\r\n                            W[w++] = p\r\n                        } else if (p == 256) {\r\n                            break\r\n                        } else {\r\n                            var z = w + p - 254;\r\n                            if (p > 264) {\r\n                                var _ = b.q[p - 257];\r\n                                z = w + (_ >>> 3) + A(N, d, _ & 7);\r\n                                d += _ & 7\r\n                            }\r\n                            var $ = C[e(N, d) & u];\r\n                            d += $ & 15;\r\n                            var s = $ >>> 4, Y = b.c[s], a = (Y >>> 4) + n(N, d, Y & 15);\r\n                            d += Y & 15;\r\n                            while (w < z) {\r\n                                W[w] = W[w++ - a];\r\n                                W[w] = W[w++ - a];\r\n                                W[w] = W[w++ - a];\r\n                                W[w] = W[w++ - a]\r\n                            }\r\n                            w = z\r\n                        }\r\n                    }\r\n                }\r\n                return W.length == w ? W : W.slice(0, w)\r\n            };\r\n            H.H.W = function(N, W) {\r\n                var R = N.length;\r\n                if (W <= R) {\r\n                    return N;\r\n                }\r\n                var V = new Uint8Array(R << 1);\r\n                V.set(N, 0);\r\n                return V\r\n            };\r\n            H.H.R = function(N, W, R, V, n, A) {\r\n                var l = H.H.e, M = H.H.Z, I = 0;\r\n                while (I < R) {\r\n                    var e = N[M(V, n) & W];\r\n                    n += e & 15;\r\n                    var b = e >>> 4;\r\n                    if (b <= 15) {\r\n                        A[I] = b;\r\n                        I++\r\n                    } else {\r\n                        var Z = 0, m = 0;\r\n                        if (b == 16) {\r\n                            m = 3 + l(V, n, 2);\r\n                            n += 2;\r\n                            Z = A[I - 1]\r\n                        } else if (b == 17) {\r\n                            m = 3 + l(V, n, 3);\r\n                            n += 3\r\n                        } else if (b == 18) {\r\n                            m = 11 + l(V, n, 7);\r\n                            n += 7\r\n                        }\r\n                        var J = I + m;\r\n                        while (I < J) {\r\n                            A[I] = Z;\r\n                            I++\r\n                        }\r\n                    }\r\n                }\r\n                return n\r\n            };\r\n            H.H.V = function(N, W, R, V) {\r\n                var n = 0, A = 0, l = V.length >>> 1;\r\n                while (A < R) {\r\n                    var M = N[A + W];\r\n                    V[A << 1] = 0;\r\n                    V[(A << 1) + 1] = M;\r\n                    if (M > n) {\r\n                        n = M;\r\n                    }\r\n                    A++\r\n                }\r\n                while (A < l) {\r\n                    V[A << 1] = 0;\r\n                    V[(A << 1) + 1] = 0;\r\n                    A++\r\n                }\r\n                return n\r\n            };\r\n            H.H.n = function(N, W) {\r\n                var R = H.H.m, V = N.length, n, A, l, M, I, e = R.j;\r\n                for (var M = 0; M <= W; M++) {\r\n                    e[M] = 0;\r\n                }\r\n                for (M = 1; M < V; M += 2) {\r\n                    e[N[M]]++;\r\n                }\r\n                var b = R.K;\r\n                n = 0;\r\n                e[0] = 0;\r\n                for (A = 1; A <= W; A++) {\r\n                    n = n + e[A - 1] << 1;\r\n                    b[A] = n\r\n                }\r\n                for (l = 0; l < V; l += 2) {\r\n                    I = N[l + 1];\r\n                    if (I != 0) {\r\n                        N[l] = b[I];\r\n                        b[I]++\r\n                    }\r\n                }\r\n            };\r\n            H.H.A = function(N, W, R) {\r\n                var V = N.length, n = H.H.m, A = n.r;\r\n                for (var l = 0; l < V; l += 2) {\r\n                    if (N[l + 1] != 0) {\r\n                        var M = l >> 1, I = N[l + 1], e = M << 4 | I, b = W - I, Z = N[l] << b, m = Z + (1 << b);\r\n                        while (Z != m) {\r\n                            var J = A[Z] >>> 15 - W;\r\n                            R[J] = e;\r\n                            Z++\r\n                        }\r\n                    }\r\n                }\r\n            };\r\n            H.H.l = function(N, W) {\r\n                var R = H.H.m.r, V = 15 - W;\r\n                for (var n = 0; n < N.length;\r\n                     n += 2) {\r\n                    var A = N[n] << W - N[n + 1];\r\n                    N[n] = R[A] >>> V\r\n                }\r\n            };\r\n            H.H.M = function(N, W, R) {\r\n                R = R << (W & 7);\r\n                var V = W >>> 3;\r\n                N[V] |= R;\r\n                N[V + 1] |= R >>> 8\r\n            };\r\n            H.H.I = function(N, W, R) {\r\n                R = R << (W & 7);\r\n                var V = W >>> 3;\r\n                N[V] |= R;\r\n                N[V + 1] |= R >>> 8;\r\n                N[V + 2] |= R >>> 16\r\n            };\r\n            H.H.e = function(N, W, R) {\r\n                return (N[W >>> 3] | N[(W >>> 3) + 1] << 8) >>> (W & 7) & (1 << R) - 1\r\n            };\r\n            H.H.b = function(N, W, R) {\r\n                return (N[W >>> 3] | N[(W >>> 3) + 1] << 8 | N[(W >>> 3) + 2] << 16) >>> (W & 7) & (1 << R) - 1\r\n            };\r\n            H.H.Z = function(N, W) {\r\n                return (N[W >>> 3] | N[(W >>> 3) + 1] << 8 | N[(W >>> 3) + 2] << 16) >>> (W & 7)\r\n            };\r\n            H.H.i = function(N, W) {\r\n                return (N[W >>> 3] | N[(W >>> 3) + 1] << 8 | N[(W >>> 3) + 2] << 16 | N[(W >>> 3) + 3] << 24) >>> (W & 7)\r\n            };\r\n            H.H.m = function() {\r\n                var N = Uint16Array, W = Uint32Array;\r\n                return {\r\n                    K: new N(16),\r\n                    j: new N(16),\r\n                    X: [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15],\r\n                    S: [3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 999, 999, 999],\r\n                    T: [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 0, 0, 0],\r\n                    q: new N(32),\r\n                    p: [1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577, 65535, 65535],\r\n                    z: [0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 0, 0],\r\n                    c: new W(32),\r\n                    J: new N(512),\r\n                    _: [],\r\n                    h: new N(32),\r\n                    $: [],\r\n                    w: new N(32768),\r\n                    C: [],\r\n                    v: [],\r\n                    d: new N(32768),\r\n                    D: [],\r\n                    u: new N(512),\r\n                    Q: [],\r\n                    r: new N(1 << 15),\r\n                    s: new W(286),\r\n                    Y: new W(30),\r\n                    a: new W(19),\r\n                    t: new W(15e3),\r\n                    k: new N(1 << 16),\r\n                    g: new N(1 << 15)\r\n                }\r\n            }();\r\n            (function() {\r\n                var N = H.H.m, W = 1 << 15;\r\n                for (var R = 0; R < W; R++) {\r\n                    var V = R;\r\n                    V = (V & 2863311530) >>> 1 | (V & 1431655765) << 1;\r\n                    V = (V & 3435973836) >>> 2 | (V & 858993459) << 2;\r\n                    V = (V & 4042322160) >>> 4 | (V & 252645135) << 4;\r\n                    V = (V & 4278255360) >>> 8 | (V & 16711935) << 8;\r\n                    N.r[R] = (V >>> 16 | V << 16) >>> 17\r\n                }\r\n\r\n                function n(A, l, M) {\r\n                    while (l-- != 0) {\r\n                        A.push(0, M)\r\n                    }\r\n                }\r\n\r\n                for (var R = 0; R < 32; R++) {\r\n                    N.q[R] = N.S[R] << 3 | N.T[R];\r\n                    N.c[R] = N.p[R] << 4 | N.z[R]\r\n                }\r\n                n(N._, 144, 8);\r\n                n(N._, 255 - 143, 9);\r\n                n(N._, 279 - 255, 7);\r\n                n(N._, 287 - 279, 8);\r\n                H.H.n(N._, 9);\r\n                H.H.A(N._, 9, N.J);\r\n                H.H.l(N._, 9);\r\n                n(N.$, 32, 5);\r\n                H.H.n(N.$, 5);\r\n                H.H.A(N.$, 5, N.h);\r\n                H.H.l(N.$, 5);\r\n                n(N.Q, 19, 0);\r\n                n(N.C, 286, 0);\r\n                n(N.D, 30, 0);\r\n                n(N.v, 320, 0)\r\n            }());\r\n            return H.H.N\r\n        }();\r\n\r\n\r\n        UTIF.LosslessJpegDecode = function() {\r\n            var b, O;\r\n\r\n            function l() {\r\n                return b[O++]\r\n            }\r\n\r\n            function m() {\r\n                return b[O++] << 8 | b[O++]\r\n            }\r\n\r\n            function a0(h) {\r\n                var V = l(), I = [0, 0, 0, 255], f = [], G = 8;\r\n                for (var w = 0; w < 16; w++) {\r\n                    f[w] = l();\r\n                }\r\n                for (var w = 0; w < 16; w++) {\r\n                    for (var x = 0; x < f[w]; x++) {\r\n                        var T = z(I, 0, w + 1, 1);\r\n                        I[T + 3] = l()\r\n                    }\r\n                }\r\n                var E = new Uint8Array(1 << G);\r\n                h[V] = [new Uint8Array(I), E];\r\n                for (var w = 0; w < 1 << G; w++) {\r\n                    var s = G, _ = w, Y = 0, F = 0;\r\n                    while (I[Y + 3] == 255 && s != 0) {\r\n                        F = _ >> --s & 1;\r\n                        Y = I[Y + F]\r\n                    }\r\n                    E[w] = Y\r\n                }\r\n            }\r\n\r\n            function z(h, V, I, f) {\r\n                if (h[V + 3] != 255) {\r\n                    return 0;\r\n                }\r\n                if (I == 0) {\r\n                    return V;\r\n                }\r\n                for (var w = 0; w < 2; w++) {\r\n                    if (h[V + w] == 0) {\r\n                        h[V + w] = h.length;\r\n                        h.push(0, 0, f, 255)\r\n                    }\r\n                    var x = z(h, h[V + w], I - 1, f + 1);\r\n                    if (x != 0) {\r\n                        return x\r\n                    }\r\n                }\r\n                return 0\r\n            }\r\n\r\n            function i(h) {\r\n                var V = h.b, I = h.f;\r\n                while (V < 25 && h.a < h.d) {\r\n                    var f = h.data[h.a++];\r\n                    if (f == 255 && !h.c) {\r\n                        h.a++;\r\n                    }\r\n                    I = I << 8 | f;\r\n                    V += 8\r\n                }\r\n                if (V < 0) {\r\n                    throw \"e\";\r\n                }\r\n                h.b = V;\r\n                h.f = I\r\n            }\r\n\r\n            function H(h, V) {\r\n                if (V.b < h) {\r\n                    i(V);\r\n                }\r\n                return V.f >> (V.b -= h) & 65535 >> 16 - h\r\n            }\r\n\r\n            function g(h, V) {\r\n                var I = h[0], f = 0, w = 255, x = 0;\r\n                if (V.b < 16) {\r\n                    i(V);\r\n                }\r\n                var T = V.f >> V.b - 8 & 255;\r\n                f = h[1][T];\r\n                w = I[f + 3];\r\n                V.b -= I[f + 2];\r\n                while (w == 255) {\r\n                    x = V.f >> --V.b & 1;\r\n                    f = I[f + x];\r\n                    w = I[f + 3]\r\n                }\r\n                return w\r\n            }\r\n\r\n            function P(h, V) {\r\n                if (h < 32768 >> 16 - V) {\r\n                    h += -(1 << V) + 1;\r\n                }\r\n                return h\r\n            }\r\n\r\n            function a2(h, V) {\r\n                var I = g(h, V);\r\n                if (I == 0) {\r\n                    return 0;\r\n                }\r\n                if (I == 16) {\r\n                    return -32768;\r\n                }\r\n                var f = H(I, V);\r\n                return P(f, I)\r\n            }\r\n\r\n            function X(h, V, I, f, w, x) {\r\n                var T = 0;\r\n                for (var G = 0; G < x; G++) {\r\n                    var s = G * V;\r\n                    for (var _ = 0; _ < V; _ += w) {\r\n                        T++;\r\n                        for (var Y = 0; Y < w; Y++) {\r\n                            h[s + _ + Y] = a2(f[Y], I)\r\n                        }\r\n                    }\r\n                    if (I.e != 0 && T % I.e == 0 && G != 0) {\r\n                        var F = I.a, t = I.data;\r\n                        while (t[F] != 255 || !(208 <= t[F + 1] && t[F + 1] <= 215)) {\r\n                            F--;\r\n                        }\r\n                        I.a = F + 2;\r\n                        I.f = 0;\r\n                        I.b = 0\r\n                    }\r\n                }\r\n            }\r\n\r\n            function o(h, V) {\r\n                return P(H(h, V), h)\r\n            }\r\n\r\n            function a1(h, V, I, f, w) {\r\n                var x = b.length - O;\r\n                for (var T = 0; T < x; T += 4) {\r\n                    var G = b[O + T];\r\n                    b[O + T] = b[O + T + 3];\r\n                    b[O + T + 3] = G;\r\n                    var G = b[O + T + 1];\r\n                    b[O + T + 1] = b[O + T + 2];\r\n                    b[O + T + 2] = G\r\n                }\r\n                for (var E = 0;\r\n                     E < w; E++) {\r\n                    var s = 32768, _ = 32768;\r\n                    for (var Y = 0; Y < V; Y += 2) {\r\n                        var F = g(f, I), t = g(f, I);\r\n                        if (F != 0) {\r\n                            s += o(F, I);\r\n                        }\r\n                        if (t != 0) {\r\n                            _ += o(t, I);\r\n                        }\r\n                        h[E * V + Y] = s & 65535;\r\n                        h[E * V + Y + 1] = _ & 65535\r\n                    }\r\n                }\r\n            }\r\n\r\n            function C(h) {\r\n                b = h;\r\n                O = 0;\r\n                if (m() != 65496) {\r\n                    throw \"e\";\r\n                }\r\n                var V = [], I = 0, f = 0, w = 0, x = [], T = [], G = [], E = 0, s = 0, _ = 0;\r\n                while (!0) {\r\n                    var Y = m();\r\n                    if (Y == 65535) {\r\n                        O--;\r\n                        continue\r\n                    }\r\n                    var F = m();\r\n                    if (Y == 65475) {\r\n                        f = l();\r\n                        s = m();\r\n                        _ = m();\r\n                        E = l();\r\n                        for (var t = 0;\r\n                             t < E; t++) {\r\n                            var a = l(), J = l(), r = l();\r\n                            if (r != 0) {\r\n                                throw \"e\";\r\n                            }\r\n                            V[a] = [t, J >> 4, J & 15]\r\n                        }\r\n                    } else if (Y == 65476) {\r\n                        var a3 = O + F - 2;\r\n                        while (O < a3) {\r\n                            a0(T)\r\n                        }\r\n                    } else if (Y == 65498) {\r\n                        O++;\r\n                        for (var t = 0; t < E; t++) {\r\n                            var a5 = l(), v = V[a5];\r\n                            G[v[0]] = T[l() >>> 4];\r\n                            x[v[0]] = v.slice(1)\r\n                        }\r\n                        I = l();\r\n                        O += 2;\r\n                        break\r\n                    } else if (Y == 65501) {\r\n                        w = m()\r\n                    } else {\r\n                        O += F - 2\r\n                    }\r\n                }\r\n                var a4 = f > 8 ? Uint16Array : Uint8Array, $ = new a4(s * _ * E),\r\n                        M = {b: 0, f: 0, c: I == 8, a: O, data: b, d: b.length, e: w};\r\n                if (M.c) {\r\n                    a1($, _ * E, M, G[0], s);\r\n                } else {\r\n                    var c = [], p = 0, D = 0;\r\n                    for (var t = 0; t < E; t++) {\r\n                        var N = x[t], S = N[0], K = N[1];\r\n                        if (S > p) {\r\n                            p = S;\r\n                        }\r\n                        if (K > D) {\r\n                            D = K;\r\n                        }\r\n                        c.push(S * K)\r\n                    }\r\n                    if (p != 1 || D != 1) {\r\n                        if (E != 3 || c[1] != 1 || c[2] != 1) {\r\n                            throw \"e\";\r\n                        }\r\n                        if (p != 2 || D != 1 && D != 2) {\r\n                            throw \"e\";\r\n                        }\r\n                        var u = [], Z = 0;\r\n                        for (var t = 0; t < E; t++) {\r\n                            for (var R = 0; R < c[t]; R++) {\r\n                                u.push(G[t]);\r\n                            }\r\n                            Z += c[t]\r\n                        }\r\n                        var B = _ / p, e = s / D, d = B * e;\r\n                        X($, B * Z, M, u, Z, e);\r\n                        j($, I, B, e, Z - 2, Z, Z, f);\r\n                        var A = new Uint16Array(d * c[0]);\r\n                        if (p == 2 && D == 2) {\r\n                            for (var t = 0; t < d; t++) {\r\n                                A[4 * t] = $[6 * t];\r\n                                A[4 * t + 1] = $[6 * t + 1];\r\n                                A[4 * t + 2] = $[6 * t + 2];\r\n                                A[4 * t + 3] = $[6 * t + 3]\r\n                            }\r\n                            j(A, I, B * 4, e, 0, 1, 1, f);\r\n                            for (var t = 0; t < d; t++) {\r\n                                $[6 * t] = A[4 * t];\r\n                                $[6 * t + 1] = A[4 * t + 1];\r\n                                $[6 * t + 2] = A[4 * t + 2];\r\n                                $[6 * t + 3] = A[4 * t + 3]\r\n                            }\r\n                        }\r\n                        if (p == 2 && D == 1) {\r\n                            for (var t = 0; t < d; t++) {\r\n                                A[2 * t] = $[4 * t];\r\n                                A[2 * t + 1] = $[4 * t + 1]\r\n                            }\r\n                            j(A, I, B * 2, e, 0, 1, 1, f);\r\n                            for (var t = 0; t < d; t++) {\r\n                                $[4 * t] = A[2 * t];\r\n                                $[4 * t + 1] = A[2 * t + 1]\r\n                            }\r\n                        }\r\n                        var n = $.slice(0);\r\n                        for (var K = 0; K < s; K++) {\r\n                            if (D == 2) {\r\n                                for (var S = 0; S < _; S++) {\r\n                                    var q = (K * _ + S) * E, k = ((K >>> 1) * B + (S >>> 1)) * Z,\r\n                                            y = (K & 1) * 2 + (S & 1);\r\n                                    $[q] = n[k + y];\r\n                                    $[q + 1] = n[k + 4];\r\n                                    $[q + 2] = n[k + 5]\r\n                                }\r\n                            } else {\r\n                                for (var S = 0; S < _; S++) {\r\n                                    var q = (K * _ + S) * E, k = (K * B + (S >>> 1)) * Z, y = S & 1;\r\n                                    $[q] = n[k + y];\r\n                                    $[q + 1] = n[k + 2];\r\n                                    $[q + 2] = n[k + 3]\r\n                                }\r\n                            }\r\n                        }\r\n                    } else {\r\n                        X($, _ * E, M, G, E, s);\r\n                        if (w == 0) {\r\n                            j($, I, _, s, 0, E, E, f);\r\n                        } else {\r\n                            var U = Math.floor(w / _);\r\n                            for (var K = 0; K < s; K += U) {\r\n                                var L = $.slice(K * _ * E, (K + U) * _ * E);\r\n                                j(L, I, _, U, 0, E, E, f);\r\n                                $.set(L, K * _ * E)\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n                return $\r\n            }\r\n\r\n            function j(h, V, I, f, w, x, G, E) {\r\n                var s = I * G;\r\n                for (var _ = w; _ < x; _++) {\r\n                    h[_] += 1 << E - 1;\r\n                }\r\n                for (var Y = G; Y < s; Y += G) {\r\n                    for (var _ = w; _ < x; _++) {\r\n                        h[Y + _] += h[Y + _ - G];\r\n                    }\r\n                }\r\n                for (var F = 1;\r\n                     F < f; F++) {\r\n                    var t = F * s;\r\n                    for (var _ = w; _ < x; _++) {\r\n                        h[t + _] += h[t + _ - s];\r\n                    }\r\n                    for (var Y = G; Y < s; Y += G) {\r\n                        for (var _ = w; _ < x; _++) {\r\n                            var a = t + Y + _, J = a - s, r = h[a - G], Q = 0;\r\n                            if (V == 0) {\r\n                                Q = 0;\r\n                            } else if (V == 1) {\r\n                                Q = r;\r\n                            } else if (V == 2) {\r\n                                Q = h[J];\r\n                            } else if (V == 3) {\r\n                                Q = h[J - G];\r\n                            } else if (V == 4) {\r\n                                Q = r + (h[J] - h[J - G]);\r\n                            } else if (V == 5) {\r\n                                Q = r + (h[J] - h[J - G] >>> 1);\r\n                            } else if (V == 6) {\r\n                                Q = h[J] + (r - h[J - G] >>> 1);\r\n                            } else if (V == 7) {\r\n                                Q = r + h[J] >>> 1;\r\n                            } else {\r\n                                throw V;\r\n                            }\r\n                            h[a] += Q\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n\r\n            return C\r\n        }();\r\n\r\n\r\n        (function() {\r\n            var G = 0, F = 1, i = 2, b = 3, J = 4, N = 5, E = 6, s = 7, c = 8, T = 9, a3 = 10, f = 11, q = 12, M = 13,\r\n                    m = 14, x = 15, L = 16, $ = 17, p = 18;\r\n\r\n            function a5(t) {\r\n                var Z = UTIF._binBE.readUshort, u = {\r\n                    b: Z(t, 0),\r\n                    i: t[2],\r\n                    C: t[3],\r\n                    u: t[4],\r\n                    q: Z(t, 5),\r\n                    k: Z(t, 7),\r\n                    e: Z(t, 9),\r\n                    l: Z(t, 11),\r\n                    s: t[13],\r\n                    d: Z(t, 14)\r\n                };\r\n                if (u.b != 18771 || u.i > 1 || u.q < 6 || u.q % 6 || u.e < 768 || u.e % 24 || u.l != 768 || u.k < u.l || u.k % u.l || u.k - u.e >= u.l || u.s > 16 || u.s != u.k / u.l || u.s != Math.ceil(u.e / u.l) || u.d != u.q / 6 || u.u != 12 && u.u != 14 && u.u != 16 || u.C != 16 && u.C != 0) {\r\n                    throw \"Invalid data\"\r\n                }\r\n                if (u.i == 0) {\r\n                    throw \"Not implemented. We need this file!\"\r\n                }\r\n                u.h = u.C == 16;\r\n                u.m = (u.h ? u.l * 2 / 3 : u.l >>> 1) | 0;\r\n                u.A = u.m + 2;\r\n                u.f = 64;\r\n                u.g = (1 << u.u) - 1;\r\n                u.n = 4 * u.u;\r\n                return u\r\n            }\r\n\r\n            function a7(t, Z) {\r\n                var u = new Array(Z.s), e = 4 * Z.s, Q = 16 + e;\r\n                if (e & 12) {\r\n                    Q += 16 - (e & 12);\r\n                }\r\n                for (var V = 0, O = 16; V < Z.s; O += 4) {\r\n                    var o = UTIF._binBE.readUint(t, O);\r\n                    u[V] = t.slice(Q, Q + o);\r\n                    u[V].j = 0;\r\n                    u[V].a = 0;\r\n                    Q += o;\r\n                    V++\r\n                }\r\n                if (Q != t.length) {\r\n                    throw \"Invalid data\";\r\n                }\r\n                return u\r\n            }\r\n\r\n            function a6(t, Z) {\r\n                for (var u = -Z[4], e = 0; u <= Z[4]; e++, u++) {\r\n                    t[e] = u <= -Z[3] ? -4 : u <= -Z[2] ? -3 : u <= -Z[1] ? -2 : u < -Z[0] ? -1 : u <= Z[0] ? 0 : u < Z[1] ? 1 : u < Z[2] ? 2 : u < Z[3] ? 3 : 4\r\n                }\r\n            }\r\n\r\n            function a1(t, Z, u) {\r\n                var e = [Z, 3 * Z + 18, 5 * Z + 67, 7 * Z + 276, u];\r\n                t.o = Z;\r\n                t.w = (e[4] + 2 * Z) / (2 * Z + 1) + 1 | 0;\r\n                t.v = Math.ceil(Math.log2(t.w));\r\n                t.t = 9;\r\n                a6(t.c, e)\r\n            }\r\n\r\n            function a2(t) {\r\n                var Z = {c: new Int8Array(2 << t.u)};\r\n                a1(Z, 0, t.g);\r\n                return Z\r\n            }\r\n\r\n            function D(t) {\r\n                var Z = [[], [], []], u = Math.max(2, t.w + 32 >>> 6);\r\n                for (var e = 0; e < 3; e++) {\r\n                    for (var Q = 0;\r\n                         Q < 41; Q++) {\r\n                        Z[e][Q] = [u, 1]\r\n                    }\r\n                }\r\n                return Z\r\n            }\r\n\r\n            function a4(t) {\r\n                for (var Z = -1, u = 0; !u; Z++) {\r\n                    u = t[t.j] >>> 7 - t.a & 1;\r\n                    t.a++;\r\n                    t.a &= 7;\r\n                    if (!t.a) {\r\n                        t.j++\r\n                    }\r\n                }\r\n                return Z\r\n            }\r\n\r\n            function K(t, Z) {\r\n                var u = 0, e = 8 - t.a, Q = t.j, V = t.a;\r\n                if (Z) {\r\n                    if (Z >= e) {\r\n                        do {\r\n                            u <<= e;\r\n                            Z -= e;\r\n                            u |= t[t.j] & (1 << e) - 1;\r\n                            t.j++;\r\n                            e = 8\r\n                        } while (Z >= 8)\r\n                    }\r\n                    if (Z) {\r\n                        u <<= Z;\r\n                        e -= Z;\r\n                        u |= t[t.j] >>> e & (1 << Z) - 1\r\n                    }\r\n                    t.a = 8 - e\r\n                }\r\n                return u\r\n            }\r\n\r\n            function a0(t, Z) {\r\n                var u = 0;\r\n                if (Z < t) {\r\n                    while (u <= 14 && Z << ++u < t) {\r\n                        ;\r\n                    }\r\n                }\r\n                return u\r\n            }\r\n\r\n            function r(t, Z, u, e, Q, V, O, o) {\r\n                if (o == null) {\r\n                    o = 0;\r\n                }\r\n                var X = V + 1, k = X % 2, j = 0, I = 0, a = 0, l, R, w = e[Q], S = e[Q - 1], H = e[Q - 2][X],\r\n                        g = S[X - 1], Y = S[X], P = S[X + 1], A = w[X - 1], v = w[X + 1], y = Math.abs, d, C, n, h;\r\n                if (k) {\r\n                    d = y(P - Y);\r\n                    C = y(H - Y);\r\n                    n = y(g - Y)\r\n                }\r\n                if (k) {\r\n                    h = d > n && C < d ? H + g : d < n && C < n ? H + P : P + g;\r\n                    h = h + 2 * Y >>> 2;\r\n                    if (o) {\r\n                        w[X] = h;\r\n                        return\r\n                    }\r\n                    l = Z.t * Z.c[t.g + Y - H] + Z.c[t.g + g - Y]\r\n                } else {\r\n                    h = Y > g && Y > P || Y < g && Y < P ? v + A + 2 * Y >>> 2 : A + v >>> 1;\r\n                    l = Z.t * Z.c[t.g + Y - g] + Z.c[t.g + g - A]\r\n                }\r\n                R = y(l);\r\n                var W = a4(u);\r\n                if (W < t.n - Z.v - 1) {\r\n                    var z = a0(O[R][0], O[R][1]);\r\n                    a = K(u, z) + (W << z)\r\n                } else {\r\n                    a = K(u, Z.v) + 1\r\n                }\r\n                a = a & 1 ? -1 - (a >>> 1) : a >>> 1;\r\n                O[R][0] += y(a);\r\n                if (O[R][1] == t.f) {\r\n                    O[R][0] >>>= 1;\r\n                    O[R][1] >>>= 1\r\n                }\r\n                O[R][1]++;\r\n                h = l < 0 ? h - a : h + a;\r\n                if (t.i) {\r\n                    if (h < 0) {\r\n                        h += Z.w;\r\n                    } else if (h > t.g) {\r\n                        h -= Z.w\r\n                    }\r\n                }\r\n                w[X] = h >= 0 ? Math.min(h, t.g) : 0\r\n            }\r\n\r\n            function U(t, Z, u) {\r\n                var e = t[0].length;\r\n                for (var Q = Z; Q <= u;\r\n                     Q++) {\r\n                    t[Q][0] = t[Q - 1][1];\r\n                    t[Q][e - 1] = t[Q - 1][e - 2]\r\n                }\r\n            }\r\n\r\n            function B(t) {\r\n                U(t, s, q);\r\n                U(t, i, J);\r\n                U(t, x, $)\r\n            }\r\n\r\n            function _(t, Z, u, e, Q, V, O, o, X, k, j, I, a) {\r\n                var l = 0, R = 1, w = Q < M && Q > J;\r\n                while (R < t.m) {\r\n                    if (l < t.m) {\r\n                        r(t, Z, u, e, Q, l, O[X], t.h && (w && k || !w && (j || (l & I) == a)));\r\n                        r(t, Z, u, e, V, l, O[X], t.h && (!w && k || w && (j || (l & I) == a)));\r\n                        l += 2\r\n                    }\r\n                    if (l > 8) {\r\n                        r(t, Z, u, e, Q, R, o[X]);\r\n                        r(t, Z, u, e, V, R, o[X]);\r\n                        R += 2\r\n                    }\r\n                }\r\n                B(e)\r\n            }\r\n\r\n            function a8(t, Z, u, e, Q, V) {\r\n                _(t, Z, u, e, i, s, Q, V, 0, 0, 1, 0, 8);\r\n                _(t, Z, u, e, c, x, Q, V, 1, 0, 1, 0, 8);\r\n                _(t, Z, u, e, b, T, Q, V, 2, 1, 0, 3, 0);\r\n                _(t, Z, u, e, a3, L, Q, V, 0, 0, 0, 3, 2);\r\n                _(t, Z, u, e, J, f, Q, V, 1, 0, 0, 3, 2);\r\n                _(t, Z, u, e, q, $, Q, V, 2, 1, 0, 3, 0)\r\n            }\r\n\r\n            function a9(t, Z, u, e, Q, V) {\r\n                var O = V.length, o = t.l;\r\n                if (Q + 1 == t.s) {\r\n                    o = t.e - Q * t.l;\r\n                }\r\n                var X = 6 * t.e * e + Q * t.l;\r\n                for (var k = 0; k < 6; k++) {\r\n                    for (var j = 0; j < o; j++) {\r\n                        var I = V[k % O][j % O], a;\r\n                        if (I == 0) {\r\n                            a = i + (k >>> 1)\r\n                        } else if (I == 2) {\r\n                            a = x + (k >>> 1)\r\n                        } else {\r\n                            a = s + k\r\n                        }\r\n                        var l = t.h ? (j * 2 / 3 & 2147483646 | j % 3 & 1) + (j % 3 >>> 1) : j >>> 1;\r\n                        Z[X + j] = u[a][l + 1]\r\n                    }\r\n                    X += t.e\r\n                }\r\n            }\r\n\r\n            UTIF._decompressRAF = function(t, Z) {\r\n                var u = a5(t), e = a7(t, u), Q = a2(u), V = new Int16Array(u.e * u.q);\r\n                if (Z == null) {\r\n                    Z = u.h ? [[1, 1, 0, 1, 1, 2], [1, 1, 2, 1, 1, 0], [2, 0, 1, 0, 2, 1], [1, 1, 2, 1, 1, 0], [1, 1, 0, 1, 1, 2], [0, 2, 1, 2, 0, 1]] : [[0, 1], [3, 2]]\r\n                }\r\n                var O = [[G, b], [F, J], [N, f], [E, q], [M, L], [m, $]], o = [];\r\n                for (var X = 0; X < p; X++) {\r\n                    o[X] = new Uint16Array(u.A)\r\n                }\r\n                for (var k = 0; k < u.s; k++) {\r\n                    var j = D(Q), I = D(Q);\r\n                    for (var X = 0;\r\n                         X < p; X++) {\r\n                        for (var a = 0; a < u.A; a++) {\r\n                            o[X][a] = 0\r\n                        }\r\n                    }\r\n                    for (var l = 0; l < u.d; l++) {\r\n                        a8(u, Q, e[k], o, j, I);\r\n                        for (var X = 0; X < 6;\r\n                             X++) {\r\n                            for (var a = 0; a < u.A; a++) {\r\n                                o[O[X][0]][a] = o[O[X][1]][a]\r\n                            }\r\n                        }\r\n                        a9(u, V, o, l, k, Z);\r\n                        for (var X = i; X < p; X++) {\r\n                            if ([N, E, M, m].indexOf(X) == -1) {\r\n                                for (var a = 0;\r\n                                     a < u.A; a++) {\r\n                                    o[X][a] = 0\r\n                                }\r\n                            }\r\n                        }\r\n                        B(o)\r\n                    }\r\n                }\r\n                return V\r\n            }\r\n        }())\r\n\r\n\r\n    })(UTIF);\r\n})();\nvar QUANOS_TIFF_CONVERTER = {};\r\n\r\nQUANOS_TIFF_CONVERTER.install = function() {\r\n    var imgs = document.getElementsByTagName(\"img\");\r\n    for (var i = 0; i < imgs.length; i++) {\r\n        var img = imgs[i];\r\n        QUANOS_TIFF_CONVERTER.replaceOneIMG(img);\r\n    }\r\n    QUANOS_TIFF_CONVERTER.installObserver();\r\n}\r\n\r\n// Callback function to execute when mutations are observed\r\nQUANOS_TIFF_CONVERTER.callback = function(mutationList, observer) {\r\n    for (var mutation of mutationList) {\r\n        if (mutation.type === \"childList\") {\r\n            for (var mutationNode of mutation.addedNodes) {\r\n                var children = undefined;\r\n                if (mutationNode.getElementsByTagName) {\r\n                    children = mutationNode.getElementsByTagName(\"img\");\r\n                }\r\n                var nodesAndRoot = [];\r\n                nodesAndRoot.push(mutationNode);\r\n                if (children) {\r\n                    for (var node of children) {\r\n                        nodesAndRoot.push(node);\r\n                    }\r\n                }\r\n                for (var node of nodesAndRoot) {\r\n                    if (node.tagName && (node.tagName.toLowerCase() === \"img\")) {\r\n                        var needConversion = node.getAttribute(\"qs_need_tiff_conversion\");\r\n                        if (needConversion) {\r\n                            QUANOS_TIFF_CONVERTER.replaceOneIMG(node);\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n        } else if ((mutation.type === \"attributes\") && (mutation.attributeName === \"src\")) {\r\n            if (mutation.target.tagName && (mutation.target.tagName.toLowerCase() === \"img\")) {\r\n                QUANOS_TIFF_CONVERTER.replaceOneIMG(mutation.target);\r\n            }\r\n        }\r\n    }\r\n};\r\n\r\nQUANOS_TIFF_CONVERTER.installObserver = function() {\r\n    // Create an observer instance linked to the callback function\r\n    // Options for the observer (which mutations to observe)\r\n    var config = {attributes: true, childList: true, subtree: true};\r\n\r\n    var observer = new MutationObserver(QUANOS_TIFF_CONVERTER.callback);\r\n    var body = $(\"body\")\r\n    observer.observe(body, config);\r\n}\r\n\r\nQUANOS_TIFF_CONVERTER.replaceOneIMG = function(img) {\r\n    if (!img.hasAttribute(\"qs_need_tiff_conversion\")) {\r\n        //Normales Bild, welches gar nix mit der tiffkonvertierung zu tun hat\r\n        return;\r\n    }\r\n\r\n    var src = img.getAttribute(\"src\");\r\n    img.setAttribute(\"qs_need_tiff_conversion\", false);\r\n    if (src.startsWith(\"data:image/png\")) {\r\n        // Schon konvertiert\r\n        return;\r\n    }\r\n    if (src == null) {\r\n        return;\r\n    }\r\n    var xhr = new XMLHttpRequest();\r\n    UTIF._xhrs.push(xhr);\r\n    UTIF._imgs.push(img);\r\n    xhr.open(\"GET\", src);\r\n    xhr.responseType = \"arraybuffer\";\r\n    xhr.onload = function(e) {\r\n        QUANOS_TIFF_CONVERTER.imgLoaded(xhr, e);\r\n    }\r\n    xhr.send();\r\n}\r\n\r\nQUANOS_TIFF_CONVERTER.imgLoaded = function(xhr, e) {\r\n    try {\r\n        var mimeType = xhr.getResponseHeader(\"Content-Type\");\r\n        if (mimeType === \"image/tiff\") {\r\n            UTIF._imgLoaded(e);\r\n        }\r\n    } catch (exeption) {\r\n    }\r\n}\r\n\r\n\nDW_SCROLLPANE_FADING_COMPONENT_MAX_SIZE = 25;\r\n\r\n/**\r\n * Fading Seite (Top, Right, Left, Bottom)\r\n *\r\n * Stellt einen leichten Zugriff auf das DOM Element für das Fading zur Verfügung und kann dieses Element bei Bedarf neu zeichnen (bei Scroll/Resize Events)\r\n *\r\n * @param id\r\n * @param style\r\n * @param repaintFunction\r\n * @constructor\r\n */\r\nfunction DwScrollpaneSide(id, style, repaintFunction) {\r\n    this.id = id;\r\n    this.fadingNode = this.getNode(style); // Liefert den DOM Knoten zurück. Einbau des Knotens (falls noch nicht im DOM) erfolgt in load Methode\r\n    this.repaint = repaintFunction; // Setzt die Attribute für die Fadings (Positionierung, Größe) entsprechend der ScrollBar-Sichtbarkeiten\r\n}\r\n\r\n\r\nDwScrollpaneSide.prototype.getNode = function(style) {\r\n    let node = $(this.id);\r\n    if (!node) {\r\n        node = this.createNode(style);\r\n    }\r\n    return node;\r\n};\r\n\r\nDwScrollpaneSide.prototype.createNode = function(style) {\r\n    let node = document.createElement('div');\r\n    node.id = this.id;\r\n    node.style = style;\r\n    return node;\r\n};\r\n\r\n/**\r\n * Bestimmt aktuelle Informationen (update Methode) zur Scrollpane (Sichtbarkeit der vertikalen/horizontalen Balken und Balkenbreite)\r\n * @param scrollpane\r\n * @constructor\r\n */\r\nfunction DwScrollpaneInfo(scrollpane) {\r\n    this.scrollpane = scrollpane;\r\n    this.scrollBarVerticalVisible = false;\r\n    this.scrollBarHorizontalVisible = false;\r\n    this.contentHeight = 0;\r\n    this.contentWidth = 0;\r\n    this.scrollBarWidth = 16;\r\n    this.update();\r\n}\r\n\r\nDwScrollpaneInfo.prototype.update = function() {\r\n    this.scrollBarHorizontalVisible = this.hasHorizontalOverflow();\r\n    this.scrollBarVerticalVisible = this.hasVerticalOverflow();\r\n    this.scrollBarWidth = dwUtilsGetScrollbarWidth(this.scrollpane) - 1; // Vermeidung von Selektionsfarben (ohne Fade) am Rand Rechts/Unten\r\n    if (this.scrollpane.children.length >= 1) {\r\n        // Annahme: Das erste Kind ist der (sichtbare) Inhalt\r\n        var contentNode = this.scrollpane.children[0];\r\n        this.contentHeight = contentNode.offsetHeight;\r\n        this.contentWidth = contentNode.offsetWidth;\r\n    }\r\n};\r\n\r\n/**\r\n * Prüft auch, ob überhaupt eine Scrollbox aktiv ist\r\n * @returns {boolean}\r\n */\r\nDwScrollpaneInfo.prototype.hasHorizontalOverflow = function() {\r\n    if (this.scrollpane.style['overflow'] !== \"hidden\" && this.scrollpane.style['overflow-x'] !== \"hidden\") {\r\n        return dwUtilsHasHorizontalOverflow(this.scrollpane);\r\n    } else {\r\n        return false;\r\n    }\r\n}\r\n\r\n/**\r\n * Prüft auch, ob überhaupt eine Scrollbox aktiv ist\r\n * @returns {boolean}\r\n */\r\nDwScrollpaneInfo.prototype.hasVerticalOverflow = function() {\r\n    if (this.scrollpane.style['overflow'] !== \"hidden\" && this.scrollpane.style['overflow-y'] !== \"hidden\") {\r\n        return dwUtilsHasVerticalOverflow(this.scrollpane);\r\n    } else {\r\n        return false;\r\n    }\r\n}\r\n\r\n\r\nfunction dwScrollpaneInitializeScrollpaneFadings(scrollpaneId, fadingPropertiesJson) {\r\n    let painter = new DwScrollpanePainter(scrollpaneId);\r\n    let fadingProperties = painter.parseJson(fadingPropertiesJson);\r\n    if (!painter.isFound() || !painter.isValidJSON(fadingProperties)) {\r\n        return;\r\n    }\r\n    painter.loadFading(fadingProperties);\r\n}\r\n\r\nfunction dwScrollpaneRepaintScrollpaneFadings(scrollpaneId) {\r\n    let painter = new DwScrollpanePainter(scrollpaneId);\r\n    if (!painter.isFound()) {\r\n        return;\r\n    }\r\n    painter.repaint();\r\n}\r\n\r\n/**\r\n * Erzeugt und zeichnet die Fading Elemente (neu)\r\n * @param scrollPaneId\r\n * @constructor\r\n */\r\nfunction DwScrollpanePainter(scrollPaneId) {\r\n    let painter = this;\r\n    this.scrollpane = $(scrollPaneId);\r\n    if (!this.scrollpane) {\r\n        return;\r\n    }\r\n    this.scrollpaneInfo = this.createScrollpaneInfo();\r\n    this.sides = {\r\n        TOP: this.createSide(\"top\",\r\n                             \"height:50px; left: 0px;right: 18px;top: 0px; position: absolute;background:linear-gradient(to top,hsla(0, 0%, 100%, 0) 0%,hsla(0, 0%, 100%, 0.013) 8.1%,hsla(0, 0%, 100%, 0.049) 15.5%,hsla(0, 0%, 100%, 0.104) 22.5%,hsla(0, 0%, 100%, 0.175) 29%,hsla(0, 0%, 100%, 0.259) 35.3%,hsla(0, 0%, 100%, 0.352) 41.2%,hsla(0, 0%, 100%, 0.45) 47.1%,hsla(0, 0%, 100%, 0.55) 52.9%,hsla(0, 0%, 100%, 0.648) 58.8%,hsla(0, 0%, 100%, 0.741) 64.7%,hsla(0, 0%, 100%, 0.825) 71%,hsla(0, 0%, 100%, 0.896) 77.5%,hsla(0, 0%, 100%, 0.951) 84.5%,hsla(0, 0%, 100%, 0.987) 91.9%,hsl(0, 0%, 100%) 100%);z-index:400;pointer-events:none;\",\r\n                             function() {\r\n                                 const visibility = this.fadingNode.getAttribute(\"themeVisibility\");\r\n                                 const offset = parseInt(this.fadingNode.getAttribute(\"themeOffset\"));\r\n                                 const scrollBarVerticalVisible = painter.scrollpaneInfo.scrollBarVerticalVisible;\r\n                                 this.fadingNode.style.visibility = scrollBarVerticalVisible ? visibility : \"hidden\";\r\n                                 this.fadingNode.style.top = offset + \"px\";\r\n                                 this.fadingNode.style.right = scrollBarVerticalVisible ? painter.scrollpaneInfo.scrollBarWidth + \"px\" : \"0px\";\r\n                                 this.fadingNode.style.height = Math.min(painter.scrollpane.scrollTop, DW_SCROLLPANE_FADING_COMPONENT_MAX_SIZE) + \"px\";\r\n                             }),\r\n        LEFT: this.createSide(\"left\",\r\n                              \"width:50px; top: 0px;left: 0px;bottom: 18px;position: absolute;background:linear-gradient(to left,hsla(0, 0%, 100%, 0) 0%,hsla(0, 0%, 100%, 0.013) 8.1%,hsla(0, 0%, 100%, 0.049) 15.5%,hsla(0, 0%, 100%, 0.104) 22.5%,hsla(0, 0%, 100%, 0.175) 29%,hsla(0, 0%, 100%, 0.259) 35.3%,hsla(0, 0%, 100%, 0.352) 41.2%,hsla(0, 0%, 100%, 0.45) 47.1%,hsla(0, 0%, 100%, 0.55) 52.9%,hsla(0, 0%, 100%, 0.648) 58.8%,hsla(0, 0%, 100%, 0.741) 64.7%,hsla(0, 0%, 100%, 0.825) 71%,hsla(0, 0%, 100%, 0.896) 77.5%,hsla(0, 0%, 100%, 0.951) 84.5%,hsla(0, 0%, 100%, 0.987) 91.9%,hsl(0, 0%, 100%) 100%); z-index:400;pointer-events:none;\",\r\n                              function() {\r\n                                  const visibility = this.fadingNode.getAttribute(\"themeVisibility\");\r\n                                  const offset = parseInt(this.fadingNode.getAttribute(\"themeOffset\"));\r\n                                  const scrollBarHorizontalVisible = painter.scrollpaneInfo.scrollBarHorizontalVisible;\r\n                                  this.fadingNode.style.visibility = scrollBarHorizontalVisible ? visibility : \"hidden\";\r\n                                  this.fadingNode.style.bottom = scrollBarHorizontalVisible ? painter.scrollpaneInfo.scrollBarWidth + \"px\" : \"0px\";\r\n                                  this.fadingNode.style.left = offset + \"px\";\r\n                                  this.fadingNode.style.width = Math.min(painter.scrollpane.scrollLeft, DW_SCROLLPANE_FADING_COMPONENT_MAX_SIZE) + \"px\";\r\n                              }),\r\n        RIGHT: this.createSide(\"right\",\r\n                               \"width:50px; right: 18px;top: 0px;bottom: 18px; position: absolute;background:linear-gradient(to right,hsla(0, 0%, 100%, 0) 0%,hsla(0, 0%, 100%, 0.013) 8.1%,hsla(0, 0%, 100%, 0.049) 15.5%,hsla(0, 0%, 100%, 0.104) 22.5%,hsla(0, 0%, 100%, 0.175) 29%,hsla(0, 0%, 100%, 0.259) 35.3%,hsla(0, 0%, 100%, 0.352) 41.2%,hsla(0, 0%, 100%, 0.45) 47.1%,hsla(0, 0%, 100%, 0.55) 52.9%,hsla(0, 0%, 100%, 0.648) 58.8%,hsla(0, 0%, 100%, 0.741) 64.7%,hsla(0, 0%, 100%, 0.825) 71%,hsla(0, 0%, 100%, 0.896) 77.5%,hsla(0, 0%, 100%, 0.951) 84.5%,hsla(0, 0%, 100%, 0.987) 91.9%,hsl(0, 0%, 100%) 100%);z-index:400;pointer-events:none;\",\r\n                               function() {\r\n                                   const visibility = this.fadingNode.getAttribute(\"themeVisibility\");\r\n                                   const offset = parseInt(this.fadingNode.getAttribute(\"themeOffset\"));\r\n                                   const scrollBarHorizontalVisible = painter.scrollpaneInfo.scrollBarHorizontalVisible;\r\n                                   const scrollBarVerticalVisible = painter.scrollpaneInfo.scrollBarVerticalVisible;\r\n                                   const scrollBarWidth = painter.scrollpaneInfo.scrollBarWidth;\r\n\r\n                                   this.fadingNode.style.visibility = scrollBarHorizontalVisible ? visibility : \"hidden\";\r\n                                   this.fadingNode.style.right = scrollBarVerticalVisible ? (scrollBarWidth + offset) + \"px\" : offset + \"px\";\r\n                                   this.fadingNode.style.bottom = scrollBarHorizontalVisible ? scrollBarWidth + \"px\" : \"0px\";\r\n                                   // Breite ist maximal die gesamte innere Breite (ohne Scrollbar)\r\n                                   var width = Math.min(painter.scrollpaneInfo.contentWidth - painter.scrollpane.offsetWidth - painter.scrollpane.scrollLeft, DW_SCROLLPANE_FADING_COMPONENT_MAX_SIZE);\r\n                                   if (width < 0) {\r\n                                       width = 0; // Vermeidung, dass er sonst auf zB 50px springt - weil er keine negative Breite kennt\r\n                                   }\r\n                                   this.fadingNode.style.width = width + \"px\";\r\n                               }),\r\n        BOTTOM: this.createSide(\"bottom\",\r\n                                \"height:50px; bottom: 18px;left: 0px;right: 18px; position: absolute;background:linear-gradient(to bottom,hsla(0, 0%, 100%, 0) 0%,hsla(0, 0%, 100%, 0.013) 8.1%,hsla(0, 0%, 100%, 0.049) 15.5%,hsla(0, 0%, 100%, 0.104) 22.5%,hsla(0, 0%, 100%, 0.175) 29%,hsla(0, 0%, 100%, 0.259) 35.3%,hsla(0, 0%, 100%, 0.352) 41.2%,hsla(0, 0%, 100%, 0.45) 47.1%,hsla(0, 0%, 100%, 0.55) 52.9%,hsla(0, 0%, 100%, 0.648) 58.8%,hsla(0, 0%, 100%, 0.741) 64.7%,hsla(0, 0%, 100%, 0.825) 71%,hsla(0, 0%, 100%, 0.896) 77.5%,hsla(0, 0%, 100%, 0.951) 84.5%,hsla(0, 0%, 100%, 0.987) 91.9%,hsl(0, 0%, 100%) 100%);z-index:400;pointer-events:none;\",\r\n                                function() {\r\n                                    const visibility = this.fadingNode.getAttribute(\"themeVisibility\");\r\n                                    const offset = parseInt(this.fadingNode.getAttribute(\"themeOffset\"));\r\n                                    const scrollBarHorizontalVisible = painter.scrollpaneInfo.scrollBarHorizontalVisible;\r\n                                    const scrollBarVerticalVisible = painter.scrollpaneInfo.scrollBarVerticalVisible;\r\n                                    const scrollBarWidth = painter.scrollpaneInfo.scrollBarWidth;\r\n\r\n                                    this.fadingNode.style.visibility = scrollBarVerticalVisible ? visibility : \"hidden\";\r\n                                    this.fadingNode.style.right = scrollBarVerticalVisible ? scrollBarWidth + \"px\" : \"0px\";\r\n                                    this.fadingNode.style.bottom = scrollBarHorizontalVisible ? (scrollBarWidth + offset) + \"px\" : offset + \"px\";\r\n                                    var height = Math.min(painter.scrollpaneInfo.contentHeight - painter.scrollpane.offsetHeight - painter.scrollpane.scrollTop - painter.scrollpaneInfo.scrollBarWidth - 2, DW_SCROLLPANE_FADING_COMPONENT_MAX_SIZE);\r\n                                    if (height < 0) {\r\n                                        height = 0; // Vermeidung, dass er sonst auf zB 50px springt - weil er keine negative Höhe kennt\r\n                                    }\r\n                                    // Höhe ist maximal die gesamte innere Höhe (ohne Scrollbar)\r\n                                    this.fadingNode.style.height = height + \"px\";\r\n                                })\r\n    };\r\n}\r\n\r\nDwScrollpanePainter.prototype.isFound = function() {\r\n    return this.scrollpane != null;\r\n};\r\n\r\nDwScrollpanePainter.prototype.isValidJSON = function(fadingProperties) {\r\n    return (fadingProperties != null) && (fadingProperties[\"sides\"] !== undefined);\r\n};\r\n\r\nDwScrollpanePainter.prototype.parseJson = function(fadingPropertiesJson) {\r\n    if (typeof (fadingPropertiesJson) === \"undefined\") {\r\n        return null;\r\n    }\r\n    try {\r\n        return JSON.parse(fadingPropertiesJson);\r\n    } catch (exception) {\r\n        return null;\r\n    }\r\n};\r\n\r\nDwScrollpanePainter.prototype.createSide = function(idSuffix, style, repaintFunction) {\r\n    return new DwScrollpaneSide(this.scrollpane.id + \"_guiScrollPaneFading-\" + idSuffix, style, repaintFunction);\r\n};\r\n\r\nDwScrollpanePainter.prototype.createScrollpaneInfo = function() {\r\n    return new DwScrollpaneInfo(this.scrollpane);\r\n};\r\n\r\nDwScrollpanePainter.prototype.loadFading = function(fadingProperties) {\r\n    let painter = this;\r\n\r\n    let requiresListenerInit = false;\r\n    for (let sideName in this.sides) {\r\n        if (!this.sides.hasOwnProperty(sideName)) {\r\n            continue;\r\n        }\r\n\r\n        let side = this.sides[sideName];\r\n        let sideNode = side.fadingNode;\r\n        if (!sideNode.parentNode) {\r\n            requiresListenerInit = true;\r\n\r\n            // !!! WICHTIG !!! DOM Struktur (in welchen Knoten werden die Side Elemente hinzugefügt) muss analog zur Struktur bei GuiScrollpane sein\r\n            this.scrollpane.parentNode.appendChild(sideNode);\r\n        }\r\n\r\n        let propertyFromServer = fadingProperties.sides[sideName.toUpperCase()];\r\n\r\n        if (propertyFromServer === undefined) {\r\n            sideNode.setAttribute(\"themeVisibility\", \"hidden\");\r\n            sideNode.setAttribute(\"themeOffset\", 0);\r\n        } else {\r\n            sideNode.setAttribute(\"themeVisibility\", \"visible\");\r\n            sideNode.setAttribute(\"themeOffset\", propertyFromServer);\r\n        }\r\n\r\n        if (side.repaint) {\r\n            side.repaint();\r\n        }\r\n    }\r\n    if (requiresListenerInit) {\r\n        // Scroll Listener zum DOM Element hinzufügen. Nur 1x notwendig - bei der Initialisierung\r\n        // Erkennungsmerkmal ist, ob das Fading Element bereits im DOM eingebaut wurde oder noch nicht\r\n        let scrollListener = function() {\r\n            painter.repaint();\r\n        };\r\n        this.scrollpane.addEventListener(\"scroll\", scrollListener);\r\n\r\n        // \"Resize Listener\" (onresizeClientSide) zum DOM Element und zur Registry hinzufügen\r\n        dwDomAppendDomAttributeValue(this.scrollpane, \"onresizeClientSide\", \"dwScrollpaneRepaintScrollpaneFadings('\" + this.scrollpane.id + \"');\");\r\n        dwResizeRegistryGetInstance().addControl(this.scrollpane.id, this.scrollpane.id, this.scrollpane.parentNode.id);\r\n    }\r\n};\r\n\r\nDwScrollpanePainter.prototype.repaint = function() {\r\n    this.scrollpaneInfo.update();\r\n    for (let sideName in this.sides) {\r\n        if (!this.sides.hasOwnProperty(sideName)) {\r\n            continue;\r\n        }\r\n\r\n        let side = this.sides[sideName];\r\n\r\n        if (side.repaint) {\r\n            side.repaint();\r\n        }\r\n    }\r\n};\n"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": -1,
          "_transferSize": 252861,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:11.649Z",
        "time": 225.37200001534075,
        "timings": {
          "blocked": 4.977000011466444,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0.3729999999999998,
          "wait": 209.54000004966557,
          "receive": 10.481999954208732,
          "_blocked_queueing": 1.0870000114664435,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_connectionId": "1726423",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "parser",
          "url": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513",
          "lineNumber": 1
        },
        "_priority": "High",
        "_resourceType": "script",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/ekat/WEB-RES/js/plugin.js_javaviewer_7.26.1.11.js",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": ":authority",
              "value": "ekat.festool.de"
            },
            {
              "name": ":method",
              "value": "GET"
            },
            {
              "name": ":path",
              "value": "/ekat/WEB-RES/js/plugin.js_javaviewer_7.26.1.11.js"
            },
            {
              "name": ":scheme",
              "value": "https"
            },
            {
              "name": "accept",
              "value": "*/*"
            },
            {
              "name": "accept-encoding",
              "value": "gzip, deflate, br, zstd"
            },
            {
              "name": "accept-language",
              "value": "en-GB,en-US;q=0.9,en;q=0.8"
            },
            {
              "name": "if-modified-since",
              "value": "Thu, 20 Aug 2026 07:47:08 GMT"
            },
            {
              "name": "if-none-match",
              "value": "W/\"0-1787216819881\""
            },
            {
              "name": "priority",
              "value": "u=1"
            },
            {
              "name": "referer",
              "value": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            },
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "sec-fetch-dest",
              "value": "script"
            },
            {
              "name": "sec-fetch-mode",
              "value": "no-cors"
            },
            {
              "name": "sec-fetch-site",
              "value": "same-origin"
            },
            {
              "name": "user-agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            }
          ],
          "queryString": [],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "cache-control",
              "value": "public"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "content-length",
              "value": "20"
            },
            {
              "name": "content-type",
              "value": "text/javascript"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 09:09:51 GMT"
            },
            {
              "name": "etag",
              "value": "W/\"0-1787216991694\""
            },
            {
              "name": "expires",
              "value": "Thu, 20 Aug 2026 09:11:51 GMT"
            },
            {
              "name": "last-modified",
              "value": "Thu, 20 Aug 2026 07:47:08 GMT"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "pragma",
              "value": "cache"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "x-robots-tag",
              "value": "noindex"
            }
          ],
          "cookies": [],
          "content": {
            "size": 0,
            "mimeType": "text/javascript",
            "text": ""
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": -1,
          "_transferSize": 129,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:11.649Z",
        "time": 91.15600003860891,
        "timings": {
          "blocked": 6.719999967351556,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0.2709999999999999,
          "wait": 83.48099998521805,
          "receive": 0.6840000860393047,
          "_blocked_queueing": 1.4939999673515558,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_connectionId": "1726423",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "parser",
          "url": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513",
          "lineNumber": 1
        },
        "_priority": "High",
        "_resourceType": "script",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/ekat/WEB-RES/js/html5-qrcode.min.js_javaviewer_7.26.1.11.js",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": ":authority",
              "value": "ekat.festool.de"
            },
            {
              "name": ":method",
              "value": "GET"
            },
            {
              "name": ":path",
              "value": "/ekat/WEB-RES/js/html5-qrcode.min.js_javaviewer_7.26.1.11.js"
            },
            {
              "name": ":scheme",
              "value": "https"
            },
            {
              "name": "accept",
              "value": "*/*"
            },
            {
              "name": "accept-encoding",
              "value": "gzip, deflate, br, zstd"
            },
            {
              "name": "accept-language",
              "value": "en-GB,en-US;q=0.9,en;q=0.8"
            },
            {
              "name": "if-modified-since",
              "value": "Thu, 20 Aug 2026 07:47:08 GMT"
            },
            {
              "name": "if-none-match",
              "value": "W/\"547334-1787216819882\""
            },
            {
              "name": "priority",
              "value": "u=1"
            },
            {
              "name": "referer",
              "value": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            },
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "sec-fetch-dest",
              "value": "script"
            },
            {
              "name": "sec-fetch-mode",
              "value": "no-cors"
            },
            {
              "name": "sec-fetch-site",
              "value": "same-origin"
            },
            {
              "name": "user-agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            }
          ],
          "queryString": [],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "cache-control",
              "value": "public"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "content-length",
              "value": "109164"
            },
            {
              "name": "content-type",
              "value": "text/javascript"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 09:09:51 GMT"
            },
            {
              "name": "etag",
              "value": "W/\"547334-1787216991695\""
            },
            {
              "name": "expires",
              "value": "Thu, 20 Aug 2026 09:11:51 GMT"
            },
            {
              "name": "last-modified",
              "value": "Thu, 20 Aug 2026 07:47:08 GMT"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "pragma",
              "value": "cache"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "x-robots-tag",
              "value": "noindex"
            }
          ],
          "cookies": [],
          "content": {
            "size": 547334,
            "mimeType": "text/javascript",
            "text": "/** ZXing **/ ! function(t, e) {\r\n    \"object\" == typeof exports && \"undefined\" != typeof module ? e(exports) : \"function\" == typeof define && define.amd ? define([\"exports\"], e) : e((t = \"undefined\" != typeof globalThis ? globalThis : t || self).ZXing = {})\r\n}(this, function(t) {\r\n    \"use strict\";\r\n    var e = Object.setPrototypeOf || {\r\n                __proto__: []\r\n            }\r\n            instanceof Array && function(t, e) {\r\n                t.__proto__ = e\r\n            } || function(t, e) {\r\n                for (var r in e) e.hasOwnProperty(r) && (t[r] = e[r])\r\n            };\r\n    var r, n = function(t) {\r\n        function r(e) {\r\n            var r, n, i, s = this.constructor,\r\n                    o = t.call(this, e) || this;\r\n            return Object.defineProperty(o, \"name\", {\r\n                value: s.name,\r\n                enumerable: !1\r\n            }), r = o, n = s.prototype, (i = Object.setPrototypeOf) ? i(r, n) : r.__proto__ = n,\r\n                    function(t, e) {\r\n                        void 0 === e && (e = t.constructor);\r\n                        var r = Error.captureStackTrace;\r\n                        r && r(t, e)\r\n                    }(o), o\r\n        }\r\n        return function(t, r) {\r\n            function n() {\r\n                this.constructor = t\r\n            }\r\n            e(t, r), t.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)\r\n        }(r, t), r\r\n    }(Error);\r\n    class i extends n {\r\n        constructor(t) {\r\n            super(t), this.message = t\r\n        }\r\n        getKind() {\r\n            return this.constructor.kind\r\n        }\r\n    }\r\n    i.kind = \"Exception\";\r\n    class s extends i {}\r\n    s.kind = \"ArgumentException\";\r\n    class o extends i {}\r\n    o.kind = \"IllegalArgumentException\";\r\n    class a {\r\n        constructor(t) {\r\n            if (this.binarizer = t, null === t) throw new o(\"Binarizer must be non-null.\")\r\n        }\r\n        getWidth() {\r\n            return this.binarizer.getWidth()\r\n        }\r\n        getHeight() {\r\n            return this.binarizer.getHeight()\r\n        }\r\n        getBlackRow(t, e) {\r\n            return this.binarizer.getBlackRow(t, e)\r\n        }\r\n        getBlackMatrix() {\r\n            return null !== this.matrix && void 0 !== this.matrix || (this.matrix = this.binarizer.getBlackMatrix()), this.matrix\r\n        }\r\n        isCropSupported() {\r\n            return this.binarizer.getLuminanceSource().isCropSupported()\r\n        }\r\n        crop(t, e, r, n) {\r\n            const i = this.binarizer.getLuminanceSource().crop(t, e, r, n);\r\n            return new a(this.binarizer.createBinarizer(i))\r\n        }\r\n        isRotateSupported() {\r\n            return this.binarizer.getLuminanceSource().isRotateSupported()\r\n        }\r\n        rotateCounterClockwise() {\r\n            const t = this.binarizer.getLuminanceSource().rotateCounterClockwise();\r\n            return new a(this.binarizer.createBinarizer(t))\r\n        }\r\n        rotateCounterClockwise45() {\r\n            const t = this.binarizer.getLuminanceSource().rotateCounterClockwise45();\r\n            return new a(this.binarizer.createBinarizer(t))\r\n        }\r\n        toString() {\r\n            try {\r\n                return this.getBlackMatrix().toString()\r\n            } catch (t) {\r\n                return \"\"\r\n            }\r\n        }\r\n    }\r\n    class l extends i {\r\n        static getChecksumInstance() {\r\n            return new l\r\n        }\r\n    }\r\n    l.kind = \"ChecksumException\";\r\n    class h {\r\n        constructor(t) {\r\n            this.source = t\r\n        }\r\n        getLuminanceSource() {\r\n            return this.source\r\n        }\r\n        getWidth() {\r\n            return this.source.getWidth()\r\n        }\r\n        getHeight() {\r\n            return this.source.getHeight()\r\n        }\r\n    }\r\n    class c {\r\n        static arraycopy(t, e, r, n, i) {\r\n            for (; i--;) r[n++] = t[e++]\r\n        }\r\n        static currentTimeMillis() {\r\n            return Date.now()\r\n        }\r\n    }\r\n    class u extends i {}\r\n    u.kind = \"IndexOutOfBoundsException\";\r\n    class d extends u {\r\n        constructor(t, e) {\r\n            super(e), this.index = t, this.message = e\r\n        }\r\n    }\r\n    d.kind = \"ArrayIndexOutOfBoundsException\";\r\n    class g {\r\n        static fill(t, e) {\r\n            for (let r = 0, n = t.length; r < n; r++) t[r] = e\r\n        }\r\n        static fillWithin(t, e, r, n) {\r\n            g.rangeCheck(t.length, e, r);\r\n            for (let i = e; i < r; i++) t[i] = n\r\n        }\r\n        static rangeCheck(t, e, r) {\r\n            if (e > r) throw new o(\"fromIndex(\" + e + \") > toIndex(\" + r + \")\");\r\n            if (e < 0) throw new d(e);\r\n            if (r > t) throw new d(r)\r\n        }\r\n        static asList(...t) {\r\n            return t\r\n        }\r\n        static create(t, e, r) {\r\n            return Array.from({\r\n                                  length: t\r\n                              }).map(t => Array.from({\r\n                                                         length: e\r\n                                                     }).fill(r))\r\n        }\r\n        static createInt32Array(t, e, r) {\r\n            return Array.from({\r\n                                  length: t\r\n                              }).map(t => Int32Array.from({\r\n                                                              length: e\r\n                                                          }).fill(r))\r\n        }\r\n        static equals(t, e) {\r\n            if (!t) return !1;\r\n            if (!e) return !1;\r\n            if (!t.length) return !1;\r\n            if (!e.length) return !1;\r\n            if (t.length !== e.length) return !1;\r\n            for (let r = 0, n = t.length; r < n; r++)\r\n                if (t[r] !== e[r]) return !1;\r\n            return !0\r\n        }\r\n        static hashCode(t) {\r\n            if (null === t) return 0;\r\n            let e = 1;\r\n            for (const r of t) e = 31 * e + r;\r\n            return e\r\n        }\r\n        static fillUint8Array(t, e) {\r\n            for (let r = 0; r !== t.length; r++) t[r] = e\r\n        }\r\n        static copyOf(t, e) {\r\n            return t.slice(0, e)\r\n        }\r\n        static copyOfUint8Array(t, e) {\r\n            if (t.length <= e) {\r\n                const r = new Uint8Array(e);\r\n                return r.set(t), r\r\n            }\r\n            return t.slice(0, e)\r\n        }\r\n        static copyOfRange(t, e, r) {\r\n            const n = r - e,\r\n                    i = new Int32Array(n);\r\n            return c.arraycopy(t, e, i, 0, n), i\r\n        }\r\n        static binarySearch(t, e, r) {\r\n            void 0 === r && (r = g.numberComparator);\r\n            let n = 0,\r\n                    i = t.length - 1;\r\n            for (; n <= i;) {\r\n                const s = i + n >> 1,\r\n                        o = r(e, t[s]);\r\n                if (o > 0) n = s + 1;\r\n                else {\r\n                    if (!(o < 0)) return s;\r\n                    i = s - 1\r\n                }\r\n            }\r\n            return -n - 1\r\n        }\r\n        static numberComparator(t, e) {\r\n            return t - e\r\n        }\r\n    }\r\n    class f {\r\n        static numberOfTrailingZeros(t) {\r\n            let e;\r\n            if (0 === t) return 32;\r\n            let r = 31;\r\n            return 0 !== (e = t << 16) && (r -= 16, t = e), 0 !== (e = t << 8) && (r -= 8, t = e), 0 !== (e = t << 4) && (r -= 4, t = e), 0 !== (e = t << 2) && (r -= 2, t = e), r - (t << 1 >>> 31)\r\n        }\r\n        static numberOfLeadingZeros(t) {\r\n            if (0 === t) return 32;\r\n            let e = 1;\r\n            return t >>> 16 == 0 && (e += 16, t <<= 16), t >>> 24 == 0 && (e += 8, t <<= 8), t >>> 28 == 0 && (e += 4, t <<= 4), t >>> 30 == 0 && (e += 2, t <<= 2), e -= t >>> 31\r\n        }\r\n        static toHexString(t) {\r\n            return t.toString(16)\r\n        }\r\n        static toBinaryString(t) {\r\n            return String(parseInt(String(t), 2))\r\n        }\r\n        static bitCount(t) {\r\n            return t = (t = (858993459 & (t -= t >>> 1 & 1431655765)) + (t >>> 2 & 858993459)) + (t >>> 4) & 252645135, t += t >>> 8, 63 & (t += t >>> 16)\r\n        }\r\n        static truncDivision(t, e) {\r\n            return Math.trunc(t / e)\r\n        }\r\n        static parseInt(t, e) {\r\n            return parseInt(t, e)\r\n        }\r\n    }\r\n    f.MIN_VALUE_32_BITS = -2147483648, f.MAX_VALUE = Number.MAX_SAFE_INTEGER;\r\n    class w {\r\n        constructor(t, e) {\r\n            void 0 === t ? (this.size = 0, this.bits = new Int32Array(1)) : (this.size = t, this.bits = null == e ? w.makeArray(t) : e)\r\n        }\r\n        getSize() {\r\n            return this.size\r\n        }\r\n        getSizeInBytes() {\r\n            return Math.floor((this.size + 7) / 8)\r\n        }\r\n        ensureCapacity(t) {\r\n            if (t > 32 * this.bits.length) {\r\n                const e = w.makeArray(t);\r\n                c.arraycopy(this.bits, 0, e, 0, this.bits.length), this.bits = e\r\n            }\r\n        }\r\n        get(t) {\r\n            return 0 != (this.bits[Math.floor(t / 32)] & 1 << (31 & t))\r\n        }\r\n        set(t) {\r\n            this.bits[Math.floor(t / 32)] |= 1 << (31 & t)\r\n        }\r\n        flip(t) {\r\n            this.bits[Math.floor(t / 32)] ^= 1 << (31 & t)\r\n        }\r\n        getNextSet(t) {\r\n            const e = this.size;\r\n            if (t >= e) return e;\r\n            const r = this.bits;\r\n            let n = Math.floor(t / 32),\r\n                    i = r[n];\r\n            i &= ~((1 << (31 & t)) - 1);\r\n            const s = r.length;\r\n            for (; 0 === i;) {\r\n                if (++n === s) return e;\r\n                i = r[n]\r\n            }\r\n            const o = 32 * n + f.numberOfTrailingZeros(i);\r\n            return o > e ? e : o\r\n        }\r\n        getNextUnset(t) {\r\n            const e = this.size;\r\n            if (t >= e) return e;\r\n            const r = this.bits;\r\n            let n = Math.floor(t / 32),\r\n                    i = ~r[n];\r\n            i &= ~((1 << (31 & t)) - 1);\r\n            const s = r.length;\r\n            for (; 0 === i;) {\r\n                if (++n === s) return e;\r\n                i = ~r[n]\r\n            }\r\n            const o = 32 * n + f.numberOfTrailingZeros(i);\r\n            return o > e ? e : o\r\n        }\r\n        setBulk(t, e) {\r\n            this.bits[Math.floor(t / 32)] = e\r\n        }\r\n        setRange(t, e) {\r\n            if (e < t || t < 0 || e > this.size) throw new o;\r\n            if (e === t) return;\r\n            e--;\r\n            const r = Math.floor(t / 32),\r\n                    n = Math.floor(e / 32),\r\n                    i = this.bits;\r\n            for (let s = r; s <= n; s++) {\r\n                const o = (2 << (s < n ? 31 : 31 & e)) - (1 << (s > r ? 0 : 31 & t));\r\n                i[s] |= o\r\n            }\r\n        }\r\n        clear() {\r\n            const t = this.bits.length,\r\n                    e = this.bits;\r\n            for (let r = 0; r < t; r++) e[r] = 0\r\n        }\r\n        isRange(t, e, r) {\r\n            if (e < t || t < 0 || e > this.size) throw new o;\r\n            if (e === t) return !0;\r\n            e--;\r\n            const n = Math.floor(t / 32),\r\n                    i = Math.floor(e / 32),\r\n                    s = this.bits;\r\n            for (let o = n; o <= i; o++) {\r\n                const a = (2 << (o < i ? 31 : 31 & e)) - (1 << (o > n ? 0 : 31 & t)) & 4294967295;\r\n                if ((s[o] & a) !== (r ? a : 0)) return !1\r\n            }\r\n            return !0\r\n        }\r\n        appendBit(t) {\r\n            this.ensureCapacity(this.size + 1), t && (this.bits[Math.floor(this.size / 32)] |= 1 << (31 & this.size)), this.size++\r\n        }\r\n        appendBits(t, e) {\r\n            if (e < 0 || e > 32) throw new o(\"Num bits must be between 0 and 32\");\r\n            this.ensureCapacity(this.size + e);\r\n            for (let r = e; r > 0; r--) this.appendBit(1 == (t >> r - 1 & 1))\r\n        }\r\n        appendBitArray(t) {\r\n            const e = t.size;\r\n            this.ensureCapacity(this.size + e);\r\n            for (let r = 0; r < e; r++) this.appendBit(t.get(r))\r\n        }\r\n        xor(t) {\r\n            if (this.size !== t.size) throw new o(\"Sizes don't match\");\r\n            const e = this.bits;\r\n            for (let r = 0, n = e.length; r < n; r++) e[r] ^= t.bits[r]\r\n        }\r\n        toBytes(t, e, r, n) {\r\n            for (let i = 0; i < n; i++) {\r\n                let n = 0;\r\n                for (let e = 0; e < 8; e++) this.get(t) && (n |= 1 << 7 - e), t++;\r\n                e[r + i] = n\r\n            }\r\n        }\r\n        getBitArray() {\r\n            return this.bits\r\n        }\r\n        reverse() {\r\n            const t = new Int32Array(this.bits.length),\r\n                    e = Math.floor((this.size - 1) / 32),\r\n                    r = e + 1,\r\n                    n = this.bits;\r\n            for (let i = 0; i < r; i++) {\r\n                let r = n[i];\r\n                r = (r = (r = (r = (r = r >> 1 & 1431655765 | (1431655765 & r) << 1) >> 2 & 858993459 | (858993459 & r) << 2) >> 4 & 252645135 | (252645135 & r) << 4) >> 8 & 16711935 | (16711935 & r) << 8) >> 16 & 65535 | (65535 & r) << 16, t[e - i] = r\r\n            }\r\n            if (this.size !== 32 * r) {\r\n                const e = 32 * r - this.size;\r\n                let n = t[0] >>> e;\r\n                for (let i = 1; i < r; i++) {\r\n                    const r = t[i];\r\n                    n |= r << 32 - e, t[i - 1] = n, n = r >>> e\r\n                }\r\n                t[r - 1] = n\r\n            }\r\n            this.bits = t\r\n        }\r\n        static makeArray(t) {\r\n            return new Int32Array(Math.floor((t + 31) / 32))\r\n        }\r\n        equals(t) {\r\n            if (!(t instanceof w)) return !1;\r\n            const e = t;\r\n            return this.size === e.size && g.equals(this.bits, e.bits)\r\n        }\r\n        hashCode() {\r\n            return 31 * this.size + g.hashCode(this.bits)\r\n        }\r\n        toString() {\r\n            let t = \"\";\r\n            for (let e = 0, r = this.size; e < r; e++) 0 == (7 & e) && (t += \" \"), t += this.get(e) ? \"X\" : \".\";\r\n            return t\r\n        }\r\n        clone() {\r\n            return new w(this.size, this.bits.slice())\r\n        }\r\n    }! function(t) {\r\n        t[t.OTHER = 0] = \"OTHER\", t[t.PURE_BARCODE = 1] = \"PURE_BARCODE\", t[t.POSSIBLE_FORMATS = 2] = \"POSSIBLE_FORMATS\", t[t.TRY_HARDER = 3] = \"TRY_HARDER\", t[t.CHARACTER_SET = 4] = \"CHARACTER_SET\", t[t.ALLOWED_LENGTHS = 5] = \"ALLOWED_LENGTHS\", t[t.ASSUME_CODE_39_CHECK_DIGIT = 6] = \"ASSUME_CODE_39_CHECK_DIGIT\", t[t.ASSUME_GS1 = 7] = \"ASSUME_GS1\", t[t.RETURN_CODABAR_START_END = 8] = \"RETURN_CODABAR_START_END\", t[t.NEED_RESULT_POINT_CALLBACK = 9] = \"NEED_RESULT_POINT_CALLBACK\", t[t.ALLOWED_EAN_EXTENSIONS = 10] = \"ALLOWED_EAN_EXTENSIONS\"\r\n    }(r || (r = {}));\r\n    var A, C = r;\r\n    class E extends i {\r\n        static getFormatInstance() {\r\n            return new E\r\n        }\r\n    }\r\n    E.kind = \"FormatException\",\r\n            function(t) {\r\n                t[t.Cp437 = 0] = \"Cp437\", t[t.ISO8859_1 = 1] = \"ISO8859_1\", t[t.ISO8859_2 = 2] = \"ISO8859_2\", t[t.ISO8859_3 = 3] = \"ISO8859_3\", t[t.ISO8859_4 = 4] = \"ISO8859_4\", t[t.ISO8859_5 = 5] = \"ISO8859_5\", t[t.ISO8859_6 = 6] = \"ISO8859_6\", t[t.ISO8859_7 = 7] = \"ISO8859_7\", t[t.ISO8859_8 = 8] = \"ISO8859_8\", t[t.ISO8859_9 = 9] = \"ISO8859_9\", t[t.ISO8859_10 = 10] = \"ISO8859_10\", t[t.ISO8859_11 = 11] = \"ISO8859_11\", t[t.ISO8859_13 = 12] = \"ISO8859_13\", t[t.ISO8859_14 = 13] = \"ISO8859_14\", t[t.ISO8859_15 = 14] = \"ISO8859_15\", t[t.ISO8859_16 = 15] = \"ISO8859_16\", t[t.SJIS = 16] = \"SJIS\", t[t.Cp1250 = 17] = \"Cp1250\", t[t.Cp1251 = 18] = \"Cp1251\", t[t.Cp1252 = 19] = \"Cp1252\", t[t.Cp1256 = 20] = \"Cp1256\", t[t.UnicodeBigUnmarked = 21] = \"UnicodeBigUnmarked\", t[t.UTF8 = 22] = \"UTF8\", t[t.ASCII = 23] = \"ASCII\", t[t.Big5 = 24] = \"Big5\", t[t.GB18030 = 25] = \"GB18030\", t[t.EUC_KR = 26] = \"EUC_KR\"\r\n            }(A || (A = {}));\r\n    class m {\r\n        constructor(t, e, r, ...n) {\r\n            this.valueIdentifier = t, this.name = r, this.values = \"number\" == typeof e ? Int32Array.from([e]) : e, this.otherEncodingNames = n, m.VALUE_IDENTIFIER_TO_ECI.set(t, this), m.NAME_TO_ECI.set(r, this);\r\n            const i = this.values;\r\n            for (let t = 0, e = i.length; t !== e; t++) {\r\n                const e = i[t];\r\n                m.VALUES_TO_ECI.set(e, this)\r\n            }\r\n            for (const t of n) m.NAME_TO_ECI.set(t, this)\r\n        }\r\n        getValueIdentifier() {\r\n            return this.valueIdentifier\r\n        }\r\n        getName() {\r\n            return this.name\r\n        }\r\n        getValue() {\r\n            return this.values[0]\r\n        }\r\n        static getCharacterSetECIByValue(t) {\r\n            if (t < 0 || t >= 900) throw new E(\"incorect value\");\r\n            const e = m.VALUES_TO_ECI.get(t);\r\n            if (void 0 === e) throw new E(\"incorect value\");\r\n            return e\r\n        }\r\n        static getCharacterSetECIByName(t) {\r\n            const e = m.NAME_TO_ECI.get(t);\r\n            if (void 0 === e) throw new E(\"incorect value\");\r\n            return e\r\n        }\r\n        equals(t) {\r\n            if (!(t instanceof m)) return !1;\r\n            const e = t;\r\n            return this.getName() === e.getName()\r\n        }\r\n    }\r\n    m.VALUE_IDENTIFIER_TO_ECI = new Map, m.VALUES_TO_ECI = new Map, m.NAME_TO_ECI = new Map, m.Cp437 = new m(A.Cp437, Int32Array.from([0, 2]), \"Cp437\"), m.ISO8859_1 = new m(A.ISO8859_1, Int32Array.from([1, 3]), \"ISO-8859-1\", \"ISO88591\", \"ISO8859_1\"), m.ISO8859_2 = new m(A.ISO8859_2, 4, \"ISO-8859-2\", \"ISO88592\", \"ISO8859_2\"), m.ISO8859_3 = new m(A.ISO8859_3, 5, \"ISO-8859-3\", \"ISO88593\", \"ISO8859_3\"), m.ISO8859_4 = new m(A.ISO8859_4, 6, \"ISO-8859-4\", \"ISO88594\", \"ISO8859_4\"), m.ISO8859_5 = new m(A.ISO8859_5, 7, \"ISO-8859-5\", \"ISO88595\", \"ISO8859_5\"), m.ISO8859_6 = new m(A.ISO8859_6, 8, \"ISO-8859-6\", \"ISO88596\", \"ISO8859_6\"), m.ISO8859_7 = new m(A.ISO8859_7, 9, \"ISO-8859-7\", \"ISO88597\", \"ISO8859_7\"), m.ISO8859_8 = new m(A.ISO8859_8, 10, \"ISO-8859-8\", \"ISO88598\", \"ISO8859_8\"), m.ISO8859_9 = new m(A.ISO8859_9, 11, \"ISO-8859-9\", \"ISO88599\", \"ISO8859_9\"), m.ISO8859_10 = new m(A.ISO8859_10, 12, \"ISO-8859-10\", \"ISO885910\", \"ISO8859_10\"), m.ISO8859_11 = new m(A.ISO8859_11, 13, \"ISO-8859-11\", \"ISO885911\", \"ISO8859_11\"), m.ISO8859_13 = new m(A.ISO8859_13, 15, \"ISO-8859-13\", \"ISO885913\", \"ISO8859_13\"), m.ISO8859_14 = new m(A.ISO8859_14, 16, \"ISO-8859-14\", \"ISO885914\", \"ISO8859_14\"), m.ISO8859_15 = new m(A.ISO8859_15, 17, \"ISO-8859-15\", \"ISO885915\", \"ISO8859_15\"), m.ISO8859_16 = new m(A.ISO8859_16, 18, \"ISO-8859-16\", \"ISO885916\", \"ISO8859_16\"), m.SJIS = new m(A.SJIS, 20, \"SJIS\", \"Shift_JIS\"), m.Cp1250 = new m(A.Cp1250, 21, \"Cp1250\", \"windows-1250\"), m.Cp1251 = new m(A.Cp1251, 22, \"Cp1251\", \"windows-1251\"), m.Cp1252 = new m(A.Cp1252, 23, \"Cp1252\", \"windows-1252\"), m.Cp1256 = new m(A.Cp1256, 24, \"Cp1256\", \"windows-1256\"), m.UnicodeBigUnmarked = new m(A.UnicodeBigUnmarked, 25, \"UnicodeBigUnmarked\", \"UTF-16BE\", \"UnicodeBig\"), m.UTF8 = new m(A.UTF8, 26, \"UTF8\", \"UTF-8\"), m.ASCII = new m(A.ASCII, Int32Array.from([27, 170]), \"ASCII\", \"US-ASCII\"), m.Big5 = new m(A.Big5, 28, \"Big5\"), m.GB18030 = new m(A.GB18030, 29, \"GB18030\", \"GB2312\", \"EUC_CN\", \"GBK\"), m.EUC_KR = new m(A.EUC_KR, 30, \"EUC_KR\", \"EUC-KR\");\r\n    class _ extends i {}\r\n    _.kind = \"UnsupportedOperationException\";\r\n    class I {\r\n        static decode(t, e) {\r\n            const r = this.encodingName(e);\r\n            return this.customDecoder ? this.customDecoder(t, r) : \"undefined\" == typeof TextDecoder || this.shouldDecodeOnFallback(r) ? this.decodeFallback(t, r) : new TextDecoder(r).decode(t)\r\n        }\r\n        static shouldDecodeOnFallback(t) {\r\n            return !I.isBrowser() && \"ISO-8859-1\" === t\r\n        }\r\n        static encode(t, e) {\r\n            const r = this.encodingName(e);\r\n            return this.customEncoder ? this.customEncoder(t, r) : \"undefined\" == typeof TextEncoder ? this.encodeFallback(t) : (new TextEncoder).encode(t)\r\n        }\r\n        static isBrowser() {\r\n            return \"undefined\" != typeof window && \"[object Window]\" === {}.toString.call(window)\r\n        }\r\n        static encodingName(t) {\r\n            return \"string\" == typeof t ? t : t.getName()\r\n        }\r\n        static encodingCharacterSet(t) {\r\n            return t instanceof m ? t : m.getCharacterSetECIByName(t)\r\n        }\r\n        static decodeFallback(t, e) {\r\n            const r = this.encodingCharacterSet(e);\r\n            if (I.isDecodeFallbackSupported(r)) {\r\n                let e = \"\";\r\n                for (let r = 0, n = t.length; r < n; r++) {\r\n                    let n = t[r].toString(16);\r\n                    n.length < 2 && (n = \"0\" + n), e += \"%\" + n\r\n                }\r\n                return decodeURIComponent(e)\r\n            }\r\n            if (r.equals(m.UnicodeBigUnmarked)) return String.fromCharCode.apply(null, new Uint16Array(t.buffer));\r\n            throw new _(`Encoding ${this.encodingName(e)} not supported by fallback.`)\r\n        }\r\n        static isDecodeFallbackSupported(t) {\r\n            return t.equals(m.UTF8) || t.equals(m.ISO8859_1) || t.equals(m.ASCII)\r\n        }\r\n        static encodeFallback(t) {\r\n            const e = btoa(unescape(encodeURIComponent(t))).split(\"\"),\r\n                    r = [];\r\n            for (let t = 0; t < e.length; t++) r.push(e[t].charCodeAt(0));\r\n            return new Uint8Array(r)\r\n        }\r\n    }\r\n    class S {\r\n        static castAsNonUtf8Char(t, e = null) {\r\n            const r = e ? e.getName() : this.ISO88591;\r\n            return I.decode(new Uint8Array([t]), r)\r\n        }\r\n        static guessEncoding(t, e) {\r\n            if (null != e && void 0 !== e.get(C.CHARACTER_SET)) return e.get(C.CHARACTER_SET).toString();\r\n            const r = t.length;\r\n            let n = !0,\r\n                    i = !0,\r\n                    s = !0,\r\n                    o = 0,\r\n                    a = 0,\r\n                    l = 0,\r\n                    h = 0,\r\n                    c = 0,\r\n                    u = 0,\r\n                    d = 0,\r\n                    g = 0,\r\n                    f = 0,\r\n                    w = 0,\r\n                    A = 0;\r\n            const E = t.length > 3 && 239 === t[0] && 187 === t[1] && 191 === t[2];\r\n            for (let e = 0; e < r && (n || i || s); e++) {\r\n                const r = 255 & t[e];\r\n                s && (o > 0 ? 0 == (128 & r) ? s = !1 : o-- : 0 != (128 & r) && (0 == (64 & r) ? s = !1 : (o++, 0 == (32 & r) ? a++ : (o++, 0 == (16 & r) ? l++ : (o++, 0 == (8 & r) ? h++ : s = !1))))), n && (r > 127 && r < 160 ? n = !1 : r > 159 && (r < 192 || 215 === r || 247 === r) && A++), i && (c > 0 ? r < 64 || 127 === r || r > 252 ? i = !1 : c-- : 128 === r || 160 === r || r > 239 ? i = !1 : r > 160 && r < 224 ? (u++, g = 0, ++d > f && (f = d)) : r > 127 ? (c++, d = 0, ++g > w && (w = g)) : (d = 0, g = 0))\r\n            }\r\n            return s && o > 0 && (s = !1), i && c > 0 && (i = !1), s && (E || a + l + h > 0) ? S.UTF8 : i && (S.ASSUME_SHIFT_JIS || f >= 3 || w >= 3) ? S.SHIFT_JIS : n && i ? 2 === f && 2 === u || 10 * A >= r ? S.SHIFT_JIS : S.ISO88591 : n ? S.ISO88591 : i ? S.SHIFT_JIS : s ? S.UTF8 : S.PLATFORM_DEFAULT_ENCODING\r\n        }\r\n        static format(t, ...e) {\r\n            let r = -1;\r\n            return t.replace(/%(-)?(0?[0-9]+)?([.][0-9]+)?([#][0-9]+)?([scfpexd%])/g, function(t, n, i, s, o, a) {\r\n                if (\"%%\" === t) return \"%\";\r\n                if (void 0 === e[++r]) return;\r\n                t = s ? parseInt(s.substr(1)) : void 0;\r\n                let l, h = o ? parseInt(o.substr(1)) : void 0;\r\n                switch (a) {\r\n                    case \"s\":\r\n                        l = e[r];\r\n                        break;\r\n                    case \"c\":\r\n                        l = e[r][0];\r\n                        break;\r\n                    case \"f\":\r\n                        l = parseFloat(e[r]).toFixed(t);\r\n                        break;\r\n                    case \"p\":\r\n                        l = parseFloat(e[r]).toPrecision(t);\r\n                        break;\r\n                    case \"e\":\r\n                        l = parseFloat(e[r]).toExponential(t);\r\n                        break;\r\n                    case \"x\":\r\n                        l = parseInt(e[r]).toString(h || 16);\r\n                        break;\r\n                    case \"d\":\r\n                        l = parseFloat(parseInt(e[r], h || 10).toPrecision(t)).toFixed(0)\r\n                }\r\n                l = \"object\" == typeof l ? JSON.stringify(l) : (+l).toString(h);\r\n                let c = parseInt(i),\r\n                        u = i && i[0] + \"\" == \"0\" ? \"0\" : \" \";\r\n                for (; l.length < c;) l = void 0 !== n ? l + u : u + l;\r\n                return l\r\n            })\r\n        }\r\n        static getBytes(t, e) {\r\n            return I.encode(t, e)\r\n        }\r\n        static getCharCode(t, e = 0) {\r\n            return t.charCodeAt(e)\r\n        }\r\n        static getCharAt(t) {\r\n            return String.fromCharCode(t)\r\n        }\r\n    }\r\n    S.SHIFT_JIS = m.SJIS.getName(), S.GB2312 = \"GB2312\", S.ISO88591 = m.ISO8859_1.getName(), S.EUC_JP = \"EUC_JP\", S.UTF8 = m.UTF8.getName(), S.PLATFORM_DEFAULT_ENCODING = S.UTF8, S.ASSUME_SHIFT_JIS = !1;\r\n    class p {\r\n        constructor(t = \"\") {\r\n            this.value = t\r\n        }\r\n        enableDecoding(t) {\r\n            return this.encoding = t, this\r\n        }\r\n        append(t) {\r\n            return \"string\" == typeof t ? this.value += t.toString() : this.encoding ? this.value += S.castAsNonUtf8Char(t, this.encoding) : this.value += String.fromCharCode(t), this\r\n        }\r\n        appendChars(t, e, r) {\r\n            for (let n = e; e < e + r; n++) this.append(t[n]);\r\n            return this\r\n        }\r\n        length() {\r\n            return this.value.length\r\n        }\r\n        charAt(t) {\r\n            return this.value.charAt(t)\r\n        }\r\n        deleteCharAt(t) {\r\n            this.value = this.value.substr(0, t) + this.value.substring(t + 1)\r\n        }\r\n        setCharAt(t, e) {\r\n            this.value = this.value.substr(0, t) + e + this.value.substr(t + 1)\r\n        }\r\n        substring(t, e) {\r\n            return this.value.substring(t, e)\r\n        }\r\n        setLengthToZero() {\r\n            this.value = \"\"\r\n        }\r\n        toString() {\r\n            return this.value\r\n        }\r\n        insert(t, e) {\r\n            this.value = this.value.substr(0, t) + e + this.value.substr(t + e.length)\r\n        }\r\n    }\r\n    class T {\r\n        constructor(t, e, r, n) {\r\n            if (this.width = t, this.height = e, this.rowSize = r, this.bits = n, null == e && (e = t), this.height = e, t < 1 || e < 1) throw new o(\"Both dimensions must be greater than 0\");\r\n            null == r && (r = Math.floor((t + 31) / 32)), this.rowSize = r, null == n && (this.bits = new Int32Array(this.rowSize * this.height))\r\n        }\r\n        static parseFromBooleanArray(t) {\r\n            const e = t.length,\r\n                    r = t[0].length,\r\n                    n = new T(r, e);\r\n            for (let i = 0; i < e; i++) {\r\n                const e = t[i];\r\n                for (let t = 0; t < r; t++) e[t] && n.set(t, i)\r\n            }\r\n            return n\r\n        }\r\n        static parseFromString(t, e, r) {\r\n            if (null === t) throw new o(\"stringRepresentation cannot be null\");\r\n            const n = new Array(t.length);\r\n            let i = 0,\r\n                    s = 0,\r\n                    a = -1,\r\n                    l = 0,\r\n                    h = 0;\r\n            for (; h < t.length;)\r\n                if (\"\\n\" === t.charAt(h) || \"\\r\" === t.charAt(h)) {\r\n                    if (i > s) {\r\n                        if (-1 === a) a = i - s;\r\n                        else if (i - s !== a) throw new o(\"row lengths do not match\");\r\n                        s = i, l++\r\n                    }\r\n                    h++\r\n                } else if (t.substring(h, h + e.length) === e) h += e.length, n[i] = !0, i++;\r\n                else {\r\n                    if (t.substring(h, h + r.length) !== r) throw new o(\"illegal character encountered: \" + t.substring(h));\r\n                    h += r.length, n[i] = !1, i++\r\n                }\r\n            if (i > s) {\r\n                if (-1 === a) a = i - s;\r\n                else if (i - s !== a) throw new o(\"row lengths do not match\");\r\n                l++\r\n            }\r\n            const c = new T(a, l);\r\n            for (let t = 0; t < i; t++) n[t] && c.set(Math.floor(t % a), Math.floor(t / a));\r\n            return c\r\n        }\r\n        get(t, e) {\r\n            const r = e * this.rowSize + Math.floor(t / 32);\r\n            return 0 != (this.bits[r] >>> (31 & t) & 1)\r\n        }\r\n        set(t, e) {\r\n            const r = e * this.rowSize + Math.floor(t / 32);\r\n            this.bits[r] |= 1 << (31 & t) & 4294967295\r\n        }\r\n        unset(t, e) {\r\n            const r = e * this.rowSize + Math.floor(t / 32);\r\n            this.bits[r] &= ~(1 << (31 & t) & 4294967295)\r\n        }\r\n        flip(t, e) {\r\n            const r = e * this.rowSize + Math.floor(t / 32);\r\n            this.bits[r] ^= 1 << (31 & t) & 4294967295\r\n        }\r\n        xor(t) {\r\n            if (this.width !== t.getWidth() || this.height !== t.getHeight() || this.rowSize !== t.getRowSize()) throw new o(\"input matrix dimensions do not match\");\r\n            const e = new w(Math.floor(this.width / 32) + 1),\r\n                    r = this.rowSize,\r\n                    n = this.bits;\r\n            for (let i = 0, s = this.height; i < s; i++) {\r\n                const s = i * r,\r\n                        o = t.getRow(i, e).getBitArray();\r\n                for (let t = 0; t < r; t++) n[s + t] ^= o[t]\r\n            }\r\n        }\r\n        clear() {\r\n            const t = this.bits,\r\n                    e = t.length;\r\n            for (let r = 0; r < e; r++) t[r] = 0\r\n        }\r\n        setRegion(t, e, r, n) {\r\n            if (e < 0 || t < 0) throw new o(\"Left and top must be nonnegative\");\r\n            if (n < 1 || r < 1) throw new o(\"Height and width must be at least 1\");\r\n            const i = t + r,\r\n                    s = e + n;\r\n            if (s > this.height || i > this.width) throw new o(\"The region must fit inside the matrix\");\r\n            const a = this.rowSize,\r\n                    l = this.bits;\r\n            for (let r = e; r < s; r++) {\r\n                const e = r * a;\r\n                for (let r = t; r < i; r++) l[e + Math.floor(r / 32)] |= 1 << (31 & r) & 4294967295\r\n            }\r\n        }\r\n        getRow(t, e) {\r\n            null == e || e.getSize() < this.width ? e = new w(this.width) : e.clear();\r\n            const r = this.rowSize,\r\n                    n = this.bits,\r\n                    i = t * r;\r\n            for (let t = 0; t < r; t++) e.setBulk(32 * t, n[i + t]);\r\n            return e\r\n        }\r\n        setRow(t, e) {\r\n            c.arraycopy(e.getBitArray(), 0, this.bits, t * this.rowSize, this.rowSize)\r\n        }\r\n        rotate180() {\r\n            const t = this.getWidth(),\r\n                    e = this.getHeight();\r\n            let r = new w(t),\r\n                    n = new w(t);\r\n            for (let t = 0, i = Math.floor((e + 1) / 2); t < i; t++) r = this.getRow(t, r), n = this.getRow(e - 1 - t, n), r.reverse(), n.reverse(), this.setRow(t, n), this.setRow(e - 1 - t, r)\r\n        }\r\n        getEnclosingRectangle() {\r\n            const t = this.width,\r\n                    e = this.height,\r\n                    r = this.rowSize,\r\n                    n = this.bits;\r\n            let i = t,\r\n                    s = e,\r\n                    o = -1,\r\n                    a = -1;\r\n            for (let t = 0; t < e; t++)\r\n                for (let e = 0; e < r; e++) {\r\n                    const l = n[t * r + e];\r\n                    if (0 !== l) {\r\n                        if (t < s && (s = t), t > a && (a = t), 32 * e < i) {\r\n                            let t = 0;\r\n                            for (; 0 == (l << 31 - t & 4294967295);) t++;\r\n                            32 * e + t < i && (i = 32 * e + t)\r\n                        }\r\n                        if (32 * e + 31 > o) {\r\n                            let t = 31;\r\n                            for (; l >>> t == 0;) t--;\r\n                            32 * e + t > o && (o = 32 * e + t)\r\n                        }\r\n                    }\r\n                }\r\n            return o < i || a < s ? null : Int32Array.from([i, s, o - i + 1, a - s + 1])\r\n        }\r\n        getTopLeftOnBit() {\r\n            const t = this.rowSize,\r\n                    e = this.bits;\r\n            let r = 0;\r\n            for (; r < e.length && 0 === e[r];) r++;\r\n            if (r === e.length) return null;\r\n            const n = r / t;\r\n            let i = r % t * 32;\r\n            const s = e[r];\r\n            let o = 0;\r\n            for (; 0 == (s << 31 - o & 4294967295);) o++;\r\n            return i += o, Int32Array.from([i, n])\r\n        }\r\n        getBottomRightOnBit() {\r\n            const t = this.rowSize,\r\n                    e = this.bits;\r\n            let r = e.length - 1;\r\n            for (; r >= 0 && 0 === e[r];) r--;\r\n            if (r < 0) return null;\r\n            const n = Math.floor(r / t);\r\n            let i = 32 * Math.floor(r % t);\r\n            const s = e[r];\r\n            let o = 31;\r\n            for (; s >>> o == 0;) o--;\r\n            return i += o, Int32Array.from([i, n])\r\n        }\r\n        getWidth() {\r\n            return this.width\r\n        }\r\n        getHeight() {\r\n            return this.height\r\n        }\r\n        getRowSize() {\r\n            return this.rowSize\r\n        }\r\n        equals(t) {\r\n            if (!(t instanceof T)) return !1;\r\n            const e = t;\r\n            return this.width === e.width && this.height === e.height && this.rowSize === e.rowSize && g.equals(this.bits, e.bits)\r\n        }\r\n        hashCode() {\r\n            let t = this.width;\r\n            return t = 31 * (t = 31 * (t = 31 * (t = 31 * t + this.width) + this.height) + this.rowSize) + g.hashCode(this.bits)\r\n        }\r\n        toString(t = \"X \", e = \"  \", r = \"\\n\") {\r\n            return this.buildToString(t, e, r)\r\n        }\r\n        buildToString(t, e, r) {\r\n            let n = new p;\r\n            for (let i = 0, s = this.height; i < s; i++) {\r\n                for (let r = 0, s = this.width; r < s; r++) n.append(this.get(r, i) ? t : e);\r\n                n.append(r)\r\n            }\r\n            return n.toString()\r\n        }\r\n        clone() {\r\n            return new T(this.width, this.height, this.rowSize, this.bits.slice())\r\n        }\r\n    }\r\n    class R extends i {\r\n        static getNotFoundInstance() {\r\n            return new R\r\n        }\r\n    }\r\n    R.kind = \"NotFoundException\";\r\n    class N extends h {\r\n        constructor(t) {\r\n            super(t), this.luminances = N.EMPTY, this.buckets = new Int32Array(N.LUMINANCE_BUCKETS)\r\n        }\r\n        getBlackRow(t, e) {\r\n            const r = this.getLuminanceSource(),\r\n                    n = r.getWidth();\r\n            null == e || e.getSize() < n ? e = new w(n) : e.clear(), this.initArrays(n);\r\n            const i = r.getRow(t, this.luminances),\r\n                    s = this.buckets;\r\n            for (let t = 0; t < n; t++) s[(255 & i[t]) >> N.LUMINANCE_SHIFT]++;\r\n            const o = N.estimateBlackPoint(s);\r\n            if (n < 3)\r\n                for (let t = 0; t < n; t++)(255 & i[t]) < o && e.set(t);\r\n            else {\r\n                let t = 255 & i[0],\r\n                        r = 255 & i[1];\r\n                for (let s = 1; s < n - 1; s++) {\r\n                    const n = 255 & i[s + 1];\r\n                    (4 * r - t - n) / 2 < o && e.set(s), t = r, r = n\r\n                }\r\n            }\r\n            return e\r\n        }\r\n        getBlackMatrix() {\r\n            const t = this.getLuminanceSource(),\r\n                    e = t.getWidth(),\r\n                    r = t.getHeight(),\r\n                    n = new T(e, r);\r\n            this.initArrays(e);\r\n            const i = this.buckets;\r\n            for (let n = 1; n < 5; n++) {\r\n                const s = Math.floor(r * n / 5),\r\n                        o = t.getRow(s, this.luminances),\r\n                        a = Math.floor(4 * e / 5);\r\n                for (let t = Math.floor(e / 5); t < a; t++) {\r\n                    i[(255 & o[t]) >> N.LUMINANCE_SHIFT]++\r\n                }\r\n            }\r\n            const s = N.estimateBlackPoint(i),\r\n                    o = t.getMatrix();\r\n            for (let t = 0; t < r; t++) {\r\n                const r = t * e;\r\n                for (let i = 0; i < e; i++) {\r\n                    (255 & o[r + i]) < s && n.set(i, t)\r\n                }\r\n            }\r\n            return n\r\n        }\r\n        createBinarizer(t) {\r\n            return new N(t)\r\n        }\r\n        initArrays(t) {\r\n            this.luminances.length < t && (this.luminances = new Uint8ClampedArray(t));\r\n            const e = this.buckets;\r\n            for (let t = 0; t < N.LUMINANCE_BUCKETS; t++) e[t] = 0\r\n        }\r\n        static estimateBlackPoint(t) {\r\n            const e = t.length;\r\n            let r = 0,\r\n                    n = 0,\r\n                    i = 0;\r\n            for (let s = 0; s < e; s++) t[s] > i && (n = s, i = t[s]), t[s] > r && (r = t[s]);\r\n            let s = 0,\r\n                    o = 0;\r\n            for (let r = 0; r < e; r++) {\r\n                const e = r - n,\r\n                        i = t[r] * e * e;\r\n                i > o && (s = r, o = i)\r\n            }\r\n            if (n > s) {\r\n                const t = n;\r\n                n = s, s = t\r\n            }\r\n            if (s - n <= e / 16) throw new R;\r\n            let a = s - 1,\r\n                    l = -1;\r\n            for (let e = s - 1; e > n; e--) {\r\n                const i = e - n,\r\n                        o = i * i * (s - e) * (r - t[e]);\r\n                o > l && (a = e, l = o)\r\n            }\r\n            return a << N.LUMINANCE_SHIFT\r\n        }\r\n    }\r\n    N.LUMINANCE_BITS = 5, N.LUMINANCE_SHIFT = 8 - N.LUMINANCE_BITS, N.LUMINANCE_BUCKETS = 1 << N.LUMINANCE_BITS, N.EMPTY = Uint8ClampedArray.from([0]);\r\n    class D extends N {\r\n        constructor(t) {\r\n            super(t), this.matrix = null\r\n        }\r\n        getBlackMatrix() {\r\n            if (null !== this.matrix) return this.matrix;\r\n            const t = this.getLuminanceSource(),\r\n                    e = t.getWidth(),\r\n                    r = t.getHeight();\r\n            if (e >= D.MINIMUM_DIMENSION && r >= D.MINIMUM_DIMENSION) {\r\n                const n = t.getMatrix();\r\n                let i = e >> D.BLOCK_SIZE_POWER;\r\n                0 != (e & D.BLOCK_SIZE_MASK) && i++;\r\n                let s = r >> D.BLOCK_SIZE_POWER;\r\n                0 != (r & D.BLOCK_SIZE_MASK) && s++;\r\n                const o = D.calculateBlackPoints(n, i, s, e, r),\r\n                        a = new T(e, r);\r\n                D.calculateThresholdForBlock(n, i, s, e, r, o, a), this.matrix = a\r\n            } else this.matrix = super.getBlackMatrix();\r\n            return this.matrix\r\n        }\r\n        createBinarizer(t) {\r\n            return new D(t)\r\n        }\r\n        static calculateThresholdForBlock(t, e, r, n, i, s, o) {\r\n            const a = i - D.BLOCK_SIZE,\r\n                    l = n - D.BLOCK_SIZE;\r\n            for (let i = 0; i < r; i++) {\r\n                let h = i << D.BLOCK_SIZE_POWER;\r\n                h > a && (h = a);\r\n                const c = D.cap(i, 2, r - 3);\r\n                for (let r = 0; r < e; r++) {\r\n                    let i = r << D.BLOCK_SIZE_POWER;\r\n                    i > l && (i = l);\r\n                    const a = D.cap(r, 2, e - 3);\r\n                    let u = 0;\r\n                    for (let t = -2; t <= 2; t++) {\r\n                        const e = s[c + t];\r\n                        u += e[a - 2] + e[a - 1] + e[a] + e[a + 1] + e[a + 2]\r\n                    }\r\n                    const d = u / 25;\r\n                    D.thresholdBlock(t, i, h, d, n, o)\r\n                }\r\n            }\r\n        }\r\n        static cap(t, e, r) {\r\n            return t < e ? e : t > r ? r : t\r\n        }\r\n        static thresholdBlock(t, e, r, n, i, s) {\r\n            for (let o = 0, a = r * i + e; o < D.BLOCK_SIZE; o++, a += i)\r\n                for (let i = 0; i < D.BLOCK_SIZE; i++)(255 & t[a + i]) <= n && s.set(e + i, r + o)\r\n        }\r\n        static calculateBlackPoints(t, e, r, n, i) {\r\n            const s = i - D.BLOCK_SIZE,\r\n                    o = n - D.BLOCK_SIZE,\r\n                    a = new Array(r);\r\n            for (let i = 0; i < r; i++) {\r\n                a[i] = new Int32Array(e);\r\n                let r = i << D.BLOCK_SIZE_POWER;\r\n                r > s && (r = s);\r\n                for (let s = 0; s < e; s++) {\r\n                    let e = s << D.BLOCK_SIZE_POWER;\r\n                    e > o && (e = o);\r\n                    let l = 0,\r\n                            h = 255,\r\n                            c = 0;\r\n                    for (let i = 0, s = r * n + e; i < D.BLOCK_SIZE; i++, s += n) {\r\n                        for (let e = 0; e < D.BLOCK_SIZE; e++) {\r\n                            const r = 255 & t[s + e];\r\n                            l += r, r < h && (h = r), r > c && (c = r)\r\n                        }\r\n                        if (c - h > D.MIN_DYNAMIC_RANGE)\r\n                            for (i++, s += n; i < D.BLOCK_SIZE; i++, s += n)\r\n                                for (let e = 0; e < D.BLOCK_SIZE; e++) l += 255 & t[s + e]\r\n                    }\r\n                    let u = l >> 2 * D.BLOCK_SIZE_POWER;\r\n                    if (c - h <= D.MIN_DYNAMIC_RANGE && (u = h / 2, i > 0 && s > 0)) {\r\n                        const t = (a[i - 1][s] + 2 * a[i][s - 1] + a[i - 1][s - 1]) / 4;\r\n                        h < t && (u = t)\r\n                    }\r\n                    a[i][s] = u\r\n                }\r\n            }\r\n            return a\r\n        }\r\n    }\r\n    D.BLOCK_SIZE_POWER = 3, D.BLOCK_SIZE = 1 << D.BLOCK_SIZE_POWER, D.BLOCK_SIZE_MASK = D.BLOCK_SIZE - 1, D.MINIMUM_DIMENSION = 5 * D.BLOCK_SIZE, D.MIN_DYNAMIC_RANGE = 24;\r\n    class y {\r\n        constructor(t, e) {\r\n            this.width = t, this.height = e\r\n        }\r\n        getWidth() {\r\n            return this.width\r\n        }\r\n        getHeight() {\r\n            return this.height\r\n        }\r\n        isCropSupported() {\r\n            return !1\r\n        }\r\n        crop(t, e, r, n) {\r\n            throw new _(\"This luminance source does not support cropping.\")\r\n        }\r\n        isRotateSupported() {\r\n            return !1\r\n        }\r\n        rotateCounterClockwise() {\r\n            throw new _(\"This luminance source does not support rotation by 90 degrees.\")\r\n        }\r\n        rotateCounterClockwise45() {\r\n            throw new _(\"This luminance source does not support rotation by 45 degrees.\")\r\n        }\r\n        toString() {\r\n            const t = new Uint8ClampedArray(this.width);\r\n            let e = new p;\r\n            for (let r = 0; r < this.height; r++) {\r\n                const n = this.getRow(r, t);\r\n                for (let t = 0; t < this.width; t++) {\r\n                    const r = 255 & n[t];\r\n                    let i;\r\n                    i = r < 64 ? \"#\" : r < 128 ? \"+\" : r < 192 ? \".\" : \" \", e.append(i)\r\n                }\r\n                e.append(\"\\n\")\r\n            }\r\n            return e.toString()\r\n        }\r\n    }\r\n    class O extends y {\r\n        constructor(t) {\r\n            super(t.getWidth(), t.getHeight()), this.delegate = t\r\n        }\r\n        getRow(t, e) {\r\n            const r = this.delegate.getRow(t, e),\r\n                    n = this.getWidth();\r\n            for (let t = 0; t < n; t++) r[t] = 255 - (255 & r[t]);\r\n            return r\r\n        }\r\n        getMatrix() {\r\n            const t = this.delegate.getMatrix(),\r\n                    e = this.getWidth() * this.getHeight(),\r\n                    r = new Uint8ClampedArray(e);\r\n            for (let n = 0; n < e; n++) r[n] = 255 - (255 & t[n]);\r\n            return r\r\n        }\r\n        isCropSupported() {\r\n            return this.delegate.isCropSupported()\r\n        }\r\n        crop(t, e, r, n) {\r\n            return new O(this.delegate.crop(t, e, r, n))\r\n        }\r\n        isRotateSupported() {\r\n            return this.delegate.isRotateSupported()\r\n        }\r\n        invert() {\r\n            return this.delegate\r\n        }\r\n        rotateCounterClockwise() {\r\n            return new O(this.delegate.rotateCounterClockwise())\r\n        }\r\n        rotateCounterClockwise45() {\r\n            return new O(this.delegate.rotateCounterClockwise45())\r\n        }\r\n    }\r\n    class M extends y {\r\n        constructor(t) {\r\n            super(t.width, t.height), this.canvas = t, this.tempCanvasElement = null, this.buffer = M.makeBufferFromCanvasImageData(t)\r\n        }\r\n        static makeBufferFromCanvasImageData(t) {\r\n            const e = t.getContext(\"2d\").getImageData(0, 0, t.width, t.height);\r\n            return M.toGrayscaleBuffer(e.data, t.width, t.height)\r\n        }\r\n        static toGrayscaleBuffer(t, e, r) {\r\n            const n = new Uint8ClampedArray(e * r);\r\n            for (let e = 0, r = 0, i = t.length; e < i; e += 4, r++) {\r\n                let i;\r\n                if (0 === t[e + 3]) i = 255;\r\n                else {\r\n                    i = 306 * t[e] + 601 * t[e + 1] + 117 * t[e + 2] + 512 >> 10\r\n                }\r\n                n[r] = i\r\n            }\r\n            return n\r\n        }\r\n        getRow(t, e) {\r\n            if (t < 0 || t >= this.getHeight()) throw new o(\"Requested row is outside the image: \" + t);\r\n            const r = this.getWidth(),\r\n                    n = t * r;\r\n            return null === e ? e = this.buffer.slice(n, n + r) : (e.length < r && (e = new Uint8ClampedArray(r)), e.set(this.buffer.slice(n, n + r))), e\r\n        }\r\n        getMatrix() {\r\n            return this.buffer\r\n        }\r\n        isCropSupported() {\r\n            return !0\r\n        }\r\n        crop(t, e, r, n) {\r\n            return super.crop(t, e, r, n), this\r\n        }\r\n        isRotateSupported() {\r\n            return !0\r\n        }\r\n        rotateCounterClockwise() {\r\n            return this.rotate(-90), this\r\n        }\r\n        rotateCounterClockwise45() {\r\n            return this.rotate(-45), this\r\n        }\r\n        getTempCanvasElement() {\r\n            if (null === this.tempCanvasElement) {\r\n                const t = this.canvas.ownerDocument.createElement(\"canvas\");\r\n                t.width = this.canvas.width, t.height = this.canvas.height, this.tempCanvasElement = t\r\n            }\r\n            return this.tempCanvasElement\r\n        }\r\n        rotate(t) {\r\n            const e = this.getTempCanvasElement(),\r\n                    r = e.getContext(\"2d\"),\r\n                    n = t * M.DEGREE_TO_RADIANS,\r\n                    i = this.canvas.width,\r\n                    s = this.canvas.height,\r\n                    o = Math.ceil(Math.abs(Math.cos(n)) * i + Math.abs(Math.sin(n)) * s),\r\n                    a = Math.ceil(Math.abs(Math.sin(n)) * i + Math.abs(Math.cos(n)) * s);\r\n            return e.width = o, e.height = a, r.translate(o / 2, a / 2), r.rotate(n), r.drawImage(this.canvas, i / -2, s / -2), this.buffer = M.makeBufferFromCanvasImageData(e), this\r\n        }\r\n        invert() {\r\n            return new O(this)\r\n        }\r\n    }\r\n    M.DEGREE_TO_RADIANS = Math.PI / 180;\r\n    class b {\r\n        constructor(t, e, r) {\r\n            this.deviceId = t, this.label = e, this.kind = \"videoinput\", this.groupId = r || void 0\r\n        }\r\n        toJSON() {\r\n            return {\r\n                kind: this.kind,\r\n                groupId: this.groupId,\r\n                deviceId: this.deviceId,\r\n                label: this.label\r\n            }\r\n        }\r\n    }\r\n    var B, P = (globalThis || global || self || window ? (globalThis || global || self || window || void 0).__awaiter : void 0) || function(t, e, r, n) {\r\n        return new(r || (r = Promise))(function(i, s) {\r\n            function o(t) {\r\n                try {\r\n                    l(n.next(t))\r\n                } catch (t) {\r\n                    s(t)\r\n                }\r\n            }\r\n\r\n            function a(t) {\r\n                try {\r\n                    l(n.throw(t))\r\n                } catch (t) {\r\n                    s(t)\r\n                }\r\n            }\r\n\r\n            function l(t) {\r\n                var e;\r\n                t.done ? i(t.value) : (e = t.value, e instanceof r ? e : new r(function(t) {\r\n                    t(e)\r\n                })).then(o, a)\r\n            }\r\n            l((n = n.apply(t, e || [])).next())\r\n        })\r\n    };\r\n    class L {\r\n        constructor(t, e = 500, r) {\r\n            this.reader = t, this.timeBetweenScansMillis = e, this._hints = r, this._stopContinuousDecode = !1, this._stopAsyncDecode = !1, this._timeBetweenDecodingAttempts = 0\r\n        }\r\n        get hasNavigator() {\r\n            return \"undefined\" != typeof navigator\r\n        }\r\n        get isMediaDevicesSuported() {\r\n            return this.hasNavigator && !!navigator.mediaDevices\r\n        }\r\n        get canEnumerateDevices() {\r\n            return !(!this.isMediaDevicesSuported || !navigator.mediaDevices.enumerateDevices)\r\n        }\r\n        get timeBetweenDecodingAttempts() {\r\n            return this._timeBetweenDecodingAttempts\r\n        }\r\n        set timeBetweenDecodingAttempts(t) {\r\n            this._timeBetweenDecodingAttempts = t < 0 ? 0 : t\r\n        }\r\n        set hints(t) {\r\n            this._hints = t || null\r\n        }\r\n        get hints() {\r\n            return this._hints\r\n        }\r\n        listVideoInputDevices() {\r\n            return P(this, void 0, void 0, function*() {\r\n                if (!this.hasNavigator) throw new Error(\"Can't enumerate devices, navigator is not present.\");\r\n                if (!this.canEnumerateDevices) throw new Error(\"Can't enumerate devices, method not supported.\");\r\n                const t = yield navigator.mediaDevices.enumerateDevices(), e = [];\r\n                for (const r of t) {\r\n                    const t = \"video\" === r.kind ? \"videoinput\" : r.kind;\r\n                    if (\"videoinput\" !== t) continue;\r\n                    const n = {\r\n                        deviceId: r.deviceId || r.id,\r\n                        label: r.label || `Video device ${e.length+1}`,\r\n                        kind: t,\r\n                        groupId: r.groupId\r\n                    };\r\n                    e.push(n)\r\n                }\r\n                return e\r\n            })\r\n        }\r\n        getVideoInputDevices() {\r\n            return P(this, void 0, void 0, function*() {\r\n                return (yield this.listVideoInputDevices()).map(t => new b(t.deviceId, t.label))\r\n            })\r\n        }\r\n        findDeviceById(t) {\r\n            return P(this, void 0, void 0, function*() {\r\n                const e = yield this.listVideoInputDevices();\r\n                return e ? e.find(e => e.deviceId === t) : null\r\n            })\r\n        }\r\n        decodeFromInputVideoDevice(t, e) {\r\n            return P(this, void 0, void 0, function*() {\r\n                return yield this.decodeOnceFromVideoDevice(t, e)\r\n            })\r\n        }\r\n        decodeOnceFromVideoDevice(t, e) {\r\n            return P(this, void 0, void 0, function*() {\r\n                let r;\r\n                this.reset();\r\n                const n = {\r\n                    video: r = t ? {\r\n                        deviceId: {\r\n                            exact: t\r\n                        }\r\n                    } : {\r\n                        facingMode: \"environment\"\r\n                    }\r\n                };\r\n                return yield this.decodeOnceFromConstraints(n, e)\r\n            })\r\n        }\r\n        decodeOnceFromConstraints(t, e) {\r\n            return P(this, void 0, void 0, function*() {\r\n                const r = yield navigator.mediaDevices.getUserMedia(t);\r\n                return yield this.decodeOnceFromStream(r, e)\r\n            })\r\n        }\r\n        decodeOnceFromStream(t, e) {\r\n            return P(this, void 0, void 0, function*() {\r\n                this.reset();\r\n                const r = yield this.attachStreamToVideo(t, e);\r\n                return yield this.decodeOnce(r)\r\n            })\r\n        }\r\n        decodeFromInputVideoDeviceContinuously(t, e, r) {\r\n            return P(this, void 0, void 0, function*() {\r\n                return yield this.decodeFromVideoDevice(t, e, r)\r\n            })\r\n        }\r\n        decodeFromVideoDevice(t, e, r) {\r\n            return P(this, void 0, void 0, function*() {\r\n                let n;\r\n                const i = {\r\n                    video: n = t ? {\r\n                        deviceId: {\r\n                            exact: t\r\n                        }\r\n                    } : {\r\n                        facingMode: \"environment\"\r\n                    }\r\n                };\r\n                return yield this.decodeFromConstraints(i, e, r)\r\n            })\r\n        }\r\n        decodeFromConstraints(t, e, r) {\r\n            return P(this, void 0, void 0, function*() {\r\n                const n = yield navigator.mediaDevices.getUserMedia(t);\r\n                return yield this.decodeFromStream(n, e, r)\r\n            })\r\n        }\r\n        decodeFromStream(t, e, r) {\r\n            return P(this, void 0, void 0, function*() {\r\n                this.reset();\r\n                const n = yield this.attachStreamToVideo(t, e);\r\n                return yield this.decodeContinuously(n, r)\r\n            })\r\n        }\r\n        stopAsyncDecode() {\r\n            this._stopAsyncDecode = !0\r\n        }\r\n        stopContinuousDecode() {\r\n            this._stopContinuousDecode = !0\r\n        }\r\n        attachStreamToVideo(t, e) {\r\n            return P(this, void 0, void 0, function*() {\r\n                const r = this.prepareVideoElement(e);\r\n                return this.addVideoSource(r, t), this.videoElement = r, this.stream = t, yield this.playVideoOnLoadAsync(r), r\r\n            })\r\n        }\r\n        playVideoOnLoadAsync(t) {\r\n            return new Promise((e, r) => this.playVideoOnLoad(t, () => e()))\r\n        }\r\n        playVideoOnLoad(t, e) {\r\n            this.videoEndedListener = (() => this.stopStreams()), this.videoCanPlayListener = (() => this.tryPlayVideo(t)), t.addEventListener(\"ended\", this.videoEndedListener), t.addEventListener(\"canplay\", this.videoCanPlayListener), t.addEventListener(\"playing\", e), this.tryPlayVideo(t)\r\n        }\r\n        isVideoPlaying(t) {\r\n            return t.currentTime > 0 && !t.paused && !t.ended && t.readyState > 2\r\n        }\r\n        tryPlayVideo(t) {\r\n            return P(this, void 0, void 0, function*() {\r\n                if (this.isVideoPlaying(t)) console.warn(\"Trying to play video that is already playing.\");\r\n                else try {\r\n                    yield t.play()\r\n                } catch (t) {\r\n                    console.warn(\"It was not possible to play the video.\")\r\n                }\r\n            })\r\n        }\r\n        getMediaElement(t, e) {\r\n            const r = document.getElementById(t);\r\n            if (!r) throw new s(`element with id '${t}' not found`);\r\n            if (r.nodeName.toLowerCase() !== e.toLowerCase()) throw new s(`element with id '${t}' must be an ${e} element`);\r\n            return r\r\n        }\r\n        decodeFromImage(t, e) {\r\n            if (!t && !e) throw new s(\"either imageElement with a src set or an url must be provided\");\r\n            return e && !t ? this.decodeFromImageUrl(e) : this.decodeFromImageElement(t)\r\n        }\r\n        decodeFromVideo(t, e) {\r\n            if (!t && !e) throw new s(\"Either an element with a src set or an URL must be provided\");\r\n            return e && !t ? this.decodeFromVideoUrl(e) : this.decodeFromVideoElement(t)\r\n        }\r\n        decodeFromVideoContinuously(t, e, r) {\r\n            if (void 0 === t && void 0 === e) throw new s(\"Either an element with a src set or an URL must be provided\");\r\n            return e && !t ? this.decodeFromVideoUrlContinuously(e, r) : this.decodeFromVideoElementContinuously(t, r)\r\n        }\r\n        decodeFromImageElement(t) {\r\n            if (!t) throw new s(\"An image element must be provided.\");\r\n            this.reset();\r\n            const e = this.prepareImageElement(t);\r\n            let r;\r\n            return this.imageElement = e, r = this.isImageLoaded(e) ? this.decodeOnce(e, !1, !0) : this._decodeOnLoadImage(e)\r\n        }\r\n        decodeFromVideoElement(t) {\r\n            const e = this._decodeFromVideoElementSetup(t);\r\n            return this._decodeOnLoadVideo(e)\r\n        }\r\n        decodeFromVideoElementContinuously(t, e) {\r\n            const r = this._decodeFromVideoElementSetup(t);\r\n            return this._decodeOnLoadVideoContinuously(r, e)\r\n        }\r\n        _decodeFromVideoElementSetup(t) {\r\n            if (!t) throw new s(\"A video element must be provided.\");\r\n            this.reset();\r\n            const e = this.prepareVideoElement(t);\r\n            return this.videoElement = e, e\r\n        }\r\n        decodeFromImageUrl(t) {\r\n            if (!t) throw new s(\"An URL must be provided.\");\r\n            this.reset();\r\n            const e = this.prepareImageElement();\r\n            this.imageElement = e;\r\n            const r = this._decodeOnLoadImage(e);\r\n            return e.src = t, r\r\n        }\r\n        decodeFromVideoUrl(t) {\r\n            if (!t) throw new s(\"An URL must be provided.\");\r\n            this.reset();\r\n            const e = this.prepareVideoElement(),\r\n                    r = this.decodeFromVideoElement(e);\r\n            return e.src = t, r\r\n        }\r\n        decodeFromVideoUrlContinuously(t, e) {\r\n            if (!t) throw new s(\"An URL must be provided.\");\r\n            this.reset();\r\n            const r = this.prepareVideoElement(),\r\n                    n = this.decodeFromVideoElementContinuously(r, e);\r\n            return r.src = t, n\r\n        }\r\n        _decodeOnLoadImage(t) {\r\n            return new Promise((e, r) => {\r\n                this.imageLoadedListener = (() => this.decodeOnce(t, !1, !0).then(e, r)), t.addEventListener(\"load\", this.imageLoadedListener)\r\n            })\r\n        }\r\n        _decodeOnLoadVideo(t) {\r\n            return P(this, void 0, void 0, function*() {\r\n                return yield this.playVideoOnLoadAsync(t), yield this.decodeOnce(t)\r\n            })\r\n        }\r\n        _decodeOnLoadVideoContinuously(t, e) {\r\n            return P(this, void 0, void 0, function*() {\r\n                yield this.playVideoOnLoadAsync(t), this.decodeContinuously(t, e)\r\n            })\r\n        }\r\n        isImageLoaded(t) {\r\n            return !!t.complete && 0 !== t.naturalWidth\r\n        }\r\n        prepareImageElement(t) {\r\n            let e;\r\n            return void 0 === t && ((e = document.createElement(\"img\")).width = 200, e.height = 200), \"string\" == typeof t && (e = this.getMediaElement(t, \"img\")), t instanceof HTMLImageElement && (e = t), e\r\n        }\r\n        prepareVideoElement(t) {\r\n            let e;\r\n            return t || \"undefined\" == typeof document || ((e = document.createElement(\"video\")).width = 200, e.height = 200), \"string\" == typeof t && (e = this.getMediaElement(t, \"video\")), t instanceof HTMLVideoElement && (e = t), e.setAttribute(\"autoplay\", \"true\"), e.setAttribute(\"muted\", \"true\"), e.setAttribute(\"playsinline\", \"true\"), e\r\n        }\r\n        decodeOnce(t, e = !0, r = !0) {\r\n            this._stopAsyncDecode = !1;\r\n            const n = (i, s) => {\r\n                if (this._stopAsyncDecode) return s(new R(\"Video stream has ended before any code could be detected.\")), void(this._stopAsyncDecode = void 0);\r\n                try {\r\n                    i(this.decode(t))\r\n                } catch (t) {\r\n                    const o = (t instanceof l || t instanceof E) && r;\r\n                    if (e && t instanceof R || o) return setTimeout(n, this._timeBetweenDecodingAttempts, i, s);\r\n                    s(t)\r\n                }\r\n            };\r\n            return new Promise((t, e) => n(t, e))\r\n        }\r\n        decodeContinuously(t, e) {\r\n            this._stopContinuousDecode = !1;\r\n            const r = () => {\r\n                if (this._stopContinuousDecode) this._stopContinuousDecode = void 0;\r\n                else try {\r\n                    const n = this.decode(t);\r\n                    e(n, null), setTimeout(r, this.timeBetweenScansMillis)\r\n                } catch (t) {\r\n                    e(null, t);\r\n                    const n = t instanceof R;\r\n                    (t instanceof l || t instanceof E || n) && setTimeout(r, this._timeBetweenDecodingAttempts)\r\n                }\r\n            };\r\n            r()\r\n        }\r\n        decode(t) {\r\n            const e = this.createBinaryBitmap(t);\r\n            return this.decodeBitmap(e)\r\n        }\r\n        createBinaryBitmap(t) {\r\n            const e = this.getCaptureCanvasContext(t);\r\n            this.drawImageOnCanvas(e, t);\r\n            const r = this.getCaptureCanvas(t),\r\n                    n = new M(r),\r\n                    i = new D(n);\r\n            return new a(i)\r\n        }\r\n        getCaptureCanvasContext(t) {\r\n            if (!this.captureCanvasContext) {\r\n                const e = this.getCaptureCanvas(t).getContext(\"2d\");\r\n                this.captureCanvasContext = e\r\n            }\r\n            return this.captureCanvasContext\r\n        }\r\n        getCaptureCanvas(t) {\r\n            if (!this.captureCanvas) {\r\n                const e = this.createCaptureCanvas(t);\r\n                this.captureCanvas = e\r\n            }\r\n            return this.captureCanvas\r\n        }\r\n        drawImageOnCanvas(t, e) {\r\n            t.drawImage(e, 0, 0)\r\n        }\r\n        decodeBitmap(t) {\r\n            return this.reader.decode(t, this._hints)\r\n        }\r\n        createCaptureCanvas(t) {\r\n            if (\"undefined\" == typeof document) return this._destroyCaptureCanvas(), null;\r\n            const e = document.createElement(\"canvas\");\r\n            let r, n;\r\n            return void 0 !== t && (t instanceof HTMLVideoElement ? (r = t.videoWidth, n = t.videoHeight) : t instanceof HTMLImageElement && (r = t.naturalWidth || t.width, n = t.naturalHeight || t.height)), e.style.width = r + \"px\", e.style.height = n + \"px\", e.width = r, e.height = n, e\r\n        }\r\n        stopStreams() {\r\n            this.stream && (this.stream.getVideoTracks().forEach(t => t.stop()), this.stream = void 0), !1 === this._stopAsyncDecode && this.stopAsyncDecode(), !1 === this._stopContinuousDecode && this.stopContinuousDecode()\r\n        }\r\n        reset() {\r\n            this.stopStreams(), this._destroyVideoElement(), this._destroyImageElement(), this._destroyCaptureCanvas()\r\n        }\r\n        _destroyVideoElement() {\r\n            this.videoElement && (void 0 !== this.videoEndedListener && this.videoElement.removeEventListener(\"ended\", this.videoEndedListener), void 0 !== this.videoPlayingEventListener && this.videoElement.removeEventListener(\"playing\", this.videoPlayingEventListener), void 0 !== this.videoCanPlayListener && this.videoElement.removeEventListener(\"loadedmetadata\", this.videoCanPlayListener), this.cleanVideoSource(this.videoElement), this.videoElement = void 0)\r\n        }\r\n        _destroyImageElement() {\r\n            this.imageElement && (void 0 !== this.imageLoadedListener && this.imageElement.removeEventListener(\"load\", this.imageLoadedListener), this.imageElement.src = void 0, this.imageElement.removeAttribute(\"src\"), this.imageElement = void 0)\r\n        }\r\n        _destroyCaptureCanvas() {\r\n            this.captureCanvasContext = void 0, this.captureCanvas = void 0\r\n        }\r\n        addVideoSource(t, e) {\r\n            try {\r\n                t.srcObject = e\r\n            } catch (r) {\r\n                t.src = URL.createObjectURL(e)\r\n            }\r\n        }\r\n        cleanVideoSource(t) {\r\n            try {\r\n                t.srcObject = null\r\n            } catch (e) {\r\n                t.src = \"\"\r\n            }\r\n            this.videoElement.removeAttribute(\"src\")\r\n        }\r\n    }\r\n    class F {\r\n        constructor(t, e, r = (null == e ? 0 : 8 * e.length), n, i, s = c.currentTimeMillis()) {\r\n            this.text = t, this.rawBytes = e, this.numBits = r, this.resultPoints = n, this.format = i, this.timestamp = s, this.text = t, this.rawBytes = e, this.numBits = null == r ? null == e ? 0 : 8 * e.length : r, this.resultPoints = n, this.format = i, this.resultMetadata = null, this.timestamp = null == s ? c.currentTimeMillis() : s\r\n        }\r\n        getText() {\r\n            return this.text\r\n        }\r\n        getRawBytes() {\r\n            return this.rawBytes\r\n        }\r\n        getNumBits() {\r\n            return this.numBits\r\n        }\r\n        getResultPoints() {\r\n            return this.resultPoints\r\n        }\r\n        getBarcodeFormat() {\r\n            return this.format\r\n        }\r\n        getResultMetadata() {\r\n            return this.resultMetadata\r\n        }\r\n        putMetadata(t, e) {\r\n            null === this.resultMetadata && (this.resultMetadata = new Map), this.resultMetadata.set(t, e)\r\n        }\r\n        putAllMetadata(t) {\r\n            null !== t && (null === this.resultMetadata ? this.resultMetadata = t : this.resultMetadata = new Map(t))\r\n        }\r\n        addResultPoints(t) {\r\n            const e = this.resultPoints;\r\n            if (null === e) this.resultPoints = t;\r\n            else if (null !== t && t.length > 0) {\r\n                const r = new Array(e.length + t.length);\r\n                c.arraycopy(e, 0, r, 0, e.length), c.arraycopy(t, 0, r, e.length, t.length), this.resultPoints = r\r\n            }\r\n        }\r\n        getTimestamp() {\r\n            return this.timestamp\r\n        }\r\n        toString() {\r\n            return this.text\r\n        }\r\n    }! function(t) {\r\n        t[t.AZTEC = 0] = \"AZTEC\", t[t.CODABAR = 1] = \"CODABAR\", t[t.CODE_39 = 2] = \"CODE_39\", t[t.CODE_93 = 3] = \"CODE_93\", t[t.CODE_128 = 4] = \"CODE_128\", t[t.DATA_MATRIX = 5] = \"DATA_MATRIX\", t[t.EAN_8 = 6] = \"EAN_8\", t[t.EAN_13 = 7] = \"EAN_13\", t[t.ITF = 8] = \"ITF\", t[t.MAXICODE = 9] = \"MAXICODE\", t[t.PDF_417 = 10] = \"PDF_417\", t[t.QR_CODE = 11] = \"QR_CODE\", t[t.RSS_14 = 12] = \"RSS_14\", t[t.RSS_EXPANDED = 13] = \"RSS_EXPANDED\", t[t.UPC_A = 14] = \"UPC_A\", t[t.UPC_E = 15] = \"UPC_E\", t[t.UPC_EAN_EXTENSION = 16] = \"UPC_EAN_EXTENSION\"\r\n    }(B || (B = {}));\r\n    var v, k = B;\r\n    ! function(t) {\r\n        t[t.OTHER = 0] = \"OTHER\", t[t.ORIENTATION = 1] = \"ORIENTATION\", t[t.BYTE_SEGMENTS = 2] = \"BYTE_SEGMENTS\", t[t.ERROR_CORRECTION_LEVEL = 3] = \"ERROR_CORRECTION_LEVEL\", t[t.ISSUE_NUMBER = 4] = \"ISSUE_NUMBER\", t[t.SUGGESTED_PRICE = 5] = \"SUGGESTED_PRICE\", t[t.POSSIBLE_COUNTRY = 6] = \"POSSIBLE_COUNTRY\", t[t.UPC_EAN_EXTENSION = 7] = \"UPC_EAN_EXTENSION\", t[t.PDF417_EXTRA_METADATA = 8] = \"PDF417_EXTRA_METADATA\", t[t.STRUCTURED_APPEND_SEQUENCE = 9] = \"STRUCTURED_APPEND_SEQUENCE\", t[t.STRUCTURED_APPEND_PARITY = 10] = \"STRUCTURED_APPEND_PARITY\"\r\n    }(v || (v = {}));\r\n    var x, V, U, H, G, X, W = v;\r\n    class z {\r\n        constructor(t, e, r, n, i = -1, s = -1) {\r\n            this.rawBytes = t, this.text = e, this.byteSegments = r, this.ecLevel = n, this.structuredAppendSequenceNumber = i, this.structuredAppendParity = s, this.numBits = null == t ? 0 : 8 * t.length\r\n        }\r\n        getRawBytes() {\r\n            return this.rawBytes\r\n        }\r\n        getNumBits() {\r\n            return this.numBits\r\n        }\r\n        setNumBits(t) {\r\n            this.numBits = t\r\n        }\r\n        getText() {\r\n            return this.text\r\n        }\r\n        getByteSegments() {\r\n            return this.byteSegments\r\n        }\r\n        getECLevel() {\r\n            return this.ecLevel\r\n        }\r\n        getErrorsCorrected() {\r\n            return this.errorsCorrected\r\n        }\r\n        setErrorsCorrected(t) {\r\n            this.errorsCorrected = t\r\n        }\r\n        getErasures() {\r\n            return this.erasures\r\n        }\r\n        setErasures(t) {\r\n            this.erasures = t\r\n        }\r\n        getOther() {\r\n            return this.other\r\n        }\r\n        setOther(t) {\r\n            this.other = t\r\n        }\r\n        hasStructuredAppend() {\r\n            return this.structuredAppendParity >= 0 && this.structuredAppendSequenceNumber >= 0\r\n        }\r\n        getStructuredAppendParity() {\r\n            return this.structuredAppendParity\r\n        }\r\n        getStructuredAppendSequenceNumber() {\r\n            return this.structuredAppendSequenceNumber\r\n        }\r\n    }\r\n    class Y {\r\n        exp(t) {\r\n            return this.expTable[t]\r\n        }\r\n        log(t) {\r\n            if (0 === t) throw new o;\r\n            return this.logTable[t]\r\n        }\r\n        static addOrSubtract(t, e) {\r\n            return t ^ e\r\n        }\r\n    }\r\n    class Z {\r\n        constructor(t, e) {\r\n            if (0 === e.length) throw new o;\r\n            this.field = t;\r\n            const r = e.length;\r\n            if (r > 1 && 0 === e[0]) {\r\n                let t = 1;\r\n                for (; t < r && 0 === e[t];) t++;\r\n                t === r ? this.coefficients = Int32Array.from([0]) : (this.coefficients = new Int32Array(r - t), c.arraycopy(e, t, this.coefficients, 0, this.coefficients.length))\r\n            } else this.coefficients = e\r\n        }\r\n        getCoefficients() {\r\n            return this.coefficients\r\n        }\r\n        getDegree() {\r\n            return this.coefficients.length - 1\r\n        }\r\n        isZero() {\r\n            return 0 === this.coefficients[0]\r\n        }\r\n        getCoefficient(t) {\r\n            return this.coefficients[this.coefficients.length - 1 - t]\r\n        }\r\n        evaluateAt(t) {\r\n            if (0 === t) return this.getCoefficient(0);\r\n            const e = this.coefficients;\r\n            let r;\r\n            if (1 === t) {\r\n                r = 0;\r\n                for (let t = 0, n = e.length; t !== n; t++) {\r\n                    const n = e[t];\r\n                    r = Y.addOrSubtract(r, n)\r\n                }\r\n                return r\r\n            }\r\n            r = e[0];\r\n            const n = e.length,\r\n                    i = this.field;\r\n            for (let s = 1; s < n; s++) r = Y.addOrSubtract(i.multiply(t, r), e[s]);\r\n            return r\r\n        }\r\n        addOrSubtract(t) {\r\n            if (!this.field.equals(t.field)) throw new o(\"GenericGFPolys do not have same GenericGF field\");\r\n            if (this.isZero()) return t;\r\n            if (t.isZero()) return this;\r\n            let e = this.coefficients,\r\n                    r = t.coefficients;\r\n            if (e.length > r.length) {\r\n                const t = e;\r\n                e = r, r = t\r\n            }\r\n            let n = new Int32Array(r.length);\r\n            const i = r.length - e.length;\r\n            c.arraycopy(r, 0, n, 0, i);\r\n            for (let t = i; t < r.length; t++) n[t] = Y.addOrSubtract(e[t - i], r[t]);\r\n            return new Z(this.field, n)\r\n        }\r\n        multiply(t) {\r\n            if (!this.field.equals(t.field)) throw new o(\"GenericGFPolys do not have same GenericGF field\");\r\n            if (this.isZero() || t.isZero()) return this.field.getZero();\r\n            const e = this.coefficients,\r\n                    r = e.length,\r\n                    n = t.coefficients,\r\n                    i = n.length,\r\n                    s = new Int32Array(r + i - 1),\r\n                    a = this.field;\r\n            for (let t = 0; t < r; t++) {\r\n                const r = e[t];\r\n                for (let e = 0; e < i; e++) s[t + e] = Y.addOrSubtract(s[t + e], a.multiply(r, n[e]))\r\n            }\r\n            return new Z(a, s)\r\n        }\r\n        multiplyScalar(t) {\r\n            if (0 === t) return this.field.getZero();\r\n            if (1 === t) return this;\r\n            const e = this.coefficients.length,\r\n                    r = this.field,\r\n                    n = new Int32Array(e),\r\n                    i = this.coefficients;\r\n            for (let s = 0; s < e; s++) n[s] = r.multiply(i[s], t);\r\n            return new Z(r, n)\r\n        }\r\n        multiplyByMonomial(t, e) {\r\n            if (t < 0) throw new o;\r\n            if (0 === e) return this.field.getZero();\r\n            const r = this.coefficients,\r\n                    n = r.length,\r\n                    i = new Int32Array(n + t),\r\n                    s = this.field;\r\n            for (let t = 0; t < n; t++) i[t] = s.multiply(r[t], e);\r\n            return new Z(s, i)\r\n        }\r\n        divide(t) {\r\n            if (!this.field.equals(t.field)) throw new o(\"GenericGFPolys do not have same GenericGF field\");\r\n            if (t.isZero()) throw new o(\"Divide by 0\");\r\n            const e = this.field;\r\n            let r = e.getZero(),\r\n                    n = this;\r\n            const i = t.getCoefficient(t.getDegree()),\r\n                    s = e.inverse(i);\r\n            for (; n.getDegree() >= t.getDegree() && !n.isZero();) {\r\n                const i = n.getDegree() - t.getDegree(),\r\n                        o = e.multiply(n.getCoefficient(n.getDegree()), s),\r\n                        a = t.multiplyByMonomial(i, o),\r\n                        l = e.buildMonomial(i, o);\r\n                r = r.addOrSubtract(l), n = n.addOrSubtract(a)\r\n            }\r\n            return [r, n]\r\n        }\r\n        toString() {\r\n            let t = \"\";\r\n            for (let e = this.getDegree(); e >= 0; e--) {\r\n                let r = this.getCoefficient(e);\r\n                if (0 !== r) {\r\n                    if (r < 0 ? (t += \" - \", r = -r) : t.length > 0 && (t += \" + \"), 0 === e || 1 !== r) {\r\n                        const e = this.field.log(r);\r\n                        0 === e ? t += \"1\" : 1 === e ? t += \"a\" : (t += \"a^\", t += e)\r\n                    }\r\n                    0 !== e && (1 === e ? t += \"x\" : (t += \"x^\", t += e))\r\n                }\r\n            }\r\n            return t\r\n        }\r\n    }\r\n    class K extends i {}\r\n    K.kind = \"ArithmeticException\";\r\n    class q extends Y {\r\n        constructor(t, e, r) {\r\n            super(), this.primitive = t, this.size = e, this.generatorBase = r;\r\n            const n = new Int32Array(e);\r\n            let i = 1;\r\n            for (let r = 0; r < e; r++) n[r] = i, (i *= 2) >= e && (i ^= t, i &= e - 1);\r\n            this.expTable = n;\r\n            const s = new Int32Array(e);\r\n            for (let t = 0; t < e - 1; t++) s[n[t]] = t;\r\n            this.logTable = s, this.zero = new Z(this, Int32Array.from([0])), this.one = new Z(this, Int32Array.from([1]))\r\n        }\r\n        getZero() {\r\n            return this.zero\r\n        }\r\n        getOne() {\r\n            return this.one\r\n        }\r\n        buildMonomial(t, e) {\r\n            if (t < 0) throw new o;\r\n            if (0 === e) return this.zero;\r\n            const r = new Int32Array(t + 1);\r\n            return r[0] = e, new Z(this, r)\r\n        }\r\n        inverse(t) {\r\n            if (0 === t) throw new K;\r\n            return this.expTable[this.size - this.logTable[t] - 1]\r\n        }\r\n        multiply(t, e) {\r\n            return 0 === t || 0 === e ? 0 : this.expTable[(this.logTable[t] + this.logTable[e]) % (this.size - 1)]\r\n        }\r\n        getSize() {\r\n            return this.size\r\n        }\r\n        getGeneratorBase() {\r\n            return this.generatorBase\r\n        }\r\n        toString() {\r\n            return \"GF(0x\" + f.toHexString(this.primitive) + \",\" + this.size + \")\"\r\n        }\r\n        equals(t) {\r\n            return t === this\r\n        }\r\n    }\r\n    q.AZTEC_DATA_12 = new q(4201, 4096, 1), q.AZTEC_DATA_10 = new q(1033, 1024, 1), q.AZTEC_DATA_6 = new q(67, 64, 1), q.AZTEC_PARAM = new q(19, 16, 1), q.QR_CODE_FIELD_256 = new q(285, 256, 0), q.DATA_MATRIX_FIELD_256 = new q(301, 256, 1), q.AZTEC_DATA_8 = q.DATA_MATRIX_FIELD_256, q.MAXICODE_FIELD_64 = q.AZTEC_DATA_6;\r\n    class Q extends i {}\r\n    Q.kind = \"ReedSolomonException\";\r\n    class j extends i {}\r\n    j.kind = \"IllegalStateException\";\r\n    class J {\r\n        constructor(t) {\r\n            this.field = t\r\n        }\r\n        decode(t, e) {\r\n            const r = this.field,\r\n                    n = new Z(r, t),\r\n                    i = new Int32Array(e);\r\n            let s = !0;\r\n            for (let t = 0; t < e; t++) {\r\n                const e = n.evaluateAt(r.exp(t + r.getGeneratorBase()));\r\n                i[i.length - 1 - t] = e, 0 !== e && (s = !1)\r\n            }\r\n            if (s) return;\r\n            const o = new Z(r, i),\r\n                    a = this.runEuclideanAlgorithm(r.buildMonomial(e, 1), o, e),\r\n                    l = a[0],\r\n                    h = a[1],\r\n                    c = this.findErrorLocations(l),\r\n                    u = this.findErrorMagnitudes(h, c);\r\n            for (let e = 0; e < c.length; e++) {\r\n                const n = t.length - 1 - r.log(c[e]);\r\n                if (n < 0) throw new Q(\"Bad error location\");\r\n                t[n] = q.addOrSubtract(t[n], u[e])\r\n            }\r\n        }\r\n        runEuclideanAlgorithm(t, e, r) {\r\n            if (t.getDegree() < e.getDegree()) {\r\n                const r = t;\r\n                t = e, e = r\r\n            }\r\n            const n = this.field;\r\n            let i = t,\r\n                    s = e,\r\n                    o = n.getZero(),\r\n                    a = n.getOne();\r\n            for (; s.getDegree() >= (r / 2 | 0);) {\r\n                let t = i,\r\n                        e = o;\r\n                if (o = a, (i = s).isZero()) throw new Q(\"r_{i-1} was zero\");\r\n                s = t;\r\n                let r = n.getZero();\r\n                const l = i.getCoefficient(i.getDegree()),\r\n                        h = n.inverse(l);\r\n                for (; s.getDegree() >= i.getDegree() && !s.isZero();) {\r\n                    const t = s.getDegree() - i.getDegree(),\r\n                            e = n.multiply(s.getCoefficient(s.getDegree()), h);\r\n                    r = r.addOrSubtract(n.buildMonomial(t, e)), s = s.addOrSubtract(i.multiplyByMonomial(t, e))\r\n                }\r\n                if (a = r.multiply(o).addOrSubtract(e), s.getDegree() >= i.getDegree()) throw new j(\"Division algorithm failed to reduce polynomial?\")\r\n            }\r\n            const l = a.getCoefficient(0);\r\n            if (0 === l) throw new Q(\"sigmaTilde(0) was zero\");\r\n            const h = n.inverse(l);\r\n            return [a.multiplyScalar(h), s.multiplyScalar(h)]\r\n        }\r\n        findErrorLocations(t) {\r\n            const e = t.getDegree();\r\n            if (1 === e) return Int32Array.from([t.getCoefficient(1)]);\r\n            const r = new Int32Array(e);\r\n            let n = 0;\r\n            const i = this.field;\r\n            for (let s = 1; s < i.getSize() && n < e; s++) 0 === t.evaluateAt(s) && (r[n] = i.inverse(s), n++);\r\n            if (n !== e) throw new Q(\"Error locator degree does not match number of roots\");\r\n            return r\r\n        }\r\n        findErrorMagnitudes(t, e) {\r\n            const r = e.length,\r\n                    n = new Int32Array(r),\r\n                    i = this.field;\r\n            for (let s = 0; s < r; s++) {\r\n                const o = i.inverse(e[s]);\r\n                let a = 1;\r\n                for (let t = 0; t < r; t++)\r\n                    if (s !== t) {\r\n                        const r = i.multiply(e[t], o),\r\n                                n = 0 == (1 & r) ? 1 | r : -2 & r;\r\n                        a = i.multiply(a, n)\r\n                    } n[s] = i.multiply(t.evaluateAt(o), i.inverse(a)), 0 !== i.getGeneratorBase() && (n[s] = i.multiply(n[s], o))\r\n            }\r\n            return n\r\n        }\r\n    }! function(t) {\r\n        t[t.UPPER = 0] = \"UPPER\", t[t.LOWER = 1] = \"LOWER\", t[t.MIXED = 2] = \"MIXED\", t[t.DIGIT = 3] = \"DIGIT\", t[t.PUNCT = 4] = \"PUNCT\", t[t.BINARY = 5] = \"BINARY\"\r\n    }(x || (x = {}));\r\n    class $ {\r\n        decode(t) {\r\n            this.ddata = t;\r\n            let e = t.getBits(),\r\n                    r = this.extractBits(e),\r\n                    n = this.correctBits(r),\r\n                    i = $.convertBoolArrayToByteArray(n),\r\n                    s = $.getEncodedData(n),\r\n                    o = new z(i, s, null, null);\r\n            return o.setNumBits(n.length), o\r\n        }\r\n        static highLevelDecode(t) {\r\n            return this.getEncodedData(t)\r\n        }\r\n        static getEncodedData(t) {\r\n            let e = t.length,\r\n                    r = x.UPPER,\r\n                    n = x.UPPER,\r\n                    i = \"\",\r\n                    s = 0;\r\n            for (; s < e;)\r\n                if (n === x.BINARY) {\r\n                    if (e - s < 5) break;\r\n                    let o = $.readCode(t, s, 5);\r\n                    if (s += 5, 0 === o) {\r\n                        if (e - s < 11) break;\r\n                        o = $.readCode(t, s, 11) + 31, s += 11\r\n                    }\r\n                    for (let r = 0; r < o; r++) {\r\n                        if (e - s < 8) {\r\n                            s = e;\r\n                            break\r\n                        }\r\n                        const r = $.readCode(t, s, 8);\r\n                        i += S.castAsNonUtf8Char(r), s += 8\r\n                    }\r\n                    n = r\r\n                } else {\r\n                    let o = n === x.DIGIT ? 4 : 5;\r\n                    if (e - s < o) break;\r\n                    let a = $.readCode(t, s, o);\r\n                    s += o;\r\n                    let l = $.getCharacter(n, a);\r\n                    l.startsWith(\"CTRL_\") ? (r = n, n = $.getTable(l.charAt(5)), \"L\" === l.charAt(6) && (r = n)) : (i += l, n = r)\r\n                } return i\r\n        }\r\n        static getTable(t) {\r\n            switch (t) {\r\n                case \"L\":\r\n                    return x.LOWER;\r\n                case \"P\":\r\n                    return x.PUNCT;\r\n                case \"M\":\r\n                    return x.MIXED;\r\n                case \"D\":\r\n                    return x.DIGIT;\r\n                case \"B\":\r\n                    return x.BINARY;\r\n                case \"U\":\r\n                default:\r\n                    return x.UPPER\r\n            }\r\n        }\r\n        static getCharacter(t, e) {\r\n            switch (t) {\r\n                case x.UPPER:\r\n                    return $.UPPER_TABLE[e];\r\n                case x.LOWER:\r\n                    return $.LOWER_TABLE[e];\r\n                case x.MIXED:\r\n                    return $.MIXED_TABLE[e];\r\n                case x.PUNCT:\r\n                    return $.PUNCT_TABLE[e];\r\n                case x.DIGIT:\r\n                    return $.DIGIT_TABLE[e];\r\n                default:\r\n                    throw new j(\"Bad table\")\r\n            }\r\n        }\r\n        correctBits(t) {\r\n            let e, r;\r\n            this.ddata.getNbLayers() <= 2 ? (r = 6, e = q.AZTEC_DATA_6) : this.ddata.getNbLayers() <= 8 ? (r = 8, e = q.AZTEC_DATA_8) : this.ddata.getNbLayers() <= 22 ? (r = 10, e = q.AZTEC_DATA_10) : (r = 12, e = q.AZTEC_DATA_12);\r\n            let n = this.ddata.getNbDatablocks(),\r\n                    i = t.length / r;\r\n            if (i < n) throw new E;\r\n            let s = t.length % r,\r\n                    o = new Int32Array(i);\r\n            for (let e = 0; e < i; e++, s += r) o[e] = $.readCode(t, s, r);\r\n            try {\r\n                new J(e).decode(o, i - n)\r\n            } catch (t) {\r\n                throw new E(t)\r\n            }\r\n            let a = (1 << r) - 1,\r\n                    l = 0;\r\n            for (let t = 0; t < n; t++) {\r\n                let e = o[t];\r\n                if (0 === e || e === a) throw new E;\r\n                1 !== e && e !== a - 1 || l++\r\n            }\r\n            let h = new Array(n * r - l),\r\n                    c = 0;\r\n            for (let t = 0; t < n; t++) {\r\n                let e = o[t];\r\n                if (1 === e || e === a - 1) h.fill(e > 1, c, c + r - 1), c += r - 1;\r\n                else\r\n                    for (let t = r - 1; t >= 0; --t) h[c++] = 0 != (e & 1 << t)\r\n            }\r\n            return h\r\n        }\r\n        extractBits(t) {\r\n            let e = this.ddata.isCompact(),\r\n                    r = this.ddata.getNbLayers(),\r\n                    n = (e ? 11 : 14) + 4 * r,\r\n                    i = new Int32Array(n),\r\n                    s = new Array(this.totalBitsInLayer(r, e));\r\n            if (e)\r\n                for (let t = 0; t < i.length; t++) i[t] = t;\r\n            else {\r\n                let t = n + 1 + 2 * f.truncDivision(f.truncDivision(n, 2) - 1, 15),\r\n                        e = n / 2,\r\n                        r = f.truncDivision(t, 2);\r\n                for (let t = 0; t < e; t++) {\r\n                    let n = t + f.truncDivision(t, 15);\r\n                    i[e - t - 1] = r - n - 1, i[e + t] = r + n + 1\r\n                }\r\n            }\r\n            for (let o = 0, a = 0; o < r; o++) {\r\n                let l = 4 * (r - o) + (e ? 9 : 12),\r\n                        h = 2 * o,\r\n                        c = n - 1 - h;\r\n                for (let e = 0; e < l; e++) {\r\n                    let r = 2 * e;\r\n                    for (let n = 0; n < 2; n++) s[a + r + n] = t.get(i[h + n], i[h + e]), s[a + 2 * l + r + n] = t.get(i[h + e], i[c - n]), s[a + 4 * l + r + n] = t.get(i[c - n], i[c - e]), s[a + 6 * l + r + n] = t.get(i[c - e], i[h + n])\r\n                }\r\n                a += 8 * l\r\n            }\r\n            return s\r\n        }\r\n        static readCode(t, e, r) {\r\n            let n = 0;\r\n            for (let i = e; i < e + r; i++) n <<= 1, t[i] && (n |= 1);\r\n            return n\r\n        }\r\n        static readByte(t, e) {\r\n            let r = t.length - e;\r\n            return r >= 8 ? $.readCode(t, e, 8) : $.readCode(t, e, r) << 8 - r\r\n        }\r\n        static convertBoolArrayToByteArray(t) {\r\n            let e = new Uint8Array((t.length + 7) / 8);\r\n            for (let r = 0; r < e.length; r++) e[r] = $.readByte(t, 8 * r);\r\n            return e\r\n        }\r\n        totalBitsInLayer(t, e) {\r\n            return ((e ? 88 : 112) + 16 * t) * t\r\n        }\r\n    }\r\n    $.UPPER_TABLE = [\"CTRL_PS\", \" \", \"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\", \"H\", \"I\", \"J\", \"K\", \"L\", \"M\", \"N\", \"O\", \"P\", \"Q\", \"R\", \"S\", \"T\", \"U\", \"V\", \"W\", \"X\", \"Y\", \"Z\", \"CTRL_LL\", \"CTRL_ML\", \"CTRL_DL\", \"CTRL_BS\"], $.LOWER_TABLE = [\"CTRL_PS\", \" \", \"a\", \"b\", \"c\", \"d\", \"e\", \"f\", \"g\", \"h\", \"i\", \"j\", \"k\", \"l\", \"m\", \"n\", \"o\", \"p\", \"q\", \"r\", \"s\", \"t\", \"u\", \"v\", \"w\", \"x\", \"y\", \"z\", \"CTRL_US\", \"CTRL_ML\", \"CTRL_DL\", \"CTRL_BS\"], $.MIXED_TABLE = [\"CTRL_PS\", \" \", \"\\\\1\", \"\\\\2\", \"\\\\3\", \"\\\\4\", \"\\\\5\", \"\\\\6\", \"\\\\7\", \"\\b\", \"\\t\", \"\\n\", \"\\\\13\", \"\\f\", \"\\r\", \"\\\\33\", \"\\\\34\", \"\\\\35\", \"\\\\36\", \"\\\\37\", \"@\", \"\\\\\", \"^\", \"_\", \"`\", \"|\", \"~\", \"\\\\177\", \"CTRL_LL\", \"CTRL_UL\", \"CTRL_PL\", \"CTRL_BS\"], $.PUNCT_TABLE = [\"\", \"\\r\", \"\\r\\n\", \". \", \", \", \": \", \"!\", '\"', \"#\", \"$\", \"%\", \"&\", \"'\", \"(\", \")\", \"*\", \"+\", \",\", \"-\", \".\", \"/\", \":\", \";\", \"<\", \"=\", \">\", \"?\", \"[\", \"]\", \"{\", \"}\", \"CTRL_UL\"], $.DIGIT_TABLE = [\"CTRL_PS\", \" \", \"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \",\", \".\", \"CTRL_UL\", \"CTRL_US\"];\r\n    class tt {\r\n        constructor() {}\r\n        static round(t) {\r\n            return NaN === t ? 0 : t <= Number.MIN_SAFE_INTEGER ? Number.MIN_SAFE_INTEGER : t >= Number.MAX_SAFE_INTEGER ? Number.MAX_SAFE_INTEGER : t + (t < 0 ? -.5 : .5) | 0\r\n        }\r\n        static distance(t, e, r, n) {\r\n            const i = t - r,\r\n                    s = e - n;\r\n            return Math.sqrt(i * i + s * s)\r\n        }\r\n        static sum(t) {\r\n            let e = 0;\r\n            for (let r = 0, n = t.length; r !== n; r++) {\r\n                e += t[r]\r\n            }\r\n            return e\r\n        }\r\n    }\r\n    class et {\r\n        static floatToIntBits(t) {\r\n            return t\r\n        }\r\n    }\r\n    et.MAX_VALUE = Number.MAX_SAFE_INTEGER;\r\n    class rt {\r\n        constructor(t, e) {\r\n            this.x = t, this.y = e\r\n        }\r\n        getX() {\r\n            return this.x\r\n        }\r\n        getY() {\r\n            return this.y\r\n        }\r\n        equals(t) {\r\n            if (t instanceof rt) {\r\n                const e = t;\r\n                return this.x === e.x && this.y === e.y\r\n            }\r\n            return !1\r\n        }\r\n        hashCode() {\r\n            return 31 * et.floatToIntBits(this.x) + et.floatToIntBits(this.y)\r\n        }\r\n        toString() {\r\n            return \"(\" + this.x + \",\" + this.y + \")\"\r\n        }\r\n        static orderBestPatterns(t) {\r\n            const e = this.distance(t[0], t[1]),\r\n                    r = this.distance(t[1], t[2]),\r\n                    n = this.distance(t[0], t[2]);\r\n            let i, s, o;\r\n            if (r >= e && r >= n ? (s = t[0], i = t[1], o = t[2]) : n >= r && n >= e ? (s = t[1], i = t[0], o = t[2]) : (s = t[2], i = t[0], o = t[1]), this.crossProductZ(i, s, o) < 0) {\r\n                const t = i;\r\n                i = o, o = t\r\n            }\r\n            t[0] = i, t[1] = s, t[2] = o\r\n        }\r\n        static distance(t, e) {\r\n            return tt.distance(t.x, t.y, e.x, e.y)\r\n        }\r\n        static crossProductZ(t, e, r) {\r\n            const n = e.x,\r\n                    i = e.y;\r\n            return (r.x - n) * (t.y - i) - (r.y - i) * (t.x - n)\r\n        }\r\n    }\r\n    class nt {\r\n        constructor(t, e) {\r\n            this.bits = t, this.points = e\r\n        }\r\n        getBits() {\r\n            return this.bits\r\n        }\r\n        getPoints() {\r\n            return this.points\r\n        }\r\n    }\r\n    class it extends nt {\r\n        constructor(t, e, r, n, i) {\r\n            super(t, e), this.compact = r, this.nbDatablocks = n, this.nbLayers = i\r\n        }\r\n        getNbLayers() {\r\n            return this.nbLayers\r\n        }\r\n        getNbDatablocks() {\r\n            return this.nbDatablocks\r\n        }\r\n        isCompact() {\r\n            return this.compact\r\n        }\r\n    }\r\n    class st {\r\n        constructor(t, e, r, n) {\r\n            this.image = t, this.height = t.getHeight(), this.width = t.getWidth(), null == e && (e = st.INIT_SIZE), null == r && (r = t.getWidth() / 2 | 0), null == n && (n = t.getHeight() / 2 | 0);\r\n            const i = e / 2 | 0;\r\n            if (this.leftInit = r - i, this.rightInit = r + i, this.upInit = n - i, this.downInit = n + i, this.upInit < 0 || this.leftInit < 0 || this.downInit >= this.height || this.rightInit >= this.width) throw new R\r\n        }\r\n        detect() {\r\n            let t = this.leftInit,\r\n                    e = this.rightInit,\r\n                    r = this.upInit,\r\n                    n = this.downInit,\r\n                    i = !1,\r\n                    s = !0,\r\n                    o = !1,\r\n                    a = !1,\r\n                    l = !1,\r\n                    h = !1,\r\n                    c = !1;\r\n            const u = this.width,\r\n                    d = this.height;\r\n            for (; s;) {\r\n                s = !1;\r\n                let g = !0;\r\n                for (;\r\n                        (g || !a) && e < u;)(g = this.containsBlackPoint(r, n, e, !1)) ? (e++, s = !0, a = !0) : a || e++;\r\n                if (e >= u) {\r\n                    i = !0;\r\n                    break\r\n                }\r\n                let f = !0;\r\n                for (;\r\n                        (f || !l) && n < d;)(f = this.containsBlackPoint(t, e, n, !0)) ? (n++, s = !0, l = !0) : l || n++;\r\n                if (n >= d) {\r\n                    i = !0;\r\n                    break\r\n                }\r\n                let w = !0;\r\n                for (;\r\n                        (w || !h) && t >= 0;)(w = this.containsBlackPoint(r, n, t, !1)) ? (t--, s = !0, h = !0) : h || t--;\r\n                if (t < 0) {\r\n                    i = !0;\r\n                    break\r\n                }\r\n                let A = !0;\r\n                for (;\r\n                        (A || !c) && r >= 0;)(A = this.containsBlackPoint(t, e, r, !0)) ? (r--, s = !0, c = !0) : c || r--;\r\n                if (r < 0) {\r\n                    i = !0;\r\n                    break\r\n                }\r\n                s && (o = !0)\r\n            }\r\n            if (!i && o) {\r\n                const i = e - t;\r\n                let s = null;\r\n                for (let e = 1; null === s && e < i; e++) s = this.getBlackPointOnSegment(t, n - e, t + e, n);\r\n                if (null == s) throw new R;\r\n                let o = null;\r\n                for (let e = 1; null === o && e < i; e++) o = this.getBlackPointOnSegment(t, r + e, t + e, r);\r\n                if (null == o) throw new R;\r\n                let a = null;\r\n                for (let t = 1; null === a && t < i; t++) a = this.getBlackPointOnSegment(e, r + t, e - t, r);\r\n                if (null == a) throw new R;\r\n                let l = null;\r\n                for (let t = 1; null === l && t < i; t++) l = this.getBlackPointOnSegment(e, n - t, e - t, n);\r\n                if (null == l) throw new R;\r\n                return this.centerEdges(l, s, a, o)\r\n            }\r\n            throw new R\r\n        }\r\n        getBlackPointOnSegment(t, e, r, n) {\r\n            const i = tt.round(tt.distance(t, e, r, n)),\r\n                    s = (r - t) / i,\r\n                    o = (n - e) / i,\r\n                    a = this.image;\r\n            for (let r = 0; r < i; r++) {\r\n                const n = tt.round(t + r * s),\r\n                        i = tt.round(e + r * o);\r\n                if (a.get(n, i)) return new rt(n, i)\r\n            }\r\n            return null\r\n        }\r\n        centerEdges(t, e, r, n) {\r\n            const i = t.getX(),\r\n                    s = t.getY(),\r\n                    o = e.getX(),\r\n                    a = e.getY(),\r\n                    l = r.getX(),\r\n                    h = r.getY(),\r\n                    c = n.getX(),\r\n                    u = n.getY(),\r\n                    d = st.CORR;\r\n            return i < this.width / 2 ? [new rt(c - d, u + d), new rt(o + d, a + d), new rt(l - d, h - d), new rt(i + d, s - d)] : [new rt(c + d, u + d), new rt(o + d, a - d), new rt(l - d, h + d), new rt(i - d, s - d)]\r\n        }\r\n        containsBlackPoint(t, e, r, n) {\r\n            const i = this.image;\r\n            if (n) {\r\n                for (let n = t; n <= e; n++)\r\n                    if (i.get(n, r)) return !0\r\n            } else\r\n                for (let n = t; n <= e; n++)\r\n                    if (i.get(r, n)) return !0;\r\n            return !1\r\n        }\r\n    }\r\n    st.INIT_SIZE = 10, st.CORR = 1;\r\n    class ot {\r\n        static checkAndNudgePoints(t, e) {\r\n            const r = t.getWidth(),\r\n                    n = t.getHeight();\r\n            let i = !0;\r\n            for (let t = 0; t < e.length && i; t += 2) {\r\n                const s = Math.floor(e[t]),\r\n                        o = Math.floor(e[t + 1]);\r\n                if (s < -1 || s > r || o < -1 || o > n) throw new R;\r\n                i = !1, -1 === s ? (e[t] = 0, i = !0) : s === r && (e[t] = r - 1, i = !0), -1 === o ? (e[t + 1] = 0, i = !0) : o === n && (e[t + 1] = n - 1, i = !0)\r\n            }\r\n            i = !0;\r\n            for (let t = e.length - 2; t >= 0 && i; t -= 2) {\r\n                const s = Math.floor(e[t]),\r\n                        o = Math.floor(e[t + 1]);\r\n                if (s < -1 || s > r || o < -1 || o > n) throw new R;\r\n                i = !1, -1 === s ? (e[t] = 0, i = !0) : s === r && (e[t] = r - 1, i = !0), -1 === o ? (e[t + 1] = 0, i = !0) : o === n && (e[t + 1] = n - 1, i = !0)\r\n            }\r\n        }\r\n    }\r\n    class at {\r\n        constructor(t, e, r, n, i, s, o, a, l) {\r\n            this.a11 = t, this.a21 = e, this.a31 = r, this.a12 = n, this.a22 = i, this.a32 = s, this.a13 = o, this.a23 = a, this.a33 = l\r\n        }\r\n        static quadrilateralToQuadrilateral(t, e, r, n, i, s, o, a, l, h, c, u, d, g, f, w) {\r\n            const A = at.quadrilateralToSquare(t, e, r, n, i, s, o, a);\r\n            return at.squareToQuadrilateral(l, h, c, u, d, g, f, w).times(A)\r\n        }\r\n        transformPoints(t) {\r\n            const e = t.length,\r\n                    r = this.a11,\r\n                    n = this.a12,\r\n                    i = this.a13,\r\n                    s = this.a21,\r\n                    o = this.a22,\r\n                    a = this.a23,\r\n                    l = this.a31,\r\n                    h = this.a32,\r\n                    c = this.a33;\r\n            for (let u = 0; u < e; u += 2) {\r\n                const e = t[u],\r\n                        d = t[u + 1],\r\n                        g = i * e + a * d + c;\r\n                t[u] = (r * e + s * d + l) / g, t[u + 1] = (n * e + o * d + h) / g\r\n            }\r\n        }\r\n        transformPointsWithValues(t, e) {\r\n            const r = this.a11,\r\n                    n = this.a12,\r\n                    i = this.a13,\r\n                    s = this.a21,\r\n                    o = this.a22,\r\n                    a = this.a23,\r\n                    l = this.a31,\r\n                    h = this.a32,\r\n                    c = this.a33,\r\n                    u = t.length;\r\n            for (let d = 0; d < u; d++) {\r\n                const u = t[d],\r\n                        g = e[d],\r\n                        f = i * u + a * g + c;\r\n                t[d] = (r * u + s * g + l) / f, e[d] = (n * u + o * g + h) / f\r\n            }\r\n        }\r\n        static squareToQuadrilateral(t, e, r, n, i, s, o, a) {\r\n            const l = t - r + i - o,\r\n                    h = e - n + s - a;\r\n            if (0 === l && 0 === h) return new at(r - t, i - r, t, n - e, s - n, e, 0, 0, 1);\r\n            {\r\n                const c = r - i,\r\n                        u = o - i,\r\n                        d = n - s,\r\n                        g = a - s,\r\n                        f = c * g - u * d,\r\n                        w = (l * g - u * h) / f,\r\n                        A = (c * h - l * d) / f;\r\n                return new at(r - t + w * r, o - t + A * o, t, n - e + w * n, a - e + A * a, e, w, A, 1)\r\n            }\r\n        }\r\n        static quadrilateralToSquare(t, e, r, n, i, s, o, a) {\r\n            return at.squareToQuadrilateral(t, e, r, n, i, s, o, a).buildAdjoint()\r\n        }\r\n        buildAdjoint() {\r\n            return new at(this.a22 * this.a33 - this.a23 * this.a32, this.a23 * this.a31 - this.a21 * this.a33, this.a21 * this.a32 - this.a22 * this.a31, this.a13 * this.a32 - this.a12 * this.a33, this.a11 * this.a33 - this.a13 * this.a31, this.a12 * this.a31 - this.a11 * this.a32, this.a12 * this.a23 - this.a13 * this.a22, this.a13 * this.a21 - this.a11 * this.a23, this.a11 * this.a22 - this.a12 * this.a21)\r\n        }\r\n        times(t) {\r\n            return new at(this.a11 * t.a11 + this.a21 * t.a12 + this.a31 * t.a13, this.a11 * t.a21 + this.a21 * t.a22 + this.a31 * t.a23, this.a11 * t.a31 + this.a21 * t.a32 + this.a31 * t.a33, this.a12 * t.a11 + this.a22 * t.a12 + this.a32 * t.a13, this.a12 * t.a21 + this.a22 * t.a22 + this.a32 * t.a23, this.a12 * t.a31 + this.a22 * t.a32 + this.a32 * t.a33, this.a13 * t.a11 + this.a23 * t.a12 + this.a33 * t.a13, this.a13 * t.a21 + this.a23 * t.a22 + this.a33 * t.a23, this.a13 * t.a31 + this.a23 * t.a32 + this.a33 * t.a33)\r\n        }\r\n    }\r\n    class lt extends ot {\r\n        sampleGrid(t, e, r, n, i, s, o, a, l, h, c, u, d, g, f, w, A, C, E) {\r\n            const m = at.quadrilateralToQuadrilateral(n, i, s, o, a, l, h, c, u, d, g, f, w, A, C, E);\r\n            return this.sampleGridWithTransform(t, e, r, m)\r\n        }\r\n        sampleGridWithTransform(t, e, r, n) {\r\n            if (e <= 0 || r <= 0) throw new R;\r\n            const i = new T(e, r),\r\n                    s = new Float32Array(2 * e);\r\n            for (let e = 0; e < r; e++) {\r\n                const r = s.length,\r\n                        o = e + .5;\r\n                for (let t = 0; t < r; t += 2) s[t] = t / 2 + .5, s[t + 1] = o;\r\n                n.transformPoints(s), ot.checkAndNudgePoints(t, s);\r\n                try {\r\n                    for (let n = 0; n < r; n += 2) t.get(Math.floor(s[n]), Math.floor(s[n + 1])) && i.set(n / 2, e)\r\n                } catch (t) {\r\n                    throw new R\r\n                }\r\n            }\r\n            return i\r\n        }\r\n    }\r\n    class ht {\r\n        static setGridSampler(t) {\r\n            ht.gridSampler = t\r\n        }\r\n        static getInstance() {\r\n            return ht.gridSampler\r\n        }\r\n    }\r\n    ht.gridSampler = new lt;\r\n    class ct {\r\n        constructor(t, e) {\r\n            this.x = t, this.y = e\r\n        }\r\n        toResultPoint() {\r\n            return new rt(this.getX(), this.getY())\r\n        }\r\n        getX() {\r\n            return this.x\r\n        }\r\n        getY() {\r\n            return this.y\r\n        }\r\n    }\r\n    class ut {\r\n        constructor(t) {\r\n            this.EXPECTED_CORNER_BITS = new Int32Array([3808, 476, 2107, 1799]), this.image = t\r\n        }\r\n        detect() {\r\n            return this.detectMirror(!1)\r\n        }\r\n        detectMirror(t) {\r\n            let e = this.getMatrixCenter(),\r\n                    r = this.getBullsEyeCorners(e);\r\n            if (t) {\r\n                let t = r[0];\r\n                r[0] = r[2], r[2] = t\r\n            }\r\n            this.extractParameters(r);\r\n            let n = this.sampleGrid(this.image, r[this.shift % 4], r[(this.shift + 1) % 4], r[(this.shift + 2) % 4], r[(this.shift + 3) % 4]),\r\n                    i = this.getMatrixCornerPoints(r);\r\n            return new it(n, i, this.compact, this.nbDataBlocks, this.nbLayers)\r\n        }\r\n        extractParameters(t) {\r\n            if (!(this.isValidPoint(t[0]) && this.isValidPoint(t[1]) && this.isValidPoint(t[2]) && this.isValidPoint(t[3]))) throw new R;\r\n            let e = 2 * this.nbCenterLayers,\r\n                    r = new Int32Array([this.sampleLine(t[0], t[1], e), this.sampleLine(t[1], t[2], e), this.sampleLine(t[2], t[3], e), this.sampleLine(t[3], t[0], e)]);\r\n            this.shift = this.getRotation(r, e);\r\n            let n = 0;\r\n            for (let t = 0; t < 4; t++) {\r\n                let e = r[(this.shift + t) % 4];\r\n                this.compact ? (n <<= 7, n += e >> 1 & 127) : (n <<= 10, n += (e >> 2 & 992) + (e >> 1 & 31))\r\n            }\r\n            let i = this.getCorrectedParameterData(n, this.compact);\r\n            this.compact ? (this.nbLayers = 1 + (i >> 6), this.nbDataBlocks = 1 + (63 & i)) : (this.nbLayers = 1 + (i >> 11), this.nbDataBlocks = 1 + (2047 & i))\r\n        }\r\n        getRotation(t, e) {\r\n            let r = 0;\r\n            t.forEach((t, n, i) => {\r\n                r = (r << 3) + ((t >> e - 2 << 1) + (1 & t))\r\n            }), r = ((1 & r) << 11) + (r >> 1);\r\n            for (let t = 0; t < 4; t++)\r\n                if (f.bitCount(r ^ this.EXPECTED_CORNER_BITS[t]) <= 2) return t;\r\n            throw new R\r\n        }\r\n        getCorrectedParameterData(t, e) {\r\n            let r, n;\r\n            e ? (r = 7, n = 2) : (r = 10, n = 4);\r\n            let i = r - n,\r\n                    s = new Int32Array(r);\r\n            for (let e = r - 1; e >= 0; --e) s[e] = 15 & t, t >>= 4;\r\n            try {\r\n                new J(q.AZTEC_PARAM).decode(s, i)\r\n            } catch (t) {\r\n                throw new R\r\n            }\r\n            let o = 0;\r\n            for (let t = 0; t < n; t++) o = (o << 4) + s[t];\r\n            return o\r\n        }\r\n        getBullsEyeCorners(t) {\r\n            let e = t,\r\n                    r = t,\r\n                    n = t,\r\n                    i = t,\r\n                    s = !0;\r\n            for (this.nbCenterLayers = 1; this.nbCenterLayers < 9; this.nbCenterLayers++) {\r\n                let t = this.getFirstDifferent(e, s, 1, -1),\r\n                        o = this.getFirstDifferent(r, s, 1, 1),\r\n                        a = this.getFirstDifferent(n, s, -1, 1),\r\n                        l = this.getFirstDifferent(i, s, -1, -1);\r\n                if (this.nbCenterLayers > 2) {\r\n                    let r = this.distancePoint(l, t) * this.nbCenterLayers / (this.distancePoint(i, e) * (this.nbCenterLayers + 2));\r\n                    if (r < .75 || r > 1.25 || !this.isWhiteOrBlackRectangle(t, o, a, l)) break\r\n                }\r\n                e = t, r = o, n = a, i = l, s = !s\r\n            }\r\n            if (5 !== this.nbCenterLayers && 7 !== this.nbCenterLayers) throw new R;\r\n            this.compact = 5 === this.nbCenterLayers;\r\n            let o = new rt(e.getX() + .5, e.getY() - .5),\r\n                    a = new rt(r.getX() + .5, r.getY() + .5),\r\n                    l = new rt(n.getX() - .5, n.getY() + .5),\r\n                    h = new rt(i.getX() - .5, i.getY() - .5);\r\n            return this.expandSquare([o, a, l, h], 2 * this.nbCenterLayers - 3, 2 * this.nbCenterLayers)\r\n        }\r\n        getMatrixCenter() {\r\n            let t, e, r, n;\r\n            try {\r\n                let i = new st(this.image).detect();\r\n                t = i[0], e = i[1], r = i[2], n = i[3]\r\n            } catch (i) {\r\n                let s = this.image.getWidth() / 2,\r\n                        o = this.image.getHeight() / 2;\r\n                t = this.getFirstDifferent(new ct(s + 7, o - 7), !1, 1, -1).toResultPoint(), e = this.getFirstDifferent(new ct(s + 7, o + 7), !1, 1, 1).toResultPoint(), r = this.getFirstDifferent(new ct(s - 7, o + 7), !1, -1, 1).toResultPoint(), n = this.getFirstDifferent(new ct(s - 7, o - 7), !1, -1, -1).toResultPoint()\r\n            }\r\n            let i = tt.round((t.getX() + n.getX() + e.getX() + r.getX()) / 4),\r\n                    s = tt.round((t.getY() + n.getY() + e.getY() + r.getY()) / 4);\r\n            try {\r\n                let o = new st(this.image, 15, i, s).detect();\r\n                t = o[0], e = o[1], r = o[2], n = o[3]\r\n            } catch (o) {\r\n                t = this.getFirstDifferent(new ct(i + 7, s - 7), !1, 1, -1).toResultPoint(), e = this.getFirstDifferent(new ct(i + 7, s + 7), !1, 1, 1).toResultPoint(), r = this.getFirstDifferent(new ct(i - 7, s + 7), !1, -1, 1).toResultPoint(), n = this.getFirstDifferent(new ct(i - 7, s - 7), !1, -1, -1).toResultPoint()\r\n            }\r\n            return i = tt.round((t.getX() + n.getX() + e.getX() + r.getX()) / 4), s = tt.round((t.getY() + n.getY() + e.getY() + r.getY()) / 4), new ct(i, s)\r\n        }\r\n        getMatrixCornerPoints(t) {\r\n            return this.expandSquare(t, 2 * this.nbCenterLayers, this.getDimension())\r\n        }\r\n        sampleGrid(t, e, r, n, i) {\r\n            let s = ht.getInstance(),\r\n                    o = this.getDimension(),\r\n                    a = o / 2 - this.nbCenterLayers,\r\n                    l = o / 2 + this.nbCenterLayers;\r\n            return s.sampleGrid(t, o, o, a, a, l, a, l, l, a, l, e.getX(), e.getY(), r.getX(), r.getY(), n.getX(), n.getY(), i.getX(), i.getY())\r\n        }\r\n        sampleLine(t, e, r) {\r\n            let n = 0,\r\n                    i = this.distanceResultPoint(t, e),\r\n                    s = i / r,\r\n                    o = t.getX(),\r\n                    a = t.getY(),\r\n                    l = s * (e.getX() - t.getX()) / i,\r\n                    h = s * (e.getY() - t.getY()) / i;\r\n            for (let t = 0; t < r; t++) this.image.get(tt.round(o + t * l), tt.round(a + t * h)) && (n |= 1 << r - t - 1);\r\n            return n\r\n        }\r\n        isWhiteOrBlackRectangle(t, e, r, n) {\r\n            t = new ct(t.getX() - 3, t.getY() + 3), e = new ct(e.getX() - 3, e.getY() - 3), r = new ct(r.getX() + 3, r.getY() - 3), n = new ct(n.getX() + 3, n.getY() + 3);\r\n            let i = this.getColor(n, t);\r\n            if (0 === i) return !1;\r\n            let s = this.getColor(t, e);\r\n            return s === i && ((s = this.getColor(e, r)) === i && (s = this.getColor(r, n)) === i)\r\n        }\r\n        getColor(t, e) {\r\n            let r = this.distancePoint(t, e),\r\n                    n = (e.getX() - t.getX()) / r,\r\n                    i = (e.getY() - t.getY()) / r,\r\n                    s = 0,\r\n                    o = t.getX(),\r\n                    a = t.getY(),\r\n                    l = this.image.get(t.getX(), t.getY()),\r\n                    h = Math.ceil(r);\r\n            for (let t = 0; t < h; t++) o += n, a += i, this.image.get(tt.round(o), tt.round(a)) !== l && s++;\r\n            let c = s / r;\r\n            return c > .1 && c < .9 ? 0 : c <= .1 === l ? 1 : -1\r\n        }\r\n        getFirstDifferent(t, e, r, n) {\r\n            let i = t.getX() + r,\r\n                    s = t.getY() + n;\r\n            for (; this.isValid(i, s) && this.image.get(i, s) === e;) i += r, s += n;\r\n            for (i -= r, s -= n; this.isValid(i, s) && this.image.get(i, s) === e;) i += r;\r\n            for (i -= r; this.isValid(i, s) && this.image.get(i, s) === e;) s += n;\r\n            return new ct(i, s -= n)\r\n        }\r\n        expandSquare(t, e, r) {\r\n            let n = r / (2 * e),\r\n                    i = t[0].getX() - t[2].getX(),\r\n                    s = t[0].getY() - t[2].getY(),\r\n                    o = (t[0].getX() + t[2].getX()) / 2,\r\n                    a = (t[0].getY() + t[2].getY()) / 2,\r\n                    l = new rt(o + n * i, a + n * s),\r\n                    h = new rt(o - n * i, a - n * s);\r\n            return i = t[1].getX() - t[3].getX(), s = t[1].getY() - t[3].getY(), o = (t[1].getX() + t[3].getX()) / 2, a = (t[1].getY() + t[3].getY()) / 2, [l, new rt(o + n * i, a + n * s), h, new rt(o - n * i, a - n * s)]\r\n        }\r\n        isValid(t, e) {\r\n            return t >= 0 && t < this.image.getWidth() && e > 0 && e < this.image.getHeight()\r\n        }\r\n        isValidPoint(t) {\r\n            let e = tt.round(t.getX()),\r\n                    r = tt.round(t.getY());\r\n            return this.isValid(e, r)\r\n        }\r\n        distancePoint(t, e) {\r\n            return tt.distance(t.getX(), t.getY(), e.getX(), e.getY())\r\n        }\r\n        distanceResultPoint(t, e) {\r\n            return tt.distance(t.getX(), t.getY(), e.getX(), e.getY())\r\n        }\r\n        getDimension() {\r\n            return this.compact ? 4 * this.nbLayers + 11 : this.nbLayers <= 4 ? 4 * this.nbLayers + 15 : 4 * this.nbLayers + 2 * (f.truncDivision(this.nbLayers - 4, 8) + 1) + 15\r\n        }\r\n    }\r\n    class dt {\r\n        decode(t, e = null) {\r\n            let r = null,\r\n                    n = new ut(t.getBlackMatrix()),\r\n                    i = null,\r\n                    s = null;\r\n            try {\r\n                let t = n.detectMirror(!1);\r\n                i = t.getPoints(), this.reportFoundResultPoints(e, i), s = (new $).decode(t)\r\n            } catch (t) {\r\n                r = t\r\n            }\r\n            if (null == s) try {\r\n                let t = n.detectMirror(!0);\r\n                i = t.getPoints(), this.reportFoundResultPoints(e, i), s = (new $).decode(t)\r\n            } catch (t) {\r\n                if (null != r) throw r;\r\n                throw t\r\n            }\r\n            let o = new F(s.getText(), s.getRawBytes(), s.getNumBits(), i, k.AZTEC, c.currentTimeMillis()),\r\n                    a = s.getByteSegments();\r\n            null != a && o.putMetadata(W.BYTE_SEGMENTS, a);\r\n            let l = s.getECLevel();\r\n            return null != l && o.putMetadata(W.ERROR_CORRECTION_LEVEL, l), o\r\n        }\r\n        reportFoundResultPoints(t, e) {\r\n            if (null != t) {\r\n                let r = t.get(C.NEED_RESULT_POINT_CALLBACK);\r\n                null != r && e.forEach((t, e, n) => {\r\n                    r.foundPossibleResultPoint(t)\r\n                })\r\n            }\r\n        }\r\n        reset() {}\r\n    }\r\n    class gt {\r\n        decode(t, e) {\r\n            try {\r\n                return this.doDecode(t, e)\r\n            } catch (r) {\r\n                if (e && !0 === e.get(C.TRY_HARDER) && t.isRotateSupported()) {\r\n                    const r = t.rotateCounterClockwise(),\r\n                            n = this.doDecode(r, e),\r\n                            i = n.getResultMetadata();\r\n                    let s = 270;\r\n                    null !== i && !0 === i.get(W.ORIENTATION) && (s += i.get(W.ORIENTATION) % 360), n.putMetadata(W.ORIENTATION, s);\r\n                    const o = n.getResultPoints();\r\n                    if (null !== o) {\r\n                        const t = r.getHeight();\r\n                        for (let e = 0; e < o.length; e++) o[e] = new rt(t - o[e].getY() - 1, o[e].getX())\r\n                    }\r\n                    return n\r\n                }\r\n                throw new R\r\n            }\r\n        }\r\n        reset() {}\r\n        doDecode(t, e) {\r\n            const r = t.getWidth(),\r\n                    n = t.getHeight();\r\n            let i = new w(r);\r\n            const s = e && !0 === e.get(C.TRY_HARDER),\r\n                    o = Math.max(1, n >> (s ? 8 : 5));\r\n            let a;\r\n            a = s ? n : 15;\r\n            const l = Math.trunc(n / 2);\r\n            for (let s = 0; s < a; s++) {\r\n                const a = Math.trunc((s + 1) / 2),\r\n                        h = l + o * (0 == (1 & s) ? a : -a);\r\n                if (h < 0 || h >= n) break;\r\n                try {\r\n                    i = t.getBlackRow(h, i)\r\n                } catch (t) {\r\n                    continue\r\n                }\r\n                for (let t = 0; t < 2; t++) {\r\n                    if (1 === t && (i.reverse(), e && !0 === e.get(C.NEED_RESULT_POINT_CALLBACK))) {\r\n                        const t = new Map;\r\n                        e.forEach((e, r) => t.set(r, e)), t.delete(C.NEED_RESULT_POINT_CALLBACK), e = t\r\n                    }\r\n                    try {\r\n                        const n = this.decodeRow(h, i, e);\r\n                        if (1 === t) {\r\n                            n.putMetadata(W.ORIENTATION, 180);\r\n                            const t = n.getResultPoints();\r\n                            null !== t && (t[0] = new rt(r - t[0].getX() - 1, t[0].getY()), t[1] = new rt(r - t[1].getX() - 1, t[1].getY()))\r\n                        }\r\n                        return n\r\n                    } catch (t) {}\r\n                }\r\n            }\r\n            throw new R\r\n        }\r\n        static recordPattern(t, e, r) {\r\n            const n = r.length;\r\n            for (let t = 0; t < n; t++) r[t] = 0;\r\n            const i = t.getSize();\r\n            if (e >= i) throw new R;\r\n            let s = !t.get(e),\r\n                    o = 0,\r\n                    a = e;\r\n            for (; a < i;) {\r\n                if (t.get(a) !== s) r[o]++;\r\n                else {\r\n                    if (++o === n) break;\r\n                    r[o] = 1, s = !s\r\n                }\r\n                a++\r\n            }\r\n            if (o !== n && (o !== n - 1 || a !== i)) throw new R\r\n        }\r\n        static recordPatternInReverse(t, e, r) {\r\n            let n = r.length,\r\n                    i = t.get(e);\r\n            for (; e > 0 && n >= 0;) t.get(--e) !== i && (n--, i = !i);\r\n            if (n >= 0) throw new R;\r\n            gt.recordPattern(t, e + 1, r)\r\n        }\r\n        static patternMatchVariance(t, e, r) {\r\n            const n = t.length;\r\n            let i = 0,\r\n                    s = 0;\r\n            for (let r = 0; r < n; r++) i += t[r], s += e[r];\r\n            if (i < s) return Number.POSITIVE_INFINITY;\r\n            const o = i / s;\r\n            r *= o;\r\n            let a = 0;\r\n            for (let i = 0; i < n; i++) {\r\n                const n = t[i],\r\n                        s = e[i] * o,\r\n                        l = n > s ? n - s : s - n;\r\n                if (l > r) return Number.POSITIVE_INFINITY;\r\n                a += l\r\n            }\r\n            return a / i\r\n        }\r\n    }\r\n    class ft extends gt {\r\n        static findStartPattern(t) {\r\n            const e = t.getSize(),\r\n                    r = t.getNextSet(0);\r\n            let n = 0,\r\n                    i = Int32Array.from([0, 0, 0, 0, 0, 0]),\r\n                    s = r,\r\n                    o = !1;\r\n            for (let a = r; a < e; a++)\r\n                if (t.get(a) !== o) i[n]++;\r\n                else {\r\n                    if (5 === n) {\r\n                        let e = ft.MAX_AVG_VARIANCE,\r\n                                r = -1;\r\n                        for (let t = ft.CODE_START_A; t <= ft.CODE_START_C; t++) {\r\n                            const n = gt.patternMatchVariance(i, ft.CODE_PATTERNS[t], ft.MAX_INDIVIDUAL_VARIANCE);\r\n                            n < e && (e = n, r = t)\r\n                        }\r\n                        if (r >= 0 && t.isRange(Math.max(0, s - (a - s) / 2), s, !1)) return Int32Array.from([s, a, r]);\r\n                        s += i[0] + i[1], (i = i.slice(2, i.length - 1))[n - 1] = 0, i[n] = 0, n--\r\n                    } else n++;\r\n                    i[n] = 1, o = !o\r\n                } throw new R\r\n        }\r\n        static decodeCode(t, e, r) {\r\n            gt.recordPattern(t, r, e);\r\n            let n = ft.MAX_AVG_VARIANCE,\r\n                    i = -1;\r\n            for (let t = 0; t < ft.CODE_PATTERNS.length; t++) {\r\n                const r = ft.CODE_PATTERNS[t],\r\n                        s = this.patternMatchVariance(e, r, ft.MAX_INDIVIDUAL_VARIANCE);\r\n                s < n && (n = s, i = t)\r\n            }\r\n            if (i >= 0) return i;\r\n            throw new R\r\n        }\r\n        decodeRow(t, e, r) {\r\n            const n = r && !0 === r.get(C.ASSUME_GS1),\r\n                    i = ft.findStartPattern(e),\r\n                    s = i[2];\r\n            let o = 0;\r\n            const a = new Uint8Array(20);\r\n            let h;\r\n            switch (a[o++] = s, s) {\r\n                case ft.CODE_START_A:\r\n                    h = ft.CODE_CODE_A;\r\n                    break;\r\n                case ft.CODE_START_B:\r\n                    h = ft.CODE_CODE_B;\r\n                    break;\r\n                case ft.CODE_START_C:\r\n                    h = ft.CODE_CODE_C;\r\n                    break;\r\n                default:\r\n                    throw new E\r\n            }\r\n            let c = !1,\r\n                    u = !1,\r\n                    d = \"\",\r\n                    g = i[0],\r\n                    f = i[1];\r\n            const w = Int32Array.from([0, 0, 0, 0, 0, 0]);\r\n            let A = 0,\r\n                    m = 0,\r\n                    _ = s,\r\n                    I = 0,\r\n                    S = !0,\r\n                    p = !1,\r\n                    T = !1;\r\n            for (; !c;) {\r\n                const t = u;\r\n                switch (u = !1, A = m, m = ft.decodeCode(e, w, f), a[o++] = m, m !== ft.CODE_STOP && (S = !0), m !== ft.CODE_STOP && (_ += ++I * m), g = f, f += w.reduce((t, e) => t + e, 0), m) {\r\n                    case ft.CODE_START_A:\r\n                    case ft.CODE_START_B:\r\n                    case ft.CODE_START_C:\r\n                        throw new E\r\n                }\r\n                switch (h) {\r\n                    case ft.CODE_CODE_A:\r\n                        if (m < 64) d += T === p ? String.fromCharCode(\" \".charCodeAt(0) + m) : String.fromCharCode(\" \".charCodeAt(0) + m + 128), T = !1;\r\n                        else if (m < 96) d += T === p ? String.fromCharCode(m - 64) : String.fromCharCode(m + 64), T = !1;\r\n                        else switch (m !== ft.CODE_STOP && (S = !1), m) {\r\n                                case ft.CODE_FNC_1:\r\n                                    n && (0 === d.length ? d += \"]C1\" : d += String.fromCharCode(29));\r\n                                    break;\r\n                                case ft.CODE_FNC_2:\r\n                                case ft.CODE_FNC_3:\r\n                                    break;\r\n                                case ft.CODE_FNC_4_A:\r\n                                    !p && T ? (p = !0, T = !1) : p && T ? (p = !1, T = !1) : T = !0;\r\n                                    break;\r\n                                case ft.CODE_SHIFT:\r\n                                    u = !0, h = ft.CODE_CODE_B;\r\n                                    break;\r\n                                case ft.CODE_CODE_B:\r\n                                    h = ft.CODE_CODE_B;\r\n                                    break;\r\n                                case ft.CODE_CODE_C:\r\n                                    h = ft.CODE_CODE_C;\r\n                                    break;\r\n                                case ft.CODE_STOP:\r\n                                    c = !0\r\n                            }\r\n                        break;\r\n                    case ft.CODE_CODE_B:\r\n                        if (m < 96) d += T === p ? String.fromCharCode(\" \".charCodeAt(0) + m) : String.fromCharCode(\" \".charCodeAt(0) + m + 128), T = !1;\r\n                        else switch (m !== ft.CODE_STOP && (S = !1), m) {\r\n                            case ft.CODE_FNC_1:\r\n                                n && (0 === d.length ? d += \"]C1\" : d += String.fromCharCode(29));\r\n                                break;\r\n                            case ft.CODE_FNC_2:\r\n                            case ft.CODE_FNC_3:\r\n                                break;\r\n                            case ft.CODE_FNC_4_B:\r\n                                !p && T ? (p = !0, T = !1) : p && T ? (p = !1, T = !1) : T = !0;\r\n                                break;\r\n                            case ft.CODE_SHIFT:\r\n                                u = !0, h = ft.CODE_CODE_A;\r\n                                break;\r\n                            case ft.CODE_CODE_A:\r\n                                h = ft.CODE_CODE_A;\r\n                                break;\r\n                            case ft.CODE_CODE_C:\r\n                                h = ft.CODE_CODE_C;\r\n                                break;\r\n                            case ft.CODE_STOP:\r\n                                c = !0\r\n                        }\r\n                        break;\r\n                    case ft.CODE_CODE_C:\r\n                        if (m < 100) m < 10 && (d += \"0\"), d += m;\r\n                        else switch (m !== ft.CODE_STOP && (S = !1), m) {\r\n                            case ft.CODE_FNC_1:\r\n                                n && (0 === d.length ? d += \"]C1\" : d += String.fromCharCode(29));\r\n                                break;\r\n                            case ft.CODE_CODE_A:\r\n                                h = ft.CODE_CODE_A;\r\n                                break;\r\n                            case ft.CODE_CODE_B:\r\n                                h = ft.CODE_CODE_B;\r\n                                break;\r\n                            case ft.CODE_STOP:\r\n                                c = !0\r\n                        }\r\n                }\r\n                t && (h = h === ft.CODE_CODE_A ? ft.CODE_CODE_B : ft.CODE_CODE_A)\r\n            }\r\n            const N = f - g;\r\n            if (f = e.getNextUnset(f), !e.isRange(f, Math.min(e.getSize(), f + (f - g) / 2), !1)) throw new R;\r\n            if ((_ -= I * A) % 103 !== A) throw new l;\r\n            const D = d.length;\r\n            if (0 === D) throw new R;\r\n            D > 0 && S && (d = h === ft.CODE_CODE_C ? d.substring(0, D - 2) : d.substring(0, D - 1));\r\n            const y = (i[1] + i[0]) / 2,\r\n                    O = g + N / 2,\r\n                    M = a.length,\r\n                    b = new Uint8Array(M);\r\n            for (let t = 0; t < M; t++) b[t] = a[t];\r\n            const B = [new rt(y, t), new rt(O, t)];\r\n            return new F(d, b, 0, B, k.CODE_128, (new Date).getTime())\r\n        }\r\n    }\r\n    ft.CODE_PATTERNS = [Int32Array.from([2, 1, 2, 2, 2, 2]), Int32Array.from([2, 2, 2, 1, 2, 2]), Int32Array.from([2, 2, 2, 2, 2, 1]), Int32Array.from([1, 2, 1, 2, 2, 3]), Int32Array.from([1, 2, 1, 3, 2, 2]), Int32Array.from([1, 3, 1, 2, 2, 2]), Int32Array.from([1, 2, 2, 2, 1, 3]), Int32Array.from([1, 2, 2, 3, 1, 2]), Int32Array.from([1, 3, 2, 2, 1, 2]), Int32Array.from([2, 2, 1, 2, 1, 3]), Int32Array.from([2, 2, 1, 3, 1, 2]), Int32Array.from([2, 3, 1, 2, 1, 2]), Int32Array.from([1, 1, 2, 2, 3, 2]), Int32Array.from([1, 2, 2, 1, 3, 2]), Int32Array.from([1, 2, 2, 2, 3, 1]), Int32Array.from([1, 1, 3, 2, 2, 2]), Int32Array.from([1, 2, 3, 1, 2, 2]), Int32Array.from([1, 2, 3, 2, 2, 1]), Int32Array.from([2, 2, 3, 2, 1, 1]), Int32Array.from([2, 2, 1, 1, 3, 2]), Int32Array.from([2, 2, 1, 2, 3, 1]), Int32Array.from([2, 1, 3, 2, 1, 2]), Int32Array.from([2, 2, 3, 1, 1, 2]), Int32Array.from([3, 1, 2, 1, 3, 1]), Int32Array.from([3, 1, 1, 2, 2, 2]), Int32Array.from([3, 2, 1, 1, 2, 2]), Int32Array.from([3, 2, 1, 2, 2, 1]), Int32Array.from([3, 1, 2, 2, 1, 2]), Int32Array.from([3, 2, 2, 1, 1, 2]), Int32Array.from([3, 2, 2, 2, 1, 1]), Int32Array.from([2, 1, 2, 1, 2, 3]), Int32Array.from([2, 1, 2, 3, 2, 1]), Int32Array.from([2, 3, 2, 1, 2, 1]), Int32Array.from([1, 1, 1, 3, 2, 3]), Int32Array.from([1, 3, 1, 1, 2, 3]), Int32Array.from([1, 3, 1, 3, 2, 1]), Int32Array.from([1, 1, 2, 3, 1, 3]), Int32Array.from([1, 3, 2, 1, 1, 3]), Int32Array.from([1, 3, 2, 3, 1, 1]), Int32Array.from([2, 1, 1, 3, 1, 3]), Int32Array.from([2, 3, 1, 1, 1, 3]), Int32Array.from([2, 3, 1, 3, 1, 1]), Int32Array.from([1, 1, 2, 1, 3, 3]), Int32Array.from([1, 1, 2, 3, 3, 1]), Int32Array.from([1, 3, 2, 1, 3, 1]), Int32Array.from([1, 1, 3, 1, 2, 3]), Int32Array.from([1, 1, 3, 3, 2, 1]), Int32Array.from([1, 3, 3, 1, 2, 1]), Int32Array.from([3, 1, 3, 1, 2, 1]), Int32Array.from([2, 1, 1, 3, 3, 1]), Int32Array.from([2, 3, 1, 1, 3, 1]), Int32Array.from([2, 1, 3, 1, 1, 3]), Int32Array.from([2, 1, 3, 3, 1, 1]), Int32Array.from([2, 1, 3, 1, 3, 1]), Int32Array.from([3, 1, 1, 1, 2, 3]), Int32Array.from([3, 1, 1, 3, 2, 1]), Int32Array.from([3, 3, 1, 1, 2, 1]), Int32Array.from([3, 1, 2, 1, 1, 3]), Int32Array.from([3, 1, 2, 3, 1, 1]), Int32Array.from([3, 3, 2, 1, 1, 1]), Int32Array.from([3, 1, 4, 1, 1, 1]), Int32Array.from([2, 2, 1, 4, 1, 1]), Int32Array.from([4, 3, 1, 1, 1, 1]), Int32Array.from([1, 1, 1, 2, 2, 4]), Int32Array.from([1, 1, 1, 4, 2, 2]), Int32Array.from([1, 2, 1, 1, 2, 4]), Int32Array.from([1, 2, 1, 4, 2, 1]), Int32Array.from([1, 4, 1, 1, 2, 2]), Int32Array.from([1, 4, 1, 2, 2, 1]), Int32Array.from([1, 1, 2, 2, 1, 4]), Int32Array.from([1, 1, 2, 4, 1, 2]), Int32Array.from([1, 2, 2, 1, 1, 4]), Int32Array.from([1, 2, 2, 4, 1, 1]), Int32Array.from([1, 4, 2, 1, 1, 2]), Int32Array.from([1, 4, 2, 2, 1, 1]), Int32Array.from([2, 4, 1, 2, 1, 1]), Int32Array.from([2, 2, 1, 1, 1, 4]), Int32Array.from([4, 1, 3, 1, 1, 1]), Int32Array.from([2, 4, 1, 1, 1, 2]), Int32Array.from([1, 3, 4, 1, 1, 1]), Int32Array.from([1, 1, 1, 2, 4, 2]), Int32Array.from([1, 2, 1, 1, 4, 2]), Int32Array.from([1, 2, 1, 2, 4, 1]), Int32Array.from([1, 1, 4, 2, 1, 2]), Int32Array.from([1, 2, 4, 1, 1, 2]), Int32Array.from([1, 2, 4, 2, 1, 1]), Int32Array.from([4, 1, 1, 2, 1, 2]), Int32Array.from([4, 2, 1, 1, 1, 2]), Int32Array.from([4, 2, 1, 2, 1, 1]), Int32Array.from([2, 1, 2, 1, 4, 1]), Int32Array.from([2, 1, 4, 1, 2, 1]), Int32Array.from([4, 1, 2, 1, 2, 1]), Int32Array.from([1, 1, 1, 1, 4, 3]), Int32Array.from([1, 1, 1, 3, 4, 1]), Int32Array.from([1, 3, 1, 1, 4, 1]), Int32Array.from([1, 1, 4, 1, 1, 3]), Int32Array.from([1, 1, 4, 3, 1, 1]), Int32Array.from([4, 1, 1, 1, 1, 3]), Int32Array.from([4, 1, 1, 3, 1, 1]), Int32Array.from([1, 1, 3, 1, 4, 1]), Int32Array.from([1, 1, 4, 1, 3, 1]), Int32Array.from([3, 1, 1, 1, 4, 1]), Int32Array.from([4, 1, 1, 1, 3, 1]), Int32Array.from([2, 1, 1, 4, 1, 2]), Int32Array.from([2, 1, 1, 2, 1, 4]), Int32Array.from([2, 1, 1, 2, 3, 2]), Int32Array.from([2, 3, 3, 1, 1, 1, 2])], ft.MAX_AVG_VARIANCE = .25, ft.MAX_INDIVIDUAL_VARIANCE = .7, ft.CODE_SHIFT = 98, ft.CODE_CODE_C = 99, ft.CODE_CODE_B = 100, ft.CODE_CODE_A = 101, ft.CODE_FNC_1 = 102, ft.CODE_FNC_2 = 97, ft.CODE_FNC_3 = 96, ft.CODE_FNC_4_A = 101, ft.CODE_FNC_4_B = 100, ft.CODE_START_A = 103, ft.CODE_START_B = 104, ft.CODE_START_C = 105, ft.CODE_STOP = 106;\r\n    class wt extends gt {\r\n        constructor(t = !1, e = !1) {\r\n            super(), this.usingCheckDigit = t, this.extendedMode = e, this.decodeRowResult = \"\", this.counters = new Int32Array(9)\r\n        }\r\n        decodeRow(t, e, r) {\r\n            let n = this.counters;\r\n            n.fill(0), this.decodeRowResult = \"\";\r\n            let i, s, o = wt.findAsteriskPattern(e, n),\r\n                    a = e.getNextSet(o[1]),\r\n                    h = e.getSize();\r\n            do {\r\n                wt.recordPattern(e, a, n);\r\n                let t = wt.toNarrowWidePattern(n);\r\n                if (t < 0) throw new R;\r\n                i = wt.patternToChar(t), this.decodeRowResult += i, s = a;\r\n                for (let t of n) a += t;\r\n                a = e.getNextSet(a)\r\n            } while (\"*\" !== i);\r\n            this.decodeRowResult = this.decodeRowResult.substring(0, this.decodeRowResult.length - 1);\r\n            let c, u = 0;\r\n            for (let t of n) u += t;\r\n            if (a !== h && 2 * (a - s - u) < u) throw new R;\r\n            if (this.usingCheckDigit) {\r\n                let t = this.decodeRowResult.length - 1,\r\n                        e = 0;\r\n                for (let r = 0; r < t; r++) e += wt.ALPHABET_STRING.indexOf(this.decodeRowResult.charAt(r));\r\n                if (this.decodeRowResult.charAt(t) !== wt.ALPHABET_STRING.charAt(e % 43)) throw new l;\r\n                this.decodeRowResult = this.decodeRowResult.substring(0, t)\r\n            }\r\n            if (0 === this.decodeRowResult.length) throw new R;\r\n            c = this.extendedMode ? wt.decodeExtended(this.decodeRowResult) : this.decodeRowResult;\r\n            let d = (o[1] + o[0]) / 2,\r\n                    g = s + u / 2;\r\n            return new F(c, null, 0, [new rt(d, t), new rt(g, t)], k.CODE_39, (new Date).getTime())\r\n        }\r\n        static findAsteriskPattern(t, e) {\r\n            let r = t.getSize(),\r\n                    n = t.getNextSet(0),\r\n                    i = 0,\r\n                    s = n,\r\n                    o = !1,\r\n                    a = e.length;\r\n            for (let l = n; l < r; l++)\r\n                if (t.get(l) !== o) e[i]++;\r\n                else {\r\n                    if (i === a - 1) {\r\n                        if (this.toNarrowWidePattern(e) === wt.ASTERISK_ENCODING && t.isRange(Math.max(0, s - Math.floor((l - s) / 2)), s, !1)) return [s, l];\r\n                        s += e[0] + e[1], e.copyWithin(0, 2, 2 + i - 1), e[i - 1] = 0, e[i] = 0, i--\r\n                    } else i++;\r\n                    e[i] = 1, o = !o\r\n                } throw new R\r\n        }\r\n        static toNarrowWidePattern(t) {\r\n            let e, r = t.length,\r\n                    n = 0;\r\n            do {\r\n                let i = 2147483647;\r\n                for (let e of t) e < i && e > n && (i = e);\r\n                n = i, e = 0;\r\n                let s = 0,\r\n                        o = 0;\r\n                for (let i = 0; i < r; i++) {\r\n                    let a = t[i];\r\n                    a > n && (o |= 1 << r - 1 - i, e++, s += a)\r\n                }\r\n                if (3 === e) {\r\n                    for (let i = 0; i < r && e > 0; i++) {\r\n                        let r = t[i];\r\n                        if (r > n && (e--, 2 * r >= s)) return -1\r\n                    }\r\n                    return o\r\n                }\r\n            } while (e > 3);\r\n            return -1\r\n        }\r\n        static patternToChar(t) {\r\n            for (let e = 0; e < wt.CHARACTER_ENCODINGS.length; e++)\r\n                if (wt.CHARACTER_ENCODINGS[e] === t) return wt.ALPHABET_STRING.charAt(e);\r\n            if (t === wt.ASTERISK_ENCODING) return \"*\";\r\n            throw new R\r\n        }\r\n        static decodeExtended(t) {\r\n            let e = t.length,\r\n                    r = \"\";\r\n            for (let n = 0; n < e; n++) {\r\n                let e = t.charAt(n);\r\n                if (\"+\" === e || \"$\" === e || \"%\" === e || \"/\" === e) {\r\n                    let i = t.charAt(n + 1),\r\n                            s = \"\\0\";\r\n                    switch (e) {\r\n                        case \"+\":\r\n                            if (!(i >= \"A\" && i <= \"Z\")) throw new E;\r\n                            s = String.fromCharCode(i.charCodeAt(0) + 32);\r\n                            break;\r\n                        case \"$\":\r\n                            if (!(i >= \"A\" && i <= \"Z\")) throw new E;\r\n                            s = String.fromCharCode(i.charCodeAt(0) - 64);\r\n                            break;\r\n                        case \"%\":\r\n                            if (i >= \"A\" && i <= \"E\") s = String.fromCharCode(i.charCodeAt(0) - 38);\r\n                            else if (i >= \"F\" && i <= \"J\") s = String.fromCharCode(i.charCodeAt(0) - 11);\r\n                            else if (i >= \"K\" && i <= \"O\") s = String.fromCharCode(i.charCodeAt(0) + 16);\r\n                            else if (i >= \"P\" && i <= \"T\") s = String.fromCharCode(i.charCodeAt(0) + 43);\r\n                            else if (\"U\" === i) s = \"\\0\";\r\n                            else if (\"V\" === i) s = \"@\";\r\n                            else if (\"W\" === i) s = \"`\";\r\n                            else {\r\n                                if (\"X\" !== i && \"Y\" !== i && \"Z\" !== i) throw new E;\r\n                                s = \"\"\r\n                            }\r\n                            break;\r\n                        case \"/\":\r\n                            if (i >= \"A\" && i <= \"O\") s = String.fromCharCode(i.charCodeAt(0) - 32);\r\n                            else {\r\n                                if (\"Z\" !== i) throw new E;\r\n                                s = \":\"\r\n                            }\r\n                    }\r\n                    r += s, n++\r\n                } else r += e\r\n            }\r\n            return r\r\n        }\r\n    }\r\n    wt.ALPHABET_STRING = \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%\", wt.CHARACTER_ENCODINGS = [52, 289, 97, 352, 49, 304, 112, 37, 292, 100, 265, 73, 328, 25, 280, 88, 13, 268, 76, 28, 259, 67, 322, 19, 274, 82, 7, 262, 70, 22, 385, 193, 448, 145, 400, 208, 133, 388, 196, 168, 162, 138, 42], wt.ASTERISK_ENCODING = 148;\r\n    class At extends gt {\r\n        constructor() {\r\n            super(...arguments), this.narrowLineWidth = -1\r\n        }\r\n        decodeRow(t, e, r) {\r\n            let n = this.decodeStart(e),\r\n                    i = this.decodeEnd(e),\r\n                    s = new p;\r\n            At.decodeMiddle(e, n[1], i[0], s);\r\n            let o = s.toString(),\r\n                    a = null;\r\n            null != r && (a = r.get(C.ALLOWED_LENGTHS)), null == a && (a = At.DEFAULT_ALLOWED_LENGTHS);\r\n            let l = o.length,\r\n                    h = !1,\r\n                    c = 0;\r\n            for (let t of a) {\r\n                if (l === t) {\r\n                    h = !0;\r\n                    break\r\n                }\r\n                t > c && (c = t)\r\n            }\r\n            if (!h && l > c && (h = !0), !h) throw new E;\r\n            const u = [new rt(n[1], t), new rt(i[0], t)];\r\n            return new F(o, null, 0, u, k.ITF, (new Date).getTime())\r\n        }\r\n        static decodeMiddle(t, e, r, n) {\r\n            let i = new Int32Array(10),\r\n                    s = new Int32Array(5),\r\n                    o = new Int32Array(5);\r\n            for (i.fill(0), s.fill(0), o.fill(0); e < r;) {\r\n                gt.recordPattern(t, e, i);\r\n                for (let t = 0; t < 5; t++) {\r\n                    let e = 2 * t;\r\n                    s[t] = i[e], o[t] = i[e + 1]\r\n                }\r\n                let r = At.decodeDigit(s);\r\n                n.append(r.toString()), r = this.decodeDigit(o), n.append(r.toString()), i.forEach(function(t) {\r\n                    e += t\r\n                })\r\n            }\r\n        }\r\n        decodeStart(t) {\r\n            let e = At.skipWhiteSpace(t),\r\n                    r = At.findGuardPattern(t, e, At.START_PATTERN);\r\n            return this.narrowLineWidth = (r[1] - r[0]) / 4, this.validateQuietZone(t, r[0]), r\r\n        }\r\n        validateQuietZone(t, e) {\r\n            let r = 10 * this.narrowLineWidth;\r\n            r = r < e ? r : e;\r\n            for (let n = e - 1; r > 0 && n >= 0 && !t.get(n); n--) r--;\r\n            if (0 !== r) throw new R\r\n        }\r\n        static skipWhiteSpace(t) {\r\n            const e = t.getSize(),\r\n                    r = t.getNextSet(0);\r\n            if (r === e) throw new R;\r\n            return r\r\n        }\r\n        decodeEnd(t) {\r\n            t.reverse();\r\n            try {\r\n                let e, r = At.skipWhiteSpace(t);\r\n                try {\r\n                    e = At.findGuardPattern(t, r, At.END_PATTERN_REVERSED[0])\r\n                } catch (n) {\r\n                    n instanceof R && (e = At.findGuardPattern(t, r, At.END_PATTERN_REVERSED[1]))\r\n                }\r\n                this.validateQuietZone(t, e[0]);\r\n                let n = e[0];\r\n                return e[0] = t.getSize() - e[1], e[1] = t.getSize() - n, e\r\n            } finally {\r\n                t.reverse()\r\n            }\r\n        }\r\n        static findGuardPattern(t, e, r) {\r\n            let n = r.length,\r\n                    i = new Int32Array(n),\r\n                    s = t.getSize(),\r\n                    o = !1,\r\n                    a = 0,\r\n                    l = e;\r\n            i.fill(0);\r\n            for (let h = e; h < s; h++)\r\n                if (t.get(h) !== o) i[a]++;\r\n                else {\r\n                    if (a === n - 1) {\r\n                        if (gt.patternMatchVariance(i, r, At.MAX_INDIVIDUAL_VARIANCE) < At.MAX_AVG_VARIANCE) return [l, h];\r\n                        l += i[0] + i[1], c.arraycopy(i, 2, i, 0, a - 1), i[a - 1] = 0, i[a] = 0, a--\r\n                    } else a++;\r\n                    i[a] = 1, o = !o\r\n                } throw new R\r\n        }\r\n        static decodeDigit(t) {\r\n            let e = At.MAX_AVG_VARIANCE,\r\n                    r = -1,\r\n                    n = At.PATTERNS.length;\r\n            for (let i = 0; i < n; i++) {\r\n                let n = At.PATTERNS[i],\r\n                        s = gt.patternMatchVariance(t, n, At.MAX_INDIVIDUAL_VARIANCE);\r\n                s < e ? (e = s, r = i) : s === e && (r = -1)\r\n            }\r\n            if (r >= 0) return r % 10;\r\n            throw new R\r\n        }\r\n    }\r\n    At.PATTERNS = [Int32Array.from([1, 1, 2, 2, 1]), Int32Array.from([2, 1, 1, 1, 2]), Int32Array.from([1, 2, 1, 1, 2]), Int32Array.from([2, 2, 1, 1, 1]), Int32Array.from([1, 1, 2, 1, 2]), Int32Array.from([2, 1, 2, 1, 1]), Int32Array.from([1, 2, 2, 1, 1]), Int32Array.from([1, 1, 1, 2, 2]), Int32Array.from([2, 1, 1, 2, 1]), Int32Array.from([1, 2, 1, 2, 1]), Int32Array.from([1, 1, 3, 3, 1]), Int32Array.from([3, 1, 1, 1, 3]), Int32Array.from([1, 3, 1, 1, 3]), Int32Array.from([3, 3, 1, 1, 1]), Int32Array.from([1, 1, 3, 1, 3]), Int32Array.from([3, 1, 3, 1, 1]), Int32Array.from([1, 3, 3, 1, 1]), Int32Array.from([1, 1, 1, 3, 3]), Int32Array.from([3, 1, 1, 3, 1]), Int32Array.from([1, 3, 1, 3, 1])], At.MAX_AVG_VARIANCE = .38, At.MAX_INDIVIDUAL_VARIANCE = .5, At.DEFAULT_ALLOWED_LENGTHS = [6, 8, 10, 12, 14], At.START_PATTERN = Int32Array.from([1, 1, 1, 1]), At.END_PATTERN_REVERSED = [Int32Array.from([1, 1, 2]), Int32Array.from([1, 1, 3])];\r\n    class Ct extends gt {\r\n        constructor() {\r\n            super(...arguments), this.decodeRowStringBuffer = \"\"\r\n        }\r\n        static findStartGuardPattern(t) {\r\n            let e, r = !1,\r\n                    n = 0,\r\n                    i = Int32Array.from([0, 0, 0]);\r\n            for (; !r;) {\r\n                i = Int32Array.from([0, 0, 0]);\r\n                let s = (e = Ct.findGuardPattern(t, n, !1, this.START_END_PATTERN, i))[0],\r\n                        o = s - ((n = e[1]) - s);\r\n                o >= 0 && (r = t.isRange(o, s, !1))\r\n            }\r\n            return e\r\n        }\r\n        static checkChecksum(t) {\r\n            return Ct.checkStandardUPCEANChecksum(t)\r\n        }\r\n        static checkStandardUPCEANChecksum(t) {\r\n            let e = t.length;\r\n            if (0 === e) return !1;\r\n            let r = parseInt(t.charAt(e - 1), 10);\r\n            return Ct.getStandardUPCEANChecksum(t.substring(0, e - 1)) === r\r\n        }\r\n        static getStandardUPCEANChecksum(t) {\r\n            let e = t.length,\r\n                    r = 0;\r\n            for (let n = e - 1; n >= 0; n -= 2) {\r\n                let e = t.charAt(n).charCodeAt(0) - \"0\".charCodeAt(0);\r\n                if (e < 0 || e > 9) throw new E;\r\n                r += e\r\n            }\r\n            r *= 3;\r\n            for (let n = e - 2; n >= 0; n -= 2) {\r\n                let e = t.charAt(n).charCodeAt(0) - \"0\".charCodeAt(0);\r\n                if (e < 0 || e > 9) throw new E;\r\n                r += e\r\n            }\r\n            return (1e3 - r) % 10\r\n        }\r\n        static decodeEnd(t, e) {\r\n            return Ct.findGuardPattern(t, e, !1, Ct.START_END_PATTERN, new Int32Array(Ct.START_END_PATTERN.length).fill(0))\r\n        }\r\n        static findGuardPatternWithoutCounters(t, e, r, n) {\r\n            return this.findGuardPattern(t, e, r, n, new Int32Array(n.length))\r\n        }\r\n        static findGuardPattern(t, e, r, n, i) {\r\n            let s = t.getSize(),\r\n                    o = 0,\r\n                    a = e = r ? t.getNextUnset(e) : t.getNextSet(e),\r\n                    l = n.length,\r\n                    h = r;\r\n            for (let r = e; r < s; r++)\r\n                if (t.get(r) !== h) i[o]++;\r\n                else {\r\n                    if (o === l - 1) {\r\n                        if (gt.patternMatchVariance(i, n, Ct.MAX_INDIVIDUAL_VARIANCE) < Ct.MAX_AVG_VARIANCE) return Int32Array.from([a, r]);\r\n                        a += i[0] + i[1];\r\n                        let t = i.slice(2, i.length - 1);\r\n                        for (let e = 0; e < o - 1; e++) i[e] = t[e];\r\n                        i[o - 1] = 0, i[o] = 0, o--\r\n                    } else o++;\r\n                    i[o] = 1, h = !h\r\n                } throw new R\r\n        }\r\n        static decodeDigit(t, e, r, n) {\r\n            this.recordPattern(t, r, e);\r\n            let i = this.MAX_AVG_VARIANCE,\r\n                    s = -1,\r\n                    o = n.length;\r\n            for (let t = 0; t < o; t++) {\r\n                let r = n[t],\r\n                        o = gt.patternMatchVariance(e, r, Ct.MAX_INDIVIDUAL_VARIANCE);\r\n                o < i && (i = o, s = t)\r\n            }\r\n            if (s >= 0) return s;\r\n            throw new R\r\n        }\r\n    }\r\n    Ct.MAX_AVG_VARIANCE = .48, Ct.MAX_INDIVIDUAL_VARIANCE = .7, Ct.START_END_PATTERN = Int32Array.from([1, 1, 1]), Ct.MIDDLE_PATTERN = Int32Array.from([1, 1, 1, 1, 1]), Ct.END_PATTERN = Int32Array.from([1, 1, 1, 1, 1, 1]), Ct.L_PATTERNS = [Int32Array.from([3, 2, 1, 1]), Int32Array.from([2, 2, 2, 1]), Int32Array.from([2, 1, 2, 2]), Int32Array.from([1, 4, 1, 1]), Int32Array.from([1, 1, 3, 2]), Int32Array.from([1, 2, 3, 1]), Int32Array.from([1, 1, 1, 4]), Int32Array.from([1, 3, 1, 2]), Int32Array.from([1, 2, 1, 3]), Int32Array.from([3, 1, 1, 2])];\r\n    class Et {\r\n        constructor() {\r\n            this.CHECK_DIGIT_ENCODINGS = [24, 20, 18, 17, 12, 6, 3, 10, 9, 5], this.decodeMiddleCounters = Int32Array.from([0, 0, 0, 0]), this.decodeRowStringBuffer = \"\"\r\n        }\r\n        decodeRow(t, e, r) {\r\n            let n = this.decodeRowStringBuffer,\r\n                    i = this.decodeMiddle(e, r, n),\r\n                    s = n.toString(),\r\n                    o = Et.parseExtensionString(s),\r\n                    a = [new rt((r[0] + r[1]) / 2, t), new rt(i, t)],\r\n                    l = new F(s, null, 0, a, k.UPC_EAN_EXTENSION, (new Date).getTime());\r\n            return null != o && l.putAllMetadata(o), l\r\n        }\r\n        decodeMiddle(t, e, r) {\r\n            let n = this.decodeMiddleCounters;\r\n            n[0] = 0, n[1] = 0, n[2] = 0, n[3] = 0;\r\n            let i = t.getSize(),\r\n                    s = e[1],\r\n                    o = 0;\r\n            for (let e = 0; e < 5 && s < i; e++) {\r\n                let i = Ct.decodeDigit(t, n, s, Ct.L_AND_G_PATTERNS);\r\n                r += String.fromCharCode(\"0\".charCodeAt(0) + i % 10);\r\n                for (let t of n) s += t;\r\n                i >= 10 && (o |= 1 << 4 - e), 4 !== e && (s = t.getNextSet(s), s = t.getNextUnset(s))\r\n            }\r\n            if (5 !== r.length) throw new R;\r\n            let a = this.determineCheckDigit(o);\r\n            if (Et.extensionChecksum(r.toString()) !== a) throw new R;\r\n            return s\r\n        }\r\n        static extensionChecksum(t) {\r\n            let e = t.length,\r\n                    r = 0;\r\n            for (let n = e - 2; n >= 0; n -= 2) r += t.charAt(n).charCodeAt(0) - \"0\".charCodeAt(0);\r\n            r *= 3;\r\n            for (let n = e - 1; n >= 0; n -= 2) r += t.charAt(n).charCodeAt(0) - \"0\".charCodeAt(0);\r\n            return (r *= 3) % 10\r\n        }\r\n        determineCheckDigit(t) {\r\n            for (let e = 0; e < 10; e++)\r\n                if (t === this.CHECK_DIGIT_ENCODINGS[e]) return e;\r\n            throw new R\r\n        }\r\n        static parseExtensionString(t) {\r\n            if (5 !== t.length) return null;\r\n            let e = Et.parseExtension5String(t);\r\n            return null == e ? null : new Map([\r\n                                                  [W.SUGGESTED_PRICE, e]\r\n                                              ])\r\n        }\r\n        static parseExtension5String(t) {\r\n            let e;\r\n            switch (t.charAt(0)) {\r\n                case \"0\":\r\n                    e = \"Ã‚Â£\";\r\n                    break;\r\n                case \"5\":\r\n                    e = \"$\";\r\n                    break;\r\n                case \"9\":\r\n                    switch (t) {\r\n                        case \"90000\":\r\n                            return null;\r\n                        case \"99991\":\r\n                            return \"0.00\";\r\n                        case \"99990\":\r\n                            return \"Used\"\r\n                    }\r\n                    e = \"\";\r\n                    break;\r\n                default:\r\n                    e = \"\"\r\n            }\r\n            let r = parseInt(t.substring(1)),\r\n                    n = r % 100;\r\n            return e + (r / 100).toString() + \".\" + (n < 10 ? \"0\" + n : n.toString())\r\n        }\r\n    }\r\n    class mt {\r\n        constructor() {\r\n            this.decodeMiddleCounters = Int32Array.from([0, 0, 0, 0]), this.decodeRowStringBuffer = \"\"\r\n        }\r\n        decodeRow(t, e, r) {\r\n            let n = this.decodeRowStringBuffer,\r\n                    i = this.decodeMiddle(e, r, n),\r\n                    s = n.toString(),\r\n                    o = mt.parseExtensionString(s),\r\n                    a = [new rt((r[0] + r[1]) / 2, t), new rt(i, t)],\r\n                    l = new F(s, null, 0, a, k.UPC_EAN_EXTENSION, (new Date).getTime());\r\n            return null != o && l.putAllMetadata(o), l\r\n        }\r\n        decodeMiddle(t, e, r) {\r\n            let n = this.decodeMiddleCounters;\r\n            n[0] = 0, n[1] = 0, n[2] = 0, n[3] = 0;\r\n            let i = t.getSize(),\r\n                    s = e[1],\r\n                    o = 0;\r\n            for (let e = 0; e < 2 && s < i; e++) {\r\n                let i = Ct.decodeDigit(t, n, s, Ct.L_AND_G_PATTERNS);\r\n                r += String.fromCharCode(\"0\".charCodeAt(0) + i % 10);\r\n                for (let t of n) s += t;\r\n                i >= 10 && (o |= 1 << 1 - e), 1 !== e && (s = t.getNextSet(s), s = t.getNextUnset(s))\r\n            }\r\n            if (2 !== r.length) throw new R;\r\n            if (parseInt(r.toString()) % 4 !== o) throw new R;\r\n            return s\r\n        }\r\n        static parseExtensionString(t) {\r\n            return 2 !== t.length ? null : new Map([\r\n                                                       [W.ISSUE_NUMBER, parseInt(t)]\r\n                                                   ])\r\n        }\r\n    }\r\n    class _t {\r\n        static decodeRow(t, e, r) {\r\n            let n = Ct.findGuardPattern(e, r, !1, this.EXTENSION_START_PATTERN, new Int32Array(this.EXTENSION_START_PATTERN.length).fill(0));\r\n            try {\r\n                return (new Et).decodeRow(t, e, n)\r\n            } catch (r) {\r\n                return (new mt).decodeRow(t, e, n)\r\n            }\r\n        }\r\n    }\r\n    _t.EXTENSION_START_PATTERN = Int32Array.from([1, 1, 2]);\r\n    class It extends Ct {\r\n        constructor() {\r\n            super(), this.decodeRowStringBuffer = \"\", It.L_AND_G_PATTERNS = It.L_PATTERNS.map(t => Int32Array.from(t));\r\n            for (let t = 10; t < 20; t++) {\r\n                let e = It.L_PATTERNS[t - 10],\r\n                        r = new Int32Array(e.length);\r\n                for (let t = 0; t < e.length; t++) r[t] = e[e.length - t - 1];\r\n                It.L_AND_G_PATTERNS[t] = r\r\n            }\r\n        }\r\n        decodeRow(t, e, r) {\r\n            let n = It.findStartGuardPattern(e),\r\n                    i = null == r ? null : r.get(C.NEED_RESULT_POINT_CALLBACK);\r\n            if (null != i) {\r\n                const e = new rt((n[0] + n[1]) / 2, t);\r\n                i.foundPossibleResultPoint(e)\r\n            }\r\n            let s = this.decodeMiddle(e, n, this.decodeRowStringBuffer),\r\n                    o = s.rowOffset,\r\n                    a = s.resultString;\r\n            if (null != i) {\r\n                const e = new rt(o, t);\r\n                i.foundPossibleResultPoint(e)\r\n            }\r\n            let h = It.decodeEnd(e, o);\r\n            if (null != i) {\r\n                const e = new rt((h[0] + h[1]) / 2, t);\r\n                i.foundPossibleResultPoint(e)\r\n            }\r\n            let c = h[1],\r\n                    u = c + (c - h[0]);\r\n            if (u >= e.getSize() || !e.isRange(c, u, !1)) throw new R;\r\n            let d = a.toString();\r\n            if (d.length < 8) throw new E;\r\n            if (!It.checkChecksum(d)) throw new l;\r\n            let g = (n[1] + n[0]) / 2,\r\n                    f = (h[1] + h[0]) / 2,\r\n                    w = this.getBarcodeFormat(),\r\n                    A = [new rt(g, t), new rt(f, t)],\r\n                    m = new F(d, null, 0, A, w, (new Date).getTime()),\r\n                    _ = 0;\r\n            try {\r\n                let r = _t.decodeRow(t, e, h[1]);\r\n                m.putMetadata(W.UPC_EAN_EXTENSION, r.getText()), m.putAllMetadata(r.getResultMetadata()), m.addResultPoints(r.getResultPoints()), _ = r.getText().length\r\n            } catch (t) {}\r\n            let I = null == r ? null : r.get(C.ALLOWED_EAN_EXTENSIONS);\r\n            if (null != I) {\r\n                let t = !1;\r\n                for (let e in I)\r\n                    if (_.toString() === e) {\r\n                        t = !0;\r\n                        break\r\n                    } if (!t) throw new R\r\n            }\r\n            return w === k.EAN_13 || k.UPC_A, m\r\n        }\r\n        static checkChecksum(t) {\r\n            return It.checkStandardUPCEANChecksum(t)\r\n        }\r\n        static checkStandardUPCEANChecksum(t) {\r\n            let e = t.length;\r\n            if (0 === e) return !1;\r\n            let r = parseInt(t.charAt(e - 1), 10);\r\n            return It.getStandardUPCEANChecksum(t.substring(0, e - 1)) === r\r\n        }\r\n        static getStandardUPCEANChecksum(t) {\r\n            let e = t.length,\r\n                    r = 0;\r\n            for (let n = e - 1; n >= 0; n -= 2) {\r\n                let e = t.charAt(n).charCodeAt(0) - \"0\".charCodeAt(0);\r\n                if (e < 0 || e > 9) throw new E;\r\n                r += e\r\n            }\r\n            r *= 3;\r\n            for (let n = e - 2; n >= 0; n -= 2) {\r\n                let e = t.charAt(n).charCodeAt(0) - \"0\".charCodeAt(0);\r\n                if (e < 0 || e > 9) throw new E;\r\n                r += e\r\n            }\r\n            return (1e3 - r) % 10\r\n        }\r\n        static decodeEnd(t, e) {\r\n            return It.findGuardPattern(t, e, !1, It.START_END_PATTERN, new Int32Array(It.START_END_PATTERN.length).fill(0))\r\n        }\r\n    }\r\n    class St extends It {\r\n        constructor() {\r\n            super(), this.decodeMiddleCounters = Int32Array.from([0, 0, 0, 0])\r\n        }\r\n        decodeMiddle(t, e, r) {\r\n            let n = this.decodeMiddleCounters;\r\n            n[0] = 0, n[1] = 0, n[2] = 0, n[3] = 0;\r\n            let i = t.getSize(),\r\n                    s = e[1],\r\n                    o = 0;\r\n            for (let e = 0; e < 6 && s < i; e++) {\r\n                let i = It.decodeDigit(t, n, s, It.L_AND_G_PATTERNS);\r\n                r += String.fromCharCode(\"0\".charCodeAt(0) + i % 10);\r\n                for (let t of n) s += t;\r\n                i >= 10 && (o |= 1 << 5 - e)\r\n            }\r\n            r = St.determineFirstDigit(r, o), s = It.findGuardPattern(t, s, !0, It.MIDDLE_PATTERN, new Int32Array(It.MIDDLE_PATTERN.length).fill(0))[1];\r\n            for (let e = 0; e < 6 && s < i; e++) {\r\n                let e = It.decodeDigit(t, n, s, It.L_PATTERNS);\r\n                r += String.fromCharCode(\"0\".charCodeAt(0) + e);\r\n                for (let t of n) s += t\r\n            }\r\n            return {\r\n                rowOffset: s,\r\n                resultString: r\r\n            }\r\n        }\r\n        getBarcodeFormat() {\r\n            return k.EAN_13\r\n        }\r\n        static determineFirstDigit(t, e) {\r\n            for (let r = 0; r < 10; r++)\r\n                if (e === this.FIRST_DIGIT_ENCODINGS[r]) return t = String.fromCharCode(\"0\".charCodeAt(0) + r) + t;\r\n            throw new R\r\n        }\r\n    }\r\n    St.FIRST_DIGIT_ENCODINGS = [0, 11, 13, 14, 19, 25, 28, 21, 22, 26];\r\n    class pt extends It {\r\n        constructor() {\r\n            super(), this.decodeMiddleCounters = Int32Array.from([0, 0, 0, 0])\r\n        }\r\n        decodeMiddle(t, e, r) {\r\n            const n = this.decodeMiddleCounters;\r\n            n[0] = 0, n[1] = 0, n[2] = 0, n[3] = 0;\r\n            let i = t.getSize(),\r\n                    s = e[1];\r\n            for (let e = 0; e < 4 && s < i; e++) {\r\n                let e = It.decodeDigit(t, n, s, It.L_PATTERNS);\r\n                r += String.fromCharCode(\"0\".charCodeAt(0) + e);\r\n                for (let t of n) s += t\r\n            }\r\n            s = It.findGuardPattern(t, s, !0, It.MIDDLE_PATTERN, new Int32Array(It.MIDDLE_PATTERN.length).fill(0))[1];\r\n            for (let e = 0; e < 4 && s < i; e++) {\r\n                let e = It.decodeDigit(t, n, s, It.L_PATTERNS);\r\n                r += String.fromCharCode(\"0\".charCodeAt(0) + e);\r\n                for (let t of n) s += t\r\n            }\r\n            return {\r\n                rowOffset: s,\r\n                resultString: r\r\n            }\r\n        }\r\n        getBarcodeFormat() {\r\n            return k.EAN_8\r\n        }\r\n    }\r\n    class Tt extends It {\r\n        constructor() {\r\n            super(...arguments), this.ean13Reader = new St\r\n        }\r\n        getBarcodeFormat() {\r\n            return k.UPC_A\r\n        }\r\n        decode(t, e) {\r\n            return this.maybeReturnResult(this.ean13Reader.decode(t))\r\n        }\r\n        decodeRow(t, e, r) {\r\n            return this.maybeReturnResult(this.ean13Reader.decodeRow(t, e, r))\r\n        }\r\n        decodeMiddle(t, e, r) {\r\n            return this.ean13Reader.decodeMiddle(t, e, r)\r\n        }\r\n        maybeReturnResult(t) {\r\n            let e = t.getText();\r\n            if (\"0\" === e.charAt(0)) {\r\n                let r = new F(e.substring(1), null, null, t.getResultPoints(), k.UPC_A);\r\n                return null != t.getResultMetadata() && r.putAllMetadata(t.getResultMetadata()), r\r\n            }\r\n            throw new R\r\n        }\r\n        reset() {\r\n            this.ean13Reader.reset()\r\n        }\r\n    }\r\n    class Rt extends It {\r\n        constructor() {\r\n            super(), this.decodeMiddleCounters = new Int32Array(4)\r\n        }\r\n        decodeMiddle(t, e, r) {\r\n            const n = this.decodeMiddleCounters.map(t => t);\r\n            n[0] = 0, n[1] = 0, n[2] = 0, n[3] = 0;\r\n            const i = t.getSize();\r\n            let s = e[1],\r\n                    o = 0;\r\n            for (let e = 0; e < 6 && s < i; e++) {\r\n                const i = Rt.decodeDigit(t, n, s, Rt.L_AND_G_PATTERNS);\r\n                r += String.fromCharCode(\"0\".charCodeAt(0) + i % 10);\r\n                for (let t of n) s += t;\r\n                i >= 10 && (o |= 1 << 5 - e)\r\n            }\r\n            return Rt.determineNumSysAndCheckDigit(new p(r), o), s\r\n        }\r\n        decodeEnd(t, e) {\r\n            return Rt.findGuardPatternWithoutCounters(t, e, !0, Rt.MIDDLE_END_PATTERN)\r\n        }\r\n        checkChecksum(t) {\r\n            return It.checkChecksum(Rt.convertUPCEtoUPCA(t))\r\n        }\r\n        static determineNumSysAndCheckDigit(t, e) {\r\n            for (let r = 0; r <= 1; r++)\r\n                for (let n = 0; n < 10; n++)\r\n                    if (e === this.NUMSYS_AND_CHECK_DIGIT_PATTERNS[r][n]) return t.insert(0, \"0\" + r), void t.append(\"0\" + n);\r\n            throw R.getNotFoundInstance()\r\n        }\r\n        getBarcodeFormat() {\r\n            return k.UPC_E\r\n        }\r\n        static convertUPCEtoUPCA(t) {\r\n            const e = t.slice(1, 7).split(\"\").map(t => t.charCodeAt(0)),\r\n                    r = new p;\r\n            r.append(t.charAt(0));\r\n            let n = e[5];\r\n            switch (n) {\r\n                case 0:\r\n                case 1:\r\n                case 2:\r\n                    r.appendChars(e, 0, 2), r.append(n), r.append(\"0000\"), r.appendChars(e, 2, 3);\r\n                    break;\r\n                case 3:\r\n                    r.appendChars(e, 0, 3), r.append(\"00000\"), r.appendChars(e, 3, 2);\r\n                    break;\r\n                case 4:\r\n                    r.appendChars(e, 0, 4), r.append(\"00000\"), r.append(e[4]);\r\n                    break;\r\n                default:\r\n                    r.appendChars(e, 0, 5), r.append(\"0000\"), r.append(n)\r\n            }\r\n            return t.length >= 8 && r.append(t.charAt(7)), r.toString()\r\n        }\r\n    }\r\n    Rt.MIDDLE_END_PATTERN = Int32Array.from([1, 1, 1, 1, 1, 1]), Rt.NUMSYS_AND_CHECK_DIGIT_PATTERNS = [Int32Array.from([56, 52, 50, 49, 44, 38, 35, 42, 41, 37]), Int32Array.from([7, 11, 13, 14, 19, 25, 28, 21, 22, 1])];\r\n    class Nt extends gt {\r\n        constructor(t) {\r\n            super();\r\n            let e = null == t ? null : t.get(C.POSSIBLE_FORMATS),\r\n                    r = [];\r\n            null != e && (e.indexOf(k.EAN_13) > -1 ? r.push(new St) : e.indexOf(k.UPC_A) > -1 && r.push(new Tt), e.indexOf(k.EAN_8) > -1 && r.push(new pt), e.indexOf(k.UPC_E) > -1 && r.push(new Rt)), 0 === r.length && (r.push(new St), r.push(new pt), r.push(new Rt)), this.readers = r\r\n        }\r\n        decodeRow(t, e, r) {\r\n            for (let n of this.readers) try {\r\n                const i = n.decodeRow(t, e, r),\r\n                        s = i.getBarcodeFormat() === k.EAN_13 && \"0\" === i.getText().charAt(0),\r\n                        o = null == r ? null : r.get(C.POSSIBLE_FORMATS),\r\n                        a = null == o || o.includes(k.UPC_A);\r\n                if (s && a) {\r\n                    const t = i.getRawBytes(),\r\n                            e = new F(i.getText().substring(1), t, t.length, i.getResultPoints(), k.UPC_A);\r\n                    return e.putAllMetadata(i.getResultMetadata()), e\r\n                }\r\n                return i\r\n            } catch (t) {}\r\n            throw new R\r\n        }\r\n        reset() {\r\n            for (let t of this.readers) t.reset()\r\n        }\r\n    }\r\n    class Dt extends gt {\r\n        constructor() {\r\n            super(), this.decodeFinderCounters = new Int32Array(4), this.dataCharacterCounters = new Int32Array(8), this.oddRoundingErrors = new Array(4), this.evenRoundingErrors = new Array(4), this.oddCounts = new Array(this.dataCharacterCounters.length / 2), this.evenCounts = new Array(this.dataCharacterCounters.length / 2)\r\n        }\r\n        getDecodeFinderCounters() {\r\n            return this.decodeFinderCounters\r\n        }\r\n        getDataCharacterCounters() {\r\n            return this.dataCharacterCounters\r\n        }\r\n        getOddRoundingErrors() {\r\n            return this.oddRoundingErrors\r\n        }\r\n        getEvenRoundingErrors() {\r\n            return this.evenRoundingErrors\r\n        }\r\n        getOddCounts() {\r\n            return this.oddCounts\r\n        }\r\n        getEvenCounts() {\r\n            return this.evenCounts\r\n        }\r\n        parseFinderValue(t, e) {\r\n            for (let r = 0; r < e.length; r++)\r\n                if (gt.patternMatchVariance(t, e[r], Dt.MAX_INDIVIDUAL_VARIANCE) < Dt.MAX_AVG_VARIANCE) return r;\r\n            throw new R\r\n        }\r\n        static count(t) {\r\n            return tt.sum(new Int32Array(t))\r\n        }\r\n        static increment(t, e) {\r\n            let r = 0,\r\n                    n = e[0];\r\n            for (let i = 1; i < t.length; i++) e[i] > n && (n = e[i], r = i);\r\n            t[r]++\r\n        }\r\n        static decrement(t, e) {\r\n            let r = 0,\r\n                    n = e[0];\r\n            for (let i = 1; i < t.length; i++) e[i] < n && (n = e[i], r = i);\r\n            t[r]--\r\n        }\r\n        static isFinderPattern(t) {\r\n            let e = t[0] + t[1],\r\n                    r = e / (e + t[2] + t[3]);\r\n            if (r >= Dt.MIN_FINDER_PATTERN_RATIO && r <= Dt.MAX_FINDER_PATTERN_RATIO) {\r\n                let e = Number.MAX_SAFE_INTEGER,\r\n                        r = Number.MIN_SAFE_INTEGER;\r\n                for (let n of t) n > r && (r = n), n < e && (e = n);\r\n                return r < 10 * e\r\n            }\r\n            return !1\r\n        }\r\n    }\r\n    Dt.MAX_AVG_VARIANCE = .2, Dt.MAX_INDIVIDUAL_VARIANCE = .45, Dt.MIN_FINDER_PATTERN_RATIO = 9.5 / 12, Dt.MAX_FINDER_PATTERN_RATIO = 12.5 / 14;\r\n    class yt {\r\n        constructor(t, e) {\r\n            this.value = t, this.checksumPortion = e\r\n        }\r\n        getValue() {\r\n            return this.value\r\n        }\r\n        getChecksumPortion() {\r\n            return this.checksumPortion\r\n        }\r\n        toString() {\r\n            return this.value + \"(\" + this.checksumPortion + \")\"\r\n        }\r\n        equals(t) {\r\n            if (!(t instanceof yt)) return !1;\r\n            const e = t;\r\n            return this.value === e.value && this.checksumPortion === e.checksumPortion\r\n        }\r\n        hashCode() {\r\n            return this.value ^ this.checksumPortion\r\n        }\r\n    }\r\n    class Ot {\r\n        constructor(t, e, r, n, i) {\r\n            this.value = t, this.startEnd = e, this.value = t, this.startEnd = e, this.resultPoints = new Array, this.resultPoints.push(new rt(r, i)), this.resultPoints.push(new rt(n, i))\r\n        }\r\n        getValue() {\r\n            return this.value\r\n        }\r\n        getStartEnd() {\r\n            return this.startEnd\r\n        }\r\n        getResultPoints() {\r\n            return this.resultPoints\r\n        }\r\n        equals(t) {\r\n            if (!(t instanceof Ot)) return !1;\r\n            const e = t;\r\n            return this.value === e.value\r\n        }\r\n        hashCode() {\r\n            return this.value\r\n        }\r\n    }\r\n    class Mt {\r\n        constructor() {}\r\n        static getRSSvalue(t, e, r) {\r\n            let n = 0;\r\n            for (let e of t) n += e;\r\n            let i = 0,\r\n                    s = 0,\r\n                    o = t.length;\r\n            for (let a = 0; a < o - 1; a++) {\r\n                let l;\r\n                for (l = 1, s |= 1 << a; l < t[a]; l++, s &= ~(1 << a)) {\r\n                    let t = Mt.combins(n - l - 1, o - a - 2);\r\n                    if (r && 0 === s && n - l - (o - a - 1) >= o - a - 1 && (t -= Mt.combins(n - l - (o - a), o - a - 2)), o - a - 1 > 1) {\r\n                        let r = 0;\r\n                        for (let t = n - l - (o - a - 2); t > e; t--) r += Mt.combins(n - l - t - 1, o - a - 3);\r\n                        t -= r * (o - 1 - a)\r\n                    } else n - l > e && t--;\r\n                    i += t\r\n                }\r\n                n -= l\r\n            }\r\n            return i\r\n        }\r\n        static combins(t, e) {\r\n            let r, n;\r\n            t - e > e ? (n = e, r = t - e) : (n = t - e, r = e);\r\n            let i = 1,\r\n                    s = 1;\r\n            for (let e = t; e > r; e--) i *= e, s <= n && (i /= s, s++);\r\n            for (; s <= n;) i /= s, s++;\r\n            return i\r\n        }\r\n    }\r\n    class bt {\r\n        static buildBitArray(t) {\r\n            let e = 2 * t.length - 1;\r\n            null == t[t.length - 1].getRightChar() && (e -= 1);\r\n            let r = new w(12 * e),\r\n                    n = 0,\r\n                    i = t[0].getRightChar().getValue();\r\n            for (let t = 11; t >= 0; --t) 0 != (i & 1 << t) && r.set(n), n++;\r\n            for (let e = 1; e < t.length; ++e) {\r\n                let i = t[e],\r\n                        s = i.getLeftChar().getValue();\r\n                for (let t = 11; t >= 0; --t) 0 != (s & 1 << t) && r.set(n), n++;\r\n                if (null != i.getRightChar()) {\r\n                    let t = i.getRightChar().getValue();\r\n                    for (let e = 11; e >= 0; --e) 0 != (t & 1 << e) && r.set(n), n++\r\n                }\r\n            }\r\n            return r\r\n        }\r\n    }\r\n    class Bt {\r\n        constructor(t, e) {\r\n            e ? this.decodedInformation = null : (this.finished = t, this.decodedInformation = e)\r\n        }\r\n        getDecodedInformation() {\r\n            return this.decodedInformation\r\n        }\r\n        isFinished() {\r\n            return this.finished\r\n        }\r\n    }\r\n    class Pt {\r\n        constructor(t) {\r\n            this.newPosition = t\r\n        }\r\n        getNewPosition() {\r\n            return this.newPosition\r\n        }\r\n    }\r\n    class Lt extends Pt {\r\n        constructor(t, e) {\r\n            super(t), this.value = e\r\n        }\r\n        getValue() {\r\n            return this.value\r\n        }\r\n        isFNC1() {\r\n            return this.value === Lt.FNC1\r\n        }\r\n    }\r\n    Lt.FNC1 = \"$\";\r\n    class Ft extends Pt {\r\n        constructor(t, e, r) {\r\n            super(t), r ? (this.remaining = !0, this.remainingValue = this.remainingValue) : (this.remaining = !1, this.remainingValue = 0), this.newString = e\r\n        }\r\n        getNewString() {\r\n            return this.newString\r\n        }\r\n        isRemaining() {\r\n            return this.remaining\r\n        }\r\n        getRemainingValue() {\r\n            return this.remainingValue\r\n        }\r\n    }\r\n    class vt extends Pt {\r\n        constructor(t, e, r) {\r\n            if (super(t), e < 0 || e > 10 || r < 0 || r > 10) throw new E;\r\n            this.firstDigit = e, this.secondDigit = r\r\n        }\r\n        getFirstDigit() {\r\n            return this.firstDigit\r\n        }\r\n        getSecondDigit() {\r\n            return this.secondDigit\r\n        }\r\n        getValue() {\r\n            return 10 * this.firstDigit + this.secondDigit\r\n        }\r\n        isFirstDigitFNC1() {\r\n            return this.firstDigit === vt.FNC1\r\n        }\r\n        isSecondDigitFNC1() {\r\n            return this.secondDigit === vt.FNC1\r\n        }\r\n        isAnyFNC1() {\r\n            return this.firstDigit === vt.FNC1 || this.secondDigit === vt.FNC1\r\n        }\r\n    }\r\n    vt.FNC1 = 10;\r\n    class kt {\r\n        constructor() {}\r\n        static parseFieldsInGeneralPurpose(t) {\r\n            if (!t) return null;\r\n            if (t.length < 2) throw new R;\r\n            let e = t.substring(0, 2);\r\n            for (let r of kt.TWO_DIGIT_DATA_LENGTH)\r\n                if (r[0] === e) return r[1] === kt.VARIABLE_LENGTH ? kt.processVariableAI(2, r[2], t) : kt.processFixedAI(2, r[1], t);\r\n            if (t.length < 3) throw new R;\r\n            let r = t.substring(0, 3);\r\n            for (let e of kt.THREE_DIGIT_DATA_LENGTH)\r\n                if (e[0] === r) return e[1] === kt.VARIABLE_LENGTH ? kt.processVariableAI(3, e[2], t) : kt.processFixedAI(3, e[1], t);\r\n            for (let e of kt.THREE_DIGIT_PLUS_DIGIT_DATA_LENGTH)\r\n                if (e[0] === r) return e[1] === kt.VARIABLE_LENGTH ? kt.processVariableAI(4, e[2], t) : kt.processFixedAI(4, e[1], t);\r\n            if (t.length < 4) throw new R;\r\n            let n = t.substring(0, 4);\r\n            for (let e of kt.FOUR_DIGIT_DATA_LENGTH)\r\n                if (e[0] === n) return e[1] === kt.VARIABLE_LENGTH ? kt.processVariableAI(4, e[2], t) : kt.processFixedAI(4, e[1], t);\r\n            throw new R\r\n        }\r\n        static processFixedAI(t, e, r) {\r\n            if (r.length < t) throw new R;\r\n            let n = r.substring(0, t);\r\n            if (r.length < t + e) throw new R;\r\n            let i = r.substring(t, t + e),\r\n                    s = r.substring(t + e),\r\n                    o = \"(\" + n + \")\" + i,\r\n                    a = kt.parseFieldsInGeneralPurpose(s);\r\n            return null == a ? o : o + a\r\n        }\r\n        static processVariableAI(t, e, r) {\r\n            let n, i = r.substring(0, t);\r\n            n = r.length < t + e ? r.length : t + e;\r\n            let s = r.substring(t, n),\r\n                    o = r.substring(n),\r\n                    a = \"(\" + i + \")\" + s,\r\n                    l = kt.parseFieldsInGeneralPurpose(o);\r\n            return null == l ? a : a + l\r\n        }\r\n    }\r\n    kt.VARIABLE_LENGTH = [], kt.TWO_DIGIT_DATA_LENGTH = [\r\n        [\"00\", 18],\r\n        [\"01\", 14],\r\n        [\"02\", 14],\r\n        [\"10\", kt.VARIABLE_LENGTH, 20],\r\n        [\"11\", 6],\r\n        [\"12\", 6],\r\n        [\"13\", 6],\r\n        [\"15\", 6],\r\n        [\"17\", 6],\r\n        [\"20\", 2],\r\n        [\"21\", kt.VARIABLE_LENGTH, 20],\r\n        [\"22\", kt.VARIABLE_LENGTH, 29],\r\n        [\"30\", kt.VARIABLE_LENGTH, 8],\r\n        [\"37\", kt.VARIABLE_LENGTH, 8],\r\n        [\"90\", kt.VARIABLE_LENGTH, 30],\r\n        [\"91\", kt.VARIABLE_LENGTH, 30],\r\n        [\"92\", kt.VARIABLE_LENGTH, 30],\r\n        [\"93\", kt.VARIABLE_LENGTH, 30],\r\n        [\"94\", kt.VARIABLE_LENGTH, 30],\r\n        [\"95\", kt.VARIABLE_LENGTH, 30],\r\n        [\"96\", kt.VARIABLE_LENGTH, 30],\r\n        [\"97\", kt.VARIABLE_LENGTH, 3],\r\n        [\"98\", kt.VARIABLE_LENGTH, 30],\r\n        [\"99\", kt.VARIABLE_LENGTH, 30]\r\n    ], kt.THREE_DIGIT_DATA_LENGTH = [\r\n        [\"240\", kt.VARIABLE_LENGTH, 30],\r\n        [\"241\", kt.VARIABLE_LENGTH, 30],\r\n        [\"242\", kt.VARIABLE_LENGTH, 6],\r\n        [\"250\", kt.VARIABLE_LENGTH, 30],\r\n        [\"251\", kt.VARIABLE_LENGTH, 30],\r\n        [\"253\", kt.VARIABLE_LENGTH, 17],\r\n        [\"254\", kt.VARIABLE_LENGTH, 20],\r\n        [\"400\", kt.VARIABLE_LENGTH, 30],\r\n        [\"401\", kt.VARIABLE_LENGTH, 30],\r\n        [\"402\", 17],\r\n        [\"403\", kt.VARIABLE_LENGTH, 30],\r\n        [\"410\", 13],\r\n        [\"411\", 13],\r\n        [\"412\", 13],\r\n        [\"413\", 13],\r\n        [\"414\", 13],\r\n        [\"420\", kt.VARIABLE_LENGTH, 20],\r\n        [\"421\", kt.VARIABLE_LENGTH, 15],\r\n        [\"422\", 3],\r\n        [\"423\", kt.VARIABLE_LENGTH, 15],\r\n        [\"424\", 3],\r\n        [\"425\", 3],\r\n        [\"426\", 3]\r\n    ], kt.THREE_DIGIT_PLUS_DIGIT_DATA_LENGTH = [\r\n        [\"310\", 6],\r\n        [\"311\", 6],\r\n        [\"312\", 6],\r\n        [\"313\", 6],\r\n        [\"314\", 6],\r\n        [\"315\", 6],\r\n        [\"316\", 6],\r\n        [\"320\", 6],\r\n        [\"321\", 6],\r\n        [\"322\", 6],\r\n        [\"323\", 6],\r\n        [\"324\", 6],\r\n        [\"325\", 6],\r\n        [\"326\", 6],\r\n        [\"327\", 6],\r\n        [\"328\", 6],\r\n        [\"329\", 6],\r\n        [\"330\", 6],\r\n        [\"331\", 6],\r\n        [\"332\", 6],\r\n        [\"333\", 6],\r\n        [\"334\", 6],\r\n        [\"335\", 6],\r\n        [\"336\", 6],\r\n        [\"340\", 6],\r\n        [\"341\", 6],\r\n        [\"342\", 6],\r\n        [\"343\", 6],\r\n        [\"344\", 6],\r\n        [\"345\", 6],\r\n        [\"346\", 6],\r\n        [\"347\", 6],\r\n        [\"348\", 6],\r\n        [\"349\", 6],\r\n        [\"350\", 6],\r\n        [\"351\", 6],\r\n        [\"352\", 6],\r\n        [\"353\", 6],\r\n        [\"354\", 6],\r\n        [\"355\", 6],\r\n        [\"356\", 6],\r\n        [\"357\", 6],\r\n        [\"360\", 6],\r\n        [\"361\", 6],\r\n        [\"362\", 6],\r\n        [\"363\", 6],\r\n        [\"364\", 6],\r\n        [\"365\", 6],\r\n        [\"366\", 6],\r\n        [\"367\", 6],\r\n        [\"368\", 6],\r\n        [\"369\", 6],\r\n        [\"390\", kt.VARIABLE_LENGTH, 15],\r\n        [\"391\", kt.VARIABLE_LENGTH, 18],\r\n        [\"392\", kt.VARIABLE_LENGTH, 15],\r\n        [\"393\", kt.VARIABLE_LENGTH, 18],\r\n        [\"703\", kt.VARIABLE_LENGTH, 30]\r\n    ], kt.FOUR_DIGIT_DATA_LENGTH = [\r\n        [\"7001\", 13],\r\n        [\"7002\", kt.VARIABLE_LENGTH, 30],\r\n        [\"7003\", 10],\r\n        [\"8001\", 14],\r\n        [\"8002\", kt.VARIABLE_LENGTH, 20],\r\n        [\"8003\", kt.VARIABLE_LENGTH, 30],\r\n        [\"8004\", kt.VARIABLE_LENGTH, 30],\r\n        [\"8005\", 6],\r\n        [\"8006\", 18],\r\n        [\"8007\", kt.VARIABLE_LENGTH, 30],\r\n        [\"8008\", kt.VARIABLE_LENGTH, 12],\r\n        [\"8018\", 18],\r\n        [\"8020\", kt.VARIABLE_LENGTH, 25],\r\n        [\"8100\", 6],\r\n        [\"8101\", 10],\r\n        [\"8102\", 2],\r\n        [\"8110\", kt.VARIABLE_LENGTH, 70],\r\n        [\"8200\", kt.VARIABLE_LENGTH, 70]\r\n    ];\r\n    class xt {\r\n        constructor(t) {\r\n            this.buffer = new p, this.information = t\r\n        }\r\n        decodeAllCodes(t, e) {\r\n            let r = e,\r\n                    n = null;\r\n            for (;;) {\r\n                let e = this.decodeGeneralPurposeField(r, n),\r\n                        i = kt.parseFieldsInGeneralPurpose(e.getNewString());\r\n                if (null != i && t.append(i), n = e.isRemaining() ? \"\" + e.getRemainingValue() : null, r === e.getNewPosition()) break;\r\n                r = e.getNewPosition()\r\n            }\r\n            return t.toString()\r\n        }\r\n        isStillNumeric(t) {\r\n            if (t + 7 > this.information.getSize()) return t + 4 <= this.information.getSize();\r\n            for (let e = t; e < t + 3; ++e)\r\n                if (this.information.get(e)) return !0;\r\n            return this.information.get(t + 3)\r\n        }\r\n        decodeNumeric(t) {\r\n            if (t + 7 > this.information.getSize()) {\r\n                let e = this.extractNumericValueFromBitArray(t, 4);\r\n                return new vt(this.information.getSize(), 0 === e ? vt.FNC1 : e - 1, vt.FNC1)\r\n            }\r\n            let e = this.extractNumericValueFromBitArray(t, 7);\r\n            return new vt(t + 7, (e - 8) / 11, (e - 8) % 11)\r\n        }\r\n        extractNumericValueFromBitArray(t, e) {\r\n            return xt.extractNumericValueFromBitArray(this.information, t, e)\r\n        }\r\n        static extractNumericValueFromBitArray(t, e, r) {\r\n            let n = 0;\r\n            for (let i = 0; i < r; ++i) t.get(e + i) && (n |= 1 << r - i - 1);\r\n            return n\r\n        }\r\n        decodeGeneralPurposeField(t, e) {\r\n            this.buffer.setLengthToZero(), null != e && this.buffer.append(e), this.current.setPosition(t);\r\n            let r = this.parseBlocks();\r\n            return null != r && r.isRemaining() ? new Ft(this.current.getPosition(), this.buffer.toString(), r.getRemainingValue()) : new Ft(this.current.getPosition(), this.buffer.toString())\r\n        }\r\n        parseBlocks() {\r\n            let t, e;\r\n            do {\r\n                let r = this.current.getPosition();\r\n                if (t = this.current.isAlpha() ? (e = this.parseAlphaBlock()).isFinished() : this.current.isIsoIec646() ? (e = this.parseIsoIec646Block()).isFinished() : (e = this.parseNumericBlock()).isFinished(), !(r !== this.current.getPosition()) && !t) break\r\n            } while (!t);\r\n            return e.getDecodedInformation()\r\n        }\r\n        parseNumericBlock() {\r\n            for (; this.isStillNumeric(this.current.getPosition());) {\r\n                let t = this.decodeNumeric(this.current.getPosition());\r\n                if (this.current.setPosition(t.getNewPosition()), t.isFirstDigitFNC1()) {\r\n                    let e;\r\n                    return e = t.isSecondDigitFNC1() ? new Ft(this.current.getPosition(), this.buffer.toString()) : new Ft(this.current.getPosition(), this.buffer.toString(), t.getSecondDigit()), new Bt(!0, e)\r\n                }\r\n                if (this.buffer.append(t.getFirstDigit()), t.isSecondDigitFNC1()) {\r\n                    let t = new Ft(this.current.getPosition(), this.buffer.toString());\r\n                    return new Bt(!0, t)\r\n                }\r\n                this.buffer.append(t.getSecondDigit())\r\n            }\r\n            return this.isNumericToAlphaNumericLatch(this.current.getPosition()) && (this.current.setAlpha(), this.current.incrementPosition(4)), new Bt(!1)\r\n        }\r\n        parseIsoIec646Block() {\r\n            for (; this.isStillIsoIec646(this.current.getPosition());) {\r\n                let t = this.decodeIsoIec646(this.current.getPosition());\r\n                if (this.current.setPosition(t.getNewPosition()), t.isFNC1()) {\r\n                    let t = new Ft(this.current.getPosition(), this.buffer.toString());\r\n                    return new Bt(!0, t)\r\n                }\r\n                this.buffer.append(t.getValue())\r\n            }\r\n            return this.isAlphaOr646ToNumericLatch(this.current.getPosition()) ? (this.current.incrementPosition(3), this.current.setNumeric()) : this.isAlphaTo646ToAlphaLatch(this.current.getPosition()) && (this.current.getPosition() + 5 < this.information.getSize() ? this.current.incrementPosition(5) : this.current.setPosition(this.information.getSize()), this.current.setAlpha()), new Bt(!1)\r\n        }\r\n        parseAlphaBlock() {\r\n            for (; this.isStillAlpha(this.current.getPosition());) {\r\n                let t = this.decodeAlphanumeric(this.current.getPosition());\r\n                if (this.current.setPosition(t.getNewPosition()), t.isFNC1()) {\r\n                    let t = new Ft(this.current.getPosition(), this.buffer.toString());\r\n                    return new Bt(!0, t)\r\n                }\r\n                this.buffer.append(t.getValue())\r\n            }\r\n            return this.isAlphaOr646ToNumericLatch(this.current.getPosition()) ? (this.current.incrementPosition(3), this.current.setNumeric()) : this.isAlphaTo646ToAlphaLatch(this.current.getPosition()) && (this.current.getPosition() + 5 < this.information.getSize() ? this.current.incrementPosition(5) : this.current.setPosition(this.information.getSize()), this.current.setIsoIec646()), new Bt(!1)\r\n        }\r\n        isStillIsoIec646(t) {\r\n            if (t + 5 > this.information.getSize()) return !1;\r\n            let e = this.extractNumericValueFromBitArray(t, 5);\r\n            if (e >= 5 && e < 16) return !0;\r\n            if (t + 7 > this.information.getSize()) return !1;\r\n            let r = this.extractNumericValueFromBitArray(t, 7);\r\n            if (r >= 64 && r < 116) return !0;\r\n            if (t + 8 > this.information.getSize()) return !1;\r\n            let n = this.extractNumericValueFromBitArray(t, 8);\r\n            return n >= 232 && n < 253\r\n        }\r\n        decodeIsoIec646(t) {\r\n            let e = this.extractNumericValueFromBitArray(t, 5);\r\n            if (15 === e) return new Lt(t + 5, Lt.FNC1);\r\n            if (e >= 5 && e < 15) return new Lt(t + 5, \"0\" + (e - 5));\r\n            let r, n = this.extractNumericValueFromBitArray(t, 7);\r\n            if (n >= 64 && n < 90) return new Lt(t + 7, \"\" + (n + 1));\r\n            if (n >= 90 && n < 116) return new Lt(t + 7, \"\" + (n + 7));\r\n            switch (this.extractNumericValueFromBitArray(t, 8)) {\r\n                case 232:\r\n                    r = \"!\";\r\n                    break;\r\n                case 233:\r\n                    r = '\"';\r\n                    break;\r\n                case 234:\r\n                    r = \"%\";\r\n                    break;\r\n                case 235:\r\n                    r = \"&\";\r\n                    break;\r\n                case 236:\r\n                    r = \"'\";\r\n                    break;\r\n                case 237:\r\n                    r = \"(\";\r\n                    break;\r\n                case 238:\r\n                    r = \")\";\r\n                    break;\r\n                case 239:\r\n                    r = \"*\";\r\n                    break;\r\n                case 240:\r\n                    r = \"+\";\r\n                    break;\r\n                case 241:\r\n                    r = \",\";\r\n                    break;\r\n                case 242:\r\n                    r = \"-\";\r\n                    break;\r\n                case 243:\r\n                    r = \".\";\r\n                    break;\r\n                case 244:\r\n                    r = \"/\";\r\n                    break;\r\n                case 245:\r\n                    r = \":\";\r\n                    break;\r\n                case 246:\r\n                    r = \";\";\r\n                    break;\r\n                case 247:\r\n                    r = \"<\";\r\n                    break;\r\n                case 248:\r\n                    r = \"=\";\r\n                    break;\r\n                case 249:\r\n                    r = \">\";\r\n                    break;\r\n                case 250:\r\n                    r = \"?\";\r\n                    break;\r\n                case 251:\r\n                    r = \"_\";\r\n                    break;\r\n                case 252:\r\n                    r = \" \";\r\n                    break;\r\n                default:\r\n                    throw new E\r\n            }\r\n            return new Lt(t + 8, r)\r\n        }\r\n        isStillAlpha(t) {\r\n            if (t + 5 > this.information.getSize()) return !1;\r\n            let e = this.extractNumericValueFromBitArray(t, 5);\r\n            if (e >= 5 && e < 16) return !0;\r\n            if (t + 6 > this.information.getSize()) return !1;\r\n            let r = this.extractNumericValueFromBitArray(t, 6);\r\n            return r >= 16 && r < 63\r\n        }\r\n        decodeAlphanumeric(t) {\r\n            let e = this.extractNumericValueFromBitArray(t, 5);\r\n            if (15 === e) return new Lt(t + 5, Lt.FNC1);\r\n            if (e >= 5 && e < 15) return new Lt(t + 5, \"0\" + (e - 5));\r\n            let r, n = this.extractNumericValueFromBitArray(t, 6);\r\n            if (n >= 32 && n < 58) return new Lt(t + 6, \"\" + (n + 33));\r\n            switch (n) {\r\n                case 58:\r\n                    r = \"*\";\r\n                    break;\r\n                case 59:\r\n                    r = \",\";\r\n                    break;\r\n                case 60:\r\n                    r = \"-\";\r\n                    break;\r\n                case 61:\r\n                    r = \".\";\r\n                    break;\r\n                case 62:\r\n                    r = \"/\";\r\n                    break;\r\n                default:\r\n                    throw new j(\"Decoding invalid alphanumeric value: \" + n)\r\n            }\r\n            return new Lt(t + 6, r)\r\n        }\r\n        isAlphaTo646ToAlphaLatch(t) {\r\n            if (t + 1 > this.information.getSize()) return !1;\r\n            for (let e = 0; e < 5 && e + t < this.information.getSize(); ++e)\r\n                if (2 === e) {\r\n                    if (!this.information.get(t + 2)) return !1\r\n                } else if (this.information.get(t + e)) return !1;\r\n            return !0\r\n        }\r\n        isAlphaOr646ToNumericLatch(t) {\r\n            if (t + 3 > this.information.getSize()) return !1;\r\n            for (let e = t; e < t + 3; ++e)\r\n                if (this.information.get(e)) return !1;\r\n            return !0\r\n        }\r\n        isNumericToAlphaNumericLatch(t) {\r\n            if (t + 1 > this.information.getSize()) return !1;\r\n            for (let e = 0; e < 4 && e + t < this.information.getSize(); ++e)\r\n                if (this.information.get(t + e)) return !1;\r\n            return !0\r\n        }\r\n    }\r\n    class Vt {\r\n        constructor(t) {\r\n            this.information = t, this.generalDecoder = new xt(t)\r\n        }\r\n        getInformation() {\r\n            return this.information\r\n        }\r\n        getGeneralDecoder() {\r\n            return this.generalDecoder\r\n        }\r\n    }\r\n    class Ut extends Vt {\r\n        constructor(t) {\r\n            super(t)\r\n        }\r\n        encodeCompressedGtin(t, e) {\r\n            t.append(\"(01)\");\r\n            let r = t.length();\r\n            t.append(\"9\"), this.encodeCompressedGtinWithoutAI(t, e, r)\r\n        }\r\n        encodeCompressedGtinWithoutAI(t, e, r) {\r\n            for (let r = 0; r < 4; ++r) {\r\n                let n = this.getGeneralDecoder().extractNumericValueFromBitArray(e + 10 * r, 10);\r\n                n / 100 == 0 && t.append(\"0\"), n / 10 == 0 && t.append(\"0\"), t.append(n)\r\n            }\r\n            Ut.appendCheckDigit(t, r)\r\n        }\r\n        static appendCheckDigit(t, e) {\r\n            let r = 0;\r\n            for (let n = 0; n < 13; n++) {\r\n                let i = t.charAt(n + e).charCodeAt(0) - \"0\".charCodeAt(0);\r\n                r += 0 == (1 & n) ? 3 * i : i\r\n            }\r\n            10 === (r = 10 - r % 10) && (r = 0), t.append(r)\r\n        }\r\n    }\r\n    Ut.GTIN_SIZE = 40;\r\n    class Ht extends Ut {\r\n        constructor(t) {\r\n            super(t)\r\n        }\r\n        parseInformation() {\r\n            let t = new p;\r\n            t.append(\"(01)\");\r\n            let e = t.length(),\r\n                    r = this.getGeneralDecoder().extractNumericValueFromBitArray(Ht.HEADER_SIZE, 4);\r\n            return t.append(r), this.encodeCompressedGtinWithoutAI(t, Ht.HEADER_SIZE + 4, e), this.getGeneralDecoder().decodeAllCodes(t, Ht.HEADER_SIZE + 44)\r\n        }\r\n    }\r\n    Ht.HEADER_SIZE = 4;\r\n    class Gt extends Vt {\r\n        constructor(t) {\r\n            super(t)\r\n        }\r\n        parseInformation() {\r\n            let t = new p;\r\n            return this.getGeneralDecoder().decodeAllCodes(t, Gt.HEADER_SIZE)\r\n        }\r\n    }\r\n    Gt.HEADER_SIZE = 5;\r\n    class Xt extends Ut {\r\n        constructor(t) {\r\n            super(t)\r\n        }\r\n        encodeCompressedWeight(t, e, r) {\r\n            let n = this.getGeneralDecoder().extractNumericValueFromBitArray(e, r);\r\n            this.addWeightCode(t, n);\r\n            let i = this.checkWeight(n),\r\n                    s = 1e5;\r\n            for (let e = 0; e < 5; ++e) i / s == 0 && t.append(\"0\"), s /= 10;\r\n            t.append(i)\r\n        }\r\n    }\r\n    class Wt extends Xt {\r\n        constructor(t) {\r\n            super(t)\r\n        }\r\n        parseInformation() {\r\n            if (this.getInformation().getSize() != Wt.HEADER_SIZE + Xt.GTIN_SIZE + Wt.WEIGHT_SIZE) throw new R;\r\n            let t = new p;\r\n            return this.encodeCompressedGtin(t, Wt.HEADER_SIZE), this.encodeCompressedWeight(t, Wt.HEADER_SIZE + Xt.GTIN_SIZE, Wt.WEIGHT_SIZE), t.toString()\r\n        }\r\n    }\r\n    Wt.HEADER_SIZE = 5, Wt.WEIGHT_SIZE = 15;\r\n    class zt extends Wt {\r\n        constructor(t) {\r\n            super(t)\r\n        }\r\n        addWeightCode(t, e) {\r\n            t.append(\"(3103)\")\r\n        }\r\n        checkWeight(t) {\r\n            return t\r\n        }\r\n    }\r\n    class Yt extends Wt {\r\n        constructor(t) {\r\n            super(t)\r\n        }\r\n        addWeightCode(t, e) {\r\n            e < 1e4 ? t.append(\"(3202)\") : t.append(\"(3203)\")\r\n        }\r\n        checkWeight(t) {\r\n            return t < 1e4 ? t : t - 1e4\r\n        }\r\n    }\r\n    class Zt extends Ut {\r\n        constructor(t) {\r\n            super(t)\r\n        }\r\n        parseInformation() {\r\n            if (this.getInformation().getSize() < Zt.HEADER_SIZE + Ut.GTIN_SIZE) throw new R;\r\n            let t = new p;\r\n            this.encodeCompressedGtin(t, Zt.HEADER_SIZE);\r\n            let e = this.getGeneralDecoder().extractNumericValueFromBitArray(Zt.HEADER_SIZE + Ut.GTIN_SIZE, Zt.LAST_DIGIT_SIZE);\r\n            t.append(\"(392\"), t.append(e), t.append(\")\");\r\n            let r = this.getGeneralDecoder().decodeGeneralPurposeField(Zt.HEADER_SIZE + Ut.GTIN_SIZE + Zt.LAST_DIGIT_SIZE, null);\r\n            return t.append(r.getNewString()), t.toString()\r\n        }\r\n    }\r\n    Zt.HEADER_SIZE = 8, Zt.LAST_DIGIT_SIZE = 2;\r\n    class Kt extends Ut {\r\n        constructor(t) {\r\n            super(t)\r\n        }\r\n        parseInformation() {\r\n            if (this.getInformation().getSize() < Kt.HEADER_SIZE + Ut.GTIN_SIZE) throw new R;\r\n            let t = new p;\r\n            this.encodeCompressedGtin(t, Kt.HEADER_SIZE);\r\n            let e = this.getGeneralDecoder().extractNumericValueFromBitArray(Kt.HEADER_SIZE + Ut.GTIN_SIZE, Kt.LAST_DIGIT_SIZE);\r\n            t.append(\"(393\"), t.append(e), t.append(\")\");\r\n            let r = this.getGeneralDecoder().extractNumericValueFromBitArray(Kt.HEADER_SIZE + Ut.GTIN_SIZE + Kt.LAST_DIGIT_SIZE, Kt.FIRST_THREE_DIGITS_SIZE);\r\n            r / 100 == 0 && t.append(\"0\"), r / 10 == 0 && t.append(\"0\"), t.append(r);\r\n            let n = this.getGeneralDecoder().decodeGeneralPurposeField(Kt.HEADER_SIZE + Ut.GTIN_SIZE + Kt.LAST_DIGIT_SIZE + Kt.FIRST_THREE_DIGITS_SIZE, null);\r\n            return t.append(n.getNewString()), t.toString()\r\n        }\r\n    }\r\n    Kt.HEADER_SIZE = 8, Kt.LAST_DIGIT_SIZE = 2, Kt.FIRST_THREE_DIGITS_SIZE = 10;\r\n    class qt extends Xt {\r\n        constructor(t, e, r) {\r\n            super(t), this.dateCode = r, this.firstAIdigits = e\r\n        }\r\n        parseInformation() {\r\n            if (this.getInformation().getSize() != qt.HEADER_SIZE + qt.GTIN_SIZE + qt.WEIGHT_SIZE + qt.DATE_SIZE) throw new R;\r\n            let t = new p;\r\n            return this.encodeCompressedGtin(t, qt.HEADER_SIZE), this.encodeCompressedWeight(t, qt.HEADER_SIZE + qt.GTIN_SIZE, qt.WEIGHT_SIZE), this.encodeCompressedDate(t, qt.HEADER_SIZE + qt.GTIN_SIZE + qt.WEIGHT_SIZE), t.toString()\r\n        }\r\n        encodeCompressedDate(t, e) {\r\n            let r = this.getGeneralDecoder().extractNumericValueFromBitArray(e, qt.DATE_SIZE);\r\n            if (38400 == r) return;\r\n            t.append(\"(\"), t.append(this.dateCode), t.append(\")\");\r\n            let n = r % 32,\r\n                    i = (r /= 32) % 12 + 1,\r\n                    s = r /= 12;\r\n            s / 10 == 0 && t.append(\"0\"), t.append(s), i / 10 == 0 && t.append(\"0\"), t.append(i), n / 10 == 0 && t.append(\"0\"), t.append(n)\r\n        }\r\n        addWeightCode(t, e) {\r\n            t.append(\"(\"), t.append(this.firstAIdigits), t.append(e / 1e5), t.append(\")\")\r\n        }\r\n        checkWeight(t) {\r\n            return t % 1e5\r\n        }\r\n    }\r\n    qt.HEADER_SIZE = 8, qt.WEIGHT_SIZE = 20, qt.DATE_SIZE = 16;\r\n    class Qt {\r\n        constructor(t, e, r, n) {\r\n            this.leftchar = t, this.rightchar = e, this.finderpattern = r, this.maybeLast = n\r\n        }\r\n        mayBeLast() {\r\n            return this.maybeLast\r\n        }\r\n        getLeftChar() {\r\n            return this.leftchar\r\n        }\r\n        getRightChar() {\r\n            return this.rightchar\r\n        }\r\n        getFinderPattern() {\r\n            return this.finderpattern\r\n        }\r\n        mustBeLast() {\r\n            return null == this.rightchar\r\n        }\r\n        toString() {\r\n            return \"[ \" + this.leftchar + \", \" + this.rightchar + \" : \" + (null == this.finderpattern ? \"null\" : this.finderpattern.getValue()) + \" ]\"\r\n        }\r\n        static equals(t, e) {\r\n            return t instanceof Qt && (Qt.equalsOrNull(t.leftchar, e.leftchar) && Qt.equalsOrNull(t.rightchar, e.rightchar) && Qt.equalsOrNull(t.finderpattern, e.finderpattern))\r\n        }\r\n        static equalsOrNull(t, e) {\r\n            return null === t ? null === e : Qt.equals(t, e)\r\n        }\r\n        hashCode() {\r\n            return this.leftchar.getValue() ^ this.rightchar.getValue() ^ this.finderpattern.getValue()\r\n        }\r\n    }\r\n    class jt {\r\n        constructor(t, e, r) {\r\n            this.pairs = t, this.rowNumber = e, this.wasReversed = r\r\n        }\r\n        getPairs() {\r\n            return this.pairs\r\n        }\r\n        getRowNumber() {\r\n            return this.rowNumber\r\n        }\r\n        isReversed() {\r\n            return this.wasReversed\r\n        }\r\n        isEquivalent(t) {\r\n            return this.checkEqualitity(this, t)\r\n        }\r\n        toString() {\r\n            return \"{ \" + this.pairs + \" }\"\r\n        }\r\n        equals(t, e) {\r\n            return t instanceof jt && (this.checkEqualitity(t, e) && t.wasReversed === e.wasReversed)\r\n        }\r\n        checkEqualitity(t, e) {\r\n            if (!t || !e) return;\r\n            let r;\r\n            return t.forEach((t, n) => {\r\n                e.forEach(e => {\r\n                    t.getLeftChar().getValue() === e.getLeftChar().getValue() && t.getRightChar().getValue() === e.getRightChar().getValue() && t.getFinderPatter().getValue() === e.getFinderPatter().getValue() && (r = !0)\r\n                })\r\n            }), r\r\n        }\r\n    }\r\n    class Jt extends Dt {\r\n        constructor(t) {\r\n            super(...arguments), this.pairs = new Array(Jt.MAX_PAIRS), this.rows = new Array, this.startEnd = [2], this.verbose = !0 === t\r\n        }\r\n        decodeRow(t, e, r) {\r\n            this.pairs.length = 0, this.startFromEven = !1;\r\n            try {\r\n                return Jt.constructResult(this.decodeRow2pairs(t, e))\r\n            } catch (t) {\r\n                this.verbose && console.log(t)\r\n            }\r\n            return this.pairs.length = 0, this.startFromEven = !0, Jt.constructResult(this.decodeRow2pairs(t, e))\r\n        }\r\n        reset() {\r\n            this.pairs.length = 0, this.rows.length = 0\r\n        }\r\n        decodeRow2pairs(t, e) {\r\n            let r, n = !1;\r\n            for (; !n;) try {\r\n                this.pairs.push(this.retrieveNextPair(e, this.pairs, t))\r\n            } catch (t) {\r\n                if (t instanceof R) {\r\n                    if (!this.pairs.length) throw new R;\r\n                    n = !0\r\n                }\r\n            }\r\n            if (this.checkChecksum()) return this.pairs;\r\n            if (r = !!this.rows.length, this.storeRow(t, !1), r) {\r\n                let t = this.checkRowsBoolean(!1);\r\n                if (null != t) return t;\r\n                if (null != (t = this.checkRowsBoolean(!0))) return t\r\n            }\r\n            throw new R\r\n        }\r\n        checkRowsBoolean(t) {\r\n            if (this.rows.length > 25) return this.rows.length = 0, null;\r\n            this.pairs.length = 0, t && (this.rows = this.rows.reverse());\r\n            let e = null;\r\n            try {\r\n                e = this.checkRows(new Array, 0)\r\n            } catch (t) {\r\n                this.verbose && console.log(t)\r\n            }\r\n            return t && (this.rows = this.rows.reverse()), e\r\n        }\r\n        checkRows(t, e) {\r\n            for (let r = e; r < this.rows.length; r++) {\r\n                let e = this.rows[r];\r\n                this.pairs.length = 0;\r\n                for (let e of t) this.pairs.push(e.getPairs());\r\n                if (this.pairs.push(e.getPairs()), !Jt.isValidSequence(this.pairs)) continue;\r\n                if (this.checkChecksum()) return this.pairs;\r\n                let n = new Array(t);\r\n                n.push(e);\r\n                try {\r\n                    return this.checkRows(n, r + 1)\r\n                } catch (t) {\r\n                    this.verbose && console.log(t)\r\n                }\r\n            }\r\n            throw new R\r\n        }\r\n        static isValidSequence(t) {\r\n            for (let e of Jt.FINDER_PATTERN_SEQUENCES) {\r\n                if (t.length > e.length) continue;\r\n                let r = !0;\r\n                for (let n = 0; n < t.length; n++)\r\n                    if (t[n].getFinderPattern().getValue() != e[n]) {\r\n                        r = !1;\r\n                        break\r\n                    } if (r) return !0\r\n            }\r\n            return !1\r\n        }\r\n        storeRow(t, e) {\r\n            let r = 0,\r\n                    n = !1,\r\n                    i = !1;\r\n            for (; r < this.rows.length;) {\r\n                let e = this.rows[r];\r\n                if (e.getRowNumber() > t) {\r\n                    i = e.isEquivalent(this.pairs);\r\n                    break\r\n                }\r\n                n = e.isEquivalent(this.pairs), r++\r\n            }\r\n            i || n || Jt.isPartialRow(this.pairs, this.rows) || (this.rows.push(r, new jt(this.pairs, t, e)), this.removePartialRows(this.pairs, this.rows))\r\n        }\r\n        removePartialRows(t, e) {\r\n            for (let r of e)\r\n                if (r.getPairs().length !== t.length)\r\n                    for (let e of r.getPairs())\r\n                        for (let r of t)\r\n                            if (Qt.equals(e, r)) break\r\n        }\r\n        static isPartialRow(t, e) {\r\n            for (let r of e) {\r\n                let e = !0;\r\n                for (let n of t) {\r\n                    let t = !1;\r\n                    for (let e of r.getPairs())\r\n                        if (n.equals(e)) {\r\n                            t = !0;\r\n                            break\r\n                        } if (!t) {\r\n                        e = !1;\r\n                        break\r\n                    }\r\n                }\r\n                if (e) return !0\r\n            }\r\n            return !1\r\n        }\r\n        getRows() {\r\n            return this.rows\r\n        }\r\n        static constructResult(t) {\r\n            let e = function(t) {\r\n                        try {\r\n                            if (t.get(1)) return new Ht(t);\r\n                            if (!t.get(2)) return new Gt(t);\r\n                            switch (xt.extractNumericValueFromBitArray(t, 1, 4)) {\r\n                                case 4:\r\n                                    return new zt(t);\r\n                                case 5:\r\n                                    return new Yt(t)\r\n                            }\r\n                            switch (xt.extractNumericValueFromBitArray(t, 1, 5)) {\r\n                                case 12:\r\n                                    return new Zt(t);\r\n                                case 13:\r\n                                    return new Kt(t)\r\n                            }\r\n                            switch (xt.extractNumericValueFromBitArray(t, 1, 7)) {\r\n                                case 56:\r\n                                    return new qt(t, \"310\", \"11\");\r\n                                case 57:\r\n                                    return new qt(t, \"320\", \"11\");\r\n                                case 58:\r\n                                    return new qt(t, \"310\", \"13\");\r\n                                case 59:\r\n                                    return new qt(t, \"320\", \"13\");\r\n                                case 60:\r\n                                    return new qt(t, \"310\", \"15\");\r\n                                case 61:\r\n                                    return new qt(t, \"320\", \"15\");\r\n                                case 62:\r\n                                    return new qt(t, \"310\", \"17\");\r\n                                case 63:\r\n                                    return new qt(t, \"320\", \"17\")\r\n                            }\r\n                        } catch (e) {\r\n                            throw console.log(e), new j(\"unknown decoder: \" + t)\r\n                        }\r\n                    }(bt.buildBitArray(t)).parseInformation(),\r\n                    r = t[0].getFinderPattern().getResultPoints(),\r\n                    n = t[t.length - 1].getFinderPattern().getResultPoints(),\r\n                    i = [r[0], r[1], n[0], n[1]];\r\n            return new F(e, null, null, i, k.RSS_EXPANDED, null)\r\n        }\r\n        checkChecksum() {\r\n            let t = this.pairs.get(0),\r\n                    e = t.getLeftChar(),\r\n                    r = t.getRightChar();\r\n            if (null == r) return !1;\r\n            let n = r.getChecksumPortion(),\r\n                    i = 2;\r\n            for (let t = 1; t < this.pairs.size(); ++t) {\r\n                let e = this.pairs.get(t);\r\n                n += e.getLeftChar().getChecksumPortion(), i++;\r\n                let r = e.getRightChar();\r\n                null != r && (n += r.getChecksumPortion(), i++)\r\n            }\r\n            return 211 * (i - 4) + (n %= 211) == e.getValue()\r\n        }\r\n        static getNextSecondBar(t, e) {\r\n            let r;\r\n            return t.get(e) ? (r = t.getNextUnset(e), r = t.getNextSet(r)) : (r = t.getNextSet(e), r = t.getNextUnset(r)), r\r\n        }\r\n        retrieveNextPair(t, e, r) {\r\n            let n, i = e.length % 2 == 0;\r\n            this.startFromEven && (i = !i);\r\n            let s = !0,\r\n                    o = -1;\r\n            do {\r\n                this.findNextPair(t, e, o), null == (n = this.parseFoundFinderPattern(t, r, i)) ? o = Jt.getNextSecondBar(t, this.startEnd[0]) : s = !1\r\n            } while (s);\r\n            let a, l = this.decodeDataCharacter(t, n, i, !0);\r\n            if (!this.isEmptyPair(e) && e[e.length - 1].mustBeLast()) throw new R;\r\n            try {\r\n                a = this.decodeDataCharacter(t, n, i, !1)\r\n            } catch (t) {\r\n                a = null, this.verbose && console.log(t)\r\n            }\r\n            return new Qt(l, a, n, !0)\r\n        }\r\n        isEmptyPair(t) {\r\n            return 0 === t.length\r\n        }\r\n        findNextPair(t, e, r) {\r\n            let n = this.getDecodeFinderCounters();\r\n            n[0] = 0, n[1] = 0, n[2] = 0, n[3] = 0;\r\n            let i, s = t.getSize();\r\n            if (r >= 0) i = r;\r\n            else if (this.isEmptyPair(e)) i = 0;\r\n            else {\r\n                i = e[e.length - 1].getFinderPattern().getStartEnd()[1]\r\n            }\r\n            let o = e.length % 2 != 0;\r\n            this.startFromEven && (o = !o);\r\n            let a = !1;\r\n            for (; i < s && (a = !t.get(i));) i++;\r\n            let l = 0,\r\n                    h = i;\r\n            for (let e = i; e < s; e++)\r\n                if (t.get(e) != a) n[l]++;\r\n                else {\r\n                    if (3 == l) {\r\n                        if (o && Jt.reverseCounters(n), Jt.isFinderPattern(n)) return this.startEnd[0] = h, void(this.startEnd[1] = e);\r\n                        o && Jt.reverseCounters(n), h += n[0] + n[1], n[0] = n[2], n[1] = n[3], n[2] = 0, n[3] = 0, l--\r\n                    } else l++;\r\n                    n[l] = 1, a = !a\r\n                } throw new R\r\n        }\r\n        static reverseCounters(t) {\r\n            let e = t.length;\r\n            for (let r = 0; r < e / 2; ++r) {\r\n                let n = t[r];\r\n                t[r] = t[e - r - 1], t[e - r - 1] = n\r\n            }\r\n        }\r\n        parseFoundFinderPattern(t, e, r) {\r\n            let n, i, s;\r\n            if (r) {\r\n                let e = this.startEnd[0] - 1;\r\n                for (; e >= 0 && !t.get(e);) e--;\r\n                e++, n = this.startEnd[0] - e, i = e, s = this.startEnd[1]\r\n            } else i = this.startEnd[0], n = (s = t.getNextUnset(this.startEnd[1] + 1)) - this.startEnd[1];\r\n            let o, a = this.getDecodeFinderCounters();\r\n            c.arraycopy(a, 0, a, 1, a.length - 1), a[0] = n;\r\n            try {\r\n                o = this.parseFinderValue(a, Jt.FINDER_PATTERNS)\r\n            } catch (t) {\r\n                return null\r\n            }\r\n            return new Ot(o, [i, s], i, s, e)\r\n        }\r\n        decodeDataCharacter(t, e, r, n) {\r\n            let i = this.getDataCharacterCounters();\r\n            for (let t = 0; t < i.length; t++) i[t] = 0;\r\n            if (n) Jt.recordPatternInReverse(t, e.getStartEnd()[0], i);\r\n            else {\r\n                Jt.recordPattern(t, e.getStartEnd()[1], i);\r\n                for (let t = 0, e = i.length - 1; t < e; t++, e--) {\r\n                    let r = i[t];\r\n                    i[t] = i[e], i[e] = r\r\n                }\r\n            }\r\n            let s = tt.sum(new Int32Array(i)) / 17,\r\n                    o = (e.getStartEnd()[1] - e.getStartEnd()[0]) / 15;\r\n            if (Math.abs(s - o) / o > .3) throw new R;\r\n            let a = this.getOddCounts(),\r\n                    l = this.getEvenCounts(),\r\n                    h = this.getOddRoundingErrors(),\r\n                    c = this.getEvenRoundingErrors();\r\n            for (let t = 0; t < i.length; t++) {\r\n                let e = 1 * i[t] / s,\r\n                        r = e + .5;\r\n                if (r < 1) {\r\n                    if (e < .3) throw new R;\r\n                    r = 1\r\n                } else if (r > 8) {\r\n                    if (e > 8.7) throw new R;\r\n                    r = 8\r\n                }\r\n                let n = t / 2;\r\n                0 == (1 & t) ? (a[n] = r, h[n] = e - r) : (l[n] = r, c[n] = e - r)\r\n            }\r\n            this.adjustOddEvenCounts(17);\r\n            let u = 4 * e.getValue() + (r ? 0 : 2) + (n ? 0 : 1) - 1,\r\n                    d = 0,\r\n                    g = 0;\r\n            for (let t = a.length - 1; t >= 0; t--) {\r\n                if (Jt.isNotA1left(e, r, n)) {\r\n                    let e = Jt.WEIGHTS[u][2 * t];\r\n                    g += a[t] * e\r\n                }\r\n                d += a[t]\r\n            }\r\n            let f = 0;\r\n            for (let t = l.length - 1; t >= 0; t--)\r\n                if (Jt.isNotA1left(e, r, n)) {\r\n                    let e = Jt.WEIGHTS[u][2 * t + 1];\r\n                    f += l[t] * e\r\n                } let w = g + f;\r\n            if (0 != (1 & d) || d > 13 || d < 4) throw new R;\r\n            let A = (13 - d) / 2,\r\n                    C = Jt.SYMBOL_WIDEST[A],\r\n                    E = 9 - C,\r\n                    m = Mt.getRSSvalue(a, C, !0),\r\n                    _ = Mt.getRSSvalue(l, E, !1),\r\n                    I = Jt.EVEN_TOTAL_SUBSET[A],\r\n                    S = Jt.GSUM[A];\r\n            return new yt(m * I + _ + S, w)\r\n        }\r\n        static isNotA1left(t, e, r) {\r\n            return !(0 == t.getValue() && e && r)\r\n        }\r\n        adjustOddEvenCounts(t) {\r\n            let e = tt.sum(new Int32Array(this.getOddCounts())),\r\n                    r = tt.sum(new Int32Array(this.getEvenCounts())),\r\n                    n = !1,\r\n                    i = !1;\r\n            e > 13 ? i = !0 : e < 4 && (n = !0);\r\n            let s = !1,\r\n                    o = !1;\r\n            r > 13 ? o = !0 : r < 4 && (s = !0);\r\n            let a = e + r - t,\r\n                    l = 1 == (1 & e),\r\n                    h = 0 == (1 & r);\r\n            if (1 == a)\r\n                if (l) {\r\n                    if (h) throw new R;\r\n                    i = !0\r\n                } else {\r\n                    if (!h) throw new R;\r\n                    o = !0\r\n                }\r\n            else if (-1 == a)\r\n                if (l) {\r\n                    if (h) throw new R;\r\n                    n = !0\r\n                } else {\r\n                    if (!h) throw new R;\r\n                    s = !0\r\n                }\r\n            else {\r\n                if (0 != a) throw new R;\r\n                if (l) {\r\n                    if (!h) throw new R;\r\n                    e < r ? (n = !0, o = !0) : (i = !0, s = !0)\r\n                } else if (h) throw new R\r\n            }\r\n            if (n) {\r\n                if (i) throw new R;\r\n                Jt.increment(this.getOddCounts(), this.getOddRoundingErrors())\r\n            }\r\n            if (i && Jt.decrement(this.getOddCounts(), this.getOddRoundingErrors()), s) {\r\n                if (o) throw new R;\r\n                Jt.increment(this.getEvenCounts(), this.getOddRoundingErrors())\r\n            }\r\n            o && Jt.decrement(this.getEvenCounts(), this.getEvenRoundingErrors())\r\n        }\r\n    }\r\n    Jt.SYMBOL_WIDEST = [7, 5, 4, 3, 1], Jt.EVEN_TOTAL_SUBSET = [4, 20, 52, 104, 204], Jt.GSUM = [0, 348, 1388, 2948, 3988], Jt.FINDER_PATTERNS = [Int32Array.from([1, 8, 4, 1]), Int32Array.from([3, 6, 4, 1]), Int32Array.from([3, 4, 6, 1]), Int32Array.from([3, 2, 8, 1]), Int32Array.from([2, 6, 5, 1]), Int32Array.from([2, 2, 9, 1])], Jt.WEIGHTS = [\r\n        [1, 3, 9, 27, 81, 32, 96, 77],\r\n        [20, 60, 180, 118, 143, 7, 21, 63],\r\n        [189, 145, 13, 39, 117, 140, 209, 205],\r\n        [193, 157, 49, 147, 19, 57, 171, 91],\r\n        [62, 186, 136, 197, 169, 85, 44, 132],\r\n        [185, 133, 188, 142, 4, 12, 36, 108],\r\n        [113, 128, 173, 97, 80, 29, 87, 50],\r\n        [150, 28, 84, 41, 123, 158, 52, 156],\r\n        [46, 138, 203, 187, 139, 206, 196, 166],\r\n        [76, 17, 51, 153, 37, 111, 122, 155],\r\n        [43, 129, 176, 106, 107, 110, 119, 146],\r\n        [16, 48, 144, 10, 30, 90, 59, 177],\r\n        [109, 116, 137, 200, 178, 112, 125, 164],\r\n        [70, 210, 208, 202, 184, 130, 179, 115],\r\n        [134, 191, 151, 31, 93, 68, 204, 190],\r\n        [148, 22, 66, 198, 172, 94, 71, 2],\r\n        [6, 18, 54, 162, 64, 192, 154, 40],\r\n        [120, 149, 25, 75, 14, 42, 126, 167],\r\n        [79, 26, 78, 23, 69, 207, 199, 175],\r\n        [103, 98, 83, 38, 114, 131, 182, 124],\r\n        [161, 61, 183, 127, 170, 88, 53, 159],\r\n        [55, 165, 73, 8, 24, 72, 5, 15],\r\n        [45, 135, 194, 160, 58, 174, 100, 89]\r\n    ], Jt.FINDER_PAT_A = 0, Jt.FINDER_PAT_B = 1, Jt.FINDER_PAT_C = 2, Jt.FINDER_PAT_D = 3, Jt.FINDER_PAT_E = 4, Jt.FINDER_PAT_F = 5, Jt.FINDER_PATTERN_SEQUENCES = [\r\n        [Jt.FINDER_PAT_A, Jt.FINDER_PAT_A],\r\n        [Jt.FINDER_PAT_A, Jt.FINDER_PAT_B, Jt.FINDER_PAT_B],\r\n        [Jt.FINDER_PAT_A, Jt.FINDER_PAT_C, Jt.FINDER_PAT_B, Jt.FINDER_PAT_D],\r\n        [Jt.FINDER_PAT_A, Jt.FINDER_PAT_E, Jt.FINDER_PAT_B, Jt.FINDER_PAT_D, Jt.FINDER_PAT_C],\r\n        [Jt.FINDER_PAT_A, Jt.FINDER_PAT_E, Jt.FINDER_PAT_B, Jt.FINDER_PAT_D, Jt.FINDER_PAT_D, Jt.FINDER_PAT_F],\r\n        [Jt.FINDER_PAT_A, Jt.FINDER_PAT_E, Jt.FINDER_PAT_B, Jt.FINDER_PAT_D, Jt.FINDER_PAT_E, Jt.FINDER_PAT_F, Jt.FINDER_PAT_F],\r\n        [Jt.FINDER_PAT_A, Jt.FINDER_PAT_A, Jt.FINDER_PAT_B, Jt.FINDER_PAT_B, Jt.FINDER_PAT_C, Jt.FINDER_PAT_C, Jt.FINDER_PAT_D, Jt.FINDER_PAT_D],\r\n        [Jt.FINDER_PAT_A, Jt.FINDER_PAT_A, Jt.FINDER_PAT_B, Jt.FINDER_PAT_B, Jt.FINDER_PAT_C, Jt.FINDER_PAT_C, Jt.FINDER_PAT_D, Jt.FINDER_PAT_E, Jt.FINDER_PAT_E],\r\n        [Jt.FINDER_PAT_A, Jt.FINDER_PAT_A, Jt.FINDER_PAT_B, Jt.FINDER_PAT_B, Jt.FINDER_PAT_C, Jt.FINDER_PAT_C, Jt.FINDER_PAT_D, Jt.FINDER_PAT_E, Jt.FINDER_PAT_F, Jt.FINDER_PAT_F],\r\n        [Jt.FINDER_PAT_A, Jt.FINDER_PAT_A, Jt.FINDER_PAT_B, Jt.FINDER_PAT_B, Jt.FINDER_PAT_C, Jt.FINDER_PAT_D, Jt.FINDER_PAT_D, Jt.FINDER_PAT_E, Jt.FINDER_PAT_E, Jt.FINDER_PAT_F, Jt.FINDER_PAT_F]\r\n    ], Jt.MAX_PAIRS = 11;\r\n    class $t extends yt {\r\n        constructor(t, e, r) {\r\n            super(t, e), this.count = 0, this.finderPattern = r\r\n        }\r\n        getFinderPattern() {\r\n            return this.finderPattern\r\n        }\r\n        getCount() {\r\n            return this.count\r\n        }\r\n        incrementCount() {\r\n            this.count++\r\n        }\r\n    }\r\n    class te extends Dt {\r\n        constructor() {\r\n            super(...arguments), this.possibleLeftPairs = [], this.possibleRightPairs = []\r\n        }\r\n        decodeRow(t, e, r) {\r\n            const n = this.decodePair(e, !1, t, r);\r\n            te.addOrTally(this.possibleLeftPairs, n), e.reverse();\r\n            let i = this.decodePair(e, !0, t, r);\r\n            te.addOrTally(this.possibleRightPairs, i), e.reverse();\r\n            for (let t of this.possibleLeftPairs)\r\n                if (t.getCount() > 1)\r\n                    for (let e of this.possibleRightPairs)\r\n                        if (e.getCount() > 1 && te.checkChecksum(t, e)) return te.constructResult(t, e);\r\n            throw new R\r\n        }\r\n        static addOrTally(t, e) {\r\n            if (null == e) return;\r\n            let r = !1;\r\n            for (let n of t)\r\n                if (n.getValue() === e.getValue()) {\r\n                    n.incrementCount(), r = !0;\r\n                    break\r\n                } r || t.push(e)\r\n        }\r\n        reset() {\r\n            this.possibleLeftPairs.length = 0, this.possibleRightPairs.length = 0\r\n        }\r\n        static constructResult(t, e) {\r\n            let r = 4537077 * t.getValue() + e.getValue(),\r\n                    n = new String(r).toString(),\r\n                    i = new p;\r\n            for (let t = 13 - n.length; t > 0; t--) i.append(\"0\");\r\n            i.append(n);\r\n            let s = 0;\r\n            for (let t = 0; t < 13; t++) {\r\n                let e = i.charAt(t).charCodeAt(0) - \"0\".charCodeAt(0);\r\n                s += 0 == (1 & t) ? 3 * e : e\r\n            }\r\n            10 === (s = 10 - s % 10) && (s = 0), i.append(s.toString());\r\n            let o = t.getFinderPattern().getResultPoints(),\r\n                    a = e.getFinderPattern().getResultPoints();\r\n            return new F(i.toString(), null, 0, [o[0], o[1], a[0], a[1]], k.RSS_14, (new Date).getTime())\r\n        }\r\n        static checkChecksum(t, e) {\r\n            let r = (t.getChecksumPortion() + 16 * e.getChecksumPortion()) % 79,\r\n                    n = 9 * t.getFinderPattern().getValue() + e.getFinderPattern().getValue();\r\n            return n > 72 && n--, n > 8 && n--, r === n\r\n        }\r\n        decodePair(t, e, r, n) {\r\n            try {\r\n                let i = this.findFinderPattern(t, e),\r\n                        s = this.parseFoundFinderPattern(t, r, e, i),\r\n                        o = null == n ? null : n.get(C.NEED_RESULT_POINT_CALLBACK);\r\n                if (null != o) {\r\n                    let n = (i[0] + i[1]) / 2;\r\n                    e && (n = t.getSize() - 1 - n), o.foundPossibleResultPoint(new rt(n, r))\r\n                }\r\n                let a = this.decodeDataCharacter(t, s, !0),\r\n                        l = this.decodeDataCharacter(t, s, !1);\r\n                return new $t(1597 * a.getValue() + l.getValue(), a.getChecksumPortion() + 4 * l.getChecksumPortion(), s)\r\n            } catch (t) {\r\n                return null\r\n            }\r\n        }\r\n        decodeDataCharacter(t, e, r) {\r\n            let n = this.getDataCharacterCounters();\r\n            for (let t = 0; t < n.length; t++) n[t] = 0;\r\n            if (r) gt.recordPatternInReverse(t, e.getStartEnd()[0], n);\r\n            else {\r\n                gt.recordPattern(t, e.getStartEnd()[1] + 1, n);\r\n                for (let t = 0, e = n.length - 1; t < e; t++, e--) {\r\n                    let r = n[t];\r\n                    n[t] = n[e], n[e] = r\r\n                }\r\n            }\r\n            let i = r ? 16 : 15,\r\n                    s = tt.sum(new Int32Array(n)) / i,\r\n                    o = this.getOddCounts(),\r\n                    a = this.getEvenCounts(),\r\n                    l = this.getOddRoundingErrors(),\r\n                    h = this.getEvenRoundingErrors();\r\n            for (let t = 0; t < n.length; t++) {\r\n                let e = n[t] / s,\r\n                        r = Math.floor(e + .5);\r\n                r < 1 ? r = 1 : r > 8 && (r = 8);\r\n                let i = Math.floor(t / 2);\r\n                0 == (1 & t) ? (o[i] = r, l[i] = e - r) : (a[i] = r, h[i] = e - r)\r\n            }\r\n            this.adjustOddEvenCounts(r, i);\r\n            let c = 0,\r\n                    u = 0;\r\n            for (let t = o.length - 1; t >= 0; t--) u *= 9, u += o[t], c += o[t];\r\n            let d = 0,\r\n                    g = 0;\r\n            for (let t = a.length - 1; t >= 0; t--) d *= 9, d += a[t], g += a[t];\r\n            let f = u + 3 * d;\r\n            if (r) {\r\n                if (0 != (1 & c) || c > 12 || c < 4) throw new R;\r\n                let t = (12 - c) / 2,\r\n                        e = te.OUTSIDE_ODD_WIDEST[t],\r\n                        r = 9 - e,\r\n                        n = Mt.getRSSvalue(o, e, !1),\r\n                        i = Mt.getRSSvalue(a, r, !0),\r\n                        s = te.OUTSIDE_EVEN_TOTAL_SUBSET[t],\r\n                        l = te.OUTSIDE_GSUM[t];\r\n                return new yt(n * s + i + l, f)\r\n            } {\r\n                if (0 != (1 & g) || g > 10 || g < 4) throw new R;\r\n                let t = (10 - g) / 2,\r\n                        e = te.INSIDE_ODD_WIDEST[t],\r\n                        r = 9 - e,\r\n                        n = Mt.getRSSvalue(o, e, !0),\r\n                        i = Mt.getRSSvalue(a, r, !1),\r\n                        s = te.INSIDE_ODD_TOTAL_SUBSET[t],\r\n                        l = te.INSIDE_GSUM[t];\r\n                return new yt(i * s + n + l, f)\r\n            }\r\n        }\r\n        findFinderPattern(t, e) {\r\n            let r = this.getDecodeFinderCounters();\r\n            r[0] = 0, r[1] = 0, r[2] = 0, r[3] = 0;\r\n            let n = t.getSize(),\r\n                    i = !1,\r\n                    s = 0;\r\n            for (; s < n && e !== (i = !t.get(s));) s++;\r\n            let o = 0,\r\n                    a = s;\r\n            for (let e = s; e < n; e++)\r\n                if (t.get(e) !== i) r[o]++;\r\n                else {\r\n                    if (3 === o) {\r\n                        if (Dt.isFinderPattern(r)) return [a, e];\r\n                        a += r[0] + r[1], r[0] = r[2], r[1] = r[3], r[2] = 0, r[3] = 0, o--\r\n                    } else o++;\r\n                    r[o] = 1, i = !i\r\n                } throw new R\r\n        }\r\n        parseFoundFinderPattern(t, e, r, n) {\r\n            let i = t.get(n[0]),\r\n                    s = n[0] - 1;\r\n            for (; s >= 0 && i !== t.get(s);) s--;\r\n            s++;\r\n            const o = n[0] - s,\r\n                    a = this.getDecodeFinderCounters(),\r\n                    l = new Int32Array(a.length);\r\n            c.arraycopy(a, 0, l, 1, a.length - 1), l[0] = o;\r\n            const h = this.parseFinderValue(l, te.FINDER_PATTERNS);\r\n            let u = s,\r\n                    d = n[1];\r\n            return r && (u = t.getSize() - 1 - u, d = t.getSize() - 1 - d), new Ot(h, [s, n[1]], u, d, e)\r\n        }\r\n        adjustOddEvenCounts(t, e) {\r\n            let r = tt.sum(new Int32Array(this.getOddCounts())),\r\n                    n = tt.sum(new Int32Array(this.getEvenCounts())),\r\n                    i = !1,\r\n                    s = !1,\r\n                    o = !1,\r\n                    a = !1;\r\n            t ? (r > 12 ? s = !0 : r < 4 && (i = !0), n > 12 ? a = !0 : n < 4 && (o = !0)) : (r > 11 ? s = !0 : r < 5 && (i = !0), n > 10 ? a = !0 : n < 4 && (o = !0));\r\n            let l = r + n - e,\r\n                    h = (1 & r) == (t ? 1 : 0),\r\n                    c = 1 == (1 & n);\r\n            if (1 === l)\r\n                if (h) {\r\n                    if (c) throw new R;\r\n                    s = !0\r\n                } else {\r\n                    if (!c) throw new R;\r\n                    a = !0\r\n                }\r\n            else if (-1 === l)\r\n                if (h) {\r\n                    if (c) throw new R;\r\n                    i = !0\r\n                } else {\r\n                    if (!c) throw new R;\r\n                    o = !0\r\n                }\r\n            else {\r\n                if (0 !== l) throw new R;\r\n                if (h) {\r\n                    if (!c) throw new R;\r\n                    r < n ? (i = !0, a = !0) : (s = !0, o = !0)\r\n                } else if (c) throw new R\r\n            }\r\n            if (i) {\r\n                if (s) throw new R;\r\n                Dt.increment(this.getOddCounts(), this.getOddRoundingErrors())\r\n            }\r\n            if (s && Dt.decrement(this.getOddCounts(), this.getOddRoundingErrors()), o) {\r\n                if (a) throw new R;\r\n                Dt.increment(this.getEvenCounts(), this.getOddRoundingErrors())\r\n            }\r\n            a && Dt.decrement(this.getEvenCounts(), this.getEvenRoundingErrors())\r\n        }\r\n    }\r\n    te.OUTSIDE_EVEN_TOTAL_SUBSET = [1, 10, 34, 70, 126], te.INSIDE_ODD_TOTAL_SUBSET = [4, 20, 48, 81], te.OUTSIDE_GSUM = [0, 161, 961, 2015, 2715], te.INSIDE_GSUM = [0, 336, 1036, 1516], te.OUTSIDE_ODD_WIDEST = [8, 6, 4, 3, 1], te.INSIDE_ODD_WIDEST = [2, 4, 6, 8], te.FINDER_PATTERNS = [Int32Array.from([3, 8, 2, 1]), Int32Array.from([3, 5, 5, 1]), Int32Array.from([3, 3, 7, 1]), Int32Array.from([3, 1, 9, 1]), Int32Array.from([2, 7, 4, 1]), Int32Array.from([2, 5, 6, 1]), Int32Array.from([2, 3, 8, 1]), Int32Array.from([1, 5, 7, 1]), Int32Array.from([1, 3, 9, 1])];\r\n    class ee extends gt {\r\n        constructor(t, e) {\r\n            super(), this.readers = [], this.verbose = !0 === e;\r\n            const r = t ? t.get(C.POSSIBLE_FORMATS) : null,\r\n                    n = t && void 0 !== t.get(C.ASSUME_CODE_39_CHECK_DIGIT);\r\n            r && ((r.includes(k.EAN_13) || r.includes(k.UPC_A) || r.includes(k.EAN_8) || r.includes(k.UPC_E)) && this.readers.push(new Nt(t)), r.includes(k.CODE_39) && this.readers.push(new wt(n)), r.includes(k.CODE_128) && this.readers.push(new ft), r.includes(k.ITF) && this.readers.push(new At), r.includes(k.RSS_14) && this.readers.push(new te), r.includes(k.RSS_EXPANDED) && this.readers.push(new Jt(this.verbose))), 0 === this.readers.length && (this.readers.push(new Nt(t)), this.readers.push(new wt), this.readers.push(new Nt(t)), this.readers.push(new ft), this.readers.push(new At), this.readers.push(new te), this.readers.push(new Jt(this.verbose)))\r\n        }\r\n        decodeRow(t, e, r) {\r\n            for (let n = 0; n < this.readers.length; n++) try {\r\n                return this.readers[n].decodeRow(t, e, r)\r\n            } catch (t) {}\r\n            throw new R\r\n        }\r\n        reset() {\r\n            this.readers.forEach(t => t.reset())\r\n        }\r\n    }\r\n    class re {\r\n        constructor(t, e, r) {\r\n            this.ecCodewords = t, this.ecBlocks = [e], r && this.ecBlocks.push(r)\r\n        }\r\n        getECCodewords() {\r\n            return this.ecCodewords\r\n        }\r\n        getECBlocks() {\r\n            return this.ecBlocks\r\n        }\r\n    }\r\n    class ne {\r\n        constructor(t, e) {\r\n            this.count = t, this.dataCodewords = e\r\n        }\r\n        getCount() {\r\n            return this.count\r\n        }\r\n        getDataCodewords() {\r\n            return this.dataCodewords\r\n        }\r\n    }\r\n    class ie {\r\n        constructor(t, e, r, n, i, s) {\r\n            this.versionNumber = t, this.symbolSizeRows = e, this.symbolSizeColumns = r, this.dataRegionSizeRows = n, this.dataRegionSizeColumns = i, this.ecBlocks = s;\r\n            let o = 0;\r\n            const a = s.getECCodewords(),\r\n                    l = s.getECBlocks();\r\n            for (let t of l) o += t.getCount() * (t.getDataCodewords() + a);\r\n            this.totalCodewords = o\r\n        }\r\n        getVersionNumber() {\r\n            return this.versionNumber\r\n        }\r\n        getSymbolSizeRows() {\r\n            return this.symbolSizeRows\r\n        }\r\n        getSymbolSizeColumns() {\r\n            return this.symbolSizeColumns\r\n        }\r\n        getDataRegionSizeRows() {\r\n            return this.dataRegionSizeRows\r\n        }\r\n        getDataRegionSizeColumns() {\r\n            return this.dataRegionSizeColumns\r\n        }\r\n        getTotalCodewords() {\r\n            return this.totalCodewords\r\n        }\r\n        getECBlocks() {\r\n            return this.ecBlocks\r\n        }\r\n        static getVersionForDimensions(t, e) {\r\n            if (0 != (1 & t) || 0 != (1 & e)) throw new E;\r\n            for (let r of ie.VERSIONS)\r\n                if (r.symbolSizeRows === t && r.symbolSizeColumns === e) return r;\r\n            throw new E\r\n        }\r\n        toString() {\r\n            return \"\" + this.versionNumber\r\n        }\r\n        static buildVersions() {\r\n            return [new ie(1, 10, 10, 8, 8, new re(5, new ne(1, 3))), new ie(2, 12, 12, 10, 10, new re(7, new ne(1, 5))), new ie(3, 14, 14, 12, 12, new re(10, new ne(1, 8))), new ie(4, 16, 16, 14, 14, new re(12, new ne(1, 12))), new ie(5, 18, 18, 16, 16, new re(14, new ne(1, 18))), new ie(6, 20, 20, 18, 18, new re(18, new ne(1, 22))), new ie(7, 22, 22, 20, 20, new re(20, new ne(1, 30))), new ie(8, 24, 24, 22, 22, new re(24, new ne(1, 36))), new ie(9, 26, 26, 24, 24, new re(28, new ne(1, 44))), new ie(10, 32, 32, 14, 14, new re(36, new ne(1, 62))), new ie(11, 36, 36, 16, 16, new re(42, new ne(1, 86))), new ie(12, 40, 40, 18, 18, new re(48, new ne(1, 114))), new ie(13, 44, 44, 20, 20, new re(56, new ne(1, 144))), new ie(14, 48, 48, 22, 22, new re(68, new ne(1, 174))), new ie(15, 52, 52, 24, 24, new re(42, new ne(2, 102))), new ie(16, 64, 64, 14, 14, new re(56, new ne(2, 140))), new ie(17, 72, 72, 16, 16, new re(36, new ne(4, 92))), new ie(18, 80, 80, 18, 18, new re(48, new ne(4, 114))), new ie(19, 88, 88, 20, 20, new re(56, new ne(4, 144))), new ie(20, 96, 96, 22, 22, new re(68, new ne(4, 174))), new ie(21, 104, 104, 24, 24, new re(56, new ne(6, 136))), new ie(22, 120, 120, 18, 18, new re(68, new ne(6, 175))), new ie(23, 132, 132, 20, 20, new re(62, new ne(8, 163))), new ie(24, 144, 144, 22, 22, new re(62, new ne(8, 156), new ne(2, 155))), new ie(25, 8, 18, 6, 16, new re(7, new ne(1, 5))), new ie(26, 8, 32, 6, 14, new re(11, new ne(1, 10))), new ie(27, 12, 26, 10, 24, new re(14, new ne(1, 16))), new ie(28, 12, 36, 10, 16, new re(18, new ne(1, 22))), new ie(29, 16, 36, 14, 16, new re(24, new ne(1, 32))), new ie(30, 16, 48, 14, 22, new re(28, new ne(1, 49)))]\r\n        }\r\n    }\r\n    ie.VERSIONS = ie.buildVersions();\r\n    class se {\r\n        constructor(t) {\r\n            const e = t.getHeight();\r\n            if (e < 8 || e > 144 || 0 != (1 & e)) throw new E;\r\n            this.version = se.readVersion(t), this.mappingBitMatrix = this.extractDataRegion(t), this.readMappingMatrix = new T(this.mappingBitMatrix.getWidth(), this.mappingBitMatrix.getHeight())\r\n        }\r\n        getVersion() {\r\n            return this.version\r\n        }\r\n        static readVersion(t) {\r\n            const e = t.getHeight(),\r\n                    r = t.getWidth();\r\n            return ie.getVersionForDimensions(e, r)\r\n        }\r\n        readCodewords() {\r\n            const t = new Int8Array(this.version.getTotalCodewords());\r\n            let e = 0,\r\n                    r = 4,\r\n                    n = 0;\r\n            const i = this.mappingBitMatrix.getHeight(),\r\n                    s = this.mappingBitMatrix.getWidth();\r\n            let o = !1,\r\n                    a = !1,\r\n                    l = !1,\r\n                    h = !1;\r\n            do {\r\n                if (r !== i || 0 !== n || o)\r\n                    if (r !== i - 2 || 0 !== n || 0 == (3 & s) || a)\r\n                        if (r !== i + 4 || 2 !== n || 0 != (7 & s) || l)\r\n                            if (r !== i - 2 || 0 !== n || 4 != (7 & s) || h) {\r\n                                do {\r\n                                    r < i && n >= 0 && !this.readMappingMatrix.get(n, r) && (t[e++] = 255 & this.readUtah(r, n, i, s)), r -= 2, n += 2\r\n                                } while (r >= 0 && n < s);\r\n                                r += 1, n += 3;\r\n                                do {\r\n                                    r >= 0 && n < s && !this.readMappingMatrix.get(n, r) && (t[e++] = 255 & this.readUtah(r, n, i, s)), r += 2, n -= 2\r\n                                } while (r < i && n >= 0);\r\n                                r += 3, n += 1\r\n                            } else t[e++] = 255 & this.readCorner4(i, s), r -= 2, n += 2, h = !0;\r\n                        else t[e++] = 255 & this.readCorner3(i, s), r -= 2, n += 2, l = !0;\r\n                    else t[e++] = 255 & this.readCorner2(i, s), r -= 2, n += 2, a = !0;\r\n                else t[e++] = 255 & this.readCorner1(i, s), r -= 2, n += 2, o = !0\r\n            } while (r < i || n < s);\r\n            if (e !== this.version.getTotalCodewords()) throw new E;\r\n            return t\r\n        }\r\n        readModule(t, e, r, n) {\r\n            return t < 0 && (t += r, e += 4 - (r + 4 & 7)), e < 0 && (e += n, t += 4 - (n + 4 & 7)), this.readMappingMatrix.set(e, t), this.mappingBitMatrix.get(e, t)\r\n        }\r\n        readUtah(t, e, r, n) {\r\n            let i = 0;\r\n            return this.readModule(t - 2, e - 2, r, n) && (i |= 1), i <<= 1, this.readModule(t - 2, e - 1, r, n) && (i |= 1), i <<= 1, this.readModule(t - 1, e - 2, r, n) && (i |= 1), i <<= 1, this.readModule(t - 1, e - 1, r, n) && (i |= 1), i <<= 1, this.readModule(t - 1, e, r, n) && (i |= 1), i <<= 1, this.readModule(t, e - 2, r, n) && (i |= 1), i <<= 1, this.readModule(t, e - 1, r, n) && (i |= 1), i <<= 1, this.readModule(t, e, r, n) && (i |= 1), i\r\n        }\r\n        readCorner1(t, e) {\r\n            let r = 0;\r\n            return this.readModule(t - 1, 0, t, e) && (r |= 1), r <<= 1, this.readModule(t - 1, 1, t, e) && (r |= 1), r <<= 1, this.readModule(t - 1, 2, t, e) && (r |= 1), r <<= 1, this.readModule(0, e - 2, t, e) && (r |= 1), r <<= 1, this.readModule(0, e - 1, t, e) && (r |= 1), r <<= 1, this.readModule(1, e - 1, t, e) && (r |= 1), r <<= 1, this.readModule(2, e - 1, t, e) && (r |= 1), r <<= 1, this.readModule(3, e - 1, t, e) && (r |= 1), r\r\n        }\r\n        readCorner2(t, e) {\r\n            let r = 0;\r\n            return this.readModule(t - 3, 0, t, e) && (r |= 1), r <<= 1, this.readModule(t - 2, 0, t, e) && (r |= 1), r <<= 1, this.readModule(t - 1, 0, t, e) && (r |= 1), r <<= 1, this.readModule(0, e - 4, t, e) && (r |= 1), r <<= 1, this.readModule(0, e - 3, t, e) && (r |= 1), r <<= 1, this.readModule(0, e - 2, t, e) && (r |= 1), r <<= 1, this.readModule(0, e - 1, t, e) && (r |= 1), r <<= 1, this.readModule(1, e - 1, t, e) && (r |= 1), r\r\n        }\r\n        readCorner3(t, e) {\r\n            let r = 0;\r\n            return this.readModule(t - 1, 0, t, e) && (r |= 1), r <<= 1, this.readModule(t - 1, e - 1, t, e) && (r |= 1), r <<= 1, this.readModule(0, e - 3, t, e) && (r |= 1), r <<= 1, this.readModule(0, e - 2, t, e) && (r |= 1), r <<= 1, this.readModule(0, e - 1, t, e) && (r |= 1), r <<= 1, this.readModule(1, e - 3, t, e) && (r |= 1), r <<= 1, this.readModule(1, e - 2, t, e) && (r |= 1), r <<= 1, this.readModule(1, e - 1, t, e) && (r |= 1), r\r\n        }\r\n        readCorner4(t, e) {\r\n            let r = 0;\r\n            return this.readModule(t - 3, 0, t, e) && (r |= 1), r <<= 1, this.readModule(t - 2, 0, t, e) && (r |= 1), r <<= 1, this.readModule(t - 1, 0, t, e) && (r |= 1), r <<= 1, this.readModule(0, e - 2, t, e) && (r |= 1), r <<= 1, this.readModule(0, e - 1, t, e) && (r |= 1), r <<= 1, this.readModule(1, e - 1, t, e) && (r |= 1), r <<= 1, this.readModule(2, e - 1, t, e) && (r |= 1), r <<= 1, this.readModule(3, e - 1, t, e) && (r |= 1), r\r\n        }\r\n        extractDataRegion(t) {\r\n            const e = this.version.getSymbolSizeRows(),\r\n                    r = this.version.getSymbolSizeColumns();\r\n            if (t.getHeight() !== e) throw new o(\"Dimension of bitMatrix must match the version size\");\r\n            const n = this.version.getDataRegionSizeRows(),\r\n                    i = this.version.getDataRegionSizeColumns(),\r\n                    s = e / n | 0,\r\n                    a = r / i | 0,\r\n                    l = new T(a * i, s * n);\r\n            for (let e = 0; e < s; ++e) {\r\n                const r = e * n;\r\n                for (let s = 0; s < a; ++s) {\r\n                    const o = s * i;\r\n                    for (let a = 0; a < n; ++a) {\r\n                        const h = e * (n + 2) + 1 + a,\r\n                                c = r + a;\r\n                        for (let e = 0; e < i; ++e) {\r\n                            const r = s * (i + 2) + 1 + e;\r\n                            if (t.get(r, h)) {\r\n                                const t = o + e;\r\n                                l.set(t, c)\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n            return l\r\n        }\r\n    }\r\n    class oe {\r\n        constructor(t, e) {\r\n            this.numDataCodewords = t, this.codewords = e\r\n        }\r\n        static getDataBlocks(t, e) {\r\n            const r = e.getECBlocks();\r\n            let n = 0;\r\n            const i = r.getECBlocks();\r\n            for (let t of i) n += t.getCount();\r\n            const s = new Array(n);\r\n            let a = 0;\r\n            for (let t of i)\r\n                for (let e = 0; e < t.getCount(); e++) {\r\n                    const e = t.getDataCodewords(),\r\n                            n = r.getECCodewords() + e;\r\n                    s[a++] = new oe(e, new Uint8Array(n))\r\n                }\r\n            const l = s[0].codewords.length - r.getECCodewords(),\r\n                    h = l - 1;\r\n            let c = 0;\r\n            for (let e = 0; e < h; e++)\r\n                for (let r = 0; r < a; r++) s[r].codewords[e] = t[c++];\r\n            const u = 24 === e.getVersionNumber(),\r\n                    d = u ? 8 : a;\r\n            for (let e = 0; e < d; e++) s[e].codewords[l - 1] = t[c++];\r\n            const g = s[0].codewords.length;\r\n            for (let e = l; e < g; e++)\r\n                for (let r = 0; r < a; r++) {\r\n                    const n = u ? (r + 8) % a : r,\r\n                            i = u && n > 7 ? e - 1 : e;\r\n                    s[n].codewords[i] = t[c++]\r\n                }\r\n            if (c !== t.length) throw new o;\r\n            return s\r\n        }\r\n        getNumDataCodewords() {\r\n            return this.numDataCodewords\r\n        }\r\n        getCodewords() {\r\n            return this.codewords\r\n        }\r\n    }\r\n    class ae {\r\n        constructor(t) {\r\n            this.bytes = t, this.byteOffset = 0, this.bitOffset = 0\r\n        }\r\n        getBitOffset() {\r\n            return this.bitOffset\r\n        }\r\n        getByteOffset() {\r\n            return this.byteOffset\r\n        }\r\n        readBits(t) {\r\n            if (t < 1 || t > 32 || t > this.available()) throw new o(\"\" + t);\r\n            let e = 0,\r\n                    r = this.bitOffset,\r\n                    n = this.byteOffset;\r\n            const i = this.bytes;\r\n            if (r > 0) {\r\n                const s = 8 - r,\r\n                        o = t < s ? t : s,\r\n                        a = s - o,\r\n                        l = 255 >> 8 - o << a;\r\n                e = (i[n] & l) >> a, t -= o, 8 === (r += o) && (r = 0, n++)\r\n            }\r\n            if (t > 0) {\r\n                for (; t >= 8;) e = e << 8 | 255 & i[n], n++, t -= 8;\r\n                if (t > 0) {\r\n                    const s = 8 - t,\r\n                            o = 255 >> s << s;\r\n                    e = e << t | (i[n] & o) >> s, r += t\r\n                }\r\n            }\r\n            return this.bitOffset = r, this.byteOffset = n, e\r\n        }\r\n        available() {\r\n            return 8 * (this.bytes.length - this.byteOffset) - this.bitOffset\r\n        }\r\n    }! function(t) {\r\n        t[t.PAD_ENCODE = 0] = \"PAD_ENCODE\", t[t.ASCII_ENCODE = 1] = \"ASCII_ENCODE\", t[t.C40_ENCODE = 2] = \"C40_ENCODE\", t[t.TEXT_ENCODE = 3] = \"TEXT_ENCODE\", t[t.ANSIX12_ENCODE = 4] = \"ANSIX12_ENCODE\", t[t.EDIFACT_ENCODE = 5] = \"EDIFACT_ENCODE\", t[t.BASE256_ENCODE = 6] = \"BASE256_ENCODE\"\r\n    }(V || (V = {}));\r\n    class le {\r\n        static decode(t) {\r\n            const e = new ae(t),\r\n                    r = new p,\r\n                    n = new p,\r\n                    i = new Array;\r\n            let s = V.ASCII_ENCODE;\r\n            do {\r\n                if (s === V.ASCII_ENCODE) s = this.decodeAsciiSegment(e, r, n);\r\n                else {\r\n                    switch (s) {\r\n                        case V.C40_ENCODE:\r\n                            this.decodeC40Segment(e, r);\r\n                            break;\r\n                        case V.TEXT_ENCODE:\r\n                            this.decodeTextSegment(e, r);\r\n                            break;\r\n                        case V.ANSIX12_ENCODE:\r\n                            this.decodeAnsiX12Segment(e, r);\r\n                            break;\r\n                        case V.EDIFACT_ENCODE:\r\n                            this.decodeEdifactSegment(e, r);\r\n                            break;\r\n                        case V.BASE256_ENCODE:\r\n                            this.decodeBase256Segment(e, r, i);\r\n                            break;\r\n                        default:\r\n                            throw new E\r\n                    }\r\n                    s = V.ASCII_ENCODE\r\n                }\r\n            } while (s !== V.PAD_ENCODE && e.available() > 0);\r\n            return n.length() > 0 && r.append(n.toString()), new z(t, r.toString(), 0 === i.length ? null : i, null)\r\n        }\r\n        static decodeAsciiSegment(t, e, r) {\r\n            let n = !1;\r\n            do {\r\n                let i = t.readBits(8);\r\n                if (0 === i) throw new E;\r\n                if (i <= 128) return n && (i += 128), e.append(String.fromCharCode(i - 1)), V.ASCII_ENCODE;\r\n                if (129 === i) return V.PAD_ENCODE;\r\n                if (i <= 229) {\r\n                    const t = i - 130;\r\n                    t < 10 && e.append(\"0\"), e.append(\"\" + t)\r\n                } else switch (i) {\r\n                    case 230:\r\n                        return V.C40_ENCODE;\r\n                    case 231:\r\n                        return V.BASE256_ENCODE;\r\n                    case 232:\r\n                        e.append(String.fromCharCode(29));\r\n                        break;\r\n                    case 233:\r\n                    case 234:\r\n                        break;\r\n                    case 235:\r\n                        n = !0;\r\n                        break;\r\n                    case 236:\r\n                        e.append(\"[)>\u001e05\u001d\"), r.insert(0, \"\u001e\u0004\");\r\n                        break;\r\n                    case 237:\r\n                        e.append(\"[)>\u001e06\u001d\"), r.insert(0, \"\u001e\u0004\");\r\n                        break;\r\n                    case 238:\r\n                        return V.ANSIX12_ENCODE;\r\n                    case 239:\r\n                        return V.TEXT_ENCODE;\r\n                    case 240:\r\n                        return V.EDIFACT_ENCODE;\r\n                    case 241:\r\n                        break;\r\n                    default:\r\n                        if (254 !== i || 0 !== t.available()) throw new E\r\n                }\r\n            } while (t.available() > 0);\r\n            return V.ASCII_ENCODE\r\n        }\r\n        static decodeC40Segment(t, e) {\r\n            let r = !1;\r\n            const n = [];\r\n            let i = 0;\r\n            do {\r\n                if (8 === t.available()) return;\r\n                const s = t.readBits(8);\r\n                if (254 === s) return;\r\n                this.parseTwoBytes(s, t.readBits(8), n);\r\n                for (let t = 0; t < 3; t++) {\r\n                    const s = n[t];\r\n                    switch (i) {\r\n                        case 0:\r\n                            if (s < 3) i = s + 1;\r\n                            else {\r\n                                if (!(s < this.C40_BASIC_SET_CHARS.length)) throw new E;\r\n                                {\r\n                                    const t = this.C40_BASIC_SET_CHARS[s];\r\n                                    r ? (e.append(String.fromCharCode(t.charCodeAt(0) + 128)), r = !1) : e.append(t)\r\n                                }\r\n                            }\r\n                            break;\r\n                        case 1:\r\n                            r ? (e.append(String.fromCharCode(s + 128)), r = !1) : e.append(String.fromCharCode(s)), i = 0;\r\n                            break;\r\n                        case 2:\r\n                            if (s < this.C40_SHIFT2_SET_CHARS.length) {\r\n                                const t = this.C40_SHIFT2_SET_CHARS[s];\r\n                                r ? (e.append(String.fromCharCode(t.charCodeAt(0) + 128)), r = !1) : e.append(t)\r\n                            } else switch (s) {\r\n                                case 27:\r\n                                    e.append(String.fromCharCode(29));\r\n                                    break;\r\n                                case 30:\r\n                                    r = !0;\r\n                                    break;\r\n                                default:\r\n                                    throw new E\r\n                            }\r\n                            i = 0;\r\n                            break;\r\n                        case 3:\r\n                            r ? (e.append(String.fromCharCode(s + 224)), r = !1) : e.append(String.fromCharCode(s + 96)), i = 0;\r\n                            break;\r\n                        default:\r\n                            throw new E\r\n                    }\r\n                }\r\n            } while (t.available() > 0)\r\n        }\r\n        static decodeTextSegment(t, e) {\r\n            let r = !1,\r\n                    n = [],\r\n                    i = 0;\r\n            do {\r\n                if (8 === t.available()) return;\r\n                const s = t.readBits(8);\r\n                if (254 === s) return;\r\n                this.parseTwoBytes(s, t.readBits(8), n);\r\n                for (let t = 0; t < 3; t++) {\r\n                    const s = n[t];\r\n                    switch (i) {\r\n                        case 0:\r\n                            if (s < 3) i = s + 1;\r\n                            else {\r\n                                if (!(s < this.TEXT_BASIC_SET_CHARS.length)) throw new E;\r\n                                {\r\n                                    const t = this.TEXT_BASIC_SET_CHARS[s];\r\n                                    r ? (e.append(String.fromCharCode(t.charCodeAt(0) + 128)), r = !1) : e.append(t)\r\n                                }\r\n                            }\r\n                            break;\r\n                        case 1:\r\n                            r ? (e.append(String.fromCharCode(s + 128)), r = !1) : e.append(String.fromCharCode(s)), i = 0;\r\n                            break;\r\n                        case 2:\r\n                            if (s < this.TEXT_SHIFT2_SET_CHARS.length) {\r\n                                const t = this.TEXT_SHIFT2_SET_CHARS[s];\r\n                                r ? (e.append(String.fromCharCode(t.charCodeAt(0) + 128)), r = !1) : e.append(t)\r\n                            } else switch (s) {\r\n                                case 27:\r\n                                    e.append(String.fromCharCode(29));\r\n                                    break;\r\n                                case 30:\r\n                                    r = !0;\r\n                                    break;\r\n                                default:\r\n                                    throw new E\r\n                            }\r\n                            i = 0;\r\n                            break;\r\n                        case 3:\r\n                            if (!(s < this.TEXT_SHIFT3_SET_CHARS.length)) throw new E;\r\n                        {\r\n                            const t = this.TEXT_SHIFT3_SET_CHARS[s];\r\n                            r ? (e.append(String.fromCharCode(t.charCodeAt(0) + 128)), r = !1) : e.append(t), i = 0\r\n                        }\r\n                            break;\r\n                        default:\r\n                            throw new E\r\n                    }\r\n                }\r\n            } while (t.available() > 0)\r\n        }\r\n        static decodeAnsiX12Segment(t, e) {\r\n            const r = [];\r\n            do {\r\n                if (8 === t.available()) return;\r\n                const n = t.readBits(8);\r\n                if (254 === n) return;\r\n                this.parseTwoBytes(n, t.readBits(8), r);\r\n                for (let t = 0; t < 3; t++) {\r\n                    const n = r[t];\r\n                    switch (n) {\r\n                        case 0:\r\n                            e.append(\"\\r\");\r\n                            break;\r\n                        case 1:\r\n                            e.append(\"*\");\r\n                            break;\r\n                        case 2:\r\n                            e.append(\">\");\r\n                            break;\r\n                        case 3:\r\n                            e.append(\" \");\r\n                            break;\r\n                        default:\r\n                            if (n < 14) e.append(String.fromCharCode(n + 44));\r\n                            else {\r\n                                if (!(n < 40)) throw new E;\r\n                                e.append(String.fromCharCode(n + 51))\r\n                            }\r\n                    }\r\n                }\r\n            } while (t.available() > 0)\r\n        }\r\n        static parseTwoBytes(t, e, r) {\r\n            let n = (t << 8) + e - 1,\r\n                    i = Math.floor(n / 1600);\r\n            r[0] = i, n -= 1600 * i, i = Math.floor(n / 40), r[1] = i, r[2] = n - 40 * i\r\n        }\r\n        static decodeEdifactSegment(t, e) {\r\n            do {\r\n                if (t.available() <= 16) return;\r\n                for (let r = 0; r < 4; r++) {\r\n                    let r = t.readBits(6);\r\n                    if (31 === r) {\r\n                        const e = 8 - t.getBitOffset();\r\n                        return void(8 !== e && t.readBits(e))\r\n                    }\r\n                    0 == (32 & r) && (r |= 64), e.append(String.fromCharCode(r))\r\n                }\r\n            } while (t.available() > 0)\r\n        }\r\n        static decodeBase256Segment(t, e, r) {\r\n            let n = 1 + t.getByteOffset();\r\n            const i = this.unrandomize255State(t.readBits(8), n++);\r\n            let s;\r\n            if ((s = 0 === i ? t.available() / 8 | 0 : i < 250 ? i : 250 * (i - 249) + this.unrandomize255State(t.readBits(8), n++)) < 0) throw new E;\r\n            const o = new Uint8Array(s);\r\n            for (let e = 0; e < s; e++) {\r\n                if (t.available() < 8) throw new E;\r\n                o[e] = this.unrandomize255State(t.readBits(8), n++)\r\n            }\r\n            r.push(o);\r\n            try {\r\n                e.append(I.decode(o, S.ISO88591))\r\n            } catch (t) {\r\n                throw new j(\"Platform does not support required encoding: \" + t.message)\r\n            }\r\n        }\r\n        static unrandomize255State(t, e) {\r\n            const r = t - (149 * e % 255 + 1);\r\n            return r >= 0 ? r : r + 256\r\n        }\r\n    }\r\n    le.C40_BASIC_SET_CHARS = [\"*\", \"*\", \"*\", \" \", \"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\", \"H\", \"I\", \"J\", \"K\", \"L\", \"M\", \"N\", \"O\", \"P\", \"Q\", \"R\", \"S\", \"T\", \"U\", \"V\", \"W\", \"X\", \"Y\", \"Z\"], le.C40_SHIFT2_SET_CHARS = [\"!\", '\"', \"#\", \"$\", \"%\", \"&\", \"'\", \"(\", \")\", \"*\", \"+\", \",\", \"-\", \".\", \"/\", \":\", \";\", \"<\", \"=\", \">\", \"?\", \"@\", \"[\", \"\\\\\", \"]\", \"^\", \"_\"], le.TEXT_BASIC_SET_CHARS = [\"*\", \"*\", \"*\", \" \", \"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"a\", \"b\", \"c\", \"d\", \"e\", \"f\", \"g\", \"h\", \"i\", \"j\", \"k\", \"l\", \"m\", \"n\", \"o\", \"p\", \"q\", \"r\", \"s\", \"t\", \"u\", \"v\", \"w\", \"x\", \"y\", \"z\"], le.TEXT_SHIFT2_SET_CHARS = le.C40_SHIFT2_SET_CHARS, le.TEXT_SHIFT3_SET_CHARS = [\"`\", \"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\", \"H\", \"I\", \"J\", \"K\", \"L\", \"M\", \"N\", \"O\", \"P\", \"Q\", \"R\", \"S\", \"T\", \"U\", \"V\", \"W\", \"X\", \"Y\", \"Z\", \"{\", \"|\", \"}\", \"~\", String.fromCharCode(127)];\r\n    class he {\r\n        constructor() {\r\n            this.rsDecoder = new J(q.DATA_MATRIX_FIELD_256)\r\n        }\r\n        decode(t) {\r\n            const e = new se(t),\r\n                    r = e.getVersion(),\r\n                    n = e.readCodewords(),\r\n                    i = oe.getDataBlocks(n, r);\r\n            let s = 0;\r\n            for (let t of i) s += t.getNumDataCodewords();\r\n            const o = new Uint8Array(s),\r\n                    a = i.length;\r\n            for (let t = 0; t < a; t++) {\r\n                const e = i[t],\r\n                        r = e.getCodewords(),\r\n                        n = e.getNumDataCodewords();\r\n                this.correctErrors(r, n);\r\n                for (let e = 0; e < n; e++) o[e * a + t] = r[e]\r\n            }\r\n            return le.decode(o)\r\n        }\r\n        correctErrors(t, e) {\r\n            const r = new Int32Array(t);\r\n            try {\r\n                this.rsDecoder.decode(r, t.length - e)\r\n            } catch (t) {\r\n                throw new l\r\n            }\r\n            for (let n = 0; n < e; n++) t[n] = r[n]\r\n        }\r\n    }\r\n    class ce {\r\n        constructor(t) {\r\n            this.image = t, this.rectangleDetector = new st(this.image)\r\n        }\r\n        detect() {\r\n            const t = this.rectangleDetector.detect();\r\n            let e = this.detectSolid1(t);\r\n            if ((e = this.detectSolid2(e))[3] = this.correctTopRight(e), !e[3]) throw new R;\r\n            const r = (e = this.shiftToModuleCenter(e))[0],\r\n                    n = e[1],\r\n                    i = e[2],\r\n                    s = e[3];\r\n            let o = this.transitionsBetween(r, s) + 1,\r\n                    a = this.transitionsBetween(i, s) + 1;\r\n            1 == (1 & o) && (o += 1), 1 == (1 & a) && (a += 1), 4 * o < 7 * a && 4 * a < 7 * o && (o = a = Math.max(o, a));\r\n            let l = ce.sampleGrid(this.image, r, n, i, s, o, a);\r\n            return new nt(l, [r, n, i, s])\r\n        }\r\n        static shiftPoint(t, e, r) {\r\n            let n = (e.getX() - t.getX()) / (r + 1),\r\n                    i = (e.getY() - t.getY()) / (r + 1);\r\n            return new rt(t.getX() + n, t.getY() + i)\r\n        }\r\n        static moveAway(t, e, r) {\r\n            let n = t.getX(),\r\n                    i = t.getY();\r\n            return n < e ? n -= 1 : n += 1, i < r ? i -= 1 : i += 1, new rt(n, i)\r\n        }\r\n        detectSolid1(t) {\r\n            let e = t[0],\r\n                    r = t[1],\r\n                    n = t[3],\r\n                    i = t[2],\r\n                    s = this.transitionsBetween(e, r),\r\n                    o = this.transitionsBetween(r, n),\r\n                    a = this.transitionsBetween(n, i),\r\n                    l = this.transitionsBetween(i, e),\r\n                    h = s,\r\n                    c = [i, e, r, n];\r\n            return h > o && (h = o, c[0] = e, c[1] = r, c[2] = n, c[3] = i), h > a && (h = a, c[0] = r, c[1] = n, c[2] = i, c[3] = e), h > l && (c[0] = n, c[1] = i, c[2] = e, c[3] = r), c\r\n        }\r\n        detectSolid2(t) {\r\n            let e = t[0],\r\n                    r = t[1],\r\n                    n = t[2],\r\n                    i = t[3],\r\n                    s = this.transitionsBetween(e, i),\r\n                    o = ce.shiftPoint(r, n, 4 * (s + 1)),\r\n                    a = ce.shiftPoint(n, r, 4 * (s + 1));\r\n            return this.transitionsBetween(o, e) < this.transitionsBetween(a, i) ? (t[0] = e, t[1] = r, t[2] = n, t[3] = i) : (t[0] = r, t[1] = n, t[2] = i, t[3] = e), t\r\n        }\r\n        correctTopRight(t) {\r\n            let e = t[0],\r\n                    r = t[1],\r\n                    n = t[2],\r\n                    i = t[3],\r\n                    s = this.transitionsBetween(e, i),\r\n                    o = this.transitionsBetween(r, i),\r\n                    a = ce.shiftPoint(e, r, 4 * (o + 1)),\r\n                    l = ce.shiftPoint(n, r, 4 * (s + 1));\r\n            s = this.transitionsBetween(a, i), o = this.transitionsBetween(l, i);\r\n            let h = new rt(i.getX() + (n.getX() - r.getX()) / (s + 1), i.getY() + (n.getY() - r.getY()) / (s + 1)),\r\n                    c = new rt(i.getX() + (e.getX() - r.getX()) / (o + 1), i.getY() + (e.getY() - r.getY()) / (o + 1));\r\n            return this.isValid(h) ? this.isValid(c) ? this.transitionsBetween(a, h) + this.transitionsBetween(l, h) > this.transitionsBetween(a, c) + this.transitionsBetween(l, c) ? h : c : h : this.isValid(c) ? c : null\r\n        }\r\n        shiftToModuleCenter(t) {\r\n            let e = t[0],\r\n                    r = t[1],\r\n                    n = t[2],\r\n                    i = t[3],\r\n                    s = this.transitionsBetween(e, i) + 1,\r\n                    o = this.transitionsBetween(n, i) + 1,\r\n                    a = ce.shiftPoint(e, r, 4 * o),\r\n                    l = ce.shiftPoint(n, r, 4 * s);\r\n            1 == (1 & (s = this.transitionsBetween(a, i) + 1)) && (s += 1), 1 == (1 & (o = this.transitionsBetween(l, i) + 1)) && (o += 1);\r\n            let h, c, u = (e.getX() + r.getX() + n.getX() + i.getX()) / 4,\r\n                    d = (e.getY() + r.getY() + n.getY() + i.getY()) / 4;\r\n            return e = ce.moveAway(e, u, d), r = ce.moveAway(r, u, d), n = ce.moveAway(n, u, d), i = ce.moveAway(i, u, d), a = ce.shiftPoint(e, r, 4 * o), a = ce.shiftPoint(a, i, 4 * s), h = ce.shiftPoint(r, e, 4 * o), h = ce.shiftPoint(h, n, 4 * s), l = ce.shiftPoint(n, i, 4 * o), l = ce.shiftPoint(l, r, 4 * s), c = ce.shiftPoint(i, n, 4 * o), [a, h, l, c = ce.shiftPoint(c, e, 4 * s)]\r\n        }\r\n        isValid(t) {\r\n            return t.getX() >= 0 && t.getX() < this.image.getWidth() && t.getY() > 0 && t.getY() < this.image.getHeight()\r\n        }\r\n        static sampleGrid(t, e, r, n, i, s, o) {\r\n            return ht.getInstance().sampleGrid(t, s, o, .5, .5, s - .5, .5, s - .5, o - .5, .5, o - .5, e.getX(), e.getY(), i.getX(), i.getY(), n.getX(), n.getY(), r.getX(), r.getY())\r\n        }\r\n        transitionsBetween(t, e) {\r\n            let r = Math.trunc(t.getX()),\r\n                    n = Math.trunc(t.getY()),\r\n                    i = Math.trunc(e.getX()),\r\n                    s = Math.trunc(e.getY()),\r\n                    o = Math.abs(s - n) > Math.abs(i - r);\r\n            if (o) {\r\n                let t = r;\r\n                r = n, n = t, t = i, i = s, s = t\r\n            }\r\n            let a = Math.abs(i - r),\r\n                    l = Math.abs(s - n),\r\n                    h = -a / 2,\r\n                    c = n < s ? 1 : -1,\r\n                    u = r < i ? 1 : -1,\r\n                    d = 0,\r\n                    g = this.image.get(o ? n : r, o ? r : n);\r\n            for (let t = r, e = n; t !== i; t += u) {\r\n                let r = this.image.get(o ? e : t, o ? t : e);\r\n                if (r !== g && (d++, g = r), (h += l) > 0) {\r\n                    if (e === s) break;\r\n                    e += c, h -= a\r\n                }\r\n            }\r\n            return d\r\n        }\r\n    }\r\n    class ue {\r\n        constructor() {\r\n            this.decoder = new he\r\n        }\r\n        decode(t, e = null) {\r\n            let r, n;\r\n            if (null != e && e.has(C.PURE_BARCODE)) {\r\n                const e = ue.extractPureBits(t.getBlackMatrix());\r\n                r = this.decoder.decode(e), n = ue.NO_POINTS\r\n            } else {\r\n                const e = new ce(t.getBlackMatrix()).detect();\r\n                r = this.decoder.decode(e.getBits()), n = e.getPoints()\r\n            }\r\n            const i = r.getRawBytes(),\r\n                    s = new F(r.getText(), i, 8 * i.length, n, k.DATA_MATRIX, c.currentTimeMillis()),\r\n                    o = r.getByteSegments();\r\n            null != o && s.putMetadata(W.BYTE_SEGMENTS, o);\r\n            const a = r.getECLevel();\r\n            return null != a && s.putMetadata(W.ERROR_CORRECTION_LEVEL, a), s\r\n        }\r\n        reset() {}\r\n        static extractPureBits(t) {\r\n            const e = t.getTopLeftOnBit(),\r\n                    r = t.getBottomRightOnBit();\r\n            if (null == e || null == r) throw new R;\r\n            const n = this.moduleSize(e, t);\r\n            let i = e[1];\r\n            const s = r[1];\r\n            let o = e[0];\r\n            const a = (r[0] - o + 1) / n,\r\n                    l = (s - i + 1) / n;\r\n            if (a <= 0 || l <= 0) throw new R;\r\n            const h = n / 2;\r\n            i += h, o += h;\r\n            const c = new T(a, l);\r\n            for (let e = 0; e < l; e++) {\r\n                const r = i + e * n;\r\n                for (let i = 0; i < a; i++) t.get(o + i * n, r) && c.set(i, e)\r\n            }\r\n            return c\r\n        }\r\n        static moduleSize(t, e) {\r\n            const r = e.getWidth();\r\n            let n = t[0];\r\n            const i = t[1];\r\n            for (; n < r && e.get(n, i);) n++;\r\n            if (n === r) throw new R;\r\n            const s = n - t[0];\r\n            if (0 === s) throw new R;\r\n            return s\r\n        }\r\n    }\r\n    ue.NO_POINTS = [];\r\n    ! function(t) {\r\n        t[t.L = 0] = \"L\", t[t.M = 1] = \"M\", t[t.Q = 2] = \"Q\", t[t.H = 3] = \"H\"\r\n    }(U || (U = {}));\r\n    class de {\r\n        constructor(t, e, r) {\r\n            this.value = t, this.stringValue = e, this.bits = r, de.FOR_BITS.set(r, this), de.FOR_VALUE.set(t, this)\r\n        }\r\n        getValue() {\r\n            return this.value\r\n        }\r\n        getBits() {\r\n            return this.bits\r\n        }\r\n        static fromString(t) {\r\n            switch (t) {\r\n                case \"L\":\r\n                    return de.L;\r\n                case \"M\":\r\n                    return de.M;\r\n                case \"Q\":\r\n                    return de.Q;\r\n                case \"H\":\r\n                    return de.H;\r\n                default:\r\n                    throw new s(t + \"not available\")\r\n            }\r\n        }\r\n        toString() {\r\n            return this.stringValue\r\n        }\r\n        equals(t) {\r\n            if (!(t instanceof de)) return !1;\r\n            const e = t;\r\n            return this.value === e.value\r\n        }\r\n        static forBits(t) {\r\n            if (t < 0 || t >= de.FOR_BITS.size) throw new o;\r\n            return de.FOR_BITS.get(t)\r\n        }\r\n    }\r\n    de.FOR_BITS = new Map, de.FOR_VALUE = new Map, de.L = new de(U.L, \"L\", 1), de.M = new de(U.M, \"M\", 0), de.Q = new de(U.Q, \"Q\", 3), de.H = new de(U.H, \"H\", 2);\r\n    class ge {\r\n        constructor(t) {\r\n            this.errorCorrectionLevel = de.forBits(t >> 3 & 3), this.dataMask = 7 & t\r\n        }\r\n        static numBitsDiffering(t, e) {\r\n            return f.bitCount(t ^ e)\r\n        }\r\n        static decodeFormatInformation(t, e) {\r\n            const r = ge.doDecodeFormatInformation(t, e);\r\n            return null !== r ? r : ge.doDecodeFormatInformation(t ^ ge.FORMAT_INFO_MASK_QR, e ^ ge.FORMAT_INFO_MASK_QR)\r\n        }\r\n        static doDecodeFormatInformation(t, e) {\r\n            let r = Number.MAX_SAFE_INTEGER,\r\n                    n = 0;\r\n            for (const i of ge.FORMAT_INFO_DECODE_LOOKUP) {\r\n                const s = i[0];\r\n                if (s === t || s === e) return new ge(i[1]);\r\n                let o = ge.numBitsDiffering(t, s);\r\n                o < r && (n = i[1], r = o), t !== e && (o = ge.numBitsDiffering(e, s)) < r && (n = i[1], r = o)\r\n            }\r\n            return r <= 3 ? new ge(n) : null\r\n        }\r\n        getErrorCorrectionLevel() {\r\n            return this.errorCorrectionLevel\r\n        }\r\n        getDataMask() {\r\n            return this.dataMask\r\n        }\r\n        hashCode() {\r\n            return this.errorCorrectionLevel.getBits() << 3 | this.dataMask\r\n        }\r\n        equals(t) {\r\n            if (!(t instanceof ge)) return !1;\r\n            const e = t;\r\n            return this.errorCorrectionLevel === e.errorCorrectionLevel && this.dataMask === e.dataMask\r\n        }\r\n    }\r\n    ge.FORMAT_INFO_MASK_QR = 21522, ge.FORMAT_INFO_DECODE_LOOKUP = [Int32Array.from([21522, 0]), Int32Array.from([20773, 1]), Int32Array.from([24188, 2]), Int32Array.from([23371, 3]), Int32Array.from([17913, 4]), Int32Array.from([16590, 5]), Int32Array.from([20375, 6]), Int32Array.from([19104, 7]), Int32Array.from([30660, 8]), Int32Array.from([29427, 9]), Int32Array.from([32170, 10]), Int32Array.from([30877, 11]), Int32Array.from([26159, 12]), Int32Array.from([25368, 13]), Int32Array.from([27713, 14]), Int32Array.from([26998, 15]), Int32Array.from([5769, 16]), Int32Array.from([5054, 17]), Int32Array.from([7399, 18]), Int32Array.from([6608, 19]), Int32Array.from([1890, 20]), Int32Array.from([597, 21]), Int32Array.from([3340, 22]), Int32Array.from([2107, 23]), Int32Array.from([13663, 24]), Int32Array.from([12392, 25]), Int32Array.from([16177, 26]), Int32Array.from([14854, 27]), Int32Array.from([9396, 28]), Int32Array.from([8579, 29]), Int32Array.from([11994, 30]), Int32Array.from([11245, 31])];\r\n    class fe {\r\n        constructor(t, ...e) {\r\n            this.ecCodewordsPerBlock = t, this.ecBlocks = e\r\n        }\r\n        getECCodewordsPerBlock() {\r\n            return this.ecCodewordsPerBlock\r\n        }\r\n        getNumBlocks() {\r\n            let t = 0;\r\n            const e = this.ecBlocks;\r\n            for (const r of e) t += r.getCount();\r\n            return t\r\n        }\r\n        getTotalECCodewords() {\r\n            return this.ecCodewordsPerBlock * this.getNumBlocks()\r\n        }\r\n        getECBlocks() {\r\n            return this.ecBlocks\r\n        }\r\n    }\r\n    class we {\r\n        constructor(t, e) {\r\n            this.count = t, this.dataCodewords = e\r\n        }\r\n        getCount() {\r\n            return this.count\r\n        }\r\n        getDataCodewords() {\r\n            return this.dataCodewords\r\n        }\r\n    }\r\n    class Ae {\r\n        constructor(t, e, ...r) {\r\n            this.versionNumber = t, this.alignmentPatternCenters = e, this.ecBlocks = r;\r\n            let n = 0;\r\n            const i = r[0].getECCodewordsPerBlock(),\r\n                    s = r[0].getECBlocks();\r\n            for (const t of s) n += t.getCount() * (t.getDataCodewords() + i);\r\n            this.totalCodewords = n\r\n        }\r\n        getVersionNumber() {\r\n            return this.versionNumber\r\n        }\r\n        getAlignmentPatternCenters() {\r\n            return this.alignmentPatternCenters\r\n        }\r\n        getTotalCodewords() {\r\n            return this.totalCodewords\r\n        }\r\n        getDimensionForVersion() {\r\n            return 17 + 4 * this.versionNumber\r\n        }\r\n        getECBlocksForLevel(t) {\r\n            return this.ecBlocks[t.getValue()]\r\n        }\r\n        static getProvisionalVersionForDimension(t) {\r\n            if (t % 4 != 1) throw new E;\r\n            try {\r\n                return this.getVersionForNumber((t - 17) / 4)\r\n            } catch (t) {\r\n                throw new E\r\n            }\r\n        }\r\n        static getVersionForNumber(t) {\r\n            if (t < 1 || t > 40) throw new o;\r\n            return Ae.VERSIONS[t - 1]\r\n        }\r\n        static decodeVersionInformation(t) {\r\n            let e = Number.MAX_SAFE_INTEGER,\r\n                    r = 0;\r\n            for (let n = 0; n < Ae.VERSION_DECODE_INFO.length; n++) {\r\n                const i = Ae.VERSION_DECODE_INFO[n];\r\n                if (i === t) return Ae.getVersionForNumber(n + 7);\r\n                const s = ge.numBitsDiffering(t, i);\r\n                s < e && (r = n + 7, e = s)\r\n            }\r\n            return e <= 3 ? Ae.getVersionForNumber(r) : null\r\n        }\r\n        buildFunctionPattern() {\r\n            const t = this.getDimensionForVersion(),\r\n                    e = new T(t);\r\n            e.setRegion(0, 0, 9, 9), e.setRegion(t - 8, 0, 8, 9), e.setRegion(0, t - 8, 9, 8);\r\n            const r = this.alignmentPatternCenters.length;\r\n            for (let t = 0; t < r; t++) {\r\n                const n = this.alignmentPatternCenters[t] - 2;\r\n                for (let i = 0; i < r; i++) 0 === t && (0 === i || i === r - 1) || t === r - 1 && 0 === i || e.setRegion(this.alignmentPatternCenters[i] - 2, n, 5, 5)\r\n            }\r\n            return e.setRegion(6, 9, 1, t - 17), e.setRegion(9, 6, t - 17, 1), this.versionNumber > 6 && (e.setRegion(t - 11, 0, 3, 6), e.setRegion(0, t - 11, 6, 3)), e\r\n        }\r\n        toString() {\r\n            return \"\" + this.versionNumber\r\n        }\r\n    }\r\n    Ae.VERSION_DECODE_INFO = Int32Array.from([31892, 34236, 39577, 42195, 48118, 51042, 55367, 58893, 63784, 68472, 70749, 76311, 79154, 84390, 87683, 92361, 96236, 102084, 102881, 110507, 110734, 117786, 119615, 126325, 127568, 133589, 136944, 141498, 145311, 150283, 152622, 158308, 161089, 167017]), Ae.VERSIONS = [new Ae(1, new Int32Array(0), new fe(7, new we(1, 19)), new fe(10, new we(1, 16)), new fe(13, new we(1, 13)), new fe(17, new we(1, 9))), new Ae(2, Int32Array.from([6, 18]), new fe(10, new we(1, 34)), new fe(16, new we(1, 28)), new fe(22, new we(1, 22)), new fe(28, new we(1, 16))), new Ae(3, Int32Array.from([6, 22]), new fe(15, new we(1, 55)), new fe(26, new we(1, 44)), new fe(18, new we(2, 17)), new fe(22, new we(2, 13))), new Ae(4, Int32Array.from([6, 26]), new fe(20, new we(1, 80)), new fe(18, new we(2, 32)), new fe(26, new we(2, 24)), new fe(16, new we(4, 9))), new Ae(5, Int32Array.from([6, 30]), new fe(26, new we(1, 108)), new fe(24, new we(2, 43)), new fe(18, new we(2, 15), new we(2, 16)), new fe(22, new we(2, 11), new we(2, 12))), new Ae(6, Int32Array.from([6, 34]), new fe(18, new we(2, 68)), new fe(16, new we(4, 27)), new fe(24, new we(4, 19)), new fe(28, new we(4, 15))), new Ae(7, Int32Array.from([6, 22, 38]), new fe(20, new we(2, 78)), new fe(18, new we(4, 31)), new fe(18, new we(2, 14), new we(4, 15)), new fe(26, new we(4, 13), new we(1, 14))), new Ae(8, Int32Array.from([6, 24, 42]), new fe(24, new we(2, 97)), new fe(22, new we(2, 38), new we(2, 39)), new fe(22, new we(4, 18), new we(2, 19)), new fe(26, new we(4, 14), new we(2, 15))), new Ae(9, Int32Array.from([6, 26, 46]), new fe(30, new we(2, 116)), new fe(22, new we(3, 36), new we(2, 37)), new fe(20, new we(4, 16), new we(4, 17)), new fe(24, new we(4, 12), new we(4, 13))), new Ae(10, Int32Array.from([6, 28, 50]), new fe(18, new we(2, 68), new we(2, 69)), new fe(26, new we(4, 43), new we(1, 44)), new fe(24, new we(6, 19), new we(2, 20)), new fe(28, new we(6, 15), new we(2, 16))), new Ae(11, Int32Array.from([6, 30, 54]), new fe(20, new we(4, 81)), new fe(30, new we(1, 50), new we(4, 51)), new fe(28, new we(4, 22), new we(4, 23)), new fe(24, new we(3, 12), new we(8, 13))), new Ae(12, Int32Array.from([6, 32, 58]), new fe(24, new we(2, 92), new we(2, 93)), new fe(22, new we(6, 36), new we(2, 37)), new fe(26, new we(4, 20), new we(6, 21)), new fe(28, new we(7, 14), new we(4, 15))), new Ae(13, Int32Array.from([6, 34, 62]), new fe(26, new we(4, 107)), new fe(22, new we(8, 37), new we(1, 38)), new fe(24, new we(8, 20), new we(4, 21)), new fe(22, new we(12, 11), new we(4, 12))), new Ae(14, Int32Array.from([6, 26, 46, 66]), new fe(30, new we(3, 115), new we(1, 116)), new fe(24, new we(4, 40), new we(5, 41)), new fe(20, new we(11, 16), new we(5, 17)), new fe(24, new we(11, 12), new we(5, 13))), new Ae(15, Int32Array.from([6, 26, 48, 70]), new fe(22, new we(5, 87), new we(1, 88)), new fe(24, new we(5, 41), new we(5, 42)), new fe(30, new we(5, 24), new we(7, 25)), new fe(24, new we(11, 12), new we(7, 13))), new Ae(16, Int32Array.from([6, 26, 50, 74]), new fe(24, new we(5, 98), new we(1, 99)), new fe(28, new we(7, 45), new we(3, 46)), new fe(24, new we(15, 19), new we(2, 20)), new fe(30, new we(3, 15), new we(13, 16))), new Ae(17, Int32Array.from([6, 30, 54, 78]), new fe(28, new we(1, 107), new we(5, 108)), new fe(28, new we(10, 46), new we(1, 47)), new fe(28, new we(1, 22), new we(15, 23)), new fe(28, new we(2, 14), new we(17, 15))), new Ae(18, Int32Array.from([6, 30, 56, 82]), new fe(30, new we(5, 120), new we(1, 121)), new fe(26, new we(9, 43), new we(4, 44)), new fe(28, new we(17, 22), new we(1, 23)), new fe(28, new we(2, 14), new we(19, 15))), new Ae(19, Int32Array.from([6, 30, 58, 86]), new fe(28, new we(3, 113), new we(4, 114)), new fe(26, new we(3, 44), new we(11, 45)), new fe(26, new we(17, 21), new we(4, 22)), new fe(26, new we(9, 13), new we(16, 14))), new Ae(20, Int32Array.from([6, 34, 62, 90]), new fe(28, new we(3, 107), new we(5, 108)), new fe(26, new we(3, 41), new we(13, 42)), new fe(30, new we(15, 24), new we(5, 25)), new fe(28, new we(15, 15), new we(10, 16))), new Ae(21, Int32Array.from([6, 28, 50, 72, 94]), new fe(28, new we(4, 116), new we(4, 117)), new fe(26, new we(17, 42)), new fe(28, new we(17, 22), new we(6, 23)), new fe(30, new we(19, 16), new we(6, 17))), new Ae(22, Int32Array.from([6, 26, 50, 74, 98]), new fe(28, new we(2, 111), new we(7, 112)), new fe(28, new we(17, 46)), new fe(30, new we(7, 24), new we(16, 25)), new fe(24, new we(34, 13))), new Ae(23, Int32Array.from([6, 30, 54, 78, 102]), new fe(30, new we(4, 121), new we(5, 122)), new fe(28, new we(4, 47), new we(14, 48)), new fe(30, new we(11, 24), new we(14, 25)), new fe(30, new we(16, 15), new we(14, 16))), new Ae(24, Int32Array.from([6, 28, 54, 80, 106]), new fe(30, new we(6, 117), new we(4, 118)), new fe(28, new we(6, 45), new we(14, 46)), new fe(30, new we(11, 24), new we(16, 25)), new fe(30, new we(30, 16), new we(2, 17))), new Ae(25, Int32Array.from([6, 32, 58, 84, 110]), new fe(26, new we(8, 106), new we(4, 107)), new fe(28, new we(8, 47), new we(13, 48)), new fe(30, new we(7, 24), new we(22, 25)), new fe(30, new we(22, 15), new we(13, 16))), new Ae(26, Int32Array.from([6, 30, 58, 86, 114]), new fe(28, new we(10, 114), new we(2, 115)), new fe(28, new we(19, 46), new we(4, 47)), new fe(28, new we(28, 22), new we(6, 23)), new fe(30, new we(33, 16), new we(4, 17))), new Ae(27, Int32Array.from([6, 34, 62, 90, 118]), new fe(30, new we(8, 122), new we(4, 123)), new fe(28, new we(22, 45), new we(3, 46)), new fe(30, new we(8, 23), new we(26, 24)), new fe(30, new we(12, 15), new we(28, 16))), new Ae(28, Int32Array.from([6, 26, 50, 74, 98, 122]), new fe(30, new we(3, 117), new we(10, 118)), new fe(28, new we(3, 45), new we(23, 46)), new fe(30, new we(4, 24), new we(31, 25)), new fe(30, new we(11, 15), new we(31, 16))), new Ae(29, Int32Array.from([6, 30, 54, 78, 102, 126]), new fe(30, new we(7, 116), new we(7, 117)), new fe(28, new we(21, 45), new we(7, 46)), new fe(30, new we(1, 23), new we(37, 24)), new fe(30, new we(19, 15), new we(26, 16))), new Ae(30, Int32Array.from([6, 26, 52, 78, 104, 130]), new fe(30, new we(5, 115), new we(10, 116)), new fe(28, new we(19, 47), new we(10, 48)), new fe(30, new we(15, 24), new we(25, 25)), new fe(30, new we(23, 15), new we(25, 16))), new Ae(31, Int32Array.from([6, 30, 56, 82, 108, 134]), new fe(30, new we(13, 115), new we(3, 116)), new fe(28, new we(2, 46), new we(29, 47)), new fe(30, new we(42, 24), new we(1, 25)), new fe(30, new we(23, 15), new we(28, 16))), new Ae(32, Int32Array.from([6, 34, 60, 86, 112, 138]), new fe(30, new we(17, 115)), new fe(28, new we(10, 46), new we(23, 47)), new fe(30, new we(10, 24), new we(35, 25)), new fe(30, new we(19, 15), new we(35, 16))), new Ae(33, Int32Array.from([6, 30, 58, 86, 114, 142]), new fe(30, new we(17, 115), new we(1, 116)), new fe(28, new we(14, 46), new we(21, 47)), new fe(30, new we(29, 24), new we(19, 25)), new fe(30, new we(11, 15), new we(46, 16))), new Ae(34, Int32Array.from([6, 34, 62, 90, 118, 146]), new fe(30, new we(13, 115), new we(6, 116)), new fe(28, new we(14, 46), new we(23, 47)), new fe(30, new we(44, 24), new we(7, 25)), new fe(30, new we(59, 16), new we(1, 17))), new Ae(35, Int32Array.from([6, 30, 54, 78, 102, 126, 150]), new fe(30, new we(12, 121), new we(7, 122)), new fe(28, new we(12, 47), new we(26, 48)), new fe(30, new we(39, 24), new we(14, 25)), new fe(30, new we(22, 15), new we(41, 16))), new Ae(36, Int32Array.from([6, 24, 50, 76, 102, 128, 154]), new fe(30, new we(6, 121), new we(14, 122)), new fe(28, new we(6, 47), new we(34, 48)), new fe(30, new we(46, 24), new we(10, 25)), new fe(30, new we(2, 15), new we(64, 16))), new Ae(37, Int32Array.from([6, 28, 54, 80, 106, 132, 158]), new fe(30, new we(17, 122), new we(4, 123)), new fe(28, new we(29, 46), new we(14, 47)), new fe(30, new we(49, 24), new we(10, 25)), new fe(30, new we(24, 15), new we(46, 16))), new Ae(38, Int32Array.from([6, 32, 58, 84, 110, 136, 162]), new fe(30, new we(4, 122), new we(18, 123)), new fe(28, new we(13, 46), new we(32, 47)), new fe(30, new we(48, 24), new we(14, 25)), new fe(30, new we(42, 15), new we(32, 16))), new Ae(39, Int32Array.from([6, 26, 54, 82, 110, 138, 166]), new fe(30, new we(20, 117), new we(4, 118)), new fe(28, new we(40, 47), new we(7, 48)), new fe(30, new we(43, 24), new we(22, 25)), new fe(30, new we(10, 15), new we(67, 16))), new Ae(40, Int32Array.from([6, 30, 58, 86, 114, 142, 170]), new fe(30, new we(19, 118), new we(6, 119)), new fe(28, new we(18, 47), new we(31, 48)), new fe(30, new we(34, 24), new we(34, 25)), new fe(30, new we(20, 15), new we(61, 16)))],\r\n            function(t) {\r\n                t[t.DATA_MASK_000 = 0] = \"DATA_MASK_000\", t[t.DATA_MASK_001 = 1] = \"DATA_MASK_001\", t[t.DATA_MASK_010 = 2] = \"DATA_MASK_010\", t[t.DATA_MASK_011 = 3] = \"DATA_MASK_011\", t[t.DATA_MASK_100 = 4] = \"DATA_MASK_100\", t[t.DATA_MASK_101 = 5] = \"DATA_MASK_101\", t[t.DATA_MASK_110 = 6] = \"DATA_MASK_110\", t[t.DATA_MASK_111 = 7] = \"DATA_MASK_111\"\r\n            }(H || (H = {}));\r\n    class Ce {\r\n        constructor(t, e) {\r\n            this.value = t, this.isMasked = e\r\n        }\r\n        unmaskBitMatrix(t, e) {\r\n            for (let r = 0; r < e; r++)\r\n                for (let n = 0; n < e; n++) this.isMasked(r, n) && t.flip(n, r)\r\n        }\r\n    }\r\n    Ce.values = new Map([\r\n                            [H.DATA_MASK_000, new Ce(H.DATA_MASK_000, (t, e) => 0 == (t + e & 1))],\r\n                            [H.DATA_MASK_001, new Ce(H.DATA_MASK_001, (t, e) => 0 == (1 & t))],\r\n                            [H.DATA_MASK_010, new Ce(H.DATA_MASK_010, (t, e) => e % 3 == 0)],\r\n                            [H.DATA_MASK_011, new Ce(H.DATA_MASK_011, (t, e) => (t + e) % 3 == 0)],\r\n                            [H.DATA_MASK_100, new Ce(H.DATA_MASK_100, (t, e) => 0 == (Math.floor(t / 2) + Math.floor(e / 3) & 1))],\r\n                            [H.DATA_MASK_101, new Ce(H.DATA_MASK_101, (t, e) => t * e % 6 == 0)],\r\n                            [H.DATA_MASK_110, new Ce(H.DATA_MASK_110, (t, e) => t * e % 6 < 3)],\r\n                            [H.DATA_MASK_111, new Ce(H.DATA_MASK_111, (t, e) => 0 == (t + e + t * e % 3 & 1))]\r\n                        ]);\r\n    class Ee {\r\n        constructor(t) {\r\n            const e = t.getHeight();\r\n            if (e < 21 || 1 != (3 & e)) throw new E;\r\n            this.bitMatrix = t\r\n        }\r\n        readFormatInformation() {\r\n            if (null !== this.parsedFormatInfo && void 0 !== this.parsedFormatInfo) return this.parsedFormatInfo;\r\n            let t = 0;\r\n            for (let e = 0; e < 6; e++) t = this.copyBit(e, 8, t);\r\n            t = this.copyBit(7, 8, t), t = this.copyBit(8, 8, t), t = this.copyBit(8, 7, t);\r\n            for (let e = 5; e >= 0; e--) t = this.copyBit(8, e, t);\r\n            const e = this.bitMatrix.getHeight();\r\n            let r = 0;\r\n            const n = e - 7;\r\n            for (let t = e - 1; t >= n; t--) r = this.copyBit(8, t, r);\r\n            for (let t = e - 8; t < e; t++) r = this.copyBit(t, 8, r);\r\n            if (this.parsedFormatInfo = ge.decodeFormatInformation(t, r), null !== this.parsedFormatInfo) return this.parsedFormatInfo;\r\n            throw new E\r\n        }\r\n        readVersion() {\r\n            if (null !== this.parsedVersion && void 0 !== this.parsedVersion) return this.parsedVersion;\r\n            const t = this.bitMatrix.getHeight(),\r\n                    e = Math.floor((t - 17) / 4);\r\n            if (e <= 6) return Ae.getVersionForNumber(e);\r\n            let r = 0;\r\n            const n = t - 11;\r\n            for (let e = 5; e >= 0; e--)\r\n                for (let i = t - 9; i >= n; i--) r = this.copyBit(i, e, r);\r\n            let i = Ae.decodeVersionInformation(r);\r\n            if (null !== i && i.getDimensionForVersion() === t) return this.parsedVersion = i, i;\r\n            r = 0;\r\n            for (let e = 5; e >= 0; e--)\r\n                for (let i = t - 9; i >= n; i--) r = this.copyBit(e, i, r);\r\n            if (null !== (i = Ae.decodeVersionInformation(r)) && i.getDimensionForVersion() === t) return this.parsedVersion = i, i;\r\n            throw new E\r\n        }\r\n        copyBit(t, e, r) {\r\n            return (this.isMirror ? this.bitMatrix.get(e, t) : this.bitMatrix.get(t, e)) ? r << 1 | 1 : r << 1\r\n        }\r\n        readCodewords() {\r\n            const t = this.readFormatInformation(),\r\n                    e = this.readVersion(),\r\n                    r = Ce.values.get(t.getDataMask()),\r\n                    n = this.bitMatrix.getHeight();\r\n            r.unmaskBitMatrix(this.bitMatrix, n);\r\n            const i = e.buildFunctionPattern();\r\n            let s = !0;\r\n            const o = new Uint8Array(e.getTotalCodewords());\r\n            let a = 0,\r\n                    l = 0,\r\n                    h = 0;\r\n            for (let t = n - 1; t > 0; t -= 2) {\r\n                6 === t && t--;\r\n                for (let e = 0; e < n; e++) {\r\n                    const r = s ? n - 1 - e : e;\r\n                    for (let e = 0; e < 2; e++) i.get(t - e, r) || (h++, l <<= 1, this.bitMatrix.get(t - e, r) && (l |= 1), 8 === h && (o[a++] = l, h = 0, l = 0))\r\n                }\r\n                s = !s\r\n            }\r\n            if (a !== e.getTotalCodewords()) throw new E;\r\n            return o\r\n        }\r\n        remask() {\r\n            if (null === this.parsedFormatInfo) return;\r\n            const t = Ce.values[this.parsedFormatInfo.getDataMask()],\r\n                    e = this.bitMatrix.getHeight();\r\n            t.unmaskBitMatrix(this.bitMatrix, e)\r\n        }\r\n        setMirror(t) {\r\n            this.parsedVersion = null, this.parsedFormatInfo = null, this.isMirror = t\r\n        }\r\n        mirror() {\r\n            const t = this.bitMatrix;\r\n            for (let e = 0, r = t.getWidth(); e < r; e++)\r\n                for (let r = e + 1, n = t.getHeight(); r < n; r++) t.get(e, r) !== t.get(r, e) && (t.flip(r, e), t.flip(e, r))\r\n        }\r\n    }\r\n    class me {\r\n        constructor(t, e) {\r\n            this.numDataCodewords = t, this.codewords = e\r\n        }\r\n        static getDataBlocks(t, e, r) {\r\n            if (t.length !== e.getTotalCodewords()) throw new o;\r\n            const n = e.getECBlocksForLevel(r);\r\n            let i = 0;\r\n            const s = n.getECBlocks();\r\n            for (const t of s) i += t.getCount();\r\n            const a = new Array(i);\r\n            let l = 0;\r\n            for (const t of s)\r\n                for (let e = 0; e < t.getCount(); e++) {\r\n                    const e = t.getDataCodewords(),\r\n                            r = n.getECCodewordsPerBlock() + e;\r\n                    a[l++] = new me(e, new Uint8Array(r))\r\n                }\r\n            const h = a[0].codewords.length;\r\n            let c = a.length - 1;\r\n            for (; c >= 0;) {\r\n                if (a[c].codewords.length === h) break;\r\n                c--\r\n            }\r\n            c++;\r\n            const u = h - n.getECCodewordsPerBlock();\r\n            let d = 0;\r\n            for (let e = 0; e < u; e++)\r\n                for (let r = 0; r < l; r++) a[r].codewords[e] = t[d++];\r\n            for (let e = c; e < l; e++) a[e].codewords[u] = t[d++];\r\n            const g = a[0].codewords.length;\r\n            for (let e = u; e < g; e++)\r\n                for (let r = 0; r < l; r++) {\r\n                    const n = r < c ? e : e + 1;\r\n                    a[r].codewords[n] = t[d++]\r\n                }\r\n            return a\r\n        }\r\n        getNumDataCodewords() {\r\n            return this.numDataCodewords\r\n        }\r\n        getCodewords() {\r\n            return this.codewords\r\n        }\r\n    }! function(t) {\r\n        t[t.TERMINATOR = 0] = \"TERMINATOR\", t[t.NUMERIC = 1] = \"NUMERIC\", t[t.ALPHANUMERIC = 2] = \"ALPHANUMERIC\", t[t.STRUCTURED_APPEND = 3] = \"STRUCTURED_APPEND\", t[t.BYTE = 4] = \"BYTE\", t[t.ECI = 5] = \"ECI\", t[t.KANJI = 6] = \"KANJI\", t[t.FNC1_FIRST_POSITION = 7] = \"FNC1_FIRST_POSITION\", t[t.FNC1_SECOND_POSITION = 8] = \"FNC1_SECOND_POSITION\", t[t.HANZI = 9] = \"HANZI\"\r\n    }(G || (G = {}));\r\n    class _e {\r\n        constructor(t, e, r, n) {\r\n            this.value = t, this.stringValue = e, this.characterCountBitsForVersions = r, this.bits = n, _e.FOR_BITS.set(n, this), _e.FOR_VALUE.set(t, this)\r\n        }\r\n        static forBits(t) {\r\n            const e = _e.FOR_BITS.get(t);\r\n            if (void 0 === e) throw new o;\r\n            return e\r\n        }\r\n        getCharacterCountBits(t) {\r\n            const e = t.getVersionNumber();\r\n            let r;\r\n            return r = e <= 9 ? 0 : e <= 26 ? 1 : 2, this.characterCountBitsForVersions[r]\r\n        }\r\n        getValue() {\r\n            return this.value\r\n        }\r\n        getBits() {\r\n            return this.bits\r\n        }\r\n        equals(t) {\r\n            if (!(t instanceof _e)) return !1;\r\n            const e = t;\r\n            return this.value === e.value\r\n        }\r\n        toString() {\r\n            return this.stringValue\r\n        }\r\n    }\r\n    _e.FOR_BITS = new Map, _e.FOR_VALUE = new Map, _e.TERMINATOR = new _e(G.TERMINATOR, \"TERMINATOR\", Int32Array.from([0, 0, 0]), 0), _e.NUMERIC = new _e(G.NUMERIC, \"NUMERIC\", Int32Array.from([10, 12, 14]), 1), _e.ALPHANUMERIC = new _e(G.ALPHANUMERIC, \"ALPHANUMERIC\", Int32Array.from([9, 11, 13]), 2), _e.STRUCTURED_APPEND = new _e(G.STRUCTURED_APPEND, \"STRUCTURED_APPEND\", Int32Array.from([0, 0, 0]), 3), _e.BYTE = new _e(G.BYTE, \"BYTE\", Int32Array.from([8, 16, 16]), 4), _e.ECI = new _e(G.ECI, \"ECI\", Int32Array.from([0, 0, 0]), 7), _e.KANJI = new _e(G.KANJI, \"KANJI\", Int32Array.from([8, 10, 12]), 8), _e.FNC1_FIRST_POSITION = new _e(G.FNC1_FIRST_POSITION, \"FNC1_FIRST_POSITION\", Int32Array.from([0, 0, 0]), 5), _e.FNC1_SECOND_POSITION = new _e(G.FNC1_SECOND_POSITION, \"FNC1_SECOND_POSITION\", Int32Array.from([0, 0, 0]), 9), _e.HANZI = new _e(G.HANZI, \"HANZI\", Int32Array.from([8, 10, 12]), 13);\r\n    class Ie {\r\n        static decode(t, e, r, n) {\r\n            const i = new ae(t);\r\n            let s = new p;\r\n            const o = new Array;\r\n            let a = -1,\r\n                    l = -1;\r\n            try {\r\n                let t, r = null,\r\n                        h = !1;\r\n                do {\r\n                    if (i.available() < 4) t = _e.TERMINATOR;\r\n                    else {\r\n                        const e = i.readBits(4);\r\n                        t = _e.forBits(e)\r\n                    }\r\n                    switch (t) {\r\n                        case _e.TERMINATOR:\r\n                            break;\r\n                        case _e.FNC1_FIRST_POSITION:\r\n                        case _e.FNC1_SECOND_POSITION:\r\n                            h = !0;\r\n                            break;\r\n                        case _e.STRUCTURED_APPEND:\r\n                            if (i.available() < 16) throw new E;\r\n                            a = i.readBits(8), l = i.readBits(8);\r\n                            break;\r\n                        case _e.ECI:\r\n                            const c = Ie.parseECIValue(i);\r\n                            if (null === (r = m.getCharacterSetECIByValue(c))) throw new E;\r\n                            break;\r\n                        case _e.HANZI:\r\n                            const u = i.readBits(4),\r\n                                    d = i.readBits(t.getCharacterCountBits(e));\r\n                            u === Ie.GB2312_SUBSET && Ie.decodeHanziSegment(i, s, d);\r\n                            break;\r\n                        default:\r\n                            const g = i.readBits(t.getCharacterCountBits(e));\r\n                            switch (t) {\r\n                                case _e.NUMERIC:\r\n                                    Ie.decodeNumericSegment(i, s, g);\r\n                                    break;\r\n                                case _e.ALPHANUMERIC:\r\n                                    Ie.decodeAlphanumericSegment(i, s, g, h);\r\n                                    break;\r\n                                case _e.BYTE:\r\n                                    Ie.decodeByteSegment(i, s, g, r, o, n);\r\n                                    break;\r\n                                case _e.KANJI:\r\n                                    Ie.decodeKanjiSegment(i, s, g);\r\n                                    break;\r\n                                default:\r\n                                    throw new E\r\n                            }\r\n                    }\r\n                } while (t !== _e.TERMINATOR)\r\n            } catch (t) {\r\n                throw new E\r\n            }\r\n            return new z(t, s.toString(), 0 === o.length ? null : o, null === r ? null : r.toString(), a, l)\r\n        }\r\n        static decodeHanziSegment(t, e, r) {\r\n            if (13 * r > t.available()) throw new E;\r\n            const n = new Uint8Array(2 * r);\r\n            let i = 0;\r\n            for (; r > 0;) {\r\n                const e = t.readBits(13);\r\n                let s = e / 96 << 8 & 4294967295 | e % 96;\r\n                s += s < 959 ? 41377 : 42657, n[i] = s >> 8 & 255, n[i + 1] = 255 & s, i += 2, r--\r\n            }\r\n            try {\r\n                e.append(I.decode(n, S.GB2312))\r\n            } catch (t) {\r\n                throw new E(t)\r\n            }\r\n        }\r\n        static decodeKanjiSegment(t, e, r) {\r\n            if (13 * r > t.available()) throw new E;\r\n            const n = new Uint8Array(2 * r);\r\n            let i = 0;\r\n            for (; r > 0;) {\r\n                const e = t.readBits(13);\r\n                let s = e / 192 << 8 & 4294967295 | e % 192;\r\n                s += s < 7936 ? 33088 : 49472, n[i] = s >> 8, n[i + 1] = s, i += 2, r--\r\n            }\r\n            try {\r\n                e.append(I.decode(n, S.SHIFT_JIS))\r\n            } catch (t) {\r\n                throw new E(t)\r\n            }\r\n        }\r\n        static decodeByteSegment(t, e, r, n, i, s) {\r\n            if (8 * r > t.available()) throw new E;\r\n            const o = new Uint8Array(r);\r\n            for (let e = 0; e < r; e++) o[e] = t.readBits(8);\r\n            let a;\r\n            a = null === n ? S.guessEncoding(o, s) : n.getName();\r\n            try {\r\n                e.append(I.decode(o, a))\r\n            } catch (t) {\r\n                throw new E(t)\r\n            }\r\n            i.push(o)\r\n        }\r\n        static toAlphaNumericChar(t) {\r\n            if (t >= Ie.ALPHANUMERIC_CHARS.length) throw new E;\r\n            return Ie.ALPHANUMERIC_CHARS[t]\r\n        }\r\n        static decodeAlphanumericSegment(t, e, r, n) {\r\n            const i = e.length();\r\n            for (; r > 1;) {\r\n                if (t.available() < 11) throw new E;\r\n                const n = t.readBits(11);\r\n                e.append(Ie.toAlphaNumericChar(Math.floor(n / 45))), e.append(Ie.toAlphaNumericChar(n % 45)), r -= 2\r\n            }\r\n            if (1 === r) {\r\n                if (t.available() < 6) throw new E;\r\n                e.append(Ie.toAlphaNumericChar(t.readBits(6)))\r\n            }\r\n            if (n)\r\n                for (let t = i; t < e.length(); t++) \"%\" === e.charAt(t) && (t < e.length() - 1 && \"%\" === e.charAt(t + 1) ? e.deleteCharAt(t + 1) : e.setCharAt(t, String.fromCharCode(29)))\r\n        }\r\n        static decodeNumericSegment(t, e, r) {\r\n            for (; r >= 3;) {\r\n                if (t.available() < 10) throw new E;\r\n                const n = t.readBits(10);\r\n                if (n >= 1e3) throw new E;\r\n                e.append(Ie.toAlphaNumericChar(Math.floor(n / 100))), e.append(Ie.toAlphaNumericChar(Math.floor(n / 10) % 10)), e.append(Ie.toAlphaNumericChar(n % 10)), r -= 3\r\n            }\r\n            if (2 === r) {\r\n                if (t.available() < 7) throw new E;\r\n                const r = t.readBits(7);\r\n                if (r >= 100) throw new E;\r\n                e.append(Ie.toAlphaNumericChar(Math.floor(r / 10))), e.append(Ie.toAlphaNumericChar(r % 10))\r\n            } else if (1 === r) {\r\n                if (t.available() < 4) throw new E;\r\n                const r = t.readBits(4);\r\n                if (r >= 10) throw new E;\r\n                e.append(Ie.toAlphaNumericChar(r))\r\n            }\r\n        }\r\n        static parseECIValue(t) {\r\n            const e = t.readBits(8);\r\n            if (0 == (128 & e)) return 127 & e;\r\n            if (128 == (192 & e)) {\r\n                return (63 & e) << 8 & 4294967295 | t.readBits(8)\r\n            }\r\n            if (192 == (224 & e)) {\r\n                return (31 & e) << 16 & 4294967295 | t.readBits(16)\r\n            }\r\n            throw new E\r\n        }\r\n    }\r\n    Ie.ALPHANUMERIC_CHARS = \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:\", Ie.GB2312_SUBSET = 1;\r\n    class Se {\r\n        constructor(t) {\r\n            this.mirrored = t\r\n        }\r\n        isMirrored() {\r\n            return this.mirrored\r\n        }\r\n        applyMirroredCorrection(t) {\r\n            if (!this.mirrored || null === t || t.length < 3) return;\r\n            const e = t[0];\r\n            t[0] = t[2], t[2] = e\r\n        }\r\n    }\r\n    class pe {\r\n        constructor() {\r\n            this.rsDecoder = new J(q.QR_CODE_FIELD_256)\r\n        }\r\n        decodeBooleanArray(t, e) {\r\n            return this.decodeBitMatrix(T.parseFromBooleanArray(t), e)\r\n        }\r\n        decodeBitMatrix(t, e) {\r\n            const r = new Ee(t);\r\n            let n = null;\r\n            try {\r\n                return this.decodeBitMatrixParser(r, e)\r\n            } catch (t) {\r\n                n = t\r\n            }\r\n            try {\r\n                r.remask(), r.setMirror(!0), r.readVersion(), r.readFormatInformation(), r.mirror();\r\n                const t = this.decodeBitMatrixParser(r, e);\r\n                return t.setOther(new Se(!0)), t\r\n            } catch (t) {\r\n                if (null !== n) throw n;\r\n                throw t\r\n            }\r\n        }\r\n        decodeBitMatrixParser(t, e) {\r\n            const r = t.readVersion(),\r\n                    n = t.readFormatInformation().getErrorCorrectionLevel(),\r\n                    i = t.readCodewords(),\r\n                    s = me.getDataBlocks(i, r, n);\r\n            let o = 0;\r\n            for (const t of s) o += t.getNumDataCodewords();\r\n            const a = new Uint8Array(o);\r\n            let l = 0;\r\n            for (const t of s) {\r\n                const e = t.getCodewords(),\r\n                        r = t.getNumDataCodewords();\r\n                this.correctErrors(e, r);\r\n                for (let t = 0; t < r; t++) a[l++] = e[t]\r\n            }\r\n            return Ie.decode(a, r, n, e)\r\n        }\r\n        correctErrors(t, e) {\r\n            const r = new Int32Array(t);\r\n            try {\r\n                this.rsDecoder.decode(r, t.length - e)\r\n            } catch (t) {\r\n                throw new l\r\n            }\r\n            for (let n = 0; n < e; n++) t[n] = r[n]\r\n        }\r\n    }\r\n    class Te extends rt {\r\n        constructor(t, e, r) {\r\n            super(t, e), this.estimatedModuleSize = r\r\n        }\r\n        aboutEquals(t, e, r) {\r\n            if (Math.abs(e - this.getY()) <= t && Math.abs(r - this.getX()) <= t) {\r\n                const e = Math.abs(t - this.estimatedModuleSize);\r\n                return e <= 1 || e <= this.estimatedModuleSize\r\n            }\r\n            return !1\r\n        }\r\n        combineEstimate(t, e, r) {\r\n            const n = (this.getX() + e) / 2,\r\n                    i = (this.getY() + t) / 2,\r\n                    s = (this.estimatedModuleSize + r) / 2;\r\n            return new Te(n, i, s)\r\n        }\r\n    }\r\n    class Re {\r\n        constructor(t, e, r, n, i, s, o) {\r\n            this.image = t, this.startX = e, this.startY = r, this.width = n, this.height = i, this.moduleSize = s, this.resultPointCallback = o, this.possibleCenters = [], this.crossCheckStateCount = new Int32Array(3)\r\n        }\r\n        find() {\r\n            const t = this.startX,\r\n                    e = this.height,\r\n                    r = t + this.width,\r\n                    n = this.startY + e / 2,\r\n                    i = new Int32Array(3),\r\n                    s = this.image;\r\n            for (let o = 0; o < e; o++) {\r\n                const e = n + (0 == (1 & o) ? Math.floor((o + 1) / 2) : -Math.floor((o + 1) / 2));\r\n                i[0] = 0, i[1] = 0, i[2] = 0;\r\n                let a = t;\r\n                for (; a < r && !s.get(a, e);) a++;\r\n                let l = 0;\r\n                for (; a < r;) {\r\n                    if (s.get(a, e))\r\n                        if (1 === l) i[1]++;\r\n                        else if (2 === l) {\r\n                            if (this.foundPatternCross(i)) {\r\n                                const t = this.handlePossibleCenter(i, e, a);\r\n                                if (null !== t) return t\r\n                            }\r\n                            i[0] = i[2], i[1] = 1, i[2] = 0, l = 1\r\n                        } else i[++l]++;\r\n                    else 1 === l && l++, i[l]++;\r\n                    a++\r\n                }\r\n                if (this.foundPatternCross(i)) {\r\n                    const t = this.handlePossibleCenter(i, e, r);\r\n                    if (null !== t) return t\r\n                }\r\n            }\r\n            if (0 !== this.possibleCenters.length) return this.possibleCenters[0];\r\n            throw new R\r\n        }\r\n        static centerFromEnd(t, e) {\r\n            return e - t[2] - t[1] / 2\r\n        }\r\n        foundPatternCross(t) {\r\n            const e = this.moduleSize,\r\n                    r = e / 2;\r\n            for (let n = 0; n < 3; n++)\r\n                if (Math.abs(e - t[n]) >= r) return !1;\r\n            return !0\r\n        }\r\n        crossCheckVertical(t, e, r, n) {\r\n            const i = this.image,\r\n                    s = i.getHeight(),\r\n                    o = this.crossCheckStateCount;\r\n            o[0] = 0, o[1] = 0, o[2] = 0;\r\n            let a = t;\r\n            for (; a >= 0 && i.get(e, a) && o[1] <= r;) o[1]++, a--;\r\n            if (a < 0 || o[1] > r) return NaN;\r\n            for (; a >= 0 && !i.get(e, a) && o[0] <= r;) o[0]++, a--;\r\n            if (o[0] > r) return NaN;\r\n            for (a = t + 1; a < s && i.get(e, a) && o[1] <= r;) o[1]++, a++;\r\n            if (a === s || o[1] > r) return NaN;\r\n            for (; a < s && !i.get(e, a) && o[2] <= r;) o[2]++, a++;\r\n            if (o[2] > r) return NaN;\r\n            const l = o[0] + o[1] + o[2];\r\n            return 5 * Math.abs(l - n) >= 2 * n ? NaN : this.foundPatternCross(o) ? Re.centerFromEnd(o, a) : NaN\r\n        }\r\n        handlePossibleCenter(t, e, r) {\r\n            const n = t[0] + t[1] + t[2],\r\n                    i = Re.centerFromEnd(t, r),\r\n                    s = this.crossCheckVertical(e, i, 2 * t[1], n);\r\n            if (!isNaN(s)) {\r\n                const e = (t[0] + t[1] + t[2]) / 3;\r\n                for (const t of this.possibleCenters)\r\n                    if (t.aboutEquals(e, s, i)) return t.combineEstimate(s, i, e);\r\n                const r = new Te(i, s, e);\r\n                this.possibleCenters.push(r), null !== this.resultPointCallback && void 0 !== this.resultPointCallback && this.resultPointCallback.foundPossibleResultPoint(r)\r\n            }\r\n            return null\r\n        }\r\n    }\r\n    class Ne extends rt {\r\n        constructor(t, e, r, n) {\r\n            super(t, e), this.estimatedModuleSize = r, this.count = n, void 0 === n && (this.count = 1)\r\n        }\r\n        getEstimatedModuleSize() {\r\n            return this.estimatedModuleSize\r\n        }\r\n        getCount() {\r\n            return this.count\r\n        }\r\n        aboutEquals(t, e, r) {\r\n            if (Math.abs(e - this.getY()) <= t && Math.abs(r - this.getX()) <= t) {\r\n                const e = Math.abs(t - this.estimatedModuleSize);\r\n                return e <= 1 || e <= this.estimatedModuleSize\r\n            }\r\n            return !1\r\n        }\r\n        combineEstimate(t, e, r) {\r\n            const n = this.count + 1,\r\n                    i = (this.count * this.getX() + e) / n,\r\n                    s = (this.count * this.getY() + t) / n,\r\n                    o = (this.count * this.estimatedModuleSize + r) / n;\r\n            return new Ne(i, s, o, n)\r\n        }\r\n    }\r\n    class De {\r\n        constructor(t) {\r\n            this.bottomLeft = t[0], this.topLeft = t[1], this.topRight = t[2]\r\n        }\r\n        getBottomLeft() {\r\n            return this.bottomLeft\r\n        }\r\n        getTopLeft() {\r\n            return this.topLeft\r\n        }\r\n        getTopRight() {\r\n            return this.topRight\r\n        }\r\n    }\r\n    class ye {\r\n        constructor(t, e) {\r\n            this.image = t, this.resultPointCallback = e, this.possibleCenters = [], this.crossCheckStateCount = new Int32Array(5), this.resultPointCallback = e\r\n        }\r\n        getImage() {\r\n            return this.image\r\n        }\r\n        getPossibleCenters() {\r\n            return this.possibleCenters\r\n        }\r\n        find(t) {\r\n            const e = null != t && void 0 !== t.get(C.TRY_HARDER),\r\n                    r = null != t && void 0 !== t.get(C.PURE_BARCODE),\r\n                    n = this.image,\r\n                    i = n.getHeight(),\r\n                    s = n.getWidth();\r\n            let o = Math.floor(3 * i / (4 * ye.MAX_MODULES));\r\n            (o < ye.MIN_SKIP || e) && (o = ye.MIN_SKIP);\r\n            let a = !1;\r\n            const l = new Int32Array(5);\r\n            for (let t = o - 1; t < i && !a; t += o) {\r\n                l[0] = 0, l[1] = 0, l[2] = 0, l[3] = 0, l[4] = 0;\r\n                let e = 0;\r\n                for (let i = 0; i < s; i++)\r\n                    if (n.get(i, t)) 1 == (1 & e) && e++, l[e]++;\r\n                    else if (0 == (1 & e))\r\n                        if (4 === e)\r\n                            if (ye.foundPatternCross(l)) {\r\n                                if (!0 !== this.handlePossibleCenter(l, t, i, r)) {\r\n                                    l[0] = l[2], l[1] = l[3], l[2] = l[4], l[3] = 1, l[4] = 0, e = 3;\r\n                                    continue\r\n                                }\r\n                                if (o = 2, !0 === this.hasSkipped) a = this.haveMultiplyConfirmedCenters();\r\n                                else {\r\n                                    const e = this.findRowSkip();\r\n                                    e > l[2] && (t += e - l[2] - o, i = s - 1)\r\n                                }\r\n                                e = 0, l[0] = 0, l[1] = 0, l[2] = 0, l[3] = 0, l[4] = 0\r\n                            } else l[0] = l[2], l[1] = l[3], l[2] = l[4], l[3] = 1, l[4] = 0, e = 3;\r\n                        else l[++e]++;\r\n                    else l[e]++;\r\n                if (ye.foundPatternCross(l)) {\r\n                    !0 === this.handlePossibleCenter(l, t, s, r) && (o = l[0], this.hasSkipped && (a = this.haveMultiplyConfirmedCenters()))\r\n                }\r\n            }\r\n            const h = this.selectBestPatterns();\r\n            return rt.orderBestPatterns(h), new De(h)\r\n        }\r\n        static centerFromEnd(t, e) {\r\n            return e - t[4] - t[3] - t[2] / 2\r\n        }\r\n        static foundPatternCross(t) {\r\n            let e = 0;\r\n            for (let r = 0; r < 5; r++) {\r\n                const n = t[r];\r\n                if (0 === n) return !1;\r\n                e += n\r\n            }\r\n            if (e < 7) return !1;\r\n            const r = e / 7,\r\n                    n = r / 2;\r\n            return Math.abs(r - t[0]) < n && Math.abs(r - t[1]) < n && Math.abs(3 * r - t[2]) < 3 * n && Math.abs(r - t[3]) < n && Math.abs(r - t[4]) < n\r\n        }\r\n        getCrossCheckStateCount() {\r\n            const t = this.crossCheckStateCount;\r\n            return t[0] = 0, t[1] = 0, t[2] = 0, t[3] = 0, t[4] = 0, t\r\n        }\r\n        crossCheckDiagonal(t, e, r, n) {\r\n            const i = this.getCrossCheckStateCount();\r\n            let s = 0;\r\n            const o = this.image;\r\n            for (; t >= s && e >= s && o.get(e - s, t - s);) i[2]++, s++;\r\n            if (t < s || e < s) return !1;\r\n            for (; t >= s && e >= s && !o.get(e - s, t - s) && i[1] <= r;) i[1]++, s++;\r\n            if (t < s || e < s || i[1] > r) return !1;\r\n            for (; t >= s && e >= s && o.get(e - s, t - s) && i[0] <= r;) i[0]++, s++;\r\n            if (i[0] > r) return !1;\r\n            const a = o.getHeight(),\r\n                    l = o.getWidth();\r\n            for (s = 1; t + s < a && e + s < l && o.get(e + s, t + s);) i[2]++, s++;\r\n            if (t + s >= a || e + s >= l) return !1;\r\n            for (; t + s < a && e + s < l && !o.get(e + s, t + s) && i[3] < r;) i[3]++, s++;\r\n            if (t + s >= a || e + s >= l || i[3] >= r) return !1;\r\n            for (; t + s < a && e + s < l && o.get(e + s, t + s) && i[4] < r;) i[4]++, s++;\r\n            if (i[4] >= r) return !1;\r\n            const h = i[0] + i[1] + i[2] + i[3] + i[4];\r\n            return Math.abs(h - n) < 2 * n && ye.foundPatternCross(i)\r\n        }\r\n        crossCheckVertical(t, e, r, n) {\r\n            const i = this.image,\r\n                    s = i.getHeight(),\r\n                    o = this.getCrossCheckStateCount();\r\n            let a = t;\r\n            for (; a >= 0 && i.get(e, a);) o[2]++, a--;\r\n            if (a < 0) return NaN;\r\n            for (; a >= 0 && !i.get(e, a) && o[1] <= r;) o[1]++, a--;\r\n            if (a < 0 || o[1] > r) return NaN;\r\n            for (; a >= 0 && i.get(e, a) && o[0] <= r;) o[0]++, a--;\r\n            if (o[0] > r) return NaN;\r\n            for (a = t + 1; a < s && i.get(e, a);) o[2]++, a++;\r\n            if (a === s) return NaN;\r\n            for (; a < s && !i.get(e, a) && o[3] < r;) o[3]++, a++;\r\n            if (a === s || o[3] >= r) return NaN;\r\n            for (; a < s && i.get(e, a) && o[4] < r;) o[4]++, a++;\r\n            if (o[4] >= r) return NaN;\r\n            const l = o[0] + o[1] + o[2] + o[3] + o[4];\r\n            return 5 * Math.abs(l - n) >= 2 * n ? NaN : ye.foundPatternCross(o) ? ye.centerFromEnd(o, a) : NaN\r\n        }\r\n        crossCheckHorizontal(t, e, r, n) {\r\n            const i = this.image,\r\n                    s = i.getWidth(),\r\n                    o = this.getCrossCheckStateCount();\r\n            let a = t;\r\n            for (; a >= 0 && i.get(a, e);) o[2]++, a--;\r\n            if (a < 0) return NaN;\r\n            for (; a >= 0 && !i.get(a, e) && o[1] <= r;) o[1]++, a--;\r\n            if (a < 0 || o[1] > r) return NaN;\r\n            for (; a >= 0 && i.get(a, e) && o[0] <= r;) o[0]++, a--;\r\n            if (o[0] > r) return NaN;\r\n            for (a = t + 1; a < s && i.get(a, e);) o[2]++, a++;\r\n            if (a === s) return NaN;\r\n            for (; a < s && !i.get(a, e) && o[3] < r;) o[3]++, a++;\r\n            if (a === s || o[3] >= r) return NaN;\r\n            for (; a < s && i.get(a, e) && o[4] < r;) o[4]++, a++;\r\n            if (o[4] >= r) return NaN;\r\n            const l = o[0] + o[1] + o[2] + o[3] + o[4];\r\n            return 5 * Math.abs(l - n) >= n ? NaN : ye.foundPatternCross(o) ? ye.centerFromEnd(o, a) : NaN\r\n        }\r\n        handlePossibleCenter(t, e, r, n) {\r\n            const i = t[0] + t[1] + t[2] + t[3] + t[4];\r\n            let s = ye.centerFromEnd(t, r),\r\n                    o = this.crossCheckVertical(e, Math.floor(s), t[2], i);\r\n            if (!isNaN(o) && (s = this.crossCheckHorizontal(Math.floor(s), Math.floor(o), t[2], i), !isNaN(s) && (!n || this.crossCheckDiagonal(Math.floor(o), Math.floor(s), t[2], i)))) {\r\n                const t = i / 7;\r\n                let e = !1;\r\n                const r = this.possibleCenters;\r\n                for (let n = 0, i = r.length; n < i; n++) {\r\n                    const i = r[n];\r\n                    if (i.aboutEquals(t, o, s)) {\r\n                        r[n] = i.combineEstimate(o, s, t), e = !0;\r\n                        break\r\n                    }\r\n                }\r\n                if (!e) {\r\n                    const e = new Ne(s, o, t);\r\n                    r.push(e), null !== this.resultPointCallback && void 0 !== this.resultPointCallback && this.resultPointCallback.foundPossibleResultPoint(e)\r\n                }\r\n                return !0\r\n            }\r\n            return !1\r\n        }\r\n        findRowSkip() {\r\n            if (this.possibleCenters.length <= 1) return 0;\r\n            let t = null;\r\n            for (const e of this.possibleCenters)\r\n                if (e.getCount() >= ye.CENTER_QUORUM) {\r\n                    if (null != t) return this.hasSkipped = !0, Math.floor((Math.abs(t.getX() - e.getX()) - Math.abs(t.getY() - e.getY())) / 2);\r\n                    t = e\r\n                } return 0\r\n        }\r\n        haveMultiplyConfirmedCenters() {\r\n            let t = 0,\r\n                    e = 0;\r\n            const r = this.possibleCenters.length;\r\n            for (const r of this.possibleCenters) r.getCount() >= ye.CENTER_QUORUM && (t++, e += r.getEstimatedModuleSize());\r\n            if (t < 3) return !1;\r\n            const n = e / r;\r\n            let i = 0;\r\n            for (const t of this.possibleCenters) i += Math.abs(t.getEstimatedModuleSize() - n);\r\n            return i <= .05 * e\r\n        }\r\n        selectBestPatterns() {\r\n            const t = this.possibleCenters.length;\r\n            if (t < 3) throw new R;\r\n            const e = this.possibleCenters;\r\n            let r;\r\n            if (t > 3) {\r\n                let n = 0,\r\n                        i = 0;\r\n                for (const t of this.possibleCenters) {\r\n                    const e = t.getEstimatedModuleSize();\r\n                    n += e, i += e * e\r\n                }\r\n                r = n / t;\r\n                let s = Math.sqrt(i / t - r * r);\r\n                e.sort((t, e) => {\r\n                    const n = Math.abs(e.getEstimatedModuleSize() - r),\r\n                            i = Math.abs(t.getEstimatedModuleSize() - r);\r\n                    return n < i ? -1 : n > i ? 1 : 0\r\n                });\r\n                const o = Math.max(.2 * r, s);\r\n                for (let t = 0; t < e.length && e.length > 3; t++) {\r\n                    const n = e[t];\r\n                    Math.abs(n.getEstimatedModuleSize() - r) > o && (e.splice(t, 1), t--)\r\n                }\r\n            }\r\n            if (e.length > 3) {\r\n                let t = 0;\r\n                for (const r of e) t += r.getEstimatedModuleSize();\r\n                r = t / e.length, e.sort((t, e) => {\r\n                    if (e.getCount() === t.getCount()) {\r\n                        const n = Math.abs(e.getEstimatedModuleSize() - r),\r\n                                i = Math.abs(t.getEstimatedModuleSize() - r);\r\n                        return n < i ? 1 : n > i ? -1 : 0\r\n                    }\r\n                    return e.getCount() - t.getCount()\r\n                }), e.splice(3)\r\n            }\r\n            return [e[0], e[1], e[2]]\r\n        }\r\n    }\r\n    ye.CENTER_QUORUM = 2, ye.MIN_SKIP = 3, ye.MAX_MODULES = 57;\r\n    class Oe {\r\n        constructor(t) {\r\n            this.image = t\r\n        }\r\n        getImage() {\r\n            return this.image\r\n        }\r\n        getResultPointCallback() {\r\n            return this.resultPointCallback\r\n        }\r\n        detect(t) {\r\n            this.resultPointCallback = null == t ? null : t.get(C.NEED_RESULT_POINT_CALLBACK);\r\n            const e = new ye(this.image, this.resultPointCallback).find(t);\r\n            return this.processFinderPatternInfo(e)\r\n        }\r\n        processFinderPatternInfo(t) {\r\n            const e = t.getTopLeft(),\r\n                    r = t.getTopRight(),\r\n                    n = t.getBottomLeft(),\r\n                    i = this.calculateModuleSize(e, r, n);\r\n            if (i < 1) throw new R(\"No pattern found in proccess finder.\");\r\n            const s = Oe.computeDimension(e, r, n, i),\r\n                    o = Ae.getProvisionalVersionForDimension(s),\r\n                    a = o.getDimensionForVersion() - 7;\r\n            let l = null;\r\n            if (o.getAlignmentPatternCenters().length > 0) {\r\n                const t = r.getX() - e.getX() + n.getX(),\r\n                        s = r.getY() - e.getY() + n.getY(),\r\n                        o = 1 - 3 / a,\r\n                        h = Math.floor(e.getX() + o * (t - e.getX())),\r\n                        c = Math.floor(e.getY() + o * (s - e.getY()));\r\n                for (let t = 4; t <= 16; t <<= 1) try {\r\n                    l = this.findAlignmentInRegion(i, h, c, t);\r\n                    break\r\n                } catch (t) {\r\n                    if (!(t instanceof R)) throw t\r\n                }\r\n            }\r\n            const h = Oe.createTransform(e, r, n, l, s),\r\n                    c = Oe.sampleGrid(this.image, h, s);\r\n            let u;\r\n            return new nt(c, u = null === l ? [n, e, r] : [n, e, r, l])\r\n        }\r\n        static createTransform(t, e, r, n, i) {\r\n            const s = i - 3.5;\r\n            let o, a, l, h;\r\n            return null !== n ? (o = n.getX(), a = n.getY(), h = l = s - 3) : (o = e.getX() - t.getX() + r.getX(), a = e.getY() - t.getY() + r.getY(), l = s, h = s), at.quadrilateralToQuadrilateral(3.5, 3.5, s, 3.5, l, h, 3.5, s, t.getX(), t.getY(), e.getX(), e.getY(), o, a, r.getX(), r.getY())\r\n        }\r\n        static sampleGrid(t, e, r) {\r\n            return ht.getInstance().sampleGridWithTransform(t, r, r, e)\r\n        }\r\n        static computeDimension(t, e, r, n) {\r\n            const i = tt.round(rt.distance(t, e) / n),\r\n                    s = tt.round(rt.distance(t, r) / n);\r\n            let o = Math.floor((i + s) / 2) + 7;\r\n            switch (3 & o) {\r\n                case 0:\r\n                    o++;\r\n                    break;\r\n                case 2:\r\n                    o--;\r\n                    break;\r\n                case 3:\r\n                    throw new R(\"Dimensions could be not found.\")\r\n            }\r\n            return o\r\n        }\r\n        calculateModuleSize(t, e, r) {\r\n            return (this.calculateModuleSizeOneWay(t, e) + this.calculateModuleSizeOneWay(t, r)) / 2\r\n        }\r\n        calculateModuleSizeOneWay(t, e) {\r\n            const r = this.sizeOfBlackWhiteBlackRunBothWays(Math.floor(t.getX()), Math.floor(t.getY()), Math.floor(e.getX()), Math.floor(e.getY())),\r\n                    n = this.sizeOfBlackWhiteBlackRunBothWays(Math.floor(e.getX()), Math.floor(e.getY()), Math.floor(t.getX()), Math.floor(t.getY()));\r\n            return isNaN(r) ? n / 7 : isNaN(n) ? r / 7 : (r + n) / 14\r\n        }\r\n        sizeOfBlackWhiteBlackRunBothWays(t, e, r, n) {\r\n            let i = this.sizeOfBlackWhiteBlackRun(t, e, r, n),\r\n                    s = 1,\r\n                    o = t - (r - t);\r\n            o < 0 ? (s = t / (t - o), o = 0) : o >= this.image.getWidth() && (s = (this.image.getWidth() - 1 - t) / (o - t), o = this.image.getWidth() - 1);\r\n            let a = Math.floor(e - (n - e) * s);\r\n            return s = 1, a < 0 ? (s = e / (e - a), a = 0) : a >= this.image.getHeight() && (s = (this.image.getHeight() - 1 - e) / (a - e), a = this.image.getHeight() - 1), o = Math.floor(t + (o - t) * s), (i += this.sizeOfBlackWhiteBlackRun(t, e, o, a)) - 1\r\n        }\r\n        sizeOfBlackWhiteBlackRun(t, e, r, n) {\r\n            const i = Math.abs(n - e) > Math.abs(r - t);\r\n            if (i) {\r\n                let i = t;\r\n                t = e, e = i, i = r, r = n, n = i\r\n            }\r\n            const s = Math.abs(r - t),\r\n                    o = Math.abs(n - e);\r\n            let a = -s / 2;\r\n            const l = t < r ? 1 : -1,\r\n                    h = e < n ? 1 : -1;\r\n            let c = 0;\r\n            const u = r + l;\r\n            for (let r = t, d = e; r !== u; r += l) {\r\n                const l = i ? d : r,\r\n                        u = i ? r : d;\r\n                if (1 === c === this.image.get(l, u)) {\r\n                    if (2 === c) return tt.distance(r, d, t, e);\r\n                    c++\r\n                }\r\n                if ((a += o) > 0) {\r\n                    if (d === n) break;\r\n                    d += h, a -= s\r\n                }\r\n            }\r\n            return 2 === c ? tt.distance(r + l, n, t, e) : NaN\r\n        }\r\n        findAlignmentInRegion(t, e, r, n) {\r\n            const i = Math.floor(n * t),\r\n                    s = Math.max(0, e - i),\r\n                    o = Math.min(this.image.getWidth() - 1, e + i);\r\n            if (o - s < 3 * t) throw new R(\"Alignment top exceeds estimated module size.\");\r\n            const a = Math.max(0, r - i),\r\n                    l = Math.min(this.image.getHeight() - 1, r + i);\r\n            if (l - a < 3 * t) throw new R(\"Alignment bottom exceeds estimated module size.\");\r\n            return new Re(this.image, s, a, o - s, l - a, t, this.resultPointCallback).find()\r\n        }\r\n    }\r\n    class Me {\r\n        constructor() {\r\n            this.decoder = new pe\r\n        }\r\n        getDecoder() {\r\n            return this.decoder\r\n        }\r\n        decode(t, e) {\r\n            let r, n;\r\n            if (null != e && void 0 !== e.get(C.PURE_BARCODE)) {\r\n                const i = Me.extractPureBits(t.getBlackMatrix());\r\n                r = this.decoder.decodeBitMatrix(i, e), n = Me.NO_POINTS\r\n            } else {\r\n                const i = new Oe(t.getBlackMatrix()).detect(e);\r\n                r = this.decoder.decodeBitMatrix(i.getBits(), e), n = i.getPoints()\r\n            }\r\n            r.getOther() instanceof Se && r.getOther().applyMirroredCorrection(n);\r\n            const i = new F(r.getText(), r.getRawBytes(), void 0, n, k.QR_CODE, void 0),\r\n                    s = r.getByteSegments();\r\n            null !== s && i.putMetadata(W.BYTE_SEGMENTS, s);\r\n            const o = r.getECLevel();\r\n            return null !== o && i.putMetadata(W.ERROR_CORRECTION_LEVEL, o), r.hasStructuredAppend() && (i.putMetadata(W.STRUCTURED_APPEND_SEQUENCE, r.getStructuredAppendSequenceNumber()), i.putMetadata(W.STRUCTURED_APPEND_PARITY, r.getStructuredAppendParity())), i\r\n        }\r\n        reset() {}\r\n        static extractPureBits(t) {\r\n            const e = t.getTopLeftOnBit(),\r\n                    r = t.getBottomRightOnBit();\r\n            if (null === e || null === r) throw new R;\r\n            const n = this.moduleSize(e, t);\r\n            let i = e[1],\r\n                    s = r[1],\r\n                    o = e[0],\r\n                    a = r[0];\r\n            if (o >= a || i >= s) throw new R;\r\n            if (s - i != a - o && (a = o + (s - i)) >= t.getWidth()) throw new R;\r\n            const l = Math.round((a - o + 1) / n),\r\n                    h = Math.round((s - i + 1) / n);\r\n            if (l <= 0 || h <= 0) throw new R;\r\n            if (h !== l) throw new R;\r\n            const c = Math.floor(n / 2);\r\n            i += c;\r\n            const u = (o += c) + Math.floor((l - 1) * n) - a;\r\n            if (u > 0) {\r\n                if (u > c) throw new R;\r\n                o -= u\r\n            }\r\n            const d = i + Math.floor((h - 1) * n) - s;\r\n            if (d > 0) {\r\n                if (d > c) throw new R;\r\n                i -= d\r\n            }\r\n            const g = new T(l, h);\r\n            for (let e = 0; e < h; e++) {\r\n                const r = i + Math.floor(e * n);\r\n                for (let i = 0; i < l; i++) t.get(o + Math.floor(i * n), r) && g.set(i, e)\r\n            }\r\n            return g\r\n        }\r\n        static moduleSize(t, e) {\r\n            const r = e.getHeight(),\r\n                    n = e.getWidth();\r\n            let i = t[0],\r\n                    s = t[1],\r\n                    o = !0,\r\n                    a = 0;\r\n            for (; i < n && s < r;) {\r\n                if (o !== e.get(i, s)) {\r\n                    if (5 == ++a) break;\r\n                    o = !o\r\n                }\r\n                i++, s++\r\n            }\r\n            if (i === n || s === r) throw new R;\r\n            return (i - t[0]) / 7\r\n        }\r\n    }\r\n    Me.NO_POINTS = new Array;\r\n    class be {\r\n        PDF417Common() {}\r\n        static getBitCountSum(t) {\r\n            return tt.sum(t)\r\n        }\r\n        static toIntArray(t) {\r\n            if (null == t || !t.length) return be.EMPTY_INT_ARRAY;\r\n            const e = new Int32Array(t.length);\r\n            let r = 0;\r\n            for (const n of t) e[r++] = n;\r\n            return e\r\n        }\r\n        static getCodeword(t) {\r\n            const e = g.binarySearch(be.SYMBOL_TABLE, 262143 & t);\r\n            return e < 0 ? -1 : (be.CODEWORD_TABLE[e] - 1) % be.NUMBER_OF_CODEWORDS\r\n        }\r\n    }\r\n    be.NUMBER_OF_CODEWORDS = 929, be.MAX_CODEWORDS_IN_BARCODE = be.NUMBER_OF_CODEWORDS - 1, be.MIN_ROWS_IN_BARCODE = 3, be.MAX_ROWS_IN_BARCODE = 90, be.MODULES_IN_CODEWORD = 17, be.MODULES_IN_STOP_PATTERN = 18, be.BARS_IN_MODULE = 8, be.EMPTY_INT_ARRAY = new Int32Array([]), be.SYMBOL_TABLE = Int32Array.from([66142, 66170, 66206, 66236, 66290, 66292, 66350, 66382, 66396, 66454, 66470, 66476, 66594, 66600, 66614, 66626, 66628, 66632, 66640, 66654, 66662, 66668, 66682, 66690, 66718, 66720, 66748, 66758, 66776, 66798, 66802, 66804, 66820, 66824, 66832, 66846, 66848, 66876, 66880, 66936, 66950, 66956, 66968, 66992, 67006, 67022, 67036, 67042, 67044, 67048, 67062, 67118, 67150, 67164, 67214, 67228, 67256, 67294, 67322, 67350, 67366, 67372, 67398, 67404, 67416, 67438, 67474, 67476, 67490, 67492, 67496, 67510, 67618, 67624, 67650, 67656, 67664, 67678, 67686, 67692, 67706, 67714, 67716, 67728, 67742, 67744, 67772, 67782, 67788, 67800, 67822, 67826, 67828, 67842, 67848, 67870, 67872, 67900, 67904, 67960, 67974, 67992, 68016, 68030, 68046, 68060, 68066, 68068, 68072, 68086, 68104, 68112, 68126, 68128, 68156, 68160, 68216, 68336, 68358, 68364, 68376, 68400, 68414, 68448, 68476, 68494, 68508, 68536, 68546, 68548, 68552, 68560, 68574, 68582, 68588, 68654, 68686, 68700, 68706, 68708, 68712, 68726, 68750, 68764, 68792, 68802, 68804, 68808, 68816, 68830, 68838, 68844, 68858, 68878, 68892, 68920, 68976, 68990, 68994, 68996, 69e3, 69008, 69022, 69024, 69052, 69062, 69068, 69080, 69102, 69106, 69108, 69142, 69158, 69164, 69190, 69208, 69230, 69254, 69260, 69272, 69296, 69310, 69326, 69340, 69386, 69394, 69396, 69410, 69416, 69430, 69442, 69444, 69448, 69456, 69470, 69478, 69484, 69554, 69556, 69666, 69672, 69698, 69704, 69712, 69726, 69754, 69762, 69764, 69776, 69790, 69792, 69820, 69830, 69836, 69848, 69870, 69874, 69876, 69890, 69918, 69920, 69948, 69952, 70008, 70022, 70040, 70064, 70078, 70094, 70108, 70114, 70116, 70120, 70134, 70152, 70174, 70176, 70264, 70384, 70412, 70448, 70462, 70496, 70524, 70542, 70556, 70584, 70594, 70600, 70608, 70622, 70630, 70636, 70664, 70672, 70686, 70688, 70716, 70720, 70776, 70896, 71136, 71180, 71192, 71216, 71230, 71264, 71292, 71360, 71416, 71452, 71480, 71536, 71550, 71554, 71556, 71560, 71568, 71582, 71584, 71612, 71622, 71628, 71640, 71662, 71726, 71732, 71758, 71772, 71778, 71780, 71784, 71798, 71822, 71836, 71864, 71874, 71880, 71888, 71902, 71910, 71916, 71930, 71950, 71964, 71992, 72048, 72062, 72066, 72068, 72080, 72094, 72096, 72124, 72134, 72140, 72152, 72174, 72178, 72180, 72206, 72220, 72248, 72304, 72318, 72416, 72444, 72456, 72464, 72478, 72480, 72508, 72512, 72568, 72588, 72600, 72624, 72638, 72654, 72668, 72674, 72676, 72680, 72694, 72726, 72742, 72748, 72774, 72780, 72792, 72814, 72838, 72856, 72880, 72894, 72910, 72924, 72930, 72932, 72936, 72950, 72966, 72972, 72984, 73008, 73022, 73056, 73084, 73102, 73116, 73144, 73156, 73160, 73168, 73182, 73190, 73196, 73210, 73226, 73234, 73236, 73250, 73252, 73256, 73270, 73282, 73284, 73296, 73310, 73318, 73324, 73346, 73348, 73352, 73360, 73374, 73376, 73404, 73414, 73420, 73432, 73454, 73498, 73518, 73522, 73524, 73550, 73564, 73570, 73572, 73576, 73590, 73800, 73822, 73858, 73860, 73872, 73886, 73888, 73916, 73944, 73970, 73972, 73992, 74014, 74016, 74044, 74048, 74104, 74118, 74136, 74160, 74174, 74210, 74212, 74216, 74230, 74244, 74256, 74270, 74272, 74360, 74480, 74502, 74508, 74544, 74558, 74592, 74620, 74638, 74652, 74680, 74690, 74696, 74704, 74726, 74732, 74782, 74784, 74812, 74992, 75232, 75288, 75326, 75360, 75388, 75456, 75512, 75576, 75632, 75646, 75650, 75652, 75664, 75678, 75680, 75708, 75718, 75724, 75736, 75758, 75808, 75836, 75840, 75896, 76016, 76256, 76736, 76824, 76848, 76862, 76896, 76924, 76992, 77048, 77296, 77340, 77368, 77424, 77438, 77536, 77564, 77572, 77576, 77584, 77600, 77628, 77632, 77688, 77702, 77708, 77720, 77744, 77758, 77774, 77788, 77870, 77902, 77916, 77922, 77928, 77966, 77980, 78008, 78018, 78024, 78032, 78046, 78060, 78074, 78094, 78136, 78192, 78206, 78210, 78212, 78224, 78238, 78240, 78268, 78278, 78284, 78296, 78322, 78324, 78350, 78364, 78448, 78462, 78560, 78588, 78600, 78622, 78624, 78652, 78656, 78712, 78726, 78744, 78768, 78782, 78798, 78812, 78818, 78820, 78824, 78838, 78862, 78876, 78904, 78960, 78974, 79072, 79100, 79296, 79352, 79368, 79376, 79390, 79392, 79420, 79424, 79480, 79600, 79628, 79640, 79664, 79678, 79712, 79740, 79772, 79800, 79810, 79812, 79816, 79824, 79838, 79846, 79852, 79894, 79910, 79916, 79942, 79948, 79960, 79982, 79988, 80006, 80024, 80048, 80062, 80078, 80092, 80098, 80100, 80104, 80134, 80140, 80176, 80190, 80224, 80252, 80270, 80284, 80312, 80328, 80336, 80350, 80358, 80364, 80378, 80390, 80396, 80408, 80432, 80446, 80480, 80508, 80576, 80632, 80654, 80668, 80696, 80752, 80766, 80776, 80784, 80798, 80800, 80828, 80844, 80856, 80878, 80882, 80884, 80914, 80916, 80930, 80932, 80936, 80950, 80962, 80968, 80976, 80990, 80998, 81004, 81026, 81028, 81040, 81054, 81056, 81084, 81094, 81100, 81112, 81134, 81154, 81156, 81160, 81168, 81182, 81184, 81212, 81216, 81272, 81286, 81292, 81304, 81328, 81342, 81358, 81372, 81380, 81384, 81398, 81434, 81454, 81458, 81460, 81486, 81500, 81506, 81508, 81512, 81526, 81550, 81564, 81592, 81602, 81604, 81608, 81616, 81630, 81638, 81644, 81702, 81708, 81722, 81734, 81740, 81752, 81774, 81778, 81780, 82050, 82078, 82080, 82108, 82180, 82184, 82192, 82206, 82208, 82236, 82240, 82296, 82316, 82328, 82352, 82366, 82402, 82404, 82408, 82440, 82448, 82462, 82464, 82492, 82496, 82552, 82672, 82694, 82700, 82712, 82736, 82750, 82784, 82812, 82830, 82882, 82884, 82888, 82896, 82918, 82924, 82952, 82960, 82974, 82976, 83004, 83008, 83064, 83184, 83424, 83468, 83480, 83504, 83518, 83552, 83580, 83648, 83704, 83740, 83768, 83824, 83838, 83842, 83844, 83848, 83856, 83872, 83900, 83910, 83916, 83928, 83950, 83984, 84e3, 84028, 84032, 84088, 84208, 84448, 84928, 85040, 85054, 85088, 85116, 85184, 85240, 85488, 85560, 85616, 85630, 85728, 85756, 85764, 85768, 85776, 85790, 85792, 85820, 85824, 85880, 85894, 85900, 85912, 85936, 85966, 85980, 86048, 86080, 86136, 86256, 86496, 86976, 88160, 88188, 88256, 88312, 88560, 89056, 89200, 89214, 89312, 89340, 89536, 89592, 89608, 89616, 89632, 89664, 89720, 89840, 89868, 89880, 89904, 89952, 89980, 89998, 90012, 90040, 90190, 90204, 90254, 90268, 90296, 90306, 90308, 90312, 90334, 90382, 90396, 90424, 90480, 90494, 90500, 90504, 90512, 90526, 90528, 90556, 90566, 90572, 90584, 90610, 90612, 90638, 90652, 90680, 90736, 90750, 90848, 90876, 90884, 90888, 90896, 90910, 90912, 90940, 90944, 91e3, 91014, 91020, 91032, 91056, 91070, 91086, 91100, 91106, 91108, 91112, 91126, 91150, 91164, 91192, 91248, 91262, 91360, 91388, 91584, 91640, 91664, 91678, 91680, 91708, 91712, 91768, 91888, 91928, 91952, 91966, 92e3, 92028, 92046, 92060, 92088, 92098, 92100, 92104, 92112, 92126, 92134, 92140, 92188, 92216, 92272, 92384, 92412, 92608, 92664, 93168, 93200, 93214, 93216, 93244, 93248, 93304, 93424, 93664, 93720, 93744, 93758, 93792, 93820, 93888, 93944, 93980, 94008, 94064, 94078, 94084, 94088, 94096, 94110, 94112, 94140, 94150, 94156, 94168, 94246, 94252, 94278, 94284, 94296, 94318, 94342, 94348, 94360, 94384, 94398, 94414, 94428, 94440, 94470, 94476, 94488, 94512, 94526, 94560, 94588, 94606, 94620, 94648, 94658, 94660, 94664, 94672, 94686, 94694, 94700, 94714, 94726, 94732, 94744, 94768, 94782, 94816, 94844, 94912, 94968, 94990, 95004, 95032, 95088, 95102, 95112, 95120, 95134, 95136, 95164, 95180, 95192, 95214, 95218, 95220, 95244, 95256, 95280, 95294, 95328, 95356, 95424, 95480, 95728, 95758, 95772, 95800, 95856, 95870, 95968, 95996, 96008, 96016, 96030, 96032, 96060, 96064, 96120, 96152, 96176, 96190, 96220, 96226, 96228, 96232, 96290, 96292, 96296, 96310, 96322, 96324, 96328, 96336, 96350, 96358, 96364, 96386, 96388, 96392, 96400, 96414, 96416, 96444, 96454, 96460, 96472, 96494, 96498, 96500, 96514, 96516, 96520, 96528, 96542, 96544, 96572, 96576, 96632, 96646, 96652, 96664, 96688, 96702, 96718, 96732, 96738, 96740, 96744, 96758, 96772, 96776, 96784, 96798, 96800, 96828, 96832, 96888, 97008, 97030, 97036, 97048, 97072, 97086, 97120, 97148, 97166, 97180, 97208, 97220, 97224, 97232, 97246, 97254, 97260, 97326, 97330, 97332, 97358, 97372, 97378, 97380, 97384, 97398, 97422, 97436, 97464, 97474, 97476, 97480, 97488, 97502, 97510, 97516, 97550, 97564, 97592, 97648, 97666, 97668, 97672, 97680, 97694, 97696, 97724, 97734, 97740, 97752, 97774, 97830, 97836, 97850, 97862, 97868, 97880, 97902, 97906, 97908, 97926, 97932, 97944, 97968, 97998, 98012, 98018, 98020, 98024, 98038, 98618, 98674, 98676, 98838, 98854, 98874, 98892, 98904, 98926, 98930, 98932, 98968, 99006, 99042, 99044, 99048, 99062, 99166, 99194, 99246, 99286, 99350, 99366, 99372, 99386, 99398, 99416, 99438, 99442, 99444, 99462, 99504, 99518, 99534, 99548, 99554, 99556, 99560, 99574, 99590, 99596, 99608, 99632, 99646, 99680, 99708, 99726, 99740, 99768, 99778, 99780, 99784, 99792, 99806, 99814, 99820, 99834, 99858, 99860, 99874, 99880, 99894, 99906, 99920, 99934, 99962, 99970, 99972, 99976, 99984, 99998, 1e5, 100028, 100038, 100044, 100056, 100078, 100082, 100084, 100142, 100174, 100188, 100246, 100262, 100268, 100306, 100308, 100390, 100396, 100410, 100422, 100428, 100440, 100462, 100466, 100468, 100486, 100504, 100528, 100542, 100558, 100572, 100578, 100580, 100584, 100598, 100620, 100656, 100670, 100704, 100732, 100750, 100792, 100802, 100808, 100816, 100830, 100838, 100844, 100858, 100888, 100912, 100926, 100960, 100988, 101056, 101112, 101148, 101176, 101232, 101246, 101250, 101252, 101256, 101264, 101278, 101280, 101308, 101318, 101324, 101336, 101358, 101362, 101364, 101410, 101412, 101416, 101430, 101442, 101448, 101456, 101470, 101478, 101498, 101506, 101508, 101520, 101534, 101536, 101564, 101580, 101618, 101620, 101636, 101640, 101648, 101662, 101664, 101692, 101696, 101752, 101766, 101784, 101838, 101858, 101860, 101864, 101934, 101938, 101940, 101966, 101980, 101986, 101988, 101992, 102030, 102044, 102072, 102082, 102084, 102088, 102096, 102138, 102166, 102182, 102188, 102214, 102220, 102232, 102254, 102282, 102290, 102292, 102306, 102308, 102312, 102326, 102444, 102458, 102470, 102476, 102488, 102514, 102516, 102534, 102552, 102576, 102590, 102606, 102620, 102626, 102632, 102646, 102662, 102668, 102704, 102718, 102752, 102780, 102798, 102812, 102840, 102850, 102856, 102864, 102878, 102886, 102892, 102906, 102936, 102974, 103008, 103036, 103104, 103160, 103224, 103280, 103294, 103298, 103300, 103312, 103326, 103328, 103356, 103366, 103372, 103384, 103406, 103410, 103412, 103472, 103486, 103520, 103548, 103616, 103672, 103920, 103992, 104048, 104062, 104160, 104188, 104194, 104196, 104200, 104208, 104224, 104252, 104256, 104312, 104326, 104332, 104344, 104368, 104382, 104398, 104412, 104418, 104420, 104424, 104482, 104484, 104514, 104520, 104528, 104542, 104550, 104570, 104578, 104580, 104592, 104606, 104608, 104636, 104652, 104690, 104692, 104706, 104712, 104734, 104736, 104764, 104768, 104824, 104838, 104856, 104910, 104930, 104932, 104936, 104968, 104976, 104990, 104992, 105020, 105024, 105080, 105200, 105240, 105278, 105312, 105372, 105410, 105412, 105416, 105424, 105446, 105518, 105524, 105550, 105564, 105570, 105572, 105576, 105614, 105628, 105656, 105666, 105672, 105680, 105702, 105722, 105742, 105756, 105784, 105840, 105854, 105858, 105860, 105864, 105872, 105888, 105932, 105970, 105972, 106006, 106022, 106028, 106054, 106060, 106072, 106100, 106118, 106124, 106136, 106160, 106174, 106190, 106210, 106212, 106216, 106250, 106258, 106260, 106274, 106276, 106280, 106306, 106308, 106312, 106320, 106334, 106348, 106394, 106414, 106418, 106420, 106566, 106572, 106610, 106612, 106630, 106636, 106648, 106672, 106686, 106722, 106724, 106728, 106742, 106758, 106764, 106776, 106800, 106814, 106848, 106876, 106894, 106908, 106936, 106946, 106948, 106952, 106960, 106974, 106982, 106988, 107032, 107056, 107070, 107104, 107132, 107200, 107256, 107292, 107320, 107376, 107390, 107394, 107396, 107400, 107408, 107422, 107424, 107452, 107462, 107468, 107480, 107502, 107506, 107508, 107544, 107568, 107582, 107616, 107644, 107712, 107768, 108016, 108060, 108088, 108144, 108158, 108256, 108284, 108290, 108292, 108296, 108304, 108318, 108320, 108348, 108352, 108408, 108422, 108428, 108440, 108464, 108478, 108494, 108508, 108514, 108516, 108520, 108592, 108640, 108668, 108736, 108792, 109040, 109536, 109680, 109694, 109792, 109820, 110016, 110072, 110084, 110088, 110096, 110112, 110140, 110144, 110200, 110320, 110342, 110348, 110360, 110384, 110398, 110432, 110460, 110478, 110492, 110520, 110532, 110536, 110544, 110558, 110658, 110686, 110714, 110722, 110724, 110728, 110736, 110750, 110752, 110780, 110796, 110834, 110836, 110850, 110852, 110856, 110864, 110878, 110880, 110908, 110912, 110968, 110982, 111e3, 111054, 111074, 111076, 111080, 111108, 111112, 111120, 111134, 111136, 111164, 111168, 111224, 111344, 111372, 111422, 111456, 111516, 111554, 111556, 111560, 111568, 111590, 111632, 111646, 111648, 111676, 111680, 111736, 111856, 112096, 112152, 112224, 112252, 112320, 112440, 112514, 112516, 112520, 112528, 112542, 112544, 112588, 112686, 112718, 112732, 112782, 112796, 112824, 112834, 112836, 112840, 112848, 112870, 112890, 112910, 112924, 112952, 113008, 113022, 113026, 113028, 113032, 113040, 113054, 113056, 113100, 113138, 113140, 113166, 113180, 113208, 113264, 113278, 113376, 113404, 113416, 113424, 113440, 113468, 113472, 113560, 113614, 113634, 113636, 113640, 113686, 113702, 113708, 113734, 113740, 113752, 113778, 113780, 113798, 113804, 113816, 113840, 113854, 113870, 113890, 113892, 113896, 113926, 113932, 113944, 113968, 113982, 114016, 114044, 114076, 114114, 114116, 114120, 114128, 114150, 114170, 114194, 114196, 114210, 114212, 114216, 114242, 114244, 114248, 114256, 114270, 114278, 114306, 114308, 114312, 114320, 114334, 114336, 114364, 114380, 114420, 114458, 114478, 114482, 114484, 114510, 114524, 114530, 114532, 114536, 114842, 114866, 114868, 114970, 114994, 114996, 115042, 115044, 115048, 115062, 115130, 115226, 115250, 115252, 115278, 115292, 115298, 115300, 115304, 115318, 115342, 115394, 115396, 115400, 115408, 115422, 115430, 115436, 115450, 115478, 115494, 115514, 115526, 115532, 115570, 115572, 115738, 115758, 115762, 115764, 115790, 115804, 115810, 115812, 115816, 115830, 115854, 115868, 115896, 115906, 115912, 115920, 115934, 115942, 115948, 115962, 115996, 116024, 116080, 116094, 116098, 116100, 116104, 116112, 116126, 116128, 116156, 116166, 116172, 116184, 116206, 116210, 116212, 116246, 116262, 116268, 116282, 116294, 116300, 116312, 116334, 116338, 116340, 116358, 116364, 116376, 116400, 116414, 116430, 116444, 116450, 116452, 116456, 116498, 116500, 116514, 116520, 116534, 116546, 116548, 116552, 116560, 116574, 116582, 116588, 116602, 116654, 116694, 116714, 116762, 116782, 116786, 116788, 116814, 116828, 116834, 116836, 116840, 116854, 116878, 116892, 116920, 116930, 116936, 116944, 116958, 116966, 116972, 116986, 117006, 117048, 117104, 117118, 117122, 117124, 117136, 117150, 117152, 117180, 117190, 117196, 117208, 117230, 117234, 117236, 117304, 117360, 117374, 117472, 117500, 117506, 117508, 117512, 117520, 117536, 117564, 117568, 117624, 117638, 117644, 117656, 117680, 117694, 117710, 117724, 117730, 117732, 117736, 117750, 117782, 117798, 117804, 117818, 117830, 117848, 117874, 117876, 117894, 117936, 117950, 117966, 117986, 117988, 117992, 118022, 118028, 118040, 118064, 118078, 118112, 118140, 118172, 118210, 118212, 118216, 118224, 118238, 118246, 118266, 118306, 118312, 118338, 118352, 118366, 118374, 118394, 118402, 118404, 118408, 118416, 118430, 118432, 118460, 118476, 118514, 118516, 118574, 118578, 118580, 118606, 118620, 118626, 118628, 118632, 118678, 118694, 118700, 118730, 118738, 118740, 118830, 118834, 118836, 118862, 118876, 118882, 118884, 118888, 118902, 118926, 118940, 118968, 118978, 118980, 118984, 118992, 119006, 119014, 119020, 119034, 119068, 119096, 119152, 119166, 119170, 119172, 119176, 119184, 119198, 119200, 119228, 119238, 119244, 119256, 119278, 119282, 119284, 119324, 119352, 119408, 119422, 119520, 119548, 119554, 119556, 119560, 119568, 119582, 119584, 119612, 119616, 119672, 119686, 119692, 119704, 119728, 119742, 119758, 119772, 119778, 119780, 119784, 119798, 119920, 119934, 120032, 120060, 120256, 120312, 120324, 120328, 120336, 120352, 120384, 120440, 120560, 120582, 120588, 120600, 120624, 120638, 120672, 120700, 120718, 120732, 120760, 120770, 120772, 120776, 120784, 120798, 120806, 120812, 120870, 120876, 120890, 120902, 120908, 120920, 120946, 120948, 120966, 120972, 120984, 121008, 121022, 121038, 121058, 121060, 121064, 121078, 121100, 121112, 121136, 121150, 121184, 121212, 121244, 121282, 121284, 121288, 121296, 121318, 121338, 121356, 121368, 121392, 121406, 121440, 121468, 121536, 121592, 121656, 121730, 121732, 121736, 121744, 121758, 121760, 121804, 121842, 121844, 121890, 121922, 121924, 121928, 121936, 121950, 121958, 121978, 121986, 121988, 121992, 122e3, 122014, 122016, 122044, 122060, 122098, 122100, 122116, 122120, 122128, 122142, 122144, 122172, 122176, 122232, 122246, 122264, 122318, 122338, 122340, 122344, 122414, 122418, 122420, 122446, 122460, 122466, 122468, 122472, 122510, 122524, 122552, 122562, 122564, 122568, 122576, 122598, 122618, 122646, 122662, 122668, 122694, 122700, 122712, 122738, 122740, 122762, 122770, 122772, 122786, 122788, 122792, 123018, 123026, 123028, 123042, 123044, 123048, 123062, 123098, 123146, 123154, 123156, 123170, 123172, 123176, 123190, 123202, 123204, 123208, 123216, 123238, 123244, 123258, 123290, 123314, 123316, 123402, 123410, 123412, 123426, 123428, 123432, 123446, 123458, 123464, 123472, 123486, 123494, 123500, 123514, 123522, 123524, 123528, 123536, 123552, 123580, 123590, 123596, 123608, 123630, 123634, 123636, 123674, 123698, 123700, 123740, 123746, 123748, 123752, 123834, 123914, 123922, 123924, 123938, 123944, 123958, 123970, 123976, 123984, 123998, 124006, 124012, 124026, 124034, 124036, 124048, 124062, 124064, 124092, 124102, 124108, 124120, 124142, 124146, 124148, 124162, 124164, 124168, 124176, 124190, 124192, 124220, 124224, 124280, 124294, 124300, 124312, 124336, 124350, 124366, 124380, 124386, 124388, 124392, 124406, 124442, 124462, 124466, 124468, 124494, 124508, 124514, 124520, 124558, 124572, 124600, 124610, 124612, 124616, 124624, 124646, 124666, 124694, 124710, 124716, 124730, 124742, 124748, 124760, 124786, 124788, 124818, 124820, 124834, 124836, 124840, 124854, 124946, 124948, 124962, 124964, 124968, 124982, 124994, 124996, 125e3, 125008, 125022, 125030, 125036, 125050, 125058, 125060, 125064, 125072, 125086, 125088, 125116, 125126, 125132, 125144, 125166, 125170, 125172, 125186, 125188, 125192, 125200, 125216, 125244, 125248, 125304, 125318, 125324, 125336, 125360, 125374, 125390, 125404, 125410, 125412, 125416, 125430, 125444, 125448, 125456, 125472, 125504, 125560, 125680, 125702, 125708, 125720, 125744, 125758, 125792, 125820, 125838, 125852, 125880, 125890, 125892, 125896, 125904, 125918, 125926, 125932, 125978, 125998, 126002, 126004, 126030, 126044, 126050, 126052, 126056, 126094, 126108, 126136, 126146, 126148, 126152, 126160, 126182, 126202, 126222, 126236, 126264, 126320, 126334, 126338, 126340, 126344, 126352, 126366, 126368, 126412, 126450, 126452, 126486, 126502, 126508, 126522, 126534, 126540, 126552, 126574, 126578, 126580, 126598, 126604, 126616, 126640, 126654, 126670, 126684, 126690, 126692, 126696, 126738, 126754, 126756, 126760, 126774, 126786, 126788, 126792, 126800, 126814, 126822, 126828, 126842, 126894, 126898, 126900, 126934, 127126, 127142, 127148, 127162, 127178, 127186, 127188, 127254, 127270, 127276, 127290, 127302, 127308, 127320, 127342, 127346, 127348, 127370, 127378, 127380, 127394, 127396, 127400, 127450, 127510, 127526, 127532, 127546, 127558, 127576, 127598, 127602, 127604, 127622, 127628, 127640, 127664, 127678, 127694, 127708, 127714, 127716, 127720, 127734, 127754, 127762, 127764, 127778, 127784, 127810, 127812, 127816, 127824, 127838, 127846, 127866, 127898, 127918, 127922, 127924, 128022, 128038, 128044, 128058, 128070, 128076, 128088, 128110, 128114, 128116, 128134, 128140, 128152, 128176, 128190, 128206, 128220, 128226, 128228, 128232, 128246, 128262, 128268, 128280, 128304, 128318, 128352, 128380, 128398, 128412, 128440, 128450, 128452, 128456, 128464, 128478, 128486, 128492, 128506, 128522, 128530, 128532, 128546, 128548, 128552, 128566, 128578, 128580, 128584, 128592, 128606, 128614, 128634, 128642, 128644, 128648, 128656, 128670, 128672, 128700, 128716, 128754, 128756, 128794, 128814, 128818, 128820, 128846, 128860, 128866, 128868, 128872, 128886, 128918, 128934, 128940, 128954, 128978, 128980, 129178, 129198, 129202, 129204, 129238, 129258, 129306, 129326, 129330, 129332, 129358, 129372, 129378, 129380, 129384, 129398, 129430, 129446, 129452, 129466, 129482, 129490, 129492, 129562, 129582, 129586, 129588, 129614, 129628, 129634, 129636, 129640, 129654, 129678, 129692, 129720, 129730, 129732, 129736, 129744, 129758, 129766, 129772, 129814, 129830, 129836, 129850, 129862, 129868, 129880, 129902, 129906, 129908, 129930, 129938, 129940, 129954, 129956, 129960, 129974, 130010]), be.CODEWORD_TABLE = Int32Array.from([2627, 1819, 2622, 2621, 1813, 1812, 2729, 2724, 2723, 2779, 2774, 2773, 902, 896, 908, 868, 865, 861, 859, 2511, 873, 871, 1780, 835, 2493, 825, 2491, 842, 837, 844, 1764, 1762, 811, 810, 809, 2483, 807, 2482, 806, 2480, 815, 814, 813, 812, 2484, 817, 816, 1745, 1744, 1742, 1746, 2655, 2637, 2635, 2626, 2625, 2623, 2628, 1820, 2752, 2739, 2737, 2728, 2727, 2725, 2730, 2785, 2783, 2778, 2777, 2775, 2780, 787, 781, 747, 739, 736, 2413, 754, 752, 1719, 692, 689, 681, 2371, 678, 2369, 700, 697, 694, 703, 1688, 1686, 642, 638, 2343, 631, 2341, 627, 2338, 651, 646, 643, 2345, 654, 652, 1652, 1650, 1647, 1654, 601, 599, 2322, 596, 2321, 594, 2319, 2317, 611, 610, 608, 606, 2324, 603, 2323, 615, 614, 612, 1617, 1616, 1614, 1612, 616, 1619, 1618, 2575, 2538, 2536, 905, 901, 898, 909, 2509, 2507, 2504, 870, 867, 864, 860, 2512, 875, 872, 1781, 2490, 2489, 2487, 2485, 1748, 836, 834, 832, 830, 2494, 827, 2492, 843, 841, 839, 845, 1765, 1763, 2701, 2676, 2674, 2653, 2648, 2656, 2634, 2633, 2631, 2629, 1821, 2638, 2636, 2770, 2763, 2761, 2750, 2745, 2753, 2736, 2735, 2733, 2731, 1848, 2740, 2738, 2786, 2784, 591, 588, 576, 569, 566, 2296, 1590, 537, 534, 526, 2276, 522, 2274, 545, 542, 539, 548, 1572, 1570, 481, 2245, 466, 2242, 462, 2239, 492, 485, 482, 2249, 496, 494, 1534, 1531, 1528, 1538, 413, 2196, 406, 2191, 2188, 425, 419, 2202, 415, 2199, 432, 430, 427, 1472, 1467, 1464, 433, 1476, 1474, 368, 367, 2160, 365, 2159, 362, 2157, 2155, 2152, 378, 377, 375, 2166, 372, 2165, 369, 2162, 383, 381, 379, 2168, 1419, 1418, 1416, 1414, 385, 1411, 384, 1423, 1422, 1420, 1424, 2461, 802, 2441, 2439, 790, 786, 783, 794, 2409, 2406, 2403, 750, 742, 738, 2414, 756, 753, 1720, 2367, 2365, 2362, 2359, 1663, 693, 691, 684, 2373, 680, 2370, 702, 699, 696, 704, 1690, 1687, 2337, 2336, 2334, 2332, 1624, 2329, 1622, 640, 637, 2344, 634, 2342, 630, 2340, 650, 648, 645, 2346, 655, 653, 1653, 1651, 1649, 1655, 2612, 2597, 2595, 2571, 2568, 2565, 2576, 2534, 2529, 2526, 1787, 2540, 2537, 907, 904, 900, 910, 2503, 2502, 2500, 2498, 1768, 2495, 1767, 2510, 2508, 2506, 869, 866, 863, 2513, 876, 874, 1782, 2720, 2713, 2711, 2697, 2694, 2691, 2702, 2672, 2670, 2664, 1828, 2678, 2675, 2647, 2646, 2644, 2642, 1823, 2639, 1822, 2654, 2652, 2650, 2657, 2771, 1855, 2765, 2762, 1850, 1849, 2751, 2749, 2747, 2754, 353, 2148, 344, 342, 336, 2142, 332, 2140, 345, 1375, 1373, 306, 2130, 299, 2128, 295, 2125, 319, 314, 311, 2132, 1354, 1352, 1349, 1356, 262, 257, 2101, 253, 2096, 2093, 274, 273, 267, 2107, 263, 2104, 280, 278, 275, 1316, 1311, 1308, 1320, 1318, 2052, 202, 2050, 2044, 2040, 219, 2063, 212, 2060, 208, 2055, 224, 221, 2066, 1260, 1258, 1252, 231, 1248, 229, 1266, 1264, 1261, 1268, 155, 1998, 153, 1996, 1994, 1991, 1988, 165, 164, 2007, 162, 2006, 159, 2003, 2e3, 172, 171, 169, 2012, 166, 2010, 1186, 1184, 1182, 1179, 175, 1176, 173, 1192, 1191, 1189, 1187, 176, 1194, 1193, 2313, 2307, 2305, 592, 589, 2294, 2292, 2289, 578, 572, 568, 2297, 580, 1591, 2272, 2267, 2264, 1547, 538, 536, 529, 2278, 525, 2275, 547, 544, 541, 1574, 1571, 2237, 2235, 2229, 1493, 2225, 1489, 478, 2247, 470, 2244, 465, 2241, 493, 488, 484, 2250, 498, 495, 1536, 1533, 1530, 1539, 2187, 2186, 2184, 2182, 1432, 2179, 1430, 2176, 1427, 414, 412, 2197, 409, 2195, 405, 2193, 2190, 426, 424, 421, 2203, 418, 2201, 431, 429, 1473, 1471, 1469, 1466, 434, 1477, 1475, 2478, 2472, 2470, 2459, 2457, 2454, 2462, 803, 2437, 2432, 2429, 1726, 2443, 2440, 792, 789, 785, 2401, 2399, 2393, 1702, 2389, 1699, 2411, 2408, 2405, 745, 741, 2415, 758, 755, 1721, 2358, 2357, 2355, 2353, 1661, 2350, 1660, 2347, 1657, 2368, 2366, 2364, 2361, 1666, 690, 687, 2374, 683, 2372, 701, 698, 705, 1691, 1689, 2619, 2617, 2610, 2608, 2605, 2613, 2593, 2588, 2585, 1803, 2599, 2596, 2563, 2561, 2555, 1797, 2551, 1795, 2573, 2570, 2567, 2577, 2525, 2524, 2522, 2520, 1786, 2517, 1785, 2514, 1783, 2535, 2533, 2531, 2528, 1788, 2541, 2539, 906, 903, 911, 2721, 1844, 2715, 2712, 1838, 1836, 2699, 2696, 2693, 2703, 1827, 1826, 1824, 2673, 2671, 2669, 2666, 1829, 2679, 2677, 1858, 1857, 2772, 1854, 1853, 1851, 1856, 2766, 2764, 143, 1987, 139, 1986, 135, 133, 131, 1984, 128, 1983, 125, 1981, 138, 137, 136, 1985, 1133, 1132, 1130, 112, 110, 1974, 107, 1973, 104, 1971, 1969, 122, 121, 119, 117, 1977, 114, 1976, 124, 1115, 1114, 1112, 1110, 1117, 1116, 84, 83, 1953, 81, 1952, 78, 1950, 1948, 1945, 94, 93, 91, 1959, 88, 1958, 85, 1955, 99, 97, 95, 1961, 1086, 1085, 1083, 1081, 1078, 100, 1090, 1089, 1087, 1091, 49, 47, 1917, 44, 1915, 1913, 1910, 1907, 59, 1926, 56, 1925, 53, 1922, 1919, 66, 64, 1931, 61, 1929, 1042, 1040, 1038, 71, 1035, 70, 1032, 68, 1048, 1047, 1045, 1043, 1050, 1049, 12, 10, 1869, 1867, 1864, 1861, 21, 1880, 19, 1877, 1874, 1871, 28, 1888, 25, 1886, 22, 1883, 982, 980, 977, 974, 32, 30, 991, 989, 987, 984, 34, 995, 994, 992, 2151, 2150, 2147, 2146, 2144, 356, 355, 354, 2149, 2139, 2138, 2136, 2134, 1359, 343, 341, 338, 2143, 335, 2141, 348, 347, 346, 1376, 1374, 2124, 2123, 2121, 2119, 1326, 2116, 1324, 310, 308, 305, 2131, 302, 2129, 298, 2127, 320, 318, 316, 313, 2133, 322, 321, 1355, 1353, 1351, 1357, 2092, 2091, 2089, 2087, 1276, 2084, 1274, 2081, 1271, 259, 2102, 256, 2100, 252, 2098, 2095, 272, 269, 2108, 266, 2106, 281, 279, 277, 1317, 1315, 1313, 1310, 282, 1321, 1319, 2039, 2037, 2035, 2032, 1203, 2029, 1200, 1197, 207, 2053, 205, 2051, 201, 2049, 2046, 2043, 220, 218, 2064, 215, 2062, 211, 2059, 228, 226, 223, 2069, 1259, 1257, 1254, 232, 1251, 230, 1267, 1265, 1263, 2316, 2315, 2312, 2311, 2309, 2314, 2304, 2303, 2301, 2299, 1593, 2308, 2306, 590, 2288, 2287, 2285, 2283, 1578, 2280, 1577, 2295, 2293, 2291, 579, 577, 574, 571, 2298, 582, 581, 1592, 2263, 2262, 2260, 2258, 1545, 2255, 1544, 2252, 1541, 2273, 2271, 2269, 2266, 1550, 535, 532, 2279, 528, 2277, 546, 543, 549, 1575, 1573, 2224, 2222, 2220, 1486, 2217, 1485, 2214, 1482, 1479, 2238, 2236, 2234, 2231, 1496, 2228, 1492, 480, 477, 2248, 473, 2246, 469, 2243, 490, 487, 2251, 497, 1537, 1535, 1532, 2477, 2476, 2474, 2479, 2469, 2468, 2466, 2464, 1730, 2473, 2471, 2453, 2452, 2450, 2448, 1729, 2445, 1728, 2460, 2458, 2456, 2463, 805, 804, 2428, 2427, 2425, 2423, 1725, 2420, 1724, 2417, 1722, 2438, 2436, 2434, 2431, 1727, 2444, 2442, 793, 791, 788, 795, 2388, 2386, 2384, 1697, 2381, 1696, 2378, 1694, 1692, 2402, 2400, 2398, 2395, 1703, 2392, 1701, 2412, 2410, 2407, 751, 748, 744, 2416, 759, 757, 1807, 2620, 2618, 1806, 1805, 2611, 2609, 2607, 2614, 1802, 1801, 1799, 2594, 2592, 2590, 2587, 1804, 2600, 2598, 1794, 1793, 1791, 1789, 2564, 2562, 2560, 2557, 1798, 2554, 1796, 2574, 2572, 2569, 2578, 1847, 1846, 2722, 1843, 1842, 1840, 1845, 2716, 2714, 1835, 1834, 1832, 1830, 1839, 1837, 2700, 2698, 2695, 2704, 1817, 1811, 1810, 897, 862, 1777, 829, 826, 838, 1760, 1758, 808, 2481, 1741, 1740, 1738, 1743, 2624, 1818, 2726, 2776, 782, 740, 737, 1715, 686, 679, 695, 1682, 1680, 639, 628, 2339, 647, 644, 1645, 1643, 1640, 1648, 602, 600, 597, 595, 2320, 593, 2318, 609, 607, 604, 1611, 1610, 1608, 1606, 613, 1615, 1613, 2328, 926, 924, 892, 886, 899, 857, 850, 2505, 1778, 824, 823, 821, 819, 2488, 818, 2486, 833, 831, 828, 840, 1761, 1759, 2649, 2632, 2630, 2746, 2734, 2732, 2782, 2781, 570, 567, 1587, 531, 527, 523, 540, 1566, 1564, 476, 467, 463, 2240, 486, 483, 1524, 1521, 1518, 1529, 411, 403, 2192, 399, 2189, 423, 416, 1462, 1457, 1454, 428, 1468, 1465, 2210, 366, 363, 2158, 360, 2156, 357, 2153, 376, 373, 370, 2163, 1410, 1409, 1407, 1405, 382, 1402, 380, 1417, 1415, 1412, 1421, 2175, 2174, 777, 774, 771, 784, 732, 725, 722, 2404, 743, 1716, 676, 674, 668, 2363, 665, 2360, 685, 1684, 1681, 626, 624, 622, 2335, 620, 2333, 617, 2330, 641, 635, 649, 1646, 1644, 1642, 2566, 928, 925, 2530, 2527, 894, 891, 888, 2501, 2499, 2496, 858, 856, 854, 851, 1779, 2692, 2668, 2665, 2645, 2643, 2640, 2651, 2768, 2759, 2757, 2744, 2743, 2741, 2748, 352, 1382, 340, 337, 333, 1371, 1369, 307, 300, 296, 2126, 315, 312, 1347, 1342, 1350, 261, 258, 250, 2097, 246, 2094, 271, 268, 264, 1306, 1301, 1298, 276, 1312, 1309, 2115, 203, 2048, 195, 2045, 191, 2041, 213, 209, 2056, 1246, 1244, 1238, 225, 1234, 222, 1256, 1253, 1249, 1262, 2080, 2079, 154, 1997, 150, 1995, 147, 1992, 1989, 163, 160, 2004, 156, 2001, 1175, 1174, 1172, 1170, 1167, 170, 1164, 167, 1185, 1183, 1180, 1177, 174, 1190, 1188, 2025, 2024, 2022, 587, 586, 564, 559, 556, 2290, 573, 1588, 520, 518, 512, 2268, 508, 2265, 530, 1568, 1565, 461, 457, 2233, 450, 2230, 446, 2226, 479, 471, 489, 1526, 1523, 1520, 397, 395, 2185, 392, 2183, 389, 2180, 2177, 410, 2194, 402, 422, 1463, 1461, 1459, 1456, 1470, 2455, 799, 2433, 2430, 779, 776, 773, 2397, 2394, 2390, 734, 728, 724, 746, 1717, 2356, 2354, 2351, 2348, 1658, 677, 675, 673, 670, 667, 688, 1685, 1683, 2606, 2589, 2586, 2559, 2556, 2552, 927, 2523, 2521, 2518, 2515, 1784, 2532, 895, 893, 890, 2718, 2709, 2707, 2689, 2687, 2684, 2663, 2662, 2660, 2658, 1825, 2667, 2769, 1852, 2760, 2758, 142, 141, 1139, 1138, 134, 132, 129, 126, 1982, 1129, 1128, 1126, 1131, 113, 111, 108, 105, 1972, 101, 1970, 120, 118, 115, 1109, 1108, 1106, 1104, 123, 1113, 1111, 82, 79, 1951, 75, 1949, 72, 1946, 92, 89, 86, 1956, 1077, 1076, 1074, 1072, 98, 1069, 96, 1084, 1082, 1079, 1088, 1968, 1967, 48, 45, 1916, 42, 1914, 39, 1911, 1908, 60, 57, 54, 1923, 50, 1920, 1031, 1030, 1028, 1026, 67, 1023, 65, 1020, 62, 1041, 1039, 1036, 1033, 69, 1046, 1044, 1944, 1943, 1941, 11, 9, 1868, 7, 1865, 1862, 1859, 20, 1878, 16, 1875, 13, 1872, 970, 968, 966, 963, 29, 960, 26, 23, 983, 981, 978, 975, 33, 971, 31, 990, 988, 985, 1906, 1904, 1902, 993, 351, 2145, 1383, 331, 330, 328, 326, 2137, 323, 2135, 339, 1372, 1370, 294, 293, 291, 289, 2122, 286, 2120, 283, 2117, 309, 303, 317, 1348, 1346, 1344, 245, 244, 242, 2090, 239, 2088, 236, 2085, 2082, 260, 2099, 249, 270, 1307, 1305, 1303, 1300, 1314, 189, 2038, 186, 2036, 183, 2033, 2030, 2026, 206, 198, 2047, 194, 216, 1247, 1245, 1243, 1240, 227, 1237, 1255, 2310, 2302, 2300, 2286, 2284, 2281, 565, 563, 561, 558, 575, 1589, 2261, 2259, 2256, 2253, 1542, 521, 519, 517, 514, 2270, 511, 533, 1569, 1567, 2223, 2221, 2218, 2215, 1483, 2211, 1480, 459, 456, 453, 2232, 449, 474, 491, 1527, 1525, 1522, 2475, 2467, 2465, 2451, 2449, 2446, 801, 800, 2426, 2424, 2421, 2418, 1723, 2435, 780, 778, 775, 2387, 2385, 2382, 2379, 1695, 2375, 1693, 2396, 735, 733, 730, 727, 749, 1718, 2616, 2615, 2604, 2603, 2601, 2584, 2583, 2581, 2579, 1800, 2591, 2550, 2549, 2547, 2545, 1792, 2542, 1790, 2558, 929, 2719, 1841, 2710, 2708, 1833, 1831, 2690, 2688, 2686, 1815, 1809, 1808, 1774, 1756, 1754, 1737, 1736, 1734, 1739, 1816, 1711, 1676, 1674, 633, 629, 1638, 1636, 1633, 1641, 598, 1605, 1604, 1602, 1600, 605, 1609, 1607, 2327, 887, 853, 1775, 822, 820, 1757, 1755, 1584, 524, 1560, 1558, 468, 464, 1514, 1511, 1508, 1519, 408, 404, 400, 1452, 1447, 1444, 417, 1458, 1455, 2208, 364, 361, 358, 2154, 1401, 1400, 1398, 1396, 374, 1393, 371, 1408, 1406, 1403, 1413, 2173, 2172, 772, 726, 723, 1712, 672, 669, 666, 682, 1678, 1675, 625, 623, 621, 618, 2331, 636, 632, 1639, 1637, 1635, 920, 918, 884, 880, 889, 849, 848, 847, 846, 2497, 855, 852, 1776, 2641, 2742, 2787, 1380, 334, 1367, 1365, 301, 297, 1340, 1338, 1335, 1343, 255, 251, 247, 1296, 1291, 1288, 265, 1302, 1299, 2113, 204, 196, 192, 2042, 1232, 1230, 1224, 214, 1220, 210, 1242, 1239, 1235, 1250, 2077, 2075, 151, 148, 1993, 144, 1990, 1163, 1162, 1160, 1158, 1155, 161, 1152, 157, 1173, 1171, 1168, 1165, 168, 1181, 1178, 2021, 2020, 2018, 2023, 585, 560, 557, 1585, 516, 509, 1562, 1559, 458, 447, 2227, 472, 1516, 1513, 1510, 398, 396, 393, 390, 2181, 386, 2178, 407, 1453, 1451, 1449, 1446, 420, 1460, 2209, 769, 764, 720, 712, 2391, 729, 1713, 664, 663, 661, 659, 2352, 656, 2349, 671, 1679, 1677, 2553, 922, 919, 2519, 2516, 885, 883, 881, 2685, 2661, 2659, 2767, 2756, 2755, 140, 1137, 1136, 130, 127, 1125, 1124, 1122, 1127, 109, 106, 102, 1103, 1102, 1100, 1098, 116, 1107, 1105, 1980, 80, 76, 73, 1947, 1068, 1067, 1065, 1063, 90, 1060, 87, 1075, 1073, 1070, 1080, 1966, 1965, 46, 43, 40, 1912, 36, 1909, 1019, 1018, 1016, 1014, 58, 1011, 55, 1008, 51, 1029, 1027, 1024, 1021, 63, 1037, 1034, 1940, 1939, 1937, 1942, 8, 1866, 4, 1863, 1, 1860, 956, 954, 952, 949, 946, 17, 14, 969, 967, 964, 961, 27, 957, 24, 979, 976, 972, 1901, 1900, 1898, 1896, 986, 1905, 1903, 350, 349, 1381, 329, 327, 324, 1368, 1366, 292, 290, 287, 284, 2118, 304, 1341, 1339, 1337, 1345, 243, 240, 237, 2086, 233, 2083, 254, 1297, 1295, 1293, 1290, 1304, 2114, 190, 187, 184, 2034, 180, 2031, 177, 2027, 199, 1233, 1231, 1229, 1226, 217, 1223, 1241, 2078, 2076, 584, 555, 554, 552, 550, 2282, 562, 1586, 507, 506, 504, 502, 2257, 499, 2254, 515, 1563, 1561, 445, 443, 441, 2219, 438, 2216, 435, 2212, 460, 454, 475, 1517, 1515, 1512, 2447, 798, 797, 2422, 2419, 770, 768, 766, 2383, 2380, 2376, 721, 719, 717, 714, 731, 1714, 2602, 2582, 2580, 2548, 2546, 2543, 923, 921, 2717, 2706, 2705, 2683, 2682, 2680, 1771, 1752, 1750, 1733, 1732, 1731, 1735, 1814, 1707, 1670, 1668, 1631, 1629, 1626, 1634, 1599, 1598, 1596, 1594, 1603, 1601, 2326, 1772, 1753, 1751, 1581, 1554, 1552, 1504, 1501, 1498, 1509, 1442, 1437, 1434, 401, 1448, 1445, 2206, 1392, 1391, 1389, 1387, 1384, 359, 1399, 1397, 1394, 1404, 2171, 2170, 1708, 1672, 1669, 619, 1632, 1630, 1628, 1773, 1378, 1363, 1361, 1333, 1328, 1336, 1286, 1281, 1278, 248, 1292, 1289, 2111, 1218, 1216, 1210, 197, 1206, 193, 1228, 1225, 1221, 1236, 2073, 2071, 1151, 1150, 1148, 1146, 152, 1143, 149, 1140, 145, 1161, 1159, 1156, 1153, 158, 1169, 1166, 2017, 2016, 2014, 2019, 1582, 510, 1556, 1553, 452, 448, 1506, 1500, 394, 391, 387, 1443, 1441, 1439, 1436, 1450, 2207, 765, 716, 713, 1709, 662, 660, 657, 1673, 1671, 916, 914, 879, 878, 877, 882, 1135, 1134, 1121, 1120, 1118, 1123, 1097, 1096, 1094, 1092, 103, 1101, 1099, 1979, 1059, 1058, 1056, 1054, 77, 1051, 74, 1066, 1064, 1061, 1071, 1964, 1963, 1007, 1006, 1004, 1002, 999, 41, 996, 37, 1017, 1015, 1012, 1009, 52, 1025, 1022, 1936, 1935, 1933, 1938, 942, 940, 938, 935, 932, 5, 2, 955, 953, 950, 947, 18, 943, 15, 965, 962, 958, 1895, 1894, 1892, 1890, 973, 1899, 1897, 1379, 325, 1364, 1362, 288, 285, 1334, 1332, 1330, 241, 238, 234, 1287, 1285, 1283, 1280, 1294, 2112, 188, 185, 181, 178, 2028, 1219, 1217, 1215, 1212, 200, 1209, 1227, 2074, 2072, 583, 553, 551, 1583, 505, 503, 500, 513, 1557, 1555, 444, 442, 439, 436, 2213, 455, 451, 1507, 1505, 1502, 796, 763, 762, 760, 767, 711, 710, 708, 706, 2377, 718, 715, 1710, 2544, 917, 915, 2681, 1627, 1597, 1595, 2325, 1769, 1749, 1747, 1499, 1438, 1435, 2204, 1390, 1388, 1385, 1395, 2169, 2167, 1704, 1665, 1662, 1625, 1623, 1620, 1770, 1329, 1282, 1279, 2109, 1214, 1207, 1222, 2068, 2065, 1149, 1147, 1144, 1141, 146, 1157, 1154, 2013, 2011, 2008, 2015, 1579, 1549, 1546, 1495, 1487, 1433, 1431, 1428, 1425, 388, 1440, 2205, 1705, 658, 1667, 1664, 1119, 1095, 1093, 1978, 1057, 1055, 1052, 1062, 1962, 1960, 1005, 1003, 1e3, 997, 38, 1013, 1010, 1932, 1930, 1927, 1934, 941, 939, 936, 933, 6, 930, 3, 951, 948, 944, 1889, 1887, 1884, 1881, 959, 1893, 1891, 35, 1377, 1360, 1358, 1327, 1325, 1322, 1331, 1277, 1275, 1272, 1269, 235, 1284, 2110, 1205, 1204, 1201, 1198, 182, 1195, 179, 1213, 2070, 2067, 1580, 501, 1551, 1548, 440, 437, 1497, 1494, 1490, 1503, 761, 709, 707, 1706, 913, 912, 2198, 1386, 2164, 2161, 1621, 1766, 2103, 1208, 2058, 2054, 1145, 1142, 2005, 2002, 1999, 2009, 1488, 1429, 1426, 2200, 1698, 1659, 1656, 1975, 1053, 1957, 1954, 1001, 998, 1924, 1921, 1918, 1928, 937, 934, 931, 1879, 1876, 1873, 1870, 945, 1885, 1882, 1323, 1273, 1270, 2105, 1202, 1199, 1196, 1211, 2061, 2057, 1576, 1543, 1540, 1484, 1481, 1478, 1491, 1700]);\r\n    class Be {\r\n        constructor(t, e) {\r\n            this.bits = t, this.points = e\r\n        }\r\n        getBits() {\r\n            return this.bits\r\n        }\r\n        getPoints() {\r\n            return this.points\r\n        }\r\n    }\r\n    class Pe {\r\n        static detectMultiple(t, e, r) {\r\n            let n = t.getBlackMatrix(),\r\n                    i = Pe.detect(r, n);\r\n            return i.length || ((n = n.clone()).rotate180(), i = Pe.detect(r, n)), new Be(n, i)\r\n        }\r\n        static detect(t, e) {\r\n            const r = new Array;\r\n            let n = 0,\r\n                    i = 0,\r\n                    s = !1;\r\n            for (; n < e.getHeight();) {\r\n                const o = Pe.findVertices(e, n, i);\r\n                if (null != o[0] || null != o[3]) {\r\n                    if (s = !0, r.push(o), !t) break;\r\n                    null != o[2] ? (i = Math.trunc(o[2].getX()), n = Math.trunc(o[2].getY())) : (i = Math.trunc(o[4].getX()), n = Math.trunc(o[4].getY()))\r\n                } else {\r\n                    if (!s) break;\r\n                    s = !1, i = 0;\r\n                    for (const t of r) null != t[1] && (n = Math.trunc(Math.max(n, t[1].getY()))), null != t[3] && (n = Math.max(n, Math.trunc(t[3].getY())));\r\n                    n += Pe.ROW_STEP\r\n                }\r\n            }\r\n            return r\r\n        }\r\n        static findVertices(t, e, r) {\r\n            const n = t.getHeight(),\r\n                    i = t.getWidth(),\r\n                    s = new Array(8);\r\n            return Pe.copyToResult(s, Pe.findRowsWithPattern(t, n, i, e, r, Pe.START_PATTERN), Pe.INDEXES_START_PATTERN), null != s[4] && (r = Math.trunc(s[4].getX()), e = Math.trunc(s[4].getY())), Pe.copyToResult(s, Pe.findRowsWithPattern(t, n, i, e, r, Pe.STOP_PATTERN), Pe.INDEXES_STOP_PATTERN), s\r\n        }\r\n        static copyToResult(t, e, r) {\r\n            for (let n = 0; n < r.length; n++) t[r[n]] = e[n]\r\n        }\r\n        static findRowsWithPattern(t, e, r, n, i, s) {\r\n            const o = new Array(4);\r\n            let a = !1;\r\n            const l = new Int32Array(s.length);\r\n            for (; n < e; n += Pe.ROW_STEP) {\r\n                let e = Pe.findGuardPattern(t, i, n, r, !1, s, l);\r\n                if (null != e) {\r\n                    for (; n > 0;) {\r\n                        const o = Pe.findGuardPattern(t, i, --n, r, !1, s, l);\r\n                        if (null == o) {\r\n                            n++;\r\n                            break\r\n                        }\r\n                        e = o\r\n                    }\r\n                    o[0] = new rt(e[0], n), o[1] = new rt(e[1], n), a = !0;\r\n                    break\r\n                }\r\n            }\r\n            let h = n + 1;\r\n            if (a) {\r\n                let n = 0,\r\n                        i = Int32Array.from([Math.trunc(o[0].getX()), Math.trunc(o[1].getX())]);\r\n                for (; h < e; h++) {\r\n                    const e = Pe.findGuardPattern(t, i[0], h, r, !1, s, l);\r\n                    if (null != e && Math.abs(i[0] - e[0]) < Pe.MAX_PATTERN_DRIFT && Math.abs(i[1] - e[1]) < Pe.MAX_PATTERN_DRIFT) i = e, n = 0;\r\n                    else {\r\n                        if (n > Pe.SKIPPED_ROW_COUNT_MAX) break;\r\n                        n++\r\n                    }\r\n                }\r\n                h -= n + 1, o[2] = new rt(i[0], h), o[3] = new rt(i[1], h)\r\n            }\r\n            return h - n < Pe.BARCODE_MIN_HEIGHT && g.fill(o, null), o\r\n        }\r\n        static findGuardPattern(t, e, r, n, i, s, o) {\r\n            g.fillWithin(o, 0, o.length, 0);\r\n            let a = e,\r\n                    l = 0;\r\n            for (; t.get(a, r) && a > 0 && l++ < Pe.MAX_PIXEL_DRIFT;) a--;\r\n            let h = a,\r\n                    u = 0,\r\n                    d = s.length;\r\n            for (let e = i; h < n; h++) {\r\n                if (t.get(h, r) !== e) o[u]++;\r\n                else {\r\n                    if (u === d - 1) {\r\n                        if (Pe.patternMatchVariance(o, s, Pe.MAX_INDIVIDUAL_VARIANCE) < Pe.MAX_AVG_VARIANCE) return new Int32Array([a, h]);\r\n                        a += o[0] + o[1], c.arraycopy(o, 2, o, 0, u - 1), o[u - 1] = 0, o[u] = 0, u--\r\n                    } else u++;\r\n                    o[u] = 1, e = !e\r\n                }\r\n            }\r\n            return u === d - 1 && Pe.patternMatchVariance(o, s, Pe.MAX_INDIVIDUAL_VARIANCE) < Pe.MAX_AVG_VARIANCE ? new Int32Array([a, h - 1]) : null\r\n        }\r\n        static patternMatchVariance(t, e, r) {\r\n            let n = t.length,\r\n                    i = 0,\r\n                    s = 0;\r\n            for (let r = 0; r < n; r++) i += t[r], s += e[r];\r\n            if (i < s) return 1 / 0;\r\n            let o = i / s;\r\n            r *= o;\r\n            let a = 0;\r\n            for (let i = 0; i < n; i++) {\r\n                let n = t[i],\r\n                        s = e[i] * o,\r\n                        l = n > s ? n - s : s - n;\r\n                if (l > r) return 1 / 0;\r\n                a += l\r\n            }\r\n            return a / i\r\n        }\r\n    }\r\n    Pe.INDEXES_START_PATTERN = Int32Array.from([0, 4, 1, 5]), Pe.INDEXES_STOP_PATTERN = Int32Array.from([6, 2, 7, 3]), Pe.MAX_AVG_VARIANCE = .42, Pe.MAX_INDIVIDUAL_VARIANCE = .8, Pe.START_PATTERN = Int32Array.from([8, 1, 1, 1, 1, 1, 1, 3]), Pe.STOP_PATTERN = Int32Array.from([7, 1, 1, 3, 1, 1, 1, 2, 1]), Pe.MAX_PIXEL_DRIFT = 3, Pe.MAX_PATTERN_DRIFT = 5, Pe.SKIPPED_ROW_COUNT_MAX = 25, Pe.ROW_STEP = 5, Pe.BARCODE_MIN_HEIGHT = 10;\r\n    class Le {\r\n        constructor(t, e) {\r\n            if (0 === e.length) throw new o;\r\n            this.field = t;\r\n            let r = e.length;\r\n            if (r > 1 && 0 === e[0]) {\r\n                let t = 1;\r\n                for (; t < r && 0 === e[t];) t++;\r\n                t === r ? this.coefficients = new Int32Array([0]) : (this.coefficients = new Int32Array(r - t), c.arraycopy(e, t, this.coefficients, 0, this.coefficients.length))\r\n            } else this.coefficients = e\r\n        }\r\n        getCoefficients() {\r\n            return this.coefficients\r\n        }\r\n        getDegree() {\r\n            return this.coefficients.length - 1\r\n        }\r\n        isZero() {\r\n            return 0 === this.coefficients[0]\r\n        }\r\n        getCoefficient(t) {\r\n            return this.coefficients[this.coefficients.length - 1 - t]\r\n        }\r\n        evaluateAt(t) {\r\n            if (0 === t) return this.getCoefficient(0);\r\n            if (1 === t) {\r\n                let t = 0;\r\n                for (let e of this.coefficients) t = this.field.add(t, e);\r\n                return t\r\n            }\r\n            let e = this.coefficients[0],\r\n                    r = this.coefficients.length;\r\n            for (let n = 1; n < r; n++) e = this.field.add(this.field.multiply(t, e), this.coefficients[n]);\r\n            return e\r\n        }\r\n        add(t) {\r\n            if (!this.field.equals(t.field)) throw new o(\"ModulusPolys do not have same ModulusGF field\");\r\n            if (this.isZero()) return t;\r\n            if (t.isZero()) return this;\r\n            let e = this.coefficients,\r\n                    r = t.coefficients;\r\n            if (e.length > r.length) {\r\n                let t = e;\r\n                e = r, r = t\r\n            }\r\n            let n = new Int32Array(r.length),\r\n                    i = r.length - e.length;\r\n            c.arraycopy(r, 0, n, 0, i);\r\n            for (let t = i; t < r.length; t++) n[t] = this.field.add(e[t - i], r[t]);\r\n            return new Le(this.field, n)\r\n        }\r\n        subtract(t) {\r\n            if (!this.field.equals(t.field)) throw new o(\"ModulusPolys do not have same ModulusGF field\");\r\n            return t.isZero() ? this : this.add(t.negative())\r\n        }\r\n        multiply(t) {\r\n            return t instanceof Le ? this.multiplyOther(t) : this.multiplyScalar(t)\r\n        }\r\n        multiplyOther(t) {\r\n            if (!this.field.equals(t.field)) throw new o(\"ModulusPolys do not have same ModulusGF field\");\r\n            if (this.isZero() || t.isZero()) return new Le(this.field, new Int32Array([0]));\r\n            let e = this.coefficients,\r\n                    r = e.length,\r\n                    n = t.coefficients,\r\n                    i = n.length,\r\n                    s = new Int32Array(r + i - 1);\r\n            for (let t = 0; t < r; t++) {\r\n                let r = e[t];\r\n                for (let e = 0; e < i; e++) s[t + e] = this.field.add(s[t + e], this.field.multiply(r, n[e]))\r\n            }\r\n            return new Le(this.field, s)\r\n        }\r\n        negative() {\r\n            let t = this.coefficients.length,\r\n                    e = new Int32Array(t);\r\n            for (let r = 0; r < t; r++) e[r] = this.field.subtract(0, this.coefficients[r]);\r\n            return new Le(this.field, e)\r\n        }\r\n        multiplyScalar(t) {\r\n            if (0 === t) return new Le(this.field, new Int32Array([0]));\r\n            if (1 === t) return this;\r\n            let e = this.coefficients.length,\r\n                    r = new Int32Array(e);\r\n            for (let n = 0; n < e; n++) r[n] = this.field.multiply(this.coefficients[n], t);\r\n            return new Le(this.field, r)\r\n        }\r\n        multiplyByMonomial(t, e) {\r\n            if (t < 0) throw new o;\r\n            if (0 === e) return new Le(this.field, new Int32Array([0]));\r\n            let r = this.coefficients.length,\r\n                    n = new Int32Array(r + t);\r\n            for (let t = 0; t < r; t++) n[t] = this.field.multiply(this.coefficients[t], e);\r\n            return new Le(this.field, n)\r\n        }\r\n        toString() {\r\n            let t = new p;\r\n            for (let e = this.getDegree(); e >= 0; e--) {\r\n                let r = this.getCoefficient(e);\r\n                0 !== r && (r < 0 ? (t.append(\" - \"), r = -r) : t.length() > 0 && t.append(\" + \"), 0 !== e && 1 === r || t.append(r), 0 !== e && (1 === e ? t.append(\"x\") : (t.append(\"x^\"), t.append(e))))\r\n            }\r\n            return t.toString()\r\n        }\r\n    }\r\n    class Fe {\r\n        add(t, e) {\r\n            return (t + e) % this.modulus\r\n        }\r\n        subtract(t, e) {\r\n            return (this.modulus + t - e) % this.modulus\r\n        }\r\n        exp(t) {\r\n            return this.expTable[t]\r\n        }\r\n        log(t) {\r\n            if (0 === t) throw new o;\r\n            return this.logTable[t]\r\n        }\r\n        inverse(t) {\r\n            if (0 === t) throw new K;\r\n            return this.expTable[this.modulus - this.logTable[t] - 1]\r\n        }\r\n        multiply(t, e) {\r\n            return 0 === t || 0 === e ? 0 : this.expTable[(this.logTable[t] + this.logTable[e]) % (this.modulus - 1)]\r\n        }\r\n        getSize() {\r\n            return this.modulus\r\n        }\r\n        equals(t) {\r\n            return t === this\r\n        }\r\n    }\r\n    class ve extends Fe {\r\n        constructor(t, e) {\r\n            super(), this.modulus = t, this.expTable = new Int32Array(t), this.logTable = new Int32Array(t);\r\n            let r = 1;\r\n            for (let n = 0; n < t; n++) this.expTable[n] = r, r = r * e % t;\r\n            for (let e = 0; e < t - 1; e++) this.logTable[this.expTable[e]] = e;\r\n            this.zero = new Le(this, new Int32Array([0])), this.one = new Le(this, new Int32Array([1]))\r\n        }\r\n        getZero() {\r\n            return this.zero\r\n        }\r\n        getOne() {\r\n            return this.one\r\n        }\r\n        buildMonomial(t, e) {\r\n            if (t < 0) throw new o;\r\n            if (0 === e) return this.zero;\r\n            let r = new Int32Array(t + 1);\r\n            return r[0] = e, new Le(this, r)\r\n        }\r\n    }\r\n    ve.PDF417_GF = new ve(be.NUMBER_OF_CODEWORDS, 3);\r\n    class ke {\r\n        constructor() {\r\n            this.field = ve.PDF417_GF\r\n        }\r\n        decode(t, e, r) {\r\n            let n = new Le(this.field, t),\r\n                    i = new Int32Array(e),\r\n                    s = !1;\r\n            for (let t = e; t > 0; t--) {\r\n                let r = n.evaluateAt(this.field.exp(t));\r\n                i[e - t] = r, 0 !== r && (s = !0)\r\n            }\r\n            if (!s) return 0;\r\n            let o = this.field.getOne();\r\n            if (null != r)\r\n                for (const e of r) {\r\n                    let r = this.field.exp(t.length - 1 - e),\r\n                            n = new Le(this.field, new Int32Array([this.field.subtract(0, r), 1]));\r\n                    o = o.multiply(n)\r\n                }\r\n            let a = new Le(this.field, i),\r\n                    h = this.runEuclideanAlgorithm(this.field.buildMonomial(e, 1), a, e),\r\n                    c = h[0],\r\n                    u = h[1],\r\n                    d = this.findErrorLocations(c),\r\n                    g = this.findErrorMagnitudes(u, c, d);\r\n            for (let e = 0; e < d.length; e++) {\r\n                let r = t.length - 1 - this.field.log(d[e]);\r\n                if (r < 0) throw l.getChecksumInstance();\r\n                t[r] = this.field.subtract(t[r], g[e])\r\n            }\r\n            return d.length\r\n        }\r\n        runEuclideanAlgorithm(t, e, r) {\r\n            if (t.getDegree() < e.getDegree()) {\r\n                let r = t;\r\n                t = e, e = r\r\n            }\r\n            let n = t,\r\n                    i = e,\r\n                    s = this.field.getZero(),\r\n                    o = this.field.getOne();\r\n            for (; i.getDegree() >= Math.round(r / 2);) {\r\n                let t = n,\r\n                        e = s;\r\n                if (s = o, (n = i).isZero()) throw l.getChecksumInstance();\r\n                i = t;\r\n                let r = this.field.getZero(),\r\n                        a = n.getCoefficient(n.getDegree()),\r\n                        h = this.field.inverse(a);\r\n                for (; i.getDegree() >= n.getDegree() && !i.isZero();) {\r\n                    let t = i.getDegree() - n.getDegree(),\r\n                            e = this.field.multiply(i.getCoefficient(i.getDegree()), h);\r\n                    r = r.add(this.field.buildMonomial(t, e)), i = i.subtract(n.multiplyByMonomial(t, e))\r\n                }\r\n                o = r.multiply(s).subtract(e).negative()\r\n            }\r\n            let a = o.getCoefficient(0);\r\n            if (0 === a) throw l.getChecksumInstance();\r\n            let h = this.field.inverse(a);\r\n            return [o.multiply(h), i.multiply(h)]\r\n        }\r\n        findErrorLocations(t) {\r\n            let e = t.getDegree(),\r\n                    r = new Int32Array(e),\r\n                    n = 0;\r\n            for (let i = 1; i < this.field.getSize() && n < e; i++) 0 === t.evaluateAt(i) && (r[n] = this.field.inverse(i), n++);\r\n            if (n !== e) throw l.getChecksumInstance();\r\n            return r\r\n        }\r\n        findErrorMagnitudes(t, e, r) {\r\n            let n = e.getDegree(),\r\n                    i = new Int32Array(n);\r\n            for (let t = 1; t <= n; t++) i[n - t] = this.field.multiply(t, e.getCoefficient(t));\r\n            let s = new Le(this.field, i),\r\n                    o = r.length,\r\n                    a = new Int32Array(o);\r\n            for (let e = 0; e < o; e++) {\r\n                let n = this.field.inverse(r[e]),\r\n                        i = this.field.subtract(0, t.evaluateAt(n)),\r\n                        o = this.field.inverse(s.evaluateAt(n));\r\n                a[e] = this.field.multiply(i, o)\r\n            }\r\n            return a\r\n        }\r\n    }\r\n    class xe {\r\n        constructor(t, e, r, n, i) {\r\n            t instanceof xe ? this.constructor_2(t) : this.constructor_1(t, e, r, n, i)\r\n        }\r\n        constructor_1(t, e, r, n, i) {\r\n            const s = null == e || null == r,\r\n                    o = null == n || null == i;\r\n            if (s && o) throw new R;\r\n            s ? (e = new rt(0, n.getY()), r = new rt(0, i.getY())) : o && (n = new rt(t.getWidth() - 1, e.getY()), i = new rt(t.getWidth() - 1, r.getY())), this.image = t, this.topLeft = e, this.bottomLeft = r, this.topRight = n, this.bottomRight = i, this.minX = Math.trunc(Math.min(e.getX(), r.getX())), this.maxX = Math.trunc(Math.max(n.getX(), i.getX())), this.minY = Math.trunc(Math.min(e.getY(), n.getY())), this.maxY = Math.trunc(Math.max(r.getY(), i.getY()))\r\n        }\r\n        constructor_2(t) {\r\n            this.image = t.image, this.topLeft = t.getTopLeft(), this.bottomLeft = t.getBottomLeft(), this.topRight = t.getTopRight(), this.bottomRight = t.getBottomRight(), this.minX = t.getMinX(), this.maxX = t.getMaxX(), this.minY = t.getMinY(), this.maxY = t.getMaxY()\r\n        }\r\n        static merge(t, e) {\r\n            return null == t ? e : null == e ? t : new xe(t.image, t.topLeft, t.bottomLeft, e.topRight, e.bottomRight)\r\n        }\r\n        addMissingRows(t, e, r) {\r\n            let n = this.topLeft,\r\n                    i = this.bottomLeft,\r\n                    s = this.topRight,\r\n                    o = this.bottomRight;\r\n            if (t > 0) {\r\n                let e = r ? this.topLeft : this.topRight,\r\n                        i = Math.trunc(e.getY() - t);\r\n                i < 0 && (i = 0);\r\n                let o = new rt(e.getX(), i);\r\n                r ? n = o : s = o\r\n            }\r\n            if (e > 0) {\r\n                let t = r ? this.bottomLeft : this.bottomRight,\r\n                        n = Math.trunc(t.getY() + e);\r\n                n >= this.image.getHeight() && (n = this.image.getHeight() - 1);\r\n                let s = new rt(t.getX(), n);\r\n                r ? i = s : o = s\r\n            }\r\n            return new xe(this.image, n, i, s, o)\r\n        }\r\n        getMinX() {\r\n            return this.minX\r\n        }\r\n        getMaxX() {\r\n            return this.maxX\r\n        }\r\n        getMinY() {\r\n            return this.minY\r\n        }\r\n        getMaxY() {\r\n            return this.maxY\r\n        }\r\n        getTopLeft() {\r\n            return this.topLeft\r\n        }\r\n        getTopRight() {\r\n            return this.topRight\r\n        }\r\n        getBottomLeft() {\r\n            return this.bottomLeft\r\n        }\r\n        getBottomRight() {\r\n            return this.bottomRight\r\n        }\r\n    }\r\n    class Ve {\r\n        constructor(t, e, r, n) {\r\n            this.columnCount = t, this.errorCorrectionLevel = n, this.rowCountUpperPart = e, this.rowCountLowerPart = r, this.rowCount = e + r\r\n        }\r\n        getColumnCount() {\r\n            return this.columnCount\r\n        }\r\n        getErrorCorrectionLevel() {\r\n            return this.errorCorrectionLevel\r\n        }\r\n        getRowCount() {\r\n            return this.rowCount\r\n        }\r\n        getRowCountUpperPart() {\r\n            return this.rowCountUpperPart\r\n        }\r\n        getRowCountLowerPart() {\r\n            return this.rowCountLowerPart\r\n        }\r\n    }\r\n    class Ue {\r\n        constructor() {\r\n            this.buffer = \"\"\r\n        }\r\n        static form(t, e) {\r\n            let r = -1;\r\n            return t.replace(/%(-)?(0?[0-9]+)?([.][0-9]+)?([#][0-9]+)?([scfpexd%])/g, function(t, n, i, s, o, a) {\r\n                if (\"%%\" === t) return \"%\";\r\n                if (void 0 === e[++r]) return;\r\n                t = s ? parseInt(s.substr(1)) : void 0;\r\n                let l, h = o ? parseInt(o.substr(1)) : void 0;\r\n                switch (a) {\r\n                    case \"s\":\r\n                        l = e[r];\r\n                        break;\r\n                    case \"c\":\r\n                        l = e[r][0];\r\n                        break;\r\n                    case \"f\":\r\n                        l = parseFloat(e[r]).toFixed(t);\r\n                        break;\r\n                    case \"p\":\r\n                        l = parseFloat(e[r]).toPrecision(t);\r\n                        break;\r\n                    case \"e\":\r\n                        l = parseFloat(e[r]).toExponential(t);\r\n                        break;\r\n                    case \"x\":\r\n                        l = parseInt(e[r]).toString(h || 16);\r\n                        break;\r\n                    case \"d\":\r\n                        l = parseFloat(parseInt(e[r], h || 10).toPrecision(t)).toFixed(0)\r\n                }\r\n                l = \"object\" == typeof l ? JSON.stringify(l) : (+l).toString(h);\r\n                let c = parseInt(i),\r\n                        u = i && i[0] + \"\" == \"0\" ? \"0\" : \" \";\r\n                for (; l.length < c;) l = void 0 !== n ? l + u : u + l;\r\n                return l\r\n            })\r\n        }\r\n        format(t, ...e) {\r\n            this.buffer += Ue.form(t, e)\r\n        }\r\n        toString() {\r\n            return this.buffer\r\n        }\r\n    }\r\n    class He {\r\n        constructor(t) {\r\n            this.boundingBox = new xe(t), this.codewords = new Array(t.getMaxY() - t.getMinY() + 1)\r\n        }\r\n        getCodewordNearby(t) {\r\n            let e = this.getCodeword(t);\r\n            if (null != e) return e;\r\n            for (let r = 1; r < He.MAX_NEARBY_DISTANCE; r++) {\r\n                let n = this.imageRowToCodewordIndex(t) - r;\r\n                if (n >= 0 && null != (e = this.codewords[n])) return e;\r\n                if ((n = this.imageRowToCodewordIndex(t) + r) < this.codewords.length && null != (e = this.codewords[n])) return e\r\n            }\r\n            return null\r\n        }\r\n        imageRowToCodewordIndex(t) {\r\n            return t - this.boundingBox.getMinY()\r\n        }\r\n        setCodeword(t, e) {\r\n            this.codewords[this.imageRowToCodewordIndex(t)] = e\r\n        }\r\n        getCodeword(t) {\r\n            return this.codewords[this.imageRowToCodewordIndex(t)]\r\n        }\r\n        getBoundingBox() {\r\n            return this.boundingBox\r\n        }\r\n        getCodewords() {\r\n            return this.codewords\r\n        }\r\n        toString() {\r\n            const t = new Ue;\r\n            let e = 0;\r\n            for (const r of this.codewords) null != r ? t.format(\"%3d: %3d|%3d%n\", e++, r.getRowNumber(), r.getValue()) : t.format(\"%3d:    |   %n\", e++);\r\n            return t.toString()\r\n        }\r\n    }\r\n    He.MAX_NEARBY_DISTANCE = 5;\r\n    class Ge {\r\n        constructor() {\r\n            this.values = new Map\r\n        }\r\n        setValue(t) {\r\n            t = Math.trunc(t);\r\n            let e = this.values.get(t);\r\n            null == e && (e = 0), e++, this.values.set(t, e)\r\n        }\r\n        getValue() {\r\n            let t = -1,\r\n                    e = new Array;\r\n            for (const [r, n] of this.values.entries()) {\r\n                const i = {\r\n                    getKey: () => r,\r\n                    getValue: () => n\r\n                };\r\n                i.getValue() > t ? (t = i.getValue(), (e = []).push(i.getKey())) : i.getValue() === t && e.push(i.getKey())\r\n            }\r\n            return be.toIntArray(e)\r\n        }\r\n        getConfidence(t) {\r\n            return this.values.get(t)\r\n        }\r\n    }\r\n    class Xe extends He {\r\n        constructor(t, e) {\r\n            super(t), this._isLeft = e\r\n        }\r\n        setRowNumbers() {\r\n            for (let t of this.getCodewords()) null != t && t.setRowNumberAsRowIndicatorColumn()\r\n        }\r\n        adjustCompleteIndicatorColumnRowNumbers(t) {\r\n            let e = this.getCodewords();\r\n            this.setRowNumbers(), this.removeIncorrectCodewords(e, t);\r\n            let r = this.getBoundingBox(),\r\n                    n = this._isLeft ? r.getTopLeft() : r.getTopRight(),\r\n                    i = this._isLeft ? r.getBottomLeft() : r.getBottomRight(),\r\n                    s = this.imageRowToCodewordIndex(Math.trunc(n.getY())),\r\n                    o = this.imageRowToCodewordIndex(Math.trunc(i.getY())),\r\n                    a = -1,\r\n                    l = 1,\r\n                    h = 0;\r\n            for (let r = s; r < o; r++) {\r\n                if (null == e[r]) continue;\r\n                let n = e[r],\r\n                        i = n.getRowNumber() - a;\r\n                if (0 === i) h++;\r\n                else if (1 === i) l = Math.max(l, h), h = 1, a = n.getRowNumber();\r\n                else if (i < 0 || n.getRowNumber() >= t.getRowCount() || i > r) e[r] = null;\r\n                else {\r\n                    let t, s = (t = l > 2 ? (l - 2) * i : i) >= r;\r\n                    for (let n = 1; n <= t && !s; n++) s = null != e[r - n];\r\n                    s ? e[r] = null : (a = n.getRowNumber(), h = 1)\r\n                }\r\n            }\r\n        }\r\n        getRowHeights() {\r\n            let t = this.getBarcodeMetadata();\r\n            if (null == t) return null;\r\n            this.adjustIncompleteIndicatorColumnRowNumbers(t);\r\n            let e = new Int32Array(t.getRowCount());\r\n            for (let t of this.getCodewords())\r\n                if (null != t) {\r\n                    let r = t.getRowNumber();\r\n                    if (r >= e.length) continue;\r\n                    e[r]++\r\n                } return e\r\n        }\r\n        adjustIncompleteIndicatorColumnRowNumbers(t) {\r\n            let e = this.getBoundingBox(),\r\n                    r = this._isLeft ? e.getTopLeft() : e.getTopRight(),\r\n                    n = this._isLeft ? e.getBottomLeft() : e.getBottomRight(),\r\n                    i = this.imageRowToCodewordIndex(Math.trunc(r.getY())),\r\n                    s = this.imageRowToCodewordIndex(Math.trunc(n.getY())),\r\n                    o = this.getCodewords(),\r\n                    a = -1;\r\n            for (let e = i; e < s; e++) {\r\n                if (null == o[e]) continue;\r\n                let r = o[e];\r\n                r.setRowNumberAsRowIndicatorColumn();\r\n                let n = r.getRowNumber() - a;\r\n                0 === n || (1 === n ? a = r.getRowNumber() : r.getRowNumber() >= t.getRowCount() ? o[e] = null : a = r.getRowNumber())\r\n            }\r\n        }\r\n        getBarcodeMetadata() {\r\n            let t = this.getCodewords(),\r\n                    e = new Ge,\r\n                    r = new Ge,\r\n                    n = new Ge,\r\n                    i = new Ge;\r\n            for (let s of t) {\r\n                if (null == s) continue;\r\n                s.setRowNumberAsRowIndicatorColumn();\r\n                let t = s.getValue() % 30,\r\n                        o = s.getRowNumber();\r\n                switch (this._isLeft || (o += 2), o % 3) {\r\n                    case 0:\r\n                        r.setValue(3 * t + 1);\r\n                        break;\r\n                    case 1:\r\n                        i.setValue(t / 3), n.setValue(t % 3);\r\n                        break;\r\n                    case 2:\r\n                        e.setValue(t + 1)\r\n                }\r\n            }\r\n            if (0 === e.getValue().length || 0 === r.getValue().length || 0 === n.getValue().length || 0 === i.getValue().length || e.getValue()[0] < 1 || r.getValue()[0] + n.getValue()[0] < be.MIN_ROWS_IN_BARCODE || r.getValue()[0] + n.getValue()[0] > be.MAX_ROWS_IN_BARCODE) return null;\r\n            let s = new Ve(e.getValue()[0], r.getValue()[0], n.getValue()[0], i.getValue()[0]);\r\n            return this.removeIncorrectCodewords(t, s), s\r\n        }\r\n        removeIncorrectCodewords(t, e) {\r\n            for (let r = 0; r < t.length; r++) {\r\n                let n = t[r];\r\n                if (null == t[r]) continue;\r\n                let i = n.getValue() % 30,\r\n                        s = n.getRowNumber();\r\n                if (s > e.getRowCount()) t[r] = null;\r\n                else switch (this._isLeft || (s += 2), s % 3) {\r\n                    case 0:\r\n                        3 * i + 1 !== e.getRowCountUpperPart() && (t[r] = null);\r\n                        break;\r\n                    case 1:\r\n                        Math.trunc(i / 3) === e.getErrorCorrectionLevel() && i % 3 === e.getRowCountLowerPart() || (t[r] = null);\r\n                        break;\r\n                    case 2:\r\n                        i + 1 !== e.getColumnCount() && (t[r] = null)\r\n                }\r\n            }\r\n        }\r\n        isLeft() {\r\n            return this._isLeft\r\n        }\r\n        toString() {\r\n            return \"IsLeft: \" + this._isLeft + \"\\n\" + super.toString()\r\n        }\r\n    }\r\n    class We {\r\n        constructor(t, e) {\r\n            this.ADJUST_ROW_NUMBER_SKIP = 2, this.barcodeMetadata = t, this.barcodeColumnCount = t.getColumnCount(), this.boundingBox = e, this.detectionResultColumns = new Array(this.barcodeColumnCount + 2)\r\n        }\r\n        getDetectionResultColumns() {\r\n            this.adjustIndicatorColumnRowNumbers(this.detectionResultColumns[0]), this.adjustIndicatorColumnRowNumbers(this.detectionResultColumns[this.barcodeColumnCount + 1]);\r\n            let t, e = be.MAX_CODEWORDS_IN_BARCODE;\r\n            do {\r\n                t = e, e = this.adjustRowNumbersAndGetCount()\r\n            } while (e > 0 && e < t);\r\n            return this.detectionResultColumns\r\n        }\r\n        adjustIndicatorColumnRowNumbers(t) {\r\n            null != t && t.adjustCompleteIndicatorColumnRowNumbers(this.barcodeMetadata)\r\n        }\r\n        adjustRowNumbersAndGetCount() {\r\n            let t = this.adjustRowNumbersByRow();\r\n            if (0 === t) return 0;\r\n            for (let t = 1; t < this.barcodeColumnCount + 1; t++) {\r\n                let e = this.detectionResultColumns[t].getCodewords();\r\n                for (let r = 0; r < e.length; r++) null != e[r] && (e[r].hasValidRowNumber() || this.adjustRowNumbers(t, r, e))\r\n            }\r\n            return t\r\n        }\r\n        adjustRowNumbersByRow() {\r\n            return this.adjustRowNumbersFromBothRI(), this.adjustRowNumbersFromLRI() + this.adjustRowNumbersFromRRI()\r\n        }\r\n        adjustRowNumbersFromBothRI() {\r\n            if (null == this.detectionResultColumns[0] || null == this.detectionResultColumns[this.barcodeColumnCount + 1]) return;\r\n            let t = this.detectionResultColumns[0].getCodewords(),\r\n                    e = this.detectionResultColumns[this.barcodeColumnCount + 1].getCodewords();\r\n            for (let r = 0; r < t.length; r++)\r\n                if (null != t[r] && null != e[r] && t[r].getRowNumber() === e[r].getRowNumber())\r\n                    for (let e = 1; e <= this.barcodeColumnCount; e++) {\r\n                        let n = this.detectionResultColumns[e].getCodewords()[r];\r\n                        null != n && (n.setRowNumber(t[r].getRowNumber()), n.hasValidRowNumber() || (this.detectionResultColumns[e].getCodewords()[r] = null))\r\n                    }\r\n        }\r\n        adjustRowNumbersFromRRI() {\r\n            if (null == this.detectionResultColumns[this.barcodeColumnCount + 1]) return 0;\r\n            let t = 0,\r\n                    e = this.detectionResultColumns[this.barcodeColumnCount + 1].getCodewords();\r\n            for (let r = 0; r < e.length; r++) {\r\n                if (null == e[r]) continue;\r\n                let n = e[r].getRowNumber(),\r\n                        i = 0;\r\n                for (let e = this.barcodeColumnCount + 1; e > 0 && i < this.ADJUST_ROW_NUMBER_SKIP; e--) {\r\n                    let s = this.detectionResultColumns[e].getCodewords()[r];\r\n                    null != s && (i = We.adjustRowNumberIfValid(n, i, s), s.hasValidRowNumber() || t++)\r\n                }\r\n            }\r\n            return t\r\n        }\r\n        adjustRowNumbersFromLRI() {\r\n            if (null == this.detectionResultColumns[0]) return 0;\r\n            let t = 0,\r\n                    e = this.detectionResultColumns[0].getCodewords();\r\n            for (let r = 0; r < e.length; r++) {\r\n                if (null == e[r]) continue;\r\n                let n = e[r].getRowNumber(),\r\n                        i = 0;\r\n                for (let e = 1; e < this.barcodeColumnCount + 1 && i < this.ADJUST_ROW_NUMBER_SKIP; e++) {\r\n                    let s = this.detectionResultColumns[e].getCodewords()[r];\r\n                    null != s && (i = We.adjustRowNumberIfValid(n, i, s), s.hasValidRowNumber() || t++)\r\n                }\r\n            }\r\n            return t\r\n        }\r\n        static adjustRowNumberIfValid(t, e, r) {\r\n            return null == r ? e : (r.hasValidRowNumber() || (r.isValidRowNumber(t) ? (r.setRowNumber(t), e = 0) : ++e), e)\r\n        }\r\n        adjustRowNumbers(t, e, r) {\r\n            let n = r[e],\r\n                    i = this.detectionResultColumns[t - 1].getCodewords(),\r\n                    s = i;\r\n            null != this.detectionResultColumns[t + 1] && (s = this.detectionResultColumns[t + 1].getCodewords());\r\n            let o = new Array(14);\r\n            o[2] = i[e], o[3] = s[e], e > 0 && (o[0] = r[e - 1], o[4] = i[e - 1], o[5] = s[e - 1]), e > 1 && (o[8] = r[e - 2], o[10] = i[e - 2], o[11] = s[e - 2]), e < r.length - 1 && (o[1] = r[e + 1], o[6] = i[e + 1], o[7] = s[e + 1]), e < r.length - 2 && (o[9] = r[e + 2], o[12] = i[e + 2], o[13] = s[e + 2]);\r\n            for (let t of o)\r\n                if (We.adjustRowNumber(n, t)) return\r\n        }\r\n        static adjustRowNumber(t, e) {\r\n            return null != e && (!(!e.hasValidRowNumber() || e.getBucket() !== t.getBucket()) && (t.setRowNumber(e.getRowNumber()), !0))\r\n        }\r\n        getBarcodeColumnCount() {\r\n            return this.barcodeColumnCount\r\n        }\r\n        getBarcodeRowCount() {\r\n            return this.barcodeMetadata.getRowCount()\r\n        }\r\n        getBarcodeECLevel() {\r\n            return this.barcodeMetadata.getErrorCorrectionLevel()\r\n        }\r\n        setBoundingBox(t) {\r\n            this.boundingBox = t\r\n        }\r\n        getBoundingBox() {\r\n            return this.boundingBox\r\n        }\r\n        setDetectionResultColumn(t, e) {\r\n            this.detectionResultColumns[t] = e\r\n        }\r\n        getDetectionResultColumn(t) {\r\n            return this.detectionResultColumns[t]\r\n        }\r\n        toString() {\r\n            let t = this.detectionResultColumns[0];\r\n            null == t && (t = this.detectionResultColumns[this.barcodeColumnCount + 1]);\r\n            let e = new Ue;\r\n            for (let r = 0; r < t.getCodewords().length; r++) {\r\n                e.format(\"CW %3d:\", r);\r\n                for (let t = 0; t < this.barcodeColumnCount + 2; t++) {\r\n                    if (null == this.detectionResultColumns[t]) {\r\n                        e.format(\"    |   \");\r\n                        continue\r\n                    }\r\n                    let n = this.detectionResultColumns[t].getCodewords()[r];\r\n                    null != n ? e.format(\" %3d|%3d\", n.getRowNumber(), n.getValue()) : e.format(\"    |   \")\r\n                }\r\n                e.format(\"%n\")\r\n            }\r\n            return e.toString()\r\n        }\r\n    }\r\n    class ze {\r\n        constructor(t, e, r, n) {\r\n            this.rowNumber = ze.BARCODE_ROW_UNKNOWN, this.startX = Math.trunc(t), this.endX = Math.trunc(e), this.bucket = Math.trunc(r), this.value = Math.trunc(n)\r\n        }\r\n        hasValidRowNumber() {\r\n            return this.isValidRowNumber(this.rowNumber)\r\n        }\r\n        isValidRowNumber(t) {\r\n            return t !== ze.BARCODE_ROW_UNKNOWN && this.bucket === t % 3 * 3\r\n        }\r\n        setRowNumberAsRowIndicatorColumn() {\r\n            this.rowNumber = Math.trunc(3 * Math.trunc(this.value / 30) + Math.trunc(this.bucket / 3))\r\n        }\r\n        getWidth() {\r\n            return this.endX - this.startX\r\n        }\r\n        getStartX() {\r\n            return this.startX\r\n        }\r\n        getEndX() {\r\n            return this.endX\r\n        }\r\n        getBucket() {\r\n            return this.bucket\r\n        }\r\n        getValue() {\r\n            return this.value\r\n        }\r\n        getRowNumber() {\r\n            return this.rowNumber\r\n        }\r\n        setRowNumber(t) {\r\n            this.rowNumber = t\r\n        }\r\n        toString() {\r\n            return this.rowNumber + \"|\" + this.value\r\n        }\r\n    }\r\n    ze.BARCODE_ROW_UNKNOWN = -1;\r\n    class Ye {\r\n        static initialize() {\r\n            for (let t = 0; t < be.SYMBOL_TABLE.length; t++) {\r\n                let e = be.SYMBOL_TABLE[t],\r\n                        r = 1 & e;\r\n                for (let n = 0; n < be.BARS_IN_MODULE; n++) {\r\n                    let i = 0;\r\n                    for (;\r\n                            (1 & e) === r;) i += 1, e >>= 1;\r\n                    r = 1 & e, Ye.RATIOS_TABLE[t] || (Ye.RATIOS_TABLE[t] = new Array(be.BARS_IN_MODULE)), Ye.RATIOS_TABLE[t][be.BARS_IN_MODULE - n - 1] = Math.fround(i / be.MODULES_IN_CODEWORD)\r\n                }\r\n            }\r\n            this.bSymbolTableReady = !0\r\n        }\r\n        static getDecodedValue(t) {\r\n            let e = Ye.getDecodedCodewordValue(Ye.sampleBitCounts(t));\r\n            return -1 !== e ? e : Ye.getClosestDecodedValue(t)\r\n        }\r\n        static sampleBitCounts(t) {\r\n            let e = tt.sum(t),\r\n                    r = new Int32Array(be.BARS_IN_MODULE),\r\n                    n = 0,\r\n                    i = 0;\r\n            for (let s = 0; s < be.MODULES_IN_CODEWORD; s++) {\r\n                let o = e / (2 * be.MODULES_IN_CODEWORD) + s * e / be.MODULES_IN_CODEWORD;\r\n                i + t[n] <= o && (i += t[n], n++), r[n]++\r\n            }\r\n            return r\r\n        }\r\n        static getDecodedCodewordValue(t) {\r\n            let e = Ye.getBitValue(t);\r\n            return -1 === be.getCodeword(e) ? -1 : e\r\n        }\r\n        static getBitValue(t) {\r\n            let e = 0;\r\n            for (let r = 0; r < t.length; r++)\r\n                for (let n = 0; n < t[r]; n++) e = e << 1 | (r % 2 == 0 ? 1 : 0);\r\n            return Math.trunc(e)\r\n        }\r\n        static getClosestDecodedValue(t) {\r\n            let e = tt.sum(t),\r\n                    r = new Array(be.BARS_IN_MODULE);\r\n            if (e > 1)\r\n                for (let n = 0; n < r.length; n++) r[n] = Math.fround(t[n] / e);\r\n            let n = et.MAX_VALUE,\r\n                    i = -1;\r\n            this.bSymbolTableReady || Ye.initialize();\r\n            for (let t = 0; t < Ye.RATIOS_TABLE.length; t++) {\r\n                let e = 0,\r\n                        s = Ye.RATIOS_TABLE[t];\r\n                for (let t = 0; t < be.BARS_IN_MODULE; t++) {\r\n                    let i = Math.fround(s[t] - r[t]);\r\n                    if ((e += Math.fround(i * i)) >= n) break\r\n                }\r\n                e < n && (n = e, i = be.SYMBOL_TABLE[t])\r\n            }\r\n            return i\r\n        }\r\n    }\r\n    Ye.bSymbolTableReady = !1, Ye.RATIOS_TABLE = new Array(be.SYMBOL_TABLE.length).map(t => new Array(be.BARS_IN_MODULE));\r\n    class Ze {\r\n        constructor() {\r\n            this.segmentCount = -1, this.fileSize = -1, this.timestamp = -1, this.checksum = -1\r\n        }\r\n        getSegmentIndex() {\r\n            return this.segmentIndex\r\n        }\r\n        setSegmentIndex(t) {\r\n            this.segmentIndex = t\r\n        }\r\n        getFileId() {\r\n            return this.fileId\r\n        }\r\n        setFileId(t) {\r\n            this.fileId = t\r\n        }\r\n        getOptionalData() {\r\n            return this.optionalData\r\n        }\r\n        setOptionalData(t) {\r\n            this.optionalData = t\r\n        }\r\n        isLastSegment() {\r\n            return this.lastSegment\r\n        }\r\n        setLastSegment(t) {\r\n            this.lastSegment = t\r\n        }\r\n        getSegmentCount() {\r\n            return this.segmentCount\r\n        }\r\n        setSegmentCount(t) {\r\n            this.segmentCount = t\r\n        }\r\n        getSender() {\r\n            return this.sender || null\r\n        }\r\n        setSender(t) {\r\n            this.sender = t\r\n        }\r\n        getAddressee() {\r\n            return this.addressee || null\r\n        }\r\n        setAddressee(t) {\r\n            this.addressee = t\r\n        }\r\n        getFileName() {\r\n            return this.fileName\r\n        }\r\n        setFileName(t) {\r\n            this.fileName = t\r\n        }\r\n        getFileSize() {\r\n            return this.fileSize\r\n        }\r\n        setFileSize(t) {\r\n            this.fileSize = t\r\n        }\r\n        getChecksum() {\r\n            return this.checksum\r\n        }\r\n        setChecksum(t) {\r\n            this.checksum = t\r\n        }\r\n        getTimestamp() {\r\n            return this.timestamp\r\n        }\r\n        setTimestamp(t) {\r\n            this.timestamp = t\r\n        }\r\n    }\r\n    class Ke {\r\n        static parseLong(t, e) {\r\n            return parseInt(t, e)\r\n        }\r\n    }\r\n    class qe extends i {}\r\n    qe.kind = \"NullPointerException\";\r\n    class Qe {\r\n        writeBytes(t) {\r\n            this.writeBytesOffset(t, 0, t.length)\r\n        }\r\n        writeBytesOffset(t, e, r) {\r\n            if (null == t) throw new qe;\r\n            if (e < 0 || e > t.length || r < 0 || e + r > t.length || e + r < 0) throw new u;\r\n            if (0 !== r)\r\n                for (let n = 0; n < r; n++) this.write(t[e + n])\r\n        }\r\n        flush() {}\r\n        close() {}\r\n    }\r\n    class je extends i {}\r\n    class Je extends Qe {\r\n        constructor(t = 32) {\r\n            if (super(), this.count = 0, t < 0) throw new o(\"Negative initial size: \" + t);\r\n            this.buf = new Uint8Array(t)\r\n        }\r\n        ensureCapacity(t) {\r\n            t - this.buf.length > 0 && this.grow(t)\r\n        }\r\n        grow(t) {\r\n            let e = this.buf.length << 1;\r\n            if (e - t < 0 && (e = t), e < 0) {\r\n                if (t < 0) throw new je;\r\n                e = f.MAX_VALUE\r\n            }\r\n            this.buf = g.copyOfUint8Array(this.buf, e)\r\n        }\r\n        write(t) {\r\n            this.ensureCapacity(this.count + 1), this.buf[this.count] = t, this.count += 1\r\n        }\r\n        writeBytesOffset(t, e, r) {\r\n            if (e < 0 || e > t.length || r < 0 || e + r - t.length > 0) throw new u;\r\n            this.ensureCapacity(this.count + r), c.arraycopy(t, e, this.buf, this.count, r), this.count += r\r\n        }\r\n        writeTo(t) {\r\n            t.writeBytesOffset(this.buf, 0, this.count)\r\n        }\r\n        reset() {\r\n            this.count = 0\r\n        }\r\n        toByteArray() {\r\n            return g.copyOfUint8Array(this.buf, this.count)\r\n        }\r\n        size() {\r\n            return this.count\r\n        }\r\n        toString(t) {\r\n            return t ? \"string\" == typeof t ? this.toString_string(t) : this.toString_number(t) : this.toString_void()\r\n        }\r\n        toString_void() {\r\n            return new String(this.buf).toString()\r\n        }\r\n        toString_string(t) {\r\n            return new String(this.buf).toString()\r\n        }\r\n        toString_number(t) {\r\n            return new String(this.buf).toString()\r\n        }\r\n        close() {}\r\n    }\r\n\r\n    function $e() {\r\n        if (\"undefined\" != typeof window) return window.BigInt || null;\r\n        if (\"undefined\" != typeof global) return global.BigInt || null;\r\n        if (\"undefined\" != typeof self) return self.BigInt || null;\r\n        throw new Error(\"Can't search globals for BigInt!\")\r\n    }\r\n    let tr;\r\n\r\n    function er(t) {\r\n        if (void 0 === tr && (tr = $e()), null === tr) throw new Error(\"BigInt is not supported!\");\r\n        return tr(t)\r\n    }! function(t) {\r\n        t[t.ALPHA = 0] = \"ALPHA\", t[t.LOWER = 1] = \"LOWER\", t[t.MIXED = 2] = \"MIXED\", t[t.PUNCT = 3] = \"PUNCT\", t[t.ALPHA_SHIFT = 4] = \"ALPHA_SHIFT\", t[t.PUNCT_SHIFT = 5] = \"PUNCT_SHIFT\"\r\n    }(X || (X = {}));\r\n    class rr {\r\n        static decode(t, e) {\r\n            let r = new p(\"\"),\r\n                    n = m.ISO8859_1;\r\n            r.enableDecoding(n);\r\n            let i = 1,\r\n                    s = t[i++],\r\n                    o = new Ze;\r\n            for (; i < t[0];) {\r\n                switch (s) {\r\n                    case rr.TEXT_COMPACTION_MODE_LATCH:\r\n                        i = rr.textCompaction(t, i, r);\r\n                        break;\r\n                    case rr.BYTE_COMPACTION_MODE_LATCH:\r\n                    case rr.BYTE_COMPACTION_MODE_LATCH_6:\r\n                        i = rr.byteCompaction(s, t, n, i, r);\r\n                        break;\r\n                    case rr.MODE_SHIFT_TO_BYTE_COMPACTION_MODE:\r\n                        r.append(t[i++]);\r\n                        break;\r\n                    case rr.NUMERIC_COMPACTION_MODE_LATCH:\r\n                        i = rr.numericCompaction(t, i, r);\r\n                        break;\r\n                    case rr.ECI_CHARSET:\r\n                        m.getCharacterSetECIByValue(t[i++]);\r\n                        break;\r\n                    case rr.ECI_GENERAL_PURPOSE:\r\n                        i += 2;\r\n                        break;\r\n                    case rr.ECI_USER_DEFINED:\r\n                        i++;\r\n                        break;\r\n                    case rr.BEGIN_MACRO_PDF417_CONTROL_BLOCK:\r\n                        i = rr.decodeMacroBlock(t, i, o);\r\n                        break;\r\n                    case rr.BEGIN_MACRO_PDF417_OPTIONAL_FIELD:\r\n                    case rr.MACRO_PDF417_TERMINATOR:\r\n                        throw new E;\r\n                    default:\r\n                        i--, i = rr.textCompaction(t, i, r)\r\n                }\r\n                if (!(i < t.length)) throw E.getFormatInstance();\r\n                s = t[i++]\r\n            }\r\n            if (0 === r.length()) throw E.getFormatInstance();\r\n            let a = new z(null, r.toString(), null, e);\r\n            return a.setOther(o), a\r\n        }\r\n        static decodeMacroBlock(t, e, r) {\r\n            if (e + rr.NUMBER_OF_SEQUENCE_CODEWORDS > t[0]) throw E.getFormatInstance();\r\n            let n = new Int32Array(rr.NUMBER_OF_SEQUENCE_CODEWORDS);\r\n            for (let r = 0; r < rr.NUMBER_OF_SEQUENCE_CODEWORDS; r++, e++) n[r] = t[e];\r\n            r.setSegmentIndex(f.parseInt(rr.decodeBase900toBase10(n, rr.NUMBER_OF_SEQUENCE_CODEWORDS)));\r\n            let i = new p;\r\n            e = rr.textCompaction(t, e, i), r.setFileId(i.toString());\r\n            let s = -1;\r\n            for (t[e] === rr.BEGIN_MACRO_PDF417_OPTIONAL_FIELD && (s = e + 1); e < t[0];) switch (t[e]) {\r\n                case rr.BEGIN_MACRO_PDF417_OPTIONAL_FIELD:\r\n                    switch (t[++e]) {\r\n                        case rr.MACRO_PDF417_OPTIONAL_FIELD_FILE_NAME:\r\n                            let n = new p;\r\n                            e = rr.textCompaction(t, e + 1, n), r.setFileName(n.toString());\r\n                            break;\r\n                        case rr.MACRO_PDF417_OPTIONAL_FIELD_SENDER:\r\n                            let i = new p;\r\n                            e = rr.textCompaction(t, e + 1, i), r.setSender(i.toString());\r\n                            break;\r\n                        case rr.MACRO_PDF417_OPTIONAL_FIELD_ADDRESSEE:\r\n                            let s = new p;\r\n                            e = rr.textCompaction(t, e + 1, s), r.setAddressee(s.toString());\r\n                            break;\r\n                        case rr.MACRO_PDF417_OPTIONAL_FIELD_SEGMENT_COUNT:\r\n                            let o = new p;\r\n                            e = rr.numericCompaction(t, e + 1, o), r.setSegmentCount(f.parseInt(o.toString()));\r\n                            break;\r\n                        case rr.MACRO_PDF417_OPTIONAL_FIELD_TIME_STAMP:\r\n                            let a = new p;\r\n                            e = rr.numericCompaction(t, e + 1, a), r.setTimestamp(Ke.parseLong(a.toString()));\r\n                            break;\r\n                        case rr.MACRO_PDF417_OPTIONAL_FIELD_CHECKSUM:\r\n                            let l = new p;\r\n                            e = rr.numericCompaction(t, e + 1, l), r.setChecksum(f.parseInt(l.toString()));\r\n                            break;\r\n                        case rr.MACRO_PDF417_OPTIONAL_FIELD_FILE_SIZE:\r\n                            let h = new p;\r\n                            e = rr.numericCompaction(t, e + 1, h), r.setFileSize(Ke.parseLong(h.toString()));\r\n                            break;\r\n                        default:\r\n                            throw E.getFormatInstance()\r\n                    }\r\n                    break;\r\n                case rr.MACRO_PDF417_TERMINATOR:\r\n                    e++, r.setLastSegment(!0);\r\n                    break;\r\n                default:\r\n                    throw E.getFormatInstance()\r\n            }\r\n            if (-1 !== s) {\r\n                let n = e - s;\r\n                r.isLastSegment() && n--, r.setOptionalData(g.copyOfRange(t, s, s + n))\r\n            }\r\n            return e\r\n        }\r\n        static textCompaction(t, e, r) {\r\n            let n = new Int32Array(2 * (t[0] - e)),\r\n                    i = new Int32Array(2 * (t[0] - e)),\r\n                    s = 0,\r\n                    o = !1;\r\n            for (; e < t[0] && !o;) {\r\n                let r = t[e++];\r\n                if (r < rr.TEXT_COMPACTION_MODE_LATCH) n[s] = r / 30, n[s + 1] = r % 30, s += 2;\r\n                else switch (r) {\r\n                    case rr.TEXT_COMPACTION_MODE_LATCH:\r\n                        n[s++] = rr.TEXT_COMPACTION_MODE_LATCH;\r\n                        break;\r\n                    case rr.BYTE_COMPACTION_MODE_LATCH:\r\n                    case rr.BYTE_COMPACTION_MODE_LATCH_6:\r\n                    case rr.NUMERIC_COMPACTION_MODE_LATCH:\r\n                    case rr.BEGIN_MACRO_PDF417_CONTROL_BLOCK:\r\n                    case rr.BEGIN_MACRO_PDF417_OPTIONAL_FIELD:\r\n                    case rr.MACRO_PDF417_TERMINATOR:\r\n                        e--, o = !0;\r\n                        break;\r\n                    case rr.MODE_SHIFT_TO_BYTE_COMPACTION_MODE:\r\n                        n[s] = rr.MODE_SHIFT_TO_BYTE_COMPACTION_MODE, r = t[e++], i[s] = r, s++\r\n                }\r\n            }\r\n            return rr.decodeTextCompaction(n, i, s, r), e\r\n        }\r\n        static decodeTextCompaction(t, e, r, n) {\r\n            let i = X.ALPHA,\r\n                    s = X.ALPHA,\r\n                    o = 0;\r\n            for (; o < r;) {\r\n                let r = t[o],\r\n                        a = \"\";\r\n                switch (i) {\r\n                    case X.ALPHA:\r\n                        if (r < 26) a = String.fromCharCode(65 + r);\r\n                        else switch (r) {\r\n                            case 26:\r\n                                a = \" \";\r\n                                break;\r\n                            case rr.LL:\r\n                                i = X.LOWER;\r\n                                break;\r\n                            case rr.ML:\r\n                                i = X.MIXED;\r\n                                break;\r\n                            case rr.PS:\r\n                                s = i, i = X.PUNCT_SHIFT;\r\n                                break;\r\n                            case rr.MODE_SHIFT_TO_BYTE_COMPACTION_MODE:\r\n                                n.append(e[o]);\r\n                                break;\r\n                            case rr.TEXT_COMPACTION_MODE_LATCH:\r\n                                i = X.ALPHA\r\n                        }\r\n                        break;\r\n                    case X.LOWER:\r\n                        if (r < 26) a = String.fromCharCode(97 + r);\r\n                        else switch (r) {\r\n                            case 26:\r\n                                a = \" \";\r\n                                break;\r\n                            case rr.AS:\r\n                                s = i, i = X.ALPHA_SHIFT;\r\n                                break;\r\n                            case rr.ML:\r\n                                i = X.MIXED;\r\n                                break;\r\n                            case rr.PS:\r\n                                s = i, i = X.PUNCT_SHIFT;\r\n                                break;\r\n                            case rr.MODE_SHIFT_TO_BYTE_COMPACTION_MODE:\r\n                                n.append(e[o]);\r\n                                break;\r\n                            case rr.TEXT_COMPACTION_MODE_LATCH:\r\n                                i = X.ALPHA\r\n                        }\r\n                        break;\r\n                    case X.MIXED:\r\n                        if (r < rr.PL) a = rr.MIXED_CHARS[r];\r\n                        else switch (r) {\r\n                            case rr.PL:\r\n                                i = X.PUNCT;\r\n                                break;\r\n                            case 26:\r\n                                a = \" \";\r\n                                break;\r\n                            case rr.LL:\r\n                                i = X.LOWER;\r\n                                break;\r\n                            case rr.AL:\r\n                                i = X.ALPHA;\r\n                                break;\r\n                            case rr.PS:\r\n                                s = i, i = X.PUNCT_SHIFT;\r\n                                break;\r\n                            case rr.MODE_SHIFT_TO_BYTE_COMPACTION_MODE:\r\n                                n.append(e[o]);\r\n                                break;\r\n                            case rr.TEXT_COMPACTION_MODE_LATCH:\r\n                                i = X.ALPHA\r\n                        }\r\n                        break;\r\n                    case X.PUNCT:\r\n                        if (r < rr.PAL) a = rr.PUNCT_CHARS[r];\r\n                        else switch (r) {\r\n                            case rr.PAL:\r\n                                i = X.ALPHA;\r\n                                break;\r\n                            case rr.MODE_SHIFT_TO_BYTE_COMPACTION_MODE:\r\n                                n.append(e[o]);\r\n                                break;\r\n                            case rr.TEXT_COMPACTION_MODE_LATCH:\r\n                                i = X.ALPHA\r\n                        }\r\n                        break;\r\n                    case X.ALPHA_SHIFT:\r\n                        if (i = s, r < 26) a = String.fromCharCode(65 + r);\r\n                        else switch (r) {\r\n                            case 26:\r\n                                a = \" \";\r\n                                break;\r\n                            case rr.TEXT_COMPACTION_MODE_LATCH:\r\n                                i = X.ALPHA\r\n                        }\r\n                        break;\r\n                    case X.PUNCT_SHIFT:\r\n                        if (i = s, r < rr.PAL) a = rr.PUNCT_CHARS[r];\r\n                        else switch (r) {\r\n                            case rr.PAL:\r\n                                i = X.ALPHA;\r\n                                break;\r\n                            case rr.MODE_SHIFT_TO_BYTE_COMPACTION_MODE:\r\n                                n.append(e[o]);\r\n                                break;\r\n                            case rr.TEXT_COMPACTION_MODE_LATCH:\r\n                                i = X.ALPHA\r\n                        }\r\n                }\r\n                \"\" !== a && n.append(a), o++\r\n            }\r\n        }\r\n        static byteCompaction(t, e, r, n, i) {\r\n            let s = new Je,\r\n                    o = 0,\r\n                    a = 0,\r\n                    l = !1;\r\n            switch (t) {\r\n                case rr.BYTE_COMPACTION_MODE_LATCH:\r\n                    let r = new Int32Array(6),\r\n                            i = e[n++];\r\n                    for (; n < e[0] && !l;) switch (r[o++] = i, a = 900 * a + i, i = e[n++]) {\r\n                        case rr.TEXT_COMPACTION_MODE_LATCH:\r\n                        case rr.BYTE_COMPACTION_MODE_LATCH:\r\n                        case rr.NUMERIC_COMPACTION_MODE_LATCH:\r\n                        case rr.BYTE_COMPACTION_MODE_LATCH_6:\r\n                        case rr.BEGIN_MACRO_PDF417_CONTROL_BLOCK:\r\n                        case rr.BEGIN_MACRO_PDF417_OPTIONAL_FIELD:\r\n                        case rr.MACRO_PDF417_TERMINATOR:\r\n                            n--, l = !0;\r\n                            break;\r\n                        default:\r\n                            if (o % 5 == 0 && o > 0) {\r\n                                for (let t = 0; t < 6; ++t) s.write(Number(er(a) >> er(8 * (5 - t))));\r\n                                a = 0, o = 0\r\n                            }\r\n                    }\r\n                    n === e[0] && i < rr.TEXT_COMPACTION_MODE_LATCH && (r[o++] = i);\r\n                    for (let t = 0; t < o; t++) s.write(r[t]);\r\n                    break;\r\n                case rr.BYTE_COMPACTION_MODE_LATCH_6:\r\n                    for (; n < e[0] && !l;) {\r\n                        let t = e[n++];\r\n                        if (t < rr.TEXT_COMPACTION_MODE_LATCH) o++, a = 900 * a + t;\r\n                        else switch (t) {\r\n                            case rr.TEXT_COMPACTION_MODE_LATCH:\r\n                            case rr.BYTE_COMPACTION_MODE_LATCH:\r\n                            case rr.NUMERIC_COMPACTION_MODE_LATCH:\r\n                            case rr.BYTE_COMPACTION_MODE_LATCH_6:\r\n                            case rr.BEGIN_MACRO_PDF417_CONTROL_BLOCK:\r\n                            case rr.BEGIN_MACRO_PDF417_OPTIONAL_FIELD:\r\n                            case rr.MACRO_PDF417_TERMINATOR:\r\n                                n--, l = !0\r\n                        }\r\n                        if (o % 5 == 0 && o > 0) {\r\n                            for (let t = 0; t < 6; ++t) s.write(Number(er(a) >> er(8 * (5 - t))));\r\n                            a = 0, o = 0\r\n                        }\r\n                    }\r\n            }\r\n            return i.append(I.decode(s.toByteArray(), r)), n\r\n        }\r\n        static numericCompaction(t, e, r) {\r\n            let n = 0,\r\n                    i = !1,\r\n                    s = new Int32Array(rr.MAX_NUMERIC_CODEWORDS);\r\n            for (; e < t[0] && !i;) {\r\n                let o = t[e++];\r\n                if (e === t[0] && (i = !0), o < rr.TEXT_COMPACTION_MODE_LATCH) s[n] = o, n++;\r\n                else switch (o) {\r\n                    case rr.TEXT_COMPACTION_MODE_LATCH:\r\n                    case rr.BYTE_COMPACTION_MODE_LATCH:\r\n                    case rr.BYTE_COMPACTION_MODE_LATCH_6:\r\n                    case rr.BEGIN_MACRO_PDF417_CONTROL_BLOCK:\r\n                    case rr.BEGIN_MACRO_PDF417_OPTIONAL_FIELD:\r\n                    case rr.MACRO_PDF417_TERMINATOR:\r\n                        e--, i = !0\r\n                }(n % rr.MAX_NUMERIC_CODEWORDS == 0 || o === rr.NUMERIC_COMPACTION_MODE_LATCH || i) && n > 0 && (r.append(rr.decodeBase900toBase10(s, n)), n = 0)\r\n            }\r\n            return e\r\n        }\r\n        static decodeBase900toBase10(t, e) {\r\n            let r = er(0);\r\n            for (let n = 0; n < e; n++) r += rr.EXP900[e - n - 1] * er(t[n]);\r\n            let n = r.toString();\r\n            if (\"1\" !== n.charAt(0)) throw new E;\r\n            return n.substring(1)\r\n        }\r\n    }\r\n    rr.TEXT_COMPACTION_MODE_LATCH = 900, rr.BYTE_COMPACTION_MODE_LATCH = 901, rr.NUMERIC_COMPACTION_MODE_LATCH = 902, rr.BYTE_COMPACTION_MODE_LATCH_6 = 924, rr.ECI_USER_DEFINED = 925, rr.ECI_GENERAL_PURPOSE = 926, rr.ECI_CHARSET = 927, rr.BEGIN_MACRO_PDF417_CONTROL_BLOCK = 928, rr.BEGIN_MACRO_PDF417_OPTIONAL_FIELD = 923, rr.MACRO_PDF417_TERMINATOR = 922, rr.MODE_SHIFT_TO_BYTE_COMPACTION_MODE = 913, rr.MAX_NUMERIC_CODEWORDS = 15, rr.MACRO_PDF417_OPTIONAL_FIELD_FILE_NAME = 0, rr.MACRO_PDF417_OPTIONAL_FIELD_SEGMENT_COUNT = 1, rr.MACRO_PDF417_OPTIONAL_FIELD_TIME_STAMP = 2, rr.MACRO_PDF417_OPTIONAL_FIELD_SENDER = 3, rr.MACRO_PDF417_OPTIONAL_FIELD_ADDRESSEE = 4, rr.MACRO_PDF417_OPTIONAL_FIELD_FILE_SIZE = 5, rr.MACRO_PDF417_OPTIONAL_FIELD_CHECKSUM = 6, rr.PL = 25, rr.LL = 27, rr.AS = 27, rr.ML = 28, rr.AL = 28, rr.PS = 29, rr.PAL = 29, rr.PUNCT_CHARS = \";<>@[\\\\]_`~!\\r\\t,:\\n-.$/\\\"|*()?{}'\", rr.MIXED_CHARS = \"0123456789&\\r\\t,:#-.$/+%*=^\", rr.EXP900 = $e() ? function() {\r\n        let t = [];\r\n        t[0] = er(1);\r\n        let e = er(900);\r\n        t[1] = e;\r\n        for (let r = 2; r < 16; r++) t[r] = t[r - 1] * e;\r\n        return t\r\n    }() : [], rr.NUMBER_OF_SEQUENCE_CODEWORDS = 2;\r\n    class nr {\r\n        constructor() {}\r\n        static decode(t, e, r, n, i, s, o) {\r\n            let a, l = new xe(t, e, r, n, i),\r\n                    h = null,\r\n                    c = null;\r\n            for (let r = !0;; r = !1) {\r\n                if (null != e && (h = nr.getRowIndicatorColumn(t, l, e, !0, s, o)), null != n && (c = nr.getRowIndicatorColumn(t, l, n, !1, s, o)), null == (a = nr.merge(h, c))) throw R.getNotFoundInstance();\r\n                let i = a.getBoundingBox();\r\n                if (!r || null == i || !(i.getMinY() < l.getMinY() || i.getMaxY() > l.getMaxY())) break;\r\n                l = i\r\n            }\r\n            a.setBoundingBox(l);\r\n            let u = a.getBarcodeColumnCount() + 1;\r\n            a.setDetectionResultColumn(0, h), a.setDetectionResultColumn(u, c);\r\n            let d = null != h;\r\n            for (let e = 1; e <= u; e++) {\r\n                let r, n = d ? e : u - e;\r\n                if (void 0 !== a.getDetectionResultColumn(n)) continue;\r\n                r = 0 === n || n === u ? new Xe(l, 0 === n) : new He(l), a.setDetectionResultColumn(n, r);\r\n                let i = -1,\r\n                        h = i;\r\n                for (let e = l.getMinY(); e <= l.getMaxY(); e++) {\r\n                    if ((i = nr.getStartColumn(a, n, e, d)) < 0 || i > l.getMaxX()) {\r\n                        if (-1 === h) continue;\r\n                        i = h\r\n                    }\r\n                    let c = nr.detectCodeword(t, l.getMinX(), l.getMaxX(), d, i, e, s, o);\r\n                    null != c && (r.setCodeword(e, c), h = i, s = Math.min(s, c.getWidth()), o = Math.max(o, c.getWidth()))\r\n                }\r\n            }\r\n            return nr.createDecoderResult(a)\r\n        }\r\n        static merge(t, e) {\r\n            if (null == t && null == e) return null;\r\n            let r = nr.getBarcodeMetadata(t, e);\r\n            if (null == r) return null;\r\n            let n = xe.merge(nr.adjustBoundingBox(t), nr.adjustBoundingBox(e));\r\n            return new We(r, n)\r\n        }\r\n        static adjustBoundingBox(t) {\r\n            if (null == t) return null;\r\n            let e = t.getRowHeights();\r\n            if (null == e) return null;\r\n            let r = nr.getMax(e),\r\n                    n = 0;\r\n            for (let t of e)\r\n                if (n += r - t, t > 0) break;\r\n            let i = t.getCodewords();\r\n            for (let t = 0; n > 0 && null == i[t]; t++) n--;\r\n            let s = 0;\r\n            for (let t = e.length - 1; t >= 0 && (s += r - e[t], !(e[t] > 0)); t--);\r\n            for (let t = i.length - 1; s > 0 && null == i[t]; t--) s--;\r\n            return t.getBoundingBox().addMissingRows(n, s, t.isLeft())\r\n        }\r\n        static getMax(t) {\r\n            let e = -1;\r\n            for (let r of t) e = Math.max(e, r);\r\n            return e\r\n        }\r\n        static getBarcodeMetadata(t, e) {\r\n            let r, n;\r\n            return null == t || null == (r = t.getBarcodeMetadata()) ? null == e ? null : e.getBarcodeMetadata() : null == e || null == (n = e.getBarcodeMetadata()) ? r : r.getColumnCount() !== n.getColumnCount() && r.getErrorCorrectionLevel() !== n.getErrorCorrectionLevel() && r.getRowCount() !== n.getRowCount() ? null : r\r\n        }\r\n        static getRowIndicatorColumn(t, e, r, n, i, s) {\r\n            let o = new Xe(e, n);\r\n            for (let a = 0; a < 2; a++) {\r\n                let l = 0 === a ? 1 : -1,\r\n                        h = Math.trunc(Math.trunc(r.getX()));\r\n                for (let a = Math.trunc(Math.trunc(r.getY())); a <= e.getMaxY() && a >= e.getMinY(); a += l) {\r\n                    let e = nr.detectCodeword(t, 0, t.getWidth(), n, h, a, i, s);\r\n                    null != e && (o.setCodeword(a, e), h = n ? e.getStartX() : e.getEndX())\r\n                }\r\n            }\r\n            return o\r\n        }\r\n        static adjustCodewordCount(t, e) {\r\n            let r = e[0][1],\r\n                    n = r.getValue(),\r\n                    i = t.getBarcodeColumnCount() * t.getBarcodeRowCount() - nr.getNumberOfECCodeWords(t.getBarcodeECLevel());\r\n            if (0 === n.length) {\r\n                if (i < 1 || i > be.MAX_CODEWORDS_IN_BARCODE) throw R.getNotFoundInstance();\r\n                r.setValue(i)\r\n            } else n[0] !== i && r.setValue(i)\r\n        }\r\n        static createDecoderResult(t) {\r\n            let e = nr.createBarcodeMatrix(t);\r\n            nr.adjustCodewordCount(t, e);\r\n            let r = new Array,\r\n                    n = new Int32Array(t.getBarcodeRowCount() * t.getBarcodeColumnCount()),\r\n                    i = [],\r\n                    s = new Array;\r\n            for (let o = 0; o < t.getBarcodeRowCount(); o++)\r\n                for (let a = 0; a < t.getBarcodeColumnCount(); a++) {\r\n                    let l = e[o][a + 1].getValue(),\r\n                            h = o * t.getBarcodeColumnCount() + a;\r\n                    0 === l.length ? r.push(h) : 1 === l.length ? n[h] = l[0] : (s.push(h), i.push(l))\r\n                }\r\n            let o = new Array(i.length);\r\n            for (let t = 0; t < o.length; t++) o[t] = i[t];\r\n            return nr.createDecoderResultFromAmbiguousValues(t.getBarcodeECLevel(), n, be.toIntArray(r), be.toIntArray(s), o)\r\n        }\r\n        static createDecoderResultFromAmbiguousValues(t, e, r, n, i) {\r\n            let s = new Int32Array(n.length),\r\n                    o = 100;\r\n            for (; o-- > 0;) {\r\n                for (let t = 0; t < s.length; t++) e[n[t]] = i[t][s[t]];\r\n                try {\r\n                    return nr.decodeCodewords(e, t, r)\r\n                } catch (t) {\r\n                    if (!(t instanceof l)) throw t\r\n                }\r\n                if (0 === s.length) throw l.getChecksumInstance();\r\n                for (let t = 0; t < s.length; t++) {\r\n                    if (s[t] < i[t].length - 1) {\r\n                        s[t]++;\r\n                        break\r\n                    }\r\n                    if (s[t] = 0, t === s.length - 1) throw l.getChecksumInstance()\r\n                }\r\n            }\r\n            throw l.getChecksumInstance()\r\n        }\r\n        static createBarcodeMatrix(t) {\r\n            let e = Array.from({\r\n                                   length: t.getBarcodeRowCount()\r\n                               }, () => new Array(t.getBarcodeColumnCount() + 2));\r\n            for (let t = 0; t < e.length; t++)\r\n                for (let r = 0; r < e[t].length; r++) e[t][r] = new Ge;\r\n            let r = 0;\r\n            for (let n of t.getDetectionResultColumns()) {\r\n                if (null != n)\r\n                    for (let t of n.getCodewords())\r\n                        if (null != t) {\r\n                            let n = t.getRowNumber();\r\n                            if (n >= 0) {\r\n                                if (n >= e.length) continue;\r\n                                e[n][r].setValue(t.getValue())\r\n                            }\r\n                        } r++\r\n            }\r\n            return e\r\n        }\r\n        static isValidBarcodeColumn(t, e) {\r\n            return e >= 0 && e <= t.getBarcodeColumnCount() + 1\r\n        }\r\n        static getStartColumn(t, e, r, n) {\r\n            let i = n ? 1 : -1,\r\n                    s = null;\r\n            if (nr.isValidBarcodeColumn(t, e - i) && (s = t.getDetectionResultColumn(e - i).getCodeword(r)), null != s) return n ? s.getEndX() : s.getStartX();\r\n            if (null != (s = t.getDetectionResultColumn(e).getCodewordNearby(r))) return n ? s.getStartX() : s.getEndX();\r\n            if (nr.isValidBarcodeColumn(t, e - i) && (s = t.getDetectionResultColumn(e - i).getCodewordNearby(r)), null != s) return n ? s.getEndX() : s.getStartX();\r\n            let o = 0;\r\n            for (; nr.isValidBarcodeColumn(t, e - i);) {\r\n                e -= i;\r\n                for (let r of t.getDetectionResultColumn(e).getCodewords())\r\n                    if (null != r) return (n ? r.getEndX() : r.getStartX()) + i * o * (r.getEndX() - r.getStartX());\r\n                o++\r\n            }\r\n            return n ? t.getBoundingBox().getMinX() : t.getBoundingBox().getMaxX()\r\n        }\r\n        static detectCodeword(t, e, r, n, i, s, o, a) {\r\n            i = nr.adjustCodewordStartColumn(t, e, r, n, i, s);\r\n            let l, h = nr.getModuleBitCount(t, e, r, n, i, s);\r\n            if (null == h) return null;\r\n            let c = tt.sum(h);\r\n            if (n) l = i + c;\r\n            else {\r\n                for (let t = 0; t < h.length / 2; t++) {\r\n                    let e = h[t];\r\n                    h[t] = h[h.length - 1 - t], h[h.length - 1 - t] = e\r\n                }\r\n                i = (l = i) - c\r\n            }\r\n            if (!nr.checkCodewordSkew(c, o, a)) return null;\r\n            let u = Ye.getDecodedValue(h),\r\n                    d = be.getCodeword(u);\r\n            return -1 === d ? null : new ze(i, l, nr.getCodewordBucketNumber(u), d)\r\n        }\r\n        static getModuleBitCount(t, e, r, n, i, s) {\r\n            let o = i,\r\n                    a = new Int32Array(8),\r\n                    l = 0,\r\n                    h = n ? 1 : -1,\r\n                    c = n;\r\n            for (;\r\n                    (n ? o < r : o >= e) && l < a.length;) t.get(o, s) === c ? (a[l]++, o += h) : (l++, c = !c);\r\n            return l === a.length || o === (n ? r : e) && l === a.length - 1 ? a : null\r\n        }\r\n        static getNumberOfECCodeWords(t) {\r\n            return 2 << t\r\n        }\r\n        static adjustCodewordStartColumn(t, e, r, n, i, s) {\r\n            let o = i,\r\n                    a = n ? -1 : 1;\r\n            for (let l = 0; l < 2; l++) {\r\n                for (;\r\n                        (n ? o >= e : o < r) && n === t.get(o, s);) {\r\n                    if (Math.abs(i - o) > nr.CODEWORD_SKEW_SIZE) return i;\r\n                    o += a\r\n                }\r\n                a = -a, n = !n\r\n            }\r\n            return o\r\n        }\r\n        static checkCodewordSkew(t, e, r) {\r\n            return e - nr.CODEWORD_SKEW_SIZE <= t && t <= r + nr.CODEWORD_SKEW_SIZE\r\n        }\r\n        static decodeCodewords(t, e, r) {\r\n            if (0 === t.length) throw E.getFormatInstance();\r\n            let n = 1 << e + 1,\r\n                    i = nr.correctErrors(t, r, n);\r\n            nr.verifyCodewordCount(t, n);\r\n            let s = rr.decode(t, \"\" + e);\r\n            return s.setErrorsCorrected(i), s.setErasures(r.length), s\r\n        }\r\n        static correctErrors(t, e, r) {\r\n            if (null != e && e.length > r / 2 + nr.MAX_ERRORS || r < 0 || r > nr.MAX_EC_CODEWORDS) throw l.getChecksumInstance();\r\n            return nr.errorCorrection.decode(t, r, e)\r\n        }\r\n        static verifyCodewordCount(t, e) {\r\n            if (t.length < 4) throw E.getFormatInstance();\r\n            let r = t[0];\r\n            if (r > t.length) throw E.getFormatInstance();\r\n            if (0 === r) {\r\n                if (!(e < t.length)) throw E.getFormatInstance();\r\n                t[0] = t.length - e\r\n            }\r\n        }\r\n        static getBitCountForCodeword(t) {\r\n            let e = new Int32Array(8),\r\n                    r = 0,\r\n                    n = e.length - 1;\r\n            for (; !((1 & t) !== r && (r = 1 & t, --n < 0));) e[n]++, t >>= 1;\r\n            return e\r\n        }\r\n        static getCodewordBucketNumber(t) {\r\n            return t instanceof Int32Array ? this.getCodewordBucketNumber_Int32Array(t) : this.getCodewordBucketNumber_number(t)\r\n        }\r\n        static getCodewordBucketNumber_number(t) {\r\n            return nr.getCodewordBucketNumber(nr.getBitCountForCodeword(t))\r\n        }\r\n        static getCodewordBucketNumber_Int32Array(t) {\r\n            return (t[0] - t[2] + t[4] - t[6] + 9) % 9\r\n        }\r\n        static toString(t) {\r\n            let e = new Ue;\r\n            for (let r = 0; r < t.length; r++) {\r\n                e.format(\"Row %2d: \", r);\r\n                for (let n = 0; n < t[r].length; n++) {\r\n                    let i = t[r][n];\r\n                    0 === i.getValue().length ? e.format(\"        \", null) : e.format(\"%4d(%2d)\", i.getValue()[0], i.getConfidence(i.getValue()[0]))\r\n                }\r\n                e.format(\"%n\")\r\n            }\r\n            return e.toString()\r\n        }\r\n    }\r\n    nr.CODEWORD_SKEW_SIZE = 2, nr.MAX_ERRORS = 3, nr.MAX_EC_CODEWORDS = 512, nr.errorCorrection = new ke;\r\n    class ir {\r\n        decode(t, e = null) {\r\n            let r = ir.decode(t, e, !1);\r\n            if (null == r || 0 === r.length || null == r[0]) throw R.getNotFoundInstance();\r\n            return r[0]\r\n        }\r\n        decodeMultiple(t, e = null) {\r\n            try {\r\n                return ir.decode(t, e, !0)\r\n            } catch (t) {\r\n                if (t instanceof E || t instanceof l) throw R.getNotFoundInstance();\r\n                throw t\r\n            }\r\n        }\r\n        static decode(t, e, r) {\r\n            const n = new Array,\r\n                    i = Pe.detectMultiple(t, e, r);\r\n            for (const t of i.getPoints()) {\r\n                const e = nr.decode(i.getBits(), t[4], t[5], t[6], t[7], ir.getMinCodewordWidth(t), ir.getMaxCodewordWidth(t)),\r\n                        r = new F(e.getText(), e.getRawBytes(), void 0, t, k.PDF_417);\r\n                r.putMetadata(W.ERROR_CORRECTION_LEVEL, e.getECLevel());\r\n                const s = e.getOther();\r\n                null != s && r.putMetadata(W.PDF417_EXTRA_METADATA, s), n.push(r)\r\n            }\r\n            return n.map(t => t)\r\n        }\r\n        static getMaxWidth(t, e) {\r\n            return null == t || null == e ? 0 : Math.trunc(Math.abs(t.getX() - e.getX()))\r\n        }\r\n        static getMinWidth(t, e) {\r\n            return null == t || null == e ? f.MAX_VALUE : Math.trunc(Math.abs(t.getX() - e.getX()))\r\n        }\r\n        static getMaxCodewordWidth(t) {\r\n            return Math.floor(Math.max(Math.max(ir.getMaxWidth(t[0], t[4]), ir.getMaxWidth(t[6], t[2]) * be.MODULES_IN_CODEWORD / be.MODULES_IN_STOP_PATTERN), Math.max(ir.getMaxWidth(t[1], t[5]), ir.getMaxWidth(t[7], t[3]) * be.MODULES_IN_CODEWORD / be.MODULES_IN_STOP_PATTERN)))\r\n        }\r\n        static getMinCodewordWidth(t) {\r\n            return Math.floor(Math.min(Math.min(ir.getMinWidth(t[0], t[4]), ir.getMinWidth(t[6], t[2]) * be.MODULES_IN_CODEWORD / be.MODULES_IN_STOP_PATTERN), Math.min(ir.getMinWidth(t[1], t[5]), ir.getMinWidth(t[7], t[3]) * be.MODULES_IN_CODEWORD / be.MODULES_IN_STOP_PATTERN)))\r\n        }\r\n        reset() {}\r\n    }\r\n    class sr extends i {}\r\n    sr.kind = \"ReaderException\";\r\n    class or {\r\n        constructor(t, e) {\r\n            this.verbose = !0 === t, e && this.setHints(e)\r\n        }\r\n        decode(t, e) {\r\n            return e && this.setHints(e), this.decodeInternal(t)\r\n        }\r\n        decodeWithState(t) {\r\n            return null !== this.readers && void 0 !== this.readers || this.setHints(null), this.decodeInternal(t)\r\n        }\r\n        setHints(t) {\r\n            this.hints = t;\r\n            const e = null != t && void 0 !== t.get(C.TRY_HARDER),\r\n                    r = null == t ? null : t.get(C.POSSIBLE_FORMATS),\r\n                    n = new Array;\r\n            if (null != r) {\r\n                const i = r.some(t => t === k.UPC_A || t === k.UPC_E || t === k.EAN_13 || t === k.EAN_8 || t === k.CODABAR || t === k.CODE_39 || t === k.CODE_93 || t === k.CODE_128 || t === k.ITF || t === k.RSS_14 || t === k.RSS_EXPANDED);\r\n                i && !e && n.push(new ee(t, this.verbose)), r.includes(k.QR_CODE) && n.push(new Me), r.includes(k.DATA_MATRIX) && n.push(new ue), r.includes(k.AZTEC) && n.push(new dt), r.includes(k.PDF_417) && n.push(new ir), i && e && n.push(new ee(t, this.verbose))\r\n            }\r\n            0 === n.length && (e || n.push(new ee(t, this.verbose)), n.push(new Me), n.push(new ue), n.push(new dt), n.push(new ir), e && n.push(new ee(t, this.verbose))), this.readers = n\r\n        }\r\n        reset() {\r\n            if (null !== this.readers)\r\n                for (const t of this.readers) t.reset()\r\n        }\r\n        decodeInternal(t) {\r\n            if (null === this.readers) throw new sr(\"No readers where selected, nothing can be read.\");\r\n            for (const e of this.readers) try {\r\n                return e.decode(t, this.hints)\r\n            } catch (t) {\r\n                if (t instanceof sr) continue\r\n            }\r\n            throw new R(\"No MultiFormat Readers were able to detect the code.\")\r\n        }\r\n    }\r\n    var ar;\r\n    ! function(t) {\r\n        t[t.ERROR_CORRECTION = 0] = \"ERROR_CORRECTION\", t[t.CHARACTER_SET = 1] = \"CHARACTER_SET\", t[t.DATA_MATRIX_SHAPE = 2] = \"DATA_MATRIX_SHAPE\", t[t.MIN_SIZE = 3] = \"MIN_SIZE\", t[t.MAX_SIZE = 4] = \"MAX_SIZE\", t[t.MARGIN = 5] = \"MARGIN\", t[t.PDF417_COMPACT = 6] = \"PDF417_COMPACT\", t[t.PDF417_COMPACTION = 7] = \"PDF417_COMPACTION\", t[t.PDF417_DIMENSIONS = 8] = \"PDF417_DIMENSIONS\", t[t.AZTEC_LAYERS = 9] = \"AZTEC_LAYERS\", t[t.QR_VERSION = 10] = \"QR_VERSION\"\r\n    }(ar || (ar = {}));\r\n    var lr = ar;\r\n    class hr {\r\n        constructor(t) {\r\n            this.field = t, this.cachedGenerators = [], this.cachedGenerators.push(new Z(t, Int32Array.from([1])))\r\n        }\r\n        buildGenerator(t) {\r\n            const e = this.cachedGenerators;\r\n            if (t >= e.length) {\r\n                let r = e[e.length - 1];\r\n                const n = this.field;\r\n                for (let i = e.length; i <= t; i++) {\r\n                    const t = r.multiply(new Z(n, Int32Array.from([1, n.exp(i - 1 + n.getGeneratorBase())])));\r\n                    e.push(t), r = t\r\n                }\r\n            }\r\n            return e[t]\r\n        }\r\n        encode(t, e) {\r\n            if (0 === e) throw new o(\"No error correction bytes\");\r\n            const r = t.length - e;\r\n            if (r <= 0) throw new o(\"No data bytes provided\");\r\n            const n = this.buildGenerator(e),\r\n                    i = new Int32Array(r);\r\n            c.arraycopy(t, 0, i, 0, r);\r\n            let s = new Z(this.field, i);\r\n            const a = (s = s.multiplyByMonomial(e, 1)).divide(n)[1].getCoefficients(),\r\n                    l = e - a.length;\r\n            for (let e = 0; e < l; e++) t[r + e] = 0;\r\n            c.arraycopy(a, 0, t, r + l, a.length)\r\n        }\r\n    }\r\n    class cr {\r\n        constructor() {}\r\n        static applyMaskPenaltyRule1(t) {\r\n            return cr.applyMaskPenaltyRule1Internal(t, !0) + cr.applyMaskPenaltyRule1Internal(t, !1)\r\n        }\r\n        static applyMaskPenaltyRule2(t) {\r\n            let e = 0;\r\n            const r = t.getArray(),\r\n                    n = t.getWidth(),\r\n                    i = t.getHeight();\r\n            for (let t = 0; t < i - 1; t++) {\r\n                const i = r[t];\r\n                for (let s = 0; s < n - 1; s++) {\r\n                    const n = i[s];\r\n                    n === i[s + 1] && n === r[t + 1][s] && n === r[t + 1][s + 1] && e++\r\n                }\r\n            }\r\n            return cr.N2 * e\r\n        }\r\n        static applyMaskPenaltyRule3(t) {\r\n            let e = 0;\r\n            const r = t.getArray(),\r\n                    n = t.getWidth(),\r\n                    i = t.getHeight();\r\n            for (let t = 0; t < i; t++)\r\n                for (let s = 0; s < n; s++) {\r\n                    const o = r[t];\r\n                    s + 6 < n && 1 === o[s] && 0 === o[s + 1] && 1 === o[s + 2] && 1 === o[s + 3] && 1 === o[s + 4] && 0 === o[s + 5] && 1 === o[s + 6] && (cr.isWhiteHorizontal(o, s - 4, s) || cr.isWhiteHorizontal(o, s + 7, s + 11)) && e++, t + 6 < i && 1 === r[t][s] && 0 === r[t + 1][s] && 1 === r[t + 2][s] && 1 === r[t + 3][s] && 1 === r[t + 4][s] && 0 === r[t + 5][s] && 1 === r[t + 6][s] && (cr.isWhiteVertical(r, s, t - 4, t) || cr.isWhiteVertical(r, s, t + 7, t + 11)) && e++\r\n                }\r\n            return e * cr.N3\r\n        }\r\n        static isWhiteHorizontal(t, e, r) {\r\n            e = Math.max(e, 0), r = Math.min(r, t.length);\r\n            for (let n = e; n < r; n++)\r\n                if (1 === t[n]) return !1;\r\n            return !0\r\n        }\r\n        static isWhiteVertical(t, e, r, n) {\r\n            r = Math.max(r, 0), n = Math.min(n, t.length);\r\n            for (let i = r; i < n; i++)\r\n                if (1 === t[i][e]) return !1;\r\n            return !0\r\n        }\r\n        static applyMaskPenaltyRule4(t) {\r\n            let e = 0;\r\n            const r = t.getArray(),\r\n                    n = t.getWidth(),\r\n                    i = t.getHeight();\r\n            for (let t = 0; t < i; t++) {\r\n                const i = r[t];\r\n                for (let t = 0; t < n; t++) 1 === i[t] && e++\r\n            }\r\n            const s = t.getHeight() * t.getWidth();\r\n            return Math.floor(10 * Math.abs(2 * e - s) / s) * cr.N4\r\n        }\r\n        static getDataMaskBit(t, e, r) {\r\n            let n, i;\r\n            switch (t) {\r\n                case 0:\r\n                    n = r + e & 1;\r\n                    break;\r\n                case 1:\r\n                    n = 1 & r;\r\n                    break;\r\n                case 2:\r\n                    n = e % 3;\r\n                    break;\r\n                case 3:\r\n                    n = (r + e) % 3;\r\n                    break;\r\n                case 4:\r\n                    n = Math.floor(r / 2) + Math.floor(e / 3) & 1;\r\n                    break;\r\n                case 5:\r\n                    n = (1 & (i = r * e)) + i % 3;\r\n                    break;\r\n                case 6:\r\n                    n = (1 & (i = r * e)) + i % 3 & 1;\r\n                    break;\r\n                case 7:\r\n                    n = (i = r * e) % 3 + (r + e & 1) & 1;\r\n                    break;\r\n                default:\r\n                    throw new o(\"Invalid mask pattern: \" + t)\r\n            }\r\n            return 0 === n\r\n        }\r\n        static applyMaskPenaltyRule1Internal(t, e) {\r\n            let r = 0;\r\n            const n = e ? t.getHeight() : t.getWidth(),\r\n                    i = e ? t.getWidth() : t.getHeight(),\r\n                    s = t.getArray();\r\n            for (let t = 0; t < n; t++) {\r\n                let n = 0,\r\n                        o = -1;\r\n                for (let a = 0; a < i; a++) {\r\n                    const i = e ? s[t][a] : s[a][t];\r\n                    i === o ? n++ : (n >= 5 && (r += cr.N1 + (n - 5)), n = 1, o = i)\r\n                }\r\n                n >= 5 && (r += cr.N1 + (n - 5))\r\n            }\r\n            return r\r\n        }\r\n    }\r\n    cr.N1 = 3, cr.N2 = 3, cr.N3 = 40, cr.N4 = 10;\r\n    class ur {\r\n        constructor(t, e) {\r\n            this.width = t, this.height = e;\r\n            const r = new Array(e);\r\n            for (let n = 0; n !== e; n++) r[n] = new Uint8Array(t);\r\n            this.bytes = r\r\n        }\r\n        getHeight() {\r\n            return this.height\r\n        }\r\n        getWidth() {\r\n            return this.width\r\n        }\r\n        get(t, e) {\r\n            return this.bytes[e][t]\r\n        }\r\n        getArray() {\r\n            return this.bytes\r\n        }\r\n        setNumber(t, e, r) {\r\n            this.bytes[e][t] = r\r\n        }\r\n        setBoolean(t, e, r) {\r\n            this.bytes[e][t] = r ? 1 : 0\r\n        }\r\n        clear(t) {\r\n            for (const e of this.bytes) g.fill(e, t)\r\n        }\r\n        equals(t) {\r\n            if (!(t instanceof ur)) return !1;\r\n            const e = t;\r\n            if (this.width !== e.width) return !1;\r\n            if (this.height !== e.height) return !1;\r\n            for (let t = 0, r = this.height; t < r; ++t) {\r\n                const r = this.bytes[t],\r\n                        n = e.bytes[t];\r\n                for (let t = 0, e = this.width; t < e; ++t)\r\n                    if (r[t] !== n[t]) return !1\r\n            }\r\n            return !0\r\n        }\r\n        toString() {\r\n            const t = new p;\r\n            for (let e = 0, r = this.height; e < r; ++e) {\r\n                const r = this.bytes[e];\r\n                for (let e = 0, n = this.width; e < n; ++e) switch (r[e]) {\r\n                    case 0:\r\n                        t.append(\" 0\");\r\n                        break;\r\n                    case 1:\r\n                        t.append(\" 1\");\r\n                        break;\r\n                    default:\r\n                        t.append(\"  \")\r\n                }\r\n                t.append(\"\\n\")\r\n            }\r\n            return t.toString()\r\n        }\r\n    }\r\n    class dr {\r\n        constructor() {\r\n            this.maskPattern = -1\r\n        }\r\n        getMode() {\r\n            return this.mode\r\n        }\r\n        getECLevel() {\r\n            return this.ecLevel\r\n        }\r\n        getVersion() {\r\n            return this.version\r\n        }\r\n        getMaskPattern() {\r\n            return this.maskPattern\r\n        }\r\n        getMatrix() {\r\n            return this.matrix\r\n        }\r\n        toString() {\r\n            const t = new p;\r\n            return t.append(\"<<\\n\"), t.append(\" mode: \"), t.append(this.mode ? this.mode.toString() : \"null\"), t.append(\"\\n ecLevel: \"), t.append(this.ecLevel ? this.ecLevel.toString() : \"null\"), t.append(\"\\n version: \"), t.append(this.version ? this.version.toString() : \"null\"), t.append(\"\\n maskPattern: \"), t.append(this.maskPattern.toString()), this.matrix ? (t.append(\"\\n matrix:\\n\"), t.append(this.matrix.toString())) : t.append(\"\\n matrix: null\\n\"), t.append(\">>\\n\"), t.toString()\r\n        }\r\n        setMode(t) {\r\n            this.mode = t\r\n        }\r\n        setECLevel(t) {\r\n            this.ecLevel = t\r\n        }\r\n        setVersion(t) {\r\n            this.version = t\r\n        }\r\n        setMaskPattern(t) {\r\n            this.maskPattern = t\r\n        }\r\n        setMatrix(t) {\r\n            this.matrix = t\r\n        }\r\n        static isValidMaskPattern(t) {\r\n            return t >= 0 && t < dr.NUM_MASK_PATTERNS\r\n        }\r\n    }\r\n    dr.NUM_MASK_PATTERNS = 8;\r\n    class gr extends i {}\r\n    gr.kind = \"WriterException\";\r\n    class fr {\r\n        constructor() {}\r\n        static clearMatrix(t) {\r\n            t.clear(255)\r\n        }\r\n        static buildMatrix(t, e, r, n, i) {\r\n            fr.clearMatrix(i), fr.embedBasicPatterns(r, i), fr.embedTypeInfo(e, n, i), fr.maybeEmbedVersionInfo(r, i), fr.embedDataBits(t, n, i)\r\n        }\r\n        static embedBasicPatterns(t, e) {\r\n            fr.embedPositionDetectionPatternsAndSeparators(e), fr.embedDarkDotAtLeftBottomCorner(e), fr.maybeEmbedPositionAdjustmentPatterns(t, e), fr.embedTimingPatterns(e)\r\n        }\r\n        static embedTypeInfo(t, e, r) {\r\n            const n = new w;\r\n            fr.makeTypeInfoBits(t, e, n);\r\n            for (let t = 0, e = n.getSize(); t < e; ++t) {\r\n                const e = n.get(n.getSize() - 1 - t),\r\n                        i = fr.TYPE_INFO_COORDINATES[t],\r\n                        s = i[0],\r\n                        o = i[1];\r\n                if (r.setBoolean(s, o, e), t < 8) {\r\n                    const n = r.getWidth() - t - 1,\r\n                            i = 8;\r\n                    r.setBoolean(n, i, e)\r\n                } else {\r\n                    const n = 8,\r\n                            i = r.getHeight() - 7 + (t - 8);\r\n                    r.setBoolean(n, i, e)\r\n                }\r\n            }\r\n        }\r\n        static maybeEmbedVersionInfo(t, e) {\r\n            if (t.getVersionNumber() < 7) return;\r\n            const r = new w;\r\n            fr.makeVersionInfoBits(t, r);\r\n            let n = 17;\r\n            for (let t = 0; t < 6; ++t)\r\n                for (let i = 0; i < 3; ++i) {\r\n                    const s = r.get(n);\r\n                    n--, e.setBoolean(t, e.getHeight() - 11 + i, s), e.setBoolean(e.getHeight() - 11 + i, t, s)\r\n                }\r\n        }\r\n        static embedDataBits(t, e, r) {\r\n            let n = 0,\r\n                    i = -1,\r\n                    s = r.getWidth() - 1,\r\n                    o = r.getHeight() - 1;\r\n            for (; s > 0;) {\r\n                for (6 === s && (s -= 1); o >= 0 && o < r.getHeight();) {\r\n                    for (let i = 0; i < 2; ++i) {\r\n                        const a = s - i;\r\n                        if (!fr.isEmpty(r.get(a, o))) continue;\r\n                        let l;\r\n                        n < t.getSize() ? (l = t.get(n), ++n) : l = !1, 255 !== e && cr.getDataMaskBit(e, a, o) && (l = !l), r.setBoolean(a, o, l)\r\n                    }\r\n                    o += i\r\n                }\r\n                o += i = -i, s -= 2\r\n            }\r\n            if (n !== t.getSize()) throw new gr(\"Not all bits consumed: \" + n + \"/\" + t.getSize())\r\n        }\r\n        static findMSBSet(t) {\r\n            return 32 - f.numberOfLeadingZeros(t)\r\n        }\r\n        static calculateBCHCode(t, e) {\r\n            if (0 === e) throw new o(\"0 polynomial\");\r\n            const r = fr.findMSBSet(e);\r\n            for (t <<= r - 1; fr.findMSBSet(t) >= r;) t ^= e << fr.findMSBSet(t) - r;\r\n            return t\r\n        }\r\n        static makeTypeInfoBits(t, e, r) {\r\n            if (!dr.isValidMaskPattern(e)) throw new gr(\"Invalid mask pattern\");\r\n            const n = t.getBits() << 3 | e;\r\n            r.appendBits(n, 5);\r\n            const i = fr.calculateBCHCode(n, fr.TYPE_INFO_POLY);\r\n            r.appendBits(i, 10);\r\n            const s = new w;\r\n            if (s.appendBits(fr.TYPE_INFO_MASK_PATTERN, 15), r.xor(s), 15 !== r.getSize()) throw new gr(\"should not happen but we got: \" + r.getSize())\r\n        }\r\n        static makeVersionInfoBits(t, e) {\r\n            e.appendBits(t.getVersionNumber(), 6);\r\n            const r = fr.calculateBCHCode(t.getVersionNumber(), fr.VERSION_INFO_POLY);\r\n            if (e.appendBits(r, 12), 18 !== e.getSize()) throw new gr(\"should not happen but we got: \" + e.getSize())\r\n        }\r\n        static isEmpty(t) {\r\n            return 255 === t\r\n        }\r\n        static embedTimingPatterns(t) {\r\n            for (let e = 8; e < t.getWidth() - 8; ++e) {\r\n                const r = (e + 1) % 2;\r\n                fr.isEmpty(t.get(e, 6)) && t.setNumber(e, 6, r), fr.isEmpty(t.get(6, e)) && t.setNumber(6, e, r)\r\n            }\r\n        }\r\n        static embedDarkDotAtLeftBottomCorner(t) {\r\n            if (0 === t.get(8, t.getHeight() - 8)) throw new gr;\r\n            t.setNumber(8, t.getHeight() - 8, 1)\r\n        }\r\n        static embedHorizontalSeparationPattern(t, e, r) {\r\n            for (let n = 0; n < 8; ++n) {\r\n                if (!fr.isEmpty(r.get(t + n, e))) throw new gr;\r\n                r.setNumber(t + n, e, 0)\r\n            }\r\n        }\r\n        static embedVerticalSeparationPattern(t, e, r) {\r\n            for (let n = 0; n < 7; ++n) {\r\n                if (!fr.isEmpty(r.get(t, e + n))) throw new gr;\r\n                r.setNumber(t, e + n, 0)\r\n            }\r\n        }\r\n        static embedPositionAdjustmentPattern(t, e, r) {\r\n            for (let n = 0; n < 5; ++n) {\r\n                const i = fr.POSITION_ADJUSTMENT_PATTERN[n];\r\n                for (let s = 0; s < 5; ++s) r.setNumber(t + s, e + n, i[s])\r\n            }\r\n        }\r\n        static embedPositionDetectionPattern(t, e, r) {\r\n            for (let n = 0; n < 7; ++n) {\r\n                const i = fr.POSITION_DETECTION_PATTERN[n];\r\n                for (let s = 0; s < 7; ++s) r.setNumber(t + s, e + n, i[s])\r\n            }\r\n        }\r\n        static embedPositionDetectionPatternsAndSeparators(t) {\r\n            const e = fr.POSITION_DETECTION_PATTERN[0].length;\r\n            fr.embedPositionDetectionPattern(0, 0, t), fr.embedPositionDetectionPattern(t.getWidth() - e, 0, t), fr.embedPositionDetectionPattern(0, t.getWidth() - e, t);\r\n            fr.embedHorizontalSeparationPattern(0, 7, t), fr.embedHorizontalSeparationPattern(t.getWidth() - 8, 7, t), fr.embedHorizontalSeparationPattern(0, t.getWidth() - 8, t);\r\n            fr.embedVerticalSeparationPattern(7, 0, t), fr.embedVerticalSeparationPattern(t.getHeight() - 7 - 1, 0, t), fr.embedVerticalSeparationPattern(7, t.getHeight() - 7, t)\r\n        }\r\n        static maybeEmbedPositionAdjustmentPatterns(t, e) {\r\n            if (t.getVersionNumber() < 2) return;\r\n            const r = t.getVersionNumber() - 1,\r\n                    n = fr.POSITION_ADJUSTMENT_PATTERN_COORDINATE_TABLE[r];\r\n            for (let t = 0, r = n.length; t !== r; t++) {\r\n                const i = n[t];\r\n                if (i >= 0)\r\n                    for (let t = 0; t !== r; t++) {\r\n                        const r = n[t];\r\n                        r >= 0 && fr.isEmpty(e.get(r, i)) && fr.embedPositionAdjustmentPattern(r - 2, i - 2, e)\r\n                    }\r\n            }\r\n        }\r\n    }\r\n    fr.POSITION_DETECTION_PATTERN = Array.from([Int32Array.from([1, 1, 1, 1, 1, 1, 1]), Int32Array.from([1, 0, 0, 0, 0, 0, 1]), Int32Array.from([1, 0, 1, 1, 1, 0, 1]), Int32Array.from([1, 0, 1, 1, 1, 0, 1]), Int32Array.from([1, 0, 1, 1, 1, 0, 1]), Int32Array.from([1, 0, 0, 0, 0, 0, 1]), Int32Array.from([1, 1, 1, 1, 1, 1, 1])]), fr.POSITION_ADJUSTMENT_PATTERN = Array.from([Int32Array.from([1, 1, 1, 1, 1]), Int32Array.from([1, 0, 0, 0, 1]), Int32Array.from([1, 0, 1, 0, 1]), Int32Array.from([1, 0, 0, 0, 1]), Int32Array.from([1, 1, 1, 1, 1])]), fr.POSITION_ADJUSTMENT_PATTERN_COORDINATE_TABLE = Array.from([Int32Array.from([-1, -1, -1, -1, -1, -1, -1]), Int32Array.from([6, 18, -1, -1, -1, -1, -1]), Int32Array.from([6, 22, -1, -1, -1, -1, -1]), Int32Array.from([6, 26, -1, -1, -1, -1, -1]), Int32Array.from([6, 30, -1, -1, -1, -1, -1]), Int32Array.from([6, 34, -1, -1, -1, -1, -1]), Int32Array.from([6, 22, 38, -1, -1, -1, -1]), Int32Array.from([6, 24, 42, -1, -1, -1, -1]), Int32Array.from([6, 26, 46, -1, -1, -1, -1]), Int32Array.from([6, 28, 50, -1, -1, -1, -1]), Int32Array.from([6, 30, 54, -1, -1, -1, -1]), Int32Array.from([6, 32, 58, -1, -1, -1, -1]), Int32Array.from([6, 34, 62, -1, -1, -1, -1]), Int32Array.from([6, 26, 46, 66, -1, -1, -1]), Int32Array.from([6, 26, 48, 70, -1, -1, -1]), Int32Array.from([6, 26, 50, 74, -1, -1, -1]), Int32Array.from([6, 30, 54, 78, -1, -1, -1]), Int32Array.from([6, 30, 56, 82, -1, -1, -1]), Int32Array.from([6, 30, 58, 86, -1, -1, -1]), Int32Array.from([6, 34, 62, 90, -1, -1, -1]), Int32Array.from([6, 28, 50, 72, 94, -1, -1]), Int32Array.from([6, 26, 50, 74, 98, -1, -1]), Int32Array.from([6, 30, 54, 78, 102, -1, -1]), Int32Array.from([6, 28, 54, 80, 106, -1, -1]), Int32Array.from([6, 32, 58, 84, 110, -1, -1]), Int32Array.from([6, 30, 58, 86, 114, -1, -1]), Int32Array.from([6, 34, 62, 90, 118, -1, -1]), Int32Array.from([6, 26, 50, 74, 98, 122, -1]), Int32Array.from([6, 30, 54, 78, 102, 126, -1]), Int32Array.from([6, 26, 52, 78, 104, 130, -1]), Int32Array.from([6, 30, 56, 82, 108, 134, -1]), Int32Array.from([6, 34, 60, 86, 112, 138, -1]), Int32Array.from([6, 30, 58, 86, 114, 142, -1]), Int32Array.from([6, 34, 62, 90, 118, 146, -1]), Int32Array.from([6, 30, 54, 78, 102, 126, 150]), Int32Array.from([6, 24, 50, 76, 102, 128, 154]), Int32Array.from([6, 28, 54, 80, 106, 132, 158]), Int32Array.from([6, 32, 58, 84, 110, 136, 162]), Int32Array.from([6, 26, 54, 82, 110, 138, 166]), Int32Array.from([6, 30, 58, 86, 114, 142, 170])]), fr.TYPE_INFO_COORDINATES = Array.from([Int32Array.from([8, 0]), Int32Array.from([8, 1]), Int32Array.from([8, 2]), Int32Array.from([8, 3]), Int32Array.from([8, 4]), Int32Array.from([8, 5]), Int32Array.from([8, 7]), Int32Array.from([8, 8]), Int32Array.from([7, 8]), Int32Array.from([5, 8]), Int32Array.from([4, 8]), Int32Array.from([3, 8]), Int32Array.from([2, 8]), Int32Array.from([1, 8]), Int32Array.from([0, 8])]), fr.VERSION_INFO_POLY = 7973, fr.TYPE_INFO_POLY = 1335, fr.TYPE_INFO_MASK_PATTERN = 21522;\r\n    class wr {\r\n        constructor(t, e) {\r\n            this.dataBytes = t, this.errorCorrectionBytes = e\r\n        }\r\n        getDataBytes() {\r\n            return this.dataBytes\r\n        }\r\n        getErrorCorrectionBytes() {\r\n            return this.errorCorrectionBytes\r\n        }\r\n    }\r\n    class Ar {\r\n        constructor() {}\r\n        static calculateMaskPenalty(t) {\r\n            return cr.applyMaskPenaltyRule1(t) + cr.applyMaskPenaltyRule2(t) + cr.applyMaskPenaltyRule3(t) + cr.applyMaskPenaltyRule4(t)\r\n        }\r\n        static encode(t, e, r = null) {\r\n            let n = Ar.DEFAULT_BYTE_MODE_ENCODING;\r\n            const i = null !== r && void 0 !== r.get(lr.CHARACTER_SET);\r\n            i && (n = r.get(lr.CHARACTER_SET).toString());\r\n            const s = this.chooseMode(t, n),\r\n                    o = new w;\r\n            if (s === _e.BYTE && (i || Ar.DEFAULT_BYTE_MODE_ENCODING !== n)) {\r\n                const t = m.getCharacterSetECIByName(n);\r\n                void 0 !== t && this.appendECI(t, o)\r\n            }\r\n            this.appendModeInfo(s, o);\r\n            const a = new w;\r\n            let l;\r\n            if (this.appendBytes(t, s, a, n), null !== r && void 0 !== r.get(lr.QR_VERSION)) {\r\n                const t = Number.parseInt(r.get(lr.QR_VERSION).toString(), 10);\r\n                l = Ae.getVersionForNumber(t);\r\n                const n = this.calculateBitsNeeded(s, o, a, l);\r\n                if (!this.willFit(n, l, e)) throw new gr(\"Data too big for requested version\")\r\n            } else l = this.recommendVersion(e, s, o, a);\r\n            const h = new w;\r\n            h.appendBitArray(o);\r\n            const c = s === _e.BYTE ? a.getSizeInBytes() : t.length;\r\n            this.appendLengthInfo(c, l, s, h), h.appendBitArray(a);\r\n            const u = l.getECBlocksForLevel(e),\r\n                    d = l.getTotalCodewords() - u.getTotalECCodewords();\r\n            this.terminateBits(d, h);\r\n            const g = this.interleaveWithECBytes(h, l.getTotalCodewords(), d, u.getNumBlocks()),\r\n                    f = new dr;\r\n            f.setECLevel(e), f.setMode(s), f.setVersion(l);\r\n            const A = l.getDimensionForVersion(),\r\n                    C = new ur(A, A),\r\n                    E = this.chooseMaskPattern(g, e, l, C);\r\n            return f.setMaskPattern(E), fr.buildMatrix(g, e, l, E, C), f.setMatrix(C), f\r\n        }\r\n        static recommendVersion(t, e, r, n) {\r\n            const i = this.calculateBitsNeeded(e, r, n, Ae.getVersionForNumber(1)),\r\n                    s = this.chooseVersion(i, t),\r\n                    o = this.calculateBitsNeeded(e, r, n, s);\r\n            return this.chooseVersion(o, t)\r\n        }\r\n        static calculateBitsNeeded(t, e, r, n) {\r\n            return e.getSize() + t.getCharacterCountBits(n) + r.getSize()\r\n        }\r\n        static getAlphanumericCode(t) {\r\n            return t < Ar.ALPHANUMERIC_TABLE.length ? Ar.ALPHANUMERIC_TABLE[t] : -1\r\n        }\r\n        static chooseMode(t, e = null) {\r\n            if (m.SJIS.getName() === e && this.isOnlyDoubleByteKanji(t)) return _e.KANJI;\r\n            let r = !1,\r\n                    n = !1;\r\n            for (let e = 0, i = t.length; e < i; ++e) {\r\n                const i = t.charAt(e);\r\n                if (Ar.isDigit(i)) r = !0;\r\n                else {\r\n                    if (-1 === this.getAlphanumericCode(i.charCodeAt(0))) return _e.BYTE;\r\n                    n = !0\r\n                }\r\n            }\r\n            return n ? _e.ALPHANUMERIC : r ? _e.NUMERIC : _e.BYTE\r\n        }\r\n        static isOnlyDoubleByteKanji(t) {\r\n            let e;\r\n            try {\r\n                e = I.encode(t, m.SJIS)\r\n            } catch (t) {\r\n                return !1\r\n            }\r\n            const r = e.length;\r\n            if (r % 2 != 0) return !1;\r\n            for (let t = 0; t < r; t += 2) {\r\n                const r = 255 & e[t];\r\n                if ((r < 129 || r > 159) && (r < 224 || r > 235)) return !1\r\n            }\r\n            return !0\r\n        }\r\n        static chooseMaskPattern(t, e, r, n) {\r\n            let i = Number.MAX_SAFE_INTEGER,\r\n                    s = -1;\r\n            for (let o = 0; o < dr.NUM_MASK_PATTERNS; o++) {\r\n                fr.buildMatrix(t, e, r, o, n);\r\n                let a = this.calculateMaskPenalty(n);\r\n                a < i && (i = a, s = o)\r\n            }\r\n            return s\r\n        }\r\n        static chooseVersion(t, e) {\r\n            for (let r = 1; r <= 40; r++) {\r\n                const n = Ae.getVersionForNumber(r);\r\n                if (Ar.willFit(t, n, e)) return n\r\n            }\r\n            throw new gr(\"Data too big\")\r\n        }\r\n        static willFit(t, e, r) {\r\n            return e.getTotalCodewords() - e.getECBlocksForLevel(r).getTotalECCodewords() >= (t + 7) / 8\r\n        }\r\n        static terminateBits(t, e) {\r\n            const r = 8 * t;\r\n            if (e.getSize() > r) throw new gr(\"data bits cannot fit in the QR Code\" + e.getSize() + \" > \" + r);\r\n            for (let t = 0; t < 4 && e.getSize() < r; ++t) e.appendBit(!1);\r\n            const n = 7 & e.getSize();\r\n            if (n > 0)\r\n                for (let t = n; t < 8; t++) e.appendBit(!1);\r\n            const i = t - e.getSizeInBytes();\r\n            for (let t = 0; t < i; ++t) e.appendBits(0 == (1 & t) ? 236 : 17, 8);\r\n            if (e.getSize() !== r) throw new gr(\"Bits size does not equal capacity\")\r\n        }\r\n        static getNumDataBytesAndNumECBytesForBlockID(t, e, r, n, i, s) {\r\n            if (n >= r) throw new gr(\"Block ID too large\");\r\n            const o = t % r,\r\n                    a = r - o,\r\n                    l = Math.floor(t / r),\r\n                    h = l + 1,\r\n                    c = Math.floor(e / r),\r\n                    u = c + 1,\r\n                    d = l - c,\r\n                    g = h - u;\r\n            if (d !== g) throw new gr(\"EC bytes mismatch\");\r\n            if (r !== a + o) throw new gr(\"RS blocks mismatch\");\r\n            if (t !== (c + d) * a + (u + g) * o) throw new gr(\"Total bytes mismatch\");\r\n            n < a ? (i[0] = c, s[0] = d) : (i[0] = u, s[0] = g)\r\n        }\r\n        static interleaveWithECBytes(t, e, r, n) {\r\n            if (t.getSizeInBytes() !== r) throw new gr(\"Number of bits and data bytes does not match\");\r\n            let i = 0,\r\n                    s = 0,\r\n                    o = 0;\r\n            const a = new Array;\r\n            for (let l = 0; l < n; ++l) {\r\n                const h = new Int32Array(1),\r\n                        c = new Int32Array(1);\r\n                Ar.getNumDataBytesAndNumECBytesForBlockID(e, r, n, l, h, c);\r\n                const u = h[0],\r\n                        d = new Uint8Array(u);\r\n                t.toBytes(8 * i, d, 0, u);\r\n                const g = Ar.generateECBytes(d, c[0]);\r\n                a.push(new wr(d, g)), s = Math.max(s, u), o = Math.max(o, g.length), i += h[0]\r\n            }\r\n            if (r !== i) throw new gr(\"Data bytes does not match offset\");\r\n            const l = new w;\r\n            for (let t = 0; t < s; ++t)\r\n                for (const e of a) {\r\n                    const r = e.getDataBytes();\r\n                    t < r.length && l.appendBits(r[t], 8)\r\n                }\r\n            for (let t = 0; t < o; ++t)\r\n                for (const e of a) {\r\n                    const r = e.getErrorCorrectionBytes();\r\n                    t < r.length && l.appendBits(r[t], 8)\r\n                }\r\n            if (e !== l.getSizeInBytes()) throw new gr(\"Interleaving error: \" + e + \" and \" + l.getSizeInBytes() + \" differ.\");\r\n            return l\r\n        }\r\n        static generateECBytes(t, e) {\r\n            const r = t.length,\r\n                    n = new Int32Array(r + e);\r\n            for (let e = 0; e < r; e++) n[e] = 255 & t[e];\r\n            new hr(q.QR_CODE_FIELD_256).encode(n, e);\r\n            const i = new Uint8Array(e);\r\n            for (let t = 0; t < e; t++) i[t] = n[r + t];\r\n            return i\r\n        }\r\n        static appendModeInfo(t, e) {\r\n            e.appendBits(t.getBits(), 4)\r\n        }\r\n        static appendLengthInfo(t, e, r, n) {\r\n            const i = r.getCharacterCountBits(e);\r\n            if (t >= 1 << i) throw new gr(t + \" is bigger than \" + ((1 << i) - 1));\r\n            n.appendBits(t, i)\r\n        }\r\n        static appendBytes(t, e, r, n) {\r\n            switch (e) {\r\n                case _e.NUMERIC:\r\n                    Ar.appendNumericBytes(t, r);\r\n                    break;\r\n                case _e.ALPHANUMERIC:\r\n                    Ar.appendAlphanumericBytes(t, r);\r\n                    break;\r\n                case _e.BYTE:\r\n                    Ar.append8BitBytes(t, r, n);\r\n                    break;\r\n                case _e.KANJI:\r\n                    Ar.appendKanjiBytes(t, r);\r\n                    break;\r\n                default:\r\n                    throw new gr(\"Invalid mode: \" + e)\r\n            }\r\n        }\r\n        static getDigit(t) {\r\n            return t.charCodeAt(0) - 48\r\n        }\r\n        static isDigit(t) {\r\n            const e = Ar.getDigit(t);\r\n            return e >= 0 && e <= 9\r\n        }\r\n        static appendNumericBytes(t, e) {\r\n            const r = t.length;\r\n            let n = 0;\r\n            for (; n < r;) {\r\n                const i = Ar.getDigit(t.charAt(n));\r\n                if (n + 2 < r) {\r\n                    const r = Ar.getDigit(t.charAt(n + 1)),\r\n                            s = Ar.getDigit(t.charAt(n + 2));\r\n                    e.appendBits(100 * i + 10 * r + s, 10), n += 3\r\n                } else if (n + 1 < r) {\r\n                    const r = Ar.getDigit(t.charAt(n + 1));\r\n                    e.appendBits(10 * i + r, 7), n += 2\r\n                } else e.appendBits(i, 4), n++\r\n            }\r\n        }\r\n        static appendAlphanumericBytes(t, e) {\r\n            const r = t.length;\r\n            let n = 0;\r\n            for (; n < r;) {\r\n                const i = Ar.getAlphanumericCode(t.charCodeAt(n));\r\n                if (-1 === i) throw new gr;\r\n                if (n + 1 < r) {\r\n                    const r = Ar.getAlphanumericCode(t.charCodeAt(n + 1));\r\n                    if (-1 === r) throw new gr;\r\n                    e.appendBits(45 * i + r, 11), n += 2\r\n                } else e.appendBits(i, 6), n++\r\n            }\r\n        }\r\n        static append8BitBytes(t, e, r) {\r\n            let n;\r\n            try {\r\n                n = I.encode(t, r)\r\n            } catch (t) {\r\n                throw new gr(t)\r\n            }\r\n            for (let t = 0, r = n.length; t !== r; t++) {\r\n                const r = n[t];\r\n                e.appendBits(r, 8)\r\n            }\r\n        }\r\n        static appendKanjiBytes(t, e) {\r\n            let r;\r\n            try {\r\n                r = I.encode(t, m.SJIS)\r\n            } catch (t) {\r\n                throw new gr(t)\r\n            }\r\n            const n = r.length;\r\n            for (let t = 0; t < n; t += 2) {\r\n                const n = (255 & r[t]) << 8 & 4294967295 | 255 & r[t + 1];\r\n                let i = -1;\r\n                if (n >= 33088 && n <= 40956 ? i = n - 33088 : n >= 57408 && n <= 60351 && (i = n - 49472), -1 === i) throw new gr(\"Invalid byte sequence\");\r\n                const s = 192 * (i >> 8) + (255 & i);\r\n                e.appendBits(s, 13)\r\n            }\r\n        }\r\n        static appendECI(t, e) {\r\n            e.appendBits(_e.ECI.getBits(), 4), e.appendBits(t.getValue(), 8)\r\n        }\r\n    }\r\n    Ar.ALPHANUMERIC_TABLE = Int32Array.from([-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 36, -1, -1, -1, 37, 38, -1, -1, -1, -1, 39, 40, -1, 41, 42, 43, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 44, -1, -1, -1, -1, -1, -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, -1, -1, -1, -1, -1]), Ar.DEFAULT_BYTE_MODE_ENCODING = m.UTF8.getName();\r\n    class Cr {\r\n        write(t, e, r, n = null) {\r\n            if (0 === t.length) throw new o(\"Found empty contents\");\r\n            if (e < 0 || r < 0) throw new o(\"Requested dimensions are too small: \" + e + \"x\" + r);\r\n            let i = de.L,\r\n                    s = Cr.QUIET_ZONE_SIZE;\r\n            null !== n && (void 0 !== n.get(lr.ERROR_CORRECTION) && (i = de.fromString(n.get(lr.ERROR_CORRECTION).toString())), void 0 !== n.get(lr.MARGIN) && (s = Number.parseInt(n.get(lr.MARGIN).toString(), 10)));\r\n            const a = Ar.encode(t, i, n);\r\n            return this.renderResult(a, e, r, s)\r\n        }\r\n        writeToDom(t, e, r, n, i = null) {\r\n            \"string\" == typeof t && (t = document.querySelector(t));\r\n            const s = this.write(e, r, n, i);\r\n            t && t.appendChild(s)\r\n        }\r\n        renderResult(t, e, r, n) {\r\n            const i = t.getMatrix();\r\n            if (null === i) throw new j;\r\n            const s = i.getWidth(),\r\n                    o = i.getHeight(),\r\n                    a = s + 2 * n,\r\n                    l = o + 2 * n,\r\n                    h = Math.max(e, a),\r\n                    c = Math.max(r, l),\r\n                    u = Math.min(Math.floor(h / a), Math.floor(c / l)),\r\n                    d = Math.floor((h - s * u) / 2),\r\n                    g = Math.floor((c - o * u) / 2),\r\n                    f = this.createSVGElement(h, c);\r\n            for (let t = 0, e = g; t < o; t++, e += u)\r\n                for (let r = 0, n = d; r < s; r++, n += u)\r\n                    if (1 === i.get(r, t)) {\r\n                        const t = this.createSvgRectElement(n, e, u, u);\r\n                        f.appendChild(t)\r\n                    } return f\r\n        }\r\n        createSVGElement(t, e) {\r\n            const r = document.createElementNS(Cr.SVG_NS, \"svg\");\r\n            return r.setAttributeNS(null, \"height\", t.toString()), r.setAttributeNS(null, \"width\", e.toString()), r\r\n        }\r\n        createSvgRectElement(t, e, r, n) {\r\n            const i = document.createElementNS(Cr.SVG_NS, \"rect\");\r\n            return i.setAttributeNS(null, \"x\", t.toString()), i.setAttributeNS(null, \"y\", e.toString()), i.setAttributeNS(null, \"height\", r.toString()), i.setAttributeNS(null, \"width\", n.toString()), i.setAttributeNS(null, \"fill\", \"#000000\"), i\r\n        }\r\n    }\r\n    Cr.QUIET_ZONE_SIZE = 4, Cr.SVG_NS = \"http://www.w3.org/2000/svg\";\r\n    class Er {\r\n        encode(t, e, r, n, i) {\r\n            if (0 === t.length) throw new o(\"Found empty contents\");\r\n            if (e !== k.QR_CODE) throw new o(\"Can only encode QR_CODE, but got \" + e);\r\n            if (r < 0 || n < 0) throw new o(`Requested dimensions are too small: ${r}x${n}`);\r\n            let s = de.L,\r\n                    a = Er.QUIET_ZONE_SIZE;\r\n            null !== i && (void 0 !== i.get(lr.ERROR_CORRECTION) && (s = de.fromString(i.get(lr.ERROR_CORRECTION).toString())), void 0 !== i.get(lr.MARGIN) && (a = Number.parseInt(i.get(lr.MARGIN).toString(), 10)));\r\n            const l = Ar.encode(t, s, i);\r\n            return Er.renderResult(l, r, n, a)\r\n        }\r\n        static renderResult(t, e, r, n) {\r\n            const i = t.getMatrix();\r\n            if (null === i) throw new j;\r\n            const s = i.getWidth(),\r\n                    o = i.getHeight(),\r\n                    a = s + 2 * n,\r\n                    l = o + 2 * n,\r\n                    h = Math.max(e, a),\r\n                    c = Math.max(r, l),\r\n                    u = Math.min(Math.floor(h / a), Math.floor(c / l)),\r\n                    d = Math.floor((h - s * u) / 2),\r\n                    g = Math.floor((c - o * u) / 2),\r\n                    f = new T(h, c);\r\n            for (let t = 0, e = g; t < o; t++, e += u)\r\n                for (let r = 0, n = d; r < s; r++, n += u) 1 === i.get(r, t) && f.setRegion(n, e, u, u);\r\n            return f\r\n        }\r\n    }\r\n    Er.QUIET_ZONE_SIZE = 4;\r\n    class mr extends y {\r\n        constructor(t, e, r, n, i, s, a, l) {\r\n            if (super(s, a), this.yuvData = t, this.dataWidth = e, this.dataHeight = r, this.left = n, this.top = i, n + s > e || i + a > r) throw new o(\"Crop rectangle does not fit within image data.\");\r\n            l && this.reverseHorizontal(s, a)\r\n        }\r\n        getRow(t, e) {\r\n            if (t < 0 || t >= this.getHeight()) throw new o(\"Requested row is outside the image: \" + t);\r\n            const r = this.getWidth();\r\n            (null == e || e.length < r) && (e = new Uint8ClampedArray(r));\r\n            const n = (t + this.top) * this.dataWidth + this.left;\r\n            return c.arraycopy(this.yuvData, n, e, 0, r), e\r\n        }\r\n        getMatrix() {\r\n            const t = this.getWidth(),\r\n                    e = this.getHeight();\r\n            if (t === this.dataWidth && e === this.dataHeight) return this.yuvData;\r\n            const r = t * e,\r\n                    n = new Uint8ClampedArray(r);\r\n            let i = this.top * this.dataWidth + this.left;\r\n            if (t === this.dataWidth) return c.arraycopy(this.yuvData, i, n, 0, r), n;\r\n            for (let r = 0; r < e; r++) {\r\n                const e = r * t;\r\n                c.arraycopy(this.yuvData, i, n, e, t), i += this.dataWidth\r\n            }\r\n            return n\r\n        }\r\n        isCropSupported() {\r\n            return !0\r\n        }\r\n        crop(t, e, r, n) {\r\n            return new mr(this.yuvData, this.dataWidth, this.dataHeight, this.left + t, this.top + e, r, n, !1)\r\n        }\r\n        renderThumbnail() {\r\n            const t = this.getWidth() / mr.THUMBNAIL_SCALE_FACTOR,\r\n                    e = this.getHeight() / mr.THUMBNAIL_SCALE_FACTOR,\r\n                    r = new Int32Array(t * e),\r\n                    n = this.yuvData;\r\n            let i = this.top * this.dataWidth + this.left;\r\n            for (let s = 0; s < e; s++) {\r\n                const e = s * t;\r\n                for (let s = 0; s < t; s++) {\r\n                    const t = 255 & n[i + s * mr.THUMBNAIL_SCALE_FACTOR];\r\n                    r[e + s] = 4278190080 | 65793 * t\r\n                }\r\n                i += this.dataWidth * mr.THUMBNAIL_SCALE_FACTOR\r\n            }\r\n            return r\r\n        }\r\n        getThumbnailWidth() {\r\n            return this.getWidth() / mr.THUMBNAIL_SCALE_FACTOR\r\n        }\r\n        getThumbnailHeight() {\r\n            return this.getHeight() / mr.THUMBNAIL_SCALE_FACTOR\r\n        }\r\n        reverseHorizontal(t, e) {\r\n            const r = this.yuvData;\r\n            for (let n = 0, i = this.top * this.dataWidth + this.left; n < e; n++, i += this.dataWidth) {\r\n                const e = i + t / 2;\r\n                for (let n = i, s = i + t - 1; n < e; n++, s--) {\r\n                    const t = r[n];\r\n                    r[n] = r[s], r[s] = t\r\n                }\r\n            }\r\n        }\r\n        invert() {\r\n            return new O(this)\r\n        }\r\n    }\r\n    mr.THUMBNAIL_SCALE_FACTOR = 2;\r\n    class _r extends y {\r\n        constructor(t, e, r, n, i, s, a) {\r\n            if (super(e, r), this.dataWidth = n, this.dataHeight = i, this.left = s, this.top = a, 4 === t.BYTES_PER_ELEMENT) {\r\n                const n = e * r,\r\n                        i = new Uint8ClampedArray(n);\r\n                for (let e = 0; e < n; e++) {\r\n                    const r = t[e],\r\n                            n = r >> 16 & 255,\r\n                            s = r >> 7 & 510,\r\n                            o = 255 & r;\r\n                    i[e] = (n + s + o) / 4 & 255\r\n                }\r\n                this.luminances = i\r\n            } else this.luminances = t;\r\n            if (void 0 === n && (this.dataWidth = e), void 0 === i && (this.dataHeight = r), void 0 === s && (this.left = 0), void 0 === a && (this.top = 0), this.left + e > this.dataWidth || this.top + r > this.dataHeight) throw new o(\"Crop rectangle does not fit within image data.\")\r\n        }\r\n        getRow(t, e) {\r\n            if (t < 0 || t >= this.getHeight()) throw new o(\"Requested row is outside the image: \" + t);\r\n            const r = this.getWidth();\r\n            (null == e || e.length < r) && (e = new Uint8ClampedArray(r));\r\n            const n = (t + this.top) * this.dataWidth + this.left;\r\n            return c.arraycopy(this.luminances, n, e, 0, r), e\r\n        }\r\n        getMatrix() {\r\n            const t = this.getWidth(),\r\n                    e = this.getHeight();\r\n            if (t === this.dataWidth && e === this.dataHeight) return this.luminances;\r\n            const r = t * e,\r\n                    n = new Uint8ClampedArray(r);\r\n            let i = this.top * this.dataWidth + this.left;\r\n            if (t === this.dataWidth) return c.arraycopy(this.luminances, i, n, 0, r), n;\r\n            for (let r = 0; r < e; r++) {\r\n                const e = r * t;\r\n                c.arraycopy(this.luminances, i, n, e, t), i += this.dataWidth\r\n            }\r\n            return n\r\n        }\r\n        isCropSupported() {\r\n            return !0\r\n        }\r\n        crop(t, e, r, n) {\r\n            return new _r(this.luminances, r, n, this.dataWidth, this.dataHeight, this.left + t, this.top + e)\r\n        }\r\n        invert() {\r\n            return new O(this)\r\n        }\r\n    }\r\n    class Ir extends m {\r\n        static forName(t) {\r\n            return this.getCharacterSetECIByName(t)\r\n        }\r\n    }\r\n    class Sr {}\r\n    Sr.ISO_8859_1 = m.ISO8859_1;\r\n    class pr {\r\n        isCompact() {\r\n            return this.compact\r\n        }\r\n        setCompact(t) {\r\n            this.compact = t\r\n        }\r\n        getSize() {\r\n            return this.size\r\n        }\r\n        setSize(t) {\r\n            this.size = t\r\n        }\r\n        getLayers() {\r\n            return this.layers\r\n        }\r\n        setLayers(t) {\r\n            this.layers = t\r\n        }\r\n        getCodeWords() {\r\n            return this.codeWords\r\n        }\r\n        setCodeWords(t) {\r\n            this.codeWords = t\r\n        }\r\n        getMatrix() {\r\n            return this.matrix\r\n        }\r\n        setMatrix(t) {\r\n            this.matrix = t\r\n        }\r\n    }\r\n    class Tr {\r\n        static singletonList(t) {\r\n            return [t]\r\n        }\r\n        static min(t, e) {\r\n            return t.sort(e)[0]\r\n        }\r\n    }\r\n    class Rr {\r\n        constructor(t) {\r\n            this.previous = t\r\n        }\r\n        getPrevious() {\r\n            return this.previous\r\n        }\r\n    }\r\n    class Nr extends Rr {\r\n        constructor(t, e, r) {\r\n            super(t), this.value = e, this.bitCount = r\r\n        }\r\n        appendTo(t, e) {\r\n            t.appendBits(this.value, this.bitCount)\r\n        }\r\n        add(t, e) {\r\n            return new Nr(this, t, e)\r\n        }\r\n        addBinaryShift(t, e) {\r\n            return console.warn(\"addBinaryShift on SimpleToken, this simply returns a copy of this token\"), new Nr(this, t, e)\r\n        }\r\n        toString() {\r\n            let t = this.value & (1 << this.bitCount) - 1;\r\n            return t |= 1 << this.bitCount, \"<\" + f.toBinaryString(t | 1 << this.bitCount).substring(1) + \">\"\r\n        }\r\n    }\r\n    class Dr extends Nr {\r\n        constructor(t, e, r) {\r\n            super(t, 0, 0), this.binaryShiftStart = e, this.binaryShiftByteCount = r\r\n        }\r\n        appendTo(t, e) {\r\n            for (let r = 0; r < this.binaryShiftByteCount; r++)(0 === r || 31 === r && this.binaryShiftByteCount <= 62) && (t.appendBits(31, 5), this.binaryShiftByteCount > 62 ? t.appendBits(this.binaryShiftByteCount - 31, 16) : 0 === r ? t.appendBits(Math.min(this.binaryShiftByteCount, 31), 5) : t.appendBits(this.binaryShiftByteCount - 31, 5)), t.appendBits(e[this.binaryShiftStart + r], 8)\r\n        }\r\n        addBinaryShift(t, e) {\r\n            return new Dr(this, t, e)\r\n        }\r\n        toString() {\r\n            return \"<\" + this.binaryShiftStart + \"::\" + (this.binaryShiftStart + this.binaryShiftByteCount - 1) + \">\"\r\n        }\r\n    }\r\n\r\n    function yr(t, e, r) {\r\n        return new Nr(t, e, r)\r\n    }\r\n    const Or = [\"UPPER\", \"LOWER\", \"DIGIT\", \"MIXED\", \"PUNCT\"],\r\n            Mr = 0,\r\n            br = 1,\r\n            Br = 2,\r\n            Pr = 3,\r\n            Lr = 4,\r\n            Fr = new Nr(null, 0, 0),\r\n            vr = [Int32Array.from([0, 327708, 327710, 327709, 656318]), Int32Array.from([590318, 0, 327710, 327709, 656318]), Int32Array.from([262158, 590300, 0, 590301, 932798]), Int32Array.from([327709, 327708, 656318, 0, 327710]), Int32Array.from([327711, 656380, 656382, 656381, 0])];\r\n    const kr = function(t) {\r\n        for (let e of t) g.fill(e, -1);\r\n        return t[Mr][Lr] = 0, t[br][Lr] = 0, t[br][Mr] = 28, t[Pr][Lr] = 0, t[Br][Lr] = 0, t[Br][Mr] = 15, t\r\n    }(g.createInt32Array(6, 6));\r\n    class xr {\r\n        constructor(t, e, r, n) {\r\n            this.token = t, this.mode = e, this.binaryShiftByteCount = r, this.bitCount = n\r\n        }\r\n        getMode() {\r\n            return this.mode\r\n        }\r\n        getToken() {\r\n            return this.token\r\n        }\r\n        getBinaryShiftByteCount() {\r\n            return this.binaryShiftByteCount\r\n        }\r\n        getBitCount() {\r\n            return this.bitCount\r\n        }\r\n        latchAndAppend(t, e) {\r\n            let r = this.bitCount,\r\n                    n = this.token;\r\n            if (t !== this.mode) {\r\n                let e = vr[this.mode][t];\r\n                n = yr(n, 65535 & e, e >> 16), r += e >> 16\r\n            }\r\n            let i = t === Br ? 4 : 5;\r\n            return n = yr(n, e, i), new xr(n, t, 0, r + i)\r\n        }\r\n        shiftAndAppend(t, e) {\r\n            let r = this.token,\r\n                    n = this.mode === Br ? 4 : 5;\r\n            return r = yr(r, kr[this.mode][t], n), r = yr(r, e, 5), new xr(r, this.mode, 0, this.bitCount + n + 5)\r\n        }\r\n        addBinaryShiftChar(t) {\r\n            let e = this.token,\r\n                    r = this.mode,\r\n                    n = this.bitCount;\r\n            if (this.mode === Lr || this.mode === Br) {\r\n                let t = vr[r][Mr];\r\n                e = yr(e, 65535 & t, t >> 16), n += t >> 16, r = Mr\r\n            }\r\n            let i = 0 === this.binaryShiftByteCount || 31 === this.binaryShiftByteCount ? 18 : 62 === this.binaryShiftByteCount ? 9 : 8,\r\n                    s = new xr(e, r, this.binaryShiftByteCount + 1, n + i);\r\n            return 2078 === s.binaryShiftByteCount && (s = s.endBinaryShift(t + 1)), s\r\n        }\r\n        endBinaryShift(t) {\r\n            if (0 === this.binaryShiftByteCount) return this;\r\n            let e = this.token;\r\n            return e = function(t, e, r) {\r\n                return new Dr(t, e, r)\r\n            }(e, t - this.binaryShiftByteCount, this.binaryShiftByteCount), new xr(e, this.mode, 0, this.bitCount)\r\n        }\r\n        isBetterThanOrEqualTo(t) {\r\n            let e = this.bitCount + (vr[this.mode][t.mode] >> 16);\r\n            return this.binaryShiftByteCount < t.binaryShiftByteCount ? e += xr.calculateBinaryShiftCost(t) - xr.calculateBinaryShiftCost(this) : this.binaryShiftByteCount > t.binaryShiftByteCount && t.binaryShiftByteCount > 0 && (e += 10), e <= t.bitCount\r\n        }\r\n        toBitArray(t) {\r\n            let e = [];\r\n            for (let r = this.endBinaryShift(t.length).token; null !== r; r = r.getPrevious()) e.unshift(r);\r\n            let r = new w;\r\n            for (const n of e) n.appendTo(r, t);\r\n            return r\r\n        }\r\n        toString() {\r\n            return S.format(\"%s bits=%d bytes=%d\", Or[this.mode], this.bitCount, this.binaryShiftByteCount)\r\n        }\r\n        static calculateBinaryShiftCost(t) {\r\n            return t.binaryShiftByteCount > 62 ? 21 : t.binaryShiftByteCount > 31 ? 20 : t.binaryShiftByteCount > 0 ? 10 : 0\r\n        }\r\n    }\r\n    xr.INITIAL_STATE = new xr(Fr, Mr, 0, 0);\r\n    const Vr = function(t) {\r\n        const e = S.getCharCode(\" \"),\r\n                r = S.getCharCode(\".\"),\r\n                n = S.getCharCode(\",\");\r\n        t[Mr][e] = 1;\r\n        const i = S.getCharCode(\"Z\"),\r\n                s = S.getCharCode(\"A\");\r\n        for (let e = s; e <= i; e++) t[Mr][e] = e - s + 2;\r\n        t[br][e] = 1;\r\n        const o = S.getCharCode(\"z\"),\r\n                a = S.getCharCode(\"a\");\r\n        for (let e = a; e <= o; e++) t[br][e] = e - a + 2;\r\n        t[Br][e] = 1;\r\n        const l = S.getCharCode(\"9\"),\r\n                h = S.getCharCode(\"0\");\r\n        for (let e = h; e <= l; e++) t[Br][e] = e - h + 2;\r\n        t[Br][n] = 12, t[Br][r] = 13;\r\n        const c = [\"\\0\", \" \", \"\u0001\", \"\u0002\", \"\u0003\", \"\u0004\", \"\u0005\", \"\u0006\", \"\u0007\", \"\\b\", \"\\t\", \"\\n\", \"\\v\", \"\\f\", \"\\r\", \"\u001b\", \"\u001c\", \"\u001d\", \"\u001e\", \"\u001f\", \"@\", \"\\\\\", \"^\", \"_\", \"`\", \"|\", \"~\", \"\"];\r\n        for (let e = 0; e < c.length; e++) t[Pr][S.getCharCode(c[e])] = e;\r\n        const u = [\"\\0\", \"\\r\", \"\\0\", \"\\0\", \"\\0\", \"\\0\", \"!\", \"'\", \"#\", \"$\", \"%\", \"&\", \"'\", \"(\", \")\", \"*\", \"+\", \",\", \"-\", \".\", \"/\", \":\", \";\", \"<\", \"=\", \">\", \"?\", \"[\", \"]\", \"{\", \"}\"];\r\n        for (let e = 0; e < u.length; e++) S.getCharCode(u[e]) > 0 && (t[Lr][S.getCharCode(u[e])] = e);\r\n        return t\r\n    }(g.createInt32Array(5, 256));\r\n    class Ur {\r\n        constructor(t) {\r\n            this.text = t\r\n        }\r\n        encode() {\r\n            const t = S.getCharCode(\" \"),\r\n                    e = S.getCharCode(\"\\n\");\r\n            let r = Tr.singletonList(xr.INITIAL_STATE);\r\n            for (let n = 0; n < this.text.length; n++) {\r\n                let i, s = n + 1 < this.text.length ? this.text[n + 1] : 0;\r\n                switch (this.text[n]) {\r\n                    case S.getCharCode(\"\\r\"):\r\n                        i = s === e ? 2 : 0;\r\n                        break;\r\n                    case S.getCharCode(\".\"):\r\n                        i = s === t ? 3 : 0;\r\n                        break;\r\n                    case S.getCharCode(\",\"):\r\n                        i = s === t ? 4 : 0;\r\n                        break;\r\n                    case S.getCharCode(\":\"):\r\n                        i = s === t ? 5 : 0;\r\n                        break;\r\n                    default:\r\n                        i = 0\r\n                }\r\n                i > 0 ? (r = Ur.updateStateListForPair(r, n, i), n++) : r = this.updateStateListForChar(r, n)\r\n            }\r\n            return Tr.min(r, (t, e) => t.getBitCount() - e.getBitCount()).toBitArray(this.text)\r\n        }\r\n        updateStateListForChar(t, e) {\r\n            const r = [];\r\n            for (let n of t) this.updateStateForChar(n, e, r);\r\n            return Ur.simplifyStates(r)\r\n        }\r\n        updateStateForChar(t, e, r) {\r\n            let n = 255 & this.text[e],\r\n                    i = Vr[t.getMode()][n] > 0,\r\n                    s = null;\r\n            for (let o = 0; o <= Lr; o++) {\r\n                let a = Vr[o][n];\r\n                if (a > 0) {\r\n                    if (null == s && (s = t.endBinaryShift(e)), !i || o === t.getMode() || o === Br) {\r\n                        const t = s.latchAndAppend(o, a);\r\n                        r.push(t)\r\n                    }\r\n                    if (!i && kr[t.getMode()][o] >= 0) {\r\n                        const t = s.shiftAndAppend(o, a);\r\n                        r.push(t)\r\n                    }\r\n                }\r\n            }\r\n            if (t.getBinaryShiftByteCount() > 0 || 0 === Vr[t.getMode()][n]) {\r\n                let n = t.addBinaryShiftChar(e);\r\n                r.push(n)\r\n            }\r\n        }\r\n        static updateStateListForPair(t, e, r) {\r\n            const n = [];\r\n            for (let i of t) this.updateStateForPair(i, e, r, n);\r\n            return this.simplifyStates(n)\r\n        }\r\n        static updateStateForPair(t, e, r, n) {\r\n            let i = t.endBinaryShift(e);\r\n            if (n.push(i.latchAndAppend(Lr, r)), t.getMode() !== Lr && n.push(i.shiftAndAppend(Lr, r)), 3 === r || 4 === r) {\r\n                let t = i.latchAndAppend(Br, 16 - r).latchAndAppend(Br, 1);\r\n                n.push(t)\r\n            }\r\n            if (t.getBinaryShiftByteCount() > 0) {\r\n                let r = t.addBinaryShiftChar(e).addBinaryShiftChar(e + 1);\r\n                n.push(r)\r\n            }\r\n        }\r\n        static simplifyStates(t) {\r\n            let e = [];\r\n            for (const r of t) {\r\n                let t = !0;\r\n                for (const n of e) {\r\n                    if (n.isBetterThanOrEqualTo(r)) {\r\n                        t = !1;\r\n                        break\r\n                    }\r\n                    r.isBetterThanOrEqualTo(n) && (e = e.filter(t => t !== n))\r\n                }\r\n                t && e.push(r)\r\n            }\r\n            return e\r\n        }\r\n    }\r\n    class Hr {\r\n        constructor() {}\r\n        static encodeBytes(t) {\r\n            return Hr.encode(t, Hr.DEFAULT_EC_PERCENT, Hr.DEFAULT_AZTEC_LAYERS)\r\n        }\r\n        static encode(t, e, r) {\r\n            let n, i, s, a, l, h = new Ur(t).encode(),\r\n                    c = f.truncDivision(h.getSize() * e, 100) + 11,\r\n                    u = h.getSize() + c;\r\n            if (r !== Hr.DEFAULT_AZTEC_LAYERS) {\r\n                if (n = r < 0, (i = Math.abs(r)) > (n ? Hr.MAX_NB_BITS_COMPACT : Hr.MAX_NB_BITS)) throw new o(S.format(\"Illegal value %s for layers\", r));\r\n                let t = (s = Hr.totalBitsInLayer(i, n)) - s % (a = Hr.WORD_SIZE[i]);\r\n                if ((l = Hr.stuffBits(h, a)).getSize() + c > t) throw new o(\"Data to large for user specified layer\");\r\n                if (n && l.getSize() > 64 * a) throw new o(\"Data to large for user specified layer\")\r\n            } else {\r\n                a = 0, l = null;\r\n                for (let t = 0;; t++) {\r\n                    if (t > Hr.MAX_NB_BITS) throw new o(\"Data too large for an Aztec code\");\r\n                    if (i = (n = t <= 3) ? t + 1 : t, u > (s = Hr.totalBitsInLayer(i, n))) continue;\r\n                    null != l && a === Hr.WORD_SIZE[i] || (a = Hr.WORD_SIZE[i], l = Hr.stuffBits(h, a));\r\n                    let e = s - s % a;\r\n                    if (!(n && l.getSize() > 64 * a) && l.getSize() + c <= e) break\r\n                }\r\n            }\r\n            let d, g = Hr.generateCheckWords(l, s, a),\r\n                    w = l.getSize() / a,\r\n                    A = Hr.generateModeMessage(n, i, w),\r\n                    C = (n ? 11 : 14) + 4 * i,\r\n                    E = new Int32Array(C);\r\n            if (n) {\r\n                d = C;\r\n                for (let t = 0; t < E.length; t++) E[t] = t\r\n            } else {\r\n                d = C + 1 + 2 * f.truncDivision(f.truncDivision(C, 2) - 1, 15);\r\n                let t = f.truncDivision(C, 2),\r\n                        e = f.truncDivision(d, 2);\r\n                for (let r = 0; r < t; r++) {\r\n                    let n = r + f.truncDivision(r, 15);\r\n                    E[t - r - 1] = e - n - 1, E[t + r] = e + n + 1\r\n                }\r\n            }\r\n            let m = new T(d);\r\n            for (let t = 0, e = 0; t < i; t++) {\r\n                let r = 4 * (i - t) + (n ? 9 : 12);\r\n                for (let n = 0; n < r; n++) {\r\n                    let i = 2 * n;\r\n                    for (let s = 0; s < 2; s++) g.get(e + i + s) && m.set(E[2 * t + s], E[2 * t + n]), g.get(e + 2 * r + i + s) && m.set(E[2 * t + n], E[C - 1 - 2 * t - s]), g.get(e + 4 * r + i + s) && m.set(E[C - 1 - 2 * t - s], E[C - 1 - 2 * t - n]), g.get(e + 6 * r + i + s) && m.set(E[C - 1 - 2 * t - n], E[2 * t + s])\r\n                }\r\n                e += 8 * r\r\n            }\r\n            if (Hr.drawModeMessage(m, n, d, A), n) Hr.drawBullsEye(m, f.truncDivision(d, 2), 5);\r\n            else {\r\n                Hr.drawBullsEye(m, f.truncDivision(d, 2), 7);\r\n                for (let t = 0, e = 0; t < f.truncDivision(C, 2) - 1; t += 15, e += 16)\r\n                    for (let t = 1 & f.truncDivision(d, 2); t < d; t += 2) m.set(f.truncDivision(d, 2) - e, t), m.set(f.truncDivision(d, 2) + e, t), m.set(t, f.truncDivision(d, 2) - e), m.set(t, f.truncDivision(d, 2) + e)\r\n            }\r\n            let _ = new pr;\r\n            return _.setCompact(n), _.setSize(d), _.setLayers(i), _.setCodeWords(w), _.setMatrix(m), _\r\n        }\r\n        static drawBullsEye(t, e, r) {\r\n            for (let n = 0; n < r; n += 2)\r\n                for (let r = e - n; r <= e + n; r++) t.set(r, e - n), t.set(r, e + n), t.set(e - n, r), t.set(e + n, r);\r\n            t.set(e - r, e - r), t.set(e - r + 1, e - r), t.set(e - r, e - r + 1), t.set(e + r, e - r), t.set(e + r, e - r + 1), t.set(e + r, e + r - 1)\r\n        }\r\n        static generateModeMessage(t, e, r) {\r\n            let n = new w;\r\n            return t ? (n.appendBits(e - 1, 2), n.appendBits(r - 1, 6), n = Hr.generateCheckWords(n, 28, 4)) : (n.appendBits(e - 1, 5), n.appendBits(r - 1, 11), n = Hr.generateCheckWords(n, 40, 4)), n\r\n        }\r\n        static drawModeMessage(t, e, r, n) {\r\n            let i = f.truncDivision(r, 2);\r\n            if (e)\r\n                for (let e = 0; e < 7; e++) {\r\n                    let r = i - 3 + e;\r\n                    n.get(e) && t.set(r, i - 5), n.get(e + 7) && t.set(i + 5, r), n.get(20 - e) && t.set(r, i + 5), n.get(27 - e) && t.set(i - 5, r)\r\n                } else\r\n                for (let e = 0; e < 10; e++) {\r\n                    let r = i - 5 + e + f.truncDivision(e, 5);\r\n                    n.get(e) && t.set(r, i - 7), n.get(e + 10) && t.set(i + 7, r), n.get(29 - e) && t.set(r, i + 7), n.get(39 - e) && t.set(i - 7, r)\r\n                }\r\n        }\r\n        static generateCheckWords(t, e, r) {\r\n            let n = t.getSize() / r,\r\n                    i = new hr(Hr.getGF(r)),\r\n                    s = f.truncDivision(e, r),\r\n                    o = Hr.bitsToWords(t, r, s);\r\n            i.encode(o, s - n);\r\n            let a = e % r,\r\n                    l = new w;\r\n            l.appendBits(0, a);\r\n            for (const t of Array.from(o)) l.appendBits(t, r);\r\n            return l\r\n        }\r\n        static bitsToWords(t, e, r) {\r\n            let n, i, s = new Int32Array(r);\r\n            for (n = 0, i = t.getSize() / e; n < i; n++) {\r\n                let r = 0;\r\n                for (let i = 0; i < e; i++) r |= t.get(n * e + i) ? 1 << e - i - 1 : 0;\r\n                s[n] = r\r\n            }\r\n            return s\r\n        }\r\n        static getGF(t) {\r\n            switch (t) {\r\n                case 4:\r\n                    return q.AZTEC_PARAM;\r\n                case 6:\r\n                    return q.AZTEC_DATA_6;\r\n                case 8:\r\n                    return q.AZTEC_DATA_8;\r\n                case 10:\r\n                    return q.AZTEC_DATA_10;\r\n                case 12:\r\n                    return q.AZTEC_DATA_12;\r\n                default:\r\n                    throw new o(\"Unsupported word size \" + t)\r\n            }\r\n        }\r\n        static stuffBits(t, e) {\r\n            let r = new w,\r\n                    n = t.getSize(),\r\n                    i = (1 << e) - 2;\r\n            for (let s = 0; s < n; s += e) {\r\n                let o = 0;\r\n                for (let r = 0; r < e; r++)(s + r >= n || t.get(s + r)) && (o |= 1 << e - 1 - r);\r\n                (o & i) === i ? (r.appendBits(o & i, e), s--) : 0 == (o & i) ? (r.appendBits(1 | o, e), s--) : r.appendBits(o, e)\r\n            }\r\n            return r\r\n        }\r\n        static totalBitsInLayer(t, e) {\r\n            return ((e ? 88 : 112) + 16 * t) * t\r\n        }\r\n    }\r\n    Hr.DEFAULT_EC_PERCENT = 33, Hr.DEFAULT_AZTEC_LAYERS = 0, Hr.MAX_NB_BITS = 32, Hr.MAX_NB_BITS_COMPACT = 4, Hr.WORD_SIZE = Int32Array.from([4, 6, 6, 8, 8, 8, 8, 8, 8, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12]);\r\n    class Gr {\r\n        encode(t, e, r, n) {\r\n            return this.encodeWithHints(t, e, r, n, null)\r\n        }\r\n        encodeWithHints(t, e, r, n, i) {\r\n            let s = Sr.ISO_8859_1,\r\n                    o = Hr.DEFAULT_EC_PERCENT,\r\n                    a = Hr.DEFAULT_AZTEC_LAYERS;\r\n            return null != i && (i.has(lr.CHARACTER_SET) && (s = Ir.forName(i.get(lr.CHARACTER_SET).toString())), i.has(lr.ERROR_CORRECTION) && (o = f.parseInt(i.get(lr.ERROR_CORRECTION).toString())), i.has(lr.AZTEC_LAYERS) && (a = f.parseInt(i.get(lr.AZTEC_LAYERS).toString()))), Gr.encodeLayers(t, e, r, n, s, o, a)\r\n        }\r\n        static encodeLayers(t, e, r, n, i, s, a) {\r\n            if (e !== k.AZTEC) throw new o(\"Can only encode AZTEC, but got \" + e);\r\n            let l = Hr.encode(S.getBytes(t, i), s, a);\r\n            return Gr.renderResult(l, r, n)\r\n        }\r\n        static renderResult(t, e, r) {\r\n            let n = t.getMatrix();\r\n            if (null == n) throw new j;\r\n            let i = n.getWidth(),\r\n                    s = n.getHeight(),\r\n                    o = Math.max(e, i),\r\n                    a = Math.max(r, s),\r\n                    l = Math.min(o / i, a / s),\r\n                    h = (o - i * l) / 2,\r\n                    c = (a - s * l) / 2,\r\n                    u = new T(o, a);\r\n            for (let t = 0, e = c; t < s; t++, e += l)\r\n                for (let r = 0, s = h; r < i; r++, s += l) n.get(r, t) && u.setRegion(s, e, l, l);\r\n            return u\r\n        }\r\n    }\r\n    t.ArgumentException = s, t.ArithmeticException = K, t.AztecCode = pr, t.AztecCodeReader = dt, t.AztecCodeWriter = Gr, t.AztecDecoder = $, t.AztecDetector = ut, t.AztecDetectorResult = it, t.AztecEncoder = Hr, t.AztecHighLevelEncoder = Ur, t.AztecPoint = ct, t.BarcodeFormat = k, t.Binarizer = h, t.BinaryBitmap = a, t.BitArray = w, t.BitMatrix = T, t.BitSource = ae, t.BrowserAztecCodeReader = class extends L {\r\n        constructor(t = 500) {\r\n            super(new dt, t)\r\n        }\r\n    }, t.BrowserBarcodeReader = class extends L {\r\n        constructor(t = 500, e) {\r\n            super(new ee(e), t, e)\r\n        }\r\n    }, t.BrowserCodeReader = L, t.BrowserDatamatrixCodeReader = class extends L {\r\n        constructor(t = 500) {\r\n            super(new ue, t)\r\n        }\r\n    }, t.BrowserMultiFormatReader = class extends L {\r\n        constructor(t = null, e = 500) {\r\n            const r = new or;\r\n            r.setHints(t), super(r, e)\r\n        }\r\n        decodeBitmap(t) {\r\n            return this.reader.decodeWithState(t)\r\n        }\r\n    }, t.BrowserPDF417Reader = class extends L {\r\n        constructor(t = 500) {\r\n            super(new ir, t)\r\n        }\r\n    }, t.BrowserQRCodeReader = class extends L {\r\n        constructor(t = 500) {\r\n            super(new Me, t)\r\n        }\r\n    }, t.BrowserQRCodeSvgWriter = Cr, t.CharacterSetECI = m, t.ChecksumException = l, t.Code128Reader = ft, t.Code39Reader = wt, t.DataMatrixDecodedBitStreamParser = le, t.DataMatrixReader = ue, t.DecodeHintType = C, t.DecoderResult = z, t.DefaultGridSampler = lt, t.DetectorResult = nt, t.EAN13Reader = St, t.EncodeHintType = lr, t.Exception = i, t.FormatException = E, t.GenericGF = q, t.GenericGFPoly = Z, t.GlobalHistogramBinarizer = N, t.GridSampler = ot, t.GridSamplerInstance = ht, t.HTMLCanvasElementLuminanceSource = M, t.HybridBinarizer = D, t.ITFReader = At, t.IllegalArgumentException = o, t.IllegalStateException = j, t.InvertedLuminanceSource = O, t.LuminanceSource = y, t.MathUtils = tt, t.MultiFormatOneDReader = ee, t.MultiFormatReader = or, t.MultiFormatWriter = class {\r\n        encode(t, e, r, n, i) {\r\n            let s;\r\n            switch (e) {\r\n                case k.QR_CODE:\r\n                    s = new Er;\r\n                    break;\r\n                default:\r\n                    throw new o(\"No encoder available for format \" + e)\r\n            }\r\n            return s.encode(t, e, r, n, i)\r\n        }\r\n    }, t.NotFoundException = R, t.OneDReader = gt, t.PDF417DecodedBitStreamParser = rr, t.PDF417DecoderErrorCorrection = ke, t.PDF417Reader = ir, t.PDF417ResultMetadata = Ze, t.PerspectiveTransform = at, t.PlanarYUVLuminanceSource = mr, t.QRCodeByteMatrix = ur, t.QRCodeDataMask = Ce, t.QRCodeDecodedBitStreamParser = Ie, t.QRCodeDecoderErrorCorrectionLevel = de, t.QRCodeDecoderFormatInformation = ge, t.QRCodeEncoder = Ar, t.QRCodeEncoderQRCode = dr, t.QRCodeMaskUtil = cr, t.QRCodeMatrixUtil = fr, t.QRCodeMode = _e, t.QRCodeReader = Me, t.QRCodeVersion = Ae, t.QRCodeWriter = Er, t.RGBLuminanceSource = _r, t.RSS14Reader = te, t.RSSExpandedReader = Jt, t.ReaderException = sr, t.ReedSolomonDecoder = J, t.ReedSolomonEncoder = hr, t.ReedSolomonException = Q, t.Result = F, t.ResultMetadataType = W, t.ResultPoint = rt, t.StringUtils = S, t.UnsupportedOperationException = _, t.VideoInputDevice = b, t.WhiteRectangleDetector = st, t.WriterException = gr, t.ZXingArrays = g, t.ZXingCharset = Ir, t.ZXingInteger = f, t.ZXingStandardCharsets = Sr, t.ZXingStringBuilder = p, t.ZXingStringEncoding = I, t.ZXingSystem = c, Object.defineProperty(t, \"__esModule\", {\r\n        value: !0\r\n    })\r\n});\r\n/** Html5Qrcode **/\r\nvar _;\r\n(() => {\r\n    \"use strict\";\r\n    var e, t = {\r\n                d: (e, n) => {\r\n                    for (var r in n) t.o(n, r) && !t.o(e, r) && Object.defineProperty(e, r, {\r\n                        enumerable: !0,\r\n                        get: n[r]\r\n                    })\r\n                },\r\n                o: (e, t) => Object.prototype.hasOwnProperty.call(e, t),\r\n                r: e => {\r\n                    \"undefined\" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(e, Symbol.toStringTag, {\r\n                        value: \"Module\"\r\n                    }), Object.defineProperty(e, \"__esModule\", {\r\n                        value: !0\r\n                    })\r\n                }\r\n            },\r\n            n = {};\r\n    t.r(n), t.d(n, {\r\n        Html5Qrcode: () => b,\r\n        Html5QrcodeScanner: () => A,\r\n        Html5QrcodeSupportedFormats: () => e\r\n    }),\r\n            function(e) {\r\n                e[e.QR_CODE = 0] = \"QR_CODE\", e[e.AZTEC = 1] = \"AZTEC\", e[e.CODABAR = 2] = \"CODABAR\", e[e.CODE_39 = 3] = \"CODE_39\", e[e.CODE_93 = 4] = \"CODE_93\", e[e.CODE_128 = 5] = \"CODE_128\", e[e.DATA_MATRIX = 6] = \"DATA_MATRIX\", e[e.MAXICODE = 7] = \"MAXICODE\", e[e.ITF = 8] = \"ITF\", e[e.EAN_13 = 9] = \"EAN_13\", e[e.EAN_8 = 10] = \"EAN_8\", e[e.PDF_417 = 11] = \"PDF_417\", e[e.RSS_14 = 12] = \"RSS_14\", e[e.RSS_EXPANDED = 13] = \"RSS_EXPANDED\", e[e.UPC_A = 14] = \"UPC_A\", e[e.UPC_E = 15] = \"UPC_E\", e[e.UPC_EAN_EXTENSION = 16] = \"UPC_EAN_EXTENSION\"\r\n            }(e || (e = {}));\r\n    var r, i, o = new Map([\r\n                              [e.QR_CODE, \"QR_CODE\"],\r\n                              [e.AZTEC, \"AZTEC\"],\r\n                              [e.CODABAR, \"CODABAR\"],\r\n                              [e.CODE_39, \"CODE_39\"],\r\n                              [e.CODE_93, \"CODE_93\"],\r\n                              [e.CODE_128, \"CODE_128\"],\r\n                              [e.DATA_MATRIX, \"DATA_MATRIX\"],\r\n                              [e.MAXICODE, \"MAXICODE\"],\r\n                              [e.ITF, \"ITF\"],\r\n                              [e.EAN_13, \"EAN_13\"],\r\n                              [e.EAN_8, \"EAN_8\"],\r\n                              [e.PDF_417, \"PDF_417\"],\r\n                              [e.RSS_14, \"RSS_14\"],\r\n                              [e.RSS_EXPANDED, \"RSS_EXPANDED\"],\r\n                              [e.UPC_A, \"UPC_A\"],\r\n                              [e.UPC_E, \"UPC_E\"],\r\n                              [e.UPC_EAN_EXTENSION, \"UPC_EAN_EXTENSION\"]\r\n                          ]);\r\n\r\n    function a(t) {\r\n        return Object.values(e).includes(t)\r\n    }! function(e) {\r\n        e[e.UNKNOWN = 0] = \"UNKNOWN\", e[e.URL = 1] = \"URL\"\r\n    }(r || (r = {})),\r\n            function(e) {\r\n                e[e.SCAN_TYPE_CAMERA = 0] = \"SCAN_TYPE_CAMERA\", e[e.SCAN_TYPE_FILE = 1] = \"SCAN_TYPE_FILE\"\r\n            }(i || (i = {}));\r\n    var s, c = function() {\r\n                function e() {}\r\n                return e.ASSET_FILE_SCAN = \"\", e.ASSET_CAMERA_SCAN = \"\", e.GITHUB_PROJECT_URL = \"\", e.SCAN_DEFAULT_FPS = 2, e.DEFAULT_DISABLE_FLIP = !1, e\r\n            }(),\r\n            d = function() {\r\n                function e(e, t) {\r\n                    this.format = e, this.formatName = t\r\n                }\r\n                return e.prototype.toString = function() {\r\n                    return this.formatName\r\n                }, e.create = function(t) {\r\n                    if (!o.has(t)) throw t + \" not in html5QrcodeSupportedFormatsTextMap\";\r\n                    return new e(t, o.get(t))\r\n                }, e\r\n            }(),\r\n            l = function() {\r\n                function e() {}\r\n                return e.createFromText = function(e) {\r\n                    return {\r\n                        decodedText: e,\r\n                        result: {\r\n                            text: e\r\n                        }\r\n                    }\r\n                }, e.createFromQrcodeResult = function(e) {\r\n                    return {\r\n                        decodedText: e.text,\r\n                        result: e\r\n                    }\r\n                }, e\r\n            }();\r\n    ! function(e) {\r\n        e[e.UNKWOWN_ERROR = 0] = \"UNKWOWN_ERROR\", e[e.IMPLEMENTATION_ERROR = 1] = \"IMPLEMENTATION_ERROR\", e[e.NO_CODE_FOUND_ERROR = 2] = \"NO_CODE_FOUND_ERROR\"\r\n    }(s || (s = {}));\r\n    var h, u, p = function() {\r\n                function e() {}\r\n                return e.createFrom = function(e) {\r\n                    return {\r\n                        errorMessage: e,\r\n                        type: s.UNKWOWN_ERROR\r\n                    }\r\n                }, e\r\n            }(),\r\n            g = function() {\r\n                function e(e) {\r\n                    this.verbose = e\r\n                }\r\n                return e.prototype.log = function(e) {\r\n                    this.verbose && console.log(e)\r\n                }, e.prototype.warn = function(e) {\r\n                    this.verbose && console.warn(e)\r\n                }, e.prototype.logError = function(e, t) {\r\n                    (this.verbose || !0 === t) && console.error(e)\r\n                }, e.prototype.logErrors = function(e) {\r\n                    if (0 == e.length) throw \"Logger#logError called without arguments\";\r\n                    this.verbose && console.error(e)\r\n                }, e\r\n            }(),\r\n            S = function() {\r\n                function e() {}\r\n                return e.codeParseError = function(e) {\r\n                    return \"QR code parse error, error = \" + e\r\n                }, e.errorGettingUserMedia = function(e) {\r\n                    return \"Error getting userMedia, error = \" + e\r\n                }, e.onlyDeviceSupportedError = function() {\r\n                    return \"The device doesn't support navigator.mediaDevices , only supported cameraIdOrConfig in this case is deviceId parameter (string).\"\r\n                }, e.cameraStreamingNotSupported = function() {\r\n                    return \"Camera streaming not supported by the browser.\"\r\n                }, e.unableToQuerySupportedDevices = function() {\r\n                    return \"Unable to query supported devices, unknown error.\"\r\n                }, e.insecureContextCameraQueryError = function() {\r\n                    return \"Camera access is only supported in secure context like https or localhost.\"\r\n                }, e\r\n            }(),\r\n            m = function() {\r\n                function e() {}\r\n                return e.scanningStatus = function() {\r\n                    return \"Scanning\"\r\n                }, e.idleStatus = function() {\r\n                    return \"Idle\"\r\n                }, e.errorStatus = function() {\r\n                    return \"Error\"\r\n                }, e.permissionStatus = function() {\r\n                    return \"Permission\"\r\n                }, e.noCameraFoundErrorStatus = function() {\r\n                    return \"No Cameras\"\r\n                }, e.lastMatch = function(e) {\r\n                    return \"Last Match: \" + e\r\n                }, e.codeScannerTitle = function() {\r\n                    return \"Code Scanner\"\r\n                }, e.cameraPermissionTitle = function() {\r\n                    return \"Request Camera Permissions\"\r\n                }, e.cameraPermissionRequesting = function() {\r\n                    return \"Requesting camera permissions...\"\r\n                }, e.scanButtonStopScanningText = function() {\r\n                    return \"Stop Scanning\"\r\n                }, e.scanButtonStartScanningText = function() {\r\n                    return \"Start Scanning\"\r\n                }, e.textIfCameraScanSelected = function() {\r\n                    return \"Scan an Image File\"\r\n                }, e.textIfFileScanSelected = function() {\r\n                    return \"Scan using camera directly\"\r\n                }, e\r\n            }(),\r\n            f = function() {\r\n                function e() {}\r\n                return e.isMediaStreamConstraintsValid = function(e, t) {\r\n                    if (\"object\" != typeof e) {\r\n                        var n = typeof e;\r\n                        return t.logError(\"videoConstraints should be of type object, the object passed is of type \" + n + \".\", !0), !1\r\n                    }\r\n                    for (var r = new Set([\"autoGainControl\", \"channelCount\", \"echoCancellation\", \"latency\", \"noiseSuppression\", \"sampleRate\", \"sampleSize\", \"volume\"]), i = 0, o = Object.keys(e); i < o.length; i++) {\r\n                        var a = o[i];\r\n                        if (r.has(a)) return t.logError(a + \" is not supported videoConstaints.\", !0), !1\r\n                    }\r\n                    return !0\r\n                }, e\r\n            }(),\r\n            E = function() {\r\n                function t(t, n, r) {\r\n                    if (this.formatMap = new Map([\r\n                                                     [e.QR_CODE, ZXing.BarcodeFormat.QR_CODE],\r\n                                                     [e.AZTEC, ZXing.BarcodeFormat.AZTEC],\r\n                                                     [e.CODABAR, ZXing.BarcodeFormat.CODABAR],\r\n                                                     [e.CODE_39, ZXing.BarcodeFormat.CODE_39],\r\n                                                     [e.CODE_93, ZXing.BarcodeFormat.CODE_93],\r\n                                                     [e.CODE_128, ZXing.BarcodeFormat.CODE_128],\r\n                                                     [e.DATA_MATRIX, ZXing.BarcodeFormat.DATA_MATRIX],\r\n                                                     [e.MAXICODE, ZXing.BarcodeFormat.MAXICODE],\r\n                                                     [e.ITF, ZXing.BarcodeFormat.ITF],\r\n                                                     [e.EAN_13, ZXing.BarcodeFormat.EAN_13],\r\n                                                     [e.EAN_8, ZXing.BarcodeFormat.EAN_8],\r\n                                                     [e.PDF_417, ZXing.BarcodeFormat.PDF_417],\r\n                                                     [e.RSS_14, ZXing.BarcodeFormat.RSS_14],\r\n                                                     [e.RSS_EXPANDED, ZXing.BarcodeFormat.RSS_EXPANDED],\r\n                                                     [e.UPC_A, ZXing.BarcodeFormat.UPC_A],\r\n                                                     [e.UPC_E, ZXing.BarcodeFormat.UPC_E],\r\n                                                     [e.UPC_EAN_EXTENSION, ZXing.BarcodeFormat.UPC_EAN_EXTENSION]\r\n                                                 ]), this.reverseFormatMap = this.createReverseFormatMap(), !ZXing) throw \"Use html5qrcode.min.js without edit, ZXing not found.\";\r\n                    this.verbose = n, this.logger = r;\r\n                    var i = this.createZXingFormats(t),\r\n                            o = new Map;\r\n                    o.set(ZXing.DecodeHintType.POSSIBLE_FORMATS, i), this.hints = o\r\n                }\r\n                return t.prototype.decode = function(e) {\r\n                    var t = new ZXing.MultiFormatReader(this.verbose, this.hints),\r\n                            n = new ZXing.HTMLCanvasElementLuminanceSource(e),\r\n                            r = new ZXing.BinaryBitmap(new ZXing.HybridBinarizer(n)),\r\n                            i = t.decode(r);\r\n                    return {\r\n                        text: i.text,\r\n                        format: d.create(this.toHtml5QrcodeSupportedFormats(i.format))\r\n                    }\r\n                }, t.prototype.createReverseFormatMap = function() {\r\n                    var e = new Map;\r\n                    return this.formatMap.forEach((function(t, n, r) {\r\n                        e.set(t, n)\r\n                    })), e\r\n                }, t.prototype.toHtml5QrcodeSupportedFormats = function(e) {\r\n                    if (!this.reverseFormatMap.has(e)) throw \"reverseFormatMap doesn't have \" + e;\r\n                    return this.reverseFormatMap.get(e)\r\n                }, t.prototype.createZXingFormats = function(e) {\r\n                    for (var t = [], n = 0, r = e; n < r.length; n++) {\r\n                        var i = r[n];\r\n                        this.formatMap.has(i) ? t.push(this.formatMap.get(i)) : this.logger.logError(i + \" is not supported byZXingHtml5QrcodeShim\")\r\n                    }\r\n                    return t\r\n                }, t\r\n            }(),\r\n            y = function() {\r\n                function e(e, t, n) {\r\n                    this.EXECUTIONS_TO_REPORT_PERFORMANCE = 100, this.executions = 0, this.executionResults = [], this.verbose = t, this.zxingDecorderDelegate = new E(e, t, n)\r\n                }\r\n                return e.prototype.decode = function(e) {\r\n                    var t = performance.now();\r\n                    try {\r\n                        return this.zxingDecorderDelegate.decode(e)\r\n                    } catch (e) {\r\n                        throw e\r\n                    } finally {\r\n                        if (this.verbose) {\r\n                            var n = performance.now() - t;\r\n                            this.executionResults.push(n), this.executions++, this.possiblyFlushPerformanceReport()\r\n                        }\r\n                    }\r\n                }, e.prototype.possiblyFlushPerformanceReport = function() {\r\n                    if (!(this.executions < this.EXECUTIONS_TO_REPORT_PERFORMANCE)) {\r\n                        for (var e = 0, t = 0, n = this.executionResults; t < n.length; t++) e += n[t];\r\n                        var r = e / this.executionResults.length;\r\n                        console.log(r + \" ms for \" + this.executionResults.length + \" last runs.\"), this.executions = 0, this.executionResults = []\r\n                    }\r\n                }, e\r\n            }(),\r\n            v = (h = function(e, t) {\r\n                return (h = Object.setPrototypeOf || {\r\n                            __proto__: []\r\n                        }\r\n                            instanceof Array && function(e, t) {\r\n                            e.__proto__ = t\r\n                        } || function(e, t) {\r\n                            for (var n in t) Object.prototype.hasOwnProperty.call(t, n) && (e[n] = t[n])\r\n                        })(e, t)\r\n            }, function(e, t) {\r\n                function n() {\r\n                    this.constructor = e\r\n                }\r\n                h(e, t), e.prototype = null === t ? Object.create(t) : (n.prototype = t.prototype, new n)\r\n            }),\r\n            C = function(e) {\r\n                function t() {\r\n                    return null !== e && e.apply(this, arguments) || this\r\n                }\r\n                return v(t, e), t.DEFAULT_WIDTH = 300, t.DEFAULT_WIDTH_OFFSET = 2, t.FILE_SCAN_MIN_HEIGHT = 300, t.MIN_QR_BOX_SIZE = 50, t.SHADED_LEFT = 1, t.SHADED_RIGHT = 2, t.SHADED_TOP = 3, t.SHADED_BOTTOM = 4, t.SHADED_REGION_CLASSNAME = \"qr-shaded-region\", t.VERBOSE = !1, t.BORDER_SHADER_DEFAULT_COLOR = \"#ffffff\", t.BORDER_SHADER_MATCH_COLOR = \"rgb(90, 193, 56)\", t\r\n            }(c),\r\n            T = function() {\r\n                function e(e, t) {\r\n                    this.logger = t, this.fps = C.SCAN_DEFAULT_FPS, e ? (e.fps && (this.fps = e.fps), this.disableFlip = !0 === e.disableFlip, this.qrbox = e.qrbox, this.aspectRatio = e.aspectRatio, this.videoConstraints = e.videoConstraints) : this.disableFlip = C.DEFAULT_DISABLE_FLIP\r\n                }\r\n                return e.prototype.isMediaStreamConstraintsValid = function() {\r\n                    return this.videoConstraints ? f.isMediaStreamConstraintsValid(this.videoConstraints, this.logger) : (this.logger.logError(\"Empty videoConstraints\", !0), !1)\r\n                }, e.prototype.isShadedBoxEnabled = function() {\r\n                    return void 0 !== this.qrbox\r\n                }, e.create = function(t, n) {\r\n                    return new e(t, n)\r\n                }, e\r\n            }(),\r\n            b = function() {\r\n                function t(e, t) {\r\n                    if (!document.getElementById(e)) throw \"HTML Element with id=\" + e + \" not found\";\r\n                    this.elementId = e, this.verbose = !1, \"boolean\" == typeof t ? this.verbose = !0 === t : t && (this.verbose = !0 === t.verbose), this.logger = new g(this.verbose), this.qrcode = new y(this.getSupportedFormats(t), this.verbose, this.logger), this.foreverScanTimeout, this.localMediaStream, this.shouldScan = !0, this.isScanning = !1\r\n                }\r\n                return t.prototype.start = function(e, t, n, r) {\r\n                    if (!e) throw \"cameraIdOrConfig is required\";\r\n                    if (!n || \"function\" != typeof n) throw \"qrCodeSuccessCallback is required and should be a function.\";\r\n                    r || (r = this.verbose ? this.logger.log : function() {});\r\n                    var i = T.create(t, this.logger);\r\n                    this.clearElement();\r\n                    var o = !1;\r\n                    i.videoConstraints && (i.isMediaStreamConstraintsValid() ? o = !0 : this.logger.logError(\"'videoConstraints' is not valid 'MediaStreamConstraints, it will be ignored.'\", !0));\r\n                    var a = o,\r\n                            s = i.isShadedBoxEnabled(),\r\n                            c = document.getElementById(this.elementId),\r\n                            d = c.clientWidth ? c.clientWidth : C.DEFAULT_WIDTH;\r\n                    if (c.style.position = \"relative\", this.shouldScan = !0, this.element = c, s) {\r\n                        var l = i.qrbox;\r\n                        if (l < C.MIN_QR_BOX_SIZE) throw \"minimum size of 'config.qrbox' is \" + C.MIN_QR_BOX_SIZE + \"px.\";\r\n                        if (l > d) throw \"'config.qrbox' should not be greater than the width of the HTML element.\"\r\n                    }\r\n                    var h = this;\r\n                    return new Promise((function(t, o) {\r\n                        var s = a ? i.videoConstraints : h.createVideoConstraints(e);\r\n                        if (s)\r\n                            if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) navigator.mediaDevices.getUserMedia({\r\n                                                                                                                                       audio: !1,\r\n                                                                                                                                       video: s\r\n                                                                                                                                   }).then((function(e) {\r\n                                h.onMediaStreamReceived(e, i, a, d, n, r).then((function(e) {\r\n                                    h.isScanning = !0, t(null)\r\n                                })).catch(o)\r\n                            })).catch((function(e) {\r\n                                o(S.errorGettingUserMedia(e))\r\n                            }));\r\n                            else if (navigator.getUserMedia) {\r\n                                if (\"string\" != typeof e) throw S.onlyDeviceSupportedError();\r\n                                var c = {\r\n                                    video: s\r\n                                };\r\n                                navigator.getUserMedia(c, (function(e) {\r\n                                    h.onMediaStreamReceived(e, i, a, d, n, r).then((function(e) {\r\n                                        h.isScanning = !0, t(null)\r\n                                    })).catch((function(e) {\r\n                                        o(S.errorGettingUserMedia(e))\r\n                                    }))\r\n                                }), (function(e) {\r\n                                    o(S.errorGettingUserMedia(e))\r\n                                }))\r\n                            } else o(S.cameraStreamingNotSupported());\r\n                        else o(\"videoConstraints should be defined\")\r\n                    }))\r\n                }, t.prototype.stop = function() {\r\n                    var e = this;\r\n                    return this.shouldScan = !1, this.foreverScanTimeout && clearTimeout(this.foreverScanTimeout), new Promise((function(t, n) {\r\n                        var r = function() {\r\n                            e.localMediaStream = void 0, e.element && (e.element.removeChild(e.videoElement), e.element.removeChild(e.canvasElement)),\r\n                                    function() {\r\n                                        if (e.element)\r\n                                            for (; e.element.getElementsByClassName(C.SHADED_REGION_CLASSNAME).length;) {\r\n                                                var t = e.element.getElementsByClassName(C.SHADED_REGION_CLASSNAME)[0];\r\n                                                e.element.removeChild(t)\r\n                                            }\r\n                                    }(), e.isScanning = !1, e.qrRegion && (e.qrRegion = void 0), e.context && (e.context = void 0), t()\r\n                        };\r\n                        e.localMediaStream || r();\r\n                        var i = e.localMediaStream.getVideoTracks().length,\r\n                                o = 0;\r\n                        e.localMediaStream.getVideoTracks().forEach((function(t) {\r\n                            e.localMediaStream.removeTrack(t), t.stop(), ++o >= i && r()\r\n                        }))\r\n                    }))\r\n                }, t.prototype.scanFile = function(e, t) {\r\n                    return this.scanFileV2(e, t).then((function(e) {\r\n                        return e.decodedText\r\n                    }))\r\n                }, t.prototype.scanFileV2 = function(e, t) {\r\n                    var n = this;\r\n                    if (!(e && e instanceof File)) throw \"imageFile argument is mandatory and should be instance of File. Use 'event.target.files[0]'.\";\r\n                    if (void 0 === t && (t = !0), this.isScanning) throw \"Close ongoing scan before scanning a file.\";\r\n                    return new Promise((function(r, i) {\r\n                        n.possiblyCloseLastScanImageFile(), n.clearElement(), n.lastScanImageFile = URL.createObjectURL(e);\r\n                        var o = new Image;\r\n                        o.onload = function() {\r\n                            var e = o.width,\r\n                                    a = o.height,\r\n                                    s = document.getElementById(n.elementId),\r\n                                    c = s.clientWidth ? s.clientWidth : C.DEFAULT_WIDTH,\r\n                                    d = Math.max(s.clientHeight ? s.clientHeight : a, C.FILE_SCAN_MIN_HEIGHT),\r\n                                    h = n.computeCanvasDrawConfig(e, a, c, d);\r\n                            if (t) {\r\n                                var u = n.createCanvasElement(c, d, \"qr-canvas-visible\");\r\n                                u.style.display = \"inline-block\", s.appendChild(u);\r\n                                var p = u.getContext(\"2d\");\r\n                                if (!p) throw \"Unable to get 2d context from canvas\";\r\n                                p.canvas.width = c, p.canvas.height = d, p.drawImage(o, 0, 0, e, a, h.x, h.y, h.width, h.height)\r\n                            }\r\n                            var g = n.createCanvasElement(h.width, h.height);\r\n                            s.appendChild(g);\r\n                            var S = g.getContext(\"2d\");\r\n                            if (!S) throw \"Unable to get 2d context from canvas\";\r\n                            S.canvas.width = h.width, S.canvas.height = h.height, S.drawImage(o, 0, 0, e, a, 0, 0, h.width, h.height);\r\n                            try {\r\n                                var m = n.qrcode.decode(g);\r\n                                r(l.createFromQrcodeResult(m))\r\n                            } catch (e) {\r\n                                i(\"QR code parse error, error = \" + e)\r\n                            }\r\n                        }, o.onerror = i, o.onabort = i, o.onstalled = i, o.onsuspend = i, o.src = URL.createObjectURL(e)\r\n                    }))\r\n                }, t.prototype.clear = function() {\r\n                    this.clearElement()\r\n                }, t.getCameras = function() {\r\n                    if (navigator.mediaDevices) return t.getCamerasFromMediaDevices();\r\n                    var e = MediaStreamTrack;\r\n                    if (MediaStreamTrack && e.getSources) return t.getCamerasFrmoMediaStreamTrack();\r\n                    var n = S.unableToQuerySupportedDevices();\r\n                    return function() {\r\n                        if (\"https:\" === location.protocol) return !0;\r\n                        var e = location.host.split(\":\")[0];\r\n                        return \"127.0.0.1\" === e || \"localhost\" === e\r\n                    }() || (n = S.insecureContextCameraQueryError()), Promise.reject(n)\r\n                }, t.prototype.getRunningTrackCapabilities = function() {\r\n                    if (null == this.localMediaStream) throw \"Scanning is not in running state, call this API only when QR code scanning using camera is in running state.\";\r\n                    if (0 === this.localMediaStream.getVideoTracks().length) throw \"No video tracks found\";\r\n                    return this.localMediaStream.getVideoTracks()[0].getCapabilities()\r\n                }, t.prototype.applyVideoConstraints = function(e) {\r\n                    var t = this;\r\n                    if (!e) throw \"videoConstaints is required argument.\";\r\n                    if (!f.isMediaStreamConstraintsValid(e, this.logger)) throw \"invalid videoConstaints passed, check logs for more details\";\r\n                    if (null == this.localMediaStream) throw \"Scanning is not in running state, call this API only when QR code scanning using camera is in running state.\";\r\n                    if (0 == this.localMediaStream.getVideoTracks().length) throw \"No video tracks found\";\r\n                    return new Promise((function(n, r) {\r\n                        \"aspectRatio\" in e ? r(\"Chaning 'aspectRatio' in run-time is not yet supported.\") : t.localMediaStream.getVideoTracks()[0].applyConstraints(e).then((function(e) {\r\n                            n(e)\r\n                        })).catch((function(e) {\r\n                            r(e)\r\n                        }))\r\n                    }))\r\n                }, t.getCamerasFromMediaDevices = function() {\r\n                    return new Promise((function(e, t) {\r\n                        navigator.mediaDevices.getUserMedia({\r\n                                                                audio: !1,\r\n                                                                video: !0\r\n                                                            }).then((function(n) {\r\n                            navigator.mediaDevices.enumerateDevices().then((function(t) {\r\n                                for (var r = [], i = 0, o = t; i < o.length; i++) {\r\n                                    var a = o[i];\r\n                                    \"videoinput\" === a.kind && r.push({\r\n                                                                          id: a.deviceId,\r\n                                                                          label: a.label\r\n                                                                      })\r\n                                }! function(e) {\r\n                                    for (var t = 0, n = e.getVideoTracks(); t < n.length; t++) {\r\n                                        var r = n[t];\r\n                                        r.enabled = !1, r.stop(), e.removeTrack(r)\r\n                                    }\r\n                                }(n), e(r)\r\n                            })).catch((function(e) {\r\n                                t(e.name + \" : \" + e.message)\r\n                            }))\r\n                        })).catch((function(e) {\r\n                            t(e.name + \" : \" + e.message)\r\n                        }))\r\n                    }))\r\n                }, t.getCamerasFrmoMediaStreamTrack = function() {\r\n                    return new Promise((function(e, t) {\r\n                        MediaStreamTrack.getSources((function(t) {\r\n                            for (var n = [], r = 0, i = t; r < i.length; r++) {\r\n                                var o = i[r];\r\n                                \"video\" === o.kind && n.push({\r\n                                                                 id: o.id,\r\n                                                                 label: o.label\r\n                                                             })\r\n                            }\r\n                            e(n)\r\n                        }))\r\n                    }))\r\n                }, t.prototype.getSupportedFormats = function(t) {\r\n                    var n = [e.QR_CODE, e.AZTEC, e.CODABAR, e.CODE_39, e.CODE_93, e.CODE_128, e.DATA_MATRIX, e.MAXICODE, e.ITF, e.EAN_13, e.EAN_8, e.PDF_417, e.RSS_14, e.RSS_EXPANDED, e.UPC_A, e.UPC_E, e.UPC_EAN_EXTENSION];\r\n                    if (!t || \"boolean\" == typeof t) return n;\r\n                    if (!t.formatsToSupport) return n;\r\n                    if (!Array.isArray(t.formatsToSupport)) throw \"configOrVerbosityFlag.formatsToSupport should be undefined or an array.\";\r\n                    if (0 === t.formatsToSupport.length) throw \"Atleast 1 formatsToSupport is needed.\";\r\n                    for (var r = [], i = 0, o = t.formatsToSupport; i < o.length; i++) {\r\n                        var s = o[i];\r\n                        a(s) ? r.push(s) : this.logger.warn(\"Invalid format: \" + s + \" passed in config, ignoring.\")\r\n                    }\r\n                    if (0 === r.length) throw \"None of formatsToSupport match supported values.\";\r\n                    return r\r\n                }, t.prototype.setupUi = function(e, t, n) {\r\n                    var r = n.qrbox;\r\n                    r > t && this.logger.warn(\"[Html5Qrcode] config.qrboxsize is greater than video height. Shading will be ignored\");\r\n                    var i = n.isShadedBoxEnabled() && r <= t,\r\n                            o = {\r\n                                x: 0,\r\n                                y: 0,\r\n                                width: e,\r\n                                height: t\r\n                            },\r\n                            a = i ? this.getShadedRegionBounds(e, t, r) : o,\r\n                            s = this.createCanvasElement(a.width, a.height),\r\n                            c = s.getContext(\"2d\");\r\n                    c.canvas.width = a.width, c.canvas.height = a.height, this.element.append(s), i && this.possiblyInsertShadingElement(this.element, e, t, r), this.qrRegion = a, this.context = c, this.canvasElement = s\r\n                }, t.prototype.scanContext = function(e, t) {\r\n                    try {\r\n                        var n = this.qrcode.decode(this.canvasElement);\r\n                        return e(n.text, l.createFromQrcodeResult(n)), this.possiblyUpdateShaders(!0), !0\r\n                    } catch (e) {\r\n                        this.possiblyUpdateShaders(!1);\r\n                        var r = S.codeParseError(e);\r\n                        return t(r, p.createFrom(r)), !1\r\n                    }\r\n                }, t.prototype.foreverScan = function(e, t, n) {\r\n                    var r = this;\r\n                    if (this.shouldScan) {\r\n                        if (this.localMediaStream) {\r\n                            var i = this.videoElement,\r\n                                    o = i.videoWidth / i.clientWidth,\r\n                                    a = i.videoHeight / i.clientHeight;\r\n                            if (!this.qrRegion) throw \"qrRegion undefined when localMediaStream is ready.\";\r\n                            var s = this.qrRegion.width * o,\r\n                                    c = this.qrRegion.height * a,\r\n                                    d = this.qrRegion.x * o,\r\n                                    l = this.qrRegion.y * a;\r\n                            this.context.drawImage(i, d, l, s, c, 0, 0, this.qrRegion.width, this.qrRegion.height), this.scanContext(t, n) || !0 === e.disableFlip || (this.context.translate(this.context.canvas.width, 0), this.context.scale(-1, 1), this.scanContext(t, n))\r\n                        }\r\n                        this.foreverScanTimeout = setTimeout((function() {\r\n                            r.foreverScan(e, t, n)\r\n                        }), this.getTimeoutFps(e.fps))\r\n                    }\r\n                }, t.prototype.onMediaStreamReceived = function(e, t, n, r, i, o) {\r\n                    var a = this,\r\n                            s = this;\r\n                    return new Promise((function(c, d) {\r\n                        var l = function() {\r\n                            var n = a.createVideoElement(r);\r\n                            s.element.append(n), n.onabort = d, n.onerror = d, n.onplaying = function() {\r\n                                var e = n.clientWidth,\r\n                                        r = n.clientHeight;\r\n                                s.setupUi(e, r, t), s.foreverScan(t, i, o), c(null)\r\n                            }, n.srcObject = e, n.play(), s.videoElement = n\r\n                        };\r\n                        if (s.localMediaStream = e, n || !t.aspectRatio) l();\r\n                        else {\r\n                            var h = {\r\n                                aspectRatio: t.aspectRatio\r\n                            };\r\n                            e.getVideoTracks()[0].applyConstraints(h).then((function(e) {\r\n                                return l()\r\n                            })).catch((function(e) {\r\n                                s.logger.logErrors([\"[Html5Qrcode] Constriants could not be satisfied, ignoring constraints\", e]), l()\r\n                            }))\r\n                        }\r\n                    }))\r\n                }, t.prototype.createVideoConstraints = function(e) {\r\n                    if (\"string\" == typeof e) return {\r\n                        deviceId: {\r\n                            exact: e\r\n                        }\r\n                    };\r\n                    if (\"object\" == typeof e) {\r\n                        var t = \"facingMode\",\r\n                                n = {\r\n                                    user: !0,\r\n                                    environment: !0\r\n                                },\r\n                                r = \"exact\",\r\n                                i = function(e) {\r\n                                    if (e in n) return !0;\r\n                                    throw \"config has invalid 'facingMode' value = '\" + e + \"'\"\r\n                                },\r\n                                o = Object.keys(e);\r\n                        if (1 !== o.length) throw \"'cameraIdOrConfig' object should have exactly 1 key, if passed as an object, found \" + o.length + \" keys\";\r\n                        var a = Object.keys(e)[0];\r\n                        if (a !== t && \"deviceId\" !== a) throw \"Only 'facingMode' and 'deviceId'  are supported for 'cameraIdOrConfig'\";\r\n                        if (a !== t) {\r\n                            var s = e.deviceId;\r\n                            if (\"string\" == typeof s) return {\r\n                                deviceId: s\r\n                            };\r\n                            if (\"object\" == typeof s) {\r\n                                if (r in s) return {\r\n                                    deviceId: {\r\n                                        exact: s.exact\r\n                                    }\r\n                                };\r\n                                throw \"'deviceId' should be string or object with exact as key.\"\r\n                            }\r\n                            throw \"Invalid type of 'deviceId' = \" + typeof s\r\n                        }\r\n                        var c = e.facingMode;\r\n                        if (\"string\" == typeof c) {\r\n                            if (i(c)) return {\r\n                                facingMode: c\r\n                            }\r\n                        } else {\r\n                            if (\"object\" != typeof c) throw \"Invalid type of 'facingMode' = \" + typeof c;\r\n                            if (!(r in c)) throw \"'facingMode' should be string or object with exact as key.\";\r\n                            if (i(c.exact)) return {\r\n                                facingMode: {\r\n                                    exact: c.exact\r\n                                }\r\n                            }\r\n                        }\r\n                    }\r\n                    throw \"Invalid type of 'cameraIdOrConfig' = \" + typeof e\r\n                }, t.prototype.computeCanvasDrawConfig = function(e, t, n, r) {\r\n                    if (e <= n && t <= r) return {\r\n                        x: (n - e) / 2,\r\n                        y: (r - t) / 2,\r\n                        width: e,\r\n                        height: t\r\n                    };\r\n                    var i = e,\r\n                            o = t;\r\n                    return e > n && (t *= n / e, e = n), t > r && (e *= r / t, t = r), this.logger.log(\"Image downsampled from \" + i + \"X\" + o + \" to \" + e + \"X\" + t + \".\"), this.computeCanvasDrawConfig(e, t, n, r)\r\n                }, t.prototype.clearElement = function() {\r\n                    if (this.isScanning) throw \"Cannot clear while scan is ongoing, close it first.\";\r\n                    var e = document.getElementById(this.elementId);\r\n                    e && (e.innerHTML = \"\")\r\n                }, t.prototype.createVideoElement = function(e) {\r\n                    var t = document.createElement(\"video\");\r\n                    return t.style.width = e + \"px\", t.muted = !0, t.setAttribute(\"muted\", \"true\"), t.playsInline = !0, t\r\n                }, t.prototype.possiblyUpdateShaders = function(e) {\r\n                    this.qrMatch !== e && (this.hasBorderShaders && this.borderShaders && this.borderShaders.length && this.borderShaders.forEach((function(t) {\r\n                        t.style.backgroundColor = e ? C.BORDER_SHADER_MATCH_COLOR : C.BORDER_SHADER_DEFAULT_COLOR\r\n                    })), this.qrMatch = e)\r\n                }, t.prototype.possiblyCloseLastScanImageFile = function() {\r\n                    this.lastScanImageFile && (URL.revokeObjectURL(this.lastScanImageFile), this.lastScanImageFile = void 0)\r\n                }, t.prototype.createCanvasElement = function(e, t, n) {\r\n                    var r = e,\r\n                            i = t,\r\n                            o = document.createElement(\"canvas\");\r\n                    return o.style.width = r + \"px\", o.style.height = i + \"px\", o.style.display = \"none\", o.id = null == n ? \"qr-canvas\" : n, o\r\n                }, t.prototype.getShadedRegionBounds = function(e, t, n) {\r\n                    if (n > e || n > t) throw \"'config.qrbox' should not be greater than the width and height of the HTML element.\";\r\n                    return {\r\n                        x: (e - n) / 2,\r\n                        y: (t - n) / 2,\r\n                        width: n,\r\n                        height: n\r\n                    }\r\n                }, t.prototype.possiblyInsertShadingElement = function(e, t, n, r) {\r\n                    if (!(t - r < 1 || n - r < 1)) {\r\n                        var i = document.createElement(\"div\");\r\n                        if (i.style.position = \"absolute\", i.style.borderLeft = (t - r) / 2 + \"px solid #0000007a\", i.style.borderRight = (t - r) / 2 + \"px solid #0000007a\", i.style.borderTop = (n - r) / 2 + \"px solid #0000007a\", i.style.borderBottom = (n - r) / 2 + \"px solid #0000007a\", i.style.boxSizing = \"border-box\", i.style.top = \"0px\", i.style.bottom = \"0px\", i.style.left = \"0px\", i.style.right = \"0px\", i.id = \"\" + C.SHADED_REGION_CLASSNAME, t - r < 11 || n - r < 11) this.hasBorderShaders = !1;\r\n                        else {\r\n                            var o = 40;\r\n                            this.insertShaderBorders(i, o, 5, -5, 0, !0), this.insertShaderBorders(i, o, 5, -5, 0, !1), this.insertShaderBorders(i, o, 5, r + 5, 0, !0), this.insertShaderBorders(i, o, 5, r + 5, 0, !1), this.insertShaderBorders(i, 5, 45, -5, -5, !0), this.insertShaderBorders(i, 5, 45, r + 5 - o, -5, !0), this.insertShaderBorders(i, 5, 45, -5, -5, !1), this.insertShaderBorders(i, 5, 45, r + 5 - o, -5, !1), this.hasBorderShaders = !0\r\n                        }\r\n                        e.append(i)\r\n                    }\r\n                }, t.prototype.insertShaderBorders = function(e, t, n, r, i, o) {\r\n                    var a = document.createElement(\"div\");\r\n                    a.style.position = \"absolute\", a.style.backgroundColor = C.BORDER_SHADER_DEFAULT_COLOR, a.style.width = t + \"px\", a.style.height = n + \"px\", a.style.top = r + \"px\", o ? a.style.left = i + \"px\" : a.style.right = i + \"px\", this.borderShaders || (this.borderShaders = []), this.borderShaders.push(a), e.appendChild(a)\r\n                }, t.prototype.getTimeoutFps = function(e) {\r\n                    return 1e3 / e\r\n                }, t\r\n            }();\r\n    ! function(e) {\r\n        e[e.STATUS_DEFAULT = 0] = \"STATUS_DEFAULT\", e[e.STATUS_SUCCESS = 1] = \"STATUS_SUCCESS\", e[e.STATUS_WARNING = 2] = \"STATUS_WARNING\"\r\n    }(u || (u = {}));\r\n    var A = function() {\r\n        function e(e, t, n) {\r\n            if (this.elementId = e, this.config = this.createConfig(t), this.verbose = !0 === n, !document.getElementById(e)) throw \"HTML Element with id=\" + e + \" not found\";\r\n            this.currentScanType = i.SCAN_TYPE_CAMERA, this.sectionSwapAllowed = !0, this.logger = new g(this.verbose)\r\n        }\r\n        return e.prototype.render = function(e, t) {\r\n            var n = this;\r\n            this.lastMatchFound = void 0, this.qrCodeSuccessCallback = function(t, r) {\r\n                if (e) e(t, r);\r\n                else {\r\n                    if (n.lastMatchFound === t) return;\r\n                    n.lastMatchFound = t, n.setHeaderMessage(m.lastMatch(t), u.STATUS_SUCCESS)\r\n                }\r\n            }, this.qrCodeErrorCallback = function(e, r) {\r\n                n.setStatus(m.scanningStatus()), t && t(e, r)\r\n            };\r\n            var r, i, o = document.getElementById(this.elementId);\r\n            if (!o) throw \"HTML Element with id=\" + this.elementId + \" not found\";\r\n            o.innerHTML = \"\", this.createBasicLayout(o), this.html5Qrcode = new b(this.getScanRegionId(), (r = this.config, i = this.verbose, {\r\n                formatsToSupport: r.formatsToSupport,\r\n                verbose: i\r\n            }))\r\n        }, e.prototype.clear = function() {\r\n            var e = this;\r\n            return this.html5Qrcode ? new Promise((function(t, n) {\r\n                e.html5Qrcode ? e.html5Qrcode.isScanning && e.html5Qrcode.stop().then((function(n) {\r\n                    var r;\r\n                    e.html5Qrcode ? (e.html5Qrcode.clear(), (r = document.getElementById(e.elementId)) && (r.innerHTML = \"\", e.resetBasicLayout(r)), t()) : t()\r\n                })).catch((function(t) {\r\n                    e.verbose && e.logger.logError(\"Unable to stop qrcode scanner\", t), n(t)\r\n                })) : t()\r\n            })) : Promise.resolve()\r\n        }, e.prototype.createConfig = function(e) {\r\n            return e ? (e.fps || (e.fps = c.SCAN_DEFAULT_FPS), e) : {\r\n                fps: c.SCAN_DEFAULT_FPS\r\n            }\r\n        }, e.prototype.createBasicLayout = function(e) {\r\n            e.style.position = \"relative\", e.style.padding = \"0px\", e.style.border = \"1px solid silver\", this.createHeader(e);\r\n            var t = document.createElement(\"div\"),\r\n                    n = this.getScanRegionId();\r\n            t.id = n, t.style.width = \"100%\", t.style.minHeight = \"100px\", t.style.textAlign = \"center\", e.appendChild(t), this.insertCameraScanImageToScanRegion();\r\n            var r = document.createElement(\"div\"),\r\n                    i = this.getDashboardId();\r\n            r.id = i, r.style.width = \"100%\", e.appendChild(r), this.setupInitialDashboard(r)\r\n        }, e.prototype.resetBasicLayout = function(e) {\r\n            e.style.border = \"none\"\r\n        }, e.prototype.setupInitialDashboard = function(e) {\r\n            this.createSection(e), this.createSectionControlPanel(), this.createSectionSwap()\r\n        }, e.prototype.createHeader = function(e) {\r\n            /*  var t = document.createElement(\"div\");\r\n              t.style.textAlign = \"left\", t.style.margin = \"0px\", t.style.padding = \"5px\", t.style.fontSize = \"20px\", t.style.borderBottom = \"1px solid rgba(192, 192, 192, 0.18)\", e.appendChild(t);\r\n              var n = document.createElement(\"span\"),\r\n                      r = document.createElement(\"a\");\r\n              r.innerHTML = /!*m.codeScannerTitle(), *!/r.href = c.GITHUB_PROJECT_URL, n.appendChild(r), t.appendChild(n);\r\n              var i = document.createElement(\"span\");\r\n              i.id = this.getStatusSpanId(), i.style.float = \"right\", i.style.padding = \"5px 7px\", i.style.fontSize = \"14px\", i.style.background = \"#dedede6b\", i.style.border = \"1px solid red\", i.style.color = \"rgb(17, 17, 17)\", t.appendChild(i), this.setStatus(m.idleStatus());*/\r\n            var o = document.createElement(\"div\");\r\n            o.id = this.getHeaderMessageContainerId(), o.style.display = \"none\", o.style.fontSize = \"12px\", o.style.padding = \"2px 10px\", e.appendChild(o)\r\n        }, e.prototype.createSection = function(e) {\r\n            var t = document.createElement(\"div\");\r\n            t.id = this.getDashboardSectionId(), t.style.width = \"100%\", t.style.padding = \"10px\", t.style.textAlign = \"left\", e.appendChild(t)\r\n        }, e.prototype.createSectionControlPanel = function() {\r\n            var e = document.getElementById(this.getDashboardSectionId()),\r\n                    t = document.createElement(\"div\");\r\n            e.appendChild(t);\r\n            var n = document.createElement(\"div\");\r\n            n.id = this.getDashboardSectionCameraScanRegionId(), n.style.display = this.currentScanType === i.SCAN_TYPE_CAMERA ? \"block\" : \"none\", t.appendChild(n);\r\n            var r = document.createElement(\"div\");\r\n            r.style.textAlign = \"center\";\r\n            var a = this;\r\n            setTimeout(function() {\r\n                a.setHeaderMessage(m.cameraPermissionRequesting()), b.getCameras().then((function(e) {\r\n                    a.resetHeaderMessage(), e && 0 !== e.length ? (a.renderCameraSelection(e)) : a.setStatus(m.noCameraFoundErrorStatus(), u.STATUS_WARNING)\r\n                })).catch((function(e) {\r\n                    o.disabled = !1, a.setHeaderMessage(e, u.STATUS_WARNING)\r\n                }))\r\n            });\r\n           /* var o = document.createElement(\"button\");\r\n            o.innerHTML = m.cameraPermissionTitle();\r\n            var a = this;\r\n            o.addEventListener(\"click\", (function() {\r\n                o.disabled = !0, a.setStatus(m.permissionStatus()), a.setHeaderMessage(m.cameraPermissionRequesting()), b.getCameras().then((function(e) {\r\n                    a.setStatus(m.idleStatus()), a.resetHeaderMessage(), e && 0 !== e.length ? (n.removeChild(r), a.renderCameraSelection(e)) : a.setStatus(m.noCameraFoundErrorStatus(), u.STATUS_WARNING)\r\n                })).catch((function(e) {\r\n                    o.disabled = !1, a.setStatus(m.idleStatus()), a.setHeaderMessage(e, u.STATUS_WARNING)\r\n                }))\r\n            })), r.appendChild(o), n.appendChild(r);*/\r\n            var s = document.createElement(\"div\");\r\n            s.id = this.getDashboardSectionFileScanRegionId(), s.style.textAlign = \"center\", s.style.display = this.currentScanType == i.SCAN_TYPE_CAMERA ? \"none\" : \"block\", t.appendChild(s);\r\n            var c = document.createElement(\"input\");\r\n            c.id = this.getFileScanInputId(), c.accept = \"image/*\", c.type = \"file\", c.style.width = \"200px\", c.disabled = this.currentScanType === i.SCAN_TYPE_CAMERA;\r\n            var d = document.createElement(\"span\");\r\n            d.innerHTML = \"&nbsp; Select Image\", s.appendChild(c), s.appendChild(d), c.addEventListener(\"change\", (function(e) {\r\n                if (!a.html5Qrcode) throw \"html5Qrcode not defined\";\r\n                if (null != e && null != e.target && a.currentScanType === i.SCAN_TYPE_FILE && 0 !== e.target.files.length) {\r\n                    var t = e.target.files[0];\r\n                    a.html5Qrcode.scanFileV2(t, !0).then((function(e) {\r\n                        a.resetHeaderMessage(), a.qrCodeSuccessCallback(e.decodedText, e)\r\n                    })).catch((function(e) {\r\n                        a.setStatus(m.errorStatus(), u.STATUS_WARNING), a.setHeaderMessage(e, u.STATUS_WARNING), a.qrCodeErrorCallback(e, p.createFrom(e))\r\n                    }))\r\n                }\r\n            }))\r\n        }, e.prototype.renderCameraSelection = function(e) {\r\n            var t = this,\r\n                    n = document.getElementById(this.getDashboardSectionCameraScanRegionId());\r\n            n.style.textAlign = \"center\";\r\n            var r = document.createElement(\"span\");\r\n            r.innerHTML = \"\", r.style.marginRight = \"10px\";\r\n            var i = document.createElement(\"select\");\r\n            i.id = this.getCameraSelectionId();\r\n            for (var o = 0, a = e; o < a.length; o++) {\r\n                var s = a[o],\r\n                        c = s.id,\r\n                        d = null == s.label ? c : s.label,\r\n                        l = document.createElement(\"option\");\r\n                l.value = c, l.innerHTML = d, i.appendChild(l)\r\n            }\r\n            r.appendChild(i), n.appendChild(r);\r\n            var h = document.createElement(\"span\"),\r\n                    p = document.createElement(\"button\");\r\n            p.innerHTML = m.scanButtonStartScanningText(), h.appendChild(p);\r\n            var g = document.createElement(\"button\");\r\n            setTimeout(function() { p.click() }, 100);  // Scannen gleich starten\r\n            g.innerHTML = m.scanButtonStopScanningText(), g.style.display = \"none\", g.disabled = !0, h.appendChild(g), n.appendChild(h), p.addEventListener(\"click\", (function(e) {\r\n                i.disabled = !0, p.disabled = !0, t.showHideScanTypeSwapLink(!1);\r\n                var n, r = i.value;\r\n                t.html5Qrcode.start({ facingMode: \"environment\" }, (n = t.config, {\r\n                    fps: n.fps,\r\n                    qrbox: n.qrbox,\r\n                    aspectRatio: n.aspectRatio,\r\n                    disableFlip: n.disableFlip,\r\n                    videoConstraints: n.videoConstraints\r\n                }), t.qrCodeSuccessCallback, t.qrCodeErrorCallback).then((function(e) {\r\n                    g.disabled = !1, g.style.display = \"inline-block\", p.style.display = \"none\", t.setStatus(m.scanningStatus())\r\n                })).catch((function(e) {\r\n                    t.showHideScanTypeSwapLink(!0), i.disabled = !1, p.disabled = !1, t.setStatus(m.idleStatus()), t.setHeaderMessage(e, u.STATUS_WARNING)\r\n                }))\r\n            })), g.addEventListener(\"click\", (function(e) {\r\n                if (!t.html5Qrcode) throw \"html5Qrcode not defined\";\r\n                g.disabled = !0, t.html5Qrcode.stop().then((function(e) {\r\n                    t.showHideScanTypeSwapLink(!0), i.disabled = !1, p.disabled = !1, g.style.display = \"none\", p.style.display = \"inline-block\", t.setStatus(m.idleStatus()), t.insertCameraScanImageToScanRegion()\r\n                })).catch((function(e) {\r\n                    g.disabled = !1, t.setStatus(m.errorStatus(), u.STATUS_WARNING), t.setHeaderMessage(e, u.STATUS_WARNING)\r\n                }))\r\n            }))\r\n        }, e.prototype.createSectionSwap = function() {\r\n            var e = this,\r\n                    t = m.textIfCameraScanSelected(),\r\n                    n = m.textIfFileScanSelected(),\r\n                    r = document.getElementById(this.getDashboardSectionId()),\r\n                    o = document.createElement(\"div\");\r\n            o.style.textAlign = \"center\";\r\n            var a = document.createElement(\"a\");\r\n            a.style.textDecoration = \"underline\", a.id = this.getDashboardSectionSwapLinkId(), a.innerHTML = this.currentScanType == i.SCAN_TYPE_CAMERA ? \"\" : n, a.href = \"#scan-using-file\", a.addEventListener(\"click\", (function() {\r\n                e.sectionSwapAllowed ? (e.setStatus(m.idleStatus()), e.resetHeaderMessage(), e.getFileScanInput().value = \"\", e.sectionSwapAllowed = !1, e.currentScanType === i.SCAN_TYPE_CAMERA ? (e.clearScanRegion(), e.getFileScanInput().disabled = !1, e.getCameraScanRegion().style.display = \"none\", e.getFileScanRegion().style.display = \"block\", a.innerHTML = n, e.currentScanType = i.SCAN_TYPE_FILE, e.insertFileScanImageToScanRegion()) : (e.clearScanRegion(), e.getFileScanInput().disabled = !0, e.getCameraScanRegion().style.display = \"block\", e.getFileScanRegion().style.display = \"none\", a.innerHTML = t, e.currentScanType = i.SCAN_TYPE_CAMERA, e.insertCameraScanImageToScanRegion()), e.sectionSwapAllowed = !0) : e.verbose && e.logger.logError(\"Section swap called when not allowed\")\r\n            })), o.appendChild(a), r.appendChild(o)\r\n        }, e.prototype.resetHeaderMessage = function() {\r\n            document.getElementById(this.getHeaderMessageContainerId()).style.display = \"none\"\r\n        }, e.prototype.setStatus = function(e, t) {\r\n        /*    t || (t = u.STATUS_DEFAULT);\r\n            var n = this.getStatusSpan();\r\n            switch (n.innerHTML = e, t) {\r\n                case u.STATUS_SUCCESS:\r\n                    n.style.background = \"#6aaf5042\", n.style.color = \"#477735\";\r\n                    break;\r\n                case u.STATUS_WARNING:\r\n                    n.style.background = \"#cb243124\", n.style.color = \"#cb2431\";\r\n                    break;\r\n                case u.STATUS_DEFAULT:\r\n                default:\r\n                    n.style.background = \"#eef\", n.style.color = \"rgb(17, 17, 17)\"\r\n            } */\r\n        }, e.prototype.setHeaderMessage = function(e, t) {\r\n            t || (t = u.STATUS_DEFAULT);\r\n            var n = this.getHeaderMessageDiv();\r\n            switch (n.innerHTML = e, n.style.display = \"block\", t) {\r\n                case u.STATUS_SUCCESS:\r\n                    n.style.background = \"#6aaf5042\", n.style.color = \"#477735\";\r\n                    break;\r\n                case u.STATUS_WARNING:\r\n                    n.style.background = \"#cb243124\", n.style.color = \"#cb2431\";\r\n                    break;\r\n                case u.STATUS_DEFAULT:\r\n                default:\r\n                    n.style.background = \"#00000000\", n.style.color = \"rgb(17, 17, 17)\"\r\n            }\r\n        }, e.prototype.showHideScanTypeSwapLink = function(e) {\r\n        //    !0 !== e && (e = !1), this.sectionSwapAllowed = e, this.getDashboardSectionSwapLink().style.display = e ? \"inline-block\" : \"none\"\r\n        }, e.prototype.insertCameraScanImageToScanRegion = function() {\r\n            var e = this,\r\n                    t = document.getElementById(this.getScanRegionId());\r\n            if (this.cameraScanImage) return t.innerHTML = \"<br>\", void t.appendChild(this.cameraScanImage);\r\n            this.cameraScanImage = new Image, this.cameraScanImage.onload = function(n) {\r\n                t.innerHTML = \"<br>\", t.appendChild(e.cameraScanImage)\r\n            }, this.cameraScanImage.width = 64, this.cameraScanImage.style.opacity = \"0.3\", this.cameraScanImage.src = c.ASSET_CAMERA_SCAN\r\n        }, e.prototype.insertFileScanImageToScanRegion = function() {\r\n            var e = this,\r\n                    t = document.getElementById(this.getScanRegionId());\r\n            if (this.fileScanImage) return t.innerHTML = \"<br>\", void t.appendChild(this.fileScanImage);\r\n            this.fileScanImage = new Image, this.fileScanImage.onload = function(n) {\r\n                t.innerHTML = \"<br>\", t.appendChild(e.fileScanImage)\r\n            }, this.fileScanImage.width = 64, this.fileScanImage.style.opacity = \"0.3\", this.fileScanImage.src = c.ASSET_FILE_SCAN\r\n        }, e.prototype.clearScanRegion = function() {\r\n            document.getElementById(this.getScanRegionId()).innerHTML = \"\"\r\n        }, e.prototype.getDashboardSectionId = function() {\r\n            return this.elementId + \"__dashboard_section\"\r\n        }, e.prototype.getDashboardSectionCameraScanRegionId = function() {\r\n            return this.elementId + \"__dashboard_section_csr\"\r\n        }, e.prototype.getDashboardSectionFileScanRegionId = function() {\r\n            return this.elementId + \"__dashboard_section_fsr\"\r\n        }, e.prototype.getDashboardSectionSwapLinkId = function() {\r\n            return this.elementId + \"__dashboard_section_swaplink\"\r\n        }, e.prototype.getScanRegionId = function() {\r\n            return this.elementId + \"__scan_region\"\r\n        }, e.prototype.getDashboardId = function() {\r\n            return this.elementId + \"__dashboard\"\r\n        }, e.prototype.getFileScanInputId = function() {\r\n            return this.elementId + \"__filescan_input\"\r\n        }, e.prototype.getStatusSpanId = function() {\r\n            return this.elementId + \"__status_span\"\r\n        }, e.prototype.getHeaderMessageContainerId = function() {\r\n            return this.elementId + \"__header_message\"\r\n        }, e.prototype.getCameraSelectionId = function() {\r\n            return this.elementId + \"__camera_selection\"\r\n        }, e.prototype.getCameraScanRegion = function() {\r\n            return document.getElementById(this.getDashboardSectionCameraScanRegionId())\r\n        }, e.prototype.getFileScanRegion = function() {\r\n            return document.getElementById(this.getDashboardSectionFileScanRegionId())\r\n        }, e.prototype.getFileScanInput = function() {\r\n            return document.getElementById(this.getFileScanInputId())\r\n        }, e.prototype.getDashboardSectionSwapLink = function() {\r\n            return document.getElementById(this.getDashboardSectionSwapLinkId())\r\n        }, e.prototype.getStatusSpan = function() {\r\n            return document.getElementById(this.getStatusSpanId())\r\n        }, e.prototype.getHeaderMessageDiv = function() {\r\n            return document.getElementById(this.getHeaderMessageContainerId())\r\n        }, e\r\n    }();\r\n    _ = n\r\n})();\r\n/**ref**/\r\n;\r\nvar Html5Qrcode = window._.Html5Qrcode;;\r\nvar Html5QrcodeScanner = window._.Html5QrcodeScanner;;\r\nvar Html5QrcodeSupportedFormats = window._.Html5QrcodeSupportedFormats;\n"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": -1,
          "_transferSize": 109311,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:11.650Z",
        "time": 152.8130000224337,
        "timings": {
          "blocked": 7.374000019162893,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0.23800000000000043,
          "wait": 141.61699995411186,
          "receive": 3.584000049158931,
          "_blocked_queueing": 1.7760000191628933,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_connectionId": "1726423",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "parser",
          "url": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513",
          "lineNumber": 1
        },
        "_priority": "High",
        "_resourceType": "script",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/ekat/WEB-RES/js/cropper.js_javaviewer_7.26.1.11.js",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": ":authority",
              "value": "ekat.festool.de"
            },
            {
              "name": ":method",
              "value": "GET"
            },
            {
              "name": ":path",
              "value": "/ekat/WEB-RES/js/cropper.js_javaviewer_7.26.1.11.js"
            },
            {
              "name": ":scheme",
              "value": "https"
            },
            {
              "name": "accept",
              "value": "*/*"
            },
            {
              "name": "accept-encoding",
              "value": "gzip, deflate, br, zstd"
            },
            {
              "name": "accept-language",
              "value": "en-GB,en-US;q=0.9,en;q=0.8"
            },
            {
              "name": "if-modified-since",
              "value": "Thu, 20 Aug 2026 07:47:08 GMT"
            },
            {
              "name": "if-none-match",
              "value": "W/\"150899-1787216819882\""
            },
            {
              "name": "priority",
              "value": "u=1"
            },
            {
              "name": "referer",
              "value": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            },
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "sec-fetch-dest",
              "value": "script"
            },
            {
              "name": "sec-fetch-mode",
              "value": "no-cors"
            },
            {
              "name": "sec-fetch-site",
              "value": "same-origin"
            },
            {
              "name": "user-agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            }
          ],
          "queryString": [],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "cache-control",
              "value": "public"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "content-length",
              "value": "26967"
            },
            {
              "name": "content-type",
              "value": "text/javascript"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 09:09:51 GMT"
            },
            {
              "name": "etag",
              "value": "W/\"150899-1787216991705\""
            },
            {
              "name": "expires",
              "value": "Thu, 20 Aug 2026 09:11:51 GMT"
            },
            {
              "name": "last-modified",
              "value": "Thu, 20 Aug 2026 07:47:08 GMT"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "pragma",
              "value": "cache"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "x-robots-tag",
              "value": "noindex"
            }
          ],
          "cookies": [],
          "content": {
            "size": 150899,
            "mimeType": "text/javascript",
            "text": "/*!\r\n * Cropper.js v1.6.1\r\n * https://fengyuanchen.github.io/cropperjs\r\n *\r\n * Copyright 2015-present Chen Fengyuan\r\n * Released under the MIT license\r\n *\r\n * Date: 2023-09-17T03:44:19.860Z\r\n */\r\n\r\n(function(global, factory) {\r\n    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\r\n    typeof define === 'function' && define.amd ? define(factory) :\r\n    (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Cropper = factory());\r\n})(this, (function() {\r\n    'use strict';\r\n\r\n    function ownKeys(e, r) {\r\n        var t = Object.keys(e);\r\n        if (Object.getOwnPropertySymbols) {\r\n            var o = Object.getOwnPropertySymbols(e);\r\n            r && (o = o.filter(function(r) {\r\n                return Object.getOwnPropertyDescriptor(e, r).enumerable;\r\n            })), t.push.apply(t, o);\r\n        }\r\n        return t;\r\n    }\r\n\r\n    function _objectSpread2(e) {\r\n        for (var r = 1; r < arguments.length; r++) {\r\n            var t = null != arguments[r] ? arguments[r] : {};\r\n            r % 2 ? ownKeys(Object(t), !0).forEach(function(r) {\r\n                _defineProperty(e, r, t[r]);\r\n            }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function(r) {\r\n                Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\r\n            });\r\n        }\r\n        return e;\r\n    }\r\n\r\n    function _typeof(o) {\r\n        \"@babel/helpers - typeof\";\r\n\r\n        return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function(o) {\r\n            return typeof o;\r\n        } : function(o) {\r\n            return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\r\n        }, _typeof(o);\r\n    }\r\n\r\n    function _classCallCheck(instance, Constructor) {\r\n        if (!(instance instanceof Constructor)) {\r\n            throw new TypeError(\"Cannot call a class as a function\");\r\n        }\r\n    }\r\n\r\n    function _defineProperties(target, props) {\r\n        for (var i = 0; i < props.length; i++) {\r\n            var descriptor = props[i];\r\n            descriptor.enumerable = descriptor.enumerable || false;\r\n            descriptor.configurable = true;\r\n            if (\"value\" in descriptor) {\r\n                descriptor.writable = true;\r\n            }\r\n            Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor);\r\n        }\r\n    }\r\n\r\n    function _createClass(Constructor, protoProps, staticProps) {\r\n        if (protoProps) {\r\n            _defineProperties(Constructor.prototype, protoProps);\r\n        }\r\n        if (staticProps) {\r\n            _defineProperties(Constructor, staticProps);\r\n        }\r\n        Object.defineProperty(Constructor, \"prototype\", {\r\n            writable: false\r\n        });\r\n        return Constructor;\r\n    }\r\n\r\n    function _defineProperty(obj, key, value) {\r\n        key = _toPropertyKey(key);\r\n        if (key in obj) {\r\n            Object.defineProperty(obj, key, {\r\n                value: value,\r\n                enumerable: true,\r\n                configurable: true,\r\n                writable: true\r\n            });\r\n        } else {\r\n            obj[key] = value;\r\n        }\r\n        return obj;\r\n    }\r\n\r\n    function _toConsumableArray(arr) {\r\n        return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\r\n    }\r\n\r\n    function _arrayWithoutHoles(arr) {\r\n        if (Array.isArray(arr)) {\r\n            return _arrayLikeToArray(arr);\r\n        }\r\n    }\r\n\r\n    function _iterableToArray(iter) {\r\n        if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) {\r\n            return Array.from(iter);\r\n        }\r\n    }\r\n\r\n    function _unsupportedIterableToArray(o, minLen) {\r\n        if (!o) {\r\n            return;\r\n        }\r\n        if (typeof o === \"string\") {\r\n            return _arrayLikeToArray(o, minLen);\r\n        }\r\n        var n = Object.prototype.toString.call(o).slice(8, -1);\r\n        if (n === \"Object\" && o.constructor) {\r\n            n = o.constructor.name;\r\n        }\r\n        if (n === \"Map\" || n === \"Set\") {\r\n            return Array.from(o);\r\n        }\r\n        if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) {\r\n            return _arrayLikeToArray(o, minLen);\r\n        }\r\n    }\r\n\r\n    function _arrayLikeToArray(arr, len) {\r\n        if (len == null || len > arr.length) {\r\n            len = arr.length;\r\n        }\r\n        for (var i = 0, arr2 = new Array(len); i < len; i++) {\r\n            arr2[i] = arr[i];\r\n        }\r\n        return arr2;\r\n    }\r\n\r\n    function _nonIterableSpread() {\r\n        throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\r\n    }\r\n\r\n    function _toPrimitive(input, hint) {\r\n        if (typeof input !== \"object\" || input === null) {\r\n            return input;\r\n        }\r\n        var prim = input[Symbol.toPrimitive];\r\n        if (prim !== undefined) {\r\n            var res = prim.call(input, hint || \"default\");\r\n            if (typeof res !== \"object\") {\r\n                return res;\r\n            }\r\n            throw new TypeError(\"@@toPrimitive must return a primitive value.\");\r\n        }\r\n        return (hint === \"string\" ? String : Number)(input);\r\n    }\r\n\r\n    function _toPropertyKey(arg) {\r\n        var key = _toPrimitive(arg, \"string\");\r\n        return typeof key === \"symbol\" ? key : String(key);\r\n    }\r\n\r\n    var IS_BROWSER = typeof window !== 'undefined' && typeof window.document !== 'undefined';\r\n    var WINDOW = IS_BROWSER ? window : {};\r\n    var IS_TOUCH_DEVICE = IS_BROWSER && WINDOW.document.documentElement ? 'ontouchstart' in WINDOW.document.documentElement : false;\r\n    var HAS_POINTER_EVENT = IS_BROWSER ? 'PointerEvent' in WINDOW : false;\r\n    var NAMESPACE = 'cropper';\r\n\r\n    // Actions\r\n    var ACTION_ALL = 'all';\r\n    var ACTION_CROP = 'crop';\r\n    var ACTION_MOVE = 'move';\r\n    var ACTION_ZOOM = 'zoom';\r\n    var ACTION_EAST = 'e';\r\n    var ACTION_WEST = 'w';\r\n    var ACTION_SOUTH = 's';\r\n    var ACTION_NORTH = 'n';\r\n    var ACTION_NORTH_EAST = 'ne';\r\n    var ACTION_NORTH_WEST = 'nw';\r\n    var ACTION_SOUTH_EAST = 'se';\r\n    var ACTION_SOUTH_WEST = 'sw';\r\n\r\n    // Classes\r\n    var CLASS_CROP = \"\".concat(NAMESPACE, \"-crop\");\r\n    var CLASS_DISABLED = \"\".concat(NAMESPACE, \"-disabled\");\r\n    var CLASS_HIDDEN = \"\".concat(NAMESPACE, \"-hidden\");\r\n    var CLASS_HIDE = \"\".concat(NAMESPACE, \"-hide\");\r\n    var CLASS_INVISIBLE = \"\".concat(NAMESPACE, \"-invisible\");\r\n    var CLASS_MODAL = \"\".concat(NAMESPACE, \"-modal\");\r\n    var CLASS_MOVE = \"\".concat(NAMESPACE, \"-move\");\r\n\r\n    // Data keys\r\n    var DATA_ACTION = \"\".concat(NAMESPACE, \"Action\");\r\n    var DATA_PREVIEW = \"\".concat(NAMESPACE, \"Preview\");\r\n\r\n    // Drag modes\r\n    var DRAG_MODE_CROP = 'crop';\r\n    var DRAG_MODE_MOVE = 'move';\r\n    var DRAG_MODE_NONE = 'none';\r\n\r\n    // Events\r\n    var EVENT_CROP = 'crop';\r\n    var EVENT_CROP_END = 'cropend';\r\n    var EVENT_CROP_MOVE = 'cropmove';\r\n    var EVENT_CROP_START = 'cropstart';\r\n    var EVENT_DBLCLICK = 'dblclick';\r\n    var EVENT_TOUCH_START = IS_TOUCH_DEVICE ? 'touchstart' : 'mousedown';\r\n    var EVENT_TOUCH_MOVE = IS_TOUCH_DEVICE ? 'touchmove' : 'mousemove';\r\n    var EVENT_TOUCH_END = IS_TOUCH_DEVICE ? 'touchend touchcancel' : 'mouseup';\r\n    var EVENT_POINTER_DOWN = HAS_POINTER_EVENT ? 'pointerdown' : EVENT_TOUCH_START;\r\n    var EVENT_POINTER_MOVE = HAS_POINTER_EVENT ? 'pointermove' : EVENT_TOUCH_MOVE;\r\n    var EVENT_POINTER_UP = HAS_POINTER_EVENT ? 'pointerup pointercancel' : EVENT_TOUCH_END;\r\n    var EVENT_READY = 'ready';\r\n    var EVENT_RESIZE = 'resize';\r\n    var EVENT_WHEEL = 'wheel';\r\n    var EVENT_ZOOM = 'zoom';\r\n\r\n    // Mime types\r\n    var MIME_TYPE_JPEG = 'image/jpeg';\r\n\r\n    // RegExps\r\n    var REGEXP_ACTIONS = /^e|w|s|n|se|sw|ne|nw|all|crop|move|zoom$/;\r\n    var REGEXP_DATA_URL = /^data:/;\r\n    var REGEXP_DATA_URL_JPEG = /^data:image\\/jpeg;base64,/;\r\n    var REGEXP_TAG_NAME = /^img|canvas$/i;\r\n\r\n    // Misc\r\n    // Inspired by the default width and height of a canvas element.\r\n    var MIN_CONTAINER_WIDTH = 200;\r\n    var MIN_CONTAINER_HEIGHT = 100;\r\n\r\n    var DEFAULTS = {\r\n        // Define the view mode of the cropper\r\n        viewMode: 0,\r\n        // 0, 1, 2, 3\r\n\r\n        // Define the dragging mode of the cropper\r\n        dragMode: DRAG_MODE_CROP,\r\n        // 'crop', 'move' or 'none'\r\n\r\n        // Define the initial aspect ratio of the crop box\r\n        initialAspectRatio: NaN,\r\n        // Define the aspect ratio of the crop box\r\n        aspectRatio: NaN,\r\n        // An object with the previous cropping result data\r\n        data: null,\r\n        // A selector for adding extra containers to preview\r\n        preview: '',\r\n        // Re-render the cropper when resize the window\r\n        responsive: true,\r\n        // Restore the cropped area after resize the window\r\n        restore: true,\r\n        // Check if the current image is a cross-origin image\r\n        checkCrossOrigin: true,\r\n        // Check the current image's Exif Orientation information\r\n        checkOrientation: true,\r\n        // Show the black modal\r\n        modal: true,\r\n        // Show the dashed lines for guiding\r\n        guides: true,\r\n        // Show the center indicator for guiding\r\n        center: true,\r\n        // Show the white modal to highlight the crop box\r\n        highlight: true,\r\n        // Show the grid background\r\n        background: true,\r\n        // Enable to crop the image automatically when initialize\r\n        autoCrop: true,\r\n        // Define the percentage of automatic cropping area when initializes\r\n        autoCropArea: 0.8,\r\n        // Enable to move the image\r\n        movable: true,\r\n        // Enable to rotate the image\r\n        rotatable: true,\r\n        // Enable to scale the image\r\n        scalable: true,\r\n        // Enable to zoom the image\r\n        zoomable: true,\r\n        // Enable to zoom the image by dragging touch\r\n        zoomOnTouch: true,\r\n        // Enable to zoom the image by wheeling mouse\r\n        zoomOnWheel: true,\r\n        // Define zoom ratio when zoom the image by wheeling mouse\r\n        wheelZoomRatio: 0.1,\r\n        // Enable to move the crop box\r\n        cropBoxMovable: true,\r\n        // Enable to resize the crop box\r\n        cropBoxResizable: true,\r\n        // Toggle drag mode between \"crop\" and \"move\" when click twice on the cropper\r\n        toggleDragModeOnDblclick: true,\r\n        // Size limitation\r\n        minCanvasWidth: 0,\r\n        minCanvasHeight: 0,\r\n        minCropBoxWidth: 0,\r\n        minCropBoxHeight: 0,\r\n        minContainerWidth: MIN_CONTAINER_WIDTH,\r\n        minContainerHeight: MIN_CONTAINER_HEIGHT,\r\n        // Shortcuts of events\r\n        ready: null,\r\n        cropstart: null,\r\n        cropmove: null,\r\n        cropend: null,\r\n        crop: null,\r\n        zoom: null\r\n    };\r\n\r\n    var TEMPLATE = '<div class=\"cropper-container\" touch-action=\"none\">' + '<div class=\"cropper-wrap-box\">' + '<div class=\"cropper-canvas\"></div>' + '</div>' + '<div class=\"cropper-drag-box\"></div>' + '<div class=\"cropper-crop-box\">' + '<span class=\"cropper-view-box\"></span>' + '<span class=\"cropper-dashed dashed-h\"></span>' + '<span class=\"cropper-dashed dashed-v\"></span>' + '<span class=\"cropper-center\"></span>' + '<span class=\"cropper-face\"></span>' + '<span class=\"cropper-line line-e\" data-cropper-action=\"e\"></span>' + '<span class=\"cropper-line line-n\" data-cropper-action=\"n\"></span>' + '<span class=\"cropper-line line-w\" data-cropper-action=\"w\"></span>' + '<span class=\"cropper-line line-s\" data-cropper-action=\"s\"></span>' + '<span class=\"cropper-point point-e\" data-cropper-action=\"e\"></span>' + '<span class=\"cropper-point point-n\" data-cropper-action=\"n\"></span>' + '<span class=\"cropper-point point-w\" data-cropper-action=\"w\"></span>' + '<span class=\"cropper-point point-s\" data-cropper-action=\"s\"></span>' + '<span class=\"cropper-point point-ne\" data-cropper-action=\"ne\"></span>' + '<span class=\"cropper-point point-nw\" data-cropper-action=\"nw\"></span>' + '<span class=\"cropper-point point-sw\" data-cropper-action=\"sw\"></span>' + '<span class=\"cropper-point point-se\" data-cropper-action=\"se\"></span>' + '</div>' + '</div>';\r\n\r\n    /**\r\n     * Check if the given value is not a number.\r\n     */\r\n    var isNaN = Number.isNaN || WINDOW.isNaN;\r\n\r\n    /**\r\n     * Check if the given value is a number.\r\n     * @param {*} value - The value to check.\r\n     * @returns {boolean} Returns `true` if the given value is a number, else `false`.\r\n     */\r\n    function isNumber(value) {\r\n        return typeof value === 'number' && !isNaN(value);\r\n    }\r\n\r\n    /**\r\n     * Check if the given value is a positive number.\r\n     * @param {*} value - The value to check.\r\n     * @returns {boolean} Returns `true` if the given value is a positive number, else `false`.\r\n     */\r\n    var isPositiveNumber = function isPositiveNumber(value) {\r\n        return value > 0 && value < Infinity;\r\n    };\r\n\r\n    /**\r\n     * Check if the given value is undefined.\r\n     * @param {*} value - The value to check.\r\n     * @returns {boolean} Returns `true` if the given value is undefined, else `false`.\r\n     */\r\n    function isUndefined(value) {\r\n        return typeof value === 'undefined';\r\n    }\r\n\r\n    /**\r\n     * Check if the given value is an object.\r\n     * @param {*} value - The value to check.\r\n     * @returns {boolean} Returns `true` if the given value is an object, else `false`.\r\n     */\r\n    function isObject(value) {\r\n        return _typeof(value) === 'object' && value !== null;\r\n    }\r\n\r\n    var hasOwnProperty = Object.prototype.hasOwnProperty;\r\n\r\n    /**\r\n     * Check if the given value is a plain object.\r\n     * @param {*} value - The value to check.\r\n     * @returns {boolean} Returns `true` if the given value is a plain object, else `false`.\r\n     */\r\n    function isPlainObject(value) {\r\n        if (!isObject(value)) {\r\n            return false;\r\n        }\r\n        try {\r\n            var _constructor = value.constructor;\r\n            var prototype = _constructor.prototype;\r\n            return _constructor && prototype && hasOwnProperty.call(prototype, 'isPrototypeOf');\r\n        } catch (error) {\r\n            return false;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Check if the given value is a function.\r\n     * @param {*} value - The value to check.\r\n     * @returns {boolean} Returns `true` if the given value is a function, else `false`.\r\n     */\r\n    function isFunction(value) {\r\n        return typeof value === 'function';\r\n    }\r\n\r\n    var slice = Array.prototype.slice;\r\n\r\n    /**\r\n     * Convert array-like or iterable object to an array.\r\n     * @param {*} value - The value to convert.\r\n     * @returns {Array} Returns a new array.\r\n     */\r\n    function toArray(value) {\r\n        return Array.from ? Array.from(value) : slice.call(value);\r\n    }\r\n\r\n    /**\r\n     * Iterate the given data.\r\n     * @param {*} data - The data to iterate.\r\n     * @param {Function} callback - The process function for each element.\r\n     * @returns {*} The original data.\r\n     */\r\n    function forEach(data, callback) {\r\n        if (data && isFunction(callback)) {\r\n            if (Array.isArray(data) || isNumber(data.length) /* array-like */) {\r\n                toArray(data).forEach(function(value, key) {\r\n                    callback.call(data, value, key, data);\r\n                });\r\n            } else if (isObject(data)) {\r\n                Object.keys(data).forEach(function(key) {\r\n                    callback.call(data, data[key], key, data);\r\n                });\r\n            }\r\n        }\r\n        return data;\r\n    }\r\n\r\n    /**\r\n     * Extend the given object.\r\n     * @param {*} target - The target object to extend.\r\n     * @param {*} args - The rest objects for merging to the target object.\r\n     * @returns {Object} The extended object.\r\n     */\r\n    var assign = Object.assign || function assign(target) {\r\n        for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\r\n            args[_key - 1] = arguments[_key];\r\n        }\r\n        if (isObject(target) && args.length > 0) {\r\n            args.forEach(function(arg) {\r\n                if (isObject(arg)) {\r\n                    Object.keys(arg).forEach(function(key) {\r\n                        target[key] = arg[key];\r\n                    });\r\n                }\r\n            });\r\n        }\r\n        return target;\r\n    };\r\n    var REGEXP_DECIMALS = /\\.\\d*(?:0|9){12}\\d*$/;\r\n\r\n    /**\r\n     * Normalize decimal number.\r\n     * Check out {@link https://0.30000000000000004.com/}\r\n     * @param {number} value - The value to normalize.\r\n     * @param {number} [times=100000000000] - The times for normalizing.\r\n     * @returns {number} Returns the normalized number.\r\n     */\r\n    function normalizeDecimalNumber(value) {\r\n        var times = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 100000000000;\r\n        return REGEXP_DECIMALS.test(value) ? Math.round(value * times) / times : value;\r\n    }\r\n\r\n    var REGEXP_SUFFIX = /^width|height|left|top|marginLeft|marginTop$/;\r\n\r\n    /**\r\n     * Apply styles to the given element.\r\n     * @param {Element} element - The target element.\r\n     * @param {Object} styles - The styles for applying.\r\n     */\r\n    function setStyle(element, styles) {\r\n        var style = element.style;\r\n        forEach(styles, function(value, property) {\r\n            if (REGEXP_SUFFIX.test(property) && isNumber(value)) {\r\n                value = \"\".concat(value, \"px\");\r\n            }\r\n            style[property] = value;\r\n        });\r\n    }\r\n\r\n    /**\r\n     * Check if the given element has a special class.\r\n     * @param {Element} element - The element to check.\r\n     * @param {string} value - The class to search.\r\n     * @returns {boolean} Returns `true` if the special class was found.\r\n     */\r\n    function hasClass(element, value) {\r\n        return element.classList ? element.classList.contains(value) : element.className.indexOf(value) > -1;\r\n    }\r\n\r\n    /**\r\n     * Add classes to the given element.\r\n     * @param {Element} element - The target element.\r\n     * @param {string} value - The classes to be added.\r\n     */\r\n    function addClass(element, value) {\r\n        if (!value) {\r\n            return;\r\n        }\r\n        if (isNumber(element.length)) {\r\n            forEach(element, function(elem) {\r\n                addClass(elem, value);\r\n            });\r\n            return;\r\n        }\r\n        if (element.classList) {\r\n            element.classList.add(value);\r\n            return;\r\n        }\r\n        var className = element.className.trim();\r\n        if (!className) {\r\n            element.className = value;\r\n        } else if (className.indexOf(value) < 0) {\r\n            element.className = \"\".concat(className, \" \").concat(value);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Remove classes from the given element.\r\n     * @param {Element} element - The target element.\r\n     * @param {string} value - The classes to be removed.\r\n     */\r\n    function removeClass(element, value) {\r\n        if (!value) {\r\n            return;\r\n        }\r\n        if (isNumber(element.length)) {\r\n            forEach(element, function(elem) {\r\n                removeClass(elem, value);\r\n            });\r\n            return;\r\n        }\r\n        if (element.classList) {\r\n            element.classList.remove(value);\r\n            return;\r\n        }\r\n        if (element.className.indexOf(value) >= 0) {\r\n            element.className = element.className.replace(value, '');\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Add or remove classes from the given element.\r\n     * @param {Element} element - The target element.\r\n     * @param {string} value - The classes to be toggled.\r\n     * @param {boolean} added - Add only.\r\n     */\r\n    function toggleClass(element, value, added) {\r\n        if (!value) {\r\n            return;\r\n        }\r\n        if (isNumber(element.length)) {\r\n            forEach(element, function(elem) {\r\n                toggleClass(elem, value, added);\r\n            });\r\n            return;\r\n        }\r\n\r\n        // IE10-11 doesn't support the second parameter of `classList.toggle`\r\n        if (added) {\r\n            addClass(element, value);\r\n        } else {\r\n            removeClass(element, value);\r\n        }\r\n    }\r\n\r\n    var REGEXP_CAMEL_CASE = /([a-z\\d])([A-Z])/g;\r\n\r\n    /**\r\n     * Transform the given string from camelCase to kebab-case\r\n     * @param {string} value - The value to transform.\r\n     * @returns {string} The transformed value.\r\n     */\r\n    function toParamCase(value) {\r\n        return value.replace(REGEXP_CAMEL_CASE, '$1-$2').toLowerCase();\r\n    }\r\n\r\n    /**\r\n     * Get data from the given element.\r\n     * @param {Element} element - The target element.\r\n     * @param {string} name - The data key to get.\r\n     * @returns {string} The data value.\r\n     */\r\n    function getData(element, name) {\r\n        if (isObject(element[name])) {\r\n            return element[name];\r\n        }\r\n        if (element.dataset) {\r\n            return element.dataset[name];\r\n        }\r\n        return element.getAttribute(\"data-\".concat(toParamCase(name)));\r\n    }\r\n\r\n    /**\r\n     * Set data to the given element.\r\n     * @param {Element} element - The target element.\r\n     * @param {string} name - The data key to set.\r\n     * @param {string} data - The data value.\r\n     */\r\n    function setData(element, name, data) {\r\n        if (isObject(data)) {\r\n            element[name] = data;\r\n        } else if (element.dataset) {\r\n            element.dataset[name] = data;\r\n        } else {\r\n            element.setAttribute(\"data-\".concat(toParamCase(name)), data);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Remove data from the given element.\r\n     * @param {Element} element - The target element.\r\n     * @param {string} name - The data key to remove.\r\n     */\r\n    function removeData(element, name) {\r\n        if (isObject(element[name])) {\r\n            try {\r\n                delete element[name];\r\n            } catch (error) {\r\n                element[name] = undefined;\r\n            }\r\n        } else if (element.dataset) {\r\n            // #128 Safari not allows to delete dataset property\r\n            try {\r\n                delete element.dataset[name];\r\n            } catch (error) {\r\n                element.dataset[name] = undefined;\r\n            }\r\n        } else {\r\n            element.removeAttribute(\"data-\".concat(toParamCase(name)));\r\n        }\r\n    }\r\n\r\n    var REGEXP_SPACES = /\\s\\s*/;\r\n    var onceSupported = function() {\r\n        var supported = false;\r\n        if (IS_BROWSER) {\r\n            var once = false;\r\n            var listener = function listener() {\r\n            };\r\n            var options = Object.defineProperty({}, 'once', {\r\n                get: function get() {\r\n                    supported = true;\r\n                    return once;\r\n                },\r\n                /**\r\n                 * This setter can fix a `TypeError` in strict mode\r\n                 * {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Getter_only}\r\n                 * @param {boolean} value - The value to set\r\n                 */\r\n                set: function set(value) {\r\n                    once = value;\r\n                }\r\n            });\r\n            WINDOW.addEventListener('test', listener, options);\r\n            WINDOW.removeEventListener('test', listener, options);\r\n        }\r\n        return supported;\r\n    }();\r\n\r\n    /**\r\n     * Remove event listener from the target element.\r\n     * @param {Element} element - The event target.\r\n     * @param {string} type - The event type(s).\r\n     * @param {Function} listener - The event listener.\r\n     * @param {Object} options - The event options.\r\n     */\r\n    function removeListener(element, type, listener) {\r\n        var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\r\n        var handler = listener;\r\n        type.trim().split(REGEXP_SPACES).forEach(function(event) {\r\n            if (!onceSupported) {\r\n                var listeners = element.listeners;\r\n                if (listeners && listeners[event] && listeners[event][listener]) {\r\n                    handler = listeners[event][listener];\r\n                    delete listeners[event][listener];\r\n                    if (Object.keys(listeners[event]).length === 0) {\r\n                        delete listeners[event];\r\n                    }\r\n                    if (Object.keys(listeners).length === 0) {\r\n                        delete element.listeners;\r\n                    }\r\n                }\r\n            }\r\n            element.removeEventListener(event, handler, options);\r\n        });\r\n    }\r\n\r\n    /**\r\n     * Add event listener to the target element.\r\n     * @param {Element} element - The event target.\r\n     * @param {string} type - The event type(s).\r\n     * @param {Function} listener - The event listener.\r\n     * @param {Object} options - The event options.\r\n     */\r\n    function addListener(element, type, listener) {\r\n        var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\r\n        var _handler = listener;\r\n        type.trim().split(REGEXP_SPACES).forEach(function(event) {\r\n            if (options.once && !onceSupported) {\r\n                var _element$listeners = element.listeners,\r\n                        listeners = _element$listeners === void 0 ? {} : _element$listeners;\r\n                _handler = function handler() {\r\n                    delete listeners[event][listener];\r\n                    element.removeEventListener(event, _handler, options);\r\n                    for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\r\n                        args[_key2] = arguments[_key2];\r\n                    }\r\n                    listener.apply(element, args);\r\n                };\r\n                if (!listeners[event]) {\r\n                    listeners[event] = {};\r\n                }\r\n                if (listeners[event][listener]) {\r\n                    element.removeEventListener(event, listeners[event][listener], options);\r\n                }\r\n                listeners[event][listener] = _handler;\r\n                element.listeners = listeners;\r\n            }\r\n            element.addEventListener(event, _handler, options);\r\n        });\r\n    }\r\n\r\n    /**\r\n     * Dispatch event on the target element.\r\n     * @param {Element} element - The event target.\r\n     * @param {string} type - The event type(s).\r\n     * @param {Object} data - The additional event data.\r\n     * @returns {boolean} Indicate if the event is default prevented or not.\r\n     */\r\n    function dispatchEvent(element, type, data) {\r\n        var event;\r\n\r\n        // Event and CustomEvent on IE9-11 are global objects, not constructors\r\n        if (isFunction(Event) && isFunction(CustomEvent)) {\r\n            event = new CustomEvent(type, {\r\n                detail: data,\r\n                bubbles: true,\r\n                cancelable: true\r\n            });\r\n        } else {\r\n            event = document.createEvent('CustomEvent');\r\n            event.initCustomEvent(type, true, true, data);\r\n        }\r\n        return element.dispatchEvent(event);\r\n    }\r\n\r\n    /**\r\n     * Get the offset base on the document.\r\n     * @param {Element} element - The target element.\r\n     * @returns {Object} The offset data.\r\n     */\r\n    function getOffset(element) {\r\n        var box = element.getBoundingClientRect();\r\n        return {\r\n            left: box.left + (window.pageXOffset - document.documentElement.clientLeft),\r\n            top: box.top + (window.pageYOffset - document.documentElement.clientTop)\r\n        };\r\n    }\r\n\r\n    var location = WINDOW.location;\r\n    var REGEXP_ORIGINS = /^(\\w+:)\\/\\/([^:/?#]*):?(\\d*)/i;\r\n\r\n    /**\r\n     * Check if the given URL is a cross origin URL.\r\n     * @param {string} url - The target URL.\r\n     * @returns {boolean} Returns `true` if the given URL is a cross origin URL, else `false`.\r\n     */\r\n    function isCrossOriginURL(url) {\r\n        var parts = url.match(REGEXP_ORIGINS);\r\n        return parts !== null && (parts[1] !== location.protocol || parts[2] !== location.hostname || parts[3] !== location.port);\r\n    }\r\n\r\n    /**\r\n     * Add timestamp to the given URL.\r\n     * @param {string} url - The target URL.\r\n     * @returns {string} The result URL.\r\n     */\r\n    function addTimestamp(url) {\r\n        var timestamp = \"timestamp=\".concat(new Date().getTime());\r\n        return url + (url.indexOf('?') === -1 ? '?' : '&') + timestamp;\r\n    }\r\n\r\n    /**\r\n     * Get transforms base on the given object.\r\n     * @param {Object} obj - The target object.\r\n     * @returns {string} A string contains transform values.\r\n     */\r\n    function getTransforms(_ref) {\r\n        var rotate = _ref.rotate,\r\n                scaleX = _ref.scaleX,\r\n                scaleY = _ref.scaleY,\r\n                translateX = _ref.translateX,\r\n                translateY = _ref.translateY;\r\n        var values = [];\r\n        if (isNumber(translateX) && translateX !== 0) {\r\n            values.push(\"translateX(\".concat(translateX, \"px)\"));\r\n        }\r\n        if (isNumber(translateY) && translateY !== 0) {\r\n            values.push(\"translateY(\".concat(translateY, \"px)\"));\r\n        }\r\n\r\n        // Rotate should come first before scale to match orientation transform\r\n        if (isNumber(rotate) && rotate !== 0) {\r\n            values.push(\"rotate(\".concat(rotate, \"deg)\"));\r\n        }\r\n        if (isNumber(scaleX) && scaleX !== 1) {\r\n            values.push(\"scaleX(\".concat(scaleX, \")\"));\r\n        }\r\n        if (isNumber(scaleY) && scaleY !== 1) {\r\n            values.push(\"scaleY(\".concat(scaleY, \")\"));\r\n        }\r\n        var transform = values.length ? values.join(' ') : 'none';\r\n        return {\r\n            WebkitTransform: transform,\r\n            msTransform: transform,\r\n            transform: transform\r\n        };\r\n    }\r\n\r\n    /**\r\n     * Get the max ratio of a group of pointers.\r\n     * @param {string} pointers - The target pointers.\r\n     * @returns {number} The result ratio.\r\n     */\r\n    function getMaxZoomRatio(pointers) {\r\n        var pointers2 = _objectSpread2({}, pointers);\r\n        var maxRatio = 0;\r\n        forEach(pointers, function(pointer, pointerId) {\r\n            delete pointers2[pointerId];\r\n            forEach(pointers2, function(pointer2) {\r\n                var x1 = Math.abs(pointer.startX - pointer2.startX);\r\n                var y1 = Math.abs(pointer.startY - pointer2.startY);\r\n                var x2 = Math.abs(pointer.endX - pointer2.endX);\r\n                var y2 = Math.abs(pointer.endY - pointer2.endY);\r\n                var z1 = Math.sqrt(x1 * x1 + y1 * y1);\r\n                var z2 = Math.sqrt(x2 * x2 + y2 * y2);\r\n                var ratio = (z2 - z1) / z1;\r\n                if (Math.abs(ratio) > Math.abs(maxRatio)) {\r\n                    maxRatio = ratio;\r\n                }\r\n            });\r\n        });\r\n        return maxRatio;\r\n    }\r\n\r\n    /**\r\n     * Get a pointer from an event object.\r\n     * @param {Object} event - The target event object.\r\n     * @param {boolean} endOnly - Indicates if only returns the end point coordinate or not.\r\n     * @returns {Object} The result pointer contains start and/or end point coordinates.\r\n     */\r\n    function getPointer(_ref2, endOnly) {\r\n        var pageX = _ref2.pageX,\r\n                pageY = _ref2.pageY;\r\n        var end = {\r\n            endX: pageX,\r\n            endY: pageY\r\n        };\r\n        return endOnly ? end : _objectSpread2({\r\n                                                  startX: pageX,\r\n                                                  startY: pageY\r\n                                              }, end);\r\n    }\r\n\r\n    /**\r\n     * Get the center point coordinate of a group of pointers.\r\n     * @param {Object} pointers - The target pointers.\r\n     * @returns {Object} The center point coordinate.\r\n     */\r\n    function getPointersCenter(pointers) {\r\n        var pageX = 0;\r\n        var pageY = 0;\r\n        var count = 0;\r\n        forEach(pointers, function(_ref3) {\r\n            var startX = _ref3.startX,\r\n                    startY = _ref3.startY;\r\n            pageX += startX;\r\n            pageY += startY;\r\n            count += 1;\r\n        });\r\n        pageX /= count;\r\n        pageY /= count;\r\n        return {\r\n            pageX: pageX,\r\n            pageY: pageY\r\n        };\r\n    }\r\n\r\n    /**\r\n     * Get the max sizes in a rectangle under the given aspect ratio.\r\n     * @param {Object} data - The original sizes.\r\n     * @param {string} [type='contain'] - The adjust type.\r\n     * @returns {Object} The result sizes.\r\n     */\r\n    function getAdjustedSizes(_ref4) {\r\n        var aspectRatio = _ref4.aspectRatio,\r\n                height = _ref4.height,\r\n                width = _ref4.width;\r\n        var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'contain';\r\n        var isValidWidth = isPositiveNumber(width);\r\n        var isValidHeight = isPositiveNumber(height);\r\n        if (isValidWidth && isValidHeight) {\r\n            var adjustedWidth = height * aspectRatio;\r\n            if (type === 'contain' && adjustedWidth > width || type === 'cover' && adjustedWidth < width) {\r\n                height = width / aspectRatio;\r\n            } else {\r\n                width = height * aspectRatio;\r\n            }\r\n        } else if (isValidWidth) {\r\n            height = width / aspectRatio;\r\n        } else if (isValidHeight) {\r\n            width = height * aspectRatio;\r\n        }\r\n        return {\r\n            width: width,\r\n            height: height\r\n        };\r\n    }\r\n\r\n    /**\r\n     * Get the new sizes of a rectangle after rotated.\r\n     * @param {Object} data - The original sizes.\r\n     * @returns {Object} The result sizes.\r\n     */\r\n    function getRotatedSizes(_ref5) {\r\n        var width = _ref5.width,\r\n                height = _ref5.height,\r\n                degree = _ref5.degree;\r\n        degree = Math.abs(degree) % 180;\r\n        if (degree === 90) {\r\n            return {\r\n                width: height,\r\n                height: width\r\n            };\r\n        }\r\n        var arc = degree % 90 * Math.PI / 180;\r\n        var sinArc = Math.sin(arc);\r\n        var cosArc = Math.cos(arc);\r\n        var newWidth = width * cosArc + height * sinArc;\r\n        var newHeight = width * sinArc + height * cosArc;\r\n        return degree > 90 ? {\r\n            width: newHeight,\r\n            height: newWidth\r\n        } : {\r\n            width: newWidth,\r\n            height: newHeight\r\n        };\r\n    }\r\n\r\n    /**\r\n     * Get a canvas which drew the given image.\r\n     * @param {HTMLImageElement} image - The image for drawing.\r\n     * @param {Object} imageData - The image data.\r\n     * @param {Object} canvasData - The canvas data.\r\n     * @param {Object} options - The options.\r\n     * @returns {HTMLCanvasElement} The result canvas.\r\n     */\r\n    function getSourceCanvas(image, _ref6, _ref7, _ref8) {\r\n        var imageAspectRatio = _ref6.aspectRatio,\r\n                imageNaturalWidth = _ref6.naturalWidth,\r\n                imageNaturalHeight = _ref6.naturalHeight,\r\n                _ref6$rotate = _ref6.rotate,\r\n                rotate = _ref6$rotate === void 0 ? 0 : _ref6$rotate,\r\n                _ref6$scaleX = _ref6.scaleX,\r\n                scaleX = _ref6$scaleX === void 0 ? 1 : _ref6$scaleX,\r\n                _ref6$scaleY = _ref6.scaleY,\r\n                scaleY = _ref6$scaleY === void 0 ? 1 : _ref6$scaleY;\r\n        var aspectRatio = _ref7.aspectRatio,\r\n                naturalWidth = _ref7.naturalWidth,\r\n                naturalHeight = _ref7.naturalHeight;\r\n        var _ref8$fillColor = _ref8.fillColor,\r\n                fillColor = _ref8$fillColor === void 0 ? 'transparent' : _ref8$fillColor,\r\n                _ref8$imageSmoothingE = _ref8.imageSmoothingEnabled,\r\n                imageSmoothingEnabled = _ref8$imageSmoothingE === void 0 ? true : _ref8$imageSmoothingE,\r\n                _ref8$imageSmoothingQ = _ref8.imageSmoothingQuality,\r\n                imageSmoothingQuality = _ref8$imageSmoothingQ === void 0 ? 'low' : _ref8$imageSmoothingQ,\r\n                _ref8$maxWidth = _ref8.maxWidth,\r\n                maxWidth = _ref8$maxWidth === void 0 ? Infinity : _ref8$maxWidth,\r\n                _ref8$maxHeight = _ref8.maxHeight,\r\n                maxHeight = _ref8$maxHeight === void 0 ? Infinity : _ref8$maxHeight,\r\n                _ref8$minWidth = _ref8.minWidth,\r\n                minWidth = _ref8$minWidth === void 0 ? 0 : _ref8$minWidth,\r\n                _ref8$minHeight = _ref8.minHeight,\r\n                minHeight = _ref8$minHeight === void 0 ? 0 : _ref8$minHeight;\r\n        var canvas = document.createElement('canvas');\r\n        var context = canvas.getContext('2d');\r\n        var maxSizes = getAdjustedSizes({\r\n                                            aspectRatio: aspectRatio,\r\n                                            width: maxWidth,\r\n                                            height: maxHeight\r\n                                        });\r\n        var minSizes = getAdjustedSizes({\r\n                                            aspectRatio: aspectRatio,\r\n                                            width: minWidth,\r\n                                            height: minHeight\r\n                                        }, 'cover');\r\n        var width = Math.min(maxSizes.width, Math.max(minSizes.width, naturalWidth));\r\n        var height = Math.min(maxSizes.height, Math.max(minSizes.height, naturalHeight));\r\n\r\n        // Note: should always use image's natural sizes for drawing as\r\n        // imageData.naturalWidth === canvasData.naturalHeight when rotate % 180 === 90\r\n        var destMaxSizes = getAdjustedSizes({\r\n                                                aspectRatio: imageAspectRatio,\r\n                                                width: maxWidth,\r\n                                                height: maxHeight\r\n                                            });\r\n        var destMinSizes = getAdjustedSizes({\r\n                                                aspectRatio: imageAspectRatio,\r\n                                                width: minWidth,\r\n                                                height: minHeight\r\n                                            }, 'cover');\r\n        var destWidth = Math.min(destMaxSizes.width, Math.max(destMinSizes.width, imageNaturalWidth));\r\n        var destHeight = Math.min(destMaxSizes.height, Math.max(destMinSizes.height, imageNaturalHeight));\r\n        var params = [-destWidth / 2, -destHeight / 2, destWidth, destHeight];\r\n        canvas.width = normalizeDecimalNumber(width);\r\n        canvas.height = normalizeDecimalNumber(height);\r\n        context.fillStyle = fillColor;\r\n        context.fillRect(0, 0, width, height);\r\n        context.save();\r\n        context.translate(width / 2, height / 2);\r\n        context.rotate(rotate * Math.PI / 180);\r\n        context.scale(scaleX, scaleY);\r\n        context.imageSmoothingEnabled = imageSmoothingEnabled;\r\n        context.imageSmoothingQuality = imageSmoothingQuality;\r\n        context.drawImage.apply(context, [image].concat(_toConsumableArray(params.map(function(param) {\r\n            return Math.floor(normalizeDecimalNumber(param));\r\n        }))));\r\n        context.restore();\r\n        return canvas;\r\n    }\r\n\r\n    var fromCharCode = String.fromCharCode;\r\n\r\n    /**\r\n     * Get string from char code in data view.\r\n     * @param {DataView} dataView - The data view for read.\r\n     * @param {number} start - The start index.\r\n     * @param {number} length - The read length.\r\n     * @returns {string} The read result.\r\n     */\r\n    function getStringFromCharCode(dataView, start, length) {\r\n        var str = '';\r\n        length += start;\r\n        for (var i = start; i < length; i += 1) {\r\n            str += fromCharCode(dataView.getUint8(i));\r\n        }\r\n        return str;\r\n    }\r\n\r\n    var REGEXP_DATA_URL_HEAD = /^data:.*,/;\r\n\r\n    /**\r\n     * Transform Data URL to array buffer.\r\n     * @param {string} dataURL - The Data URL to transform.\r\n     * @returns {ArrayBuffer} The result array buffer.\r\n     */\r\n    function dataURLToArrayBuffer(dataURL) {\r\n        var base64 = dataURL.replace(REGEXP_DATA_URL_HEAD, '');\r\n        var binary = atob(base64);\r\n        var arrayBuffer = new ArrayBuffer(binary.length);\r\n        var uint8 = new Uint8Array(arrayBuffer);\r\n        forEach(uint8, function(value, i) {\r\n            uint8[i] = binary.charCodeAt(i);\r\n        });\r\n        return arrayBuffer;\r\n    }\r\n\r\n    /**\r\n     * Transform array buffer to Data URL.\r\n     * @param {ArrayBuffer} arrayBuffer - The array buffer to transform.\r\n     * @param {string} mimeType - The mime type of the Data URL.\r\n     * @returns {string} The result Data URL.\r\n     */\r\n    function arrayBufferToDataURL(arrayBuffer, mimeType) {\r\n        var chunks = [];\r\n\r\n        // Chunk Typed Array for better performance (#435)\r\n        var chunkSize = 8192;\r\n        var uint8 = new Uint8Array(arrayBuffer);\r\n        while (uint8.length > 0) {\r\n            // XXX: Babel's `toConsumableArray` helper will throw error in IE or Safari 9\r\n            // eslint-disable-next-line prefer-spread\r\n            chunks.push(fromCharCode.apply(null, toArray(uint8.subarray(0, chunkSize))));\r\n            uint8 = uint8.subarray(chunkSize);\r\n        }\r\n        return \"data:\".concat(mimeType, \";base64,\").concat(btoa(chunks.join('')));\r\n    }\r\n\r\n    /**\r\n     * Get orientation value from given array buffer.\r\n     * @param {ArrayBuffer} arrayBuffer - The array buffer to read.\r\n     * @returns {number} The read orientation value.\r\n     */\r\n    function resetAndGetOrientation(arrayBuffer) {\r\n        var dataView = new DataView(arrayBuffer);\r\n        var orientation;\r\n\r\n        // Ignores range error when the image does not have correct Exif information\r\n        try {\r\n            var littleEndian;\r\n            var app1Start;\r\n            var ifdStart;\r\n\r\n            // Only handle JPEG image (start by 0xFFD8)\r\n            if (dataView.getUint8(0) === 0xFF && dataView.getUint8(1) === 0xD8) {\r\n                var length = dataView.byteLength;\r\n                var offset = 2;\r\n                while (offset + 1 < length) {\r\n                    if (dataView.getUint8(offset) === 0xFF && dataView.getUint8(offset + 1) === 0xE1) {\r\n                        app1Start = offset;\r\n                        break;\r\n                    }\r\n                    offset += 1;\r\n                }\r\n            }\r\n            if (app1Start) {\r\n                var exifIDCode = app1Start + 4;\r\n                var tiffOffset = app1Start + 10;\r\n                if (getStringFromCharCode(dataView, exifIDCode, 4) === 'Exif') {\r\n                    var endianness = dataView.getUint16(tiffOffset);\r\n                    littleEndian = endianness === 0x4949;\r\n                    if (littleEndian || endianness === 0x4D4D /* bigEndian */) {\r\n                        if (dataView.getUint16(tiffOffset + 2, littleEndian) === 0x002A) {\r\n                            var firstIFDOffset = dataView.getUint32(tiffOffset + 4, littleEndian);\r\n                            if (firstIFDOffset >= 0x00000008) {\r\n                                ifdStart = tiffOffset + firstIFDOffset;\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n            if (ifdStart) {\r\n                var _length = dataView.getUint16(ifdStart, littleEndian);\r\n                var _offset;\r\n                var i;\r\n                for (i = 0; i < _length; i += 1) {\r\n                    _offset = ifdStart + i * 12 + 2;\r\n                    if (dataView.getUint16(_offset, littleEndian) === 0x0112 /* Orientation */) {\r\n                        // 8 is the offset of the current tag's value\r\n                        _offset += 8;\r\n\r\n                        // Get the original orientation value\r\n                        orientation = dataView.getUint16(_offset, littleEndian);\r\n\r\n                        // Override the orientation with its default value\r\n                        dataView.setUint16(_offset, 1, littleEndian);\r\n                        break;\r\n                    }\r\n                }\r\n            }\r\n        } catch (error) {\r\n            orientation = 1;\r\n        }\r\n        return orientation;\r\n    }\r\n\r\n    /**\r\n     * Parse Exif Orientation value.\r\n     * @param {number} orientation - The orientation to parse.\r\n     * @returns {Object} The parsed result.\r\n     */\r\n    function parseOrientation(orientation) {\r\n        var rotate = 0;\r\n        var scaleX = 1;\r\n        var scaleY = 1;\r\n        switch (orientation) {\r\n                // Flip horizontal\r\n            case 2:\r\n                scaleX = -1;\r\n                break;\r\n\r\n                // Rotate left 180°\r\n            case 3:\r\n                rotate = -180;\r\n                break;\r\n\r\n                // Flip vertical\r\n            case 4:\r\n                scaleY = -1;\r\n                break;\r\n\r\n                // Flip vertical and rotate right 90°\r\n            case 5:\r\n                rotate = 90;\r\n                scaleY = -1;\r\n                break;\r\n\r\n                // Rotate right 90°\r\n            case 6:\r\n                rotate = 90;\r\n                break;\r\n\r\n                // Flip horizontal and rotate right 90°\r\n            case 7:\r\n                rotate = 90;\r\n                scaleX = -1;\r\n                break;\r\n\r\n                // Rotate left 90°\r\n            case 8:\r\n                rotate = -90;\r\n                break;\r\n        }\r\n        return {\r\n            rotate: rotate,\r\n            scaleX: scaleX,\r\n            scaleY: scaleY\r\n        };\r\n    }\r\n\r\n    var render = {\r\n        render: function render() {\r\n            this.initContainer();\r\n            this.initCanvas();\r\n            this.initCropBox();\r\n            this.renderCanvas();\r\n            if (this.cropped) {\r\n                this.renderCropBox();\r\n            }\r\n        },\r\n        initContainer: function initContainer() {\r\n            var element = this.element,\r\n                    options = this.options,\r\n                    container = this.container,\r\n                    cropper = this.cropper;\r\n            var minWidth = Number(options.minContainerWidth);\r\n            var minHeight = Number(options.minContainerHeight);\r\n            addClass(cropper, CLASS_HIDDEN);\r\n            removeClass(element, CLASS_HIDDEN);\r\n            var containerData = {\r\n                width: Math.max(container.offsetWidth, minWidth >= 0 ? minWidth : MIN_CONTAINER_WIDTH),\r\n                height: Math.max(container.offsetHeight, minHeight >= 0 ? minHeight : MIN_CONTAINER_HEIGHT)\r\n            };\r\n            this.containerData = containerData;\r\n            setStyle(cropper, {\r\n                width: containerData.width,\r\n                height: containerData.height\r\n            });\r\n            addClass(element, CLASS_HIDDEN);\r\n            removeClass(cropper, CLASS_HIDDEN);\r\n        },\r\n        // Canvas (image wrapper)\r\n        initCanvas: function initCanvas() {\r\n            var containerData = this.containerData,\r\n                    imageData = this.imageData;\r\n            var viewMode = this.options.viewMode;\r\n            var rotated = Math.abs(imageData.rotate) % 180 === 90;\r\n            var naturalWidth = rotated ? imageData.naturalHeight : imageData.naturalWidth;\r\n            var naturalHeight = rotated ? imageData.naturalWidth : imageData.naturalHeight;\r\n            var aspectRatio = naturalWidth / naturalHeight;\r\n            var canvasWidth = containerData.width;\r\n            var canvasHeight = containerData.height;\r\n            if (containerData.height * aspectRatio > containerData.width) {\r\n                if (viewMode === 3) {\r\n                    canvasWidth = containerData.height * aspectRatio;\r\n                } else {\r\n                    canvasHeight = containerData.width / aspectRatio;\r\n                }\r\n            } else if (viewMode === 3) {\r\n                canvasHeight = containerData.width / aspectRatio;\r\n            } else {\r\n                canvasWidth = containerData.height * aspectRatio;\r\n            }\r\n            var canvasData = {\r\n                aspectRatio: aspectRatio,\r\n                naturalWidth: naturalWidth,\r\n                naturalHeight: naturalHeight,\r\n                width: canvasWidth,\r\n                height: canvasHeight\r\n            };\r\n            this.canvasData = canvasData;\r\n            this.limited = viewMode === 1 || viewMode === 2;\r\n            this.limitCanvas(true, true);\r\n            canvasData.width = Math.min(Math.max(canvasData.width, canvasData.minWidth), canvasData.maxWidth);\r\n            canvasData.height = Math.min(Math.max(canvasData.height, canvasData.minHeight), canvasData.maxHeight);\r\n            canvasData.left = (containerData.width - canvasData.width) / 2;\r\n            canvasData.top = (containerData.height - canvasData.height) / 2;\r\n            canvasData.oldLeft = canvasData.left;\r\n            canvasData.oldTop = canvasData.top;\r\n            this.initialCanvasData = assign({}, canvasData);\r\n        },\r\n        limitCanvas: function limitCanvas(sizeLimited, positionLimited) {\r\n            var options = this.options,\r\n                    containerData = this.containerData,\r\n                    canvasData = this.canvasData,\r\n                    cropBoxData = this.cropBoxData;\r\n            var viewMode = options.viewMode;\r\n            var aspectRatio = canvasData.aspectRatio;\r\n            var cropped = this.cropped && cropBoxData;\r\n            if (sizeLimited) {\r\n                var minCanvasWidth = Number(options.minCanvasWidth) || 0;\r\n                var minCanvasHeight = Number(options.minCanvasHeight) || 0;\r\n                if (viewMode > 1) {\r\n                    minCanvasWidth = Math.max(minCanvasWidth, containerData.width);\r\n                    minCanvasHeight = Math.max(minCanvasHeight, containerData.height);\r\n                    if (viewMode === 3) {\r\n                        if (minCanvasHeight * aspectRatio > minCanvasWidth) {\r\n                            minCanvasWidth = minCanvasHeight * aspectRatio;\r\n                        } else {\r\n                            minCanvasHeight = minCanvasWidth / aspectRatio;\r\n                        }\r\n                    }\r\n                } else if (viewMode > 0) {\r\n                    if (minCanvasWidth) {\r\n                        minCanvasWidth = Math.max(minCanvasWidth, cropped ? cropBoxData.width : 0);\r\n                    } else if (minCanvasHeight) {\r\n                        minCanvasHeight = Math.max(minCanvasHeight, cropped ? cropBoxData.height : 0);\r\n                    } else if (cropped) {\r\n                        minCanvasWidth = cropBoxData.width;\r\n                        minCanvasHeight = cropBoxData.height;\r\n                        if (minCanvasHeight * aspectRatio > minCanvasWidth) {\r\n                            minCanvasWidth = minCanvasHeight * aspectRatio;\r\n                        } else {\r\n                            minCanvasHeight = minCanvasWidth / aspectRatio;\r\n                        }\r\n                    }\r\n                }\r\n                var _getAdjustedSizes = getAdjustedSizes({\r\n                                                             aspectRatio: aspectRatio,\r\n                                                             width: minCanvasWidth,\r\n                                                             height: minCanvasHeight\r\n                                                         });\r\n                minCanvasWidth = _getAdjustedSizes.width;\r\n                minCanvasHeight = _getAdjustedSizes.height;\r\n                canvasData.minWidth = minCanvasWidth;\r\n                canvasData.minHeight = minCanvasHeight;\r\n                canvasData.maxWidth = Infinity;\r\n                canvasData.maxHeight = Infinity;\r\n            }\r\n            if (positionLimited) {\r\n                if (viewMode > (cropped ? 0 : 1)) {\r\n                    var newCanvasLeft = containerData.width - canvasData.width;\r\n                    var newCanvasTop = containerData.height - canvasData.height;\r\n                    canvasData.minLeft = Math.min(0, newCanvasLeft);\r\n                    canvasData.minTop = Math.min(0, newCanvasTop);\r\n                    canvasData.maxLeft = Math.max(0, newCanvasLeft);\r\n                    canvasData.maxTop = Math.max(0, newCanvasTop);\r\n                    if (cropped && this.limited) {\r\n                        canvasData.minLeft = Math.min(cropBoxData.left, cropBoxData.left + (cropBoxData.width - canvasData.width));\r\n                        canvasData.minTop = Math.min(cropBoxData.top, cropBoxData.top + (cropBoxData.height - canvasData.height));\r\n                        canvasData.maxLeft = cropBoxData.left;\r\n                        canvasData.maxTop = cropBoxData.top;\r\n                        if (viewMode === 2) {\r\n                            if (canvasData.width >= containerData.width) {\r\n                                canvasData.minLeft = Math.min(0, newCanvasLeft);\r\n                                canvasData.maxLeft = Math.max(0, newCanvasLeft);\r\n                            }\r\n                            if (canvasData.height >= containerData.height) {\r\n                                canvasData.minTop = Math.min(0, newCanvasTop);\r\n                                canvasData.maxTop = Math.max(0, newCanvasTop);\r\n                            }\r\n                        }\r\n                    }\r\n                } else {\r\n                    canvasData.minLeft = -canvasData.width;\r\n                    canvasData.minTop = -canvasData.height;\r\n                    canvasData.maxLeft = containerData.width;\r\n                    canvasData.maxTop = containerData.height;\r\n                }\r\n            }\r\n        },\r\n        renderCanvas: function renderCanvas(changed, transformed) {\r\n            var canvasData = this.canvasData,\r\n                    imageData = this.imageData;\r\n            if (transformed) {\r\n                var _getRotatedSizes = getRotatedSizes({\r\n                                                           width: imageData.naturalWidth * Math.abs(imageData.scaleX || 1),\r\n                                                           height: imageData.naturalHeight * Math.abs(imageData.scaleY || 1),\r\n                                                           degree: imageData.rotate || 0\r\n                                                       }),\r\n                        naturalWidth = _getRotatedSizes.width,\r\n                        naturalHeight = _getRotatedSizes.height;\r\n                var width = canvasData.width * (naturalWidth / canvasData.naturalWidth);\r\n                var height = canvasData.height * (naturalHeight / canvasData.naturalHeight);\r\n                canvasData.left -= (width - canvasData.width) / 2;\r\n                canvasData.top -= (height - canvasData.height) / 2;\r\n                canvasData.width = width;\r\n                canvasData.height = height;\r\n                canvasData.aspectRatio = naturalWidth / naturalHeight;\r\n                canvasData.naturalWidth = naturalWidth;\r\n                canvasData.naturalHeight = naturalHeight;\r\n                this.limitCanvas(true, false);\r\n            }\r\n            if (canvasData.width > canvasData.maxWidth || canvasData.width < canvasData.minWidth) {\r\n                canvasData.left = canvasData.oldLeft;\r\n            }\r\n            if (canvasData.height > canvasData.maxHeight || canvasData.height < canvasData.minHeight) {\r\n                canvasData.top = canvasData.oldTop;\r\n            }\r\n            canvasData.width = Math.min(Math.max(canvasData.width, canvasData.minWidth), canvasData.maxWidth);\r\n            canvasData.height = Math.min(Math.max(canvasData.height, canvasData.minHeight), canvasData.maxHeight);\r\n            this.limitCanvas(false, true);\r\n            canvasData.left = Math.min(Math.max(canvasData.left, canvasData.minLeft), canvasData.maxLeft);\r\n            canvasData.top = Math.min(Math.max(canvasData.top, canvasData.minTop), canvasData.maxTop);\r\n            canvasData.oldLeft = canvasData.left;\r\n            canvasData.oldTop = canvasData.top;\r\n            setStyle(this.canvas, assign({\r\n                                             width: canvasData.width,\r\n                                             height: canvasData.height\r\n                                         }, getTransforms({\r\n                                                              translateX: canvasData.left,\r\n                                                              translateY: canvasData.top\r\n                                                          })));\r\n            this.renderImage(changed);\r\n            if (this.cropped && this.limited) {\r\n                this.limitCropBox(true, true);\r\n            }\r\n        },\r\n        renderImage: function renderImage(changed) {\r\n            var canvasData = this.canvasData,\r\n                    imageData = this.imageData;\r\n            var width = imageData.naturalWidth * (canvasData.width / canvasData.naturalWidth);\r\n            var height = imageData.naturalHeight * (canvasData.height / canvasData.naturalHeight);\r\n            assign(imageData, {\r\n                width: width,\r\n                height: height,\r\n                left: (canvasData.width - width) / 2,\r\n                top: (canvasData.height - height) / 2\r\n            });\r\n            setStyle(this.image, assign({\r\n                                            width: imageData.width,\r\n                                            height: imageData.height\r\n                                        }, getTransforms(assign({\r\n                                                                    translateX: imageData.left,\r\n                                                                    translateY: imageData.top\r\n                                                                }, imageData))));\r\n            if (changed) {\r\n                this.output();\r\n            }\r\n        },\r\n        initCropBox: function initCropBox() {\r\n            var options = this.options,\r\n                    canvasData = this.canvasData;\r\n            var aspectRatio = options.aspectRatio || options.initialAspectRatio;\r\n            var autoCropArea = Number(options.autoCropArea) || 0.8;\r\n            var cropBoxData = {\r\n                width: canvasData.width,\r\n                height: canvasData.height\r\n            };\r\n            if (aspectRatio) {\r\n                if (canvasData.height * aspectRatio > canvasData.width) {\r\n                    cropBoxData.height = cropBoxData.width / aspectRatio;\r\n                } else {\r\n                    cropBoxData.width = cropBoxData.height * aspectRatio;\r\n                }\r\n            }\r\n            this.cropBoxData = cropBoxData;\r\n            this.limitCropBox(true, true);\r\n\r\n            // Initialize auto crop area\r\n            cropBoxData.width = Math.min(Math.max(cropBoxData.width, cropBoxData.minWidth), cropBoxData.maxWidth);\r\n            cropBoxData.height = Math.min(Math.max(cropBoxData.height, cropBoxData.minHeight), cropBoxData.maxHeight);\r\n\r\n            // The width/height of auto crop area must large than \"minWidth/Height\"\r\n            cropBoxData.width = Math.max(cropBoxData.minWidth, cropBoxData.width * autoCropArea);\r\n            cropBoxData.height = Math.max(cropBoxData.minHeight, cropBoxData.height * autoCropArea);\r\n            cropBoxData.left = canvasData.left + (canvasData.width - cropBoxData.width) / 2;\r\n            cropBoxData.top = canvasData.top + (canvasData.height - cropBoxData.height) / 2;\r\n            cropBoxData.oldLeft = cropBoxData.left;\r\n            cropBoxData.oldTop = cropBoxData.top;\r\n            this.initialCropBoxData = assign({}, cropBoxData);\r\n        },\r\n        limitCropBox: function limitCropBox(sizeLimited, positionLimited) {\r\n            var options = this.options,\r\n                    containerData = this.containerData,\r\n                    canvasData = this.canvasData,\r\n                    cropBoxData = this.cropBoxData,\r\n                    limited = this.limited;\r\n            var aspectRatio = options.aspectRatio;\r\n            if (sizeLimited) {\r\n                var minCropBoxWidth = Number(options.minCropBoxWidth) || 0;\r\n                var minCropBoxHeight = Number(options.minCropBoxHeight) || 0;\r\n                var maxCropBoxWidth = limited ? Math.min(containerData.width, canvasData.width, canvasData.width + canvasData.left, containerData.width - canvasData.left) : containerData.width;\r\n                var maxCropBoxHeight = limited ? Math.min(containerData.height, canvasData.height, canvasData.height + canvasData.top, containerData.height - canvasData.top) : containerData.height;\r\n\r\n                // The min/maxCropBoxWidth/Height must be less than container's width/height\r\n                minCropBoxWidth = Math.min(minCropBoxWidth, containerData.width);\r\n                minCropBoxHeight = Math.min(minCropBoxHeight, containerData.height);\r\n                if (aspectRatio) {\r\n                    if (minCropBoxWidth && minCropBoxHeight) {\r\n                        if (minCropBoxHeight * aspectRatio > minCropBoxWidth) {\r\n                            minCropBoxHeight = minCropBoxWidth / aspectRatio;\r\n                        } else {\r\n                            minCropBoxWidth = minCropBoxHeight * aspectRatio;\r\n                        }\r\n                    } else if (minCropBoxWidth) {\r\n                        minCropBoxHeight = minCropBoxWidth / aspectRatio;\r\n                    } else if (minCropBoxHeight) {\r\n                        minCropBoxWidth = minCropBoxHeight * aspectRatio;\r\n                    }\r\n                    if (maxCropBoxHeight * aspectRatio > maxCropBoxWidth) {\r\n                        maxCropBoxHeight = maxCropBoxWidth / aspectRatio;\r\n                    } else {\r\n                        maxCropBoxWidth = maxCropBoxHeight * aspectRatio;\r\n                    }\r\n                }\r\n\r\n                // The minWidth/Height must be less than maxWidth/Height\r\n                cropBoxData.minWidth = Math.min(minCropBoxWidth, maxCropBoxWidth);\r\n                cropBoxData.minHeight = Math.min(minCropBoxHeight, maxCropBoxHeight);\r\n                cropBoxData.maxWidth = maxCropBoxWidth;\r\n                cropBoxData.maxHeight = maxCropBoxHeight;\r\n            }\r\n            if (positionLimited) {\r\n                if (limited) {\r\n                    cropBoxData.minLeft = Math.max(0, canvasData.left);\r\n                    cropBoxData.minTop = Math.max(0, canvasData.top);\r\n                    cropBoxData.maxLeft = Math.min(containerData.width, canvasData.left + canvasData.width) - cropBoxData.width;\r\n                    cropBoxData.maxTop = Math.min(containerData.height, canvasData.top + canvasData.height) - cropBoxData.height;\r\n                } else {\r\n                    cropBoxData.minLeft = 0;\r\n                    cropBoxData.minTop = 0;\r\n                    cropBoxData.maxLeft = containerData.width - cropBoxData.width;\r\n                    cropBoxData.maxTop = containerData.height - cropBoxData.height;\r\n                }\r\n            }\r\n        },\r\n        renderCropBox: function renderCropBox() {\r\n            var options = this.options,\r\n                    containerData = this.containerData,\r\n                    cropBoxData = this.cropBoxData;\r\n            if (cropBoxData.width > cropBoxData.maxWidth || cropBoxData.width < cropBoxData.minWidth) {\r\n                cropBoxData.left = cropBoxData.oldLeft;\r\n            }\r\n            if (cropBoxData.height > cropBoxData.maxHeight || cropBoxData.height < cropBoxData.minHeight) {\r\n                cropBoxData.top = cropBoxData.oldTop;\r\n            }\r\n            cropBoxData.width = Math.min(Math.max(cropBoxData.width, cropBoxData.minWidth), cropBoxData.maxWidth);\r\n            cropBoxData.height = Math.min(Math.max(cropBoxData.height, cropBoxData.minHeight), cropBoxData.maxHeight);\r\n            this.limitCropBox(false, true);\r\n            cropBoxData.left = Math.min(Math.max(cropBoxData.left, cropBoxData.minLeft), cropBoxData.maxLeft);\r\n            cropBoxData.top = Math.min(Math.max(cropBoxData.top, cropBoxData.minTop), cropBoxData.maxTop);\r\n            cropBoxData.oldLeft = cropBoxData.left;\r\n            cropBoxData.oldTop = cropBoxData.top;\r\n            if (options.movable && options.cropBoxMovable) {\r\n                // Turn to move the canvas when the crop box is equal to the container\r\n                setData(this.face, DATA_ACTION, cropBoxData.width >= containerData.width && cropBoxData.height >= containerData.height ? ACTION_MOVE : ACTION_ALL);\r\n            }\r\n            setStyle(this.cropBox, assign({\r\n                                              width: cropBoxData.width,\r\n                                              height: cropBoxData.height\r\n                                          }, getTransforms({\r\n                                                               translateX: cropBoxData.left,\r\n                                                               translateY: cropBoxData.top\r\n                                                           })));\r\n            if (this.cropped && this.limited) {\r\n                this.limitCanvas(true, true);\r\n            }\r\n            if (!this.disabled) {\r\n                this.output();\r\n            }\r\n        },\r\n        output: function output() {\r\n            this.preview();\r\n            dispatchEvent(this.element, EVENT_CROP, this.getData());\r\n        }\r\n    };\r\n\r\n    var preview = {\r\n        initPreview: function initPreview() {\r\n            var element = this.element,\r\n                    crossOrigin = this.crossOrigin;\r\n            var preview = this.options.preview;\r\n            var url = crossOrigin ? this.crossOriginUrl : this.url;\r\n            var alt = element.alt || 'The image to preview';\r\n            var image = document.createElement('img');\r\n            if (crossOrigin) {\r\n                image.crossOrigin = crossOrigin;\r\n            }\r\n            image.src = url;\r\n            image.alt = alt;\r\n            this.viewBox.appendChild(image);\r\n            this.viewBoxImage = image;\r\n            if (!preview) {\r\n                return;\r\n            }\r\n            var previews = preview;\r\n            if (typeof preview === 'string') {\r\n                previews = element.ownerDocument.querySelectorAll(preview);\r\n            } else if (preview.querySelector) {\r\n                previews = [preview];\r\n            }\r\n            this.previews = previews;\r\n            forEach(previews, function(el) {\r\n                var img = document.createElement('img');\r\n\r\n                // Save the original size for recover\r\n                setData(el, DATA_PREVIEW, {\r\n                    width: el.offsetWidth,\r\n                    height: el.offsetHeight,\r\n                    html: el.innerHTML\r\n                });\r\n                if (crossOrigin) {\r\n                    img.crossOrigin = crossOrigin;\r\n                }\r\n                img.src = url;\r\n                img.alt = alt;\r\n\r\n                /**\r\n                 * Override img element styles\r\n                 * Add `display:block` to avoid margin top issue\r\n                 * Add `height:auto` to override `height` attribute on IE8\r\n                 * (Occur only when margin-top <= -height)\r\n                 */\r\n                img.style.cssText = 'display:block;' + 'width:100%;' + 'height:auto;' + 'min-width:0!important;' + 'min-height:0!important;' + 'max-width:none!important;' + 'max-height:none!important;' + 'image-orientation:0deg!important;\"';\r\n                el.innerHTML = '';\r\n                el.appendChild(img);\r\n            });\r\n        },\r\n        resetPreview: function resetPreview() {\r\n            forEach(this.previews, function(element) {\r\n                var data = getData(element, DATA_PREVIEW);\r\n                setStyle(element, {\r\n                    width: data.width,\r\n                    height: data.height\r\n                });\r\n                element.innerHTML = data.html;\r\n                removeData(element, DATA_PREVIEW);\r\n            });\r\n        },\r\n        preview: function preview() {\r\n            var imageData = this.imageData,\r\n                    canvasData = this.canvasData,\r\n                    cropBoxData = this.cropBoxData;\r\n            var cropBoxWidth = cropBoxData.width,\r\n                    cropBoxHeight = cropBoxData.height;\r\n            var width = imageData.width,\r\n                    height = imageData.height;\r\n            var left = cropBoxData.left - canvasData.left - imageData.left;\r\n            var top = cropBoxData.top - canvasData.top - imageData.top;\r\n            if (!this.cropped || this.disabled) {\r\n                return;\r\n            }\r\n            setStyle(this.viewBoxImage, assign({\r\n                                                   width: width,\r\n                                                   height: height\r\n                                               }, getTransforms(assign({\r\n                                                                           translateX: -left,\r\n                                                                           translateY: -top\r\n                                                                       }, imageData))));\r\n            forEach(this.previews, function(element) {\r\n                var data = getData(element, DATA_PREVIEW);\r\n                var originalWidth = data.width;\r\n                var originalHeight = data.height;\r\n                var newWidth = originalWidth;\r\n                var newHeight = originalHeight;\r\n                var ratio = 1;\r\n                if (cropBoxWidth) {\r\n                    ratio = originalWidth / cropBoxWidth;\r\n                    newHeight = cropBoxHeight * ratio;\r\n                }\r\n                if (cropBoxHeight && newHeight > originalHeight) {\r\n                    ratio = originalHeight / cropBoxHeight;\r\n                    newWidth = cropBoxWidth * ratio;\r\n                    newHeight = originalHeight;\r\n                }\r\n                setStyle(element, {\r\n                    width: newWidth,\r\n                    height: newHeight\r\n                });\r\n                setStyle(element.getElementsByTagName('img')[0], assign({\r\n                                                                            width: width * ratio,\r\n                                                                            height: height * ratio\r\n                                                                        }, getTransforms(assign({\r\n                                                                                                    translateX: -left * ratio,\r\n                                                                                                    translateY: -top * ratio\r\n                                                                                                }, imageData))));\r\n            });\r\n        }\r\n    };\r\n\r\n    var events = {\r\n        bind: function bind() {\r\n            var element = this.element,\r\n                    options = this.options,\r\n                    cropper = this.cropper;\r\n            if (isFunction(options.cropstart)) {\r\n                addListener(element, EVENT_CROP_START, options.cropstart);\r\n            }\r\n            if (isFunction(options.cropmove)) {\r\n                addListener(element, EVENT_CROP_MOVE, options.cropmove);\r\n            }\r\n            if (isFunction(options.cropend)) {\r\n                addListener(element, EVENT_CROP_END, options.cropend);\r\n            }\r\n            if (isFunction(options.crop)) {\r\n                addListener(element, EVENT_CROP, options.crop);\r\n            }\r\n            if (isFunction(options.zoom)) {\r\n                addListener(element, EVENT_ZOOM, options.zoom);\r\n            }\r\n            addListener(cropper, EVENT_POINTER_DOWN, this.onCropStart = this.cropStart.bind(this));\r\n            if (options.zoomable && options.zoomOnWheel) {\r\n                addListener(cropper, EVENT_WHEEL, this.onWheel = this.wheel.bind(this), {\r\n                    passive: false,\r\n                    capture: true\r\n                });\r\n            }\r\n            if (options.toggleDragModeOnDblclick) {\r\n                addListener(cropper, EVENT_DBLCLICK, this.onDblclick = this.dblclick.bind(this));\r\n            }\r\n            addListener(element.ownerDocument, EVENT_POINTER_MOVE, this.onCropMove = this.cropMove.bind(this));\r\n            addListener(element.ownerDocument, EVENT_POINTER_UP, this.onCropEnd = this.cropEnd.bind(this));\r\n            if (options.responsive) {\r\n                addListener(window, EVENT_RESIZE, this.onResize = this.resize.bind(this));\r\n            }\r\n        },\r\n        unbind: function unbind() {\r\n            var element = this.element,\r\n                    options = this.options,\r\n                    cropper = this.cropper;\r\n            if (isFunction(options.cropstart)) {\r\n                removeListener(element, EVENT_CROP_START, options.cropstart);\r\n            }\r\n            if (isFunction(options.cropmove)) {\r\n                removeListener(element, EVENT_CROP_MOVE, options.cropmove);\r\n            }\r\n            if (isFunction(options.cropend)) {\r\n                removeListener(element, EVENT_CROP_END, options.cropend);\r\n            }\r\n            if (isFunction(options.crop)) {\r\n                removeListener(element, EVENT_CROP, options.crop);\r\n            }\r\n            if (isFunction(options.zoom)) {\r\n                removeListener(element, EVENT_ZOOM, options.zoom);\r\n            }\r\n            removeListener(cropper, EVENT_POINTER_DOWN, this.onCropStart);\r\n            if (options.zoomable && options.zoomOnWheel) {\r\n                removeListener(cropper, EVENT_WHEEL, this.onWheel, {\r\n                    passive: false,\r\n                    capture: true\r\n                });\r\n            }\r\n            if (options.toggleDragModeOnDblclick) {\r\n                removeListener(cropper, EVENT_DBLCLICK, this.onDblclick);\r\n            }\r\n            removeListener(element.ownerDocument, EVENT_POINTER_MOVE, this.onCropMove);\r\n            removeListener(element.ownerDocument, EVENT_POINTER_UP, this.onCropEnd);\r\n            if (options.responsive) {\r\n                removeListener(window, EVENT_RESIZE, this.onResize);\r\n            }\r\n        }\r\n    };\r\n\r\n    var handlers = {\r\n        resize: function resize() {\r\n            if (this.disabled) {\r\n                return;\r\n            }\r\n            var options = this.options,\r\n                    container = this.container,\r\n                    containerData = this.containerData;\r\n            var ratioX = container.offsetWidth / containerData.width;\r\n            var ratioY = container.offsetHeight / containerData.height;\r\n            var ratio = Math.abs(ratioX - 1) > Math.abs(ratioY - 1) ? ratioX : ratioY;\r\n\r\n            // Resize when width changed or height changed\r\n            if (ratio !== 1) {\r\n                var canvasData;\r\n                var cropBoxData;\r\n                if (options.restore) {\r\n                    canvasData = this.getCanvasData();\r\n                    cropBoxData = this.getCropBoxData();\r\n                }\r\n                this.render();\r\n                if (options.restore) {\r\n                    this.setCanvasData(forEach(canvasData, function(n, i) {\r\n                        canvasData[i] = n * ratio;\r\n                    }));\r\n                    this.setCropBoxData(forEach(cropBoxData, function(n, i) {\r\n                        cropBoxData[i] = n * ratio;\r\n                    }));\r\n                }\r\n            }\r\n        },\r\n        dblclick: function dblclick() {\r\n            if (this.disabled || this.options.dragMode === DRAG_MODE_NONE) {\r\n                return;\r\n            }\r\n            this.setDragMode(hasClass(this.dragBox, CLASS_CROP) ? DRAG_MODE_MOVE : DRAG_MODE_CROP);\r\n        },\r\n        wheel: function wheel(event) {\r\n            var _this = this;\r\n            var ratio = Number(this.options.wheelZoomRatio) || 0.1;\r\n            var delta = 1;\r\n            if (this.disabled) {\r\n                return;\r\n            }\r\n            event.preventDefault();\r\n\r\n            // Limit wheel speed to prevent zoom too fast (#21)\r\n            if (this.wheeling) {\r\n                return;\r\n            }\r\n            this.wheeling = true;\r\n            setTimeout(function() {\r\n                _this.wheeling = false;\r\n            }, 50);\r\n            if (event.deltaY) {\r\n                delta = event.deltaY > 0 ? 1 : -1;\r\n            } else if (event.wheelDelta) {\r\n                delta = -event.wheelDelta / 120;\r\n            } else if (event.detail) {\r\n                delta = event.detail > 0 ? 1 : -1;\r\n            }\r\n            this.zoom(-delta * ratio, event);\r\n        },\r\n        cropStart: function cropStart(event) {\r\n            var buttons = event.buttons,\r\n                    button = event.button;\r\n            if (this.disabled\r\n\r\n                // Handle mouse event and pointer event and ignore touch event\r\n                || (event.type === 'mousedown' || event.type === 'pointerdown' && event.pointerType === 'mouse') && (\r\n                        // No primary button (Usually the left button)\r\n                isNumber(buttons) && buttons !== 1 || isNumber(button) && button !== 0\r\n\r\n                // Open context menu\r\n                || event.ctrlKey)) {\r\n                return;\r\n            }\r\n            var options = this.options,\r\n                    pointers = this.pointers;\r\n            var action;\r\n            if (event.changedTouches) {\r\n                // Handle touch event\r\n                forEach(event.changedTouches, function(touch) {\r\n                    pointers[touch.identifier] = getPointer(touch);\r\n                });\r\n            } else {\r\n                // Handle mouse event and pointer event\r\n                pointers[event.pointerId || 0] = getPointer(event);\r\n            }\r\n            if (Object.keys(pointers).length > 1 && options.zoomable && options.zoomOnTouch) {\r\n                action = ACTION_ZOOM;\r\n            } else {\r\n                action = getData(event.target, DATA_ACTION);\r\n            }\r\n            if (!REGEXP_ACTIONS.test(action)) {\r\n                return;\r\n            }\r\n            if (dispatchEvent(this.element, EVENT_CROP_START, {\r\n                originalEvent: event,\r\n                action: action\r\n            }) === false) {\r\n                return;\r\n            }\r\n\r\n            // This line is required for preventing page zooming in iOS browsers\r\n            event.preventDefault();\r\n            this.action = action;\r\n            this.cropping = false;\r\n            if (action === ACTION_CROP) {\r\n                this.cropping = true;\r\n                addClass(this.dragBox, CLASS_MODAL);\r\n            }\r\n        },\r\n        cropMove: function cropMove(event) {\r\n            var action = this.action;\r\n            if (this.disabled || !action) {\r\n                return;\r\n            }\r\n            var pointers = this.pointers;\r\n            event.preventDefault();\r\n            if (dispatchEvent(this.element, EVENT_CROP_MOVE, {\r\n                originalEvent: event,\r\n                action: action\r\n            }) === false) {\r\n                return;\r\n            }\r\n            if (event.changedTouches) {\r\n                forEach(event.changedTouches, function(touch) {\r\n                    // The first parameter should not be undefined (#432)\r\n                    assign(pointers[touch.identifier] || {}, getPointer(touch, true));\r\n                });\r\n            } else {\r\n                assign(pointers[event.pointerId || 0] || {}, getPointer(event, true));\r\n            }\r\n            this.change(event);\r\n        },\r\n        cropEnd: function cropEnd(event) {\r\n            if (this.disabled) {\r\n                return;\r\n            }\r\n            var action = this.action,\r\n                    pointers = this.pointers;\r\n            if (event.changedTouches) {\r\n                forEach(event.changedTouches, function(touch) {\r\n                    delete pointers[touch.identifier];\r\n                });\r\n            } else {\r\n                delete pointers[event.pointerId || 0];\r\n            }\r\n            if (!action) {\r\n                return;\r\n            }\r\n            event.preventDefault();\r\n            if (!Object.keys(pointers).length) {\r\n                this.action = '';\r\n            }\r\n            if (this.cropping) {\r\n                this.cropping = false;\r\n                toggleClass(this.dragBox, CLASS_MODAL, this.cropped && this.options.modal);\r\n            }\r\n            dispatchEvent(this.element, EVENT_CROP_END, {\r\n                originalEvent: event,\r\n                action: action\r\n            });\r\n        }\r\n    };\r\n\r\n    var change = {\r\n        change: function change(event) {\r\n            var options = this.options,\r\n                    canvasData = this.canvasData,\r\n                    containerData = this.containerData,\r\n                    cropBoxData = this.cropBoxData,\r\n                    pointers = this.pointers;\r\n            var action = this.action;\r\n            var aspectRatio = options.aspectRatio;\r\n            var left = cropBoxData.left,\r\n                    top = cropBoxData.top,\r\n                    width = cropBoxData.width,\r\n                    height = cropBoxData.height;\r\n            var right = left + width;\r\n            var bottom = top + height;\r\n            var minLeft = 0;\r\n            var minTop = 0;\r\n            var maxWidth = containerData.width;\r\n            var maxHeight = containerData.height;\r\n            var renderable = true;\r\n            var offset;\r\n\r\n            // Locking aspect ratio in \"free mode\" by holding shift key\r\n            if (!aspectRatio && event.shiftKey) {\r\n                aspectRatio = width && height ? width / height : 1;\r\n            }\r\n            if (this.limited) {\r\n                minLeft = cropBoxData.minLeft;\r\n                minTop = cropBoxData.minTop;\r\n                maxWidth = minLeft + Math.min(containerData.width, canvasData.width, canvasData.left + canvasData.width);\r\n                maxHeight = minTop + Math.min(containerData.height, canvasData.height, canvasData.top + canvasData.height);\r\n            }\r\n            var pointer = pointers[Object.keys(pointers)[0]];\r\n            var range = {\r\n                x: pointer.endX - pointer.startX,\r\n                y: pointer.endY - pointer.startY\r\n            };\r\n            var check = function check(side) {\r\n                switch (side) {\r\n                    case ACTION_EAST:\r\n                        if (right + range.x > maxWidth) {\r\n                            range.x = maxWidth - right;\r\n                        }\r\n                        break;\r\n                    case ACTION_WEST:\r\n                        if (left + range.x < minLeft) {\r\n                            range.x = minLeft - left;\r\n                        }\r\n                        break;\r\n                    case ACTION_NORTH:\r\n                        if (top + range.y < minTop) {\r\n                            range.y = minTop - top;\r\n                        }\r\n                        break;\r\n                    case ACTION_SOUTH:\r\n                        if (bottom + range.y > maxHeight) {\r\n                            range.y = maxHeight - bottom;\r\n                        }\r\n                        break;\r\n                }\r\n            };\r\n            switch (action) {\r\n                    // Move crop box\r\n                case ACTION_ALL:\r\n                    left += range.x;\r\n                    top += range.y;\r\n                    break;\r\n\r\n                    // Resize crop box\r\n                case ACTION_EAST:\r\n                    if (range.x >= 0 && (right >= maxWidth || aspectRatio && (top <= minTop || bottom >= maxHeight))) {\r\n                        renderable = false;\r\n                        break;\r\n                    }\r\n                    check(ACTION_EAST);\r\n                    width += range.x;\r\n                    if (width < 0) {\r\n                        action = ACTION_WEST;\r\n                        width = -width;\r\n                        left -= width;\r\n                    }\r\n                    if (aspectRatio) {\r\n                        height = width / aspectRatio;\r\n                        top += (cropBoxData.height - height) / 2;\r\n                    }\r\n                    break;\r\n                case ACTION_NORTH:\r\n                    if (range.y <= 0 && (top <= minTop || aspectRatio && (left <= minLeft || right >= maxWidth))) {\r\n                        renderable = false;\r\n                        break;\r\n                    }\r\n                    check(ACTION_NORTH);\r\n                    height -= range.y;\r\n                    top += range.y;\r\n                    if (height < 0) {\r\n                        action = ACTION_SOUTH;\r\n                        height = -height;\r\n                        top -= height;\r\n                    }\r\n                    if (aspectRatio) {\r\n                        width = height * aspectRatio;\r\n                        left += (cropBoxData.width - width) / 2;\r\n                    }\r\n                    break;\r\n                case ACTION_WEST:\r\n                    if (range.x <= 0 && (left <= minLeft || aspectRatio && (top <= minTop || bottom >= maxHeight))) {\r\n                        renderable = false;\r\n                        break;\r\n                    }\r\n                    check(ACTION_WEST);\r\n                    width -= range.x;\r\n                    left += range.x;\r\n                    if (width < 0) {\r\n                        action = ACTION_EAST;\r\n                        width = -width;\r\n                        left -= width;\r\n                    }\r\n                    if (aspectRatio) {\r\n                        height = width / aspectRatio;\r\n                        top += (cropBoxData.height - height) / 2;\r\n                    }\r\n                    break;\r\n                case ACTION_SOUTH:\r\n                    if (range.y >= 0 && (bottom >= maxHeight || aspectRatio && (left <= minLeft || right >= maxWidth))) {\r\n                        renderable = false;\r\n                        break;\r\n                    }\r\n                    check(ACTION_SOUTH);\r\n                    height += range.y;\r\n                    if (height < 0) {\r\n                        action = ACTION_NORTH;\r\n                        height = -height;\r\n                        top -= height;\r\n                    }\r\n                    if (aspectRatio) {\r\n                        width = height * aspectRatio;\r\n                        left += (cropBoxData.width - width) / 2;\r\n                    }\r\n                    break;\r\n                case ACTION_NORTH_EAST:\r\n                    if (aspectRatio) {\r\n                        if (range.y <= 0 && (top <= minTop || right >= maxWidth)) {\r\n                            renderable = false;\r\n                            break;\r\n                        }\r\n                        check(ACTION_NORTH);\r\n                        height -= range.y;\r\n                        top += range.y;\r\n                        width = height * aspectRatio;\r\n                    } else {\r\n                        check(ACTION_NORTH);\r\n                        check(ACTION_EAST);\r\n                        if (range.x >= 0) {\r\n                            if (right < maxWidth) {\r\n                                width += range.x;\r\n                            } else if (range.y <= 0 && top <= minTop) {\r\n                                renderable = false;\r\n                            }\r\n                        } else {\r\n                            width += range.x;\r\n                        }\r\n                        if (range.y <= 0) {\r\n                            if (top > minTop) {\r\n                                height -= range.y;\r\n                                top += range.y;\r\n                            }\r\n                        } else {\r\n                            height -= range.y;\r\n                            top += range.y;\r\n                        }\r\n                    }\r\n                    if (width < 0 && height < 0) {\r\n                        action = ACTION_SOUTH_WEST;\r\n                        height = -height;\r\n                        width = -width;\r\n                        top -= height;\r\n                        left -= width;\r\n                    } else if (width < 0) {\r\n                        action = ACTION_NORTH_WEST;\r\n                        width = -width;\r\n                        left -= width;\r\n                    } else if (height < 0) {\r\n                        action = ACTION_SOUTH_EAST;\r\n                        height = -height;\r\n                        top -= height;\r\n                    }\r\n                    break;\r\n                case ACTION_NORTH_WEST:\r\n                    if (aspectRatio) {\r\n                        if (range.y <= 0 && (top <= minTop || left <= minLeft)) {\r\n                            renderable = false;\r\n                            break;\r\n                        }\r\n                        check(ACTION_NORTH);\r\n                        height -= range.y;\r\n                        top += range.y;\r\n                        width = height * aspectRatio;\r\n                        left += cropBoxData.width - width;\r\n                    } else {\r\n                        check(ACTION_NORTH);\r\n                        check(ACTION_WEST);\r\n                        if (range.x <= 0) {\r\n                            if (left > minLeft) {\r\n                                width -= range.x;\r\n                                left += range.x;\r\n                            } else if (range.y <= 0 && top <= minTop) {\r\n                                renderable = false;\r\n                            }\r\n                        } else {\r\n                            width -= range.x;\r\n                            left += range.x;\r\n                        }\r\n                        if (range.y <= 0) {\r\n                            if (top > minTop) {\r\n                                height -= range.y;\r\n                                top += range.y;\r\n                            }\r\n                        } else {\r\n                            height -= range.y;\r\n                            top += range.y;\r\n                        }\r\n                    }\r\n                    if (width < 0 && height < 0) {\r\n                        action = ACTION_SOUTH_EAST;\r\n                        height = -height;\r\n                        width = -width;\r\n                        top -= height;\r\n                        left -= width;\r\n                    } else if (width < 0) {\r\n                        action = ACTION_NORTH_EAST;\r\n                        width = -width;\r\n                        left -= width;\r\n                    } else if (height < 0) {\r\n                        action = ACTION_SOUTH_WEST;\r\n                        height = -height;\r\n                        top -= height;\r\n                    }\r\n                    break;\r\n                case ACTION_SOUTH_WEST:\r\n                    if (aspectRatio) {\r\n                        if (range.x <= 0 && (left <= minLeft || bottom >= maxHeight)) {\r\n                            renderable = false;\r\n                            break;\r\n                        }\r\n                        check(ACTION_WEST);\r\n                        width -= range.x;\r\n                        left += range.x;\r\n                        height = width / aspectRatio;\r\n                    } else {\r\n                        check(ACTION_SOUTH);\r\n                        check(ACTION_WEST);\r\n                        if (range.x <= 0) {\r\n                            if (left > minLeft) {\r\n                                width -= range.x;\r\n                                left += range.x;\r\n                            } else if (range.y >= 0 && bottom >= maxHeight) {\r\n                                renderable = false;\r\n                            }\r\n                        } else {\r\n                            width -= range.x;\r\n                            left += range.x;\r\n                        }\r\n                        if (range.y >= 0) {\r\n                            if (bottom < maxHeight) {\r\n                                height += range.y;\r\n                            }\r\n                        } else {\r\n                            height += range.y;\r\n                        }\r\n                    }\r\n                    if (width < 0 && height < 0) {\r\n                        action = ACTION_NORTH_EAST;\r\n                        height = -height;\r\n                        width = -width;\r\n                        top -= height;\r\n                        left -= width;\r\n                    } else if (width < 0) {\r\n                        action = ACTION_SOUTH_EAST;\r\n                        width = -width;\r\n                        left -= width;\r\n                    } else if (height < 0) {\r\n                        action = ACTION_NORTH_WEST;\r\n                        height = -height;\r\n                        top -= height;\r\n                    }\r\n                    break;\r\n                case ACTION_SOUTH_EAST:\r\n                    if (aspectRatio) {\r\n                        if (range.x >= 0 && (right >= maxWidth || bottom >= maxHeight)) {\r\n                            renderable = false;\r\n                            break;\r\n                        }\r\n                        check(ACTION_EAST);\r\n                        width += range.x;\r\n                        height = width / aspectRatio;\r\n                    } else {\r\n                        check(ACTION_SOUTH);\r\n                        check(ACTION_EAST);\r\n                        if (range.x >= 0) {\r\n                            if (right < maxWidth) {\r\n                                width += range.x;\r\n                            } else if (range.y >= 0 && bottom >= maxHeight) {\r\n                                renderable = false;\r\n                            }\r\n                        } else {\r\n                            width += range.x;\r\n                        }\r\n                        if (range.y >= 0) {\r\n                            if (bottom < maxHeight) {\r\n                                height += range.y;\r\n                            }\r\n                        } else {\r\n                            height += range.y;\r\n                        }\r\n                    }\r\n                    if (width < 0 && height < 0) {\r\n                        action = ACTION_NORTH_WEST;\r\n                        height = -height;\r\n                        width = -width;\r\n                        top -= height;\r\n                        left -= width;\r\n                    } else if (width < 0) {\r\n                        action = ACTION_SOUTH_WEST;\r\n                        width = -width;\r\n                        left -= width;\r\n                    } else if (height < 0) {\r\n                        action = ACTION_NORTH_EAST;\r\n                        height = -height;\r\n                        top -= height;\r\n                    }\r\n                    break;\r\n\r\n                    // Move canvas\r\n                case ACTION_MOVE:\r\n                    this.move(range.x, range.y);\r\n                    renderable = false;\r\n                    break;\r\n\r\n                    // Zoom canvas\r\n                case ACTION_ZOOM:\r\n                    this.zoom(getMaxZoomRatio(pointers), event);\r\n                    renderable = false;\r\n                    break;\r\n\r\n                    // Create crop box\r\n                case ACTION_CROP:\r\n                    if (!range.x || !range.y) {\r\n                        renderable = false;\r\n                        break;\r\n                    }\r\n                    offset = getOffset(this.cropper);\r\n                    left = pointer.startX - offset.left;\r\n                    top = pointer.startY - offset.top;\r\n                    width = cropBoxData.minWidth;\r\n                    height = cropBoxData.minHeight;\r\n                    if (range.x > 0) {\r\n                        action = range.y > 0 ? ACTION_SOUTH_EAST : ACTION_NORTH_EAST;\r\n                    } else if (range.x < 0) {\r\n                        left -= width;\r\n                        action = range.y > 0 ? ACTION_SOUTH_WEST : ACTION_NORTH_WEST;\r\n                    }\r\n                    if (range.y < 0) {\r\n                        top -= height;\r\n                    }\r\n\r\n                    // Show the crop box if is hidden\r\n                    if (!this.cropped) {\r\n                        removeClass(this.cropBox, CLASS_HIDDEN);\r\n                        this.cropped = true;\r\n                        if (this.limited) {\r\n                            this.limitCropBox(true, true);\r\n                        }\r\n                    }\r\n                    break;\r\n            }\r\n            if (renderable) {\r\n                cropBoxData.width = width;\r\n                cropBoxData.height = height;\r\n                cropBoxData.left = left;\r\n                cropBoxData.top = top;\r\n                this.action = action;\r\n                this.renderCropBox();\r\n            }\r\n\r\n            // Override\r\n            forEach(pointers, function(p) {\r\n                p.startX = p.endX;\r\n                p.startY = p.endY;\r\n            });\r\n        }\r\n    };\r\n\r\n    var methods = {\r\n        // Show the crop box manually\r\n        crop: function crop() {\r\n            if (this.ready && !this.cropped && !this.disabled) {\r\n                this.cropped = true;\r\n                this.limitCropBox(true, true);\r\n                if (this.options.modal) {\r\n                    addClass(this.dragBox, CLASS_MODAL);\r\n                }\r\n                removeClass(this.cropBox, CLASS_HIDDEN);\r\n                this.setCropBoxData(this.initialCropBoxData);\r\n            }\r\n            return this;\r\n        },\r\n        // Reset the image and crop box to their initial states\r\n        reset: function reset() {\r\n            if (this.ready && !this.disabled) {\r\n                this.imageData = assign({}, this.initialImageData);\r\n                this.canvasData = assign({}, this.initialCanvasData);\r\n                this.cropBoxData = assign({}, this.initialCropBoxData);\r\n                this.renderCanvas();\r\n                if (this.cropped) {\r\n                    this.renderCropBox();\r\n                }\r\n            }\r\n            return this;\r\n        },\r\n        // Clear the crop box\r\n        clear: function clear() {\r\n            if (this.cropped && !this.disabled) {\r\n                assign(this.cropBoxData, {\r\n                    left: 0,\r\n                    top: 0,\r\n                    width: 0,\r\n                    height: 0\r\n                });\r\n                this.cropped = false;\r\n                this.renderCropBox();\r\n                this.limitCanvas(true, true);\r\n\r\n                // Render canvas after crop box rendered\r\n                this.renderCanvas();\r\n                removeClass(this.dragBox, CLASS_MODAL);\r\n                addClass(this.cropBox, CLASS_HIDDEN);\r\n            }\r\n            return this;\r\n        },\r\n        /**\r\n         * Replace the image's src and rebuild the cropper\r\n         * @param {string} url - The new URL.\r\n         * @param {boolean} [hasSameSize] - Indicate if the new image has the same size as the old one.\r\n         * @returns {Cropper} this\r\n         */\r\n        replace: function replace(url) {\r\n            var hasSameSize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\r\n            if (!this.disabled && url) {\r\n                if (this.isImg) {\r\n                    this.element.src = url;\r\n                }\r\n                if (hasSameSize) {\r\n                    this.url = url;\r\n                    this.image.src = url;\r\n                    if (this.ready) {\r\n                        this.viewBoxImage.src = url;\r\n                        forEach(this.previews, function(element) {\r\n                            element.getElementsByTagName('img')[0].src = url;\r\n                        });\r\n                    }\r\n                } else {\r\n                    if (this.isImg) {\r\n                        this.replaced = true;\r\n                    }\r\n                    this.options.data = null;\r\n                    this.uncreate();\r\n                    this.load(url);\r\n                }\r\n            }\r\n            return this;\r\n        },\r\n        // Enable (unfreeze) the cropper\r\n        enable: function enable() {\r\n            if (this.ready && this.disabled) {\r\n                this.disabled = false;\r\n                removeClass(this.cropper, CLASS_DISABLED);\r\n            }\r\n            return this;\r\n        },\r\n        // Disable (freeze) the cropper\r\n        disable: function disable() {\r\n            if (this.ready && !this.disabled) {\r\n                this.disabled = true;\r\n                addClass(this.cropper, CLASS_DISABLED);\r\n            }\r\n            return this;\r\n        },\r\n        /**\r\n         * Destroy the cropper and remove the instance from the image\r\n         * @returns {Cropper} this\r\n         */\r\n        destroy: function destroy() {\r\n            var element = this.element;\r\n            if (!element[NAMESPACE]) {\r\n                return this;\r\n            }\r\n            element[NAMESPACE] = undefined;\r\n            if (this.isImg && this.replaced) {\r\n                element.src = this.originalUrl;\r\n            }\r\n            this.uncreate();\r\n            return this;\r\n        },\r\n        /**\r\n         * Move the canvas with relative offsets\r\n         * @param {number} offsetX - The relative offset distance on the x-axis.\r\n         * @param {number} [offsetY=offsetX] - The relative offset distance on the y-axis.\r\n         * @returns {Cropper} this\r\n         */\r\n        move: function move(offsetX) {\r\n            var offsetY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : offsetX;\r\n            var _this$canvasData = this.canvasData,\r\n                    left = _this$canvasData.left,\r\n                    top = _this$canvasData.top;\r\n            return this.moveTo(isUndefined(offsetX) ? offsetX : left + Number(offsetX), isUndefined(offsetY) ? offsetY : top + Number(offsetY));\r\n        },\r\n        /**\r\n         * Move the canvas to an absolute point\r\n         * @param {number} x - The x-axis coordinate.\r\n         * @param {number} [y=x] - The y-axis coordinate.\r\n         * @returns {Cropper} this\r\n         */\r\n        moveTo: function moveTo(x) {\r\n            var y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : x;\r\n            var canvasData = this.canvasData;\r\n            var changed = false;\r\n            x = Number(x);\r\n            y = Number(y);\r\n            if (this.ready && !this.disabled && this.options.movable) {\r\n                if (isNumber(x)) {\r\n                    canvasData.left = x;\r\n                    changed = true;\r\n                }\r\n                if (isNumber(y)) {\r\n                    canvasData.top = y;\r\n                    changed = true;\r\n                }\r\n                if (changed) {\r\n                    this.renderCanvas(true);\r\n                }\r\n            }\r\n            return this;\r\n        },\r\n        /**\r\n         * Zoom the canvas with a relative ratio\r\n         * @param {number} ratio - The target ratio.\r\n         * @param {Event} _originalEvent - The original event if any.\r\n         * @returns {Cropper} this\r\n         */\r\n        zoom: function zoom(ratio, _originalEvent) {\r\n            var canvasData = this.canvasData;\r\n            ratio = Number(ratio);\r\n            if (ratio < 0) {\r\n                ratio = 1 / (1 - ratio);\r\n            } else {\r\n                ratio = 1 + ratio;\r\n            }\r\n            return this.zoomTo(canvasData.width * ratio / canvasData.naturalWidth, null, _originalEvent);\r\n        },\r\n        /**\r\n         * Zoom the canvas to an absolute ratio\r\n         * @param {number} ratio - The target ratio.\r\n         * @param {Object} pivot - The zoom pivot point coordinate.\r\n         * @param {Event} _originalEvent - The original event if any.\r\n         * @returns {Cropper} this\r\n         */\r\n        zoomTo: function zoomTo(ratio, pivot, _originalEvent) {\r\n            var options = this.options,\r\n                    canvasData = this.canvasData;\r\n            var width = canvasData.width,\r\n                    height = canvasData.height,\r\n                    naturalWidth = canvasData.naturalWidth,\r\n                    naturalHeight = canvasData.naturalHeight;\r\n            ratio = Number(ratio);\r\n            if (ratio >= 0 && this.ready && !this.disabled && options.zoomable) {\r\n                var newWidth = naturalWidth * ratio;\r\n                var newHeight = naturalHeight * ratio;\r\n                if (dispatchEvent(this.element, EVENT_ZOOM, {\r\n                    ratio: ratio,\r\n                    oldRatio: width / naturalWidth,\r\n                    originalEvent: _originalEvent\r\n                }) === false) {\r\n                    return this;\r\n                }\r\n                if (_originalEvent) {\r\n                    var pointers = this.pointers;\r\n                    var offset = getOffset(this.cropper);\r\n                    var center = pointers && Object.keys(pointers).length ? getPointersCenter(pointers) : {\r\n                        pageX: _originalEvent.pageX,\r\n                        pageY: _originalEvent.pageY\r\n                    };\r\n\r\n                    // Zoom from the triggering point of the event\r\n                    canvasData.left -= (newWidth - width) * ((center.pageX - offset.left - canvasData.left) / width);\r\n                    canvasData.top -= (newHeight - height) * ((center.pageY - offset.top - canvasData.top) / height);\r\n                } else if (isPlainObject(pivot) && isNumber(pivot.x) && isNumber(pivot.y)) {\r\n                    canvasData.left -= (newWidth - width) * ((pivot.x - canvasData.left) / width);\r\n                    canvasData.top -= (newHeight - height) * ((pivot.y - canvasData.top) / height);\r\n                } else {\r\n                    // Zoom from the center of the canvas\r\n                    canvasData.left -= (newWidth - width) / 2;\r\n                    canvasData.top -= (newHeight - height) / 2;\r\n                }\r\n                canvasData.width = newWidth;\r\n                canvasData.height = newHeight;\r\n                this.renderCanvas(true);\r\n            }\r\n            return this;\r\n        },\r\n        /**\r\n         * Rotate the canvas with a relative degree\r\n         * @param {number} degree - The rotate degree.\r\n         * @returns {Cropper} this\r\n         */\r\n        rotate: function rotate(degree) {\r\n            return this.rotateTo((this.imageData.rotate || 0) + Number(degree));\r\n        },\r\n        /**\r\n         * Rotate the canvas to an absolute degree\r\n         * @param {number} degree - The rotate degree.\r\n         * @returns {Cropper} this\r\n         */\r\n        rotateTo: function rotateTo(degree) {\r\n            degree = Number(degree);\r\n            if (isNumber(degree) && this.ready && !this.disabled && this.options.rotatable) {\r\n                this.imageData.rotate = degree % 360;\r\n                this.renderCanvas(true, true);\r\n            }\r\n            return this;\r\n        },\r\n        /**\r\n         * Scale the image on the x-axis.\r\n         * @param {number} scaleX - The scale ratio on the x-axis.\r\n         * @returns {Cropper} this\r\n         */\r\n        scaleX: function scaleX(_scaleX) {\r\n            var scaleY = this.imageData.scaleY;\r\n            return this.scale(_scaleX, isNumber(scaleY) ? scaleY : 1);\r\n        },\r\n        /**\r\n         * Scale the image on the y-axis.\r\n         * @param {number} scaleY - The scale ratio on the y-axis.\r\n         * @returns {Cropper} this\r\n         */\r\n        scaleY: function scaleY(_scaleY) {\r\n            var scaleX = this.imageData.scaleX;\r\n            return this.scale(isNumber(scaleX) ? scaleX : 1, _scaleY);\r\n        },\r\n        /**\r\n         * Scale the image\r\n         * @param {number} scaleX - The scale ratio on the x-axis.\r\n         * @param {number} [scaleY=scaleX] - The scale ratio on the y-axis.\r\n         * @returns {Cropper} this\r\n         */\r\n        scale: function scale(scaleX) {\r\n            var scaleY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : scaleX;\r\n            var imageData = this.imageData;\r\n            var transformed = false;\r\n            scaleX = Number(scaleX);\r\n            scaleY = Number(scaleY);\r\n            if (this.ready && !this.disabled && this.options.scalable) {\r\n                if (isNumber(scaleX)) {\r\n                    imageData.scaleX = scaleX;\r\n                    transformed = true;\r\n                }\r\n                if (isNumber(scaleY)) {\r\n                    imageData.scaleY = scaleY;\r\n                    transformed = true;\r\n                }\r\n                if (transformed) {\r\n                    this.renderCanvas(true, true);\r\n                }\r\n            }\r\n            return this;\r\n        },\r\n        /**\r\n         * Get the cropped area position and size data (base on the original image)\r\n         * @param {boolean} [rounded=false] - Indicate if round the data values or not.\r\n         * @returns {Object} The result cropped data.\r\n         */\r\n        getData: function getData() {\r\n            var rounded = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\r\n            var options = this.options,\r\n                    imageData = this.imageData,\r\n                    canvasData = this.canvasData,\r\n                    cropBoxData = this.cropBoxData;\r\n            var data;\r\n            if (this.ready && this.cropped) {\r\n                data = {\r\n                    x: cropBoxData.left - canvasData.left,\r\n                    y: cropBoxData.top - canvasData.top,\r\n                    width: cropBoxData.width,\r\n                    height: cropBoxData.height\r\n                };\r\n                var ratio = imageData.width / imageData.naturalWidth;\r\n                forEach(data, function(n, i) {\r\n                    data[i] = n / ratio;\r\n                });\r\n                if (rounded) {\r\n                    // In case rounding off leads to extra 1px in right or bottom border\r\n                    // we should round the top-left corner and the dimension (#343).\r\n                    var bottom = Math.round(data.y + data.height);\r\n                    var right = Math.round(data.x + data.width);\r\n                    data.x = Math.round(data.x);\r\n                    data.y = Math.round(data.y);\r\n                    data.width = right - data.x;\r\n                    data.height = bottom - data.y;\r\n                }\r\n            } else {\r\n                data = {\r\n                    x: 0,\r\n                    y: 0,\r\n                    width: 0,\r\n                    height: 0\r\n                };\r\n            }\r\n            if (options.rotatable) {\r\n                data.rotate = imageData.rotate || 0;\r\n            }\r\n            if (options.scalable) {\r\n                data.scaleX = imageData.scaleX || 1;\r\n                data.scaleY = imageData.scaleY || 1;\r\n            }\r\n            return data;\r\n        },\r\n        /**\r\n         * Set the cropped area position and size with new data\r\n         * @param {Object} data - The new data.\r\n         * @returns {Cropper} this\r\n         */\r\n        setData: function setData(data) {\r\n            var options = this.options,\r\n                    imageData = this.imageData,\r\n                    canvasData = this.canvasData;\r\n            var cropBoxData = {};\r\n            if (this.ready && !this.disabled && isPlainObject(data)) {\r\n                var transformed = false;\r\n                if (options.rotatable) {\r\n                    if (isNumber(data.rotate) && data.rotate !== imageData.rotate) {\r\n                        imageData.rotate = data.rotate;\r\n                        transformed = true;\r\n                    }\r\n                }\r\n                if (options.scalable) {\r\n                    if (isNumber(data.scaleX) && data.scaleX !== imageData.scaleX) {\r\n                        imageData.scaleX = data.scaleX;\r\n                        transformed = true;\r\n                    }\r\n                    if (isNumber(data.scaleY) && data.scaleY !== imageData.scaleY) {\r\n                        imageData.scaleY = data.scaleY;\r\n                        transformed = true;\r\n                    }\r\n                }\r\n                if (transformed) {\r\n                    this.renderCanvas(true, true);\r\n                }\r\n                var ratio = imageData.width / imageData.naturalWidth;\r\n                if (isNumber(data.x)) {\r\n                    cropBoxData.left = data.x * ratio + canvasData.left;\r\n                }\r\n                if (isNumber(data.y)) {\r\n                    cropBoxData.top = data.y * ratio + canvasData.top;\r\n                }\r\n                if (isNumber(data.width)) {\r\n                    cropBoxData.width = data.width * ratio;\r\n                }\r\n                if (isNumber(data.height)) {\r\n                    cropBoxData.height = data.height * ratio;\r\n                }\r\n                this.setCropBoxData(cropBoxData);\r\n            }\r\n            return this;\r\n        },\r\n        /**\r\n         * Get the container size data.\r\n         * @returns {Object} The result container data.\r\n         */\r\n        getContainerData: function getContainerData() {\r\n            return this.ready ? assign({}, this.containerData) : {};\r\n        },\r\n        /**\r\n         * Get the image position and size data.\r\n         * @returns {Object} The result image data.\r\n         */\r\n        getImageData: function getImageData() {\r\n            return this.sized ? assign({}, this.imageData) : {};\r\n        },\r\n        /**\r\n         * Get the canvas position and size data.\r\n         * @returns {Object} The result canvas data.\r\n         */\r\n        getCanvasData: function getCanvasData() {\r\n            var canvasData = this.canvasData;\r\n            var data = {};\r\n            if (this.ready) {\r\n                forEach(['left', 'top', 'width', 'height', 'naturalWidth', 'naturalHeight'], function(n) {\r\n                    data[n] = canvasData[n];\r\n                });\r\n            }\r\n            return data;\r\n        },\r\n        /**\r\n         * Set the canvas position and size with new data.\r\n         * @param {Object} data - The new canvas data.\r\n         * @returns {Cropper} this\r\n         */\r\n        setCanvasData: function setCanvasData(data) {\r\n            var canvasData = this.canvasData;\r\n            var aspectRatio = canvasData.aspectRatio;\r\n            if (this.ready && !this.disabled && isPlainObject(data)) {\r\n                if (isNumber(data.left)) {\r\n                    canvasData.left = data.left;\r\n                }\r\n                if (isNumber(data.top)) {\r\n                    canvasData.top = data.top;\r\n                }\r\n                if (isNumber(data.width)) {\r\n                    canvasData.width = data.width;\r\n                    canvasData.height = data.width / aspectRatio;\r\n                } else if (isNumber(data.height)) {\r\n                    canvasData.height = data.height;\r\n                    canvasData.width = data.height * aspectRatio;\r\n                }\r\n                this.renderCanvas(true);\r\n            }\r\n            return this;\r\n        },\r\n        /**\r\n         * Get the crop box position and size data.\r\n         * @returns {Object} The result crop box data.\r\n         */\r\n        getCropBoxData: function getCropBoxData() {\r\n            var cropBoxData = this.cropBoxData;\r\n            var data;\r\n            if (this.ready && this.cropped) {\r\n                data = {\r\n                    left: cropBoxData.left,\r\n                    top: cropBoxData.top,\r\n                    width: cropBoxData.width,\r\n                    height: cropBoxData.height\r\n                };\r\n            }\r\n            return data || {};\r\n        },\r\n        /**\r\n         * Set the crop box position and size with new data.\r\n         * @param {Object} data - The new crop box data.\r\n         * @returns {Cropper} this\r\n         */\r\n        setCropBoxData: function setCropBoxData(data) {\r\n            var cropBoxData = this.cropBoxData;\r\n            var aspectRatio = this.options.aspectRatio;\r\n            var widthChanged;\r\n            var heightChanged;\r\n            if (this.ready && this.cropped && !this.disabled && isPlainObject(data)) {\r\n                if (isNumber(data.left)) {\r\n                    cropBoxData.left = data.left;\r\n                }\r\n                if (isNumber(data.top)) {\r\n                    cropBoxData.top = data.top;\r\n                }\r\n                if (isNumber(data.width) && data.width !== cropBoxData.width) {\r\n                    widthChanged = true;\r\n                    cropBoxData.width = data.width;\r\n                }\r\n                if (isNumber(data.height) && data.height !== cropBoxData.height) {\r\n                    heightChanged = true;\r\n                    cropBoxData.height = data.height;\r\n                }\r\n                if (aspectRatio) {\r\n                    if (widthChanged) {\r\n                        cropBoxData.height = cropBoxData.width / aspectRatio;\r\n                    } else if (heightChanged) {\r\n                        cropBoxData.width = cropBoxData.height * aspectRatio;\r\n                    }\r\n                }\r\n                this.renderCropBox();\r\n            }\r\n            return this;\r\n        },\r\n        /**\r\n         * Get a canvas drawn the cropped image.\r\n         * @param {Object} [options={}] - The config options.\r\n         * @returns {HTMLCanvasElement} - The result canvas.\r\n         */\r\n        getCroppedCanvas: function getCroppedCanvas() {\r\n            var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\r\n            if (!this.ready || !window.HTMLCanvasElement) {\r\n                return null;\r\n            }\r\n            var canvasData = this.canvasData;\r\n            var source = getSourceCanvas(this.image, this.imageData, canvasData, options);\r\n\r\n            // Returns the source canvas if it is not cropped.\r\n            if (!this.cropped) {\r\n                return source;\r\n            }\r\n            var _this$getData = this.getData(options.rounded),\r\n                    initialX = _this$getData.x,\r\n                    initialY = _this$getData.y,\r\n                    initialWidth = _this$getData.width,\r\n                    initialHeight = _this$getData.height;\r\n            var ratio = source.width / Math.floor(canvasData.naturalWidth);\r\n            if (ratio !== 1) {\r\n                initialX *= ratio;\r\n                initialY *= ratio;\r\n                initialWidth *= ratio;\r\n                initialHeight *= ratio;\r\n            }\r\n            var aspectRatio = initialWidth / initialHeight;\r\n            var maxSizes = getAdjustedSizes({\r\n                                                aspectRatio: aspectRatio,\r\n                                                width: options.maxWidth || Infinity,\r\n                                                height: options.maxHeight || Infinity\r\n                                            });\r\n            var minSizes = getAdjustedSizes({\r\n                                                aspectRatio: aspectRatio,\r\n                                                width: options.minWidth || 0,\r\n                                                height: options.minHeight || 0\r\n                                            }, 'cover');\r\n            var _getAdjustedSizes = getAdjustedSizes({\r\n                                                         aspectRatio: aspectRatio,\r\n                                                         width: options.width || (ratio !== 1 ? source.width : initialWidth),\r\n                                                         height: options.height || (ratio !== 1 ? source.height : initialHeight)\r\n                                                     }),\r\n                    width = _getAdjustedSizes.width,\r\n                    height = _getAdjustedSizes.height;\r\n            width = Math.min(maxSizes.width, Math.max(minSizes.width, width));\r\n            height = Math.min(maxSizes.height, Math.max(minSizes.height, height));\r\n            var canvas = document.createElement('canvas');\r\n            var context = canvas.getContext('2d');\r\n            canvas.width = normalizeDecimalNumber(width);\r\n            canvas.height = normalizeDecimalNumber(height);\r\n            context.fillStyle = options.fillColor || 'transparent';\r\n            context.fillRect(0, 0, width, height);\r\n            var _options$imageSmoothi = options.imageSmoothingEnabled,\r\n                    imageSmoothingEnabled = _options$imageSmoothi === void 0 ? true : _options$imageSmoothi,\r\n                    imageSmoothingQuality = options.imageSmoothingQuality;\r\n            context.imageSmoothingEnabled = imageSmoothingEnabled;\r\n            if (imageSmoothingQuality) {\r\n                context.imageSmoothingQuality = imageSmoothingQuality;\r\n            }\r\n\r\n            // https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.drawImage\r\n            var sourceWidth = source.width;\r\n            var sourceHeight = source.height;\r\n\r\n            // Source canvas parameters\r\n            var srcX = initialX;\r\n            var srcY = initialY;\r\n            var srcWidth;\r\n            var srcHeight;\r\n\r\n            // Destination canvas parameters\r\n            var dstX;\r\n            var dstY;\r\n            var dstWidth;\r\n            var dstHeight;\r\n            if (srcX <= -initialWidth || srcX > sourceWidth) {\r\n                srcX = 0;\r\n                srcWidth = 0;\r\n                dstX = 0;\r\n                dstWidth = 0;\r\n            } else if (srcX <= 0) {\r\n                dstX = -srcX;\r\n                srcX = 0;\r\n                srcWidth = Math.min(sourceWidth, initialWidth + srcX);\r\n                dstWidth = srcWidth;\r\n            } else if (srcX <= sourceWidth) {\r\n                dstX = 0;\r\n                srcWidth = Math.min(initialWidth, sourceWidth - srcX);\r\n                dstWidth = srcWidth;\r\n            }\r\n            if (srcWidth <= 0 || srcY <= -initialHeight || srcY > sourceHeight) {\r\n                srcY = 0;\r\n                srcHeight = 0;\r\n                dstY = 0;\r\n                dstHeight = 0;\r\n            } else if (srcY <= 0) {\r\n                dstY = -srcY;\r\n                srcY = 0;\r\n                srcHeight = Math.min(sourceHeight, initialHeight + srcY);\r\n                dstHeight = srcHeight;\r\n            } else if (srcY <= sourceHeight) {\r\n                dstY = 0;\r\n                srcHeight = Math.min(initialHeight, sourceHeight - srcY);\r\n                dstHeight = srcHeight;\r\n            }\r\n            var params = [srcX, srcY, srcWidth, srcHeight];\r\n\r\n            // Avoid \"IndexSizeError\"\r\n            if (dstWidth > 0 && dstHeight > 0) {\r\n                var scale = width / initialWidth;\r\n                params.push(dstX * scale, dstY * scale, dstWidth * scale, dstHeight * scale);\r\n            }\r\n\r\n            // All the numerical parameters should be integer for `drawImage`\r\n            // https://github.com/fengyuanchen/cropper/issues/476\r\n            context.drawImage.apply(context, [source].concat(_toConsumableArray(params.map(function(param) {\r\n                return Math.floor(normalizeDecimalNumber(param));\r\n            }))));\r\n            return canvas;\r\n        },\r\n        /**\r\n         * Change the aspect ratio of the crop box.\r\n         * @param {number} aspectRatio - The new aspect ratio.\r\n         * @returns {Cropper} this\r\n         */\r\n        setAspectRatio: function setAspectRatio(aspectRatio) {\r\n            var options = this.options;\r\n            if (!this.disabled && !isUndefined(aspectRatio)) {\r\n                // 0 -> NaN\r\n                options.aspectRatio = Math.max(0, aspectRatio) || NaN;\r\n                if (this.ready) {\r\n                    this.initCropBox();\r\n                    if (this.cropped) {\r\n                        this.renderCropBox();\r\n                    }\r\n                }\r\n            }\r\n            return this;\r\n        },\r\n        /**\r\n         * Change the drag mode.\r\n         * @param {string} mode - The new drag mode.\r\n         * @returns {Cropper} this\r\n         */\r\n        setDragMode: function setDragMode(mode) {\r\n            var options = this.options,\r\n                    dragBox = this.dragBox,\r\n                    face = this.face;\r\n            if (this.ready && !this.disabled) {\r\n                var croppable = mode === DRAG_MODE_CROP;\r\n                var movable = options.movable && mode === DRAG_MODE_MOVE;\r\n                mode = croppable || movable ? mode : DRAG_MODE_NONE;\r\n                options.dragMode = mode;\r\n                setData(dragBox, DATA_ACTION, mode);\r\n                toggleClass(dragBox, CLASS_CROP, croppable);\r\n                toggleClass(dragBox, CLASS_MOVE, movable);\r\n                if (!options.cropBoxMovable) {\r\n                    // Sync drag mode to crop box when it is not movable\r\n                    setData(face, DATA_ACTION, mode);\r\n                    toggleClass(face, CLASS_CROP, croppable);\r\n                    toggleClass(face, CLASS_MOVE, movable);\r\n                }\r\n            }\r\n            return this;\r\n        }\r\n    };\r\n\r\n    var AnotherCropper = WINDOW.Cropper;\r\n    var Cropper = /*#__PURE__*/function() {\r\n        /**\r\n         * Create a new Cropper.\r\n         * @param {Element} element - The target element for cropping.\r\n         * @param {Object} [options={}] - The configuration options.\r\n         */\r\n        function Cropper(element) {\r\n            var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\r\n            _classCallCheck(this, Cropper);\r\n            if (!element || !REGEXP_TAG_NAME.test(element.tagName)) {\r\n                throw new Error('The first argument is required and must be an <img> or <canvas> element.');\r\n            }\r\n            this.element = element;\r\n            this.options = assign({}, DEFAULTS, isPlainObject(options) && options);\r\n            this.cropped = false;\r\n            this.disabled = false;\r\n            this.pointers = {};\r\n            this.ready = false;\r\n            this.reloading = false;\r\n            this.replaced = false;\r\n            this.sized = false;\r\n            this.sizing = false;\r\n            this.init();\r\n        }\r\n\r\n        _createClass(Cropper, [{\r\n            key: \"init\",\r\n            value: function init() {\r\n                var element = this.element;\r\n                var tagName = element.tagName.toLowerCase();\r\n                var url;\r\n                if (element[NAMESPACE]) {\r\n                    return;\r\n                }\r\n                element[NAMESPACE] = this;\r\n                if (tagName === 'img') {\r\n                    this.isImg = true;\r\n\r\n                    // e.g.: \"img/picture.jpg\"\r\n                    url = element.getAttribute('src') || '';\r\n                    this.originalUrl = url;\r\n\r\n                    // Stop when it's a blank image\r\n                    if (!url) {\r\n                        return;\r\n                    }\r\n\r\n                    // e.g.: \"https://example.com/img/picture.jpg\"\r\n                    url = element.src;\r\n                } else if (tagName === 'canvas' && window.HTMLCanvasElement) {\r\n                    url = element.toDataURL();\r\n                }\r\n                this.load(url);\r\n            }\r\n        }, {\r\n            key: \"load\",\r\n            value: function load(url) {\r\n                var _this = this;\r\n                if (!url) {\r\n                    return;\r\n                }\r\n                this.url = url;\r\n                this.imageData = {};\r\n                var element = this.element,\r\n                        options = this.options;\r\n                if (!options.rotatable && !options.scalable) {\r\n                    options.checkOrientation = false;\r\n                }\r\n\r\n                // Only IE10+ supports Typed Arrays\r\n                if (!options.checkOrientation || !window.ArrayBuffer) {\r\n                    this.clone();\r\n                    return;\r\n                }\r\n\r\n                // Detect the mime type of the image directly if it is a Data URL\r\n                if (REGEXP_DATA_URL.test(url)) {\r\n                    // Read ArrayBuffer from Data URL of JPEG images directly for better performance\r\n                    if (REGEXP_DATA_URL_JPEG.test(url)) {\r\n                        this.read(dataURLToArrayBuffer(url));\r\n                    } else {\r\n                        // Only a JPEG image may contains Exif Orientation information,\r\n                        // the rest types of Data URLs are not necessary to check orientation at all.\r\n                        this.clone();\r\n                    }\r\n                    return;\r\n                }\r\n\r\n                // 1. Detect the mime type of the image by a XMLHttpRequest.\r\n                // 2. Load the image as ArrayBuffer for reading orientation if its a JPEG image.\r\n                var xhr = new XMLHttpRequest();\r\n                var clone = this.clone.bind(this);\r\n                this.reloading = true;\r\n                this.xhr = xhr;\r\n\r\n                // 1. Cross origin requests are only supported for protocol schemes:\r\n                // http, https, data, chrome, chrome-extension.\r\n                // 2. Access to XMLHttpRequest from a Data URL will be blocked by CORS policy\r\n                // in some browsers as IE11 and Safari.\r\n                xhr.onabort = clone;\r\n                xhr.onerror = clone;\r\n                xhr.ontimeout = clone;\r\n                xhr.onprogress = function() {\r\n                    // Abort the request directly if it not a JPEG image for better performance\r\n                    if (xhr.getResponseHeader('content-type') !== MIME_TYPE_JPEG) {\r\n                        xhr.abort();\r\n                    }\r\n                };\r\n                xhr.onload = function() {\r\n                    _this.read(xhr.response);\r\n                };\r\n                xhr.onloadend = function() {\r\n                    _this.reloading = false;\r\n                    _this.xhr = null;\r\n                };\r\n\r\n                // Bust cache when there is a \"crossOrigin\" property to avoid browser cache error\r\n                if (options.checkCrossOrigin && isCrossOriginURL(url) && element.crossOrigin) {\r\n                    url = addTimestamp(url);\r\n                }\r\n\r\n                // The third parameter is required for avoiding side-effect (#682)\r\n                xhr.open('GET', url, true);\r\n                xhr.responseType = 'arraybuffer';\r\n                xhr.withCredentials = element.crossOrigin === 'use-credentials';\r\n                xhr.send();\r\n            }\r\n        }, {\r\n            key: \"read\",\r\n            value: function read(arrayBuffer) {\r\n                var options = this.options,\r\n                        imageData = this.imageData;\r\n\r\n                // Reset the orientation value to its default value 1\r\n                // as some iOS browsers will render image with its orientation\r\n                var orientation = resetAndGetOrientation(arrayBuffer);\r\n                var rotate = 0;\r\n                var scaleX = 1;\r\n                var scaleY = 1;\r\n                if (orientation > 1) {\r\n                    // Generate a new URL which has the default orientation value\r\n                    this.url = arrayBufferToDataURL(arrayBuffer, MIME_TYPE_JPEG);\r\n                    var _parseOrientation = parseOrientation(orientation);\r\n                    rotate = _parseOrientation.rotate;\r\n                    scaleX = _parseOrientation.scaleX;\r\n                    scaleY = _parseOrientation.scaleY;\r\n                }\r\n                if (options.rotatable) {\r\n                    imageData.rotate = rotate;\r\n                }\r\n                if (options.scalable) {\r\n                    imageData.scaleX = scaleX;\r\n                    imageData.scaleY = scaleY;\r\n                }\r\n                this.clone();\r\n            }\r\n        }, {\r\n            key: \"clone\",\r\n            value: function clone() {\r\n                var element = this.element,\r\n                        url = this.url;\r\n                var crossOrigin = element.crossOrigin;\r\n                var crossOriginUrl = url;\r\n                if (this.options.checkCrossOrigin && isCrossOriginURL(url)) {\r\n                    if (!crossOrigin) {\r\n                        crossOrigin = 'anonymous';\r\n                    }\r\n\r\n                    // Bust cache when there is not a \"crossOrigin\" property (#519)\r\n                    crossOriginUrl = addTimestamp(url);\r\n                }\r\n                this.crossOrigin = crossOrigin;\r\n                this.crossOriginUrl = crossOriginUrl;\r\n                var image = document.createElement('img');\r\n                if (crossOrigin) {\r\n                    image.crossOrigin = crossOrigin;\r\n                }\r\n                image.src = crossOriginUrl || url;\r\n                image.alt = element.alt || 'The image to crop';\r\n                this.image = image;\r\n                image.onload = this.start.bind(this);\r\n                image.onerror = this.stop.bind(this);\r\n                addClass(image, CLASS_HIDE);\r\n                element.parentNode.insertBefore(image, element.nextSibling);\r\n            }\r\n        }, {\r\n            key: \"start\",\r\n            value: function start() {\r\n                var _this2 = this;\r\n                var image = this.image;\r\n                image.onload = null;\r\n                image.onerror = null;\r\n                this.sizing = true;\r\n\r\n                // Match all browsers that use WebKit as the layout engine in iOS devices,\r\n                // such as Safari for iOS, Chrome for iOS, and in-app browsers.\r\n                var isIOSWebKit = WINDOW.navigator && /(?:iPad|iPhone|iPod).*?AppleWebKit/i.test(WINDOW.navigator.userAgent);\r\n                var done = function done(naturalWidth, naturalHeight) {\r\n                    assign(_this2.imageData, {\r\n                        naturalWidth: naturalWidth,\r\n                        naturalHeight: naturalHeight,\r\n                        aspectRatio: naturalWidth / naturalHeight\r\n                    });\r\n                    _this2.initialImageData = assign({}, _this2.imageData);\r\n                    _this2.sizing = false;\r\n                    _this2.sized = true;\r\n                    _this2.build();\r\n                };\r\n\r\n                // Most modern browsers (excepts iOS WebKit)\r\n                if (image.naturalWidth && !isIOSWebKit) {\r\n                    done(image.naturalWidth, image.naturalHeight);\r\n                    return;\r\n                }\r\n                var sizingImage = document.createElement('img');\r\n                var body = document.body || document.documentElement;\r\n                this.sizingImage = sizingImage;\r\n                sizingImage.onload = function() {\r\n                    done(sizingImage.width, sizingImage.height);\r\n                    if (!isIOSWebKit) {\r\n                        body.removeChild(sizingImage);\r\n                    }\r\n                };\r\n                sizingImage.src = image.src;\r\n\r\n                // iOS WebKit will convert the image automatically\r\n                // with its orientation once append it into DOM (#279)\r\n                if (!isIOSWebKit) {\r\n                    sizingImage.style.cssText = 'left:0;' + 'max-height:none!important;' + 'max-width:none!important;' + 'min-height:0!important;' + 'min-width:0!important;' + 'opacity:0;' + 'position:absolute;' + 'top:0;' + 'z-index:-1;';\r\n                    body.appendChild(sizingImage);\r\n                }\r\n            }\r\n        }, {\r\n            key: \"stop\",\r\n            value: function stop() {\r\n                var image = this.image;\r\n                image.onload = null;\r\n                image.onerror = null;\r\n                image.parentNode.removeChild(image);\r\n                this.image = null;\r\n            }\r\n        }, {\r\n            key: \"build\",\r\n            value: function build() {\r\n                if (!this.sized || this.ready) {\r\n                    return;\r\n                }\r\n                var element = this.element,\r\n                        options = this.options,\r\n                        image = this.image;\r\n\r\n                // Create cropper elements\r\n                var container = element.parentNode;\r\n                var template = document.createElement('div');\r\n                template.innerHTML = TEMPLATE;\r\n                var cropper = template.querySelector(\".\".concat(NAMESPACE, \"-container\"));\r\n                var canvas = cropper.querySelector(\".\".concat(NAMESPACE, \"-canvas\"));\r\n                var dragBox = cropper.querySelector(\".\".concat(NAMESPACE, \"-drag-box\"));\r\n                var cropBox = cropper.querySelector(\".\".concat(NAMESPACE, \"-crop-box\"));\r\n                var face = cropBox.querySelector(\".\".concat(NAMESPACE, \"-face\"));\r\n                this.container = container;\r\n                this.cropper = cropper;\r\n                this.canvas = canvas;\r\n                this.dragBox = dragBox;\r\n                this.cropBox = cropBox;\r\n                this.viewBox = cropper.querySelector(\".\".concat(NAMESPACE, \"-view-box\"));\r\n                this.face = face;\r\n                canvas.appendChild(image);\r\n\r\n                // Hide the original image\r\n                addClass(element, CLASS_HIDDEN);\r\n\r\n                // Inserts the cropper after to the current image\r\n                container.insertBefore(cropper, element.nextSibling);\r\n\r\n                // Show the hidden image\r\n                removeClass(image, CLASS_HIDE);\r\n                this.initPreview();\r\n                this.bind();\r\n                options.initialAspectRatio = Math.max(0, options.initialAspectRatio) || NaN;\r\n                options.aspectRatio = Math.max(0, options.aspectRatio) || NaN;\r\n                options.viewMode = Math.max(0, Math.min(3, Math.round(options.viewMode))) || 0;\r\n                addClass(cropBox, CLASS_HIDDEN);\r\n                if (!options.guides) {\r\n                    addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-dashed\")), CLASS_HIDDEN);\r\n                }\r\n                if (!options.center) {\r\n                    addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-center\")), CLASS_HIDDEN);\r\n                }\r\n                if (options.background) {\r\n                    addClass(cropper, \"\".concat(NAMESPACE, \"-bg\"));\r\n                }\r\n                if (!options.highlight) {\r\n                    addClass(face, CLASS_INVISIBLE);\r\n                }\r\n                if (options.cropBoxMovable) {\r\n                    addClass(face, CLASS_MOVE);\r\n                    setData(face, DATA_ACTION, ACTION_ALL);\r\n                }\r\n                if (!options.cropBoxResizable) {\r\n                    addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-line\")), CLASS_HIDDEN);\r\n                    addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-point\")), CLASS_HIDDEN);\r\n                }\r\n                this.render();\r\n                this.ready = true;\r\n                this.setDragMode(options.dragMode);\r\n                if (options.autoCrop) {\r\n                    this.crop();\r\n                }\r\n                this.setData(options.data);\r\n                if (isFunction(options.ready)) {\r\n                    addListener(element, EVENT_READY, options.ready, {\r\n                        once: true\r\n                    });\r\n                }\r\n                dispatchEvent(element, EVENT_READY);\r\n            }\r\n        }, {\r\n            key: \"unbuild\",\r\n            value: function unbuild() {\r\n                if (!this.ready) {\r\n                    return;\r\n                }\r\n                this.ready = false;\r\n                this.unbind();\r\n                this.resetPreview();\r\n                var parentNode = this.cropper.parentNode;\r\n                if (parentNode) {\r\n                    parentNode.removeChild(this.cropper);\r\n                }\r\n                removeClass(this.element, CLASS_HIDDEN);\r\n            }\r\n        }, {\r\n            key: \"uncreate\",\r\n            value: function uncreate() {\r\n                if (this.ready) {\r\n                    this.unbuild();\r\n                    this.ready = false;\r\n                    this.cropped = false;\r\n                } else if (this.sizing) {\r\n                    this.sizingImage.onload = null;\r\n                    this.sizing = false;\r\n                    this.sized = false;\r\n                } else if (this.reloading) {\r\n                    this.xhr.onabort = null;\r\n                    this.xhr.abort();\r\n                } else if (this.image) {\r\n                    this.stop();\r\n                }\r\n            }\r\n\r\n            /**\r\n             * Get the no conflict cropper class.\r\n             * @returns {Cropper} The cropper class.\r\n             */\r\n        }], [{\r\n            key: \"noConflict\",\r\n            value: function noConflict() {\r\n                window.Cropper = AnotherCropper;\r\n                return Cropper;\r\n            }\r\n\r\n            /**\r\n             * Change the default options.\r\n             * @param {Object} options - The new default options.\r\n             */\r\n        }, {\r\n            key: \"setDefaults\",\r\n            value: function setDefaults(options) {\r\n                assign(DEFAULTS, isPlainObject(options) && options);\r\n            }\r\n        }]);\r\n        return Cropper;\r\n    }();\r\n    assign(Cropper.prototype, render, preview, events, handlers, change, methods);\r\n\r\n    return Cropper;\r\n\r\n}));\r\n\n/*\r\n * Copyright (c) 2025 Quanos Solutions GmbH\r\n */\r\n\r\nvar vidW = 1280;    // Defaultwerte, falls keine Kamera vorhanden oder Fehler aufgetreten\r\nvar vidH = 768;\r\n\r\nvar cameraView;   // Zur Anzeige des Videostreams\r\nvar userPhoto;    // hier wird das von der Camera gemachte Foto gespeichert\r\nvar photoImg;     // Bild zum Croppen (Ausschnitt wählen)\r\nvar cropper;      // zur Auswahl eines Ausschnitts und zur Rotation\r\n\r\nvar uniqueId;\r\nvar transactionId;\r\n\r\nfunction dwCameraStartVideo(uniqueId, transactionId, errorText) {\r\n    this.uniqueId = uniqueId;\r\n    this.transactionId = transactionId;\r\n\r\n    setTimeout(function() {\r\n        cameraView = $(\"camera-view\");\r\n        userPhoto = $(\"user-photo\");\r\n        cameraDiv = $(\"camera\");\r\n        photoImg = $(\"photoImg\");\r\n        cropper = null;     // neuen Cropper erstellen bei jedem Öffnen des Fensters\r\n\r\n        //Webcam Setup and usage\r\n        var constraints = {\r\n            video: {\r\n                width: {\r\n                    ideal: 2048\r\n                },\r\n                height: {\r\n                    ideal: 2048\r\n                },\r\n                facingMode: \"environment\"\r\n            },\r\n            audio: false\r\n        };\r\n\r\n        //Sets up all the divs to be the same size\r\n        function SetupSizes() {\r\n            var width = cameraDiv.parentElement.offsetWidth;\r\n            var height = cameraDiv.parentElement.offsetHeight;\r\n\r\n            var st = 'width:' + width + 'px; height:' + height + 'px;';\r\n            cameraView.setAttribute(\"style\", st);\r\n            userPhoto.setAttribute(\"style\", st);\r\n            photoImg.setAttribute(\"style\", st);\r\n            photoImg.setAttribute(\"style\", st + \"display: none;\")\r\n        }\r\n\r\n        SetupSizes();\r\n\r\n        //Resizes the canvases\r\n        function ResizeCanvases() {\r\n            var cvs = document.getElementsByTagName(\"canvas\");\r\n            for (var c = 0; c < cvs.length; c++) {\r\n                cvs[c].height = vidH;\r\n                cvs[c].width = vidW;\r\n            }\r\n        }\r\n\r\n        function WebcamSetup() {\r\n            var startCameraText = $(\"startCamera\");\r\n\r\n            if (!navigator || !navigator.mediaDevices) {\r\n                let text = \"Can't enumerate devices, navigator is not present.\";\r\n                if (\"https:\" !== location.protocol) {\r\n                    var e = location.host.split(\":\")[0];\r\n                    if (((\"127.0.0.1\" !== e) && (\"localhost\" !== e))) {\r\n                        text = \"Camera can only be accessed in secure context (https or localhost)\";\r\n                    }\r\n                }\r\n                startCameraText.textContent = text;\r\n                ResizeCanvases();\r\n                dwAjaxAddUpdate(uniqueId + \"@DW@\" + uniqueId + \"@DW@__custom_CameraStartErrorEvent\", true, true);\r\n            } else {\r\n                navigator.mediaDevices\r\n                        .getUserMedia(constraints)\r\n                        .then(function(stream) {\r\n                            let track = stream.getTracks()[0];\r\n                            if (track.getSettings) {\r\n                                let {\r\n                                    width,\r\n                                    height\r\n                                } = track.getSettings();\r\n                                vidW = width;\r\n                                vidH = height;\r\n                                cameraView.width = (vidW > vidH) ? vidW : vidH;\r\n                                cameraView.height = (vidH < vidW) ? vidH : vidW;\r\n                            }\r\n                            cameraView.srcObject = stream;\r\n                            startCameraText.style.display = \"none\";\r\n                            ResizeCanvases();\r\n                            dwAjaxAddUpdate(uniqueId + \"@DW@\" + uniqueId + \"@DW@__custom_CameraStartedEvent\", true, true);\r\n                        })\r\n                        .catch(function(error) {\r\n                            console.error(\"An error occurred: \", error);\r\n                            startCameraText.textContent = errorText;\r\n                            ResizeCanvases();\r\n                            dwAjaxAddUpdate(uniqueId + \"@DW@\" + uniqueId + \"@DW@__custom_CameraStartErrorEvent\", true, true);\r\n                        });\r\n            }\r\n        }\r\n\r\n        WebcamSetup();\r\n\r\n    }, 100);\r\n}\r\n\r\n/**\r\n * Berechnet die neue Größe des Bildes, wenn es kleiner/größer ist, als der zur Verfüung stehende Platz. Und bei kleineren\r\n * Bildern als der verfügbar Platz wird eine x/y-Koordinate zurückgegeben, damit das Bild in der Mitte angezeigt wird.\r\n * @param img\r\n * @returns {{newWidth: number, newHeight: number, x: number, y: number}}\r\n */\r\nfunction calculateDimensionAndCoordinates(img) {\r\n    var newWidth = vidW;\r\n    var newHeight = vidH;\r\n    var width = img.width;\r\n    var height = img.height;\r\n\r\n    if ((width <= vidW) && (height <= vidH)) {\r\n        newWidth = width;\r\n        newHeight = height;\r\n    } else if (width > vidW || height > vidH) {\r\n        var scale = Math.min(vidW / width, vidH / height);\r\n        newWidth = width * scale;\r\n        newHeight = height * scale;\r\n    }\r\n    var x = (vidW - newWidth) / 2;\r\n    var y = (vidH - newHeight) / 2;\r\n\r\n    return {x, y, newWidth, newHeight};\r\n}\r\n\r\n/**\r\n * Funktion wird nur von außen aufgerufen um ein manuell hochgeladenes Bild zu setzen, damit man es croppen kann.\r\n * Also dann kein mit der Kamera live gemachtes Bild\r\n * @param imgData\r\n */\r\nfunction dwCameraSetImage(imgData) {\r\n    var ctx = userPhoto.getContext(\"2d\");\r\n    // Das Canvas muss gecleared werden, da sonst wenn vorher schon ein Bild hochgeladen wurde das Bild nur überlagert wird\r\n    // und das alte Bild evtl an den Kanten des neuen Bildes drüber hinausschaut.\r\n    ctx.clearRect(0, 0, userPhoto.width, userPhoto.height);\r\n\r\n    var img = new Image();\r\n    img.src = \"data:image/jpeg;base64,\" + imgData;\r\n    img.onload = function() {\r\n        var {x, y, newWidth, newHeight} = calculateDimensionAndCoordinates(img);\r\n        ctx.drawImage(img, x, y, newWidth, newHeight);\r\n        cameraDiv.style.display = \"none\";\r\n        dwCameraStopVideo();\r\n        dwCameraStartCrop()\r\n    };\r\n}\r\n\r\nfunction dwCameraTakeSnapshot() {\r\n    userPhoto.getContext(\"2d\").drawImage(cameraView, 0, 0, vidW, vidH, 0, 0, vidW, vidH);\r\n\r\n    cameraDiv.style.display = \"none\";\r\n    dwCameraStopVideo();\r\n}\r\n\r\n//Removes the video and stops the stream\r\nfunction dwCameraStopVideo() {\r\n    stream = cameraView.srcObject;\r\n    if (stream != null) {\r\n        stream.getTracks().forEach(track => track.stop());\r\n        cameraView.srcObject = null;\r\n    }\r\n}\r\n\r\nfunction dwCameraStartCrop() {\r\n    userPhoto.style.display = \"none\";\r\n\r\n    photoImg.style.display = \"visible\";\r\n    photoImg.src = userPhoto.toDataURL('image/jpeg', 0.8);\r\n    // Wenn der Nutzer erneut ein Bild hochlädt muss das Bild replaced werden, anstatt einen neuen Cropper zu erzeugen\r\n    if (cropper != null) {\r\n        cropper.replace(photoImg.src)\r\n    } else {\r\n        cropper = new Cropper(photoImg, {\r\n            minCropBoxWidth: 100,\r\n            minCropBoxHeight: 100\r\n        });\r\n    }\r\n}\r\n\r\nfunction dwCameraRotatePicture() {\r\n    if (cropper != null) {\r\n        cropper.rotate(45);\r\n    }\r\n}\r\n\r\nfunction dwCameraSavePicture() {\r\n    var canvas = cropper.getCroppedCanvas();\r\n    var dataURL = canvas.toDataURL('image/jpeg', 0.8);\r\n    var dataURLsize = dataURL.length;\r\n    var imgWidth = canvas.width;\r\n    var imgHeight = canvas.height;\r\n\r\n    var context = canvas.getContext('2d');\r\n    var factor = imgWidth > imgHeight ? (imgWidth / 800) : (imgHeight / 800);\r\n    if (factor < 1) {   // Bild ist schon kleiner als 800 Pixel breit/hoch\r\n        dwAjaxAddUpdate(uniqueId + \"@DW@\" + uniqueId + \"@DW@__custom_CameraCropFinishedEvent@DW@dataURL=\" + dataURL + \"@DWSUB@imageWidth=\" + imgWidth + \"@DWSUB@transactionId=\" + transactionId, true, true)\r\n        cropper = null;\r\n    } else {\r\n        canvas.width = imgWidth / factor;\r\n        canvas.height = imgHeight / factor;\r\n\r\n        var img = new Image();\r\n        img.src = dataURL;\r\n        img.onload = function() {\r\n            context.drawImage(img, 0, 0, canvas.width, canvas.height);\r\n\r\n            var resizedDataURL = canvas.toDataURL('image/jpeg', 0.8);\r\n            // auskommentierte Code, falls man auf Fehlersuche gehen muss\r\n            /*var resizedDataURLsize = resizedDataURL.length;\r\n              console.log(\"old size: \" + imgWidth + \"x\" + imgHeight);\r\n              console.log(dataURLsize);\r\n              console.log(\"new size: \" + canvas.width + \"x\" + canvas.height);\r\n              console.log(resizedDataURLsize)*/\r\n\r\n            dwAjaxAddUpdate(uniqueId + \"@DW@\" + uniqueId + \"@DW@__custom_CameraCropFinishedEvent@DW@dataURL=\" + resizedDataURL + \"@DWSUB@imageWidth=\" + imgWidth + \"@DWSUB@transactionId=\" + transactionId, true, true)\r\n            cropper = null;\r\n        };\r\n    }\r\n}\n"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": -1,
          "_transferSize": 27068,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:11.650Z",
        "time": 103.60499995294958,
        "timings": {
          "blocked": 9.465999902278185,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0.8759999999999994,
          "wait": 92.19699996627867,
          "receive": 1.0660000843927264,
          "_blocked_queueing": 2.096999902278185,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_connectionId": "1726423",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "parser",
          "url": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513",
          "lineNumber": 1
        },
        "_priority": "High",
        "_resourceType": "script",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/ekat/WEB-RES/js/components.js_javaviewer_7.26.1.11.js",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": ":authority",
              "value": "ekat.festool.de"
            },
            {
              "name": ":method",
              "value": "GET"
            },
            {
              "name": ":path",
              "value": "/ekat/WEB-RES/js/components.js_javaviewer_7.26.1.11.js"
            },
            {
              "name": ":scheme",
              "value": "https"
            },
            {
              "name": "accept",
              "value": "*/*"
            },
            {
              "name": "accept-encoding",
              "value": "gzip, deflate, br, zstd"
            },
            {
              "name": "accept-language",
              "value": "en-GB,en-US;q=0.9,en;q=0.8"
            },
            {
              "name": "if-modified-since",
              "value": "Wed, 31 Dec 1969 23:59:59 GMT"
            },
            {
              "name": "if-none-match",
              "value": "W/\"0-1787216819916\""
            },
            {
              "name": "priority",
              "value": "u=1"
            },
            {
              "name": "referer",
              "value": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            },
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "sec-fetch-dest",
              "value": "script"
            },
            {
              "name": "sec-fetch-mode",
              "value": "no-cors"
            },
            {
              "name": "sec-fetch-site",
              "value": "same-origin"
            },
            {
              "name": "user-agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            }
          ],
          "queryString": [],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "cache-control",
              "value": "public"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "content-length",
              "value": "20"
            },
            {
              "name": "content-type",
              "value": "text/javascript"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 09:09:51 GMT"
            },
            {
              "name": "etag",
              "value": "W/\"0-1787216991708\""
            },
            {
              "name": "expires",
              "value": "Thu, 20 Aug 2026 09:11:51 GMT"
            },
            {
              "name": "last-modified",
              "value": "Wed, 31 Dec 1969 23:59:59 GMT"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "pragma",
              "value": "cache"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "x-robots-tag",
              "value": "noindex"
            }
          ],
          "cookies": [],
          "content": {
            "size": 0,
            "mimeType": "text/javascript",
            "text": ""
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": -1,
          "_transferSize": 127,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:11.650Z",
        "time": 91.27699991222471,
        "timings": {
          "blocked": 10.131999918296934,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0.5670000000000002,
          "wait": 79.64700000616908,
          "receive": 0.9309999877586961,
          "_blocked_queueing": 3.046999918296933,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_connectionId": "1726423",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "parser",
          "url": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513",
          "lineNumber": 1
        },
        "_priority": "High",
        "_resourceType": "script",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/ekat/WEB-RES/js/viewer/viewer.js_javaviewer_7.26.1.11.js",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": ":authority",
              "value": "ekat.festool.de"
            },
            {
              "name": ":method",
              "value": "GET"
            },
            {
              "name": ":path",
              "value": "/ekat/WEB-RES/js/viewer/viewer.js_javaviewer_7.26.1.11.js"
            },
            {
              "name": ":scheme",
              "value": "https"
            },
            {
              "name": "accept",
              "value": "*/*"
            },
            {
              "name": "accept-encoding",
              "value": "gzip, deflate, br, zstd"
            },
            {
              "name": "accept-language",
              "value": "en-GB,en-US;q=0.9,en;q=0.8"
            },
            {
              "name": "if-modified-since",
              "value": "Thu, 20 Aug 2026 09:06:59 GMT"
            },
            {
              "name": "if-none-match",
              "value": "W/\"0-1787216819923\""
            },
            {
              "name": "priority",
              "value": "u=1"
            },
            {
              "name": "referer",
              "value": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            },
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "sec-fetch-dest",
              "value": "script"
            },
            {
              "name": "sec-fetch-mode",
              "value": "no-cors"
            },
            {
              "name": "sec-fetch-site",
              "value": "same-origin"
            },
            {
              "name": "user-agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            }
          ],
          "queryString": [],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "cache-control",
              "value": "public"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "content-length",
              "value": "20"
            },
            {
              "name": "content-type",
              "value": "text/javascript"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 09:09:51 GMT"
            },
            {
              "name": "etag",
              "value": "W/\"0-1787216991709\""
            },
            {
              "name": "expires",
              "value": "Thu, 20 Aug 2026 09:11:51 GMT"
            },
            {
              "name": "last-modified",
              "value": "Thu, 20 Aug 2026 09:09:51 GMT"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "pragma",
              "value": "cache"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "x-robots-tag",
              "value": "noindex"
            }
          ],
          "cookies": [],
          "content": {
            "size": 0,
            "mimeType": "text/javascript",
            "text": ""
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": -1,
          "_transferSize": 126,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:11.650Z",
        "time": 91.55999997165054,
        "timings": {
          "blocked": 10.23999989090115,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0.41500000000000004,
          "wait": 79.70600003136694,
          "receive": 1.1990000493824482,
          "_blocked_queueing": 3.1809998909011483,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_connectionId": "1726423",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "parser",
          "url": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513",
          "lineNumber": 71
        },
        "_priority": "Medium",
        "_resourceType": "image",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/ekat/WEB-RES/resource/resource?id=bi_image_D217B38C2671F0B5F327052F5618462B",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "Referer",
              "value": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513"
            },
            {
              "name": "User-Agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            }
          ],
          "queryString": [
            {
              "name": "id",
              "value": "bi_image_D217B38C2671F0B5F327052F5618462B"
            }
          ],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "x-robots-tag",
              "value": "noindex"
            },
            {
              "name": "cache-control",
              "value": "public"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "pragma",
              "value": "cache"
            },
            {
              "name": "etag",
              "value": "W/\"201-1787214829011\""
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "expires",
              "value": "Thu, 20 Aug 2026 10:33:49 GMT"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "content-length",
              "value": "218"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 08:33:48 GMT"
            },
            {
              "name": "content-type",
              "value": "image/png"
            },
            {
              "name": "last-modified",
              "value": "Thu, 20 Aug 2026 07:47:14 GMT"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            }
          ],
          "cookies": [],
          "content": {
            "size": 201,
            "mimeType": "image/png",
            "text": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAkElEQVR4Xq2SywkDMQxE55gyVEJKUAkpQceUkKNKT4QtMWg/eJM8GHgeseDPAoB/ohjYXMtMeHSBzvUG7cUJ2ou/YOQvjG1yokuMvPDme0nYCyH3gyRCXgi5HyQR8sKb7yVhL4z8q0v8Ge3FCdqLwHHtV+Y85mwZp8Td3Gi2hLdYTRZxbF/qEnHm2PYT4+P7GzR+J/k8IFQmAAAAAElFTkSuQmCC",
            "encoding": "base64"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": 0,
          "_transferSize": 0,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:11.650Z",
        "time": 11.507000075653195,
        "timings": {
          "blocked": 7.99600001257658,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0,
          "wait": 2.599999994777143,
          "receive": 0.9110000682994723,
          "_blocked_queueing": 3.30400001257658,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_fromCache": "disk",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "parser",
          "url": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513",
          "lineNumber": 71
        },
        "_priority": "Medium",
        "_resourceType": "image",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/ekat/WEB-RES/resource/resource?id=bi_image_bi_image_8E06F47E6AD85371A247FF4FB5E7885E_grayedOut_6E4B11E28C195D193D9170281A301596",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "Referer",
              "value": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513"
            },
            {
              "name": "User-Agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            }
          ],
          "queryString": [
            {
              "name": "id",
              "value": "bi_image_bi_image_8E06F47E6AD85371A247FF4FB5E7885E_grayedOut_6E4B11E28C195D193D9170281A301596"
            }
          ],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "x-robots-tag",
              "value": "noindex"
            },
            {
              "name": "cache-control",
              "value": "public"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "pragma",
              "value": "cache"
            },
            {
              "name": "etag",
              "value": "W/\"167-1787214829034\""
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "expires",
              "value": "Thu, 20 Aug 2026 10:33:49 GMT"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "content-length",
              "value": "184"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 08:33:48 GMT"
            },
            {
              "name": "content-type",
              "value": "image/png"
            },
            {
              "name": "last-modified",
              "value": "Thu, 20 Aug 2026 07:47:18 GMT"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            }
          ],
          "cookies": [],
          "content": {
            "size": 167,
            "mimeType": "image/png",
            "text": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAbklEQVR4XsWTSw6AMAgFWXosjuMt4Ojm0WKwMRGIxkkK9DdtFyVVZe3DdBZFsAcbTbBOrojIPg+KbAhk4YE7AcYteyfL/wI8Bw11SxB5VxCvluUiQPY6yzcCJ/McrBthdiIlgRY/k45/wC6wogkf5Q/AOcIR3LsAAAAASUVORK5CYII=",
            "encoding": "base64"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": 0,
          "_transferSize": 0,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:11.650Z",
        "time": 11.6039999993518,
        "timings": {
          "blocked": 7.951999919719994,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0,
          "wait": 2.592000040926039,
          "receive": 1.0600000387057662,
          "_blocked_queueing": 5.049999919719994,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_fromCache": "disk",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "parser",
          "url": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513",
          "lineNumber": 71
        },
        "_priority": "Medium",
        "_resourceType": "image",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/ekat/WEB-RES/resource/resource?id=bi_image_2F610A23A5037A3D6B4348916B76D938",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "Referer",
              "value": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513"
            },
            {
              "name": "User-Agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            }
          ],
          "queryString": [
            {
              "name": "id",
              "value": "bi_image_2F610A23A5037A3D6B4348916B76D938"
            }
          ],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "x-robots-tag",
              "value": "noindex"
            },
            {
              "name": "cache-control",
              "value": "public"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "pragma",
              "value": "cache"
            },
            {
              "name": "etag",
              "value": "W/\"166-1787214819937\""
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "expires",
              "value": "Thu, 20 Aug 2026 10:33:39 GMT"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "content-length",
              "value": "182"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 08:33:39 GMT"
            },
            {
              "name": "content-type",
              "value": "image/png"
            },
            {
              "name": "last-modified",
              "value": "Thu, 20 Aug 2026 07:47:18 GMT"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            }
          ],
          "cookies": [],
          "content": {
            "size": 166,
            "mimeType": "image/png",
            "text": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAbUlEQVR4XqXPsQ2AMAxE0V9SMgolZUpKxqBkBI+OXMW6BIjhSV+Kzg0AWOgX0yHLPrQSxMNoM0E8jHQifMy0I3zMtCB8zDQhfBztoMMSbXSYDlmmQ0ahfp6/VeH53vzjWw2TlEmNQj36WxVu7heT30TxjsHGZAAAAABJRU5ErkJggg==",
            "encoding": "base64"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": 0,
          "_transferSize": 0,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:11.650Z",
        "time": 17.425999976694584,
        "timings": {
          "blocked": 16.565000038780273,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0,
          "wait": 0.2760000236332416,
          "receive": 0.5849999142810702,
          "_blocked_queueing": 15.890000038780272,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_fromCache": "disk",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "parser",
          "url": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513",
          "lineNumber": 71
        },
        "_priority": "Medium",
        "_resourceType": "image",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/ekat/WEB-RES/resource/resource?id=bi_image_0FD0AAD7977484C27B5D22FF54EDDA04",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "Referer",
              "value": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513"
            },
            {
              "name": "User-Agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            }
          ],
          "queryString": [
            {
              "name": "id",
              "value": "bi_image_0FD0AAD7977484C27B5D22FF54EDDA04"
            }
          ],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "x-robots-tag",
              "value": "noindex"
            },
            {
              "name": "cache-control",
              "value": "public"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "pragma",
              "value": "cache"
            },
            {
              "name": "etag",
              "value": "W/\"250-1787214819936\""
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "expires",
              "value": "Thu, 20 Aug 2026 10:33:39 GMT"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "content-length",
              "value": "273"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 08:33:39 GMT"
            },
            {
              "name": "content-type",
              "value": "image/png"
            },
            {
              "name": "last-modified",
              "value": "Thu, 20 Aug 2026 07:47:14 GMT"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            }
          ],
          "cookies": [],
          "content": {
            "size": 250,
            "mimeType": "image/png",
            "text": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAwUlEQVR4XqWTOw4CMQxEp6SkpExJyVE4QkqOQOmjk7f5yMk6SIgnzcqyJ145H+nMoygX2SJy1LZci16q5mfRvSg1EZOjhgfvBIm3avG21DzU8OCdmpBEF59UNSIPnu4/YC5T/OeoAeA1tT3JqvP9Cmsygalu0oo5RbDGCPgkV+iYU0SSaxDND9YUkeQaRCOANUWMEbL2m2hNEWMTd8dIzsszHSNEF8kWdU4XCf6+yrB7TCwi/vqYPMyVdR6B3Ji58wFIvCrRk1MhtwAAAABJRU5ErkJggg==",
            "encoding": "base64"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": 0,
          "_transferSize": 0,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:11.650Z",
        "time": 17.477999906986952,
        "timings": {
          "blocked": 16.503999943874778,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0,
          "wait": 0.33399997927993536,
          "receive": 0.6399999838322401,
          "_blocked_queueing": 16.060999943874776,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_fromCache": "disk",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "parser",
          "url": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513",
          "lineNumber": 71
        },
        "_priority": "Low",
        "_resourceType": "image",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/ekat/WEB-RES/resource/resource?id=bi_image_69CB6532CDB6672261C6B53AC7AB8966",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "Referer",
              "value": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513"
            },
            {
              "name": "User-Agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            }
          ],
          "queryString": [
            {
              "name": "id",
              "value": "bi_image_69CB6532CDB6672261C6B53AC7AB8966"
            }
          ],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "x-robots-tag",
              "value": "noindex"
            },
            {
              "name": "cache-control",
              "value": "public"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "pragma",
              "value": "cache"
            },
            {
              "name": "etag",
              "value": "W/\"172-1787214829023\""
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "expires",
              "value": "Thu, 20 Aug 2026 10:33:49 GMT"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "content-length",
              "value": "190"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 08:33:48 GMT"
            },
            {
              "name": "content-type",
              "value": "image/png"
            },
            {
              "name": "last-modified",
              "value": "Thu, 20 Aug 2026 07:47:17 GMT"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            }
          ],
          "cookies": [],
          "content": {
            "size": 172,
            "mimeType": "image/png",
            "text": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAc0lEQVR4Xs2TQQ6AIAwEe/Q5PsWnePS4T9dVKZVQaG9OsoFpgfSCyMN2BcnwjmIbmSi2mInykSBwJQg82V/vhb0CvS9B4Mk/J1i1W4ErQdCKzVFbLrDCEVkoo3I/A23BPsJ1BtoCKZeZEYsMzthHRrm/8wmMnDRx1uroRAAAAABJRU5ErkJggg==",
            "encoding": "base64"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": 0,
          "_transferSize": 0,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:11.650Z",
        "time": 163.94300002139062,
        "timings": {
          "blocked": 163.14500001345576,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0,
          "wait": 0.3359999824985862,
          "receive": 0.46200002543628216,
          "_blocked_queueing": 162.67300001345575,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_fromCache": "disk",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "parser",
          "url": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513",
          "lineNumber": 71
        },
        "_priority": "Low",
        "_resourceType": "image",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/ekat/WEB-RES/resource/resource?id=bi_image_72D0010FEC637C6EB8420C205BD1BB35",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "Referer",
              "value": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513"
            },
            {
              "name": "User-Agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            }
          ],
          "queryString": [
            {
              "name": "id",
              "value": "bi_image_72D0010FEC637C6EB8420C205BD1BB35"
            }
          ],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "x-robots-tag",
              "value": "noindex"
            },
            {
              "name": "cache-control",
              "value": "public"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "pragma",
              "value": "cache"
            },
            {
              "name": "etag",
              "value": "W/\"170-1787214819937\""
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "expires",
              "value": "Thu, 20 Aug 2026 10:33:39 GMT"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "content-length",
              "value": "182"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 08:33:39 GMT"
            },
            {
              "name": "content-type",
              "value": "image/png"
            },
            {
              "name": "last-modified",
              "value": "Thu, 20 Aug 2026 07:47:13 GMT"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            }
          ],
          "cookies": [],
          "content": {
            "size": 170,
            "mimeType": "image/png",
            "text": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAcUlEQVR4XpWSUQqAIBAF++zIfb6j5wbiNvtEHRjKMYLWrmtwN5+mFsYzlniBGA1iyIjBIIaMGAxiyIjBIIadwc38Bsp46rjBxq4lnFrCqTUsECynEOR1b53ewvJbR1whhozS1dn3pojBIIYM5+H8ffcLZRJFUf9yjF0AAAAASUVORK5CYII=",
            "encoding": "base64"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": 0,
          "_transferSize": 0,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:11.650Z",
        "time": 165.74000008404255,
        "timings": {
          "blocked": 165.01000002013893,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0,
          "wait": 0.3029999557286501,
          "receive": 0.4270001081749797,
          "_blocked_queueing": 164.79900002013892,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_fromCache": "disk",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "parser",
          "url": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513",
          "lineNumber": 71
        },
        "_priority": "Low",
        "_resourceType": "image",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/ekat/WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.controls.viewer.o_images_to_clipboard.png",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "Referer",
              "value": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513"
            },
            {
              "name": "User-Agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            }
          ],
          "queryString": [
            {
              "name": "id",
              "value": "class_image_de.docware.framework.modules.gui.controls.viewer.o_images_to_clipboard.png"
            }
          ],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "x-robots-tag",
              "value": "noindex"
            },
            {
              "name": "cache-control",
              "value": "public"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "pragma",
              "value": "cache"
            },
            {
              "name": "etag",
              "value": "W/\"407-1787214829034\""
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "expires",
              "value": "Thu, 20 Aug 2026 10:33:49 GMT"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "content-length",
              "value": "430"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 08:33:48 GMT"
            },
            {
              "name": "content-type",
              "value": "image/png"
            },
            {
              "name": "last-modified",
              "value": "Thu, 20 Aug 2026 07:47:01 GMT"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            }
          ],
          "cookies": [],
          "content": {
            "size": 407,
            "mimeType": "image/png",
            "text": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjUuNUmK/OAAAAEpSURBVDhPlZLPasJAEMbXS1+phz6AL1Dw4Ev03KcQr32E9tKTKEIv1oLSIh5aUYMkaY3FVIkg/mk3U7/VCZvoJrjwsWx2vt9MdiYnDKv+ahFfbaUUm60U9mQmbq6vcictMOiqtAbk+gG9uz69fHhUfXOo9PAci8E5gsEcLNckbqtKj80edUdTZa51XLpvWArA94g1AnCRpotiWSUzAhxvTlDf8dWuq937okzA53cQlcol854KoMMCYDxdKJ1VAfzO3aXCJDMbK+CsvK/tQgTx/H0VejVHv4CMMCVlquQk4OcpTywG4cyQ+a5lrI41iXcBQboA0M36Wyw3fzQcz+KA5BswDN9lGMa0+pVk7zpknAO9C6EyA8LawzCBqYMECAKydDTKWfNvuv8H0APE5svf4mgAAAAASUVORK5CYII=",
            "encoding": "base64"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": 0,
          "_transferSize": 0,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:11.650Z",
        "time": 167.3220000229776,
        "timings": {
          "blocked": 166.72500005672873,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0,
          "wait": 0.2520000168010592,
          "receive": 0.34499994944781065,
          "_blocked_queueing": 166.56200005672872,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_fromCache": "disk",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "parser",
          "url": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513",
          "lineNumber": 71
        },
        "_priority": "Low",
        "_resourceType": "image",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/ekat/WEB-RES/resource/resource?id=bi_image_7BE97D3AFC2993939E9961A98C96E411",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "Referer",
              "value": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513"
            },
            {
              "name": "User-Agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            }
          ],
          "queryString": [
            {
              "name": "id",
              "value": "bi_image_7BE97D3AFC2993939E9961A98C96E411"
            }
          ],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "x-robots-tag",
              "value": "noindex"
            },
            {
              "name": "cache-control",
              "value": "public"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "pragma",
              "value": "cache"
            },
            {
              "name": "etag",
              "value": "W/\"164-1787214501412\""
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "expires",
              "value": "Thu, 20 Aug 2026 10:28:21 GMT"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "content-length",
              "value": "177"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 08:28:20 GMT"
            },
            {
              "name": "content-type",
              "value": "image/png"
            },
            {
              "name": "last-modified",
              "value": "Thu, 20 Aug 2026 07:47:13 GMT"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            }
          ],
          "cookies": [],
          "content": {
            "size": 164,
            "mimeType": "image/png",
            "text": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAa0lEQVR4XmNgQAOyslIBcnIyDYQwSB26XjAASSooKHCgiyMDkDxIHbo4GOCUQANwdVDTKtCdiANX4DIAXSFOjGEAjIMigAWgqxk1YKANwEiJpBgAwyh5gRQD0MXBAN10fBhdLxjIkZEXYAAAszNblQPuggAAAAAASUVORK5CYII=",
            "encoding": "base64"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": 0,
          "_transferSize": 0,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:11.650Z",
        "time": 169.14899996481836,
        "timings": {
          "blocked": 168.33299996418506,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0,
          "wait": 0.3420000002384186,
          "receive": 0.47400000039488077,
          "_blocked_queueing": 168.09399996418506,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_fromCache": "disk",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "parser",
          "url": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513",
          "lineNumber": 71
        },
        "_priority": "Low",
        "_resourceType": "image",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/ekat/WEB-RES/resource/resource?id=bi_image_EBF605A22CC3AFD197B4527DC7ABF5B8",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "Referer",
              "value": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513"
            },
            {
              "name": "User-Agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            }
          ],
          "queryString": [
            {
              "name": "id",
              "value": "bi_image_EBF605A22CC3AFD197B4527DC7ABF5B8"
            }
          ],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "x-robots-tag",
              "value": "noindex"
            },
            {
              "name": "cache-control",
              "value": "public"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "pragma",
              "value": "cache"
            },
            {
              "name": "etag",
              "value": "W/\"219-1787214829025\""
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "expires",
              "value": "Thu, 20 Aug 2026 10:33:49 GMT"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "content-length",
              "value": "242"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 08:33:48 GMT"
            },
            {
              "name": "content-type",
              "value": "image/png"
            },
            {
              "name": "last-modified",
              "value": "Thu, 20 Aug 2026 07:47:18 GMT"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            }
          ],
          "cookies": [],
          "content": {
            "size": 219,
            "mimeType": "image/png",
            "text": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAoklEQVR4Xp2SMRLCMAwEVVJSUuYJlDyDkifwBEo9HW3GF2QT7JidOY90shTHidk+59Aj5Enk+EPY9LK6WcIfDtGT2XwLLaFryfGpd/EimjMMwUddvGipXLOLfWrVa8hs88MnwEBi+g4wM72vgJ6hkyUwW379BzQTV0MwcpzzFpq+hpDMoCF3Gb6V6hMozhLDOziKb0sylCvek1jjbMziWv7WG5F8NYFOCi5qAAAAAElFTkSuQmCC",
            "encoding": "base64"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": 0,
          "_transferSize": 0,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:11.650Z",
        "time": 170.87400006130338,
        "timings": {
          "blocked": 170.14900000501424,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0,
          "wait": 0.3149999611452222,
          "receive": 0.4100000951439142,
          "_blocked_queueing": 169.93400000501424,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_fromCache": "disk",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "parser",
          "url": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513",
          "lineNumber": 71
        },
        "_priority": "Low",
        "_resourceType": "image",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/ekat/WEB-RES/resource/resource?id=class_image_de.docware.apps.etk.base.misc.b.a_focus_grey.png",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "Referer",
              "value": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513"
            },
            {
              "name": "User-Agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            }
          ],
          "queryString": [
            {
              "name": "id",
              "value": "class_image_de.docware.apps.etk.base.misc.b.a_focus_grey.png"
            }
          ],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "x-robots-tag",
              "value": "noindex"
            },
            {
              "name": "cache-control",
              "value": "public"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "pragma",
              "value": "cache"
            },
            {
              "name": "etag",
              "value": "W/\"413-1787214829024\""
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "expires",
              "value": "Thu, 20 Aug 2026 10:33:49 GMT"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "content-length",
              "value": "436"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 08:33:48 GMT"
            },
            {
              "name": "content-type",
              "value": "image/png"
            },
            {
              "name": "last-modified",
              "value": "Thu, 20 Aug 2026 07:47:01 GMT"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            }
          ],
          "cookies": [],
          "content": {
            "size": 413,
            "mimeType": "image/png",
            "text": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAT9JREFUeNqkUy1vAkEQ3b0iTpWKEySFpAJxElGBPFmJRJ6srOAH8DOQSGQl8iSiAoE4eQkhQRKKOFHRN9fZ5DEJl5BO8nJ7b+fNzseuHwyeM+ecoLH9/jB3LQZ/3i+8EgWEhbvDwsEdPbUwmyN8JsASOAIfwBZ+a3LbSIDICHu6rPU7BXIgJi6U2vx7I34HTiqITdYiKIEUWCFAJSRncNJ0n0hcKpxyI/Jt7CEszufvn273McGyr9QCp2zA78BLkFflv8DvrgJI+nCakbgUMQW/YF9KlAMSrIdABb6OqL7KNuqGSSkvoUxvpvCGz5hKOJoGN+Pjcdop5Kb7oYEpcRJ0GcYYmdRiFdUkTKlM6X5PJ/WXgVxle//pfYRxieATflvJlEqbRy2NcnqVV8wF8VUG9z4maGJtdub/+5x/BRgAVLiCKtdmhAIAAAAASUVORK5CYII=",
            "encoding": "base64"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": 0,
          "_transferSize": 0,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:11.651Z",
        "time": 172.4709999980405,
        "timings": {
          "blocked": 171.91299990234523,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0,
          "wait": 0.20499996891617775,
          "receive": 0.35300012677907944,
          "_blocked_queueing": 171.69399990234524,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_fromCache": "disk",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "parser",
          "url": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513",
          "lineNumber": 71
        },
        "_priority": "Low",
        "_resourceType": "image",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/ekat/WEB-RES/resource/resource?id=bi_image_2C46E93221B37E862CF8074EDD23C187",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "Referer",
              "value": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513"
            },
            {
              "name": "User-Agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            }
          ],
          "queryString": [
            {
              "name": "id",
              "value": "bi_image_2C46E93221B37E862CF8074EDD23C187"
            }
          ],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "x-robots-tag",
              "value": "noindex"
            },
            {
              "name": "cache-control",
              "value": "public"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "pragma",
              "value": "cache"
            },
            {
              "name": "etag",
              "value": "W/\"202-1787214829024\""
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "expires",
              "value": "Thu, 20 Aug 2026 10:33:49 GMT"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "content-length",
              "value": "221"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 08:33:48 GMT"
            },
            {
              "name": "content-type",
              "value": "image/png"
            },
            {
              "name": "last-modified",
              "value": "Thu, 20 Aug 2026 07:47:18 GMT"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            }
          ],
          "cookies": [],
          "content": {
            "size": 202,
            "mimeType": "image/png",
            "text": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAkUlEQVR4XpWPMQ4DMQgEKVOmzHN4zpUpU+7Tz3sCCWN8OUZaYQbLwiIiOoJNOIvQeSapURgq6aL1nklWvGSdsfdMcgeK3jPJHbB62DmH/tED/E5+hD391SgPAQ7oENx75GeOlf2FmqzCWeQz8rW6gCy6IJz5BV+3CmcLKLIDWURgtb2Bgyy6IPXtTdDMX243OAHgjTc5d8TdXQAAAABJRU5ErkJggg==",
            "encoding": "base64"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": 0,
          "_transferSize": 0,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:11.651Z",
        "time": 174.00600004475564,
        "timings": {
          "blocked": 173.26700007544457,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0,
          "wait": 0.17900001256167888,
          "receive": 0.5599999567493796,
          "_blocked_queueing": 173.10800007544458,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_fromCache": "disk",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "parser",
          "url": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513",
          "lineNumber": 71
        },
        "_priority": "Low",
        "_resourceType": "image",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/ekat/WEB-RES/resource/resource?id=class_image_de.docware.apps.etk.base.misc.b.a_filetype_excel.png",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "Referer",
              "value": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513"
            },
            {
              "name": "User-Agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            }
          ],
          "queryString": [
            {
              "name": "id",
              "value": "class_image_de.docware.apps.etk.base.misc.b.a_filetype_excel.png"
            }
          ],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "x-robots-tag",
              "value": "noindex"
            },
            {
              "name": "cache-control",
              "value": "public"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "pragma",
              "value": "cache"
            },
            {
              "name": "etag",
              "value": "W/\"427-1787214829023\""
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "expires",
              "value": "Thu, 20 Aug 2026 10:33:49 GMT"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "content-length",
              "value": "447"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 08:33:48 GMT"
            },
            {
              "name": "content-type",
              "value": "image/png"
            },
            {
              "name": "last-modified",
              "value": "Thu, 20 Aug 2026 07:47:02 GMT"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            }
          ],
          "cookies": [],
          "content": {
            "size": 427,
            "mimeType": "image/png",
            "text": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAACXBIWXMAAAsSAAALEgHS3X78AAAAGnRFWHRTb2Z0d2FyZQBQYWludC5ORVQgdjMuNS4xMDD0cqEAAAD7SURBVDhPjZBRS8JQFMcnPu1bS0IfoQ8gsRR8CMsHH5tE+KJCD6GQgpCUrJhsZmuX+69z5x2dzsp74Md27/7ndzjzADDOgxD/8TvPDgSFpmsIuoMR7sZLIWHNBAXunyEgQfqRC0ml4GEDgRUQs/m6lHhew4ML8wg4a10ySGIEx4oyizeg079F+3qIi6sQQe+GC+yk6D0y2LP9toqBcPLIYIKfTRa6o6L3py0EYgVq8E991Jv1shm6ELwkWlApqJ3U2HR8FoJopwVuKxwE8V4LnH6i2inzTDMtECuUpQpUopC9Zkawz7WgFLiQKy0wgu9ZDLqsClfxp8CdEF8hWhKKbMb/gAAAAABJRU5ErkJggg==",
            "encoding": "base64"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": 0,
          "_transferSize": 0,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:11.651Z",
        "time": 175.50199991092086,
        "timings": {
          "blocked": 174.9819999108389,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0,
          "wait": 0.2040000386238098,
          "receive": 0.31599996145814657,
          "_blocked_queueing": 174.8139999108389,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_fromCache": "disk",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "parser",
          "url": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513",
          "lineNumber": 71
        },
        "_priority": "Low",
        "_resourceType": "image",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/ekat/WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_menuitem_marker.png",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "Referer",
              "value": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513"
            },
            {
              "name": "User-Agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            }
          ],
          "queryString": [
            {
              "name": "id",
              "value": "class_image_de.docware.framework.modules.gui.design.a_defaultimages_menuitem_marker.png"
            }
          ],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "x-robots-tag",
              "value": "noindex"
            },
            {
              "name": "cache-control",
              "value": "public"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "pragma",
              "value": "cache"
            },
            {
              "name": "etag",
              "value": "W/\"167-1787214819937\""
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "expires",
              "value": "Thu, 20 Aug 2026 10:33:39 GMT"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "content-length",
              "value": "175"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 08:33:39 GMT"
            },
            {
              "name": "content-type",
              "value": "image/png"
            },
            {
              "name": "last-modified",
              "value": "Thu, 20 Aug 2026 07:47:01 GMT"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            }
          ],
          "cookies": [],
          "content": {
            "size": 167,
            "mimeType": "image/png",
            "text": "iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH2goSDA4hFCHW6AAAADRJREFUKM9j+P//PwMML7xYxYDMx4YJKqC+BgawEIka8GnCqQGXJrwasGming20CyWqRxwAsmONb4wMk3YAAAAASUVORK5CYII=",
            "encoding": "base64"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": 0,
          "_transferSize": 0,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:11.651Z",
        "time": 176.93499999586493,
        "timings": {
          "blocked": 176.3499999360442,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0,
          "wait": 0.18100001036375762,
          "receive": 0.404000049456954,
          "_blocked_queueing": 176.17799993604422,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_fromCache": "disk",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "parser",
          "url": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513",
          "lineNumber": 71
        },
        "_priority": "Low",
        "_resourceType": "image",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/ekat/WEB-RES/resource/resource?id=bi_image_49824DF87B7634DBD08BE43B967E35B3",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "Referer",
              "value": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513"
            },
            {
              "name": "User-Agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            }
          ],
          "queryString": [
            {
              "name": "id",
              "value": "bi_image_49824DF87B7634DBD08BE43B967E35B3"
            }
          ],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "x-robots-tag",
              "value": "noindex"
            },
            {
              "name": "cache-control",
              "value": "public"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "pragma",
              "value": "cache"
            },
            {
              "name": "etag",
              "value": "W/\"151-1787214829023\""
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "expires",
              "value": "Thu, 20 Aug 2026 10:33:49 GMT"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "content-length",
              "value": "166"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 08:33:48 GMT"
            },
            {
              "name": "content-type",
              "value": "image/png"
            },
            {
              "name": "last-modified",
              "value": "Thu, 20 Aug 2026 07:47:18 GMT"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            }
          ],
          "cookies": [],
          "content": {
            "size": 151,
            "mimeType": "image/png",
            "text": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAXklEQVR4XqXSIQ6AMBBE0WI5A4JbYDgEAjyOBAsH6NHpfpKKdbvzk2e2GddS/p6mJtiO/EME+WME+WMEXc2bYLvekNA7mj3BdjQJaBXQIqBZQJuARgGdArJPkUV31gdboUUAuSPJ4AAAAABJRU5ErkJggg==",
            "encoding": "base64"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": 0,
          "_transferSize": 0,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:11.651Z",
        "time": 178.70799999218434,
        "timings": {
          "blocked": 177.97300005670638,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0,
          "wait": 0.2829999861866236,
          "receive": 0.45199994929134846,
          "_blocked_queueing": 177.73800005670637,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_fromCache": "disk",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "parser",
          "url": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513",
          "lineNumber": 71
        },
        "_priority": "Low",
        "_resourceType": "image",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/ekat/WEB-RES/resource/resource?id=bi_image_2CC76DF101D15A5A668A992EB70B0924",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "Referer",
              "value": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513"
            },
            {
              "name": "User-Agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            }
          ],
          "queryString": [
            {
              "name": "id",
              "value": "bi_image_2CC76DF101D15A5A668A992EB70B0924"
            }
          ],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "x-robots-tag",
              "value": "noindex"
            },
            {
              "name": "cache-control",
              "value": "public"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "pragma",
              "value": "cache"
            },
            {
              "name": "etag",
              "value": "W/\"156-1787214828999\""
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "expires",
              "value": "Thu, 20 Aug 2026 10:33:48 GMT"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "content-length",
              "value": "170"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 08:33:48 GMT"
            },
            {
              "name": "content-type",
              "value": "image/png"
            },
            {
              "name": "last-modified",
              "value": "Thu, 20 Aug 2026 07:47:13 GMT"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            }
          ],
          "cookies": [],
          "content": {
            "size": 156,
            "mimeType": "image/png",
            "text": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAY0lEQVR4XmNw26H3Hoj/I+H3bukMDFgxFrUgQWQBkjF2AyC2QWhUF2CoxeosPAZgqMX0J7Jt6GJYMIYAbQ0g2QtEYEyN+F1AsQEkegFdDAvGEKCtASR7gQiMqREfpoIBGF4AAExaSjzUvB0+AAAAAElFTkSuQmCC",
            "encoding": "base64"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": 0,
          "_transferSize": 0,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:11.651Z",
        "time": 180.53300003521144,
        "timings": {
          "blocked": 179.85600002343207,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0,
          "wait": 0.23199999937415122,
          "receive": 0.4450000124052167,
          "_blocked_queueing": 179.66000002343208,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_fromCache": "disk",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "parser",
          "url": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513",
          "lineNumber": 71
        },
        "_priority": "Low",
        "_resourceType": "image",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/ekat/WEB-RES/resource/resource?id=bi_image_F9E81FC33131B3960A323CFA1C2169EC",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "Referer",
              "value": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513"
            },
            {
              "name": "User-Agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            }
          ],
          "queryString": [
            {
              "name": "id",
              "value": "bi_image_F9E81FC33131B3960A323CFA1C2169EC"
            }
          ],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "x-robots-tag",
              "value": "noindex"
            },
            {
              "name": "cache-control",
              "value": "public"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "pragma",
              "value": "cache"
            },
            {
              "name": "etag",
              "value": "W/\"241-1787214829005\""
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "expires",
              "value": "Thu, 20 Aug 2026 10:33:49 GMT"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "content-length",
              "value": "259"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 08:33:48 GMT"
            },
            {
              "name": "content-type",
              "value": "image/png"
            },
            {
              "name": "last-modified",
              "value": "Thu, 20 Aug 2026 07:47:13 GMT"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            }
          ],
          "cookies": [],
          "content": {
            "size": 241,
            "mimeType": "image/png",
            "text": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAuElEQVR4Xo2RsRICIQxEU1paWlpa3idcaeknXGlpaZlPNytZjgsB3ZkdhoS3ZEBE5GnezBeZ625+u89tYzOrlKCRAKsUuLsIBcBqfhxbVQDVvIT6qd0AVl+j1N1OALibOgvBQdRohNxkn7oTQ1bZb8E+czbtV6uUAy9fMwM+vEErNCLM77t6f6jZ2MORqRlMD0MymP8f3YVkMPao81eia8gMpqYhv2BqFFIhrhlMxRC80d8wxRDAywdKXj5ptfYioQAAAABJRU5ErkJggg==",
            "encoding": "base64"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": 0,
          "_transferSize": 0,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:11.651Z",
        "time": 182.4010000564158,
        "timings": {
          "blocked": 181.56200005593897,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0,
          "wait": 0.3289999587908387,
          "receive": 0.5100000416859984,
          "_blocked_queueing": 181.23900005593896,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_fromCache": "disk",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "parser",
          "url": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513",
          "lineNumber": 71
        },
        "_priority": "Low",
        "_resourceType": "image",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/ekat/WEB-RES/resource/resource?id=bi_image_3CCCB2B47E3D649ADFABF7EB3BB2B184",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "Referer",
              "value": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513"
            },
            {
              "name": "User-Agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            }
          ],
          "queryString": [
            {
              "name": "id",
              "value": "bi_image_3CCCB2B47E3D649ADFABF7EB3BB2B184"
            }
          ],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "x-robots-tag",
              "value": "noindex"
            },
            {
              "name": "cache-control",
              "value": "public"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "pragma",
              "value": "cache"
            },
            {
              "name": "etag",
              "value": "W/\"173-1787214829006\""
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "expires",
              "value": "Thu, 20 Aug 2026 10:33:49 GMT"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "content-length",
              "value": "191"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 08:33:48 GMT"
            },
            {
              "name": "content-type",
              "value": "image/png"
            },
            {
              "name": "last-modified",
              "value": "Thu, 20 Aug 2026 07:47:13 GMT"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            }
          ],
          "cookies": [],
          "content": {
            "size": 173,
            "mimeType": "image/png",
            "text": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAdElEQVR4XqWTUQqAMAxDe0SP42eOrg1JKQNxrA/6kgndh2JExP0ODid3WU5BSem+C0pK911QUrp3rvVBAyWlu8nl9VkHJaV74uV1OjxTSvev5ZwOz5TSfXxB8nVJh2dK6W5GL9GMPuMfKCndd0HpEKRGv/MD+y44YdHDl5kAAAAASUVORK5CYII=",
            "encoding": "base64"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": 0,
          "_transferSize": 0,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:11.651Z",
        "time": 184.29500004276633,
        "timings": {
          "blocked": 183.6199999602586,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0,
          "wait": 0.2489999819472432,
          "receive": 0.4260001005604863,
          "_blocked_queueing": 183.4279999602586,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_fromCache": "disk",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "parser",
          "url": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513",
          "lineNumber": 71
        },
        "_priority": "Low",
        "_resourceType": "image",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/ekat/WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_responsive_tree_go_down_normal.png",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "Referer",
              "value": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513"
            },
            {
              "name": "User-Agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            }
          ],
          "queryString": [
            {
              "name": "id",
              "value": "class_image_de.docware.framework.modules.gui.design.a_defaultimages_responsive_tree_go_down_normal.png"
            }
          ],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "x-robots-tag",
              "value": "noindex"
            },
            {
              "name": "cache-control",
              "value": "public"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "pragma",
              "value": "cache"
            },
            {
              "name": "etag",
              "value": "W/\"15586-1787214501416\""
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "expires",
              "value": "Thu, 20 Aug 2026 10:28:21 GMT"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "content-length",
              "value": "1434"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 08:28:20 GMT"
            },
            {
              "name": "content-type",
              "value": "image/png"
            },
            {
              "name": "last-modified",
              "value": "Thu, 20 Aug 2026 07:47:01 GMT"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            }
          ],
          "cookies": [],
          "content": {
            "size": 15586,
            "mimeType": "image/png",
            "text": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAA7pmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxMzggNzkuMTU5ODI0LCAyMDE2LzA5LzE0LTAxOjA5OjAxICAgICAgICAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgICAgICAgICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNyAoV2luZG93cyk8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgICAgPHhtcDpDcmVhdGVEYXRlPjIwMTgtMDQtMDVUMTQ6NTU6NDMrMDI6MDA8L3htcDpDcmVhdGVEYXRlPgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxOC0wNy0wM1QxNTo1ODoxMSswMjowMDwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6TWV0YWRhdGFEYXRlPjIwMTgtMDctMDNUMTU6NTg6MTErMDI6MDA8L3htcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2UvcG5nPC9kYzpmb3JtYXQ+CiAgICAgICAgIDxwaG90b3Nob3A6Q29sb3JNb2RlPjM8L3Bob3Rvc2hvcDpDb2xvck1vZGU+CiAgICAgICAgIDx4bXBNTTpJbnN0YW5jZUlEPnhtcC5paWQ6MWYxY2M2NGItNDk5NC00MjQ1LTgxNWUtMTUzMDczZWMyOTNjPC94bXBNTTpJbnN0YW5jZUlEPgogICAgICAgICA8eG1wTU06RG9jdW1lbnRJRD5hZG9iZTpkb2NpZDpwaG90b3Nob3A6MWY1NzkzOTgtN2VjOS0xMWU4LWIwOTctYmQ5ZDdkMzU5ZDZhPC94bXBNTTpEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06T3JpZ2luYWxEb2N1bWVudElEPnhtcC5kaWQ6M2M1YjY1ODgtYjg2My1mMDQ0LTk1MzEtOTY4MDlhYWU2NWJkPC94bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpIaXN0b3J5PgogICAgICAgICAgICA8cmRmOlNlcT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+Y3JlYXRlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjNjNWI2NTg4LWI4NjMtZjA0NC05NTMxLTk2ODA5YWFlNjViZDwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxOC0wNC0wNVQxNDo1NTo0MyswMjowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+c2F2ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ+eG1wLmlpZDo1OWIzNWUxNS0xNjllLWFjNGEtOGZkNi1lOTYyMTRiZDc3OTA8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTgtMDQtMDVUMTU6MjA6NDMrMDI6MDA8L3N0RXZ0OndoZW4+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE3IChXaW5kb3dzKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmNoYW5nZWQ+Lzwvc3RFdnQ6Y2hhbmdlZD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPnNhdmVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6MWYxY2M2NGItNDk5NC00MjQ1LTgxNWUtMTUzMDczZWMyOTNjPC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDE4LTA3LTAzVDE1OjU4OjExKzAyOjAwPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNyAoV2luZG93cyk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpjaGFuZ2VkPi88L3N0RXZ0OmNoYW5nZWQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpTZXE+CiAgICAgICAgIDwveG1wTU06SGlzdG9yeT4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WFJlc29sdXRpb24+NzIwMDAwLzEwMDAwPC90aWZmOlhSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpZUmVzb2x1dGlvbj43MjAwMDAvMTAwMDA8L3RpZmY6WVJlc29sdXRpb24+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDxleGlmOkNvbG9yU3BhY2U+NjU1MzU8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjE2PC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjE2PC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz440YSnAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAC2SURBVHjanJMhDoNAFETfVHEEZI+A5AhIJLKyx6pEIjkCkiNUcgTcrxkS0jTpfkbtbLIvu/9lFRGcI+np5Ssidv7k9mOvAmrgIam6AhiB3ZAuDYiIzRCARlKXvQER8QYm11ZSkwIYsgKLay/pngIYMgOr6yCpTgGcGdhsZ7gCSGv8Tmel+8lOGcAKDwOjFZcBrK51nay27AlW1rsuVlo2A6s6pr1aZWqIg5VtVpi2sPtw0Xf+DABzBj8dnd9hiQAAAABJRU5ErkJggg==",
            "encoding": "base64"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": 0,
          "_transferSize": 0,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:11.651Z",
        "time": 186.3209999864921,
        "timings": {
          "blocked": 185.4769999042973,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0,
          "wait": 0.2880000394880772,
          "receive": 0.556000042706728,
          "_blocked_queueing": 185.2399999042973,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_fromCache": "disk",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "parser",
          "url": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513",
          "lineNumber": 71
        },
        "_priority": "Low",
        "_resourceType": "image",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/ekat/WEB-RES/resource/resource?id=bi_image_EE100A093B440B59D1BA01F3B8E32F68",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "Referer",
              "value": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513"
            },
            {
              "name": "User-Agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            }
          ],
          "queryString": [
            {
              "name": "id",
              "value": "bi_image_EE100A093B440B59D1BA01F3B8E32F68"
            }
          ],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "x-robots-tag",
              "value": "noindex"
            },
            {
              "name": "cache-control",
              "value": "public"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "pragma",
              "value": "cache"
            },
            {
              "name": "etag",
              "value": "W/\"203-1787214829007\""
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "expires",
              "value": "Thu, 20 Aug 2026 10:33:49 GMT"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "content-length",
              "value": "222"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 08:33:48 GMT"
            },
            {
              "name": "content-type",
              "value": "image/png"
            },
            {
              "name": "last-modified",
              "value": "Thu, 20 Aug 2026 07:47:14 GMT"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            }
          ],
          "cookies": [],
          "content": {
            "size": 203,
            "mimeType": "image/png",
            "text": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAkklEQVR4Xp2TwQ2AIAxFGcERHMAQp3AObx5cwqVM2MIRHKEjYItBCG2KcHghNP+/csEsmzEBZwcEEN8AvOUk8N/9D5hnAxbSCAJnL+FpGlcpaN7aLNjPaewWYHlFPJ3NgqxMgCrAwIzcdErlONcEFIrhQyxXBPlGuawJBAkv1wSZRC5HQQKYoEqRZ4MqgqD/LyAP8qlTNr0RPgwAAAAASUVORK5CYII=",
            "encoding": "base64"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": 0,
          "_transferSize": 0,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:11.652Z",
        "time": 187.79600004199892,
        "timings": {
          "blocked": 186.9250000391677,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0,
          "wait": 0.31699997535347935,
          "receive": 0.5540000274777412,
          "_blocked_queueing": 186.7560000391677,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_fromCache": "disk",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "parser",
          "url": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513",
          "lineNumber": 71
        },
        "_priority": "Low",
        "_resourceType": "image",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/ekat/WEB-RES/resource/resource?id=class_image_de.docware.apps.etk.base.misc.b.a_multiselection_order_button_active.png",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "Referer",
              "value": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513"
            },
            {
              "name": "User-Agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            }
          ],
          "queryString": [
            {
              "name": "id",
              "value": "class_image_de.docware.apps.etk.base.misc.b.a_multiselection_order_button_active.png"
            }
          ],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "x-robots-tag",
              "value": "noindex"
            },
            {
              "name": "cache-control",
              "value": "public"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "pragma",
              "value": "cache"
            },
            {
              "name": "etag",
              "value": "W/\"238-1787214829007\""
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "expires",
              "value": "Thu, 20 Aug 2026 10:33:49 GMT"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "content-length",
              "value": "257"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 08:33:48 GMT"
            },
            {
              "name": "content-type",
              "value": "image/png"
            },
            {
              "name": "last-modified",
              "value": "Thu, 20 Aug 2026 07:47:01 GMT"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            }
          ],
          "cookies": [],
          "content": {
            "size": 238,
            "mimeType": "image/png",
            "text": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJBJREFUeNqkU4EJwCAMU9kBnrATdpKn7EP9wBPcB10LDupWtcNAKVaThqrWVACAx5QxvNHj2l4FbxFaNjaFcUEh4DAiVDzFCeJy18aBkrTrB/HdD9V6kBwMBRiZUIYCmA6MTFkis3pXoLDDp0SeCQThyhrydAY922oBJiKShYdWlh4SwZlF0G9MP10kvrgFGACddEUDWFL9NgAAAABJRU5ErkJggg==",
            "encoding": "base64"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": 0,
          "_transferSize": 0,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:11.652Z",
        "time": 189.61400003172457,
        "timings": {
          "blocked": 188.8810000309348,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0,
          "wait": 0.26100001562386754,
          "receive": 0.47199998516589403,
          "_blocked_queueing": 188.6660000309348,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_fromCache": "disk",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "parser",
          "url": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513",
          "lineNumber": 71
        },
        "_priority": "Low",
        "_resourceType": "image",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/ekat/WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_search_32px_white.png",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "Referer",
              "value": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513"
            },
            {
              "name": "User-Agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            }
          ],
          "queryString": [
            {
              "name": "id",
              "value": "class_image_de.docware.framework.modules.gui.design.a_defaultimages_search_32px_white.png"
            }
          ],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "x-robots-tag",
              "value": "noindex"
            },
            {
              "name": "cache-control",
              "value": "public"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "pragma",
              "value": "cache"
            },
            {
              "name": "etag",
              "value": "W/\"451-1787214829008\""
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "expires",
              "value": "Thu, 20 Aug 2026 10:33:49 GMT"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "content-length",
              "value": "474"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 08:33:48 GMT"
            },
            {
              "name": "content-type",
              "value": "image/png"
            },
            {
              "name": "last-modified",
              "value": "Thu, 20 Aug 2026 07:47:01 GMT"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            }
          ],
          "cookies": [],
          "content": {
            "size": 451,
            "mimeType": "image/png",
            "text": "iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAWVJREFUeNrsVu1NxDAMbW6CjOAR2AAxAYwQNigbdIOOwG1QmCC6CcIIbNBuENyTg0yuXFPHqPw4S0+NqiR+dvzVNFckxgiIHhHisnhEi7CNppDiIZbLiOgkusyCcoefHpGsmhBHxInWSQDxiHhi/z4QD8aYSWq5y6xqBd4KoifJlM+XQM15yZuPVRZckui2HByY26EygPldttT6JK1SBpXfR3l+ZqyYxskLvmRzKjK9IoHvWFjbe0Dc0fqkWMs+Szce2HpqdpB/RUCzoVgJAVAkcM96w2rEegrYQTELxuLMon6eBBSUb7tvLpeM8VCpHER3zY2DsXZC5ZYVte09JRu7nMDyUGVEZkGkeg6Fbz5mI1oxAZOTwI9n5XmWN8R7Vl4tpZrLRrcXWr8innE0O0qDqVuw6pr88BZrRq4moi251/+iNFArh5WO6NTHduGI5vYgYKXB+VdeuJG4kbggsXd6hi8BBgDoPAbiBLKWCgAAAABJRU5ErkJggg==",
            "encoding": "base64"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": 0,
          "_transferSize": 0,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:11.652Z",
        "time": 191.57900009304285,
        "timings": {
          "blocked": 190.91400002796203,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0,
          "wait": 0.2620000232383609,
          "receive": 0.40300004184246063,
          "_blocked_queueing": 190.69900002796203,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_fromCache": "disk",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "parser",
          "url": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513",
          "lineNumber": 71
        },
        "_priority": "Low",
        "_resourceType": "image",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/ekat/WEB-RES/resource/resource?id=bi_image_6EA83BB3BFF37828FA6BF2163F5FEE05",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "Referer",
              "value": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513"
            },
            {
              "name": "User-Agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            }
          ],
          "queryString": [
            {
              "name": "id",
              "value": "bi_image_6EA83BB3BFF37828FA6BF2163F5FEE05"
            }
          ],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "x-robots-tag",
              "value": "noindex"
            },
            {
              "name": "cache-control",
              "value": "public"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "pragma",
              "value": "cache"
            },
            {
              "name": "etag",
              "value": "W/\"122-1787214829008\""
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "expires",
              "value": "Thu, 20 Aug 2026 10:33:49 GMT"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "content-length",
              "value": "132"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 08:33:48 GMT"
            },
            {
              "name": "content-type",
              "value": "image/png"
            },
            {
              "name": "last-modified",
              "value": "Thu, 20 Aug 2026 07:47:17 GMT"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            }
          ],
          "cookies": [],
          "content": {
            "size": 122,
            "mimeType": "image/png",
            "text": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAQUlEQVR4XrXTMQrAMAzAwDw3z9DTS0BLhxCq0AOtHmw8xs+mZViGZViGZdjR2jQfe13nesAOlmEZlmEZll0/09EDKy0ZQRHUR4wAAAAASUVORK5CYII=",
            "encoding": "base64"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": 0,
          "_transferSize": 0,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:11.652Z",
        "time": 193.70800000615418,
        "timings": {
          "blocked": 192.91599998927117,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0,
          "wait": 0.2570000176653266,
          "receive": 0.534999999217689,
          "_blocked_queueing": 192.60499998927116,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_fromCache": "disk",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "parser",
          "url": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513",
          "lineNumber": 71
        },
        "_priority": "Low",
        "_resourceType": "image",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/ekat/WEB-RES/resource/resource?id=bi_image_93160D5FE70AF04A8C9FF64155EE2927",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "Referer",
              "value": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513"
            },
            {
              "name": "User-Agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            }
          ],
          "queryString": [
            {
              "name": "id",
              "value": "bi_image_93160D5FE70AF04A8C9FF64155EE2927"
            }
          ],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "x-robots-tag",
              "value": "noindex"
            },
            {
              "name": "cache-control",
              "value": "public"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "pragma",
              "value": "cache"
            },
            {
              "name": "etag",
              "value": "W/\"86-1787214829008\""
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "expires",
              "value": "Thu, 20 Aug 2026 10:33:49 GMT"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "content-length",
              "value": "99"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 08:33:48 GMT"
            },
            {
              "name": "content-type",
              "value": "image/png"
            },
            {
              "name": "last-modified",
              "value": "Thu, 20 Aug 2026 07:47:17 GMT"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            }
          ],
          "cookies": [],
          "content": {
            "size": 86,
            "mimeType": "image/png",
            "text": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAHUlEQVR4XmNgGAXDCGQAcQOJGKQHDig2YBQMaQAAnjUNoVXycIoAAAAASUVORK5CYII=",
            "encoding": "base64"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": 0,
          "_transferSize": 0,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:11.652Z",
        "time": 195.46299998182803,
        "timings": {
          "blocked": 194.78299998425692,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0,
          "wait": 0.25400001342594625,
          "receive": 0.4259999841451645,
          "_blocked_queueing": 194.54599998425692,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_fromCache": "disk",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "parser",
          "url": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513",
          "lineNumber": 71
        },
        "_priority": "Low",
        "_resourceType": "image",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/ekat/WEB-RES/resource/resource?id=bi_image_8E06F47E6AD85371A247FF4FB5E7885E",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "Referer",
              "value": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513"
            },
            {
              "name": "User-Agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            }
          ],
          "queryString": [
            {
              "name": "id",
              "value": "bi_image_8E06F47E6AD85371A247FF4FB5E7885E"
            }
          ],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "x-robots-tag",
              "value": "noindex"
            },
            {
              "name": "cache-control",
              "value": "public"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "pragma",
              "value": "cache"
            },
            {
              "name": "etag",
              "value": "W/\"168-1787214829009\""
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "expires",
              "value": "Thu, 20 Aug 2026 10:33:49 GMT"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "content-length",
              "value": "186"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 08:33:48 GMT"
            },
            {
              "name": "content-type",
              "value": "image/png"
            },
            {
              "name": "last-modified",
              "value": "Thu, 20 Aug 2026 07:47:17 GMT"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            }
          ],
          "cookies": [],
          "content": {
            "size": 168,
            "mimeType": "image/png",
            "text": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAb0lEQVR4Xr2Tuw2AMAxEr2Qsj8MYNzoY7JMRBY4LnnSfRMIkRQDATnEoQy2LGO5vb/tgx/vvW+R4gHNlLrowlP3/AX4dl0PZEMqGUIbn0bpQFpm9C2WR2btQFlnVuQ5lkVVLA6zuNvB3YIgBWSayA8xlLVFg0OUuAAAAAElFTkSuQmCC",
            "encoding": "base64"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": 0,
          "_transferSize": 0,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:11.652Z",
        "time": 197.59300001896918,
        "timings": {
          "blocked": 196.86200006182492,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0,
          "wait": 0.2690000481233001,
          "receive": 0.46199990902096033,
          "_blocked_queueing": 196.55900006182492,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_fromCache": "disk",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "parser",
          "url": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513",
          "lineNumber": 71
        },
        "_priority": "Low",
        "_resourceType": "image",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/ekat/WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_imageviewer_overview_expand.png",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "Referer",
              "value": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513"
            },
            {
              "name": "User-Agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            }
          ],
          "queryString": [
            {
              "name": "id",
              "value": "class_image_de.docware.framework.modules.gui.design.a_defaultimages_imageviewer_overview_expand.png"
            }
          ],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "x-robots-tag",
              "value": "noindex"
            },
            {
              "name": "cache-control",
              "value": "public"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "pragma",
              "value": "cache"
            },
            {
              "name": "etag",
              "value": "W/\"484-1787214829024\""
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "expires",
              "value": "Thu, 20 Aug 2026 10:33:49 GMT"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "content-length",
              "value": "507"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 08:33:48 GMT"
            },
            {
              "name": "content-type",
              "value": "image/png"
            },
            {
              "name": "last-modified",
              "value": "Thu, 20 Aug 2026 07:47:01 GMT"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            }
          ],
          "cookies": [],
          "content": {
            "size": 484,
            "mimeType": "image/png",
            "text": "iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAYAAAAWGF8bAAABq0lEQVQ4y62US6tBURiG/UtRlKIYGBr4BVIMZC51BmZqyy3XkOvAJSWJXFKUhIGBXN7Tu2rtdjjtPTirnr37Jk/fbS0TfhRTPB5HJBJBIBAQhMNhRKNR8WccDAZFHIvFkEgkkEwmv0KXiR/Kns+nyul0gt/vhzyv1wu32w3n8xnr9Rqj0QitVgulUgnpdPpTGAqFcL/fsd1uBfv9Hl6vV8gYz+dzDIdD1Ot1ZLNZ/QwpZAZSSDwejxBuNhvMZjMMBgPjQpasPRTKDFerFabTqRCyzHw+ry/0+Xx4R2a4WCyEcDKZoFKpCKTAbDb/XfLlchGlkU6nowrZPy29Xg/FYlFAIVEU5VN4PB6FSCKFy+USbrcbTqcTdrsdVqtVFWn5EO52u69CZuxyueBwOGCz2WCxWIwJOQhKCfdMCjmM8Xis0u12jZX811DYM2YsJUR3KFwbroek3++ra9Nut9FoNFCr1VAul5HJZIwttpzuew+bzaaQ8ZrlcjmkUiljQu4abwKhUGbIuFqtolAoiFsi+6V7U7i4EvZN+zg8Hg9cr1ccDgexRrqPw38+X7+2FMLxsUXxdQAAAABJRU5ErkJggg==",
            "encoding": "base64"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": 0,
          "_transferSize": 0,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:11.652Z",
        "time": 199.6860000072047,
        "timings": {
          "blocked": 198.92200003483146,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0,
          "wait": 0.26600002206116913,
          "receive": 0.497999950312078,
          "_blocked_queueing": 198.65000003483146,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_fromCache": "disk",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "parser",
          "url": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513",
          "lineNumber": 71
        },
        "_priority": "Low",
        "_resourceType": "image",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/ekat/WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.controls.viewer.b.b.a_overview_slider_knob.png",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "Referer",
              "value": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513"
            },
            {
              "name": "User-Agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            }
          ],
          "queryString": [
            {
              "name": "id",
              "value": "class_image_de.docware.framework.modules.gui.controls.viewer.b.b.a_overview_slider_knob.png"
            }
          ],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "x-robots-tag",
              "value": "noindex"
            },
            {
              "name": "cache-control",
              "value": "public"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "pragma",
              "value": "cache"
            },
            {
              "name": "etag",
              "value": "W/\"442-1787214829012\""
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "expires",
              "value": "Thu, 20 Aug 2026 10:33:49 GMT"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "content-length",
              "value": "465"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 08:33:48 GMT"
            },
            {
              "name": "content-type",
              "value": "image/png"
            },
            {
              "name": "last-modified",
              "value": "Thu, 20 Aug 2026 07:47:01 GMT"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            }
          ],
          "cookies": [],
          "content": {
            "size": 442,
            "mimeType": "image/png",
            "text": "iVBORw0KGgoAAAANSUhEUgAAAAsAAAATCAYAAABGKffQAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAASlJREFUOE9tks0KglAQRn1eQXDTQ7jSrSCB0CbahfQSIkJYkhK0cmOa/2AKE98VLWmEg9f5zh2Hq5LrumQYBqmqyoIMDi4JD/f7ncZxZEGmaRp1XUcSOkKsqooFGZzH4zHJwzBQWZYsyOCcz+evXBQFccyy7/tf+fV6EQcr53lOHH/y+/2m5/PJggwzL2OgkKYpy5+MM4zjmAXZqnPbtnS73ViQQfY8bzoNFMIwZJnlZWYUoiii6/W6ArWVfDgc6HQ6UdM0YowgCARYo4Zss9nQ5XIhCWdr2zY5jiPCeRysUZNlmbbbLSVJQhL+PBybZVkirOtaMIumaYoR+76f5N8Nx+NRiIqi0K8IZ5HxkGUZ7XY70nWd9vv90nFuuJJRxOuwCZ8f61nE/QMi0791icM53wAAAABJRU5ErkJggg==",
            "encoding": "base64"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": 0,
          "_transferSize": 0,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:11.652Z",
        "time": 202.01200002338737,
        "timings": {
          "blocked": 201.11399999245256,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0,
          "wait": 0.41200005558133124,
          "receive": 0.4859999753534794,
          "_blocked_queueing": 200.84599999245256,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_fromCache": "disk",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "parser",
          "url": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513",
          "lineNumber": 71
        },
        "_priority": "Low",
        "_resourceType": "image",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/ekat/WEB-RES/resource/resource?id=ba_image_ba_image_EXPL_EKAT-START_2019.JPG__D1AA088F89B0FB8090187E6C0A94DB42_image_png_subtype_unknown_132x120_false_false_29F1C660F8DEDEF0FBC66C33442CCA19",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "Referer",
              "value": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513"
            },
            {
              "name": "User-Agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            }
          ],
          "queryString": [
            {
              "name": "id",
              "value": "ba_image_ba_image_EXPL_EKAT-START_2019.JPG__D1AA088F89B0FB8090187E6C0A94DB42_image_png_subtype_unknown_132x120_false_false_29F1C660F8DEDEF0FBC66C33442CCA19"
            }
          ],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "x-robots-tag",
              "value": "noindex"
            },
            {
              "name": "cache-control",
              "value": "public"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "pragma",
              "value": "cache"
            },
            {
              "name": "etag",
              "value": "W/\"8877-1787214829012\""
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "expires",
              "value": "Thu, 20 Aug 2026 10:33:49 GMT"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "content-length",
              "value": "8837"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 08:33:48 GMT"
            },
            {
              "name": "content-type",
              "value": "image/png"
            },
            {
              "name": "last-modified",
              "value": "Thu, 20 Aug 2026 07:47:18 GMT"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            }
          ],
          "cookies": [],
          "content": {
            "size": 8877,
            "mimeType": "image/png",
            "text": "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",
            "encoding": "base64"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": 0,
          "_transferSize": 0,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:11.652Z",
        "time": 204.34599998407066,
        "timings": {
          "blocked": 203.37000000557305,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0,
          "wait": 0.35900005338340996,
          "receive": 0.6169999251142144,
          "_blocked_queueing": 203.03400000557303,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_fromCache": "disk",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "parser",
          "url": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513",
          "lineNumber": 71
        },
        "_priority": "Low",
        "_resourceType": "image",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/ekat/WEB-RES/resource/resource?id=bi_image_class_image_de.docware.framework.modules.gui.controls.viewer.b.b.a_overview_cornerNW_mobile.png_rotated_0_21CFF2F194E28CCCB96FE79A168D0FC7",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "Referer",
              "value": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513"
            },
            {
              "name": "User-Agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            }
          ],
          "queryString": [
            {
              "name": "id",
              "value": "bi_image_class_image_de.docware.framework.modules.gui.controls.viewer.b.b.a_overview_cornerNW_mobile.png_rotated_0_21CFF2F194E28CCCB96FE79A168D0FC7"
            }
          ],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "x-robots-tag",
              "value": "noindex"
            },
            {
              "name": "cache-control",
              "value": "public"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "pragma",
              "value": "cache"
            },
            {
              "name": "etag",
              "value": "W/\"165-1787215448735\""
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "expires",
              "value": "Thu, 20 Aug 2026 10:44:08 GMT"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "content-length",
              "value": "183"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 08:44:07 GMT"
            },
            {
              "name": "content-type",
              "value": "image/png"
            },
            {
              "name": "last-modified",
              "value": "Thu, 20 Aug 2026 07:47:18 GMT"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            }
          ],
          "cookies": [],
          "content": {
            "size": 165,
            "mimeType": "image/png",
            "text": "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAbElEQVR4Xq2MyQ3AMAzDsq73H6Ct8ggQNhdiEeDHsFgi4nFaeMhYBI+31pgr2GKOYBfLBtmq8OlUdhp8PJGNDj7v5P4HByu5HcLRTO6mcDiSmyUcU/5vYSAVE4ykYoKhVExYY8IaE9aYsMY+XtPq06Q0b+yHAAAAAElFTkSuQmCC",
            "encoding": "base64"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": 0,
          "_transferSize": 0,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:11.652Z",
        "time": 206.46800007671118,
        "timings": {
          "blocked": 205.73800009232758,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0,
          "wait": 0.26400004490464923,
          "receive": 0.4659999394789338,
          "_blocked_queueing": 205.4610000923276,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_fromCache": "disk",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "parser",
          "url": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513",
          "lineNumber": 71
        },
        "_priority": "Low",
        "_resourceType": "image",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/ekat/WEB-RES/resource/resource?id=bi_image_class_image_de.docware.framework.modules.gui.controls.viewer.b.b.a_overview_cornerNW_mobile.png_rotated_90_21CFF2F194E28CCCB96FE79A168D0FC7",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "Referer",
              "value": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513"
            },
            {
              "name": "User-Agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            }
          ],
          "queryString": [
            {
              "name": "id",
              "value": "bi_image_class_image_de.docware.framework.modules.gui.controls.viewer.b.b.a_overview_cornerNW_mobile.png_rotated_90_21CFF2F194E28CCCB96FE79A168D0FC7"
            }
          ],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "x-robots-tag",
              "value": "noindex"
            },
            {
              "name": "cache-control",
              "value": "public"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "pragma",
              "value": "cache"
            },
            {
              "name": "etag",
              "value": "W/\"166-1787215449044\""
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "expires",
              "value": "Thu, 20 Aug 2026 10:44:09 GMT"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "content-length",
              "value": "183"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 08:44:09 GMT"
            },
            {
              "name": "content-type",
              "value": "image/png"
            },
            {
              "name": "last-modified",
              "value": "Thu, 20 Aug 2026 07:47:18 GMT"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            }
          ],
          "cookies": [],
          "content": {
            "size": 166,
            "mimeType": "image/png",
            "text": "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAbUlEQVR4Xq2MSQrAMAzE8l3//wEtk0MgahYXj0AX41GLiMdpEzxW7EFndARd0SnoiLLX4dMf2RrwMSs7E3zOyMYHDm5yv4Sjk9xu4XAnd0c4XsnNFQYo/1MwUg4KhspBwVg5KOxBYQ8Ke1Ao+AKL6NOkt1BfpgAAAABJRU5ErkJggg==",
            "encoding": "base64"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": 0,
          "_transferSize": 0,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:11.652Z",
        "time": 208.63400003872812,
        "timings": {
          "blocked": 207.78399999476224,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0,
          "wait": 0.31500004474818705,
          "receive": 0.534999999217689,
          "_blocked_queueing": 207.45099999476224,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_fromCache": "disk",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "parser",
          "url": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513",
          "lineNumber": 71
        },
        "_priority": "Low",
        "_resourceType": "image",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/ekat/WEB-RES/resource/resource?id=bi_image_class_image_de.docware.framework.modules.gui.controls.viewer.b.b.a_overview_cornerNW_mobile.png_rotated_270_21CFF2F194E28CCCB96FE79A168D0FC7",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "Referer",
              "value": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513"
            },
            {
              "name": "User-Agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            }
          ],
          "queryString": [
            {
              "name": "id",
              "value": "bi_image_class_image_de.docware.framework.modules.gui.controls.viewer.b.b.a_overview_cornerNW_mobile.png_rotated_270_21CFF2F194E28CCCB96FE79A168D0FC7"
            }
          ],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "x-robots-tag",
              "value": "noindex"
            },
            {
              "name": "cache-control",
              "value": "public"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "pragma",
              "value": "cache"
            },
            {
              "name": "etag",
              "value": "W/\"163-1787215449047\""
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "expires",
              "value": "Thu, 20 Aug 2026 10:44:09 GMT"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "content-length",
              "value": "181"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 08:44:09 GMT"
            },
            {
              "name": "content-type",
              "value": "image/png"
            },
            {
              "name": "last-modified",
              "value": "Thu, 20 Aug 2026 07:47:18 GMT"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            }
          ],
          "cookies": [],
          "content": {
            "size": 163,
            "mimeType": "image/png",
            "text": "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAaklEQVR4Xq3MWQrAMAwD0VzX9z9AgwotzTQrlmD+7Fci4irOCbSiD2hDv6AFJZhGiaVRQmmUCOP9cgR68Wc6Po/i33B8nMXf7vi0iv+/8WEnGs14vBuddzw8idY9Hp1GLw0qO6jsoLKDqgKhb9OkG0xVeAAAAABJRU5ErkJggg==",
            "encoding": "base64"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": 0,
          "_transferSize": 0,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:11.653Z",
        "time": 210.82399995066226,
        "timings": {
          "blocked": 210.0219999119565,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0,
          "wait": 0.298000042706728,
          "receive": 0.5039999959990382,
          "_blocked_queueing": 209.7639999119565,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_fromCache": "disk",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "parser",
          "url": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513",
          "lineNumber": 71
        },
        "_priority": "Low",
        "_resourceType": "image",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/ekat/WEB-RES/resource/resource?id=bi_image_class_image_de.docware.framework.modules.gui.controls.viewer.b.b.a_overview_cornerNW_mobile.png_rotated_180_21CFF2F194E28CCCB96FE79A168D0FC7",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "Referer",
              "value": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513"
            },
            {
              "name": "User-Agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            }
          ],
          "queryString": [
            {
              "name": "id",
              "value": "bi_image_class_image_de.docware.framework.modules.gui.controls.viewer.b.b.a_overview_cornerNW_mobile.png_rotated_180_21CFF2F194E28CCCB96FE79A168D0FC7"
            }
          ],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "x-robots-tag",
              "value": "noindex"
            },
            {
              "name": "cache-control",
              "value": "public"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "pragma",
              "value": "cache"
            },
            {
              "name": "etag",
              "value": "W/\"164-1787215449046\""
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "expires",
              "value": "Thu, 20 Aug 2026 10:44:09 GMT"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "content-length",
              "value": "182"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 08:44:09 GMT"
            },
            {
              "name": "content-type",
              "value": "image/png"
            },
            {
              "name": "last-modified",
              "value": "Thu, 20 Aug 2026 07:47:18 GMT"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            }
          ],
          "cookies": [],
          "content": {
            "size": 164,
            "mimeType": "image/png",
            "text": "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAa0lEQVR4Xq2M2w2AMAzEum72HwAUJBC4T3pnyT9tzqUYiYiDb9tkzBa8Y5bgOyYHGZOCDElBRqQgA5T3QzhuyU0XDnty14SjkdxWcDCT+w88XpGNBx6uys4Fj/7IlhSrgvzc0RpLrbHUGktPWW3TpLxixCQAAAAASUVORK5CYII=",
            "encoding": "base64"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": 0,
          "_transferSize": 0,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:11.653Z",
        "time": 214.01200001128018,
        "timings": {
          "blocked": 213.0740000269711,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0,
          "wait": 0.49099995667487384,
          "receive": 0.44700002763420343,
          "_blocked_queueing": 212.2100000269711,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_fromCache": "disk",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "parser",
          "url": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513",
          "lineNumber": 71
        },
        "_priority": "Low",
        "_resourceType": "image",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/ekat/WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_rotate_image.png",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "Referer",
              "value": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513"
            },
            {
              "name": "User-Agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            }
          ],
          "queryString": [
            {
              "name": "id",
              "value": "class_image_de.docware.framework.modules.gui.design.a_defaultimages_rotate_image.png"
            }
          ],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "x-robots-tag",
              "value": "noindex"
            },
            {
              "name": "cache-control",
              "value": "public"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "pragma",
              "value": "cache"
            },
            {
              "name": "etag",
              "value": "W/\"470-1787214829022\""
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "expires",
              "value": "Thu, 20 Aug 2026 10:33:49 GMT"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "content-length",
              "value": "493"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 08:33:48 GMT"
            },
            {
              "name": "content-type",
              "value": "image/png"
            },
            {
              "name": "last-modified",
              "value": "Thu, 20 Aug 2026 07:47:01 GMT"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            }
          ],
          "cookies": [],
          "content": {
            "size": 470,
            "mimeType": "image/png",
            "text": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABnUlEQVQ4jXWSv0tXURjGP8/5ijTklNoqDU5aQ4OIQ/+BoG1hECaR0dDQHyC0NdQigmCIg4PYDyL5blEESYRDOLSJCG4OQuCS3fM03HO9516+vnDgnMN7Pu/7PO8RADPryAUQsTrIJsWopZvA2/IoGvFhnkDvGADuAaugbeAdMNorsQdAa1b4Y4VNK0ymu1lgsJXXBggIh8BD8FO5CHIxK+KWHAXabVSOfwHoK4/G0h6EEbm4CpxZAkJXLrpN7UIukP81ADOg2+AbVjgDX7RodS6xqSFBr4Df4MPs8RjwHfjGJQZmHTACfo4NChX4C7VxOzUkyUmjzqdwjBpzzl2/ll5V2h/HTv9KGzAuuyJH4C5wCpwA9+uqxgpLDn3zOeAH6JGl3PD3qfIw0C27Fy4lXsd+kQMWgSHQdEmIlGbiqvWLLVpJm5c54BfwBvgI3Kn1FmnFtPwkFXsAnEM9BYAF4ArwFcIO+DV4v8wJU5aWgDHwM9BG9SgHAMyBP4GWQZ9bn2hfxAnsn/l9GwB4S/aBpTnQLeBcsIvjOuKonf0fY92SbC/33uQAAAAASUVORK5CYII=",
            "encoding": "base64"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": 0,
          "_transferSize": 0,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:11.653Z",
        "time": 225.26199999265373,
        "timings": {
          "blocked": 218.24299999354778,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0,
          "wait": 0.8049999472647906,
          "receive": 6.21400005184114,
          "_blocked_queueing": 215.7219999935478,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_fromCache": "disk",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "parser",
          "url": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513",
          "lineNumber": 71
        },
        "_priority": "Low",
        "_resourceType": "image",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/ekat/WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_deactivate_fading_overlay.png",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "Referer",
              "value": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513"
            },
            {
              "name": "User-Agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            }
          ],
          "queryString": [
            {
              "name": "id",
              "value": "class_image_de.docware.framework.modules.gui.design.a_defaultimages_deactivate_fading_overlay.png"
            }
          ],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "x-robots-tag",
              "value": "noindex"
            },
            {
              "name": "cache-control",
              "value": "public"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "pragma",
              "value": "cache"
            },
            {
              "name": "etag",
              "value": "W/\"251-1787214829021\""
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "expires",
              "value": "Thu, 20 Aug 2026 10:33:49 GMT"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "content-length",
              "value": "268"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 08:33:48 GMT"
            },
            {
              "name": "content-type",
              "value": "image/png"
            },
            {
              "name": "last-modified",
              "value": "Thu, 20 Aug 2026 07:47:01 GMT"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            }
          ],
          "cookies": [],
          "content": {
            "size": 251,
            "mimeType": "image/png",
            "text": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJ1JREFUeNpiYBhowIhLQlZWWgBIZUC5Mx4/fvoBmzomPIaDDOCAYgFcipgo9QLFBrBg8bsC1Mkf0MQNgNQPYFjcwGsAECRA6RdIYh5ALAFlNxDywgUoLYEkJoEmBwfM6AKfPn2+wc/PB2IqoEkdADp/B0EDoIY8ABoCCgMNqNAGoOYTJIcwKDFBExTulAhUUAFNLOSAH0wMQx4ABBgA0wwji2X3ILMAAAAASUVORK5CYII=",
            "encoding": "base64"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": 0,
          "_transferSize": 0,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:11.653Z",
        "time": 227.06100007053465,
        "timings": {
          "blocked": 226.2950000829324,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0,
          "wait": 0.3310000513419509,
          "receive": 0.434999936260283,
          "_blocked_queueing": 226.0230000829324,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_fromCache": "disk",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "parser",
          "url": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513",
          "lineNumber": 71
        },
        "_priority": "Low",
        "_resourceType": "image",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/ekat/WEB-RES/resource/resource?id=bi_image_8D8B172A8BDD872C4C2B297C13817F14",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "Referer",
              "value": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513"
            },
            {
              "name": "User-Agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            }
          ],
          "queryString": [
            {
              "name": "id",
              "value": "bi_image_8D8B172A8BDD872C4C2B297C13817F14"
            }
          ],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "x-robots-tag",
              "value": "noindex"
            },
            {
              "name": "cache-control",
              "value": "public"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "pragma",
              "value": "cache"
            },
            {
              "name": "etag",
              "value": "W/\"86-1787214829026\""
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "expires",
              "value": "Thu, 20 Aug 2026 10:33:49 GMT"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "content-length",
              "value": "99"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 08:33:48 GMT"
            },
            {
              "name": "content-type",
              "value": "image/png"
            },
            {
              "name": "last-modified",
              "value": "Thu, 20 Aug 2026 07:47:17 GMT"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            }
          ],
          "cookies": [],
          "content": {
            "size": 86,
            "mimeType": "image/png",
            "text": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAHUlEQVR4XmNgGAXDCMgDsRqJGKQHDig2YBQMaQAANtYEDURL8+IAAAAASUVORK5CYII=",
            "encoding": "base64"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": 0,
          "_transferSize": 0,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:11.653Z",
        "time": 229.0009999414906,
        "timings": {
          "blocked": 228.24099999635666,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0,
          "wait": 0.2940000056549907,
          "receive": 0.4659999394789338,
          "_blocked_queueing": 227.93799999635667,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_fromCache": "disk",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "parser",
          "url": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513",
          "lineNumber": 71
        },
        "_priority": "Low",
        "_resourceType": "image",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/ekat/WEB-RES/resource/resource?id=bi_image_EF98BDF38BC818590016925DE0AD1986",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "Referer",
              "value": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513"
            },
            {
              "name": "User-Agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            }
          ],
          "queryString": [
            {
              "name": "id",
              "value": "bi_image_EF98BDF38BC818590016925DE0AD1986"
            }
          ],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "x-robots-tag",
              "value": "noindex"
            },
            {
              "name": "cache-control",
              "value": "public"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "pragma",
              "value": "cache"
            },
            {
              "name": "etag",
              "value": "W/\"146-1787214829025\""
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "expires",
              "value": "Thu, 20 Aug 2026 10:33:49 GMT"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "content-length",
              "value": "161"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 08:33:48 GMT"
            },
            {
              "name": "content-type",
              "value": "image/png"
            },
            {
              "name": "last-modified",
              "value": "Thu, 20 Aug 2026 07:47:17 GMT"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            }
          ],
          "cookies": [],
          "content": {
            "size": 146,
            "mimeType": "image/png",
            "text": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAWUlEQVR4XmNgYGAQBmI1MjFIL4JBIoBZDCEIAHkGTNuZoDTZBoAA0QYgg4E3AOQdEAYBsgxABtQ1ANlpxAIUA5ADh1hAGwNgmBjvUM8AUjMTKB/AMxNF2RkARDUNdb/6lqYAAAAASUVORK5CYII=",
            "encoding": "base64"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": 0,
          "_transferSize": 0,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:11.653Z",
        "time": 231.06600006576627,
        "timings": {
          "blocked": 230.15900001740457,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0,
          "wait": 0.3530000208839774,
          "receive": 0.5540000274777412,
          "_blocked_queueing": 229.91300001740456,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_fromCache": "disk",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "parser",
          "url": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513",
          "lineNumber": 71
        },
        "_priority": "Low",
        "_resourceType": "image",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/ekat/WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.controls.GuiTabbedPane_images_arrowLeftGrey.png",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "Referer",
              "value": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513"
            },
            {
              "name": "User-Agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            }
          ],
          "queryString": [
            {
              "name": "id",
              "value": "class_image_de.docware.framework.modules.gui.controls.GuiTabbedPane_images_arrowLeftGrey.png"
            }
          ],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "x-robots-tag",
              "value": "noindex"
            },
            {
              "name": "cache-control",
              "value": "public"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "pragma",
              "value": "cache"
            },
            {
              "name": "etag",
              "value": "W/\"15594-1787214829026\""
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "expires",
              "value": "Thu, 20 Aug 2026 10:33:49 GMT"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "content-length",
              "value": "1440"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 08:33:48 GMT"
            },
            {
              "name": "content-type",
              "value": "image/png"
            },
            {
              "name": "last-modified",
              "value": "Thu, 20 Aug 2026 07:47:01 GMT"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            }
          ],
          "cookies": [],
          "content": {
            "size": 15594,
            "mimeType": "image/png",
            "text": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAA7pmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxMzggNzkuMTU5ODI0LCAyMDE2LzA5LzE0LTAxOjA5OjAxICAgICAgICAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgICAgICAgICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNyAoV2luZG93cyk8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgICAgPHhtcDpDcmVhdGVEYXRlPjIwMTgtMDQtMDVUMTQ6NTU6NDMrMDI6MDA8L3htcDpDcmVhdGVEYXRlPgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxOC0wNy0wM1QxNTo1ODoxMSswMjowMDwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6TWV0YWRhdGFEYXRlPjIwMTgtMDctMDNUMTU6NTg6MTErMDI6MDA8L3htcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2UvcG5nPC9kYzpmb3JtYXQ+CiAgICAgICAgIDxwaG90b3Nob3A6Q29sb3JNb2RlPjM8L3Bob3Rvc2hvcDpDb2xvck1vZGU+CiAgICAgICAgIDx4bXBNTTpJbnN0YW5jZUlEPnhtcC5paWQ6YTJkYzEwMmEtMjhjNS05OTQ0LThjZmYtNmQyN2U1ZDlhZmQxPC94bXBNTTpJbnN0YW5jZUlEPgogICAgICAgICA8eG1wTU06RG9jdW1lbnRJRD5hZG9iZTpkb2NpZDpwaG90b3Nob3A6MWYxYjRhNjItN2VjOS0xMWU4LWIwOTctYmQ5ZDdkMzU5ZDZhPC94bXBNTTpEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06T3JpZ2luYWxEb2N1bWVudElEPnhtcC5kaWQ6MTY3NTMxMTctZDM2NC1lNjQ3LWI4ODctNGU4NjE3NDkwZWJjPC94bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpIaXN0b3J5PgogICAgICAgICAgICA8cmRmOlNlcT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+Y3JlYXRlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjE2NzUzMTE3LWQzNjQtZTY0Ny1iODg3LTRlODYxNzQ5MGViYzwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxOC0wNC0wNVQxNDo1NTo0MyswMjowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+c2F2ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ+eG1wLmlpZDpmOWFhMDM3Ny0xYTQ5LTExNDYtOGVlNS0xYmIxMzQ3YTJkZDg8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTgtMDQtMDVUMTU6MjA6NDMrMDI6MDA8L3N0RXZ0OndoZW4+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE3IChXaW5kb3dzKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmNoYW5nZWQ+Lzwvc3RFdnQ6Y2hhbmdlZD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPnNhdmVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6YTJkYzEwMmEtMjhjNS05OTQ0LThjZmYtNmQyN2U1ZDlhZmQxPC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDE4LTA3LTAzVDE1OjU4OjExKzAyOjAwPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNyAoV2luZG93cyk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpjaGFuZ2VkPi88L3N0RXZ0OmNoYW5nZWQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpTZXE+CiAgICAgICAgIDwveG1wTU06SGlzdG9yeT4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WFJlc29sdXRpb24+NzIwMDAwLzEwMDAwPC90aWZmOlhSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpZUmVzb2x1dGlvbj43MjAwMDAvMTAwMDA8L3RpZmY6WVJlc29sdXRpb24+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDxleGlmOkNvbG9yU3BhY2U+NjU1MzU8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjE2PC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjE2PC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz5G4rjSAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAC+SURBVHjalJKhEYNQEETfoSgBmRKQlIBEIlNWZCQSSQlISoikBNzGLDOZDAncdzv3b/+/fReSODsRUQJ3AEmPz1qRaK6A8rt+agC0bt6AIWUQES1QWw6S1ssGEVEDjeUo6XV0r/jRfAM6y1nS8uuh4qC5AnrLRdL0b8yjH/ROewWms4SvUEgbDEZWGWHOwKh23rVR5kYwstGyMdJcBkY3W3ZGmwvRCPcd6I04TWEy0vJjP64bSNqAp0227/p7AOK7Ph0JoGQeAAAAAElFTkSuQmCC",
            "encoding": "base64"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": 0,
          "_transferSize": 0,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:11.653Z",
        "time": 232.9989999998361,
        "timings": {
          "blocked": 232.30800001749395,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0,
          "wait": 0.25200001562386753,
          "receive": 0.4389999667182565,
          "_blocked_queueing": 232.08400001749396,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_fromCache": "disk",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "parser",
          "url": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513",
          "lineNumber": 71
        },
        "_priority": "Low",
        "_resourceType": "image",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/ekat/WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.controls.GuiTabbedPane_images_arrowRightGrey.png",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "Referer",
              "value": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513"
            },
            {
              "name": "User-Agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            }
          ],
          "queryString": [
            {
              "name": "id",
              "value": "class_image_de.docware.framework.modules.gui.controls.GuiTabbedPane_images_arrowRightGrey.png"
            }
          ],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "x-robots-tag",
              "value": "noindex"
            },
            {
              "name": "cache-control",
              "value": "public"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "pragma",
              "value": "cache"
            },
            {
              "name": "etag",
              "value": "W/\"15586-1787214829025\""
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "expires",
              "value": "Thu, 20 Aug 2026 10:33:49 GMT"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "content-length",
              "value": "1434"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 08:33:48 GMT"
            },
            {
              "name": "content-type",
              "value": "image/png"
            },
            {
              "name": "last-modified",
              "value": "Thu, 20 Aug 2026 07:47:01 GMT"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            }
          ],
          "cookies": [],
          "content": {
            "size": 15586,
            "mimeType": "image/png",
            "text": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAA7pmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxMzggNzkuMTU5ODI0LCAyMDE2LzA5LzE0LTAxOjA5OjAxICAgICAgICAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgICAgICAgICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNyAoV2luZG93cyk8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgICAgPHhtcDpDcmVhdGVEYXRlPjIwMTgtMDQtMDVUMTQ6NTU6NDMrMDI6MDA8L3htcDpDcmVhdGVEYXRlPgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxOC0wNy0wM1QxNTo1ODoxMSswMjowMDwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6TWV0YWRhdGFEYXRlPjIwMTgtMDctMDNUMTU6NTg6MTErMDI6MDA8L3htcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2UvcG5nPC9kYzpmb3JtYXQ+CiAgICAgICAgIDxwaG90b3Nob3A6Q29sb3JNb2RlPjM8L3Bob3Rvc2hvcDpDb2xvck1vZGU+CiAgICAgICAgIDx4bXBNTTpJbnN0YW5jZUlEPnhtcC5paWQ6MWYxY2M2NGItNDk5NC00MjQ1LTgxNWUtMTUzMDczZWMyOTNjPC94bXBNTTpJbnN0YW5jZUlEPgogICAgICAgICA8eG1wTU06RG9jdW1lbnRJRD5hZG9iZTpkb2NpZDpwaG90b3Nob3A6MWY1NzkzOTgtN2VjOS0xMWU4LWIwOTctYmQ5ZDdkMzU5ZDZhPC94bXBNTTpEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06T3JpZ2luYWxEb2N1bWVudElEPnhtcC5kaWQ6M2M1YjY1ODgtYjg2My1mMDQ0LTk1MzEtOTY4MDlhYWU2NWJkPC94bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpIaXN0b3J5PgogICAgICAgICAgICA8cmRmOlNlcT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+Y3JlYXRlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjNjNWI2NTg4LWI4NjMtZjA0NC05NTMxLTk2ODA5YWFlNjViZDwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxOC0wNC0wNVQxNDo1NTo0MyswMjowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+c2F2ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ+eG1wLmlpZDo1OWIzNWUxNS0xNjllLWFjNGEtOGZkNi1lOTYyMTRiZDc3OTA8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTgtMDQtMDVUMTU6MjA6NDMrMDI6MDA8L3N0RXZ0OndoZW4+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE3IChXaW5kb3dzKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmNoYW5nZWQ+Lzwvc3RFdnQ6Y2hhbmdlZD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPnNhdmVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6MWYxY2M2NGItNDk5NC00MjQ1LTgxNWUtMTUzMDczZWMyOTNjPC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDE4LTA3LTAzVDE1OjU4OjExKzAyOjAwPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNyAoV2luZG93cyk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpjaGFuZ2VkPi88L3N0RXZ0OmNoYW5nZWQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpTZXE+CiAgICAgICAgIDwveG1wTU06SGlzdG9yeT4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WFJlc29sdXRpb24+NzIwMDAwLzEwMDAwPC90aWZmOlhSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpZUmVzb2x1dGlvbj43MjAwMDAvMTAwMDA8L3RpZmY6WVJlc29sdXRpb24+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDxleGlmOkNvbG9yU3BhY2U+NjU1MzU8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjE2PC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjE2PC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz440YSnAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAC2SURBVHjanJMhDoNAFETfVHEEZI+A5AhIJLKyx6pEIjkCkiNUcgTcrxkS0jTpfkbtbLIvu/9lFRGcI+np5Ssidv7k9mOvAmrgIam6AhiB3ZAuDYiIzRCARlKXvQER8QYm11ZSkwIYsgKLay/pngIYMgOr6yCpTgGcGdhsZ7gCSGv8Tmel+8lOGcAKDwOjFZcBrK51nay27AlW1rsuVlo2A6s6pr1aZWqIg5VtVpi2sPtw0Xf+DABzBj8dnd9hiQAAAABJRU5ErkJggg==",
            "encoding": "base64"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": 0,
          "_transferSize": 0,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:11.653Z",
        "time": 234.86299999058247,
        "timings": {
          "blocked": 233.9479999606684,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0,
          "wait": 0.301000011228025,
          "receive": 0.6140000186860561,
          "_blocked_queueing": 233.74299996066839,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_fromCache": "disk",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "parser",
          "url": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513",
          "lineNumber": 71
        },
        "_priority": "Low",
        "_resourceType": "image",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/ekat/WEB-RES/resource/resource?id=bi_image_FCE645C38BE44E45BFFA7E9674945850",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "Referer",
              "value": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513"
            },
            {
              "name": "User-Agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            }
          ],
          "queryString": [
            {
              "name": "id",
              "value": "bi_image_FCE645C38BE44E45BFFA7E9674945850"
            }
          ],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "x-robots-tag",
              "value": "noindex"
            },
            {
              "name": "cache-control",
              "value": "public"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "pragma",
              "value": "cache"
            },
            {
              "name": "etag",
              "value": "W/\"264-1787214819936\""
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "expires",
              "value": "Thu, 20 Aug 2026 10:33:39 GMT"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "content-length",
              "value": "283"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 08:33:39 GMT"
            },
            {
              "name": "content-type",
              "value": "image/png"
            },
            {
              "name": "last-modified",
              "value": "Thu, 20 Aug 2026 07:47:13 GMT"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            }
          ],
          "cookies": [],
          "content": {
            "size": 264,
            "mimeType": "image/png",
            "text": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAz0lEQVR4Xo2SsRICIQxEU1paWlJaWlryCZaWlpaWlnz68Y4sZubkuJ3ZISwBkgWzOS4+Pp1Rm+JWWSoflV8nMRprU5ytJf/jac3YwbvyYy2Z8epElwaHyPa7LQWdWHoO+gaxfGKB0qXvmolhxYn7bIQyUexgMYc5p9NzGZC1tQLK44Z7WGCOTgJarEZxf8bRUwFVxfhyAi7rz1ic9Jas3S4tfhZVtIHeVZDLHHQIxZl8Li/oFT+m0AaonwfZ3Pvcg5xWK/Igfp4pSJbTmh/CAg6xLTF4N6AfAAAAAElFTkSuQmCC",
            "encoding": "base64"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": 0,
          "_transferSize": 0,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:11.653Z",
        "time": 236.6230000043288,
        "timings": {
          "blocked": 236.00800009695442,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0,
          "wait": 0.22299994929134845,
          "receive": 0.39199995808303356,
          "_blocked_queueing": 235.7790000969544,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_fromCache": "disk",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "parser",
          "url": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513",
          "lineNumber": 71
        },
        "_priority": "Low",
        "_resourceType": "image",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/ekat/WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_responsive_table_go_down_normal.png",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "Referer",
              "value": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513"
            },
            {
              "name": "User-Agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            }
          ],
          "queryString": [
            {
              "name": "id",
              "value": "class_image_de.docware.framework.modules.gui.design.a_defaultimages_responsive_table_go_down_normal.png"
            }
          ],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "x-robots-tag",
              "value": "noindex"
            },
            {
              "name": "cache-control",
              "value": "public"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "pragma",
              "value": "cache"
            },
            {
              "name": "etag",
              "value": "W/\"15586-1787214819936\""
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "expires",
              "value": "Thu, 20 Aug 2026 10:33:39 GMT"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "content-length",
              "value": "1434"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 08:33:39 GMT"
            },
            {
              "name": "content-type",
              "value": "image/png"
            },
            {
              "name": "last-modified",
              "value": "Thu, 20 Aug 2026 07:47:01 GMT"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            }
          ],
          "cookies": [],
          "content": {
            "size": 15586,
            "mimeType": "image/png",
            "text": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAA7pmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxMzggNzkuMTU5ODI0LCAyMDE2LzA5LzE0LTAxOjA5OjAxICAgICAgICAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgICAgICAgICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNyAoV2luZG93cyk8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgICAgPHhtcDpDcmVhdGVEYXRlPjIwMTgtMDQtMDVUMTQ6NTU6NDMrMDI6MDA8L3htcDpDcmVhdGVEYXRlPgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxOC0wNy0wM1QxNTo1ODoxMSswMjowMDwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6TWV0YWRhdGFEYXRlPjIwMTgtMDctMDNUMTU6NTg6MTErMDI6MDA8L3htcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2UvcG5nPC9kYzpmb3JtYXQ+CiAgICAgICAgIDxwaG90b3Nob3A6Q29sb3JNb2RlPjM8L3Bob3Rvc2hvcDpDb2xvck1vZGU+CiAgICAgICAgIDx4bXBNTTpJbnN0YW5jZUlEPnhtcC5paWQ6MWYxY2M2NGItNDk5NC00MjQ1LTgxNWUtMTUzMDczZWMyOTNjPC94bXBNTTpJbnN0YW5jZUlEPgogICAgICAgICA8eG1wTU06RG9jdW1lbnRJRD5hZG9iZTpkb2NpZDpwaG90b3Nob3A6MWY1NzkzOTgtN2VjOS0xMWU4LWIwOTctYmQ5ZDdkMzU5ZDZhPC94bXBNTTpEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06T3JpZ2luYWxEb2N1bWVudElEPnhtcC5kaWQ6M2M1YjY1ODgtYjg2My1mMDQ0LTk1MzEtOTY4MDlhYWU2NWJkPC94bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpIaXN0b3J5PgogICAgICAgICAgICA8cmRmOlNlcT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+Y3JlYXRlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjNjNWI2NTg4LWI4NjMtZjA0NC05NTMxLTk2ODA5YWFlNjViZDwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxOC0wNC0wNVQxNDo1NTo0MyswMjowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+c2F2ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ+eG1wLmlpZDo1OWIzNWUxNS0xNjllLWFjNGEtOGZkNi1lOTYyMTRiZDc3OTA8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTgtMDQtMDVUMTU6MjA6NDMrMDI6MDA8L3N0RXZ0OndoZW4+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE3IChXaW5kb3dzKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmNoYW5nZWQ+Lzwvc3RFdnQ6Y2hhbmdlZD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPnNhdmVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6MWYxY2M2NGItNDk5NC00MjQ1LTgxNWUtMTUzMDczZWMyOTNjPC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDE4LTA3LTAzVDE1OjU4OjExKzAyOjAwPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNyAoV2luZG93cyk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpjaGFuZ2VkPi88L3N0RXZ0OmNoYW5nZWQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpTZXE+CiAgICAgICAgIDwveG1wTU06SGlzdG9yeT4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WFJlc29sdXRpb24+NzIwMDAwLzEwMDAwPC90aWZmOlhSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpZUmVzb2x1dGlvbj43MjAwMDAvMTAwMDA8L3RpZmY6WVJlc29sdXRpb24+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDxleGlmOkNvbG9yU3BhY2U+NjU1MzU8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjE2PC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjE2PC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz440YSnAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAC2SURBVHjanJMhDoNAFETfVHEEZI+A5AhIJLKyx6pEIjkCkiNUcgTcrxkS0jTpfkbtbLIvu/9lFRGcI+np5Ssidv7k9mOvAmrgIam6AhiB3ZAuDYiIzRCARlKXvQER8QYm11ZSkwIYsgKLay/pngIYMgOr6yCpTgGcGdhsZ7gCSGv8Tmel+8lOGcAKDwOjFZcBrK51nay27AlW1rsuVlo2A6s6pr1aZWqIg5VtVpi2sPtw0Xf+DABzBj8dnd9hiQAAAABJRU5ErkJggg==",
            "encoding": "base64"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": 0,
          "_transferSize": 0,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:11.653Z",
        "time": 239.5020000403747,
        "timings": {
          "blocked": 237.81600000731646,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0,
          "wait": 1.1449999881535768,
          "receive": 0.5410000449046493,
          "_blocked_queueing": 237.55600000731647,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_fromCache": "disk",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "parser",
          "url": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513",
          "lineNumber": 71
        },
        "_priority": "Low",
        "_resourceType": "image",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/ekat/WEB-RES/resource/resource?id=bi_image_CA78569ACD102549315FA46276CA645B",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "Referer",
              "value": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513"
            },
            {
              "name": "User-Agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            }
          ],
          "queryString": [
            {
              "name": "id",
              "value": "bi_image_CA78569ACD102549315FA46276CA645B"
            }
          ],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "x-robots-tag",
              "value": "noindex"
            },
            {
              "name": "cache-control",
              "value": "public"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "pragma",
              "value": "cache"
            },
            {
              "name": "etag",
              "value": "W/\"173-1787214829025\""
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "expires",
              "value": "Thu, 20 Aug 2026 10:33:49 GMT"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "content-length",
              "value": "182"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 08:33:48 GMT"
            },
            {
              "name": "content-type",
              "value": "image/png"
            },
            {
              "name": "last-modified",
              "value": "Thu, 20 Aug 2026 07:47:13 GMT"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            }
          ],
          "cookies": [],
          "content": {
            "size": 173,
            "mimeType": "image/png",
            "text": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAdElEQVR4XqWTQQrDMBAD/ewe/fRmRBpWIrq4gvFIBh+91lqfi30Ib1VOs5/j9uTtbkJkG9Fxg8g2ouMGkW1Exw0i24iOG0S2ER03iGwjOm4Q2UZ03CCyjei4QWQb0XGDyDai4waR55i83U2I/Bsn2Rx/fecvOGNV4eDXtHEAAAAASUVORK5CYII=",
            "encoding": "base64"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": 0,
          "_transferSize": 0,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:11.654Z",
        "time": 239.60800003260374,
        "timings": {
          "blocked": 238.4390000195652,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0,
          "wait": 0.609999947488308,
          "receive": 0.5590000655502081,
          "_blocked_queueing": 238.10800001956522,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_fromCache": "disk",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "parser",
          "url": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513",
          "lineNumber": 71
        },
        "_priority": "Low",
        "_resourceType": "image",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/ekat/WEB-RES/resource/resource?id=bi_image_D1833E443390ED9B6FCE6BCEB0B89495",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "Referer",
              "value": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513"
            },
            {
              "name": "User-Agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            }
          ],
          "queryString": [
            {
              "name": "id",
              "value": "bi_image_D1833E443390ED9B6FCE6BCEB0B89495"
            }
          ],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "x-robots-tag",
              "value": "noindex"
            },
            {
              "name": "cache-control",
              "value": "public"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "pragma",
              "value": "cache"
            },
            {
              "name": "etag",
              "value": "W/\"169-1787214829048\""
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "expires",
              "value": "Thu, 20 Aug 2026 10:33:49 GMT"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "content-length",
              "value": "185"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 08:33:48 GMT"
            },
            {
              "name": "content-type",
              "value": "image/png"
            },
            {
              "name": "last-modified",
              "value": "Thu, 20 Aug 2026 07:47:13 GMT"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            }
          ],
          "cookies": [],
          "content": {
            "size": 169,
            "mimeType": "image/png",
            "text": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAcElEQVR4XqWTUQ6AMAxCd0SP4ydHVxolTWUfrS8B1i30b2utdd7CUOzGYQpkT3ZEIvPQEYnMQ0ckMg8dkch3mACZAUUOyAwockBmQJEDssTx3DnxLcO7zwLiltQygcyQl7gygWwDi7sygWwIaL++8wXJhkRhYpUD5QAAAABJRU5ErkJggg==",
            "encoding": "base64"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": 0,
          "_transferSize": 0,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:11.654Z",
        "time": 257.18000007327646,
        "timings": {
          "blocked": 256.1810000438318,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0,
          "wait": 0.3619999520406127,
          "receive": 0.6370000774040818,
          "_blocked_queueing": 255.73900004383177,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_fromCache": "disk",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "parser",
          "url": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513",
          "lineNumber": 71
        },
        "_priority": "Low",
        "_resourceType": "image",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/ekat/WEB-RES/resource/resource?id=bi_image_framework_transparent_56ABE4CBC175363DA0810882244B34FF",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "Referer",
              "value": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513"
            },
            {
              "name": "User-Agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            }
          ],
          "queryString": [
            {
              "name": "id",
              "value": "bi_image_framework_transparent_56ABE4CBC175363DA0810882244B34FF"
            }
          ],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "x-robots-tag",
              "value": "noindex"
            },
            {
              "name": "cache-control",
              "value": "public"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "pragma",
              "value": "cache"
            },
            {
              "name": "etag",
              "value": "W/\"68-1787214493222\""
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "expires",
              "value": "Thu, 20 Aug 2026 10:28:13 GMT"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "content-length",
              "value": "80"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 08:28:12 GMT"
            },
            {
              "name": "content-type",
              "value": "image/png"
            },
            {
              "name": "last-modified",
              "value": "Thu, 20 Aug 2026 07:47:01 GMT"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            }
          ],
          "cookies": [],
          "content": {
            "size": 68,
            "mimeType": "image/png",
            "text": "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVR4XmNgAAIAAAUAAQYUdaMAAAAASUVORK5CYII=",
            "encoding": "base64"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": 0,
          "_transferSize": 0,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:11.654Z",
        "time": 257.22799997311085,
        "timings": {
          "blocked": 256.1269999260828,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0,
          "wait": 0.4179999686032534,
          "receive": 0.6830000784248114,
          "_blocked_queueing": 255.9069999260828,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_fromCache": "disk",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "parser",
          "url": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513",
          "lineNumber": 71
        },
        "_priority": "VeryHigh",
        "_resourceType": "font",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/ekat/WEB-RES/custom/designs/Festool/fonts/OpenSans-Regular.ttf",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "Origin",
              "value": "https://ekat.festool.de"
            },
            {
              "name": "Referer",
              "value": "https://ekat.festool.de/ekat/WEB-RES/css/style_Festool.css_javaviewer_7.26.1.11.css"
            }
          ],
          "queryString": [],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            },
            {
              "name": "x-robots-tag",
              "value": "noindex"
            },
            {
              "name": "cache-control",
              "value": "public"
            },
            {
              "name": "pragma",
              "value": "cache"
            },
            {
              "name": "etag",
              "value": "W/\"217276-1787216990903\""
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "expires",
              "value": "Thu, 20 Aug 2026 09:11:50 GMT"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://ekat.festool.de, https://api.festool.io"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "content-length",
              "value": "217276"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 09:09:50 GMT"
            },
            {
              "name": "content-type",
              "value": "font/ttf"
            },
            {
              "name": "last-modified",
              "value": "Thu, 20 Aug 2026 07:47:11 GMT"
            },
            {
              "name": "vary",
              "value": "Origin"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            }
          ],
          "cookies": [],
          "content": {
            "size": 217276,
            "mimeType": "font/ttf"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": 0,
          "_transferSize": 0,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:11.934Z",
        "time": 0.07499998901039362,
        "timings": {
          "blocked": -1,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0,
          "wait": 0.059999991208314896,
          "receive": 0.014999997802078724,
          "_blocked_queueing": -1
        },
        "_fromCache": "memory",
        "_connectionId": "1726423",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "parser",
          "url": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513",
          "lineNumber": 71
        },
        "_priority": "High",
        "_resourceType": "image",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/ekat/WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.controls.viewer.b.a.a_open_hand.gif",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "Referer",
              "value": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513"
            },
            {
              "name": "User-Agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            }
          ],
          "queryString": [
            {
              "name": "id",
              "value": "class_image_de.docware.framework.modules.gui.controls.viewer.b.a.a_open_hand.gif"
            }
          ],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "x-robots-tag",
              "value": "noindex"
            },
            {
              "name": "cache-control",
              "value": "public"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "pragma",
              "value": "cache"
            },
            {
              "name": "etag",
              "value": "W/\"923-1787214828690\""
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "expires",
              "value": "Thu, 20 Aug 2026 10:33:48 GMT"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "content-length",
              "value": "186"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 08:33:48 GMT"
            },
            {
              "name": "content-type",
              "value": "image/gif"
            },
            {
              "name": "last-modified",
              "value": "Thu, 20 Aug 2026 07:47:01 GMT"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            }
          ],
          "cookies": [],
          "content": {
            "size": 923,
            "mimeType": "image/gif",
            "text": "R0lGODlhIAAgAPcAAAAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAP8ALAAAAAAgACAAAAh4AP8JHEiwoMGDCBMqXMiwocOHECNKnEixokWJAABcHJjxH4AAATJqrPgxZMmTJEFmVKnSI8WTLE2GnAgzZMyRDzuWBMkTZU6VO3kKxdlwZ1ChMyMeRdoSI1OkRH8+bUpzatKXT6NWhbpxqdaNYMOKHUu2rNmzCQMCADs=",
            "encoding": "base64"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": 0,
          "_transferSize": 0,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:11.952Z",
        "time": 1.6399999149143696,
        "timings": {
          "blocked": 0.6749999851658941,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0,
          "wait": 0.24400002763420342,
          "receive": 0.7209999021142721,
          "_blocked_queueing": 0.47199998516589403,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_fromCache": "disk",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "parser",
          "url": "https://ekat.festool.de/ekat/WEB-RES/css/style_Festool.css_javaviewer_7.26.1.11.css"
        },
        "_priority": "VeryHigh",
        "_resourceType": "font",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/ekat/WEB-RES/custom/designs/Festool/fonts/OpenSans-SemiBold.ttf",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": ":authority",
              "value": "ekat.festool.de"
            },
            {
              "name": ":method",
              "value": "GET"
            },
            {
              "name": ":path",
              "value": "/ekat/WEB-RES/custom/designs/Festool/fonts/OpenSans-SemiBold.ttf"
            },
            {
              "name": ":scheme",
              "value": "https"
            },
            {
              "name": "accept",
              "value": "*/*"
            },
            {
              "name": "accept-encoding",
              "value": "gzip, deflate, br, zstd"
            },
            {
              "name": "accept-language",
              "value": "en-GB,en-US;q=0.9,en;q=0.8"
            },
            {
              "name": "if-modified-since",
              "value": "Thu, 20 Aug 2026 07:47:19 GMT"
            },
            {
              "name": "if-none-match",
              "value": "W/\"221164-1787216820205\""
            },
            {
              "name": "origin",
              "value": "https://ekat.festool.de"
            },
            {
              "name": "priority",
              "value": "u=0"
            },
            {
              "name": "referer",
              "value": "https://ekat.festool.de/ekat/WEB-RES/css/style_Festool.css_javaviewer_7.26.1.11.css"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            },
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "sec-fetch-dest",
              "value": "font"
            },
            {
              "name": "sec-fetch-mode",
              "value": "cors"
            },
            {
              "name": "sec-fetch-site",
              "value": "same-origin"
            },
            {
              "name": "user-agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            }
          ],
          "queryString": [],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://ekat.festool.de"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "cache-control",
              "value": "public"
            },
            {
              "name": "content-length",
              "value": "221164"
            },
            {
              "name": "content-type",
              "value": "font/ttf"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 09:09:51 GMT"
            },
            {
              "name": "etag",
              "value": "W/\"221164-1787216992007\""
            },
            {
              "name": "expires",
              "value": "Thu, 20 Aug 2026 09:11:52 GMT"
            },
            {
              "name": "last-modified",
              "value": "Thu, 20 Aug 2026 07:47:19 GMT"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "pragma",
              "value": "cache"
            },
            {
              "name": "vary",
              "value": "Origin"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "x-robots-tag",
              "value": "noindex"
            }
          ],
          "cookies": [],
          "content": {
            "size": 221164,
            "mimeType": "font/ttf",
            "text": "AAEAAAATAQAABAAwRFNJRz2cxD4AA0p4AAAVdEdERUYAJgOvAANGWAAAAB5HUE9TCzcPNwADRngAAAA4R1NVQg4rPbcAA0awAAADxk9TLzKiBpf9AAABuAAAAGBjbWFwrrv1+wAAELQAAAOIY3Z0IBCRGjQAAB0IAAAApmZwZ21+YbYRAAAUPAAAB7RnYXNwAAgAGwADRkwAAAAMZ2x5Znfv8tkAACUIAAE+tGhlYWQDARxNAAABPAAAADZoaGVhDfsJ5AAAAXQAAAAkaG10eISZIGUAAAIYAAAOmmtlcm5UKwl+AAFjvAABtjZsb2Nhl5dIVgAAHbAAAAdWbWF4cAU4AfcAAAGYAAAAIG5hbWUrR4Z1AAMZ9AAABilwb3N0AkPvbAADICAAACYrcHJlcHism24AABvwAAABGAABAAAAARnbxuMlvF8PPPUACQgAAAAAAMlM6n0AAAAA1SvM1ftU/b4KFwhkAAAACQACAAAAAAAAAAEAAAiN/agAAAod+1T+ewoXAAEAAAAAAAAAAAAAAAAAAAOjAAEAAAOqAIoAFgBXAAUAAgAQAC8AXAAAAQMA5AADAAEAAwTiAlgABQAABZoFMwAAAR8FmgUzAAAD0QBmAfYAAAILBwYDCAQCAgTgAALvQAAgWwAAACgAAAAAMUFTQwBAACD//QYf/hQAhAiNAlggAAGfAAAAAARSBbYAAAAgAAMEzQDBAAAAAAQUAAACFAAAAjUAhQN9AIUFKwAvBJEAbwblAFQF7ABgAfIAhQKJAFICiQA9BGIASgSRAGACIwA/ApMASAIzAIUDHwAQBJEAWASRAJoEkQBaBJEAVgSRACcEkQB1BJEAXgSRAEoEkQBYBJEAVgIzAIUCOQA/BJEAYASRAGYEkQBgA6AAEAcvAG8FSgAABUgAwQUSAHkF3wDBBHcAwQRCAMEFzwB5BgIAwQLjAEoCZP9kBR0AwQRWAMEHYgDBBkQAwQZMAHkE7ADBBkwAeQUdAMEEZgBkBIcAHQXwALQE+gAAB5EADAT6AAQEvAAABJoAQgKkAJoDHwAQAqQAMwRMAB0Db//8BLwBagSkAFoE/ACoA/YAZgT8AGYEnABmAucAIwRzABcFFACoAjsAmgI7/4cEkwCoAjsAqAemAKgFFACoBOMAZgT8AKgE/ABmA3MAqAPlAGIDJQAnBRQAngRIAAAGiQAUBGgAGQRKAAAD0wBEAxcALQRoAdkC+AAtBJEAYAIUAAACNQCFBJEApgSRAEgEkQB1BJEAEgRoAdkEAgBzBLwBJQaoAGQC8gA5BHMAUgSRAGACkwBIBqgAZAQA//oDbQBtBJEAYALnADMC5wAtBLwBagUdAKgFPQBxAjMAhQG6AAAC5wBUAwwAPQRzAFAGpAA8BqQALgakADcDoAA3BUoAAAVKAAAFSgAABUoAAAVKAAAFSgAAB0z//gUSAHkEdwDBBHcAwQR3AMEEdwDBAuMANALjAEoC4//uAuMAOgXZAC8GRADBBkwAeQZMAHkGTAB5BkwAeQZMAHkEkQCDBkwAeQXwALQF8AC0BfAAtAXwALQEvAAABPQAwQVUAKgEpABaBKQAWgSkAFoEpABaBKQAWgSkAFoHGQBaA/YAZgScAGYEnABmBJwAZgScAGYCO/+7AjsAnAI7/5wCO//nBNsAZgUUAKgE4wBmBOMAZgTjAGYE4wBmBOMAZgSRAGAE4wBmBRQAngUUAJ4FFACeBRQAngRKAAAE/ACoBEoAAAVKAAAEpABaBUoAAASkAFoFSgAABKQAWgUSAHkD9gBmBRIAeQP2AGYFEgB5A/YAZgUSAHkD9gBmBd8AwQT8AGYF2QAvBQwAZgR3AMEEnABmBHcAwQScAGYEdwDBBJwAZgR3AMEEnABmBHcAwQScAGYFzwB5BHMAFwXPAHkEcwAXBc8AeQRzABcFzwB5BHMAFwYCAMEFFACoBgIAAAUUAAwC4//rAjv/lwLjADQCO//gAuMAEwI7/70C4wBKAjsAMALjAEoCOwCoBUgASgRiAJoCZP9kAjv/hwUdAMEEkwCoBI0AqARWAMECOwCoBFYAwQI7AF0EVgDBAjsAqARWAMEC+ACoBFoADgJc//4GRADBBRQAqAZEAMEFFACoBkQAwQUUAKgF1wADBkQAwQUUAKgGTAB5BOMAZgZMAHkE4wBmBkwAeQTjAGYHlgB5B64AZgUdAMEDcwCoBR0AwQNzAGEFHQDBA3MAawRmAGQD5QBiBGYAZAPlAGIEZgBkA+UAYgRmAGQD5QBiBIcAHQMlACcEhwAdAyUAJwSHAB0DJQAnBfAAtAUUAJ4F8AC0BRQAngXwALQFFACeBfAAtAUUAJ4F8AC0BRQAngXwALQFFACeB5EADAaJABQEvAAABEoAAAS8AAAEmgBC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ITUhNTMVMxUjESMnIwYnMjY1NTQmIyIGFRACGc7l3drecgwDDv6BAX/snJzBKwpskI6DgZh9exQBJwEEARUBHKIKiixdo66uo/s9kaW+n60hzKSxwv6WAP//AMEAAAP8BtkCJgAoAAABBwFNAAQBUgAIswEPBSYAKzX//wBm/+wEOQWHAiYASAAAAQYBTQIAAAizAh8RJgArNf//AMEAAAP8B1oCJgAoAAABBwFO//8BUgAIswEMBSYAKzX//wBm/+wEOQYIAiYASAAAAQYBTv8AAAizAhwRJgArNf//AMEAAAP8By8CJgAoAAABBwFPAU4BNQAIswEVBSYAKzX//wBm/+wEOQX6AiYASAAAAQcBTwFKAAAACLMCJREmACs1//8Awf4rA/wFtgImACgAAAAHAVECVAAA//8AZv5EBDkEZgImAEgAAAAHAVECUgAZ//8AwQAAA/wHcwImACgAAAEHAUwAAgFSAAizAREFJgArNf//AGb/7AQ5BiECJgBIAAABBgFM/wAACLMCIREmACs1//8Aef/sBTEHcwImACoAAAEHAUsA0QFSAAizAScFJgArNf//ABf+FAROBiECJgBKAAABBgFL1AAACLMDUBEmACs1//8Aef/sBTEHWgImACoAAAEHAU4A3wFSAAizARsFJgArNf//ABf+FAROBggCJgBKAAABBgFO2AAACLMDRBEmACs1//8Aef/sBTEHTAImACoAAAEHAU8CLwFSAAizASQFJgArNf//ABf+FAROBfoCJgBKAAABBwFPARIAAAAIswNNESYAKzX//wB5/jsFMQXLAiYAKgAAAAcCOQEfAAD//wAX/hQETgYhAiYASgAAAQYCOk4AAAizA0gRJgArNf//AMEAAAVCB3MCJgArAAABBwFLAJoBUgAIswEYBSYAKzX//wCoAAAEdQeqAiYASwAAAQcBSwApAYkACLMBIgImACs1AAIAAAAABgIFtgATABcAWEAvABEUAwUFBA0QFwMICAkCBAkLBBkYAxYLDAtLWQAQDAwJDhcHTFkXFwkSDgMFCRIAPzM/MxI5LysREgA5GC8zMysRADMzERIBFzkRMxIXOREzEhc5MTABMxUjESMRIREjESM1MzUzFSE1MwM1IRUFQsDA8P1e78HB7wKi8PD9XgTZqvvRApP9bQQvqt3d3f2qz88AAQAMAAAEdQYUAB4AaUBAAQAOERQYBAkJCgAKDBMEIB8YChwUDA0MSVkRDQ0cDxwFRlkPHAGvHL8czxzvHP8cBQAcEBwgHAMcHAoPAAEKFQA/Mz8SOS9dXXErERIAORgvMysRADMREjkREgEXOREzEhc5ETMxMCEjETQmIyIGFREjESM1MzUzFSEVIRUUBgczNjYzIBEEdexncJSL65yc6wF9/oMECA82r2oBkAJ3f3+x0P4MBMOjrq6jax1RXVdR/msA////6wAAAv0HSAImACwAAAEHAVL+/wFSAAizARQFJgArNf///5cAAAKpBfYCJgDzAAABBwFS/qsAAAAIswEMESYAKzX//wA0AAACswbZAiYALAAAAQcBTf8RAVIACLMBDwUmACs1////4AAAAl8FhwImAPMAAAEHAU3+vQAAAAizAQcRJgArNf//ABMAAALSB1oCJgAsAAABBwFO/w8BUgAIswEMBSYAKzX///+9AAACfAYIAiYA8wAAAQcBTv65AAAACLMBBBEmACs1//8ASv4rApgFtgImACwAAAAGAVFvAP//ADD+KwGiBfoCJgBMAAAABgFRGQD//wBKAAACmAdMAiYALAAAAQcBTwBSAVIACLMBFQUmACs1AAEAqAAAAZMEUgADABZACQABAQUEAg8BFQA/PxESATkRMzEwISMRMwGT6+sEUv//AEr+aASLBbYAJgAsAAAABwAtAuEAAP//AJr+FAPJBfoAJgBMAAAABwBNAicAAP///2T+aAK3B3MCJgAtAAABBwFL/tIBUgAIswEZBSYAKzX///+H/hQCmgYhAiYCNwAAAQcBS/61AAAACLMBGREmACs1//8Awf47BR0FtgImAC4AAAAHAjkAkQAA//8AqP47BIkGFAImAE4AAAAGAjlQAAABAKgAAASHBFIADQA3QB0FBAECCwAICAkCAwQGCQUPDgYDBwAECQEKDwUJFQA/Mz8zEhc5ERIBFzkRMxEzMxEzETMxMAEBIQEBIQEHESMRMxEUAY8B0wEL/lQBxv7u/rCL8vICLQIl/g79oAHRZ/6WBFL+34D//wDBAAAEGwdzAiYALwAAAQcAdv+SAVIACLMBDwUmACs1//8AqAAAApAHrAImAE8AAAEHAHb/QAGLAAizAQ0CJgArNf//AMH+OwQbBbYCJgAvAAAABgI5PQD//wBd/jsBkwYUAiYATwAAAAcCOf73AAD//wDBAAAEGwW3AiYALwAAAQcCOAFI/6MAB7IBCQMAPzUA//8AqAAAAxMGFAImAE8AAAAGAjh9AP//AMEAAAQbBbYCJgAvAAAABwFPAhn9a///AKgAAAMfBhQAJgBPAAAABwFPAX39OAABAA4AAAQbBbYADQBDQCUHBAsLAAADCQ0EDw4BBAcKBAJADwhPCAILAwgIAAUDAAtMWQASAD8rABg/EjkvX15dGs0XORESARc5ETMSOTkxMDMRByc3ETMRNxcFESEVwVlas+/bXP7JAmsB9DObawLv/aCDnrj+Ss0AAAH//gAAAmQGFAALAD1AJQkABAQFBQgCAw0MBgkDCAQBDwcfBy8HTwdfB58HBgcHBQoABRUAPz8SOS9dzRc5ERIBFzkRMxI5OTEwATcXBxEjEQcnNxEzAaBmXsTsXFq27AOBRJp//VQCGTqadQMmAP//AMEAAAWDB3MCJgAxAAABBwB2ASMBUgAIswEbBSYAKzX//wCoAAAEdQYhAiYAUQAAAQcAdgCRAAAACLMBHREmACs1//8Awf47BYMFtgImADEAAAAHAjkA4QAA//8AqP47BHUEZgImAFEAAAAGAjlkAP//AMEAAAWDB3MCJgAxAAABBwFMAMkBUgAIswEXBSYAKzX//wCoAAAEdQYhAiYAUQAAAQYBTDUAAAizARkRJgArNf//AAMAAAU2BbYAJwBRAMEAAAAGAgfqAAABAMH+aAWDBbYAGgA8QB4TCBYWGBEKDg4PAw8YAxwbChMPFhADDxIABUxZACMAPysAGD8/MxI5ORESARc5ETMRMzMRMxEzMzEwASInNRYzMjY3ASMXFhURIxEhATMmEREzERQGA99oRkpWanAF/N8IBQ7ZASICzQYO29r+aBnLFWphBIs+waX9FwW2++p7Aa4B7fpQydUAAAEAqP4UBHUEZgAdADxAHwcbEw8PEAMQGwMfHhMQFxEPEBUXC0ZZFxAABUZZABsAPysAGD8rABg/PxESORESARc5ETMRMxEzMTABIic1FjMyNRE0JiMiBhURIxEzFzM2NjMyFhURFAYDMWJCOj+DaW6Viuu4IQ4xs3LLxab+FBm6EqoDNXp4sM/92QRSkU9Wysv8nqmy//8Aef/sBdMG2QImADIAAAEHAU0AxQFSAAizAhsFJgArNf//AGb/7AR9BYcCJgBSAAABBgFNDgAACLMCGREmACs1//8Aef/sBdMHWgImADIAAAEHAU4AwwFSAAizAhgFJgArNf//AGb/7AR9BggCJgBSAAABBgFODAAACLMCFhEmACs1//8Aef/sBdMHcwImADIAAAEHAVMBKwFSAAq0AwIqBSYAKzU1//8AZv/sBH0GIQImAFIAAAEGAVNqAAAKtAMCKBEmACs1NQACAHn/7AcbBc0AFAAfAFZALw0ADxMTHRgGAAYRHQQhIA8STFkPDwELCw5MWQsDCRVMWQkEARNMWQETAxtMWQMSAD8rABg/KwAYPysAGD8rERIAORgvKxESARc5ETMRMxEzETMxMCEhBiMgABEQACEyFyEVIREhFSERIQEiAhEQEjMyNxEmBxv8zGZt/sD+pQFYAT9zXgM6/cACG/3lAkD7/tDW1NCBVFAUAYkBagFoAYYXyv5yyP41BDX+6v7z/vP+6CMEACUAAAMAZv/sB0wEZgAdACkAMABvQD0NAiQtFBQkLhMeBwcTGiQEMjENAgQKLRRIWQwtHC0CEAMtLQQKDypIWQ8KCidGWQoQABdHWQAEBCFGWQQWAD8rEQAzKwAYPysRADMrERIAORgvX15dKxESADk5ERIBFzkRMxEzETMRMxI5OTEwBSAnBiEiABEQADMyFhc2MzIAFRUhFhYzMjY3FQYGARQWMzI2NTQmIyIGJSIGByE0JgWe/ueLhP707P7oARL1ecxCg/jdAQD9HguVmmaqYFSv+0eDko2DhJGPgQQZbocLAfF+FMLCATYBCQEQAStiYML+9eh/pKolK78oIwI/vcK/vMC/vsyLi4aQAP//AMEAAAUKB3MCJgA1AAABBwB2AIUBUgAIswIfBSYAKzX//wCoAAADTgYhAiYAVQAAAQYAdvMAAAizARoRJgArNf//AMH+OwUKBbYCJgA1AAAABwI5AJgAAP//AGH+OwNOBGYCJgBVAAAABwI5/vsAAP//AMEAAAUKB3MCJgA1AAABBwFMACcBUgAIswIbBSYAKzX//wBrAAADbQYhAiYAVQAAAQYBTIgAAAizARYRJgArNf//AGT/7AQMB3MCJgA2AAABBwB2AE4BUgAIswEuBSYAKzX//wBi/+wDjwYhAiYAVgAAAQYAdvsAAAizASsRJgArNf//AGT/7AQMB3MCJgA2AAABBwFL/+oBUgAIswExBSYAKzX//wBi/+wDjwYhAiYAVgAAAQYBS50AAAizAS4RJgArNf//AGT+FAQMBcsCJgA2AAAABwB6AUQAAP//AGL+FAOPBGYCJgBWAAAABwB6AQAAAP//AGT/7AQMB3MCJgA2AAABBwFM/+gBUgAIswEqBSYAKzX//wBi/+wDjwYhAiYAVgAAAQYBTKMAAAizAScRJgArNf//AB3+OwRoBbYCJgA3AAAABgI5IQD//wAn/jsC8AVIAiYAVwAAAAYCOakA//8AHQAABGgHcwImADcAAAEHAUz/4gFSAAizAQ0FJgArNf//ACf/7ANOBh4CJgBXAAAABwI4ALgACgABAB0AAARoBbYADwA/QCEMBQAAAQEDBwoOBREQDwMEA0tZDAQECAESCwcIB0xZCAMAPysRADMYPxI5LzMrEQAzERIBFzkRMxI5OTEwISMRITUhESE1IRUhESEVIQK67/7nARn+UgRL/lIBF/7pAnvEAarNzf5WxAABACf/7ALwBUgAHQBXQC8OERcUBBsbCgIKCw8WGQYfHhIUQBsYCwwMC0lZDAwGFA4XFBdIWREUDwYARlkGFgA/KwAYPzMrEQAzERI5GC8rERIAOTkaGBDNERIBFzkRMxIXOTEwJTI3FQYGIyImNTUjNTM1IzU3NzMVIRUhFSEVIRUUAkZNXSZ9Qaujh4eXolCRATv+xQEh/t+qG7ERF7K0yaPiaFbq9rLio8OuAP//ALT/7AU7B0gCJgA4AAABBwFSAIUBUgAIswEaBSYAKzX//wCe/+wEbQX2AiYAWAAAAQYBUhIAAAizAR0RJgArNf//ALT/7AU7BtkCJgA4AAABBwFNAJYBUgAIswEVBSYAKzX//wCe/+wEbQWHAiYAWAAAAQYBTSMAAAizARgRJgArNf//ALT/7AU7B1oCJgA4AAABBwFOAJEBUgAIswESBSYAKzX//wCe/+wEbQYIAiYAWAAAAQYBTiEAAAizARURJgArNf//ALT/7AU7B+4CJgA4AAABBwFQAKoBUgAKtAIBFQUmACs1Nf//AJ7/7ARtBpwCJgBYAAABBgFQNwAACrQCARgRJgArNTX//wC0/+wFOwdzAiYAOAAAAQcBUwD+AVIACrQCASQFJgArNTX//wCe/+wEeAYhAiYAWAAAAQcBUwCRAAAACrQCAScRJgArNTX//wC0/isFOwW2AiYAOAAAAAcBUQIzAAD//wCe/isEfQRSAiYAWAAAAAcBUQL2AAD//wAMAAAHgwdzAiYAOgAAAQcBSwFiAVIACLMBKQUmACs1//8AFAAABnMGIQImAFoAAAEHAUsA3wAAAAizASoRJgArNf//AAAAAAS8B3MCJgA8AAABBwFL//sBUgAIswEVBSYAKzX//wAA/hQESgYhAiYAXAAAAQYBS8YAAAizASERJgArNf//AAAAAAS8Bz4CJgA8AAABBwBqAAABUgAKtAIBHgUmACs1Nf//AEIAAARYB3MCJgA9AAABBwB2AEgBUgAIswETBSYAKzX//wBEAAADiwYhAiYAXQAAAQYAdv8AAAizARMRJgArNf//AEIAAARYB0wCJgA9AAABBwFPAS0BUgAIswETBSYAKzX//wBEAAADiwX6AiYAXQAAAQcBTwDLAAAACLMBExEmACs1//8AQgAABFgHcwImAD0AAAEHAUz/7wFSAAizAQ8FJgArNf//AEQAAAOLBiECJgBdAAABBgFMkAAACLMBDxEmACs1AAEAqAAAAwwGHwAMACFADwoDAwQEDg0EFQgARlkIAAA/KwAYPxESATkRMxEzMTABIhURIxE0NjMyFwcmAi+c67XCg2o5XQVgwPtgBKa+uyuyHgABAMP+FAQjBcsAHwBEQCQaDB4eCAMIChMcBSEgCR0aHUhZDBoaEAAQFkZZEAcABUZZABsAPysAGD8rERIAORgvMysRADMREgEXOREzEjk5MTABIic1FjMyNjURIzU3NTQ2MzIWFwcmIyIGFRUzFSMREAFiV0g+PlBGw8Omvk5yKjpXQk5B/fv+FBW+ElpnA51xRW+/tB4PsB5XYW20/E7+kwAEAAAAAAVMB6oAEAAXACEALgB0QDMJAhQEAwcIAAMFBggLERQXGB0LMC8YQA0TSBgODiVLWRQJAgMsFwZMWRcsFywADhAOAg64/8BAEg0QSA4OCA8cARxADRNIHAQIEgA/My8rXRI5LytdOTkvLysRABczKwAYEMYrERIBFzkRMxEzETMzMTABFAcBIwMhAyMBJjU0NjMyFgMDJicGBgMTNTY2NyEVBgYHEzQmIyIGFRQWMzMyNgOTSwIE/I39won8AgRMgWtniAx1URsMG7hwHnAgAREfv0M5PC4vPDMyCi05BaZqPvsCAW3+kwT8Om5me3n8LwE0xmsmUP4RBH8THYs1DieRKv7qMzc3MzI5OQAABQBa/+wEBAeqABsAJgAuADoARgCSQBZEOD4yDAEfHxskCAgUGzI4JyoHSEcuuP/AQD4KDkguLjVvKgEPKj8qXyoDDCo7ADVQNWA1kDWgNQUQAzVBLxdAAgUXDCBKWQwMBRcAFRcQSFkXEAUcSFkFFgA/KwAYPysAGD8REjkvKxESADkaGBDeMsRfXl0yxF5dcRE5LysREgEXOREzETMRMzMRMxEzMTAhJyMGBiMiJjU0JCU3NTQmIyIGByc2NjMyFhURJTI2NTUHBgYVFBYTNTY3IRUGBwMiJjU0NjMyFhUUBgMiBhUUFjMyNjU0JgNcLwhDuHagugEBAQG/ZmVHnFZMYMdo1dX9+n+cjp+eWDFiTAEtO/4faIODaGSMiWc1NTU1NTY2mldXsKGpsAgGO2lqKiqoMDC/vv0XoI+BYAYHaGBOTQY5EFtmDECF/ep4a2h5d2hteAFNNTU2NTU2NTX////+AAAG0wdzAiYAiAAAAQcAdgJ1AVIACLMCHQUmACs1//8AWv/sBrgGIQImAKgAAAEHAHYBqgAAAAizA0ERJgArNf//AHn/tAXTB3MCJgCaAAABBwB2ASUBUgAIswMtBSYAKzX//wBm/7gEfQYhAiYAugAAAQYAdmgAAAizAywRJgArNf//AGT+OwQMBcsCJgA2AAAABgI5AAD//wBi/jsDjwRmAiYAVgAAAAYCOcIAAAEA4wTZA+UGIQAMAChAEgkIAgAMBAUCBQwDDg0CCYAFAAAvMhrNMhESARc5ETMRMxEzMzEwASYnBgcjNTY3IRYXFQNGe2lnep6/PwEEP8EE2UlrZ00ZxmluwRkAAQDjBNkD5QYhAA0AKEASBQQLDQEJBwEHCwMPDggAgAsFAC8zGs0yERIBFzkRMxEzETMzMTABFQYGByEmJzUzFhc2NwPlfmcb/vxBvZ6KV2GDBiEbg3wuacQbWl1kUwAAAQEjBNkDogWHAAMAEbUDAgUEAAMALzMREgE5OTEwASEVIQEjAn/9gQWHrgABAQQE2QPDBggADgAkQBALDAQDDAMQDwt/BAEEgAgAAC8yGsxdMhESATk5ETMRMzEwASImJzMeAjMyNjczBgYCXp21CIkFLFFTaWUHjAzABNmfkDA5GEI/jaIAAAEAmgT2AaIF+gALABO2BgAADQwDCQAvzRESATkRMzEwEzQ2MzIWFRQGIyImmkVAPkVFPkBFBXc/REQ/PEVFAAACAWAE1wM7BpwACwAWACpAFgwAEgYGABgXD3AJAQ8JHwkvCQMJFAMALzPEXV0yERIBOTkRMxEzMTABFAYjIiY1NDYzMhYHNCYjIgYVFDMyNgM7g2xsgH9taIeFPC4vPGsuPAW8Zn99ZmV9fGYyOTkyajcAAAEAF/4rAYcAAAAQACJAEA0OAAoECg4DEhECYAcBBw4ALy9dMxESARc5ETMRMzEwFxQzMjcVBiMiJjU0NjczBgbHWCs9RUZxdExelUVK6VkRkBRxYEF8R0JtAAEA7ATXA/4F9gAVADJAGBITBwgTCBcWEAAFCwALAAt/E48TAhOACAAvGsxdOTkvLxEzETMREgE5OREzETMxMAEiLgIjIgcjNjYzMh4CMzI3MwYGAwgqUU5KIlEcegyDZitSTkkiTxt9DIIE2SMrI3OLkiMrI3OGlwAAAgDBBNkD5wYhAAgAEgAbQAwABAkOBBQTDQSACQAALzIazTIREgEXOTEwEzU2NzMVBgYHMzU2NjczFQYGB8FoUvQdwk73K3Ef8x3CTgTZGZCfFTHGPBk5tUEVMcY8AAEB6QTZAykGaAAJABhACQMECQQLCgSACQAvGs0REgE5OREzMTABNjY3MxUGBgcjAekbMgnqGGY2jAT2UtVLGEfWWgAAAwDpBQIDsga0AAkAFQAgADdAHQMEFhsQCgQJChsEIiEYDQAJEAkgCQMJDQkNBB4TAC8zzDk5Ly9dETMREgEXOREzETMRMzEwATY2NzMVBgYHIyU0NjMyFhUUBiMiJiU0MzIWFRQGIyImAfQXLwjhHGk+bP71PjEzPEAvMT4B7G8uQEAuMj0FhUm1MRQ9plAKPjc8OTs6Ojt1OD07OjoA////8gAABUoF/wImACQAAAEHAVT+Cf+XAAeyAhMAAD81AAABAIUCOQGuA2oACwAXQAoGAAANDAMJUVkDAC8rERIBOREzMTATNDYzMhYVFAYjIiaFS0lJTE5HR00C0UtOUElIUE4A////uQAABIEF/wAnACgAhQAAAQcBVP3Q/5cAB7IBDwAAPzUA////uQAABdMF/wAnACsAkQAAAQcBVP3Q/5cAB7IBDwAAPzUA////wQAAA4wF/wAnACwA9AAAAQcBVP3Y/5cAB7IBDwAAPzUA////1v/sBh0F/wAmADJKAAEHAVT97f+XAAeyAhsAAD81AP///68AAAXQBf8AJwA8ARQAAAEHAVT9xv+XAAeyAQwAAD81AP///9YAAAZOBf8AJgF2TAABBwFU/e3/lwAHsgEjAAA/NQD////Y/+wC1Qa0AiYBhgAAAQcBVf7vAAAADLUDAgEsESYAKzU1Nf//AAAAAAVKBbwCBgAkAAD//wDBAAAE2QW2AgYAJQAAAAEAwQAABCUFtgAFABtADAQBBwYEEgUCTFkFAwA/KwAYPxESATk5MTABFSERIxEEJf2L7wW2zfsXBbYA//8ALwAABLoFuAIGAigAAP//AMEAAAP8BbYCBgAoAAD//wBCAAAEWAW2AgYAPQAA//8AwQAABUIFtgIGACsAAAADAHn/7AXTBc0AAwAPABsAOkAfFgQQCgECBAoEHRwDAkxZAwMHDQ0ZTFkNBAcTTFkHEwA/KwAYPysREgA5GC8rERIBFzkRMxEzMTABFSE1BRAAISAAERAAISAAARASMzISERACIyICBEb9wAPN/pv+uf61/p0BZQFLAUYBZPug3NjX29vV2d0DTMnJb/6b/nQBiQFqAWoBhP52/pr+8/7oARMBEgEPART+6QD//wBKAAACmAW2AgYALAAA//8AwQAABR0FtgIGAC4AAAABAAAAAAUCBbYACwAoQBMHBgAJCAQFAAUIAw0MAAYDCQUSAD8zPzMREgEXOREzETMRMzMxMAEOAgEjASEBIwEmAn8JIh/+w/gCAAEAAgL4/tNBBNMsh2r8SgW2+koDh8IA//8AwQAABqIFtgIGADAAAP//AMEAAAWDBbYCBgAxAAAAAwBMAAAEMQW2AAMABwALADpAHwYIBwsCAwgLBA0MAANMWQAACgQEB0xZBAMKC0xZChIAPysAGD8rERIAORgvKxESARc5ETMRMzEwEyEVIQMhFSEBFSE1xwLv/RFSA5P8bQO8/BsDXsgDIMr738vL//8Aef/sBdMFzQIGADIAAAABAMEAAAUlBbYABwAlQBEBAAQFBQAJCAEFEgYDTFkGAwA/KwAYPzMREgE5OREzETMxMCEjESERIxEhBSXw/XvvBGQE6fsXBbYA//8AwQAABIkFtgIGADMAAAABAEwAAARqBbYADQBDQCMCCQgDCgAAAwYJDQUPDgIJCQAEAwcEB0xZBAMBCwALTFkAEgA/KxEAMxg/KxEAMxESOREzERIBFzkRMxEzETMxMDM1AQE1IRUhJwEBJSEVTAHb/jED1/4I1wHJ/iEBOQHnwQI7Afy+zQf+Dv3HBssA//8AHQAABGgFtgIGADcAAP//AAAAAAS8BbYCBgA8AAAAAwBi/+wGPQXLAAgAIgArAGFANwAUFysEIiIJBBwnDwkPHAMtLAgkEyRLWRcTABMQEwIQAwArCitLWSEKUApgCgITChMKCRUECRMAPz8SOTkvL10RMysRADNfXl0RMysRADMREgEXOREzETMRMxIXOTEwATMyNjU0JiMjAzUjIiQCNTQ2JDMzNTMVMzIEFhUUAgQjIxUDIyIGFRQWMzMDwRS0y72lMeIhs/7xmowBBrA74j2xAQWJmv7ztSDiMaa8yrcSAYvBrKC8+5jhgwEGoJv5jbS0jPeeo/78guEEaL2fqsP//wAEAAAE9gW2AgYAOwAAAAEAbQAABkQFtgAbAEBAIBQTBQYaGwUGDQwGDBsDHRwVEQgRTFkECAgGGhMMAwYSAD8/MzMSOS8zKxEAMxESARc5ETMRMxEzERI5OTEwARAAISMRIxEjIAARETMRFBYzMxEzETMyNjURMwZE/tP+4THgMf7l/tLnt8Ac4B62v+oD1f75/ur+SAG4AREBCgHj/iGwqAM3/MmrqQHjAAEARAAABgIFzQAfAD9AIxYaCgYdEwMNBggNExgaBiEgEABMWRAEFgYaAwkICUxZGQgSAD8zKxEAFzMYPysREgEXOREzETMRMxEzMTABIgYVFBIXFSE1ISYCNRAAISAAERQCByEVITU2EjU0JgMj1NyTov2cAW6YoQFsAT4BPgFspJgBcf2anpndBQDv4tH+2WrNzWsBUMgBJAFZ/qr+2cv+smrNzWQBKdXj7v//ADoAAAKrBz4CJgAsAAABBwBq/xUBUgAKtAIBIQUmACs1Nf//AAAAAAS8Bz4CJgA8AAABBwBqAAABUgAKtAIBHgUmACs1Nf//AGb/7ATjBmgCJgF+AAABBgFUJwAACLMCNREmACs1//8AVP/sA9UGaAImAYIAAAEGAVT3AAAIswEtESYAKzX//wCo/hQEdQZoAiYBhAAAAQYBVFgAAAizAR0RJgArNf//AKT/7ALVBmgCJgGGAAABBwFU/ugAAAAIswEXESYAKzX//wCa/+wElga0AiYBkgAAAQYBVT8AAAy1AwIBNBEmACs1NTUAAgBm/+wE4wRmAAsAKwBKQCcYGRkpFgMDHQkPDx0iAy0sFioMEhgPEgdGWRIQJiBGWQwARlkmDBYAPzMrKwAYPysAGD8REjk5ERIBFzkRMxEzEjk5MxEzMTAlMjY3NTQmIyARFBYXIgIREBIzMhYXMzY3MwYCFREUFjMyNxUGBiMiJicjBgJekn8Cho/+/H5P0u313HidNQwbKb4bIiwoHx4QTx5faBoQc6qpyAzOsf59vby+ASwBDQEVASxVU2EzUv7/Zf6JOTwKsgoQTlmnAAIAqP4UBNMGHwASACUATUApIwMaCBYODg8DBggPHgUnJgUeHx8eRlkfHwsADxsAE0ZZAAALGEZZCxYAPysAGD8rABg/ERI5LysREgA5ERIBFzkRMxEzETMRMzEwATIEFRAFFQQRFAQjIicRIxE0JBcgEREWMyARNCYjIzUzMjY1NCYCpOIBBf7RAXf++OjMhOsBC+3+84qbASuhmFxIgIiHBh/Quf7bNAYs/pvU5kH95wY04fa9/tP8w04BDoSPvoF3bXQAAAEABv4UBEwEUgATADZAGgQLAQsQBQABDxAGBQEFEAMVCgQBFA8FDwEbAD8/MxESOTkSARc5ETMRMxEzERI5ERI5MTABIzQSNwEzExYWFzM+AhMzAQYCAlD8OC7+TPTLHEQKBgYjKdH0/mYqOP4UVgEehARG/eVK4TkiioUCTvvFbf7bAAIAZv/sBHsGGQAdACkAQkAiIQAeDwIeFSQbAggVGwQrKhIAISEYBQUMR1kFABgnRlkYFgA/KwAYPysREgA5ETMzERIBFzkRMxEzETMSOTkxMAEmNTQ2MzIWFwcmJiMiBhUUFhcWFhUUACMiJDU0NgE0JicGBhUUFjMyNgIC9tq8acKNYFWqYU9XdKDHrP7t++z+5c4CVXB3o6WTgImTA56QxImeLUKuKztDODpsU2zxoff+8/fTsvn+hHKmPirIj3mVoQABAFT/7APVBGYAIwBNQCsgFQUPAAoPEhUaBiUkEwEjIwJIWQwjHCMCEAMjIwwYGB5HWRgQDAdHWQwWAD8rABg/KxESADkYL19eXSsREgA5ERIBFzkRMxEzMTABFSMiBhUUITI3FQYjIiQ1NDY3NSY1NDYzMhcHJiYjIhUUFjMDCJ6ckQEZwbyY9fL/AHuF0fPQ3LNOb4lH7JGYApixU1KcVsVLqZppgyALNsiImk+zMByFTEcAAAEAZv57A8kGFAAhAEBAIBEXAgMDBgYAGw0ADRQXBCMiHwoKFQMiFxEUFRRHWRUAAD8rEQAzMxg/EjkRMxESARc5ETMRMxEzETMRMzEwBRQHIzY2NTQmJicmJjU0EhI3BiMhNSEVBgACFRQWFhcWFgPJhew7TChgUdXLdN3/LN7+9gMj1P7uhTd1kp6TPZG3TZoxISUhDibgwZkBFAEP3wy2m7L+yf7mm1ptQR0gdAAAAQCo/hQEdQRmABMAMkAZDQkJCgEACgAUFQ0KEREFRlkREAsPARsKFQA/Pz8/KxESADkREgE5OREzETMRMzEwASMRNCYjIgYVESMRMxczNjYzIBEEdexscZOG67ghDDK4cAGO/hQElIR6tcr92QRSkU9W/msAAAMAZv/sBG8GKwALABIAGQA/QCAXDw8AFhAQBgYAGxoWEEdZFhYDCQkTSFkJAQMMSFkDFgA/KwAYPysREgA5GC8rERIBOTkRMxEzETMRMzEwARAAISIAERAAITIAATISEyESEhMiAgchJgIEb/8A/vn8/voBAQEB/wEI/fmOgwb91wSFi4p/CQIlCYEDDP5r/nUBlgGKAZYBif5q/AsBDAEQ/un++wTX/v3//wEDAAEApP/sAtUEUgANAB9ADgANDQYPDg0PCQNGWQkWAD8rABg/ERIBOTkRMzEwAREUMzI3FQYGIyImNREBj5JZWyV6Qq2jBFL8/qYbsREXsLIDBP//AKgAAASHBFICBgD6AAAAAf/8/+wEkwYhACIAPkAgGw8BHiIAAAcPFR4EJCMeHx8KABUKBUZZCgEYEkZZGBYAPysAGD8rABg/EjkRMxESARc5MxEzETMRMzEwIwEnJiYjIgc1NjMyFhYXARYWMzI3FQYGIyImJwImJyMGBwMEAdktJV1RODVEUmeNZTYBQh08KhIvGlIjWm4lj0IJBiM95wQrf2NPDMARQYqT/INOSgqyDA5XaQGOyCuHj/3pAP//AKj+FAR1BFICBgB3AAAAAQACAAAEOQRSAA0AKEATDQwECAkBAAAECQMPDggADwQNFQA/Mz8yERIBFzkRMxEzETMzMTATMxMWFzM2EhEzEAIHIwL02SBCCJWA68zm5wRS/aRT1qcBogE8/pL+BekAAQBm/nsDyQYUAC0AYkAzCQ8GAxgAJSYmKSkjEwYcAAAGDA8YIwYvLiAsLA0mBBkWFhlIWRYWDSYiEAkMDQxHWQ0AAD8rEQAzMxg/EjkvKxESADkREjkRMxESARc5ETMRMxEzETMRMxESORESOTEwEzQ2NzUmNTQ2NwYjIzUhFSMiBhUUFjMzFSMiBhUUFhYXFhYVFAcjNjY1NCYnJGaWh9uOm8BCLQLvP8X+lqCorKu8NmuhoYyB6DpLaHP+XAGshcgwCjzQcJArDLasnoBoX6qTiE5fOiEjdlqPuU6aMywzE0j//wBm/+wEfQRmAgYAUgAAAAEAGf/sBUoEUgAVADdAHQgUCwwCDA4SFAUXFgwVEwoOEA5HWRAPBgBHWQYWAD8rABg/KxEAMzMYPxESARc5ETMRMzEwJTI3FQYGIyARESERIxEjNTchFSMRFATJNjQZXTj++v5o6+OfBJLgqBuxDxcBIgKK/GgDmGZUuv2DcwAAAgCP/hQEewRmABAAHAA9QB4aABUGCQkKCgAeHRUXBgMOChsOEUZZDhADF0ZZAxYAPysAGD8rABg/ERI5EjkREgE5OREzETMzETMxMAEQAiMiJyMWFREjERAAMzIAJSIGFREWMzI2NTQmBHv64ad8DAzuAQnz5AEM/gqGgmiei3t6Ain+7/7UVniX/uEEHQEOASf+y3W0u/7TXrrDxLkAAAEAZv55A8kEZgAdADVAGgkKCg0NBwATBxMYAx8eBBAQFgoiFhtGWRYQAD8rABg/EjkRMxESARc5ETMRMxEzETMxMAEUFhYXFhYVFAcjNjY1NCYnJiY1EAAhMhcHJiMiBgFYNn6QoouB6D9GYHvWzgETAQyxk0iScpuKAgBkdUcdJXdekb9ami8tMxgq88kBNAE4Q7s61QAAAgBm/+wE4wRSAA0AGQA3QBwWDAwHFAAOBwAHCwMbGgwXCRdHWQkPBBFGWQQWAD8rABg/KxEAMxESARc5ETMRMxI5ETMxMAEUBgYjIgARECEhFSEWBRQWMzI2NTQnIyIGBIOA7qL2/ukCZQIY/u6y/NeTioeTlznCpQHsmOp+ASMBBQI+trfRrrqtpfOrugAAAQAd/+kDyQRSABEALEAXAQsLDREFBBMSAA0PDUdZDw8IA0ZZCBYAPysAGD8rEQAzERIBFzkRMzEwAREUMzI3FQYjIiY1ESE1NyEVAiuoWV1lfrqv/uChAwsDmv28rhuxKbKxAk5kVLgAAAEAmv/sBJYEUgAVACtAFA8QEAwTBgMTAxcWDwQPAAlGWQAWAD8rABg/MxESATk5ETMRMzMRMzEwBSImEREzERQWMzI2NTQmJzMWFhUQAAKB8/TrfoqUiRwo7icb/vkU/gEMAlz9pKOp1eNt26iY53n+x/7LAAACAGb+FAWiBGQAGAAhAEZAJB8MGBgHAAoZEwoEAAQTAyMiBhAAGxAcSFkQEB8MAQxHWRcBFgA/MysRADMYPysAGD8/ERIBFzkRMxEzERI5MhE5OTEwAREkABEQExcGBhUQBRE0NjMyEhUUAgQHEQE0JiMiFRE2NgKF/vP+7tywXEwBO8Gmx++N/vytAVZtX4qeuP4UAdwVASUBAQEtAQp0eth3/q8sAjm6yf7d+67+/JgM/iQEMKrCzf3FD9sAAf/d/hQEiwRcACAASEApBAUJFBUZBg4eBgcHDh4DIhYXIRUFGAgEFwYPFxsAHEZZABARDEZZERsAPysAGD8rABg/PxIXOREBMzIRFzkRMxESFzkxMBMyFhYXEwEzARMWFjMyNxUGIyImJwMBIwEDJiYjIgc1NtFHX0YsbwEp9P5HwSNNQCwyQVp6lTd//q78AeSaHUgzLStMBFwuYXv+2QIn/QL+IVhGCrYXfp8BZf1+A10BjVBMD7sWAAABAJr+FAXlBhQAGgBDQCIZAQ4ODwcICAQKFhMKDxMDHBsaAAcUDw8bARkQGUdZDRAWAD8zKxEAMxg/PzM/ERIBFzkRMxEzMxEzETMSOTkxMAERNjY1NCYnMxIREAAFESMRJAARETMRFBYXEQOktK4eKuJF/t3+4t/+7f7o452rBhT6lg/FwXHxsf7w/wD+7/7NEP4mAdoJAR8BEwIp/dG6tgsFbAAAAQBv/+wGGwRSACUAS0AlGhsbFx4kEREQBwYGCgMDEB4DJyYkBhAQABoGDxQNAA1HWSEAFgA/MisRADMYPzMSOS8RORESARc5ETMzETMRMxI5ETMzETMxMAUiAhE0EjczBgIVFBYzMhERMxEQMzI2NTQCJzMWEhUQAiMiJyMGAhDE3Tg+6EI7bmW03bJmbT1A6j823cXmSQtJFAEqAQOdAQuRkf72mrHEAQIBL/7R/v7As5wBD4yS/vCX/v7+1cTEAP//AAn/7ALVBewCJgGGAAABBwBq/uQAAAAKtAIBIxEmACs1Nf//AJr/7ASWBewCJgGSAAABBgBqLwAACrQCASsRJgArNTX//wBm/+wEfQZoAiYAUgAAAQYBVDEAAAizAh8RJgArNf//AJr/7ASWBmgCJgGSAAABBgFUOQAACLMBHxEmACs1//8Ab//sBhsGaAImAZYAAAEHAVQA/gAAAAizAS8RJgArNf//AMEAAAP8Bz4CJgAoAAABBwBqAAoBUgAKtAIBIQUmACs1NQABAB3/7AWiBbYAHQBEQCUIGxYODg8DDxEUGwUfHhYNTFkWFhIPEhUREhFMWRIDAAVMWQATAD8rABg/KxEAMxg/EjkvKxESARc5ETMRMxEzMTAFIic1FjMyNjU1NCYjIREjESE1IRUhESEyFhUVFAYEHWdJVEtXT2h3/prw/qAECP5IAXLa6cgUHssfYmGBbF39PQTpzc3+psi1icbX//8AwQAABCUHcwImAWEAAAEHAHYAbwFSAAizAQ8FJgArNQABAHn/7AUCBcsAGgA6QB8DBgYRBAwRFwQcGwMGTFkDAw4VFQBMWRUEDglMWQ4TAD8rABg/KxESADkYLysREgEXOREzETMxMAEiBgchFSEWFjMyNxUGIyAAETQSJDMyFwcmJgNGyPEUAqb9WAro3aHktOb+sP6YrQFH4efNWn2WBP7ezMvf8kLNQQGAAW/kAVW3Xsk3I///AGT/7AQMBcsCBgA2AAD//wBKAAACmAW2AgYALAAA//8AOgAAAqsHPgImACwAAAEHAGr/FQFSAAq0AgEhBSYAKzU1////ZP5oAaoFtgIGAC0AAAACAAj/6QdiBbYAGgAjAExAKR8AFxsbBAYVAAQPFQQlJBcjTFkXFwQVBBtMWQQSFQZMWRUDDBFMWQwTAD8rABg/KwAYPysREgA5GC8rERIBFzkRMxEzETMRMzEwARQEISERIQcCAgYGIyInNRYzMjYSEyERMyAEATMyNjU0JiMjB2L+4/7u/pL+uB0yRVqPbUlCOTZIU2Y8AwB3ARQBI/1ScaOlosFWAbjZ3wTp3/6I/n3HXxnHGbMCdwHc/a7b/kBxfnhsAAACAMEAAAd9BbYAEgAbAE5AKRcADwwTEwQLBwcIAAQIAx0cDxtMWQ8LCwZMWQsLBA0JAwgSBBNMWQQSAD8rABg/PzMSOS8rABgQxCsREgEXOREzETMRMxI5OREzMTABFAQhIREhESMRMxEhETMRMyAEATMyNjU0JiMjB33+5f7u/o/90e/vAi/ydQEWASH9VHGhpqHBVgG42d8Ck/1tBbb9qgJW/a7d/kJxfnZuAAABAB0AAAWiBbYAEwA7QB8AEw4GBgcHCQwTBBUUDgVMWQ4OCgAHEg0JCglMWQoDAD8rEQAzGD8zEjkvKxESARc5ETMRMxEzMTAhETQmIyERIxEhNSEVIREhMhYVEQSyX3D+ivD+oAQp/icBh8/fAfxoX/09BOnNzf6mx7b97v//AMEAAAUjB3MCJgG0AAABBwB2AM0BUgAIswEUBSYAKzX//wAM/+wFGQd3AiYBvQAAAQcCNgBQAVIACLMBFwUmACs1AAEAwf5tBSUFtgALADBAGAkACAUCAwADBQMNDAoGAwMjBQhMWQEFEgA/MysAGD8/MxESARc5ETMRMxEzMTAhIREjESERMxEhETMFJf5B7f5I7wKF8P5tAZMFtvsXBOkA//8AAAAABUoFvAIGACQAAAACAMEAAASeBbYACgATAD1AIA8ACAsLAwADBgMVFAgTTFkICAMEBAdMWQQDAwtMWQMSAD8rABg/KxESADkYLysREgEXOREzETMRMzEwARAhIREhFSERMyABMzI2NTQmIyMEnv3M/lcDfP1zrgJA/RKsrKChyI8BuP5IBbbN/nv9ZXF+eWsA//8AwQAABNkFtgIGACUAAP//AMEAAAQlBbYCBgFhAAAAAgAM/m0FngW2AA0AEwBFQCQJCBIGDgQRAQwNAQQGCA0FFRQJDSMEDkxZBAMGEQALAExZCxIAPysRADMzGD8rABg/MxESARc5ETMRMxEzETMRMzEwNzMSEhMhETMRIxEhESMBBgIHIREMcZHEHALzveb8OuYCqha0cwJ5zQEJApQBTPsX/aABk/5tBnrj/angBBoA//8AwQAAA/wFtgIGACgAAAABAAAAAAcjBbYAEQBMQCkJBg0AAw0DDgcIAgELChARAQgKDhEFExIJDAMGDwUAABEHBAEDDgsREgA/MzM/MzMSOREXMxESARc5ETMRMxEzETMRFzMRMzMxMAEBIQERMxEBIQEBIQERIxEBIQIv/eoBAAII4wIIAQD96gIt/vj96eP96f72AvQCwv08AsT9PALE/T79DALl/RsC5f0bAAEAWP/sBIUFywAlAENAJBoAEgcABAcMFiEGJyYDFhcXFktZFxcKIyMdS1kjBAoQS1kKEwA/KwAYPysREgA5GC8rERIAORESARc5ETMRMzEwARQGBxUWFhUUBCEgJzUWFjMgNTQmIyM1MyA1NCYjIgYHJzYhMgQEYL2nwMn+wf7n/tyvYfFkAYHn47ClAbWVhmrAZ23hATHoAQ4EYI+2GQYXtZLM5k/RLjL8dHrA6V1sOEOinMYAAQDBAAAFmAW2ABAAMkAXDQcKCgkPBQEBAAkAEhEOBRAHAAMKEBIAPzM/MhE5ORESATk5ETMRMzMRMxEzMzEwEzMRFAYHMwEhESMRNDcjASHB2wwDCQLrARfcEwj9Ev7oBbb9CHfzKwSN+koC8q33+2r//wDBAAAFmAd3AiYBsgAAAQcCNgDuAVIACLMBEQUmACs1AAEAwQAABSMFtgAKADZAGggJAQAKBwMDBAAECQMMCwIHCgoECAUDAQQSAD8zPzMSOREzMxESARc5ETMRMzMRMxEzMTAhIQERIxEzEQEhAQUj/uf9pu/vAlABBv2yAuX9GwW2/TwCxP0+AAABAAj/5gUKBbYAEQAvQBgBAAMQAAkQAxMSARIQA0xZEAMHDExZBxMAPysAGD8rABg/ERIBFzkRMxEzMTAhIxEhAgIGJyInNRYzMjYSEyEFCu/+YE9frI5JQjk2SFFhQwNWBOn9gP4ytQMZxxmtAlACCf//AMEAAAaiBbYCBgAwAAD//wDBAAAFQgW2AgYAKwAA//8Aef/sBdMFzQIGADIAAP//AMEAAAUlBbYCBgFuAAD//wDBAAAEiQW2AgYAMwAA//8Aef/sBM8FywIGACYAAP//AB0AAARoBbYCBgA3AAAAAQAM/+wFGQW2ABYAMUAZFgAPDgAIDQ4TBRgXDRISBRYOAwUKTFkFEwA/KwAYPzMSOREzERIBFzkRMxEzMTABAQ4CIyInNRYzMjY3ASEBFhczNjcBBRn+M1WOu4V0Y2JrW3sy/eUBAgFlMAsKBhgBSQW2+/C/q1Ae1ydZdAQv/SNoIxo5AxUA//8AYv/sBj0FywIGAXMAAP//AAQAAAT2BbYCBgA7AAAAAQDB/m0F5wW2AAsAMkAZBAEJAAgFAAEFAw0MCgYDAyMACAUITFkFEgA/KxEAMxg/PzMREgEXOREzETMRMzEwJTMRIxEhETMRIREzBSXC5/vB7wKF8Mf9pgGTBbb7FwTpAAABAIsAAATwBbYAEwA4QBsRAQEACgkJABUUAgURDgkFDkxZBQUBEgkDARIAPz8zEjkvKxESADkSORESATk5ETMRMxEzMTAhIxEGBiMiJjURMxEUFjMyNjcRMwTw8IfTa8/h8HGBX7SA8AJIMCrDswJS/eZycCMrAq4AAAEAwQAAB7AFtgALADFAGAEEAAkIBQQFCQMNDAoCBgMACAUITFkFEgA/KxEAMxg/MzMREgEXOREzETMRMzEwJSERMxEhETMRIREzBLACDvL5Ee8CDvLNBOn6SgW2+xcE6QAAAQDB/m0IYgW2AA8AO0AeAQQHBgANDAkEBgkNBBEQDgIKAwcjBAAMCQxMWQkSAD8rEQAzMxg/PzMzERIBFzkRMxEzETMRMzEwJSERMxEzESMRIREzESERMwSoAgjwwuf5Ru8CBvLNBOn7Ef2mAZMFtvsXBOkAAAIACAAABUYFtgAMABUAOUAeEQANBAAEBgMXFgkVTFkJCQQHBwZMWQcDBA1MWQQSAD8rABg/KxESADkYLysREgEXOREzETMxMAEUBCEhESE1IREzIAQBMzI2NTQmIyMFRv7l/u7+T/6gAlC2ARQBJP0SsqGlob+YAbjZ3wTpzf2u2/5AcX52bgADAMEAAAZIBbYACgATABcAPUAgFRQPAAcLCwQABBQDGRgHE0xZBwcEFgUDFRIEC0xZBBIAPysAGD8/MxI5LysREgEXOREzETMRMxEzMTABFAQhIREzETMgBAEzMjY1NCYjIwEjETMEi/7n/vD+X++qARIBH/0lpKCknbyPBJjw8AG42d8Ftv2u3P4/c353a/1mBbYAAgDBAAAEvAW2AAoAEwAyQBkPAAcLCwQEABUUBxNMWQcHBAUDBAtMWQQSAD8rABg/EjkvKxESATk5ETMRMxEzMTABFAQhIREzETMgBAEzMjY1NCYjIwS8/t/+7v44788BFgEn/PTJoa2mw64BuNfhBbb9rt3+QnF+dm4AAAEAQv/sBLAFywAZADpAHxcUFAgDCA0VBBsaFhVMWRYWCwUFAExZBQQLEUxZCxMAPysAGD8rERIAORgvKxESARc5ETMRMzEwASIHJzYzIAAREAAhIic1FhYzMjY3ITUhJiYB/qbAVsn3AUYBaP6T/qnktGS6Y+bvCP1cAqIO6AT+VsVe/nf+pf6Q/nVBzR0l7ebLyOAAAAIAwf/sCAAFzQASAB4AR0AmGQATDQYMCAgJAAkGAyAfDAdMWQwMCQoDCRIQHExZEAQDFkxZAxMAPysAGD8rABg/PxI5LysREgEXOREzETMRMzMRMzEwARAAISAAAyERIxEzESESACEgAAEQEjMyEhEQAiMiAggA/q3+yv7X/rER/sLv7wFCHAFMAR0BNQFU++XKxsnIysPIzALd/pr+dQFjAUT9bQW2/aoBLQFA/nT+nP7x/uoBGAENAQ8BFP7qAAIAFAAABHMFtgAMABUAREAjFQsLCgMAEQUBAgACBQoEFxYDABQAS1kUFAgLAhIIDkxZCAMAPysAGD8zEjkvKxEAMxESARc5ETMRMxEzETMRMzEwAQEhASQRNCQhIREjEREjIgYVFBYzMwKP/pb+7wGc/ugBFgEOAbfwvpehnKS2Akr9tgKBYQE3ydT6SgJKAqRreXaE//8AWv/sBAQEZgIGAEQAAAACAGj/7AR5BiMAFwAiAD1AHxoSCyAgAAAGEgMkIwsVDw8cR1kPDxUGBQEVGEZZFRYAPysAGD8zEjkvKxESADkREgEXOREzETMRMzEwExASJTYlFwQHBgYHMzY2MzISFRAAIyIABSARECMiBgYHFBZo+wESzwEOIf64mJ2LCw85uGnM5P7r9fP+7AIXAQbtQXpnHJYCmAFyAY45KijPMhwdyMlTW/7+6f71/twBaKgBWAFMOFwx7PMAAwCoAAAEiwRSAA0AFQAeAFZALgMTFgAOBhsTEwoABgoDIB8CEhsbEkhZDBscGwIQAxsbCgsLGkhZCw8KE0hZChUAPysAGD8rERIAORgvX15dKxESADkREgEXOREzETMRMxEzEjkxMAEUBxUWFhUUBiMhESEgAzQmIyERITIDNCYjIREzMjYEaOWAiO/k/fACDgGyznx8/vEBFfIdZ2b+4/p2egM3xCkID4RpnakEUv0CUEP+xwJ1Qjv+9j0AAAEAqAAAA3MEUgAFAB9ADgMEBAEHBgQVBQJHWQUPAD8rABg/ERIBOTkRMzEwARUhESMRA3P+IOsEUrj8ZgRSAAACACP+eQTNBFIADQATAEVAJAINDgwQChMHAwYGBwoMDQUVFAEFIgoQSFkKDwwTBgMGR1kDFQA/KxEAMzMYPysAGD8zERIBFzkRMxEzETMRMxEzMTABIxEhESMRMzYSEyERMyERIwYCBwTN2/0K2Vp2iw0CoKL+d+4TeVf+eQGH/nkCPakB3wEU/GQC6M7+cIoA//8AZv/sBDkEZgIGAEgAAAABAAIAAAZtBFIAEQBMQCgEBQgHBgMKCg8ACxEQDQ4FBwsOEAUTEgMADAkGBQ8PDgQBEA8LCA4VAD8zMz8zMxI5ERczERIBFzkRMxEzETMzMxEzMxEzETMxMAERMxEBMwEBIQERIxEBIQEBMwLJ2wGq+P5NAdr+/f462/47/v4B2f5O+AI5Ahn95wIZ/en9xQIx/c8CMf3PAjsCFwABAEj/7APRBGYAIwBNQCsDDR4TCA0QExkjBiUkDyIjIyJIWQwjHCMCEAMjIxYKCgVHWQoQFhtHWRYWAD8rABg/KxESADkYL19eXSsREgA5ERIBFzkRMxEzMTABMjY1NCMiByc2MzIWFRQHFRYWFRQEIyAnNRYzMjY1NCYjIzUBnKGY8KCnTMHpzuTVhXP+9e/++4q3xI2ZmqGHAphHSodIr0+Xjbo6CCSGY5i1RctWT1FTTrEAAAEAqAAABMMEUgAOADJAFwsEBwwDAAcGAA0NBhAPCwMNBA4PBw0VAD8zPzMSOTkREgE5OREzETMRMzMRMzMxMAERFAcBIREjETQ2NwEhEQGJEAIrAR/iCwT91/7hBFL9yWPAA1r7rgItLs4v/KgEUv//AKgAAATDBiUCJgHSAAABBgI2aAAACLMBDxEmACs1AAEAqAAABH8EUgAKADZAGgABBAMKAgYGBwEDBwMMCwUKAgIHAAgPBAcVAD8zPzMSOREzMxESARc5ETMRMzMRMxEzMTABIQEBIQERIxEzEQNWAQL+NwHw/vL+IuvrBFL96/3DAjH9zwRS/ecAAAEACP/uBDUEUgAQAC9AGAEAAw8ACQ8DEhEBFQ8DR1kPDwcMRlkHFgA/KwAYPysAGD8REgEXOREzETMxMCEjESECAgYjIic1FjMyEhMhBDXt/s8cX5l6TTQlJWZ1IQLnA5r+nP5wuBa4DgHLAdkAAQCoAAAFqARSABYAOkAdDQwABAcHBhQRERIABhIDGBcQCAADEgQTDw0HEhUAPzMzPzMSFzkREgEXOREzETMRMxEzETMzMTAlNzY3EyERIxEHBgcDIwMmJxEjESETFgMjDSke+AE52RItH/Ky8jIq1wE38CDhMJVQAlz7rgN9PKFM/awCWIKj/IMEUv22UQAAAQCoAAAEhwRSAAsAM0AZAgYGBQEJCQoKBQ0MAQhHWQEBCgMLDwYKFQA/Mz8zEjkvKxESATk5ETMRMxEzETMxMAERIREzESMRIREjEQGTAgnr6/336wRS/kQBvPuuAd3+IwRS//8AZv/sBH0EZgIGAFIAAAABAKgAAARvBFIABwAlQBECAQUGBgEJCAIGFQcER1kHDwA/KwAYPzMREgE5OREzETMxMAERIxEhESMRBG/s/hDrBFL7rgOY/GgEUgD//wCo/hQEkwRmAgYAUwAA//8AZv/sA7QEZgIGAEYAAAABACsAAAPnBFIABwAlQBIDBAEEBgMJCAQVAgYHBkdZBw8APysRADMYPxESARc5ETMxMAEVIREjESE1A+f+mOz+mARSuPxmA5q4//8AAP4UBEoEUgIGAFwAAAADAGb+FAW2BhQAEQAYAB8AS0AoDA8VHQQEBAUZABIJAAUJAyEgDQAFGxwWDBZHWQ8MEB0VBhVHWQMGFgA/MysRADMYPzMrEQAzGD8/ERIBFzkRMxEzETMSFzkxMAEUAAURIxEkADU0ACURMxEEAAUUFhcRBgYFNCYnETY2Bbb+0/723/75/s0BKgES3QEKAS37pKSkpaMDaaOho6ECKfn+2BT+IAHgFAEt9P0BJRMBtv5KGP7W86TIEQL6E8akosQT/QoTx///ABkAAAROBFICBgBbAAAAAQCo/nsFIQRSAAsAMkAZAwIJAAgFAAIFAw0MCgYPAyIACAUIR1kFFQA/KxEAMxg/PzMREgEXOREzETMRMzEwJTMRIxEhETMRIREzBIGg3fxk6wID67b9xQGFBFL8aAOYAAABAIsAAARmBFIAEgA4QBsGCgoJARERCRQTBgMLEg4OA0hZDg4KBxIPChUAPz8zEjkvKxESADkRORESATk5ETMRMxEzMTABERQzMjY3ETMRIxEGBiMiJjURAXewVaJd6+thtWutwgRS/myqLzQB2/uuAdU8ObOhAZ4AAAEAqAAABscEUgALADFAGAkACAUEAQABBQMNDAoGAg8IBAEER1kBFQA/KxEAMxg/MzMREgEXOREzETMRMzEwISERMxEhETMRIREzBsf54esBr+sBruwEUvxoA5j8aAOYAAEAqP57B2YEUgAPADtAHgMCDQAMCQgFAAIFCQQREA4KBg8DIgAMCAUIR1kFFQA/KxEAMzMYPz8zMxESARc5ETMRMxEzETMxMCUzESMRIREzESERMxEhETMGx5/d+h/rAa/rAa7stv3FAYUEUvxoA5j8aAOYAAACABQAAAVCBFIADAAUAD1AIA0FARISCQUJCwMWFQERSFkBAQkMDAtHWQwPCRJIWQkVAD8rABg/KxESADkYLysREgEXOREzETMRMzEwAREhMhYVFAYjIREhNQE0JiMhESEyAmABCPHp7On+CP6fBEJ5e/7+AQjuBFL+RqCgqa8Dmrj9AFNC/scAAwCoAAAF0wRSAAoAEwAXADdAHBUUABAQCBQIGRgAD0hZAAAIFgkPFRUIEEhZCBUAPysAGD8/MxI5LysREgE5OREzETMRMzEwATMyFhUUBiMhETMBNCYjIxEzMjYFIxEzAZPg6N7n3/416wG9e3PPsY5+AoPs7AKYoKCrrQRS/QBTQv7HUP4EUgAAAgCoAAAEdwRSAAkAEgAyQBkKAwAPDwcHAxQTAA5IWQAABwgPBw9IWQcVAD8rABg/EjkvKxESATk5ETMRMxEzMTABISARFAYjIREzATQmIyERITI2AZMBFQHP7OP+AOsB+H5z/vkBC3R5Apj+wKmvBFL9AFNC/sdUAAABAEL/7AOcBGYAGABEQCYKBwcWAggQFgQaGQkISFkMCRwJAhADCQkAExMNR1kTEAAFR1kAFgA/KwAYPysREgA5GC9fXl0rERIBFzkRMxEzMTAFIic1FjMgEyE1ISYmIyIHJzY2MyAAERAAAXu5gJ+WAR4T/hkB5wyKg2KgQUOvVQEFAQT+6RQ/wUYBOayVjDmuHyb+4P7p/un+1AACAKj/7AZtBGYAEgAeAFFALRkAEw0GDAgICQAGCQMgHwwHR1kMDBwMAhADDAwJCg8JFRAcRlkQEAMWRlkDFgA/KwAYPysAGD8/EjkvX15dKxESARc5ETMRMxEzMxEzMTABEAAjIgAnIxEjETMRMzYkMzIAARQWMzI2NTQmIyIGBm3+9+3a/v8V9Ovr9hkBA9bmAQz9CnmJiHp6iIl5Aiv+8P7RAQHw/iMEUv5E3PT+y/76vcLCvbvAwAACABIAAAPwBFIADQAWAERAIwINEgsLCg4FAAEBBQoNBBgXAg0RDUhZEREICwEVCBRIWQgPAD8rABg/MxI5LysRADMREgEXOREzETMRMxEzETMxMCEhASYmNTQ2MyERIxEjAxQWMzMRISIGARn++QE0cIDgwgH47N/qgW3b/wBgaQHFIKV6nbH7rgGqAVhVVQFIUgD//wBm/+wEOQXsAiYASAAAAQYAagQAAAq0AwIxESYAKzU1AAEADP4UBHUGFAAmAHdASAckFhkdAw4TDg8DDxEYJAUoJx0PIRkREhFJWRYSEiEUIQpGWQ8hAa8hvyHPIe8h/yEFACEQISAhAwkDISEPFAAPFQAFRlkAGwA/KwAYPz8SOS9fXl1dcSsREgA5GC8zKxEAMxESORESARc5ETMzERczETMxMAEiJzUWMzI1ETQjIgYVESMRIzUzNTMVIRUhFRQGBzM2NjMgEREUBgM1W0I6On3XlIvrnJzrAWf+mQQIDzavagGQpf4UGbwSqgMA9LTN/gwEw6OurqNrHVFdV1H+a/zRqLX//wCoAAADcwYhAiYBzQAAAQYAdgYAAAizAQ8RJgArNQABAGb/7APNBGYAGABEQCYOEREDAwgPFgQaGQ4RSFkMDhwOAhADDg4ABgYLR1kGEAAUR1kAFgA/KwAYPysREgA5GC9fXl0rERIBFzkRMxEzMTAFIAAREAAhMhcHJiMiBgchFSEWFjMyNxUGAoP++P7rAQ8BELeRRppuho4RAej+GAuMiJijhBQBIgEVAR0BJkGyOY6TrKGYRr9BAP//AGL/7AOPBGYCBgBWAAD//wCaAAABogX6AgYATAAA////6QAAAloF7AImAPMAAAEHAGr+xAAAAAq0AgEZESYAKzU1////h/4UAaIF+gIGAE0AAAACAAj/8AaJBFIAFwAgAExAKRgUEB0dAAIOAAgOFAQiIRAcSFkQEAAODgJHWQ4PAB1IWQAVBgtGWQYWAD8rABg/KwAYPysREgA5GC8rERIBFzkRMxEzETMRMzEwIREjAgIGIyInNRYzMhITIREzMhYVFAYjEzQmIyMRMzI2Aw73HF6ZeVQvJSVmdSECuMHm3Oni4Hl1tLhzdwOa/pf+dbYUuA4BywHZ/kagoKutAVJTQv7HVAACAKgAAAa6BFIAEgAaAE5AKRMEEAAYGAgPCwsMBAgMAxwbABdIWQAPDwpHWQ8PCBENDwwVCBhIWQgVAD8rABg/PzMSOS8rABgQxCsREgEXOREzETMRMxI5OREzMTABMzIWFRQGIyERIREjETMRIREzATQmIyMRMzIEL8fo3OXj/k3+V+7uAaztAaJ5dba66gKYoKCqrgHd/iMEUv5EAbz9AFNC/scAAQAMAAAEdQYUAB4AaUBAAQAOERQYBAkJCgAKDBMEIB8YChwUDA0MSVkRDQ0cDxwFRlkPHAGvHL8czxzvHP8cBQAcEBwgHAMcHAoPAAEKFQA/Mz8SOS9dXXErERIAORgvMysRADMREjkREgEXOREzEhc5ETMxMCEjETQmIyIGFREjESM1MzUzFSEVIRUUBgczNjYzIBEEdexncJSL65yc6wF9/oMECA82r2oBkAJ3f3+x0P4MBMOjrq6jax1RXVdR/msA//8AqAAABH8GIQImAdQAAAEGAHZxAAAIswEUESYAKzX//wAA/hQESgYlAiYAXAAAAQYCNtoAAAizARURJgArNQABAKj+ewSDBFIACwAwQBgICwQHAwAABwsDDQwFAQ8KIgADR1kIABUAPzIrABg/PzMREgEXOREzETMRMzEwMxEzESERMxEhESMRqOsCBev+g9sEUvxoA5j7rv57AYUAAQDBAAAEQgbnAAcAL0AXAwYAAQYBCQgBEg8EAQoDBAICB0xZAgMAPysAGBDGX15dPxESATk5ETMRMzEwISMRIREzESEBsO8Cqdj9bgW2ATH+AgAAAQCoAAADiQWLAAcAJ0ASAwYAAQYBCQgEAgEVAgdIWQIPAD8rABg/EMYREgE5OREzETMxMCEjESERMxEhAZPrAgTd/goEUgE5/hUA//8ADAAAB4MHcwImADoAAAEHAEMBCAFSAAizASYFJgArNf//ABQAAAZzBiECJgBaAAABBgBDfQAACLMBJxEmACs1//8ADAAAB4MHcwImADoAAAEHAHYBtAFSAAizASYFJgArNf//ABQAAAZzBiECJgBaAAABBwB2AT8AAAAIswEnESYAKzX//wAMAAAHgwc+AiYAOgAAAQcAagFoAVIACrQCATIFJgArNTX//wAUAAAGcwXsAiYAWgAAAQcAagDlAAAACrQCATMRJgArNTX//wAAAAAEvAdzAiYAPAAAAQcAQ/+IAVIACLMBEgUmACs1//8AAP4UBEoGIQImAFwAAAEHAEP/XQAAAAizAR4RJgArNQABAFIBxwOuAoUAAwARtQMABQQAAQAvMxESATk5MTATNSEVUgNcAce+vgABAFIBxweuAoUAAwARtQMABQQAAQAvMxESATk5MTATNSEVUgdc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AAoAuv+FAAoAu//DAAoAvP/DAAoAvf/DAAoAvv/DAAoAwv9xAAoAw/+uAAoAxP9xAAoAxf+uAAoAxv9xAAoAx/+uAAoAyf+FAAoAy/+FAAoAzf+FAAoAz/+FAAoA0f+FAAoA0/+FAAoA1f+FAAoA1/+FAAoA2f+FAAoA2/+FAAoA3f+FAAoA3//DAAoA4f/DAAoA4//DAAoA5f/DAAoA+v/DAAoBBv/DAAoBCP/DAAoBDf/DAAoBD/+FAAoBEf+FAAoBE/+FAAoBFf+FAAoBF//DAAoBGf/DAAoBHf/DAAoBIf/DAAoBJAApAAoBJgApAAoBK//DAAoBLf/DAAoBL//DAAoBMf/DAAoBM//DAAoBNf/DAAoBNgApAAoBOAAUAAoBOgAUAAoBQ/9xAAoBRP+uAAoBRv+uAAoBSP+FAAoBSv/DAAoBVv9xAAoBX/9xAAoBYv9xAAoBaf9xAAoBef+uAAoBev/XAAoBe//XAAoBfv+uAAoBgf/DAAoBgv/XAAoBg//XAAoBhP/XAAoBh//XAAoBif/XAAoBjP+uAAoBjv/DAAoBj/+uAAoBkP+uAAoBk/+uAAoBmf+uAAoBpP+FAAoBqv9xAAoBrv+FAAoBtf+FAAoByv/XAAoBzv9xAAoBz/+FAAoB1f9xAAoB2P+FAAoB2/+FAAoB3v+FAAoB6v+FAAoB7f+FAAoB7v/DAAoB8v9xAAoB+gApAAoB/AApAAoB/gApAAoCAAAUAAoCV//DAAoCWP9xAAoCWf+uAAoCYP+FAAoCYv/DAAoCav+FAAoCcv9xAAoCc/9xAAoCff/sAAoCf/+FAAoChf+FAAoCh/+FAAoCif+FAAoCjf+FAAoCsv+FAAoCtP+FAAoCzv+FAAoCz/9xAAoC2f9xAAoC2v/XAAoC2/9xAAoC3P/XAAoC3f9xAAoC3v/XAAoC4P+FAAoC4v/XAAoC5P/XAAoC8P+FAAoC8v+FAAoC9P+FAAoDCf9xAAoDCv+FAAoDC/9xAAoDDP+FAAoDEf+FAAoDEv9xAAoDFv+FAAoDGv+FAAoDG/+FAAoDHP9xAAoDHf9xAAoDHv+uAAoDH/9xAAoDIP+uAAoDIf9xAAoDIv+uAAoDI/9xAAoDJf9xAAoDJv+uAAoDJ/9xAAoDKP+uAAoDKf9xAAoDKv+uAAoDK/9xAAoDLP+uAAoDLf9xAAoDLv+uAAoDL/9xAAoDMP+uAAoDMf9xAAoDMv+uAAoDM/9xAAoDNP+uAAoDNv+FAAoDOP+FAAoDOv+FAAoDPP+FAAoDQP+FAAoDQv+FAAoDRP+FAAoDSv+FAAoDTP+FAAoDTv+FAAoDUv+FAAoDVP+FAAoDVv+FAAoDWP+FAAoDWv+FAAoDXP+FAAoDXv+FAAoDYP+FAAoDYv/DAAoDZP/DAAoDZv/DAAoDaP/DAAoDav/DAAoDbP/DAAoDbv/DAAoDbwAUAAoDcQAUAAoDcwAUAAoDjwApAAsALQC4AA8AJv+aAA8AKv+aAA8AMv+aAA8ANP+aAA8AN/9xAA8AOP/XAA8AOf+FAA8AOv+FAA8APP+FAA8Aif+aAA8AlP+aAA8Alf+aAA8Alv+aAA8Al/+aAA8AmP+aAA8Amv+aAA8Am//XAA8AnP/XAA8Anf/XAA8Anv/XAA8An/+FAA8AyP+aAA8Ayv+aAA8AzP+aAA8Azv+aAA8A3v+aAA8A4P+aAA8A4v+aAA8A5P+aAA8BDv+aAA8BEP+aAA8BEv+aAA8BFP+aAA8BJP9xAA8BJv9xAA8BKv/XAA8BLP/XAA8BLv/XAA8BMP/XAA8BMv/XAA8BNP/XAA8BNv+FAA8BOP+FAA8BOv+FAA8BR/+aAA8BZv+uAA8Bbf+uAA8Bcf9xAA8Bcv+FAA8Bc/+aAA8Bdf+FAA8BeP+FAA8Bhf/XAA8Bnf9xAA8Bn/+aAA8Bpv9xAA8BuP+aAA8Bu/+aAA8BvP9xAA8Bvv+uAA8Bwf9cAA8BxP9xAA8B3P+aAA8B4f+FAA8B5P+aAA8B+v+FAA8B/P+FAA8B/v+FAA8CAP+FAA8CVP+FAA8CX/+aAA8CYf/XAA8CbP+aAA8CfP9cAA8Cfv+aAA8CgP+FAA8Cgv+FAA8ChP+aAA8Chv+aAA8CiP+aAA8Civ+aAA8CjP+aAA8Cqf9xAA8Cqv+aAA8Csf+aAA8Cs/+aAA8Ctf9xAA8Ctv+aAA8Ct/+FAA8Cuf+FAA8Cvf9xAA8Cvv+aAA8Cv/9cAA8CwP+FAA8Cwf9cAA8Cwv+FAA8Cxf+FAA8Cx/+FAA8C1P9cAA8C1f+FAA8C7/+aAA8C8f+aAA8C8/+aAA8C/f9cAA8C/v+FAA8DDf+FAA8DDv+aAA8DD/+FAA8DEP+aAA8DFf+aAA8DF/9xAA8DGP+aAA8DSf+aAA8DS/+aAA8DTf+aAA8DT/+aAA8DUf+aAA8DU/+aAA8DVf+aAA8DV/+aAA8DWf+aAA8DW/+aAA8DXf+aAA8DX/+aAA8DYf/XAA8DY//XAA8DZf/XAA8DZ//XAA8Daf/XAA8Da//XAA8Dbf/XAA8Db/+FAA8Dcf+FAA8Dc/+FAA8Dj/9xABAAN/+uABABJP+uABABJv+uABABcf+uABABnf+uABABpv+uABABvP+uABABxP+uABAB3P/XABAB5P/XABACqf+uABACqv/XABACtf+uABACtv/XABACvf+uABACvv/XABADF/+uABADGP/XABADj/+uABEAJv+aABEAKv+aABEAMv+aABEANP+aABEAN/9xABEAOP/XABEAOf+FABEAOv+FABEAPP+FABEAif+aABEAlP+aABEAlf+aABEAlv+aABEAl/+aABEAmP+aABEAmv+aABEAm//XABEAnP/XABEAnf/XABEAnv/XABEAn/+FABEAyP+aABEAyv+aABEAzP+aABEAzv+aABEA3v+aABEA4P+aABEA4v+aABEA5P+aABEBDv+aABEBEP+aABEBEv+aABEBFP+aABEBJP9xABEBJv9xABEBKv/XABEBLP/XABEBLv/XABEBMP/XABEBMv/XABEBNP/XABEBNv+FABEBOP+FABEBOv+FABEBR/+aABEBZv+uABEBbf+uABEBcf9xABEBcv+FABEBc/+aABEBdf+FABEBeP+FABEBhf/XABEBnf9xABEBn/+aABEBpv9xABEBuP+aABEBu/+aABEBvP9xABEBvv+uABEBwf9cABEBxP9xABEB3P+aABEB4f+FABEB5P+aABEB+v+FABEB/P+FABEB/v+FABECAP+FABECVP+FABECX/+aABECYf/XABECbP+aABECfP9cABECfv+aABECgP+FABECgv+FABEChP+aABEChv+aABECiP+aABECiv+aABECjP+aABECqf9xABECqv+aABECsf+aABECs/+aABECtf9xABECtv+aABECt/+FABECuf+FABECvf9xABECvv+aABECv/9cABECwP+FABECwf9cABECwv+FABECxf+FABECx/+FABEC1P9cABEC1f+FABEC7/+aABEC8f+aABEC8/+aABEC/f9cABEC/v+FABEDDf+FABEDDv+aABEDD/+FABEDEP+aABEDFf+aABEDF/9xABEDGP+aABEDSf+aABEDS/+aABEDTf+aABEDT/+aABEDUf+aABEDU/+aABEDVf+aABEDV/+aABEDWf+aABEDW/+aABEDXf+aABEDX/+aABEDYf/XABEDY//XABEDZf/XABEDZ//XABEDaf/XABEDa//XABEDbf/XABEDb/+FABEDcf+FABEDc/+FABEDj/9xACQABf9xACQACv9xACQAJv/XACQAKv/XACQALQEKACQAMv/XACQANP/XACQAN/9xACQAOf+uACQAOv+uACQAPP+FACQAif/XACQAlP/XACQAlf/XACQAlv/XACQAl//XACQAmP/XACQAmv/XACQAn/+FACQAyP/XACQAyv/XACQAzP/XACQAzv/XACQA3v/XACQA4P/XACQA4v/XACQA5P/XACQBDv/XACQBEP/XACQBEv/XACQBFP/XACQBJP9xACQBJv9xACQBNv+uACQBOP+FACQBOv+FACQBR//XACQB+v+uACQB/P+uACQB/v+uACQCAP+FACQCB/9xACQCC/9xACQCX//XACQDSf/XACQDS//XACQDTf/XACQDT//XACQDUf/XACQDU//XACQDVf/XACQDV//XACQDWf/XACQDW//XACQDXf/XACQDX//XACQDb/+FACQDcf+FACQDc/+FACQDj/9xACUAD/+uACUAEf+uACUAJP/XACUAN//DACUAOf/sACUAOv/sACUAO//XACUAPP/sACUAPf/sACUAgv/XACUAg//XACUAhP/XACUAhf/XACUAhv/XACUAh//XACUAn//sACUAwv/XACUAxP/XACUAxv/XACUBJP/DACUBJv/DACUBNv/sACUBOP/sACUBOv/sACUBO//sACUBPf/sACUBP//sACUBQ//XACUBoP/sACUB+v/sACUB/P/sACUB/v/sACUCAP/sACUCCP+uACUCDP+uACUCWP/XACUDHf/XACUDH//XACUDIf/XACUDI//XACUDJf/XACUDJ//XACUDKf/XACUDK//XACUDLf/XACUDL//XACUDMf/XACUDM//XACUDb//sACUDcf/sACUDc//sACUDj//DACYAJv/XACYAKv/XACYAMv/XACYANP/XACYAif/XACYAlP/XACYAlf/XACYAlv/XACYAl//XACYAmP/XACYAmv/XACYAyP/XACYAyv/XACYAzP/XACYAzv/XACYA3v/XACYA4P/XACYA4v/XACYA5P/XACYBDv/XACYBEP/XACYBEv/XACYBFP/XACYBR//XACYCX//XACYDSf/XACYDS//XACYDTf/XACYDT//XACYDUf/XACYDU//XACYDVf/XACYDV//XACYDWf/XACYDW//XACYDXf/XACYDX//XACcAD/+uACcAEf+uACcAJP/XACcAN//DACcAOf/sACcAOv/sACcAO//XACcAPP/sACcAPf/sACcAgv/XACcAg//XACcAhP/XACcAhf/XACcAhv/XACcAh//XACcAn//sACcAwv/XACcAxP/XACcAxv/XACcBJP/DACcBJv/DACcBNv/sACcBOP/sACcBOv/sACcBO//sACcBPf/sACcBP//sACcBQ//XACcBoP/sACcB+v/sACcB/P/sACcB/v/sACcCAP/sACcCCP+uACcCDP+uACcCWP/XACcDHf/XACcDH//XACcDIf/XACcDI//XACcDJf/XACcDJ//XACcDKf/XACcDK//XACcDLf/XACcDL//XACcDMf/XACcDM//XACcDb//sACcDcf/sACcDc//sACcDj//DACgALQB7ACkAD/+FACkAEf+FACkAIgApACkAJP/XACkAgv/XACkAg//XACkAhP/XACkAhf/XACkAhv/XACkAh//XACkAwv/XACkAxP/XACkAxv/XACkBQ//XACkCCP+FACkCDP+FACkCWP/XACkDHf/XACkDH//XACkDIf/XACkDI//XACkDJf/XACkDJ//XACkDKf/XACkDK//XACkDLf/XACkDL//XACkDMf/XACkDM//XAC4AJv/XAC4AKv/XAC4AMv/XAC4ANP/XAC4Aif/XAC4AlP/XAC4Alf/XAC4Alv/XAC4Al//XAC4AmP/XAC4Amv/XAC4AyP/XAC4Ayv/XAC4AzP/XAC4Azv/XAC4A3v/XAC4A4P/XAC4A4v/XAC4A5P/XAC4BDv/XAC4BEP/XAC4BEv/XAC4BFP/XAC4BR//XAC4CX//XAC4DSf/XAC4DS//XAC4DTf/XAC4DT//XAC4DUf/XAC4DU//XAC4DVf/XAC4DV//XAC4DWf/XAC4DW//XAC4DXf/XAC4DX//XAC8ABf9cAC8ACv9cAC8AJv/XAC8AKv/XAC8AMv/XAC8ANP/XAC8AN//XAC8AOP/sAC8AOf/XAC8AOv/XAC8APP/DAC8Aif/XAC8AlP/XAC8Alf/XAC8Alv/XAC8Al//XAC8AmP/XAC8Amv/XAC8Am//sAC8AnP/sAC8Anf/sAC8Anv/sAC8An//DAC8AyP/XAC8Ayv/XAC8AzP/XAC8Azv/XAC8A3v/XAC8A4P/XAC8A4v/XAC8A5P/XAC8BDv/XAC8BEP/XAC8BEv/XAC8BFP/XAC8BJP/XAC8BJv/XAC8BKv/sAC8BLP/sAC8BLv/sAC8BMP/sAC8BMv/sAC8BNP/sAC8BNv/XAC8BOP/DAC8BOv/DAC8BR//XAC8B+v/XAC8B/P/XAC8B/v/XAC8CAP/DAC8CB/9cAC8CC/9cAC8CX//XAC8CYf/sAC8DSf/XAC8DS//XAC8DTf/XAC8DT//XAC8DUf/XAC8DU//XAC8DVf/XAC8DV//XAC8DWf/XAC8DW//XAC8DXf/XAC8DX//XAC8DYf/sAC8DY//sAC8DZf/sAC8DZ//sAC8Daf/sAC8Da//sAC8Dbf/sAC8Db//DAC8Dcf/DAC8Dc//DAC8Dj//XADIAD/+uADIAEf+uADIAJP/XADIAN//DADIAOf/sADIAOv/sADIAO//XADIAPP/sADIAPf/sADIAgv/XADIAg//XADIAhP/XADIAhf/XADIAhv/XADIAh//XADIAn//sADIAwv/XADIAxP/XADIAxv/XADIBJP/DADIBJv/DADIBNv/sADIBOP/sADIBOv/sADIBO//sADIBPf/sADIBP//sADIBQ//XADIBoP/sADIB+v/sADIB/P/sADIB/v/sADICAP/sADICCP+uADICDP+uADICWP/XADIDHf/XADIDH//XADIDIf/XADIDI//XADIDJf/XADIDJ//XADIDKf/XADIDK//XADIDLf/XADIDL//XADIDMf/XADIDM//XADIDb//sADIDcf/sADIDc//sADIDj//DADMAD/72ADMAEf72ADMAJP+aADMAO//XADMAPf/sADMAgv+aADMAg/+aADMAhP+aADMAhf+aADMAhv+aADMAh/+aADMAwv+aADMAxP+aADMAxv+aADMBO//sADMBPf/sADMBP//sADMBQ/+aADMCCP72ADMCDP72ADMCWP+aADMDHf+aADMDH/+aADMDIf+aADMDI/+aADMDJf+aADMDJ/+aADMDKf+aADMDK/+aADMDLf+aADMDL/+aADMDMf+aADMDM/+aADQAD/+uADQAEf+uADQAJP/XADQAN//DADQAOf/sADQAOv/sADQAO//XADQAPP/sADQAPf/sADQAgv/XADQAg//XADQAhP/XADQAhf/XADQAhv/XADQAh//XADQAn//sADQAwv/XADQAxP/XADQAxv/XADQBJP/DADQBJv/DADQBNv/sADQBOP/sADQBOv/sADQBO//sADQBPf/sADQBP//sADQBQ//XADQBoP/sADQB+v/sADQB/P/sADQB/v/sADQCAP/sADQCCP+uADQCDP+uADQCWP/XADQDHf/XADQDH//XADQDIf/XADQDI//XADQDJf/XADQDJ//XADQDKf/XADQDK//XADQDLf/XADQDL//XADQDMf/XADQDM//XADQDb//sADQDcf/sADQDc//sADQDj//DADcAD/+FADcAEP+uADcAEf+FADcAIgApADcAJP9xADcAJv/XADcAKv/XADcAMv/XADcANP/XADcANwApADcARP9cADcARv9xADcAR/9xADcASP9xADcASv9xADcAUP+aADcAUf+aADcAUv9xADcAU/+aADcAVP9xADcAVf+aADcAVv+FADcAWP+aADcAWf/XADcAWv/XADcAW//XADcAXP/XADcAXf+uADcAgv9xADcAg/9xADcAhP9xADcAhf9xADcAhv9xADcAh/9xADcAif/XADcAlP/XADcAlf/XADcAlv/XADcAl//XADcAmP/XADcAmv/XADcAov9xADcAo/9cADcApP9cADcApf9cADcApv9cADcAp/9cADcAqP9cADcAqf9xADcAqv9xADcAq/9xADcArP9xADcArf9xADcAtP9xADcAtf9xADcAtv9xADcAt/9xADcAuP9xADcAuv9xADcAu/+aADcAvP+aADcAvf+aADcAvv+aADcAv//XADcAwv9xADcAw/9cADcAxP9xADcAxf9cADcAxv9xADcAx/9cADcAyP/XADcAyf9xADcAyv/XADcAy/9xADcAzP/XADcAzf9xADcAzv/XADcAz/9xADcA0f9xADcA0/9xADcA1f9xADcA1/9xADcA2f9xADcA2/9xADcA3f9xADcA3v/XADcA3/9xADcA4P/XADcA4f9xADcA4v/XADcA4/9xADcA5P/XADcA5f9xADcA+v+aADcBBv+aADcBCP+aADcBDf+aADcBDv/XADcBD/9xADcBEP/XADcBEf9xADcBEv/XADcBE/9xADcBFP/XADcBFf9xADcBF/+aADcBGf+aADcBHf+FADcBIf+FADcBJAApADcBJgApADcBK/+aADcBLf+aADcBL/+aADcBMf+aADcBM/+aADcBNf+aADcBN//XADcBPP+uADcBPv+uADcBQP+uADcBQ/9xADcBRP9cADcBRv9cADcBR//XADcBSP9xADcBSv+FADcB+//XADcB/f/XADcCAv+uADcCA/+uADcCBP+uADcCCP+FADcCDP+FADcCV/+aADcCWP9xADcCWf9cADcCX//XADcCYP9xADcCYv+aADcDHf9xADcDHv9cADcDH/9xADcDIP9cADcDIf9xADcDIv9cADcDI/9xADcDJf9xADcDJv9cADcDJ/9xADcDKP9cADcDKf9xADcDKv9cADcDK/9xADcDLP9cADcDLf9xADcDLv9cADcDL/9xADcDMP9cADcDMf9xADcDMv9cADcDM/9xADcDNP9cADcDNv9xADcDOP9xADcDOv9xADcDPP9xADcDQP9xADcDQv9xADcDRP9xADcDSf/XADcDSv9xADcDS//XADcDTP9xADcDTf/XADcDTv9xADcDT//XADcDUf/XADcDUv9xADcDU//XADcDVP9xADcDVf/XADcDVv9xADcDV//XADcDWP9xADcDWf/XADcDWv9xADcDW//XADcDXP9xADcDXf/XADcDXv9xADcDX//XADcDYP9xADcDYv+aADcDZP+aADcDZv+aADcDaP+aADcDav+aADcDbP+aADcDbv+aADcDcP/XADcDjwApADgAD//XADgAEf/XADgAJP/sADgAgv/sADgAg//sADgAhP/sADgAhf/sADgAhv/sADgAh//sADgAwv/sADgAxP/sADgAxv/sADgBQ//sADgCCP/XADgCDP/XADgCWP/sADgDHf/sADgDH//sADgDIf/sADgDI//sADgDJf/sADgDJ//sADgDKf/sADgDK//sADgDLf/sADgDL//sADgDMf/sADgDM//sADkAD/+aADkAEf+aADkAIgApADkAJP+uADkAJv/sADkAKv/sADkAMv/sADkANP/sADkARP/XADkARv/XADkAR//XADkASP/XADkASv/sADkAUP/sADkAUf/sADkAUv/XADkAU//sADkAVP/XADkAVf/sADkAVv/sADkAWP/sADkAgv+uADkAg/+uADkAhP+uADkAhf+uADkAhv+uADkAh/+uADkAif/sADkAlP/sADkAlf/sADkAlv/sADkAl//sADkAmP/sADkAmv/sADkAov/XADkAo//XADkApP/XADkApf/XADkApv/XADkAp//XADkAqP/XADkAqf/XADkAqv/XADkAq//XADkArP/XADkArf/XADkAtP/XADkAtf/XADkAtv/XADkAt//XADkAuP/XADkAuv/XADkAu//sADkAvP/sADkAvf/sADkAvv/sADkAwv+uADkAw//XADkAxP+uADkAxf/XADkAxv+uADkAx//XADkAyP/sADkAyf/XADkAyv/sADkAy//XADkAzP/sADkAzf/XADkAzv/sADkAz//XADkA0f/XADkA0//XADkA1f/XADkA1//XADkA2f/XADkA2//XADkA3f/XADkA3v/sADkA3//sADkA4P/sADkA4f/sADkA4v/sADkA4//sADkA5P/sADkA5f/sADkA+v/sADkBBv/sADkBCP/sADkBDf/sADkBDv/sADkBD//XADkBEP/sADkBEf/XADkBEv/sADkBE//XADkBFP/sADkBFf/XADkBF//sADkBGf/sADkBHf/sADkBIf/sADkBK//sADkBLf/sADkBL//sADkBMf/sADkBM//sADkBNf/sADkBQ/+uADkBRP/XADkBRv/XADkBR//sADkBSP/XADkBSv/sADkCCP+aADkCDP+aADkCV//sADkCWP+uADkCWf/XADkCX//sADkCYP/XADkCYv/sADkDHf+uADkDHv/XADkDH/+uADkDIP/XADkDIf+uADkDIv/XADkDI/+uADkDJf+uADkDJv/XADkDJ/+uADkDKP/XADkDKf+uADkDKv/XADkDK/+uADkDLP/XADkDLf+uADkDLv/XADkDL/+uADkDMP/XADkDMf+uADkDMv/XADkDM/+uADkDNP/XADkDNv/XADkDOP/XADkDOv/XADkDPP/XADkDQP/XADkDQv/XADkDRP/XADkDSf/sADkDSv/XADkDS//sADkDTP/XADkDTf/sADkDTv/XADkDT//sADkDUf/sADkDUv/XADkDU//sADkDVP/XADkDVf/sADkDVv/XADkDV//sADkDWP/XADkDWf/sADkDWv/XADkDW//sADkDXP/XADkDXf/sADkDXv/XADkDX//sADkDYP/XADkDYv/sADkDZP/sADkDZv/sADkDaP/sADkDav/sADkDbP/sADkDbv/sADoAD/+aADoAEf+aADoAIgApADoAJP+uADoAJv/sADoAKv/sADoAMv/sADoANP/sADoARP/XADoARv/XADoAR//XADoASP/XADoASv/sADoAUP/sADoAUf/sADoAUv/XADoAU//sADoAVP/XADoAVf/sADoAVv/sADoAWP/sADoAgv+uADoAg/+uADoAhP+uADoAhf+uADoAhv+uADoAh/+uADoAif/sADoAlP/sADoAlf/sADoAlv/sADoAl//sADoAmP/sADoAmv/sADoAov/XADoAo//XADoApP/XADoApf/XADoApv/XADoAp//XADoAqP/XADoAqf/XADoAqv/XADoAq//XADoArP/XADoArf/XADoAtP/XADoAtf/XADoAtv/XADoAt//XADoAuP/XADoAuv/XADoAu//sADoAvP/sADoAvf/sADoAvv/sADoAwv+uADoAw//XADoAxP+uADoAxf/XADoAxv+uADoAx//XADoAyP/sADoAyf/XADoAyv/sADoAy//XADoAzP/sADoAzf/XADoAzv/sADoAz//XADoA0f/XADoA0//XADoA1f/XADoA1//XADoA2f/XADoA2//XADoA3f/XADoA3v/sADoA3//sADoA4P/sADoA4f/sADoA4v/sADoA4//sADoA5P/sADoA5f/sADoA+v/sADoBBv/sADoBCP/sADoBDf/sADoBDv/sADoBD//XADoBEP/sADoBEf/XADoBEv/sADoBE//XADoBFP/sADoBFf/XADoBF//sADoBGf/sADoBHf/sADoBIf/sADoBK//sADoBLf/sADoBL//sADoBMf/sADoBM//sADoBNf/sADoBQ/+uADoBRP/XADoBRv/XADoBR//sADoBSP/XADoBSv/sADoCCP+aADoCDP+aADoCV//sADoCWP+uADoCWf/XADoCX//sADoCYP/XADoCYv/sADoDHf+uADoDHv/XADoDH/+uADoDIP/XADoDIf+uADoDIv/XADoDI/+uADoDJf+uADoDJv/XADoDJ/+uADoDKP/XADoDKf+uADoDKv/XADoDK/+uADoDLP/XADoDLf+uADoDLv/XADoDL/+uADoDMP/XADoDMf+uADoDMv/XADoDM/+uADoDNP/XADoDNv/XADoDOP/XADoDOv/XADoDPP/XADoDQP/XADoDQv/XADoDRP/XADoDSf/sADoDSv/XADoDS//sADoDTP/XADoDTf/sADoDTv/XADoDT//sADoDUf/sADoDUv/XADoDU//sADoDVP/XADoDVf/sADoDVv/XADoDV//sADoDWP/XADoDWf/sADoDWv/XADoDW//sADoDXP/XADoDXf/sADoDXv/XADoDX//sADoDYP/XADoDYv/sADoDZP/sADoDZv/sADoDaP/sADoDav/sADoDbP/sADoDbv/sADsAJv/XADsAKv/XADsAMv/XADsANP/XADsAif/XADsAlP/XADsAlf/XADsAlv/XADsAl//XADsAmP/XADsAmv/XADsAyP/XADsAyv/XADsAzP/XADsAzv/XADsA3v/XADsA4P/XADsA4v/XADsA5P/XADsBDv/XADsBEP/XADsBEv/XADsBFP/XADsBR//XADsCX//XADsDSf/XADsDS//XADsDTf/XADsDT//XADsDUf/XADsDU//XADsDVf/XADsDV//XADsDWf/XADsDW//XADsDXf/XADsDX//XADwAD/+FADwAEf+FADwAIgApADwAJP+FADwAJv/XADwAKv/XADwAMv/XADwANP/XADwARP+aADwARv+aADwAR/+aADwASP+aADwASv/XADwAUP/DADwAUf/DADwAUv+aADwAU//DADwAVP+aADwAVf/DADwAVv+uADwAWP/DADwAXf/XADwAgv+FADwAg/+FADwAhP+FADwAhf+FADwAhv+FADwAh/+FADwAif/XADwAlP/XADwAlf/XADwAlv/XADwAl//XADwAmP/XADwAmv/XADwAov+aADwAo/+aADwApP+aADwApf+aADwApv+aADwAp/+aADwAqP+aADwAqf+aADwAqv+aADwAq/+aADwArP+aADwArf+aADwAtP+aADwAtf+aADwAtv+aADwAt/+aADwAuP+aADwAuv+aADwAu//DADwAvP/DADwAvf/DADwAvv/DADwAwv+FADwAw/+aADwAxP+FADwAxf+aADwAxv+FADwAx/+aADwAyP/XADwAyf+aADwAyv/XADwAy/+aADwAzP/XADwAzf+aADwAzv/XADwAz/+aADwA0f+aADwA0/+aADwA1f+aADwA1/+aADwA2f+aADwA2/+aADwA3f+aADwA3v/XADwA3//XADwA4P/XADwA4f/XADwA4v/XADwA4//XADwA5P/XADwA5f/XADwA+v/DADwBBv/DADwBCP/DADwBDf/DADwBDv/XADwBD/+aADwBEP/XADwBEf+aADwBEv/XADwBE/+aADwBFP/XADwBFf+aADwBF//DADwBGf/DADwBHf+uADwBIf+uADwBK//DADwBLf/DADwBL//DADwBMf/DADwBM//DADwBNf/DADwBPP/XADwBPv/XADwBQP/XADwBQ/+FADwBRP+aADwBRv+aADwBR//XADwBSP+aADwBSv+uADwCCP+FADwCDP+FADwCV//DADwCWP+FADwCWf+aADwCX//XADwCYP+aADwCYv/DADwDHf+FADwDHv+aADwDH/+FADwDIP+aADwDIf+FADwDIv+aADwDI/+FADwDJf+FADwDJv+aADwDJ/+FADwDKP+aADwDKf+FADwDKv+aADwDK/+FADwDLP+aADwDLf+FADwDLv+aADwDL/+FADwDMP+aADwDMf+FADwDMv+aADwDM/+FADwDNP+aADwDNv+aADwDOP+aADwDOv+aADwDPP+aADwDQP+aADwDQv+aADwDRP+aADwDSf/XADwDSv+aADwDS//XADwDTP+aADwDTf/XADwDTv+aADwDT//XADwDUf/XADwDUv+aADwDU//XADwDVP+aADwDVf/XADwDVv+aADwDV//XADwDWP+aADwDWf/XADwDWv+aADwDW//XADwDXP+aADwDXf/XADwDXv+aADwDX//XADwDYP+aADwDYv/DADwDZP/DADwDZv/DADwDaP/DADwDav/DADwDbP/DADwDbv/DAD0AJv/sAD0AKv/sAD0AMv/sAD0ANP/sAD0Aif/sAD0AlP/sAD0Alf/sAD0Alv/sAD0Al//sAD0AmP/sAD0Amv/sAD0AyP/sAD0Ayv/sAD0AzP/sAD0Azv/sAD0A3v/sAD0A4P/sAD0A4v/sAD0A5P/sAD0BDv/sAD0BEP/sAD0BEv/sAD0BFP/sAD0BR//sAD0CX//sAD0DSf/sAD0DS//sAD0DTf/sAD0DT//sAD0DUf/sAD0DU//sAD0DVf/sAD0DV//sAD0DWf/sAD0DW//sAD0DXf/sAD0DX//sAD4ALQC4AEQABf/sAEQACv/sAEQCB//sAEQCC//sAEUABf/sAEUACv/sAEUAWf/XAEUAWv/XAEUAW//XAEUAXP/XAEUAXf/sAEUAv//XAEUBN//XAEUBPP/sAEUBPv/sAEUBQP/sAEUB+//XAEUB/f/XAEUCB//sAEUCC//sAEUDcP/XAEYABQApAEYACgApAEYCBwApAEYCCwApAEgABf/sAEgACv/sAEgAWf/XAEgAWv/XAEgAW//XAEgAXP/XAEgAXf/sAEgAv//XAEgBN//XAEgBPP/sAEgBPv/sAEgBQP/sAEgB+//XAEgB/f/XAEgCB//sAEgCC//sAEgDcP/XAEkABQB7AEkACgB7AEkCBwB7AEkCCwB7AEsABf/sAEsACv/sAEsCB//sAEsCC//sAE4ARv/XAE4AR//XAE4ASP/XAE4AUv/XAE4AVP/XAE4Aov/XAE4Aqf/XAE4Aqv/XAE4Aq//XAE4ArP/XAE4Arf/XAE4AtP/XAE4Atf/XAE4Atv/XAE4At//XAE4AuP/XAE4Auv/XAE4Ayf/XAE4Ay//XAE4Azf/XAE4Az//XAE4A0f/XAE4A0//XAE4A1f/XAE4A1//XAE4A2f/XAE4A2//XAE4A3f/XAE4BD//XAE4BEf/XAE4BE//XAE4BFf/XAE4BSP/XAE4CYP/XAE4DNv/XAE4DOP/XAE4DOv/XAE4DPP/XAE4DQP/XAE4DQv/XAE4DRP/XAE4DSv/XAE4DTP/XAE4DTv/XAE4DUv/XAE4DVP/XAE4DVv/XAE4DWP/XAE4DWv/XAE4DXP/XAE4DXv/XAE4DYP/XAFAABf/sAFAACv/sAFACB//sAFACC//sAFEABf/sAFEACv/sAFECB//sAFECC//sAFIABf/sAFIACv/sAFIAWf/XAFIAWv/XAFIAW//XAFIAXP/XAFIAXf/sAFIAv//XAFIBN//XAFIBPP/sAFIBPv/sAFIBQP/sAFIB+//XAFIB/f/XAFICB//sAFICC//sAFIDcP/XAFMABf/sAFMACv/sAFMAWf/XAFMAWv/XAFMAW//XAFMAXP/XAFMAXf/sAFMAv//XAFMBN//XAFMBPP/sAFMBPv/sAFMBQP/sAFMB+//XAFMB/f/XAFMCB//sAFMCC//sAFMDcP/XAFUABQBSAFUACgBSAFUARP/XAFUARv/XAFUAR//XAFUASP/XAFUASv/sAFUAUv/XAFUAVP/XAFUAov/XAFUAo//XAFUApP/XAFUApf/XAFUApv/XAFUAp//XAFUAqP/XAFUAqf/XAFUAqv/XAFUAq//XAFUArP/XAFUArf/XAFUAtP/XAFUAtf/XAFUAtv/XAFUAt//XAFUAuP/XAFUAuv/XAFUAw//XAFUAxf/XAFUAx//XAFUAyf/XAFUAy//XAFUAzf/XAFUAz//XAFUA0f/XAFUA0//XAFUA1f/XAFUA1//XAFUA2f/XAFUA2//XAFUA3f/XAFUA3//sAFUA4f/sAFUA4//sAFUA5f/sAFUBD//XAFUBEf/XAFUBE//XAFUBFf/XAFUBRP/XAFUBRv/XAFUBSP/XAFUCBwBSAFUCCwBSAFUCWf/XAFUCYP/XAFUDHv/XAFUDIP/XAFUDIv/XAFUDJv/XAFUDKP/XAFUDKv/XAFUDLP/XAFUDLv/XAFUDMP/XAFUDMv/XAFUDNP/XAFUDNv/XAFUDOP/XAFUDOv/XAFUDPP/XAFUDQP/XAFUDQv/XAFUDRP/XAFUDSv/XAFUDTP/XAFUDTv/XAFUDUv/XAFUDVP/XAFUDVv/XAFUDWP/XAFUDWv/XAFUDXP/XAFUDXv/XAFUDYP/XAFcABQApAFcACgApAFcCBwApAFcCCwApAFkABQBSAFkACgBSAFkAD/+uAFkAEf+uAFkAIgApAFkCBwBSAFkCCP+uAFkCCwBSAFkCDP+uAFoABQBSAFoACgBSAFoAD/+uAFoAEf+uAFoAIgApAFoCBwBSAFoCCP+uAFoCCwBSAFoCDP+uAFsARv/XAFsAR//XAFsASP/XAFsAUv/XAFsAVP/XAFsAov/XAFsAqf/XAFsAqv/XAFsAq//XAFsArP/XAFsArf/XAFsAtP/XAFsAtf/XAFsAtv/XAFsAt//XAFsAuP/XAFsAuv/XAFsAyf/XAFsAy//XAFsAzf/XAFsAz//XAFsA0f/XAFsA0//XAFsA1f/XAFsA1//XAFsA2f/XAFsA2//XAFsA3f/XAFsBD//XAFsBEf/XAFsBE//XAFsBFf/XAFsBSP/XAFsCYP/XAFsDNv/XAFsDOP/XAFsDOv/XAFsDPP/XAFsDQP/XAFsDQv/XAFsDRP/XAFsDSv/XAFsDTP/XAFsDTv/XAFsDUv/XAFsDVP/XAFsDVv/XAFsDWP/XAFsDWv/XAFsDXP/XAFsDXv/XAFsDYP/XAFwABQBSAFwACgBSAFwAD/+uAFwAEf+uAFwAIgApAFwCBwBSAFwCCP+uAFwCCwBSAFwCDP+uAF4ALQC4AIIABf9xAIIACv9xAIIAJv/XAIIAKv/XAIIALQEKAIIAMv/XAIIANP/XAIIAN/9xAIIAOf+uAIIAOv+uAIIAPP+FAIIAif/XAIIAlP/XAIIAlf/XAIIAlv/XAIIAl//XAIIAmP/XAIIAmv/XAIIAn/+FAIIAyP/XAIIAyv/XAIIAzP/XAIIAzv/XAIIA3v/XAIIA4P/XAIIA4v/XAIIA5P/XAIIBDv/XAIIBEP/XAIIBEv/XAIIBFP/XAIIBJP9xAIIBJv9xAIIBNv+uAIIBOP+FAIIBOv+FAIIBR//XAIIB+v+uAIIB/P+uAIIB/v+uAIICAP+FAIICB/9xAIICC/9xAIICX//XAIIDSf/XAIIDS//XAIIDTf/XAIIDT//XAIIDUf/XAIIDU//XAIIDVf/XAIIDV//XAIIDWf/XAIIDW//XAIIDXf/XAIIDX//XAIIDb/+FAIIDcf+FAIIDc/+FAIIDj/9xAIMABf9xAIMACv9xAIMAJv/XAIMAKv/XAIMALQEKAIMAMv/XAIMANP/XAIMAN/9xAIMAOf+uAIMAOv+uAIMAPP+FAIMAif/XAIMAlP/XAIMAlf/XAIMAlv/XAIMAl//XAIMAmP/XAIMAmv/XAIMAn/+FAIMAyP/XAIMAyv/XAIMAzP/XAIMAzv/XAIMA3v/XAIMA4P/XAIMA4v/XAIMA5P/XAIMBDv/XAIMBEP/XAIMBEv/XAIMBFP/XAIMBJP9xAIMBJv9xAIMBNv+uAIMBOP+FAIMBOv+FAIMBR//XAIMB+v+uAIMB/P+uAIMB/v+uAIMCAP+FAIMCB/9xAIMCC/9xAIMCX//XAIMDSf/XAIMDS//XAIMDTf/XAIMDT//XAIMDUf/XAIMDU//XAIMDVf/XAIMDV//XAIMDWf/XAIMDW//XAIMDXf/XAIMDX//XAIMDb/+FAIMDcf+FAIMDc/+FAIMDj/9xAIQABf9xAIQACv9xAIQAJv/XAIQAKv/XAIQALQEKAIQAMv/XAIQANP/XAIQAN/9xAIQAOf+uAIQAOv+uAIQAPP+FAIQAif/XAIQAlP/XAIQAlf/XAIQAlv/XAIQAl//XAIQAmP/XAIQAmv/XAIQAn/+FAIQAyP/XAIQAyv/XAIQAzP/XAIQAzv/XAIQA3v/XAIQA4P/XAIQA4v/XAIQA5P/XAIQBDv/XAIQBEP/XAIQBEv/XAIQBFP/XAIQBJP9xAIQBJv9xAIQBNv+uAIQBOP+FAIQBOv+FAIQBR//XAIQB+v+uAIQB/P+uAIQB/v+uAIQCAP+FAIQCB/9xAIQCC/9xAIQCX//XAIQDSf/XAIQDS//XAIQDTf/XAIQDT//XAIQDUf/XAIQDU//XAIQDVf/XAIQDV//XAIQDWf/XAIQDW//XAIQDXf/XAIQDX//XAIQDb/+FAIQDcf+FAIQDc/+FAIQDj/9xAIUABf9xAIUACv9xAIUAJv/XAIUAKv/XAIUALQEKAIUAMv/XAIUANP/XAIUAN/9xAIUAOf+uAIUAOv+uAIUAPP+FAIUAif/XAIUAlP/XAIUAlf/XAIUAlv/XAIUAl//XAIUAmP/XAIUAmv/XAIUAn/+FAIUAyP/XAIUAyv/XAIUAzP/XAIUAzv/XAIUA3v/XAIUA4P/XAIUA4v/XAIUA5P/XAIUBDv/XAIUBEP/XAIUBEv/XAIUBFP/XAIUBJP9xAIUBJv9xAIUBNv+uAIUBOP+FAIUBOv+FAIUBR//XAIUB+v+uAIUB/P+uAIUB/v+uAIUCAP+FAIUCB/9xAIUCC/9xAIUCX//XAIUDSf/XAIUDS//XAIUDTf/XAIUDT//XAIUDUf/XAIUDU//XAIUDVf/XAIUDV//XAIUDWf/XAIUDW//XAIUDXf/XAIUDX//XAIUDb/+FAIUDcf+FAIUDc/+FAIUDj/9xAIYABf9xAIYACv9xAIYAJv/XAIYAKv/XAIYALQEKAIYAMv/XAIYANP/XAIYAN/9xAIYAOf+uAIYAOv+uAIYAPP+FAIYAif/XAIYAlP/XAIYAlf/XAIYAlv/XAIYAl//XAIYAmP/XAIYAmv/XAIYAn/+FAIYAyP/XAIYAyv/XAIYAzP/XAIYAzv/XAIYA3v/XAIYA4P/XAIYA4v/XAIYA5P/XAIYBDv/XAIYBEP/XAIYBEv/XAIYBFP/XAIYBJP9xAIYBJv9xAIYBNv+uAIYBOP+FAIYBOv+FAIYBR//XAIYB+v+uAIYB/P+uAIYB/v+uAIYCAP+FAIYCB/9xAIYCC/9xAIYCX//XAIYDSf/XAIYDS//XAIYDTf/XAIYDT//XAIYDUf/XAIYDU//XAIYDVf/XAIYDV//XAIYDWf/XAIYDW//XAIYDXf/XAIYDX//XAIYDb/+FAIYDcf+FAIYDc/+FAIYDj/9xAIcABf9xAIcACv9xAIcAJv/XAIcAKv/XAIcALQEKAIcAMv/XAIcANP/XAIcAN/9xAIcAOf+uAIcAOv+uAIcAPP+FAIcAif/XAIcAlP/XAIcAlf/XAIcAlv/XAIcAl//XAIcAmP/XAIcAmv/XAIcAn/+FAIcAyP/XAIcAyv/XAIcAzP/XAIcAzv/XAIcA3v/XAIcA4P/XAIcA4v/XAIcA5P/XAIcBDv/XAIcBEP/XAIcBEv/XAIcBFP/XAIcBJP9xAIcBJv9xAIcBNv+uAIcBOP+FAIcBOv+FAIcBR//XAIcB+v+uAIcB/P+uAIcB/v+uAIcCAP+FAIcCB/9xAIcCC/9xAIcCX//XAIcDSf/XAIcDS//XAIcDTf/XAIcDT//XAIcDUf/XAIcDU//XAIcDVf/XAIcDV//XAIcDWf/XAIcDW//XAIcDXf/XAIcDX//XAIcDb/+FAIcDcf+FAIcDc/+FAIcDj/9xAIgALQB7AIkAJv/XAIkAKv/XAIkAMv/XAIkANP/XAIkAif/XAIkAlP/XAIkAlf/XAIkAlv/XAIkAl//XAIkAmP/XAIkAmv/XAIkAyP/XAIkAyv/XAIkAzP/XAIkAzv/XAIkA3v/XAIkA4P/XAIkA4v/XAIkA5P/XAIkBDv/XAIkBEP/XAIkBEv/XAIkBFP/XAIkBR//XAIkCX//XAIkDSf/XAIkDS//XAIkDTf/XAIkDT//XAIkDUf/XAIkDU//XAIkDVf/XAIkDV//XAIkDWf/XAIkDW//XAIkDXf/XAIkDX//XAIoALQB7AIsALQB7AIwALQB7AI0ALQB7AJIAD/+uAJIAEf+uAJIAJP/XAJIAN//DAJIAOf/sAJIAOv/sAJIAO//XAJIAPP/sAJIAPf/sAJIAgv/XAJIAg//XAJIAhP/XAJIAhf/XAJIAhv/XAJIAh//XAJIAn//sAJIAwv/XAJIAxP/XAJIAxv/XAJIBJP/DAJIBJv/DAJIBNv/sAJIBOP/sAJIBOv/sAJIBO//sAJIBPf/sAJIBP//sAJIBQ//XAJIBoP/sAJIB+v/sAJIB/P/sAJIB/v/sAJICAP/sAJICCP+uAJICDP+uAJICWP/XAJIDHf/XAJIDH//XAJIDIf/XAJIDI//XAJIDJf/XAJIDJ//XAJIDKf/XAJIDK//XAJIDLf/XAJIDL//XAJIDMf/XAJIDM//XAJIDb//sAJIDcf/sAJIDc//sAJIDj//DAJQAD/+uAJQAEf+uAJQAJP/XAJQAN//DAJQAOf/sAJQAOv/sAJQAO//XAJQAPP/sAJQAPf/sAJQAgv/XAJQAg//XAJQAhP/XAJQAhf/XAJQAhv/XAJQAh//XAJQAn//sAJQAwv/XAJQAxP/XAJQAxv/XAJQBJP/DAJQBJv/DAJQBNv/sAJQBOP/sAJQBOv/sAJQBO//sAJQBPf/sAJQBP//sAJQBQ//XAJQBoP/sAJQB+v/sAJQB/P/sAJQB/v/sAJQCAP/sAJQCCP+uAJQCDP+uAJQCWP/XAJQDHf/XAJQDH//XAJQDIf/XAJQDI//XAJQDJf/XAJQDJ//XAJQDKf/XAJQDK//XAJQDLf/XAJQDL//XAJQDMf/XAJQDM//XAJQDb//sAJQDcf/sAJQDc//sAJQDj//DAJUAD/+uAJUAEf+uAJUAJP/XAJUAN//DAJUAOf/sAJUAOv/sAJUAO//XAJUAPP/sAJUAPf/sAJUAgv/XAJUAg//XAJUAhP/XAJUAhf/XAJUAhv/XAJUAh//XAJUAn//sAJUAwv/XAJUAxP/XAJUAxv/XAJUBJP/DAJUBJv/DAJUBNv/sAJUBOP/sAJUBOv/sAJUBO//sAJUBPf/sAJUBP//sAJUBQ//XAJUBoP/sAJUB+v/sAJUB/P/sAJUB/v/sAJUCAP/sAJUCCP+uAJUCDP+uAJUCWP/XAJUDHf/XAJUDH//XAJUDIf/XAJUDI//XAJUDJf/XAJUDJ//XAJUDKf/XAJUDK//XAJUDLf/XAJUDL//XAJUDMf/XAJUDM//XAJUDb//sAJUDcf/sAJUDc//sAJUDj//DAJYAD/+uAJYAEf+uAJYAJP/XAJYAN//DAJYAOf/sAJYAOv/sAJYAO//XAJYAPP/sAJYAPf/sAJYAgv/XAJYAg//XAJYAhP/XAJYAhf/XAJYAhv/XAJYAh//XAJYAn//sAJYAwv/XAJYAxP/XAJYAxv/XAJYBJP/DAJYBJv/DAJYBNv/sAJYBOP/sAJYBOv/sAJYBO//sAJYBPf/sAJYBP//sAJYBQ//XAJYBoP/sAJYB+v/sAJYB/P/sAJYB/v/sAJYCAP/sAJYCCP+uAJYCDP+uAJYCWP/XAJYDHf/XAJYDH//XAJYDIf/XAJYDI//XAJYDJf/XAJYDJ//XAJYDKf/XAJYDK//XAJYDLf/XAJYDL//XAJYDMf/XAJYDM//XAJYDb//sAJYDcf/sAJYDc//sAJYDj//DAJcAD/+uAJcAEf+uAJcAJP/XAJcAN//DAJcAOf/sAJcAOv/sAJcAO//XAJcAPP/sAJcAPf/sAJcAgv/XAJcAg//XAJcAhP/XAJcAhf/XAJcAhv/XAJcAh//XAJcAn//sAJcAwv/XAJcAxP/XAJcAxv/XAJcBJP/DAJcBJv/DAJcBNv/sAJcBOP/sAJcBOv/sAJcBO//sAJcBPf/sAJcBP//sAJcBQ//XAJcBoP/sAJcB+v/sAJcB/P/sAJcB/v/sAJcCAP/sAJcCCP+uAJcCDP+uAJcCWP/XAJcDHf/XAJcDH//XAJcDIf/XAJcDI//XAJcDJf/XAJcDJ//XAJcDKf/XAJcDK//XAJcDLf/XAJcDL//XAJcDMf/XAJcDM//XAJcDb//sAJcDcf/sAJcDc//sAJcDj//DAJgAD/+uAJgAEf+uAJgAJP/XAJgAN//DAJgAOf/sAJgAOv/sAJgAO//XAJgAPP/sAJgAPf/sAJgAgv/XAJgAg//XAJgAhP/XAJgAhf/XAJgAhv/XAJgAh//XAJgAn//sAJgAwv/XAJgAxP/XAJgAxv/XAJgBJP/DAJgBJv/DAJgBNv/sAJgBOP/sAJgBOv/sAJgBO//sAJgBPf/sAJgBP//sAJgBQ//XAJgBoP/sAJgB+v/sAJgB/P/sAJgB/v/sAJgCAP/sAJgCCP+uAJgCDP+uAJgCWP/XAJgDHf/XAJgDH//XAJgDIf/XAJgDI//XAJgDJf/XAJgDJ//XAJgDKf/XAJgDK//XAJgDLf/XAJgDL//XAJgDMf/XAJgDM//XAJgDb//sAJgDcf/sAJgDc//sAJgDj//DAJoAD/+uAJoAEf+uAJoAJP/XAJoAN//DAJoAOf/sAJoAOv/sAJoAO//XAJoAPP/sAJoAPf/sAJoAgv/XAJoAg//XAJoAhP/XAJoAhf/XAJoAhv/XAJoAh//XAJoAn//sAJoAwv/XAJoAxP/XAJoAxv/XAJoBJP/DAJoBJv/DAJoBNv/sAJoBOP/sAJoBOv/sAJoBO//sAJoBPf/sAJoBP//sAJoBQ//XAJoBoP/sAJoB+v/sAJoB/P/sAJoB/v/sAJoCAP/sAJoCCP+uAJoCDP+uAJoCWP/XAJoDHf/XAJoDH//XAJoDIf/XAJoDI//XAJoDJf/XAJoDJ//XAJoDKf/XAJoDK//XAJoDLf/XAJoDL//XAJoDMf/XAJoDM//XAJoDb//sAJoDcf/sAJoDc//sAJoDj//DAJsAD//XAJsAEf/XAJsAJP/sAJsAgv/sAJsAg//sAJsAhP/sAJsAhf/sAJsAhv/sAJsAh//sAJsAwv/sAJsAxP/sAJsAxv/sAJsBQ//sAJsCCP/XAJsCDP/XAJsCWP/sAJsDHf/sAJsDH//sAJsDIf/sAJsDI//sAJsDJf/sAJsDJ//sAJsDKf/sAJsDK//sAJsDLf/sAJsDL//sAJsDMf/sAJsDM//sAJwAD//XAJwAEf/XAJwAJP/sAJwAgv/sAJwAg//sAJwAhP/sAJwAhf/sAJwAhv/sAJwAh//sAJwAwv/sAJwAxP/sAJwAxv/sAJwBQ//sAJwCCP/XAJwCDP/XAJwCWP/sAJwDHf/sAJwDH//sAJwDIf/sAJwDI//sAJwDJf/sAJwDJ//sAJwDKf/sAJwDK//sAJwDLf/sAJwDL//sAJwDMf/sAJwDM//sAJ0AD//XAJ0AEf/XAJ0AJP/sAJ0Agv/sAJ0Ag//sAJ0AhP/sAJ0Ahf/sAJ0Ahv/sAJ0Ah//sAJ0Awv/sAJ0AxP/sAJ0Axv/sAJ0BQ//sAJ0CCP/XAJ0CDP/XAJ0CWP/sAJ0DHf/sAJ0DH//sAJ0DIf/sAJ0DI//sAJ0DJf/sAJ0DJ//sAJ0DKf/sAJ0DK//sAJ0DLf/sAJ0DL//sAJ0DMf/sAJ0DM//sAJ4AD//XAJ4AEf/XAJ4AJP/sAJ4Agv/sAJ4Ag//sAJ4AhP/sAJ4Ahf/sAJ4Ahv/sAJ4Ah//sAJ4Awv/sAJ4AxP/sAJ4Axv/sAJ4BQ//sAJ4CCP/XAJ4CDP/XAJ4CWP/sAJ4DHf/sAJ4DH//sAJ4DIf/sAJ4DI//sAJ4DJf/sAJ4DJ//sAJ4DKf/sAJ4DK//sAJ4DLf/sAJ4DL//sAJ4DMf/sAJ4DM//sAJ8AD/+FAJ8AEf+FAJ8AIgApAJ8AJP+FAJ8AJv/XAJ8AKv/XAJ8AMv/XAJ8ANP/XAJ8ARP+aAJ8ARv+aAJ8AR/+aAJ8ASP+aAJ8ASv/XAJ8AUP/DAJ8AUf/DAJ8AUv+aAJ8AU//DAJ8AVP+aAJ8AVf/DAJ8AVv+uAJ8AWP/DAJ8AXf/XAJ8Agv+FAJ8Ag/+FAJ8AhP+FAJ8Ahf+FAJ8Ahv+FAJ8Ah/+FAJ8Aif/XAJ8AlP/XAJ8Alf/XAJ8Alv/XAJ8Al//XAJ8AmP/XAJ8Amv/XAJ8Aov+aAJ8Ao/+aAJ8ApP+aAJ8Apf+aAJ8Apv+aAJ8Ap/+aAJ8AqP+aAJ8Aqf+aAJ8Aqv+aAJ8Aq/+aAJ8ArP+aAJ8Arf+aAJ8AtP+aAJ8Atf+aAJ8Atv+aAJ8At/+aAJ8AuP+aAJ8Auv+aAJ8Au//DAJ8AvP/DAJ8Avf/DAJ8Avv/DAJ8Awv+FAJ8Aw/+aAJ8AxP+FAJ8Axf+aAJ8Axv+FAJ8Ax/+aAJ8AyP/XAJ8Ayf+aAJ8Ayv/XAJ8Ay/+aAJ8AzP/XAJ8Azf+aAJ8Azv/XAJ8Az/+aAJ8A0f+aAJ8A0/+aAJ8A1f+aAJ8A1/+aAJ8A2f+aAJ8A2/+aAJ8A3f+aAJ8A3v/XAJ8A3//XAJ8A4P/XAJ8A4f/XAJ8A4v/XAJ8A4//XAJ8A5P/XAJ8A5f/XAJ8A+v/DAJ8BBv/DAJ8BCP/DAJ8BDf/DAJ8BDv/XAJ8BD/+aAJ8BEP/XAJ8BEf+aAJ8BEv/XAJ8BE/+aAJ8BFP/XAJ8BFf+aAJ8BF//DAJ8BGf/DAJ8BHf+uAJ8BIf+uAJ8BK//DAJ8BLf/DAJ8BL//DAJ8BMf/DAJ8BM//DAJ8BNf/DAJ8BPP/XAJ8BPv/XAJ8BQP/XAJ8BQ/+FAJ8BRP+aAJ8BRv+aAJ8BR//XAJ8BSP+aAJ8BSv+uAJ8CCP+FAJ8CDP+FAJ8CV//DAJ8CWP+FAJ8CWf+aAJ8CX//XAJ8CYP+aAJ8CYv/DAJ8DHf+FAJ8DHv+aAJ8DH/+FAJ8DIP+aAJ8DIf+FAJ8DIv+aAJ8DI/+FAJ8DJf+FAJ8DJv+aAJ8DJ/+FAJ8DKP+aAJ8DKf+FAJ8DKv+aAJ8DK/+FAJ8DLP+aAJ8DLf+FAJ8DLv+aAJ8DL/+FAJ8DMP+aAJ8DMf+FAJ8DMv+aAJ8DM/+FAJ8DNP+aAJ8DNv+aAJ8DOP+aAJ8DOv+aAJ8DPP+aAJ8DQP+aAJ8DQv+aAJ8DRP+aAJ8DSf/XAJ8DSv+aAJ8DS//XAJ8DTP+aAJ8DTf/XAJ8DTv+aAJ8DT//XAJ8DUf/XAJ8DUv+aAJ8DU//XAJ8DVP+aAJ8DVf/XAJ8DVv+aAJ8DV//XAJ8DWP+aAJ8DWf/XAJ8DWv+aAJ8DW//XAJ8DXP+aAJ8DXf/XAJ8DXv+aAJ8DX//XAJ8DYP+aAJ8DYv/DAJ8DZP/DAJ8DZv/DAJ8DaP/DAJ8Dav/DAJ8DbP/DAJ8Dbv/DAKAAD/72AKAAEf72AKAAJP+aAKAAO//XAKAAPf/sAKAAgv+aAKAAg/+aAKAAhP+aAKAAhf+aAKAAhv+aAKAAh/+aAKAAwv+aAKAAxP+aAKAAxv+aAKABO//sAKABPf/sAKABP//sAKABQ/+aAKACCP72AKACDP72AKACWP+aAKADHf+aAKADH/+aAKADIf+aAKADI/+aAKADJf+aAKADJ/+aAKADKf+aAKADK/+aAKADLf+aAKADL/+aAKADMf+aAKADM/+aAKIABf/sAKIACv/sAKICB//sAKICC//sAKMABf/sAKMACv/sAKMCB//sAKMCC//sAKQABf/sAKQACv/sAKQCB//sAKQCC//sAKUABf/sAKUACv/sAKUCB//sAKUCC//sAKYABf/sAKYACv/sAKYCB//sAKYCC//sAKcABf/sAKcACv/sAKcCB//sAKcCC//sAKoABf/sAKoACv/sAKoAWf/XAKoAWv/XAKoAW//XAKoAXP/XAKoAXf/sAKoAv//XAKoBN//XAKoBPP/sAKoBPv/sAKoBQP/sAKoB+//XAKoB/f/XAKoCB//sAKoCC//sAKoDcP/XAKsABf/sAKsACv/sAKsAWf/XAKsAWv/XAKsAW//XAKsAXP/XAKsAXf/sAKsAv//XAKsBN//XAKsBPP/sAKsBPv/sAKsBQP/sAKsB+//XAKsB/f/XAKsCB//sAKsCC//sAKsDcP/XAKwABf/sAKwACv/sAKwAWf/XAKwAWv/XAKwAW//XAKwAXP/XAKwAXf/sAKwAv//XAKwBN//XAKwBPP/sAKwBPv/sAKwBQP/sAKwB+//XAKwB/f/XAKwCB//sAKwCC//sAKwDcP/XAK0ABf/sAK0ACv/sAK0AWf/XAK0AWv/XAK0AW//XAK0AXP/XAK0AXf/sAK0Av//XAK0BN//XAK0BPP/sAK0BPv/sAK0BQP/sAK0B+//XAK0B/f/XAK0CB//sAK0CC//sAK0DcP/XALIABf/sALIACv/sALIAWf/XALIAWv/XALIAW//XALIAXP/XALIAXf/sALIAv//XALIBN//XALIBPP/sALIBPv/sALIBQP/sALIB+//XALIB/f/XALICB//sALICC//sALIDcP/XALQABf/sALQACv/sALQAWf/XALQAWv/XALQAW//XALQAXP/XALQAXf/sALQAv//XALQBN//XALQBPP/sALQBPv/sALQBQP/sALQB+//XALQB/f/XALQCB//sALQCC//sALQDcP/XALUABf/sALUACv/sALUAWf/XALUAWv/XALUAW//XALUAXP/XALUAXf/sALUAv//XALUBN//XALUBPP/sALUBPv/sALUBQP/sALUB+//XALUB/f/XALUCB//sALUCC//sALUDcP/XALYABf/sALYACv/sALYAWf/XALYAWv/XALYAW//XALYAXP/XALYAXf/sALYAv//XALYBN//XALYBPP/sALYBPv/sALYBQP/sALYB+//XALYB/f/XALYCB//sALYCC//sALYDcP/XALgABf/XALgACv/XALgCB//XALgCC//XALoABf/sALoACv/sALoAWf/XALoAWv/XALoAW//XALoAXP/XALoAXf/sALoAv//XALoBN//XALoBPP/sALoBPv/sALoBQP/sALoB+//XALoB/f/XALoCB//sALoCC//sALoDcP/XAL8ABQBSAL8ACgBSAL8AD/+uAL8AEf+uAL8AIgApAL8CBwBSAL8CCP+uAL8CCwBSAL8CDP+uAMAABf/sAMAACv/sAMAAWf/XAMAAWv/XAMAAW//XAMAAXP/XAMAAXf/sAMAAv//XAMABN//XAMABPP/sAMABPv/sAMABQP/sAMAB+//XAMAB/f/XAMACB//sAMACC//sAMADcP/XAMEABQBSAMEACgBSAMEAD/+uAMEAEf+uAMEAIgApAMECBwBSAMECCP+uAMECCwBSAMECDP+uAMIABf9xAMIACv9xAMIAJv/XAMIAKv/XAMIALQEKAMIAMv/XAMIANP/XAMIAN/9xAMIAOf+uAMIAOv+uAMIAPP+FAMIAif/XAMIAlP/XAMIAlf/XAMIAlv/XAMIAl//XAMIAmP/XAMIAmv/XAMIAn/+FAMIAyP/XAMIAyv/XAMIAzP/XAMIAzv/XAMIA3v/XAMIA4P/XAMIA4v/XAMIA5P/XAMIBDv/XAMIBEP/XAMIBEv/XAMIBFP/XAMIBJP9xAMIBJv9xAMIBNv+uAMIBOP+FAMIBOv+FAMIBR//XAMIB+v+uAMIB/P+uAMIB/v+uAMICAP+FAMICB/9xAMICC/9xAMICX//XAMIDSf/XAMIDS//XAMIDTf/XAMIDT//XAMIDUf/XAMIDU//XAMIDVf/XAMIDV//XAMIDWf/XAMIDW//XAMIDXf/XAMIDX//XAMIDb/+FAMIDcf+FAMIDc/+FAMIDj/9xAMMABf/sAMMACv/sAMMCB//sAMMCC//sAMQABf9xAMQACv9xAMQAJv/XAMQAKv/XAMQALQEKAMQAMv/XAMQANP/XAMQAN/9xAMQAOf+uAMQAOv+uAMQAPP+FAMQAif/XAMQAlP/XAMQAlf/XAMQAlv/XAMQAl//XAMQAmP/XAMQAmv/XAMQAn/+FAMQAyP/XAMQAyv/XAMQAzP/XAMQAzv/XAMQA3v/XAMQA4P/XAMQA4v/XAMQA5P/XAMQBDv/XAMQBEP/XAMQBEv/XAMQBFP/XAMQBJP9xAMQBJv9xAMQBNv+uAMQBOP+FAMQBOv+FAMQBR//XAMQB+v+uAMQB/P+uAMQB/v+uAMQCAP+FAMQCB/9xAMQCC/9xAMQCX//XAMQDSf/XAMQDS//XAMQDTf/XAMQDT//XAMQDUf/XAMQDU//XAMQDVf/XAMQDV//XAMQDWf/XAMQDW//XAMQDXf/XAMQDX//XAMQDb/+FAMQDcf+FAMQDc/+FAMQDj/9xAMUABf/sAMUACv/sAMUCB//sAMUCC//sAMYABf9xAMYACv9xAMYAJv/XAMYAKv/XAMYALQEKAMYAMv/XAMYANP/XAMYAN/9xAMYAOf+uAMYAOv+uAMYAPP+FAMYAif/XAMYAlP/XAMYAlf/XAMYAlv/XAMYAl//XAMYAmP/XAMYAmv/XAMYAn/+FAMYAyP/XAMYAyv/XAMYAzP/XAMYAzv/XAMYA3v/XAMYA4P/XAMYA4v/XAMYA5P/XAMYBDv/XAMYBEP/XAMYBEv/XAMYBFP/XAMYBJP9xAMYBJv9xAMYBNv+uAMYBOP+FAMYBOv+FAMYBR//XAMYB+v+uAMYB/P+uAMYB/v+uAMYCAP+FAMYCB/9xAMYCC/9xAMYCX//XAMYDSf/XAMYDS//XAMYDTf/XAMYDT//XAMYDUf/XAMYDU//XAMYDVf/XAMYDV//XAMYDWf/XAMYDW//XAMYDXf/XAMYDX//XAMYDb/+FAMYDcf+FAMYDc/+FAMYDj/9xAMcABf/sAMcACv/sAMcCB//sAMcCC//sAMgAJv/XAMgAKv/XAMgAMv/XAMgANP/XAMgAif/XAMgAlP/XAMgAlf/XAMgAlv/XAMgAl//XAMgAmP/XAMgAmv/XAMgAyP/XAMgAyv/XAMgAzP/XAMgAzv/XAMgA3v/XAMgA4P/XAMgA4v/XAMgA5P/XAMgBDv/XAMgBEP/XAMgBEv/XAMgBFP/XAMgBR//XAMgCX//XAMgDSf/XAMgDS//XAMgDTf/XAMgDT//XAMgDUf/XAMgDU//XAMgDVf/XAMgDV//XAMgDWf/XAMgDW//XAMgDXf/XAMgDX//XAMoAJv/XAMoAKv/XAMoAMv/XAMoANP/XAMoAif/XAMoAlP/XAMoAlf/XAMoAlv/XAMoAl//XAMoAmP/XAMoAmv/XAMoAyP/XAMoAyv/XAMoAzP/XAMoAzv/XAMoA3v/XAMoA4P/XAMoA4v/XAMoA5P/XAMoBDv/XAMoBEP/XAMoBEv/XAMoBFP/XAMoBR//XAMoCX//XAMoDSf/XAMoDS//XAMoDTf/XAMoDT//XAMoDUf/XAMoDU//XAMoDVf/XAMoDV//XAMoDWf/XAMoDW//XAMoDXf/XAMoDX//XAMwAJv/XAMwAKv/XAMwAMv/XAMwANP/XAMwAif/XAMwAlP/XAMwAlf/XAMwAlv/XAMwAl//XAMwAmP/XAMwAmv/XAMwAyP/XAMwAyv/XAMwAzP/XAMwAzv/XAMwA3v/XAMwA4P/XAMwA4v/XAMwA5P/XAMwBDv/XAMwBEP/XAMwBEv/XAMwBFP/XAMwBR//XAMwCX//XAMwDSf/XAMwDS//XAMwDTf/XAMwDT//XAMwDUf/XAMwDU//XAMwDVf/XAMwDV//XAMwDWf/XAMwDW//XAMwDXf/XAMwDX//XAM4AJv/XAM4AKv/XAM4AMv/XAM4ANP/XAM4Aif/XAM4AlP/XAM4Alf/XAM4Alv/XAM4Al//XAM4AmP/XAM4Amv/XAM4AyP/XAM4Ayv/XAM4AzP/XAM4Azv/XAM4A3v/XAM4A4P/XAM4A4v/XAM4A5P/XAM4BDv/XAM4BEP/XAM4BEv/XAM4BFP/XAM4BR//XAM4CX//XAM4DSf/XAM4DS//XAM4DTf/XAM4DT//XAM4DUf/XAM4DU//XAM4DVf/XAM4DV//XAM4DWf/XAM4DW//XAM4DXf/XAM4DX//XANAAD/+uANAAEf+uANAAJP/XANAAN//DANAAOf/sANAAOv/sANAAO//XANAAPP/sANAAPf/sANAAgv/XANAAg//XANAAhP/XANAAhf/XANAAhv/XANAAh//XANAAn//sANAAwv/XANAAxP/XANAAxv/XANABJP/DANABJv/DANABNv/sANABOP/sANABOv/sANABO//sANABPf/sANABP//sANABQ//XANABoP/sANAB+v/sANAB/P/sANAB/v/sANACAP/sANACCP+uANACDP+uANACWP/XANADHf/XANADH//XANADIf/XANADI//XANADJf/XANADJ//XANADKf/XANADK//XANADLf/XANADL//XANADMf/XANADM//XANADb//sANADcf/sANADc//sANADj//DANEABQBSANEACgBSANEADACPANEAIgCkANEAQACPANEARQA9ANEASwA9ANEATgA9ANEATwA9ANEAYACPANEA5wA9ANEA6QB7ANECBwBSANECCwBSANIAD/+uANIAEf+uANIAJP/XANIAN//DANIAOf/sANIAOv/sANIAO//XANIAPP/sANIAPf/sANIAgv/XANIAg//XANIAhP/XANIAhf/XANIAhv/XANIAh//XANIAn//sANIAwv/XANIAxP/XANIAxv/XANIBJP/DANIBJv/DANIBNv/sANIBOP/sANIBOv/sANIBO//sANIBPf/sANIBP//sANIBQ//XANIBoP/sANIB+v/sANIB/P/sANIB/v/sANICAP/sANICCP+uANICDP+uANICWP/XANIDHf/XANIDH//XANIDIf/XANIDI//XANIDJf/XANIDJ//XANIDKf/XANIDK//XANIDLf/XANIDL//XANIDMf/XANIDM//XANIDb//sANIDcf/sANIDc//sANIDj//DANQALQB7ANUABf/sANUACv/sANUAWf/XANUAWv/XANUAW//XANUAXP/XANUAXf/sANUAv//XANUBN//XANUBPP/sANUBPv/sANUBQP/sANUB+//XANUB/f/XANUCB//sANUCC//sANUDcP/XANYALQB7ANcABf/sANcACv/sANcAWf/XANcAWv/XANcAW//XANcAXP/XANcAXf/sANcAv//XANcBN//XANcBPP/sANcBPv/sANcBQP/sANcB+//XANcB/f/XANcCB//sANcCC//sANcDcP/XANgALQB7ANkABf/sANkACv/sANkAWf/XANkAWv/XANkAW//XANkAXP/XANkAXf/sANkAv//XANkBN//XANkBPP/sANkBPv/sANkBQP/sANkB+//XANkB/f/XANkCB//sANkCC//sANkDcP/XANoALQB7ANsABf/sANsACv/sANsAWf/XANsAWv/XANsAW//XANsAXP/XANsAXf/sANsAv//XANsBN//XANsBPP/sANsBPv/sANsBQP/sANsB+//XANsB/f/XANsCB//sANsCC//sANsDcP/XANwALQB7AN0ABf/sAN0ACv/sAN0AWf/XAN0AWv/XAN0AW//XAN0AXP/XAN0AXf/sAN0Av//XAN0BN//XAN0BPP/sAN0BPv/sAN0BQP/sAN0B+//XAN0B/f/XAN0CB//sAN0CC//sAN0DcP/XAOcABf/sAOcACv/sAOcCB//sAOcCC//sAPgAJv/XAPgAKv/XAPgAMv/XAPgANP/XAPgAif/XAPgAlP/XAPgAlf/XAPgAlv/XAPgAl//XAPgAmP/XAPgAmv/XAPgAyP/XAPgAyv/XAPgAzP/XAPgAzv/XAPgA3v/XAPgA4P/XAPgA4v/XAPgA5P/XAPgBDv/XAPgBEP/XAPgBEv/XAPgBFP/XAPgBR//XAPgCX//XAPgDSf/XAPgDS//XAPgDTf/XAPgDT//XAPgDUf/XAPgDU//XAPgDVf/XAPgDV//XAPgDWf/XAPgDW//XAPgDXf/XAPgDX//XAPkARv/XAPkAR//XAPkASP/XAPkAUv/XAPkAVP/XAPkAov/XAPkAqf/XAPkAqv/XAPkAq//XAPkArP/XAPkArf/XAPkAtP/XAPkAtf/XAPkAtv/XAPkAt//XAPkAuP/XAPkAuv/XAPkAyf/XAPkAy//XAPkAzf/XAPkAz//XAPkA0f/XAPkA0//XAPkA1f/XAPkA1//XAPkA2f/XAPkA2//XAPkA3f/XAPkBD//XAPkBEf/XAPkBE//XAPkBFf/XAPkBSP/XAPkCYP/XAPkDNv/XAPkDOP/XAPkDOv/XAPkDPP/XAPkDQP/XAPkDQv/XAPkDRP/XAPkDSv/XAPkDTP/XAPkDTv/XAPkDUv/XAPkDVP/XAPkDVv/XAPkDWP/XAPkDWv/XAPkDXP/XAPkDXv/XAPkDYP/XAPoARv/XAPoAR//XAPoASP/XAPoAUv/XAPoAVP/XAPoAov/XAPoAqf/XAPoAqv/XAPoAq//XAPoArP/XAPoArf/XAPoAtP/XAPoAtf/XAPoAtv/XAPoAt//XAPoAuP/XAPoAuv/XAPoAyf/XAPoAy//XAPoAzf/XAPoAz//XAPoA0f/XAPoA0//XAPoA1f/XAPoA1//XAPoA2f/XAPoA2//XAPoA3f/XAPoBD//XAPoBEf/XAPoBE//XAPoBFf/XAPoBSP/XAPoCYP/XAPoDNv/XAPoDOP/XAPoDOv/XAPoDPP/XAPoDQP/XAPoDQv/XAPoDRP/XAPoDSv/XAPoDTP/XAPoDTv/XAPoDUv/XAPoDVP/XAPoDVv/XAPoDWP/XAPoDWv/XAPoDXP/XAPoDXv/XAPoDYP/XAPsABf9cAPsACv9cAPsAJv/XAPsAKv/XAPsAMv/XAPsANP/XAPsAN//XAPsAOP/sAPsAOf/XAPsAOv/XAPsAPP/DAPsAif/XAPsAlP/XAPsAlf/XAPsAlv/XAPsAl//XAPsAmP/XAPsAmv/XAPsAm//sAPsAnP/sAPsAnf/sAPsAnv/sAPsAn//DAPsAyP/XAPsAyv/XAPsAzP/XAPsAzv/XAPsA3v/XAPsA4P/XAPsA4v/XAPsA5P/XAPsBDv/XAPsBEP/XAPsBEv/XAPsBFP/XAPsBJP/XAPsBJv/XAPsBKv/sAPsBLP/sAPsBLv/sAPsBMP/sAPsBMv/sAPsBNP/sAPsBNv/XAPsBOP/DAPsBOv/DAPsBR//XAPsB+v/XAPsB/P/XAPsB/v/XAPsCAP/DAPsCB/9cAPsCC/9cAPsCX//XAPsCYf/sAPsDSf/XAPsDS//XAPsDTf/XAPsDT//XAPsDUf/XAPsDU//XAPsDVf/XAPsDV//XAPsDWf/XAPsDW//XAPsDXf/XAPsDX//XAPsDYf/sAPsDY//sAPsDZf/sAPsDZ//sAPsDaf/sAPsDa//sAPsDbf/sAPsDb//DAPsDcf/DAPsDc//DAPsDj//XAP0ABf9cAP0ACv9cAP0AJv/XAP0AKv/XAP0AMv/XAP0ANP/XAP0AN//XAP0AOP/sAP0AOf/XAP0AOv/XAP0APP/DAP0Aif/XAP0AlP/XAP0Alf/XAP0Alv/XAP0Al//XAP0AmP/XAP0Amv/XAP0Am//sAP0AnP/sAP0Anf/sAP0Anv/sAP0An//DAP0AyP/XAP0Ayv/XAP0AzP/XAP0Azv/XAP0A3v/XAP0A4P/XAP0A4v/XAP0A5P/XAP0BDv/XAP0BEP/XAP0BEv/XAP0BFP/XAP0BJP/XAP0BJv/XAP0BKv/sAP0BLP/sAP0BLv/sAP0BMP/sAP0BMv/sAP0BNP/sAP0BNv/XAP0BOP/DAP0BOv/DAP0BR//XAP0B+v/XAP0B/P/XAP0B/v/XAP0CAP/DAP0CB/9cAP0CC/9cAP0CX//XAP0CYf/sAP0DSf/XAP0DS//XAP0DTf/XAP0DT//XAP0DUf/XAP0DU//XAP0DVf/XAP0DV//XAP0DWf/XAP0DW//XAP0DXf/XAP0DX//XAP0DYf/sAP0DY//sAP0DZf/sAP0DZ//sAP0Daf/sAP0Da//sAP0Dbf/sAP0Db//DAP0Dcf/DAP0Dc//DAP0Dj//XAP8ABf9cAP8ACv9cAP8AJv/XAP8AKv/XAP8AMv/XAP8ANP/XAP8AN//XAP8AOP/sAP8AOf/XAP8AOv/XAP8APP/DAP8Aif/XAP8AlP/XAP8Alf/XAP8Alv/XAP8Al//XAP8AmP/XAP8Amv/XAP8Am//sAP8AnP/sAP8Anf/sAP8Anv/sAP8An//DAP8AyP/XAP8Ayv/XAP8AzP/XAP8Azv/XAP8A3v/XAP8A4P/XAP8A4v/XAP8A5P/XAP8BDv/XAP8BEP/XAP8BEv/XAP8BFP/XAP8BJP/XAP8BJv/XAP8BKv/sAP8BLP/sAP8BLv/sAP8BMP/sAP8BMv/sAP8BNP/sAP8BNv/XAP8BOP/DAP8BOv/DAP8BR//XAP8B+v/XAP8B/P/XAP8B/v/XAP8CAP/DAP8CB/9cAP8CC/9cAP8CX//XAP8CYf/sAP8DSf/XAP8DS//XAP8DTf/XAP8DT//XAP8DUf/XAP8DU//XAP8DVf/XAP8DV//XAP8DWf/XAP8DW//XAP8DXf/XAP8DX//XAP8DYf/sAP8DY//sAP8DZf/sAP8DZ//sAP8Daf/sAP8Da//sAP8Dbf/sAP8Db//DAP8Dcf/DAP8Dc//DAP8Dj//XAQAABQBSAQAACgBSAQAADACPAQAAIgCPAQAAQACPAQAARQA9AQAASwA9AQAATgA9AQAATwA9AQAAYACPAQAA5wA9AQAA6QCPAQACBwBSAQACCwBSAQEABf9cAQEACv9cAQEAJv/XAQEAKv/XAQEAMv/XAQEANP/XAQEAN//XAQEAOP/sAQEAOf/XAQEAOv/XAQEAPP/DAQEAif/XAQEAlP/XAQEAlf/XAQEAlv/XAQEAl//XAQEAmP/XAQEAmv/XAQEAm//sAQEAnP/sAQEAnf/sAQEAnv/sAQEAn//DAQEAyP/XAQEAyv/XAQEAzP/XAQEAzv/XAQEA3v/XAQEA4P/XAQEA4v/XAQEA5P/XAQEBDv/XAQEBEP/XAQEBEv/XAQEBFP/XAQEBJP/XAQEBJv/XAQEBKv/sAQEBLP/sAQEBLv/sAQEBMP/sAQEBMv/sAQEBNP/sAQEBNv/XAQEBOP/DAQEBOv/DAQEBR//XAQEB+v/XAQEB/P/XAQEB/v/XAQECAP/DAQECB/9cAQECC/9cAQECX//XAQECYf/sAQEDSf/XAQEDS//XAQEDTf/XAQEDT//XAQEDUf/XAQEDU//XAQEDVf/XAQEDV//XAQEDWf/XAQEDW//XAQEDXf/XAQEDX//XAQEDYf/sAQEDY//sAQEDZf/sAQEDZ//sAQEDaf/sAQEDa//sAQEDbf/sAQEDb//DAQEDcf/DAQEDc//DAQEDj//XAQMABf9cAQMACv9cAQMAJv/XAQMAKv/XAQMAMv/XAQMANP/XAQMAN//XAQMAOP/sAQMAOf/XAQMAOv/XAQMAPP/DAQMAif/XAQMAlP/XAQMAlf/XAQMAlv/XAQMAl//XAQMAmP/XAQMAmv/XAQMAm//sAQMAnP/sAQMAnf/sAQMAnv/sAQMAn//DAQMAyP/XAQMAyv/XAQMAzP/XAQMAzv/XAQMA3v/XAQMA4P/XAQMA4v/XAQMA5P/XAQMBDv/XAQMBEP/XAQMBEv/XAQMBFP/XAQMBJP/XAQMBJv/XAQMBKv/sAQMBLP/sAQMBLv/sAQMBMP/sAQMBMv/sAQMBNP/sAQMBNv/XAQMBOP/DAQMBOv/DAQMBR//XAQMB+v/XAQMB/P/XAQMB/v/XAQMCAP/DAQMCB/9cAQMCC/9cAQMCX//XAQMCYf/sAQMDSf/XAQMDS//XAQMDTf/XAQMDT//XAQMDUf/XAQMDU//XAQMDVf/XAQMDV//XAQMDWf/XAQMDW//XAQMDXf/XAQMDX//XAQMDYf/sAQMDY//sAQMDZf/sAQMDZ//sAQMDaf/sAQMDa//sAQMDbf/sAQMDb//DAQMDcf/DAQMDc//DAQMDj//XAQgABf/sAQgACv/sAQgCB//sAQgCC//sAQ4AD/+uAQ4AEf+uAQ4AJP/XAQ4AN//DAQ4AOf/sAQ4AOv/sAQ4AO//XAQ4APP/sAQ4APf/sAQ4Agv/XAQ4Ag//XAQ4AhP/XAQ4Ahf/XAQ4Ahv/XAQ4Ah//XAQ4An//sAQ4Awv/XAQ4AxP/XAQ4Axv/XAQ4BJP/DAQ4BJv/DAQ4BNv/sAQ4BOP/sAQ4BOv/sAQ4BO//sAQ4BPf/sAQ4BP//sAQ4BQ//XAQ4BoP/sAQ4B+v/sAQ4B/P/sAQ4B/v/sAQ4CAP/sAQ4CCP+uAQ4CDP+uAQ4CWP/XAQ4DHf/XAQ4DH//XAQ4DIf/XAQ4DI//XAQ4DJf/XAQ4DJ//XAQ4DKf/XAQ4DK//XAQ4DLf/XAQ4DL//XAQ4DMf/XAQ4DM//XAQ4Db//sAQ4Dcf/sAQ4Dc//sAQ4Dj//DARAAD/+uARAAEf+uARAAJP/XARAAN//DARAAOf/sARAAOv/sARAAO//XARAAPP/sARAAPf/sARAAgv/XARAAg//XARAAhP/XARAAhf/XARAAhv/XARAAh//XARAAn//sARAAwv/XARAAxP/XARAAxv/XARABJP/DARABJv/DARABNv/sARABOP/sARABOv/sARABO//sARABPf/sARABP//sARABQ//XARABoP/sARAB+v/sARAB/P/sARAB/v/sARACAP/sARACCP+uARACDP+uARACWP/XARADHf/XARADH//XARADIf/XARADI//XARADJf/XARADJ//XARADKf/XARADK//XARADLf/XARADL//XARADMf/XARADM//XARADb//sARADcf/sARADc//sARADj//DARIAD/+uARIAEf+uARIAJP/XARIAN//DARIAOf/sARIAOv/sARIAO//XARIAPP/sARIAPf/sARIAgv/XARIAg//XARIAhP/XARIAhf/XARIAhv/XARIAh//XARIAn//sARIAwv/XARIAxP/XARIAxv/XARIBJP/DARIBJv/DARIBNv/sARIBOP/sARIBOv/sARIBO//sARIBPf/sARIBP//sARIBQ//XARIBoP/sARIB+v/sARIB/P/sARIB/v/sARICAP/sARICCP+uARICDP+uARICWP/XARIDHf/XARIDH//XARIDIf/XARIDI//XARIDJf/XARIDJ//XARIDKf/XARIDK//XARIDLf/XARIDL//XARIDMf/XARIDM//XARIDb//sARIDcf/sARIDc//sARIDj//DARQALQB7ARcABQBSARcACgBSARcARP/XARcARv/XARcAR//XARcASP/XARcASv/sARcAUv/XARcAVP/XARcAov/XARcAo//XARcApP/XARcApf/XARcApv/XARcAp//XARcAqP/XARcAqf/XARcAqv/XARcAq//XARcArP/XARcArf/XARcAtP/XARcAtf/XARcAtv/XARcAt//XARcAuP/XARcAuv/XARcAw//XARcAxf/XARcAx//XARcAyf/XARcAy//XARcAzf/XARcAz//XARcA0f/XARcA0//XARcA1f/XARcA1//XARcA2f/XARcA2//XARcA3f/XARcA3//sARcA4f/sARcA4//sARcA5f/sARcBD//XARcBEf/XARcBE//XARcBFf/XARcBRP/XARcBRv/XARcBSP/XARcCBwBSARcCCwBSARcCWf/XARcCYP/XARcDHv/XARcDIP/XARcDIv/XARcDJv/XARcDKP/XARcDKv/XARcDLP/XARcDLv/XARcDMP/XARcDMv/XARcDNP/XARcDNv/XARcDOP/XARcDOv/XARcDPP/XARcDQP/XARcDQv/XARcDRP/XARcDSv/XARcDTP/XARcDTv/XARcDUv/XARcDVP/XARcDVv/XARcDWP/XARcDWv/XARcDXP/XARcDXv/XARcDYP/XARkABQBSARkACgBSARkARP/XARkARv/XARkAR//XARkASP/XARkASv/sARkAUv/XARkAVP/XARkAov/XARkAo//XARkApP/XARkApf/XARkApv/XARkAp//XARkAqP/XARkAqf/XARkAqv/XARkAq//XARkArP/XARkArf/XARkAtP/XARkAtf/XARkAtv/XARkAt//XARkAuP/XARkAuv/XARkAw//XARkAxf/XARkAx//XARkAyf/XARkAy//XARkAzf/XARkAz//XARkA0f/XARkA0//XARkA1f/XARkA1//XARkA2f/XARkA2//XARkA3f/XARkA3//sARkA4f/sARkA4//sARkA5f/sARkBD//XARkBEf/XARkBE//XARkBFf/XARkBRP/XARkBRv/XARkBSP/XARkCBwBSARkCCwBSARkCWf/XARkCYP/XARkDHv/XARkDIP/XARkDIv/XARkDJv/XARkDKP/XARkDKv/XARkDLP/XARkDLv/XARkDMP/XARkDMv/XARkDNP/XARkDNv/XARkDOP/XARkDOv/XARkDPP/XARkDQP/XARkDQv/XARkDRP/XARkDSv/XARkDTP/XARkDTv/XARkDUv/XARkDVP/XARkDVv/XARkDWP/XARkDWv/XARkDXP/XARkDXv/XARkDYP/XARsABQBSARsACgBSARsARP/XARsARv/XARsAR//XARsASP/XARsASv/sARsAUv/XARsAVP/XARsAov/XARsAo//XARsApP/XARsApf/XARsApv/XARsAp//XARsAqP/XARsAqf/XARsAqv/XARsAq//XARsArP/XARsArf/XARsAtP/XARsAtf/XARsAtv/XARsAt//XARsAuP/XARsAuv/XARsAw//XARsAxf/XARsAx//XARsAyf/XARsAy//XARsAzf/XARsAz//XARsA0f/XARsA0//XARsA1f/XARsA1//XARsA2f/XARsA2//XARsA3f/XARsA3//sARsA4f/sARsA4//sARsA5f/sARsBD//XARsBEf/XARsBE//XARsBFf/XARsBRP/XARsBRv/XARsBSP/XARsCBwBSARsCCwBSARsCWf/XARsCYP/XARsDHv/XARsDIP/XARsDIv/XARsDJv/XARsDKP/XARsDKv/XARsDLP/XARsDLv/XARsDMP/XARsDMv/XARsDNP/XARsDNv/XARsDOP/XARsDOv/XARsDPP/XARsDQP/XARsDQv/XARsDRP/XARsDSv/XARsDTP/XARsDTv/XARsDUv/XARsDVP/XARsDVv/XARsDWP/XARsDWv/XARsDXP/XARsDXv/XARsDYP/XASQAD/+FASQAEP+uASQAEf+FASQAIgApASQAJP9xASQAJv/XASQAKv/XASQAMv/XASQANP/XASQANwApASQARP9cASQARv9xASQAR/9xASQASP9xASQASv9xASQAUP+aASQAUf+aASQAUv9xASQAU/+aASQAVP9xASQAVf+aASQAVv+FASQAWP+aASQAWf/XASQAWv/XASQAW//XASQAXP/XASQAXf+uASQAgv9xASQAg/9xASQAhP9xASQAhf9xASQAhv9xASQAh/9xASQAif/XASQAlP/XASQAlf/XASQAlv/XASQAl//XASQAmP/XASQAmv/XASQAov9xASQAo/9cASQApP9cASQApf9cASQApv9cASQAp/9cASQAqP9cASQAqf9xASQAqv9xASQAq/9xASQArP9xASQArf9xASQAtP9xASQAtf9xASQAtv9xASQAt/9xASQAuP9xASQAuv9xASQAu/+aASQAvP+aASQAvf+aASQAvv+aASQAv//XASQAwv9xASQAw/9cASQAxP9xASQAxf9cASQAxv9xASQAx/9cASQAyP/XASQAyf9xASQAyv/XASQAy/9xASQAzP/XASQAzf9xASQAzv/XASQAz/9xASQA0f9xASQA0/9xASQA1f9xASQA1/9xASQA2f9xASQA2/9xASQA3f9xASQA3v/XASQA3/9xASQA4P/XASQA4f9xASQA4v/XASQA4/9xASQA5P/XASQA5f9xASQA+v+aASQBBv+aASQBCP+aASQBDf+aASQBDv/XASQBD/9xASQBEP/XASQBEf9xASQBEv/XASQBE/9xASQBFP/XASQBFf9xASQBF/+aASQBGf+aASQBHf+FASQBIf+FASQBJAApASQBJgApASQBK/+aASQBLf+aASQBL/+aASQBMf+aASQBM/+aASQBNf+aASQBN//XASQBPP+uASQBPv+uASQBQP+uASQBQ/9xASQBRP9cASQBRv9cASQBR//XASQBSP9xASQBSv+FASQB+//XASQB/f/XASQCAv+uASQCA/+uASQCBP+uASQCCP+FASQCDP+FASQCV/+aASQCWP9xASQCWf9cASQCX//XASQCYP9xASQCYv+aASQDHf9xASQDHv9cASQDH/9xASQDIP9cASQDIf9xASQDIv9cASQDI/9xASQDJf9xASQDJv9cASQDJ/9xASQDKP9cASQDKf9xASQDKv9cASQDK/9xASQDLP9cASQDLf9xASQDLv9cASQDL/9xASQDMP9cASQDMf9xASQDMv9cASQDM/9xASQDNP9cASQDNv9xASQDOP9xASQDOv9xASQDPP9xASQDQP9xASQDQv9xASQDRP9xASQDSf/XASQDSv9xASQDS//XASQDTP9xASQDTf/XASQDTv9xASQDT//XASQDUf/XASQDUv9xASQDU//XASQDVP9xASQDVf/XASQDVv9xASQDV//XASQDWP9xASQDWf/XASQDWv9xASQDW//XASQDXP9xASQDXf/XASQDXv9xASQDX//XASQDYP9xASQDYv+aASQDZP+aASQDZv+aASQDaP+aASQDav+aASQDbP+aASQDbv+aASQDcP/XASQDjwApASUABQApASUACgApASUCBwApASUCCwApASYAD/+FASYAEP+uASYAEf+FASYAIgApASYAJP9xASYAJv/XASYAKv/XASYAMv/XASYANP/XASYANwApASYARP9cASYARv9xASYAR/9xASYASP9xASYASv9xASYAUP+aASYAUf+aASYAUv9xASYAU/+aASYAVP9xASYAVf+aASYAVv+FASYAWP+aASYAWf/XASYAWv/XASYAW//XASYAXP/XASYAXf+uASYAgv9xASYAg/9xASYAhP9xASYAhf9xASYAhv9xASYAh/9xASYAif/XASYAlP/XASYAlf/XASYAlv/XASYAl//XASYAmP/XASYAmv/XASYAov9xASYAo/9cASYApP9cASYApf9cASYApv9cASYAp/9cASYAqP9cASYAqf9xASYAqv9xASYAq/9xASYArP9xASYArf9xASYAtP9xASYAtf9xASYAtv9xASYAt/9xASYAuP9xASYAuv9xASYAu/+aASYAvP+aASYAvf+aASYAvv+aASYAv//XASYAwv9xASYAw/9cASYAxP9xASYAxf9cASYAxv9xASYAx/9cASYAyP/XASYAyf9xASYAyv/XASYAy/9xASYAzP/XASYAzf9xASYAzv/XASYAz/9xASYA0f9xASYA0/9xASYA1f9xASYA1/9xASYA2f9xASYA2/9xASYA3f9xASYA3v/XASYA3/9xASYA4P/XASYA4f9xASYA4v/XASYA4/9xASYA5P/XASYA5f9xASYA+v+aASYBBv+aASYBCP+aASYBDf+aASYBDv/XASYBD/9xASYBEP/XASYBEf9xASYBEv/XASYBE/9xASYBFP/XASYBFf9xASYBF/+aASYBGf+aASYBHf+FASYBIf+FASYBJAApASYBJgApASYBK/+aASYBLf+aASYBL/+aASYBMf+aASYBM/+aASYBNf+aASYBN//XASYBPP+uASYBPv+uASYBQP+uASYBQ/9xASYBRP9cASYBRv9cASYBR//XASYBSP9xASYBSv+FASYB+//XASYB/f/XASYCAv+uASYCA/+uASYCBP+uASYCCP+FASYCDP+FASYCV/+aASYCWP9xASYCWf9cASYCX//XASYCYP9xASYCYv+aASYDHf9xASYDHv9cASYDH/9xASYDIP9cASYDIf9xASYDIv9cASYDI/9xASYDJf9xASYDJv9cASYDJ/9xASYDKP9cASYDKf9xASYDKv9cASYDK/9xASYDLP9cASYDLf9xASYDLv9cASYDL/9xASYDMP9cASYDMf9xASYDMv9cASYDM/9xASYDNP9cASYDNv9xASYDOP9xASYDOv9xASYDPP9xASYDQP9xASYDQv9xASYDRP9xASYDSf/XASYDSv9xASYDS//XASYDTP9xASYDTf/XASYDTv9xASYDT//XASYDUf/XASYDUv9xASYDU//XASYDVP9xASYDVf/XASYDVv9xASYDV//XASYDWP9xASYDWf/XASYDWv9xASYDW//XASYDXP9xASYDXf/XASYDXv9xASYDX//XASYDYP9xASYDYv+aASYDZP+aASYDZv+aASYDaP+aASYDav+aASYDbP+aASYDbv+aASYDcP/XASYDjwApAScABQApAScACgApAScCBwApAScCCwApASgAD/+FASgAEP+uASgAEf+FASgAIgApASgAJP9xASgAJv/XASgAKv/XASgAMv/XASgANP/XASgANwApASgARP9cASgARv9xASgAR/9xASgASP9xASgASv9xASgAUP+aASgAUf+aASgAUv9xASgAU/+aASgAVP9xASgAVf+aASgAVv+FASgAWP+aASgAWf/XASgAWv/XASgAW//XASgAXP/XASgAXf+uASgAgv9xASgAg/9xASgAhP9xASgAhf9xASgAhv9xASgAh/9xASgAif/XASgAlP/XASgAlf/XASgAlv/XASgAl//XASgAmP/XASgAmv/XASgAov9xASgAo/9cASgApP9cASgApf9cASgApv9cASgAp/9cASgAqP9cASgAqf9xASgAqv9xASgAq/9xASgArP9xASgArf9xASgAtP9xASgAtf9xASgAtv9xASgAt/9xASgAuP9xASgAuv9xASgAu/+aASgAvP+aASgAvf+aASgAvv+aASgAv//XASgAwv9xASgAw/9cASgAxP9xASgAxf9cASgAxv9xASgAx/9cASgAyP/XASgAyf9xASgAyv/XASgAy/9xASgAzP/XASgAzf9xASgAzv/XASgAz/9xASgA0f9xASgA0/9xASgA1f9xASgA1/9xASgA2f9xASgA2/9xASgA3f9xASgA3v/XASgA3/9xASgA4P/XASgA4f9xASgA4v/XASgA4/9xASgA5P/XASgA5f9xASgA+v+aASgBBv+aASgBCP+aASgBDf+aASgBDv/XASgBD/9xASgBEP/XASgBEf9xASgBEv/XASgBE/9xASgBFP/XASgBFf9xASgBF/+aASgBGf+aASgBHf+FASgBIf+FASgBJAApASgBJgApASgBK/+aASgBLf+aASgBL/+aASgBMf+aASgBM/+aASgBNf+aASgBN//XASgBPP+uASgBPv+uASgBQP+uASgBQ/9xASgBRP9cASgBRv9cASgBR//XASgBSP9xASgBSv+FASgB+//XASgB/f/XASgCAv+uASgCA/+uASgCBP+uASgCCP+FASgCDP+FASgCV/+aASgCWP9xASgCWf9cASgCX//XASgCYP9xASgCYv+aASgDHf9xASgDHv9cASgDH/9xASgDIP9cASgDIf9xASgDIv9cASgDI/9xASgDJf9xASgDJv9cASgDJ/9xASgDKP9cASgDKf9xASgDKv9cASgDK/9xASgDLP9cASgDLf9xASgDLv9cASgDL/9xASgDMP9cASgDMf9xASgDMv9cASgDM/9xASgDNP9cASgDNv9xASgDOP9xASgDOv9xASgDPP9xASgDQP9xASgDQv9xASgDRP9xASgDSf/XASgDSv9xASgDS//XASgDTP9xASgDTf/XASgDTv9xASgDT//XASgDUf/XASgDUv9xASgDU//XASgDVP9xASgDVf/XASgDVv9xASgDV//XASgDWP9xASgDWf/XASgDWv9xASgDW//XASgDXP9xASgDXf/XASgDXv9xASgDX//XASgDYP9xASgDYv+aASgDZP+aASgDZv+aASgDaP+aASgDav+aASgDbP+aASgDbv+aASgDcP/XASgDjwApASoAD//XASoAEf/XASoAJP/sASoAgv/sASoAg//sASoAhP/sASoAhf/sASoAhv/sASoAh//sASoAwv/sASoAxP/sASoAxv/sASoBQ//sASoCCP/XASoCDP/XASoCWP/sASoDHf/sASoDH//sASoDIf/sASoDI//sASoDJf/sASoDJ//sASoDKf/sASoDK//sASoDLf/sASoDL//sASoDMf/sASoDM//sASwAD//XASwAEf/XASwAJP/sASwAgv/sASwAg//sASwAhP/sASwAhf/sASwAhv/sASwAh//sASwAwv/sASwAxP/sASwAxv/sASwBQ//sASwCCP/XASwCDP/XASwCWP/sASwDHf/sASwDH//sASwDIf/sASwDI//sASwDJf/sASwDJ//sASwDKf/sASwDK//sASwDLf/sASwDL//sASwDMf/sASwDM//sAS4AD//XAS4AEf/XAS4AJP/sAS4Agv/sAS4Ag//sAS4AhP/sAS4Ahf/sAS4Ahv/sAS4Ah//sAS4Awv/sAS4AxP/sAS4Axv/sAS4BQ//sAS4CCP/XAS4CDP/XAS4CWP/sAS4DHf/sAS4DH//sAS4DIf/sAS4DI//sAS4DJf/sAS4DJ//sAS4DKf/sAS4DK//sAS4DLf/sAS4DL//sAS4DMf/sAS4DM//sATAAD//XATAAEf/XATAAJP/sATAAgv/sATAAg//sATAAhP/sATAAhf/sATAAhv/sATAAh//sATAAwv/sATAAxP/sATAAxv/sATABQ//sATACCP/XATACDP/XATACWP/sATADHf/sATADH//sATADIf/sATADI//sATADJf/sATADJ//sATADKf/sATADK//sATADLf/sATADL//sATADMf/sATADM//sATIAD//XATIAEf/XATIAJP/sATIAgv/sATIAg//sATIAhP/sATIAhf/sATIAhv/sATIAh//sATIAwv/sATIAxP/sATIAxv/sATIBQ//sATICCP/XATICDP/XATICWP/sATIDHf/sATIDH//sATIDIf/sATIDI//sATIDJf/sATIDJ//sATIDKf/sATIDK//sATIDLf/sATIDL//sATIDMf/sATIDM//sATQAD//XATQAEf/XATQAJP/sATQAgv/sATQAg//sATQAhP/sATQAhf/sATQAhv/sATQAh//sATQAwv/sATQAxP/sATQAxv/sATQBQ//sATQCCP/XATQCDP/XATQCWP/sATQDHf/sATQDH//sATQDIf/sATQDI//sATQDJf/sATQDJ//sATQDKf/sATQDK//sATQDLf/sATQDL//sATQDMf/sATQDM//sATYAD/+aATYAEf+aATYAIgApATYAJP+uATYAJv/sATYAKv/sATYAMv/sATYANP/sATYARP/XATYARv/XATYAR//XATYASP/XATYASv/sATYAUP/sATYAUf/sATYAUv/XATYAU//sATYAVP/XATYAVf/sATYAVv/sATYAWP/sATYAgv+uATYAg/+uATYAhP+uATYAhf+uATYAhv+uATYAh/+uATYAif/sATYAlP/sATYAlf/sATYAlv/sATYAl//sATYAmP/sATYAmv/sATYAov/XATYAo//XATYApP/XATYApf/XATYApv/XATYAp//XATYAqP/XATYAqf/XATYAqv/XATYAq//XATYArP/XATYArf/XATYAtP/XATYAtf/XATYAtv/XATYAt//XATYAuP/XATYAuv/XATYAu//sATYAvP/sATYAvf/sATYAvv/sATYAwv+uATYAw//XATYAxP+uATYAxf/XATYAxv+uATYAx//XATYAyP/sATYAyf/XATYAyv/sATYAy//XATYAzP/sATYAzf/XATYAzv/sATYAz//XATYA0f/XATYA0//XATYA1f/XATYA1//XATYA2f/XATYA2//XATYA3f/XATYA3v/sATYA3//sATYA4P/sATYA4f/sATYA4v/sATYA4//sATYA5P/sATYA5f/sATYA+v/sATYBBv/sATYBCP/sATYBDf/sATYBDv/sATYBD//XATYBEP/sATYBEf/XATYBEv/sATYBE//XATYBFP/sATYBFf/XATYBF//sATYBGf/sATYBHf/sATYBIf/sATYBK//sATYBLf/sATYBL//sATYBMf/sATYBM//sATYBNf/sATYBQ/+uATYBRP/XATYBRv/XATYBR//sATYBSP/XATYBSv/sATYCCP+aATYCDP+aATYCV//sATYCWP+uATYCWf/XATYCX//sATYCYP/XATYCYv/sATYDHf+uATYDHv/XATYDH/+uATYDIP/XATYDIf+uATYDIv/XATYDI/+uATYDJf+uATYDJv/XATYDJ/+uATYDKP/XATYDKf+uATYDKv/XATYDK/+uATYDLP/XATYDLf+uATYDLv/XATYDL/+uATYDMP/XATYDMf+uATYDMv/XATYDM/+uATYDNP/XATYDNv/XATYDOP/XATYDOv/XATYDPP/XATYDQP/XATYDQv/XATYDRP/XATYDSf/sATYDSv/XATYDS//sATYDTP/XATYDTf/sATYDTv/XATYDT//sATYDUf/sATYDUv/XATYDU//sATYDVP/XATYDVf/sATYDVv/XATYDV//sATYDWP/XATYDWf/sATYDWv/XATYDW//sATYDXP/XATYDXf/sATYDXv/XATYDX//sATYDYP/XATYDYv/sATYDZP/sATYDZv/sATYDaP/sATYDav/sATYDbP/sATYDbv/sATcABQBSATcACgBSATcAD/+uATcAEf+uATcAIgApATcCBwBSATcCCP+uATcCCwBSATcCDP+uATgAD/+FATgAEf+FATgAIgApATgAJP+FATgAJv/XATgAKv/XATgAMv/XATgANP/XATgARP+aATgARv+aATgAR/+aATgASP+aATgASv/XATgAUP/DATgAUf/DATgAUv+aATgAU//DATgAVP+aATgAVf/DATgAVv+uATgAWP/DATgAXf/XATgAgv+FATgAg/+FATgAhP+FATgAhf+FATgAhv+FATgAh/+FATgAif/XATgAlP/XATgAlf/XATgAlv/XATgAl//XATgAmP/XATgAmv/XATgAov+aATgAo/+aATgApP+aATgApf+aATgApv+aATgAp/+aATgAqP+aATgAqf+aATgAqv+aATgAq/+aATgArP+aATgArf+aATgAtP+aATgAtf+aATgAtv+aATgAt/+aATgAuP+aATgAuv+aATgAu//DATgAvP/DATgAvf/DATgAvv/DATgAwv+FATgAw/+aATgAxP+FATgAxf+aATgAxv+FATgAx/+aATgAyP/XATgAyf+aATgAyv/XATgAy/+aATgAzP/XATgAzf+aATgAzv/XATgAz/+aATgA0f+aATgA0/+aATgA1f+aATgA1/+aATgA2f+aATgA2/+aATgA3f+aATgA3v/XATgA3//XATgA4P/XATgA4f/XATgA4v/XATgA4//XATgA5P/XATgA5f/XATgA+v/DATgBBv/DATgBCP/DATgBDf/DATgBDv/XATgBD/+aATgBEP/XATgBEf+aATgBEv/XATgBE/+aATgBFP/XATgBFf+aATgBF//DATgBGf/DATgBHf+uATgBIf+uATgBK//DATgBLf/DATgBL//DATgBMf/DATgBM//DATgBNf/DATgBPP/XATgBPv/XATgBQP/XATgBQ/+FATgBRP+aATgBRv+aATgBR//XATgBSP+aATgBSv+uATgCCP+FATgCDP+FATgCV//DATgCWP+FATgCWf+aATgCX//XATgCYP+aATgCYv/DATgDHf+FATgDHv+aATgDH/+FATgDIP+aATgDIf+FATgDIv+aATgDI/+FATgDJf+FATgDJv+aATgDJ/+FATgDKP+aATgDKf+FATgDKv+aATgDK/+FATgDLP+aATgDLf+FATgDLv+aATgDL/+FATgDMP+aATgDMf+FATgDMv+aATgDM/+FATgDNP+aATgDNv+aATgDOP+aATgDOv+aATgDPP+aATgDQP+aATgDQv+aATgDRP+aATgDSf/XATgDSv+aATgDS//XATgDTP+aATgDTf/XATgDTv+aATgDT//XATgDUf/XATgDUv+aATgDU//XATgDVP+aATgDVf/XATgDVv+aATgDV//XATgDWP+aATgDWf/XATgDWv+aATgDW//XATgDXP+aATgDXf/XATgDXv+aATgDX//XATgDYP+aATgDYv/DATgDZP/DATgDZv/DATgDaP/DATgDav/DATgDbP/DATgDbv/DATkABQBSATkACgBSATkAD/+uATkAEf+uATkAIgApATkCBwBSATkCCP+uATkCCwBSATkCDP+uAToAD/+FAToAEf+FAToAIgApAToAJP+FAToAJv/XAToAKv/XAToAMv/XAToANP/XAToARP+aAToARv+aAToAR/+aAToASP+aAToASv/XAToAUP/DAToAUf/DAToAUv+aAToAU//DAToAVP+aAToAVf/DAToAVv+uAToAWP/DAToAXf/XAToAgv+FAToAg/+FAToAhP+FAToAhf+FAToAhv+FAToAh/+FAToAif/XAToAlP/XAToAlf/XAToAlv/XAToAl//XAToAmP/XAToAmv/XAToAov+aAToAo/+aAToApP+aAToApf+aAToApv+aAToAp/+aAToAqP+aAToAqf+aAToAqv+aAToAq/+aAToArP+aAToArf+aAToAtP+aAToAtf+aAToAtv+aAToAt/+aAToAuP+aAToAuv+aAToAu//DAToAvP/DAToAvf/DAToAvv/DAToAwv+FAToAw/+aAToAxP+FAToAxf+aAToAxv+FAToAx/+aAToAyP/XAToAyf+aAToAyv/XAToAy/+aAToAzP/XAToAzf+aAToAzv/XAToAz/+aAToA0f+aAToA0/+aAToA1f+aAToA1/+aAToA2f+aAToA2/+aAToA3f+aAToA3v/XAToA3//XAToA4P/XAToA4f/XAToA4v/XAToA4//XAToA5P/XAToA5f/XAToA+v/DAToBBv/DAToBCP/DAToBDf/DAToBDv/XAToBD/+aAToBEP/XAToBEf+aAToBEv/XAToBE/+aAToBFP/XAToBFf+aAToBF//DAToBGf/DAToBHf+uAToBIf+uAToBK//DAToBLf/DAToBL//DAToBMf/DAToBM//DAToBNf/DAToBPP/XAToBPv/XAToBQP/XAToBQ/+FAToBRP+aAToBRv+aAToBR//XAToBSP+aAToBSv+uAToCCP+FAToCDP+FAToCV//DAToCWP+FAToCWf+aAToCX//XAToCYP+aAToCYv/DAToDHf+FAToDHv+aAToDH/+FAToDIP+aAToDIf+FAToDIv+aAToDI/+FAToDJf+FAToDJv+aAToDJ/+FAToDKP+aAToDKf+FAToDKv+aAToDK/+FAToDLP+aAToDLf+FAToDLv+aAToDL/+FAToDMP+aAToDMf+FAToDMv+aAToDM/+FAToDNP+aAToDNv+aAToDOP+aAToDOv+aAToDPP+aAToDQP+aAToDQv+aAToDRP+aAToDSf/XAToDSv+aAToDS//XAToDTP+aAToDTf/XAToDTv+aAToDT//XAToDUf/XAToDUv+aAToDU//XAToDVP+aAToDVf/XAToDVv+aAToDV//XAToDWP+aAToDWf/XAToDWv+aAToDW//XAToDXP+aAToDXf/XAToDXv+aAToDX//XAToDYP+aAToDYv/DAToDZP/DAToDZv/DAToDaP/DAToDav/DAToDbP/DAToDbv/DATsAJv/sATsAKv/sATsAMv/sATsANP/sATsAif/sATsAlP/sATsAlf/sATsAlv/sATsAl//sATsAmP/sATsAmv/sATsAyP/sATsAyv/sATsAzP/sATsAzv/sATsA3v/sATsA4P/sATsA4v/sATsA5P/sATsBDv/sATsBEP/sATsBEv/sATsBFP/sATsBR//sATsCX//sATsDSf/sATsDS//sATsDTf/sATsDT//sATsDUf/sATsDU//sATsDVf/sATsDV//sATsDWf/sATsDW//sATsDXf/sATsDX//sAT0AJv/sAT0AKv/sAT0AMv/sAT0ANP/sAT0Aif/sAT0AlP/sAT0Alf/sAT0Alv/sAT0Al//sAT0AmP/sAT0Amv/sAT0AyP/sAT0Ayv/sAT0AzP/sAT0Azv/sAT0A3v/sAT0A4P/sAT0A4v/sAT0A5P/sAT0BDv/sAT0BEP/sAT0BEv/sAT0BFP/sAT0BR//sAT0CX//sAT0DSf/sAT0DS//sAT0DTf/sAT0DT//sAT0DUf/sAT0DU//sAT0DVf/sAT0DV//sAT0DWf/sAT0DW//sAT0DXf/sAT0DX//sAT8AJv/sAT8AKv/sAT8AMv/sAT8ANP/sAT8Aif/sAT8AlP/sAT8Alf/sAT8Alv/sAT8Al//sAT8AmP/sAT8Amv/sAT8AyP/sAT8Ayv/sAT8AzP/sAT8Azv/sAT8A3v/sAT8A4P/sAT8A4v/sAT8A5P/sAT8BDv/sAT8BEP/sAT8BEv/sAT8BFP/sAT8BR//sAT8CX//sAT8DSf/sAT8DS//sAT8DTf/sAT8DT//sAT8DUf/sAT8DU//sAT8DVf/sAT8DV//sAT8DWf/sAT8DW//sAT8DXf/sAT8DX//sAUMABf9xAUMACv9xAUMAJv/XAUMAKv/XAUMALQEKAUMAMv/XAUMANP/XAUMAN/9xAUMAOf+uAUMAOv+uAUMAPP+FAUMAif/XAUMAlP/XAUMAlf/XAUMAlv/XAUMAl//XAUMAmP/XAUMAmv/XAUMAn/+FAUMAyP/XAUMAyv/XAUMAzP/XAUMAzv/XAUMA3v/XAUMA4P/XAUMA4v/XAUMA5P/XAUMBDv/XAUMBEP/XAUMBEv/XAUMBFP/XAUMBJP9xAUMBJv9xAUMBNv+uAUMBOP+FAUMBOv+FAUMBR//XAUMB+v+uAUMB/P+uAUMB/v+uAUMCAP+FAUMCB/9xAUMCC/9xAUMCX//XAUMDSf/XAUMDS//XAUMDTf/XAUMDT//XAUMDUf/XAUMDU//XAUMDVf/XAUMDV//XAUMDWf/XAUMDW//XAUMDXf/XAUMDX//XAUMDb/+FAUMDcf+FAUMDc/+FAUMDj/9xAUQABf/sAUQACv/sAUQCB//sAUQCC//sAUUALQB7AUcAD/+uAUcAEf+uAUcAJP/XAUcAN//DAUcAOf/sAUcAOv/sAUcAO//XAUcAPP/sAUcAPf/sAUcAgv/XAUcAg//XAUcAhP/XAUcAhf/XAUcAhv/XAUcAh//XAUcAn//sAUcAwv/XAUcAxP/XAUcAxv/XAUcBJP/DAUcBJv/DAUcBNv/sAUcBOP/sAUcBOv/sAUcBO//sAUcBPf/sAUcBP//sAUcBQ//XAUcBoP/sAUcB+v/sAUcB/P/sAUcB/v/sAUcCAP/sAUcCCP+uAUcCDP+uAUcCWP/XAUcDHf/XAUcDH//XAUcDIf/XAUcDI//XAUcDJf/XAUcDJ//XAUcDKf/XAUcDK//XAUcDLf/XAUcDL//XAUcDMf/XAUcDM//XAUcDb//sAUcDcf/sAUcDc//sAUcDj//DAVYABf9xAVYACv9xAVYBZv/XAVYBbf/XAVYBcf9xAVYBcv+FAVYBc//XAVYBdf+uAVYBeP+FAVYCB/9xAVYCC/9xAVYCVP+FAVsAD/+uAVsAEf+uAVsBVv/XAVsBX//XAVsBYv/XAVsBZP/sAVsBaf/XAVsBcP/sAVsBcf/DAVsBcv/sAVsBdP/XAVsBdf/sAVsBeP/sAVsBiP/sAVsCCP+uAVsCDP+uAVsCVP/sAVwAD/+FAVwAEf+FAVwBVv+FAVwBX/+FAVwBYv+FAVwBZv/XAVwBaf+FAVwBbf/XAVwBc//DAVwBdv/sAVwBef+aAVwBev+uAVwBe//DAVwBfP/DAVwBff/DAVwBfv+aAVwBgf/DAVwBgv+uAVwBhP/DAVwBhv/DAVwBh//DAVwBif/DAVwBjP+aAVwBjv+aAVwBj/+aAVwBkP+aAVwBkv/DAVwBk/+aAVwBlf/DAVwBlv/DAVwBmP/DAVwBmf+aAVwBmv/DAVwBm//DAVwCCP+FAVwCDP+FAVwCIf/sAV0Bcf/XAV0Bcv/sAV0BeP/sAV0CVP/sAV4ABf/XAV4ACv/XAV4CB//XAV4CC//XAV8ABf9xAV8ACv9xAV8BZv/XAV8Bbf/XAV8Bcf9xAV8Bcv+FAV8Bc//XAV8Bdf+uAV8BeP+FAV8CB/9xAV8CC/9xAV8CVP+FAWAAD/+uAWAAEf+uAWABVv/XAWABX//XAWABYv/XAWABaf/XAWABdP/XAWACCP+uAWACDP+uAWEAD/+FAWEAEP+uAWEAEf+FAWEBVv9cAWEBX/9cAWEBYv9cAWEBZv/DAWEBaf9cAWEBbf/DAWEBc/+aAWEBdv/DAWEBef9xAWEBev+aAWEBe/+aAWEBfP+uAWEBff+aAWEBfv9xAWEBgP/XAWEBgf/DAWEBgv+aAWEBhP+aAWEBhv+uAWEBh/+aAWEBif+aAWEBiv/XAWEBjP9xAWEBjv+aAWEBj/9xAWEBkP9xAWEBkv+aAWEBk/9xAWEBlP/XAWEBlf+aAWEBlv+aAWEBmP+aAWEBmf9xAWEBmv+aAWEBm/+aAWECAv+uAWECA/+uAWECBP+uAWECCP+FAWECDP+FAWECIf/DAWECU//XAWIABf9xAWIACv9xAWIBZv/XAWIBbf/XAWIBcf9xAWIBcv+FAWIBc//XAWIBdf+uAWIBeP+FAWICB/9xAWICC/9xAWICVP+FAWQBZv/sAWQBbf/sAWQBc//DAWYAD/+uAWYAEf+uAWYBVv/XAWYBX//XAWYBYv/XAWYBZP/sAWYBaf/XAWYBcP/sAWYBcf/DAWYBcv/sAWYBdP/XAWYBdf/sAWYBeP/sAWYBiP/sAWYCCP+uAWYCDP+uAWYCVP/sAWgBZv/XAWgBbf/XAWgBc//DAWgBjf/sAWgBkf/sAWkABf9xAWkACv9xAWkBZv/XAWkBbf/XAWkBcf9xAWkBcv+FAWkBc//XAWkBdf+uAWkBeP+FAWkCB/9xAWkCC/9xAWkCVP+FAW0AD/+uAW0AEf+uAW0BVv/XAW0BX//XAW0BYv/XAW0BZP/sAW0Baf/XAW0BcP/sAW0Bcf/DAW0Bcv/sAW0BdP/XAW0Bdf/sAW0BeP/sAW0BiP/sAW0CCP+uAW0CDP+uAW0CVP/sAW8AD/72AW8AEf72AW8BVv+aAW8BX/+aAW8BYv+aAW8BZP/sAW8Baf+aAW8BdP/XAW8BiP/XAW8CCP72AW8CDP72AXEAD/+FAXEAEP+uAXEAEf+FAXEBVv9cAXEBX/9cAXEBYv9cAXEBZv/DAXEBaf9cAXEBbf/DAXEBc/+aAXEBdv/DAXEBef9xAXEBev+aAXEBe/+aAXEBfP+uAXEBff+aAXEBfv9xAXEBgP/XAXEBgf/DAXEBgv+aAXEBhP+aAXEBhv+uAXEBh/+aAXEBif+aAXEBiv/XAXEBjP9xAXEBjv+aAXEBj/9xAXEBkP9xAXEBkv+aAXEBk/9xAXEBlP/XAXEBlf+aAXEBlv+aAXEBmP+aAXEBmf9xAXEBmv+aAXEBm/+aAXECAv+uAXECA/+uAXECBP+uAXECCP+FAXECDP+FAXECIf/DAXECU//XAXIAD/+FAXIAEf+FAXIBVv+FAXIBX/+FAXIBYv+FAXIBZv/XAXIBaf+FAXIBbf/XAXIBc//DAXIBdv/sAXIBef+aAXIBev+uAXIBe//DAXIBfP/DAXIBff/DAXIBfv+aAXIBgf/DAXIBgv+uAXIBhP/DAXIBhv/DAXIBh//DAXIBif/DAXIBjP+aAXIBjv+aAXIBj/+aAXIBkP+aAXIBkv/DAXIBk/+aAXIBlf/DAXIBlv/DAXIBmP/DAXIBmf+aAXIBmv/DAXIBm//DAXICCP+FAXICDP+FAXICIf/sAXMAD/+aAXMAEf+aAXMBVv/XAXMBX//XAXMBYv/XAXMBZP/DAXMBaf/XAXMBcP/sAXMBcf+uAXMBcv/DAXMBdP/sAXMBeP/DAXMBiP/sAXMCCP+aAXMCDP+aAXMCVP/DAXQBZv/XAXQBbf/XAXQBc//DAXQBjf/sAXQBkf/sAXUAD/+FAXUAEf+FAXUBVv+uAXUBX/+uAXUBYv+uAXUBZv/sAXUBaf+uAXUBbf/sAXUCCP+FAXUCDP+FAXYBcf/XAXYBcv/sAXYBeP/sAXYCVP/sAXgAD/+FAXgAEf+FAXgBVv+FAXgBX/+FAXgBYv+FAXgBZv/XAXgBaf+FAXgBbf/XAXgBc//DAXgBdv/sAXgBef+aAXgBev+uAXgBe//DAXgBfP/DAXgBff/DAXgBfv+aAXgBgf/DAXgBgv+uAXgBhP/DAXgBhv/DAXgBh//DAXgBif/DAXgBjP+aAXgBjv+aAXgBj/+aAXgBkP+aAXgBkv/DAXgBk/+aAXgBlf/DAXgBlv/DAXgBmP/DAXgBmf+aAXgBmv/DAXgBm//DAXgCCP+FAXgCDP+FAXgCIf/sAXkBiAApAXsABf/sAXsACv/sAXsCB//sAXsCC//sAXwABf+uAXwACv+uAXwBjf/sAXwBkf/sAXwCB/+uAXwCC/+uAX4BiAApAYAAD/+uAYAAEf+uAYABiP/sAYACCP+uAYACDP+uAYMAEP+aAYMBef/XAYMBfv/XAYMBgf/XAYMBjP/XAYMBjf/XAYMBj//XAYMBkP/XAYMBkf/XAYMBk//XAYMBmf/XAYMCAv+aAYMCA/+aAYMCBP+aAYQABf/sAYQACv/sAYQCB//sAYQCC//sAYUAD//XAYUAEf/XAYUCCP/XAYUCDP/XAYYABf+uAYYACv+uAYYBjf/sAYYBkf/sAYYCB/+uAYYCC/+uAYcBef/XAYcBfv/XAYcBjP/XAYcBj//XAYcBkP/XAYcBk//XAYcBmf/XAYgABf+FAYgACv+FAYgBef/sAYgBfv/sAYgBgP/XAYgBiv/XAYgBjP/sAYgBjf/XAYgBj//sAYgBkP/sAYgBkf/XAYgBk//sAYgBmf/sAYgCB/+FAYgCC/+FAYoAD/+uAYoAEf+uAYoBiP/sAYoCCP+uAYoCDP+uAYwABf/sAYwACv/sAYwBgP/XAYwBiv/XAYwCB//sAYwCC//sAY4ABf/sAY4ACv/sAY4BgP/XAY4Biv/XAY4CB//sAY4CC//sAZAAD//sAZAAEf/sAZACCP/sAZACDP/sAZMABf/sAZMACv/sAZMBgP/XAZMBiv/XAZMCB//sAZMCC//sAZQAD//DAZQAEP/XAZQAEf/DAZQBef/XAZQBfv/XAZQBgf/XAZQBjP/XAZQBj//XAZQBkP/XAZQBk//XAZQBmf/XAZQCAv/XAZQCA//XAZQCBP/XAZQCCP/DAZQCDP/DAZcABf/XAZcACv/XAZcCB//XAZcCC//XAZkABf/sAZkACv/sAZkBgP/XAZkBiv/XAZkCB//sAZkCC//sAZ0ABf+uAZ0ACv+uAZ0Bnf+FAZ0Bpv+FAZ0BqP/XAZ0BvP+aAZ0Bvf/XAZ0Bwf+aAZ0BxP+FAZ0B3P/XAZ0B3f/XAZ0B4f/XAZ0B5P/XAZ0B9v/XAZ0CB/+uAZ0CC/+uAZ0Cbv+uAZ0CfP+aAZ0CgP+uAZ0Cgv+uAZ0Cl/+uAZ0Cm/+uAZ0Cp/+uAZ0Cqf+FAZ0Cqv/XAZ0Ctf+aAZ0Ctv/XAZ0Ct/+aAZ0CuP/XAZ0Cuf+aAZ0Cuv/XAZ0Cvf+FAZ0Cvv/XAZ0Cv/+aAZ0CwP/XAZ0Cwf+aAZ0Cwv/XAZ0C1P+aAZ0C1f/XAZ0C9//XAZ0C+P/XAZ0C+f/XAZ0C+v/XAZ0C+//XAZ0C/P/XAZ0C/f+aAZ0C/v/XAZ0DA/+uAZ0DDf+aAZ0DDv/DAZ0DD/+aAZ0DEP/DAZ0DF/+FAZ0DGP/XAZ4AD/+FAZ4AEP+uAZ4AEf+FAZ4Bn//XAZ4BpP+aAZ4Bqv9xAZ4Brv+aAZ4Btf+aAZ4BuP/XAZ4Bu//XAZ4BvAApAZ4Bvv+uAZ4BzP+aAZ4Bzf+aAZ4Bzv+FAZ4Bz/9xAZ4B0P/XAZ4B0f/XAZ4B0v+aAZ4B0/+aAZ4B1P+aAZ4B1f+FAZ4B1v+aAZ4B1/+aAZ4B2P9xAZ4B2f+aAZ4B2v+aAZ4B2/9xAZ4B3P+uAZ4B3f+uAZ4B3v9xAZ4B3//XAZ4B4P+aAZ4B4f+aAZ4B4v+aAZ4B4/+aAZ4B5P+uAZ4B5f+aAZ4B5v+aAZ4B5//XAZ4B6P+aAZ4B6f/DAZ4B6v9xAZ4B7P+aAZ4B7f9xAZ4B7v+FAZ4B8v+FAZ4B8/+aAZ4B9f+aAZ4B9v+uAZ4B9/+aAZ4B+f+aAZ4CAv+uAZ4CA/+uAZ4CBP+uAZ4CCP+FAZ4CDP+FAZ4Cav9xAZ4Ca/+aAZ4CbP/XAZ4Cbf/XAZ4Ccf+aAZ4Ccv9xAZ4Cc/+FAZ4Cdf+aAZ4Cd/+aAZ4Cef+aAZ4Cff+aAZ4Cfv/XAZ4Cf/9xAZ4Cgf/XAZ4Cg//XAZ4ChP/XAZ4Chf9xAZ4Chv/XAZ4Ch/9xAZ4CiP/XAZ4Cif9xAZ4Civ/XAZ4Ci//XAZ4CjP/XAZ4Cjf9xAZ4Clv+aAZ4Cmv+aAZ4Cnv+aAZ4CoP/XAZ4Cov/XAZ4CpP+aAZ4Cpv+aAZ4Cqv+uAZ4CrP+aAZ4Crv+aAZ4CsP+aAZ4Csf/XAZ4Csv9xAZ4Cs//XAZ4CtP9xAZ4CtQApAZ4Ctv+uAZ4CuP+uAZ4Cuv+uAZ4CvP/XAZ4Cvv+uAZ4CwP+aAZ4Cwv+aAZ4CxP+aAZ4Cxf+aAZ4Cxv9xAZ4Cx/+aAZ4CyP9xAZ4Cy//XAZ4Czf+aAZ4Czv+aAZ4Cz/+FAZ4C0f+aAZ4C0/+aAZ4C1f+aAZ4C1/+aAZ4C2f9xAZ4C2/9xAZ4C3f9xAZ4C4P9xAZ4C5v/XAZ4C6P/XAZ4C6v/DAZ4C7P+aAZ4C7v+aAZ4C7//XAZ4C8P9xAZ4C8f/XAZ4C8v9xAZ4C8//XAZ4C9P9xAZ4C9v/XAZ4C+P+uAZ4C+v+uAZ4C/P+uAZ4C/v+aAZ4DAP+aAZ4DAv+aAZ4DBv/XAZ4DCP/XAZ4DCf9xAZ4DCv9xAZ4DC/9xAZ4DDP9xAZ4DDv+aAZ4DEP+aAZ4DEf+aAZ4DEv+FAZ4DFP+aAZ4DFf/XAZ4DFv9xAZ4DGP+uAZ4DGv9xAZ4DG/+aAZ4DHP+FAZ8Bn//XAZ8BuP/XAZ8Bu//XAZ8Bvv/XAZ8B4f/XAZ8CbP/XAZ8Cfv/XAZ8ChP/XAZ8Chv/XAZ8CiP/XAZ8Civ/XAZ8CjP/XAZ8Csf/XAZ8Cs//XAZ8CwP/XAZ8Cwv/XAZ8Cxf/XAZ8Cx//XAZ8C1f/XAZ8C7//XAZ8C8f/XAZ8C8//XAZ8C/v/XAZ8DCf/XAZ8DC//XAZ8DDv/XAZ8DEP/XAZ8DFf/XAaADDv/XAaADEP/XAaQABf+uAaQACv+uAaQBnf+FAaQBpv+FAaQBqP/XAaQBvP+aAaQBvf/XAaQBwf+aAaQBxP+FAaQB3P/XAaQB3f/XAaQB4f/XAaQB5P/XAaQB9v/XAaQCB/+uAaQCC/+uAaQCbv+uAaQCfP+aAaQCgP+uAaQCgv+uAaQCl/+uAaQCm/+uAaQCp/+uAaQCqf+FAaQCqv/XAaQCtf+aAaQCtv/XAaQCt/+aAaQCuP/XAaQCuf+aAaQCuv/XAaQCvf+FAaQCvv/XAaQCv/+aAaQCwP/XAaQCwf+aAaQCwv/XAaQC1P+aAaQC1f/XAaQC9//XAaQC+P/XAaQC+f/XAaQC+v/XAaQC+//XAaQC/P/XAaQC/f+aAaQC/v/XAaQDA/+uAaQDDf+aAaQDDv/DAaQDD/+aAaQDEP/DAaQDF/+FAaQDGP/XAaUABf+uAaUACv+uAaUBnf+FAaUBpv+FAaUBqP/XAaUBvP+aAaUBvf/XAaUBwf+aAaUBxP+FAaUB3P/XAaUB3f/XAaUB4f/XAaUB5P/XAaUB9v/XAaUCB/+uAaUCC/+uAaUCbv+uAaUCfP+aAaUCgP+uAaUCgv+uAaUCl/+uAaUCm/+uAaUCp/+uAaUCqf+FAaUCqv/XAaUCtf+aAaUCtv/XAaUCt/+aAaUCuP/XAaUCuf+aAaUCuv/XAaUCvf+FAaUCvv/XAaUCv/+aAaUCwP/XAaUCwf+aAaUCwv/XAaUC1P+aAaUC1f/XAaUC9//XAaUC+P/XAaUC+f/XAaUC+v/XAaUC+//XAaUC/P/XAaUC/f+aAaUC/v/XAaUDA/+uAaUDDf+aAaUDDv/DAaUDD/+aAaUDEP/DAaUDF/+FAaUDGP/XAaYABf+uAaYACv+uAaYBnf+FAaYBpv+FAaYBqP/XAaYBvP+aAaYBvf/XAaYBwf+aAaYBxP+FAaYB3P/XAaYB3f/XAaYB4f/XAaYB5P/XAaYB9v/XAaYCB/+uAaYCC/+uAaYCbv+uAaYCfP+aAaYCgP+uAaYCgv+uAaYCl/+uAaYCm/+uAaYCp/+uAaYCqf+FAaYCqv/XAaYCtf+aAaYCtv/XAaYCt/+aAaYCuP/XAaYCuf+aAaYCuv/XAaYCvf+FAaYCvv/XAaYCv/+aAaYCwP/XAaYCwf+aAaYCwv/XAaYC1P+aAaYC1f/XAaYC9//XAaYC+P/XAaYC+f/XAaYC+v/XAaYC+//XAaYC/P/XAaYC/f+aAaYC/v/XAaYDA/+uAaYDDf+aAaYDDv/DAaYDD/+aAaYDEP/DAaYDF/+FAaYDGP/XAacBn//XAacBuP/XAacBu//XAacBvv/XAacBwf/XAacB4f/XAacCbP/XAacCfP/XAacCfv/XAacChP/XAacChv/XAacCiP/XAacCiv/XAacCjP/XAacCsf/XAacCs//XAacCv//XAacCwP/XAacCwf/XAacCwv/XAacCxf+aAacCx/+aAacC1P/XAacC1f/XAacC7//XAacC8f/XAacC8//XAacC/f/XAacC/v/XAacDCf/XAacDC//XAacDDv/XAacDEP/XAacDFf/XAacDGf/sAagAD/+FAagAEf+FAagBn//sAagBpP+aAagBqv9xAagBrv+aAagBtf+aAagBuP/sAagBu//sAagBvv/DAagByf/sAagBzv+uAagBz//XAagB1f+uAagB2P/XAagB2//XAagB3v/XAagB4f/XAagB6v/XAagB6wBmAagB7f/XAagB7v/sAagB8v+uAagB9ABmAagCCP+FAagCDP+FAagCav/XAagCbP/sAagCcv9xAagCc/+uAagCfv/sAagCf//XAagChP/sAagChf/XAagChv/sAagCh//XAagCiP/sAagCif/XAagCiv/sAagCjP/sAagCjf/XAagCmABmAagCqABmAagCsf/sAagCsv/XAagCs//sAagCtP/XAagCwP/XAagCwv/XAagCxf/XAagCxv/DAagCx//XAagCyP/DAagCzv+aAagCz/+uAagC1f/XAagC2f9xAagC2/9xAagC3f9xAagC4P/XAagC7//sAagC8P/XAagC8f/sAagC8v/XAagC8//sAagC9P/XAagC/v/XAagDCf9xAagDCv/XAagDC/9xAagDDP/XAagDEf+aAagDEv+uAagDFf/sAagDFv/XAagDGv/XAagDG/+aAagDHP+uAaoABf9xAaoACv9xAaoBnf+aAaoBpv+aAaoBvP9xAaoBvv/XAaoBwf+aAaoBxP+aAaoB3P/XAaoB4f/XAaoB5P/XAaoCB/9xAaoCC/9xAaoCbv/XAaoCfP+aAaoCgP+uAaoCgv+uAaoCl//XAaoCm//XAaoCp//XAaoCqf+aAaoCqv/XAaoCtf9xAaoCtv/XAaoCt/+FAaoCuf+FAaoCvf+aAaoCvv/XAaoCv/+aAaoCwP/XAaoCwf+aAaoCwv/XAaoCxf+aAaoCx/+aAaoC1P+aAaoC1f/XAaoC4f/XAaoC4//XAaoC/f+aAaoC/v/XAaoDA//XAaoDDf9xAaoDDv/XAaoDD/9xAaoDEP/XAaoDF/+aAaoDGP/XAasABf/XAasACv/XAasBqv/sAasBwf/XAasCB//XAasCC//XAasCcv/sAasCfP/XAasCv//XAasCwf/XAasCxf/XAasCx//XAasC1P/XAasC2f/sAasC2//sAasC3f/sAasC/f/XAawAD/+uAawAEf+uAawCCP+uAawCDP+uAawCgP/sAawCgv/sAawCt//sAawCuf/sAawDDf/XAawDD//XAa0AD/+FAa0AEP+uAa0AEf+FAa0Bn//XAa0BpP+aAa0Bqv9xAa0Brv+aAa0Btf+aAa0BuP/XAa0Bu//XAa0BvAApAa0Bvv+uAa0BzP+aAa0Bzf+aAa0Bzv+FAa0Bz/9xAa0B0P/XAa0B0f/XAa0B0v+aAa0B0/+aAa0B1P+aAa0B1f+FAa0B1v+aAa0B1/+aAa0B2P9xAa0B2f+aAa0B2v+aAa0B2/9xAa0B3P+uAa0B3f+uAa0B3v9xAa0B3//XAa0B4P+aAa0B4f+aAa0B4v+aAa0B4/+aAa0B5P+uAa0B5f+aAa0B5v+aAa0B5//XAa0B6P+aAa0B6f/DAa0B6v9xAa0B7P+aAa0B7f9xAa0B7v+FAa0B8v+FAa0B8/+aAa0B9f+aAa0B9v+uAa0B9/+aAa0B+f+aAa0CAv+uAa0CA/+uAa0CBP+uAa0CCP+FAa0CDP+FAa0Cav9xAa0Ca/+aAa0CbP/XAa0Cbf/XAa0Ccf+aAa0Ccv9xAa0Cc/+FAa0Cdf+aAa0Cd/+aAa0Cef+aAa0Cff+aAa0Cfv/XAa0Cf/9xAa0Cgf/XAa0Cg//XAa0ChP/XAa0Chf9xAa0Chv/XAa0Ch/9xAa0CiP/XAa0Cif9xAa0Civ/XAa0Ci//XAa0CjP/XAa0Cjf9xAa0Clv+aAa0Cmv+aAa0Cnv+aAa0CoP/XAa0Cov/XAa0CpP+aAa0Cpv+aAa0Cqv+uAa0CrP+aAa0Crv+aAa0CsP+aAa0Csf/XAa0Csv9xAa0Cs//XAa0CtP9xAa0CtQApAa0Ctv+uAa0CuP+uAa0Cuv+uAa0CvP/XAa0Cvv+uAa0CwP+aAa0Cwv+aAa0CxP+aAa0Cxf+aAa0Cxv9xAa0Cx/+aAa0CyP9xAa0Cy//XAa0Czf+aAa0Czv+aAa0Cz/+FAa0C0f+aAa0C0/+aAa0C1f+aAa0C1/+aAa0C2f9xAa0C2/9xAa0C3f9xAa0C4P9xAa0C5v/XAa0C6P/XAa0C6v/DAa0C7P+aAa0C7v+aAa0C7//XAa0C8P9xAa0C8f/XAa0C8v9xAa0C8//XAa0C9P9xAa0C9v/XAa0C+P+uAa0C+v+uAa0C/P+uAa0C/v+aAa0DAP+aAa0DAv+aAa0DBv/XAa0DCP/XAa0DCf9xAa0DCv9xAa0DC/9xAa0DDP9xAa0DDv+aAa0DEP+aAa0DEf+aAa0DEv+FAa0DFP+aAa0DFf/XAa0DFv9xAa0DGP+uAa0DGv9xAa0DG/+aAa0DHP+FAa4BowDhAa4C6gApAa4DDv/XAa4DEP/XAbABn//XAbABuP/XAbABu//XAbABvv/XAbABwf/XAbAB4f/XAbACbP/XAbACfP/XAbACfv/XAbAChP/XAbAChv/XAbACiP/XAbACiv/XAbACjP/XAbACsf/XAbACs//XAbACv//XAbACwP/XAbACwf/XAbACwv/XAbACxf+aAbACx/+aAbAC1P/XAbAC1f/XAbAC7//XAbAC8f/XAbAC8//XAbAC/f/XAbAC/v/XAbADCf/XAbADC//XAbADDv/XAbADEP/XAbADFf/XAbADGf/sAbEAD/+uAbEAEf+uAbECCP+uAbECDP+uAbECgP/sAbECgv/sAbECt//sAbECuf/sAbEDDf/XAbEDD//XAbQBn//XAbQBuP/XAbQBu//XAbQBvv/XAbQBwf/XAbQB4f/XAbQCbP/XAbQCfP/XAbQCfv/XAbQChP/XAbQChv/XAbQCiP/XAbQCiv/XAbQCjP/XAbQCsf/XAbQCs//XAbQCv//XAbQCwP/XAbQCwf/XAbQCwv/XAbQCxf+aAbQCx/+aAbQC1P/XAbQC1f/XAbQC7//XAbQC8f/XAbQC8//XAbQC/f/XAbQC/v/XAbQDCf/XAbQDC//XAbQDDv/XAbQDEP/XAbQDFf/XAbQDGf/sAbgAD/+uAbgAEf+uAbgBnf/sAbgBpP/XAbgBpv/sAbgBqP/XAbgBqv/XAbgBrv/XAbgBsP/XAbgBsf/sAbgBtf/XAbgBvP/DAbgBvf/XAbgBv//XAbgBwf/XAbgBxP/sAbgBx//sAbgBzv/sAbgB1f/sAbgB8v/sAbgCCP+uAbgCDP+uAbgCcv/XAbgCc//sAbgCev/sAbgCfP/XAbgCgP/sAbgCgv/sAbgCn//XAbgCof/sAbgCqf/sAbgCtf/DAbgCt//sAbgCuf/sAbgCu//XAbgCvf/sAbgCv//XAbgCwf/XAbgCyv/XAbgCzv/XAbgCz//sAbgC1P/XAbgC2f/XAbgC2//XAbgC3f/XAbgC5f/XAbgC5//sAbgC9f/sAbgC9//XAbgC+f/XAbgC+//XAbgC/f/XAbgDBf/XAbgDB//XAbgDDf/XAbgDD//XAbgDEf/XAbgDEv/sAbgDF//sAbgDG//XAbgDHP/sAboAD/72AboAEf72AboBpP+FAboBqv+aAboBrv+FAboBsP/XAboBtf+FAboBv//XAboBzv+aAboB1f+aAboB8v+aAboCCP72AboCDP72AboCcv+aAboCc/+aAboCdv/sAboCn//XAboCu//XAboCyv/XAboCzv+FAboCz/+aAboC2f+aAboC2/+aAboC3f+aAboC5f/XAboDBf/XAboDB//XAboDCf+uAboDC/+uAboDEf+FAboDEv+aAboDG/+FAboDHP+aAbsBn//XAbsBuP/XAbsBu//XAbsBvv/XAbsB4f/XAbsCbP/XAbsCfv/XAbsChP/XAbsChv/XAbsCiP/XAbsCiv/XAbsCjP/XAbsCsf/XAbsCs//XAbsCwP/XAbsCwv/XAbsCxf/XAbsCx//XAbsC1f/XAbsC7//XAbsC8f/XAbsC8//XAbsC/v/XAbsDCf/XAbsDC//XAbsDDv/XAbsDEP/XAbsDFf/XAbwAD/+FAbwAEP+uAbwAEf+FAbwBn//XAbwBpP+aAbwBqv9xAbwBrv+aAbwBtf+aAbwBuP/XAbwBu//XAbwBvAApAbwBvv+uAbwBzP+aAbwBzf+aAbwBzv+FAbwBz/9xAbwB0P/XAbwB0f/XAbwB0v+aAbwB0/+aAbwB1P+aAbwB1f+FAbwB1v+aAbwB1/+aAbwB2P9xAbwB2f+aAbwB2v+aAbwB2/9xAbwB3P+uAbwB3f+uAbwB3v9xAbwB3//XAbwB4P+aAbwB4f+aAbwB4v+aAbwB4/+aAbwB5P+uAbwB5f+aAbwB5v+aAbwB5//XAbwB6P+aAbwB6f/DAbwB6v9xAbwB7P+aAbwB7f9xAbwB7v+FAbwB8v+FAbwB8/+aAbwB9f+aAbwB9v+uAbwB9/+aAbwB+f+aAbwCAv+uAbwCA/+uAbwCBP+uAbwCCP+FAbwCDP+FAbwCav9xAbwCa/+aAbwCbP/XAbwCbf/XAbwCcf+aAbwCcv9xAbwCc/+FAbwCdf+aAbwCd/+aAbwCef+aAbwCff+aAbwCfv/XAbwCf/9xAbwCgf/XAbwCg//XAbwChP/XAbwChf9xAbwChv/XAbwCh/9xAbwCiP/XAbwCif9xAbwCiv/XAbwCi//XAbwCjP/XAbwCjf9xAbwClv+aAbwCmv+aAbwCnv+aAbwCoP/XAbwCov/XAbwCpP+aAbwCpv+aAbwCqv+uAbwCrP+aAbwCrv+aAbwCsP+aAbwCsf/XAbwCsv9xAbwCs//XAbwCtP9xAbwCtQApAbwCtv+uAbwCuP+uAbwCuv+uAbwCvP/XAbwCvv+uAbwCwP+aAbwCwv+aAbwCxP+aAbwCxf+aAbwCxv9xAbwCx/+aAbwCyP9xAbwCy//XAbwCzf+aAbwCzv+aAbwCz/+FAbwC0f+aAbwC0/+aAbwC1f+aAbwC1/+aAbwC2f9xAbwC2/9xAbwC3f9xAbwC4P9xAbwC5v/XAbwC6P/XAbwC6v/DAbwC7P+aAbwC7v+aAbwC7//XAbwC8P9xAbwC8f/XAbwC8v9xAbwC8//XAbwC9P9xAbwC9v/XAbwC+P+uAbwC+v+uAbwC/P+uAbwC/v+aAbwDAP+aAbwDAv+aAbwDBv/XAbwDCP/XAbwDCf9xAbwDCv9xAbwDC/9xAbwDDP9xAbwDDv+aAbwDEP+aAbwDEf+aAbwDEv+FAbwDFP+aAbwDFf/XAbwDFv9xAbwDGP+uAbwDGv9xAbwDG/+aAbwDHP+FAb0AD/+FAb0AEf+FAb0Bn//sAb0BpP+aAb0Bqv9xAb0Brv+aAb0Btf+aAb0BuP/sAb0Bu//sAb0Bvv/DAb0Byf/sAb0Bzv+uAb0Bz//XAb0B1f+uAb0B2P/XAb0B2//XAb0B3v/XAb0B4f/XAb0B6v/XAb0B6wBmAb0B7f/XAb0B7v/sAb0B8v+uAb0B9ABmAb0CCP+FAb0CDP+FAb0Cav/XAb0CbP/sAb0Ccv9xAb0Cc/+uAb0Cfv/sAb0Cf//XAb0ChP/sAb0Chf/XAb0Chv/sAb0Ch//XAb0CiP/sAb0Cif/XAb0Civ/sAb0CjP/sAb0Cjf/XAb0CmABmAb0CqABmAb0Csf/sAb0Csv/XAb0Cs//sAb0CtP/XAb0CwP/XAb0Cwv/XAb0Cxf/XAb0Cxv/DAb0Cx//XAb0CyP/DAb0Czv+aAb0Cz/+uAb0C1f/XAb0C2f9xAb0C2/9xAb0C3f9xAb0C4P/XAb0C7//sAb0C8P/XAb0C8f/sAb0C8v/XAb0C8//sAb0C9P/XAb0C/v/XAb0DCf9xAb0DCv/XAb0DC/9xAb0DDP/XAb0DEf+aAb0DEv+uAb0DFf/sAb0DFv/XAb0DGv/XAb0DG/+aAb0DHP+uAb4AD/+uAb4AEf+uAb4Bnf/XAb4BpP/XAb4Bpv/XAb4BqP/DAb4Bqv/XAb4Brv/XAb4BsP/XAb4Bsf/XAb4Btf/XAb4BvP/DAb4Bvf/DAb4Bv//XAb4BxP/XAb4Bx//XAb4Bzv/sAb4B1f/sAb4B8v/sAb4CCP+uAb4CDP+uAb4Ccv/XAb4Cc//sAb4Cev/XAb4CgP/sAb4Cgv/sAb4Cn//XAb4Cof/XAb4Cqf/XAb4Ctf/DAb4Ct//DAb4Cuf/DAb4Cu//XAb4Cvf/XAb4Cyv/XAb4Czv/XAb4Cz//sAb4C2f/XAb4C2//XAb4C3f/XAb4C5f/XAb4C5//XAb4C9f/XAb4C9//DAb4C+f/DAb4C+//DAb4DBf/XAb4DB//XAb4DDf/XAb4DD//XAb4DEf/XAb4DEv/sAb4DF//XAb4DG//XAb4DHP/sAb8Bn//XAb8BuP/XAb8Bu//XAb8Bvv/XAb8Bwf/XAb8B4f/XAb8CbP/XAb8CfP/XAb8Cfv/XAb8ChP/XAb8Chv/XAb8CiP/XAb8Civ/XAb8CjP/XAb8Csf/XAb8Cs//XAb8Cv//XAb8CwP/XAb8Cwf/XAb8Cwv/XAb8Cxf+aAb8Cx/+aAb8C1P/XAb8C1f/XAb8C7//XAb8C8f/XAb8C8//XAb8C/f/XAb8C/v/XAb8DCf/XAb8DC//XAb8DDv/XAb8DEP/XAb8DFf/XAb8DGf/sAcABowDhAcAC6gApAcADDv/XAcADEP/XAcMBowDhAcMC6gApAcMDDv/XAcMDEP/XAcQABf+uAcQACv+uAcQBnf+FAcQBpv+FAcQBqP/XAcQBvP+aAcQBvf/XAcQBwf+aAcQBxP+FAcQB3P/XAcQB3f/XAcQB4f/XAcQB5P/XAcQB9v/XAcQCB/+uAcQCC/+uAcQCbv+uAcQCfP+aAcQCgP+uAcQCgv+uAcQCl/+uAcQCm/+uAcQCp/+uAcQCqf+FAcQCqv/XAcQCtf+aAcQCtv/XAcQCt/+aAcQCuP/XAcQCuf+aAcQCuv/XAcQCvf+FAcQCvv/XAcQCv/+aAcQCwP/XAcQCwf+aAcQCwv/XAcQC1P+aAcQC1f/XAcQC9//XAcQC+P/XAcQC+f/XAcQC+v/XAcQC+//XAcQC/P/XAcQC/f+aAcQC/v/XAcQDA/+uAcQDDf+aAcQDDv/DAcQDD/+aAcQDEP/DAcQDF/+FAcQDGP/XAcYABf+uAcYACv+uAcYBnf+FAcYBpv+FAcYBqP/XAcYBvP+aAcYBvf/XAcYBwf+aAcYBxP+FAcYB3P/XAcYB3f/XAcYB4f/XAcYB5P/XAcYB9v/XAcYCB/+uAcYCC/+uAcYCbv+uAcYCfP+aAcYCgP+uAcYCgv+uAcYCl/+uAcYCm/+uAcYCp/+uAcYCqf+FAcYCqv/XAcYCtf+aAcYCtv/XAcYCt/+aAcYCuP/XAcYCuf+aAcYCuv/XAcYCvf+FAcYCvv/XAcYCv/+aAcYCwP/XAcYCwf+aAcYCwv/XAcYC1P+aAcYC1f/XAcYC9//XAcYC+P/XAcYC+f/XAcYC+v/XAcYC+//XAcYC/P/XAcYC/f+aAcYC/v/XAcYDA/+uAcYDDf+aAcYDDv/DAcYDD/+aAcYDEP/DAcYDF/+FAcYDGP/XAccAD/+uAccAEf+uAccBnf/sAccBpP/XAccBpv/sAccBqP/XAccBqv/XAccBrv/XAccBsP/XAccBsf/sAccBtf/XAccBvP/DAccBvf/XAccBv//XAccBwf/XAccBxP/sAccBx//sAccBzv/sAccB1f/sAccB8v/sAccCCP+uAccCDP+uAccCcv/XAccCc//sAccCev/sAccCfP/XAccCgP/sAccCgv/sAccCn//XAccCof/sAccCqf/sAccCtf/DAccCt//sAccCuf/sAccCu//XAccCvf/sAccCv//XAccCwf/XAccCyv/XAccCzv/XAccCz//sAccC1P/XAccC2f/XAccC2//XAccC3f/XAccC5f/XAccC5//sAccC9f/sAccC9//XAccC+f/XAccC+//XAccC/f/XAccDBf/XAccDB//XAccDDf/XAccDD//XAccDEf/XAccDEv/sAccDF//sAccDG//XAccDHP/sAcgAD/+uAcgAEf+uAcgBnf/sAcgBpP/XAcgBpv/sAcgBqP/XAcgBqv/XAcgBrv/XAcgBsP/XAcgBsf/sAcgBtf/XAcgBvP/DAcgBvf/XAcgBv//XAcgBwf/XAcgBxP/sAcgBx//sAcgBzv/sAcgB1f/sAcgB8v/sAcgCCP+uAcgCDP+uAcgCcv/XAcgCc//sAcgCev/sAcgCfP/XAcgCgP/sAcgCgv/sAcgCn//XAcgCof/sAcgCqf/sAcgCtf/DAcgCt//sAcgCuf/sAcgCu//XAcgCvf/sAcgCv//XAcgCwf/XAcgCyv/XAcgCzv/XAcgCz//sAcgC1P/XAcgC2f/XAcgC2//XAcgC3f/XAcgC5f/XAcgC5//sAcgC9f/sAcgC9//XAcgC+f/XAcgC+//XAcgC/f/XAcgDBf/XAcgDB//XAcgDDf/XAcgDD//XAcgDEf/XAcgDEv/sAcgDF//sAcgDG//XAcgDHP/sAcoABf/sAcoACv/sAcoCB//sAcoCC//sAcwB6QApAc0AD/+aAc0AEP/XAc0AEf+aAc0Bzv/DAc0Bz//sAc0B1f/DAc0B2P/sAc0B2//sAc0B3v/sAc0B6v/sAc0B7f/sAc0B8v/DAc0CAv/XAc0CA//XAc0CBP/XAc0CCP+aAc0CDP+aAc0Cav/sAc0Cc//DAc0Cf//sAc0Chf/sAc0Ch//sAc0Cif/sAc0Cjf/sAc0Csv/sAc0CtP/sAc0Cz//DAc0C4P/sAc0C8P/sAc0C8v/sAc0C9P/sAc0DCv/sAc0DDP/sAc0DEv/DAc0DFv/sAc0DGv/sAc0DHP/DAc4ABf/sAc4ACv/sAc4CB//sAc4CC//sAc8ABf/sAc8ACv/sAc8CB//sAc8CC//sAdABz//XAdAB2P/XAdAB2//XAdAB3v/XAdAB4f/XAdAB6v/XAdAB7f/XAdACav/XAdACf//XAdAChf/XAdACh//XAdACif/XAdACjf/XAdACsv/XAdACtP/XAdACwP/XAdACwv/XAdACxv/XAdACyP/XAdAC1f/XAdAC4P/XAdAC8P/XAdAC8v/XAdAC9P/XAdAC/v/XAdADCv/XAdADDP/XAdADFv/XAdADGv/XAdEB6QApAdQBz//XAdQB2P/XAdQB2//XAdQB3v/XAdQB4f/XAdQB6v/XAdQB7f/XAdQCav/XAdQCf//XAdQChf/XAdQCh//XAdQCif/XAdQCjf/XAdQCsv/XAdQCtP/XAdQCwP/XAdQCwv/XAdQCxv/XAdQCyP/XAdQC1f/XAdQC4P/XAdQC8P/XAdQC8v/XAdQC9P/XAdQC/v/XAdQDCv/XAdQDDP/XAdQDFv/XAdQDGv/XAdgABf/sAdgACv/sAdgB0P/XAdgB3P/sAdgB3f/sAdgB3//XAdgB4f/sAdgB5P/sAdgB9v/sAdgCB//sAdgCC//sAdgCoP/XAdgCqv/sAdgCtv/sAdgCvP/XAdgCvv/sAdgCwP/sAdgCwv/sAdgCy//XAdgC1f/sAdgC5v/XAdgC+P/sAdgC+v/sAdgC/P/sAdgC/v/sAdgDBv/XAdgDCP/XAdgDDv/sAdgDEP/sAdgDGP/sAdoABf/sAdoACv/sAdoB0P/XAdoB3P/sAdoB3f/sAdoB3//XAdoB4f/sAdoB5P/sAdoB9v/sAdoCB//sAdoCC//sAdoCoP/XAdoCqv/sAdoCtv/sAdoCvP/XAdoCvv/sAdoCwP/sAdoCwv/sAdoCy//XAdoC1f/sAdoC5v/XAdoC+P/sAdoC+v/sAdoC/P/sAdoC/v/sAdoDBv/XAdoDCP/XAdoDDv/sAdoDEP/sAdoDGP/sAdwAD/+aAdwAEP/XAdwAEf+aAdwBzv/DAdwBz//sAdwB1f/DAdwB2P/sAdwB2//sAdwB3v/sAdwB6v/sAdwB7f/sAdwB8v/DAdwCAv/XAdwCA//XAdwCBP/XAdwCCP+aAdwCDP+aAdwCav/sAdwCc//DAdwCf//sAdwChf/sAdwCh//sAdwCif/sAdwCjf/sAdwCsv/sAdwCtP/sAdwCz//DAdwC4P/sAdwC8P/sAdwC8v/sAdwC9P/sAdwDCv/sAdwDDP/sAdwDEv/DAdwDFv/sAdwDGv/sAdwDHP/DAd0AD/+uAd0AEf+uAd0Bzv/XAd0B1f/XAd0B8v/XAd0CCP+uAd0CDP+uAd0Cc//XAd0Cz//XAd0DEv/XAd0DHP/XAd4ABf/sAd4ACv/sAd4B0P/XAd4B3P/sAd4B3f/sAd4B3//XAd4B4f/sAd4B5P/sAd4B9v/sAd4CB//sAd4CC//sAd4CoP/XAd4Cqv/sAd4Ctv/sAd4CvP/XAd4Cvv/sAd4CwP/sAd4Cwv/sAd4Cy//XAd4C1f/sAd4C5v/XAd4C+P/sAd4C+v/sAd4C/P/sAd4C/v/sAd4DBv/XAd4DCP/XAd4DDv/sAd4DEP/sAd4DGP/sAd8Bz//XAd8B2P/XAd8B2//XAd8B3v/XAd8B4f/XAd8B6v/XAd8B7f/XAd8Cav/XAd8Cf//XAd8Chf/XAd8Ch//XAd8Cif/XAd8Cjf/XAd8Csv/XAd8CtP/XAd8CwP/XAd8Cwv/XAd8Cxv/XAd8CyP/XAd8C1f/XAd8C4P/XAd8C8P/XAd8C8v/XAd8C9P/XAd8C/v/XAd8DCv/XAd8DDP/XAd8DFv/XAd8DGv/XAeAABf/sAeAACv/sAeACB//sAeACC//sAeMABf/sAeMACv/sAeMCB//sAeMCC//sAeQABf+FAeQACv+FAeQB0P/XAeQB3P+aAeQB3f/DAeQB3//XAeQB4f+uAeQB5P+aAeQB9v/DAeQCB/+FAeQCC/+FAeQCbf/XAeQCgf/XAeQCg//XAeQCi//XAeQCoP/XAeQCqv+aAeQCtv+aAeQCuP/DAeQCuv/DAeQCvP/XAeQCvv+aAeQCwP+uAeQCwv+uAeQCxv/XAeQCyP/XAeQCy//XAeQC1f+uAeQC5v/XAeQC6v/XAeQC+P/DAeQC+v/DAeQC/P/DAeQC/v+uAeQDBv/XAeQDCP/XAeQDDv+aAeQDEP+aAeQDGP+aAeYABf+FAeYACv+FAeYB0P/XAeYB3P+aAeYB3f/DAeYB3//XAeYB4f+uAeYB5P+aAeYB9v/DAeYCB/+FAeYCC/+FAeYCbf/XAeYCgf/XAeYCg//XAeYCi//XAeYCoP/XAeYCqv+aAeYCtv+aAeYCuP/DAeYCuv/DAeYCvP/XAeYCvv+aAeYCwP+uAeYCwv+uAeYCxv/XAeYCyP/XAeYCy//XAeYC1f+uAeYC5v/XAeYC6v/XAeYC+P/DAeYC+v/DAeYC/P/DAeYC/v+uAeYDBv/XAeYDCP/XAeYDDv+aAeYDEP+aAeYDGP+aAecABf/sAecACv/sAecB0P/XAecB3P/sAecB3f/sAecB3//XAecB4f/sAecB5P/sAecB9v/sAecCB//sAecCC//sAecCoP/XAecCqv/sAecCtv/sAecCvP/XAecCvv/sAecCwP/sAecCwv/sAecCy//XAecC1f/sAecC5v/XAecC+P/sAecC+v/sAecC/P/sAecC/v/sAecDBv/XAecDCP/XAecDDv/sAecDEP/sAecDGP/sAegABf/sAegACv/sAegB0P/XAegB3P/sAegB3f/sAegB3//XAegB4f/sAegB5P/sAegB9v/sAegCB//sAegCC//sAegCoP/XAegCqv/sAegCtv/sAegCvP/XAegCvv/sAegCwP/sAegCwv/sAegCy//XAegC1f/sAegC5v/XAegC+P/sAegC+v/sAegC/P/sAegC/v/sAegDBv/XAegDCP/XAegDDv/sAegDEP/sAegDGP/sAeoABf/sAeoACv/sAeoCB//sAeoCC//sAesABf/sAesACv/sAesCB//sAesCC//sAesDDv/XAesDEP/XAewAD/+aAewAEP/XAewAEf+aAewBzv/DAewBz//sAewB1f/DAewB2P/sAewB2//sAewB3v/sAewB6v/sAewB7f/sAewB8v/DAewCAv/XAewCA//XAewCBP/XAewCCP+aAewCDP+aAewCav/sAewCc//DAewCf//sAewChf/sAewCh//sAewCif/sAewCjf/sAewCsv/sAewCtP/sAewCz//DAewC4P/sAewC8P/sAewC8v/sAewC9P/sAewDCv/sAewDDP/sAewDEv/DAewDFv/sAewDGv/sAewDHP/DAfIABf+FAfIACv+FAfIB0P/XAfIB3P+aAfIB3f/DAfIB3//XAfIB4f+uAfIB5P+aAfIB9v/DAfICB/+FAfICC/+FAfICbf/XAfICgf/XAfICg//XAfICi//XAfICoP/XAfICqv+aAfICtv+aAfICuP/DAfICuv/DAfICvP/XAfICvv+aAfICwP+uAfICwv+uAfICxv/XAfICyP/XAfICy//XAfIC1f+uAfIC5v/XAfIC6v/XAfIC+P/DAfIC+v/DAfIC/P/DAfIC/v+uAfIDBv/XAfIDCP/XAfIDDv+aAfIDEP+aAfIDGP+aAfMABf+FAfMACv+FAfMB0P/XAfMB3P+aAfMB3f/DAfMB3//XAfMB4f+uAfMB5P+aAfMB9v/DAfMCB/+FAfMCC/+FAfMCbf/XAfMCgf/XAfMCg//XAfMCi//XAfMCoP/XAfMCqv+aAfMCtv+aAfMCuP/DAfMCuv/DAfMCvP/XAfMCvv+aAfMCwP+uAfMCwv+uAfMCxv/XAfMCyP/XAfMCy//XAfMC1f+uAfMC5v/XAfMC6v/XAfMC+P/DAfMC+v/DAfMC/P/DAfMC/v+uAfMDBv/XAfMDCP/XAfMDDv+aAfMDEP+aAfMDGP+aAfQABf/sAfQACv/sAfQCB//sAfQCC//sAfQDDv/XAfQDEP/XAfUBz//XAfUB2P/XAfUB2//XAfUB3v/XAfUB4f/XAfUB6v/XAfUB7f/XAfUCav/XAfUCf//XAfUChf/XAfUCh//XAfUCif/XAfUCjf/XAfUCsv/XAfUCtP/XAfUCwP/XAfUCwv/XAfUCxv/XAfUCyP/XAfUC1f/XAfUC4P/XAfUC8P/XAfUC8v/XAfUC9P/XAfUC/v/XAfUDCv/XAfUDDP/XAfUDFv/XAfUDGv/XAfYAD/+uAfYAEf+uAfYBzv/XAfYB1f/XAfYB8v/XAfYCCP+uAfYCDP+uAfYCc//XAfYCz//XAfYDEv/XAfYDHP/XAfgAD/+FAfgAEP+uAfgAEf+FAfgBn//XAfgBpP+aAfgBqv9xAfgBrv+aAfgBtf+aAfgBuP/XAfgBu//XAfgBvAApAfgBvv+uAfgBzP+aAfgBzf+aAfgBzv+FAfgBz/9xAfgB0P/XAfgB0f/XAfgB0v+aAfgB0/+aAfgB1P+aAfgB1f+FAfgB1v+aAfgB1/+aAfgB2P9xAfgB2f+aAfgB2v+aAfgB2/9xAfgB3P+uAfgB3f+uAfgB3v9xAfgB3//XAfgB4P+aAfgB4f+aAfgB4v+aAfgB4/+aAfgB5P+uAfgB5f+aAfgB5v+aAfgB5//XAfgB6P+aAfgB6f/DAfgB6v9xAfgB7P+aAfgB7f9xAfgB7v+FAfgB8v+FAfgB8/+aAfgB9f+aAfgB9v+uAfgB9/+aAfgB+f+aAfgCAv+uAfgCA/+uAfgCBP+uAfgCCP+FAfgCDP+FAfgCav9xAfgCa/+aAfgCbP/XAfgCbf/XAfgCcf+aAfgCcv9xAfgCc/+FAfgCdf+aAfgCd/+aAfgCef+aAfgCff+aAfgCfv/XAfgCf/9xAfgCgf/XAfgCg//XAfgChP/XAfgChf9xAfgChv/XAfgCh/9xAfgCiP/XAfgCif9xAfgCiv/XAfgCi//XAfgCjP/XAfgCjf9xAfgClv+aAfgCmv+aAfgCnv+aAfgCoP/XAfgCov/XAfgCpP+aAfgCpv+aAfgCqv+uAfgCrP+aAfgCrv+aAfgCsP+aAfgCsf/XAfgCsv9xAfgCs//XAfgCtP9xAfgCtQApAfgCtv+uAfgCuP+uAfgCuv+uAfgCvP/XAfgCvv+uAfgCwP+aAfgCwv+aAfgCxP+aAfgCxf+aAfgCxv9xAfgCx/+aAfgCyP9xAfgCy//XAfgCzf+aAfgCzv+aAfgCz/+FAfgC0f+aAfgC0/+aAfgC1f+aAfgC1/+aAfgC2f9xAfgC2/9xAfgC3f9xAfgC4P9xAfgC5v/XAfgC6P/XAfgC6v/DAfgC7P+aAfgC7v+aAfgC7//XAfgC8P9xAfgC8f/XAfgC8v9xAfgC8//XAfgC9P9xAfgC9v/XAfgC+P+uAfgC+v+uAfgC/P+uAfgC/v+aAfgDAP+aAfgDAv+aAfgDBv/XAfgDCP/XAfgDCf9xAfgDCv9xAfgDC/9xAfgDDP9xAfgDDv+aAfgDEP+aAfgDEf+aAfgDEv+FAfgDFP+aAfgDFf/XAfgDFv9xAfgDGP+uAfgDGv9xAfgDG/+aAfgDHP+FAfkAD/+aAfkAEP/XAfkAEf+aAfkBzv/DAfkBz//sAfkB1f/DAfkB2P/sAfkB2//sAfkB3v/sAfkB6v/sAfkB7f/sAfkB8v/DAfkCAv/XAfkCA//XAfkCBP/XAfkCCP+aAfkCDP+aAfkCav/sAfkCc//DAfkCf//sAfkChf/sAfkCh//sAfkCif/sAfkCjf/sAfkCsv/sAfkCtP/sAfkCz//DAfkC4P/sAfkC8P/sAfkC8v/sAfkC9P/sAfkDCv/sAfkDDP/sAfkDEv/DAfkDFv/sAfkDGv/sAfkDHP/DAfoAD/+aAfoAEf+aAfoAIgApAfoAJP+uAfoAJv/sAfoAKv/sAfoAMv/sAfoANP/sAfoARP/XAfoARv/XAfoAR//XAfoASP/XAfoASv/sAfoAUP/sAfoAUf/sAfoAUv/XAfoAU//sAfoAVP/XAfoAVf/sAfoAVv/sAfoAWP/sAfoAgv+uAfoAg/+uAfoAhP+uAfoAhf+uAfoAhv+uAfoAh/+uAfoAif/sAfoAlP/sAfoAlf/sAfoAlv/sAfoAl//sAfoAmP/sAfoAmv/sAfoAov/XAfoAo//XAfoApP/XAfoApf/XAfoApv/XAfoAp//XAfoAqP/XAfoAqf/XAfoAqv/XAfoAq//XAfoArP/XAfoArf/XAfoAtP/XAfoAtf/XAfoAtv/XAfoAt//XAfoAuP/XAfoAuv/XAfoAu//sAfoAvP/sAfoAvf/sAfoAvv/sAfoAwv+uAfoAw//XAfoAxP+uAfoAxf/XAfoAxv+uAfoAx//XAfoAyP/sAfoAyf/XAfoAyv/sAfoAy//XAfoAzP/sAfoAzf/XAfoAzv/sAfoAz//XAfoA0f/XAfoA0//XAfoA1f/XAfoA1//XAfoA2f/XAfoA2//XAfoA3f/XAfoA3v/sAfoA3//sAfoA4P/sAfoA4f/sAfoA4v/sAfoA4//sAfoA5P/sAfoA5f/sAfoA+v/sAfoBBv/sAfoBCP/sAfoBDf/sAfoBDv/sAfoBD//XAfoBEP/sAfoBEf/XAfoBEv/sAfoBE//XAfoBFP/sAfoBFf/XAfoBF//sAfoBGf/sAfoBHf/sAfoBIf/sAfoBK//sAfoBLf/sAfoBL//sAfoBMf/sAfoBM//sAfoBNf/sAfoBQ/+uAfoBRP/XAfoBRv/XAfoBR//sAfoBSP/XAfoBSv/sAfoCCP+aAfoCDP+aAfoCV//sAfoCWP+uAfoCWf/XAfoCX//sAfoCYP/XAfoCYv/sAfoDHf+uAfoDHv/XAfoDH/+uAfoDIP/XAfoDIf+uAfoDIv/XAfoDI/+uAfoDJf+uAfoDJv/XAfoDJ/+uAfoDKP/XAfoDKf+uAfoDKv/XAfoDK/+uAfoDLP/XAfoDLf+uAfoDLv/XAfoDL/+uAfoDMP/XAfoDMf+uAfoDMv/XAfoDM/+uAfoDNP/XAfoDNv/XAfoDOP/XAfoDOv/XAfoDPP/XAfoDQP/XAfoDQv/XAfoDRP/XAfoDSf/sAfoDSv/XAfoDS//sAfoDTP/XAfoDTf/sAfoDTv/XAfoDT//sAfoDUf/sAfoDUv/XAfoDU//sAfoDVP/XAfoDVf/sAfoDVv/XAfoDV//sAfoDWP/XAfoDWf/sAfoDWv/XAfoDW//sAfoDXP/XAfoDXf/sAfoDXv/XAfoDX//sAfoDYP/XAfoDYv/sAfoDZP/sAfoDZv/sAfoDaP/sAfoDav/sAfoDbP/sAfoDbv/sAfsABQBSAfsACgBSAfsAD/+uAfsAEf+uAfsAIgApAfsCBwBSAfsCCP+uAfsCCwBSAfsCDP+uAfwAD/+aAfwAEf+aAfwAIgApAfwAJP+uAfwAJv/sAfwAKv/sAfwAMv/sAfwANP/sAfwARP/XAfwARv/XAfwAR//XAfwASP/XAfwASv/sAfwAUP/sAfwAUf/sAfwAUv/XAfwAU//sAfwAVP/XAfwAVf/sAfwAVv/sAfwAWP/sAfwAgv+uAfwAg/+uAfwAhP+uAfwAhf+uAfwAhv+uAfwAh/+uAfwAif/sAfwAlP/sAfwAlf/sAfwAlv/sAfwAl//sAfwAmP/sAfwAmv/sAfwAov/XAfwAo//XAfwApP/XAfwApf/XAfwApv/XAfwAp//XAfwAqP/XAfwAqf/XAfwAqv/XAfwAq//XAfwArP/XAfwArf/XAfwAtP/XAfwAtf/XAfwAtv/XAfwAt//XAfwAuP/XAfwAuv/XAfwAu//sAfwAvP/sAfwAvf/sAfwAvv/sAfwAwv+uAfwAw//XAfwAxP+uAfwAxf/XAfwAxv+uAfwAx//XAfwAyP/sAfwAyf/XAfwAyv/sAfwAy//XAfwAzP/sAfwAzf/XAfwAzv/sAfwAz//XAfwA0f/XAfwA0//XAfwA1f/XAfwA1//XAfwA2f/XAfwA2//XAfwA3f/XAfwA3v/sAfwA3//sAfwA4P/sAfwA4f/sAfwA4v/sAfwA4//sAfwA5P/sAfwA5f/sAfwA+v/sAfwBBv/sAfwBCP/sAfwBDf/sAfwBDv/sAfwBD//XAfwBEP/sAfwBEf/XAfwBEv/sAfwBE//XAfwBFP/sAfwBFf/XAfwBF//sAfwBGf/sAfwBHf/sAfwBIf/sAfwBK//sAfwBLf/sAfwBL//sAfwBMf/sAfwBM//sAfwBNf/sAfwBQ/+uAfwBRP/XAfwBRv/XAfwBR//sAfwBSP/XAfwBSv/sAfwCCP+aAfwCDP+aAfwCV//sAfwCWP+uAfwCWf/XAfwCX//sAfwCYP/XAfwCYv/sAfwDHf+uAfwDHv/XAfwDH/+uAfwDIP/XAfwDIf+uAfwDIv/XAfwDI/+uAfwDJf+uAfwDJv/XAfwDJ/+uAfwDKP/XAfwDKf+uAfwDKv/XAfwDK/+uAfwDLP/XAfwDLf+uAfwDLv/XAfwDL/+uAfwDMP/XAfwDMf+uAfwDMv/XAfwDM/+uAfwDNP/XAfwDNv/XAfwDOP/XAfwDOv/XAfwDPP/XAfwDQP/XAfwDQv/XAfwDRP/XAfwDSf/sAfwDSv/XAfwDS//sAfwDTP/XAfwDTf/sAfwDTv/XAfwDT//sAfwDUf/sAfwDUv/XAfwDU//sAfwDVP/XAfwDVf/sAfwDVv/XAfwDV//sAfwDWP/XAfwDWf/sAfwDWv/XAfwDW//sAfwDXP/XAfwDXf/sAfwDXv/XAfwDX//sAfwDYP/XAfwDYv/sAfwDZP/sAfwDZv/sAfwDaP/sAfwDav/sAfwDbP/sAfwDbv/sAf0ABQBSAf0ACgBSAf0AD/+uAf0AEf+uAf0AIgApAf0CBwBSAf0CCP+uAf0CCwBSAf0CDP+uAf4AD/+aAf4AEf+aAf4AIgApAf4AJP+uAf4AJv/sAf4AKv/sAf4AMv/sAf4ANP/sAf4ARP/XAf4ARv/XAf4AR//XAf4ASP/XAf4ASv/sAf4AUP/sAf4AUf/sAf4AUv/XAf4AU//sAf4AVP/XAf4AVf/sAf4AVv/sAf4AWP/sAf4Agv+uAf4Ag/+uAf4AhP+uAf4Ahf+uAf4Ahv+uAf4Ah/+uAf4Aif/sAf4AlP/sAf4Alf/sAf4Alv/sAf4Al//sAf4AmP/sAf4Amv/sAf4Aov/XAf4Ao//XAf4ApP/XAf4Apf/XAf4Apv/XAf4Ap//XAf4AqP/XAf4Aqf/XAf4Aqv/XAf4Aq//XAf4ArP/XAf4Arf/XAf4AtP/XAf4Atf/XAf4Atv/XAf4At//XAf4AuP/XAf4Auv/XAf4Au//sAf4AvP/sAf4Avf/sAf4Avv/sAf4Awv+uAf4Aw//XAf4AxP+uAf4Axf/XAf4Axv+uAf4Ax//XAf4AyP/sAf4Ayf/XAf4Ayv/sAf4Ay//XAf4AzP/sAf4Azf/XAf4Azv/sAf4Az//XAf4A0f/XAf4A0//XAf4A1f/XAf4A1//XAf4A2f/XAf4A2//XAf4A3f/XAf4A3v/sAf4A3//sAf4A4P/sAf4A4f/sAf4A4v/sAf4A4//sAf4A5P/sAf4A5f/sAf4A+v/sAf4BBv/sAf4BCP/sAf4BDf/sAf4BDv/sAf4BD//XAf4BEP/sAf4BEf/XAf4BEv/sAf4BE//XAf4BFP/sAf4BFf/XAf4BF//sAf4BGf/sAf4BHf/sAf4BIf/sAf4BK//sAf4BLf/sAf4BL//sAf4BMf/sAf4BM//sAf4BNf/sAf4BQ/+uAf4BRP/XAf4BRv/XAf4BR//sAf4BSP/XAf4BSv/sAf4CCP+aAf4CDP+aAf4CV//sAf4CWP+uAf4CWf/XAf4CX//sAf4CYP/XAf4CYv/sAf4DHf+uAf4DHv/XAf4DH/+uAf4DIP/XAf4DIf+uAf4DIv/XAf4DI/+uAf4DJf+uAf4DJv/XAf4DJ/+uAf4DKP/XAf4DKf+uAf4DKv/XAf4DK/+uAf4DLP/XAf4DLf+uAf4DLv/XAf4DL/+uAf4DMP/XAf4DMf+uAf4DMv/XAf4DM/+uAf4DNP/XAf4DNv/XAf4DOP/XAf4DOv/XAf4DPP/XAf4DQP/XAf4DQv/XAf4DRP/XAf4DSf/sAf4DSv/XAf4DS//sAf4DTP/XAf4DTf/sAf4DTv/XAf4DT//sAf4DUf/sAf4DUv/XAf4DU//sAf4DVP/XAf4DVf/sAf4DVv/XAf4DV//sAf4DWP/XAf4DWf/sAf4DWv/XAf4DW//sAf4DXP/XAf4DXf/sAf4DXv/XAf4DX//sAf4DYP/XAf4DYv/sAf4DZP/sAf4DZv/sAf4DaP/sAf4Dav/sAf4DbP/sAf4Dbv/sAf8ABQBSAf8ACgBSAf8AD/+uAf8AEf+uAf8AIgApAf8CBwBSAf8CCP+uAf8CCwBSAf8CDP+uAgAAD/+FAgAAEf+FAgAAIgApAgAAJP+FAgAAJv/XAgAAKv/XAgAAMv/XAgAANP/XAgAARP+aAgAARv+aAgAAR/+aAgAASP+aAgAASv/XAgAAUP/DAgAAUf/DAgAAUv+aAgAAU//DAgAAVP+aAgAAVf/DAgAAVv+uAgAAWP/DAgAAXf/XAgAAgv+FAgAAg/+FAgAAhP+FAgAAhf+FAgAAhv+FAgAAh/+FAgAAif/XAgAAlP/XAgAAlf/XAgAAlv/XAgAAl//XAgAAmP/XAgAAmv/XAgAAov+aAgAAo/+aAgAApP+aAgAApf+aAgAApv+aAgAAp/+aAgAAqP+aAgAAqf+aAgAAqv+aAgAAq/+aAgAArP+aAgAArf+aAgAAtP+aAgAAtf+aAgAAtv+aAgAAt/+aAgAAuP+aAgAAuv+aAgAAu//DAgAAvP/DAgAAvf/DAgAAvv/DAgAAwv+FAgAAw/+aAgAAxP+FAgAAxf+aAgAAxv+FAgAAx/+aAgAAyP/XAgAAyf+aAgAAyv/XAgAAy/+aAgAAzP/XAgAAzf+aAgAAzv/XAgAAz/+aAgAA0f+aAgAA0/+aAgAA1f+aAgAA1/+aAgAA2f+aAgAA2/+aAgAA3f+aAgAA3v/XAgAA3//XAgAA4P/XAgAA4f/XAgAA4v/XAgAA4//XAgAA5P/XAgAA5f/XAgAA+v/DAgABBv/DAgABCP/DAgABDf/DAgABDv/XAgABD/+aAgABEP/XAgABEf+aAgABEv/XAgABE/+aAgABFP/XAgABFf+aAgABF//DAgABGf/DAgABHf+uAgABIf+uAgABK//DAgABLf/DAgABL//DAgABMf/DAgABM//DAgABNf/DAgABPP/XAgABPv/XAgABQP/XAgABQ/+FAgABRP+aAgABRv+aAgABR//XAgABSP+aAgABSv+uAgACCP+FAgACDP+FAgACV//DAgACWP+FAgACWf+aAgACX//XAgACYP+aAgACYv/DAgADHf+FAgADHv+aAgADH/+FAgADIP+aAgADIf+FAgADIv+aAgADI/+FAgADJf+FAgADJv+aAgADJ/+FAgADKP+aAgADKf+FAgADKv+aAgADK/+FAgADLP+aAgADLf+FAgADLv+aAgADL/+FAgADMP+aAgADMf+FAgADMv+aAgADM/+FAgADNP+aAgADNv+aAgADOP+aAgADOv+aAgADPP+aAgADQP+aAgADQv+aAgADRP+aAgADSf/XAgADSv+aAgADS//XAgADTP+aAgADTf/XAgADTv+aAgADT//XAgADUf/XAgADUv+aAgADU//XAgADVP+aAgADVf/XAgADVv+aAgADV//XAgADWP+aAgADWf/XAgADWv+aAgADW//XAgADXP+aAgADXf/XAgADXv+aAgADX//XAgADYP+aAgADYv/DAgADZP/DAgADZv/DAgADaP/DAgADav/DAgADbP/DAgADbv/DAgEABQBSAgEACgBSAgEAD/+uAgEAEf+uAgEAIgApAgECBwBSAgECCP+uAgECCwBSAgECDP+uAgIAN/+uAgIBJP+uAgIBJv+uAgIBcf+uAgIBnf+uAgIBpv+uAgIBvP+uAgIBxP+uAgIB3P/XAgIB5P/XAgICqf+uAgICqv/XAgICtf+uAgICtv/XAgICvf+uAgICvv/XAgIDF/+uAgIDGP/XAgIDj/+uAgMAN/+uAgMBJP+uAgMBJv+uAgMBcf+uAgMBnf+uAgMBpv+uAgMBvP+uAgMBxP+uAgMB3P/XAgMB5P/XAgMCqf+uAgMCqv/XAgMCtf+uAgMCtv/XAgMCvf+uAgMCvv/XAgMDF/+uAgMDGP/XAgMDj/+uAgQAN/+uAgQBJP+uAgQBJv+uAgQBcf+uAgQBnf+uAgQBpv+uAgQBvP+uAgQBxP+uAgQB3P/XAgQB5P/XAgQCqf+uAgQCqv/XAgQCtf+uAgQCtv/XAgQCvf+uAgQCvv/XAgQDF/+uAgQDGP/XAgQDj/+uAgYAJP9xAgYANwApAgYAOQApAgYAOgApAgYAPAAUAgYARP+uAgYARv+FAgYAR/+FAgYASP+FAgYASv/DAgYAUP/DAgYAUf/DAgYAUv+FAgYAU//DAgYAVP+FAgYAVf/DAgYAVv/DAgYAWP/DAgYAgv9xAgYAg/9xAgYAhP9xAgYAhf9xAgYAhv9xAgYAh/9xAgYAnwAUAgYAov+FAgYAo/+uAgYApP+uAgYApf+uAgYApv+uAgYAp/+uAgYAqP+uAgYAqf+FAgYAqv+FAgYAq/+FAgYArP+FAgYArf+FAgYAtP+FAgYAtf+FAgYAtv+FAgYAt/+FAgYAuP+FAgYAuv+FAgYAu//DAgYAvP/DAgYAvf/DAgYAvv/DAgYAwv9xAgYAw/+uAgYAxP9xAgYAxf+uAgYAxv9xAgYAx/+uAgYAyf+FAgYAy/+FAgYAzf+FAgYAz/+FAgYA0f+FAgYA0/+FAgYA1f+FAgYA1/+FAgYA2f+FAgYA2/+FAgYA3f+FAgYA3//DAgYA4f/DAgYA4//DAgYA5f/DAgYA+v/DAgYBBv/DAgYBCP/DAgYBDf/DAgYBD/+FAgYBEf+FAgYBE/+FAgYBFf+FAgYBF//DAgYBGf/DAgYBHf/DAgYBIf/DAgYBJAApAgYBJgApAgYBK//DAgYBLf/DAgYBL//DAgYBMf/DAgYBM//DAgYBNf/DAgYBNgApAgYBOAAUAgYBOgAUAgYBQ/9xAgYBRP+uAgYBRv+uAgYBSP+FAgYBSv/DAgYBVv9xAgYBX/9xAgYBYv9xAgYBaf9xAgYBef+uAgYBev/XAgYBe//XAgYBfv+uAgYBgf/DAgYBgv/XAgYBg//XAgYBhP/XAgYBh//XAgYBif/XAgYBjP+uAgYBjv/DAgYBj/+uAgYBkP+uAgYBk/+uAgYBmf+uAgYBpP+FAgYBqv9xAgYBrv+FAgYBtf+FAgYByv/XAgYBzv9xAgYBz/+FAgYB1f9xAgYB2P+FAgYB2/+FAgYB3v+FAgYB6v+FAgYB7f+FAgYB7v/DAgYB8v9xAgYB+gApAgYB/AApAgYB/gApAgYCAAAUAgYCV//DAgYCWP9xAgYCWf+uAgYCYP+FAgYCYv/DAgYCav+FAgYCcv9xAgYCc/9xAgYCff/sAgYCf/+FAgYChf+FAgYCh/+FAgYCif+FAgYCjf+FAgYCsv+FAgYCtP+FAgYCzv+FAgYCz/9xAgYC2f9xAgYC2v/XAgYC2/9xAgYC3P/XAgYC3f9xAgYC3v/XAgYC4P+FAgYC4v/XAgYC5P/XAgYC8P+FAgYC8v+FAgYC9P+FAgYDCf9xAgYDCv+FAgYDC/9xAgYDDP+FAgYDEf+FAgYDEv9xAgYDFv+FAgYDGv+FAgYDG/+FAgYDHP9xAgYDHf9xAgYDHv+uAgYDH/9xAgYDIP+uAgYDIf9xAgYDIv+uAgYDI/9xAgYDJf9xAgYDJv+uAgYDJ/9xAgYDKP+uAgYDKf9xAgYDKv+uAgYDK/9xAgYDLP+uAgYDLf9xAgYDLv+uAgYDL/9xAgYDMP+uAgYDMf9xAgYDMv+uAgYDM/9xAgYDNP+uAgYDNv+FAgYDOP+FAgYDOv+FAgYDPP+FAgYDQP+FAgYDQv+FAgYDRP+FAgYDSv+FAgYDTP+FAgYDTv+FAgYDUv+FAgYDVP+FAgYDVv+FAgYDWP+FAgYDWv+FAgYDXP+FAgYDXv+FAgYDYP+FAgYDYv/DAgYDZP/DAgYDZv/DAgYDaP/DAgYDav/DAgYDbP/DAgYDbv/DAgYDbwAUAgYDcQAUAgYDcwAUAgYDjwApAgcAJP9xAgcANwApAgcAOQApAgcAOgApAgcAPAAUAgcARP+uAgcARv+FAgcAR/+FAgcASP+FAgcASv/DAgcAUP/DAgcAUf/DAgcAUv+FAgcAU//DAgcAVP+FAgcAVf/DAgcAVv/DAgcAWP/DAgcAgv9xAgcAg/9xAgcAhP9xAgcAhf9xAgcAhv9xAgcAh/9xAgcAnwAUAgcAov+FAgcAo/+uAgcApP+uAgcApf+uAgcApv+uAgcAp/+uAgcAqP+uAgcAqf+FAgcAqv+FAgcAq/+FAgcArP+FAgcArf+FAgcAtP+FAgcAtf+FAgcAtv+FAgcAt/+FAgcAuP+FAgcAuv+FAgcAu//DAgcAvP/DAgcAvf/DAgcAvv/DAgcAwv9xAgcAw/+uAgcAxP9xAgcAxf+uAgcAxv9xAgcAx/+uAgcAyf+FAgcAy/+FAgcAzf+FAgcAz/+FAgcA0f+FAgcA0/+FAgcA1f+FAgcA1/+FAgcA2f+FAgcA2/+FAgcA3f+FAgcA3//DAgcA4f/DAgcA4//DAgcA5f/DAgcA+v/DAgcBBv/DAgcBCP/DAgcBDf/DAgcBD/+FAgcBEf+FAgcBE/+FAgcBFf+FAgcBF//DAgcBGf/DAgcBHf/DAgcBIf/DAgcBJAApAgcBJgApAgcBK//DAgcBLf/DAgcBL//DAgcBMf/DAgcBM//DAgcBNf/DAgcBNgApAgcBOAAUAgcBOgAUAgcBQ/9xAgcBRP+uAgcBRv+uAgcBSP+FAgcBSv/DAgcBVv9xAgcBX/9xAgcBYv9xAgcBaf9xAgcBef+uAgcBev/XAgcBe//XAgcBfv+uAgcBgf/DAgcBgv/XAgcBg//XAgcBhP/XAgcBh//XAgcBif/XAgcBjP+uAgcBjv/DAgcBj/+uAgcBkP+uAgcBk/+uAgcBmf+uAgcBpP+FAgcBqv9xAgcBrv+FAgcBtf+FAgcByv/XAgcBzv9xAgcBz/+FAgcB1f9xAgcB2P+FAgcB2/+FAgcB3v+FAgcB6v+FAgcB7f+FAgcB7v/DAgcB8v9xAgcB+gApAgcB/AApAgcB/gApAgcCAAAUAgcCV//DAgcCWP9xAgcCWf+uAgcCYP+FAgcCYv/DAgcCav+FAgcCcv9xAgcCc/9xAgcCff/sAgcCf/+FAgcChf+FAgcCh/+FAgcCif+FAgcCjf+FAgcCsv+FAgcCtP+FAgcCzv+FAgcCz/9xAgcC2f9xAgcC2v/XAgcC2/9xAgcC3P/XAgcC3f9xAgcC3v/XAgcC4P+FAgcC4v/XAgcC5P/XAgcC8P+FAgcC8v+FAgcC9P+FAgcDCf9xAgcDCv+FAgcDC/9xAgcDDP+FAgcDEf+FAgcDEv9xAgcDFv+FAgcDGv+FAgcDG/+FAgcDHP9xAgcDHf9xAgcDHv+uAgcDH/9xAgcDIP+uAgcDIf9xAgcDIv+uAgcDI/9xAgcDJf9xAgcDJv+uAgcDJ/9xAgcDKP+uAgcDKf9xAgcDKv+uAgcDK/9xAgcDLP+uAgcDLf9xAgcDLv+uAgcDL/9xAgcDMP+uAgcDMf9xAgcDMv+uAgcDM/9xAgcDNP+uAgcDNv+FAgcDOP+FAgcDOv+FAgcDPP+FAgcDQP+FAgcDQv+FAgcDRP+FAgcDSv+FAgcDTP+FAgcDTv+FAgcDUv+FAgcDVP+FAgcDVv+FAgcDWP+FAgcDWv+FAgcDXP+FAgcDXv+FAgcDYP+FAgcDYv/DAgcDZP/DAgcDZv/DAgcDaP/DAgcDav/DAgcDbP/DAgcDbv/DAgcDbwAUAgcDcQAUAgcDcwAUAgcDjwApAggAJv+aAggAKv+aAggAMv+aAggANP+aAggAN/9xAggAOP/XAggAOf+FAggAOv+FAggAPP+FAggAif+aAggAlP+aAggAlf+aAggAlv+aAggAl/+aAggAmP+aAggAmv+aAggAm//XAggAnP/XAggAnf/XAggAnv/XAggAn/+FAggAyP+aAggAyv+aAggAzP+aAggAzv+aAggA3v+aAggA4P+aAggA4v+aAggA5P+aAggBDv+aAggBEP+aAggBEv+aAggBFP+aAggBJP9xAggBJv9xAggBKv/XAggBLP/XAggBLv/XAggBMP/XAggBMv/XAggBNP/XAggBNv+FAggBOP+FAggBOv+FAggBR/+aAggBZv+uAggBbf+uAggBcf9xAggBcv+FAggBc/+aAggBdf+FAggBeP+FAggBhf/XAggBnf9xAggBn/+aAggBpv9xAggBuP+aAggBu/+aAggBvP9xAggBvv+uAggBwf9cAggBxP9xAggB3P+aAggB4f+FAggB5P+aAggB+v+FAggB/P+FAggB/v+FAggCAP+FAggCVP+FAggCX/+aAggCYf/XAggCbP+aAggCfP9cAggCfv+aAggCgP+FAggCgv+FAggChP+aAggChv+aAggCiP+aAggCiv+aAggCjP+aAggCqf9xAggCqv+aAggCsf+aAggCs/+aAggCtf9xAggCtv+aAggCt/+FAggCuf+FAggCvf9xAggCvv+aAggCv/9cAggCwP+FAggCwf9cAggCwv+FAggCxf+FAggCx/+FAggC1P9cAggC1f+FAggC7/+aAggC8f+aAggC8/+aAggC/f9cAggC/v+FAggDDf+FAggDDv+aAggDD/+FAggDEP+aAggDFf+aAggDF/9xAggDGP+aAggDSf+aAggDS/+aAggDTf+aAggDT/+aAggDUf+aAggDU/+aAggDVf+aAggDV/+aAggDWf+aAggDW/+aAggDXf+aAggDX/+aAggDYf/XAggDY//XAggDZf/XAggDZ//XAggDaf/XAggDa//XAggDbf/XAggDb/+FAggDcf+FAggDc/+FAggDj/9xAgoAJP9xAgoANwApAgoAOQApAgoAOgApAgoAPAAUAgoARP+uAgoARv+FAgoAR/+FAgoASP+FAgoASv/DAgoAUP/DAgoAUf/DAgoAUv+FAgoAU//DAgoAVP+FAgoAVf/DAgoAVv/DAgoAWP/DAgoAgv9xAgoAg/9xAgoAhP9xAgoAhf9xAgoAhv9xAgoAh/9xAgoAnwAUAgoAov+FAgoAo/+uAgoApP+uAgoApf+uAgoApv+uAgoAp/+uAgoAqP+uAgoAqf+FAgoAqv+FAgoAq/+FAgoArP+FAgoArf+FAgoAtP+FAgoAtf+FAgoAtv+FAgoAt/+FAgoAuP+FAgoAuv+FAgoAu//DAgoAvP/DAgoAvf/DAgoAvv/DAgoAwv9xAgoAw/+uAgoAxP9xAgoAxf+uAgoAxv9xAgoAx/+uAgoAyf+FAgoAy/+FAgoAzf+FAgoAz/+FAgoA0f+FAgoA0/+FAgoA1f+FAgoA1/+FAgoA2f+FAgoA2/+FAgoA3f+FAgoA3//DAgoA4f/DAgoA4//DAgoA5f/DAgoA+v/DAgoBBv/DAgoBCP/DAgoBDf/DAgoBD/+FAgoBEf+FAgoBE/+FAgoBFf+FAgoBF//DAgoBGf/DAgoBHf/DAgoBIf/DAgoBJAApAgoBJgApAgoBK//DAgoBLf/DAgoBL//DAgoBMf/DAgoBM//DAgoBNf/DAgoBNgApAgoBOAAUAgoBOgAUAgoBQ/9xAgoBRP+uAgoBRv+uAgoBSP+FAgoBSv/DAgoBVv9xAgoBX/9xAgoBYv9xAgoBaf9xAgoBef+uAgoBev/XAgoBe//XAgoBfv+uAgoBgf/DAgoBgv/XAgoBg//XAgoBhP/XAgoBh//XAgoBif/XAgoBjP+uAgoBjv/DAgoBj/+uAgoBkP+uAgoBk/+uAgoBmf+uAgoBpP+FAgoBqv9xAgoBrv+FAgoBtf+FAgoByv/XAgoBzv9xAgoBz/+FAgoB1f9xAgoB2P+FAgoB2/+FAgoB3v+FAgoB6v+FAgoB7f+FAgoB7v/DAgoB8v9xAgoB+gApAgoB/AApAgoB/gApAgoCAAAUAgoCV//DAgoCWP9xAgoCWf+uAgoCYP+FAgoCYv/DAgoCav+FAgoCcv9xAgoCc/9xAgoCff/sAgoCf/+FAgoChf+FAgoCh/+FAgoCif+FAgoCjf+FAgoCsv+FAgoCtP+FAgoCzv+FAgoCz/9xAgoC2f9xAgoC2v/XAgoC2/9xAgoC3P/XAgoC3f9xAgoC3v/XAgoC4P+FAgoC4v/XAgoC5P/XAgoC8P+FAgoC8v+FAgoC9P+FAgoDCf9xAgoDCv+FAgoDC/9xAgoDDP+FAgoDEf+FAgoDEv9xAgoDFv+FAgoDGv+FAgoDG/+FAgoDHP9xAgoDHf9xAgoDHv+uAgoDH/9xAgoDIP+uAgoDIf9xAgoDIv+uAgoDI/9xAgoDJf9xAgoDJv+uAgoDJ/9xAgoDKP+uAgoDKf9xAgoDKv+uAgoDK/9xAgoDLP+uAgoDLf9xAgoDLv+uAgoDL/9xAgoDMP+uAgoDMf9xAgoDMv+uAgoDM/9xAgoDNP+uAgoDNv+FAgoDOP+FAgoDOv+FAgoDPP+FAgoDQP+FAgoDQv+FAgoDRP+FAgoDSv+FAgoDTP+FAgoDTv+FAgoDUv+FAgoDVP+FAgoDVv+FAgoDWP+FAgoDWv+FAgoDXP+FAgoDXv+FAgoDYP+FAgoDYv/DAgoDZP/DAgoDZv/DAgoDaP/DAgoDav/DAgoDbP/DAgoDbv/DAgoDbwAUAgoDcQAUAgoDcwAUAgoDjwApAgwAJv+aAgwAKv+aAgwAMv+aAgwANP+aAgwAN/9xAgwAOP/XAgwAOf+FAgwAOv+FAgwAPP+FAgwAif+aAgwAlP+aAgwAlf+aAgwAlv+aAgwAl/+aAgwAmP+aAgwAmv+aAgwAm//XAgwAnP/XAgwAnf/XAgwAnv/XAgwAn/+FAgwAyP+aAgwAyv+aAgwAzP+aAgwAzv+aAgwA3v+aAgwA4P+aAgwA4v+aAgwA5P+aAgwBDv+aAgwBEP+aAgwBEv+aAgwBFP+aAgwBJP9xAgwBJv9xAgwBKv/XAgwBLP/XAgwBLv/XAgwBMP/XAgwBMv/XAgwBNP/XAgwBNv+FAgwBOP+FAgwBOv+FAgwBR/+aAgwBZv+uAgwBbf+uAgwBcf9xAgwBcv+FAgwBc/+aAgwBdf+FAgwBeP+FAgwBhf/XAgwBnf9xAgwBn/+aAgwBpv9xAgwBuP+aAgwBu/+aAgwBvP9xAgwBvv+uAgwBwf9cAgwBxP9xAgwB3P+aAgwB4f+FAgwB5P+aAgwB+v+FAgwB/P+FAgwB/v+FAgwCAP+FAgwCVP+FAgwCX/+aAgwCYf/XAgwCbP+aAgwCfP9cAgwCfv+aAgwCgP+FAgwCgv+FAgwChP+aAgwChv+aAgwCiP+aAgwCiv+aAgwCjP+aAgwCqf9xAgwCqv+aAgwCsf+aAgwCs/+aAgwCtf9xAgwCtv+aAgwCt/+FAgwCuf+FAgwCvf9xAgwCvv+aAgwCv/9cAgwCwP+FAgwCwf9cAgwCwv+FAgwCxf+FAgwCx/+FAgwC1P9cAgwC1f+FAgwC7/+aAgwC8f+aAgwC8/+aAgwC/f9cAgwC/v+FAgwDDf+FAgwDDv+aAgwDD/+FAgwDEP+aAgwDFf+aAgwDF/9xAgwDGP+aAgwDSf+aAgwDS/+aAgwDTf+aAgwDT/+aAgwDUf+aAgwDU/+aAgwDVf+aAgwDV/+aAgwDWf+aAgwDW/+aAgwDXf+aAgwDX/+aAgwDYf/XAgwDY//XAgwDZf/XAgwDZ//XAgwDaf/XAgwDa//XAgwDbf/XAgwDb/+FAgwDcf+FAgwDc/+FAgwDj/9xAiEBcf/XAiEBcv/sAiEBeP/sAiECVP/sAlMAD//DAlMAEf/DAlMCCP/DAlMCDP/DAlQAD/+FAlQAEf+FAlQBVv+FAlQBX/+FAlQBYv+FAlQBZv/XAlQBaf+FAlQBbf/XAlQBc//DAlQBdv/sAlQBef+aAlQBev+uAlQBe//DAlQBfP/DAlQBff/DAlQBfv+aAlQBgf/DAlQBgv+uAlQBhP/DAlQBhv/DAlQBh//DAlQBif/DAlQBjP+aAlQBjv+aAlQBj/+aAlQBkP+aAlQBkv/DAlQBk/+aAlQBlf/DAlQBlv/DAlQBmP/DAlQBmf+aAlQBmv/DAlQBm//DAlQCCP+FAlQCDP+FAlQCIf/sAlgABf9xAlgACv9xAlgAJv/XAlgAKv/XAlgALQEKAlgAMv/XAlgANP/XAlgAN/9xAlgAOf+uAlgAOv+uAlgAPP+FAlgAif/XAlgAlP/XAlgAlf/XAlgAlv/XAlgAl//XAlgAmP/XAlgAmv/XAlgAn/+FAlgAyP/XAlgAyv/XAlgAzP/XAlgAzv/XAlgA3v/XAlgA4P/XAlgA4v/XAlgA5P/XAlgBDv/XAlgBEP/XAlgBEv/XAlgBFP/XAlgBJP9xAlgBJv9xAlgBNv+uAlgBOP+FAlgBOv+FAlgBR//XAlgB+v+uAlgB/P+uAlgB/v+uAlgCAP+FAlgCB/9xAlgCC/9xAlgCX//XAlgDSf/XAlgDS//XAlgDTf/XAlgDT//XAlgDUf/XAlgDU//XAlgDVf/XAlgDV//XAlgDWf/XAlgDW//XAlgDXf/XAlgDX//XAlgDb/+FAlgDcf+FAlgDc/+FAlgDj/9xAlkABf/sAlkACv/sAlkCB//sAlkCC//sAloAD/+uAloAEf+uAloBVv/XAloBX//XAloBYv/XAloBZP/sAloBaf/XAloBcP/sAloBcf/DAloBcv/sAloBdP/XAloBdf/sAloBeP/sAloBiP/sAloCCP+uAloCDP+uAloCVP/sAmAASQBSAmAAVwBSAmAAWQBmAmAAWgBmAmAAWwBmAmAAXABmAmAAvwBmAmABJQBSAmABJwBSAmABNwBmAmAB+wBmAmAB/QBmAmACNABSAmACNQBSAmACXQBSAmACXgBSAmADcABmAmADjQBSAmADkABSAmIASQBmAmIAVwBmAmIAWQBmAmIAWgBmAmIAWwBmAmIAXABmAmIAvwBmAmIBJQBmAmIBJwBmAmIBNwBmAmIB+wBmAmIB/QBmAmICNABmAmICNQBmAmICXQBmAmICXgBmAmIDcABmAmIDjQBmAmIDkABmAmoABf/sAmoACv/sAmoCB//sAmoCC//sAmwAD/+uAmwAEf+uAmwBnf/sAmwBpP/XAmwBpv/sAmwBqP/XAmwBqv/XAmwBrv/XAmwBsP/XAmwBsf/sAmwBtf/XAmwBvP/DAmwBvf/XAmwBv//XAmwBwf/XAmwBxP/sAmwBx//sAmwBzv/sAmwB1f/sAmwB8v/sAmwCCP+uAmwCDP+uAmwCcv/XAmwCc//sAmwCev/sAmwCfP/XAmwCgP/sAmwCgv/sAmwCn//XAmwCof/sAmwCqf/sAmwCtf/DAmwCt//sAmwCuf/sAmwCu//XAmwCvf/sAmwCv//XAmwCwf/XAmwCyv/XAmwCzv/XAmwCz//sAmwC1P/XAmwC2f/XAmwC2//XAmwC3f/XAmwC5f/XAmwC5//sAmwC9f/sAmwC9//XAmwC+f/XAmwC+//XAmwC/f/XAmwDBf/XAmwDB//XAmwDDf/XAmwDD//XAmwDEf/XAmwDEv/sAmwDF//sAmwDG//XAmwDHP/sAm0AD/+uAm0AEf+uAm0Bzv/XAm0B1f/XAm0B8v/XAm0CCP+uAm0CDP+uAm0Cc//XAm0Cz//XAm0DEv/XAm0DHP/XAm4ABf+uAm4ACv+uAm4Bnf/XAm4Bpv/XAm4BvP+uAm4Bwf+uAm4BxP/XAm4B3P/XAm4B5P/XAm4CB/+uAm4CC/+uAm4CfP+uAm4CgP/DAm4Cgv/DAm4Cqf/XAm4Cqv/XAm4Ctf+uAm4Ctv/XAm4Ct//DAm4Cuf/DAm4Cvf/XAm4Cvv/XAm4Cv/+uAm4Cwf+uAm4C1P+uAm4C/f+uAm4DDf+aAm4DD/+aAm4DF//XAm4DGP/XAm8ABf+FAm8ACv+FAm8B0P/XAm8B3P+aAm8B3f/DAm8B3//XAm8B4f+uAm8B5P+aAm8B9v/DAm8CB/+FAm8CC/+FAm8Cbf/XAm8Cgf/XAm8Cg//XAm8Ci//XAm8CoP/XAm8Cqv+aAm8Ctv+aAm8CuP/DAm8Cuv/DAm8CvP/XAm8Cvv+aAm8CwP+uAm8Cwv+uAm8Cxv/XAm8CyP/XAm8Cy//XAm8C1f+uAm8C5v/XAm8C6v/XAm8C+P/DAm8C+v/DAm8C/P/DAm8C/v+uAm8DBv/XAm8DCP/XAm8DDv+aAm8DEP+aAm8DGP+aAnABn//XAnABuP/XAnABu//XAnABvv/XAnAB4f/XAnACbP/XAnACfv/XAnAChP/XAnAChv/XAnACiP/XAnACiv/XAnACjP/XAnACsf/XAnACs//XAnACwP/XAnACwv/XAnACxf/XAnACx//XAnAC1f/XAnAC7//XAnAC8f/XAnAC8//XAnAC/v/XAnADCf/XAnADC//XAnADDv/XAnADEP/XAnADFf/XAnIABf9xAnIACv9xAnIBnf+aAnIBpv+aAnIBvP9xAnIBvv/XAnIBwf+aAnIBxP+aAnIB3P/XAnIB4f/XAnIB5P/XAnICB/9xAnICC/9xAnICbv/XAnICfP+aAnICgP+uAnICgv+uAnICl//XAnICm//XAnICp//XAnICqf+aAnICqv/XAnICtf9xAnICtv/XAnICt/+FAnICuf+FAnICvf+aAnICvv/XAnICv/+aAnICwP/XAnICwf+aAnICwv/XAnICxf+aAnICx/+aAnIC1P+aAnIC1f/XAnIC4f/XAnIC4//XAnIC/f+aAnIC/v/XAnIDA//XAnIDDf9xAnIDDv/XAnIDD/9xAnIDEP/XAnIDF/+aAnIDGP/XAnMABf9xAnMACv9xAnMBz//XAnMB2P/XAnMB2//XAnMB3P+aAnMB3f/DAnMB3v/XAnMB4f/DAnMB5P+aAnMB6v/XAnMB7f/XAnMB9v/DAnMCB/9xAnMCC/9xAnMCav/XAnMCbf/XAnMCff/sAnMCf//XAnMCgf/XAnMCg//XAnMChf/XAnMCh//XAnMCif/XAnMCi//XAnMCjf/XAnMCqv+aAnMCsv/XAnMCtP/XAnMCtv+aAnMCuP/XAnMCuv/XAnMCvv+aAnMCwP/DAnMCwv/DAnMCxv/XAnMCyP/XAnMC1f/DAnMC4P/XAnMC8P/XAnMC8v/XAnMC9P/XAnMC+P/DAnMC+v/DAnMC/P/DAnMC/v/DAnMDCv/XAnMDDP/XAnMDDv+FAnMDEP+FAnMDFv/XAnMDGP+aAnMDGv/XAnQABf9xAnQACv9xAnQBnf+aAnQBpv+aAnQBvP9xAnQBvv/XAnQBwf+aAnQBxP+aAnQB3P/XAnQB4f/XAnQB5P/XAnQCB/9xAnQCC/9xAnQCbv/XAnQCfP+aAnQCgP+uAnQCgv+uAnQCl//XAnQCm//XAnQCp//XAnQCqf+aAnQCqv/XAnQCtf9xAnQCtv/XAnQCt/+FAnQCuf+FAnQCvf+aAnQCvv/XAnQCv/+aAnQCwP/XAnQCwf+aAnQCwv/XAnQCxf+aAnQCx/+aAnQC1P+aAnQC1f/XAnQC4f/XAnQC4//XAnQC/f+aAnQC/v/XAnQDA//XAnQDDf9xAnQDDv/XAnQDD/9xAnQDEP/XAnQDF/+aAnQDGP/XAnUABf9xAnUACv9xAnUBz//XAnUB2P/XAnUB2//XAnUB3P+aAnUB3f/DAnUB3v/XAnUB4f/DAnUB5P+aAnUB6v/XAnUB7f/XAnUB9v/DAnUCB/9xAnUCC/9xAnUCav/XAnUCbf/XAnUCff/sAnUCf//XAnUCgf/XAnUCg//XAnUChf/XAnUCh//XAnUCif/XAnUCi//XAnUCjf/XAnUCqv+aAnUCsv/XAnUCtP/XAnUCtv+aAnUCuP/XAnUCuv/XAnUCvv+aAnUCwP/DAnUCwv/DAnUCxv/XAnUCyP/XAnUC1f/DAnUC4P/XAnUC8P/XAnUC8v/XAnUC9P/XAnUC+P/DAnUC+v/DAnUC/P/DAnUC/v/DAnUDCv/XAnUDDP/XAnUDDv+FAnUDEP+FAnUDFv/XAnUDGP+aAnUDGv/XAnYDDf/sAnYDD//sAngDDf/sAngDD//sAnoAD/+uAnoAEf+uAnoCCP+uAnoCDP+uAnoCgP/sAnoCgv/sAnoCt//sAnoCuf/sAnoDDf/XAnoDD//XAnwAD/9xAnwAEf9xAnwBpP/DAnwBqv+uAnwBrv/DAnwBtf/DAnwBzv/XAnwB1f/XAnwB8v/XAnwCCP9xAnwCDP9xAnwCcv+uAnwCc//XAnwCzv/DAnwCz//XAnwC2f+uAnwC2/+uAnwC3f+uAnwDCf+uAnwDC/+uAnwDEf/DAnwDEv/XAnwDG//DAnwDHP/XAn0ABf/sAn0ACv/sAn0B0P/XAn0B3P/sAn0B3f/sAn0B3//XAn0B4f/sAn0B5P/sAn0B9v/sAn0CB//sAn0CC//sAn0CoP/XAn0Cqv/sAn0Ctv/sAn0CvP/XAn0Cvv/sAn0CwP/sAn0Cwv/sAn0Cy//XAn0C1f/sAn0C5v/XAn0C+P/sAn0C+v/sAn0C/P/sAn0C/v/sAn0DBv/XAn0DCP/XAn0DDv/sAn0DEP/sAn0DGP/sAn4AD/+uAn4AEf+uAn4Bnf/sAn4BpP/XAn4Bpv/sAn4BqP/XAn4Bqv/XAn4Brv/XAn4BsP/XAn4Bsf/sAn4Btf/XAn4BvP/DAn4Bvf/XAn4Bv//XAn4Bwf/XAn4BxP/sAn4Bx//sAn4Bzv/sAn4B1f/sAn4B8v/sAn4CCP+uAn4CDP+uAn4Ccv/XAn4Cc//sAn4Cev/sAn4CfP/XAn4CgP/sAn4Cgv/sAn4Cn//XAn4Cof/sAn4Cqf/sAn4Ctf/DAn4Ct//sAn4Cuf/sAn4Cu//XAn4Cvf/sAn4Cv//XAn4Cwf/XAn4Cyv/XAn4Czv/XAn4Cz//sAn4C1P/XAn4C2f/XAn4C2//XAn4C3f/XAn4C5f/XAn4C5//sAn4C9f/sAn4C9//XAn4C+f/XAn4C+//XAn4C/f/XAn4DBf/XAn4DB//XAn4DDf/XAn4DD//XAn4DEf/XAn4DEv/sAn4DF//sAn4DG//XAn4DHP/sAn8ABf/sAn8ACv/sAn8B0P/XAn8B3P/sAn8B3f/sAn8B3//XAn8B4f/sAn8B5P/sAn8B9v/sAn8CB//sAn8CC//sAn8CoP/XAn8Cqv/sAn8Ctv/sAn8CvP/XAn8Cvv/sAn8CwP/sAn8Cwv/sAn8Cy//XAn8C1f/sAn8C5v/XAn8C+P/sAn8C+v/sAn8C/P/sAn8C/v/sAn8DBv/XAn8DCP/XAn8DDv/sAn8DEP/sAn8DGP/sAoAAD/+FAoAAEf+FAoABn//sAoABpP+aAoABqv9xAoABrv+aAoABtf+aAoABuP/sAoABu//sAoABvv/DAoAByf/sAoABzv+uAoABz//XAoAB1f+uAoAB2P/XAoAB2//XAoAB3v/XAoAB4f/XAoAB6v/XAoAB6wBmAoAB7f/XAoAB7v/sAoAB8v+uAoAB9ABmAoACCP+FAoACDP+FAoACav/XAoACbP/sAoACcv9xAoACc/+uAoACfv/sAoACf//XAoAChP/sAoAChf/XAoAChv/sAoACh//XAoACiP/sAoACif/XAoACiv/sAoACjP/sAoACjf/XAoACmABmAoACqABmAoACsf/sAoACsv/XAoACs//sAoACtP/XAoACwP/XAoACwv/XAoACxf/XAoACxv/DAoACx//XAoACyP/DAoACzv+aAoACz/+uAoAC1f/XAoAC2f9xAoAC2/9xAoAC3f9xAoAC4P/XAoAC7//sAoAC8P/XAoAC8f/sAoAC8v/XAoAC8//sAoAC9P/XAoAC/v/XAoADCf9xAoADCv/XAoADC/9xAoADDP/XAoADEf+aAoADEv+uAoADFf/sAoADFv/XAoADGv/XAoADG/+aAoADHP+uAoEAD/+uAoEAEf+uAoEBzv/XAoEB1f/XAoEB8v/XAoECCP+uAoECDP+uAoECc//XAoECz//XAoEDEv/XAoEDHP/XAoIAD/+FAoIAEf+FAoIBn//sAoIBpP+aAoIBqv9xAoIBrv+aAoIBtf+aAoIBuP/sAoIBu//sAoIBvv/DAoIByf/sAoIBzv+uAoIBz//XAoIB1f+uAoIB2P/XAoIB2//XAoIB3v/XAoIB4f/XAoIB6v/XAoIB6wBmAoIB7f/XAoIB7v/sAoIB8v+uAoIB9ABmAoICCP+FAoICDP+FAoICav/XAoICbP/sAoICcv9xAoICc/+uAoICfv/sAoICf//XAoIChP/sAoIChf/XAoIChv/sAoICh//XAoICiP/sAoICif/XAoICiv/sAoICjP/sAoICjf/XAoICmABmAoICqABmAoICsf/sAoICsv/XAoICs//sAoICtP/XAoICwP/XAoICwv/XAoICxf/XAoICxv/DAoICx//XAoICyP/DAoICzv+aAoICz/+uAoIC1f/XAoIC2f9xAoIC2/9xAoIC3f9xAoIC4P/XAoIC7//sAoIC8P/XAoIC8f/sAoIC8v/XAoIC8//sAoIC9P/XAoIC/v/XAoIDCf9xAoIDCv/XAoIDC/9xAoIDDP/XAoIDEf+aAoIDEv+uAoIDFf/sAoIDFv/XAoIDGv/XAoIDG/+aAoIDHP+uAoMAD/+uAoMAEf+uAoMBzv/XAoMB1f/XAoMB8v/XAoMCCP+uAoMCDP+uAoMCc//XAoMCz//XAoMDEv/XAoMDHP/XAoQAD/+uAoQAEf+uAoQBzv/XAoQB1f/XAoQB8v/XAoQCCP+uAoQCDP+uAoQCc//XAoQCz//XAoQDEv/XAoQDHP/XAoUAD/+uAoUAEf+uAoUBzv/XAoUB1f/XAoUB8v/XAoUCCP+uAoUCDP+uAoUCc//XAoUCz//XAoUDEv/XAoUDHP/XAoYAD/+uAoYAEf+uAoYBnf/sAoYBpP/XAoYBpv/sAoYBqP/XAoYBqv/XAoYBrv/XAoYBsP/XAoYBsf/sAoYBtf/XAoYBvP/DAoYBvf/XAoYBv//XAoYBwf/XAoYBxP/sAoYBx//sAoYBzv/sAoYB1f/sAoYB8v/sAoYCCP+uAoYCDP+uAoYCcv/XAoYCc//sAoYCev/sAoYCfP/XAoYCgP/sAoYCgv/sAoYCn//XAoYCof/sAoYCqf/sAoYCtf/DAoYCt//sAoYCuf/sAoYCu//XAoYCvf/sAoYCv//XAoYCwf/XAoYCyv/XAoYCzv/XAoYCz//sAoYC1P/XAoYC2f/XAoYC2//XAoYC3f/XAoYC5f/XAoYC5//sAoYC9f/sAoYC9//XAoYC+f/XAoYC+//XAoYC/f/XAoYDBf/XAoYDB//XAoYDDf/XAoYDD//XAoYDEf/XAoYDEv/sAoYDF//sAoYDG//XAoYDHP/sAocABf/sAocACv/sAocB0P/XAocB3P/sAocB3f/sAocB3//XAocB4f/sAocB5P/sAocB9v/sAocCB//sAocCC//sAocCoP/XAocCqv/sAocCtv/sAocCvP/XAocCvv/sAocCwP/sAocCwv/sAocCy//XAocC1f/sAocC5v/XAocC+P/sAocC+v/sAocC/P/sAocC/v/sAocDBv/XAocDCP/XAocDDv/sAocDEP/sAocDGP/sAogAD/+uAogAEf+uAogBnf/sAogBpP/XAogBpv/sAogBqP/XAogBqv/XAogBrv/XAogBsP/XAogBsf/sAogBtf/XAogBvP/DAogBvf/XAogBv//XAogBwf/XAogBxP/sAogBx//sAogBzv/sAogB1f/sAogB8v/sAogCCP+uAogCDP+uAogCcv/XAogCc//sAogCev/sAogCfP/XAogCgP/sAogCgv/sAogCn//XAogCof/sAogCqf/sAogCtf/DAogCt//sAogCuf/sAogCu//XAogCvf/sAogCv//XAogCwf/XAogCyv/XAogCzv/XAogCz//sAogC1P/XAogC2f/XAogC2//XAogC3f/XAogC5f/XAogC5//sAogC9f/sAogC9//XAogC+f/XAogC+//XAogC/f/XAogDBf/XAogDB//XAogDDf/XAogDD//XAogDEf/XAogDEv/sAogDF//sAogDG//XAogDHP/sAokABf/sAokACv/sAokB0P/XAokB3P/sAokB3f/sAokB3//XAokB4f/sAokB5P/sAokB9v/sAokCB//sAokCC//sAokCoP/XAokCqv/sAokCtv/sAokCvP/XAokCvv/sAokCwP/sAokCwv/sAokCy//XAokC1f/sAokC5v/XAokC+P/sAokC+v/sAokC/P/sAokC/v/sAokDBv/XAokDCP/XAokDDv/sAokDEP/sAokDGP/sAooAD/+uAooAEf+uAooBnf/sAooBpP/XAooBpv/sAooBqP/XAooBqv/XAooBrv/XAooBsP/XAooBsf/sAooBtf/XAooBvP/DAooBvf/XAooBv//XAooBwf/XAooBxP/sAooBx//sAooBzv/sAooB1f/sAooB8v/sAooCCP+uAooCDP+uAooCcv/XAooCc//sAooCev/sAooCfP/XAooCgP/sAooCgv/sAooCn//XAooCof/sAooCqf/sAooCtf/DAooCt//sAooCuf/sAooCu//XAooCvf/sAooCv//XAooCwf/XAooCyv/XAooCzv/XAooCz//sAooC1P/XAooC2f/XAooC2//XAooC3f/XAooC5f/XAooC5//sAooC9f/sAooC9//XAooC+f/XAooC+//XAooC/f/XAooDBf/XAooDB//XAooDDf/XAooDD//XAooDEf/XAooDEv/sAooDF//sAooDG//XAooDHP/sAosAD/+uAosAEf+uAosBzv/XAosB1f/XAosB8v/XAosCCP+uAosCDP+uAosCc//XAosCz//XAosDEv/XAosDHP/XAowBn//XAowBuP/XAowBu//XAowBvv/XAowB4f/XAowCbP/XAowCfv/XAowChP/XAowChv/XAowCiP/XAowCiv/XAowCjP/XAowCsf/XAowCs//XAowCwP/XAowCwv/XAowCxf/XAowCx//XAowC1f/XAowC7//XAowC8f/XAowC8//XAowC/v/XAowDCf/XAowDC//XAowDDv/XAowDEP/XAowDFf/XApUBowDhApUC6gApApUDDv/XApUDEP/XApYABf/sApYACv/sApYCB//sApYCC//sApcABf+uApcACv+uApcBnf/XApcBpv/XApcBvP+uApcBwf+uApcBxP/XApcB3P/XApcB5P/XApcCB/+uApcCC/+uApcCfP+uApcCgP/DApcCgv/DApcCqf/XApcCqv/XApcCtf+uApcCtv/XApcCt//DApcCuf/DApcCvf/XApcCvv/XApcCv/+uApcCwf+uApcC1P+uApcC/f+uApcDDf+aApcDD/+aApcDF//XApcDGP/XApgABf+FApgACv+FApgB0P/XApgB3P+aApgB3f/DApgB3//XApgB4f+uApgB5P+aApgB9v/DApgCB/+FApgCC/+FApgCbf/XApgCgf/XApgCg//XApgCi//XApgCoP/XApgCqv+aApgCtv+aApgCuP/DApgCuv/DApgCvP/XApgCvv+aApgCwP+uApgCwv+uApgCxv/XApgCyP/XApgCy//XApgC1f+uApgC5v/XApgC6v/XApgC+P/DApgC+v/DApgC/P/DApgC/v+uApgDBv/XApgDCP/XApgDDv+aApgDEP+aApgDGP+aApkAD/72ApkAEf72ApkBpP+FApkBqv+aApkBrv+FApkBsP/XApkBtf+FApkBv//XApkBzv+aApkB1f+aApkB8v+aApkCCP72ApkCDP72ApkCcv+aApkCc/+aApkCdv/sApkCn//XApkCu//XApkCyv/XApkCzv+FApkCz/+aApkC2f+aApkC2/+aApkC3f+aApkC5f/XApkDBf/XApkDB//XApkDCf+uApkDC/+uApkDEf+FApkDEv+aApkDG/+FApkDHP+aApoABf/sApoACv/sApoB0P/XApoB3P/sApoB3f/sApoB3//XApoB4f/sApoB5P/sApoB9v/sApoCB//sApoCC//sApoCoP/XApoCqv/sApoCtv/sApoCvP/XApoCvv/sApoCwP/sApoCwv/sApoCy//XApoC1f/sApoC5v/XApoC+P/sApoC+v/sApoC/P/sApoC/v/sApoDBv/XApoDCP/XApoDDv/sApoDEP/sApoDGP/sApsAD/+aApsAEP/XApsAEf+aApsBnQApApsBn//XApsBpP+uApsBpgApApsBqv+FApsBrv+uApsBtf+uApsBuP/XApsBu//XApsBvAApApsBvv/DApsBxAApApsBzP/DApsBzf/DApsBzv+aApsBz/+uApsB0P/XApsB0f/XApsB0v/DApsB0//DApsB1P/DApsB1f+aApsB1v/DApsB1//DApsB2P+uApsB2f/DApsB2v/DApsB2/+uApsB3v+uApsB3//XApsB4P/DApsB4f+aApsB4v/DApsB4//DApsB5f/DApsB5v/DApsB5//XApsB6P/DApsB6v+uApsB6wApApsB7P/DApsB7f+uApsB7v/DApsB8v+aApsB8//DApsB9AApApsB9f/DApsB9//DApsB+f/DApsCAv/XApsCA//XApsCBP/XApsCCP+aApsCDP+aApsCav+uApsCa//DApsCbP/XApsCcf/DApsCcv+FApsCc/+aApsCdf/DApsCd//XApsCef/DApsCff/DApsCfv/XApsCf/+uApsChP/XApsChf+uApsChv/XApsCh/+uApsCiP/XApsCif+uApsCiv/XApsCjP/XApsCjf+uApsClv/DApsCmAApApsCmv/DApsCnv/DApsCoP/XApsCov/XApsCpP/DApsCpv/DApsCqAApApsCqQApApsCrP/DApsCrv/DApsCsP/DApsCsf/XApsCsv+uApsCs//XApsCtP+uApsCtQApApsCvP/XApsCvQApApsCwP+aApsCwv+aApsCxP/DApsCxf/XApsCxv/DApsCx//XApsCyP/DApsCy//XApsCzf/DApsCzv+uApsCz/+aApsC0f/DApsC0//DApsC1f+aApsC1//DApsC2f+FApsC2/+FApsC3f+FApsC4P+uApsC5v/XApsC6P/XApsC7P/DApsC7v/DApsC7//XApsC8P+uApsC8f/XApsC8v+uApsC8//XApsC9P+uApsC9v/XApsC/v+aApsDAP/DApsDAv/DApsDBv/XApsDCP/XApsDCf+aApsDCv+uApsDC/+aApsDDP+uApsDDv/XApsDEP/XApsDEf+uApsDEv+aApsDFP/DApsDFf/XApsDFv+uApsDFwApApsDGv+uApsDG/+uApsDHP+aApwAD//DApwAEf/DApwBzv/DApwBz//XApwB1f/DApwB2P/XApwB2//XApwB3v/XApwB6v/XApwB7f/XApwB8v/DApwCCP/DApwCDP/DApwCav/XApwCc//DApwCf//XApwChf/XApwCh//XApwCif/XApwCjf/XApwCsv/XApwCtP/XApwCz//DApwC4P/XApwC8P/XApwC8v/XApwC9P/XApwDCv/XApwDDP/XApwDEv/DApwDFv/XApwDGv/XApwDHP/DAp0ABf/DAp0ACv/DAp0Bnf/DAp0BowBmAp0Bpv/DAp0BvP/DAp0Bwf+uAp0BxP/DAp0B3P/XAp0B4f/XAp0B5P/XAp0CB//DAp0CC//DAp0CfP+uAp0CgP/DAp0Cgv/DAp0Cqf/DAp0Cqv/XAp0Ctf/DAp0Ctv/XAp0Ct//XAp0Cuf/XAp0Cvf/DAp0Cvv/XAp0Cv/+uAp0CwP/XAp0Cwf+uAp0Cwv/XAp0C1P+uAp0C1f/XAp0C/f+uAp0C/v/XAp0DDf/XAp0DDv/DAp0DD//XAp0DEP/DAp0DF//DAp0DGP/XAp4ABf/DAp4ACv/DAp4CB//DAp4CC//DAp4DDv/XAp4DEP/XAp8Bn//XAp8BowDhAp8BuP/XAp8Bu//XAp8Bvv/DAp8B3P/XAp8B4f+uAp8B5P/XAp8CbP/XAp8CewA9Ap8Cff/sAp8Cfv/XAp8ChP/XAp8Chv/XAp8CiP/XAp8Civ/XAp8CjP/XAp8Cqv/XAp8Csf/XAp8Cs//XAp8Ctv/XAp8Cvv/XAp8CwP+uAp8Cwv+uAp8Cxf/DAp8Cxv/XAp8Cx//DAp8CyP/XAp8C1f+uAp8C7//XAp8C8f/XAp8C8//XAp8C/v+uAp8DDv/XAp8DEP/XAp8DFf/XAp8DGP/XAqABz//sAqAB2P/sAqAB2//sAqAB3v/sAqAB4f/sAqAB6v/sAqAB7f/sAqACav/sAqACf//sAqAChf/sAqACh//sAqACif/sAqACjf/sAqACsv/sAqACtP/sAqACwP/sAqACwv/sAqAC1f/sAqAC4P/sAqAC8P/sAqAC8v/sAqAC9P/sAqAC/v/sAqADCv/sAqADDP/sAqADDv/XAqADEP/XAqADFv/sAqADGv/sAqEAD/+uAqEAEf+uAqECCP+uAqECDP+uAqECgP/sAqECgv/sAqECt//sAqECuf/sAqEDDf/XAqEDD//XAqIB6QApAqMBn//XAqMBowDhAqMBuP/XAqMBu//XAqMBvv/DAqMB3P/XAqMB4f+uAqMB5P/XAqMCbP/XAqMCewA9AqMCff/sAqMCfv/XAqMChP/XAqMChv/XAqMCiP/XAqMCiv/XAqMCjP/XAqMCqv/XAqMCsf/XAqMCs//XAqMCtv/XAqMCvv/XAqMCwP+uAqMCwv+uAqMCxf/DAqMCxv/XAqMCx//DAqMCyP/XAqMC1f+uAqMC7//XAqMC8f/XAqMC8//XAqMC/v+uAqMDDv/XAqMDEP/XAqMDFf/XAqMDGP/XAqQBz//sAqQB2P/sAqQB2//sAqQB3v/sAqQB4f/sAqQB6v/sAqQB7f/sAqQCav/sAqQCf//sAqQChf/sAqQCh//sAqQCif/sAqQCjf/sAqQCsv/sAqQCtP/sAqQCwP/sAqQCwv/sAqQC1f/sAqQC4P/sAqQC8P/sAqQC8v/sAqQC9P/sAqQC/v/sAqQDCv/sAqQDDP/sAqQDDv/XAqQDEP/XAqQDFv/sAqQDGv/sAqUBn//XAqUBuP/XAqUBu//XAqUBvv/XAqUBwf/XAqUB4f/XAqUCbP/XAqUCfP/XAqUCfv/XAqUChP/XAqUChv/XAqUCiP/XAqUCiv/XAqUCjP/XAqUCsf/XAqUCs//XAqUCv//XAqUCwP/XAqUCwf/XAqUCwv/XAqUCxf+aAqUCx/+aAqUC1P/XAqUC1f/XAqUC7//XAqUC8f/XAqUC8//XAqUC/f/XAqUC/v/XAqUDCf/XAqUDC//XAqUDDv/XAqUDEP/XAqUDFf/XAqUDGf/sAqYBz//XAqYB2P/XAqYB2//XAqYB3v/XAqYB4f/XAqYB6v/XAqYB7f/XAqYCav/XAqYCf//XAqYChf/XAqYCh//XAqYCif/XAqYCjf/XAqYCsv/XAqYCtP/XAqYCwP/XAqYCwv/XAqYCxv/XAqYCyP/XAqYC1f/XAqYC4P/XAqYC8P/XAqYC8v/XAqYC9P/XAqYC/v/XAqYDCv/XAqYDDP/XAqYDFv/XAqYDGv/XAqcBn//XAqcBuP/XAqcBu//XAqcBvv/XAqcBwf/XAqcB4f/XAqcCbP/XAqcCfP/XAqcCfv/XAqcChP/XAqcChv/XAqcCiP/XAqcCiv/XAqcCjP/XAqcCsf/XAqcCs//XAqcCv//XAqcCwP/XAqcCwf/XAqcCwv/XAqcCxf+aAqcCx/+aAqcC1P/XAqcC1f/XAqcC7//XAqcC8f/XAqcC8//XAqcC/f/XAqcC/v/XAqcDCf/XAqcDC//XAqcDDv/XAqcDEP/XAqcDFf/XAqcDGf/sAqgBz//XAqgB2P/XAqgB2//XAqgB3v/XAqgB4f/XAqgB6v/XAqgB7f/XAqgCav/XAqgCf//XAqgChf/XAqgCh//XAqgCif/XAqgCjf/XAqgCsv/XAqgCtP/XAqgCwP/XAqgCwv/XAqgCxv/XAqgCyP/XAqgC1f/XAqgC4P/XAqgC8P/XAqgC8v/XAqgC9P/XAqgC/v/XAqgDCv/XAqgDDP/XAqgDFv/XAqgDGv/XAqkBn//XAqkBuP/XAqkBu//XAqkBvv/XAqkBwf/XAqkB4f/XAqkCbP/XAqkCfP/XAqkCfv/XAqkChP/XAqkChv/XAqkCiP/XAqkCiv/XAqkCjP/XAqkCsf/XAqkCs//XAqkCv//XAqkCwP/XAqkCwf/XAqkCwv/XAqkCxf+aAqkCx/+aAqkC1P/XAqkC1f/XAqkC7//XAqkC8f/XAqkC8//XAqkC/f/XAqkC/v/XAqkDCf/XAqkDC//XAqkDDv/XAqkDEP/XAqkDFf/XAqkDGf/sAqoBz//XAqoB2P/XAqoB2//XAqoB3v/XAqoB4f/XAqoB6v/XAqoB7f/XAqoCav/XAqoCf//XAqoChf/XAqoCh//XAqoCif/XAqoCjf/XAqoCsv/XAqoCtP/XAqoCwP/XAqoCwv/XAqoCxv/XAqoCyP/XAqoC1f/XAqoC4P/XAqoC8P/XAqoC8v/XAqoC9P/XAqoC/v/XAqoDCv/XAqoDDP/XAqoDFv/XAqoDGv/XAqsBowDhAqsC6gApAqsDDv/XAqsDEP/XAqwABf/sAqwACv/sAqwCB//sAqwCC//sAq0AD/+aAq0AEP/XAq0AEf+aAq0BnQApAq0Bn//XAq0BpP+uAq0BpgApAq0Bqv+FAq0Brv+uAq0Btf+uAq0BuP/XAq0Bu//XAq0BvAApAq0Bvv/DAq0BxAApAq0BzP/DAq0Bzf/DAq0Bzv+aAq0Bz/+uAq0B0P/XAq0B0f/XAq0B0v/DAq0B0//DAq0B1P/DAq0B1f+aAq0B1v/DAq0B1//DAq0B2P+uAq0B2f/DAq0B2v/DAq0B2/+uAq0B3v+uAq0B3//XAq0B4P/DAq0B4f+aAq0B4v/DAq0B4//DAq0B5f/DAq0B5v/DAq0B5//XAq0B6P/DAq0B6v+uAq0B6wApAq0B7P/DAq0B7f+uAq0B7v/DAq0B8v+aAq0B8//DAq0B9AApAq0B9f/DAq0B9//DAq0B+f/DAq0CAv/XAq0CA//XAq0CBP/XAq0CCP+aAq0CDP+aAq0Cav+uAq0Ca//DAq0CbP/XAq0Ccf/DAq0Ccv+FAq0Cc/+aAq0Cdf/DAq0Cd//XAq0Cef/DAq0Cff/DAq0Cfv/XAq0Cf/+uAq0ChP/XAq0Chf+uAq0Chv/XAq0Ch/+uAq0CiP/XAq0Cif+uAq0Civ/XAq0CjP/XAq0Cjf+uAq0Clv/DAq0CmAApAq0Cmv/DAq0Cnv/DAq0CoP/XAq0Cov/XAq0CpP/DAq0Cpv/DAq0CqAApAq0CqQApAq0CrP/DAq0Crv/DAq0CsP/DAq0Csf/XAq0Csv+uAq0Cs//XAq0CtP+uAq0CtQApAq0CvP/XAq0CvQApAq0CwP+aAq0Cwv+aAq0CxP/DAq0Cxf/XAq0Cxv/DAq0Cx//XAq0CyP/DAq0Cy//XAq0Czf/DAq0Czv+uAq0Cz/+aAq0C0f/DAq0C0//DAq0C1f+aAq0C1//DAq0C2f+FAq0C2/+FAq0C3f+FAq0C4P+uAq0C5v/XAq0C6P/XAq0C7P/DAq0C7v/DAq0C7//XAq0C8P+uAq0C8f/XAq0C8v+uAq0C8//XAq0C9P+uAq0C9v/XAq0C/v+aAq0DAP/DAq0DAv/DAq0DBv/XAq0DCP/XAq0DCf+aAq0DCv+uAq0DC/+aAq0DDP+uAq0DDv/XAq0DEP/XAq0DEf+uAq0DEv+aAq0DFP/DAq0DFf/XAq0DFv+uAq0DFwApAq0DGv+uAq0DG/+uAq0DHP+aAq4AD/+aAq4AEP/XAq4AEf+aAq4Bzv/DAq4Bz//sAq4B1f/DAq4B2P/sAq4B2//sAq4B3v/sAq4B6v/sAq4B7f/sAq4B8v/DAq4CAv/XAq4CA//XAq4CBP/XAq4CCP+aAq4CDP+aAq4Cav/sAq4Cc//DAq4Cf//sAq4Chf/sAq4Ch//sAq4Cif/sAq4Cjf/sAq4Csv/sAq4CtP/sAq4Cz//DAq4C4P/sAq4C8P/sAq4C8v/sAq4C9P/sAq4DCv/sAq4DDP/sAq4DEv/DAq4DFv/sAq4DGv/sAq4DHP/DAq8ABf9cAq8ACv9cAq8Bnf+aAq8BowBmAq8Bpv+aAq8BvP9IAq8Bwf+FAq8BxP+aAq8B3P+uAq8B4f/XAq8B5P+uAq8CB/9cAq8CC/9cAq8CfP+FAq8CgP9xAq8Cgv9xAq8Cqf+aAq8Cqv+uAq8Ctf9IAq8Ctv+uAq8Ct/+aAq8Cuf+aAq8Cvf+aAq8Cvv+uAq8Cv/+FAq8CwP/XAq8Cwf+FAq8Cwv/XAq8Cxf/DAq8Cxv/XAq8Cx//DAq8CyP/XAq8C1P+FAq8C1f/XAq8C/f+FAq8C/v/XAq8DDf9IAq8DDv+uAq8DD/9IAq8DEP+uAq8DF/+aAq8DGP+uArAABf9xArAACv9xArAB3P+aArAB4f/XArAB5P+aArACB/9xArACC/9xArACbf/XArACgf/XArACg//XArACi//XArACqv+aArACtv+aArACuP/XArACuv/XArACvv+aArACwP/XArACwv/XArACxv/XArACyP/XArAC1f/XArAC/v/XArADDv9xArADEP9xArADGP+aArEBnf/XArEBpv/XArEBvP/DArEBxP/XArECgP/sArECgv/sArECqf/XArECtf/DArECt//sArECuf/sArECvf/XArEDDf/XArEDD//XArEDF//XArIABf/sArIACv/sArIB0P/XArIB3P/sArIB3f/sArIB3//XArIB4f/sArIB5P/sArIB9v/sArICB//sArICC//sArICoP/XArICqv/sArICtv/sArICvP/XArICvv/sArICwP/sArICwv/sArICy//XArIC1f/sArIC5v/XArIC+P/sArIC+v/sArIC/P/sArIC/v/sArIDBv/XArIDCP/XArIDDv/sArIDEP/sArIDGP/sArMBn//XArMBuP/XArMBu//XArMBvv/XArMB4f/XArMCbP/XArMCfv/XArMChP/XArMChv/XArMCiP/XArMCiv/XArMCjP/XArMCsf/XArMCs//XArMCwP/XArMCwv/XArMCxf/XArMCx//XArMC1f/XArMC7//XArMC8f/XArMC8//XArMC/v/XArMDCf/XArMDC//XArMDDv/XArMDEP/XArMDFf/XArUAD/+FArUAEP+uArUAEf+FArUBn//XArUBpP+aArUBqv9xArUBrv+aArUBtf+aArUBuP/XArUBu//XArUBvAApArUBvv+uArUBzP+aArUBzf+aArUBzv+FArUBz/9xArUB0P/XArUB0f/XArUB0v+aArUB0/+aArUB1P+aArUB1f+FArUB1v+aArUB1/+aArUB2P9xArUB2f+aArUB2v+aArUB2/9xArUB3P+uArUB3f+uArUB3v9xArUB3//XArUB4P+aArUB4f+aArUB4v+aArUB4/+aArUB5P+uArUB5f+aArUB5v+aArUB5//XArUB6P+aArUB6f/DArUB6v9xArUB7P+aArUB7f9xArUB7v+FArUB8v+FArUB8/+aArUB9f+aArUB9v+uArUB9/+aArUB+f+aArUCAv+uArUCA/+uArUCBP+uArUCCP+FArUCDP+FArUCav9xArUCa/+aArUCbP/XArUCbf/XArUCcf+aArUCcv9xArUCc/+FArUCdf+aArUCd/+aArUCef+aArUCff+aArUCfv/XArUCf/9xArUCgf/XArUCg//XArUChP/XArUChf9xArUChv/XArUCh/9xArUCiP/XArUCif9xArUCiv/XArUCi//XArUCjP/XArUCjf9xArUClv+aArUCmv+aArUCnv+aArUCoP/XArUCov/XArUCpP+aArUCpv+aArUCqv+uArUCrP+aArUCrv+aArUCsP+aArUCsf/XArUCsv9xArUCs//XArUCtP9xArUCtQApArUCtv+uArUCuP+uArUCuv+uArUCvP/XArUCvv+uArUCwP+aArUCwv+aArUCxP+aArUCxf+aArUCxv9xArUCx/+aArUCyP9xArUCy//XArUCzf+aArUCzv+aArUCz/+FArUC0f+aArUC0/+aArUC1f+aArUC1/+aArUC2f9xArUC2/9xArUC3f9xArUC4P9xArUC5v/XArUC6P/XArUC6v/DArUC7P+aArUC7v+aArUC7//XArUC8P9xArUC8f/XArUC8v9xArUC8//XArUC9P9xArUC9v/XArUC+P+uArUC+v+uArUC/P+uArUC/v+aArUDAP+aArUDAv+aArUDBv/XArUDCP/XArUDCf9xArUDCv9xArUDC/9xArUDDP9xArUDDv+aArUDEP+aArUDEf+aArUDEv+FArUDFP+aArUDFf/XArUDFv9xArUDGP+uArUDGv9xArUDG/+aArUDHP+FArYAD/+aArYAEP/XArYAEf+aArYBzv/DArYBz//sArYB1f/DArYB2P/sArYB2//sArYB3v/sArYB6v/sArYB7f/sArYB8v/DArYCAv/XArYCA//XArYCBP/XArYCCP+aArYCDP+aArYCav/sArYCc//DArYCf//sArYChf/sArYCh//sArYCif/sArYCjf/sArYCsv/sArYCtP/sArYCz//DArYC4P/sArYC8P/sArYC8v/sArYC9P/sArYDCv/sArYDDP/sArYDEv/DArYDFv/sArYDGv/sArYDHP/DArcAD/+FArcAEf+FArcBn//XArcBpP+uArcBqv+FArcBrv+uArcBtf+uArcBuP/XArcBu//XArcBvv/DArcByv+uArcBzP/DArcBzf/DArcBzv+aArcBz/+aArcB0v/DArcB0//DArcB1P/DArcB1f+aArcB1v/DArcB1//DArcB2P+aArcB2f/DArcB2v/DArcB2/+aArcB3v+aArcB4P/DArcB4f+uArcB4v/DArcB4//DArcB5f/DArcB5v/DArcB6P/DArcB6f/XArcB6v+aArcB6wApArcB7P/DArcB7f+aArcB7v+uArcB8v+aArcB8//DArcB9AApArcB9f/DArcB9//DArcB+f/DArcCCP+FArcCDP+FArcCav+aArcCa//DArcCbP/XArcCcf/DArcCcv+FArcCc/+aArcCdf/DArcCd//XArcCef/DArcCff/XArcCfv/XArcCf/+aArcChP/XArcChf+aArcChv/XArcCh/+aArcCiP/XArcCif+aArcCiv/XArcCjP/XArcCjf+aArcClv/DArcCmAApArcCmv/DArcCnv/DArcCpP/DArcCpv/DArcCqAApArcCrP/DArcCrv/DArcCsP/DArcCsf/XArcCsv+aArcCs//XArcCtP+aArcCwP+uArcCwv+uArcCxP/DArcCxv+uArcCyP+uArcCzf/DArcCzv+uArcCz/+aArcC0f/DArcC0//DArcC1f+uArcC1//DArcC2f+FArcC2v+uArcC2/+FArcC3P+uArcC3f+FArcC3v+uArcC4P+aArcC4f/sArcC4v+uArcC4//sArcC5P+uArcC7P/DArcC7v/DArcC7//XArcC8P+aArcC8f/XArcC8v+aArcC8//XArcC9P+aArcC/v+uArcDAP/DArcDAv/DArcDCf+uArcDCv+aArcDC/+uArcDDP+aArcDDv/XArcDEP/XArcDEf+uArcDEv+aArcDFP/DArcDFf/XArcDFv+aArcDGf/sArcDGv+aArcDG/+uArcDHP+aArgAD/+uArgAEf+uArgBzv/sArgB1f/sArgB8v/sArgCCP+uArgCDP+uArgCc//sArgCz//sArgDEv/sArgDHP/sArkAD/+FArkAEf+FArkBn//XArkBpP+uArkBqv+FArkBrv+uArkBtf+uArkBuP/XArkBu//XArkBvv/DArkByv+uArkBzP/DArkBzf/DArkBzv+aArkBz/+aArkB0v/DArkB0//DArkB1P/DArkB1f+aArkB1v/DArkB1//DArkB2P+aArkB2f/DArkB2v/DArkB2/+aArkB3v+aArkB4P/DArkB4f+uArkB4v/DArkB4//DArkB5f/DArkB5v/DArkB6P/DArkB6f/XArkB6v+aArkB6wApArkB7P/DArkB7f+aArkB7v+uArkB8v+aArkB8//DArkB9AApArkB9f/DArkB9//DArkB+f/DArkCCP+FArkCDP+FArkCav+aArkCa//DArkCbP/XArkCcf/DArkCcv+FArkCc/+aArkCdf/DArkCd//XArkCef/DArkCff/XArkCfv/XArkCf/+aArkChP/XArkChf+aArkChv/XArkCh/+aArkCiP/XArkCif+aArkCiv/XArkCjP/XArkCjf+aArkClv/DArkCmAApArkCmv/DArkCnv/DArkCpP/DArkCpv/DArkCqAApArkCrP/DArkCrv/DArkCsP/DArkCsf/XArkCsv+aArkCs//XArkCtP+aArkCwP+uArkCwv+uArkCxP/DArkCxv+uArkCyP+uArkCzf/DArkCzv+uArkCz/+aArkC0f/DArkC0//DArkC1f+uArkC1//DArkC2f+FArkC2v+uArkC2/+FArkC3P+uArkC3f+FArkC3v+uArkC4P+aArkC4f/sArkC4v+uArkC4//sArkC5P+uArkC7P/DArkC7v/DArkC7//XArkC8P+aArkC8f/XArkC8v+aArkC8//XArkC9P+aArkC/v+uArkDAP/DArkDAv/DArkDCf+uArkDCv+aArkDC/+uArkDDP+aArkDDv/XArkDEP/XArkDEf+uArkDEv+aArkDFP/DArkDFf/XArkDFv+aArkDGf/sArkDGv+aArkDG/+uArkDHP+aAroAD/+uAroAEf+uAroBzv/sAroB1f/sAroB8v/sAroCCP+uAroCDP+uAroCc//sAroCz//sAroDEv/sAroDHP/sArsBn//XArsBowDhArsBuP/XArsBu//XArsBvv/DArsB3P/XArsB4f+uArsB5P/XArsCbP/XArsCewA9ArsCff/sArsCfv/XArsChP/XArsChv/XArsCiP/XArsCiv/XArsCjP/XArsCqv/XArsCsf/XArsCs//XArsCtv/XArsCvv/XArsCwP+uArsCwv+uArsCxf/DArsCxv/XArsCx//DArsCyP/XArsC1f+uArsC7//XArsC8f/XArsC8//XArsC/v+uArsDDv/XArsDEP/XArsDFf/XArsDGP/XArwBz//sArwB2P/sArwB2//sArwB3v/sArwB4f/sArwB6v/sArwB7f/sArwCav/sArwCf//sArwChf/sArwCh//sArwCif/sArwCjf/sArwCsv/sArwCtP/sArwCwP/sArwCwv/sArwC1f/sArwC4P/sArwC8P/sArwC8v/sArwC9P/sArwC/v/sArwDCv/sArwDDP/sArwDDv/XArwDEP/XArwDFv/sArwDGv/sAr0BowDhAr0C6gApAr0DDv/XAr0DEP/XAr4ABf/sAr4ACv/sAr4CB//sAr4CC//sAr8BowDhAr8C6gApAr8DDv/XAr8DEP/XAsAABf/sAsAACv/sAsACB//sAsACC//sAsMABf/DAsMACv/DAsMBnf/XAsMBpv/XAsMBvP+FAsMBwf+uAsMBxP/XAsMB3P/XAsMB3f/sAsMB4f/sAsMB5P/XAsMB9v/sAsMCB//DAsMCC//DAsMCfP+uAsMCgP/DAsMCgv/DAsMCqf/XAsMCqv/XAsMCtf+FAsMCtv/XAsMCt/+aAsMCuf+aAsMCvf/XAsMCvv/XAsMCv/+uAsMCwP/sAsMCwf+uAsMCwv/sAsMC1P+uAsMC1f/sAsMC+P/sAsMC+v/sAsMC/P/sAsMC/f+uAsMC/v/sAsMDDf+uAsMDDv/XAsMDD/+uAsMDEP/XAsMDF//XAsMDGP/XAsQABf+aAsQACv+aAsQB3P/XAsQB3f/XAsQB5P/XAsQB9v/XAsQCB/+aAsQCC/+aAsQCqv/XAsQCtv/XAsQCuP/XAsQCuv/XAsQCvv/XAsQC+P/XAsQC+v/XAsQC/P/XAsQDDv+uAsQDEP+uAsQDGP/XAsUBvP/XAsUCgP/sAsUCgv/sAsUCtf/XAsUCt//sAsUCuf/sAsUDDf/sAsUDD//sAsYABf/sAsYACv/sAsYCB//sAsYCC//sAscBvP/XAscCgP/sAscCgv/sAscCtf/XAscCt//sAscCuf/sAscDDf/sAscDD//sAsgABf/sAsgACv/sAsgCB//sAsgCC//sAsoBn//XAsoBuP/XAsoBu//XAsoBvv/XAsoBwf/XAsoB4f/XAsoCbP/XAsoCfP/XAsoCfv/XAsoChP/XAsoChv/XAsoCiP/XAsoCiv/XAsoCjP/XAsoCsf/XAsoCs//XAsoCv//XAsoCwP/XAsoCwf/XAsoCwv/XAsoCxf+aAsoCx/+aAsoC1P/XAsoC1f/XAsoC7//XAsoC8f/XAsoC8//XAsoC/f/XAsoC/v/XAsoDCf/XAsoDC//XAsoDDv/XAsoDEP/XAsoDFf/XAsoDGf/sAssBz//XAssB2P/XAssB2//XAssB3v/XAssB4f/XAssB6v/XAssB7f/XAssCav/XAssCf//XAssChf/XAssCh//XAssCif/XAssCjf/XAssCsv/XAssCtP/XAssCwP/XAssCwv/XAssCxv/XAssCyP/XAssC1f/XAssC4P/XAssC8P/XAssC8v/XAssC9P/XAssC/v/XAssDCv/XAssDDP/XAssDFv/XAssDGv/XAswABf/DAswACv/DAswBowBmAswBvP/XAswBvv/XAswBwf+uAswB3P/DAswB4f/XAswB5P/DAswCB//DAswCC//DAswCbf/sAswCfP+uAswCgP/XAswCgf/sAswCgv/XAswCg//sAswCi//sAswCqv/DAswCtf/XAswCtv/DAswCt//XAswCuP/sAswCuf/XAswCuv/sAswCvv/DAswCv/+uAswCwP/XAswCwf+uAswCwv/XAswCxf/DAswCxv/XAswCx//DAswCyP/XAswC1P+uAswC1f/XAswC/f+uAswC/v/XAswDDf/XAswDDv/DAswDD//XAswDEP/DAswDGP/DAs0B4f/XAs0CwP/XAs0Cwv/XAs0C1f/XAs0C/v/XAs4BowDhAs4C6gApAs4DDv/XAs4DEP/XAs8ABf/sAs8ACv/sAs8CB//sAs8CC//sAtIBowDhAtIC6gApAtIDDv/XAtIDEP/XAtMABf/sAtMACv/sAtMCB//sAtMCC//sAtYBowDhAtYC6gApAtYDDv/XAtYDEP/XAtcABf/sAtcACv/sAtcCB//sAtcCC//sAtkABf9xAtkACv9xAtkBnf+aAtkBpv+aAtkBvP9xAtkBvv/XAtkBwf+aAtkBxP+aAtkB3P/XAtkB4f/XAtkB5P/XAtkCB/9xAtkCC/9xAtkCbv/XAtkCfP+aAtkCgP+uAtkCgv+uAtkCl//XAtkCm//XAtkCp//XAtkCqf+aAtkCqv/XAtkCtf9xAtkCtv/XAtkCt/+FAtkCuf+FAtkCvf+aAtkCvv/XAtkCv/+aAtkCwP/XAtkCwf+aAtkCwv/XAtkCxf+aAtkCx/+aAtkC1P+aAtkC1f/XAtkC4f/XAtkC4//XAtkC/f+aAtkC/v/XAtkDA//XAtkDDf9xAtkDDv/XAtkDD/9xAtkDEP/XAtkDF/+aAtkDGP/XAtoABf/sAtoACv/sAtoCB//sAtoCC//sAtsABf9xAtsACv9xAtsBnf+aAtsBpv+aAtsBvP9xAtsBvv/XAtsBwf+aAtsBxP+aAtsB3P/XAtsB4f/XAtsB5P/XAtsCB/9xAtsCC/9xAtsCbv/XAtsCfP+aAtsCgP+uAtsCgv+uAtsCl//XAtsCm//XAtsCp//XAtsCqf+aAtsCqv/XAtsCtf9xAtsCtv/XAtsCt/+FAtsCuf+FAtsCvf+aAtsCvv/XAtsCv/+aAtsCwP/XAtsCwf+aAtsCwv/XAtsCxf+aAtsCx/+aAtsC1P+aAtsC1f/XAtsC4f/XAtsC4//XAtsC/f+aAtsC/v/XAtsDA//XAtsDDf9xAtsDDv/XAtsDD/9xAtsDEP/XAtsDF/+aAtsDGP/XAtwABf/sAtwACv/sAtwCB//sAtwCC//sAt4ABf/sAt4ACv/sAt4CB//sAt4CC//sAuAABf/sAuAACv/sAuACB//sAuACC//sAuEAD/+uAuEAEf+uAuEBnf/sAuEBpP/XAuEBpv/sAuEBqP/XAuEBqv/XAuEBrv/XAuEBsP/XAuEBsf/sAuEBtf/XAuEBvP/DAuEBvf/XAuEBv//XAuEBwf/XAuEBxP/sAuEBx//sAuEBzv/sAuEB1f/sAuEB8v/sAuECCP+uAuECDP+uAuECcv/XAuECc//sAuECev/sAuECfP/XAuECgP/sAuECgv/sAuECn//XAuECof/sAuECqf/sAuECtf/DAuECt//sAuECuf/sAuECu//XAuECvf/sAuECv//XAuECwf/XAuECyv/XAuECzv/XAuECz//sAuEC1P/XAuEC2f/XAuEC2//XAuEC3f/XAuEC5f/XAuEC5//sAuEC9f/sAuEC9//XAuEC+f/XAuEC+//XAuEC/f/XAuEDBf/XAuEDB//XAuEDDf/XAuEDD//XAuEDEf/XAuEDEv/sAuEDF//sAuEDG//XAuEDHP/sAuIABf/sAuIACv/sAuIB0P/XAuIB3P/sAuIB3f/sAuIB3//XAuIB4f/sAuIB5P/sAuIB9v/sAuICB//sAuICC//sAuICoP/XAuICqv/sAuICtv/sAuICvP/XAuICvv/sAuICwP/sAuICwv/sAuICy//XAuIC1f/sAuIC5v/XAuIC+P/sAuIC+v/sAuIC/P/sAuIC/v/sAuIDBv/XAuIDCP/XAuIDDv/sAuIDEP/sAuIDGP/sAuMAD/+uAuMAEf+uAuMBnf/sAuMBpP/XAuMBpv/sAuMBqP/XAuMBqv/XAuMBrv/XAuMBsP/XAuMBsf/sAuMBtf/XAuMBvP/DAuMBvf/XAuMBv//XAuMBwf/XAuMBxP/sAuMBx//sAuMBzv/sAuMB1f/sAuMB8v/sAuMCCP+uAuMCDP+uAuMCcv/XAuMCc//sAuMCev/sAuMCfP/XAuMCgP/sAuMCgv/sAuMCn//XAuMCof/sAuMCqf/sAuMCtf/DAuMCt//sAuMCuf/sAuMCu//XAuMCvf/sAuMCv//XAuMCwf/XAuMCyv/XAuMCzv/XAuMCz//sAuMC1P/XAuMC2f/XAuMC2//XAuMC3f/XAuMC5f/XAuMC5//sAuMC9f/sAuMC9//XAuMC+f/XAuMC+//XAuMC/f/XAuMDBf/XAuMDB//XAuMDDf/XAuMDD//XAuMDEf/XAuMDEv/sAuMDF//sAuMDG//XAuMDHP/sAuQABf/sAuQACv/sAuQB0P/XAuQB3P/sAuQB3f/sAuQB3//XAuQB4f/sAuQB5P/sAuQB9v/sAuQCB//sAuQCC//sAuQCoP/XAuQCqv/sAuQCtv/sAuQCvP/XAuQCvv/sAuQCwP/sAuQCwv/sAuQCy//XAuQC1f/sAuQC5v/XAuQC+P/sAuQC+v/sAuQC/P/sAuQC/v/sAuQDBv/XAuQDCP/XAuQDDv/sAuQDEP/sAuQDGP/sAuUBn//XAuUBuP/XAuUBu//XAuUBvv/XAuUBwf/XAuUB4f/XAuUCbP/XAuUCfP/XAuUCfv/XAuUChP/XAuUChv/XAuUCiP/XAuUCiv/XAuUCjP/XAuUCsf/XAuUCs//XAuUCv//XAuUCwP/XAuUCwf/XAuUCwv/XAuUCxf+aAuUCx/+aAuUC1P/XAuUC1f/XAuUC7//XAuUC8f/XAuUC8//XAuUC/f/XAuUC/v/XAuUDCf/XAuUDC//XAuUDDv/XAuUDEP/XAuUDFf/XAuUDGf/sAuYBz//XAuYB2P/XAuYB2//XAuYB3v/XAuYB4f/XAuYB6v/XAuYB7f/XAuYCav/XAuYCf//XAuYChf/XAuYCh//XAuYCif/XAuYCjf/XAuYCsv/XAuYCtP/XAuYCwP/XAuYCwv/XAuYCxv/XAuYCyP/XAuYC1f/XAuYC4P/XAuYC8P/XAuYC8v/XAuYC9P/XAuYC/v/XAuYDCv/XAuYDDP/XAuYDFv/XAuYDGv/XAucAD/+uAucAEf+uAucCCP+uAucCDP+uAucCgP/sAucCgv/sAucCt//sAucCuf/sAucDDf/XAucDD//XAugB6QApAukABf/sAukACv/sAukCB//sAukCC//sAukDDv/XAukDEP/XAu8AD/+uAu8AEf+uAu8Bnf/sAu8BpP/XAu8Bpv/sAu8BqP/XAu8Bqv/XAu8Brv/XAu8BsP/XAu8Bsf/sAu8Btf/XAu8BvP/DAu8Bvf/XAu8Bv//XAu8Bwf/XAu8BxP/sAu8Bx//sAu8Bzv/sAu8B1f/sAu8B8v/sAu8CCP+uAu8CDP+uAu8Ccv/XAu8Cc//sAu8Cev/sAu8CfP/XAu8CgP/sAu8Cgv/sAu8Cn//XAu8Cof/sAu8Cqf/sAu8Ctf/DAu8Ct//sAu8Cuf/sAu8Cu//XAu8Cvf/sAu8Cv//XAu8Cwf/XAu8Cyv/XAu8Czv/XAu8Cz//sAu8C1P/XAu8C2f/XAu8C2//XAu8C3f/XAu8C5f/XAu8C5//sAu8C9f/sAu8C9//XAu8C+f/XAu8C+//XAu8C/f/XAu8DBf/XAu8DB//XAu8DDf/XAu8DD//XAu8DEf/XAu8DEv/sAu8DF//sAu8DG//XAu8DHP/sAvAABf/sAvAACv/sAvAB0P/XAvAB3P/sAvAB3f/sAvAB3//XAvAB4f/sAvAB5P/sAvAB9v/sAvACB//sAvACC//sAvACoP/XAvACqv/sAvACtv/sAvACvP/XAvACvv/sAvACwP/sAvACwv/sAvACy//XAvAC1f/sAvAC5v/XAvAC+P/sAvAC+v/sAvAC/P/sAvAC/v/sAvADBv/XAvADCP/XAvADDv/sAvADEP/sAvADGP/sAvEAD/+uAvEAEf+uAvEBnf/sAvEBpP/XAvEBpv/sAvEBqP/XAvEBqv/XAvEBrv/XAvEBsP/XAvEBsf/sAvEBtf/XAvEBvP/DAvEBvf/XAvEBv//XAvEBwf/XAvEBxP/sAvEBx//sAvEBzv/sAvEB1f/sAvEB8v/sAvECCP+uAvECDP+uAvECcv/XAvECc//sAvECev/sAvECfP/XAvECgP/sAvECgv/sAvECn//XAvECof/sAvECqf/sAvECtf/DAvECt//sAvECuf/sAvECu//XAvECvf/sAvECv//XAvECwf/XAvECyv/XAvECzv/XAvECz//sAvEC1P/XAvEC2f/XAvEC2//XAvEC3f/XAvEC5f/XAvEC5//sAvEC9f/sAvEC9//XAvEC+f/XAvEC+//XAvEC/f/XAvEDBf/XAvEDB//XAvEDDf/XAvEDD//XAvEDEf/XAvEDEv/sAvEDF//sAvEDG//XAvEDHP/sAvIABf/sAvIACv/sAvIB0P/XAvIB3P/sAvIB3f/sAvIB3//XAvIB4f/sAvIB5P/sAvIB9v/sAvICB//sAvICC//sAvICoP/XAvICqv/sAvICtv/sAvICvP/XAvICvv/sAvICwP/sAvICwv/sAvICy//XAvIC1f/sAvIC5v/XAvIC+P/sAvIC+v/sAvIC/P/sAvIC/v/sAvIDBv/XAvIDCP/XAvIDDv/sAvIDEP/sAvIDGP/sAvMAD/+uAvMAEf+uAvMBnf/sAvMBpP/XAvMBpv/sAvMBqP/XAvMBqv/XAvMBrv/XAvMBsP/XAvMBsf/sAvMBtf/XAvMBvP/DAvMBvf/XAvMBv//XAvMBwf/XAvMBxP/sAvMBx//sAvMBzv/sAvMB1f/sAvMB8v/sAvMCCP+uAvMCDP+uAvMCcv/XAvMCc//sAvMCev/sAvMCfP/XAvMCgP/sAvMCgv/sAvMCn//XAvMCof/sAvMCqf/sAvMCtf/DAvMCt//sAvMCuf/sAvMCu//XAvMCvf/sAvMCv//XAvMCwf/XAvMCyv/XAvMCzv/XAvMCz//sAvMC1P/XAvMC2f/XAvMC2//XAvMC3f/XAvMC5f/XAvMC5//sAvMC9f/sAvMC9//XAvMC+f/XAvMC+//XAvMC/f/XAvMDBf/XAvMDB//XAvMDDf/XAvMDD//XAvMDEf/XAvMDEv/sAvMDF//sAvMDG//XAvMDHP/sAvQABf/sAvQACv/sAvQB0P/XAvQB3P/sAvQB3f/sAvQB3//XAvQB4f/sAvQB5P/sAvQB9v/sAvQCB//sAvQCC//sAvQCoP/XAvQCqv/sAvQCtv/sAvQCvP/XAvQCvv/sAvQCwP/sAvQCwv/sAvQCy//XAvQC1f/sAvQC5v/XAvQC+P/sAvQC+v/sAvQC/P/sAvQC/v/sAvQDBv/XAvQDCP/XAvQDDv/sAvQDEP/sAvQDGP/sAvUAD/+uAvUAEf+uAvUBnf/sAvUBpP/XAvUBpv/sAvUBqP/XAvUBqv/XAvUBrv/XAvUBsP/XAvUBsf/sAvUBtf/XAvUBvP/DAvUBvf/XAvUBv//XAvUBwf/XAvUBxP/sAvUBx//sAvUBzv/sAvUB1f/sAvUB8v/sAvUCCP+uAvUCDP+uAvUCcv/XAvUCc//sAvUCev/sAvUCfP/XAvUCgP/sAvUCgv/sAvUCn//XAvUCof/sAvUCqf/sAvUCtf/DAvUCt//sAvUCuf/sAvUCu//XAvUCvf/sAvUCv//XAvUCwf/XAvUCyv/XAvUCzv/XAvUCz//sAvUC1P/XAvUC2f/XAvUC2//XAvUC3f/XAvUC5f/XAvUC5//sAvUC9f/sAvUC9//XAvUC+f/XAvUC+//XAvUC/f/XAvUDBf/XAvUDB//XAvUDDf/XAvUDD//XAvUDEf/XAvUDEv/sAvUDF//sAvUDG//XAvUDHP/sAvYABf/sAvYACv/sAvYB0P/XAvYB3P/sAvYB3f/sAvYB3//XAvYB4f/sAvYB5P/sAvYB9v/sAvYCB//sAvYCC//sAvYCoP/XAvYCqv/sAvYCtv/sAvYCvP/XAvYCvv/sAvYCwP/sAvYCwv/sAvYCy//XAvYC1f/sAvYC5v/XAvYC+P/sAvYC+v/sAvYC/P/sAvYC/v/sAvYDBv/XAvYDCP/XAvYDDv/sAvYDEP/sAvYDGP/sAvcAD/+FAvcAEf+FAvcBn//sAvcBpP+aAvcBqv9xAvcBrv+aAvcBtf+aAvcBuP/sAvcBu//sAvcBvv/DAvcByf/sAvcBzv+uAvcBz//XAvcB1f+uAvcB2P/XAvcB2//XAvcB3v/XAvcB4f/XAvcB6v/XAvcB6wBmAvcB7f/XAvcB7v/sAvcB8v+uAvcB9ABmAvcCCP+FAvcCDP+FAvcCav/XAvcCbP/sAvcCcv9xAvcCc/+uAvcCfv/sAvcCf//XAvcChP/sAvcChf/XAvcChv/sAvcCh//XAvcCiP/sAvcCif/XAvcCiv/sAvcCjP/sAvcCjf/XAvcCmABmAvcCqABmAvcCsf/sAvcCsv/XAvcCs//sAvcCtP/XAvcCwP/XAvcCwv/XAvcCxf/XAvcCxv/DAvcCx//XAvcCyP/DAvcCzv+aAvcCz/+uAvcC1f/XAvcC2f9xAvcC2/9xAvcC3f9xAvcC4P/XAvcC7//sAvcC8P/XAvcC8f/sAvcC8v/XAvcC8//sAvcC9P/XAvcC/v/XAvcDCf9xAvcDCv/XAvcDC/9xAvcDDP/XAvcDEf+aAvcDEv+uAvcDFf/sAvcDFv/XAvcDGv/XAvcDG/+aAvcDHP+uAvgAD/+uAvgAEf+uAvgBzv/XAvgB1f/XAvgB8v/XAvgCCP+uAvgCDP+uAvgCc//XAvgCz//XAvgDEv/XAvgDHP/XAvkAD/+FAvkAEf+FAvkBn//sAvkBpP+aAvkBqv9xAvkBrv+aAvkBtf+aAvkBuP/sAvkBu//sAvkBvv/DAvkByf/sAvkBzv+uAvkBz//XAvkB1f+uAvkB2P/XAvkB2//XAvkB3v/XAvkB4f/XAvkB6v/XAvkB6wBmAvkB7f/XAvkB7v/sAvkB8v+uAvkB9ABmAvkCCP+FAvkCDP+FAvkCav/XAvkCbP/sAvkCcv9xAvkCc/+uAvkCfv/sAvkCf//XAvkChP/sAvkChf/XAvkChv/sAvkCh//XAvkCiP/sAvkCif/XAvkCiv/sAvkCjP/sAvkCjf/XAvkCmABmAvkCqABmAvkCsf/sAvkCsv/XAvkCs//sAvkCtP/XAvkCwP/XAvkCwv/XAvkCxf/XAvkCxv/DAvkCx//XAvkCyP/DAvkCzv+aAvkCz/+uAvkC1f/XAvkC2f9xAvkC2/9xAvkC3f9xAvkC4P/XAvkC7//sAvkC8P/XAvkC8f/sAvkC8v/XAvkC8//sAvkC9P/XAvkC/v/XAvkDCf9xAvkDCv/XAvkDC/9xAvkDDP/XAvkDEf+aAvkDEv+uAvkDFf/sAvkDFv/XAvkDGv/XAvkDG/+aAvkDHP+uAvoAD/+uAvoAEf+uAvoBzv/XAvoB1f/XAvoB8v/XAvoCCP+uAvoCDP+uAvoCc//XAvoCz//XAvoDEv/XAvoDHP/XAvsAD/+FAvsAEf+FAvsBn//sAvsBpP+aAvsBqv9xAvsBrv+aAvsBtf+aAvsBuP/sAvsBu//sAvsBvv/DAvsByf/sAvsBzv+uAvsBz//XAvsB1f+uAvsB2P/XAvsB2//XAvsB3v/XAvsB4f/XAvsB6v/XAvsB6wBmAvsB7f/XAvsB7v/sAvsB8v+uAvsB9ABmAvsCCP+FAvsCDP+FAvsCav/XAvsCbP/sAvsCcv9xAvsCc/+uAvsCfv/sAvsCf//XAvsChP/sAvsChf/XAvsChv/sAvsCh//XAvsCiP/sAvsCif/XAvsCiv/sAvsCjP/sAvsCjf/XAvsCmABmAvsCqABmAvsCsf/sAvsCsv/XAvsCs//sAvsCtP/XAvsCwP/XAvsCwv/XAvsCxf/XAvsCxv/DAvsCx//XAvsCyP/DAvsCzv+aAvsCz/+uAvsC1f/XAvsC2f9xAvsC2/9xAvsC3f9xAvsC4P/XAvsC7//sAvsC8P/XAvsC8f/sAvsC8v/XAvsC8//sAvsC9P/XAvsC/v/XAvsDCf9xAvsDCv/XAvsDC/9xAvsDDP/XAvsDEf+aAvsDEv+uAvsDFf/sAvsDFv/XAvsDGv/XAvsDG/+aAvsDHP+uAvwAD/+uAvwAEf+uAvwBzv/XAvwB1f/XAvwB8v/XAvwCCP+uAvwCDP+uAvwCc//XAvwCz//XAvwDEv/XAvwDHP/XAv8AD/+FAv8AEP+uAv8AEf+FAv8Bn//XAv8BpP+aAv8Bqv9xAv8Brv+aAv8Btf+aAv8BuP/XAv8Bu//XAv8BvAApAv8Bvv+uAv8BzP+aAv8Bzf+aAv8Bzv+FAv8Bz/9xAv8B0P/XAv8B0f/XAv8B0v+aAv8B0/+aAv8B1P+aAv8B1f+FAv8B1v+aAv8B1/+aAv8B2P9xAv8B2f+aAv8B2v+aAv8B2/9xAv8B3P+uAv8B3f+uAv8B3v9xAv8B3//XAv8B4P+aAv8B4f+aAv8B4v+aAv8B4/+aAv8B5P+uAv8B5f+aAv8B5v+aAv8B5//XAv8B6P+aAv8B6f/DAv8B6v9xAv8B7P+aAv8B7f9xAv8B7v+FAv8B8v+FAv8B8/+aAv8B9f+aAv8B9v+uAv8B9/+aAv8B+f+aAv8CAv+uAv8CA/+uAv8CBP+uAv8CCP+FAv8CDP+FAv8Cav9xAv8Ca/+aAv8CbP/XAv8Cbf/XAv8Ccf+aAv8Ccv9xAv8Cc/+FAv8Cdf+aAv8Cd/+aAv8Cef+aAv8Cff+aAv8Cfv/XAv8Cf/9xAv8Cgf/XAv8Cg//XAv8ChP/XAv8Chf9xAv8Chv/XAv8Ch/9xAv8CiP/XAv8Cif9xAv8Civ/XAv8Ci//XAv8CjP/XAv8Cjf9xAv8Clv+aAv8Cmv+aAv8Cnv+aAv8CoP/XAv8Cov/XAv8CpP+aAv8Cpv+aAv8Cqv+uAv8CrP+aAv8Crv+aAv8CsP+aAv8Csf/XAv8Csv9xAv8Cs//XAv8CtP9xAv8CtQApAv8Ctv+uAv8CuP+uAv8Cuv+uAv8CvP/XAv8Cvv+uAv8CwP+aAv8Cwv+aAv8CxP+aAv8Cxf+aAv8Cxv9xAv8Cx/+aAv8CyP9xAv8Cy//XAv8Czf+aAv8Czv+aAv8Cz/+FAv8C0f+aAv8C0/+aAv8C1f+aAv8C1/+aAv8C2f9xAv8C2/9xAv8C3f9xAv8C4P9xAv8C5v/XAv8C6P/XAv8C6v/DAv8C7P+aAv8C7v+aAv8C7//XAv8C8P9xAv8C8f/XAv8C8v9xAv8C8//XAv8C9P9xAv8C9v/XAv8C+P+uAv8C+v+uAv8C/P+uAv8C/v+aAv8DAP+aAv8DAv+aAv8DBv/XAv8DCP/XAv8DCf9xAv8DCv9xAv8DC/9xAv8DDP9xAv8DDv+aAv8DEP+aAv8DEf+aAv8DEv+FAv8DFP+aAv8DFf/XAv8DFv9xAv8DGP+uAv8DGv9xAv8DG/+aAv8DHP+FAwAAD/+aAwAAEP/XAwAAEf+aAwABzv/DAwABz//sAwAB1f/DAwAB2P/sAwAB2//sAwAB3v/sAwAB6v/sAwAB7f/sAwAB8v/DAwACAv/XAwACA//XAwACBP/XAwACCP+aAwACDP+aAwACav/sAwACc//DAwACf//sAwAChf/sAwACh//sAwACif/sAwACjf/sAwACsv/sAwACtP/sAwACz//DAwAC4P/sAwAC8P/sAwAC8v/sAwAC9P/sAwADCv/sAwADDP/sAwADEv/DAwADFv/sAwADGv/sAwADHP/DAwMAD/+aAwMAEP/XAwMAEf+aAwMBnQApAwMBn//XAwMBpP+uAwMBpgApAwMBqv+FAwMBrv+uAwMBtf+uAwMBuP/XAwMBu//XAwMBvAApAwMBvv/DAwMBxAApAwMBzP/DAwMBzf/DAwMBzv+aAwMBz/+uAwMB0P/XAwMB0f/XAwMB0v/DAwMB0//DAwMB1P/DAwMB1f+aAwMB1v/DAwMB1//DAwMB2P+uAwMB2f/DAwMB2v/DAwMB2/+uAwMB3v+uAwMB3//XAwMB4P/DAwMB4f+aAwMB4v/DAwMB4//DAwMB5f/DAwMB5v/DAwMB5//XAwMB6P/DAwMB6v+uAwMB6wApAwMB7P/DAwMB7f+uAwMB7v/DAwMB8v+aAwMB8//DAwMB9AApAwMB9f/DAwMB9//DAwMB+f/DAwMCAv/XAwMCA//XAwMCBP/XAwMCCP+aAwMCDP+aAwMCav+uAwMCa//DAwMCbP/XAwMCcf/DAwMCcv+FAwMCc/+aAwMCdf/DAwMCd//XAwMCef/DAwMCff/DAwMCfv/XAwMCf/+uAwMChP/XAwMChf+uAwMChv/XAwMCh/+uAwMCiP/XAwMCif+uAwMCiv/XAwMCjP/XAwMCjf+uAwMClv/DAwMCmAApAwMCmv/DAwMCnv/DAwMCoP/XAwMCov/XAwMCpP/DAwMCpv/DAwMCqAApAwMCqQApAwMCrP/DAwMCrv/DAwMCsP/DAwMCsf/XAwMCsv+uAwMCs//XAwMCtP+uAwMCtQApAwMCvP/XAwMCvQApAwMCwP+aAwMCwv+aAwMCxP/DAwMCxf/XAwMCxv/DAwMCx//XAwMCyP/DAwMCy//XAwMCzf/DAwMCzv+uAwMCz/+aAwMC0f/DAwMC0//DAwMC1f+aAwMC1//DAwMC2f+FAwMC2/+FAwMC3f+FAwMC4P+uAwMC5v/XAwMC6P/XAwMC7P/DAwMC7v/DAwMC7//XAwMC8P+uAwMC8f/XAwMC8v+uAwMC8//XAwMC9P+uAwMC9v/XAwMC/v+aAwMDAP/DAwMDAv/DAwMDBv/XAwMDCP/XAwMDCf+aAwMDCv+uAwMDC/+aAwMDDP+uAwMDDv/XAwMDEP/XAwMDEf+uAwMDEv+aAwMDFP/DAwMDFf/XAwMDFv+uAwMDFwApAwMDGv+uAwMDG/+uAwMDHP+aAwQAD//DAwQAEf/DAwQBzv/DAwQBz//XAwQB1f/DAwQB2P/XAwQB2//XAwQB3v/XAwQB6v/XAwQB7f/XAwQB8v/DAwQCCP/DAwQCDP/DAwQCav/XAwQCc//DAwQCf//XAwQChf/XAwQCh//XAwQCif/XAwQCjf/XAwQCsv/XAwQCtP/XAwQCz//DAwQC4P/XAwQC8P/XAwQC8v/XAwQC9P/XAwQDCv/XAwQDDP/XAwQDEv/DAwQDFv/XAwQDGv/XAwQDHP/DAwUBn//XAwUBowDhAwUBuP/XAwUBu//XAwUBvv/DAwUB3P/XAwUB4f+uAwUB5P/XAwUCbP/XAwUCewA9AwUCff/sAwUCfv/XAwUChP/XAwUChv/XAwUCiP/XAwUCiv/XAwUCjP/XAwUCqv/XAwUCsf/XAwUCs//XAwUCtv/XAwUCvv/XAwUCwP+uAwUCwv+uAwUCxf/DAwUCxv/XAwUCx//DAwUCyP/XAwUC1f+uAwUC7//XAwUC8f/XAwUC8//XAwUC/v+uAwUDDv/XAwUDEP/XAwUDFf/XAwUDGP/XAwYBz//sAwYB2P/sAwYB2//sAwYB3v/sAwYB4f/sAwYB6v/sAwYB7f/sAwYCav/sAwYCf//sAwYChf/sAwYCh//sAwYCif/sAwYCjf/sAwYCsv/sAwYCtP/sAwYCwP/sAwYCwv/sAwYC1f/sAwYC4P/sAwYC8P/sAwYC8v/sAwYC9P/sAwYC/v/sAwYDCv/sAwYDDP/sAwYDDv/XAwYDEP/XAwYDFv/sAwYDGv/sAwcBn//XAwcBuP/XAwcBu//XAwcBvv/XAwcBwf/XAwcB4f/XAwcCbP/XAwcCfP/XAwcCfv/XAwcChP/XAwcChv/XAwcCiP/XAwcCiv/XAwcCjP/XAwcCsf/XAwcCs//XAwcCv//XAwcCwP/XAwcCwf/XAwcCwv/XAwcCxf+aAwcCx/+aAwcC1P/XAwcC1f/XAwcC7//XAwcC8f/XAwcC8//XAwcC/f/XAwcC/v/XAwcDCf/XAwcDC//XAwcDDv/XAwcDEP/XAwcDFf/XAwcDGf/sAwgBz//sAwgB2P/sAwgB2//sAwgB3v/sAwgB4f/sAwgB6v/sAwgB7f/sAwgCav/sAwgCf//sAwgChf/sAwgCh//sAwgCif/sAwgCjf/sAwgCsv/sAwgCtP/sAwgCwP/sAwgCwv/sAwgC1f/sAwgC4P/sAwgC8P/sAwgC8v/sAwgC9P/sAwgC/v/sAwgDCv/sAwgDDP/sAwgDDv/XAwgDEP/XAwgDFv/sAwgDGv/sAwsABf+aAwsACv+aAwsBnf+uAwsBpv+uAwsBqP/DAwsBqv/DAwsBsP/DAwsBvP9xAwsBvf/DAwsBv//DAwsBwf/DAwsBxP+uAwsB0P/XAwsB3P/DAwsB3//XAwsB4f/XAwsB5P/DAwsCB/+aAwsCC/+aAwsCcv/DAwsCdv/XAwsCfP/DAwsCgP/DAwsCgv/DAwsCn//DAwsCoP/XAwsCqf+uAwsCqv/DAwsCtf9xAwsCtv/DAwsCt//DAwsCuf/DAwsCu//DAwsCvP/XAwsCvf+uAwsCvv/DAwsCv//DAwsCwP/XAwsCwf/DAwsCwv/XAwsCyv/DAwsCy//XAwsC1P/DAwsC1f/XAwsC2f/DAwsC2//DAwsC3f/DAwsC5f/DAwsC5v/XAwsC9//DAwsC+f/DAwsC+//DAwsC/f/DAwsC/v/XAwsDBf/DAwsDBv/XAwsDB//DAwsDCP/XAwsDDf/XAwsDDv/XAwsDD//XAwsDEP/XAwsDF/+uAwsDGP/DAwwABf+aAwwACv+aAwwB0P/XAwwB3P/DAwwB3f/XAwwB3//XAwwB4f/XAwwB5P/DAwwB9v/XAwwCB/+aAwwCC/+aAwwCoP/XAwwCqv/DAwwCtv/DAwwCvP/XAwwCvv/DAwwCwP/XAwwCwv/XAwwCy//XAwwC1f/XAwwC5v/XAwwC+P/XAwwC+v/XAwwC/P/XAwwC/v/XAwwDBv/XAwwDCP/XAwwDDv+aAwwDEP+aAwwDGP/DAw0ABf+aAw0ACv+aAw0Bnf+uAw0Bpv+uAw0BqP/DAw0Bqv/DAw0BsP/DAw0BvP9xAw0Bvf/DAw0Bv//DAw0Bwf/DAw0BxP+uAw0B0P/XAw0B3P/DAw0B3//XAw0B4f/XAw0B5P/DAw0CB/+aAw0CC/+aAw0Ccv/DAw0Cdv/XAw0CfP/DAw0CgP/DAw0Cgv/DAw0Cn//DAw0CoP/XAw0Cqf+uAw0Cqv/DAw0Ctf9xAw0Ctv/DAw0Ct//DAw0Cuf/DAw0Cu//DAw0CvP/XAw0Cvf+uAw0Cvv/DAw0Cv//DAw0CwP/XAw0Cwf/DAw0Cwv/XAw0Cyv/DAw0Cy//XAw0C1P/DAw0C1f/XAw0C2f/DAw0C2//DAw0C3f/DAw0C5f/DAw0C5v/XAw0C9//DAw0C+f/DAw0C+//DAw0C/f/DAw0C/v/XAw0DBf/DAw0DBv/XAw0DB//DAw0DCP/XAw0DDf/XAw0DDv/XAw0DD//XAw0DEP/XAw0DF/+uAw0DGP/DAw4ABf+aAw4ACv+aAw4B0P/XAw4B3P/DAw4B3f/XAw4B3//XAw4B4f/XAw4B5P/DAw4B9v/XAw4CB/+aAw4CC/+aAw4CoP/XAw4Cqv/DAw4Ctv/DAw4CvP/XAw4Cvv/DAw4CwP/XAw4Cwv/XAw4Cy//XAw4C1f/XAw4C5v/XAw4C+P/XAw4C+v/XAw4C/P/XAw4C/v/XAw4DBv/XAw4DCP/XAw4DDv+aAw4DEP+aAw4DGP/DAw8BowDhAw8C6gApAw8DDv/XAw8DEP/XAxAABf/sAxAACv/sAxACB//sAxACC//sAxEABf+aAxEACv+aAxEBnf+uAxEBpv+uAxEBqP/DAxEBqv/DAxEBsP/DAxEBvP9xAxEBvf/DAxEBv//DAxEBwf/DAxEBxP+uAxEB0P/XAxEB3P/DAxEB3//XAxEB4f/XAxEB5P/DAxECB/+aAxECC/+aAxECcv/DAxECdv/XAxECfP/DAxECgP/DAxECgv/DAxECn//DAxECoP/XAxECqf+uAxECqv/DAxECtf9xAxECtv/DAxECt//DAxECuf/DAxECu//DAxECvP/XAxECvf+uAxECvv/DAxECv//DAxECwP/XAxECwf/DAxECwv/XAxECyv/DAxECy//XAxEC1P/DAxEC1f/XAxEC2f/DAxEC2//DAxEC3f/DAxEC5f/DAxEC5v/XAxEC9//DAxEC+f/DAxEC+//DAxEC/f/DAxEC/v/XAxEDBf/DAxEDBv/XAxEDB//DAxEDCP/XAxEDDf/XAxEDDv/XAxEDD//XAxEDEP/XAxEDF/+uAxEDGP/DAxIABf+aAxIACv+aAxIB0P/XAxIB3P/DAxIB3f/XAxIB3//XAxIB4f/XAxIB5P/DAxIB9v/XAxICB/+aAxICC/+aAxICoP/XAxICqv/DAxICtv/DAxICvP/XAxICvv/DAxICwP/XAxICwv/XAxICy//XAxIC1f/XAxIC5v/XAxIC+P/XAxIC+v/XAxIC/P/XAxIC/v/XAxIDBv/XAxIDCP/XAxIDDv+aAxIDEP+aAxIDGP/DAxMABf+aAxMACv+aAxMBnf+uAxMBpv+uAxMBqP/DAxMBqv/DAxMBsP/DAxMBvP9xAxMBvf/DAxMBv//DAxMBwf/DAxMBxP+uAxMB0P/XAxMB3P/DAxMB3//XAxMB4f/XAxMB5P/DAxMCB/+aAxMCC/+aAxMCcv/DAxMCdv/XAxMCfP/DAxMCgP/DAxMCgv/DAxMCn//DAxMCoP/XAxMCqf+uAxMCqv/DAxMCtf9xAxMCtv/DAxMCt//DAxMCuf/DAxMCu//DAxMCvP/XAxMCvf+uAxMCvv/DAxMCv//DAxMCwP/XAxMCwf/DAxMCwv/XAxMCyv/DAxMCy//XAxMC1P/DAxMC1f/XAxMC2f/DAxMC2//DAxMC3f/DAxMC5f/DAxMC5v/XAxMC9//DAxMC+f/DAxMC+//DAxMC/f/DAxMC/v/XAxMDBf/DAxMDBv/XAxMDB//DAxMDCP/XAxMDDf/XAxMDDv/XAxMDD//XAxMDEP/XAxMDF/+uAxMDGP/DAxQABf+aAxQACv+aAxQB0P/XAxQB3P/DAxQB3f/XAxQB3//XAxQB4f/XAxQB5P/DAxQB9v/XAxQCB/+aAxQCC/+aAxQCoP/XAxQCqv/DAxQCtv/DAxQCvP/XAxQCvv/DAxQCwP/XAxQCwv/XAxQCy//XAxQC1f/XAxQC5v/XAxQC+P/XAxQC+v/XAxQC/P/XAxQC/v/XAxQDBv/XAxQDCP/XAxQDDv+aAxQDEP+aAxQDGP/DAxUAD/+uAxUAEf+uAxUBqv/sAxUBsP/XAxUBvP/XAxUBv//XAxUCCP+uAxUCDP+uAxUCcv/sAxUCgP/sAxUCgv/sAxUCn//XAxUCtf/XAxUCt//sAxUCuf/sAxUCu//XAxUCyv/XAxUC2f/sAxUC2//sAxUC3f/sAxUC5f/XAxUDBf/XAxUDB//XAxYABf/XAxYACv/XAxYB0P/sAxYB3f/sAxYB3//sAxYB9v/sAxYCB//XAxYCC//XAxYCoP/sAxYCvP/sAxYCy//sAxYC5v/sAxYC+P/sAxYC+v/sAxYC/P/sAxYDBv/sAxYDCP/sAxYDDv/XAxYDEP/XAxcABf+uAxcACv+uAxcBnf/DAxcBpv/DAxcBqv/XAxcBsP/XAxcBvP/DAxcBv//XAxcBwf/XAxcBxP/DAxcB3P/XAxcB5P/XAxcCB/+uAxcCC/+uAxcCcv/XAxcCfP/XAxcCgP/XAxcCgv/XAxcCn//XAxcCqf/DAxcCqv/XAxcCtf/DAxcCtv/XAxcCt//XAxcCuf/XAxcCu//XAxcCvf/DAxcCvv/XAxcCv//XAxcCwf/XAxcCyv/XAxcC1P/XAxcC2f/XAxcC2//XAxcC3f/XAxcC5f/XAxcC/f/XAxcDBf/XAxcDB//XAxcDDf/XAxcDD//XAxcDF//DAxcDGP/XAxgABf+aAxgACv+aAxgB0P/XAxgB3P/DAxgB3f/XAxgB3//XAxgB4f/XAxgB5P/DAxgB9v/XAxgCB/+aAxgCC/+aAxgCoP/XAxgCqv/DAxgCtv/DAxgCvP/XAxgCvv/DAxgCwP/XAxgCwv/XAxgCy//XAxgC1f/XAxgC5v/XAxgC+P/XAxgC+v/XAxgC/P/XAxgC/v/XAxgDBv/XAxgDCP/XAxgDDv+aAxgDEP+aAxgDGP/DAxkB4f/XAxkCwP/XAxkCwv/XAxkC1f/XAxkC/v/XAxsBowDhAxsC6gApAxsDDv/XAxsDEP/XAxwABf/sAxwACv/sAxwCB//sAxwCC//sAx0ABf9xAx0ACv9xAx0AJv/XAx0AKv/XAx0ALQEKAx0AMv/XAx0ANP/XAx0AN/9xAx0AOf+uAx0AOv+uAx0APP+FAx0Aif/XAx0AlP/XAx0Alf/XAx0Alv/XAx0Al//XAx0AmP/XAx0Amv/XAx0An/+FAx0AyP/XAx0Ayv/XAx0AzP/XAx0Azv/XAx0A3v/XAx0A4P/XAx0A4v/XAx0A5P/XAx0BDv/XAx0BEP/XAx0BEv/XAx0BFP/XAx0BJP9xAx0BJv9xAx0BNv+uAx0BOP+FAx0BOv+FAx0BR//XAx0B+v+uAx0B/P+uAx0B/v+uAx0CAP+FAx0CB/9xAx0CC/9xAx0CX//XAx0DSf/XAx0DS//XAx0DTf/XAx0DT//XAx0DUf/XAx0DU//XAx0DVf/XAx0DV//XAx0DWf/XAx0DW//XAx0DXf/XAx0DX//XAx0Db/+FAx0Dcf+FAx0Dc/+FAx0Dj/9xAx4ABf/sAx4ACv/sAx4CB//sAx4CC//sAx8ABf9xAx8ACv9xAx8AJv/XAx8AKv/XAx8ALQEKAx8AMv/XAx8ANP/XAx8AN/9xAx8AOf+uAx8AOv+uAx8APP+FAx8Aif/XAx8AlP/XAx8Alf/XAx8Alv/XAx8Al//XAx8AmP/XAx8Amv/XAx8An/+FAx8AyP/XAx8Ayv/XAx8AzP/XAx8Azv/XAx8A3v/XAx8A4P/XAx8A4v/XAx8A5P/XAx8BDv/XAx8BEP/XAx8BEv/XAx8BFP/XAx8BJP9xAx8BJv9xAx8BNv+uAx8BOP+FAx8BOv+FAx8BR//XAx8B+v+uAx8B/P+uAx8B/v+uAx8CAP+FAx8CB/9xAx8CC/9xAx8CX//XAx8DSf/XAx8DS//XAx8DTf/XAx8DT//XAx8DUf/XAx8DU//XAx8DVf/XAx8DV//XAx8DWf/XAx8DW//XAx8DXf/XAx8DX//XAx8Db/+FAx8Dcf+FAx8Dc/+FAx8Dj/9xAyAABf/sAyAACv/sAyACB//sAyACC//sAyEABf9xAyEACv9xAyEAJv/XAyEAKv/XAyEALQEKAyEAMv/XAyEANP/XAyEAN/9xAyEAOf+uAyEAOv+uAyEAPP+FAyEAif/XAyEAlP/XAyEAlf/XAyEAlv/XAyEAl//XAyEAmP/XAyEAmv/XAyEAn/+FAyEAyP/XAyEAyv/XAyEAzP/XAyEAzv/XAyEA3v/XAyEA4P/XAyEA4v/XAyEA5P/XAyEBDv/XAyEBEP/XAyEBEv/XAyEBFP/XAyEBJP9xAyEBJv9xAyEBNv+uAyEBOP+FAyEBOv+FAyEBR//XAyEB+v+uAyEB/P+uAyEB/v+uAyECAP+FAyECB/9xAyECC/9xAyECX//XAyEDSf/XAyEDS//XAyEDTf/XAyEDT//XAyEDUf/XAyEDU//XAyEDVf/XAyEDV//XAyEDWf/XAyEDW//XAyEDXf/XAyEDX//XAyEDb/+FAyEDcf+FAyEDc/+FAyEDj/9xAyIABf/sAyIACv/sAyICB//sAyICC//sAyMABf9xAyMACv9xAyMAJv/XAyMAKv/XAyMALQEKAyMAMv/XAyMANP/XAyMAN/9xAyMAOf+uAyMAOv+uAyMAPP+FAyMAif/XAyMAlP/XAyMAlf/XAyMAlv/XAyMAl//XAyMAmP/XAyMAmv/XAyMAn/+FAyMAyP/XAyMAyv/XAyMAzP/XAyMAzv/XAyMA3v/XAyMA4P/XAyMA4v/XAyMA5P/XAyMBDv/XAyMBEP/XAyMBEv/XAyMBFP/XAyMBJP9xAyMBJv9xAyMBNv+uAyMBOP+FAyMBOv+FAyMBR//XAyMB+v+uAyMB/P+uAyMB/v+uAyMCAP+FAyMCB/9xAyMCC/9xAyMCX//XAyMDSf/XAyMDS//XAyMDTf/XAyMDT//XAyMDUf/XAyMDU//XAyMDVf/XAyMDV//XAyMDWf/XAyMDW//XAyMDXf/XAyMDX//XAyMDb/+FAyMDcf+FAyMDc/+FAyMDj/9xAyQABf/sAyQACv/sAyQCB//sAyQCC//sAyUABf9xAyUACv9xAyUAJv/XAyUAKv/XAyUALQEKAyUAMv/XAyUANP/XAyUAN/9xAyUAOf+uAyUAOv+uAyUAPP+FAyUAif/XAyUAlP/XAyUAlf/XAyUAlv/XAyUAl//XAyUAmP/XAyUAmv/XAyUAn/+FAyUAyP/XAyUAyv/XAyUAzP/XAyUAzv/XAyUA3v/XAyUA4P/XAyUA4v/XAyUA5P/XAyUBDv/XAyUBEP/XAyUBEv/XAyUBFP/XAyUBJP9xAyUBJv9xAyUBNv+uAyUBOP+FAyUBOv+FAyUBR//XAyUB+v+uAyUB/P+uAyUB/v+uAyUCAP+FAyUCB/9xAyUCC/9xAyUCX//XAyUDSf/XAyUDS//XAyUDTf/XAyUDT//XAyUDUf/XAyUDU//XAyUDVf/XAyUDV//XAyUDWf/XAyUDW//XAyUDXf/XAyUDX//XAyUDb/+FAyUDcf+FAyUDc/+FAyUDj/9xAyYABf/sAyYACv/sAyYCB//sAyYCC//sAycABf9xAycACv9xAycAJv/XAycAKv/XAycALQEKAycAMv/XAycANP/XAycAN/9xAycAOf+uAycAOv+uAycAPP+FAycAif/XAycAlP/XAycAlf/XAycAlv/XAycAl//XAycAmP/XAycAmv/XAycAn/+FAycAyP/XAycAyv/XAycAzP/XAycAzv/XAycA3v/XAycA4P/XAycA4v/XAycA5P/XAycBDv/XAycBEP/XAycBEv/XAycBFP/XAycBJP9xAycBJv9xAycBNv+uAycBOP+FAycBOv+FAycBR//XAycB+v+uAycB/P+uAycB/v+uAycCAP+FAycCB/9xAycCC/9xAycCX//XAycDSf/XAycDS//XAycDTf/XAycDT//XAycDUf/XAycDU//XAycDVf/XAycDV//XAycDWf/XAycDW//XAycDXf/XAycDX//XAycDb/+FAycDcf+FAycDc/+FAycDj/9xAygABf/sAygACv/sAygCB//sAygCC//sAykABf9xAykACv9xAykAJv/XAykAKv/XAykALQEKAykAMv/XAykANP/XAykAN/9xAykAOf+uAykAOv+uAykAPP+FAykAif/XAykAlP/XAykAlf/XAykAlv/XAykAl//XAykAmP/XAykAmv/XAykAn/+FAykAyP/XAykAyv/XAykAzP/XAykAzv/XAykA3v/XAykA4P/XAykA4v/XAykA5P/XAykBDv/XAykBEP/XAykBEv/XAykBFP/XAykBJP9xAykBJv9xAykBNv+uAykBOP+FAykBOv+FAykBR//XAykB+v+uAykB/P+uAykB/v+uAykCAP+FAykCB/9xAykCC/9xAykCX//XAykDSf/XAykDS//XAykDTf/XAykDT//XAykDUf/XAykDU//XAykDVf/XAykDV//XAykDWf/XAykDW//XAykDXf/XAykDX//XAykDb/+FAykDcf+FAykDc/+FAykDj/9xAyoABf/sAyoACv/sAyoCB//sAyoCC//sAysABf9xAysACv9xAysAJv/XAysAKv/XAysALQEKAysAMv/XAysANP/XAysAN/9xAysAOf+uAysAOv+uAysAPP+FAysAif/XAysAlP/XAysAlf/XAysAlv/XAysAl//XAysAmP/XAysAmv/XAysAn/+FAysAyP/XAysAyv/XAysAzP/XAysAzv/XAysA3v/XAysA4P/XAysA4v/XAysA5P/XAysBDv/XAysBEP/XAysBEv/XAysBFP/XAysBJP9xAysBJv9xAysBNv+uAysBOP+FAysBOv+FAysBR//XAysB+v+uAysB/P+uAysB/v+uAysCAP+FAysCB/9xAysCC/9xAysCX//XAysDSf/XAysDS//XAysDTf/XAysDT//XAysDUf/XAysDU//XAysDVf/XAysDV//XAysDWf/XAysDW//XAysDXf/XAysDX//XAysDb/+FAysDcf+FAysDc/+FAysDj/9xAywABf/sAywACv/sAywCB//sAywCC//sAy0ABf9xAy0ACv9xAy0AJv/XAy0AKv/XAy0ALQEKAy0AMv/XAy0ANP/XAy0AN/9xAy0AOf+uAy0AOv+uAy0APP+FAy0Aif/XAy0AlP/XAy0Alf/XAy0Alv/XAy0Al//XAy0AmP/XAy0Amv/XAy0An/+FAy0AyP/XAy0Ayv/XAy0AzP/XAy0Azv/XAy0A3v/XAy0A4P/XAy0A4v/XAy0A5P/XAy0BDv/XAy0BEP/XAy0BEv/XAy0BFP/XAy0BJP9xAy0BJv9xAy0BNv+uAy0BOP+FAy0BOv+FAy0BR//XAy0B+v+uAy0B/P+uAy0B/v+uAy0CAP+FAy0CB/9xAy0CC/9xAy0CX//XAy0DSf/XAy0DS//XAy0DTf/XAy0DT//XAy0DUf/XAy0DU//XAy0DVf/XAy0DV//XAy0DWf/XAy0DW//XAy0DXf/XAy0DX//XAy0Db/+FAy0Dcf+FAy0Dc/+FAy0Dj/9xAy4ABf/sAy4ACv/sAy4CB//sAy4CC//sAy8ABf9xAy8ACv9xAy8AJv/XAy8AKv/XAy8ALQEKAy8AMv/XAy8ANP/XAy8AN/9xAy8AOf+uAy8AOv+uAy8APP+FAy8Aif/XAy8AlP/XAy8Alf/XAy8Alv/XAy8Al//XAy8AmP/XAy8Amv/XAy8An/+FAy8AyP/XAy8Ayv/XAy8AzP/XAy8Azv/XAy8A3v/XAy8A4P/XAy8A4v/XAy8A5P/XAy8BDv/XAy8BEP/XAy8BEv/XAy8BFP/XAy8BJP9xAy8BJv9xAy8BNv+uAy8BOP+FAy8BOv+FAy8BR//XAy8B+v+uAy8B/P+uAy8B/v+uAy8CAP+FAy8CB/9xAy8CC/9xAy8CX//XAy8DSf/XAy8DS//XAy8DTf/XAy8DT//XAy8DUf/XAy8DU//XAy8DVf/XAy8DV//XAy8DWf/XAy8DW//XAy8DXf/XAy8DX//XAy8Db/+FAy8Dcf+FAy8Dc/+FAy8Dj/9xAzAABf/sAzAACv/sAzACB//sAzACC//sAzEABf9xAzEACv9xAzEAJv/XAzEAKv/XAzEALQEKAzEAMv/XAzEANP/XAzEAN/9xAzEAOf+uAzEAOv+uAzEAPP+FAzEAif/XAzEAlP/XAzEAlf/XAzEAlv/XAzEAl//XAzEAmP/XAzEAmv/XAzEAn/+FAzEAyP/XAzEAyv/XAzEAzP/XAzEAzv/XAzEA3v/XAzEA4P/XAzEA4v/XAzEA5P/XAzEBDv/XAzEBEP/XAzEBEv/XAzEBFP/XAzEBJP9xAzEBJv9xAzEBNv+uAzEBOP+FAzEBOv+FAzEBR//XAzEB+v+uAzEB/P+uAzEB/v+uAzECAP+FAzECB/9xAzECC/9xAzECX//XAzEDSf/XAzEDS//XAzEDTf/XAzEDT//XAzEDUf/XAzEDU//XAzEDVf/XAzEDV//XAzEDWf/XAzEDW//XAzEDXf/XAzEDX//XAzEDb/+FAzEDcf+FAzEDc/+FAzEDj/9xAzIABf/sAzIACv/sAzICB//sAzICC//sAzMABf9xAzMACv9xAzMAJv/XAzMAKv/XAzMALQEKAzMAMv/XAzMANP/XAzMAN/9xAzMAOf+uAzMAOv+uAzMAPP+FAzMAif/XAzMAlP/XAzMAlf/XAzMAlv/XAzMAl//XAzMAmP/XAzMAmv/XAzMAn/+FAzMAyP/XAzMAyv/XAzMAzP/XAzMAzv/XAzMA3v/XAzMA4P/XAzMA4v/XAzMA5P/XAzMBDv/XAzMBEP/XAzMBEv/XAzMBFP/XAzMBJP9xAzMBJv9xAzMBNv+uAzMBOP+FAzMBOv+FAzMBR//XAzMB+v+uAzMB/P+uAzMB/v+uAzMCAP+FAzMCB/9xAzMCC/9xAzMCX//XAzMDSf/XAzMDS//XAzMDTf/XAzMDT//XAzMDUf/XAzMDU//XAzMDVf/XAzMDV//XAzMDWf/XAzMDW//XAzMDXf/XAzMDX//XAzMDb/+FAzMDcf+FAzMDc/+FAzMDj/9xAzQABf/sAzQACv/sAzQCB//sAzQCC//sAzUALQB7AzYABf/sAzYACv/sAzYAWf/XAzYAWv/XAzYAW//XAzYAXP/XAzYAXf/sAzYAv//XAzYBN//XAzYBPP/sAzYBPv/sAzYBQP/sAzYB+//XAzYB/f/XAzYCB//sAzYCC//sAzYDcP/XAzcALQB7AzgABf/sAzgACv/sAzgAWf/XAzgAWv/XAzgAW//XAzgAXP/XAzgAXf/sAzgAv//XAzgBN//XAzgBPP/sAzgBPv/sAzgBQP/sAzgB+//XAzgB/f/XAzgCB//sAzgCC//sAzgDcP/XAzkALQB7AzoABf/sAzoACv/sAzoAWf/XAzoAWv/XAzoAW//XAzoAXP/XAzoAXf/sAzoAv//XAzoBN//XAzoBPP/sAzoBPv/sAzoBQP/sAzoB+//XAzoB/f/XAzoCB//sAzoCC//sAzoDcP/XAzsALQB7AzwABf/sAzwACv/sAzwAWf/XAzwAWv/XAzwAW//XAzwAXP/XAzwAXf/sAzwAv//XAzwBN//XAzwBPP/sAzwBPv/sAzwBQP/sAzwB+//XAzwB/f/XAzwCB//sAzwCC//sAzwDcP/XAz0ALQB7Az4ABf/sAz4ACv/sAz4AWf/XAz4AWv/XAz4AW//XAz4AXP/XAz4AXf/sAz4Av//XAz4BN//XAz4BPP/sAz4BPv/sAz4BQP/sAz4B+//XAz4B/f/XAz4CB//sAz4CC//sAz4DcP/XAz8ALQB7A0AABf/sA0AACv/sA0AAWf/XA0AAWv/XA0AAW//XA0AAXP/XA0AAXf/sA0AAv//XA0ABN//XA0ABPP/sA0ABPv/sA0ABQP/sA0AB+//XA0AB/f/XA0ACB//sA0ACC//sA0ADcP/XA0EALQB7A0IABf/sA0IACv/sA0IAWf/XA0IAWv/XA0IAW//XA0IAXP/XA0IAXf/sA0IAv//XA0IBN//XA0IBPP/sA0IBPv/sA0IBQP/sA0IB+//XA0IB/f/XA0ICB//sA0ICC//sA0IDcP/XA0MALQB7A0QABf/sA0QACv/sA0QAWf/XA0QAWv/XA0QAW//XA0QAXP/XA0QAXf/sA0QAv//XA0QBN//XA0QBPP/sA0QBPv/sA0QBQP/sA0QB+//XA0QB/f/XA0QCB//sA0QCC//sA0QDcP/XA0kAD/+uA0kAEf+uA0kAJP/XA0kAN//DA0kAOf/sA0kAOv/sA0kAO//XA0kAPP/sA0kAPf/sA0kAgv/XA0kAg//XA0kAhP/XA0kAhf/XA0kAhv/XA0kAh//XA0kAn//sA0kAwv/XA0kAxP/XA0kAxv/XA0kBJP/DA0kBJv/DA0kBNv/sA0kBOP/sA0kBOv/sA0kBO//sA0kBPf/sA0kBP//sA0kBQ//XA0kBoP/sA0kB+v/sA0kB/P/sA0kB/v/sA0kCAP/sA0kCCP+uA0kCDP+uA0kCWP/XA0kDHf/XA0kDH//XA0kDIf/XA0kDI//XA0kDJf/XA0kDJ//XA0kDKf/XA0kDK//XA0kDLf/XA0kDL//XA0kDMf/XA0kDM//XA0kDb//sA0kDcf/sA0kDc//sA0kDj//DA0oABf/sA0oACv/sA0oAWf/XA0oAWv/XA0oAW//XA0oAXP/XA0oAXf/sA0oAv//XA0oBN//XA0oBPP/sA0oBPv/sA0oBQP/sA0oB+//XA0oB/f/XA0oCB//sA0oCC//sA0oDcP/XA0sAD/+uA0sAEf+uA0sAJP/XA0sAN//DA0sAOf/sA0sAOv/sA0sAO//XA0sAPP/sA0sAPf/sA0sAgv/XA0sAg//XA0sAhP/XA0sAhf/XA0sAhv/XA0sAh//XA0sAn//sA0sAwv/XA0sAxP/XA0sAxv/XA0sBJP/DA0sBJv/DA0sBNv/sA0sBOP/sA0sBOv/sA0sBO//sA0sBPf/sA0sBP//sA0sBQ//XA0sBoP/sA0sB+v/sA0sB/P/sA0sB/v/sA0sCAP/sA0sCCP+uA0sCDP+uA0sCWP/XA0sDHf/XA0sDH//XA0sDIf/XA0sDI//XA0sDJf/XA0sDJ//XA0sDKf/XA0sDK//XA0sDLf/XA0sDL//XA0sDMf/XA0sDM//XA0sDb//sA0sDcf/sA0sDc//sA0sDj//DA0wABf/sA0wACv/sA0wAWf/XA0wAWv/XA0wAW//XA0wAXP/XA0wAXf/sA0wAv//XA0wBN//XA0wBPP/sA0wBPv/sA0wBQP/sA0wB+//XA0wB/f/XA0wCB//sA0wCC//sA0wDcP/XA00AD/+uA00AEf+uA00AJP/XA00AN//DA00AOf/sA00AOv/sA00AO//XA00APP/sA00APf/sA00Agv/XA00Ag//XA00AhP/XA00Ahf/XA00Ahv/XA00Ah//XA00An//sA00Awv/XA00AxP/XA00Axv/XA00BJP/DA00BJv/DA00BNv/sA00BOP/sA00BOv/sA00BO//sA00BPf/sA00BP//sA00BQ//XA00BoP/sA00B+v/sA00B/P/sA00B/v/sA00CAP/sA00CCP+uA00CDP+uA00CWP/XA00DHf/XA00DH//XA00DIf/XA00DI//XA00DJf/XA00DJ//XA00DKf/XA00DK//XA00DLf/XA00DL//XA00DMf/XA00DM//XA00Db//sA00Dcf/sA00Dc//sA00Dj//DA08AD/+uA08AEf+uA08AJP/XA08AN//DA08AOf/sA08AOv/sA08AO//XA08APP/sA08APf/sA08Agv/XA08Ag//XA08AhP/XA08Ahf/XA08Ahv/XA08Ah//XA08An//sA08Awv/XA08AxP/XA08Axv/XA08BJP/DA08BJv/DA08BNv/sA08BOP/sA08BOv/sA08BO//sA08BPf/sA08BP//sA08BQ//XA08BoP/sA08B+v/sA08B/P/sA08B/v/sA08CAP/sA08CCP+uA08CDP+uA08CWP/XA08DHf/XA08DH//XA08DIf/XA08DI//XA08DJf/XA08DJ//XA08DKf/XA08DK//XA08DLf/XA08DL//XA08DMf/XA08DM//XA08Db//sA08Dcf/sA08Dc//sA08Dj//DA1EAD/+uA1EAEf+uA1EAJP/XA1EAN//DA1EAOf/sA1EAOv/sA1EAO//XA1EAPP/sA1EAPf/sA1EAgv/XA1EAg//XA1EAhP/XA1EAhf/XA1EAhv/XA1EAh//XA1EAn//sA1EAwv/XA1EAxP/XA1EAxv/XA1EBJP/DA1EBJv/DA1EBNv/sA1EBOP/sA1EBOv/sA1EBO//sA1EBPf/sA1EBP//sA1EBQ//XA1EBoP/sA1EB+v/sA1EB/P/sA1EB/v/sA1ECAP/sA1ECCP+uA1ECDP+uA1ECWP/XA1EDHf/XA1EDH//XA1EDIf/XA1EDI//XA1EDJf/XA1EDJ//XA1EDKf/XA1EDK//XA1EDLf/XA1EDL//XA1EDMf/XA1EDM//XA1EDb//sA1EDcf/sA1EDc//sA1EDj//DA1MAD/+uA1MAEf+uA1MAJP/XA1MAN//DA1MAOf/sA1MAOv/sA1MAO//XA1MAPP/sA1MAPf/sA1MAgv/XA1MAg//XA1MAhP/XA1MAhf/XA1MAhv/XA1MAh//XA1MAn//sA1MAwv/XA1MAxP/XA1MAxv/XA1MBJP/DA1MBJv/DA1MBNv/sA1MBOP/sA1MBOv/sA1MBO//sA1MBPf/sA1MBP//sA1MBQ//XA1MBoP/sA1MB+v/sA1MB/P/sA1MB/v/sA1MCAP/sA1MCCP+uA1MCDP+uA1MCWP/XA1MDHf/XA1MDH//XA1MDIf/XA1MDI//XA1MDJf/XA1MDJ//XA1MDKf/XA1MDK//XA1MDLf/XA1MDL//XA1MDMf/XA1MDM//XA1MDb//sA1MDcf/sA1MDc//sA1MDj//DA1UAD/+uA1UAEf+uA1UAJP/XA1UAN//DA1UAOf/sA1UAOv/sA1UAO//XA1UAPP/sA1UAPf/sA1UAgv/XA1UAg//XA1UAhP/XA1UAhf/XA1UAhv/XA1UAh//XA1UAn//sA1UAwv/XA1UAxP/XA1UAxv/XA1UBJP/DA1UBJv/DA1UBNv/sA1UBOP/sA1UBOv/sA1UBO//sA1UBPf/sA1UBP//sA1UBQ//XA1UBoP/sA1UB+v/sA1UB/P/sA1UB/v/sA1UCAP/sA1UCCP+uA1UCDP+uA1UCWP/XA1UDHf/XA1UDH//XA1UDIf/XA1UDI//XA1UDJf/XA1UDJ//XA1UDKf/XA1UDK//XA1UDLf/XA1UDL//XA1UDMf/XA1UDM//XA1UDb//sA1UDcf/sA1UDc//sA1UDj//DA1gASQBSA1gAVwBSA1gAWQBmA1gAWgBmA1gAWwBmA1gAXABmA1gAvwBmA1gBJQBSA1gBJwBSA1gBNwBmA1gB+wBmA1gB/QBmA1gCNABSA1gCNQBSA1gCXQBSA1gCXgBSA1gDcABmA1gDjQBSA1gDkABSA1oASQBSA1oAVwBSA1oAWQBmA1oAWgBmA1oAWwBmA1oAXABmA1oAvwBmA1oBJQBSA1oBJwBSA1oBNwBmA1oB+wBmA1oB/QBmA1oCNABSA1oCNQBSA1oCXQBSA1oCXgBSA1oDcABmA1oDjQBSA1oDkABSA1wASQBSA1wAVwBSA1wAWQBmA1wAWgBmA1wAWwBmA1wAXABmA1wAvwBmA1wBJQBSA1wBJwBSA1wBNwBmA1wB+wBmA1wB/QBmA1wCNABSA1wCNQBSA1wCXQBSA1wCXgBSA1wDcABmA1wDjQBSA1wDkABSA14ASQBSA14AVwBSA14AWQBmA14AWgBmA14AWwBmA14AXABmA14AvwBmA14BJQBSA14BJwBSA14BNwBmA14B+wBmA14B/QBmA14CNABSA14CNQBSA14CXQBSA14CXgBSA14DcABmA14DjQBSA14DkABSA2AASQBSA2AAVwBSA2AAWQBmA2AAWgBmA2AAWwBmA2AAXABmA2AAvwBmA2ABJQBSA2ABJwBSA2ABNwBmA2AB+wBmA2AB/QBmA2ACNABSA2ACNQBSA2ACXQBSA2ACXgBSA2ADcABmA2ADjQBSA2ADkABSA2EAD//XA2EAEf/XA2EAJP/sA2EAgv/sA2EAg//sA2EAhP/sA2EAhf/sA2EAhv/sA2EAh//sA2EAwv/sA2EAxP/sA2EAxv/sA2EBQ//sA2ECCP/XA2ECDP/XA2ECWP/sA2EDHf/sA2EDH//sA2EDIf/sA2EDI//sA2EDJf/sA2EDJ//sA2EDKf/sA2EDK//sA2EDLf/sA2EDL//sA2EDMf/sA2EDM//sA2YASQBmA2YAVwBmA2YAWQBmA2YAWgBmA2YAWwBmA2YAXABmA2YAvwBmA2YBJQBmA2YBJwBmA2YBNwBmA2YB+wBmA2YB/QBmA2YCNABmA2YCNQBmA2YCXQBmA2YCXgBmA2YDcABmA2YDjQBmA2YDkABmA2gASQBmA2gAVwBmA2gAWQBmA2gAWgBmA2gAWwBmA2gAXABmA2gAvwBmA2gBJQBmA2gBJwBmA2gBNwBmA2gB+wBmA2gB/QBmA2gCNABmA2gCNQBmA2gCXQBmA2gCXgBmA2gDcABmA2gDjQBmA2gDkABmA2oASQBmA2oAVwBmA2oAWQBmA2oAWgBmA2oAWwBmA2oAXABmA2oAvwBmA2oBJQBmA2oBJwBmA2oBNwBmA2oB+wBmA2oB/QBmA2oCNABmA2oCNQBmA2oCXQBmA2oCXgBmA2oDcABmA2oDjQBmA2oDkABmA2wASQBmA2wAVwBmA2wAWQBmA2wAWgBmA2wAWwBmA2wAXABmA2wAvwBmA2wBJQBmA2wBJwBmA2wBNwBmA2wB+wBmA2wB/QBmA2wCNABmA2wCNQBmA2wCXQBmA2wCXgBmA2wDcABmA2wDjQBmA2wDkABmA24ASQBmA24AVwBmA24AWQBmA24AWgBmA24AWwBmA24AXABmA24AvwBmA24BJQBmA24BJwBmA24BNwBmA24B+wBmA24B/QBmA24CNABmA24CNQBmA24CXQBmA24CXgBmA24DcABmA24DjQBmA24DkABmA28AD/+FA28AEf+FA28AIgApA28AJP+FA28AJv/XA28AKv/XA28AMv/XA28ANP/XA28ARP+aA28ARv+aA28AR/+aA28ASP+aA28ASv/XA28AUP/DA28AUf/DA28AUv+aA28AU//DA28AVP+aA28AVf/DA28AVv+uA28AWP/DA28AXf/XA28Agv+FA28Ag/+FA28AhP+FA28Ahf+FA28Ahv+FA28Ah/+FA28Aif/XA28AlP/XA28Alf/XA28Alv/XA28Al//XA28AmP/XA28Amv/XA28Aov+aA28Ao/+aA28ApP+aA28Apf+aA28Apv+aA28Ap/+aA28AqP+aA28Aqf+aA28Aqv+aA28Aq/+aA28ArP+aA28Arf+aA28AtP+aA28Atf+aA28Atv+aA28At/+aA28AuP+aA28Auv+aA28Au//DA28AvP/DA28Avf/DA28Avv/DA28Awv+FA28Aw/+aA28AxP+FA28Axf+aA28Axv+FA28Ax/+aA28AyP/XA28Ayf+aA28Ayv/XA28Ay/+aA28AzP/XA28Azf+aA28Azv/XA28Az/+aA28A0f+aA28A0/+aA28A1f+aA28A1/+aA28A2f+aA28A2/+aA28A3f+aA28A3v/XA28A3//XA28A4P/XA28A4f/XA28A4v/XA28A4//XA28A5P/XA28A5f/XA28A+v/DA28BBv/DA28BCP/DA28BDf/DA28BDv/XA28BD/+aA28BEP/XA28BEf+aA28BEv/XA28BE/+aA28BFP/XA28BFf+aA28BF//DA28BGf/DA28BHf+uA28BIf+uA28BK//DA28BLf/DA28BL//DA28BMf/DA28BM//DA28BNf/DA28BPP/XA28BPv/XA28BQP/XA28BQ/+FA28BRP+aA28BRv+aA28BR//XA28BSP+aA28BSv+uA28CCP+FA28CDP+FA28CV//DA28CWP+FA28CWf+aA28CX//XA28CYP+aA28CYv/DA28DHf+FA28DHv+aA28DH/+FA28DIP+aA28DIf+FA28DIv+aA28DI/+FA28DJf+FA28DJv+aA28DJ/+FA28DKP+aA28DKf+FA28DKv+aA28DK/+FA28DLP+aA28DLf+FA28DLv+aA28DL/+FA28DMP+aA28DMf+FA28DMv+aA28DM/+FA28DNP+aA28DNv+aA28DOP+aA28DOv+aA28DPP+aA28DQP+aA28DQv+aA28DRP+aA28DSf/XA28DSv+aA28DS//XA28DTP+aA28DTf/XA28DTv+aA28DT//XA28DUf/XA28DUv+aA28DU//XA28DVP+aA28DVf/XA28DVv+aA28DV//XA28DWP+aA28DWf/XA28DWv+aA28DW//XA28DXP+aA28DXf/XA28DXv+aA28DX//XA28DYP+aA28DYv/DA28DZP/DA28DZv/DA28DaP/DA28Dav/DA28DbP/DA28Dbv/DA3AABQBSA3AACgBSA3AAD/+uA3AAEf+uA3AAIgApA3ACBwBSA3ACCP+uA3ACCwBSA3ACDP+uA3EAD/+FA3EAEf+FA3EAIgApA3EAJP+FA3EAJv/XA3EAKv/XA3EAMv/XA3EANP/XA3EARP+aA3EARv+aA3EAR/+aA3EASP+aA3EASv/XA3EAUP/DA3EAUf/DA3EAUv+aA3EAU//DA3EAVP+aA3EAVf/DA3EAVv+uA3EAWP/DA3EAXf/XA3EAgv+FA3EAg/+FA3EAhP+FA3EAhf+FA3EAhv+FA3EAh/+FA3EAif/XA3EAlP/XA3EAlf/XA3EAlv/XA3EAl//XA3EAmP/XA3EAmv/XA3EAov+aA3EAo/+aA3EApP+aA3EApf+aA3EApv+aA3EAp/+aA3EAqP+aA3EAqf+aA3EAqv+aA3EAq/+aA3EArP+aA3EArf+aA3EAtP+aA3EAtf+aA3EAtv+aA3EAt/+aA3EAuP+aA3EAuv+aA3EAu//DA3EAvP/DA3EAvf/DA3EAvv/DA3EAwv+FA3EAw/+aA3EAxP+FA3EAxf+aA3EAxv+FA3EAx/+aA3EAyP/XA3EAyf+aA3EAyv/XA3EAy/+aA3EAzP/XA3EAzf+aA3EAzv/XA3EAz/+aA3EA0f+aA3EA0/+aA3EA1f+aA3EA1/+aA3EA2f+aA3EA2/+aA3EA3f+aA3EA3v/XA3EA3//XA3EA4P/XA3EA4f/XA3EA4v/XA3EA4//XA3EA5P/XA3EA5f/XA3EA+v/DA3EBBv/DA3EBCP/DA3EBDf/DA3EBDv/XA3EBD/+aA3EBEP/XA3EBEf+aA3EBEv/XA3EBE/+aA3EBFP/XA3EBFf+aA3EBF//DA3EBGf/DA3EBHf+uA3EBIf+uA3EBK//DA3EBLf/DA3EBL//DA3EBMf/DA3EBM//DA3EBNf/DA3EBPP/XA3EBPv/XA3EBQP/XA3EBQ/+FA3EBRP+aA3EBRv+aA3EBR//XA3EBSP+aA3EBSv+uA3ECCP+FA3ECDP+FA3ECV//DA3ECWP+FA3ECWf+aA3ECX//XA3ECYP+aA3ECYv/DA3EDHf+FA3EDHv+aA3EDH/+FA3EDIP+aA3EDIf+FA3EDIv+aA3EDI/+FA3EDJf+FA3EDJv+aA3EDJ/+FA3EDKP+aA3EDKf+FA3EDKv+aA3EDK/+FA3EDLP+aA3EDLf+FA3EDLv+aA3EDL/+FA3EDMP+aA3EDMf+FA3EDMv+aA3EDM/+FA3EDNP+aA3EDNv+aA3EDOP+aA3EDOv+aA3EDPP+aA3EDQP+aA3EDQv+aA3EDRP+aA3EDSf/XA3EDSv+aA3EDS//XA3EDTP+aA3EDTf/XA3EDTv+aA3EDT//XA3EDUf/XA3EDUv+aA3EDU//XA3EDVP+aA3EDVf/XA3EDVv+aA3EDV//XA3EDWP+aA3EDWf/XA3EDWv+aA3EDW//XA3EDXP+aA3EDXf/XA3EDXv+aA3EDX//XA3EDYP+aA3EDYv/DA3EDZP/DA3EDZv/DA3EDaP/DA3EDav/DA3EDbP/DA3EDbv/DA3IABQBSA3IACgBSA3IAD/+uA3IAEf+uA3IAIgApA3ICBwBSA3ICCP+uA3ICCwBSA3ICDP+uA3MAD/+FA3MAEf+FA3MAIgApA3MAJP+FA3MAJv/XA3MAKv/XA3MAMv/XA3MANP/XA3MARP+aA3MARv+aA3MAR/+aA3MASP+aA3MASv/XA3MAUP/DA3MAUf/DA3MAUv+aA3MAU//DA3MAVP+aA3MAVf/DA3MAVv+uA3MAWP/DA3MAXf/XA3MAgv+FA3MAg/+FA3MAhP+FA3MAhf+FA3MAhv+FA3MAh/+FA3MAif/XA3MAlP/XA3MAlf/XA3MAlv/XA3MAl//XA3MAmP/XA3MAmv/XA3MAov+aA3MAo/+aA3MApP+aA3MApf+aA3MApv+aA3MAp/+aA3MAqP+aA3MAqf+aA3MAqv+aA3MAq/+aA3MArP+aA3MArf+aA3MAtP+aA3MAtf+aA3MAtv+aA3MAt/+aA3MAuP+aA3MAuv+aA3MAu//DA3MAvP/DA3MAvf/DA3MAvv/DA3MAwv+FA3MAw/+aA3MAxP+FA3MAxf+aA3MAxv+FA3MAx/+aA3MAyP/XA3MAyf+aA3MAyv/XA3MAy/+aA3MAzP/XA3MAzf+aA3MAzv/XA3MAz/+aA3MA0f+aA3MA0/+aA3MA1f+aA3MA1/+aA3MA2f+aA3MA2/+aA3MA3f+aA3MA3v/XA3MA3//XA3MA4P/XA3MA4f/XA3MA4v/XA3MA4//XA3MA5P/XA3MA5f/XA3MA+v/DA3MBBv/DA3MBCP/DA3MBDf/DA3MBDv/XA3MBD/+aA3MBEP/XA3MBEf+aA3MBEv/XA3MBE/+aA3MBFP/XA3MBFf+aA3MBF//DA3MBGf/DA3MBHf+uA3MBIf+uA3MBK//DA3MBLf/DA3MBL//DA3MBMf/DA3MBM//DA3MBNf/DA3MBPP/XA3MBPv/XA3MBQP/XA3MBQ/+FA3MBRP+aA3MBRv+aA3MBR//XA3MBSP+aA3MBSv+uA3MCCP+FA3MCDP+FA3MCV//DA3MCWP+FA3MCWf+aA3MCX//XA3MCYP+aA3MCYv/DA3MDHf+FA3MDHv+aA3MDH/+FA3MDIP+aA3MDIf+FA3MDIv+aA3MDI/+FA3MDJf+FA3MDJv+aA3MDJ/+FA3MDKP+aA3MDKf+FA3MDKv+aA3MDK/+FA3MDLP+aA3MDLf+FA3MDLv+aA3MDL/+FA3MDMP+aA3MDMf+FA3MDMv+aA3MDM/+FA3MDNP+aA3MDNv+aA3MDOP+aA3MDOv+aA3MDPP+aA3MDQP+aA3MDQv+aA3MDRP+aA3MDSf/XA3MDSv+aA3MDS//XA3MDTP+aA3MDTf/XA3MDTv+aA3MDT//XA3MDUf/XA3MDUv+aA3MDU//XA3MDVP+aA3MDVf/XA3MDVv+aA3MDV//XA3MDWP+aA3MDWf/XA3MDWv+aA3MDW//XA3MDXP+aA3MDXf/XA3MDXv+aA3MDX//XA3MDYP+aA3MDYv/DA3MDZP/DA3MDZv/DA3MDaP/DA3MDav/DA3MDbP/DA3MDbv/DA3QABQBSA3QACgBSA3QAD/+uA3QAEf+uA3QAIgApA3QCBwBSA3QCCP+uA3QCCwBSA3QCDP+uA40ABQB7A40ACgB7A40CBwB7A40CCwB7A48AD/+FA48AEP+uA48AEf+FA48AIgApA48AJP9xA48AJv/XA48AKv/XA48AMv/XA48ANP/XA48ANwApA48ARP9cA48ARv9xA48AR/9xA48ASP9xA48ASv9xA48AUP+aA48AUf+aA48AUv9xA48AU/+aA48AVP9xA48AVf+aA48AVv+FA48AWP+aA48AWf/XA48AWv/XA48AW//XA48AXP/XA48AXf+uA48Agv9xA48Ag/9xA48AhP9xA48Ahf9xA48Ahv9xA48Ah/9xA48Aif/XA48AlP/XA48Alf/XA48Alv/XA48Al//XA48AmP/XA48Amv/XA48Aov9xA48Ao/9cA48ApP9cA48Apf9cA48Apv9cA48Ap/9cA48AqP9cA48Aqf9xA48Aqv9xA48Aq/9xA48ArP9xA48Arf9xA48AtP9xA48Atf9xA48Atv9xA48At/9xA48AuP9xA48Auv9xA48Au/+aA48AvP+aA48Avf+aA48Avv+aA48Av//XA48Awv9xA48Aw/9cA48AxP9xA48Axf9cA48Axv9xA48Ax/9cA48AyP/XA48Ayf9xA48Ayv/XA48Ay/9xA48AzP/XA48Azf9xA48Azv/XA48Az/9xA48A0f9xA48A0/9xA48A1f9xA48A1/9xA48A2f9xA48A2/9xA48A3f9xA48A3v/XA48A3/9xA48A4P/XA48A4f9xA48A4v/XA48A4/9xA48A5P/XA48A5f9xA48A+v+aA48BBv+aA48BCP+aA48BDf+aA48BDv/XA48BD/9xA48BEP/XA48BEf9xA48BEv/XA48BE/9xA48BFP/XA48BFf9xA48BF/+aA48BGf+aA48BHf+FA48BIf+FA48BJAApA48BJgApA48BK/+aA48BLf+aA48BL/+aA48BMf+aA48BM/+aA48BNf+aA48BN//XA48BPP+uA48BPv+uA48BQP+uA48BQ/9xA48BRP9cA48BRv9cA48BR//XA48BSP9xA48BSv+FA48B+//XA48B/f/XA48CAv+uA48CA/+uA48CBP+uA48CCP+FA48CDP+FA48CV/+aA48CWP9xA48CWf9cA48CX//XA48CYP9xA48CYv+aA48DHf9xA48DHv9cA48DH/9xA48DIP9cA48DIf9xA48DIv9cA48DI/9xA48DJf9xA48DJv9cA48DJ/9xA48DKP9cA48DKf9xA48DKv9cA48DK/9xA48DLP9cA48DLf9xA48DLv9cA48DL/9xA48DMP9cA48DMf9xA48DMv9cA48DM/9xA48DNP9cA48DNv9xA48DOP9xA48DOv9xA48DPP9xA48DQP9xA48DQv9xA48DRP9xA48DSf/XA48DSv9xA48DS//XA48DTP9xA48DTf/XA48DTv9xA48DT//XA48DUf/XA48DUv9xA48DU//XA48DVP9xA48DVf/XA48DVv9xA48DV//XA48DWP9xA48DWf/XA48DWv9xA48DW//XA48DXP9xA48DXf/XA48DXv9xA48DX//XA48DYP9xA48DYv+aA48DZP+aA48DZv+aA48DaP+aA48Dav+aA48DbP+aA48Dbv+aA48DcP/XA48DjwApA5AABQApA5AACgApA5ACBwApA5ACCwApAAAAAAAcAVYAAQAAAAAAAAA0AAAAAQAAAAAAAQAJADQAAQAAAAAAAgAIAD0AAQAAAAAAAwAbAEUAAQAAAAAABAASAGAAAQAAAAAABQAMAHIAAQAAAAAABgARAH4AAQAAAAAABwBSAI8AAQAAAAAACAAUAOEAAQAAAAAACwAcAPUAAQAAAAAADAAuAREAAQAAAAAADQAu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AakBqgGrAawBrQGuAa8BsAGxAbIBswG0AbUBtgG3AbgBuQG6AbsBvAG9Ab4BvwHAAcEBwgHDAcQBxQHGAccByAHJAcoBywHMAc0BzgHPAdAB0QHSAdMB1AHVAdYB1wHYAdkB2gHbAdwB3QHeAd8B4AHhAeIB4wHkAeUB5gHnAegB6QHqAesB7AHtAe4B7wHwAfEB8gHzAfQB9QH2AfcB+AH5AfoB+wH8Af0B/gH/AgACAQICAgMCBAIFAgYCBwIIAgkCCgILAgwCDQIOAg8CEAIRAhICEwIUAhUCFgIXAhgCGQIaAhsCHAIdAh4CHwIgAiECIgIjAiQCJQImAicCKAIpAioCKwIsAi0CLgIvAjACMQIyAjMCNAI1AjYCNwI4AjkCOgI7AjwCPQI+Aj8CQAJBAkICQwJEAkUCRgJHAkgCSQJKAksCTAJNAk4CTwJQAlECUgJTAlQCVQJWAlcCWAJZAloCWwJcAl0CXgJfAmACYQJiAmMCZAJlAmYCZwJoAmkCagJrAmwCbQJuAm8CcAJxAnICcwJ0AnUCdgJ3AngCeQJ6AnsCfAJ9An4CfwKAAoECggKDAoQChQKGAocCiAKJAooCiwKMAo0CjgKPApACkQKSApMClAKVApYClwKYApkCmgKbApwCnQKeAp8CoAKhAqICowKkAqUCpgKnAqgCqQKqAqsCrAKtAq4CrwKwArECsgKzArQCtQK2ArcCuAK5AroCuwK8Ar0CvgK/AsACwQLCAsMCxALFAsYCxwLIAskCygLLAswCzQLOAs8C0ALRAtIC0wLUAtUC1gLXAtgC2QLaAtsC3ALdAt4C3wLgAuEC4gLjAuQC5QLmAucC6ALpAuoC6wLsAu0C7gLvAvAC8QLyAvMC9AL1AvYC9wL4AvkC+gL7AvwC/QL+Av8DAAMBAwIDAwMEAwUDBgMHAwgDCQMKAwsDDAMNAw4DDwMQAxEDEgMTAxQDFQMWAxcDGAMZAxoDGwMcAx0DHgMfAyADIQMiAyMDJAMlAyYDJwMoAykDKgMrAywDLQMuAy8DMAMxAzIDMwM0AzUDNgM3AzgDOQM6AzsDPAM9Az4DPwNAA0EDQgNDA0QDRQNGA0cDSANJA0oDSwNMA00DTgNPA1ADUQNSA1MDVANVA1YDVwNYA1kDWgNbA1wDXQNeA18DYANhA2IDYwNkA2UDZgNnA2gDaQNqA2sDbANtA24DbwNwA3EDcgNzA3QDdQN2A3cDeAN5A3oDewN8A30DfgN/A4ADgQOCA4MDhAOFA4YDhwOIA4kDigOLA4wDjQOOA48DkAORA5IDkwOUA5UDlgOXA5gDmQOaA5sDnAOdA54DnwOgA6EDogOjA6QDpQOmA6cDqAOpA6oDqwOsA60DrgOvA7ADsQOyA7MDtAO1A7YDtwO4A7kDugO7A7wDvQO+A78DwAPBA8IDwwPEA8UDxgPHA8gDyQPKA8sDzAPNA84DzwPQA9ED0gPTA9QD1QPWA9cD2APZA9oD2wPcA90D3gPfA+AD4QPiA+MD5APlA+YD5wPoA+kD6gPrA+wD7QPuA+8D8APxA/ID8wP0A/UD9gP3A/gD+QP6A/sD/AP9A/4D/wQABAEEAgQDBAQEBQQGBAcECAQJBAoECwQMBA0EDgQPBBAEEQQSBBMEFAQVBBYEFwQYBBkEGgQbBBwEHQQeBB8EIAQhBCIEIwQkBCUEJgQnBCgEKQQqBCsELAQtBC4ELwQwBDEEMgQzBDQENQQ2BDcEOAQ5BDoEOwQ8BD0EPgQ/BEAEQQRCBEMERARFBEYERwRIBEkESgRLBEwETQROBE8EUARRBFIEUwRUBFUEVgRXBFgEWQRaBFsEXARdBF4EXwRgBGEEYgRjBGQEZQRmBGcEaARpBGoEawRsBG0EbgRvBHAEcQRyBHMEdAR1BHYEdwR4BHkEegR7BHwEfQR+BH8EgASBBIIEgwSEBIUEhgSHBIgEiQSKBIsEjASNBI4EjwSQBJEEkgSTBJQElQSWBJcEmASZBJoEmwScBJ0EngSfBKAEoQSiBKMEpASlBKYEpwSoBKkEqgSrBy5ub3RkZWYEbnVsbBBub25tYXJraW5ncmV0dXJuBXNwYWNlBmV4Y2xhbQhxdW90ZWRibApudW1iZXJzaWduBmRvbGxhcgdwZXJjZW50CWFtcGVyc2FuZAtxdW90ZXNpbmdsZQlwYXJlbmxlZnQKcGFyZW5yaWdodAhhc3RlcmlzawRwbHVzBWNvbW1hBmh5cGhlbgZwZXJpb2QFc2xhc2gEemVybwNvbmUDdHdvBXRocmVlBGZvdXIEZml2ZQNzaXgFc2V2ZW4FZWlnaHQEbmluZQVjb2xvbglzZW1pY29sb24EbGVzcwVlcXVhbAdncmVhdGVyCHF1ZXN0aW9uAmF0AUEBQgFDAUQBRQFGAUcBSAVJLmFsdAFKAUsBTAFNAU4BTwFQAVEBUgFTAVQBVQFWAVcBWAFZAVoLYnJhY2tldGxlZnQJYmFja3NsYXNoDGJyYWNrZXRyaWdodAthc2NpaWNpcmN1bQp1bmRlcnNjb3JlBWdyYXZlAWEBYgFjAWQBZQFmAWcBaAFpAWoBawFsAW0BbgFvAXABcQFyAXMBdAF1AXYBdwF4AXkBeglicmFjZWxlZnQDYmFyCmJyYWNlcmlnaHQKYXNjaWl0aWxkZRBub25icmVha2luZ3NwYWNlCmV4Y2xhbWRvd24EY2VudAhzdGVybGluZwhjdXJyZW5jeQN5ZW4JYnJva2VuYmFyB3NlY3Rpb24IZGllcmVzaXMJY29weXJpZ2h0C29yZGZlbWluaW5lDWd1aWxsZW1vdGxlZnQKbG9naWNhbG5vdAd1bmkwMEFECnJlZ2lzdGVyZWQJb3ZlcnNjb3JlBmRlZ3JlZQlwbHVzbWludXMLdHdvc3VwZXJpb3INdGhyZWVzdXBlcmlvcgVhY3V0ZQJtdQlwYXJhZ3JhcGgOcGVyaW9kY2VudGVyZWQHY2VkaWxsYQtvbmVzdXBlcmlvcgxvcmRtYXNjdWxpbmUOZ3VpbGxlbW90cmlnaHQKb25lcXVhcnRlcgdvbmVoYWxmDXRocmVlcXVhcnRlcnMMcXVlc3Rpb25kb3duBkFncmF2ZQZBYWN1dGULQWNpcmN1bWZsZXgGQXRpbGRlCUFkaWVyZXNpcwVBcmluZwJBRQhDY2VkaWxsYQZFZ3JhdmUGRWFjdXRlC0VjaXJjdW1mbGV4CUVkaWVyZXNpcwpJZ3JhdmUuYWx0CklhY3V0ZS5hbHQPSWNpcmN1bWZsZXguYWx0DUlkaWVyZXNpcy5hbHQDRXRoBk50aWxkZQZPZ3JhdmUGT2FjdXRlC09jaXJjdW1mbGV4Bk90aWxkZQlPZGllcmVzaXMIbXVsdGlwbHkGT3NsYXNoBlVncmF2ZQZVYWN1dGULVWNpcmN1bWZsZXgJVWRpZXJlc2lzBllhY3V0ZQVUaG9ybgpnZXJtYW5kYmxzBmFncmF2ZQZhYWN1dGULYWNpcmN1bWZsZXgGYXRpbGRlCWFkaWVyZXNpcwVhcmluZwJhZQhjY2VkaWxsYQZlZ3JhdmUGZWFjdXRlC2VjaXJjdW1mbGV4CWVkaWVyZXNpcwZpZ3JhdmUGaWFjdXRlC2ljaXJjdW1mbGV4CWlkaWVyZXNpcwNldGgGbnRpbGRlBm9ncmF2ZQZvYWN1dGULb2NpcmN1bWZsZXgGb3RpbGRlCW9kaWVyZXNpcwZkaXZpZGUGb3NsYXNoBnVncmF2ZQZ1YWN1dGULdWNpcmN1bWZsZXgJdWRpZXJlc2lzBnlhY3V0ZQV0aG9ybgl5ZGllcmVzaXMHQW1hY3JvbgdhbWFjcm9uBkFicmV2ZQZhYnJldmUHQW9nb25lawdhb2dvbmVrBkNhY3V0ZQZjYWN1dGULQ2NpcmN1bWZsZXgLY2NpcmN1bWZsZXgEQ2RvdARjZG90BkNjYXJvbgZjY2Fyb24GRGNhcm9uBmRjYXJvbgZEY3JvYXQGZGNyb2F0B0VtYWNyb24HZW1hY3JvbgZFYnJldmUGZWJyZXZlCkVkb3RhY2NlbnQKZWRvdGFjY2VudAdFb2dvbmVrB2VvZ29uZWsGRWNhcm9uBmVjYXJvbgtHY2lyY3VtZmxleAtnY2lyY3VtZmxleAZHYnJldmUGZ2JyZXZlBEdkb3QEZ2RvdAxHY29tbWFhY2NlbnQMZ2NvbW1hYWNjZW50C0hjaXJjdW1mbGV4C2hjaXJjdW1mbGV4BEhiYXIEaGJhcgpJdGlsZGUuYWx0Bml0aWxkZQtJbWFjcm9uLmFsdAdpbWFjcm9uCklicmV2ZS5hbHQGaWJyZXZlC0lvZ29uZWsuYWx0B2lvZ29uZWsOSWRvdGFjY2VudC5hbHQIZG90bGVzc2kGSUouYWx0AmlqC0pjaXJjdW1mbGV4C2pjaXJjdW1mbGV4DEtjb21tYWFjY2VudAxrY29tbWFhY2NlbnQMa2dyZWVubGFuZGljBkxhY3V0ZQZsYWN1dGUMTGNvbW1hYWNjZW50DGxjb21tYWFjY2VudAZMY2Fyb24GbGNhcm9uBExkb3QEbGRvdAZMc2xhc2gGbHNsYXNoBk5hY3V0ZQZuYWN1dGUMTmNvbW1hYWNjZW50DG5jb21tYWFjY2VudAZOY2Fyb24GbmNhcm9uC25hcG9zdHJvcGhlA0VuZwNlbmcHT21hY3JvbgdvbWFjcm9uBk9icmV2ZQZvYnJldmUNT2h1bmdhcnVtbGF1dA1vaHVuZ2FydW1sYXV0Ak9FAm9lBlJhY3V0ZQZyYWN1dGUMUmNvbW1hYWNjZW50DHJjb21tYWFjY2VudAZSY2Fyb24GcmNhcm9uBlNhY3V0ZQZzYWN1dGULU2NpcmN1bWZsZXgLc2NpcmN1bWZsZXgIU2NlZGlsbGEIc2NlZGlsbGEGU2Nhcm9uBnNjYXJvbgxUY29tbWFhY2NlbnQMdGNvbW1hYWNjZW50BlRjYXJvbgZ0Y2Fyb24EVGJhcgR0YmFyBlV0aWxkZQZ1dGlsZGUHVW1hY3Jvbgd1bWFjcm9uBlVicmV2ZQZ1YnJldmUFVXJpbmcFdXJpbmcNVWh1bmdhcnVtbGF1dA11aHVuZ2FydW1sYXV0B1VvZ29uZWsHdW9nb25lawtXY2lyY3VtZmxleAt3Y2lyY3VtZmxleAtZY2lyY3VtZmxleAt5Y2lyY3VtZmxleAlZZGllcmVzaXMGWmFjdXRlBnphY3V0ZQpaZG90YWNjZW50Cnpkb3RhY2NlbnQGWmNhcm9uBnpjYXJvbgVsb25ncwZmbG9yaW4KQXJpbmdhY3V0ZQphcmluZ2FjdXRlB0FFYWN1dGUHYWVhY3V0ZQtPc2xhc2hhY3V0ZQtvc2xhc2hhY3V0ZQxTY29tbWFhY2NlbnQMc2NvbW1hYWNjZW50CmNpcmN1bWZsZXgFY2Fyb24GbWFjcm9uBWJyZXZlCWRvdGFjY2VudARyaW5nBm9nb25lawV0aWxkZQxodW5nYXJ1bWxhdXQFdG9ub3MNZGllcmVzaXN0b25vcwpBbHBoYXRvbm9zCWFub3RlbGVpYQxFcHNpbG9udG9ub3MIRXRhdG9ub3MNSW90YXRvbm9zLmFsdAxPbWljcm9udG9ub3MMVXBzaWxvbnRvbm9zCk9tZWdhdG9ub3MRaW90YWRpZXJlc2lzdG9ub3MFQWxwaGEEQmV0YQVHYW1tYQd1bmkwMzk0B0Vwc2lsb24EWmV0YQNFdGEFVGhldGEISW90YS5hbHQFS2FwcGEGTGFtYmRhAk11Ak51AlhpB09taWNyb24CUGkDUmhvBVNpZ21hA1RhdQdVcHNpbG9uA1BoaQNDaGkDUHNpB3VuaTAzQTkQSW90YWRpZXJlc2lzLmFsdA9VcHNpbG9uZGllcmVzaXMKYWxwaGF0b25vcwxlcHNpbG9udG9ub3MIZXRhdG9ub3MJaW90YXRvbm9zFHVwc2lsb25kaWVyZXNpc3Rvbm9zBWFscGhhBGJldGEFZ2FtbWEFZGVsdGEHZXBzaWxvbgR6ZXRhA2V0YQV0aGV0YQRpb3RhBWthcHBhBmxhbWJkYQd1bmkwM0JDAm51AnhpB29taWNyb24CcGkDcmhvBnNpZ21hMQVzaWdtYQN0YXUHdXBzaWxvbgNwaGkDY2hpA3BzaQVvbWVnYQxpb3RhZGllcmVzaXMPdXBzaWxvbmRpZXJlc2lzDG9taWNyb250b25vcwx1cHNpbG9udG9ub3MKb21lZ2F0b25vcwlhZmlpMTAwMjMJYWZpaTEwMDUxCWFmaWkxMDA1MglhZmlpMTAwNTMJYWZpaTEwMDU0DWFmaWkxMDA1NS5hbHQNYWZpaTEwMDU2LmFsdAlhZmlpMTAwNTcJYWZpaTEwMDU4CWFmaWkxMDA1OQlhZmlpMTAwNjAJYWZpaTEwMDYxCWFmaWkxMDA2MglhZmlpMTAxNDUJYWZpaTEwMDE3CWFmaWkxMDAxOAlhZmlpMTAwMTkJYWZpaTEwMDIwCWFmaWkxMDAyMQlhZmlpMTAwMjIJYWZpaTEwMDI0CWFmaWkxMDAyNQlhZmlpMTAwMjYJYWZpaTEwMDI3CWFmaWkxMDAyOAlhZmlpMTAwMjkJYWZpaTEwMDMwCWFmaWkxMDAzMQlhZmlpMTAwMzIJYWZpaTEwMDMzCWFmaWkxMDAzNAlhZmlpMTAwMzUJYWZpaTEwMDM2CWFmaWkxMDAzNwlhZmlpMTAwMzgJYWZpaTEwMDM5CWFmaWkxMDA0MAlhZmlpMTAwNDEJYWZpaTEwMDQyCWFmaWkxMDA0MwlhZmlpMTAwNDQJYWZpaTEwMDQ1CWFmaWkxMDA0NglhZmlpMTAwNDcJYWZpaTEwMDQ4CWFmaWkxMDA0OQlhZmlpMTAwNjUJYWZpaTEwMDY2CWFmaWkxMDA2NwlhZmlpMTAwNjgJYWZpaTEwMDY5CWFmaWkxMDA3MAlhZmlpMTAwNzIJYWZpaTEwMDczCWFmaWkxMDA3NAlhZmlpMTAwNzUJYWZpaTEwMDc2CWFmaWkxMDA3NwlhZmlpMTAwNzgJYWZpaTEwMDc5CWFmaWkxMDA4MAlhZmlpMTAwODEJYWZpaTEwMDgyCWFmaWkxMDA4MwlhZmlpMTAwODQJYWZpaTEwMDg1CWFmaWkxMDA4NglhZmlpMTAwODcJYWZpaTEwMDg4CWFmaWkxMDA4OQlhZmlpMTAwOTAJYWZpaTEwMDkxCWFmaWkxMDA5MglhZmlpMTAwOTMJYWZpaTEwMDk0CWFmaWkxMDA5NQlhZmlpMTAwOTYJYWZpaTEwMDk3CWFmaWkxMDA3MQlhZmlpMTAwOTkJYWZpaTEwMTAwCWFmaWkxMDEwMQlhZmlpMTAxMDIJYWZpaTEwMTAzCWFmaWkxMDEwNAlhZmlpMTAxMDUJYWZpaTEwMTA2CWFmaWkxMDEwNwlhZmlpMTAxMDgJYWZpaTEwMTA5CWFmaWkxMDExMAlhZmlpMTAxOTMJYWZpaTEwMDUwCWFmaWkxMDA5OAZXZ3JhdmUGd2dyYXZlBldhY3V0ZQZ3YWN1dGUJV2RpZXJlc2lzCXdkaWVyZXNpcwZZZ3JhdmUGeWdyYXZlBmVuZGFzaAZlbWRhc2gJYWZpaTAwMjA4DXVuZGVyc2NvcmVkYmwJcXVvdGVsZWZ0CnF1b3RlcmlnaHQOcXVvdGVzaW5nbGJhc2UNcXVvdGVyZXZlcnNlZAxxdW90ZWRibGxlZnQNcXVvdGVkYmxyaWdodAxxdW90ZWRibGJhc2UGZGFnZ2VyCWRhZ2dlcmRibAZidWxsZXQIZWxsaXBzaXMLcGVydGhvdXNhbmQGbWludXRlBnNlY29uZA1ndWlsc2luZ2xsZWZ0Dmd1aWxzaW5nbHJpZ2h0CWV4Y2xhbWRibAhmcmFjdGlvbgluc3VwZXJpb3IFZnJhbmMJYWZpaTA4OTQxBnBlc2V0YQRFdXJvCWFmaWk2MTI0OAlhZmlpNjEyODkJYWZpaTYxMzUyCXRyYWRlbWFyawVPbWVnYQllc3RpbWF0ZWQJb25lZWlnaHRoDHRocmVlZWlnaHRocwtmaXZlZWlnaHRocwxzZXZlbmVpZ2h0aHMLcGFydGlhbGRpZmYFRGVsdGEHcHJvZHVjdAlzdW1tYXRpb24FbWludXMHcmFkaWNhbAhpbmZpbml0eQhpbnRlZ3JhbAthcHByb3hlcXVhbAhub3RlcXVhbAlsZXNzZXF1YWwMZ3JlYXRlcmVxdWFsB2xvemVuZ2UHdW5pRkIwMQd1bmlGQjAyDWN5cmlsbGljYnJldmUIZG90bGVzc2oQY2Fyb25jb21tYWFjY2VudAtjb21tYWFjY2VudBFjb21tYWFjY2VudHJvdGF0ZQx6ZXJvc3VwZXJpb3IMZm91cnN1cGVyaW9yDGZpdmVzdXBlcmlvcgtzaXhzdXBlcmlvcg1zZXZlbnN1cGVyaW9yDWVpZ2h0c3VwZXJpb3IMbmluZXN1cGVyaW9yB3VuaTIwMDAHdW5pMjAwMQd1bmkyMDAyB3VuaTIwMDMHdW5pMjAwNAd1bmkyMDA1B3VuaTIwMDYHdW5pMjAwNwd1bmkyMDA4B3VuaTIwMDkHdW5pMjAwQQd1bmkyMDBCB3VuaUZFRkYHdW5pRkZGQwd1bmlGRkZEB3VuaTAxRjAHdW5pMDJCQwd1bmkwM0QxB3VuaTAzRDIHdW5pMDNENgd1bmkxRTNFB3VuaTFFM0YHdW5pMUUwMAd1bmkxRTAxB3VuaTFGNEQHdW5pMDJGMwlkYXNpYW94aWEHdW5pRkIwMwd1bmlGQjA0BU9ob3JuBW9ob3JuBVVob3JuBXVob3JuB3VuaTAzMDAHdW5pMDMwMQd1bmkwMzAzBGhvb2sIZG90YmVsb3cHdW5pMDQwMAd1bmkwNDBEB3VuaTA0NTAHdW5pMDQ1RAd1bmkwNDYwB3VuaTA0NjEHdW5pMDQ2Mgd1bmkwNDYzB3VuaTA0NjQHdW5pMDQ2NQd1bmkwNDY2B3VuaTA0NjcHdW5pMDQ2OAd1bmkwNDY5B3VuaTA0NkEHdW5pMDQ2Qgd1bmkwNDZDB3VuaTA0NkQHdW5pMDQ2RQd1bmkwNDZGB3VuaTA0NzAHdW5pMDQ3MQd1bmkwNDcyB3VuaTA0NzMHdW5pMDQ3NAd1bmkwNDc1B3VuaTA0NzYHdW5pMDQ3Nwd1bmkwNDc4B3VuaTA0NzkHdW5pMDQ3QQd1bmkwNDdCB3VuaTA0N0MHdW5pMDQ3RAd1bmkwNDdFB3VuaTA0N0YHdW5pMDQ4MAd1bmkwNDgxB3VuaTA0ODIHdW5pMDQ4Mwd1bmkwNDg0B3VuaTA0ODUHdW5pMDQ4Ngd1bmkwNDg4B3VuaTA0ODkHdW5pMDQ4QQd1bmkwNDhCB3VuaTA0OEMHdW5pMDQ4RAd1bmkwNDhFB3VuaTA0OEYHdW5pMDQ5Mgd1bmkwNDkzB3VuaTA0OTQHdW5pMDQ5NQd1bmkwNDk2B3VuaTA0OTcHdW5pMDQ5OAd1bmkwNDk5B3VuaTA0OUEHdW5pMDQ5Qgd1bmkwNDlDB3VuaTA0OUQHdW5pMDQ5RQd1bmkwNDlGB3VuaTA0QTAHdW5pMDRBMQd1bmkwNEEyB3VuaTA0QTMHdW5pMDRBNAd1bmkwNEE1B3VuaTA0QTYHdW5pMDRBNwd1bmkwNEE4B3VuaTA0QTkHdW5pMDRBQQd1bmkwNEFCB3VuaTA0QUMHdW5pMDRBRAd1bmkwNEFFB3VuaTA0QUYHdW5pMDRCMAd1bmkwNEIxB3VuaTA0QjIHdW5pMDRCMwd1bmkwNEI0B3VuaTA0QjUHdW5pMDRCNgd1bmkwNEI3B3VuaTA0QjgHdW5pMDRCOQd1bmkwNEJBB3VuaTA0QkIHdW5pMDRCQwd1bmkwNEJEB3VuaTA0QkUHdW5pMDRCRgt1bmkwNEMwLmFsdAd1bmkwNEMxB3VuaTA0QzIHdW5pMDRDMwd1bmkwNEM0B3VuaTA0QzUHdW5pMDRDNgd1bmkwNEM3B3VuaTA0QzgHdW5pMDRDOQd1bmkwNENBB3VuaTA0Q0IHdW5pMDRDQwd1bmkwNENEB3VuaTA0Q0ULdW5pMDRDRi5hbHQHdW5pMDREMAd1bmkwNEQxB3VuaTA0RDIHdW5pMDREMwd1bmkwNEQ0B3VuaTA0RDUHdW5pMDRENgd1bmkwNEQ3B3VuaTA0RDgHdW5pMDREOQd1bmkwNERBB3VuaTA0REIHdW5pMDREQwd1bmkwNEREB3VuaTA0REUHdW5pMDRERgd1bmkwNEUwB3VuaTA0RTEHdW5pMDRFMgd1bmkwNEUzB3VuaTA0RTQHdW5pMDRFNQd1bmkwNEU2B3VuaTA0RTcHdW5pMDRFOAd1bmkwNEU5B3VuaTA0RUEHdW5pMDRFQgd1bmkwNEVDB3VuaTA0RUQHdW5pMDRFRQd1bmkwNEVGB3VuaTA0RjAHdW5pMDRGMQd1bmkwNEYyB3VuaTA0RjMHdW5pMDRGNAd1bmkwNEY1B3VuaTA0RjYHdW5pMDRGNwd1bmkwNEY4B3VuaTA0RjkHdW5pMDRGQQd1bmkwNEZCB3VuaTA0RkMHdW5pMDRGRAd1bmkwNEZFB3VuaTA0RkYHdW5pMDUwMAd1bmkwNTAxB3VuaTA1MDIHdW5pMDUwMwd1bmkwNTA0B3VuaTA1MDUHdW5pMDUwNgd1bmkwNTA3B3VuaTA1MDgHdW5pMDUwOQd1bmkwNTBBB3VuaTA1MEIHdW5pMDUwQwd1bmkwNTBEB3VuaTA1MEUHdW5pMDUwRgd1bmkwNTEwB3VuaTA1MTEHdW5pMDUxMgd1bmkwNTEzB3VuaTFFQTAHdW5pMUVBMQd1bmkxRUEyB3VuaTFFQTMHdW5pMUVBNAd1bmkxRUE1B3VuaTFFQTYHdW5pMUVBNwd1bmkxRUE4B3VuaTFFQTkHdW5pMUVBQQd1bmkxRUFCB3VuaTFFQUMHdW5pMUVBRAd1bmkxRUFFB3VuaTFFQUYHdW5pMUVCMAd1bmkxRUIxB3VuaTFFQjIHdW5pMUVCMwd1bmkxRUI0B3VuaTFFQjUHdW5pMUVCNgd1bmkxRUI3B3VuaTFFQjgHdW5pMUVCOQd1bmkxRUJBB3VuaTFFQkIHdW5pMUVCQwd1bmkxRUJEB3VuaTFFQkUHdW5pMUVCRgd1bmkxRUMwB3VuaTFFQzEHdW5pMUVDMgd1bmkxRUMzB3VuaTFFQzQHdW5pMUVDNQd1bmkxRUM2B3VuaTFFQzcLdW5pMUVDOC5hbHQHdW5pMUVDOQt1bmkxRUNBLmFsdAd1bmkxRUNCB3VuaTFFQ0MHdW5pMUVDRAd1bmkxRUNFB3VuaTFFQ0YHdW5pMUVEMAd1bmkxRUQxB3VuaTFFRDIHdW5pMUVEMwd1bmkxRUQ0B3VuaTFFRDUHdW5pMUVENgd1bmkxRUQ3B3VuaTFFRDgHdW5pMUVEOQd1bmkxRURBB3VuaTFFREIHdW5pMUVEQwd1bmkxRUREB3VuaTFFREUHdW5pMUVERgd1bmkxRUUwB3VuaTFFRTEHdW5pMUVFMgd1bmkxRUUzB3VuaTFFRTQHdW5pMUVFNQd1bmkxRUU2B3VuaTFFRTcHdW5pMUVFOAd1bmkxRUU5B3VuaTFFRUEHdW5pMUVFQgd1bmkxRUVDB3VuaTFFRUQHdW5pMUVFRQd1bmkxRUVGB3VuaTFFRjAHdW5pMUVGMQd1bmkxRUY0B3VuaTFFRjUHdW5pMUVGNgd1bmkxRUY3B3VuaTFFRjgHdW5pMUVGOQd1bmkyMEFCB3VuaTAzMEYTY2lyY3VtZmxleGFjdXRlY29tYhNjaXJjdW1mbGV4Z3JhdmVjb21iEmNpcmN1bWZsZXhob29rY29tYhNjaXJjdW1mbGV4dGlsZGVjb21iDmJyZXZlYWN1dGVjb21iDmJyZXZlZ3JhdmVjb21iDWJyZXZlaG9va2NvbWIOYnJldmV0aWxkZWNvbWIQY3lyaWxsaWNob29rbGVmdBFjeXJpbGxpY2JpZ2hvb2tVQxFjeXJpbGxpY2JpZ2hvb2tMQwhvbmUucG51bQd6ZXJvLm9zBm9uZS5vcwZ0d28ub3MIdGhyZWUub3MHZm91ci5vcwdmaXZlLm9zBnNpeC5vcwhzZXZlbi5vcwhlaWdodC5vcwduaW5lLm9zAmZmB3VuaTIxMjAIVGNlZGlsbGEIdGNlZGlsbGEFZy5hbHQPZ2NpcmN1bWZsZXguYWx0CmdicmV2ZS5hbHQIZ2RvdC5hbHQQZ2NvbW1hYWNjZW50LmFsdAFJBklncmF2ZQZJYWN1dGULSWNpcmN1bWZsZXgJSWRpZXJlc2lzBkl0aWxkZQdJbWFjcm9uBklicmV2ZQdJb2dvbmVrCklkb3RhY2NlbnQCSUoJSW90YXRvbm9zBElvdGEMSW90YWRpZXJlc2lzCWFmaWkxMDA1NQlhZmlpMTAwNTYHdW5pMDRDMAd1bmkwNENGB3VuaTFFQzgHdW5pMUVDQQAAAQACAAgACv//AA8AAQAAAAwAAAAWAAAAAgABAAADqQABAAQAAAABAAAAAAABAAAACgA0ADYAAWxhdG4ACAAQAAJNT0wgABZST00gABwAAP//AAAAAP//AAAAAP//AAAAAAAAAAEAAAAKAG4B5AABbGF0bgAIABAAAk1PTCAAKFJPTSAAQgAA//8ACQADAAgACwAAAA4AEQAUABcAGgAA//8ACgAEAAYACQAMAAEADwASABUAGAAbAAD//wAKAAUABwAKAA0AAgAQABMAFgAZABwAHWxpZ2EAsGxpZ2EAtmxpZ2EAvGxudW0AwmxudW0AyGxudW0AzmxvY2wA1GxvY2wA2m9udW0A4G9udW0A6G9udW0A8HBudW0A+HBudW0A/nBudW0BBHNhbHQBCnNhbHQBEnNhbHQBGnNzMDEBInNzMDEBKnNzMDEBMnNzMDIBOnNzMDIBQHNzMDIBRnNzMDMBTHNzMDMBUnNzMDMBWHRudW0BXnRudW0BZnRudW0BbgAAAAEACQAAAAEACQAAAAEACQAAAAEABwAAAAEABwAAAAEABwAAAAEACAAAAAEACAAAAAIAAgADAAAAAgACAAMAAAACAAIAAwAAAAEABAAAAAEABAAAAAEABAAAAAIAAAABAAAAAgAAAAEAAAACAAAAAQAAAAIAAAABAAAAAgAAAAEAAAACAAAAAQAAAAEAAAAAAAEAAAAAAAEAAAAAAAEAAQAAAAEAAQAAAAEAAQAAAAIABQAGAAAAAgAFAAYAAAACAAUABgAKABYAHgAmAC4ANgA+AEYATgBWAF4AAQAAAAEAUAABAAAAAQB6AAEAAAABAKoAAQAAAAEAxgABAAAAAQDuAAEAAAABAPQAAQAAAAEBEAABAAAAAQEWAAEAAAABATIABAAAAAEBSAACABAABQORA5IDkwOUA5UAAgAFAEoASgAAAN8A3wABAOEA4QACAOMA4wADAOUA5QAEAAIALgAUACwAjgCPAJAAkQDqAOwA7gDwAPIA9AFaAWcBdwGhAaICyQLYA0UDRwACAAEDlgOpAAAAAgAaAAoDgwOEA4UDhgOHA4gDiQOKA4sDjAACAAEAEwAcAAAAAgAaAAoDgwOFA4YDhwOIA4kDigOLA4wDhAACAAMAEwATAAAAFQAcAAEDggOCAAkAAgAIAAEDggABAAEAFAACABoACgATABQAFQAWABcAGAAZABoAGwAcAAIAAQODA4wAAAACAAgAAQAUAAEAAQOCAAIAGgAKABMDggAVABYAFwAYABkAGgAbABwAAgABA4MDjAAAAAIADgAEA48DkAEgASEAAgACASQBJQAAAUkBSgACAAEANgABAAgABQAMABQAHAAiACgCXgADAEkATwJdAAMASQBMA40AAgBJAjUAAgBPAjQAAgBMAAEAAQBJAAAAAAABAAEAAQAAAAEAABVeAAAAFAAAAAAAABVWMIIVUgYJKoZIhvcNAQcCoIIVQzCCFT8CAQExCzAJBgUrDgMCGgUAMGEGCisGAQQBgjcCAQSgUzBRMCwGCisGAQQBgjcCARyiHoAcADwAPAA8AE8AYgBzAG8AbABlAHQAZQA+AD4APjAhMAkGBSsOAwIaBQAEFDsJVXwOeEd704mX0PmS+u5mszu/oIIRXTCCA3owggJioAMCAQICEDgl1/r4Ya+e9JDnJrXWWtUwDQYJKoZIhvcNAQEFBQAwUzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMSswKQYDVQQDEyJWZXJpU2lnbiBUaW1lIFN0YW1waW5nIFNlcnZpY2VzIENBMB4XDTA3MDYxNTAwMDAwMFoXDTEyMDYxNDIzNTk1OVowXDELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTQwMgYDVQQDEytWZXJpU2lnbiBUaW1lIFN0YW1waW5nIFNlcnZpY2VzIFNpZ25lciAtIEcyMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDEtfJSFbyIhmApFkpbL0uRa4eR8zVUWDXq0TZeYk1SUTRxwntmHYnI3SrEagr2N9mYdJH2kq6wtXaW8alKY0VHLmsLkk5LK4zuWEqL1AfkGiz4gqpY2c1C8y3Add6Nq8eOHZpsTAiVHt7b72fhcsJJwp5gPOHivhajY3hpFHutLQIDAQABo4HEMIHBMDQGCCsGAQUFBwEBBCgwJjAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AudmVyaXNpZ24uY29tMAwGA1UdEwEB/wQCMAAwMwYDVR0fBCwwKjAooCagJIYiaHR0cDovL2NybC52ZXJpc2lnbi5jb20vdHNzLWNhLmNybDAWBgNVHSUBAf8EDDAKBggrBgEFBQcDCDAOBgNVHQ8BAf8EBAMCBsAwHgYDVR0RBBcwFaQTMBExDzANBgNVBAMTBlRTQTEtMjANBgkqhkiG9w0BAQUFAAOCAQEAUMVLyCSA3+QNJMLeGrGhAqGmgi0MgxWBNwqCDiywWhdhtdgF/ojb8ZGRs1YaQKbrkr44ObB1NnQ6mE/kN7qZicqVQh2wucegjVfg+tVkBEI1TgHRM6IXyE2qJ8fy4YZMAjhNg3jG/FPg6+AGh92klp5eDJjipb6/goXDYOHfrSjYx6VLZNrHG1u9rDkI1TgioTOLL4qa67wHIT9EQQkHtWUcJLxI00SA66HPyQK0FM9UxxajgFz5eT5dcn2IF54sQ6LKU859PfYqOrhPlAClbQqDXfleU/QYs1cPcMP79a2VoA4X3sQWgGDJDytuhgTx6/R4J9EFxe40W165STLyMzCCA8QwggMtoAMCAQICEEe/GZXfjVJGQ/fbbUgNMaQwDQYJKoZIhvcNAQEFBQAwgYsxCzAJBgNVBAYTAlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxFDASBgNVBAcTC0R1cmJhbnZpbGxlMQ8wDQYDVQQKEwZUaGF3dGUxHTAbBgNVBAsTFFRoYXd0ZSBDZXJ0aWZpY2F0aW9uMR8wHQYDVQQDExZUaGF3dGUgVGltZXN0YW1waW5nIENBMB4XDTAzMTIwNDAwMDAwMFoXDTEzMTIwMzIzNTk1OVowUzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMSswKQYDVQQDEyJWZXJpU2lnbiBUaW1lIFN0YW1waW5nIFNlcnZpY2VzIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqcqypMzNIK8KfYmsh3XwtE7x38EPv2dhvaNkHNq7+cozq4QwiVh+jNtr3TaeD7/R7Hjyd6Z+bzy/k68Numj0bJTKvVItq0g99bbVXV8bAp/6L2sepPejmqYayALhf0xS4w5g7EAcfrkN3j/HtN+HvV96ajEuA5mBE6hHIM4xcw1XLc14NDOVEpkSud5oL6rm48KKjCrDiyGHZr2DWFdvdb88qiaHXcoQFTyfhOpUwQpuxP7FSt25BxGXInzbPifRHnjsnzHJ8eYiGdvEs0dDmhpfoB6Q5F717nzxfatiAY/1TQve0CJWqJXNroh2ru66DfPkTdmg+2igrhQ7s4fBuwIDAQABo4HbMIHYMDQGCCsGAQUFBwEBBCgwJjAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AudmVyaXNpZ24uY29tMBIGA1UdEwEB/wQIMAYBAf8CAQAwQQYDVR0fBDowODA2oDSgMoYwaHR0cDovL2NybC52ZXJpc2lnbi5jb20vVGhhd3RlVGltZXN0YW1waW5nQ0EuY3JsMBMGA1UdJQQMMAoGCCsGAQUFBwMIMA4GA1UdDwEB/wQEAwIBBjAkBgNVHREEHTAbpBkwFzEVMBMGA1UEAxMMVFNBMjA0OC0xLTUzMA0GCSqGSIb3DQEBBQUAA4GBAEpr+epYwkQcMYl5mSuWv4KsAdYcTM2wilhu3wgpo17IypMT5wRSDe9HJy8AOLDkyZNOmtQiYhX3PzchT3AxgPGLOIez6OiXAP7PVZZOJNKpJ056rrdhQfMqzufJ2V7duyuFPrWdtdnhV/++tMV+9c8MnvCX/ivTO1IbGzgn9z9KMIIE/DCCBGWgAwIBAgIQZVIm4bIuGOFZDymFrCLnXDANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xNzA1BgNVBAsTLkNsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDkwNTIxMDAwMDAwWhcNMTkwNTIwMjM1OTU5WjCBtjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTswOQYDVQQLEzJUZXJtcyBvZiB1c2UgYXQgaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYSAoYykwOTEwMC4GA1UEAxMnVmVyaVNpZ24gQ2xhc3MgMyBDb2RlIFNpZ25pbmcgMjAwOS0yIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvmcdtGCqEElvVhd8Zslehg3V8ayncYOOi4n4iASJFQa6LYQhleTRnFBM+9IivdrysjU7Ho/DCfv8Ey5av4l8PTslHvbzWHuc9AG1xgq4gM6+J3RhZydNauXsgWFYeaPgFxASFSew4U00fytHIES53mYkZorNT7ofxTjIVJDhcvYZZnVquUlozzh5DaowqNssYEie16oUAamD1ziRMDkTlgM6fEBUtq3gLxuD3KgRUj4Cs9cr/SG2p1yjDwupphBQDjQuTafOyV4l1Iy88258KbwBXfwxh1rVjIVnWIgZoL818OoroyHnkPaD5ajtYHhee2CD/VcLXUENY1Rg1kMh7wIDAQABo4IB2zCCAdcwEgYDVR0TAQH/BAgwBgEB/wIBADBwBgNVHSAEaTBnMGUGC2CGSAGG+EUBBxcDMFYwKAYIKwYBBQUHAgEWHGh0dHBzOi8vd3d3LnZlcmlzaWduLmNvbS9jcHMwKgYIKwYBBQUHAgIwHhocaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYTAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVyaXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMDMDQGCCsGAQUFBwEBBCgwJjAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AudmVyaXNpZ24uY29tMDEGA1UdHwQqMCgwJqAkoCKGIGh0dHA6Ly9jcmwudmVyaXNpZ24uY29tL3BjYTMuY3JsMCkGA1UdEQQiMCCkHjAcMRowGAYDVQQDExFDbGFzczNDQTIwNDgtMS01NTAdBgNVHQ4EFgQUl9BrqCZwyKE/lB8ILcQ1m6ShHvIwDQYJKoZIhvcNAQEFBQADgYEAiwPA3ZTYQaJhabAVqHjHMMaQPH5C9yS25INzFwR/BBCcoeL6gS/rwMpE53LgULZVECCDbpaS5JpRarQ3MdylLeuMAMcdT+dNMrqF+E6++mdVZfBqvnrKZDgaEBB4RXYx84Z6Aw9gwrNdnfaLZnaCG1nhg+W9SaU4VuXeQXcOWA8wggUTMIID+6ADAgECAhBm4/BnecoVFm1QU2+IGRqDMA0GCSqGSIb3DQEBBQUAMIG2MQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOzA5BgNVBAsTMlRlcm1zIG9mIHVzZSBhdCBodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBhIChjKTA5MTAwLgYDVQQDEydWZXJpU2lnbiBDbGFzcyAzIENvZGUgU2lnbmluZyAyMDA5LTIgQ0EwHhcNMTAwNzI5MDAwMDAwWhcNMTIwODA4MjM1OTU5WjCB0DELMAkGA1UEBhMCVVMxFjAUBgNVBAgTDU1hc3NhY2h1c2V0dHMxDzANBgNVBAcTBldvYnVybjEeMBwGA1UEChQVTW9ub3R5cGUgSW1hZ2luZyBJbmMuMT4wPAYDVQQLEzVEaWdpdGFsIElEIENsYXNzIDMgLSBNaWNyb3NvZnQgU29mdHdhcmUgVmFsaWRhdGlvbiB2MjEYMBYGA1UECxQPVHlwZSBPcGVyYXRpb25zMR4wHAYDVQQDFBVNb25vdHlwZSBJbWFnaW5nIEluYy4wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAJREoJVpfFUN0NsWjTI1ikwzq14goUzXKoc415ilQPAZSQsiHlNPwkOmyoupVu9uSAaoBRU5HmM7JBKQuZjPygg1fXLjR1f9ecuKSudAcC01Y3+ugM/Er9j798n8idjXpKDbCfKi8nvvzXXB92VQZCKdvX28rbhLzFhFDk3RWUxNAgMBAAGjggGDMIIBfzAJBgNVHRMEAjAAMA4GA1UdDwEB/wQEAwIHgDBEBgNVHR8EPTA7MDmgN6A1hjNodHRwOi8vY3NjMy0yMDA5LTItY3JsLnZlcmlzaWduLmNvbS9DU0MzLTIwMDktMi5jcmwwRAYDVR0gBD0wOzA5BgtghkgBhvhFAQcXAzAqMCgGCCsGAQUFBwIBFhxodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBhMBMGA1UdJQQMMAoGCCsGAQUFBwMDMHUGCCsGAQUFBwEBBGkwZzAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AudmVyaXNpZ24uY29tMD8GCCsGAQUFBzAChjNodHRwOi8vY3NjMy0yMDA5LTItYWlhLnZlcmlzaWduLmNvbS9DU0MzLTIwMDktMi5jZXIwHwYDVR0jBBgwFoAUl9BrqCZwyKE/lB8ILcQ1m6ShHvIwEQYJYIZIAYb4QgEBBAQDAgQQMBYGCisGAQQBgjcCARsECDAGAQEAAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQBO5iKH32dBFRfi0u5+Ds7CmdZjvfC1k+VqcmLh9dI8OO6oPQhfukeBgl9bS0n0HSD6D5MJ0B0ZVkQXoojz+42drvcNNd48DKxElGBFKpv+m29MO7E0Z3AQhv9aOVxa42yCqzV8ZUv9mG21FZRJnIhwEL49sWKVtNu01NronUGQfv59uaSS627yIorGdzZNiloLUwUx0ysor1LhjXprtXdEvQyt9F0lLOPNijA+SwOcecqmTq4LwswkBwvBlIL2EPG6kLabmthcPBPx6gIGGCdNPIlvM4rTht7pWDN1PeuTaeJEb04AbM/VhdpWppqmP8tMIWiQ8mC64egGXTkhEzLtMYIDZzCCA2MCAQEwgcswgbYxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazE7MDkGA1UECxMyVGVybXMgb2YgdXNlIGF0IGh0dHBzOi8vd3d3LnZlcmlzaWduLmNvbS9ycGEgKGMpMDkxMDAuBgNVBAMTJ1ZlcmlTaWduIENsYXNzIDMgQ29kZSBTaWduaW5nIDIwMDktMiBDQQIQZuPwZ3nKFRZtUFNviBkagzAJBgUrDgMCGgUAoHAwEAYKKwYBBAGCNwIBDDECMAAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYKKwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUwIwYJKoZIhvcNAQkEMRYEFINBAdmJFEuvw/LQX76qobSKS2T7MA0GCSqGSIb3DQEBAQUABIGAhvsDWP0vap2bvLCMICMd8spRxk0kIVuFuutF349G5MsA86sERQpgisv8XG+WHWjp9j/Ev/z/FjUBEcn8OW8TJIpDC4/GpH2BdqDx9isTbpcSRHm71LVvDOQk0cYz92v/JglSaAfAD9SgazJdLFse8RZ97sROrINFtcQjUk+tNyihggF/MIIBewYJKoZIhvcNAQkGMYIBbDCCAWgCAQEwZzBTMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xKzApBgNVBAMTIlZlcmlTaWduIFRpbWUgU3RhbXBpbmcgU2VydmljZXMgQ0ECEDgl1/r4Ya+e9JDnJrXWWtUwCQYFKw4DAhoFAKBdMBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZIhvcNAQkFMQ8XDTExMDUwNTE2NTUxMFowIwYJKoZIhvcNAQkEMRYEFMSa308lyqYf2ZD0MYihEpyq74tRMA0GCSqGSIb3DQEBAQUABIGAwV2mjnelloVwK85YE4H+lE/VIyUE2w8PX7UVNgat+irlskbivWhJx3V6iw2O6SK9E8PpF8oeW91WxrupY1m9v4OxrS5NsF7Yg+Nffd6ImEPnjOS9FbSTx6EyFfp39Gug5AbuUXYuGs2VgWFRmKN5qeRumPIUiPd6Xku8le/yCIQAAA==",
            "encoding": "base64"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": -1,
          "_transferSize": 221432,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:11.954Z",
        "time": 84.23699997365475,
        "timings": {
          "blocked": 30.121999965056776,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0.27300000000000013,
          "wait": 47.52299997214228,
          "receive": 6.319000036455691,
          "_blocked_queueing": 29.104999965056777,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_connectionId": "1726423",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "script",
          "stack": {
            "callFrames": [
              {
                "functionName": "dwAjaxToServer",
                "scriptId": "117",
                "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                "lineNumber": 16016,
                "columnNumber": 12
              },
              {
                "functionName": "dwAjaxSendUpdates",
                "scriptId": "117",
                "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                "lineNumber": 15812,
                "columnNumber": 8
              },
              {
                "functionName": "dwAjaxAddUpdate",
                "scriptId": "117",
                "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                "lineNumber": 15751,
                "columnNumber": 8
              },
              {
                "functionName": "dwAjaxDefaultOnResize",
                "scriptId": "117",
                "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                "lineNumber": 17548,
                "columnNumber": 4
              },
              {
                "functionName": "DwResizeRegistry.notifyControls",
                "scriptId": "117",
                "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                "lineNumber": 13847,
                "columnNumber": 12
              },
              {
                "functionName": "DwResizeRegistry.updateSizes",
                "scriptId": "117",
                "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                "lineNumber": 13789,
                "columnNumber": 13
              },
              {
                "functionName": "dwFrameworkInitFrameworkFinished",
                "scriptId": "117",
                "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                "lineNumber": 7290,
                "columnNumber": 34
              },
              {
                "functionName": "init",
                "scriptId": "122",
                "url": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513",
                "lineNumber": 71,
                "columnNumber": 2272
              },
              {
                "functionName": "onload",
                "scriptId": "124",
                "url": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513#2VF2D59BB6A19D241BF39AB8ED9782EC2676FB7D71DEA3F1B037E8A2D71F8FA91ED584BD081D6809030379CF8994891F65A8986CB38788501DB2F64C48C2D48691EC16B9477F538F011A91C9AA4E9AFEE315C79723E5AA1EB16B15031488FA743A690E2C31409293DC460553BC507C7BD94F7BF98B910BA76F04056FEF1A7BDC375B3BE8AE75D4A926AFE49D7762A6E60476BEBC713FA7FB2B155EB5CCD51A90D291C6798FCFE55699A76410CDE3B0446A5B504D3A8DCABCDDFDC43E28D86EDC81E6B7BFBA9C17998722AD7DC364F9B360B683AAF83000B8EBD51BD302897629C3579B0F4749890DFAEB2362C869E392B5E3FAADBE2D43BCFBC4C3632980B4B3D178D71AEF2EDC4AC0A207E5B628656549B3046DEBFB63331888B0C66897C62E02F0B82D220F96B06850C9AC59B34A7068454EB9B217DACCF224AF08DC573CEF013D5A7451FCDAFD827D8468EB71307DB9C421BE5AB56DD2CE6D2BAE5FFAD443C040E219C275338272C421BE5AB56DD2CE4EF98D6992C4A806A407D72CC44AD536F310827032D1AC056F89419881BF0DD5FCA12A0C1A8645C27C84DE9E0758A61631D52F27C125C1962BEB5B1C502E63A0BD6FF56630359A02627BDDDF793428EB2FA9EF932288B6B1EDF8A369FE8EE7F897DB9E3E3C84DD434F60686263DBEFD8FCCFCDAA59EAFC214F8171A05960530A9E5ABC51215E170F97DB9E3E3C84DD43DEC89585795B3874396402DD57C617A3C55FAE20F8C83C126638D24CBBC9DDDC8C8FA8D1298C97B9BBB92FB6BF271FB48345DDE94A571D0203AF5EEE5F1F2504DB148DE2EFD18A5668F70C371CE81BC89B37ABAF25FA84DACBA72043D96AEA4F298899DF7BA9DE229033D0AC10369C34D8502B5D38A884306870A18576B8D81AEFED8CAFCAE38FB38CDCE50946CE89B85A3E170EFEED9236091324AA21FE5C69BFD3C9875BD8C8EDED07AD10AEF4D84EEA4B9B45BFB90963B7D3C6C577B0F69F905385ABE9EDFFA53913940B31BC4622F515E8079FFB2D51BD6FF56630359A02627BDDDF793428EB2FA9EF932288B6B1EDF8A369FE8EE7F897DB9E3E3C84DD434F60686263DBEFD8FCCFCDAA59EAFC214F8171A05960530A9E5ABC51215E170F97DB9E3E3C84DD43DEC89585795B387440FD0D31E517DED4D161239C4F766D2711E3BB35041F1DDA7CF0863DB9386F606E08741D82FFD013293CC950248C0832FD04E7D3A07AD7B057EC30D755D283A4F515E8079FFB2D513D641BC2AF619F99C2F82A5CD507A9B60068C075906E849BA93A7B904DEB5A243B82214FFADAC952DD79BC627DD9DA3754FF0BE055B41B169E69002C06B4DE79F6C7B0DFBD3A0F522E65D7D9029BAB57CA12C1989BD261A69E69002C06B4DE79C7DC379705A4A84B6638D24CBBC9DDDC20B327CD29F50D15E4AD0A914CE23B089F436871D356837441BEC24302DBDBEC90644A227A6BC2D79DD0FB0244CDB5D164AFEE39E460DE8BE26433895B733653B9EA7E0818E6E95D41C8185567494EE8A5DD1D3D275250FD9A11E3A038EC5B42E9233C1D71C6391368F8A064E4615E43B811320325352C9D7B0496E262C373D04BE9E084FF8E9A3F2E65D7D9029BAB57B5CE2E7DCF0EAE70274DA4EDC454021AAB47E7D7FED1AFAB1FC721FCFD895E4094141E1AD049AA3622BF63BEA0373671EC16B9477F538F011A91C9AA4E9AFEE346D2AB2727781C74481117D634D964C50381183B796E17F213DA5CF05D8352EA7C2C0FF9D1BA7E865443427661C8AD65556FD0C06B132190C1E51CF9D83BACA12D04FBEDDEE8AF2AF6B3D33534177841A0CA7DC92DFEE22317138B4EC17ABBEA0381183B796E17F213DA5CF05D8352EA04056FEF1A7BDC378767B1590C24642445D85C35CE229B547E56B897C73DE385115B9CAB0EFDD59AEE3351CA6A1D79B6440232ECD2F139DBAB47E7D7FED1AFAB1FC721FCFD895E4076B5E6FD416F51F99AF8A113450A88512654A5EFA96698B9FE795E3125D4E185E2262FA8F088B802ACDB74B330B326A93FC34E72FDF43319A016572D59868882154FBE04B0A192C40BC3C01ADFBA2D0FFFF5161B05317F677366F94870710960",
                "lineNumber": 71,
                "columnNumber": 3699
              }
            ]
          }
        },
        "_priority": "High",
        "_resourceType": "xhr",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "POST",
          "url": "https://ekat.festool.de/ekat/ajax",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": ":authority",
              "value": "ekat.festool.de"
            },
            {
              "name": ":method",
              "value": "POST"
            },
            {
              "name": ":path",
              "value": "/ekat/ajax"
            },
            {
              "name": ":scheme",
              "value": "https"
            },
            {
              "name": "accept",
              "value": "*/*"
            },
            {
              "name": "accept-encoding",
              "value": "gzip, deflate, br, zstd"
            },
            {
              "name": "accept-language",
              "value": "en-GB,en-US;q=0.9,en;q=0.8"
            },
            {
              "name": "cache-control",
              "value": "no-cache,no-store,must-revalidate,post-check=0,pre-check=0"
            },
            {
              "name": "content-length",
              "value": "441"
            },
            {
              "name": "content-type",
              "value": "text/plain; charset=UTF-8"
            },
            {
              "name": "expires",
              "value": "0"
            },
            {
              "name": "origin",
              "value": "https://ekat.festool.de"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "pragma",
              "value": "no-cache"
            },
            {
              "name": "priority",
              "value": "u=1, i"
            },
            {
              "name": "referer",
              "value": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            },
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "sec-fetch-dest",
              "value": "empty"
            },
            {
              "name": "sec-fetch-mode",
              "value": "cors"
            },
            {
              "name": "sec-fetch-site",
              "value": "same-origin"
            },
            {
              "name": "user-agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            }
          ],
          "queryString": [],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 441,
          "postData": {
            "mimeType": "text/plain; charset=UTF-8",
            "text": "currentBrowserRootWindow@DW@TWM4965563@DW@1388@DW@1140@DX@RNT4965681@DW@RNT4965681@DW@imagePanPositionChangedEvent@DW@pos=0@DX@RNT4965681@DW@RNT4965681@DW@imageZoomToRectStateChangedEvent@DW@state=false@DX@TBP4965620@DW@TBP4965620@DW@onresizeEvent@DW@newWidth=48@DWSUB@newHeight=1092@DWSUB@relX=0@DWSUB@relY=0@DWSUB@absX=0@DWSUB@absY=24@DWSUB@newWidth=48@DWSUB@newHeight=1092@DWSUB@hasVerticalOverflow=false@DWSUB@hasHorizontalOverflow=false"
          }
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://ekat.festool.de"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "cache-control",
              "value": "no-cache,no-store,must-revalidate,post-check=0,pre-check=0"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "content-length",
              "value": "17058"
            },
            {
              "name": "content-type",
              "value": "text/html;charset=UTF-8"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 09:09:51 GMT"
            },
            {
              "name": "expires",
              "value": "Thu, 01 Jan 1970 00:00:00 GMT"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "pragma",
              "value": "no-cache"
            },
            {
              "name": "vary",
              "value": "Origin"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "x-robots-tag",
              "value": "noindex"
            }
          ],
          "cookies": [],
          "content": {
            "size": 208840,
            "mimeType": "text/html",
            "text": "genericReplaceNode@DW@AMC4965681@DW@0@DW@0@DW@<img style=\"vertical-align:middle;width:16px;margin-right:4px;height:16px\" src=\"WEB-RES/resource/resource?id=bi_image_D217B38C2671F0B5F327052F5618462B\" alt=\"\">@DX@setDomText@DW@AMC4965681_menuitemText@DW@Select section@DW@true@DX@setStyle@DW@ERU4965633@DW@background-color@DW@#dddddd@DX@removeStyle@DW@ERU4965633@DW@background-image@DX@setStyle@DW@ERU4965633@DW@background-color@DW@#ffffff@DX@removeStyle@DW@ERU4965633@DW@background-image@DX@removeClass@DW@QCH4965941@DW@brightenOnHoverForGrayComponents@DX@removeClass@DW@QCH4965941@DW@brightenAndRemoveShadowAtInnerImageOnClick@DX@removeEvent@DW@MNG4965634@DW@onmouseover@DW@dwTooltip_delayShowTooltip@DX@removeEvent@DW@MNG4965634@DW@onmouseleave@DW@dwHelperHideCurrentlyVisibleTooltips(event)@DX@genericSetDomText@DW@MNG4965634@DW@1@DW@@DW@true@DX@setDomAttribute@DW@MNG4965634@DW@value@DW@@DX@setStyle@DW@MNG4965634@DW@min-width@DW@100px@DX@setStyle@DW@MNG4965634@DW@background-color@DW@#dddddd@DX@removeStyle@DW@MNG4965634@DW@background-image@DX@setStyle@DW@MNG4965634@DW@border-radius@DW@2px@DX@setStyle@DW@MNG4965634@DW@filter@DW@progid:DXImageTransform.Microsoft.Shadow(color='rgba(0,0,0,0.24)', Direction=135, Strength=0)@DX@setStyle@DW@MNG4965634@DW@box-shadow@DW@0 2px 2px rgba(0,0,0,0.24)@DX@setStyle@DW@MNG4965634@DW@-webkit-box-shadow@DW@0 2px 2px rgba(0,0,0,0.24)@DX@setStyle@DW@MNG4965634@DW@z-index@DW@1@DX@setStyle@DW@MNG4965634@DW@border-radius@DW@0px@DX@removeStyle@DW@MNG4965634@DW@filter@DX@removeStyle@DW@MNG4965634@DW@box-shadow@DX@removeStyle@DW@MNG4965634@DW@-webkit-box-shadow@DX@setStyle@DW@MNG4965634@DW@z-index@DW@1@DX@setStyle@DW@MNG4965634@DW@background-color@DW@transparent@DX@removeStyle@DW@MNG4965634@DW@background-image@DX@setStyle@DW@MNG4965634@DW@min-width@DW@40px@DX@removeEvent@DW@SCC4965734@DW@onmouseover@DW@dwTooltip_delayShowTooltip@DX@removeEvent@DW@SCC4965734@DW@onmouseleave@DW@dwHelperHideCurrentlyVisibleTooltips(event)@DX@setStyle@DW@SCC4965734@DW@background-color@DW@#dddddd@DX@removeStyle@DW@SCC4965734@DW@background-image@DX@setStyle@DW@SCC4965734@DW@color@DW@#000000@DX@setStyle@DW@SCC4965734@DW@background-color@DW@#46b82e@DX@removeStyle@DW@SCC4965734@DW@background-image@DX@setStyle@DW@SCC4965734@DW@color@DW@#ffffff@DX@genericRemoveNode@DW@TBP4965620@DW@0|0@DW@2@DX@genericRemoveNode@DW@TBP4965620@DW@0|0@DW@1@DX@genericRemoveNode@DW@TBP4965620@DW@0|0@DW@0@DX@genericInsertNode@DW@TBP4965620@DW@0|0@DW@0@DW@<div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:48px;text-align:left;height:48px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-24px;right:0;height:48px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><button style=\"cursor:pointer;padding-top:0px;max-height:48px;color:#000000;padding-left:16px;padding-bottom:0px;min-height:48px;border-radius:2px;background-color:#efefef;max-width:48px;width:100%;border-width:0px;text-align:center;padding-right:16px;height:100%;min-width:48px\" type=\"button\" name=\"YEC4965634\" class=\"guibutton_enabled brightenOnHoverForGrayComponents brightenAndRemoveShadowOnClick brightenAndRemoveShadowAtInnerImageOnClick cursor_pointer\" id=\"YEC4965634\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;LUQ4965634\\&quot;&gt;Tree view&lt;\\/div&gt;&#39;, 250, 72, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxButtonOnClick(event, &#39;YEC4965634&#39;, &#39;YEC4965634&#39;, &#39;&#39;, true, true);dwFrameworkPreventDefaultBehaviour(event);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"width:16px;height:16px\" src=\"WEB-RES/resource/resource?id=bi_image_2CC76DF101D15A5A668A992EB70B0924\" alt=\"\" class=\"guibutton_icon\"><span style=\"cursor:pointer;font-weight:inherit;vertical-align:middle;font-size:inherit;font-family:inherit;line-height:inherit;font-style:inherit\" id=\"YEC4965634_text\" class=\"cursor_pointer\"></span></button></div></div>@DX@genericInsertNode@DW@TBP4965620@DW@0|0@DW@1@DW@<div style=\"background-color:transparent;top:48px;left:0px;vertical-align:middle;width:48px;text-align:left;height:48px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-24px;right:0;height:48px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><button style=\"cursor:pointer;padding-top:0px;max-height:48px;color:#000000;padding-left:16px;padding-bottom:0px;min-height:48px;border-radius:2px;background-color:#efefef;max-width:48px;width:100%;border-width:0px;text-align:center;padding-right:16px;height:100%;min-width:48px\" type=\"button\" name=\"RTA4965635\" class=\"guibutton_enabled brightenOnHoverForGrayComponents brightenAndRemoveShadowOnClick brightenAndRemoveShadowAtInnerImageOnClick cursor_pointer\" id=\"RTA4965635\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;ROV4965635\\&quot;&gt;Print&lt;\\/div&gt;&#39;, 250, 40, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxButtonOnClick(event, &#39;RTA4965635&#39;, &#39;RTA4965635&#39;, &#39;&#39;, true, true);dwFrameworkPreventDefaultBehaviour(event);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"width:16px;height:16px\" src=\"WEB-RES/resource/resource?id=bi_image_72D0010FEC637C6EB8420C205BD1BB35\" alt=\"\" class=\"guibutton_icon\"><span style=\"cursor:pointer;font-weight:inherit;vertical-align:middle;font-size:inherit;font-family:inherit;line-height:inherit;font-style:inherit\" id=\"RTA4965635_text\" class=\"cursor_pointer\"></span></button></div></div>@DX@genericInsertNode@DW@TBP4965620@DW@0|0@DW@2@DW@<div style=\"background-color:transparent;top:96px;left:0px;vertical-align:middle;width:48px;text-align:left;height:48px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-24px;right:0;height:48px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><button style=\"cursor:pointer;padding-top:0px;max-height:48px;color:#000000;padding-left:16px;padding-bottom:0px;min-height:48px;border-radius:2px;background-color:#efefef;max-width:48px;width:100%;border-width:0px;text-align:center;padding-right:16px;height:100%;min-width:48px\" type=\"button\" name=\"YVD4965635\" class=\"guibutton_enabled brightenOnHoverForGrayComponents brightenAndRemoveShadowOnClick brightenAndRemoveShadowAtInnerImageOnClick cursor_pointer\" id=\"YVD4965635\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;TBO4965635\\&quot;&gt;Settings&lt;\\/div&gt;&#39;, 250, 62, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxButtonOnClick(event, &#39;YVD4965635&#39;, &#39;YVD4965635&#39;, &#39;&#39;, true, true);dwFrameworkPreventDefaultBehaviour(event);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"width:16px;height:16px\" src=\"WEB-RES/resource/resource?id=bi_image_F9E81FC33131B3960A323CFA1C2169EC\" alt=\"\" class=\"guibutton_icon\"><span style=\"cursor:pointer;font-weight:inherit;vertical-align:middle;font-size:inherit;font-family:inherit;line-height:inherit;font-style:inherit\" id=\"YVD4965635_text\" class=\"cursor_pointer\"></span></button></div></div>@DX@setStyle@DW@BWB4965633@DW@background-color@DW@#dddddd@DX@removeStyle@DW@BWB4965633@DW@background-image@DX@setStyle@DW@BWB4965633@DW@background-color@DW@#ffffff@DX@removeStyle@DW@BWB4965633@DW@background-image@DX@removeEvent@DW@POQ4965632@DW@onmouseover@DW@dwTooltip_delayShowTooltip@DX@removeEvent@DW@POQ4965632@DW@onmouseleave@DW@dwHelperHideCurrentlyVisibleTooltips(event)@DX@setStyle@DW@POQ4965632@DW@background-color@DW@#dddddd@DX@removeStyle@DW@POQ4965632@DW@background-image@DX@setStyle@DW@POQ4965632@DW@color@DW@#000000@DX@setStyle@DW@POQ4965632@DW@background-color@DW@#46b82e@DX@removeStyle@DW@POQ4965632@DW@background-image@DX@setStyle@DW@POQ4965632@DW@color@DW@#ffffff@DX@genericRemoveNode@DW@SQG4965733@DW@0|0@DW@0@DX@genericInsertNode@DW@SQG4965733@DW@0|0@DW@0@DW@<div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:40px;text-align:left;height:40px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-20px;right:0;height:40px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><button style=\"cursor:pointer;padding-top:0px;max-height:40px;color:#000000;padding-left:0px;padding-bottom:0px;border-color:transparent;min-height:40px;background-color:transparent;max-width:40px;width:100%;border-width:0px;border-style:solid;text-align:center;padding-right:0px;height:100%;min-width:40px\" type=\"button\" name=\"RAB4965733\" class=\"guibutton_enabled brightenOnHoverForGrayComponents brightenAndRemoveShadowOnClick brightenAndRemoveShadowAtInnerImageOnClick cursor_pointer\" id=\"RAB4965733\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;LXC4965733\\&quot;&gt;End multi selection&lt;\\/div&gt;&#39;, 250, 137, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxButtonOnClick(event, &#39;RAB4965733&#39;, &#39;RAB4965733&#39;, &#39;&#39;, true, true);dwFrameworkPreventDefaultBehaviour(event);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"width:16px;height:16px\" src=\"WEB-RES/resource/resource?id=bi_image_EE100A093B440B59D1BA01F3B8E32F68\" alt=\"\" class=\"guibutton_icon\"><span style=\"cursor:pointer;font-weight:inherit;vertical-align:middle;font-size:inherit;font-family:inherit;line-height:inherit;font-style:inherit\" id=\"RAB4965733_text\" class=\"cursor_pointer\"></span></button></div></div>@DX@setStyle@DW@RAB4965733@DW@background-color@DW@#dddddd@DX@removeStyle@DW@RAB4965733@DW@background-image@DX@setStyle@DW@RAB4965733@DW@background-color@DW@transparent@DX@removeStyle@DW@RAB4965733@DW@background-image@DX@removeClass@DW@TPL4965941@DW@brightenOnHoverForGrayComponents@DX@removeClass@DW@TPL4965941@DW@brightenAndRemoveShadowAtInnerImageOnClick@DX@setStyle@DW@TXI4965941@DW@background-color@DW@#dddddd@DX@removeStyle@DW@TXI4965941@DW@background-image@DX@setStyle@DW@TXI4965941@DW@background-color@DW@transparent@DX@removeStyle@DW@TXI4965941@DW@background-image@DX@removeEvent@DW@EQD4965951@DW@onmouseover@DW@dwTooltip_delayShowTooltip@DX@removeEvent@DW@EQD4965951@DW@onmouseleave@DW@dwHelperHideCurrentlyVisibleTooltips(event)@DX@setStyle@DW@UON4965940@DW@background-color@DW@#dddddd@DX@removeStyle@DW@UON4965940@DW@background-image@DX@setStyle@DW@UON4965940@DW@background-color@DW@transparent@DX@removeStyle@DW@UON4965940@DW@background-image@DX@genericRemoveNode@DW@UXU4965633@DW@0|0@DW@1@DX@genericRemoveNode@DW@UXU4965633@DW@0|0@DW@0@DX@genericInsertNode@DW@UXU4965633@DW@0|0@DW@0@DW@<div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:46px;text-align:left;height:48px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-24px;right:0;height:48px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><button style=\"cursor:pointer;padding-top:0px;max-height:48px;color:#000000;padding-left:0px;padding-bottom:0px;border-color:transparent;min-height:48px;background-color:#ffffff;max-width:46px;width:100%;border-width:0px;border-style:solid;text-align:center;padding-right:0px;height:100%;min-width:46px\" type=\"button\" name=\"BWB4965633\" class=\"guibutton_enabled brightenOnHoverForGrayComponents brightenAndRemoveShadowOnClick brightenAndRemoveShadowAtInnerImageOnClick cursor_pointer\" id=\"BWB4965633\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;FMO4965633\\&quot;&gt;Show parts list on right side&lt;\\/div&gt;&#39;, 250, 196, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxButtonOnClick(event, &#39;BWB4965633&#39;, &#39;BWB4965633&#39;, &#39;&#39;, true, true);dwFrameworkPreventDefaultBehaviour(event);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"width:16px;height:16px\" src=\"WEB-RES/resource/resource?id=bi_image_CA78569ACD102549315FA46276CA645B\" alt=\"\" class=\"guibutton_icon\"><span style=\"cursor:pointer;font-weight:inherit;vertical-align:middle;font-size:inherit;font-family:inherit;line-height:inherit;font-style:inherit\" id=\"BWB4965633_text\" class=\"cursor_pointer\"></span></button></div></div>@DX@genericInsertNode@DW@UXU4965633@DW@0|0@DW@1@DW@<div style=\"background-color:transparent;top:0px;left:46px;vertical-align:middle;width:46px;text-align:left;height:48px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-24px;right:0;height:48px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><button style=\"cursor:pointer;padding-top:0px;max-height:48px;color:#000000;padding-left:0px;padding-bottom:0px;border-color:transparent;min-height:48px;background-color:#ffffff;max-width:46px;width:100%;border-width:0px;border-style:solid;text-align:center;padding-right:0px;height:100%;min-width:46px\" type=\"button\" name=\"ERU4965633\" class=\"guibutton_enabled brightenOnHoverForGrayComponents brightenAndRemoveShadowOnClick brightenAndRemoveShadowAtInnerImageOnClick cursor_pointer\" id=\"ERU4965633\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;VNH4965633\\&quot;&gt;Minimize parts list&lt;\\/div&gt;&#39;, 250, 133, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxButtonOnClick(event, &#39;ERU4965633&#39;, &#39;ERU4965633&#39;, &#39;&#39;, true, true);dwFrameworkPreventDefaultBehaviour(event);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"width:16px;height:16px\" src=\"WEB-RES/resource/resource?id=bi_image_D1833E443390ED9B6FCE6BCEB0B89495\" alt=\"\" class=\"guibutton_icon\"><span style=\"cursor:pointer;font-weight:inherit;vertical-align:middle;font-size:inherit;font-family:inherit;line-height:inherit;font-style:inherit\" id=\"ERU4965633_text\" class=\"cursor_pointer\"></span></button></div></div>@DX@setStyle@DW@BWB4965633@DW@background-color@DW@#dddddd@DX@removeStyle@DW@BWB4965633@DW@background-image@DX@setStyle@DW@BWB4965633@DW@background-color@DW@#ffffff@DX@removeStyle@DW@BWB4965633@DW@background-image@DX@setStyle@DW@ERU4965633@DW@background-color@DW@#dddddd@DX@removeStyle@DW@ERU4965633@DW@background-image@DX@setStyle@DW@ERU4965633@DW@background-color@DW@#ffffff@DX@removeStyle@DW@ERU4965633@DW@background-image@DX@setStyle@DW@EBQ4965941@DW@background-color@DW@#dddddd@DX@removeStyle@DW@EBQ4965941@DW@background-image@DX@setStyle@DW@EBQ4965941@DW@background-color@DW@transparent@DX@removeStyle@DW@EBQ4965941@DW@background-image@DX@setStyle@DW@TXW4965941@DW@background-color@DW@#dddddd@DX@removeStyle@DW@TXW4965941@DW@background-image@DX@setStyle@DW@TXW4965941@DW@background-color@DW@transparent@DX@removeStyle@DW@TXW4965941@DW@background-image@DX@setStyle@DW@RAB4965733@DW@background-color@DW@#dddddd@DX@removeStyle@DW@RAB4965733@DW@background-image@DX@setStyle@DW@RAB4965733@DW@background-color@DW@transparent@DX@removeStyle@DW@RAB4965733@DW@background-image@DX@removeEvent@DW@GBF4965941@DW@onmouseover@DW@dwTooltip_delayShowTooltip@DX@removeEvent@DW@GBF4965941@DW@onmouseleave@DW@dwHelperHideCurrentlyVisibleTooltips(event)@DX@setStyle@DW@AFA4965941@DW@background-color@DW@#dddddd@DX@removeStyle@DW@AFA4965941@DW@background-image@DX@setStyle@DW@AFA4965941@DW@background-color@DW@transparent@DX@removeStyle@DW@AFA4965941@DW@background-image@DX@evaluateJavascript@DW@dwImageMarkHotspotsForKey('RNT4965681', '', '', true, true, null);@DX@genericReplaceNode@DW@AMC4965681@DW@0@DW@0@DW@<img style=\"vertical-align:middle;width:16px;margin-right:4px;height:16px\" src=\"WEB-RES/resource/resource?id=bi_image_D217B38C2671F0B5F327052F5618462B\" alt=\"\">@DX@setDomText@DW@AMC4965681_menuitemText@DW@Select section@DW@true@DX@genericRemoveNode@DW@RFB4965940@DW@0|0@DW@6@DX@genericRemoveNode@DW@RFB4965940@DW@0|0@DW@5@DX@genericRemoveNode@DW@RFB4965940@DW@0|0@DW@4@DX@genericRemoveNode@DW@RFB4965940@DW@0|0@DW@3@DX@genericRemoveNode@DW@RFB4965940@DW@0|0@DW@2@DX@genericRemoveNode@DW@RFB4965940@DW@0|0@DW@1@DX@genericRemoveNode@DW@RFB4965940@DW@0|0@DW@0@DX@genericInsertNode@DW@RFB4965940@DW@0|0@DW@0@DW@<div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:40px;text-align:left;height:40px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-20px;right:0;height:40px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><button style=\"cursor:pointer;padding-top:0px;max-height:40px;color:#000000;padding-left:0px;padding-bottom:0px;border-color:transparent;min-height:40px;background-color:transparent;max-width:40px;width:100%;border-width:0px;border-style:solid;text-align:center;padding-right:0px;height:100%;min-width:40px\" type=\"button\" name=\"UON4965940\" class=\"guibutton_enabled brightenOnHoverForGrayComponents brightenAndRemoveShadowOnClick brightenAndRemoveShadowAtInnerImageOnClick cursor_pointer\" id=\"UON4965940\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;JMR4965941\\&quot;&gt;Rotate drawing by 90&lt;\\/div&gt;&#39;, 250, 150, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxButtonOnClick(event, &#39;UON4965940&#39;, &#39;UON4965940&#39;, &#39;&#39;, true, true);dwFrameworkPreventDefaultBehaviour(event);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"width:16px;height:16px\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_rotate_image.png\" alt=\"\" class=\"guibutton_icon\"><span style=\"cursor:pointer;font-weight:inherit;vertical-align:middle;font-size:inherit;font-family:inherit;line-height:inherit;font-style:inherit\" id=\"UON4965940_text\" class=\"cursor_pointer\"></span></button></div></div>@DX@genericInsertNode@DW@RFB4965940@DW@0|0@DW@1@DW@<div style=\"background-color:transparent;top:0px;left:40px;vertical-align:middle;width:40px;text-align:left;height:40px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-20px;right:0;height:40px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><button style=\"cursor:pointer;padding-top:0px;max-height:40px;color:#000000;padding-left:0px;padding-bottom:0px;border-color:transparent;min-height:40px;background-color:transparent;max-width:40px;width:100%;border-width:0px;border-style:solid;text-align:center;padding-right:0px;height:100%;min-width:40px\" type=\"button\" name=\"TXW4965941\" class=\"guibutton_enabled brightenOnHoverForGrayComponents brightenAndRemoveShadowOnClick brightenAndRemoveShadowAtInnerImageOnClick cursor_pointer\" id=\"TXW4965941\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;TOJ4965941\\&quot;&gt;Disable fading of this button bar&lt;\\/div&gt;&#39;, 250, 227, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxButtonOnClick(event, &#39;TXW4965941&#39;, &#39;TXW4965941&#39;, &#39;&#39;, true, true);dwFrameworkPreventDefaultBehaviour(event);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"width:16px;height:16px\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_deactivate_fading_overlay.png\" alt=\"\" class=\"guibutton_icon\"><span style=\"cursor:pointer;font-weight:inherit;vertical-align:middle;font-size:inherit;font-family:inherit;line-height:inherit;font-style:inherit\" id=\"TXW4965941_text\" class=\"cursor_pointer\"></span></button></div></div>@DX@genericInsertNode@DW@RFB4965940@DW@0|0@DW@2@DW@<div style=\"background-color:transparent;top:0px;left:80px;vertical-align:middle;width:40px;text-align:left;height:40px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-20px;right:0;height:40px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><button style=\"cursor:pointer;padding-top:0px;max-height:40px;color:#000000;padding-left:0px;padding-bottom:0px;border-color:transparent;min-height:40px;background-color:transparent;max-width:40px;width:100%;border-width:0px;border-style:solid;text-align:center;padding-right:0px;height:100%;min-width:40px\" type=\"button\" name=\"TXI4965941\" class=\"guibutton_enabled brightenOnHoverForGrayComponents brightenAndRemoveShadowOnClick brightenAndRemoveShadowAtInnerImageOnClick cursor_pointer\" id=\"TXI4965941\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;HCV4965941\\&quot;&gt;Scale image up&lt;\\/div&gt;&#39;, 250, 110, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxButtonOnClick(event, &#39;TXI4965941&#39;, &#39;TXI4965941&#39;, &#39;&#39;, true, true);dwFrameworkPreventDefaultBehaviour(event);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"width:16px;height:16px\" src=\"WEB-RES/resource/resource?id=bi_image_6EA83BB3BFF37828FA6BF2163F5FEE05\" alt=\"\" class=\"guibutton_icon\"><span style=\"cursor:pointer;font-weight:inherit;vertical-align:middle;font-size:inherit;font-family:inherit;line-height:inherit;font-style:inherit\" id=\"TXI4965941_text\" class=\"cursor_pointer\"></span></button></div></div>@DX@genericInsertNode@DW@RFB4965940@DW@0|0@DW@3@DW@<div style=\"background-color:transparent;top:0px;left:120px;vertical-align:middle;width:40px;text-align:left;height:40px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-20px;right:0;height:40px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><button style=\"cursor:default;padding-top:0px;max-height:40px;padding-left:0px;padding-bottom:0px;border-color:transparent;min-height:40px;background-color:transparent;max-width:40px;width:100%;border-width:0px;border-style:solid;text-align:center;padding-right:0px;height:100%;min-width:40px\" type=\"button\" name=\"QCH4965941\" class=\"guibutton_disabled brightenAndRemoveShadowOnClick cursor_default\" disabled=\"disabled\" id=\"QCH4965941\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;WYX4965941\\&quot;&gt;Scale image down&lt;\\/div&gt;&#39;, 250, 129, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxButtonOnClick(event, &#39;QCH4965941&#39;, &#39;QCH4965941&#39;, &#39;&#39;, true, true);dwFrameworkPreventDefaultBehaviour(event);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"width:16px;height:16px\" src=\"WEB-RES/resource/resource?id=bi_image_8D8B172A8BDD872C4C2B297C13817F14\" alt=\"\" class=\"guibutton_icon\"><span style=\"cursor:default;font-weight:inherit;vertical-align:middle;font-size:inherit;font-family:inherit;line-height:inherit;font-style:inherit\" id=\"QCH4965941_text\" class=\"cursor_default\"></span></button></div></div>@DX@genericInsertNode@DW@RFB4965940@DW@0|0@DW@4@DW@<div style=\"background-color:transparent;top:0px;left:160px;vertical-align:middle;width:40px;text-align:left;height:40px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-20px;right:0;height:40px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><button style=\"cursor:default;padding-top:0px;max-height:40px;padding-left:0px;padding-bottom:0px;border-color:transparent;min-height:40px;background-color:transparent;max-width:40px;width:100%;border-width:0px;border-style:solid;text-align:center;padding-right:0px;height:100%;min-width:40px\" type=\"button\" name=\"TPL4965941\" class=\"guibutton_disabled brightenAndRemoveShadowOnClick cursor_default\" disabled=\"disabled\" id=\"TPL4965941\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;EXP4965941\\&quot;&gt;Adjust drawing to window width&lt;\\/div&gt;&#39;, 250, 225, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxButtonOnClick(event, &#39;TPL4965941&#39;, &#39;TPL4965941&#39;, &#39;&#39;, true, true);dwFrameworkPreventDefaultBehaviour(event);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"width:16px;height:16px\" src=\"WEB-RES/resource/resource?id=bi_image_EF98BDF38BC818590016925DE0AD1986\" alt=\"\" class=\"guibutton_icon\"><span style=\"cursor:default;font-weight:inherit;vertical-align:middle;font-size:inherit;font-family:inherit;line-height:inherit;font-style:inherit\" id=\"TPL4965941_text\" class=\"cursor_default\"></span></button></div></div>@DX@genericInsertNode@DW@RFB4965940@DW@0|0@DW@5@DW@<div style=\"background-color:transparent;top:0px;left:200px;vertical-align:middle;width:40px;text-align:left;height:40px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-20px;right:0;height:40px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><button style=\"cursor:pointer;padding-top:0px;max-height:40px;color:#000000;padding-left:0px;padding-bottom:0px;border-color:transparent;min-height:40px;background-color:transparent;max-width:40px;width:100%;border-width:0px;border-style:solid;text-align:center;padding-right:0px;height:100%;min-width:40px\" type=\"button\" name=\"EBQ4965941\" class=\"guibutton_enabled brightenOnHoverForGrayComponents brightenAndRemoveShadowOnClick brightenAndRemoveShadowAtInnerImageOnClick cursor_pointer\" id=\"EBQ4965941\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;LBI4965941\\&quot;&gt;Select section&lt;\\/div&gt;&#39;, 250, 100, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxButtonOnClick(event, &#39;EBQ4965941&#39;, &#39;EBQ4965941&#39;, &#39;&#39;, true, true);dwFrameworkPreventDefaultBehaviour(event);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"width:16px;height:16px\" src=\"WEB-RES/resource/resource?id=bi_image_D217B38C2671F0B5F327052F5618462B\" alt=\"\" class=\"guibutton_icon\"><span style=\"cursor:pointer;font-weight:inherit;vertical-align:middle;font-size:inherit;font-family:inherit;line-height:inherit;font-style:inherit\" id=\"EBQ4965941_text\" class=\"cursor_pointer\"></span></button></div></div>@DX@genericInsertNode@DW@RFB4965940@DW@0|0@DW@6@DW@<div style=\"background-color:transparent;top:0px;left:240px;vertical-align:middle;width:40px;text-align:left;height:40px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-20px;right:0;height:40px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><button style=\"cursor:pointer;padding-top:0px;max-height:40px;color:#000000;padding-left:0px;padding-bottom:0px;border-color:transparent;min-height:40px;background-color:transparent;max-width:40px;width:100%;border-width:0px;border-style:solid;text-align:center;padding-right:0px;height:100%;min-width:40px\" type=\"button\" name=\"AFA4965941\" class=\"guibutton_enabled brightenOnHoverForGrayComponents brightenAndRemoveShadowOnClick brightenAndRemoveShadowAtInnerImageOnClick cursor_pointer\" id=\"AFA4965941\" onmousedown=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwFrameworkDefaultClose(event);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;BOK4965941\\&quot;&gt;Print&lt;\\/div&gt;&#39;, 250, 40, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxButtonOnClick(event, &#39;AFA4965941&#39;, &#39;AFA4965941&#39;, &#39;&#39;, true, false);dwFrameworkPreventDefaultBehaviour(event);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"width:16px;height:16px\" src=\"WEB-RES/resource/resource?id=bi_image_72D0010FEC637C6EB8420C205BD1BB35\" alt=\"\" class=\"guibutton_icon\"><span style=\"cursor:pointer;font-weight:inherit;vertical-align:middle;font-size:inherit;font-family:inherit;line-height:inherit;font-style:inherit\" id=\"AFA4965941_text\" class=\"cursor_pointer\"></span></button></div></div>@DX@setStyle@DW@UON4965940@DW@background-color@DW@#dddddd@DX@removeStyle@DW@UON4965940@DW@background-image@DX@setStyle@DW@UON4965940@DW@background-color@DW@transparent@DX@removeStyle@DW@UON4965940@DW@background-image@DX@setStyle@DW@TXW4965941@DW@background-color@DW@#dddddd@DX@removeStyle@DW@TXW4965941@DW@background-image@DX@setStyle@DW@TXW4965941@DW@background-color@DW@transparent@DX@removeStyle@DW@TXW4965941@DW@background-image@DX@setStyle@DW@TXI4965941@DW@background-color@DW@#dddddd@DX@removeStyle@DW@TXI4965941@DW@background-image@DX@setStyle@DW@TXI4965941@DW@background-color@DW@transparent@DX@removeStyle@DW@TXI4965941@DW@background-image@DX@removeClass@DW@QCH4965941@DW@brightenOnHoverForGrayComponents@DX@removeClass@DW@QCH4965941@DW@brightenAndRemoveShadowAtInnerImageOnClick@DX@removeClass@DW@TPL4965941@DW@brightenOnHoverForGrayComponents@DX@removeClass@DW@TPL4965941@DW@brightenAndRemoveShadowAtInnerImageOnClick@DX@setStyle@DW@EBQ4965941@DW@background-color@DW@#dddddd@DX@removeStyle@DW@EBQ4965941@DW@background-image@DX@setStyle@DW@EBQ4965941@DW@background-color@DW@transparent@DX@removeStyle@DW@EBQ4965941@DW@background-image@DX@setStyle@DW@AFA4965941@DW@background-color@DW@#dddddd@DX@removeStyle@DW@AFA4965941@DW@background-image@DX@setStyle@DW@AFA4965941@DW@background-color@DW@transparent@DX@removeStyle@DW@AFA4965941@DW@background-image@DX@genericSetNodeStyle@DW@TBP4965620@DW@0|0@DW@width@DW@48px@DX@genericRemoveNodeStyle@DW@TBP4965620@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@TBP4965620@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@TBP4965620@DW@0|0@DW@height@DW@144px@DX@genericRemoveNodeStyle@DW@TBP4965620@DW@0|0@DW@bottom@DX@genericSetNodeStyle@DW@TBP4965620@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@TBP4965620@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@TBP4965620@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@TBP4965620@DW@0|0|0@DW@height@DW@48px@DX@genericSetNodeStyle@DW@TBP4965620@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@TBP4965620@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@TBP4965620@DW@0|0|0@DW@width@DW@48px@DX@genericSetNodeStyle@DW@TBP4965620@DW@0|0|0|0@DW@height@DW@48px@DX@genericSetNodeStyle@DW@TBP4965620@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@TBP4965620@DW@0|0|0|0@DW@margin-top@DW@-24px@DX@genericRemoveNodeStyle@DW@TBP4965620@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@TBP4965620@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@TBP4965620@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@TBP4965620@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@TBP4965620@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@TBP4965620@DW@0|0|0|0@DW@width@DX@genericSetNodeStyle@DW@TBP4965620@DW@0|0|1@DW@top@DW@48px@DX@genericRemoveNodeStyle@DW@TBP4965620@DW@0|0|1@DW@bottom@DX@genericSetNodeStyle@DW@TBP4965620@DW@0|0|1@DW@height@DW@48px@DX@genericSetNodeStyle@DW@TBP4965620@DW@0|0|1@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@TBP4965620@DW@0|0|1@DW@right@DX@genericSetNodeStyle@DW@TBP4965620@DW@0|0|1@DW@width@DW@48px@DX@genericSetNodeStyle@DW@TBP4965620@DW@0|0|1|0@DW@height@DW@48px@DX@genericSetNodeStyle@DW@TBP4965620@DW@0|0|1|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@TBP4965620@DW@0|0|1|0@DW@margin-top@DW@-24px@DX@genericRemoveNodeStyle@DW@TBP4965620@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@TBP4965620@DW@0|0|1|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@TBP4965620@DW@0|0|1|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@TBP4965620@DW@0|0|1|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@TBP4965620@DW@0|0|1|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@TBP4965620@DW@0|0|1|0@DW@width@DX@genericSetNodeStyle@DW@TBP4965620@DW@0|0|2@DW@top@DW@96px@DX@genericRemoveNodeStyle@DW@TBP4965620@DW@0|0|2@DW@bottom@DX@genericSetNodeStyle@DW@TBP4965620@DW@0|0|2@DW@height@DW@48px@DX@genericSetNodeStyle@DW@TBP4965620@DW@0|0|2@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@TBP4965620@DW@0|0|2@DW@right@DX@genericSetNodeStyle@DW@TBP4965620@DW@0|0|2@DW@width@DW@48px@DX@genericSetNodeStyle@DW@TBP4965620@DW@0|0|2|0@DW@height@DW@48px@DX@genericSetNodeStyle@DW@TBP4965620@DW@0|0|2|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@TBP4965620@DW@0|0|2|0@DW@margin-top@DW@-24px@DX@genericRemoveNodeStyle@DW@TBP4965620@DW@0|0|2|0@DW@bottom@DX@genericSetNodeStyle@DW@TBP4965620@DW@0|0|2|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@TBP4965620@DW@0|0|2|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@TBP4965620@DW@0|0|2|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@TBP4965620@DW@0|0|2|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@TBP4965620@DW@0|0|2|0@DW@width@DX@genericSetNodeStyle@DW@UKQ4965620@DW@0|0@DW@width@DW@48px@DX@genericRemoveNodeStyle@DW@UKQ4965620@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@UKQ4965620@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@UKQ4965620@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@UKQ4965620@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@UKQ4965620@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@UKQ4965620@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@UKQ4965620@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@UKQ4965620@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@UKQ4965620@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@UKQ4965620@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@UKQ4965620@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@UKQ4965620@DW@0|0|0@DW@width@DW@48px@DX@genericSetNodeStyle@DW@UKQ4965620@DW@0|0|0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@UKQ4965620@DW@0|0|0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@UKQ4965620@DW@0|0|0|0@DW@margin-top@DW@0px@DX@genericSetNodeStyle@DW@UKQ4965620@DW@0|0|0|0@DW@margin-bottom@DW@0px@DX@genericRemoveNodeStyle@DW@UKQ4965620@DW@0|0|0|0@DW@height@DX@genericSetNodeStyle@DW@UKQ4965620@DW@0|0|0|0@DW@width@DW@48px@DX@genericSetNodeStyle@DW@UKQ4965620@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@UKQ4965620@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericRemoveNodeStyle@DW@UKQ4965620@DW@0|0|0|0@DW@right@DX@setStyle@DW@HGS4965634@DW@padding-top@DW@12px@DX@setStyle@DW@MTE4965620@DW@padding-top@DW@0px@DX@setStyle@DW@JBO4965681@DW@padding-top@DW@0px@DX@setStyle@DW@MDS4965681@DW@padding-top@DW@0px@DX@setStyle@DW@EHV4965681@DW@padding-top@DW@0px@DX@setStyle@DW@UTV4965682@DW@padding-top@DW@0px@DX@setStyle@DW@XHO4965682@DW@padding-top@DW@0px@DX@setStyle@DW@KCF4965682@DW@padding-top@DW@0px@DX@setStyle@DW@XXC4965685@DW@padding-top@DW@0px@DX@setStyle@DW@EFX4965685@DW@padding-top@DW@0px@DX@setStyle@DW@KKM4965685@DW@padding-top@DW@0px@DX@setStyle@DW@XIN4965686@DW@padding-top@DW@0px@DX@setStyle@DW@VNX4965686@DW@padding-top@DW@0px@DX@setStyle@DW@OGG4965686@DW@padding-top@DW@0px@DX@setStyle@DW@DYU4965688@DW@padding-top@DW@0px@DX@setStyle@DW@XED4965688@DW@padding-top@DW@0px@DX@setStyle@DW@EEP4965688@DW@padding-top@DW@0px@DX@setStyle@DW@EAX4965690@DW@padding-top@DW@0px@DX@setStyle@DW@ASK4965690@DW@padding-top@DW@0px@DX@setStyle@DW@HBE4965690@DW@padding-top@DW@0px@DX@setStyle@DW@OAR4965691@DW@padding-top@DW@0px@DX@setStyle@DW@XRE4965691@DW@padding-top@DW@0px@DX@setStyle@DW@UCY4965691@DW@padding-top@DW@0px@DX@setStyle@DW@LKC4965693@DW@padding-top@DW@0px@DX@setStyle@DW@GKP4965693@DW@padding-top@DW@0px@DX@setStyle@DW@JBH4965693@DW@padding-top@DW@0px@DX@setStyle@DW@GYK4965695@DW@padding-top@DW@0px@DX@setStyle@DW@TTG4965695@DW@padding-top@DW@0px@DX@setStyle@DW@ENG4965695@DW@padding-top@DW@0px@DX@setStyle@DW@RVK4965696@DW@padding-top@DW@0px@DX@setStyle@DW@ADO4965696@DW@padding-top@DW@0px@DX@setStyle@DW@RTI4965696@DW@padding-top@DW@0px@DX@setStyle@DW@PLC4965698@DW@padding-top@DW@0px@DX@setStyle@DW@UCO4965698@DW@padding-top@DW@0px@DX@setStyle@DW@BCE4965698@DW@padding-top@DW@0px@DX@setStyle@DW@LJY4965700@DW@padding-top@DW@0px@DX@setStyle@DW@IDN4965700@DW@padding-top@DW@0px@DX@setStyle@DW@LRE4965700@DW@padding-top@DW@0px@DX@setStyle@DW@MCW4965701@DW@padding-top@DW@0px@DX@setStyle@DW@ORH4965701@DW@padding-top@DW@0px@DX@setStyle@DW@IID4965701@DW@padding-top@DW@0px@DX@setStyle@DW@WVP4965703@DW@padding-top@DW@0px@DX@setStyle@DW@OEM4965703@DW@padding-top@DW@0px@DX@setStyle@DW@RER4965703@DW@padding-top@DW@0px@DX@setStyle@DW@RRO4965705@DW@padding-top@DW@0px@DX@setStyle@DW@HBQ4965705@DW@padding-top@DW@0px@DX@setStyle@DW@YKJ4965705@DW@padding-top@DW@0px@DX@setStyle@DW@HJT4965707@DW@padding-top@DW@0px@DX@setStyle@DW@GOY4965707@DW@padding-top@DW@0px@DX@setStyle@DW@EXP4965707@DW@padding-top@DW@0px@DX@setStyle@DW@BQR4965708@DW@padding-top@DW@0px@DX@setStyle@DW@IUS4965708@DW@padding-top@DW@0px@DX@setStyle@DW@EJP4965708@DW@padding-top@DW@0px@DX@setStyle@DW@RSW4965710@DW@padding-top@DW@0px@DX@setStyle@DW@KIO4965710@DW@padding-top@DW@0px@DX@setStyle@DW@DUC4965710@DW@padding-top@DW@0px@DX@setStyle@DW@KGJ4965620@DW@height@DW@810px@DX@setStyle@DW@KGJ4965620@DW@width@DW@0px@DX@evaluateJavascript@DW@dwScrollpaneRepaintScrollpaneFadings('FEA4965620');@DX@evaluateJavascript@DW@dwHelperScrollToStoredPosition('FEA4965620');@DX@setStyle@DW@EJM4965620@DW@padding-top@DW@0px@DX@genericSetNodeStyle@DW@SMB4965620@DW@0|0@DW@width@DW@0px@DX@genericSetNodeStyle@DW@SMB4965620@DW@0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@SMB4965620@DW@0|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@SMB4965620@DW@0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@SMB4965620@DW@0|0@DW@height@DW@0px@DX@genericSetNodeStyle@DW@SMB4965620@DW@0|0@DW@margin-top@DW@0px@DX@genericSetNodeStyle@DW@SMB4965620@DW@0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@SMB4965620@DW@0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0@DW@right@DW@0@DX@genericRemoveNodeStyle@DW@KQX4965620@DW@0|0@DW@margin-left@DX@genericRemoveNodeStyle@DW@KQX4965620@DW@0|0@DW@width@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@KQX4965620@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@KQX4965620@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@KQX4965620@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|0@DW@height@DW@56px@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|0@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@KQX4965620@DW@0|0|0@DW@width@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|0|0@DW@height@DW@56px@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|0|0@DW@margin-top@DW@0px@DX@genericRemoveNodeStyle@DW@KQX4965620@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@KQX4965620@DW@0|0|0|0@DW@width@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|1@DW@top@DW@56px@DX@genericRemoveNodeStyle@DW@KQX4965620@DW@0|0|1@DW@bottom@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|1@DW@height@DW@1px@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|1@DW@left@DW@0px@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|1@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@KQX4965620@DW@0|0|1@DW@width@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|1|0@DW@height@DW@1px@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|1|0@DW@top@DW@49.999%@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|1|0@DW@margin-top@DW@0px@DX@genericRemoveNodeStyle@DW@KQX4965620@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|1|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|1|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|1|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|1|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@KQX4965620@DW@0|0|1|0@DW@width@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|2@DW@top@DW@57px@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|2@DW@bottom@DW@1px@DX@genericRemoveNodeStyle@DW@KQX4965620@DW@0|0|2@DW@height@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|2@DW@left@DW@0px@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|2@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@KQX4965620@DW@0|0|2@DW@width@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|2|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|2|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|2|0@DW@margin-top@DW@0px@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|2|0@DW@margin-bottom@DW@0px@DX@genericRemoveNodeStyle@DW@KQX4965620@DW@0|0|2|0@DW@height@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|2|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|2|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|2|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|2|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@KQX4965620@DW@0|0|2|0@DW@width@DX@genericRemoveNodeStyle@DW@KQX4965620@DW@0|0|3@DW@top@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|3@DW@bottom@DW@0px@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|3@DW@height@DW@1px@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|3@DW@left@DW@0px@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|3@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@KQX4965620@DW@0|0|3@DW@width@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|3|0@DW@height@DW@1px@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|3|0@DW@top@DW@49.999%@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|3|0@DW@margin-top@DW@0px@DX@genericRemoveNodeStyle@DW@KQX4965620@DW@0|0|3|0@DW@bottom@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|3|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|3|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|3|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|3|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@KQX4965620@DW@0|0|3|0@DW@width@DX@genericRemoveNodeStyle@DW@KQX4965620@DW@0|0|4@DW@top@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|4@DW@bottom@DW@0px@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|4@DW@height@DW@0px@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|4@DW@left@DW@0px@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|4@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@KQX4965620@DW@0|0|4@DW@width@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|4|0@DW@height@DW@0px@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|4|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|4|0@DW@margin-top@DW@0px@DX@genericRemoveNodeStyle@DW@KQX4965620@DW@0|0|4|0@DW@top@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|4|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|4|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|4|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|4|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@KQX4965620@DW@0|0|4|0@DW@width@DX@genericSetNodeStyle@DW@UQX4965620@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@UQX4965620@DW@0|0@DW@right@DW@0@DX@genericRemoveNodeStyle@DW@UQX4965620@DW@0|0@DW@margin-left@DX@genericRemoveNodeStyle@DW@UQX4965620@DW@0|0@DW@width@DX@genericSetNodeStyle@DW@UQX4965620@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@UQX4965620@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@UQX4965620@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@UQX4965620@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@UQX4965620@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@UQX4965620@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@UQX4965620@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@UQX4965620@DW@0|0|0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@UQX4965620@DW@0|0|0@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@UQX4965620@DW@0|0|0@DW@width@DX@genericSetNodeStyle@DW@UQX4965620@DW@0|0|0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@UQX4965620@DW@0|0|0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@UQX4965620@DW@0|0|0|0@DW@margin-top@DW@1px@DX@genericSetNodeStyle@DW@UQX4965620@DW@0|0|0|0@DW@margin-bottom@DW@1px@DX@genericRemoveNodeStyle@DW@UQX4965620@DW@0|0|0|0@DW@height@DX@genericSetNodeStyle@DW@UQX4965620@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@UQX4965620@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@UQX4965620@DW@0|0|0|0@DW@margin-left@DW@1px@DX@genericSetNodeStyle@DW@UQX4965620@DW@0|0|0|0@DW@margin-right@DW@1px@DX@genericRemoveNodeStyle@DW@UQX4965620@DW@0|0|0|0@DW@width@DX@setStyle@DW@AWB4965733@DW@padding-top@DW@0px@DX@genericSetNodeStyle@DW@SQG4965733@DW@0|0@DW@width@DW@40px@DX@genericRemoveNodeStyle@DW@SQG4965733@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@SQG4965733@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@SQG4965733@DW@0|0@DW@height@DW@40px@DX@genericRemoveNodeStyle@DW@SQG4965733@DW@0|0@DW@bottom@DX@genericSetNodeStyle@DW@SQG4965733@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@SQG4965733@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@SQG4965733@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@SQG4965733@DW@0|0|0@DW@height@DW@40px@DX@genericSetNodeStyle@DW@SQG4965733@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@SQG4965733@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@SQG4965733@DW@0|0|0@DW@width@DW@40px@DX@genericSetNodeStyle@DW@SQG4965733@DW@0|0|0|0@DW@height@DW@40px@DX@genericSetNodeStyle@DW@SQG4965733@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@SQG4965733@DW@0|0|0|0@DW@margin-top@DW@-20px@DX@genericRemoveNodeStyle@DW@SQG4965733@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@SQG4965733@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@SQG4965733@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@SQG4965733@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@SQG4965733@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@SQG4965733@DW@0|0|0|0@DW@width@DX@genericSetNodeStyle@DW@SHJ4965734@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@SHJ4965734@DW@0|0@DW@right@DW@0@DX@genericRemoveNodeStyle@DW@SHJ4965734@DW@0|0@DW@margin-left@DX@genericRemoveNodeStyle@DW@SHJ4965734@DW@0|0@DW@width@DX@genericSetNodeStyle@DW@SHJ4965734@DW@0|0@DW@height@DW@40px@DX@genericSetNodeStyle@DW@SHJ4965734@DW@0|0@DW@margin-top@DW@-20px@DX@genericSetNodeStyle@DW@SHJ4965734@DW@0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@SHJ4965734@DW@0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@SHJ4965734@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@SHJ4965734@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@SHJ4965734@DW@0|0|0@DW@height@DW@40px@DX@genericSetNodeStyle@DW@SHJ4965734@DW@0|0|0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@SHJ4965734@DW@0|0|0@DW@right@DW@40px@DX@genericRemoveNodeStyle@DW@SHJ4965734@DW@0|0|0@DW@width@DX@genericSetNodeStyle@DW@SHJ4965734@DW@0|0|0|0@DW@height@DW@28px@DX@genericSetNodeStyle@DW@SHJ4965734@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@SHJ4965734@DW@0|0|0|0@DW@margin-top@DW@-11px@DX@genericRemoveNodeStyle@DW@SHJ4965734@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@SHJ4965734@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@SHJ4965734@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@SHJ4965734@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@SHJ4965734@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@SHJ4965734@DW@0|0|0|0@DW@width@DX@genericSetNodeStyle@DW@SHJ4965734@DW@0|0|1@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@SHJ4965734@DW@0|0|1@DW@bottom@DX@genericSetNodeStyle@DW@SHJ4965734@DW@0|0|1@DW@height@DW@40px@DX@genericRemoveNodeStyle@DW@SHJ4965734@DW@0|0|1@DW@left@DX@genericSetNodeStyle@DW@SHJ4965734@DW@0|0|1@DW@right@DW@0px@DX@genericSetNodeStyle@DW@SHJ4965734@DW@0|0|1@DW@width@DW@40px@DX@genericSetNodeStyle@DW@SHJ4965734@DW@0|0|1|0@DW@height@DW@40px@DX@genericSetNodeStyle@DW@SHJ4965734@DW@0|0|1|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@SHJ4965734@DW@0|0|1|0@DW@margin-top@DW@-20px@DX@genericRemoveNodeStyle@DW@SHJ4965734@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@SHJ4965734@DW@0|0|1|0@DW@width@DW@40px@DX@genericSetNodeStyle@DW@SHJ4965734@DW@0|0|1|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@SHJ4965734@DW@0|0|1|0@DW@margin-left@DW@0px@DX@genericRemoveNodeStyle@DW@SHJ4965734@DW@0|0|1|0@DW@left@DX@genericSetNodeStyle@DW@LJL4965620@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@LJL4965620@DW@0|0@DW@right@DW@0@DX@genericRemoveNodeStyle@DW@LJL4965620@DW@0|0@DW@margin-left@DX@genericRemoveNodeStyle@DW@LJL4965620@DW@0|0@DW@width@DX@genericSetNodeStyle@DW@LJL4965620@DW@0|0@DW@height@DW@44px@DX@genericSetNodeStyle@DW@LJL4965620@DW@0|0@DW@margin-top@DW@-22px@DX@genericSetNodeStyle@DW@LJL4965620@DW@0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@LJL4965620@DW@0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@LJL4965620@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@LJL4965620@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@LJL4965620@DW@0|0|0@DW@height@DW@44px@DX@genericSetNodeStyle@DW@LJL4965620@DW@0|0|0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@LJL4965620@DW@0|0|0@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@LJL4965620@DW@0|0|0@DW@width@DX@genericSetNodeStyle@DW@LJL4965620@DW@0|0|0|0@DW@height@DW@40px@DX@genericSetNodeStyle@DW@LJL4965620@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@LJL4965620@DW@0|0|0|0@DW@margin-top@DW@-22px@DX@genericRemoveNodeStyle@DW@LJL4965620@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@LJL4965620@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@LJL4965620@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@LJL4965620@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@LJL4965620@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@LJL4965620@DW@0|0|0|0@DW@width@DX@genericSetNodeStyle@DW@LJL4965620@DW@0|0|1@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@LJL4965620@DW@0|0|1@DW@bottom@DX@genericSetNodeStyle@DW@LJL4965620@DW@0|0|1@DW@height@DW@44px@DX@genericRemoveNodeStyle@DW@LJL4965620@DW@0|0|1@DW@left@DX@genericSetNodeStyle@DW@LJL4965620@DW@0|0|1@DW@right@DW@0px@DX@genericSetNodeStyle@DW@LJL4965620@DW@0|0|1@DW@width@DW@0px@DX@genericSetNodeStyle@DW@LJL4965620@DW@0|0|1|0@DW@height@DW@0px@DX@genericSetNodeStyle@DW@LJL4965620@DW@0|0|1|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@LJL4965620@DW@0|0|1|0@DW@margin-top@DW@0px@DX@genericRemoveNodeStyle@DW@LJL4965620@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@LJL4965620@DW@0|0|1|0@DW@width@DW@0px@DX@genericSetNodeStyle@DW@LJL4965620@DW@0|0|1|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@LJL4965620@DW@0|0|1|0@DW@margin-left@DW@0px@DX@genericRemoveNodeStyle@DW@LJL4965620@DW@0|0|1|0@DW@left@DX@setStyle@DW@DTK4965633@DW@padding-top@DW@0px@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0@DW@width@DW@280px@DX@genericRemoveNodeStyle@DW@RFB4965940@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0@DW@height@DW@40px@DX@genericRemoveNodeStyle@DW@RFB4965940@DW@0|0@DW@bottom@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@RFB4965940@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|0@DW@height@DW@40px@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@RFB4965940@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|0@DW@width@DW@40px@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|0|0@DW@height@DW@40px@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|0|0@DW@margin-top@DW@-20px@DX@genericRemoveNodeStyle@DW@RFB4965940@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@RFB4965940@DW@0|0|0|0@DW@width@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|1@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@RFB4965940@DW@0|0|1@DW@bottom@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|1@DW@height@DW@40px@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|1@DW@left@DW@40px@DX@genericRemoveNodeStyle@DW@RFB4965940@DW@0|0|1@DW@right@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|1@DW@width@DW@40px@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|1|0@DW@height@DW@40px@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|1|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|1|0@DW@margin-top@DW@-20px@DX@genericRemoveNodeStyle@DW@RFB4965940@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|1|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|1|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|1|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|1|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@RFB4965940@DW@0|0|1|0@DW@width@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|2@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@RFB4965940@DW@0|0|2@DW@bottom@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|2@DW@height@DW@40px@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|2@DW@left@DW@80px@DX@genericRemoveNodeStyle@DW@RFB4965940@DW@0|0|2@DW@right@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|2@DW@width@DW@40px@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|2|0@DW@height@DW@40px@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|2|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|2|0@DW@margin-top@DW@-20px@DX@genericRemoveNodeStyle@DW@RFB4965940@DW@0|0|2|0@DW@bottom@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|2|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|2|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|2|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|2|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@RFB4965940@DW@0|0|2|0@DW@width@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|3@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@RFB4965940@DW@0|0|3@DW@bottom@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|3@DW@height@DW@40px@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|3@DW@left@DW@120px@DX@genericRemoveNodeStyle@DW@RFB4965940@DW@0|0|3@DW@right@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|3@DW@width@DW@40px@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|3|0@DW@height@DW@40px@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|3|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|3|0@DW@margin-top@DW@-20px@DX@genericRemoveNodeStyle@DW@RFB4965940@DW@0|0|3|0@DW@bottom@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|3|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|3|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|3|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|3|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@RFB4965940@DW@0|0|3|0@DW@width@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|4@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@RFB4965940@DW@0|0|4@DW@bottom@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|4@DW@height@DW@40px@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|4@DW@left@DW@160px@DX@genericRemoveNodeStyle@DW@RFB4965940@DW@0|0|4@DW@right@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|4@DW@width@DW@40px@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|4|0@DW@height@DW@40px@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|4|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|4|0@DW@margin-top@DW@-20px@DX@genericRemoveNodeStyle@DW@RFB4965940@DW@0|0|4|0@DW@bottom@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|4|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|4|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|4|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|4|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@RFB4965940@DW@0|0|4|0@DW@width@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|5@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@RFB4965940@DW@0|0|5@DW@bottom@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|5@DW@height@DW@40px@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|5@DW@left@DW@200px@DX@genericRemoveNodeStyle@DW@RFB4965940@DW@0|0|5@DW@right@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|5@DW@width@DW@40px@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|5|0@DW@height@DW@40px@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|5|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|5|0@DW@margin-top@DW@-20px@DX@genericRemoveNodeStyle@DW@RFB4965940@DW@0|0|5|0@DW@bottom@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|5|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|5|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|5|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|5|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@RFB4965940@DW@0|0|5|0@DW@width@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|6@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@RFB4965940@DW@0|0|6@DW@bottom@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|6@DW@height@DW@40px@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|6@DW@left@DW@240px@DX@genericRemoveNodeStyle@DW@RFB4965940@DW@0|0|6@DW@right@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|6@DW@width@DW@40px@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|6|0@DW@height@DW@40px@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|6|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|6|0@DW@margin-top@DW@-20px@DX@genericRemoveNodeStyle@DW@RFB4965940@DW@0|0|6|0@DW@bottom@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|6|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|6|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|6|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|6|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@RFB4965940@DW@0|0|6|0@DW@width@DX@setStyle@DW@GOA4965958@DW@padding-top@DW@0px@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0@DW@right@DW@0@DX@genericRemoveNodeStyle@DW@GOL4965941@DW@0|0@DW@margin-left@DX@genericRemoveNodeStyle@DW@GOL4965941@DW@0|0@DW@width@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0@DW@height@DW@20px@DX@genericRemoveNodeStyle@DW@GOL4965941@DW@0|0@DW@bottom@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@GOL4965941@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|0@DW@height@DW@20px@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@GOL4965941@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|0@DW@width@DW@20px@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|0|0@DW@height@DW@20px@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|0|0@DW@margin-top@DW@-10px@DX@genericRemoveNodeStyle@DW@GOL4965941@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|0|0@DW@width@DW@20px@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericRemoveNodeStyle@DW@GOL4965941@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|1@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@GOL4965941@DW@0|0|1@DW@bottom@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|1@DW@height@DW@20px@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|1@DW@left@DW@20px@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|1@DW@right@DW@20px@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|1@DW@width@DW@0px@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|1|0@DW@height@DW@0px@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|1|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|1|0@DW@margin-top@DW@3px@DX@genericRemoveNodeStyle@DW@GOL4965941@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|1|0@DW@width@DW@0px@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|1|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|1|0@DW@margin-left@DW@0px@DX@genericRemoveNodeStyle@DW@GOL4965941@DW@0|0|1|0@DW@right@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|2@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@GOL4965941@DW@0|0|2@DW@bottom@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|2@DW@height@DW@20px@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|2@DW@left@DW@20px@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|2@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@GOL4965941@DW@0|0|2@DW@width@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|2|0@DW@height@DW@20px@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|2|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|2|0@DW@margin-top@DW@-10px@DX@genericRemoveNodeStyle@DW@GOL4965941@DW@0|0|2|0@DW@bottom@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|2|0@DW@width@DW@20px@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|2|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|2|0@DW@margin-left@DW@0px@DX@genericRemoveNodeStyle@DW@GOL4965941@DW@0|0|2|0@DW@left@DX@genericSetNodeStyle@DW@KPX4965940@DW@0|0@DW@width@DW@280px@DX@genericRemoveNodeStyle@DW@KPX4965940@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@KPX4965940@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@KPX4965940@DW@0|0@DW@height@DW@40px@DX@genericRemoveNodeStyle@DW@KPX4965940@DW@0|0@DW@bottom@DX@genericSetNodeStyle@DW@KPX4965940@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@KPX4965940@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@KPX4965940@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@KPX4965940@DW@0|0|0@DW@height@DW@40px@DX@genericSetNodeStyle@DW@KPX4965940@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@KPX4965940@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@KPX4965940@DW@0|0|0@DW@width@DW@280px@DX@genericSetNodeStyle@DW@KPX4965940@DW@0|0|0|0@DW@height@DW@40px@DX@genericSetNodeStyle@DW@KPX4965940@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@KPX4965940@DW@0|0|0|0@DW@margin-top@DW@-20px@DX@genericRemoveNodeStyle@DW@KPX4965940@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@KPX4965940@DW@0|0|0|0@DW@width@DW@280px@DX@genericSetNodeStyle@DW@KPX4965940@DW@0|0|0|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@KPX4965940@DW@0|0|0|0@DW@margin-left@DW@-140px@DX@genericRemoveNodeStyle@DW@KPX4965940@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@KPX4965940@DW@0|0|1@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@KPX4965940@DW@0|0|1@DW@bottom@DX@genericSetNodeStyle@DW@KPX4965940@DW@0|0|1@DW@height@DW@40px@DX@genericSetNodeStyle@DW@KPX4965940@DW@0|0|1@DW@left@DW@280px@DX@genericRemoveNodeStyle@DW@KPX4965940@DW@0|0|1@DW@right@DX@genericSetNodeStyle@DW@KPX4965940@DW@0|0|1@DW@width@DW@0px@DX@genericSetNodeStyle@DW@KPX4965940@DW@0|0|1|0@DW@height@DW@0px@DX@genericSetNodeStyle@DW@KPX4965940@DW@0|0|1|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@KPX4965940@DW@0|0|1|0@DW@margin-top@DW@0px@DX@genericRemoveNodeStyle@DW@KPX4965940@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@KPX4965940@DW@0|0|1|0@DW@width@DW@0px@DX@genericSetNodeStyle@DW@KPX4965940@DW@0|0|1|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@KPX4965940@DW@0|0|1|0@DW@margin-left@DW@0px@DX@genericRemoveNodeStyle@DW@KPX4965940@DW@0|0|1|0@DW@right@DX@setStyle@DW@RHB4965633@DW@padding-top@DW@0px@DX@genericSetNodeStyle@DW@NUE4965633@DW@0|0@DW@width@DW@0px@DX@genericSetNodeStyle@DW@NUE4965633@DW@0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@NUE4965633@DW@0|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@NUE4965633@DW@0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@NUE4965633@DW@0|0@DW@height@DW@0px@DX@genericSetNodeStyle@DW@NUE4965633@DW@0|0@DW@margin-top@DW@0px@DX@genericSetNodeStyle@DW@NUE4965633@DW@0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@NUE4965633@DW@0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0@DW@right@DW@0@DX@genericRemoveNodeStyle@DW@IUQ4965633@DW@0|0@DW@margin-left@DX@genericRemoveNodeStyle@DW@IUQ4965633@DW@0|0@DW@width@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@IUQ4965633@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@IUQ4965633@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@IUQ4965633@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|0@DW@height@DW@0px@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|0@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@IUQ4965633@DW@0|0|0@DW@width@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|0|0@DW@height@DW@0px@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|0|0@DW@margin-top@DW@0px@DX@genericRemoveNodeStyle@DW@IUQ4965633@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@IUQ4965633@DW@0|0|0|0@DW@width@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|1@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@IUQ4965633@DW@0|0|1@DW@bottom@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|1@DW@height@DW@0px@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|1@DW@left@DW@0px@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|1@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@IUQ4965633@DW@0|0|1@DW@width@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|1|0@DW@height@DW@0px@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|1|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|1|0@DW@margin-top@DW@0px@DX@genericRemoveNodeStyle@DW@IUQ4965633@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|1|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|1|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|1|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|1|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@IUQ4965633@DW@0|0|1|0@DW@width@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|2@DW@top@DW@0px@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|2@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@IUQ4965633@DW@0|0|2@DW@height@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|2@DW@left@DW@0px@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|2@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@IUQ4965633@DW@0|0|2@DW@width@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|2|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|2|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|2|0@DW@margin-top@DW@0px@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|2|0@DW@margin-bottom@DW@0px@DX@genericRemoveNodeStyle@DW@IUQ4965633@DW@0|0|2|0@DW@height@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|2|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|2|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|2|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|2|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@IUQ4965633@DW@0|0|2|0@DW@width@DX@genericRemoveNodeStyle@DW@IUQ4965633@DW@0|0|3@DW@top@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|3@DW@bottom@DW@0px@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|3@DW@height@DW@0px@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|3@DW@left@DW@0px@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|3@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@IUQ4965633@DW@0|0|3@DW@width@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|3|0@DW@height@DW@0px@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|3|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|3|0@DW@margin-top@DW@0px@DX@genericRemoveNodeStyle@DW@IUQ4965633@DW@0|0|3|0@DW@bottom@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|3|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|3|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|3|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|3|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@IUQ4965633@DW@0|0|3|0@DW@width@DX@genericRemoveNodeStyle@DW@IUQ4965633@DW@0|0|4@DW@top@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|4@DW@bottom@DW@0px@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|4@DW@height@DW@0px@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|4@DW@left@DW@0px@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|4@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@IUQ4965633@DW@0|0|4@DW@width@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|4|0@DW@height@DW@0px@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|4|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|4|0@DW@margin-top@DW@0px@DX@genericRemoveNodeStyle@DW@IUQ4965633@DW@0|0|4|0@DW@top@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|4|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|4|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|4|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|4|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@IUQ4965633@DW@0|0|4|0@DW@width@DX@genericSetNodeStyle@DW@ARV4965633@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@ARV4965633@DW@0|0@DW@right@DW@0@DX@genericRemoveNodeStyle@DW@ARV4965633@DW@0|0@DW@margin-left@DX@genericRemoveNodeStyle@DW@ARV4965633@DW@0|0@DW@width@DX@genericSetNodeStyle@DW@ARV4965633@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@ARV4965633@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@ARV4965633@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@ARV4965633@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@ARV4965633@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@ARV4965633@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@ARV4965633@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@ARV4965633@DW@0|0|0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@ARV4965633@DW@0|0|0@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@ARV4965633@DW@0|0|0@DW@width@DX@genericSetNodeStyle@DW@ARV4965633@DW@0|0|0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@ARV4965633@DW@0|0|0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@ARV4965633@DW@0|0|0|0@DW@margin-top@DW@1px@DX@genericSetNodeStyle@DW@ARV4965633@DW@0|0|0|0@DW@margin-bottom@DW@1px@DX@genericRemoveNodeStyle@DW@ARV4965633@DW@0|0|0|0@DW@height@DX@genericSetNodeStyle@DW@ARV4965633@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@ARV4965633@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@ARV4965633@DW@0|0|0|0@DW@margin-left@DW@1px@DX@genericSetNodeStyle@DW@ARV4965633@DW@0|0|0|0@DW@margin-right@DW@1px@DX@genericRemoveNodeStyle@DW@ARV4965633@DW@0|0|0|0@DW@width@DX@setStyle@DW@JUC4965633@DW@padding-top@DW@0px@DX@genericSetNodeStyle@DW@NNP4965848@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@NNP4965848@DW@0|0@DW@right@DW@0@DX@genericRemoveNodeStyle@DW@NNP4965848@DW@0|0@DW@margin-left@DX@genericRemoveNodeStyle@DW@NNP4965848@DW@0|0@DW@width@DX@genericSetNodeStyle@DW@NNP4965848@DW@0|0@DW@height@DW@30px@DX@genericSetNodeStyle@DW@NNP4965848@DW@0|0@DW@margin-top@DW@-15px@DX@genericSetNodeStyle@DW@NNP4965848@DW@0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@NNP4965848@DW@0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@NNP4965848@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@NNP4965848@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@NNP4965848@DW@0|0|0@DW@height@DW@30px@DX@genericSetNodeStyle@DW@NNP4965848@DW@0|0|0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@NNP4965848@DW@0|0|0@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@NNP4965848@DW@0|0|0@DW@width@DX@genericSetNodeStyle@DW@NNP4965848@DW@0|0|0|0@DW@height@DW@27px@DX@genericSetNodeStyle@DW@NNP4965848@DW@0|0|0|0@DW@top@DW@49.999%@DX@genericSetNodeStyle@DW@NNP4965848@DW@0|0|0|0@DW@margin-top@DW@-12px@DX@genericRemoveNodeStyle@DW@NNP4965848@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@NNP4965848@DW@0|0|0|0@DW@width@DW@27px@DX@genericSetNodeStyle@DW@NNP4965848@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@NNP4965848@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericRemoveNodeStyle@DW@NNP4965848@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@HRT4965849@DW@0|0@DW@width@DW@24px@DX@genericRemoveNodeStyle@DW@HRT4965849@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@HRT4965849@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@HRT4965849@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@HRT4965849@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@HRT4965849@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@HRT4965849@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@HRT4965849@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@HRT4965849@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@HRT4965849@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@HRT4965849@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@HRT4965849@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@HRT4965849@DW@0|0|0@DW@width@DW@24px@DX@genericSetNodeStyle@DW@HRT4965849@DW@0|0|0|0@DW@height@DW@16px@DX@genericSetNodeStyle@DW@HRT4965849@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@HRT4965849@DW@0|0|0|0@DW@margin-top@DW@-8px@DX@genericRemoveNodeStyle@DW@HRT4965849@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@HRT4965849@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@HRT4965849@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@HRT4965849@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@HRT4965849@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@HRT4965849@DW@0|0|0|0@DW@width@DX@setStyle@DW@VAF4965849@DW@padding-top@DW@0px@DX@genericSetNodeStyle@DW@LED4965849@DW@0|0@DW@width@DW@38px@DX@genericRemoveNodeStyle@DW@LED4965849@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@LED4965849@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@LED4965849@DW@0|0@DW@height@DW@38px@DX@genericRemoveNodeStyle@DW@LED4965849@DW@0|0@DW@bottom@DX@genericSetNodeStyle@DW@LED4965849@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@LED4965849@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@LED4965849@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@LED4965849@DW@0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@LED4965849@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@LED4965849@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@LED4965849@DW@0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@LED4965849@DW@0|0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@LED4965849@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@LED4965849@DW@0|0|0|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@LED4965849@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@LED4965849@DW@0|0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@LED4965849@DW@0|0|0|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@LED4965849@DW@0|0|0|0@DW@margin-left@DW@-19px@DX@genericRemoveNodeStyle@DW@LED4965849@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@TPC4965862@DW@0|0@DW@width@DW@76px@DX@genericRemoveNodeStyle@DW@TPC4965862@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@TPC4965862@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@TPC4965862@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@TPC4965862@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@TPC4965862@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@TPC4965862@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@TPC4965862@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@TPC4965862@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@TPC4965862@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@TPC4965862@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@TPC4965862@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@TPC4965862@DW@0|0|0@DW@width@DW@0px@DX@genericSetNodeStyle@DW@TPC4965862@DW@0|0|0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@TPC4965862@DW@0|0|0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@TPC4965862@DW@0|0|0|0@DW@margin-top@DW@0px@DX@genericSetNodeStyle@DW@TPC4965862@DW@0|0|0|0@DW@margin-bottom@DW@0px@DX@genericRemoveNodeStyle@DW@TPC4965862@DW@0|0|0|0@DW@height@DX@genericSetNodeStyle@DW@TPC4965862@DW@0|0|0|0@DW@width@DW@1px@DX@genericSetNodeStyle@DW@TPC4965862@DW@0|0|0|0@DW@left@DW@49.999%@DX@genericSetNodeStyle@DW@TPC4965862@DW@0|0|0|0@DW@margin-left@DW@-2px@DX@genericRemoveNodeStyle@DW@TPC4965862@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@TPC4965862@DW@0|0|1@DW@top@DW@0px@DX@genericSetNodeStyle@DW@TPC4965862@DW@0|0|1@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@TPC4965862@DW@0|0|1@DW@height@DX@genericSetNodeStyle@DW@TPC4965862@DW@0|0|1@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@TPC4965862@DW@0|0|1@DW@right@DX@genericSetNodeStyle@DW@TPC4965862@DW@0|0|1@DW@width@DW@76px@DX@genericSetNodeStyle@DW@TPC4965862@DW@0|0|1|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@TPC4965862@DW@0|0|1|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@TPC4965862@DW@0|0|1|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@TPC4965862@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@TPC4965862@DW@0|0|1|0@DW@width@DW@46px@DX@genericSetNodeStyle@DW@TPC4965862@DW@0|0|1|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@TPC4965862@DW@0|0|1|0@DW@margin-left@DW@10px@DX@genericRemoveNodeStyle@DW@TPC4965862@DW@0|0|1|0@DW@right@DX@genericSetNodeStyle@DW@YEH4965849@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@YEH4965849@DW@0|0@DW@right@DW@0@DX@genericRemoveNodeStyle@DW@YEH4965849@DW@0|0@DW@margin-left@DX@genericRemoveNodeStyle@DW@YEH4965849@DW@0|0@DW@width@DX@genericSetNodeStyle@DW@YEH4965849@DW@0|0@DW@height@DW@30px@DX@genericSetNodeStyle@DW@YEH4965849@DW@0|0@DW@margin-top@DW@-15px@DX@genericSetNodeStyle@DW@YEH4965849@DW@0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@YEH4965849@DW@0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@YEH4965849@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@YEH4965849@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@YEH4965849@DW@0|0|0@DW@height@DW@30px@DX@genericSetNodeStyle@DW@YEH4965849@DW@0|0|0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@YEH4965849@DW@0|0|0@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@YEH4965849@DW@0|0|0@DW@width@DX@genericSetNodeStyle@DW@YEH4965849@DW@0|0|0|0@DW@height@DW@27px@DX@genericSetNodeStyle@DW@YEH4965849@DW@0|0|0|0@DW@top@DW@49.999%@DX@genericSetNodeStyle@DW@YEH4965849@DW@0|0|0|0@DW@margin-top@DW@-12px@DX@genericRemoveNodeStyle@DW@YEH4965849@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@YEH4965849@DW@0|0|0|0@DW@width@DW@27px@DX@genericSetNodeStyle@DW@YEH4965849@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@YEH4965849@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericRemoveNodeStyle@DW@YEH4965849@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@ELK4965850@DW@0|0@DW@width@DW@24px@DX@genericRemoveNodeStyle@DW@ELK4965850@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@ELK4965850@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@ELK4965850@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@ELK4965850@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@ELK4965850@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@ELK4965850@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@ELK4965850@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@ELK4965850@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@ELK4965850@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@ELK4965850@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@ELK4965850@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@ELK4965850@DW@0|0|0@DW@width@DW@24px@DX@genericSetNodeStyle@DW@ELK4965850@DW@0|0|0|0@DW@height@DW@16px@DX@genericSetNodeStyle@DW@ELK4965850@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@ELK4965850@DW@0|0|0|0@DW@margin-top@DW@-8px@DX@genericRemoveNodeStyle@DW@ELK4965850@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@ELK4965850@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@ELK4965850@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@ELK4965850@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@ELK4965850@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@ELK4965850@DW@0|0|0|0@DW@width@DX@setStyle@DW@ARM4965850@DW@padding-top@DW@0px@DX@genericSetNodeStyle@DW@GSL4965850@DW@0|0@DW@width@DW@38px@DX@genericRemoveNodeStyle@DW@GSL4965850@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@GSL4965850@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@GSL4965850@DW@0|0@DW@height@DW@38px@DX@genericRemoveNodeStyle@DW@GSL4965850@DW@0|0@DW@bottom@DX@genericSetNodeStyle@DW@GSL4965850@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@GSL4965850@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@GSL4965850@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@GSL4965850@DW@0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@GSL4965850@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@GSL4965850@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@GSL4965850@DW@0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@GSL4965850@DW@0|0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@GSL4965850@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@GSL4965850@DW@0|0|0|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@GSL4965850@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@GSL4965850@DW@0|0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@GSL4965850@DW@0|0|0|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@GSL4965850@DW@0|0|0|0@DW@margin-left@DW@-19px@DX@genericRemoveNodeStyle@DW@GSL4965850@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@GNV4965862@DW@0|0@DW@width@DW@76px@DX@genericRemoveNodeStyle@DW@GNV4965862@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@GNV4965862@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@GNV4965862@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@GNV4965862@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@GNV4965862@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@GNV4965862@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@GNV4965862@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@GNV4965862@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@GNV4965862@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@GNV4965862@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@GNV4965862@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@GNV4965862@DW@0|0|0@DW@width@DW@0px@DX@genericSetNodeStyle@DW@GNV4965862@DW@0|0|0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@GNV4965862@DW@0|0|0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@GNV4965862@DW@0|0|0|0@DW@margin-top@DW@0px@DX@genericSetNodeStyle@DW@GNV4965862@DW@0|0|0|0@DW@margin-bottom@DW@0px@DX@genericRemoveNodeStyle@DW@GNV4965862@DW@0|0|0|0@DW@height@DX@genericSetNodeStyle@DW@GNV4965862@DW@0|0|0|0@DW@width@DW@1px@DX@genericSetNodeStyle@DW@GNV4965862@DW@0|0|0|0@DW@left@DW@49.999%@DX@genericSetNodeStyle@DW@GNV4965862@DW@0|0|0|0@DW@margin-left@DW@-2px@DX@genericRemoveNodeStyle@DW@GNV4965862@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@GNV4965862@DW@0|0|1@DW@top@DW@0px@DX@genericSetNodeStyle@DW@GNV4965862@DW@0|0|1@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@GNV4965862@DW@0|0|1@DW@height@DX@genericSetNodeStyle@DW@GNV4965862@DW@0|0|1@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@GNV4965862@DW@0|0|1@DW@right@DX@genericSetNodeStyle@DW@GNV4965862@DW@0|0|1@DW@width@DW@76px@DX@genericSetNodeStyle@DW@GNV4965862@DW@0|0|1|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@GNV4965862@DW@0|0|1|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@GNV4965862@DW@0|0|1|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@GNV4965862@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@GNV4965862@DW@0|0|1|0@DW@width@DW@46px@DX@genericSetNodeStyle@DW@GNV4965862@DW@0|0|1|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@GNV4965862@DW@0|0|1|0@DW@margin-left@DW@10px@DX@genericRemoveNodeStyle@DW@GNV4965862@DW@0|0|1|0@DW@right@DX@genericSetNodeStyle@DW@OSY4965850@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@OSY4965850@DW@0|0@DW@right@DW@0@DX@genericRemoveNodeStyle@DW@OSY4965850@DW@0|0@DW@margin-left@DX@genericRemoveNodeStyle@DW@OSY4965850@DW@0|0@DW@width@DX@genericSetNodeStyle@DW@OSY4965850@DW@0|0@DW@height@DW@30px@DX@genericSetNodeStyle@DW@OSY4965850@DW@0|0@DW@margin-top@DW@-15px@DX@genericSetNodeStyle@DW@OSY4965850@DW@0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@OSY4965850@DW@0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@OSY4965850@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@OSY4965850@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@OSY4965850@DW@0|0|0@DW@height@DW@30px@DX@genericSetNodeStyle@DW@OSY4965850@DW@0|0|0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@OSY4965850@DW@0|0|0@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@OSY4965850@DW@0|0|0@DW@width@DX@genericSetNodeStyle@DW@OSY4965850@DW@0|0|0|0@DW@height@DW@27px@DX@genericSetNodeStyle@DW@OSY4965850@DW@0|0|0|0@DW@top@DW@49.999%@DX@genericSetNodeStyle@DW@OSY4965850@DW@0|0|0|0@DW@margin-top@DW@-12px@DX@genericRemoveNodeStyle@DW@OSY4965850@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@OSY4965850@DW@0|0|0|0@DW@width@DW@27px@DX@genericSetNodeStyle@DW@OSY4965850@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@OSY4965850@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericRemoveNodeStyle@DW@OSY4965850@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@ALA4965851@DW@0|0@DW@width@DW@24px@DX@genericRemoveNodeStyle@DW@ALA4965851@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@ALA4965851@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@ALA4965851@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@ALA4965851@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@ALA4965851@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@ALA4965851@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@ALA4965851@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@ALA4965851@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@ALA4965851@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@ALA4965851@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@ALA4965851@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@ALA4965851@DW@0|0|0@DW@width@DW@24px@DX@genericSetNodeStyle@DW@ALA4965851@DW@0|0|0|0@DW@height@DW@16px@DX@genericSetNodeStyle@DW@ALA4965851@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@ALA4965851@DW@0|0|0|0@DW@margin-top@DW@-8px@DX@genericRemoveNodeStyle@DW@ALA4965851@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@ALA4965851@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@ALA4965851@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@ALA4965851@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@ALA4965851@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@ALA4965851@DW@0|0|0|0@DW@width@DX@setStyle@DW@KRI4965851@DW@padding-top@DW@0px@DX@genericSetNodeStyle@DW@EIF4965851@DW@0|0@DW@width@DW@38px@DX@genericRemoveNodeStyle@DW@EIF4965851@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@EIF4965851@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@EIF4965851@DW@0|0@DW@height@DW@38px@DX@genericRemoveNodeStyle@DW@EIF4965851@DW@0|0@DW@bottom@DX@genericSetNodeStyle@DW@EIF4965851@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@EIF4965851@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@EIF4965851@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@EIF4965851@DW@0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@EIF4965851@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@EIF4965851@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@EIF4965851@DW@0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@EIF4965851@DW@0|0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@EIF4965851@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@EIF4965851@DW@0|0|0|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@EIF4965851@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@EIF4965851@DW@0|0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@EIF4965851@DW@0|0|0|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@EIF4965851@DW@0|0|0|0@DW@margin-left@DW@-19px@DX@genericRemoveNodeStyle@DW@EIF4965851@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@BGF4965862@DW@0|0@DW@width@DW@76px@DX@genericRemoveNodeStyle@DW@BGF4965862@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@BGF4965862@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@BGF4965862@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@BGF4965862@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@BGF4965862@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@BGF4965862@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@BGF4965862@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@BGF4965862@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@BGF4965862@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@BGF4965862@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@BGF4965862@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@BGF4965862@DW@0|0|0@DW@width@DW@0px@DX@genericSetNodeStyle@DW@BGF4965862@DW@0|0|0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@BGF4965862@DW@0|0|0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@BGF4965862@DW@0|0|0|0@DW@margin-top@DW@0px@DX@genericSetNodeStyle@DW@BGF4965862@DW@0|0|0|0@DW@margin-bottom@DW@0px@DX@genericRemoveNodeStyle@DW@BGF4965862@DW@0|0|0|0@DW@height@DX@genericSetNodeStyle@DW@BGF4965862@DW@0|0|0|0@DW@width@DW@1px@DX@genericSetNodeStyle@DW@BGF4965862@DW@0|0|0|0@DW@left@DW@49.999%@DX@genericSetNodeStyle@DW@BGF4965862@DW@0|0|0|0@DW@margin-left@DW@-2px@DX@genericRemoveNodeStyle@DW@BGF4965862@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@BGF4965862@DW@0|0|1@DW@top@DW@0px@DX@genericSetNodeStyle@DW@BGF4965862@DW@0|0|1@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@BGF4965862@DW@0|0|1@DW@height@DX@genericSetNodeStyle@DW@BGF4965862@DW@0|0|1@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@BGF4965862@DW@0|0|1@DW@right@DX@genericSetNodeStyle@DW@BGF4965862@DW@0|0|1@DW@width@DW@76px@DX@genericSetNodeStyle@DW@BGF4965862@DW@0|0|1|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@BGF4965862@DW@0|0|1|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@BGF4965862@DW@0|0|1|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@BGF4965862@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@BGF4965862@DW@0|0|1|0@DW@width@DW@46px@DX@genericSetNodeStyle@DW@BGF4965862@DW@0|0|1|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@BGF4965862@DW@0|0|1|0@DW@margin-left@DW@10px@DX@genericRemoveNodeStyle@DW@BGF4965862@DW@0|0|1|0@DW@right@DX@genericSetNodeStyle@DW@NBN4965851@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@NBN4965851@DW@0|0@DW@right@DW@0@DX@genericRemoveNodeStyle@DW@NBN4965851@DW@0|0@DW@margin-left@DX@genericRemoveNodeStyle@DW@NBN4965851@DW@0|0@DW@width@DX@genericSetNodeStyle@DW@NBN4965851@DW@0|0@DW@height@DW@30px@DX@genericSetNodeStyle@DW@NBN4965851@DW@0|0@DW@margin-top@DW@-15px@DX@genericSetNodeStyle@DW@NBN4965851@DW@0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@NBN4965851@DW@0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@NBN4965851@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@NBN4965851@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@NBN4965851@DW@0|0|0@DW@height@DW@30px@DX@genericSetNodeStyle@DW@NBN4965851@DW@0|0|0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@NBN4965851@DW@0|0|0@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@NBN4965851@DW@0|0|0@DW@width@DX@genericSetNodeStyle@DW@NBN4965851@DW@0|0|0|0@DW@height@DW@27px@DX@genericSetNodeStyle@DW@NBN4965851@DW@0|0|0|0@DW@top@DW@49.999%@DX@genericSetNodeStyle@DW@NBN4965851@DW@0|0|0|0@DW@margin-top@DW@-12px@DX@genericRemoveNodeStyle@DW@NBN4965851@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@NBN4965851@DW@0|0|0|0@DW@width@DW@27px@DX@genericSetNodeStyle@DW@NBN4965851@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@NBN4965851@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericRemoveNodeStyle@DW@NBN4965851@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@OYW4965851@DW@0|0@DW@width@DW@24px@DX@genericRemoveNodeStyle@DW@OYW4965851@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@OYW4965851@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@OYW4965851@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@OYW4965851@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@OYW4965851@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@OYW4965851@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@OYW4965851@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@OYW4965851@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@OYW4965851@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@OYW4965851@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@OYW4965851@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@OYW4965851@DW@0|0|0@DW@width@DW@24px@DX@genericSetNodeStyle@DW@OYW4965851@DW@0|0|0|0@DW@height@DW@16px@DX@genericSetNodeStyle@DW@OYW4965851@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@OYW4965851@DW@0|0|0|0@DW@margin-top@DW@-8px@DX@genericRemoveNodeStyle@DW@OYW4965851@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@OYW4965851@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@OYW4965851@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@OYW4965851@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@OYW4965851@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@OYW4965851@DW@0|0|0|0@DW@width@DX@setStyle@DW@KDY4965851@DW@padding-top@DW@0px@DX@genericSetNodeStyle@DW@ELQ4965851@DW@0|0@DW@width@DW@38px@DX@genericRemoveNodeStyle@DW@ELQ4965851@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@ELQ4965851@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@ELQ4965851@DW@0|0@DW@height@DW@38px@DX@genericRemoveNodeStyle@DW@ELQ4965851@DW@0|0@DW@bottom@DX@genericSetNodeStyle@DW@ELQ4965851@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@ELQ4965851@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@ELQ4965851@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@ELQ4965851@DW@0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@ELQ4965851@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@ELQ4965851@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@ELQ4965851@DW@0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@ELQ4965851@DW@0|0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@ELQ4965851@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@ELQ4965851@DW@0|0|0|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@ELQ4965851@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@ELQ4965851@DW@0|0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@ELQ4965851@DW@0|0|0|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@ELQ4965851@DW@0|0|0|0@DW@margin-left@DW@-19px@DX@genericRemoveNodeStyle@DW@ELQ4965851@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@TUG4965862@DW@0|0@DW@width@DW@76px@DX@genericRemoveNodeStyle@DW@TUG4965862@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@TUG4965862@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@TUG4965862@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@TUG4965862@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@TUG4965862@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@TUG4965862@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@TUG4965862@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@TUG4965862@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@TUG4965862@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@TUG4965862@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@TUG4965862@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@TUG4965862@DW@0|0|0@DW@width@DW@0px@DX@genericSetNodeStyle@DW@TUG4965862@DW@0|0|0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@TUG4965862@DW@0|0|0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@TUG4965862@DW@0|0|0|0@DW@margin-top@DW@0px@DX@genericSetNodeStyle@DW@TUG4965862@DW@0|0|0|0@DW@margin-bottom@DW@0px@DX@genericRemoveNodeStyle@DW@TUG4965862@DW@0|0|0|0@DW@height@DX@genericSetNodeStyle@DW@TUG4965862@DW@0|0|0|0@DW@width@DW@1px@DX@genericSetNodeStyle@DW@TUG4965862@DW@0|0|0|0@DW@left@DW@49.999%@DX@genericSetNodeStyle@DW@TUG4965862@DW@0|0|0|0@DW@margin-left@DW@-2px@DX@genericRemoveNodeStyle@DW@TUG4965862@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@TUG4965862@DW@0|0|1@DW@top@DW@0px@DX@genericSetNodeStyle@DW@TUG4965862@DW@0|0|1@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@TUG4965862@DW@0|0|1@DW@height@DX@genericSetNodeStyle@DW@TUG4965862@DW@0|0|1@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@TUG4965862@DW@0|0|1@DW@right@DX@genericSetNodeStyle@DW@TUG4965862@DW@0|0|1@DW@width@DW@76px@DX@genericSetNodeStyle@DW@TUG4965862@DW@0|0|1|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@TUG4965862@DW@0|0|1|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@TUG4965862@DW@0|0|1|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@TUG4965862@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@TUG4965862@DW@0|0|1|0@DW@width@DW@46px@DX@genericSetNodeStyle@DW@TUG4965862@DW@0|0|1|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@TUG4965862@DW@0|0|1|0@DW@margin-left@DW@10px@DX@genericRemoveNodeStyle@DW@TUG4965862@DW@0|0|1|0@DW@right@DX@genericSetNodeStyle@DW@DTY4965852@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@DTY4965852@DW@0|0@DW@right@DW@0@DX@genericRemoveNodeStyle@DW@DTY4965852@DW@0|0@DW@margin-left@DX@genericRemoveNodeStyle@DW@DTY4965852@DW@0|0@DW@width@DX@genericSetNodeStyle@DW@DTY4965852@DW@0|0@DW@height@DW@30px@DX@genericSetNodeStyle@DW@DTY4965852@DW@0|0@DW@margin-top@DW@-15px@DX@genericSetNodeStyle@DW@DTY4965852@DW@0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@DTY4965852@DW@0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@DTY4965852@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@DTY4965852@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@DTY4965852@DW@0|0|0@DW@height@DW@30px@DX@genericSetNodeStyle@DW@DTY4965852@DW@0|0|0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@DTY4965852@DW@0|0|0@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@DTY4965852@DW@0|0|0@DW@width@DX@genericSetNodeStyle@DW@DTY4965852@DW@0|0|0|0@DW@height@DW@27px@DX@genericSetNodeStyle@DW@DTY4965852@DW@0|0|0|0@DW@top@DW@49.999%@DX@genericSetNodeStyle@DW@DTY4965852@DW@0|0|0|0@DW@margin-top@DW@-12px@DX@genericRemoveNodeStyle@DW@DTY4965852@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@DTY4965852@DW@0|0|0|0@DW@width@DW@27px@DX@genericSetNodeStyle@DW@DTY4965852@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@DTY4965852@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericRemoveNodeStyle@DW@DTY4965852@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@KGJ4965852@DW@0|0@DW@width@DW@24px@DX@genericRemoveNodeStyle@DW@KGJ4965852@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@KGJ4965852@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@KGJ4965852@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@KGJ4965852@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@KGJ4965852@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@KGJ4965852@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@KGJ4965852@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@KGJ4965852@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@KGJ4965852@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@KGJ4965852@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@KGJ4965852@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@KGJ4965852@DW@0|0|0@DW@width@DW@24px@DX@genericSetNodeStyle@DW@KGJ4965852@DW@0|0|0|0@DW@height@DW@16px@DX@genericSetNodeStyle@DW@KGJ4965852@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@KGJ4965852@DW@0|0|0|0@DW@margin-top@DW@-8px@DX@genericRemoveNodeStyle@DW@KGJ4965852@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@KGJ4965852@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@KGJ4965852@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@KGJ4965852@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@KGJ4965852@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@KGJ4965852@DW@0|0|0|0@DW@width@DX@setStyle@DW@XIQ4965852@DW@padding-top@DW@0px@DX@genericSetNodeStyle@DW@IDS4965852@DW@0|0@DW@width@DW@38px@DX@genericRemoveNodeStyle@DW@IDS4965852@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@IDS4965852@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@IDS4965852@DW@0|0@DW@height@DW@38px@DX@genericRemoveNodeStyle@DW@IDS4965852@DW@0|0@DW@bottom@DX@genericSetNodeStyle@DW@IDS4965852@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@IDS4965852@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@IDS4965852@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@IDS4965852@DW@0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@IDS4965852@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@IDS4965852@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@IDS4965852@DW@0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@IDS4965852@DW@0|0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@IDS4965852@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@IDS4965852@DW@0|0|0|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@IDS4965852@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@IDS4965852@DW@0|0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@IDS4965852@DW@0|0|0|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@IDS4965852@DW@0|0|0|0@DW@margin-left@DW@-19px@DX@genericRemoveNodeStyle@DW@IDS4965852@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@TUW4965862@DW@0|0@DW@width@DW@76px@DX@genericRemoveNodeStyle@DW@TUW4965862@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@TUW4965862@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@TUW4965862@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@TUW4965862@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@TUW4965862@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@TUW4965862@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@TUW4965862@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@TUW4965862@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@TUW4965862@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@TUW4965862@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@TUW4965862@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@TUW4965862@DW@0|0|0@DW@width@DW@0px@DX@genericSetNodeStyle@DW@TUW4965862@DW@0|0|0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@TUW4965862@DW@0|0|0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@TUW4965862@DW@0|0|0|0@DW@margin-top@DW@0px@DX@genericSetNodeStyle@DW@TUW4965862@DW@0|0|0|0@DW@margin-bottom@DW@0px@DX@genericRemoveNodeStyle@DW@TUW4965862@DW@0|0|0|0@DW@height@DX@genericSetNodeStyle@DW@TUW4965862@DW@0|0|0|0@DW@width@DW@1px@DX@genericSetNodeStyle@DW@TUW4965862@DW@0|0|0|0@DW@left@DW@49.999%@DX@genericSetNodeStyle@DW@TUW4965862@DW@0|0|0|0@DW@margin-left@DW@-2px@DX@genericRemoveNodeStyle@DW@TUW4965862@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@TUW4965862@DW@0|0|1@DW@top@DW@0px@DX@genericSetNodeStyle@DW@TUW4965862@DW@0|0|1@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@TUW4965862@DW@0|0|1@DW@height@DX@genericSetNodeStyle@DW@TUW4965862@DW@0|0|1@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@TUW4965862@DW@0|0|1@DW@right@DX@genericSetNodeStyle@DW@TUW4965862@DW@0|0|1@DW@width@DW@76px@DX@genericSetNodeStyle@DW@TUW4965862@DW@0|0|1|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@TUW4965862@DW@0|0|1|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@TUW4965862@DW@0|0|1|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@TUW4965862@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@TUW4965862@DW@0|0|1|0@DW@width@DW@46px@DX@genericSetNodeStyle@DW@TUW4965862@DW@0|0|1|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@TUW4965862@DW@0|0|1|0@DW@margin-left@DW@10px@DX@genericRemoveNodeStyle@DW@TUW4965862@DW@0|0|1|0@DW@right@DX@genericSetNodeStyle@DW@OEG4965852@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@OEG4965852@DW@0|0@DW@right@DW@0@DX@genericRemoveNodeStyle@DW@OEG4965852@DW@0|0@DW@margin-left@DX@genericRemoveNodeStyle@DW@OEG4965852@DW@0|0@DW@width@DX@genericSetNodeStyle@DW@OEG4965852@DW@0|0@DW@height@DW@30px@DX@genericSetNodeStyle@DW@OEG4965852@DW@0|0@DW@margin-top@DW@-15px@DX@genericSetNodeStyle@DW@OEG4965852@DW@0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@OEG4965852@DW@0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@OEG4965852@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@OEG4965852@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@OEG4965852@DW@0|0|0@DW@height@DW@30px@DX@genericSetNodeStyle@DW@OEG4965852@DW@0|0|0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@OEG4965852@DW@0|0|0@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@OEG4965852@DW@0|0|0@DW@width@DX@genericSetNodeStyle@DW@OEG4965852@DW@0|0|0|0@DW@height@DW@27px@DX@genericSetNodeStyle@DW@OEG4965852@DW@0|0|0|0@DW@top@DW@49.999%@DX@genericSetNodeStyle@DW@OEG4965852@DW@0|0|0|0@DW@margin-top@DW@-12px@DX@genericRemoveNodeStyle@DW@OEG4965852@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@OEG4965852@DW@0|0|0|0@DW@width@DW@27px@DX@genericSetNodeStyle@DW@OEG4965852@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@OEG4965852@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericRemoveNodeStyle@DW@OEG4965852@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@OSN4965853@DW@0|0@DW@width@DW@24px@DX@genericRemoveNodeStyle@DW@OSN4965853@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@OSN4965853@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@OSN4965853@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@OSN4965853@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@OSN4965853@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@OSN4965853@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@OSN4965853@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@OSN4965853@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@OSN4965853@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@OSN4965853@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@OSN4965853@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@OSN4965853@DW@0|0|0@DW@width@DW@24px@DX@genericSetNodeStyle@DW@OSN4965853@DW@0|0|0|0@DW@height@DW@16px@DX@genericSetNodeStyle@DW@OSN4965853@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@OSN4965853@DW@0|0|0|0@DW@margin-top@DW@-8px@DX@genericRemoveNodeStyle@DW@OSN4965853@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@OSN4965853@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@OSN4965853@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@OSN4965853@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@OSN4965853@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@OSN4965853@DW@0|0|0|0@DW@width@DX@setStyle@DW@ICP4965853@DW@padding-top@DW@0px@DX@genericSetNodeStyle@DW@OQR4965853@DW@0|0@DW@width@DW@38px@DX@genericRemoveNodeStyle@DW@OQR4965853@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@OQR4965853@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@OQR4965853@DW@0|0@DW@height@DW@38px@DX@genericRemoveNodeStyle@DW@OQR4965853@DW@0|0@DW@bottom@DX@genericSetNodeStyle@DW@OQR4965853@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@OQR4965853@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@OQR4965853@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@OQR4965853@DW@0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@OQR4965853@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@OQR4965853@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@OQR4965853@DW@0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@OQR4965853@DW@0|0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@OQR4965853@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@OQR4965853@DW@0|0|0|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@OQR4965853@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@OQR4965853@DW@0|0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@OQR4965853@DW@0|0|0|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@OQR4965853@DW@0|0|0|0@DW@margin-left@DW@-19px@DX@genericRemoveNodeStyle@DW@OQR4965853@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@XLC4965862@DW@0|0@DW@width@DW@76px@DX@genericRemoveNodeStyle@DW@XLC4965862@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@XLC4965862@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@XLC4965862@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@XLC4965862@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@XLC4965862@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@XLC4965862@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@XLC4965862@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@XLC4965862@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@XLC4965862@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@XLC4965862@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@XLC4965862@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@XLC4965862@DW@0|0|0@DW@width@DW@0px@DX@genericSetNodeStyle@DW@XLC4965862@DW@0|0|0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@XLC4965862@DW@0|0|0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@XLC4965862@DW@0|0|0|0@DW@margin-top@DW@0px@DX@genericSetNodeStyle@DW@XLC4965862@DW@0|0|0|0@DW@margin-bottom@DW@0px@DX@genericRemoveNodeStyle@DW@XLC4965862@DW@0|0|0|0@DW@height@DX@genericSetNodeStyle@DW@XLC4965862@DW@0|0|0|0@DW@width@DW@1px@DX@genericSetNodeStyle@DW@XLC4965862@DW@0|0|0|0@DW@left@DW@49.999%@DX@genericSetNodeStyle@DW@XLC4965862@DW@0|0|0|0@DW@margin-left@DW@-2px@DX@genericRemoveNodeStyle@DW@XLC4965862@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@XLC4965862@DW@0|0|1@DW@top@DW@0px@DX@genericSetNodeStyle@DW@XLC4965862@DW@0|0|1@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@XLC4965862@DW@0|0|1@DW@height@DX@genericSetNodeStyle@DW@XLC4965862@DW@0|0|1@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@XLC4965862@DW@0|0|1@DW@right@DX@genericSetNodeStyle@DW@XLC4965862@DW@0|0|1@DW@width@DW@76px@DX@genericSetNodeStyle@DW@XLC4965862@DW@0|0|1|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@XLC4965862@DW@0|0|1|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@XLC4965862@DW@0|0|1|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@XLC4965862@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@XLC4965862@DW@0|0|1|0@DW@width@DW@46px@DX@genericSetNodeStyle@DW@XLC4965862@DW@0|0|1|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@XLC4965862@DW@0|0|1|0@DW@margin-left@DW@10px@DX@genericRemoveNodeStyle@DW@XLC4965862@DW@0|0|1|0@DW@right@DX@genericSetNodeStyle@DW@BAB4965853@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@BAB4965853@DW@0|0@DW@right@DW@0@DX@genericRemoveNodeStyle@DW@BAB4965853@DW@0|0@DW@margin-left@DX@genericRemoveNodeStyle@DW@BAB4965853@DW@0|0@DW@width@DX@genericSetNodeStyle@DW@BAB4965853@DW@0|0@DW@height@DW@30px@DX@genericSetNodeStyle@DW@BAB4965853@DW@0|0@DW@margin-top@DW@-15px@DX@genericSetNodeStyle@DW@BAB4965853@DW@0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@BAB4965853@DW@0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@BAB4965853@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@BAB4965853@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@BAB4965853@DW@0|0|0@DW@height@DW@30px@DX@genericSetNodeStyle@DW@BAB4965853@DW@0|0|0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@BAB4965853@DW@0|0|0@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@BAB4965853@DW@0|0|0@DW@width@DX@genericSetNodeStyle@DW@BAB4965853@DW@0|0|0|0@DW@height@DW@27px@DX@genericSetNodeStyle@DW@BAB4965853@DW@0|0|0|0@DW@top@DW@49.999%@DX@genericSetNodeStyle@DW@BAB4965853@DW@0|0|0|0@DW@margin-top@DW@-12px@DX@genericRemoveNodeStyle@DW@BAB4965853@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@BAB4965853@DW@0|0|0|0@DW@width@DW@27px@DX@genericSetNodeStyle@DW@BAB4965853@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@BAB4965853@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericRemoveNodeStyle@DW@BAB4965853@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@OYH4965854@DW@0|0@DW@width@DW@24px@DX@genericRemoveNodeStyle@DW@OYH4965854@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@OYH4965854@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@OYH4965854@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@OYH4965854@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@OYH4965854@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@OYH4965854@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@OYH4965854@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@OYH4965854@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@OYH4965854@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@OYH4965854@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@OYH4965854@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@OYH4965854@DW@0|0|0@DW@width@DW@24px@DX@genericSetNodeStyle@DW@OYH4965854@DW@0|0|0|0@DW@height@DW@16px@DX@genericSetNodeStyle@DW@OYH4965854@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@OYH4965854@DW@0|0|0|0@DW@margin-top@DW@-8px@DX@genericRemoveNodeStyle@DW@OYH4965854@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@OYH4965854@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@OYH4965854@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@OYH4965854@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@OYH4965854@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@OYH4965854@DW@0|0|0|0@DW@width@DX@setStyle@DW@KTP4965854@DW@padding-top@DW@0px@DX@genericSetNodeStyle@DW@FND4965854@DW@0|0@DW@width@DW@38px@DX@genericRemoveNodeStyle@DW@FND4965854@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@FND4965854@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@FND4965854@DW@0|0@DW@height@DW@38px@DX@genericRemoveNodeStyle@DW@FND4965854@DW@0|0@DW@bottom@DX@genericSetNodeStyle@DW@FND4965854@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@FND4965854@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@FND4965854@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@FND4965854@DW@0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@FND4965854@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@FND4965854@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@FND4965854@DW@0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@FND4965854@DW@0|0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@FND4965854@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@FND4965854@DW@0|0|0|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@FND4965854@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@FND4965854@DW@0|0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@FND4965854@DW@0|0|0|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@FND4965854@DW@0|0|0|0@DW@margin-left@DW@-19px@DX@genericRemoveNodeStyle@DW@FND4965854@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@CHU4965862@DW@0|0@DW@width@DW@76px@DX@genericRemoveNodeStyle@DW@CHU4965862@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@CHU4965862@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@CHU4965862@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@CHU4965862@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@CHU4965862@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@CHU4965862@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@CHU4965862@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@CHU4965862@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@CHU4965862@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@CHU4965862@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@CHU4965862@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@CHU4965862@DW@0|0|0@DW@width@DW@0px@DX@genericSetNodeStyle@DW@CHU4965862@DW@0|0|0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@CHU4965862@DW@0|0|0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@CHU4965862@DW@0|0|0|0@DW@margin-top@DW@0px@DX@genericSetNodeStyle@DW@CHU4965862@DW@0|0|0|0@DW@margin-bottom@DW@0px@DX@genericRemoveNodeStyle@DW@CHU4965862@DW@0|0|0|0@DW@height@DX@genericSetNodeStyle@DW@CHU4965862@DW@0|0|0|0@DW@width@DW@1px@DX@genericSetNodeStyle@DW@CHU4965862@DW@0|0|0|0@DW@left@DW@49.999%@DX@genericSetNodeStyle@DW@CHU4965862@DW@0|0|0|0@DW@margin-left@DW@-2px@DX@genericRemoveNodeStyle@DW@CHU4965862@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@CHU4965862@DW@0|0|1@DW@top@DW@0px@DX@genericSetNodeStyle@DW@CHU4965862@DW@0|0|1@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@CHU4965862@DW@0|0|1@DW@height@DX@genericSetNodeStyle@DW@CHU4965862@DW@0|0|1@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@CHU4965862@DW@0|0|1@DW@right@DX@genericSetNodeStyle@DW@CHU4965862@DW@0|0|1@DW@width@DW@76px@DX@genericSetNodeStyle@DW@CHU4965862@DW@0|0|1|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@CHU4965862@DW@0|0|1|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@CHU4965862@DW@0|0|1|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@CHU4965862@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@CHU4965862@DW@0|0|1|0@DW@width@DW@46px@DX@genericSetNodeStyle@DW@CHU4965862@DW@0|0|1|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@CHU4965862@DW@0|0|1|0@DW@margin-left@DW@10px@DX@genericRemoveNodeStyle@DW@CHU4965862@DW@0|0|1|0@DW@right@DX@genericSetNodeStyle@DW@KGJ4965854@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@KGJ4965854@DW@0|0@DW@right@DW@0@DX@genericRemoveNodeStyle@DW@KGJ4965854@DW@0|0@DW@margin-left@DX@genericRemoveNodeStyle@DW@KGJ4965854@DW@0|0@DW@width@DX@genericSetNodeStyle@DW@KGJ4965854@DW@0|0@DW@height@DW@30px@DX@genericSetNodeStyle@DW@KGJ4965854@DW@0|0@DW@margin-top@DW@-15px@DX@genericSetNodeStyle@DW@KGJ4965854@DW@0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@KGJ4965854@DW@0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@KGJ4965854@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@KGJ4965854@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@KGJ4965854@DW@0|0|0@DW@height@DW@30px@DX@genericSetNodeStyle@DW@KGJ4965854@DW@0|0|0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@KGJ4965854@DW@0|0|0@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@KGJ4965854@DW@0|0|0@DW@width@DX@genericSetNodeStyle@DW@KGJ4965854@DW@0|0|0|0@DW@height@DW@27px@DX@genericSetNodeStyle@DW@KGJ4965854@DW@0|0|0|0@DW@top@DW@49.999%@DX@genericSetNodeStyle@DW@KGJ4965854@DW@0|0|0|0@DW@margin-top@DW@-12px@DX@genericRemoveNodeStyle@DW@KGJ4965854@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@KGJ4965854@DW@0|0|0|0@DW@width@DW@27px@DX@genericSetNodeStyle@DW@KGJ4965854@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@KGJ4965854@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericRemoveNodeStyle@DW@KGJ4965854@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@ACH4965855@DW@0|0@DW@width@DW@24px@DX@genericRemoveNodeStyle@DW@ACH4965855@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@ACH4965855@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@ACH4965855@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@ACH4965855@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@ACH4965855@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@ACH4965855@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@ACH4965855@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@ACH4965855@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@ACH4965855@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@ACH4965855@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@ACH4965855@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@ACH4965855@DW@0|0|0@DW@width@DW@24px@DX@genericSetNodeStyle@DW@ACH4965855@DW@0|0|0|0@DW@height@DW@16px@DX@genericSetNodeStyle@DW@ACH4965855@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@ACH4965855@DW@0|0|0|0@DW@margin-top@DW@-8px@DX@genericRemoveNodeStyle@DW@ACH4965855@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@ACH4965855@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@ACH4965855@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@ACH4965855@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@ACH4965855@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@ACH4965855@DW@0|0|0|0@DW@width@DX@setStyle@DW@MGO4965855@DW@padding-top@DW@0px@DX@genericSetNodeStyle@DW@VUQ4965855@DW@0|0@DW@width@DW@38px@DX@genericRemoveNodeStyle@DW@VUQ4965855@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@VUQ4965855@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@VUQ4965855@DW@0|0@DW@height@DW@38px@DX@genericRemoveNodeStyle@DW@VUQ4965855@DW@0|0@DW@bottom@DX@genericSetNodeStyle@DW@VUQ4965855@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@VUQ4965855@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@VUQ4965855@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@VUQ4965855@DW@0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@VUQ4965855@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@VUQ4965855@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@VUQ4965855@DW@0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@VUQ4965855@DW@0|0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@VUQ4965855@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@VUQ4965855@DW@0|0|0|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@VUQ4965855@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@VUQ4965855@DW@0|0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@VUQ4965855@DW@0|0|0|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@VUQ4965855@DW@0|0|0|0@DW@margin-left@DW@-19px@DX@genericRemoveNodeStyle@DW@VUQ4965855@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@TXS4965862@DW@0|0@DW@width@DW@76px@DX@genericRemoveNodeStyle@DW@TXS4965862@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@TXS4965862@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@TXS4965862@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@TXS4965862@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@TXS4965862@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@TXS4965862@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@TXS4965862@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@TXS4965862@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@TXS4965862@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@TXS4965862@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@TXS4965862@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@TXS4965862@DW@0|0|0@DW@width@DW@0px@DX@genericSetNodeStyle@DW@TXS4965862@DW@0|0|0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@TXS4965862@DW@0|0|0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@TXS4965862@DW@0|0|0|0@DW@margin-top@DW@0px@DX@genericSetNodeStyle@DW@TXS4965862@DW@0|0|0|0@DW@margin-bottom@DW@0px@DX@genericRemoveNodeStyle@DW@TXS4965862@DW@0|0|0|0@DW@height@DX@genericSetNodeStyle@DW@TXS4965862@DW@0|0|0|0@DW@width@DW@1px@DX@genericSetNodeStyle@DW@TXS4965862@DW@0|0|0|0@DW@left@DW@49.999%@DX@genericSetNodeStyle@DW@TXS4965862@DW@0|0|0|0@DW@margin-left@DW@-2px@DX@genericRemoveNodeStyle@DW@TXS4965862@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@TXS4965862@DW@0|0|1@DW@top@DW@0px@DX@genericSetNodeStyle@DW@TXS4965862@DW@0|0|1@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@TXS4965862@DW@0|0|1@DW@height@DX@genericSetNodeStyle@DW@TXS4965862@DW@0|0|1@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@TXS4965862@DW@0|0|1@DW@right@DX@genericSetNodeStyle@DW@TXS4965862@DW@0|0|1@DW@width@DW@76px@DX@genericSetNodeStyle@DW@TXS4965862@DW@0|0|1|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@TXS4965862@DW@0|0|1|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@TXS4965862@DW@0|0|1|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@TXS4965862@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@TXS4965862@DW@0|0|1|0@DW@width@DW@46px@DX@genericSetNodeStyle@DW@TXS4965862@DW@0|0|1|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@TXS4965862@DW@0|0|1|0@DW@margin-left@DW@10px@DX@genericRemoveNodeStyle@DW@TXS4965862@DW@0|0|1|0@DW@right@DX@genericSetNodeStyle@DW@KTQ4965855@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@KTQ4965855@DW@0|0@DW@right@DW@0@DX@genericRemoveNodeStyle@DW@KTQ4965855@DW@0|0@DW@margin-left@DX@genericRemoveNodeStyle@DW@KTQ4965855@DW@0|0@DW@width@DX@genericSetNodeStyle@DW@KTQ4965855@DW@0|0@DW@height@DW@30px@DX@genericSetNodeStyle@DW@KTQ4965855@DW@0|0@DW@margin-top@DW@-15px@DX@genericSetNodeStyle@DW@KTQ4965855@DW@0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@KTQ4965855@DW@0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@KTQ4965855@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@KTQ4965855@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@KTQ4965855@DW@0|0|0@DW@height@DW@30px@DX@genericSetNodeStyle@DW@KTQ4965855@DW@0|0|0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@KTQ4965855@DW@0|0|0@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@KTQ4965855@DW@0|0|0@DW@width@DX@genericSetNodeStyle@DW@KTQ4965855@DW@0|0|0|0@DW@height@DW@27px@DX@genericSetNodeStyle@DW@KTQ4965855@DW@0|0|0|0@DW@top@DW@49.999%@DX@genericSetNodeStyle@DW@KTQ4965855@DW@0|0|0|0@DW@margin-top@DW@-12px@DX@genericRemoveNodeStyle@DW@KTQ4965855@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@KTQ4965855@DW@0|0|0|0@DW@width@DW@27px@DX@genericSetNodeStyle@DW@KTQ4965855@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@KTQ4965855@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericRemoveNodeStyle@DW@KTQ4965855@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@WKV4965856@DW@0|0@DW@width@DW@24px@DX@genericRemoveNodeStyle@DW@WKV4965856@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@WKV4965856@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@WKV4965856@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@WKV4965856@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@WKV4965856@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@WKV4965856@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@WKV4965856@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@WKV4965856@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@WKV4965856@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@WKV4965856@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@WKV4965856@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@WKV4965856@DW@0|0|0@DW@width@DW@24px@DX@genericSetNodeStyle@DW@WKV4965856@DW@0|0|0|0@DW@height@DW@16px@DX@genericSetNodeStyle@DW@WKV4965856@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@WKV4965856@DW@0|0|0|0@DW@margin-top@DW@-8px@DX@genericRemoveNodeStyle@DW@WKV4965856@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@WKV4965856@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@WKV4965856@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@WKV4965856@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@WKV4965856@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@WKV4965856@DW@0|0|0|0@DW@width@DX@setStyle@DW@HVQ4965856@DW@padding-top@DW@0px@DX@genericSetNodeStyle@DW@DYM4965856@DW@0|0@DW@width@DW@38px@DX@genericRemoveNodeStyle@DW@DYM4965856@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@DYM4965856@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@DYM4965856@DW@0|0@DW@height@DW@38px@DX@genericRemoveNodeStyle@DW@DYM4965856@DW@0|0@DW@bottom@DX@genericSetNodeStyle@DW@DYM4965856@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@DYM4965856@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@DYM4965856@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@DYM4965856@DW@0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@DYM4965856@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@DYM4965856@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@DYM4965856@DW@0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@DYM4965856@DW@0|0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@DYM4965856@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@DYM4965856@DW@0|0|0|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@DYM4965856@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@DYM4965856@DW@0|0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@DYM4965856@DW@0|0|0|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@DYM4965856@DW@0|0|0|0@DW@margin-left@DW@-19px@DX@genericRemoveNodeStyle@DW@DYM4965856@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@NCG4965862@DW@0|0@DW@width@DW@76px@DX@genericRemoveNodeStyle@DW@NCG4965862@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@NCG4965862@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@NCG4965862@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@NCG4965862@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@NCG4965862@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@NCG4965862@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@NCG4965862@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@NCG4965862@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@NCG4965862@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@NCG4965862@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@NCG4965862@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@NCG4965862@DW@0|0|0@DW@width@DW@0px@DX@genericSetNodeStyle@DW@NCG4965862@DW@0|0|0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@NCG4965862@DW@0|0|0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@NCG4965862@DW@0|0|0|0@DW@margin-top@DW@0px@DX@genericSetNodeStyle@DW@NCG4965862@DW@0|0|0|0@DW@margin-bottom@DW@0px@DX@genericRemoveNodeStyle@DW@NCG4965862@DW@0|0|0|0@DW@height@DX@genericSetNodeStyle@DW@NCG4965862@DW@0|0|0|0@DW@width@DW@1px@DX@genericSetNodeStyle@DW@NCG4965862@DW@0|0|0|0@DW@left@DW@49.999%@DX@genericSetNodeStyle@DW@NCG4965862@DW@0|0|0|0@DW@margin-left@DW@-2px@DX@genericRemoveNodeStyle@DW@NCG4965862@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@NCG4965862@DW@0|0|1@DW@top@DW@0px@DX@genericSetNodeStyle@DW@NCG4965862@DW@0|0|1@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@NCG4965862@DW@0|0|1@DW@height@DX@genericSetNodeStyle@DW@NCG4965862@DW@0|0|1@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@NCG4965862@DW@0|0|1@DW@right@DX@genericSetNodeStyle@DW@NCG4965862@DW@0|0|1@DW@width@DW@76px@DX@genericSetNodeStyle@DW@NCG4965862@DW@0|0|1|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@NCG4965862@DW@0|0|1|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@NCG4965862@DW@0|0|1|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@NCG4965862@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@NCG4965862@DW@0|0|1|0@DW@width@DW@46px@DX@genericSetNodeStyle@DW@NCG4965862@DW@0|0|1|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@NCG4965862@DW@0|0|1|0@DW@margin-left@DW@10px@DX@genericRemoveNodeStyle@DW@NCG4965862@DW@0|0|1|0@DW@right@DX@genericSetNodeStyle@DW@MJB4965856@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@MJB4965856@DW@0|0@DW@right@DW@0@DX@genericRemoveNodeStyle@DW@MJB4965856@DW@0|0@DW@margin-left@DX@genericRemoveNodeStyle@DW@MJB4965856@DW@0|0@DW@width@DX@genericSetNodeStyle@DW@MJB4965856@DW@0|0@DW@height@DW@30px@DX@genericSetNodeStyle@DW@MJB4965856@DW@0|0@DW@margin-top@DW@-15px@DX@genericSetNodeStyle@DW@MJB4965856@DW@0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@MJB4965856@DW@0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@MJB4965856@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@MJB4965856@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@MJB4965856@DW@0|0|0@DW@height@DW@30px@DX@genericSetNodeStyle@DW@MJB4965856@DW@0|0|0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@MJB4965856@DW@0|0|0@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@MJB4965856@DW@0|0|0@DW@width@DX@genericSetNodeStyle@DW@MJB4965856@DW@0|0|0|0@DW@height@DW@27px@DX@genericSetNodeStyle@DW@MJB4965856@DW@0|0|0|0@DW@top@DW@49.999%@DX@genericSetNodeStyle@DW@MJB4965856@DW@0|0|0|0@DW@margin-top@DW@-12px@DX@genericRemoveNodeStyle@DW@MJB4965856@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@MJB4965856@DW@0|0|0|0@DW@width@DW@27px@DX@genericSetNodeStyle@DW@MJB4965856@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@MJB4965856@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericRemoveNodeStyle@DW@MJB4965856@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@WSD4965856@DW@0|0@DW@width@DW@24px@DX@genericRemoveNodeStyle@DW@WSD4965856@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@WSD4965856@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@WSD4965856@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@WSD4965856@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@WSD4965856@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@WSD4965856@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@WSD4965856@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@WSD4965856@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@WSD4965856@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@WSD4965856@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@WSD4965856@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@WSD4965856@DW@0|0|0@DW@width@DW@24px@DX@genericSetNodeStyle@DW@WSD4965856@DW@0|0|0|0@DW@height@DW@16px@DX@genericSetNodeStyle@DW@WSD4965856@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@WSD4965856@DW@0|0|0|0@DW@margin-top@DW@-8px@DX@genericRemoveNodeStyle@DW@WSD4965856@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@WSD4965856@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@WSD4965856@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@WSD4965856@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@WSD4965856@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@WSD4965856@DW@0|0|0|0@DW@width@DX@setStyle@DW@HAR4965857@DW@padding-top@DW@0px@DX@genericSetNodeStyle@DW@CJB4965857@DW@0|0@DW@width@DW@38px@DX@genericRemoveNodeStyle@DW@CJB4965857@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@CJB4965857@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@CJB4965857@DW@0|0@DW@height@DW@38px@DX@genericRemoveNodeStyle@DW@CJB4965857@DW@0|0@DW@bottom@DX@genericSetNodeStyle@DW@CJB4965857@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@CJB4965857@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@CJB4965857@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@CJB4965857@DW@0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@CJB4965857@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@CJB4965857@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@CJB4965857@DW@0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@CJB4965857@DW@0|0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@CJB4965857@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@CJB4965857@DW@0|0|0|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@CJB4965857@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@CJB4965857@DW@0|0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@CJB4965857@DW@0|0|0|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@CJB4965857@DW@0|0|0|0@DW@margin-left@DW@-19px@DX@genericRemoveNodeStyle@DW@CJB4965857@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@KUF4965862@DW@0|0@DW@width@DW@76px@DX@genericRemoveNodeStyle@DW@KUF4965862@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@KUF4965862@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@KUF4965862@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@KUF4965862@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@KUF4965862@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@KUF4965862@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@KUF4965862@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@KUF4965862@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@KUF4965862@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@KUF4965862@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@KUF4965862@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@KUF4965862@DW@0|0|0@DW@width@DW@0px@DX@genericSetNodeStyle@DW@KUF4965862@DW@0|0|0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@KUF4965862@DW@0|0|0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@KUF4965862@DW@0|0|0|0@DW@margin-top@DW@0px@DX@genericSetNodeStyle@DW@KUF4965862@DW@0|0|0|0@DW@margin-bottom@DW@0px@DX@genericRemoveNodeStyle@DW@KUF4965862@DW@0|0|0|0@DW@height@DX@genericSetNodeStyle@DW@KUF4965862@DW@0|0|0|0@DW@width@DW@1px@DX@genericSetNodeStyle@DW@KUF4965862@DW@0|0|0|0@DW@left@DW@49.999%@DX@genericSetNodeStyle@DW@KUF4965862@DW@0|0|0|0@DW@margin-left@DW@-2px@DX@genericRemoveNodeStyle@DW@KUF4965862@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@KUF4965862@DW@0|0|1@DW@top@DW@0px@DX@genericSetNodeStyle@DW@KUF4965862@DW@0|0|1@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@KUF4965862@DW@0|0|1@DW@height@DX@genericSetNodeStyle@DW@KUF4965862@DW@0|0|1@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@KUF4965862@DW@0|0|1@DW@right@DX@genericSetNodeStyle@DW@KUF4965862@DW@0|0|1@DW@width@DW@76px@DX@genericSetNodeStyle@DW@KUF4965862@DW@0|0|1|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@KUF4965862@DW@0|0|1|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@KUF4965862@DW@0|0|1|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@KUF4965862@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@KUF4965862@DW@0|0|1|0@DW@width@DW@46px@DX@genericSetNodeStyle@DW@KUF4965862@DW@0|0|1|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@KUF4965862@DW@0|0|1|0@DW@margin-left@DW@10px@DX@genericRemoveNodeStyle@DW@KUF4965862@DW@0|0|1|0@DW@right@DX@genericSetNodeStyle@DW@PHT4965857@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@PHT4965857@DW@0|0@DW@right@DW@0@DX@genericRemoveNodeStyle@DW@PHT4965857@DW@0|0@DW@margin-left@DX@genericRemoveNodeStyle@DW@PHT4965857@DW@0|0@DW@width@DX@genericSetNodeStyle@DW@PHT4965857@DW@0|0@DW@height@DW@30px@DX@genericSetNodeStyle@DW@PHT4965857@DW@0|0@DW@margin-top@DW@-15px@DX@genericSetNodeStyle@DW@PHT4965857@DW@0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@PHT4965857@DW@0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@PHT4965857@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@PHT4965857@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@PHT4965857@DW@0|0|0@DW@height@DW@30px@DX@genericSetNodeStyle@DW@PHT4965857@DW@0|0|0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@PHT4965857@DW@0|0|0@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@PHT4965857@DW@0|0|0@DW@width@DX@genericSetNodeStyle@DW@PHT4965857@DW@0|0|0|0@DW@height@DW@27px@DX@genericSetNodeStyle@DW@PHT4965857@DW@0|0|0|0@DW@top@DW@49.999%@DX@genericSetNodeStyle@DW@PHT4965857@DW@0|0|0|0@DW@margin-top@DW@-12px@DX@genericRemoveNodeStyle@DW@PHT4965857@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@PHT4965857@DW@0|0|0|0@DW@width@DW@27px@DX@genericSetNodeStyle@DW@PHT4965857@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@PHT4965857@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericRemoveNodeStyle@DW@PHT4965857@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@NVU4965857@DW@0|0@DW@width@DW@24px@DX@genericRemoveNodeStyle@DW@NVU4965857@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@NVU4965857@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@NVU4965857@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@NVU4965857@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@NVU4965857@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@NVU4965857@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@NVU4965857@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@NVU4965857@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@NVU4965857@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@NVU4965857@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@NVU4965857@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@NVU4965857@DW@0|0|0@DW@width@DW@24px@DX@genericSetNodeStyle@DW@NVU4965857@DW@0|0|0|0@DW@height@DW@16px@DX@genericSetNodeStyle@DW@NVU4965857@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@NVU4965857@DW@0|0|0|0@DW@margin-top@DW@-8px@DX@genericRemoveNodeStyle@DW@NVU4965857@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@NVU4965857@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@NVU4965857@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@NVU4965857@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@NVU4965857@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@NVU4965857@DW@0|0|0|0@DW@width@DX@setStyle@DW@CQH4965857@DW@padding-top@DW@0px@DX@genericSetNodeStyle@DW@PRX4965857@DW@0|0@DW@width@DW@38px@DX@genericRemoveNodeStyle@DW@PRX4965857@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@PRX4965857@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@PRX4965857@DW@0|0@DW@height@DW@38px@DX@genericRemoveNodeStyle@DW@PRX4965857@DW@0|0@DW@bottom@DX@genericSetNodeStyle@DW@PRX4965857@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@PRX4965857@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@PRX4965857@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@PRX4965857@DW@0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@PRX4965857@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@PRX4965857@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@PRX4965857@DW@0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@PRX4965857@DW@0|0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@PRX4965857@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@PRX4965857@DW@0|0|0|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@PRX4965857@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@PRX4965857@DW@0|0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@PRX4965857@DW@0|0|0|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@PRX4965857@DW@0|0|0|0@DW@margin-left@DW@-19px@DX@genericRemoveNodeStyle@DW@PRX4965857@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@ISJ4965862@DW@0|0@DW@width@DW@76px@DX@genericRemoveNodeStyle@DW@ISJ4965862@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@ISJ4965862@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@ISJ4965862@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@ISJ4965862@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@ISJ4965862@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@ISJ4965862@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@ISJ4965862@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@ISJ4965862@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@ISJ4965862@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@ISJ4965862@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@ISJ4965862@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@ISJ4965862@DW@0|0|0@DW@width@DW@0px@DX@genericSetNodeStyle@DW@ISJ4965862@DW@0|0|0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@ISJ4965862@DW@0|0|0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@ISJ4965862@DW@0|0|0|0@DW@margin-top@DW@0px@DX@genericSetNodeStyle@DW@ISJ4965862@DW@0|0|0|0@DW@margin-bottom@DW@0px@DX@genericRemoveNodeStyle@DW@ISJ4965862@DW@0|0|0|0@DW@height@DX@genericSetNodeStyle@DW@ISJ4965862@DW@0|0|0|0@DW@width@DW@1px@DX@genericSetNodeStyle@DW@ISJ4965862@DW@0|0|0|0@DW@left@DW@49.999%@DX@genericSetNodeStyle@DW@ISJ4965862@DW@0|0|0|0@DW@margin-left@DW@-2px@DX@genericRemoveNodeStyle@DW@ISJ4965862@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@ISJ4965862@DW@0|0|1@DW@top@DW@0px@DX@genericSetNodeStyle@DW@ISJ4965862@DW@0|0|1@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@ISJ4965862@DW@0|0|1@DW@height@DX@genericSetNodeStyle@DW@ISJ4965862@DW@0|0|1@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@ISJ4965862@DW@0|0|1@DW@right@DX@genericSetNodeStyle@DW@ISJ4965862@DW@0|0|1@DW@width@DW@76px@DX@genericSetNodeStyle@DW@ISJ4965862@DW@0|0|1|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@ISJ4965862@DW@0|0|1|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@ISJ4965862@DW@0|0|1|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@ISJ4965862@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@ISJ4965862@DW@0|0|1|0@DW@width@DW@46px@DX@genericSetNodeStyle@DW@ISJ4965862@DW@0|0|1|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@ISJ4965862@DW@0|0|1|0@DW@margin-left@DW@10px@DX@genericRemoveNodeStyle@DW@ISJ4965862@DW@0|0|1|0@DW@right@DX@genericSetNodeStyle@DW@IVT4965857@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@IVT4965857@DW@0|0@DW@right@DW@0@DX@genericRemoveNodeStyle@DW@IVT4965857@DW@0|0@DW@margin-left@DX@genericRemoveNodeStyle@DW@IVT4965857@DW@0|0@DW@width@DX@genericSetNodeStyle@DW@IVT4965857@DW@0|0@DW@height@DW@30px@DX@genericSetNodeStyle@DW@IVT4965857@DW@0|0@DW@margin-top@DW@-15px@DX@genericSetNodeStyle@DW@IVT4965857@DW@0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@IVT4965857@DW@0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@IVT4965857@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@IVT4965857@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@IVT4965857@DW@0|0|0@DW@height@DW@30px@DX@genericSetNodeStyle@DW@IVT4965857@DW@0|0|0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@IVT4965857@DW@0|0|0@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@IVT4965857@DW@0|0|0@DW@width@DX@genericSetNodeStyle@DW@IVT4965857@DW@0|0|0|0@DW@height@DW@27px@DX@genericSetNodeStyle@DW@IVT4965857@DW@0|0|0|0@DW@top@DW@49.999%@DX@genericSetNodeStyle@DW@IVT4965857@DW@0|0|0|0@DW@margin-top@DW@-12px@DX@genericRemoveNodeStyle@DW@IVT4965857@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@IVT4965857@DW@0|0|0|0@DW@width@DW@27px@DX@genericSetNodeStyle@DW@IVT4965857@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@IVT4965857@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericRemoveNodeStyle@DW@IVT4965857@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@OSV4965858@DW@0|0@DW@width@DW@24px@DX@genericRemoveNodeStyle@DW@OSV4965858@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@OSV4965858@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@OSV4965858@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@OSV4965858@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@OSV4965858@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@OSV4965858@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@OSV4965858@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@OSV4965858@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@OSV4965858@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@OSV4965858@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@OSV4965858@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@OSV4965858@DW@0|0|0@DW@width@DW@24px@DX@genericSetNodeStyle@DW@OSV4965858@DW@0|0|0|0@DW@height@DW@16px@DX@genericSetNodeStyle@DW@OSV4965858@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@OSV4965858@DW@0|0|0|0@DW@margin-top@DW@-8px@DX@genericRemoveNodeStyle@DW@OSV4965858@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@OSV4965858@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@OSV4965858@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@OSV4965858@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@OSV4965858@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@OSV4965858@DW@0|0|0|0@DW@width@DX@setStyle@DW@LLT4965858@DW@padding-top@DW@0px@DX@genericSetNodeStyle@DW@PIR4965858@DW@0|0@DW@width@DW@38px@DX@genericRemoveNodeStyle@DW@PIR4965858@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@PIR4965858@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@PIR4965858@DW@0|0@DW@height@DW@38px@DX@genericRemoveNodeStyle@DW@PIR4965858@DW@0|0@DW@bottom@DX@genericSetNodeStyle@DW@PIR4965858@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@PIR4965858@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@PIR4965858@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@PIR4965858@DW@0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@PIR4965858@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@PIR4965858@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@PIR4965858@DW@0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@PIR4965858@DW@0|0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@PIR4965858@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@PIR4965858@DW@0|0|0|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@PIR4965858@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@PIR4965858@DW@0|0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@PIR4965858@DW@0|0|0|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@PIR4965858@DW@0|0|0|0@DW@margin-left@DW@-19px@DX@genericRemoveNodeStyle@DW@PIR4965858@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@HEG4965862@DW@0|0@DW@width@DW@76px@DX@genericRemoveNodeStyle@DW@HEG4965862@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@HEG4965862@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@HEG4965862@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@HEG4965862@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@HEG4965862@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@HEG4965862@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@HEG4965862@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@HEG4965862@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@HEG4965862@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@HEG4965862@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@HEG4965862@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@HEG4965862@DW@0|0|0@DW@width@DW@0px@DX@genericSetNodeStyle@DW@HEG4965862@DW@0|0|0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@HEG4965862@DW@0|0|0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@HEG4965862@DW@0|0|0|0@DW@margin-top@DW@0px@DX@genericSetNodeStyle@DW@HEG4965862@DW@0|0|0|0@DW@margin-bottom@DW@0px@DX@genericRemoveNodeStyle@DW@HEG4965862@DW@0|0|0|0@DW@height@DX@genericSetNodeStyle@DW@HEG4965862@DW@0|0|0|0@DW@width@DW@1px@DX@genericSetNodeStyle@DW@HEG4965862@DW@0|0|0|0@DW@left@DW@49.999%@DX@genericSetNodeStyle@DW@HEG4965862@DW@0|0|0|0@DW@margin-left@DW@-2px@DX@genericRemoveNodeStyle@DW@HEG4965862@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@HEG4965862@DW@0|0|1@DW@top@DW@0px@DX@genericSetNodeStyle@DW@HEG4965862@DW@0|0|1@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@HEG4965862@DW@0|0|1@DW@height@DX@genericSetNodeStyle@DW@HEG4965862@DW@0|0|1@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@HEG4965862@DW@0|0|1@DW@right@DX@genericSetNodeStyle@DW@HEG4965862@DW@0|0|1@DW@width@DW@76px@DX@genericSetNodeStyle@DW@HEG4965862@DW@0|0|1|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@HEG4965862@DW@0|0|1|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@HEG4965862@DW@0|0|1|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@HEG4965862@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@HEG4965862@DW@0|0|1|0@DW@width@DW@46px@DX@genericSetNodeStyle@DW@HEG4965862@DW@0|0|1|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@HEG4965862@DW@0|0|1|0@DW@margin-left@DW@10px@DX@genericRemoveNodeStyle@DW@HEG4965862@DW@0|0|1|0@DW@right@DX@genericSetNodeStyle@DW@KMR4965858@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@KMR4965858@DW@0|0@DW@right@DW@0@DX@genericRemoveNodeStyle@DW@KMR4965858@DW@0|0@DW@margin-left@DX@genericRemoveNodeStyle@DW@KMR4965858@DW@0|0@DW@width@DX@genericSetNodeStyle@DW@KMR4965858@DW@0|0@DW@height@DW@30px@DX@genericSetNodeStyle@DW@KMR4965858@DW@0|0@DW@margin-top@DW@-15px@DX@genericSetNodeStyle@DW@KMR4965858@DW@0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@KMR4965858@DW@0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@KMR4965858@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@KMR4965858@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@KMR4965858@DW@0|0|0@DW@height@DW@30px@DX@genericSetNodeStyle@DW@KMR4965858@DW@0|0|0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@KMR4965858@DW@0|0|0@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@KMR4965858@DW@0|0|0@DW@width@DX@genericSetNodeStyle@DW@KMR4965858@DW@0|0|0|0@DW@height@DW@27px@DX@genericSetNodeStyle@DW@KMR4965858@DW@0|0|0|0@DW@top@DW@49.999%@DX@genericSetNodeStyle@DW@KMR4965858@DW@0|0|0|0@DW@margin-top@DW@-12px@DX@genericRemoveNodeStyle@DW@KMR4965858@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@KMR4965858@DW@0|0|0|0@DW@width@DW@27px@DX@genericSetNodeStyle@DW@KMR4965858@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@KMR4965858@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericRemoveNodeStyle@DW@KMR4965858@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@XFK4965859@DW@0|0@DW@width@DW@24px@DX@genericRemoveNodeStyle@DW@XFK4965859@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@XFK4965859@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@XFK4965859@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@XFK4965859@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@XFK4965859@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@XFK4965859@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@XFK4965859@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@XFK4965859@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@XFK4965859@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@XFK4965859@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@XFK4965859@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@XFK4965859@DW@0|0|0@DW@width@DW@24px@DX@genericSetNodeStyle@DW@XFK4965859@DW@0|0|0|0@DW@height@DW@16px@DX@genericSetNodeStyle@DW@XFK4965859@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@XFK4965859@DW@0|0|0|0@DW@margin-top@DW@-8px@DX@genericRemoveNodeStyle@DW@XFK4965859@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@XFK4965859@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@XFK4965859@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@XFK4965859@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@XFK4965859@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@XFK4965859@DW@0|0|0|0@DW@width@DX@setStyle@DW@EBP4965859@DW@padding-top@DW@0px@DX@genericSetNodeStyle@DW@VXT4965859@DW@0|0@DW@width@DW@38px@DX@genericRemoveNodeStyle@DW@VXT4965859@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@VXT4965859@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@VXT4965859@DW@0|0@DW@height@DW@38px@DX@genericRemoveNodeStyle@DW@VXT4965859@DW@0|0@DW@bottom@DX@genericSetNodeStyle@DW@VXT4965859@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@VXT4965859@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@VXT4965859@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@VXT4965859@DW@0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@VXT4965859@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@VXT4965859@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@VXT4965859@DW@0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@VXT4965859@DW@0|0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@VXT4965859@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@VXT4965859@DW@0|0|0|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@VXT4965859@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@VXT4965859@DW@0|0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@VXT4965859@DW@0|0|0|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@VXT4965859@DW@0|0|0|0@DW@margin-left@DW@-19px@DX@genericRemoveNodeStyle@DW@VXT4965859@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@OST4965862@DW@0|0@DW@width@DW@76px@DX@genericRemoveNodeStyle@DW@OST4965862@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@OST4965862@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@OST4965862@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@OST4965862@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@OST4965862@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@OST4965862@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@OST4965862@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@OST4965862@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@OST4965862@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@OST4965862@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@OST4965862@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@OST4965862@DW@0|0|0@DW@width@DW@0px@DX@genericSetNodeStyle@DW@OST4965862@DW@0|0|0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@OST4965862@DW@0|0|0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@OST4965862@DW@0|0|0|0@DW@margin-top@DW@0px@DX@genericSetNodeStyle@DW@OST4965862@DW@0|0|0|0@DW@margin-bottom@DW@0px@DX@genericRemoveNodeStyle@DW@OST4965862@DW@0|0|0|0@DW@height@DX@genericSetNodeStyle@DW@OST4965862@DW@0|0|0|0@DW@width@DW@1px@DX@genericSetNodeStyle@DW@OST4965862@DW@0|0|0|0@DW@left@DW@49.999%@DX@genericSetNodeStyle@DW@OST4965862@DW@0|0|0|0@DW@margin-left@DW@-2px@DX@genericRemoveNodeStyle@DW@OST4965862@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@OST4965862@DW@0|0|1@DW@top@DW@0px@DX@genericSetNodeStyle@DW@OST4965862@DW@0|0|1@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@OST4965862@DW@0|0|1@DW@height@DX@genericSetNodeStyle@DW@OST4965862@DW@0|0|1@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@OST4965862@DW@0|0|1@DW@right@DX@genericSetNodeStyle@DW@OST4965862@DW@0|0|1@DW@width@DW@76px@DX@genericSetNodeStyle@DW@OST4965862@DW@0|0|1|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@OST4965862@DW@0|0|1|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@OST4965862@DW@0|0|1|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@OST4965862@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@OST4965862@DW@0|0|1|0@DW@width@DW@46px@DX@genericSetNodeStyle@DW@OST4965862@DW@0|0|1|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@OST4965862@DW@0|0|1|0@DW@margin-left@DW@10px@DX@genericRemoveNodeStyle@DW@OST4965862@DW@0|0|1|0@DW@right@DX@genericSetNodeStyle@DW@YEM4965859@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@YEM4965859@DW@0|0@DW@right@DW@0@DX@genericRemoveNodeStyle@DW@YEM4965859@DW@0|0@DW@margin-left@DX@genericRemoveNodeStyle@DW@YEM4965859@DW@0|0@DW@width@DX@genericSetNodeStyle@DW@YEM4965859@DW@0|0@DW@height@DW@30px@DX@genericSetNodeStyle@DW@YEM4965859@DW@0|0@DW@margin-top@DW@-15px@DX@genericSetNodeStyle@DW@YEM4965859@DW@0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@YEM4965859@DW@0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@YEM4965859@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@YEM4965859@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@YEM4965859@DW@0|0|0@DW@height@DW@30px@DX@genericSetNodeStyle@DW@YEM4965859@DW@0|0|0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@YEM4965859@DW@0|0|0@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@YEM4965859@DW@0|0|0@DW@width@DX@genericSetNodeStyle@DW@YEM4965859@DW@0|0|0|0@DW@height@DW@27px@DX@genericSetNodeStyle@DW@YEM4965859@DW@0|0|0|0@DW@top@DW@49.999%@DX@genericSetNodeStyle@DW@YEM4965859@DW@0|0|0|0@DW@margin-top@DW@-12px@DX@genericRemoveNodeStyle@DW@YEM4965859@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@YEM4965859@DW@0|0|0|0@DW@width@DW@27px@DX@genericSetNodeStyle@DW@YEM4965859@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@YEM4965859@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericRemoveNodeStyle@DW@YEM4965859@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@DPI4965860@DW@0|0@DW@width@DW@24px@DX@genericRemoveNodeStyle@DW@DPI4965860@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@DPI4965860@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@DPI4965860@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@DPI4965860@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@DPI4965860@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@DPI4965860@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@DPI4965860@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@DPI4965860@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@DPI4965860@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@DPI4965860@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@DPI4965860@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@DPI4965860@DW@0|0|0@DW@width@DW@24px@DX@genericSetNodeStyle@DW@DPI4965860@DW@0|0|0|0@DW@height@DW@16px@DX@genericSetNodeStyle@DW@DPI4965860@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@DPI4965860@DW@0|0|0|0@DW@margin-top@DW@-8px@DX@genericRemoveNodeStyle@DW@DPI4965860@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@DPI4965860@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@DPI4965860@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@DPI4965860@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@DPI4965860@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@DPI4965860@DW@0|0|0|0@DW@width@DX@setStyle@DW@GLM4965860@DW@padding-top@DW@0px@DX@genericSetNodeStyle@DW@DSB4965860@DW@0|0@DW@width@DW@38px@DX@genericRemoveNodeStyle@DW@DSB4965860@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@DSB4965860@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@DSB4965860@DW@0|0@DW@height@DW@38px@DX@genericRemoveNodeStyle@DW@DSB4965860@DW@0|0@DW@bottom@DX@genericSetNodeStyle@DW@DSB4965860@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@DSB4965860@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@DSB4965860@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@DSB4965860@DW@0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@DSB4965860@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@DSB4965860@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@DSB4965860@DW@0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@DSB4965860@DW@0|0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@DSB4965860@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@DSB4965860@DW@0|0|0|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@DSB4965860@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@DSB4965860@DW@0|0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@DSB4965860@DW@0|0|0|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@DSB4965860@DW@0|0|0|0@DW@margin-left@DW@-19px@DX@genericRemoveNodeStyle@DW@DSB4965860@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@BUN4965862@DW@0|0@DW@width@DW@76px@DX@genericRemoveNodeStyle@DW@BUN4965862@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@BUN4965862@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@BUN4965862@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@BUN4965862@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@BUN4965862@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@BUN4965862@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@BUN4965862@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@BUN4965862@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@BUN4965862@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@BUN4965862@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@BUN4965862@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@BUN4965862@DW@0|0|0@DW@width@DW@0px@DX@genericSetNodeStyle@DW@BUN4965862@DW@0|0|0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@BUN4965862@DW@0|0|0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@BUN4965862@DW@0|0|0|0@DW@margin-top@DW@0px@DX@genericSetNodeStyle@DW@BUN4965862@DW@0|0|0|0@DW@margin-bottom@DW@0px@DX@genericRemoveNodeStyle@DW@BUN4965862@DW@0|0|0|0@DW@height@DX@genericSetNodeStyle@DW@BUN4965862@DW@0|0|0|0@DW@width@DW@1px@DX@genericSetNodeStyle@DW@BUN4965862@DW@0|0|0|0@DW@left@DW@49.999%@DX@genericSetNodeStyle@DW@BUN4965862@DW@0|0|0|0@DW@margin-left@DW@-2px@DX@genericRemoveNodeStyle@DW@BUN4965862@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@BUN4965862@DW@0|0|1@DW@top@DW@0px@DX@genericSetNodeStyle@DW@BUN4965862@DW@0|0|1@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@BUN4965862@DW@0|0|1@DW@height@DX@genericSetNodeStyle@DW@BUN4965862@DW@0|0|1@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@BUN4965862@DW@0|0|1@DW@right@DX@genericSetNodeStyle@DW@BUN4965862@DW@0|0|1@DW@width@DW@76px@DX@genericSetNodeStyle@DW@BUN4965862@DW@0|0|1|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@BUN4965862@DW@0|0|1|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@BUN4965862@DW@0|0|1|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@BUN4965862@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@BUN4965862@DW@0|0|1|0@DW@width@DW@46px@DX@genericSetNodeStyle@DW@BUN4965862@DW@0|0|1|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@BUN4965862@DW@0|0|1|0@DW@margin-left@DW@10px@DX@genericRemoveNodeStyle@DW@BUN4965862@DW@0|0|1|0@DW@right@DX@genericSetNodeStyle@DW@CWS4965860@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@CWS4965860@DW@0|0@DW@right@DW@0@DX@genericRemoveNodeStyle@DW@CWS4965860@DW@0|0@DW@margin-left@DX@genericRemoveNodeStyle@DW@CWS4965860@DW@0|0@DW@width@DX@genericSetNodeStyle@DW@CWS4965860@DW@0|0@DW@height@DW@30px@DX@genericSetNodeStyle@DW@CWS4965860@DW@0|0@DW@margin-top@DW@-15px@DX@genericSetNodeStyle@DW@CWS4965860@DW@0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@CWS4965860@DW@0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@CWS4965860@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@CWS4965860@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@CWS4965860@DW@0|0|0@DW@height@DW@30px@DX@genericSetNodeStyle@DW@CWS4965860@DW@0|0|0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@CWS4965860@DW@0|0|0@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@CWS4965860@DW@0|0|0@DW@width@DX@genericSetNodeStyle@DW@CWS4965860@DW@0|0|0|0@DW@height@DW@27px@DX@genericSetNodeStyle@DW@CWS4965860@DW@0|0|0|0@DW@top@DW@49.999%@DX@genericSetNodeStyle@DW@CWS4965860@DW@0|0|0|0@DW@margin-top@DW@-12px@DX@genericRemoveNodeStyle@DW@CWS4965860@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@CWS4965860@DW@0|0|0|0@DW@width@DW@27px@DX@genericSetNodeStyle@DW@CWS4965860@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@CWS4965860@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericRemoveNodeStyle@DW@CWS4965860@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@JKB4965860@DW@0|0@DW@width@DW@24px@DX@genericRemoveNodeStyle@DW@JKB4965860@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@JKB4965860@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@JKB4965860@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@JKB4965860@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@JKB4965860@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@JKB4965860@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@JKB4965860@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@JKB4965860@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@JKB4965860@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@JKB4965860@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@JKB4965860@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@JKB4965860@DW@0|0|0@DW@width@DW@24px@DX@genericSetNodeStyle@DW@JKB4965860@DW@0|0|0|0@DW@height@DW@16px@DX@genericSetNodeStyle@DW@JKB4965860@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@JKB4965860@DW@0|0|0|0@DW@margin-top@DW@-8px@DX@genericRemoveNodeStyle@DW@JKB4965860@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@JKB4965860@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@JKB4965860@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@JKB4965860@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@JKB4965860@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@JKB4965860@DW@0|0|0|0@DW@width@DX@setStyle@DW@ELV4965860@DW@padding-top@DW@0px@DX@genericSetNodeStyle@DW@XWU4965860@DW@0|0@DW@width@DW@38px@DX@genericRemoveNodeStyle@DW@XWU4965860@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@XWU4965860@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@XWU4965860@DW@0|0@DW@height@DW@38px@DX@genericRemoveNodeStyle@DW@XWU4965860@DW@0|0@DW@bottom@DX@genericSetNodeStyle@DW@XWU4965860@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@XWU4965860@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@XWU4965860@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@XWU4965860@DW@0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@XWU4965860@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@XWU4965860@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@XWU4965860@DW@0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@XWU4965860@DW@0|0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@XWU4965860@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@XWU4965860@DW@0|0|0|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@XWU4965860@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@XWU4965860@DW@0|0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@XWU4965860@DW@0|0|0|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@XWU4965860@DW@0|0|0|0@DW@margin-left@DW@-19px@DX@genericRemoveNodeStyle@DW@XWU4965860@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@BEA4965862@DW@0|0@DW@width@DW@76px@DX@genericRemoveNodeStyle@DW@BEA4965862@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@BEA4965862@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@BEA4965862@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@BEA4965862@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@BEA4965862@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@BEA4965862@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@BEA4965862@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@BEA4965862@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@BEA4965862@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@BEA4965862@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@BEA4965862@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@BEA4965862@DW@0|0|0@DW@width@DW@0px@DX@genericSetNodeStyle@DW@BEA4965862@DW@0|0|0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@BEA4965862@DW@0|0|0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@BEA4965862@DW@0|0|0|0@DW@margin-top@DW@0px@DX@genericSetNodeStyle@DW@BEA4965862@DW@0|0|0|0@DW@margin-bottom@DW@0px@DX@genericRemoveNodeStyle@DW@BEA4965862@DW@0|0|0|0@DW@height@DX@genericSetNodeStyle@DW@BEA4965862@DW@0|0|0|0@DW@width@DW@1px@DX@genericSetNodeStyle@DW@BEA4965862@DW@0|0|0|0@DW@left@DW@49.999%@DX@genericSetNodeStyle@DW@BEA4965862@DW@0|0|0|0@DW@margin-left@DW@-2px@DX@genericRemoveNodeStyle@DW@BEA4965862@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@BEA4965862@DW@0|0|1@DW@top@DW@0px@DX@genericSetNodeStyle@DW@BEA4965862@DW@0|0|1@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@BEA4965862@DW@0|0|1@DW@height@DX@genericSetNodeStyle@DW@BEA4965862@DW@0|0|1@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@BEA4965862@DW@0|0|1@DW@right@DX@genericSetNodeStyle@DW@BEA4965862@DW@0|0|1@DW@width@DW@76px@DX@genericSetNodeStyle@DW@BEA4965862@DW@0|0|1|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@BEA4965862@DW@0|0|1|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@BEA4965862@DW@0|0|1|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@BEA4965862@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@BEA4965862@DW@0|0|1|0@DW@width@DW@46px@DX@genericSetNodeStyle@DW@BEA4965862@DW@0|0|1|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@BEA4965862@DW@0|0|1|0@DW@margin-left@DW@10px@DX@genericRemoveNodeStyle@DW@BEA4965862@DW@0|0|1|0@DW@right@DX@genericSetNodeStyle@DW@AGG4965860@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@AGG4965860@DW@0|0@DW@right@DW@0@DX@genericRemoveNodeStyle@DW@AGG4965860@DW@0|0@DW@margin-left@DX@genericRemoveNodeStyle@DW@AGG4965860@DW@0|0@DW@width@DX@genericSetNodeStyle@DW@AGG4965860@DW@0|0@DW@height@DW@30px@DX@genericSetNodeStyle@DW@AGG4965860@DW@0|0@DW@margin-top@DW@-15px@DX@genericSetNodeStyle@DW@AGG4965860@DW@0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@AGG4965860@DW@0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@AGG4965860@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@AGG4965860@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@AGG4965860@DW@0|0|0@DW@height@DW@30px@DX@genericSetNodeStyle@DW@AGG4965860@DW@0|0|0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@AGG4965860@DW@0|0|0@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@AGG4965860@DW@0|0|0@DW@width@DX@genericSetNodeStyle@DW@AGG4965860@DW@0|0|0|0@DW@height@DW@27px@DX@genericSetNodeStyle@DW@AGG4965860@DW@0|0|0|0@DW@top@DW@49.999%@DX@genericSetNodeStyle@DW@AGG4965860@DW@0|0|0|0@DW@margin-top@DW@-12px@DX@genericRemoveNodeStyle@DW@AGG4965860@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@AGG4965860@DW@0|0|0|0@DW@width@DW@27px@DX@genericSetNodeStyle@DW@AGG4965860@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@AGG4965860@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericRemoveNodeStyle@DW@AGG4965860@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@MRV4965861@DW@0|0@DW@width@DW@24px@DX@genericRemoveNodeStyle@DW@MRV4965861@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@MRV4965861@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@MRV4965861@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@MRV4965861@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@MRV4965861@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@MRV4965861@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@MRV4965861@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@MRV4965861@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@MRV4965861@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@MRV4965861@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@MRV4965861@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@MRV4965861@DW@0|0|0@DW@width@DW@24px@DX@genericSetNodeStyle@DW@MRV4965861@DW@0|0|0|0@DW@height@DW@16px@DX@genericSetNodeStyle@DW@MRV4965861@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@MRV4965861@DW@0|0|0|0@DW@margin-top@DW@-8px@DX@genericRemoveNodeStyle@DW@MRV4965861@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@MRV4965861@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@MRV4965861@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@MRV4965861@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@MRV4965861@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@MRV4965861@DW@0|0|0|0@DW@width@DX@setStyle@DW@XSQ4965861@DW@padding-top@DW@0px@DX@genericSetNodeStyle@DW@HCP4965861@DW@0|0@DW@width@DW@38px@DX@genericRemoveNodeStyle@DW@HCP4965861@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@HCP4965861@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@HCP4965861@DW@0|0@DW@height@DW@38px@DX@genericRemoveNodeStyle@DW@HCP4965861@DW@0|0@DW@bottom@DX@genericSetNodeStyle@DW@HCP4965861@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@HCP4965861@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@HCP4965861@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@HCP4965861@DW@0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@HCP4965861@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@HCP4965861@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@HCP4965861@DW@0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@HCP4965861@DW@0|0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@HCP4965861@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@HCP4965861@DW@0|0|0|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@HCP4965861@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@HCP4965861@DW@0|0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@HCP4965861@DW@0|0|0|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@HCP4965861@DW@0|0|0|0@DW@margin-left@DW@-19px@DX@genericRemoveNodeStyle@DW@HCP4965861@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@FJS4965862@DW@0|0@DW@width@DW@76px@DX@genericRemoveNodeStyle@DW@FJS4965862@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@FJS4965862@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@FJS4965862@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@FJS4965862@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@FJS4965862@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@FJS4965862@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@FJS4965862@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@FJS4965862@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@FJS4965862@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@FJS4965862@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@FJS4965862@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@FJS4965862@DW@0|0|0@DW@width@DW@0px@DX@genericSetNodeStyle@DW@FJS4965862@DW@0|0|0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@FJS4965862@DW@0|0|0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@FJS4965862@DW@0|0|0|0@DW@margin-top@DW@0px@DX@genericSetNodeStyle@DW@FJS4965862@DW@0|0|0|0@DW@margin-bottom@DW@0px@DX@genericRemoveNodeStyle@DW@FJS4965862@DW@0|0|0|0@DW@height@DX@genericSetNodeStyle@DW@FJS4965862@DW@0|0|0|0@DW@width@DW@1px@DX@genericSetNodeStyle@DW@FJS4965862@DW@0|0|0|0@DW@left@DW@49.999%@DX@genericSetNodeStyle@DW@FJS4965862@DW@0|0|0|0@DW@margin-left@DW@-2px@DX@genericRemoveNodeStyle@DW@FJS4965862@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@FJS4965862@DW@0|0|1@DW@top@DW@0px@DX@genericSetNodeStyle@DW@FJS4965862@DW@0|0|1@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@FJS4965862@DW@0|0|1@DW@height@DX@genericSetNodeStyle@DW@FJS4965862@DW@0|0|1@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@FJS4965862@DW@0|0|1@DW@right@DX@genericSetNodeStyle@DW@FJS4965862@DW@0|0|1@DW@width@DW@76px@DX@genericSetNodeStyle@DW@FJS4965862@DW@0|0|1|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@FJS4965862@DW@0|0|1|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@FJS4965862@DW@0|0|1|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@FJS4965862@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@FJS4965862@DW@0|0|1|0@DW@width@DW@46px@DX@genericSetNodeStyle@DW@FJS4965862@DW@0|0|1|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@FJS4965862@DW@0|0|1|0@DW@margin-left@DW@10px@DX@genericRemoveNodeStyle@DW@FJS4965862@DW@0|0|1|0@DW@right@DX@genericSetNodeStyle@DW@HDD4965861@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@HDD4965861@DW@0|0@DW@right@DW@0@DX@genericRemoveNodeStyle@DW@HDD4965861@DW@0|0@DW@margin-left@DX@genericRemoveNodeStyle@DW@HDD4965861@DW@0|0@DW@width@DX@genericSetNodeStyle@DW@HDD4965861@DW@0|0@DW@height@DW@30px@DX@genericSetNodeStyle@DW@HDD4965861@DW@0|0@DW@margin-top@DW@-15px@DX@genericSetNodeStyle@DW@HDD4965861@DW@0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@HDD4965861@DW@0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@HDD4965861@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@HDD4965861@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@HDD4965861@DW@0|0|0@DW@height@DW@30px@DX@genericSetNodeStyle@DW@HDD4965861@DW@0|0|0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@HDD4965861@DW@0|0|0@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@HDD4965861@DW@0|0|0@DW@width@DX@genericSetNodeStyle@DW@HDD4965861@DW@0|0|0|0@DW@height@DW@27px@DX@genericSetNodeStyle@DW@HDD4965861@DW@0|0|0|0@DW@top@DW@49.999%@DX@genericSetNodeStyle@DW@HDD4965861@DW@0|0|0|0@DW@margin-top@DW@-12px@DX@genericRemoveNodeStyle@DW@HDD4965861@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@HDD4965861@DW@0|0|0|0@DW@width@DW@27px@DX@genericSetNodeStyle@DW@HDD4965861@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@HDD4965861@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericRemoveNodeStyle@DW@HDD4965861@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@HFH4965862@DW@0|0@DW@width@DW@24px@DX@genericRemoveNodeStyle@DW@HFH4965862@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@HFH4965862@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@HFH4965862@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@HFH4965862@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@HFH4965862@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@HFH4965862@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@HFH4965862@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@HFH4965862@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@HFH4965862@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@HFH4965862@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@HFH4965862@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@HFH4965862@DW@0|0|0@DW@width@DW@24px@DX@genericSetNodeStyle@DW@HFH4965862@DW@0|0|0|0@DW@height@DW@16px@DX@genericSetNodeStyle@DW@HFH4965862@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@HFH4965862@DW@0|0|0|0@DW@margin-top@DW@-8px@DX@genericRemoveNodeStyle@DW@HFH4965862@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@HFH4965862@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@HFH4965862@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@HFH4965862@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@HFH4965862@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@HFH4965862@DW@0|0|0|0@DW@width@DX@setStyle@DW@WQY4965862@DW@padding-top@DW@0px@DX@genericSetNodeStyle@DW@PSM4965862@DW@0|0@DW@width@DW@38px@DX@genericRemoveNodeStyle@DW@PSM4965862@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@PSM4965862@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@PSM4965862@DW@0|0@DW@height@DW@38px@DX@genericRemoveNodeStyle@DW@PSM4965862@DW@0|0@DW@bottom@DX@genericSetNodeStyle@DW@PSM4965862@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@PSM4965862@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@PSM4965862@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@PSM4965862@DW@0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@PSM4965862@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@PSM4965862@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@PSM4965862@DW@0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@PSM4965862@DW@0|0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@PSM4965862@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@PSM4965862@DW@0|0|0|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@PSM4965862@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@PSM4965862@DW@0|0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@PSM4965862@DW@0|0|0|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@PSM4965862@DW@0|0|0|0@DW@margin-left@DW@-19px@DX@genericRemoveNodeStyle@DW@PSM4965862@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@DUX4965862@DW@0|0@DW@width@DW@76px@DX@genericRemoveNodeStyle@DW@DUX4965862@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@DUX4965862@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@DUX4965862@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@DUX4965862@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@DUX4965862@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@DUX4965862@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@DUX4965862@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@DUX4965862@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@DUX4965862@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@DUX4965862@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@DUX4965862@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@DUX4965862@DW@0|0|0@DW@width@DW@0px@DX@genericSetNodeStyle@DW@DUX4965862@DW@0|0|0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@DUX4965862@DW@0|0|0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@DUX4965862@DW@0|0|0|0@DW@margin-top@DW@0px@DX@genericSetNodeStyle@DW@DUX4965862@DW@0|0|0|0@DW@margin-bottom@DW@0px@DX@genericRemoveNodeStyle@DW@DUX4965862@DW@0|0|0|0@DW@height@DX@genericSetNodeStyle@DW@DUX4965862@DW@0|0|0|0@DW@width@DW@1px@DX@genericSetNodeStyle@DW@DUX4965862@DW@0|0|0|0@DW@left@DW@49.999%@DX@genericSetNodeStyle@DW@DUX4965862@DW@0|0|0|0@DW@margin-left@DW@-2px@DX@genericRemoveNodeStyle@DW@DUX4965862@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@DUX4965862@DW@0|0|1@DW@top@DW@0px@DX@genericSetNodeStyle@DW@DUX4965862@DW@0|0|1@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@DUX4965862@DW@0|0|1@DW@height@DX@genericSetNodeStyle@DW@DUX4965862@DW@0|0|1@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@DUX4965862@DW@0|0|1@DW@right@DX@genericSetNodeStyle@DW@DUX4965862@DW@0|0|1@DW@width@DW@76px@DX@genericSetNodeStyle@DW@DUX4965862@DW@0|0|1|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@DUX4965862@DW@0|0|1|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@DUX4965862@DW@0|0|1|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@DUX4965862@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@DUX4965862@DW@0|0|1|0@DW@width@DW@46px@DX@genericSetNodeStyle@DW@DUX4965862@DW@0|0|1|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@DUX4965862@DW@0|0|1|0@DW@margin-left@DW@10px@DX@genericRemoveNodeStyle@DW@DUX4965862@DW@0|0|1|0@DW@right@DX@setStyle@DW@WQO4965656@DW@height@DW@697px@DX@setStyle@DW@WQO4965656@DW@width@DW@0px@DX@evaluateJavascript@DW@dwScrollpaneRepaintScrollpaneFadings('MWJ4965656');@DX@evaluateJavascript@DW@dwHelperScrollToStoredPosition('MWJ4965656');@DX@genericSetNodeStyle@DW@FSF4965660@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@FSF4965660@DW@0|0@DW@right@DW@0@DX@genericRemoveNodeStyle@DW@FSF4965660@DW@0|0@DW@margin-left@DX@genericRemoveNodeStyle@DW@FSF4965660@DW@0|0@DW@width@DX@genericSetNodeStyle@DW@FSF4965660@DW@0|0@DW@height@DW@28px@DX@genericSetNodeStyle@DW@FSF4965660@DW@0|0@DW@margin-top@DW@-14px@DX@genericSetNodeStyle@DW@FSF4965660@DW@0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@FSF4965660@DW@0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@FSF4965660@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@FSF4965660@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@FSF4965660@DW@0|0|0@DW@height@DW@28px@DX@genericSetNodeStyle@DW@FSF4965660@DW@0|0|0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@FSF4965660@DW@0|0|0@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@FSF4965660@DW@0|0|0@DW@width@DX@genericSetNodeStyle@DW@FSF4965660@DW@0|0|0|0@DW@height@DW@27px@DX@genericSetNodeStyle@DW@FSF4965660@DW@0|0|0|0@DW@top@DW@49.999%@DX@genericSetNodeStyle@DW@FSF4965660@DW@0|0|0|0@DW@margin-top@DW@-13px@DX@genericRemoveNodeStyle@DW@FSF4965660@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@FSF4965660@DW@0|0|0|0@DW@width@DW@27px@DX@genericSetNodeStyle@DW@FSF4965660@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@FSF4965660@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericRemoveNodeStyle@DW@FSF4965660@DW@0|0|0|0@DW@right@DX@setStyle@DW@IUQ4965660@DW@padding-top@DW@0px@DX@setStyle@DW@CKG4965660@DW@padding-top@DW@0px@DX@genericSetNodeStyle@DW@XKK4965677@DW@0|0@DW@width@DW@30px@DX@genericRemoveNodeStyle@DW@XKK4965677@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@XKK4965677@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@XKK4965677@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@XKK4965677@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@XKK4965677@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@XKK4965677@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@XKK4965677@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@XKK4965677@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@XKK4965677@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@XKK4965677@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@XKK4965677@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@XKK4965677@DW@0|0|0@DW@width@DW@30px@DX@genericSetNodeStyle@DW@XKK4965677@DW@0|0|0|0@DW@height@DW@0px@DX@genericSetNodeStyle@DW@XKK4965677@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@XKK4965677@DW@0|0|0|0@DW@margin-top@DW@0px@DX@genericRemoveNodeStyle@DW@XKK4965677@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@XKK4965677@DW@0|0|0|0@DW@width@DW@0px@DX@genericSetNodeStyle@DW@XKK4965677@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@XKK4965677@DW@0|0|0|0@DW@margin-left@DW@10px@DX@genericRemoveNodeStyle@DW@XKK4965677@DW@0|0|0|0@DW@right@DX@setStyle@DW@USD4965660@DW@height@DW@51px@DX@setStyle@DW@USD4965660@DW@width@DW@422px@DX@evaluateJavascript@DW@dwScrollpaneRepaintScrollpaneFadings('IAP4965656');@DX@evaluateJavascript@DW@dwHelperScrollToStoredPosition('IAP4965656');@DX@genericSetNodeStyle@DW@CFQ4965632@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@CFQ4965632@DW@0|0@DW@right@DW@0@DX@genericRemoveNodeStyle@DW@CFQ4965632@DW@0|0@DW@margin-left@DX@genericRemoveNodeStyle@DW@CFQ4965632@DW@0|0@DW@width@DX@genericSetNodeStyle@DW@CFQ4965632@DW@0|0@DW@height@DW@0px@DX@genericSetNodeStyle@DW@CFQ4965632@DW@0|0@DW@margin-top@DW@0px@DX@genericSetNodeStyle@DW@CFQ4965632@DW@0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@CFQ4965632@DW@0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@CFQ4965632@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@CFQ4965632@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@CFQ4965632@DW@0|0|0@DW@height@DW@0px@DX@genericSetNodeStyle@DW@CFQ4965632@DW@0|0|0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@CFQ4965632@DW@0|0|0@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@CFQ4965632@DW@0|0|0@DW@width@DX@genericSetNodeStyle@DW@CFQ4965632@DW@0|0|0|0@DW@height@DW@0px@DX@genericSetNodeStyle@DW@CFQ4965632@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@CFQ4965632@DW@0|0|0|0@DW@margin-top@DW@0px@DX@genericRemoveNodeStyle@DW@CFQ4965632@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@CFQ4965632@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@CFQ4965632@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@CFQ4965632@DW@0|0|0|0@DW@margin-left@DW@16px@DX@genericSetNodeStyle@DW@CFQ4965632@DW@0|0|0|0@DW@margin-right@DW@16px@DX@genericRemoveNodeStyle@DW@CFQ4965632@DW@0|0|0|0@DW@width@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0@DW@width@DW@92px@DX@genericRemoveNodeStyle@DW@UXU4965633@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0@DW@height@DW@48px@DX@genericRemoveNodeStyle@DW@UXU4965633@DW@0|0@DW@bottom@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@UXU4965633@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0|0@DW@height@DW@48px@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@UXU4965633@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0|0@DW@width@DW@46px@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0|0|0@DW@height@DW@48px@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0|0|0@DW@margin-top@DW@-24px@DX@genericRemoveNodeStyle@DW@UXU4965633@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@UXU4965633@DW@0|0|0|0@DW@width@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0|1@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@UXU4965633@DW@0|0|1@DW@bottom@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0|1@DW@height@DW@48px@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0|1@DW@left@DW@46px@DX@genericRemoveNodeStyle@DW@UXU4965633@DW@0|0|1@DW@right@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0|1@DW@width@DW@46px@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0|1|0@DW@height@DW@48px@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0|1|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0|1|0@DW@margin-top@DW@-24px@DX@genericRemoveNodeStyle@DW@UXU4965633@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0|1|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0|1|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0|1|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0|1|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@UXU4965633@DW@0|0|1|0@DW@width@DX@setStyle@DW@NTU4965633@DW@padding-top@DW@0px@DX@genericSetNodeStyle@DW@JTQ4965633@DW@0|0@DW@width@DW@0px@DX@genericSetNodeStyle@DW@JTQ4965633@DW@0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@JTQ4965633@DW@0|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@JTQ4965633@DW@0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@JTQ4965633@DW@0|0@DW@height@DW@0px@DX@genericSetNodeStyle@DW@JTQ4965633@DW@0|0@DW@margin-top@DW@0px@DX@genericSetNodeStyle@DW@JTQ4965633@DW@0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@JTQ4965633@DW@0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0@DW@right@DW@0@DX@genericRemoveNodeStyle@DW@UAJ4965633@DW@0|0@DW@margin-left@DX@genericRemoveNodeStyle@DW@UAJ4965633@DW@0|0@DW@width@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@UAJ4965633@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@UAJ4965633@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@UAJ4965633@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|0@DW@height@DW@0px@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|0@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@UAJ4965633@DW@0|0|0@DW@width@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|0|0@DW@height@DW@0px@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|0|0@DW@margin-top@DW@0px@DX@genericRemoveNodeStyle@DW@UAJ4965633@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@UAJ4965633@DW@0|0|0|0@DW@width@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|1@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@UAJ4965633@DW@0|0|1@DW@bottom@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|1@DW@height@DW@1px@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|1@DW@left@DW@0px@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|1@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@UAJ4965633@DW@0|0|1@DW@width@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|1|0@DW@height@DW@1px@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|1|0@DW@top@DW@49.999%@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|1|0@DW@margin-top@DW@0px@DX@genericRemoveNodeStyle@DW@UAJ4965633@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|1|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|1|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|1|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|1|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@UAJ4965633@DW@0|0|1|0@DW@width@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|2@DW@top@DW@1px@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|2@DW@bottom@DW@1px@DX@genericRemoveNodeStyle@DW@UAJ4965633@DW@0|0|2@DW@height@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|2@DW@left@DW@0px@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|2@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@UAJ4965633@DW@0|0|2@DW@width@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|2|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|2|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|2|0@DW@margin-top@DW@0px@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|2|0@DW@margin-bottom@DW@0px@DX@genericRemoveNodeStyle@DW@UAJ4965633@DW@0|0|2|0@DW@height@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|2|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|2|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|2|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|2|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@UAJ4965633@DW@0|0|2|0@DW@width@DX@genericRemoveNodeStyle@DW@UAJ4965633@DW@0|0|3@DW@top@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|3@DW@bottom@DW@0px@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|3@DW@height@DW@1px@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|3@DW@left@DW@0px@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|3@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@UAJ4965633@DW@0|0|3@DW@width@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|3|0@DW@height@DW@1px@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|3|0@DW@top@DW@49.999%@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|3|0@DW@margin-top@DW@0px@DX@genericRemoveNodeStyle@DW@UAJ4965633@DW@0|0|3|0@DW@bottom@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|3|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|3|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|3|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|3|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@UAJ4965633@DW@0|0|3|0@DW@width@DX@genericRemoveNodeStyle@DW@UAJ4965633@DW@0|0|4@DW@top@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|4@DW@bottom@DW@0px@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|4@DW@height@DW@0px@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|4@DW@left@DW@0px@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|4@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@UAJ4965633@DW@0|0|4@DW@width@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|4|0@DW@height@DW@0px@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|4|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|4|0@DW@margin-top@DW@0px@DX@genericRemoveNodeStyle@DW@UAJ4965633@DW@0|0|4|0@DW@top@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|4|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|4|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|4|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|4|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@UAJ4965633@DW@0|0|4|0@DW@width@DX@genericSetNodeStyle@DW@LEE4965633@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@LEE4965633@DW@0|0@DW@right@DW@0@DX@genericRemoveNodeStyle@DW@LEE4965633@DW@0|0@DW@margin-left@DX@genericRemoveNodeStyle@DW@LEE4965633@DW@0|0@DW@width@DX@genericSetNodeStyle@DW@LEE4965633@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@LEE4965633@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@LEE4965633@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@LEE4965633@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@LEE4965633@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@LEE4965633@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@LEE4965633@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@LEE4965633@DW@0|0|0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@LEE4965633@DW@0|0|0@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@LEE4965633@DW@0|0|0@DW@width@DX@genericSetNodeStyle@DW@LEE4965633@DW@0|0|0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@LEE4965633@DW@0|0|0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@LEE4965633@DW@0|0|0|0@DW@margin-top@DW@1px@DX@genericSetNodeStyle@DW@LEE4965633@DW@0|0|0|0@DW@margin-bottom@DW@1px@DX@genericRemoveNodeStyle@DW@LEE4965633@DW@0|0|0|0@DW@height@DX@genericSetNodeStyle@DW@LEE4965633@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@LEE4965633@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@LEE4965633@DW@0|0|0|0@DW@margin-left@DW@1px@DX@genericSetNodeStyle@DW@LEE4965633@DW@0|0|0|0@DW@margin-right@DW@1px@DX@genericRemoveNodeStyle@DW@LEE4965633@DW@0|0|0|0@DW@width@DX@setStyle@DW@JFJ4965633@DW@padding-top@DW@0px@DX@genericSetNodeStyle@DW@RWU4965654@DW@0|0@DW@width@DW@118px@DX@genericSetNodeStyle@DW@RWU4965654@DW@0|0@DW@margin-left@DW@-59px@DX@genericSetNodeStyle@DW@RWU4965654@DW@0|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@RWU4965654@DW@0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@RWU4965654@DW@0|0@DW@height@DW@58px@DX@genericSetNodeStyle@DW@RWU4965654@DW@0|0@DW@margin-top@DW@-29px@DX@genericSetNodeStyle@DW@RWU4965654@DW@0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@RWU4965654@DW@0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@RWU4965654@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@RWU4965654@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@RWU4965654@DW@0|0|0@DW@height@DW@58px@DX@genericSetNodeStyle@DW@RWU4965654@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@RWU4965654@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@RWU4965654@DW@0|0|0@DW@width@DW@118px@DX@genericSetNodeStyle@DW@RWU4965654@DW@0|0|0|0@DW@height@DW@40px@DX@genericSetNodeStyle@DW@RWU4965654@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@RWU4965654@DW@0|0|0|0@DW@margin-top@DW@-13px@DX@genericRemoveNodeStyle@DW@RWU4965654@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@RWU4965654@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@RWU4965654@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@RWU4965654@DW@0|0|0|0@DW@margin-left@DW@2px@DX@genericSetNodeStyle@DW@RWU4965654@DW@0|0|0|0@DW@margin-right@DW@16px@DX@genericRemoveNodeStyle@DW@RWU4965654@DW@0|0|0|0@DW@width@DX@setStyle@DW@BHQ4965633@DW@padding-top@DW@0px@DX@setStyle@DW@UCE4965633@DW@padding-top@DW@0px@DX@genericSetNodeStyle@DW@ICN4965633@DW@0|0@DW@width@DW@0px@DX@genericSetNodeStyle@DW@ICN4965633@DW@0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@ICN4965633@DW@0|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@ICN4965633@DW@0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@ICN4965633@DW@0|0@DW@height@DW@0px@DX@genericSetNodeStyle@DW@ICN4965633@DW@0|0@DW@margin-top@DW@0px@DX@genericSetNodeStyle@DW@ICN4965633@DW@0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@ICN4965633@DW@0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0@DW@right@DW@0@DX@genericRemoveNodeStyle@DW@WQI4965633@DW@0|0@DW@margin-left@DX@genericRemoveNodeStyle@DW@WQI4965633@DW@0|0@DW@width@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@WQI4965633@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@WQI4965633@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@WQI4965633@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|0@DW@height@DW@0px@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|0@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@WQI4965633@DW@0|0|0@DW@width@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|0|0@DW@height@DW@0px@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|0|0@DW@margin-top@DW@0px@DX@genericRemoveNodeStyle@DW@WQI4965633@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@WQI4965633@DW@0|0|0|0@DW@width@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|1@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@WQI4965633@DW@0|0|1@DW@bottom@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|1@DW@height@DW@1px@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|1@DW@left@DW@0px@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|1@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@WQI4965633@DW@0|0|1@DW@width@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|1|0@DW@height@DW@1px@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|1|0@DW@top@DW@49.999%@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|1|0@DW@margin-top@DW@0px@DX@genericRemoveNodeStyle@DW@WQI4965633@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|1|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|1|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|1|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|1|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@WQI4965633@DW@0|0|1|0@DW@width@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|2@DW@top@DW@1px@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|2@DW@bottom@DW@1px@DX@genericRemoveNodeStyle@DW@WQI4965633@DW@0|0|2@DW@height@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|2@DW@left@DW@0px@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|2@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@WQI4965633@DW@0|0|2@DW@width@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|2|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|2|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|2|0@DW@margin-top@DW@0px@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|2|0@DW@margin-bottom@DW@0px@DX@genericRemoveNodeStyle@DW@WQI4965633@DW@0|0|2|0@DW@height@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|2|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|2|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|2|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|2|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@WQI4965633@DW@0|0|2|0@DW@width@DX@genericRemoveNodeStyle@DW@WQI4965633@DW@0|0|3@DW@top@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|3@DW@bottom@DW@0px@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|3@DW@height@DW@1px@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|3@DW@left@DW@0px@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|3@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@WQI4965633@DW@0|0|3@DW@width@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|3|0@DW@height@DW@1px@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|3|0@DW@top@DW@49.999%@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|3|0@DW@margin-top@DW@0px@DX@genericRemoveNodeStyle@DW@WQI4965633@DW@0|0|3|0@DW@bottom@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|3|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|3|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|3|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|3|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@WQI4965633@DW@0|0|3|0@DW@width@DX@genericRemoveNodeStyle@DW@WQI4965633@DW@0|0|4@DW@top@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|4@DW@bottom@DW@0px@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|4@DW@height@DW@0px@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|4@DW@left@DW@0px@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|4@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@WQI4965633@DW@0|0|4@DW@width@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|4|0@DW@height@DW@0px@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|4|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|4|0@DW@margin-top@DW@0px@DX@genericRemoveNodeStyle@DW@WQI4965633@DW@0|0|4|0@DW@top@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|4|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|4|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|4|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|4|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@WQI4965633@DW@0|0|4|0@DW@width@DX@genericSetNodeStyle@DW@RMD4965633@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@RMD4965633@DW@0|0@DW@right@DW@0@DX@genericRemoveNodeStyle@DW@RMD4965633@DW@0|0@DW@margin-left@DX@genericRemoveNodeStyle@DW@RMD4965633@DW@0|0@DW@width@DX@genericSetNodeStyle@DW@RMD4965633@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@RMD4965633@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@RMD4965633@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@RMD4965633@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@RMD4965633@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@RMD4965633@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@RMD4965633@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@RMD4965633@DW@0|0|0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@RMD4965633@DW@0|0|0@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@RMD4965633@DW@0|0|0@DW@width@DX@genericSetNodeStyle@DW@RMD4965633@DW@0|0|0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@RMD4965633@DW@0|0|0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@RMD4965633@DW@0|0|0|0@DW@margin-top@DW@1px@DX@genericSetNodeStyle@DW@RMD4965633@DW@0|0|0|0@DW@margin-bottom@DW@1px@DX@genericRemoveNodeStyle@DW@RMD4965633@DW@0|0|0|0@DW@height@DX@genericSetNodeStyle@DW@RMD4965633@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@RMD4965633@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@RMD4965633@DW@0|0|0|0@DW@margin-left@DW@1px@DX@genericSetNodeStyle@DW@RMD4965633@DW@0|0|0|0@DW@margin-right@DW@1px@DX@genericRemoveNodeStyle@DW@RMD4965633@DW@0|0|0|0@DW@width@DX@genericSetNodeStyle@DW@YIP4965875@DW@0|0@DW@width@DW@0px@DX@genericRemoveNodeStyle@DW@YIP4965875@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@YIP4965875@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@YIP4965875@DW@0|0@DW@height@DW@0px@DX@genericRemoveNodeStyle@DW@YIP4965875@DW@0|0@DW@bottom@DX@genericSetNodeStyle@DW@YIP4965875@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@WLV4965875@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@WLV4965875@DW@0|0@DW@right@DW@0@DX@genericRemoveNodeStyle@DW@WLV4965875@DW@0|0@DW@margin-left@DX@genericRemoveNodeStyle@DW@WLV4965875@DW@0|0@DW@width@DX@genericSetNodeStyle@DW@WLV4965875@DW@0|0@DW@height@DW@0px@DX@genericSetNodeStyle@DW@WLV4965875@DW@0|0@DW@margin-top@DW@0px@DX@genericSetNodeStyle@DW@WLV4965875@DW@0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@WLV4965875@DW@0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@WLV4965875@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@WLV4965875@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@WLV4965875@DW@0|0|0@DW@height@DW@0px@DX@genericSetNodeStyle@DW@WLV4965875@DW@0|0|0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@WLV4965875@DW@0|0|0@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@WLV4965875@DW@0|0|0@DW@width@DX@genericSetNodeStyle@DW@WLV4965875@DW@0|0|0|0@DW@height@DW@0px@DX@genericSetNodeStyle@DW@WLV4965875@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@WLV4965875@DW@0|0|0|0@DW@margin-top@DW@0px@DX@genericRemoveNodeStyle@DW@WLV4965875@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@WLV4965875@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@WLV4965875@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@WLV4965875@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@WLV4965875@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@WLV4965875@DW@0|0|0|0@DW@width@DX@evaluateJavascript@DW@dwFrameworkMeasureTextSize('Open Sans,Segoe UI,Verdana,Tahoma,Arial,sans-serif,Arial Unicode MS,Helvetica,Lucida Grande,Geneva,Sans-Serif', '14px', 'normal', 'normal', ['83AB575AF42F427BAF87FBBEF9045EFC', 'Search\\u00A0in\\u00A0the\\u00A0parts\\u00A0catalogue', '949B99D3355748E6B02AD2B8D3780D8B', '\\u00A0Search\\u00A0in\\u00A0parts\\u00A0catalogue', '333AB1218C7A46CA856D426895276CEE', 'Show\\u00A0more\\u00A0search\\u00A0results', 'D82A4AA773144805B570E27B44C7DFA4', 'Description', '99D696B86A9541799C0A4BA932B2239C', 'Disable\\u00A0fading\\u00A0of\\u00A0this\\u00A0button\\u00A0bar', '9429EC7B28934E66A638FFBBD2CAF5EE', '\\u00A0', '9383BCE1FCAB43DFBA89BA6B9C61DB66', 'Charger', 'EE2E33A7BB7541A3A76998EF13BE100D', 'Material\\u00A0number', '8853AF7740404A9EA046059598A5CC1C', 'Basis-Plus\\u00A0system', 'EE4FA8933EF84F288C6822018A856335', 'Part\\u00A0no.\\u00A0\\/\\u00A0T\\u00A0-\\u00A0no.', 'DF823B32F39D434984E006516A8172D5', '', 'FE68F7F6BEC94D41812BAFFEE95D7BCA', 'Rotate\\u00A0drawing\\u00A0by\\u00A090', '6731ADC6896B453C94B7119E2F377387', 'Exoskeletons', '0A0F36BAF94644FE89DC15CC5A239839', 'Scale\\u00A0image\\u00A0down', '458DA42E8F2E4A9EBDE011D64D7EE54B', '...', '9E8A2336A7224213A15DCAEB91C6CA26', 'CMS\\u00A0-\\u00A0Compact\\u00A0Modul\\u00A0System', '6D6D0B2438CE4497A8851954797C22EB', 'Print', '22C542A3525D427CB4A8261740236977', 'Minimize\\u00A0parts\\u00A0list', '6F78EC077FF94D4AA70A70605944EFDB', 'Show\\u00A0parts\\u00A0list\\u00A0on\\u00A0right\\u00A0side', '500EB1A16C324C7294FBB2BE51829CBB', 'Goto\\u00A0assembly', 'B31A7BA03F424619B681DAFD2A85A918', 'Drywall\\u00A0construction\\u00A0and\\u00A0renovation', '851B9BDC6F504F5186F564701D1E2EC5', 'Machining\\u00A0surfaces', '639C0F95E14343869E89B452ECFEEFC1', 'Joining\\u00A0\\u2013\\u00A0DOMINO\\u00A0joining\\u00A0system', 'F1A902FC845B474DA9527BA838EADB76', 'Dust\\u00A0extraction', '4203A5FDFD524153926C8CB6C424C8AF', 'Routing', '00A4AD8F58BC45E2995886825E3386CB', 'Go\\u00A0to', '8ABA955056354B5BA32A49E24AF32AF4', 'Carpentry\\u00A0machines', '6074B138CAB14B52A31E349DB11D5223', 'Assembly', 'DB8A9307ACBD497C865DBA49F8884115', 'Settings', '2DE8F9B8349A48BF9A50D2EDDDC508B5', 'A', '2E2484A93A0648909E83A3B7389826E7', 'Show\\u00A0pan\\u00A0window', 'E3346F533F9941D4BF16C6F00A651E6D', 'Edge\\u00A0trimming', '3E50C207346C4502A2BF3201821BE14F', 'Drilling\\u00A0and\\u00A0screwdriving', '2B11F7C79100424C833430B4D9560786', 'Workplace\\u00A0organisation', '3A0EFB45BEE441FEBF2C895CF1A1AFBF', 'Oscillators', '8B8051EF8B184BD8959A0C6EBC07739B', 'Cutting', '06FEF7DA29F54777ADC060A6DA261996', 'Adjust\\u00A0drawing\\u00A0to\\u00A0window\\u00A0width', '2769346C2C344EBC866AD2F7636087D4', 'Planing', '690075500D084A77908EB6F03029B802', 'Select\\u00A0section', '05869441F1194357A7994A7FC913A181', 'FESTOOL', '593F14A6C7304BB190319EC1636F3D43', 'Saws', '8D97C9C52D0A4C0A8C8905A2E05BB29F', 'End\\u00A0multi\\u00A0selection', '9F8011F7561A49D0A5FCE152E4575583', 'Scale\\u00A0image\\u00A0up', '210DB609E50B497CAF279C5ED942FF26', 'Tree\\u00A0view']);@DX@evaluateJavascript@DW@dwFrameworkMeasureTextSize('Open Sans,Segoe UI,Verdana,Tahoma,Arial,sans-serif,Arial Unicode MS,Helvetica,Lucida Grande,Geneva,Sans-Serif', '13px', 'normal', '600', ['6C9770B52D4B40B386BEB7E6092AD184', 'SI_SUB_KATALOG', '057AEDF77DEE4C7B803704561C0C4EC6', 'Price\\u00A0each\\u00A0Excl\\u00A0VAT', '1C8F53C42A414AEC84388E5FA03E8D02', 'Found\\u00A0in\\u00A0...', '0CF61E632BB645C78036F24A12BE31CD', 'Currency', 'E95A1FECCE4C44148D52530079A519C5', 'Part\\u00A0no.\\u00A0\\/\\u00A0T\\u00A0-\\u00A0Nr.', '6C7D0947F6A64656A875D05F271D6C2F', 'Description', 'FA84B960BE814889BF5D343BC45AEABD', 'storage\\u00A0location']);@DX@evaluateJavascript@DW@dwFrameworkMeasureTextSize('Open Sans,Segoe UI,Verdana,Tahoma,Arial,sans-serif,Arial Unicode MS,Helvetica,Lucida Grande,Geneva,Sans-Serif', '20px', 'normal', '600', ['04ACEC90D9FF4144AAFEF04822A41092', 'FESTOOL', 'B5D6C680FE20496AAE59D5CE79F3ABDA', 'Complete\\u00A0documentation']);@DX@evaluateJavascript@DW@dwFrameworkMeasureTextSize('Open Sans,Segoe UI,Verdana,Tahoma,Arial,sans-serif,Arial Unicode MS,Helvetica,Lucida Grande,Geneva,Sans-Serif', '16px', 'normal', '600', ['8F94BD907A704715BDD8F3CC57582285', 'FESTOOL', 'A9887DD913F541C38416DBEBABC7D04A', 'STRUCTURE', '77697791BB234746B50439A1909D0A83', 'Document\\u00A0links']);@DX@evaluateJavascript@DW@dwFrameworkSendTextSizes('TWM4965563', 'TWM4965563');@DX@setChildThreadCount@DW@1"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": -1,
          "_transferSize": 17139,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:12.075Z",
        "time": 103.23699994478375,
        "timings": {
          "blocked": 1.1049999249577522,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0.31299999999999994,
          "wait": 100.83299996251613,
          "receive": 0.986000057309866,
          "_blocked_queueing": 0.7239999249577522,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_connectionId": "1726423",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "script",
          "stack": {
            "callFrames": [
              {
                "functionName": "dwAjaxToServer",
                "scriptId": "117",
                "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                "lineNumber": 16016,
                "columnNumber": 12
              },
              {
                "functionName": "dwAjaxSendUpdates",
                "scriptId": "117",
                "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                "lineNumber": 15812,
                "columnNumber": 8
              },
              {
                "functionName": "dwAjaxDwrFinished",
                "scriptId": "117",
                "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                "lineNumber": 16040,
                "columnNumber": 4
              },
              {
                "functionName": "xmlHttp.onreadystatechange",
                "scriptId": "117",
                "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                "lineNumber": 16002,
                "columnNumber": 16
              }
            ],
            "parent": {
              "description": "XMLHttpRequest.send",
              "callFrames": [
                {
                  "functionName": "dwAjaxToServer",
                  "scriptId": "117",
                  "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                  "lineNumber": 16016,
                  "columnNumber": 12
                },
                {
                  "functionName": "dwAjaxSendUpdates",
                  "scriptId": "117",
                  "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                  "lineNumber": 15812,
                  "columnNumber": 8
                },
                {
                  "functionName": "dwAjaxAddUpdate",
                  "scriptId": "117",
                  "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                  "lineNumber": 15751,
                  "columnNumber": 8
                },
                {
                  "functionName": "dwAjaxDefaultOnResize",
                  "scriptId": "117",
                  "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                  "lineNumber": 17548,
                  "columnNumber": 4
                },
                {
                  "functionName": "DwResizeRegistry.notifyControls",
                  "scriptId": "117",
                  "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                  "lineNumber": 13847,
                  "columnNumber": 12
                },
                {
                  "functionName": "DwResizeRegistry.updateSizes",
                  "scriptId": "117",
                  "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                  "lineNumber": 13789,
                  "columnNumber": 13
                },
                {
                  "functionName": "dwFrameworkInitFrameworkFinished",
                  "scriptId": "117",
                  "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                  "lineNumber": 7290,
                  "columnNumber": 34
                },
                {
                  "functionName": "init",
                  "scriptId": "122",
                  "url": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513",
                  "lineNumber": 71,
                  "columnNumber": 2272
                },
                {
                  "functionName": "onload",
                  "scriptId": "124",
                  "url": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513#2VF2D59BB6A19D241BF39AB8ED9782EC2676FB7D71DEA3F1B037E8A2D71F8FA91ED584BD081D6809030379CF8994891F65A8986CB38788501DB2F64C48C2D48691EC16B9477F538F011A91C9AA4E9AFEE315C79723E5AA1EB16B15031488FA743A690E2C31409293DC460553BC507C7BD94F7BF98B910BA76F04056FEF1A7BDC375B3BE8AE75D4A926AFE49D7762A6E60476BEBC713FA7FB2B155EB5CCD51A90D291C6798FCFE55699A76410CDE3B0446A5B504D3A8DCABCDDFDC43E28D86EDC81E6B7BFBA9C17998722AD7DC364F9B360B683AAF83000B8EBD51BD302897629C3579B0F4749890DFAEB2362C869E392B5E3FAADBE2D43BCFBC4C3632980B4B3D178D71AEF2EDC4AC0A207E5B628656549B3046DEBFB63331888B0C66897C62E02F0B82D220F96B06850C9AC59B34A7068454EB9B217DACCF224AF08DC573CEF013D5A7451FCDAFD827D8468EB71307DB9C421BE5AB56DD2CE6D2BAE5FFAD443C040E219C275338272C421BE5AB56DD2CE4EF98D6992C4A806A407D72CC44AD536F310827032D1AC056F89419881BF0DD5FCA12A0C1A8645C27C84DE9E0758A61631D52F27C125C1962BEB5B1C502E63A0BD6FF56630359A02627BDDDF793428EB2FA9EF932288B6B1EDF8A369FE8EE7F897DB9E3E3C84DD434F60686263DBEFD8FCCFCDAA59EAFC214F8171A05960530A9E5ABC51215E170F97DB9E3E3C84DD43DEC89585795B3874396402DD57C617A3C55FAE20F8C83C126638D24CBBC9DDDC8C8FA8D1298C97B9BBB92FB6BF271FB48345DDE94A571D0203AF5EEE5F1F2504DB148DE2EFD18A5668F70C371CE81BC89B37ABAF25FA84DACBA72043D96AEA4F298899DF7BA9DE229033D0AC10369C34D8502B5D38A884306870A18576B8D81AEFED8CAFCAE38FB38CDCE50946CE89B85A3E170EFEED9236091324AA21FE5C69BFD3C9875BD8C8EDED07AD10AEF4D84EEA4B9B45BFB90963B7D3C6C577B0F69F905385ABE9EDFFA53913940B31BC4622F515E8079FFB2D51BD6FF56630359A02627BDDDF793428EB2FA9EF932288B6B1EDF8A369FE8EE7F897DB9E3E3C84DD434F60686263DBEFD8FCCFCDAA59EAFC214F8171A05960530A9E5ABC51215E170F97DB9E3E3C84DD43DEC89585795B387440FD0D31E517DED4D161239C4F766D2711E3BB35041F1DDA7CF0863DB9386F606E08741D82FFD013293CC950248C0832FD04E7D3A07AD7B057EC30D755D283A4F515E8079FFB2D513D641BC2AF619F99C2F82A5CD507A9B60068C075906E849BA93A7B904DEB5A243B82214FFADAC952DD79BC627DD9DA3754FF0BE055B41B169E69002C06B4DE79F6C7B0DFBD3A0F522E65D7D9029BAB57CA12C1989BD261A69E69002C06B4DE79C7DC379705A4A84B6638D24CBBC9DDDC20B327CD29F50D15E4AD0A914CE23B089F436871D356837441BEC24302DBDBEC90644A227A6BC2D79DD0FB0244CDB5D164AFEE39E460DE8BE26433895B733653B9EA7E0818E6E95D41C8185567494EE8A5DD1D3D275250FD9A11E3A038EC5B42E9233C1D71C6391368F8A064E4615E43B811320325352C9D7B0496E262C373D04BE9E084FF8E9A3F2E65D7D9029BAB57B5CE2E7DCF0EAE70274DA4EDC454021AAB47E7D7FED1AFAB1FC721FCFD895E4094141E1AD049AA3622BF63BEA0373671EC16B9477F538F011A91C9AA4E9AFEE346D2AB2727781C74481117D634D964C50381183B796E17F213DA5CF05D8352EA7C2C0FF9D1BA7E865443427661C8AD65556FD0C06B132190C1E51CF9D83BACA12D04FBEDDEE8AF2AF6B3D33534177841A0CA7DC92DFEE22317138B4EC17ABBEA0381183B796E17F213DA5CF05D8352EA04056FEF1A7BDC378767B1590C24642445D85C35CE229B547E56B897C73DE385115B9CAB0EFDD59AEE3351CA6A1D79B6440232ECD2F139DBAB47E7D7FED1AFAB1FC721FCFD895E4076B5E6FD416F51F99AF8A113450A88512654A5EFA96698B9FE795E3125D4E185E2262FA8F088B802ACDB74B330B326A93FC34E72FDF43319A016572D59868882154FBE04B0A192C40BC3C01ADFBA2D0FFFF5161B05317F677366F94870710960",
                  "lineNumber": 71,
                  "columnNumber": 3699
                }
              ]
            }
          }
        },
        "_priority": "High",
        "_resourceType": "xhr",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "POST",
          "url": "https://ekat.festool.de/ekat/ajax",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": ":authority",
              "value": "ekat.festool.de"
            },
            {
              "name": ":method",
              "value": "POST"
            },
            {
              "name": ":path",
              "value": "/ekat/ajax"
            },
            {
              "name": ":scheme",
              "value": "https"
            },
            {
              "name": "accept",
              "value": "*/*"
            },
            {
              "name": "accept-encoding",
              "value": "gzip, deflate, br, zstd"
            },
            {
              "name": "accept-language",
              "value": "en-GB,en-US;q=0.9,en;q=0.8"
            },
            {
              "name": "cache-control",
              "value": "no-cache,no-store,must-revalidate,post-check=0,pre-check=0"
            },
            {
              "name": "content-length",
              "value": "9272"
            },
            {
              "name": "content-type",
              "value": "text/plain; charset=UTF-8"
            },
            {
              "name": "expires",
              "value": "0"
            },
            {
              "name": "origin",
              "value": "https://ekat.festool.de"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "pragma",
              "value": "no-cache"
            },
            {
              "name": "priority",
              "value": "u=1, i"
            },
            {
              "name": "referer",
              "value": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            },
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "sec-fetch-dest",
              "value": "empty"
            },
            {
              "name": "sec-fetch-mode",
              "value": "cors"
            },
            {
              "name": "sec-fetch-site",
              "value": "same-origin"
            },
            {
              "name": "user-agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            }
          ],
          "queryString": [],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 9272,
          "postData": {
            "mimeType": "text/plain; charset=UTF-8",
            "text": "currentBrowserRootWindow@DW@TWM4965563@DW@1388@DW@1140@DX@FEA4965620@DW@FEA4965620@DW@onresizeEvent@DW@newWidth=348@DWSUB@newHeight=1032@DWSUB@relX=0@DWSUB@relY=0@DWSUB@absX=49@DWSUB@absY=82@DWSUB@newWidth=348@DWSUB@newHeight=1032@DWSUB@hasVerticalOverflow=false@DWSUB@hasHorizontalOverflow=false@DX@UWV4965620@DW@UWV4965620@DW@onresizeEvent@DW@newWidth=350@DWSUB@newHeight=1092@DWSUB@relX=48@DWSUB@relY=24@DWSUB@absX=48@DWSUB@absY=24@DWSUB@newWidth=350@DWSUB@newHeight=1092@DWSUB@hasVerticalOverflow=false@DWSUB@hasHorizontalOverflow=false@DX@FSX4965620@DW@FSX4965620@DW@onresizeEvent@DW@newWidth=398@DWSUB@newHeight=1116@DWSUB@relX=0@DWSUB@relY=0@DWSUB@absX=0@DWSUB@absY=0@DWSUB@newWidth=398@DWSUB@newHeight=1116@DWSUB@hasVerticalOverflow=false@DWSUB@hasHorizontalOverflow=false@DX@SQG4965733@DW@SQG4965733@DW@onresizeEvent@DW@newWidth=40@DWSUB@newHeight=40@DWSUB@relX=96@DWSUB@relY=0@DWSUB@absX=510@DWSUB@absY=24@DWSUB@newWidth=40@DWSUB@newHeight=40@DWSUB@hasVerticalOverflow=false@DWSUB@hasHorizontalOverflow=false@DX@RFB4965940@DW@RFB4965940@DW@onresizeEvent@DW@newWidth=280@DWSUB@newHeight=40@DWSUB@relX=0@DWSUB@relY=0@DWSUB@absX=275@DWSUB@absY=33@DWSUB@newWidth=280@DWSUB@newHeight=40@DWSUB@hasVerticalOverflow=false@DWSUB@hasHorizontalOverflow=false@DX@LAC4965940@DW@LAC4965940@DW@onresizeEvent@DW@newWidth=140@DWSUB@newHeight=658@DWSUB@relX=0@DWSUB@relY=0@DWSUB@absX=415@DWSUB@absY=73@DWSUB@newWidth=140@DWSUB@newHeight=658@DWSUB@hasVerticalOverflow=false@DWSUB@hasHorizontalOverflow=false@DX@HSX4965633@DW@HSX4965633@DW@onresizeEvent@DW@newWidth=142@DWSUB@newHeight=660@DWSUB@relX=0@DWSUB@relY=0@DWSUB@absX=414@DWSUB@absY=72@DWSUB@newWidth=142@DWSUB@newHeight=660@DWSUB@hasVerticalOverflow=false@DWSUB@hasHorizontalOverflow=false@DX@MWJ4965656@DW@MWJ4965656@DW@onresizeEvent@DW@newWidth=140@DWSUB@newHeight=313@DWSUB@relX=0@DWSUB@relY=51@DWSUB@absX=415@DWSUB@absY=801@DWSUB@newWidth=138@DWSUB@newHeight=311@DWSUB@hasVerticalOverflow=true@DWSUB@hasHorizontalOverflow=false@DX@IAP4965656@DW@IAP4965656@DW@onresizeEvent@DW@newWidth=140@DWSUB@newHeight=51@DWSUB@relX=0@DWSUB@relY=0@DWSUB@absX=415@DWSUB@absY=750@DWSUB@newWidth=140@DWSUB@newHeight=51@DWSUB@hasVerticalOverflow=false@DWSUB@hasHorizontalOverflow=true@DX@SPL4965656@DW@SPL4965656@DW@onresizeEvent@DW@newWidth=140@DWSUB@newHeight=364@DWSUB@relX=0@DWSUB@relY=0@DWSUB@absX=415@DWSUB@absY=750@DWSUB@newWidth=140@DWSUB@newHeight=364@DWSUB@hasVerticalOverflow=false@DWSUB@hasHorizontalOverflow=false@DX@NMU4965620@DW@NMU4965620@DW@onresizeEvent@DW@newWidth=140@DWSUB@newHeight=364@DWSUB@relX=0@DWSUB@relY=0@DWSUB@absX=415@DWSUB@absY=750@DWSUB@newWidth=140@DWSUB@newHeight=364@DWSUB@hasVerticalOverflow=false@DWSUB@hasHorizontalOverflow=false@DX@HMO4965633@DW@HMO4965633@DW@onresizeEvent@DW@newWidth=142@DWSUB@newHeight=368@DWSUB@relX=0@DWSUB@relY=676@DWSUB@absX=414@DWSUB@absY=748@DWSUB@newWidth=142@DWSUB@newHeight=368@DWSUB@hasVerticalOverflow=false@DWSUB@hasHorizontalOverflow=false@DX@LSK4965620@DW@LSK4965620@DW@onresizeEvent@DW@newWidth=142@DWSUB@newHeight=1044@DWSUB@relX=0@DWSUB@relY=48@DWSUB@absX=414@DWSUB@absY=72@DWSUB@newWidth=142@DWSUB@newHeight=1044@DWSUB@hasVerticalOverflow=false@DWSUB@hasHorizontalOverflow=false@DX@GYM4965654@DW@GYM4965654@DW@onresizeEvent@DW@newWidth=790@DWSUB@newHeight=954@DWSUB@relX=0@DWSUB@relY=0@DWSUB@absX=573@DWSUB@absY=90@DWSUB@newWidth=790@DWSUB@newHeight=954@DWSUB@hasVerticalOverflow=false@DWSUB@hasHorizontalOverflow=false@DX@YAQ4965633@DW@YAQ4965633@DW@onresizeEvent@DW@newWidth=792@DWSUB@newHeight=1092@DWSUB@relX=158@DWSUB@relY=0@DWSUB@absX=572@DWSUB@absY=24@DWSUB@newWidth=792@DWSUB@newHeight=1092@DWSUB@hasVerticalOverflow=false@DWSUB@hasHorizontalOverflow=false@DX@ERK4965633@DW@ERK4965633@DW@onresizeEvent@DW@newWidth=950@DWSUB@newHeight=1092@DWSUB@relX=0@DWSUB@relY=24@DWSUB@absX=414@DWSUB@absY=24@DWSUB@newWidth=950@DWSUB@newHeight=1092@DWSUB@hasVerticalOverflow=false@DWSUB@hasHorizontalOverflow=false@DX@PBG4965620@DW@PBG4965620@DW@onresizeEvent@DW@newWidth=1388@DWSUB@newHeight=1116@DWSUB@relX=0@DWSUB@relY=0@DWSUB@absX=0@DWSUB@absY=0@DWSUB@newWidth=1388@DWSUB@newHeight=1116@DWSUB@hasVerticalOverflow=false@DWSUB@hasHorizontalOverflow=false@DX@YIP4965875@DW@YIP4965875@DW@onresizeEvent@DW@newWidth=1356@DWSUB@newHeight=0@DWSUB@relX=4@DWSUB@relY=12@DWSUB@absX=4@DWSUB@absY=1128@DWSUB@newWidth=1356@DWSUB@newHeight=0@DWSUB@hasVerticalOverflow=false@DWSUB@hasHorizontalOverflow=false@DX@RNT4965681@DW@RNT4965681@DW@imageLoadedEvent@DW@@DX@TWM4965563@DW@TWM4965563@DW@__custom_systemmeasuretextsize@DW@width0=189@DWSUB@height0=15@DWSUB@elemGuid0=83AB575AF42F427BAF87FBBEF9045EFC@DWSUB@width1=168@DWSUB@height1=15@DWSUB@elemGuid1=949B99D3355748E6B02AD2B8D3780D8B@DWSUB@width2=169@DWSUB@height2=15@DWSUB@elemGuid2=333AB1218C7A46CA856D426895276CEE@DWSUB@width3=75@DWSUB@height3=15@DWSUB@elemGuid3=D82A4AA773144805B570E27B44C7DFA4@DWSUB@width4=210@DWSUB@height4=15@DWSUB@elemGuid4=99D696B86A9541799C0A4BA932B2239C@DWSUB@width5=4@DWSUB@height5=15@DWSUB@elemGuid5=9429EC7B28934E66A638FFBBD2CAF5EE@DWSUB@width6=52@DWSUB@height6=15@DWSUB@elemGuid6=9383BCE1FCAB43DFBA89BA6B9C61DB66@DWSUB@width7=110@DWSUB@height7=15@DWSUB@elemGuid7=EE2E33A7BB7541A3A76998EF13BE100D@DWSUB@width8=115@DWSUB@height8=15@DWSUB@elemGuid8=8853AF7740404A9EA046059598A5CC1C@DWSUB@width9=104@DWSUB@height9=15@DWSUB@elemGuid9=EE4FA8933EF84F288C6822018A856335@DWSUB@width10=0@DWSUB@height10=0@DWSUB@elemGuid10=DF823B32F39D434984E006516A8172D5@DWSUB@width11=138@DWSUB@height11=15@DWSUB@elemGuid11=FE68F7F6BEC94D41812BAFFEE95D7BCA@DWSUB@width12=86@DWSUB@height12=15@DWSUB@elemGuid12=6731ADC6896B453C94B7119E2F377387@DWSUB@width13=117@DWSUB@height13=15@DWSUB@elemGuid13=0A0F36BAF94644FE89DC15CC5A239839@DWSUB@width14=11@DWSUB@height14=15@DWSUB@elemGuid14=458DA42E8F2E4A9EBDE011D64D7EE54B@DWSUB@width15=196@DWSUB@height15=15@DWSUB@elemGuid15=9E8A2336A7224213A15DCAEB91C6CA26@DWSUB@width16=31@DWSUB@height16=15@DWSUB@elemGuid16=6D6D0B2438CE4497A8851954797C22EB@DWSUB@width17=119@DWSUB@height17=15@DWSUB@elemGuid17=22C542A3525D427CB4A8261740236977@DWSUB@width18=180@DWSUB@height18=15@DWSUB@elemGuid18=6F78EC077FF94D4AA70A70605944EFDB@DWSUB@width19=97@DWSUB@height19=15@DWSUB@elemGuid19=500EB1A16C324C7294FBB2BE51829CBB@DWSUB@width20=237@DWSUB@height20=15@DWSUB@elemGuid20=B31A7BA03F424619B681DAFD2A85A918@DWSUB@width21=126@DWSUB@height21=15@DWSUB@elemGuid21=851B9BDC6F504F5186F564701D1E2EC5@DWSUB@width22=215@DWSUB@height22=15@DWSUB@elemGuid22=639C0F95E14343869E89B452ECFEEFC1@DWSUB@width23=100@DWSUB@height23=15@DWSUB@elemGuid23=F1A902FC845B474DA9527BA838EADB76@DWSUB@width24=50@DWSUB@height24=15@DWSUB@elemGuid24=4203A5FDFD524153926C8CB6C424C8AF@DWSUB@width25=36@DWSUB@height25=15@DWSUB@elemGuid25=00A4AD8F58BC45E2995886825E3386CB@DWSUB@width26=131@DWSUB@height26=15@DWSUB@elemGuid26=8ABA955056354B5BA32A49E24AF32AF4@DWSUB@width27=62@DWSUB@height27=15@DWSUB@elemGuid27=6074B138CAB14B52A31E349DB11D5223@DWSUB@width28=52@DWSUB@height28=15@DWSUB@elemGuid28=DB8A9307ACBD497C865DBA49F8884115@DWSUB@width29=9@DWSUB@height29=15@DWSUB@elemGuid29=2DE8F9B8349A48BF9A50D2EDDDC508B5@DWSUB@width30=119@DWSUB@height30=15@DWSUB@elemGuid30=2E2484A93A0648909E83A3B7389826E7@DWSUB@width31=96@DWSUB@height31=15@DWSUB@elemGuid31=E3346F533F9941D4BF16C6F00A651E6D@DWSUB@width32=161@DWSUB@height32=15@DWSUB@elemGuid32=3E50C207346C4502A2BF3201821BE14F@DWSUB@width33=154@DWSUB@height33=15@DWSUB@elemGuid33=2B11F7C79100424C833430B4D9560786@DWSUB@width34=68@DWSUB@height34=15@DWSUB@elemGuid34=3A0EFB45BEE441FEBF2C895CF1A1AFBF@DWSUB@width35=47@DWSUB@height35=15@DWSUB@elemGuid35=8B8051EF8B184BD8959A0C6EBC07739B@DWSUB@width36=209@DWSUB@height36=15@DWSUB@elemGuid36=06FEF7DA29F54777ADC060A6DA261996@DWSUB@width37=48@DWSUB@height37=15@DWSUB@elemGuid37=2769346C2C344EBC866AD2F7636087D4@DWSUB@width38=89@DWSUB@height38=15@DWSUB@elemGuid38=690075500D084A77908EB6F03029B802@DWSUB@width39=60@DWSUB@height39=15@DWSUB@elemGuid39=05869441F1194357A7994A7FC913A181@DWSUB@width40=33@DWSUB@height40=15@DWSUB@elemGuid40=593F14A6C7304BB190319EC1636F3D43@DWSUB@width41=124@DWSUB@height41=15@DWSUB@elemGuid41=8D97C9C52D0A4C0A8C8905A2E05BB29F@DWSUB@width42=98@DWSUB@height42=15@DWSUB@elemGuid42=9F8011F7561A49D0A5FCE152E4575583@DWSUB@width43=62@DWSUB@height43=15@DWSUB@elemGuid43=210DB609E50B497CAF279C5ED942FF26@DWSUB@width44=107@DWSUB@height44=15@DWSUB@elemGuid44=6C9770B52D4B40B386BEB7E6092AD184@DWSUB@width45=120@DWSUB@height45=15@DWSUB@elemGuid45=057AEDF77DEE4C7B803704561C0C4EC6@DWSUB@width46=69@DWSUB@height46=15@DWSUB@elemGuid46=1C8F53C42A414AEC84388E5FA03E8D02@DWSUB@width47=57@DWSUB@height47=15@DWSUB@elemGuid47=0CF61E632BB645C78036F24A12BE31CD@DWSUB@width48=99@DWSUB@height48=15@DWSUB@elemGuid48=E95A1FECCE4C44148D52530079A519C5@DWSUB@width49=72@DWSUB@height49=15@DWSUB@elemGuid49=6C7D0947F6A64656A875D05F271D6C2F@DWSUB@width50=101@DWSUB@height50=15@DWSUB@elemGuid50=FA84B960BE814889BF5D343BC45AEABD@DWSUB@width51=86@DWSUB@height51=15@DWSUB@elemGuid51=04ACEC90D9FF4144AAFEF04822A41092@DWSUB@width52=247@DWSUB@height52=15@DWSUB@elemGuid52=B5D6C680FE20496AAE59D5CE79F3ABDA@DWSUB@width53=69@DWSUB@height53=15@DWSUB@elemGuid53=8F94BD907A704715BDD8F3CC57582285@DWSUB@width54=90@DWSUB@height54=15@DWSUB@elemGuid54=A9887DD913F541C38416DBEBABC7D04A@DWSUB@width55=121@DWSUB@height55=15@DWSUB@elemGuid55=77697791BB234746B50439A1909D0A83@DW@"
          }
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://ekat.festool.de"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "cache-control",
              "value": "no-cache,no-store,must-revalidate,post-check=0,pre-check=0"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "content-length",
              "value": "22746"
            },
            {
              "name": "content-type",
              "value": "text/html;charset=UTF-8"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 09:09:51 GMT"
            },
            {
              "name": "expires",
              "value": "Thu, 01 Jan 1970 00:00:00 GMT"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "pragma",
              "value": "no-cache"
            },
            {
              "name": "vary",
              "value": "Origin"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "x-robots-tag",
              "value": "noindex"
            }
          ],
          "cookies": [],
          "content": {
            "size": 384045,
            "mimeType": "text/html",
            "text": "setStyle@DW@HGS4965634@DW@font-size@DW@14px@DX@setStyle@DW@HGS4965634@DW@line-height@DW@15px@DX@setStyle@DW@HGS4965634@DW@font-size@DW@16px@DX@setStyle@DW@HGS4965634@DW@line-height@DW@17px@DX@setStyle@DW@MNG4965634@DW@min-width@DW@100px@DX@setStyle@DW@MNG4965634@DW@background-color@DW@#dddddd@DX@removeStyle@DW@MNG4965634@DW@background-image@DX@setStyle@DW@MNG4965634@DW@border-radius@DW@2px@DX@setStyle@DW@MNG4965634@DW@filter@DW@progid:DXImageTransform.Microsoft.Shadow(color='rgba(0,0,0,0.24)', Direction=135, Strength=0)@DX@setStyle@DW@MNG4965634@DW@box-shadow@DW@0 2px 2px rgba(0,0,0,0.24)@DX@setStyle@DW@MNG4965634@DW@-webkit-box-shadow@DW@0 2px 2px rgba(0,0,0,0.24)@DX@setStyle@DW@MNG4965634@DW@z-index@DW@1@DX@setStyle@DW@MNG4965634@DW@border-radius@DW@0px@DX@removeStyle@DW@MNG4965634@DW@filter@DX@removeStyle@DW@MNG4965634@DW@box-shadow@DX@removeStyle@DW@MNG4965634@DW@-webkit-box-shadow@DX@setStyle@DW@MNG4965634@DW@z-index@DW@1@DX@setStyle@DW@MNG4965634@DW@background-color@DW@transparent@DX@removeStyle@DW@MNG4965634@DW@background-image@DX@setStyle@DW@MNG4965634@DW@min-width@DW@40px@DX@evaluateJavascript@DW@dwScrollpaneInitializeScrollpaneFadings('FEA4965620', '{\"sides\":{\"TOP\":0,\"RIGHT\":0,\"LEFT\":0,\"BOTTOM\":0}}');@DX@evaluateJavascript@DW@dwScrollpaneInitializeScrollpaneFadings('FEA4965620', '{\"sides\":{\"TOP\":0,\"RIGHT\":0,\"LEFT\":0,\"BOTTOM\":0}}');@DX@genericRemoveNode@DW@RFB4965940@DW@0|0@DW@6@DX@genericRemoveNode@DW@RFB4965940@DW@0|0@DW@5@DX@genericRemoveNode@DW@RFB4965940@DW@0|0@DW@4@DX@genericRemoveNode@DW@RFB4965940@DW@0|0@DW@3@DX@genericRemoveNode@DW@RFB4965940@DW@0|0@DW@2@DX@genericRemoveNode@DW@RFB4965940@DW@0|0@DW@1@DX@genericRemoveNode@DW@RFB4965940@DW@0|0@DW@0@DX@genericInsertNode@DW@RFB4965940@DW@0|0@DW@0@DW@<div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:40px;text-align:left;height:40px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-20px;right:0;height:40px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><button style=\"cursor:pointer;padding-top:0px;max-height:40px;color:#000000;padding-left:0px;padding-bottom:0px;border-color:transparent;min-height:40px;background-color:transparent;max-width:40px;width:100%;border-width:0px;border-style:solid;text-align:center;padding-right:0px;height:100%;min-width:40px\" type=\"button\" name=\"UON4965940\" class=\"guibutton_enabled brightenOnHoverForGrayComponents brightenAndRemoveShadowOnClick brightenAndRemoveShadowAtInnerImageOnClick cursor_pointer\" id=\"UON4965940\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;JMR4965941\\&quot;&gt;Rotate drawing by 90&lt;\\/div&gt;&#39;, 250, 150, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxButtonOnClick(event, &#39;UON4965940&#39;, &#39;UON4965940&#39;, &#39;&#39;, true, true);dwFrameworkPreventDefaultBehaviour(event);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"width:16px;height:16px\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_rotate_image.png\" alt=\"\" class=\"guibutton_icon\"><span style=\"cursor:pointer;font-weight:inherit;vertical-align:middle;font-size:inherit;font-family:inherit;line-height:inherit;font-style:inherit\" id=\"UON4965940_text\" class=\"cursor_pointer\"></span></button></div></div>@DX@genericInsertNode@DW@RFB4965940@DW@0|0@DW@1@DW@<div style=\"background-color:transparent;top:0px;left:40px;vertical-align:middle;width:40px;text-align:left;height:40px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-20px;right:0;height:40px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><button style=\"cursor:pointer;padding-top:0px;max-height:40px;color:#000000;padding-left:0px;padding-bottom:0px;border-color:transparent;min-height:40px;background-color:transparent;max-width:40px;width:100%;border-width:0px;border-style:solid;text-align:center;padding-right:0px;height:100%;min-width:40px\" type=\"button\" name=\"TXW4965941\" class=\"guibutton_enabled brightenOnHoverForGrayComponents brightenAndRemoveShadowOnClick brightenAndRemoveShadowAtInnerImageOnClick cursor_pointer\" id=\"TXW4965941\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;TOJ4965941\\&quot;&gt;Disable fading of this button bar&lt;\\/div&gt;&#39;, 250, 227, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxButtonOnClick(event, &#39;TXW4965941&#39;, &#39;TXW4965941&#39;, &#39;&#39;, true, true);dwFrameworkPreventDefaultBehaviour(event);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"width:16px;height:16px\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_deactivate_fading_overlay.png\" alt=\"\" class=\"guibutton_icon\"><span style=\"cursor:pointer;font-weight:inherit;vertical-align:middle;font-size:inherit;font-family:inherit;line-height:inherit;font-style:inherit\" id=\"TXW4965941_text\" class=\"cursor_pointer\"></span></button></div></div>@DX@genericInsertNode@DW@RFB4965940@DW@0|0@DW@2@DW@<div style=\"background-color:transparent;top:0px;left:80px;vertical-align:middle;width:40px;text-align:left;height:40px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-20px;right:0;height:40px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><button style=\"cursor:pointer;padding-top:0px;max-height:40px;color:#000000;padding-left:0px;padding-bottom:0px;border-color:transparent;min-height:40px;background-color:transparent;max-width:40px;width:100%;border-width:0px;border-style:solid;text-align:center;padding-right:0px;height:100%;min-width:40px\" type=\"button\" name=\"TXI4965941\" class=\"guibutton_enabled brightenOnHoverForGrayComponents brightenAndRemoveShadowOnClick brightenAndRemoveShadowAtInnerImageOnClick cursor_pointer\" id=\"TXI4965941\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;HCV4965941\\&quot;&gt;Scale image up&lt;\\/div&gt;&#39;, 250, 110, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxButtonOnClick(event, &#39;TXI4965941&#39;, &#39;TXI4965941&#39;, &#39;&#39;, true, true);dwFrameworkPreventDefaultBehaviour(event);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"width:16px;height:16px\" src=\"WEB-RES/resource/resource?id=bi_image_6EA83BB3BFF37828FA6BF2163F5FEE05\" alt=\"\" class=\"guibutton_icon\"><span style=\"cursor:pointer;font-weight:inherit;vertical-align:middle;font-size:inherit;font-family:inherit;line-height:inherit;font-style:inherit\" id=\"TXI4965941_text\" class=\"cursor_pointer\"></span></button></div></div>@DX@setStyle@DW@UON4965940@DW@background-color@DW@#dddddd@DX@removeStyle@DW@UON4965940@DW@background-image@DX@setStyle@DW@UON4965940@DW@background-color@DW@transparent@DX@removeStyle@DW@UON4965940@DW@background-image@DX@setStyle@DW@TXW4965941@DW@background-color@DW@#dddddd@DX@removeStyle@DW@TXW4965941@DW@background-image@DX@setStyle@DW@TXW4965941@DW@background-color@DW@transparent@DX@removeStyle@DW@TXW4965941@DW@background-image@DX@setStyle@DW@TXI4965941@DW@background-color@DW@#dddddd@DX@removeStyle@DW@TXI4965941@DW@background-image@DX@setStyle@DW@TXI4965941@DW@background-color@DW@transparent@DX@removeStyle@DW@TXI4965941@DW@background-image@DX@setStyle@DW@KPX4965940_layoutdiv@DW@left@DW@10px@DX@setStyle@DW@KPX4965940_layoutdiv@DW@width@DW@120px@DX@removeStyle@DW@KPX4965940_layoutdiv@DW@right@DX@setStyle@DW@KPX4965940_layoutdiv@DW@top@DW@618px@DX@setStyle@DW@KPX4965940_layoutdiv@DW@height@DW@40px@DX@removeStyle@DW@KPX4965940_layoutdiv@DW@bottom@DX@setStyle@DW@KPX4965940_layoutdiv@DW@z-index@DW@800@DX@setStyle@DW@QII4965958_layoutdiv@DW@left@DW@0px@DX@setStyle@DW@QII4965958_layoutdiv@DW@width@DW@140px@DX@removeStyle@DW@QII4965958_layoutdiv@DW@right@DX@setStyle@DW@QII4965958_layoutdiv@DW@top@DW@618px@DX@setStyle@DW@QII4965958_layoutdiv@DW@height@DW@40px@DX@removeStyle@DW@QII4965958_layoutdiv@DW@bottom@DX@setStyle@DW@QII4965958_layoutdiv@DW@z-index@DW@799@DX@evaluateJavascript@DW@if(document.getElementById('KPX4965940') != null){document.getElementById('KPX4965940').style.visibility='hidden';document.getElementById('KPX4965940').style.opacity='0.0';document.getElementById('KPX4965940').style.transition='0s';}@DX@evaluateJavascript@DW@if(document.getElementById('QII4965958') != null){document.getElementById('QII4965958').style.visibility='hidden';document.getElementById('QII4965958').style.opacity='0.0';document.getElementById('QII4965958').style.transition='0s';}@DX@setStyle@DW@RNT4965681_layoutdiv@DW@left@DW@0px@DX@setStyle@DW@RNT4965681_layoutdiv@DW@width@DW@140px@DX@removeStyle@DW@RNT4965681_layoutdiv@DW@right@DX@setStyle@DW@RNT4965681_layoutdiv@DW@top@DW@0px@DX@setStyle@DW@RNT4965681_layoutdiv@DW@height@DW@658px@DX@removeStyle@DW@RNT4965681_layoutdiv@DW@bottom@DX@removeStyle@DW@RNT4965681_layoutdiv@DW@z-index@DX@setStyle@DW@UON4965940@DW@background-color@DW@#dddddd@DX@removeStyle@DW@UON4965940@DW@background-image@DX@setStyle@DW@UON4965940@DW@background-color@DW@transparent@DX@removeStyle@DW@UON4965940@DW@background-image@DX@setStyle@DW@TXW4965941@DW@background-color@DW@#dddddd@DX@removeStyle@DW@TXW4965941@DW@background-image@DX@setStyle@DW@TXW4965941@DW@background-color@DW@transparent@DX@removeStyle@DW@TXW4965941@DW@background-image@DX@setStyle@DW@TXI4965941@DW@background-color@DW@#dddddd@DX@removeStyle@DW@TXI4965941@DW@background-image@DX@setStyle@DW@TXI4965941@DW@background-color@DW@transparent@DX@removeStyle@DW@TXI4965941@DW@background-image@DX@setStyle@DW@TPC4965862_layoutdiv@DW@left@DW@378px@DX@setStyle@DW@TPC4965862_layoutdiv@DW@width@DW@46px@DX@removeStyle@DW@TPC4965862_layoutdiv@DW@right@DX@setStyle@DW@TPC4965862_layoutdiv@DW@top@DW@0@DX@setStyle@DW@TPC4965862_layoutdiv@DW@height@DW@100%@DX@removeStyle@DW@TPC4965862_layoutdiv@DW@bottom@DX@setStyle@DW@TPC4965862_layoutdiv@DW@z-index@DW@1@DX@setStyle@DW@GNV4965862_layoutdiv@DW@left@DW@378px@DX@setStyle@DW@GNV4965862_layoutdiv@DW@width@DW@46px@DX@removeStyle@DW@GNV4965862_layoutdiv@DW@right@DX@setStyle@DW@GNV4965862_layoutdiv@DW@top@DW@0@DX@setStyle@DW@GNV4965862_layoutdiv@DW@height@DW@100%@DX@removeStyle@DW@GNV4965862_layoutdiv@DW@bottom@DX@setStyle@DW@GNV4965862_layoutdiv@DW@z-index@DW@1@DX@setStyle@DW@BGF4965862_layoutdiv@DW@left@DW@378px@DX@setStyle@DW@BGF4965862_layoutdiv@DW@width@DW@46px@DX@removeStyle@DW@BGF4965862_layoutdiv@DW@right@DX@setStyle@DW@BGF4965862_layoutdiv@DW@top@DW@0@DX@setStyle@DW@BGF4965862_layoutdiv@DW@height@DW@100%@DX@removeStyle@DW@BGF4965862_layoutdiv@DW@bottom@DX@setStyle@DW@BGF4965862_layoutdiv@DW@z-index@DW@1@DX@setStyle@DW@TUG4965862_layoutdiv@DW@left@DW@378px@DX@setStyle@DW@TUG4965862_layoutdiv@DW@width@DW@46px@DX@removeStyle@DW@TUG4965862_layoutdiv@DW@right@DX@setStyle@DW@TUG4965862_layoutdiv@DW@top@DW@0@DX@setStyle@DW@TUG4965862_layoutdiv@DW@height@DW@100%@DX@removeStyle@DW@TUG4965862_layoutdiv@DW@bottom@DX@setStyle@DW@TUG4965862_layoutdiv@DW@z-index@DW@1@DX@setStyle@DW@TUW4965862_layoutdiv@DW@left@DW@378px@DX@setStyle@DW@TUW4965862_layoutdiv@DW@width@DW@46px@DX@removeStyle@DW@TUW4965862_layoutdiv@DW@right@DX@setStyle@DW@TUW4965862_layoutdiv@DW@top@DW@0@DX@setStyle@DW@TUW4965862_layoutdiv@DW@height@DW@100%@DX@removeStyle@DW@TUW4965862_layoutdiv@DW@bottom@DX@setStyle@DW@TUW4965862_layoutdiv@DW@z-index@DW@1@DX@setStyle@DW@XLC4965862_layoutdiv@DW@left@DW@378px@DX@setStyle@DW@XLC4965862_layoutdiv@DW@width@DW@46px@DX@removeStyle@DW@XLC4965862_layoutdiv@DW@right@DX@setStyle@DW@XLC4965862_layoutdiv@DW@top@DW@0@DX@setStyle@DW@XLC4965862_layoutdiv@DW@height@DW@100%@DX@removeStyle@DW@XLC4965862_layoutdiv@DW@bottom@DX@setStyle@DW@XLC4965862_layoutdiv@DW@z-index@DW@1@DX@setStyle@DW@CHU4965862_layoutdiv@DW@left@DW@378px@DX@setStyle@DW@CHU4965862_layoutdiv@DW@width@DW@46px@DX@removeStyle@DW@CHU4965862_layoutdiv@DW@right@DX@setStyle@DW@CHU4965862_layoutdiv@DW@top@DW@0@DX@setStyle@DW@CHU4965862_layoutdiv@DW@height@DW@100%@DX@removeStyle@DW@CHU4965862_layoutdiv@DW@bottom@DX@setStyle@DW@CHU4965862_layoutdiv@DW@z-index@DW@1@DX@setStyle@DW@TXS4965862_layoutdiv@DW@left@DW@378px@DX@setStyle@DW@TXS4965862_layoutdiv@DW@width@DW@46px@DX@removeStyle@DW@TXS4965862_layoutdiv@DW@right@DX@setStyle@DW@TXS4965862_layoutdiv@DW@top@DW@0@DX@setStyle@DW@TXS4965862_layoutdiv@DW@height@DW@100%@DX@removeStyle@DW@TXS4965862_layoutdiv@DW@bottom@DX@setStyle@DW@TXS4965862_layoutdiv@DW@z-index@DW@1@DX@setStyle@DW@NCG4965862_layoutdiv@DW@left@DW@378px@DX@setStyle@DW@NCG4965862_layoutdiv@DW@width@DW@46px@DX@removeStyle@DW@NCG4965862_layoutdiv@DW@right@DX@setStyle@DW@NCG4965862_layoutdiv@DW@top@DW@0@DX@setStyle@DW@NCG4965862_layoutdiv@DW@height@DW@100%@DX@removeStyle@DW@NCG4965862_layoutdiv@DW@bottom@DX@setStyle@DW@NCG4965862_layoutdiv@DW@z-index@DW@1@DX@setStyle@DW@KUF4965862_layoutdiv@DW@left@DW@378px@DX@setStyle@DW@KUF4965862_layoutdiv@DW@width@DW@46px@DX@removeStyle@DW@KUF4965862_layoutdiv@DW@right@DX@setStyle@DW@KUF4965862_layoutdiv@DW@top@DW@0@DX@setStyle@DW@KUF4965862_layoutdiv@DW@height@DW@100%@DX@removeStyle@DW@KUF4965862_layoutdiv@DW@bottom@DX@setStyle@DW@KUF4965862_layoutdiv@DW@z-index@DW@1@DX@setStyle@DW@ISJ4965862_layoutdiv@DW@left@DW@378px@DX@setStyle@DW@ISJ4965862_layoutdiv@DW@width@DW@46px@DX@removeStyle@DW@ISJ4965862_layoutdiv@DW@right@DX@setStyle@DW@ISJ4965862_layoutdiv@DW@top@DW@0@DX@setStyle@DW@ISJ4965862_layoutdiv@DW@height@DW@100%@DX@removeStyle@DW@ISJ4965862_layoutdiv@DW@bottom@DX@setStyle@DW@ISJ4965862_layoutdiv@DW@z-index@DW@1@DX@setStyle@DW@HEG4965862_layoutdiv@DW@left@DW@378px@DX@setStyle@DW@HEG4965862_layoutdiv@DW@width@DW@46px@DX@removeStyle@DW@HEG4965862_layoutdiv@DW@right@DX@setStyle@DW@HEG4965862_layoutdiv@DW@top@DW@0@DX@setStyle@DW@HEG4965862_layoutdiv@DW@height@DW@100%@DX@removeStyle@DW@HEG4965862_layoutdiv@DW@bottom@DX@setStyle@DW@HEG4965862_layoutdiv@DW@z-index@DW@1@DX@setStyle@DW@OST4965862_layoutdiv@DW@left@DW@378px@DX@setStyle@DW@OST4965862_layoutdiv@DW@width@DW@46px@DX@removeStyle@DW@OST4965862_layoutdiv@DW@right@DX@setStyle@DW@OST4965862_layoutdiv@DW@top@DW@0@DX@setStyle@DW@OST4965862_layoutdiv@DW@height@DW@100%@DX@removeStyle@DW@OST4965862_layoutdiv@DW@bottom@DX@setStyle@DW@OST4965862_layoutdiv@DW@z-index@DW@1@DX@setStyle@DW@BUN4965862_layoutdiv@DW@left@DW@378px@DX@setStyle@DW@BUN4965862_layoutdiv@DW@width@DW@46px@DX@removeStyle@DW@BUN4965862_layoutdiv@DW@right@DX@setStyle@DW@BUN4965862_layoutdiv@DW@top@DW@0@DX@setStyle@DW@BUN4965862_layoutdiv@DW@height@DW@100%@DX@removeStyle@DW@BUN4965862_layoutdiv@DW@bottom@DX@setStyle@DW@BUN4965862_layoutdiv@DW@z-index@DW@1@DX@setStyle@DW@BEA4965862_layoutdiv@DW@left@DW@378px@DX@setStyle@DW@BEA4965862_layoutdiv@DW@width@DW@46px@DX@removeStyle@DW@BEA4965862_layoutdiv@DW@right@DX@setStyle@DW@BEA4965862_layoutdiv@DW@top@DW@0@DX@setStyle@DW@BEA4965862_layoutdiv@DW@height@DW@100%@DX@removeStyle@DW@BEA4965862_layoutdiv@DW@bottom@DX@setStyle@DW@BEA4965862_layoutdiv@DW@z-index@DW@1@DX@setStyle@DW@FJS4965862_layoutdiv@DW@left@DW@378px@DX@setStyle@DW@FJS4965862_layoutdiv@DW@width@DW@46px@DX@removeStyle@DW@FJS4965862_layoutdiv@DW@right@DX@setStyle@DW@FJS4965862_layoutdiv@DW@top@DW@0@DX@setStyle@DW@FJS4965862_layoutdiv@DW@height@DW@100%@DX@removeStyle@DW@FJS4965862_layoutdiv@DW@bottom@DX@setStyle@DW@FJS4965862_layoutdiv@DW@z-index@DW@1@DX@setStyle@DW@DUX4965862_layoutdiv@DW@left@DW@378px@DX@setStyle@DW@DUX4965862_layoutdiv@DW@width@DW@46px@DX@removeStyle@DW@DUX4965862_layoutdiv@DW@right@DX@setStyle@DW@DUX4965862_layoutdiv@DW@top@DW@0@DX@setStyle@DW@DUX4965862_layoutdiv@DW@height@DW@100%@DX@removeStyle@DW@DUX4965862_layoutdiv@DW@bottom@DX@setStyle@DW@DUX4965862_layoutdiv@DW@z-index@DW@1@DX@evaluateJavascript@DW@var timer = DWUTILS_FUNCTION_TIMEOUT_REGISTRY['fixedColumn']; if (timer) clearTimeout(timer); DWUTILS_FUNCTION_TIMEOUT_REGISTRY['fixedColumn'] = setTimeout(function() {dwHelperUpdateNotifyingScrollPanelColumnScrollPosition('MWJ4965656')}, 10)@DX@genericRemoveNode@DW@WQO4965656@DW@0@DW@2@DX@genericRemoveNode@DW@WQO4965656@DW@0@DW@9@DX@genericRemoveNode@DW@WQO4965656@DW@0@DW@13@DX@genericRemoveNode@DW@WQO4965656@DW@0@DW@9@DX@genericRemoveNode@DW@WQO4965656@DW@0@DW@2@DX@genericRemoveNode@DW@WQO4965656@DW@0@DW@8@DX@genericRemoveNode@DW@WQO4965656@DW@0@DW@8@DX@genericRemoveNode@DW@WQO4965656@DW@0@DW@0@DX@genericRemoveNode@DW@WQO4965656@DW@0@DW@5@DX@genericRemoveNode@DW@WQO4965656@DW@0@DW@2@DX@genericRemoveNode@DW@WQO4965656@DW@0@DW@3@DX@genericRemoveNode@DW@WQO4965656@DW@0@DW@3@DX@genericRemoveNode@DW@WQO4965656@DW@0@DW@0@DX@genericRemoveNode@DW@WQO4965656@DW@0@DW@2@DX@genericRemoveNode@DW@WQO4965656@DW@0@DW@2@DX@genericRemoveNode@DW@WQO4965656@DW@0@DW@1@DX@genericRemoveNode@DW@WQO4965656@DW@0@DW@0@DX@genericInsertNode@DW@WQO4965656@DW@0@DW@0@DW@<div style=\"position:absolute;right:0px;top:0px;left:0px;height:41px\" id=\"KKG4965678_layoutdiv\"><div style=\"background-color:#f5f5f5;padding-top:0px;top:0;color:#000000;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel dw-hover-class-foreground-23303030303030 dw-hover-class-background-23643764376437\" id=\"KKG4965678\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;KKG4965678&#39;, &#39;KKG4965678&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"z-index:301;position:absolute;right:0px;left:0px;bottom:0px;height:1px\" id=\"IUR4966655_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"IUR4966655\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div><div style=\"z-index:1;top:0px;left:16px;display:table;width:50px;position:absolute;height:100%\" id=\"NNP4965848_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"NNP4965848\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-top:-15px;right:0;top:50%;left:0px;bottom:0;height:30px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;right:0px;text-align:left;height:30px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:49.999%;left:0;width:27px;margin-top:-12px;margin-bottom:0px;margin-right:0px;height:27px\" class=\"guilayoutgridbag_container_padded\"><label style=\"padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"rcheckbox\" id=\"CJP4965848\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;CJP4965848&#39;, &#39;CJP4965848&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" ondblclick=\"try {dwFwPreEv(event,false,this); ;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><input name=\"CJP4965848\" value=\"CJP4965848\" type=\"checkbox\" id=\"CJP4965848_input\" onchange=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxCheckboxOnChange(event, &#39;CJP4965848&#39;, &#39;CJP4965848_input&#39;, &#39;&#39;, false, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);this.blur();this.focus();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><span class=\"checkmark\" id=\"CJP4965848_checkmark\"></span><span class=\"rcheckbox_text\" id=\"CJP4965848_text\"></span></label></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:76px;display:table;width:34px;position:absolute;height:100%\" id=\"HRT4965849_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"HRT4965849\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:24px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:24px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-8px;right:0;height:16px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"width:24px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:8px\" class=\"guiimage\" id=\"MSQ4965849\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;MSQ4965849&#39;, &#39;MSQ4965849&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;SON4965849\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 72, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=bi_image_FCE645C38BE44E45BFFA7E9674945850\" alt=\"\" id=\"MSQ4965849_img\"></div></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:120px;display:table;width:254px;position:absolute;height:100%\" id=\"VAF4965849_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;padding-left:0px;display:table-cell;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel r-table-cell\" id=\"VAF4965849\">Carpentry&nbsp;machines</div></div><div style=\"z-index:1;top:0px;left:378px;display:table;width:46px;position:absolute;height:100%\" id=\"TPC4965862_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;min-height:40px;right:0;padding-right:0px;min-width:56px\" class=\"guipanel r-table-cell\" id=\"TPC4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:76px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:0px;text-align:center\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-2px;top:0;left:49.999%;bottom:0;width:1px;margin-top:0px;margin-bottom:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:#f4f4f4;padding-top:0px;margin:auto;top:0;max-width:1px;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px;min-width:1px\" class=\"guipanel\" id=\"OBG4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div></div><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:76px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:10px;top:50%;left:0;width:46px;margin-top:-19px;margin-bottom:0px;margin-right:20px;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;min-height:30px;right:0;padding-right:8px\" class=\"guipanel r-table-cell\" id=\"LED4965849\"><div style=\"right:8px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:38px;top:0;left:0;height:38px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:38px;text-align:center;height:38px\" class=\"guilayoutgridbag_container\"><div style=\"width:38px;margin-left:-19px;margin-top:-19px;top:50%;left:50%;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;cursor:pointer;padding-top:4px;margin:auto;top:0;left:0;bottom:0;padding-left:4px;padding-bottom:4px;right:0;padding-right:4px\" class=\"guipanel incraseContrastForPartlistIconsOnClick decreaseContrastForPartlistIconsOnHover cursor_pointer\" id=\"EJY4965849\" onmousedown=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnMouseUp(event, &#39;EJY4965849&#39;, &#39;EJY4965849&#39;, &#39;&#39;, true, false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;OIQ4965849\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Goto&amp;nbsp;assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 106, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnClick(event, &#39;EJY4965849&#39;, &#39;EJY4965849&#39;, &#39;&#39;, true, false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div style=\"right:4px;top:4px;left:4px;bottom:4px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"border-radius:2px;background-color:rgba(0,0,0,0.06274509803921569);padding-top:7px;top:0;left:0;bottom:0;padding-left:7px;padding-bottom:7px;right:0;padding-right:7px\" class=\"guipanel\" id=\"IYS4965849\"><div style=\"right:7px;top:7px;left:7px;bottom:7px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"width:16px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:0px\" class=\"guiimage\" id=\"BTH4965849\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_responsive_table_go_down_normal.png\" alt=\"\" id=\"BTH4965849_img\"></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div>@DX@evaluateJavascript@DW@dwDomSetGlobalStyleIfNotExists('.dw-hover-class-background-23643764376437:hover{ background-color: #d7d7d7 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-foreground-23303030303030:hover{ color: #000000 !important;}');\n@DX@genericInsertNode@DW@WQO4965656@DW@0@DW@1@DW@<div style=\"position:absolute;right:0px;top:41px;left:0px;height:41px\" id=\"VRR4965678_layoutdiv\"><div style=\"background-color:#f5f5f5;padding-top:0px;top:0;color:#000000;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel dw-hover-class-foreground-23303030303030 dw-hover-class-background-23643764376437\" id=\"VRR4965678\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;VRR4965678&#39;, &#39;VRR4965678&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"z-index:301;position:absolute;right:0px;left:0px;bottom:0px;height:1px\" id=\"VJS4966655_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"VJS4966655\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div><div style=\"z-index:1;top:0px;left:16px;display:table;width:50px;position:absolute;height:100%\" id=\"YEH4965849_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"YEH4965849\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-top:-15px;right:0;top:50%;left:0px;bottom:0;height:30px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;right:0px;text-align:left;height:30px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:49.999%;left:0;width:27px;margin-top:-12px;margin-bottom:0px;margin-right:0px;height:27px\" class=\"guilayoutgridbag_container_padded\"><label style=\"padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"rcheckbox\" id=\"VWP4965849\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;VWP4965849&#39;, &#39;VWP4965849&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" ondblclick=\"try {dwFwPreEv(event,false,this); ;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><input name=\"VWP4965849\" value=\"VWP4965849\" type=\"checkbox\" id=\"VWP4965849_input\" onchange=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxCheckboxOnChange(event, &#39;VWP4965849&#39;, &#39;VWP4965849_input&#39;, &#39;&#39;, false, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);this.blur();this.focus();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><span class=\"checkmark\" id=\"VWP4965849_checkmark\"></span><span class=\"rcheckbox_text\" id=\"VWP4965849_text\"></span></label></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:76px;display:table;width:34px;position:absolute;height:100%\" id=\"ELK4965850_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"ELK4965850\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:24px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:24px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-8px;right:0;height:16px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"width:24px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:8px\" class=\"guiimage\" id=\"JTC4965850\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;JTC4965850&#39;, &#39;JTC4965850&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;KTV4965850\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 72, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=bi_image_FCE645C38BE44E45BFFA7E9674945850\" alt=\"\" id=\"JTC4965850_img\"></div></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:120px;display:table;width:254px;position:absolute;height:100%\" id=\"ARM4965850_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;padding-left:0px;display:table-cell;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel r-table-cell\" id=\"ARM4965850\">Workplace&nbsp;organisation</div></div><div style=\"z-index:1;top:0px;left:378px;display:table;width:46px;position:absolute;height:100%\" id=\"GNV4965862_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;min-height:40px;right:0;padding-right:0px;min-width:56px\" class=\"guipanel r-table-cell\" id=\"GNV4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:76px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:0px;text-align:center\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-2px;top:0;left:49.999%;bottom:0;width:1px;margin-top:0px;margin-bottom:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:#f4f4f4;padding-top:0px;margin:auto;top:0;max-width:1px;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px;min-width:1px\" class=\"guipanel\" id=\"VOU4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div></div><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:76px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:10px;top:50%;left:0;width:46px;margin-top:-19px;margin-bottom:0px;margin-right:20px;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;min-height:30px;right:0;padding-right:8px\" class=\"guipanel r-table-cell\" id=\"GSL4965850\"><div style=\"right:8px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:38px;top:0;left:0;height:38px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:38px;text-align:center;height:38px\" class=\"guilayoutgridbag_container\"><div style=\"width:38px;margin-left:-19px;margin-top:-19px;top:50%;left:50%;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;cursor:pointer;padding-top:4px;margin:auto;top:0;left:0;bottom:0;padding-left:4px;padding-bottom:4px;right:0;padding-right:4px\" class=\"guipanel incraseContrastForPartlistIconsOnClick decreaseContrastForPartlistIconsOnHover cursor_pointer\" id=\"YPK4965850\" onmousedown=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnMouseUp(event, &#39;YPK4965850&#39;, &#39;YPK4965850&#39;, &#39;&#39;, true, false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;QSR4965850\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Goto&amp;nbsp;assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 106, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnClick(event, &#39;YPK4965850&#39;, &#39;YPK4965850&#39;, &#39;&#39;, true, false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div style=\"right:4px;top:4px;left:4px;bottom:4px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"border-radius:2px;background-color:rgba(0,0,0,0.06274509803921569);padding-top:7px;top:0;left:0;bottom:0;padding-left:7px;padding-bottom:7px;right:0;padding-right:7px\" class=\"guipanel\" id=\"FIU4965850\"><div style=\"right:7px;top:7px;left:7px;bottom:7px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"width:16px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:0px\" class=\"guiimage\" id=\"WXN4965850\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_responsive_table_go_down_normal.png\" alt=\"\" id=\"WXN4965850_img\"></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div>@DX@evaluateJavascript@DW@dwDomSetGlobalStyleIfNotExists('.dw-hover-class-background-23643764376437:hover{ background-color: #d7d7d7 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-foreground-23303030303030:hover{ color: #000000 !important;}');\n@DX@genericInsertNode@DW@WQO4965656@DW@0@DW@2@DW@<div style=\"position:absolute;right:0px;top:82px;left:0px;height:41px\" id=\"XGP4965678_layoutdiv\"><div style=\"background-color:#f5f5f5;padding-top:0px;top:0;color:#000000;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel dw-hover-class-foreground-23303030303030 dw-hover-class-background-23643764376437\" id=\"XGP4965678\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;XGP4965678&#39;, &#39;XGP4965678&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"z-index:301;position:absolute;right:0px;left:0px;bottom:0px;height:1px\" id=\"QFM4966656_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"QFM4966656\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div><div style=\"z-index:1;top:0px;left:16px;display:table;width:50px;position:absolute;height:100%\" id=\"OSY4965850_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"OSY4965850\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-top:-15px;right:0;top:50%;left:0px;bottom:0;height:30px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;right:0px;text-align:left;height:30px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:49.999%;left:0;width:27px;margin-top:-12px;margin-bottom:0px;margin-right:0px;height:27px\" class=\"guilayoutgridbag_container_padded\"><label style=\"padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"rcheckbox\" id=\"DSJ4965850\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;DSJ4965850&#39;, &#39;DSJ4965850&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" ondblclick=\"try {dwFwPreEv(event,false,this); ;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><input name=\"DSJ4965850\" value=\"DSJ4965850\" type=\"checkbox\" id=\"DSJ4965850_input\" onchange=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxCheckboxOnChange(event, &#39;DSJ4965850&#39;, &#39;DSJ4965850_input&#39;, &#39;&#39;, false, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);this.blur();this.focus();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><span class=\"checkmark\" id=\"DSJ4965850_checkmark\"></span><span class=\"rcheckbox_text\" id=\"DSJ4965850_text\"></span></label></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:76px;display:table;width:34px;position:absolute;height:100%\" id=\"ALA4965851_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"ALA4965851\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:24px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:24px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-8px;right:0;height:16px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"width:24px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:8px\" class=\"guiimage\" id=\"JVR4965851\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;JVR4965851&#39;, &#39;JVR4965851&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;KSS4965851\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 72, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=bi_image_FCE645C38BE44E45BFFA7E9674945850\" alt=\"\" id=\"JVR4965851_img\"></div></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:120px;display:table;width:254px;position:absolute;height:100%\" id=\"KRI4965851_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;padding-left:0px;display:table-cell;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel r-table-cell\" id=\"KRI4965851\">Drilling&nbsp;and&nbsp;screwdriving</div></div><div style=\"z-index:1;top:0px;left:378px;display:table;width:46px;position:absolute;height:100%\" id=\"BGF4965862_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;min-height:40px;right:0;padding-right:0px;min-width:56px\" class=\"guipanel r-table-cell\" id=\"BGF4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:76px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:0px;text-align:center\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-2px;top:0;left:49.999%;bottom:0;width:1px;margin-top:0px;margin-bottom:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:#f4f4f4;padding-top:0px;margin:auto;top:0;max-width:1px;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px;min-width:1px\" class=\"guipanel\" id=\"NEL4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div></div><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:76px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:10px;top:50%;left:0;width:46px;margin-top:-19px;margin-bottom:0px;margin-right:20px;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;min-height:30px;right:0;padding-right:8px\" class=\"guipanel r-table-cell\" id=\"EIF4965851\"><div style=\"right:8px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:38px;top:0;left:0;height:38px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:38px;text-align:center;height:38px\" class=\"guilayoutgridbag_container\"><div style=\"width:38px;margin-left:-19px;margin-top:-19px;top:50%;left:50%;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;cursor:pointer;padding-top:4px;margin:auto;top:0;left:0;bottom:0;padding-left:4px;padding-bottom:4px;right:0;padding-right:4px\" class=\"guipanel incraseContrastForPartlistIconsOnClick decreaseContrastForPartlistIconsOnHover cursor_pointer\" id=\"PDW4965851\" onmousedown=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnMouseUp(event, &#39;PDW4965851&#39;, &#39;PDW4965851&#39;, &#39;&#39;, true, false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;AII4965851\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Goto&amp;nbsp;assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 106, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnClick(event, &#39;PDW4965851&#39;, &#39;PDW4965851&#39;, &#39;&#39;, true, false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div style=\"right:4px;top:4px;left:4px;bottom:4px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"border-radius:2px;background-color:rgba(0,0,0,0.06274509803921569);padding-top:7px;top:0;left:0;bottom:0;padding-left:7px;padding-bottom:7px;right:0;padding-right:7px\" class=\"guipanel\" id=\"IDT4965851\"><div style=\"right:7px;top:7px;left:7px;bottom:7px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"width:16px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:0px\" class=\"guiimage\" id=\"IOK4965851\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_responsive_table_go_down_normal.png\" alt=\"\" id=\"IOK4965851_img\"></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div>@DX@evaluateJavascript@DW@dwDomSetGlobalStyleIfNotExists('.dw-hover-class-background-23643764376437:hover{ background-color: #d7d7d7 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-foreground-23303030303030:hover{ color: #000000 !important;}');\n@DX@genericInsertNode@DW@WQO4965656@DW@0@DW@3@DW@<div style=\"position:absolute;right:0px;top:123px;left:0px;height:41px\" id=\"LWF4965678_layoutdiv\"><div style=\"background-color:#f5f5f5;padding-top:0px;top:0;color:#000000;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel dw-hover-class-foreground-23303030303030 dw-hover-class-background-23643764376437\" id=\"LWF4965678\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;LWF4965678&#39;, &#39;LWF4965678&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"z-index:301;position:absolute;right:0px;left:0px;bottom:0px;height:1px\" id=\"CJE4966657_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"CJE4966657\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div><div style=\"z-index:1;top:0px;left:16px;display:table;width:50px;position:absolute;height:100%\" id=\"NBN4965851_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"NBN4965851\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-top:-15px;right:0;top:50%;left:0px;bottom:0;height:30px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;right:0px;text-align:left;height:30px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:49.999%;left:0;width:27px;margin-top:-12px;margin-bottom:0px;margin-right:0px;height:27px\" class=\"guilayoutgridbag_container_padded\"><label style=\"padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"rcheckbox\" id=\"QJS4965851\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;QJS4965851&#39;, &#39;QJS4965851&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" ondblclick=\"try {dwFwPreEv(event,false,this); ;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><input name=\"QJS4965851\" value=\"QJS4965851\" type=\"checkbox\" id=\"QJS4965851_input\" onchange=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxCheckboxOnChange(event, &#39;QJS4965851&#39;, &#39;QJS4965851_input&#39;, &#39;&#39;, false, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);this.blur();this.focus();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><span class=\"checkmark\" id=\"QJS4965851_checkmark\"></span><span class=\"rcheckbox_text\" id=\"QJS4965851_text\"></span></label></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:76px;display:table;width:34px;position:absolute;height:100%\" id=\"OYW4965851_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"OYW4965851\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:24px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:24px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-8px;right:0;height:16px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"width:24px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:8px\" class=\"guiimage\" id=\"GVN4965851\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;GVN4965851&#39;, &#39;GVN4965851&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;YDD4965851\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 72, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=bi_image_FCE645C38BE44E45BFFA7E9674945850\" alt=\"\" id=\"GVN4965851_img\"></div></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:120px;display:table;width:254px;position:absolute;height:100%\" id=\"KDY4965851_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;padding-left:0px;display:table-cell;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel r-table-cell\" id=\"KDY4965851\">CMS&nbsp;-&nbsp;Compact&nbsp;Modul&nbsp;System</div></div><div style=\"z-index:1;top:0px;left:378px;display:table;width:46px;position:absolute;height:100%\" id=\"TUG4965862_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;min-height:40px;right:0;padding-right:0px;min-width:56px\" class=\"guipanel r-table-cell\" id=\"TUG4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:76px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:0px;text-align:center\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-2px;top:0;left:49.999%;bottom:0;width:1px;margin-top:0px;margin-bottom:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:#f4f4f4;padding-top:0px;margin:auto;top:0;max-width:1px;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px;min-width:1px\" class=\"guipanel\" id=\"KKN4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div></div><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:76px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:10px;top:50%;left:0;width:46px;margin-top:-19px;margin-bottom:0px;margin-right:20px;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;min-height:30px;right:0;padding-right:8px\" class=\"guipanel r-table-cell\" id=\"ELQ4965851\"><div style=\"right:8px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:38px;top:0;left:0;height:38px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:38px;text-align:center;height:38px\" class=\"guilayoutgridbag_container\"><div style=\"width:38px;margin-left:-19px;margin-top:-19px;top:50%;left:50%;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;cursor:pointer;padding-top:4px;margin:auto;top:0;left:0;bottom:0;padding-left:4px;padding-bottom:4px;right:0;padding-right:4px\" class=\"guipanel incraseContrastForPartlistIconsOnClick decreaseContrastForPartlistIconsOnHover cursor_pointer\" id=\"MHI4965851\" onmousedown=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnMouseUp(event, &#39;MHI4965851&#39;, &#39;MHI4965851&#39;, &#39;&#39;, true, false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;XWD4965851\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Goto&amp;nbsp;assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 106, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnClick(event, &#39;MHI4965851&#39;, &#39;MHI4965851&#39;, &#39;&#39;, true, false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div style=\"right:4px;top:4px;left:4px;bottom:4px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"border-radius:2px;background-color:rgba(0,0,0,0.06274509803921569);padding-top:7px;top:0;left:0;bottom:0;padding-left:7px;padding-bottom:7px;right:0;padding-right:7px\" class=\"guipanel\" id=\"KSV4965851\"><div style=\"right:7px;top:7px;left:7px;bottom:7px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"width:16px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:0px\" class=\"guiimage\" id=\"TXA4965851\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_responsive_table_go_down_normal.png\" alt=\"\" id=\"TXA4965851_img\"></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div>@DX@evaluateJavascript@DW@dwDomSetGlobalStyleIfNotExists('.dw-hover-class-background-23643764376437:hover{ background-color: #d7d7d7 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-foreground-23303030303030:hover{ color: #000000 !important;}');\n@DX@genericInsertNode@DW@WQO4965656@DW@0@DW@4@DW@<div style=\"position:absolute;right:0px;top:164px;left:0px;height:41px\" id=\"ARL4965678_layoutdiv\"><div style=\"background-color:#f5f5f5;padding-top:0px;top:0;color:#000000;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel dw-hover-class-foreground-23303030303030 dw-hover-class-background-23643764376437\" id=\"ARL4965678\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;ARL4965678&#39;, &#39;ARL4965678&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"z-index:301;position:absolute;right:0px;left:0px;bottom:0px;height:1px\" id=\"HFU4966658_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"HFU4966658\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div><div style=\"z-index:1;top:0px;left:16px;display:table;width:50px;position:absolute;height:100%\" id=\"DTY4965852_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"DTY4965852\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-top:-15px;right:0;top:50%;left:0px;bottom:0;height:30px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;right:0px;text-align:left;height:30px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:49.999%;left:0;width:27px;margin-top:-12px;margin-bottom:0px;margin-right:0px;height:27px\" class=\"guilayoutgridbag_container_padded\"><label style=\"padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"rcheckbox\" id=\"QXH4965852\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;QXH4965852&#39;, &#39;QXH4965852&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" ondblclick=\"try {dwFwPreEv(event,false,this); ;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><input name=\"QXH4965852\" value=\"QXH4965852\" type=\"checkbox\" id=\"QXH4965852_input\" onchange=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxCheckboxOnChange(event, &#39;QXH4965852&#39;, &#39;QXH4965852_input&#39;, &#39;&#39;, false, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);this.blur();this.focus();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><span class=\"checkmark\" id=\"QXH4965852_checkmark\"></span><span class=\"rcheckbox_text\" id=\"QXH4965852_text\"></span></label></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:76px;display:table;width:34px;position:absolute;height:100%\" id=\"KGJ4965852_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"KGJ4965852\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:24px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:24px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-8px;right:0;height:16px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"width:24px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:8px\" class=\"guiimage\" id=\"LEX4965852\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;LEX4965852&#39;, &#39;LEX4965852&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;JSM4965852\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 72, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=bi_image_FCE645C38BE44E45BFFA7E9674945850\" alt=\"\" id=\"LEX4965852_img\"></div></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:120px;display:table;width:254px;position:absolute;height:100%\" id=\"XIQ4965852_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;padding-left:0px;display:table-cell;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel r-table-cell\" id=\"XIQ4965852\">Exoskeletons</div></div><div style=\"z-index:1;top:0px;left:378px;display:table;width:46px;position:absolute;height:100%\" id=\"TUW4965862_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;min-height:40px;right:0;padding-right:0px;min-width:56px\" class=\"guipanel r-table-cell\" id=\"TUW4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:76px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:0px;text-align:center\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-2px;top:0;left:49.999%;bottom:0;width:1px;margin-top:0px;margin-bottom:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:#f4f4f4;padding-top:0px;margin:auto;top:0;max-width:1px;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px;min-width:1px\" class=\"guipanel\" id=\"ILH4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div></div><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:76px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:10px;top:50%;left:0;width:46px;margin-top:-19px;margin-bottom:0px;margin-right:20px;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;min-height:30px;right:0;padding-right:8px\" class=\"guipanel r-table-cell\" id=\"IDS4965852\"><div style=\"right:8px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:38px;top:0;left:0;height:38px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:38px;text-align:center;height:38px\" class=\"guilayoutgridbag_container\"><div style=\"width:38px;margin-left:-19px;margin-top:-19px;top:50%;left:50%;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;cursor:pointer;padding-top:4px;margin:auto;top:0;left:0;bottom:0;padding-left:4px;padding-bottom:4px;right:0;padding-right:4px\" class=\"guipanel incraseContrastForPartlistIconsOnClick decreaseContrastForPartlistIconsOnHover cursor_pointer\" id=\"VVQ4965852\" onmousedown=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnMouseUp(event, &#39;VVQ4965852&#39;, &#39;VVQ4965852&#39;, &#39;&#39;, true, false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;NCP4965852\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Goto&amp;nbsp;assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 106, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnClick(event, &#39;VVQ4965852&#39;, &#39;VVQ4965852&#39;, &#39;&#39;, true, false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div style=\"right:4px;top:4px;left:4px;bottom:4px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"border-radius:2px;background-color:rgba(0,0,0,0.06274509803921569);padding-top:7px;top:0;left:0;bottom:0;padding-left:7px;padding-bottom:7px;right:0;padding-right:7px\" class=\"guipanel\" id=\"VOL4965852\"><div style=\"right:7px;top:7px;left:7px;bottom:7px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"width:16px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:0px\" class=\"guiimage\" id=\"VAA4965852\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_responsive_table_go_down_normal.png\" alt=\"\" id=\"VAA4965852_img\"></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div>@DX@evaluateJavascript@DW@dwDomSetGlobalStyleIfNotExists('.dw-hover-class-background-23643764376437:hover{ background-color: #d7d7d7 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-foreground-23303030303030:hover{ color: #000000 !important;}');\n@DX@genericInsertNode@DW@WQO4965656@DW@0@DW@5@DW@<div style=\"position:absolute;right:0px;top:205px;left:0px;height:41px\" id=\"KFI4965678_layoutdiv\"><div style=\"background-color:#f5f5f5;padding-top:0px;top:0;color:#000000;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel dw-hover-class-foreground-23303030303030 dw-hover-class-background-23643764376437\" id=\"KFI4965678\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;KFI4965678&#39;, &#39;KFI4965678&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"z-index:301;position:absolute;right:0px;left:0px;bottom:0px;height:1px\" id=\"FSP4966659_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"FSP4966659\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div><div style=\"z-index:1;top:0px;left:16px;display:table;width:50px;position:absolute;height:100%\" id=\"OEG4965852_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"OEG4965852\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-top:-15px;right:0;top:50%;left:0px;bottom:0;height:30px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;right:0px;text-align:left;height:30px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:49.999%;left:0;width:27px;margin-top:-12px;margin-bottom:0px;margin-right:0px;height:27px\" class=\"guilayoutgridbag_container_padded\"><label style=\"padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"rcheckbox\" id=\"OAF4965852\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;OAF4965852&#39;, &#39;OAF4965852&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" ondblclick=\"try {dwFwPreEv(event,false,this); ;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><input name=\"OAF4965852\" value=\"OAF4965852\" type=\"checkbox\" id=\"OAF4965852_input\" onchange=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxCheckboxOnChange(event, &#39;OAF4965852&#39;, &#39;OAF4965852_input&#39;, &#39;&#39;, false, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);this.blur();this.focus();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><span class=\"checkmark\" id=\"OAF4965852_checkmark\"></span><span class=\"rcheckbox_text\" id=\"OAF4965852_text\"></span></label></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:76px;display:table;width:34px;position:absolute;height:100%\" id=\"OSN4965853_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"OSN4965853\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:24px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:24px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-8px;right:0;height:16px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"width:24px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:8px\" class=\"guiimage\" id=\"JBG4965853\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;JBG4965853&#39;, &#39;JBG4965853&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;MEM4965853\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 72, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=bi_image_FCE645C38BE44E45BFFA7E9674945850\" alt=\"\" id=\"JBG4965853_img\"></div></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:120px;display:table;width:254px;position:absolute;height:100%\" id=\"ICP4965853_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;padding-left:0px;display:table-cell;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel r-table-cell\" id=\"ICP4965853\">Routing</div></div><div style=\"z-index:1;top:0px;left:378px;display:table;width:46px;position:absolute;height:100%\" id=\"XLC4965862_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;min-height:40px;right:0;padding-right:0px;min-width:56px\" class=\"guipanel r-table-cell\" id=\"XLC4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:76px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:0px;text-align:center\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-2px;top:0;left:49.999%;bottom:0;width:1px;margin-top:0px;margin-bottom:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:#f4f4f4;padding-top:0px;margin:auto;top:0;max-width:1px;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px;min-width:1px\" class=\"guipanel\" id=\"SGO4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div></div><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:76px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:10px;top:50%;left:0;width:46px;margin-top:-19px;margin-bottom:0px;margin-right:20px;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;min-height:30px;right:0;padding-right:8px\" class=\"guipanel r-table-cell\" id=\"OQR4965853\"><div style=\"right:8px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:38px;top:0;left:0;height:38px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:38px;text-align:center;height:38px\" class=\"guilayoutgridbag_container\"><div style=\"width:38px;margin-left:-19px;margin-top:-19px;top:50%;left:50%;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;cursor:pointer;padding-top:4px;margin:auto;top:0;left:0;bottom:0;padding-left:4px;padding-bottom:4px;right:0;padding-right:4px\" class=\"guipanel incraseContrastForPartlistIconsOnClick decreaseContrastForPartlistIconsOnHover cursor_pointer\" id=\"AKF4965853\" onmousedown=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnMouseUp(event, &#39;AKF4965853&#39;, &#39;AKF4965853&#39;, &#39;&#39;, true, false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;MUF4965853\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Goto&amp;nbsp;assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 106, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnClick(event, &#39;AKF4965853&#39;, &#39;AKF4965853&#39;, &#39;&#39;, true, false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div style=\"right:4px;top:4px;left:4px;bottom:4px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"border-radius:2px;background-color:rgba(0,0,0,0.06274509803921569);padding-top:7px;top:0;left:0;bottom:0;padding-left:7px;padding-bottom:7px;right:0;padding-right:7px\" class=\"guipanel\" id=\"JBR4965853\"><div style=\"right:7px;top:7px;left:7px;bottom:7px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"width:16px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:0px\" class=\"guiimage\" id=\"WEL4965853\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_responsive_table_go_down_normal.png\" alt=\"\" id=\"WEL4965853_img\"></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div>@DX@evaluateJavascript@DW@dwDomSetGlobalStyleIfNotExists('.dw-hover-class-background-23643764376437:hover{ background-color: #d7d7d7 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-foreground-23303030303030:hover{ color: #000000 !important;}');\n@DX@genericInsertNode@DW@WQO4965656@DW@0@DW@6@DW@<div style=\"position:absolute;right:0px;top:246px;left:0px;height:41px\" id=\"SRA4965678_layoutdiv\"><div style=\"background-color:#f5f5f5;padding-top:0px;top:0;color:#000000;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel dw-hover-class-foreground-23303030303030 dw-hover-class-background-23643764376437\" id=\"SRA4965678\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;SRA4965678&#39;, &#39;SRA4965678&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"z-index:301;position:absolute;right:0px;left:0px;bottom:0px;height:1px\" id=\"FBE4966660_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"FBE4966660\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div><div style=\"z-index:1;top:0px;left:16px;display:table;width:50px;position:absolute;height:100%\" id=\"BAB4965853_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"BAB4965853\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-top:-15px;right:0;top:50%;left:0px;bottom:0;height:30px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;right:0px;text-align:left;height:30px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:49.999%;left:0;width:27px;margin-top:-12px;margin-bottom:0px;margin-right:0px;height:27px\" class=\"guilayoutgridbag_container_padded\"><label style=\"padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"rcheckbox\" id=\"KMG4965853\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;KMG4965853&#39;, &#39;KMG4965853&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" ondblclick=\"try {dwFwPreEv(event,false,this); ;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><input name=\"KMG4965853\" value=\"KMG4965853\" type=\"checkbox\" id=\"KMG4965853_input\" onchange=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxCheckboxOnChange(event, &#39;KMG4965853&#39;, &#39;KMG4965853_input&#39;, &#39;&#39;, false, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);this.blur();this.focus();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><span class=\"checkmark\" id=\"KMG4965853_checkmark\"></span><span class=\"rcheckbox_text\" id=\"KMG4965853_text\"></span></label></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:76px;display:table;width:34px;position:absolute;height:100%\" id=\"OYH4965854_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"OYH4965854\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:24px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:24px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-8px;right:0;height:16px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"width:24px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:8px\" class=\"guiimage\" id=\"NPB4965854\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;NPB4965854&#39;, &#39;NPB4965854&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;QES4965854\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 72, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=bi_image_FCE645C38BE44E45BFFA7E9674945850\" alt=\"\" id=\"NPB4965854_img\"></div></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:120px;display:table;width:254px;position:absolute;height:100%\" id=\"KTP4965854_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;padding-left:0px;display:table-cell;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel r-table-cell\" id=\"KTP4965854\">Planing</div></div><div style=\"z-index:1;top:0px;left:378px;display:table;width:46px;position:absolute;height:100%\" id=\"CHU4965862_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;min-height:40px;right:0;padding-right:0px;min-width:56px\" class=\"guipanel r-table-cell\" id=\"CHU4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:76px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:0px;text-align:center\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-2px;top:0;left:49.999%;bottom:0;width:1px;margin-top:0px;margin-bottom:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:#f4f4f4;padding-top:0px;margin:auto;top:0;max-width:1px;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px;min-width:1px\" class=\"guipanel\" id=\"LVO4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div></div><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:76px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:10px;top:50%;left:0;width:46px;margin-top:-19px;margin-bottom:0px;margin-right:20px;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;min-height:30px;right:0;padding-right:8px\" class=\"guipanel r-table-cell\" id=\"FND4965854\"><div style=\"right:8px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:38px;top:0;left:0;height:38px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:38px;text-align:center;height:38px\" class=\"guilayoutgridbag_container\"><div style=\"width:38px;margin-left:-19px;margin-top:-19px;top:50%;left:50%;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;cursor:pointer;padding-top:4px;margin:auto;top:0;left:0;bottom:0;padding-left:4px;padding-bottom:4px;right:0;padding-right:4px\" class=\"guipanel incraseContrastForPartlistIconsOnClick decreaseContrastForPartlistIconsOnHover cursor_pointer\" id=\"CUW4965854\" onmousedown=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnMouseUp(event, &#39;CUW4965854&#39;, &#39;CUW4965854&#39;, &#39;&#39;, true, false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;OEU4965854\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Goto&amp;nbsp;assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 106, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnClick(event, &#39;CUW4965854&#39;, &#39;CUW4965854&#39;, &#39;&#39;, true, false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div style=\"right:4px;top:4px;left:4px;bottom:4px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"border-radius:2px;background-color:rgba(0,0,0,0.06274509803921569);padding-top:7px;top:0;left:0;bottom:0;padding-left:7px;padding-bottom:7px;right:0;padding-right:7px\" class=\"guipanel\" id=\"XHL4965854\"><div style=\"right:7px;top:7px;left:7px;bottom:7px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"width:16px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:0px\" class=\"guiimage\" id=\"HST4965854\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_responsive_table_go_down_normal.png\" alt=\"\" id=\"HST4965854_img\"></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div>@DX@evaluateJavascript@DW@dwDomSetGlobalStyleIfNotExists('.dw-hover-class-background-23643764376437:hover{ background-color: #d7d7d7 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-foreground-23303030303030:hover{ color: #000000 !important;}');\n@DX@genericInsertNode@DW@WQO4965656@DW@0@DW@7@DW@<div style=\"position:absolute;right:0px;top:287px;left:0px;height:41px\" id=\"EER4965678_layoutdiv\"><div style=\"background-color:#f5f5f5;padding-top:0px;top:0;color:#000000;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel dw-hover-class-foreground-23303030303030 dw-hover-class-background-23643764376437\" id=\"EER4965678\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;EER4965678&#39;, &#39;EER4965678&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"z-index:301;position:absolute;right:0px;left:0px;bottom:0px;height:1px\" id=\"SOM4966662_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"SOM4966662\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div><div style=\"z-index:1;top:0px;left:16px;display:table;width:50px;position:absolute;height:100%\" id=\"KGJ4965854_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"KGJ4965854\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-top:-15px;right:0;top:50%;left:0px;bottom:0;height:30px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;right:0px;text-align:left;height:30px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:49.999%;left:0;width:27px;margin-top:-12px;margin-bottom:0px;margin-right:0px;height:27px\" class=\"guilayoutgridbag_container_padded\"><label style=\"padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"rcheckbox\" id=\"QTD4965854\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;QTD4965854&#39;, &#39;QTD4965854&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" ondblclick=\"try {dwFwPreEv(event,false,this); ;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><input name=\"QTD4965854\" value=\"QTD4965854\" type=\"checkbox\" id=\"QTD4965854_input\" onchange=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxCheckboxOnChange(event, &#39;QTD4965854&#39;, &#39;QTD4965854_input&#39;, &#39;&#39;, false, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);this.blur();this.focus();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><span class=\"checkmark\" id=\"QTD4965854_checkmark\"></span><span class=\"rcheckbox_text\" id=\"QTD4965854_text\"></span></label></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:76px;display:table;width:34px;position:absolute;height:100%\" id=\"ACH4965855_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"ACH4965855\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:24px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:24px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-8px;right:0;height:16px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"width:24px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:8px\" class=\"guiimage\" id=\"JRK4965855\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;JRK4965855&#39;, &#39;JRK4965855&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;KUU4965855\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 72, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=bi_image_FCE645C38BE44E45BFFA7E9674945850\" alt=\"\" id=\"JRK4965855_img\"></div></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:120px;display:table;width:254px;position:absolute;height:100%\" id=\"MGO4965855_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;padding-left:0px;display:table-cell;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel r-table-cell\" id=\"MGO4965855\">Edge&nbsp;trimming</div></div><div style=\"z-index:1;top:0px;left:378px;display:table;width:46px;position:absolute;height:100%\" id=\"TXS4965862_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;min-height:40px;right:0;padding-right:0px;min-width:56px\" class=\"guipanel r-table-cell\" id=\"TXS4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:76px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:0px;text-align:center\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-2px;top:0;left:49.999%;bottom:0;width:1px;margin-top:0px;margin-bottom:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:#f4f4f4;padding-top:0px;margin:auto;top:0;max-width:1px;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px;min-width:1px\" class=\"guipanel\" id=\"KWF4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div></div><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:76px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:10px;top:50%;left:0;width:46px;margin-top:-19px;margin-bottom:0px;margin-right:20px;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;min-height:30px;right:0;padding-right:8px\" class=\"guipanel r-table-cell\" id=\"VUQ4965855\"><div style=\"right:8px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:38px;top:0;left:0;height:38px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:38px;text-align:center;height:38px\" class=\"guilayoutgridbag_container\"><div style=\"width:38px;margin-left:-19px;margin-top:-19px;top:50%;left:50%;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;cursor:pointer;padding-top:4px;margin:auto;top:0;left:0;bottom:0;padding-left:4px;padding-bottom:4px;right:0;padding-right:4px\" class=\"guipanel incraseContrastForPartlistIconsOnClick decreaseContrastForPartlistIconsOnHover cursor_pointer\" id=\"BIU4965855\" onmousedown=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnMouseUp(event, &#39;BIU4965855&#39;, &#39;BIU4965855&#39;, &#39;&#39;, true, false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;ETK4965855\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Goto&amp;nbsp;assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 106, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnClick(event, &#39;BIU4965855&#39;, &#39;BIU4965855&#39;, &#39;&#39;, true, false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div style=\"right:4px;top:4px;left:4px;bottom:4px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"border-radius:2px;background-color:rgba(0,0,0,0.06274509803921569);padding-top:7px;top:0;left:0;bottom:0;padding-left:7px;padding-bottom:7px;right:0;padding-right:7px\" class=\"guipanel\" id=\"BFD4965855\"><div style=\"right:7px;top:7px;left:7px;bottom:7px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"width:16px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:0px\" class=\"guiimage\" id=\"QMI4965855\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_responsive_table_go_down_normal.png\" alt=\"\" id=\"QMI4965855_img\"></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div>@DX@evaluateJavascript@DW@dwDomSetGlobalStyleIfNotExists('.dw-hover-class-background-23643764376437:hover{ background-color: #d7d7d7 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-foreground-23303030303030:hover{ color: #000000 !important;}');\n@DX@genericInsertNode@DW@WQO4965656@DW@0@DW@8@DW@<div style=\"position:absolute;right:0px;top:328px;left:0px;height:41px\" id=\"NOD4965678_layoutdiv\"><div style=\"background-color:#f5f5f5;padding-top:0px;top:0;color:#000000;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel dw-hover-class-foreground-23303030303030 dw-hover-class-background-23643764376437\" id=\"NOD4965678\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;NOD4965678&#39;, &#39;NOD4965678&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"z-index:301;position:absolute;right:0px;left:0px;bottom:0px;height:1px\" id=\"GKI4966663_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"GKI4966663\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div><div style=\"z-index:1;top:0px;left:16px;display:table;width:50px;position:absolute;height:100%\" id=\"KTQ4965855_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"KTQ4965855\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-top:-15px;right:0;top:50%;left:0px;bottom:0;height:30px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;right:0px;text-align:left;height:30px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:49.999%;left:0;width:27px;margin-top:-12px;margin-bottom:0px;margin-right:0px;height:27px\" class=\"guilayoutgridbag_container_padded\"><label style=\"padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"rcheckbox\" id=\"XLX4965855\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;XLX4965855&#39;, &#39;XLX4965855&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" ondblclick=\"try {dwFwPreEv(event,false,this); ;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><input name=\"XLX4965855\" value=\"XLX4965855\" type=\"checkbox\" id=\"XLX4965855_input\" onchange=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxCheckboxOnChange(event, &#39;XLX4965855&#39;, &#39;XLX4965855_input&#39;, &#39;&#39;, false, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);this.blur();this.focus();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><span class=\"checkmark\" id=\"XLX4965855_checkmark\"></span><span class=\"rcheckbox_text\" id=\"XLX4965855_text\"></span></label></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:76px;display:table;width:34px;position:absolute;height:100%\" id=\"WKV4965856_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"WKV4965856\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:24px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:24px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-8px;right:0;height:16px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"width:24px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:8px\" class=\"guiimage\" id=\"SSL4965856\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;SSL4965856&#39;, &#39;SSL4965856&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;SVK4965856\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 72, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=bi_image_FCE645C38BE44E45BFFA7E9674945850\" alt=\"\" id=\"SSL4965856_img\"></div></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:120px;display:table;width:254px;position:absolute;height:100%\" id=\"HVQ4965856_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;padding-left:0px;display:table-cell;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel r-table-cell\" id=\"HVQ4965856\">Charger</div></div><div style=\"z-index:1;top:0px;left:378px;display:table;width:46px;position:absolute;height:100%\" id=\"NCG4965862_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;min-height:40px;right:0;padding-right:0px;min-width:56px\" class=\"guipanel r-table-cell\" id=\"NCG4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:76px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:0px;text-align:center\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-2px;top:0;left:49.999%;bottom:0;width:1px;margin-top:0px;margin-bottom:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:#f4f4f4;padding-top:0px;margin:auto;top:0;max-width:1px;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px;min-width:1px\" class=\"guipanel\" id=\"OOF4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div></div><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:76px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:10px;top:50%;left:0;width:46px;margin-top:-19px;margin-bottom:0px;margin-right:20px;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;min-height:30px;right:0;padding-right:8px\" class=\"guipanel r-table-cell\" id=\"DYM4965856\"><div style=\"right:8px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:38px;top:0;left:0;height:38px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:38px;text-align:center;height:38px\" class=\"guilayoutgridbag_container\"><div style=\"width:38px;margin-left:-19px;margin-top:-19px;top:50%;left:50%;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;cursor:pointer;padding-top:4px;margin:auto;top:0;left:0;bottom:0;padding-left:4px;padding-bottom:4px;right:0;padding-right:4px\" class=\"guipanel incraseContrastForPartlistIconsOnClick decreaseContrastForPartlistIconsOnHover cursor_pointer\" id=\"UCU4965856\" onmousedown=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnMouseUp(event, &#39;UCU4965856&#39;, &#39;UCU4965856&#39;, &#39;&#39;, true, false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;OLM4965856\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Goto&amp;nbsp;assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 106, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnClick(event, &#39;UCU4965856&#39;, &#39;UCU4965856&#39;, &#39;&#39;, true, false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div style=\"right:4px;top:4px;left:4px;bottom:4px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"border-radius:2px;background-color:rgba(0,0,0,0.06274509803921569);padding-top:7px;top:0;left:0;bottom:0;padding-left:7px;padding-bottom:7px;right:0;padding-right:7px\" class=\"guipanel\" id=\"OGI4965856\"><div style=\"right:7px;top:7px;left:7px;bottom:7px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"width:16px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:0px\" class=\"guiimage\" id=\"BNQ4965856\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_responsive_table_go_down_normal.png\" alt=\"\" id=\"BNQ4965856_img\"></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div>@DX@evaluateJavascript@DW@dwDomSetGlobalStyleIfNotExists('.dw-hover-class-background-23643764376437:hover{ background-color: #d7d7d7 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-foreground-23303030303030:hover{ color: #000000 !important;}');\n@DX@genericInsertNode@DW@WQO4965656@DW@0@DW@9@DW@<div style=\"position:absolute;right:0px;top:369px;left:0px;height:41px\" id=\"FLG4965678_layoutdiv\"><div style=\"background-color:#f5f5f5;padding-top:0px;top:0;color:#000000;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel dw-hover-class-foreground-23303030303030 dw-hover-class-background-23643764376437\" id=\"FLG4965678\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;FLG4965678&#39;, &#39;FLG4965678&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"z-index:301;position:absolute;right:0px;left:0px;bottom:0px;height:1px\" id=\"KVT4966664_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"KVT4966664\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div><div style=\"z-index:1;top:0px;left:16px;display:table;width:50px;position:absolute;height:100%\" id=\"MJB4965856_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"MJB4965856\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-top:-15px;right:0;top:50%;left:0px;bottom:0;height:30px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;right:0px;text-align:left;height:30px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:49.999%;left:0;width:27px;margin-top:-12px;margin-bottom:0px;margin-right:0px;height:27px\" class=\"guilayoutgridbag_container_padded\"><label style=\"padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"rcheckbox\" id=\"EWA4965856\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;EWA4965856&#39;, &#39;EWA4965856&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" ondblclick=\"try {dwFwPreEv(event,false,this); ;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><input name=\"EWA4965856\" value=\"EWA4965856\" type=\"checkbox\" id=\"EWA4965856_input\" onchange=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxCheckboxOnChange(event, &#39;EWA4965856&#39;, &#39;EWA4965856_input&#39;, &#39;&#39;, false, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);this.blur();this.focus();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><span class=\"checkmark\" id=\"EWA4965856_checkmark\"></span><span class=\"rcheckbox_text\" id=\"EWA4965856_text\"></span></label></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:76px;display:table;width:34px;position:absolute;height:100%\" id=\"WSD4965856_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"WSD4965856\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:24px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:24px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-8px;right:0;height:16px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"width:24px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:8px\" class=\"guiimage\" id=\"FIP4965856\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;FIP4965856&#39;, &#39;FIP4965856&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;WYY4965856\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 72, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=bi_image_FCE645C38BE44E45BFFA7E9674945850\" alt=\"\" id=\"FIP4965856_img\"></div></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:120px;display:table;width:254px;position:absolute;height:100%\" id=\"HAR4965857_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;padding-left:0px;display:table-cell;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel r-table-cell\" id=\"HAR4965857\">Machining&nbsp;surfaces</div></div><div style=\"z-index:1;top:0px;left:378px;display:table;width:46px;position:absolute;height:100%\" id=\"KUF4965862_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;min-height:40px;right:0;padding-right:0px;min-width:56px\" class=\"guipanel r-table-cell\" id=\"KUF4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:76px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:0px;text-align:center\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-2px;top:0;left:49.999%;bottom:0;width:1px;margin-top:0px;margin-bottom:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:#f4f4f4;padding-top:0px;margin:auto;top:0;max-width:1px;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px;min-width:1px\" class=\"guipanel\" id=\"CAA4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div></div><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:76px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:10px;top:50%;left:0;width:46px;margin-top:-19px;margin-bottom:0px;margin-right:20px;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;min-height:30px;right:0;padding-right:8px\" class=\"guipanel r-table-cell\" id=\"CJB4965857\"><div style=\"right:8px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:38px;top:0;left:0;height:38px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:38px;text-align:center;height:38px\" class=\"guilayoutgridbag_container\"><div style=\"width:38px;margin-left:-19px;margin-top:-19px;top:50%;left:50%;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;cursor:pointer;padding-top:4px;margin:auto;top:0;left:0;bottom:0;padding-left:4px;padding-bottom:4px;right:0;padding-right:4px\" class=\"guipanel incraseContrastForPartlistIconsOnClick decreaseContrastForPartlistIconsOnHover cursor_pointer\" id=\"NQE4965857\" onmousedown=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnMouseUp(event, &#39;NQE4965857&#39;, &#39;NQE4965857&#39;, &#39;&#39;, true, false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;TLS4965857\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Goto&amp;nbsp;assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 106, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnClick(event, &#39;NQE4965857&#39;, &#39;NQE4965857&#39;, &#39;&#39;, true, false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div style=\"right:4px;top:4px;left:4px;bottom:4px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"border-radius:2px;background-color:rgba(0,0,0,0.06274509803921569);padding-top:7px;top:0;left:0;bottom:0;padding-left:7px;padding-bottom:7px;right:0;padding-right:7px\" class=\"guipanel\" id=\"WJH4965857\"><div style=\"right:7px;top:7px;left:7px;bottom:7px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"width:16px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:0px\" class=\"guiimage\" id=\"LXN4965857\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_responsive_table_go_down_normal.png\" alt=\"\" id=\"LXN4965857_img\"></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div>@DX@evaluateJavascript@DW@dwDomSetGlobalStyleIfNotExists('.dw-hover-class-background-23643764376437:hover{ background-color: #d7d7d7 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-foreground-23303030303030:hover{ color: #000000 !important;}');\n@DX@genericInsertNode@DW@WQO4965656@DW@0@DW@10@DW@<div style=\"position:absolute;right:0px;top:410px;left:0px;height:41px\" id=\"DUX4965678_layoutdiv\"><div style=\"background-color:#f5f5f5;padding-top:0px;top:0;color:#000000;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel dw-hover-class-foreground-23303030303030 dw-hover-class-background-23643764376437\" id=\"DUX4965678\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;DUX4965678&#39;, &#39;DUX4965678&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"z-index:301;position:absolute;right:0px;left:0px;bottom:0px;height:1px\" id=\"DUK4966665_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"DUK4966665\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div><div style=\"z-index:1;top:0px;left:16px;display:table;width:50px;position:absolute;height:100%\" id=\"PHT4965857_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"PHT4965857\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-top:-15px;right:0;top:50%;left:0px;bottom:0;height:30px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;right:0px;text-align:left;height:30px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:49.999%;left:0;width:27px;margin-top:-12px;margin-bottom:0px;margin-right:0px;height:27px\" class=\"guilayoutgridbag_container_padded\"><label style=\"padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"rcheckbox\" id=\"IRR4965857\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;IRR4965857&#39;, &#39;IRR4965857&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" ondblclick=\"try {dwFwPreEv(event,false,this); ;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><input name=\"IRR4965857\" value=\"IRR4965857\" type=\"checkbox\" id=\"IRR4965857_input\" onchange=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxCheckboxOnChange(event, &#39;IRR4965857&#39;, &#39;IRR4965857_input&#39;, &#39;&#39;, false, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);this.blur();this.focus();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><span class=\"checkmark\" id=\"IRR4965857_checkmark\"></span><span class=\"rcheckbox_text\" id=\"IRR4965857_text\"></span></label></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:76px;display:table;width:34px;position:absolute;height:100%\" id=\"NVU4965857_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"NVU4965857\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:24px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:24px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-8px;right:0;height:16px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"width:24px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:8px\" class=\"guiimage\" id=\"SOV4965857\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;SOV4965857&#39;, &#39;SOV4965857&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;IYV4965857\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 72, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=bi_image_FCE645C38BE44E45BFFA7E9674945850\" alt=\"\" id=\"SOV4965857_img\"></div></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:120px;display:table;width:254px;position:absolute;height:100%\" id=\"CQH4965857_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;padding-left:0px;display:table-cell;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel r-table-cell\" id=\"CQH4965857\">Oscillators</div></div><div style=\"z-index:1;top:0px;left:378px;display:table;width:46px;position:absolute;height:100%\" id=\"ISJ4965862_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;min-height:40px;right:0;padding-right:0px;min-width:56px\" class=\"guipanel r-table-cell\" id=\"ISJ4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:76px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:0px;text-align:center\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-2px;top:0;left:49.999%;bottom:0;width:1px;margin-top:0px;margin-bottom:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:#f4f4f4;padding-top:0px;margin:auto;top:0;max-width:1px;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px;min-width:1px\" class=\"guipanel\" id=\"KQO4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div></div><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:76px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:10px;top:50%;left:0;width:46px;margin-top:-19px;margin-bottom:0px;margin-right:20px;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;min-height:30px;right:0;padding-right:8px\" class=\"guipanel r-table-cell\" id=\"PRX4965857\"><div style=\"right:8px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:38px;top:0;left:0;height:38px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:38px;text-align:center;height:38px\" class=\"guilayoutgridbag_container\"><div style=\"width:38px;margin-left:-19px;margin-top:-19px;top:50%;left:50%;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;cursor:pointer;padding-top:4px;margin:auto;top:0;left:0;bottom:0;padding-left:4px;padding-bottom:4px;right:0;padding-right:4px\" class=\"guipanel incraseContrastForPartlistIconsOnClick decreaseContrastForPartlistIconsOnHover cursor_pointer\" id=\"AIF4965857\" onmousedown=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnMouseUp(event, &#39;AIF4965857&#39;, &#39;AIF4965857&#39;, &#39;&#39;, true, false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;DVE4965857\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Goto&amp;nbsp;assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 106, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnClick(event, &#39;AIF4965857&#39;, &#39;AIF4965857&#39;, &#39;&#39;, true, false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div style=\"right:4px;top:4px;left:4px;bottom:4px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"border-radius:2px;background-color:rgba(0,0,0,0.06274509803921569);padding-top:7px;top:0;left:0;bottom:0;padding-left:7px;padding-bottom:7px;right:0;padding-right:7px\" class=\"guipanel\" id=\"GII4965857\"><div style=\"right:7px;top:7px;left:7px;bottom:7px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"width:16px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:0px\" class=\"guiimage\" id=\"TIW4965857\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_responsive_table_go_down_normal.png\" alt=\"\" id=\"TIW4965857_img\"></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div>@DX@evaluateJavascript@DW@dwDomSetGlobalStyleIfNotExists('.dw-hover-class-background-23643764376437:hover{ background-color: #d7d7d7 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-foreground-23303030303030:hover{ color: #000000 !important;}');\n@DX@genericInsertNode@DW@WQO4965656@DW@0@DW@11@DW@<div style=\"position:absolute;right:0px;top:451px;left:0px;height:41px\" id=\"TQY4965678_layoutdiv\"><div style=\"background-color:#f5f5f5;padding-top:0px;top:0;color:#000000;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel dw-hover-class-foreground-23303030303030 dw-hover-class-background-23643764376437\" id=\"TQY4965678\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;TQY4965678&#39;, &#39;TQY4965678&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"z-index:301;position:absolute;right:0px;left:0px;bottom:0px;height:1px\" id=\"OGL4966666_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"OGL4966666\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div><div style=\"z-index:1;top:0px;left:16px;display:table;width:50px;position:absolute;height:100%\" id=\"IVT4965857_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"IVT4965857\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-top:-15px;right:0;top:50%;left:0px;bottom:0;height:30px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;right:0px;text-align:left;height:30px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:49.999%;left:0;width:27px;margin-top:-12px;margin-bottom:0px;margin-right:0px;height:27px\" class=\"guilayoutgridbag_container_padded\"><label style=\"padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"rcheckbox\" id=\"LAW4965857\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;LAW4965857&#39;, &#39;LAW4965857&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" ondblclick=\"try {dwFwPreEv(event,false,this); ;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><input name=\"LAW4965857\" value=\"LAW4965857\" type=\"checkbox\" id=\"LAW4965857_input\" onchange=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxCheckboxOnChange(event, &#39;LAW4965857&#39;, &#39;LAW4965857_input&#39;, &#39;&#39;, false, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);this.blur();this.focus();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><span class=\"checkmark\" id=\"LAW4965857_checkmark\"></span><span class=\"rcheckbox_text\" id=\"LAW4965857_text\"></span></label></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:76px;display:table;width:34px;position:absolute;height:100%\" id=\"OSV4965858_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"OSV4965858\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:24px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:24px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-8px;right:0;height:16px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"width:24px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:8px\" class=\"guiimage\" id=\"IUI4965858\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;IUI4965858&#39;, &#39;IUI4965858&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;UWU4965858\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 72, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=bi_image_FCE645C38BE44E45BFFA7E9674945850\" alt=\"\" id=\"IUI4965858_img\"></div></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:120px;display:table;width:254px;position:absolute;height:100%\" id=\"LLT4965858_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;padding-left:0px;display:table-cell;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel r-table-cell\" id=\"LLT4965858\">Saws</div></div><div style=\"z-index:1;top:0px;left:378px;display:table;width:46px;position:absolute;height:100%\" id=\"HEG4965862_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;min-height:40px;right:0;padding-right:0px;min-width:56px\" class=\"guipanel r-table-cell\" id=\"HEG4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:76px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:0px;text-align:center\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-2px;top:0;left:49.999%;bottom:0;width:1px;margin-top:0px;margin-bottom:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:#f4f4f4;padding-top:0px;margin:auto;top:0;max-width:1px;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px;min-width:1px\" class=\"guipanel\" id=\"GCS4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div></div><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:76px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:10px;top:50%;left:0;width:46px;margin-top:-19px;margin-bottom:0px;margin-right:20px;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;min-height:30px;right:0;padding-right:8px\" class=\"guipanel r-table-cell\" id=\"PIR4965858\"><div style=\"right:8px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:38px;top:0;left:0;height:38px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:38px;text-align:center;height:38px\" class=\"guilayoutgridbag_container\"><div style=\"width:38px;margin-left:-19px;margin-top:-19px;top:50%;left:50%;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;cursor:pointer;padding-top:4px;margin:auto;top:0;left:0;bottom:0;padding-left:4px;padding-bottom:4px;right:0;padding-right:4px\" class=\"guipanel incraseContrastForPartlistIconsOnClick decreaseContrastForPartlistIconsOnHover cursor_pointer\" id=\"BDP4965858\" onmousedown=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnMouseUp(event, &#39;BDP4965858&#39;, &#39;BDP4965858&#39;, &#39;&#39;, true, false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;FPT4965858\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Goto&amp;nbsp;assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 106, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnClick(event, &#39;BDP4965858&#39;, &#39;BDP4965858&#39;, &#39;&#39;, true, false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div style=\"right:4px;top:4px;left:4px;bottom:4px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"border-radius:2px;background-color:rgba(0,0,0,0.06274509803921569);padding-top:7px;top:0;left:0;bottom:0;padding-left:7px;padding-bottom:7px;right:0;padding-right:7px\" class=\"guipanel\" id=\"EHK4965858\"><div style=\"right:7px;top:7px;left:7px;bottom:7px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"width:16px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:0px\" class=\"guiimage\" id=\"PBF4965858\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_responsive_table_go_down_normal.png\" alt=\"\" id=\"PBF4965858_img\"></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div>@DX@evaluateJavascript@DW@dwDomSetGlobalStyleIfNotExists('.dw-hover-class-background-23643764376437:hover{ background-color: #d7d7d7 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-foreground-23303030303030:hover{ color: #000000 !important;}');\n@DX@genericInsertNode@DW@WQO4965656@DW@0@DW@12@DW@<div style=\"position:absolute;right:0px;top:492px;left:0px;height:41px\" id=\"PIS4965678_layoutdiv\"><div style=\"background-color:#f5f5f5;padding-top:0px;top:0;color:#000000;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel dw-hover-class-foreground-23303030303030 dw-hover-class-background-23643764376437\" id=\"PIS4965678\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;PIS4965678&#39;, &#39;PIS4965678&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"z-index:301;position:absolute;right:0px;left:0px;bottom:0px;height:1px\" id=\"BLE4966668_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"BLE4966668\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div><div style=\"z-index:1;top:0px;left:16px;display:table;width:50px;position:absolute;height:100%\" id=\"KMR4965858_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"KMR4965858\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-top:-15px;right:0;top:50%;left:0px;bottom:0;height:30px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;right:0px;text-align:left;height:30px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:49.999%;left:0;width:27px;margin-top:-12px;margin-bottom:0px;margin-right:0px;height:27px\" class=\"guilayoutgridbag_container_padded\"><label style=\"padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"rcheckbox\" id=\"YTM4965858\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;YTM4965858&#39;, &#39;YTM4965858&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" ondblclick=\"try {dwFwPreEv(event,false,this); ;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><input name=\"YTM4965858\" value=\"YTM4965858\" type=\"checkbox\" id=\"YTM4965858_input\" onchange=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxCheckboxOnChange(event, &#39;YTM4965858&#39;, &#39;YTM4965858_input&#39;, &#39;&#39;, false, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);this.blur();this.focus();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><span class=\"checkmark\" id=\"YTM4965858_checkmark\"></span><span class=\"rcheckbox_text\" id=\"YTM4965858_text\"></span></label></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:76px;display:table;width:34px;position:absolute;height:100%\" id=\"XFK4965859_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"XFK4965859\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:24px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:24px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-8px;right:0;height:16px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"width:24px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:8px\" class=\"guiimage\" id=\"RYF4965859\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;RYF4965859&#39;, &#39;RYF4965859&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;CGJ4965859\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 72, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=bi_image_FCE645C38BE44E45BFFA7E9674945850\" alt=\"\" id=\"RYF4965859_img\"></div></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:120px;display:table;width:254px;position:absolute;height:100%\" id=\"EBP4965859_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;padding-left:0px;display:table-cell;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel r-table-cell\" id=\"EBP4965859\">Dust&nbsp;extraction</div></div><div style=\"z-index:1;top:0px;left:378px;display:table;width:46px;position:absolute;height:100%\" id=\"OST4965862_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;min-height:40px;right:0;padding-right:0px;min-width:56px\" class=\"guipanel r-table-cell\" id=\"OST4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:76px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:0px;text-align:center\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-2px;top:0;left:49.999%;bottom:0;width:1px;margin-top:0px;margin-bottom:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:#f4f4f4;padding-top:0px;margin:auto;top:0;max-width:1px;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px;min-width:1px\" class=\"guipanel\" id=\"QXB4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div></div><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:76px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:10px;top:50%;left:0;width:46px;margin-top:-19px;margin-bottom:0px;margin-right:20px;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;min-height:30px;right:0;padding-right:8px\" class=\"guipanel r-table-cell\" id=\"VXT4965859\"><div style=\"right:8px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:38px;top:0;left:0;height:38px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:38px;text-align:center;height:38px\" class=\"guilayoutgridbag_container\"><div style=\"width:38px;margin-left:-19px;margin-top:-19px;top:50%;left:50%;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;cursor:pointer;padding-top:4px;margin:auto;top:0;left:0;bottom:0;padding-left:4px;padding-bottom:4px;right:0;padding-right:4px\" class=\"guipanel incraseContrastForPartlistIconsOnClick decreaseContrastForPartlistIconsOnHover cursor_pointer\" id=\"ADU4965859\" onmousedown=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnMouseUp(event, &#39;ADU4965859&#39;, &#39;ADU4965859&#39;, &#39;&#39;, true, false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;TGH4965859\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Goto&amp;nbsp;assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 106, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnClick(event, &#39;ADU4965859&#39;, &#39;ADU4965859&#39;, &#39;&#39;, true, false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div style=\"right:4px;top:4px;left:4px;bottom:4px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"border-radius:2px;background-color:rgba(0,0,0,0.06274509803921569);padding-top:7px;top:0;left:0;bottom:0;padding-left:7px;padding-bottom:7px;right:0;padding-right:7px\" class=\"guipanel\" id=\"FQU4965859\"><div style=\"right:7px;top:7px;left:7px;bottom:7px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"width:16px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:0px\" class=\"guiimage\" id=\"FON4965859\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_responsive_table_go_down_normal.png\" alt=\"\" id=\"FON4965859_img\"></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div>@DX@evaluateJavascript@DW@dwDomSetGlobalStyleIfNotExists('.dw-hover-class-background-23643764376437:hover{ background-color: #d7d7d7 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-foreground-23303030303030:hover{ color: #000000 !important;}');\n@DX@genericInsertNode@DW@WQO4965656@DW@0@DW@13@DW@<div style=\"position:absolute;right:0px;top:533px;left:0px;height:41px\" id=\"HQN4965678_layoutdiv\"><div style=\"background-color:#f5f5f5;padding-top:0px;top:0;color:#000000;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel dw-hover-class-foreground-23303030303030 dw-hover-class-background-23643764376437\" id=\"HQN4965678\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;HQN4965678&#39;, &#39;HQN4965678&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"z-index:301;position:absolute;right:0px;left:0px;bottom:0px;height:1px\" id=\"GQB4966669_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"GQB4966669\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div><div style=\"z-index:1;top:0px;left:16px;display:table;width:50px;position:absolute;height:100%\" id=\"YEM4965859_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"YEM4965859\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-top:-15px;right:0;top:50%;left:0px;bottom:0;height:30px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;right:0px;text-align:left;height:30px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:49.999%;left:0;width:27px;margin-top:-12px;margin-bottom:0px;margin-right:0px;height:27px\" class=\"guilayoutgridbag_container_padded\"><label style=\"padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"rcheckbox\" id=\"MXV4965859\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;MXV4965859&#39;, &#39;MXV4965859&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" ondblclick=\"try {dwFwPreEv(event,false,this); ;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><input name=\"MXV4965859\" value=\"MXV4965859\" type=\"checkbox\" id=\"MXV4965859_input\" onchange=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxCheckboxOnChange(event, &#39;MXV4965859&#39;, &#39;MXV4965859_input&#39;, &#39;&#39;, false, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);this.blur();this.focus();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><span class=\"checkmark\" id=\"MXV4965859_checkmark\"></span><span class=\"rcheckbox_text\" id=\"MXV4965859_text\"></span></label></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:76px;display:table;width:34px;position:absolute;height:100%\" id=\"DPI4965860_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"DPI4965860\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:24px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:24px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-8px;right:0;height:16px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"width:24px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:8px\" class=\"guiimage\" id=\"LKL4965860\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;LKL4965860&#39;, &#39;LKL4965860&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;EAJ4965860\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 72, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=bi_image_FCE645C38BE44E45BFFA7E9674945850\" alt=\"\" id=\"LKL4965860_img\"></div></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:120px;display:table;width:254px;position:absolute;height:100%\" id=\"GLM4965860_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;padding-left:0px;display:table-cell;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel r-table-cell\" id=\"GLM4965860\">Basis-Plus&nbsp;system</div></div><div style=\"z-index:1;top:0px;left:378px;display:table;width:46px;position:absolute;height:100%\" id=\"BUN4965862_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;min-height:40px;right:0;padding-right:0px;min-width:56px\" class=\"guipanel r-table-cell\" id=\"BUN4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:76px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:0px;text-align:center\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-2px;top:0;left:49.999%;bottom:0;width:1px;margin-top:0px;margin-bottom:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:#f4f4f4;padding-top:0px;margin:auto;top:0;max-width:1px;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px;min-width:1px\" class=\"guipanel\" id=\"BHF4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div></div><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:76px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:10px;top:50%;left:0;width:46px;margin-top:-19px;margin-bottom:0px;margin-right:20px;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;min-height:30px;right:0;padding-right:8px\" class=\"guipanel r-table-cell\" id=\"DSB4965860\"><div style=\"right:8px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:38px;top:0;left:0;height:38px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:38px;text-align:center;height:38px\" class=\"guilayoutgridbag_container\"><div style=\"width:38px;margin-left:-19px;margin-top:-19px;top:50%;left:50%;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;cursor:pointer;padding-top:4px;margin:auto;top:0;left:0;bottom:0;padding-left:4px;padding-bottom:4px;right:0;padding-right:4px\" class=\"guipanel incraseContrastForPartlistIconsOnClick decreaseContrastForPartlistIconsOnHover cursor_pointer\" id=\"LRS4965860\" onmousedown=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnMouseUp(event, &#39;LRS4965860&#39;, &#39;LRS4965860&#39;, &#39;&#39;, true, false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;DNV4965860\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Goto&amp;nbsp;assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 106, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnClick(event, &#39;LRS4965860&#39;, &#39;LRS4965860&#39;, &#39;&#39;, true, false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div style=\"right:4px;top:4px;left:4px;bottom:4px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"border-radius:2px;background-color:rgba(0,0,0,0.06274509803921569);padding-top:7px;top:0;left:0;bottom:0;padding-left:7px;padding-bottom:7px;right:0;padding-right:7px\" class=\"guipanel\" id=\"RKD4965860\"><div style=\"right:7px;top:7px;left:7px;bottom:7px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"width:16px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:0px\" class=\"guiimage\" id=\"BUO4965860\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_responsive_table_go_down_normal.png\" alt=\"\" id=\"BUO4965860_img\"></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div>@DX@evaluateJavascript@DW@dwDomSetGlobalStyleIfNotExists('.dw-hover-class-background-23643764376437:hover{ background-color: #d7d7d7 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-foreground-23303030303030:hover{ color: #000000 !important;}');\n@DX@genericInsertNode@DW@WQO4965656@DW@0@DW@14@DW@<div style=\"position:absolute;right:0px;top:574px;left:0px;height:41px\" id=\"UWU4965678_layoutdiv\"><div style=\"background-color:#f5f5f5;padding-top:0px;top:0;color:#000000;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel dw-hover-class-foreground-23303030303030 dw-hover-class-background-23643764376437\" id=\"UWU4965678\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;UWU4965678&#39;, &#39;UWU4965678&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"z-index:301;position:absolute;right:0px;left:0px;bottom:0px;height:1px\" id=\"YEP4966670_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"YEP4966670\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div><div style=\"z-index:1;top:0px;left:16px;display:table;width:50px;position:absolute;height:100%\" id=\"CWS4965860_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"CWS4965860\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-top:-15px;right:0;top:50%;left:0px;bottom:0;height:30px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;right:0px;text-align:left;height:30px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:49.999%;left:0;width:27px;margin-top:-12px;margin-bottom:0px;margin-right:0px;height:27px\" class=\"guilayoutgridbag_container_padded\"><label style=\"padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"rcheckbox\" id=\"VBV4965860\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;VBV4965860&#39;, &#39;VBV4965860&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" ondblclick=\"try {dwFwPreEv(event,false,this); ;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><input name=\"VBV4965860\" value=\"VBV4965860\" type=\"checkbox\" id=\"VBV4965860_input\" onchange=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxCheckboxOnChange(event, &#39;VBV4965860&#39;, &#39;VBV4965860_input&#39;, &#39;&#39;, false, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);this.blur();this.focus();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><span class=\"checkmark\" id=\"VBV4965860_checkmark\"></span><span class=\"rcheckbox_text\" id=\"VBV4965860_text\"></span></label></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:76px;display:table;width:34px;position:absolute;height:100%\" id=\"JKB4965860_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"JKB4965860\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:24px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:24px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-8px;right:0;height:16px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"width:24px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:8px\" class=\"guiimage\" id=\"KMI4965860\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;KMI4965860&#39;, &#39;KMI4965860&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;FUY4965860\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 72, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=bi_image_FCE645C38BE44E45BFFA7E9674945850\" alt=\"\" id=\"KMI4965860_img\"></div></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:120px;display:table;width:254px;position:absolute;height:100%\" id=\"ELV4965860_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;padding-left:0px;display:table-cell;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel r-table-cell\" id=\"ELV4965860\">Cutting</div></div><div style=\"z-index:1;top:0px;left:378px;display:table;width:46px;position:absolute;height:100%\" id=\"BEA4965862_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;min-height:40px;right:0;padding-right:0px;min-width:56px\" class=\"guipanel r-table-cell\" id=\"BEA4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:76px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:0px;text-align:center\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-2px;top:0;left:49.999%;bottom:0;width:1px;margin-top:0px;margin-bottom:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:#f4f4f4;padding-top:0px;margin:auto;top:0;max-width:1px;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px;min-width:1px\" class=\"guipanel\" id=\"FXG4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div></div><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:76px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:10px;top:50%;left:0;width:46px;margin-top:-19px;margin-bottom:0px;margin-right:20px;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;min-height:30px;right:0;padding-right:8px\" class=\"guipanel r-table-cell\" id=\"XWU4965860\"><div style=\"right:8px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:38px;top:0;left:0;height:38px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:38px;text-align:center;height:38px\" class=\"guilayoutgridbag_container\"><div style=\"width:38px;margin-left:-19px;margin-top:-19px;top:50%;left:50%;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;cursor:pointer;padding-top:4px;margin:auto;top:0;left:0;bottom:0;padding-left:4px;padding-bottom:4px;right:0;padding-right:4px\" class=\"guipanel incraseContrastForPartlistIconsOnClick decreaseContrastForPartlistIconsOnHover cursor_pointer\" id=\"PYG4965860\" onmousedown=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnMouseUp(event, &#39;PYG4965860&#39;, &#39;PYG4965860&#39;, &#39;&#39;, true, false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;HCD4965860\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Goto&amp;nbsp;assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 106, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnClick(event, &#39;PYG4965860&#39;, &#39;PYG4965860&#39;, &#39;&#39;, true, false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div style=\"right:4px;top:4px;left:4px;bottom:4px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"border-radius:2px;background-color:rgba(0,0,0,0.06274509803921569);padding-top:7px;top:0;left:0;bottom:0;padding-left:7px;padding-bottom:7px;right:0;padding-right:7px\" class=\"guipanel\" id=\"PPJ4965860\"><div style=\"right:7px;top:7px;left:7px;bottom:7px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"width:16px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:0px\" class=\"guiimage\" id=\"JEY4965860\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_responsive_table_go_down_normal.png\" alt=\"\" id=\"JEY4965860_img\"></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div>@DX@evaluateJavascript@DW@dwDomSetGlobalStyleIfNotExists('.dw-hover-class-background-23643764376437:hover{ background-color: #d7d7d7 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-foreground-23303030303030:hover{ color: #000000 !important;}');\n@DX@genericInsertNode@DW@WQO4965656@DW@0@DW@15@DW@<div style=\"position:absolute;right:0px;top:615px;left:0px;height:41px\" id=\"CWQ4965678_layoutdiv\"><div style=\"background-color:#f5f5f5;padding-top:0px;top:0;color:#000000;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel dw-hover-class-foreground-23303030303030 dw-hover-class-background-23643764376437\" id=\"CWQ4965678\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;CWQ4965678&#39;, &#39;CWQ4965678&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"z-index:301;position:absolute;right:0px;left:0px;bottom:0px;height:1px\" id=\"SXS4966670_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"SXS4966670\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div><div style=\"z-index:1;top:0px;left:16px;display:table;width:50px;position:absolute;height:100%\" id=\"AGG4965860_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"AGG4965860\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-top:-15px;right:0;top:50%;left:0px;bottom:0;height:30px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;right:0px;text-align:left;height:30px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:49.999%;left:0;width:27px;margin-top:-12px;margin-bottom:0px;margin-right:0px;height:27px\" class=\"guilayoutgridbag_container_padded\"><label style=\"padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"rcheckbox\" id=\"VTE4965860\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;VTE4965860&#39;, &#39;VTE4965860&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" ondblclick=\"try {dwFwPreEv(event,false,this); ;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><input name=\"VTE4965860\" value=\"VTE4965860\" type=\"checkbox\" id=\"VTE4965860_input\" onchange=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxCheckboxOnChange(event, &#39;VTE4965860&#39;, &#39;VTE4965860_input&#39;, &#39;&#39;, false, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);this.blur();this.focus();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><span class=\"checkmark\" id=\"VTE4965860_checkmark\"></span><span class=\"rcheckbox_text\" id=\"VTE4965860_text\"></span></label></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:76px;display:table;width:34px;position:absolute;height:100%\" id=\"MRV4965861_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"MRV4965861\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:24px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:24px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-8px;right:0;height:16px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"width:24px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:8px\" class=\"guiimage\" id=\"DIV4965861\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;DIV4965861&#39;, &#39;DIV4965861&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;BJT4965861\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 72, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=bi_image_FCE645C38BE44E45BFFA7E9674945850\" alt=\"\" id=\"DIV4965861_img\"></div></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:120px;display:table;width:254px;position:absolute;height:100%\" id=\"XSQ4965861_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;padding-left:0px;display:table-cell;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel r-table-cell\" id=\"XSQ4965861\">Drywall&nbsp;construction&nbsp;and&nbsp;renovation</div></div><div style=\"z-index:1;top:0px;left:378px;display:table;width:46px;position:absolute;height:100%\" id=\"FJS4965862_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;min-height:40px;right:0;padding-right:0px;min-width:56px\" class=\"guipanel r-table-cell\" id=\"FJS4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:76px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:0px;text-align:center\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-2px;top:0;left:49.999%;bottom:0;width:1px;margin-top:0px;margin-bottom:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:#f4f4f4;padding-top:0px;margin:auto;top:0;max-width:1px;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px;min-width:1px\" class=\"guipanel\" id=\"IFG4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div></div><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:76px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:10px;top:50%;left:0;width:46px;margin-top:-19px;margin-bottom:0px;margin-right:20px;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;min-height:30px;right:0;padding-right:8px\" class=\"guipanel r-table-cell\" id=\"HCP4965861\"><div style=\"right:8px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:38px;top:0;left:0;height:38px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:38px;text-align:center;height:38px\" class=\"guilayoutgridbag_container\"><div style=\"width:38px;margin-left:-19px;margin-top:-19px;top:50%;left:50%;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;cursor:pointer;padding-top:4px;margin:auto;top:0;left:0;bottom:0;padding-left:4px;padding-bottom:4px;right:0;padding-right:4px\" class=\"guipanel incraseContrastForPartlistIconsOnClick decreaseContrastForPartlistIconsOnHover cursor_pointer\" id=\"MDS4965861\" onmousedown=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnMouseUp(event, &#39;MDS4965861&#39;, &#39;MDS4965861&#39;, &#39;&#39;, true, false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;DMX4965861\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Goto&amp;nbsp;assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 106, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnClick(event, &#39;MDS4965861&#39;, &#39;MDS4965861&#39;, &#39;&#39;, true, false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div style=\"right:4px;top:4px;left:4px;bottom:4px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"border-radius:2px;background-color:rgba(0,0,0,0.06274509803921569);padding-top:7px;top:0;left:0;bottom:0;padding-left:7px;padding-bottom:7px;right:0;padding-right:7px\" class=\"guipanel\" id=\"XBG4965861\"><div style=\"right:7px;top:7px;left:7px;bottom:7px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"width:16px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:0px\" class=\"guiimage\" id=\"BDE4965861\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_responsive_table_go_down_normal.png\" alt=\"\" id=\"BDE4965861_img\"></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div>@DX@evaluateJavascript@DW@dwDomSetGlobalStyleIfNotExists('.dw-hover-class-background-23643764376437:hover{ background-color: #d7d7d7 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-foreground-23303030303030:hover{ color: #000000 !important;}');\n@DX@genericInsertNode@DW@WQO4965656@DW@0@DW@16@DW@<div style=\"position:absolute;right:0px;top:656px;left:0px;height:41px\" id=\"GGI4965678_layoutdiv\"><div style=\"background-color:#f5f5f5;padding-top:0px;top:0;color:#000000;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel dw-hover-class-foreground-23303030303030 dw-hover-class-background-23643764376437\" id=\"GGI4965678\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;GGI4965678&#39;, &#39;GGI4965678&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"z-index:301;position:absolute;right:0px;left:0px;bottom:0px;height:1px\" id=\"JPQ4966671_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"JPQ4966671\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div><div style=\"z-index:1;top:0px;left:16px;display:table;width:50px;position:absolute;height:100%\" id=\"HDD4965861_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"HDD4965861\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-top:-15px;right:0;top:50%;left:0px;bottom:0;height:30px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;right:0px;text-align:left;height:30px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:49.999%;left:0;width:27px;margin-top:-12px;margin-bottom:0px;margin-right:0px;height:27px\" class=\"guilayoutgridbag_container_padded\"><label style=\"padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"rcheckbox\" id=\"GTL4965861\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;GTL4965861&#39;, &#39;GTL4965861&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" ondblclick=\"try {dwFwPreEv(event,false,this); ;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><input name=\"GTL4965861\" value=\"GTL4965861\" type=\"checkbox\" id=\"GTL4965861_input\" onchange=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxCheckboxOnChange(event, &#39;GTL4965861&#39;, &#39;GTL4965861_input&#39;, &#39;&#39;, false, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);this.blur();this.focus();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><span class=\"checkmark\" id=\"GTL4965861_checkmark\"></span><span class=\"rcheckbox_text\" id=\"GTL4965861_text\"></span></label></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:76px;display:table;width:34px;position:absolute;height:100%\" id=\"HFH4965862_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"HFH4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:24px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:24px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-8px;right:0;height:16px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"width:24px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:8px\" class=\"guiimage\" id=\"JNL4965862\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;JNL4965862&#39;, &#39;JNL4965862&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;KAP4965862\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 72, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=bi_image_FCE645C38BE44E45BFFA7E9674945850\" alt=\"\" id=\"JNL4965862_img\"></div></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:120px;display:table;width:254px;position:absolute;height:100%\" id=\"WQY4965862_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;padding-left:0px;display:table-cell;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel r-table-cell\" id=\"WQY4965862\">Joining&nbsp;&ndash;&nbsp;DOMINO&nbsp;joining&nbsp;system</div></div><div style=\"z-index:1;top:0px;left:378px;display:table;width:46px;position:absolute;height:100%\" id=\"DUX4965862_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;min-height:40px;right:0;padding-right:0px;min-width:56px\" class=\"guipanel r-table-cell\" id=\"DUX4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:76px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:0px;text-align:center\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-2px;top:0;left:49.999%;bottom:0;width:1px;margin-top:0px;margin-bottom:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:#f4f4f4;padding-top:0px;margin:auto;top:0;max-width:1px;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px;min-width:1px\" class=\"guipanel\" id=\"OTU4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div></div><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:76px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:10px;top:50%;left:0;width:46px;margin-top:-19px;margin-bottom:0px;margin-right:20px;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;min-height:30px;right:0;padding-right:8px\" class=\"guipanel r-table-cell\" id=\"PSM4965862\"><div style=\"right:8px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:38px;top:0;left:0;height:38px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:38px;text-align:center;height:38px\" class=\"guilayoutgridbag_container\"><div style=\"width:38px;margin-left:-19px;margin-top:-19px;top:50%;left:50%;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;cursor:pointer;padding-top:4px;margin:auto;top:0;left:0;bottom:0;padding-left:4px;padding-bottom:4px;right:0;padding-right:4px\" class=\"guipanel incraseContrastForPartlistIconsOnClick decreaseContrastForPartlistIconsOnHover cursor_pointer\" id=\"UMR4965862\" onmousedown=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnMouseUp(event, &#39;UMR4965862&#39;, &#39;UMR4965862&#39;, &#39;&#39;, true, false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;QVT4965862\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Goto&amp;nbsp;assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 106, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnClick(event, &#39;UMR4965862&#39;, &#39;UMR4965862&#39;, &#39;&#39;, true, false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div style=\"right:4px;top:4px;left:4px;bottom:4px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"border-radius:2px;background-color:rgba(0,0,0,0.06274509803921569);padding-top:7px;top:0;left:0;bottom:0;padding-left:7px;padding-bottom:7px;right:0;padding-right:7px\" class=\"guipanel\" id=\"BSF4965862\"><div style=\"right:7px;top:7px;left:7px;bottom:7px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"width:16px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:0px\" class=\"guiimage\" id=\"BAE4965862\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_responsive_table_go_down_normal.png\" alt=\"\" id=\"BAE4965862_img\"></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div>@DX@evaluateJavascript@DW@dwDomSetGlobalStyleIfNotExists('.dw-hover-class-background-23643764376437:hover{ background-color: #d7d7d7 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-foreground-23303030303030:hover{ color: #000000 !important;}');\n@DX@evaluateJavascript@DW@var timer = DWUTILS_FUNCTION_TIMEOUT_REGISTRY['fixedColumn']; if (timer) clearTimeout(timer); DWUTILS_FUNCTION_TIMEOUT_REGISTRY['fixedColumn'] = setTimeout(function() {dwHelperUpdateNotifyingScrollPanelColumnScrollPosition('MWJ4965656')}, 10)@DX@evaluateJavascript@DW@var timer = DWUTILS_FUNCTION_TIMEOUT_REGISTRY['fixedColumn']; if (timer) clearTimeout(timer); DWUTILS_FUNCTION_TIMEOUT_REGISTRY['fixedColumn'] = setTimeout(function() {dwHelperUpdateNotifyingScrollPanelColumnScrollPosition('MWJ4965656')}, 10)@DX@setStyle@DW@UXU4965633_layoutdiv@DW@left@DW@48px@DX@setStyle@DW@UXU4965633_layoutdiv@DW@width@DW@92px@DX@removeStyle@DW@UXU4965633_layoutdiv@DW@right@DX@setStyle@DW@UXU4965633_layoutdiv@DW@top@DW@0px@DX@setStyle@DW@UXU4965633_layoutdiv@DW@height@DW@48px@DX@removeStyle@DW@UXU4965633_layoutdiv@DW@bottom@DX@setStyle@DW@UXU4965633_layoutdiv@DW@z-index@DW@300@DX@evaluateJavascript@DW@dwScrollpaneInitializeScrollpaneFadings('MWJ4965656', '{\"sides\":{\"TOP\":0,\"RIGHT\":0,\"LEFT\":0,\"BOTTOM\":0}}');@DX@evaluateJavascript@DW@dwScrollpaneInitializeScrollpaneFadings('MWJ4965656', '{\"sides\":{\"TOP\":0,\"LEFT\":0,\"BOTTOM\":0}}');@DX@setStyle@DW@IUR4966655@DW@font-size@DW@14px@DX@setStyle@DW@IUR4966655@DW@line-height@DW@15px@DX@setStyle@DW@CJP4965848@DW@font-size@DW@14px@DX@setStyle@DW@CJP4965848@DW@line-height@DW@15px@DX@setStyle@DW@HRT4965849@DW@padding-top@DW@4px@DX@genericSetNodeStyle@DW@HRT4965849@DW@0@DW@top@DW@4px@DX@genericSetNodeStyle@DW@HRT4965849@DW@0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@HRT4965849@DW@0@DW@right@DW@0px@DX@genericSetNodeStyle@DW@HRT4965849@DW@0@DW@bottom@DW@0px@DX@setStyle@DW@MSQ4965849@DW@font-size@DW@14px@DX@setStyle@DW@MSQ4965849@DW@line-height@DW@15px@DX@setStyle@DW@OBG4965862@DW@font-size@DW@14px@DX@setStyle@DW@OBG4965862@DW@line-height@DW@15px@DX@setStyle@DW@VJS4966655@DW@font-size@DW@14px@DX@setStyle@DW@VJS4966655@DW@line-height@DW@15px@DX@setStyle@DW@VWP4965849@DW@font-size@DW@14px@DX@setStyle@DW@VWP4965849@DW@line-height@DW@15px@DX@setStyle@DW@ELK4965850@DW@padding-top@DW@4px@DX@genericSetNodeStyle@DW@ELK4965850@DW@0@DW@top@DW@4px@DX@genericSetNodeStyle@DW@ELK4965850@DW@0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@ELK4965850@DW@0@DW@right@DW@0px@DX@genericSetNodeStyle@DW@ELK4965850@DW@0@DW@bottom@DW@0px@DX@setStyle@DW@JTC4965850@DW@font-size@DW@14px@DX@setStyle@DW@JTC4965850@DW@line-height@DW@15px@DX@setStyle@DW@VOU4965862@DW@font-size@DW@14px@DX@setStyle@DW@VOU4965862@DW@line-height@DW@15px@DX@setStyle@DW@QFM4966656@DW@font-size@DW@14px@DX@setStyle@DW@QFM4966656@DW@line-height@DW@15px@DX@setStyle@DW@DSJ4965850@DW@font-size@DW@14px@DX@setStyle@DW@DSJ4965850@DW@line-height@DW@15px@DX@setStyle@DW@ALA4965851@DW@padding-top@DW@4px@DX@genericSetNodeStyle@DW@ALA4965851@DW@0@DW@top@DW@4px@DX@genericSetNodeStyle@DW@ALA4965851@DW@0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@ALA4965851@DW@0@DW@right@DW@0px@DX@genericSetNodeStyle@DW@ALA4965851@DW@0@DW@bottom@DW@0px@DX@setStyle@DW@JVR4965851@DW@font-size@DW@14px@DX@setStyle@DW@JVR4965851@DW@line-height@DW@15px@DX@setStyle@DW@NEL4965862@DW@font-size@DW@14px@DX@setStyle@DW@NEL4965862@DW@line-height@DW@15px@DX@setStyle@DW@CJE4966657@DW@font-size@DW@14px@DX@setStyle@DW@CJE4966657@DW@line-height@DW@15px@DX@setStyle@DW@QJS4965851@DW@font-size@DW@14px@DX@setStyle@DW@QJS4965851@DW@line-height@DW@15px@DX@setStyle@DW@OYW4965851@DW@padding-top@DW@4px@DX@genericSetNodeStyle@DW@OYW4965851@DW@0@DW@top@DW@4px@DX@genericSetNodeStyle@DW@OYW4965851@DW@0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@OYW4965851@DW@0@DW@right@DW@0px@DX@genericSetNodeStyle@DW@OYW4965851@DW@0@DW@bottom@DW@0px@DX@setStyle@DW@GVN4965851@DW@font-size@DW@14px@DX@setStyle@DW@GVN4965851@DW@line-height@DW@15px@DX@setStyle@DW@KKN4965862@DW@font-size@DW@14px@DX@setStyle@DW@KKN4965862@DW@line-height@DW@15px@DX@setStyle@DW@HFU4966658@DW@font-size@DW@14px@DX@setStyle@DW@HFU4966658@DW@line-height@DW@15px@DX@setStyle@DW@QXH4965852@DW@font-size@DW@14px@DX@setStyle@DW@QXH4965852@DW@line-height@DW@15px@DX@setStyle@DW@KGJ4965852@DW@padding-top@DW@4px@DX@genericSetNodeStyle@DW@KGJ4965852@DW@0@DW@top@DW@4px@DX@genericSetNodeStyle@DW@KGJ4965852@DW@0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@KGJ4965852@DW@0@DW@right@DW@0px@DX@genericSetNodeStyle@DW@KGJ4965852@DW@0@DW@bottom@DW@0px@DX@setStyle@DW@LEX4965852@DW@font-size@DW@14px@DX@setStyle@DW@LEX4965852@DW@line-height@DW@15px@DX@setStyle@DW@ILH4965862@DW@font-size@DW@14px@DX@setStyle@DW@ILH4965862@DW@line-height@DW@15px@DX@setStyle@DW@FSP4966659@DW@font-size@DW@14px@DX@setStyle@DW@FSP4966659@DW@line-height@DW@15px@DX@setStyle@DW@OAF4965852@DW@font-size@DW@14px@DX@setStyle@DW@OAF4965852@DW@line-height@DW@15px@DX@setStyle@DW@OSN4965853@DW@padding-top@DW@4px@DX@genericSetNodeStyle@DW@OSN4965853@DW@0@DW@top@DW@4px@DX@genericSetNodeStyle@DW@OSN4965853@DW@0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@OSN4965853@DW@0@DW@right@DW@0px@DX@genericSetNodeStyle@DW@OSN4965853@DW@0@DW@bottom@DW@0px@DX@setStyle@DW@JBG4965853@DW@font-size@DW@14px@DX@setStyle@DW@JBG4965853@DW@line-height@DW@15px@DX@setStyle@DW@SGO4965862@DW@font-size@DW@14px@DX@setStyle@DW@SGO4965862@DW@line-height@DW@15px@DX@setStyle@DW@FBE4966660@DW@font-size@DW@14px@DX@setStyle@DW@FBE4966660@DW@line-height@DW@15px@DX@setStyle@DW@KMG4965853@DW@font-size@DW@14px@DX@setStyle@DW@KMG4965853@DW@line-height@DW@15px@DX@setStyle@DW@OYH4965854@DW@padding-top@DW@4px@DX@genericSetNodeStyle@DW@OYH4965854@DW@0@DW@top@DW@4px@DX@genericSetNodeStyle@DW@OYH4965854@DW@0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@OYH4965854@DW@0@DW@right@DW@0px@DX@genericSetNodeStyle@DW@OYH4965854@DW@0@DW@bottom@DW@0px@DX@setStyle@DW@NPB4965854@DW@font-size@DW@14px@DX@setStyle@DW@NPB4965854@DW@line-height@DW@15px@DX@setStyle@DW@LVO4965862@DW@font-size@DW@14px@DX@setStyle@DW@LVO4965862@DW@line-height@DW@15px@DX@setStyle@DW@SOM4966662@DW@font-size@DW@14px@DX@setStyle@DW@SOM4966662@DW@line-height@DW@15px@DX@setStyle@DW@QTD4965854@DW@font-size@DW@14px@DX@setStyle@DW@QTD4965854@DW@line-height@DW@15px@DX@setStyle@DW@ACH4965855@DW@padding-top@DW@4px@DX@genericSetNodeStyle@DW@ACH4965855@DW@0@DW@top@DW@4px@DX@genericSetNodeStyle@DW@ACH4965855@DW@0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@ACH4965855@DW@0@DW@right@DW@0px@DX@genericSetNodeStyle@DW@ACH4965855@DW@0@DW@bottom@DW@0px@DX@setStyle@DW@JRK4965855@DW@font-size@DW@14px@DX@setStyle@DW@JRK4965855@DW@line-height@DW@15px@DX@setStyle@DW@KWF4965862@DW@font-size@DW@14px@DX@setStyle@DW@KWF4965862@DW@line-height@DW@15px@DX@setStyle@DW@GKI4966663@DW@font-size@DW@14px@DX@setStyle@DW@GKI4966663@DW@line-height@DW@15px@DX@setStyle@DW@XLX4965855@DW@font-size@DW@14px@DX@setStyle@DW@XLX4965855@DW@line-height@DW@15px@DX@setStyle@DW@WKV4965856@DW@padding-top@DW@4px@DX@genericSetNodeStyle@DW@WKV4965856@DW@0@DW@top@DW@4px@DX@genericSetNodeStyle@DW@WKV4965856@DW@0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@WKV4965856@DW@0@DW@right@DW@0px@DX@genericSetNodeStyle@DW@WKV4965856@DW@0@DW@bottom@DW@0px@DX@setStyle@DW@SSL4965856@DW@font-size@DW@14px@DX@setStyle@DW@SSL4965856@DW@line-height@DW@15px@DX@setStyle@DW@OOF4965862@DW@font-size@DW@14px@DX@setStyle@DW@OOF4965862@DW@line-height@DW@15px@DX@setStyle@DW@KVT4966664@DW@font-size@DW@14px@DX@setStyle@DW@KVT4966664@DW@line-height@DW@15px@DX@setStyle@DW@EWA4965856@DW@font-size@DW@14px@DX@setStyle@DW@EWA4965856@DW@line-height@DW@15px@DX@setStyle@DW@WSD4965856@DW@padding-top@DW@4px@DX@genericSetNodeStyle@DW@WSD4965856@DW@0@DW@top@DW@4px@DX@genericSetNodeStyle@DW@WSD4965856@DW@0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@WSD4965856@DW@0@DW@right@DW@0px@DX@genericSetNodeStyle@DW@WSD4965856@DW@0@DW@bottom@DW@0px@DX@setStyle@DW@FIP4965856@DW@font-size@DW@14px@DX@setStyle@DW@FIP4965856@DW@line-height@DW@15px@DX@setStyle@DW@CAA4965862@DW@font-size@DW@14px@DX@setStyle@DW@CAA4965862@DW@line-height@DW@15px@DX@setStyle@DW@DUK4966665@DW@font-size@DW@14px@DX@setStyle@DW@DUK4966665@DW@line-height@DW@15px@DX@setStyle@DW@IRR4965857@DW@font-size@DW@14px@DX@setStyle@DW@IRR4965857@DW@line-height@DW@15px@DX@setStyle@DW@NVU4965857@DW@padding-top@DW@4px@DX@genericSetNodeStyle@DW@NVU4965857@DW@0@DW@top@DW@4px@DX@genericSetNodeStyle@DW@NVU4965857@DW@0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@NVU4965857@DW@0@DW@right@DW@0px@DX@genericSetNodeStyle@DW@NVU4965857@DW@0@DW@bottom@DW@0px@DX@setStyle@DW@SOV4965857@DW@font-size@DW@14px@DX@setStyle@DW@SOV4965857@DW@line-height@DW@15px@DX@setStyle@DW@KQO4965862@DW@font-size@DW@14px@DX@setStyle@DW@KQO4965862@DW@line-height@DW@15px@DX@setStyle@DW@OGL4966666@DW@font-size@DW@14px@DX@setStyle@DW@OGL4966666@DW@line-height@DW@15px@DX@setStyle@DW@LAW4965857@DW@font-size@DW@14px@DX@setStyle@DW@LAW4965857@DW@line-height@DW@15px@DX@setStyle@DW@OSV4965858@DW@padding-top@DW@4px@DX@genericSetNodeStyle@DW@OSV4965858@DW@0@DW@top@DW@4px@DX@genericSetNodeStyle@DW@OSV4965858@DW@0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@OSV4965858@DW@0@DW@right@DW@0px@DX@genericSetNodeStyle@DW@OSV4965858@DW@0@DW@bottom@DW@0px@DX@setStyle@DW@IUI4965858@DW@font-size@DW@14px@DX@setStyle@DW@IUI4965858@DW@line-height@DW@15px@DX@setStyle@DW@GCS4965862@DW@font-size@DW@14px@DX@setStyle@DW@GCS4965862@DW@line-height@DW@15px@DX@setStyle@DW@BLE4966668@DW@font-size@DW@14px@DX@setStyle@DW@BLE4966668@DW@line-height@DW@15px@DX@setStyle@DW@YTM4965858@DW@font-size@DW@14px@DX@setStyle@DW@YTM4965858@DW@line-height@DW@15px@DX@setStyle@DW@XFK4965859@DW@padding-top@DW@4px@DX@genericSetNodeStyle@DW@XFK4965859@DW@0@DW@top@DW@4px@DX@genericSetNodeStyle@DW@XFK4965859@DW@0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@XFK4965859@DW@0@DW@right@DW@0px@DX@genericSetNodeStyle@DW@XFK4965859@DW@0@DW@bottom@DW@0px@DX@setStyle@DW@RYF4965859@DW@font-size@DW@14px@DX@setStyle@DW@RYF4965859@DW@line-height@DW@15px@DX@setStyle@DW@QXB4965862@DW@font-size@DW@14px@DX@setStyle@DW@QXB4965862@DW@line-height@DW@15px@DX@setStyle@DW@GQB4966669@DW@font-size@DW@14px@DX@setStyle@DW@GQB4966669@DW@line-height@DW@15px@DX@setStyle@DW@MXV4965859@DW@font-size@DW@14px@DX@setStyle@DW@MXV4965859@DW@line-height@DW@15px@DX@setStyle@DW@DPI4965860@DW@padding-top@DW@4px@DX@genericSetNodeStyle@DW@DPI4965860@DW@0@DW@top@DW@4px@DX@genericSetNodeStyle@DW@DPI4965860@DW@0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@DPI4965860@DW@0@DW@right@DW@0px@DX@genericSetNodeStyle@DW@DPI4965860@DW@0@DW@bottom@DW@0px@DX@setStyle@DW@LKL4965860@DW@font-size@DW@14px@DX@setStyle@DW@LKL4965860@DW@line-height@DW@15px@DX@setStyle@DW@BHF4965862@DW@font-size@DW@14px@DX@setStyle@DW@BHF4965862@DW@line-height@DW@15px@DX@setStyle@DW@YEP4966670@DW@font-size@DW@14px@DX@setStyle@DW@YEP4966670@DW@line-height@DW@15px@DX@setStyle@DW@VBV4965860@DW@font-size@DW@14px@DX@setStyle@DW@VBV4965860@DW@line-height@DW@15px@DX@setStyle@DW@JKB4965860@DW@padding-top@DW@4px@DX@genericSetNodeStyle@DW@JKB4965860@DW@0@DW@top@DW@4px@DX@genericSetNodeStyle@DW@JKB4965860@DW@0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@JKB4965860@DW@0@DW@right@DW@0px@DX@genericSetNodeStyle@DW@JKB4965860@DW@0@DW@bottom@DW@0px@DX@setStyle@DW@KMI4965860@DW@font-size@DW@14px@DX@setStyle@DW@KMI4965860@DW@line-height@DW@15px@DX@setStyle@DW@FXG4965862@DW@font-size@DW@14px@DX@setStyle@DW@FXG4965862@DW@line-height@DW@15px@DX@setStyle@DW@SXS4966670@DW@font-size@DW@14px@DX@setStyle@DW@SXS4966670@DW@line-height@DW@15px@DX@setStyle@DW@VTE4965860@DW@font-size@DW@14px@DX@setStyle@DW@VTE4965860@DW@line-height@DW@15px@DX@setStyle@DW@MRV4965861@DW@padding-top@DW@4px@DX@genericSetNodeStyle@DW@MRV4965861@DW@0@DW@top@DW@4px@DX@genericSetNodeStyle@DW@MRV4965861@DW@0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@MRV4965861@DW@0@DW@right@DW@0px@DX@genericSetNodeStyle@DW@MRV4965861@DW@0@DW@bottom@DW@0px@DX@setStyle@DW@DIV4965861@DW@font-size@DW@14px@DX@setStyle@DW@DIV4965861@DW@line-height@DW@15px@DX@setStyle@DW@IFG4965862@DW@font-size@DW@14px@DX@setStyle@DW@IFG4965862@DW@line-height@DW@15px@DX@setStyle@DW@JPQ4966671@DW@font-size@DW@14px@DX@setStyle@DW@JPQ4966671@DW@line-height@DW@15px@DX@setStyle@DW@GTL4965861@DW@font-size@DW@14px@DX@setStyle@DW@GTL4965861@DW@line-height@DW@15px@DX@setStyle@DW@HFH4965862@DW@padding-top@DW@4px@DX@genericSetNodeStyle@DW@HFH4965862@DW@0@DW@top@DW@4px@DX@genericSetNodeStyle@DW@HFH4965862@DW@0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@HFH4965862@DW@0@DW@right@DW@0px@DX@genericSetNodeStyle@DW@HFH4965862@DW@0@DW@bottom@DW@0px@DX@setStyle@DW@JNL4965862@DW@font-size@DW@14px@DX@setStyle@DW@JNL4965862@DW@line-height@DW@15px@DX@setStyle@DW@OTU4965862@DW@font-size@DW@14px@DX@setStyle@DW@OTU4965862@DW@line-height@DW@15px@DX@evaluateJavascript@DW@dwScrollpaneInitializeScrollpaneFadings('IAP4965656', '{\"sides\":{\"TOP\":0,\"RIGHT\":0,\"LEFT\":0,\"BOTTOM\":0}}');@DX@evaluateJavascript@DW@dwScrollpaneInitializeScrollpaneFadings('IAP4965656', '{\"sides\":{\"TOP\":0,\"LEFT\":0,\"BOTTOM\":0}}');@DX@setStyle@DW@POQ4965632@DW@background-color@DW@#dddddd@DX@removeStyle@DW@POQ4965632@DW@background-image@DX@setStyle@DW@POQ4965632@DW@color@DW@#000000@DX@setStyle@DW@POQ4965632@DW@background-color@DW@#46b82e@DX@removeStyle@DW@POQ4965632@DW@background-image@DX@setStyle@DW@POQ4965632@DW@color@DW@#ffffff@DX@setStyle@DW@BWB4965633@DW@background-color@DW@#dddddd@DX@removeStyle@DW@BWB4965633@DW@background-image@DX@setStyle@DW@BWB4965633@DW@background-color@DW@#ffffff@DX@removeStyle@DW@BWB4965633@DW@background-image@DX@setStyle@DW@ERU4965633@DW@background-color@DW@#dddddd@DX@removeStyle@DW@ERU4965633@DW@background-image@DX@setStyle@DW@ERU4965633@DW@background-color@DW@#ffffff@DX@removeStyle@DW@ERU4965633@DW@background-image@DX@genericSetNodeStyle@DW@LSK4965620@DW@0@DW@height@DW@689px@DX@genericSetNodeStyle@DW@LSK4965620@DW@1@DW@top@DW@689px@DX@genericSetNodeStyle@DW@LSK4965620@DW@2@DW@top@DW@705px@DX@evaluateJavascript@DW@dwScrollpaneInitializeScrollpaneFadings('GYM4965654', '{\"sides\":{\"TOP\":0,\"RIGHT\":0,\"LEFT\":0,\"BOTTOM\":0}}');@DX@evaluateJavascript@DW@dwScrollpaneInitializeScrollpaneFadings('GYM4965654', '{\"sides\":{\"TOP\":0,\"RIGHT\":0,\"LEFT\":0,\"BOTTOM\":0}}');@DX@genericSetNodeStyle@DW@ERK4965633@DW@0@DW@width@DW@616px@DX@genericSetNodeStyle@DW@ERK4965633@DW@1@DW@left@DW@616px@DX@genericSetNodeStyle@DW@ERK4965633@DW@2@DW@left@DW@632px@DX@genericInsertNode@DW@YIP4965875@DW@0|0@DW@0@DW@<div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;right:0px;text-align:right;height:24px\" class=\"guilayoutgridbag_container\"><div style=\"width:420px;margin-top:-12px;right:0;top:50%;height:24px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"NAM4966676\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-left:-210px;top:50%;left:50%;bottom:0;width:420px;margin-top:-12px;right:0;height:24px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:75px;text-align:left;height:24px\" class=\"guilayoutgridbag_container\"><div style=\"width:75px;margin-top:-12px;top:50%;left:0;height:24px\" class=\"guilayoutgridbag_container_padded\"><div style=\"cursor:pointer;padding-top:6px;max-height:24px;padding-left:4px;padding-bottom:0px;font-size:10px;min-height:24px;line-height:11px;background-color:#efefef;width:100%;font-family:Open Sans,Segoe UI,Verdana,Tahoma,Arial,sans-serif,Arial Unicode MS,Helvetica,Lucida Grande,Geneva,Sans-Serif;padding-right:4px;height:100%\" class=\"guilabel cursor_pointer\" id=\"KMT4965892\" onmouseleave=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseLeave(event, &#39;KMT4965892&#39;, &#39;KMT4965892&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseenter=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseEnter(event, &#39;KMT4965892&#39;, &#39;KMT4965892&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnClick(event, &#39;KMT4965892&#39;, &#39;KMT4965892&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\">Legal notice |</div></div></div><div style=\"background-color:transparent;top:0px;left:75px;vertical-align:middle;width:155px;text-align:left;height:24px\" class=\"guilayoutgridbag_container\"><div style=\"width:155px;margin-top:-12px;top:50%;left:0;height:24px\" class=\"guilayoutgridbag_container_padded\"><div style=\"cursor:pointer;padding-top:6px;max-height:24px;padding-left:4px;padding-bottom:0px;font-size:10px;min-height:24px;line-height:11px;background-color:#efefef;width:100%;font-family:Open Sans,Segoe UI,Verdana,Tahoma,Arial,sans-serif,Arial Unicode MS,Helvetica,Lucida Grande,Geneva,Sans-Serif;padding-right:4px;height:100%\" class=\"guilabel cursor_pointer\" id=\"LBE4965892\" onmouseleave=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseLeave(event, &#39;LBE4965892&#39;, &#39;LBE4965892&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseenter=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseEnter(event, &#39;LBE4965892&#39;, &#39;LBE4965892&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnClick(event, &#39;LBE4965892&#39;, &#39;LBE4965892&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\">Terms and Conditions of Use |</div></div></div><div style=\"background-color:transparent;top:0px;left:230px;vertical-align:middle;width:51px;text-align:left;height:24px\" class=\"guilayoutgridbag_container\"><div style=\"width:51px;margin-top:-12px;top:50%;left:0;height:24px\" class=\"guilayoutgridbag_container_padded\"><div style=\"cursor:pointer;padding-top:6px;max-height:24px;padding-left:4px;padding-bottom:0px;font-size:10px;min-height:24px;line-height:11px;background-color:#efefef;width:100%;font-family:Open Sans,Segoe UI,Verdana,Tahoma,Arial,sans-serif,Arial Unicode MS,Helvetica,Lucida Grande,Geneva,Sans-Serif;padding-right:4px;height:100%\" class=\"guilabel cursor_pointer\" id=\"FCX4965892\" onmouseleave=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseLeave(event, &#39;FCX4965892&#39;, &#39;FCX4965892&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseenter=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseEnter(event, &#39;FCX4965892&#39;, &#39;FCX4965892&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnClick(event, &#39;FCX4965892&#39;, &#39;FCX4965892&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\">Privacy |</div></div></div><div style=\"background-color:transparent;top:0px;left:281px;vertical-align:middle;width:102px;text-align:left;height:24px\" class=\"guilayoutgridbag_container\"><div style=\"width:102px;margin-top:-12px;top:50%;left:0;height:24px\" class=\"guilayoutgridbag_container_padded\"><div style=\"cursor:pointer;padding-top:6px;max-height:24px;padding-left:4px;padding-bottom:0px;font-size:10px;min-height:24px;line-height:11px;background-color:#efefef;width:100%;font-family:Open Sans,Segoe UI,Verdana,Tahoma,Arial,sans-serif,Arial Unicode MS,Helvetica,Lucida Grande,Geneva,Sans-Serif;padding-right:4px;height:100%\" class=\"guilabel cursor_pointer\" id=\"SLM4965892\" onmouseleave=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseLeave(event, &#39;SLM4965892&#39;, &#39;SLM4965892&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseenter=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseEnter(event, &#39;SLM4965892&#39;, &#39;SLM4965892&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnClick(event, &#39;SLM4965892&#39;, &#39;SLM4965892&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\">Right of Withdrawal</div></div></div><div style=\"background-color:transparent;top:0px;left:383px;vertical-align:middle;width:37px;text-align:left;height:24px\" class=\"guilayoutgridbag_container\"><div style=\"width:37px;margin-top:-12px;top:50%;left:0;height:24px\" class=\"guilayoutgridbag_container_padded\"><div style=\"cursor:pointer;padding-top:5px;max-height:24px;padding-left:4px;padding-bottom:0px;font-size:10px;min-height:24px;line-height:11px;background-color:#efefef;width:100%;font-family:Open Sans,Segoe UI,Verdana,Tahoma,Arial,sans-serif,Arial Unicode MS,Helvetica,Lucida Grande,Geneva,Sans-Serif;padding-right:4px;height:100%\" class=\"guilabel cursor_pointer\" id=\"JCF4965892\" onmouseleave=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseLeave(event, &#39;JCF4965892&#39;, &#39;JCF4965892&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseenter=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseEnter(event, &#39;JCF4965892&#39;, &#39;JCF4965892&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnClick(event, &#39;JCF4965892&#39;, &#39;JCF4965892&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"width:25px;vertical-align:middle;cursor:pointer;height:16px\" src=\"WEB-RES/resource/resource?id=ba_image_class_image_de.docware.framework.modules.config.common.Language_flags_en_64.png_image_png_subtype_unknown_25x25_false_false_2913F50F5EE40913B5284D285DA43967\" alt=\"\" id=\"JCF4965892_img\" class=\"cursor_pointer\"></div></div></div></div></div></div></div></div>@DX@setStyle@DW@SHJ4965734@DW@max-width@DW@135px@DX@setStyle@DW@HGS4965634@DW@padding-top@DW@12px@DX@setStyle@DW@JBO4965681@DW@padding-top@DW@0px@DX@setStyle@DW@MDS4965681@DW@padding-top@DW@0px@DX@setStyle@DW@EHV4965681@DW@padding-top@DW@0px@DX@setStyle@DW@UTV4965682@DW@padding-top@DW@0px@DX@setStyle@DW@XHO4965682@DW@padding-top@DW@0px@DX@setStyle@DW@KCF4965682@DW@padding-top@DW@0px@DX@setStyle@DW@XXC4965685@DW@padding-top@DW@0px@DX@setStyle@DW@EFX4965685@DW@padding-top@DW@0px@DX@setStyle@DW@KKM4965685@DW@padding-top@DW@0px@DX@setStyle@DW@XIN4965686@DW@padding-top@DW@0px@DX@setStyle@DW@VNX4965686@DW@padding-top@DW@0px@DX@setStyle@DW@OGG4965686@DW@padding-top@DW@0px@DX@setStyle@DW@DYU4965688@DW@padding-top@DW@0px@DX@setStyle@DW@XED4965688@DW@padding-top@DW@0px@DX@setStyle@DW@EEP4965688@DW@padding-top@DW@0px@DX@setStyle@DW@EAX4965690@DW@padding-top@DW@0px@DX@setStyle@DW@ASK4965690@DW@padding-top@DW@0px@DX@setStyle@DW@HBE4965690@DW@padding-top@DW@0px@DX@setStyle@DW@OAR4965691@DW@padding-top@DW@0px@DX@setStyle@DW@XRE4965691@DW@padding-top@DW@0px@DX@setStyle@DW@UCY4965691@DW@padding-top@DW@0px@DX@setStyle@DW@LKC4965693@DW@padding-top@DW@0px@DX@setStyle@DW@GKP4965693@DW@padding-top@DW@0px@DX@setStyle@DW@JBH4965693@DW@padding-top@DW@0px@DX@setStyle@DW@GYK4965695@DW@padding-top@DW@0px@DX@setStyle@DW@TTG4965695@DW@padding-top@DW@0px@DX@setStyle@DW@ENG4965695@DW@padding-top@DW@0px@DX@setStyle@DW@RVK4965696@DW@padding-top@DW@0px@DX@setStyle@DW@ADO4965696@DW@padding-top@DW@0px@DX@setStyle@DW@RTI4965696@DW@padding-top@DW@0px@DX@setStyle@DW@PLC4965698@DW@padding-top@DW@0px@DX@setStyle@DW@UCO4965698@DW@padding-top@DW@0px@DX@setStyle@DW@BCE4965698@DW@padding-top@DW@0px@DX@setStyle@DW@LJY4965700@DW@padding-top@DW@0px@DX@setStyle@DW@IDN4965700@DW@padding-top@DW@0px@DX@setStyle@DW@LRE4965700@DW@padding-top@DW@0px@DX@setStyle@DW@MCW4965701@DW@padding-top@DW@0px@DX@setStyle@DW@ORH4965701@DW@padding-top@DW@0px@DX@setStyle@DW@IID4965701@DW@padding-top@DW@0px@DX@setStyle@DW@WVP4965703@DW@padding-top@DW@0px@DX@setStyle@DW@OEM4965703@DW@padding-top@DW@0px@DX@setStyle@DW@RER4965703@DW@padding-top@DW@0px@DX@setStyle@DW@RRO4965705@DW@padding-top@DW@0px@DX@setStyle@DW@HBQ4965705@DW@padding-top@DW@0px@DX@setStyle@DW@YKJ4965705@DW@padding-top@DW@0px@DX@setStyle@DW@HJT4965707@DW@padding-top@DW@0px@DX@setStyle@DW@GOY4965707@DW@padding-top@DW@0px@DX@setStyle@DW@EXP4965707@DW@padding-top@DW@0px@DX@setStyle@DW@BQR4965708@DW@padding-top@DW@0px@DX@setStyle@DW@IUS4965708@DW@padding-top@DW@0px@DX@setStyle@DW@EJP4965708@DW@padding-top@DW@0px@DX@setStyle@DW@RSW4965710@DW@padding-top@DW@0px@DX@setStyle@DW@KIO4965710@DW@padding-top@DW@0px@DX@setStyle@DW@DUC4965710@DW@padding-top@DW@0px@DX@setStyle@DW@KGJ4965620@DW@height@DW@810px@DX@setStyle@DW@KGJ4965620@DW@width@DW@0px@DX@evaluateJavascript@DW@dwScrollpaneRepaintScrollpaneFadings('FEA4965620');@DX@evaluateJavascript@DW@dwHelperScrollToStoredPosition('FEA4965620');@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0@DW@right@DW@0@DX@genericRemoveNodeStyle@DW@KQX4965620@DW@0|0@DW@margin-left@DX@genericRemoveNodeStyle@DW@KQX4965620@DW@0|0@DW@width@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@KQX4965620@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@KQX4965620@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@KQX4965620@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|0@DW@height@DW@56px@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|0@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@KQX4965620@DW@0|0|0@DW@width@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|0|0@DW@height@DW@56px@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|0|0@DW@margin-top@DW@0px@DX@genericRemoveNodeStyle@DW@KQX4965620@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@KQX4965620@DW@0|0|0|0@DW@width@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|1@DW@top@DW@56px@DX@genericRemoveNodeStyle@DW@KQX4965620@DW@0|0|1@DW@bottom@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|1@DW@height@DW@1px@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|1@DW@left@DW@0px@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|1@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@KQX4965620@DW@0|0|1@DW@width@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|1|0@DW@height@DW@1px@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|1|0@DW@top@DW@49.999%@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|1|0@DW@margin-top@DW@0px@DX@genericRemoveNodeStyle@DW@KQX4965620@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|1|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|1|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|1|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|1|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@KQX4965620@DW@0|0|1|0@DW@width@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|2@DW@top@DW@57px@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|2@DW@bottom@DW@1px@DX@genericRemoveNodeStyle@DW@KQX4965620@DW@0|0|2@DW@height@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|2@DW@left@DW@0px@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|2@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@KQX4965620@DW@0|0|2@DW@width@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|2|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|2|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|2|0@DW@margin-top@DW@0px@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|2|0@DW@margin-bottom@DW@0px@DX@genericRemoveNodeStyle@DW@KQX4965620@DW@0|0|2|0@DW@height@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|2|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|2|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|2|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|2|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@KQX4965620@DW@0|0|2|0@DW@width@DX@genericRemoveNodeStyle@DW@KQX4965620@DW@0|0|3@DW@top@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|3@DW@bottom@DW@0px@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|3@DW@height@DW@1px@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|3@DW@left@DW@0px@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|3@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@KQX4965620@DW@0|0|3@DW@width@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|3|0@DW@height@DW@1px@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|3|0@DW@top@DW@49.999%@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|3|0@DW@margin-top@DW@0px@DX@genericRemoveNodeStyle@DW@KQX4965620@DW@0|0|3|0@DW@bottom@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|3|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|3|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|3|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|3|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@KQX4965620@DW@0|0|3|0@DW@width@DX@genericRemoveNodeStyle@DW@KQX4965620@DW@0|0|4@DW@top@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|4@DW@bottom@DW@0px@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|4@DW@height@DW@0px@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|4@DW@left@DW@0px@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|4@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@KQX4965620@DW@0|0|4@DW@width@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|4|0@DW@height@DW@0px@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|4|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|4|0@DW@margin-top@DW@0px@DX@genericRemoveNodeStyle@DW@KQX4965620@DW@0|0|4|0@DW@top@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|4|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|4|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|4|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@KQX4965620@DW@0|0|4|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@KQX4965620@DW@0|0|4|0@DW@width@DX@genericSetNodeStyle@DW@UQX4965620@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@UQX4965620@DW@0|0@DW@right@DW@0@DX@genericRemoveNodeStyle@DW@UQX4965620@DW@0|0@DW@margin-left@DX@genericRemoveNodeStyle@DW@UQX4965620@DW@0|0@DW@width@DX@genericSetNodeStyle@DW@UQX4965620@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@UQX4965620@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@UQX4965620@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@UQX4965620@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@UQX4965620@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@UQX4965620@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@UQX4965620@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@UQX4965620@DW@0|0|0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@UQX4965620@DW@0|0|0@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@UQX4965620@DW@0|0|0@DW@width@DX@genericSetNodeStyle@DW@UQX4965620@DW@0|0|0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@UQX4965620@DW@0|0|0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@UQX4965620@DW@0|0|0|0@DW@margin-top@DW@1px@DX@genericSetNodeStyle@DW@UQX4965620@DW@0|0|0|0@DW@margin-bottom@DW@1px@DX@genericRemoveNodeStyle@DW@UQX4965620@DW@0|0|0|0@DW@height@DX@genericSetNodeStyle@DW@UQX4965620@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@UQX4965620@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@UQX4965620@DW@0|0|0|0@DW@margin-left@DW@1px@DX@genericSetNodeStyle@DW@UQX4965620@DW@0|0|0|0@DW@margin-right@DW@1px@DX@genericRemoveNodeStyle@DW@UQX4965620@DW@0|0|0|0@DW@width@DX@setStyle@DW@AWB4965733@DW@padding-top@DW@0px@DX@genericSetNodeStyle@DW@SHJ4965734@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@SHJ4965734@DW@0|0@DW@right@DW@0@DX@genericRemoveNodeStyle@DW@SHJ4965734@DW@0|0@DW@margin-left@DX@genericRemoveNodeStyle@DW@SHJ4965734@DW@0|0@DW@width@DX@genericSetNodeStyle@DW@SHJ4965734@DW@0|0@DW@height@DW@40px@DX@genericSetNodeStyle@DW@SHJ4965734@DW@0|0@DW@margin-top@DW@-20px@DX@genericSetNodeStyle@DW@SHJ4965734@DW@0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@SHJ4965734@DW@0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@SHJ4965734@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@SHJ4965734@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@SHJ4965734@DW@0|0|0@DW@height@DW@40px@DX@genericSetNodeStyle@DW@SHJ4965734@DW@0|0|0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@SHJ4965734@DW@0|0|0@DW@right@DW@40px@DX@genericRemoveNodeStyle@DW@SHJ4965734@DW@0|0|0@DW@width@DX@genericSetNodeStyle@DW@SHJ4965734@DW@0|0|0|0@DW@height@DW@28px@DX@genericSetNodeStyle@DW@SHJ4965734@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@SHJ4965734@DW@0|0|0|0@DW@margin-top@DW@-11px@DX@genericRemoveNodeStyle@DW@SHJ4965734@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@SHJ4965734@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@SHJ4965734@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@SHJ4965734@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@SHJ4965734@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@SHJ4965734@DW@0|0|0|0@DW@width@DX@genericSetNodeStyle@DW@SHJ4965734@DW@0|0|1@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@SHJ4965734@DW@0|0|1@DW@bottom@DX@genericSetNodeStyle@DW@SHJ4965734@DW@0|0|1@DW@height@DW@40px@DX@genericRemoveNodeStyle@DW@SHJ4965734@DW@0|0|1@DW@left@DX@genericSetNodeStyle@DW@SHJ4965734@DW@0|0|1@DW@right@DW@0px@DX@genericSetNodeStyle@DW@SHJ4965734@DW@0|0|1@DW@width@DW@40px@DX@genericSetNodeStyle@DW@SHJ4965734@DW@0|0|1|0@DW@height@DW@40px@DX@genericSetNodeStyle@DW@SHJ4965734@DW@0|0|1|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@SHJ4965734@DW@0|0|1|0@DW@margin-top@DW@-20px@DX@genericRemoveNodeStyle@DW@SHJ4965734@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@SHJ4965734@DW@0|0|1|0@DW@width@DW@40px@DX@genericSetNodeStyle@DW@SHJ4965734@DW@0|0|1|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@SHJ4965734@DW@0|0|1|0@DW@margin-left@DW@0px@DX@genericRemoveNodeStyle@DW@SHJ4965734@DW@0|0|1|0@DW@left@DX@genericSetNodeStyle@DW@LJL4965620@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@LJL4965620@DW@0|0@DW@right@DW@0@DX@genericRemoveNodeStyle@DW@LJL4965620@DW@0|0@DW@margin-left@DX@genericRemoveNodeStyle@DW@LJL4965620@DW@0|0@DW@width@DX@genericSetNodeStyle@DW@LJL4965620@DW@0|0@DW@height@DW@44px@DX@genericSetNodeStyle@DW@LJL4965620@DW@0|0@DW@margin-top@DW@-22px@DX@genericSetNodeStyle@DW@LJL4965620@DW@0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@LJL4965620@DW@0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@LJL4965620@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@LJL4965620@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@LJL4965620@DW@0|0|0@DW@height@DW@44px@DX@genericSetNodeStyle@DW@LJL4965620@DW@0|0|0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@LJL4965620@DW@0|0|0@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@LJL4965620@DW@0|0|0@DW@width@DX@genericSetNodeStyle@DW@LJL4965620@DW@0|0|0|0@DW@height@DW@40px@DX@genericSetNodeStyle@DW@LJL4965620@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@LJL4965620@DW@0|0|0|0@DW@margin-top@DW@-22px@DX@genericRemoveNodeStyle@DW@LJL4965620@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@LJL4965620@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@LJL4965620@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@LJL4965620@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@LJL4965620@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@LJL4965620@DW@0|0|0|0@DW@width@DX@genericSetNodeStyle@DW@LJL4965620@DW@0|0|1@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@LJL4965620@DW@0|0|1@DW@bottom@DX@genericSetNodeStyle@DW@LJL4965620@DW@0|0|1@DW@height@DW@44px@DX@genericRemoveNodeStyle@DW@LJL4965620@DW@0|0|1@DW@left@DX@genericSetNodeStyle@DW@LJL4965620@DW@0|0|1@DW@right@DW@0px@DX@genericSetNodeStyle@DW@LJL4965620@DW@0|0|1@DW@width@DW@0px@DX@genericSetNodeStyle@DW@LJL4965620@DW@0|0|1|0@DW@height@DW@0px@DX@genericSetNodeStyle@DW@LJL4965620@DW@0|0|1|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@LJL4965620@DW@0|0|1|0@DW@margin-top@DW@0px@DX@genericRemoveNodeStyle@DW@LJL4965620@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@LJL4965620@DW@0|0|1|0@DW@width@DW@0px@DX@genericSetNodeStyle@DW@LJL4965620@DW@0|0|1|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@LJL4965620@DW@0|0|1|0@DW@margin-left@DW@0px@DX@genericRemoveNodeStyle@DW@LJL4965620@DW@0|0|1|0@DW@left@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0@DW@width@DW@120px@DX@genericRemoveNodeStyle@DW@RFB4965940@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0@DW@height@DW@40px@DX@genericRemoveNodeStyle@DW@RFB4965940@DW@0|0@DW@bottom@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@RFB4965940@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|0@DW@height@DW@40px@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@RFB4965940@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|0@DW@width@DW@40px@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|0|0@DW@height@DW@40px@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|0|0@DW@margin-top@DW@-20px@DX@genericRemoveNodeStyle@DW@RFB4965940@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@RFB4965940@DW@0|0|0|0@DW@width@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|1@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@RFB4965940@DW@0|0|1@DW@bottom@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|1@DW@height@DW@40px@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|1@DW@left@DW@40px@DX@genericRemoveNodeStyle@DW@RFB4965940@DW@0|0|1@DW@right@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|1@DW@width@DW@40px@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|1|0@DW@height@DW@40px@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|1|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|1|0@DW@margin-top@DW@-20px@DX@genericRemoveNodeStyle@DW@RFB4965940@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|1|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|1|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|1|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|1|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@RFB4965940@DW@0|0|1|0@DW@width@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|2@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@RFB4965940@DW@0|0|2@DW@bottom@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|2@DW@height@DW@40px@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|2@DW@left@DW@80px@DX@genericRemoveNodeStyle@DW@RFB4965940@DW@0|0|2@DW@right@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|2@DW@width@DW@40px@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|2|0@DW@height@DW@40px@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|2|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|2|0@DW@margin-top@DW@-20px@DX@genericRemoveNodeStyle@DW@RFB4965940@DW@0|0|2|0@DW@bottom@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|2|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|2|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|2|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|2|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@RFB4965940@DW@0|0|2|0@DW@width@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0@DW@right@DW@0@DX@genericRemoveNodeStyle@DW@GOL4965941@DW@0|0@DW@margin-left@DX@genericRemoveNodeStyle@DW@GOL4965941@DW@0|0@DW@width@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0@DW@height@DW@20px@DX@genericRemoveNodeStyle@DW@GOL4965941@DW@0|0@DW@bottom@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@GOL4965941@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|0@DW@height@DW@20px@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@GOL4965941@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|0@DW@width@DW@20px@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|0|0@DW@height@DW@20px@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|0|0@DW@margin-top@DW@-10px@DX@genericRemoveNodeStyle@DW@GOL4965941@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|0|0@DW@width@DW@20px@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericRemoveNodeStyle@DW@GOL4965941@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|1@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@GOL4965941@DW@0|0|1@DW@bottom@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|1@DW@height@DW@20px@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|1@DW@left@DW@20px@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|1@DW@right@DW@20px@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|1@DW@width@DW@0px@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|1|0@DW@height@DW@0px@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|1|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|1|0@DW@margin-top@DW@3px@DX@genericRemoveNodeStyle@DW@GOL4965941@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|1|0@DW@width@DW@0px@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|1|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|1|0@DW@margin-left@DW@0px@DX@genericRemoveNodeStyle@DW@GOL4965941@DW@0|0|1|0@DW@right@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|2@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@GOL4965941@DW@0|0|2@DW@bottom@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|2@DW@height@DW@20px@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|2@DW@left@DW@20px@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|2@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@GOL4965941@DW@0|0|2@DW@width@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|2|0@DW@height@DW@20px@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|2|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|2|0@DW@margin-top@DW@-10px@DX@genericRemoveNodeStyle@DW@GOL4965941@DW@0|0|2|0@DW@bottom@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|2|0@DW@width@DW@20px@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|2|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|2|0@DW@margin-left@DW@0px@DX@genericRemoveNodeStyle@DW@GOL4965941@DW@0|0|2|0@DW@left@DX@genericSetNodeStyle@DW@KPX4965940@DW@0|0@DW@width@DW@120px@DX@genericRemoveNodeStyle@DW@KPX4965940@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@KPX4965940@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@KPX4965940@DW@0|0@DW@height@DW@40px@DX@genericRemoveNodeStyle@DW@KPX4965940@DW@0|0@DW@bottom@DX@genericSetNodeStyle@DW@KPX4965940@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@KPX4965940@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@KPX4965940@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@KPX4965940@DW@0|0|0@DW@height@DW@40px@DX@genericSetNodeStyle@DW@KPX4965940@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@KPX4965940@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@KPX4965940@DW@0|0|0@DW@width@DW@120px@DX@genericSetNodeStyle@DW@KPX4965940@DW@0|0|0|0@DW@height@DW@40px@DX@genericSetNodeStyle@DW@KPX4965940@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@KPX4965940@DW@0|0|0|0@DW@margin-top@DW@-20px@DX@genericRemoveNodeStyle@DW@KPX4965940@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@KPX4965940@DW@0|0|0|0@DW@width@DW@120px@DX@genericSetNodeStyle@DW@KPX4965940@DW@0|0|0|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@KPX4965940@DW@0|0|0|0@DW@margin-left@DW@-60px@DX@genericRemoveNodeStyle@DW@KPX4965940@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@KPX4965940@DW@0|0|1@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@KPX4965940@DW@0|0|1@DW@bottom@DX@genericSetNodeStyle@DW@KPX4965940@DW@0|0|1@DW@height@DW@40px@DX@genericSetNodeStyle@DW@KPX4965940@DW@0|0|1@DW@left@DW@120px@DX@genericRemoveNodeStyle@DW@KPX4965940@DW@0|0|1@DW@right@DX@genericSetNodeStyle@DW@KPX4965940@DW@0|0|1@DW@width@DW@0px@DX@genericSetNodeStyle@DW@KPX4965940@DW@0|0|1|0@DW@height@DW@0px@DX@genericSetNodeStyle@DW@KPX4965940@DW@0|0|1|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@KPX4965940@DW@0|0|1|0@DW@margin-top@DW@0px@DX@genericRemoveNodeStyle@DW@KPX4965940@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@KPX4965940@DW@0|0|1|0@DW@width@DW@0px@DX@genericSetNodeStyle@DW@KPX4965940@DW@0|0|1|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@KPX4965940@DW@0|0|1|0@DW@margin-left@DW@0px@DX@genericRemoveNodeStyle@DW@KPX4965940@DW@0|0|1|0@DW@right@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0@DW@right@DW@0@DX@genericRemoveNodeStyle@DW@IUQ4965633@DW@0|0@DW@margin-left@DX@genericRemoveNodeStyle@DW@IUQ4965633@DW@0|0@DW@width@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@IUQ4965633@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@IUQ4965633@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@IUQ4965633@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|0@DW@height@DW@0px@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|0@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@IUQ4965633@DW@0|0|0@DW@width@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|0|0@DW@height@DW@0px@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|0|0@DW@margin-top@DW@0px@DX@genericRemoveNodeStyle@DW@IUQ4965633@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@IUQ4965633@DW@0|0|0|0@DW@width@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|1@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@IUQ4965633@DW@0|0|1@DW@bottom@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|1@DW@height@DW@0px@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|1@DW@left@DW@0px@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|1@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@IUQ4965633@DW@0|0|1@DW@width@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|1|0@DW@height@DW@0px@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|1|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|1|0@DW@margin-top@DW@0px@DX@genericRemoveNodeStyle@DW@IUQ4965633@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|1|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|1|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|1|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|1|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@IUQ4965633@DW@0|0|1|0@DW@width@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|2@DW@top@DW@0px@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|2@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@IUQ4965633@DW@0|0|2@DW@height@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|2@DW@left@DW@0px@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|2@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@IUQ4965633@DW@0|0|2@DW@width@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|2|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|2|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|2|0@DW@margin-top@DW@0px@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|2|0@DW@margin-bottom@DW@0px@DX@genericRemoveNodeStyle@DW@IUQ4965633@DW@0|0|2|0@DW@height@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|2|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|2|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|2|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|2|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@IUQ4965633@DW@0|0|2|0@DW@width@DX@genericRemoveNodeStyle@DW@IUQ4965633@DW@0|0|3@DW@top@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|3@DW@bottom@DW@0px@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|3@DW@height@DW@0px@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|3@DW@left@DW@0px@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|3@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@IUQ4965633@DW@0|0|3@DW@width@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|3|0@DW@height@DW@0px@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|3|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|3|0@DW@margin-top@DW@0px@DX@genericRemoveNodeStyle@DW@IUQ4965633@DW@0|0|3|0@DW@bottom@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|3|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|3|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|3|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|3|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@IUQ4965633@DW@0|0|3|0@DW@width@DX@genericRemoveNodeStyle@DW@IUQ4965633@DW@0|0|4@DW@top@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|4@DW@bottom@DW@0px@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|4@DW@height@DW@0px@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|4@DW@left@DW@0px@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|4@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@IUQ4965633@DW@0|0|4@DW@width@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|4|0@DW@height@DW@0px@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|4|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|4|0@DW@margin-top@DW@0px@DX@genericRemoveNodeStyle@DW@IUQ4965633@DW@0|0|4|0@DW@top@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|4|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|4|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|4|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|4|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@IUQ4965633@DW@0|0|4|0@DW@width@DX@genericSetNodeStyle@DW@ARV4965633@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@ARV4965633@DW@0|0@DW@right@DW@0@DX@genericRemoveNodeStyle@DW@ARV4965633@DW@0|0@DW@margin-left@DX@genericRemoveNodeStyle@DW@ARV4965633@DW@0|0@DW@width@DX@genericSetNodeStyle@DW@ARV4965633@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@ARV4965633@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@ARV4965633@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@ARV4965633@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@ARV4965633@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@ARV4965633@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@ARV4965633@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@ARV4965633@DW@0|0|0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@ARV4965633@DW@0|0|0@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@ARV4965633@DW@0|0|0@DW@width@DX@genericSetNodeStyle@DW@ARV4965633@DW@0|0|0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@ARV4965633@DW@0|0|0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@ARV4965633@DW@0|0|0|0@DW@margin-top@DW@1px@DX@genericSetNodeStyle@DW@ARV4965633@DW@0|0|0|0@DW@margin-bottom@DW@1px@DX@genericRemoveNodeStyle@DW@ARV4965633@DW@0|0|0|0@DW@height@DX@genericSetNodeStyle@DW@ARV4965633@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@ARV4965633@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@ARV4965633@DW@0|0|0|0@DW@margin-left@DW@1px@DX@genericSetNodeStyle@DW@ARV4965633@DW@0|0|0|0@DW@margin-right@DW@1px@DX@genericRemoveNodeStyle@DW@ARV4965633@DW@0|0|0|0@DW@width@DX@genericSetNodeStyle@DW@NNP4965848@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@NNP4965848@DW@0|0@DW@right@DW@0@DX@genericRemoveNodeStyle@DW@NNP4965848@DW@0|0@DW@margin-left@DX@genericRemoveNodeStyle@DW@NNP4965848@DW@0|0@DW@width@DX@genericSetNodeStyle@DW@NNP4965848@DW@0|0@DW@height@DW@30px@DX@genericSetNodeStyle@DW@NNP4965848@DW@0|0@DW@margin-top@DW@-15px@DX@genericSetNodeStyle@DW@NNP4965848@DW@0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@NNP4965848@DW@0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@NNP4965848@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@NNP4965848@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@NNP4965848@DW@0|0|0@DW@height@DW@30px@DX@genericSetNodeStyle@DW@NNP4965848@DW@0|0|0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@NNP4965848@DW@0|0|0@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@NNP4965848@DW@0|0|0@DW@width@DX@genericSetNodeStyle@DW@NNP4965848@DW@0|0|0|0@DW@height@DW@27px@DX@genericSetNodeStyle@DW@NNP4965848@DW@0|0|0|0@DW@top@DW@49.999%@DX@genericSetNodeStyle@DW@NNP4965848@DW@0|0|0|0@DW@margin-top@DW@-12px@DX@genericRemoveNodeStyle@DW@NNP4965848@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@NNP4965848@DW@0|0|0|0@DW@width@DW@27px@DX@genericSetNodeStyle@DW@NNP4965848@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@NNP4965848@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericRemoveNodeStyle@DW@NNP4965848@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@HRT4965849@DW@0|0@DW@width@DW@24px@DX@genericRemoveNodeStyle@DW@HRT4965849@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@HRT4965849@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@HRT4965849@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@HRT4965849@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@HRT4965849@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@HRT4965849@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@HRT4965849@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@HRT4965849@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@HRT4965849@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@HRT4965849@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@HRT4965849@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@HRT4965849@DW@0|0|0@DW@width@DW@24px@DX@genericSetNodeStyle@DW@HRT4965849@DW@0|0|0|0@DW@height@DW@16px@DX@genericSetNodeStyle@DW@HRT4965849@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@HRT4965849@DW@0|0|0|0@DW@margin-top@DW@-8px@DX@genericRemoveNodeStyle@DW@HRT4965849@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@HRT4965849@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@HRT4965849@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@HRT4965849@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@HRT4965849@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@HRT4965849@DW@0|0|0|0@DW@width@DX@setStyle@DW@VAF4965849@DW@padding-top@DW@0px@DX@genericSetNodeStyle@DW@LED4965849@DW@0|0@DW@width@DW@38px@DX@genericRemoveNodeStyle@DW@LED4965849@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@LED4965849@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@LED4965849@DW@0|0@DW@height@DW@38px@DX@genericRemoveNodeStyle@DW@LED4965849@DW@0|0@DW@bottom@DX@genericSetNodeStyle@DW@LED4965849@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@LED4965849@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@LED4965849@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@LED4965849@DW@0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@LED4965849@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@LED4965849@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@LED4965849@DW@0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@LED4965849@DW@0|0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@LED4965849@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@LED4965849@DW@0|0|0|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@LED4965849@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@LED4965849@DW@0|0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@LED4965849@DW@0|0|0|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@LED4965849@DW@0|0|0|0@DW@margin-left@DW@-19px@DX@genericRemoveNodeStyle@DW@LED4965849@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@TPC4965862@DW@0|0@DW@width@DW@76px@DX@genericRemoveNodeStyle@DW@TPC4965862@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@TPC4965862@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@TPC4965862@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@TPC4965862@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@TPC4965862@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@TPC4965862@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@TPC4965862@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@TPC4965862@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@TPC4965862@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@TPC4965862@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@TPC4965862@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@TPC4965862@DW@0|0|0@DW@width@DW@0px@DX@genericSetNodeStyle@DW@TPC4965862@DW@0|0|0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@TPC4965862@DW@0|0|0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@TPC4965862@DW@0|0|0|0@DW@margin-top@DW@0px@DX@genericSetNodeStyle@DW@TPC4965862@DW@0|0|0|0@DW@margin-bottom@DW@0px@DX@genericRemoveNodeStyle@DW@TPC4965862@DW@0|0|0|0@DW@height@DX@genericSetNodeStyle@DW@TPC4965862@DW@0|0|0|0@DW@width@DW@1px@DX@genericSetNodeStyle@DW@TPC4965862@DW@0|0|0|0@DW@left@DW@49.999%@DX@genericSetNodeStyle@DW@TPC4965862@DW@0|0|0|0@DW@margin-left@DW@-2px@DX@genericRemoveNodeStyle@DW@TPC4965862@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@TPC4965862@DW@0|0|1@DW@top@DW@0px@DX@genericSetNodeStyle@DW@TPC4965862@DW@0|0|1@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@TPC4965862@DW@0|0|1@DW@height@DX@genericSetNodeStyle@DW@TPC4965862@DW@0|0|1@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@TPC4965862@DW@0|0|1@DW@right@DX@genericSetNodeStyle@DW@TPC4965862@DW@0|0|1@DW@width@DW@76px@DX@genericSetNodeStyle@DW@TPC4965862@DW@0|0|1|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@TPC4965862@DW@0|0|1|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@TPC4965862@DW@0|0|1|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@TPC4965862@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@TPC4965862@DW@0|0|1|0@DW@width@DW@46px@DX@genericSetNodeStyle@DW@TPC4965862@DW@0|0|1|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@TPC4965862@DW@0|0|1|0@DW@margin-left@DW@10px@DX@genericRemoveNodeStyle@DW@TPC4965862@DW@0|0|1|0@DW@right@DX@genericSetNodeStyle@DW@YEH4965849@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@YEH4965849@DW@0|0@DW@right@DW@0@DX@genericRemoveNodeStyle@DW@YEH4965849@DW@0|0@DW@margin-left@DX@genericRemoveNodeStyle@DW@YEH4965849@DW@0|0@DW@width@DX@genericSetNodeStyle@DW@YEH4965849@DW@0|0@DW@height@DW@30px@DX@genericSetNodeStyle@DW@YEH4965849@DW@0|0@DW@margin-top@DW@-15px@DX@genericSetNodeStyle@DW@YEH4965849@DW@0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@YEH4965849@DW@0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@YEH4965849@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@YEH4965849@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@YEH4965849@DW@0|0|0@DW@height@DW@30px@DX@genericSetNodeStyle@DW@YEH4965849@DW@0|0|0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@YEH4965849@DW@0|0|0@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@YEH4965849@DW@0|0|0@DW@width@DX@genericSetNodeStyle@DW@YEH4965849@DW@0|0|0|0@DW@height@DW@27px@DX@genericSetNodeStyle@DW@YEH4965849@DW@0|0|0|0@DW@top@DW@49.999%@DX@genericSetNodeStyle@DW@YEH4965849@DW@0|0|0|0@DW@margin-top@DW@-12px@DX@genericRemoveNodeStyle@DW@YEH4965849@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@YEH4965849@DW@0|0|0|0@DW@width@DW@27px@DX@genericSetNodeStyle@DW@YEH4965849@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@YEH4965849@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericRemoveNodeStyle@DW@YEH4965849@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@ELK4965850@DW@0|0@DW@width@DW@24px@DX@genericRemoveNodeStyle@DW@ELK4965850@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@ELK4965850@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@ELK4965850@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@ELK4965850@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@ELK4965850@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@ELK4965850@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@ELK4965850@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@ELK4965850@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@ELK4965850@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@ELK4965850@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@ELK4965850@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@ELK4965850@DW@0|0|0@DW@width@DW@24px@DX@genericSetNodeStyle@DW@ELK4965850@DW@0|0|0|0@DW@height@DW@16px@DX@genericSetNodeStyle@DW@ELK4965850@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@ELK4965850@DW@0|0|0|0@DW@margin-top@DW@-8px@DX@genericRemoveNodeStyle@DW@ELK4965850@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@ELK4965850@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@ELK4965850@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@ELK4965850@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@ELK4965850@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@ELK4965850@DW@0|0|0|0@DW@width@DX@setStyle@DW@ARM4965850@DW@padding-top@DW@0px@DX@genericSetNodeStyle@DW@GSL4965850@DW@0|0@DW@width@DW@38px@DX@genericRemoveNodeStyle@DW@GSL4965850@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@GSL4965850@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@GSL4965850@DW@0|0@DW@height@DW@38px@DX@genericRemoveNodeStyle@DW@GSL4965850@DW@0|0@DW@bottom@DX@genericSetNodeStyle@DW@GSL4965850@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@GSL4965850@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@GSL4965850@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@GSL4965850@DW@0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@GSL4965850@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@GSL4965850@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@GSL4965850@DW@0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@GSL4965850@DW@0|0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@GSL4965850@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@GSL4965850@DW@0|0|0|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@GSL4965850@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@GSL4965850@DW@0|0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@GSL4965850@DW@0|0|0|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@GSL4965850@DW@0|0|0|0@DW@margin-left@DW@-19px@DX@genericRemoveNodeStyle@DW@GSL4965850@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@GNV4965862@DW@0|0@DW@width@DW@76px@DX@genericRemoveNodeStyle@DW@GNV4965862@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@GNV4965862@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@GNV4965862@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@GNV4965862@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@GNV4965862@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@GNV4965862@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@GNV4965862@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@GNV4965862@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@GNV4965862@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@GNV4965862@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@GNV4965862@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@GNV4965862@DW@0|0|0@DW@width@DW@0px@DX@genericSetNodeStyle@DW@GNV4965862@DW@0|0|0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@GNV4965862@DW@0|0|0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@GNV4965862@DW@0|0|0|0@DW@margin-top@DW@0px@DX@genericSetNodeStyle@DW@GNV4965862@DW@0|0|0|0@DW@margin-bottom@DW@0px@DX@genericRemoveNodeStyle@DW@GNV4965862@DW@0|0|0|0@DW@height@DX@genericSetNodeStyle@DW@GNV4965862@DW@0|0|0|0@DW@width@DW@1px@DX@genericSetNodeStyle@DW@GNV4965862@DW@0|0|0|0@DW@left@DW@49.999%@DX@genericSetNodeStyle@DW@GNV4965862@DW@0|0|0|0@DW@margin-left@DW@-2px@DX@genericRemoveNodeStyle@DW@GNV4965862@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@GNV4965862@DW@0|0|1@DW@top@DW@0px@DX@genericSetNodeStyle@DW@GNV4965862@DW@0|0|1@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@GNV4965862@DW@0|0|1@DW@height@DX@genericSetNodeStyle@DW@GNV4965862@DW@0|0|1@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@GNV4965862@DW@0|0|1@DW@right@DX@genericSetNodeStyle@DW@GNV4965862@DW@0|0|1@DW@width@DW@76px@DX@genericSetNodeStyle@DW@GNV4965862@DW@0|0|1|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@GNV4965862@DW@0|0|1|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@GNV4965862@DW@0|0|1|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@GNV4965862@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@GNV4965862@DW@0|0|1|0@DW@width@DW@46px@DX@genericSetNodeStyle@DW@GNV4965862@DW@0|0|1|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@GNV4965862@DW@0|0|1|0@DW@margin-left@DW@10px@DX@genericRemoveNodeStyle@DW@GNV4965862@DW@0|0|1|0@DW@right@DX@genericSetNodeStyle@DW@OSY4965850@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@OSY4965850@DW@0|0@DW@right@DW@0@DX@genericRemoveNodeStyle@DW@OSY4965850@DW@0|0@DW@margin-left@DX@genericRemoveNodeStyle@DW@OSY4965850@DW@0|0@DW@width@DX@genericSetNodeStyle@DW@OSY4965850@DW@0|0@DW@height@DW@30px@DX@genericSetNodeStyle@DW@OSY4965850@DW@0|0@DW@margin-top@DW@-15px@DX@genericSetNodeStyle@DW@OSY4965850@DW@0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@OSY4965850@DW@0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@OSY4965850@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@OSY4965850@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@OSY4965850@DW@0|0|0@DW@height@DW@30px@DX@genericSetNodeStyle@DW@OSY4965850@DW@0|0|0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@OSY4965850@DW@0|0|0@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@OSY4965850@DW@0|0|0@DW@width@DX@genericSetNodeStyle@DW@OSY4965850@DW@0|0|0|0@DW@height@DW@27px@DX@genericSetNodeStyle@DW@OSY4965850@DW@0|0|0|0@DW@top@DW@49.999%@DX@genericSetNodeStyle@DW@OSY4965850@DW@0|0|0|0@DW@margin-top@DW@-12px@DX@genericRemoveNodeStyle@DW@OSY4965850@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@OSY4965850@DW@0|0|0|0@DW@width@DW@27px@DX@genericSetNodeStyle@DW@OSY4965850@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@OSY4965850@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericRemoveNodeStyle@DW@OSY4965850@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@ALA4965851@DW@0|0@DW@width@DW@24px@DX@genericRemoveNodeStyle@DW@ALA4965851@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@ALA4965851@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@ALA4965851@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@ALA4965851@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@ALA4965851@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@ALA4965851@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@ALA4965851@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@ALA4965851@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@ALA4965851@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@ALA4965851@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@ALA4965851@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@ALA4965851@DW@0|0|0@DW@width@DW@24px@DX@genericSetNodeStyle@DW@ALA4965851@DW@0|0|0|0@DW@height@DW@16px@DX@genericSetNodeStyle@DW@ALA4965851@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@ALA4965851@DW@0|0|0|0@DW@margin-top@DW@-8px@DX@genericRemoveNodeStyle@DW@ALA4965851@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@ALA4965851@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@ALA4965851@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@ALA4965851@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@ALA4965851@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@ALA4965851@DW@0|0|0|0@DW@width@DX@setStyle@DW@KRI4965851@DW@padding-top@DW@0px@DX@genericSetNodeStyle@DW@EIF4965851@DW@0|0@DW@width@DW@38px@DX@genericRemoveNodeStyle@DW@EIF4965851@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@EIF4965851@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@EIF4965851@DW@0|0@DW@height@DW@38px@DX@genericRemoveNodeStyle@DW@EIF4965851@DW@0|0@DW@bottom@DX@genericSetNodeStyle@DW@EIF4965851@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@EIF4965851@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@EIF4965851@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@EIF4965851@DW@0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@EIF4965851@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@EIF4965851@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@EIF4965851@DW@0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@EIF4965851@DW@0|0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@EIF4965851@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@EIF4965851@DW@0|0|0|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@EIF4965851@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@EIF4965851@DW@0|0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@EIF4965851@DW@0|0|0|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@EIF4965851@DW@0|0|0|0@DW@margin-left@DW@-19px@DX@genericRemoveNodeStyle@DW@EIF4965851@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@BGF4965862@DW@0|0@DW@width@DW@76px@DX@genericRemoveNodeStyle@DW@BGF4965862@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@BGF4965862@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@BGF4965862@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@BGF4965862@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@BGF4965862@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@BGF4965862@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@BGF4965862@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@BGF4965862@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@BGF4965862@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@BGF4965862@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@BGF4965862@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@BGF4965862@DW@0|0|0@DW@width@DW@0px@DX@genericSetNodeStyle@DW@BGF4965862@DW@0|0|0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@BGF4965862@DW@0|0|0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@BGF4965862@DW@0|0|0|0@DW@margin-top@DW@0px@DX@genericSetNodeStyle@DW@BGF4965862@DW@0|0|0|0@DW@margin-bottom@DW@0px@DX@genericRemoveNodeStyle@DW@BGF4965862@DW@0|0|0|0@DW@height@DX@genericSetNodeStyle@DW@BGF4965862@DW@0|0|0|0@DW@width@DW@1px@DX@genericSetNodeStyle@DW@BGF4965862@DW@0|0|0|0@DW@left@DW@49.999%@DX@genericSetNodeStyle@DW@BGF4965862@DW@0|0|0|0@DW@margin-left@DW@-2px@DX@genericRemoveNodeStyle@DW@BGF4965862@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@BGF4965862@DW@0|0|1@DW@top@DW@0px@DX@genericSetNodeStyle@DW@BGF4965862@DW@0|0|1@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@BGF4965862@DW@0|0|1@DW@height@DX@genericSetNodeStyle@DW@BGF4965862@DW@0|0|1@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@BGF4965862@DW@0|0|1@DW@right@DX@genericSetNodeStyle@DW@BGF4965862@DW@0|0|1@DW@width@DW@76px@DX@genericSetNodeStyle@DW@BGF4965862@DW@0|0|1|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@BGF4965862@DW@0|0|1|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@BGF4965862@DW@0|0|1|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@BGF4965862@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@BGF4965862@DW@0|0|1|0@DW@width@DW@46px@DX@genericSetNodeStyle@DW@BGF4965862@DW@0|0|1|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@BGF4965862@DW@0|0|1|0@DW@margin-left@DW@10px@DX@genericRemoveNodeStyle@DW@BGF4965862@DW@0|0|1|0@DW@right@DX@genericSetNodeStyle@DW@NBN4965851@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@NBN4965851@DW@0|0@DW@right@DW@0@DX@genericRemoveNodeStyle@DW@NBN4965851@DW@0|0@DW@margin-left@DX@genericRemoveNodeStyle@DW@NBN4965851@DW@0|0@DW@width@DX@genericSetNodeStyle@DW@NBN4965851@DW@0|0@DW@height@DW@30px@DX@genericSetNodeStyle@DW@NBN4965851@DW@0|0@DW@margin-top@DW@-15px@DX@genericSetNodeStyle@DW@NBN4965851@DW@0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@NBN4965851@DW@0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@NBN4965851@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@NBN4965851@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@NBN4965851@DW@0|0|0@DW@height@DW@30px@DX@genericSetNodeStyle@DW@NBN4965851@DW@0|0|0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@NBN4965851@DW@0|0|0@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@NBN4965851@DW@0|0|0@DW@width@DX@genericSetNodeStyle@DW@NBN4965851@DW@0|0|0|0@DW@height@DW@27px@DX@genericSetNodeStyle@DW@NBN4965851@DW@0|0|0|0@DW@top@DW@49.999%@DX@genericSetNodeStyle@DW@NBN4965851@DW@0|0|0|0@DW@margin-top@DW@-12px@DX@genericRemoveNodeStyle@DW@NBN4965851@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@NBN4965851@DW@0|0|0|0@DW@width@DW@27px@DX@genericSetNodeStyle@DW@NBN4965851@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@NBN4965851@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericRemoveNodeStyle@DW@NBN4965851@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@OYW4965851@DW@0|0@DW@width@DW@24px@DX@genericRemoveNodeStyle@DW@OYW4965851@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@OYW4965851@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@OYW4965851@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@OYW4965851@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@OYW4965851@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@OYW4965851@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@OYW4965851@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@OYW4965851@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@OYW4965851@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@OYW4965851@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@OYW4965851@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@OYW4965851@DW@0|0|0@DW@width@DW@24px@DX@genericSetNodeStyle@DW@OYW4965851@DW@0|0|0|0@DW@height@DW@16px@DX@genericSetNodeStyle@DW@OYW4965851@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@OYW4965851@DW@0|0|0|0@DW@margin-top@DW@-8px@DX@genericRemoveNodeStyle@DW@OYW4965851@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@OYW4965851@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@OYW4965851@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@OYW4965851@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@OYW4965851@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@OYW4965851@DW@0|0|0|0@DW@width@DX@setStyle@DW@KDY4965851@DW@padding-top@DW@0px@DX@genericSetNodeStyle@DW@ELQ4965851@DW@0|0@DW@width@DW@38px@DX@genericRemoveNodeStyle@DW@ELQ4965851@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@ELQ4965851@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@ELQ4965851@DW@0|0@DW@height@DW@38px@DX@genericRemoveNodeStyle@DW@ELQ4965851@DW@0|0@DW@bottom@DX@genericSetNodeStyle@DW@ELQ4965851@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@ELQ4965851@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@ELQ4965851@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@ELQ4965851@DW@0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@ELQ4965851@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@ELQ4965851@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@ELQ4965851@DW@0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@ELQ4965851@DW@0|0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@ELQ4965851@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@ELQ4965851@DW@0|0|0|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@ELQ4965851@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@ELQ4965851@DW@0|0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@ELQ4965851@DW@0|0|0|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@ELQ4965851@DW@0|0|0|0@DW@margin-left@DW@-19px@DX@genericRemoveNodeStyle@DW@ELQ4965851@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@TUG4965862@DW@0|0@DW@width@DW@76px@DX@genericRemoveNodeStyle@DW@TUG4965862@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@TUG4965862@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@TUG4965862@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@TUG4965862@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@TUG4965862@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@TUG4965862@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@TUG4965862@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@TUG4965862@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@TUG4965862@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@TUG4965862@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@TUG4965862@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@TUG4965862@DW@0|0|0@DW@width@DW@0px@DX@genericSetNodeStyle@DW@TUG4965862@DW@0|0|0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@TUG4965862@DW@0|0|0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@TUG4965862@DW@0|0|0|0@DW@margin-top@DW@0px@DX@genericSetNodeStyle@DW@TUG4965862@DW@0|0|0|0@DW@margin-bottom@DW@0px@DX@genericRemoveNodeStyle@DW@TUG4965862@DW@0|0|0|0@DW@height@DX@genericSetNodeStyle@DW@TUG4965862@DW@0|0|0|0@DW@width@DW@1px@DX@genericSetNodeStyle@DW@TUG4965862@DW@0|0|0|0@DW@left@DW@49.999%@DX@genericSetNodeStyle@DW@TUG4965862@DW@0|0|0|0@DW@margin-left@DW@-2px@DX@genericRemoveNodeStyle@DW@TUG4965862@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@TUG4965862@DW@0|0|1@DW@top@DW@0px@DX@genericSetNodeStyle@DW@TUG4965862@DW@0|0|1@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@TUG4965862@DW@0|0|1@DW@height@DX@genericSetNodeStyle@DW@TUG4965862@DW@0|0|1@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@TUG4965862@DW@0|0|1@DW@right@DX@genericSetNodeStyle@DW@TUG4965862@DW@0|0|1@DW@width@DW@76px@DX@genericSetNodeStyle@DW@TUG4965862@DW@0|0|1|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@TUG4965862@DW@0|0|1|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@TUG4965862@DW@0|0|1|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@TUG4965862@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@TUG4965862@DW@0|0|1|0@DW@width@DW@46px@DX@genericSetNodeStyle@DW@TUG4965862@DW@0|0|1|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@TUG4965862@DW@0|0|1|0@DW@margin-left@DW@10px@DX@genericRemoveNodeStyle@DW@TUG4965862@DW@0|0|1|0@DW@right@DX@genericSetNodeStyle@DW@DTY4965852@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@DTY4965852@DW@0|0@DW@right@DW@0@DX@genericRemoveNodeStyle@DW@DTY4965852@DW@0|0@DW@margin-left@DX@genericRemoveNodeStyle@DW@DTY4965852@DW@0|0@DW@width@DX@genericSetNodeStyle@DW@DTY4965852@DW@0|0@DW@height@DW@30px@DX@genericSetNodeStyle@DW@DTY4965852@DW@0|0@DW@margin-top@DW@-15px@DX@genericSetNodeStyle@DW@DTY4965852@DW@0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@DTY4965852@DW@0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@DTY4965852@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@DTY4965852@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@DTY4965852@DW@0|0|0@DW@height@DW@30px@DX@genericSetNodeStyle@DW@DTY4965852@DW@0|0|0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@DTY4965852@DW@0|0|0@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@DTY4965852@DW@0|0|0@DW@width@DX@genericSetNodeStyle@DW@DTY4965852@DW@0|0|0|0@DW@height@DW@27px@DX@genericSetNodeStyle@DW@DTY4965852@DW@0|0|0|0@DW@top@DW@49.999%@DX@genericSetNodeStyle@DW@DTY4965852@DW@0|0|0|0@DW@margin-top@DW@-12px@DX@genericRemoveNodeStyle@DW@DTY4965852@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@DTY4965852@DW@0|0|0|0@DW@width@DW@27px@DX@genericSetNodeStyle@DW@DTY4965852@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@DTY4965852@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericRemoveNodeStyle@DW@DTY4965852@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@KGJ4965852@DW@0|0@DW@width@DW@24px@DX@genericRemoveNodeStyle@DW@KGJ4965852@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@KGJ4965852@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@KGJ4965852@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@KGJ4965852@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@KGJ4965852@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@KGJ4965852@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@KGJ4965852@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@KGJ4965852@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@KGJ4965852@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@KGJ4965852@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@KGJ4965852@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@KGJ4965852@DW@0|0|0@DW@width@DW@24px@DX@genericSetNodeStyle@DW@KGJ4965852@DW@0|0|0|0@DW@height@DW@16px@DX@genericSetNodeStyle@DW@KGJ4965852@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@KGJ4965852@DW@0|0|0|0@DW@margin-top@DW@-8px@DX@genericRemoveNodeStyle@DW@KGJ4965852@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@KGJ4965852@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@KGJ4965852@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@KGJ4965852@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@KGJ4965852@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@KGJ4965852@DW@0|0|0|0@DW@width@DX@setStyle@DW@XIQ4965852@DW@padding-top@DW@0px@DX@genericSetNodeStyle@DW@IDS4965852@DW@0|0@DW@width@DW@38px@DX@genericRemoveNodeStyle@DW@IDS4965852@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@IDS4965852@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@IDS4965852@DW@0|0@DW@height@DW@38px@DX@genericRemoveNodeStyle@DW@IDS4965852@DW@0|0@DW@bottom@DX@genericSetNodeStyle@DW@IDS4965852@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@IDS4965852@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@IDS4965852@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@IDS4965852@DW@0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@IDS4965852@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@IDS4965852@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@IDS4965852@DW@0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@IDS4965852@DW@0|0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@IDS4965852@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@IDS4965852@DW@0|0|0|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@IDS4965852@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@IDS4965852@DW@0|0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@IDS4965852@DW@0|0|0|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@IDS4965852@DW@0|0|0|0@DW@margin-left@DW@-19px@DX@genericRemoveNodeStyle@DW@IDS4965852@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@TUW4965862@DW@0|0@DW@width@DW@76px@DX@genericRemoveNodeStyle@DW@TUW4965862@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@TUW4965862@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@TUW4965862@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@TUW4965862@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@TUW4965862@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@TUW4965862@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@TUW4965862@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@TUW4965862@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@TUW4965862@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@TUW4965862@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@TUW4965862@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@TUW4965862@DW@0|0|0@DW@width@DW@0px@DX@genericSetNodeStyle@DW@TUW4965862@DW@0|0|0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@TUW4965862@DW@0|0|0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@TUW4965862@DW@0|0|0|0@DW@margin-top@DW@0px@DX@genericSetNodeStyle@DW@TUW4965862@DW@0|0|0|0@DW@margin-bottom@DW@0px@DX@genericRemoveNodeStyle@DW@TUW4965862@DW@0|0|0|0@DW@height@DX@genericSetNodeStyle@DW@TUW4965862@DW@0|0|0|0@DW@width@DW@1px@DX@genericSetNodeStyle@DW@TUW4965862@DW@0|0|0|0@DW@left@DW@49.999%@DX@genericSetNodeStyle@DW@TUW4965862@DW@0|0|0|0@DW@margin-left@DW@-2px@DX@genericRemoveNodeStyle@DW@TUW4965862@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@TUW4965862@DW@0|0|1@DW@top@DW@0px@DX@genericSetNodeStyle@DW@TUW4965862@DW@0|0|1@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@TUW4965862@DW@0|0|1@DW@height@DX@genericSetNodeStyle@DW@TUW4965862@DW@0|0|1@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@TUW4965862@DW@0|0|1@DW@right@DX@genericSetNodeStyle@DW@TUW4965862@DW@0|0|1@DW@width@DW@76px@DX@genericSetNodeStyle@DW@TUW4965862@DW@0|0|1|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@TUW4965862@DW@0|0|1|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@TUW4965862@DW@0|0|1|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@TUW4965862@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@TUW4965862@DW@0|0|1|0@DW@width@DW@46px@DX@genericSetNodeStyle@DW@TUW4965862@DW@0|0|1|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@TUW4965862@DW@0|0|1|0@DW@margin-left@DW@10px@DX@genericRemoveNodeStyle@DW@TUW4965862@DW@0|0|1|0@DW@right@DX@genericSetNodeStyle@DW@OEG4965852@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@OEG4965852@DW@0|0@DW@right@DW@0@DX@genericRemoveNodeStyle@DW@OEG4965852@DW@0|0@DW@margin-left@DX@genericRemoveNodeStyle@DW@OEG4965852@DW@0|0@DW@width@DX@genericSetNodeStyle@DW@OEG4965852@DW@0|0@DW@height@DW@30px@DX@genericSetNodeStyle@DW@OEG4965852@DW@0|0@DW@margin-top@DW@-15px@DX@genericSetNodeStyle@DW@OEG4965852@DW@0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@OEG4965852@DW@0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@OEG4965852@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@OEG4965852@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@OEG4965852@DW@0|0|0@DW@height@DW@30px@DX@genericSetNodeStyle@DW@OEG4965852@DW@0|0|0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@OEG4965852@DW@0|0|0@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@OEG4965852@DW@0|0|0@DW@width@DX@genericSetNodeStyle@DW@OEG4965852@DW@0|0|0|0@DW@height@DW@27px@DX@genericSetNodeStyle@DW@OEG4965852@DW@0|0|0|0@DW@top@DW@49.999%@DX@genericSetNodeStyle@DW@OEG4965852@DW@0|0|0|0@DW@margin-top@DW@-12px@DX@genericRemoveNodeStyle@DW@OEG4965852@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@OEG4965852@DW@0|0|0|0@DW@width@DW@27px@DX@genericSetNodeStyle@DW@OEG4965852@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@OEG4965852@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericRemoveNodeStyle@DW@OEG4965852@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@OSN4965853@DW@0|0@DW@width@DW@24px@DX@genericRemoveNodeStyle@DW@OSN4965853@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@OSN4965853@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@OSN4965853@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@OSN4965853@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@OSN4965853@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@OSN4965853@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@OSN4965853@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@OSN4965853@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@OSN4965853@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@OSN4965853@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@OSN4965853@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@OSN4965853@DW@0|0|0@DW@width@DW@24px@DX@genericSetNodeStyle@DW@OSN4965853@DW@0|0|0|0@DW@height@DW@16px@DX@genericSetNodeStyle@DW@OSN4965853@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@OSN4965853@DW@0|0|0|0@DW@margin-top@DW@-8px@DX@genericRemoveNodeStyle@DW@OSN4965853@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@OSN4965853@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@OSN4965853@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@OSN4965853@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@OSN4965853@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@OSN4965853@DW@0|0|0|0@DW@width@DX@setStyle@DW@ICP4965853@DW@padding-top@DW@0px@DX@genericSetNodeStyle@DW@OQR4965853@DW@0|0@DW@width@DW@38px@DX@genericRemoveNodeStyle@DW@OQR4965853@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@OQR4965853@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@OQR4965853@DW@0|0@DW@height@DW@38px@DX@genericRemoveNodeStyle@DW@OQR4965853@DW@0|0@DW@bottom@DX@genericSetNodeStyle@DW@OQR4965853@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@OQR4965853@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@OQR4965853@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@OQR4965853@DW@0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@OQR4965853@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@OQR4965853@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@OQR4965853@DW@0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@OQR4965853@DW@0|0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@OQR4965853@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@OQR4965853@DW@0|0|0|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@OQR4965853@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@OQR4965853@DW@0|0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@OQR4965853@DW@0|0|0|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@OQR4965853@DW@0|0|0|0@DW@margin-left@DW@-19px@DX@genericRemoveNodeStyle@DW@OQR4965853@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@XLC4965862@DW@0|0@DW@width@DW@76px@DX@genericRemoveNodeStyle@DW@XLC4965862@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@XLC4965862@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@XLC4965862@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@XLC4965862@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@XLC4965862@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@XLC4965862@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@XLC4965862@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@XLC4965862@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@XLC4965862@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@XLC4965862@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@XLC4965862@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@XLC4965862@DW@0|0|0@DW@width@DW@0px@DX@genericSetNodeStyle@DW@XLC4965862@DW@0|0|0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@XLC4965862@DW@0|0|0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@XLC4965862@DW@0|0|0|0@DW@margin-top@DW@0px@DX@genericSetNodeStyle@DW@XLC4965862@DW@0|0|0|0@DW@margin-bottom@DW@0px@DX@genericRemoveNodeStyle@DW@XLC4965862@DW@0|0|0|0@DW@height@DX@genericSetNodeStyle@DW@XLC4965862@DW@0|0|0|0@DW@width@DW@1px@DX@genericSetNodeStyle@DW@XLC4965862@DW@0|0|0|0@DW@left@DW@49.999%@DX@genericSetNodeStyle@DW@XLC4965862@DW@0|0|0|0@DW@margin-left@DW@-2px@DX@genericRemoveNodeStyle@DW@XLC4965862@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@XLC4965862@DW@0|0|1@DW@top@DW@0px@DX@genericSetNodeStyle@DW@XLC4965862@DW@0|0|1@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@XLC4965862@DW@0|0|1@DW@height@DX@genericSetNodeStyle@DW@XLC4965862@DW@0|0|1@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@XLC4965862@DW@0|0|1@DW@right@DX@genericSetNodeStyle@DW@XLC4965862@DW@0|0|1@DW@width@DW@76px@DX@genericSetNodeStyle@DW@XLC4965862@DW@0|0|1|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@XLC4965862@DW@0|0|1|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@XLC4965862@DW@0|0|1|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@XLC4965862@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@XLC4965862@DW@0|0|1|0@DW@width@DW@46px@DX@genericSetNodeStyle@DW@XLC4965862@DW@0|0|1|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@XLC4965862@DW@0|0|1|0@DW@margin-left@DW@10px@DX@genericRemoveNodeStyle@DW@XLC4965862@DW@0|0|1|0@DW@right@DX@genericSetNodeStyle@DW@BAB4965853@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@BAB4965853@DW@0|0@DW@right@DW@0@DX@genericRemoveNodeStyle@DW@BAB4965853@DW@0|0@DW@margin-left@DX@genericRemoveNodeStyle@DW@BAB4965853@DW@0|0@DW@width@DX@genericSetNodeStyle@DW@BAB4965853@DW@0|0@DW@height@DW@30px@DX@genericSetNodeStyle@DW@BAB4965853@DW@0|0@DW@margin-top@DW@-15px@DX@genericSetNodeStyle@DW@BAB4965853@DW@0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@BAB4965853@DW@0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@BAB4965853@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@BAB4965853@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@BAB4965853@DW@0|0|0@DW@height@DW@30px@DX@genericSetNodeStyle@DW@BAB4965853@DW@0|0|0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@BAB4965853@DW@0|0|0@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@BAB4965853@DW@0|0|0@DW@width@DX@genericSetNodeStyle@DW@BAB4965853@DW@0|0|0|0@DW@height@DW@27px@DX@genericSetNodeStyle@DW@BAB4965853@DW@0|0|0|0@DW@top@DW@49.999%@DX@genericSetNodeStyle@DW@BAB4965853@DW@0|0|0|0@DW@margin-top@DW@-12px@DX@genericRemoveNodeStyle@DW@BAB4965853@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@BAB4965853@DW@0|0|0|0@DW@width@DW@27px@DX@genericSetNodeStyle@DW@BAB4965853@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@BAB4965853@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericRemoveNodeStyle@DW@BAB4965853@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@OYH4965854@DW@0|0@DW@width@DW@24px@DX@genericRemoveNodeStyle@DW@OYH4965854@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@OYH4965854@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@OYH4965854@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@OYH4965854@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@OYH4965854@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@OYH4965854@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@OYH4965854@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@OYH4965854@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@OYH4965854@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@OYH4965854@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@OYH4965854@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@OYH4965854@DW@0|0|0@DW@width@DW@24px@DX@genericSetNodeStyle@DW@OYH4965854@DW@0|0|0|0@DW@height@DW@16px@DX@genericSetNodeStyle@DW@OYH4965854@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@OYH4965854@DW@0|0|0|0@DW@margin-top@DW@-8px@DX@genericRemoveNodeStyle@DW@OYH4965854@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@OYH4965854@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@OYH4965854@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@OYH4965854@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@OYH4965854@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@OYH4965854@DW@0|0|0|0@DW@width@DX@setStyle@DW@KTP4965854@DW@padding-top@DW@0px@DX@genericSetNodeStyle@DW@FND4965854@DW@0|0@DW@width@DW@38px@DX@genericRemoveNodeStyle@DW@FND4965854@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@FND4965854@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@FND4965854@DW@0|0@DW@height@DW@38px@DX@genericRemoveNodeStyle@DW@FND4965854@DW@0|0@DW@bottom@DX@genericSetNodeStyle@DW@FND4965854@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@FND4965854@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@FND4965854@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@FND4965854@DW@0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@FND4965854@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@FND4965854@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@FND4965854@DW@0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@FND4965854@DW@0|0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@FND4965854@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@FND4965854@DW@0|0|0|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@FND4965854@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@FND4965854@DW@0|0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@FND4965854@DW@0|0|0|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@FND4965854@DW@0|0|0|0@DW@margin-left@DW@-19px@DX@genericRemoveNodeStyle@DW@FND4965854@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@CHU4965862@DW@0|0@DW@width@DW@76px@DX@genericRemoveNodeStyle@DW@CHU4965862@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@CHU4965862@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@CHU4965862@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@CHU4965862@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@CHU4965862@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@CHU4965862@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@CHU4965862@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@CHU4965862@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@CHU4965862@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@CHU4965862@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@CHU4965862@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@CHU4965862@DW@0|0|0@DW@width@DW@0px@DX@genericSetNodeStyle@DW@CHU4965862@DW@0|0|0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@CHU4965862@DW@0|0|0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@CHU4965862@DW@0|0|0|0@DW@margin-top@DW@0px@DX@genericSetNodeStyle@DW@CHU4965862@DW@0|0|0|0@DW@margin-bottom@DW@0px@DX@genericRemoveNodeStyle@DW@CHU4965862@DW@0|0|0|0@DW@height@DX@genericSetNodeStyle@DW@CHU4965862@DW@0|0|0|0@DW@width@DW@1px@DX@genericSetNodeStyle@DW@CHU4965862@DW@0|0|0|0@DW@left@DW@49.999%@DX@genericSetNodeStyle@DW@CHU4965862@DW@0|0|0|0@DW@margin-left@DW@-2px@DX@genericRemoveNodeStyle@DW@CHU4965862@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@CHU4965862@DW@0|0|1@DW@top@DW@0px@DX@genericSetNodeStyle@DW@CHU4965862@DW@0|0|1@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@CHU4965862@DW@0|0|1@DW@height@DX@genericSetNodeStyle@DW@CHU4965862@DW@0|0|1@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@CHU4965862@DW@0|0|1@DW@right@DX@genericSetNodeStyle@DW@CHU4965862@DW@0|0|1@DW@width@DW@76px@DX@genericSetNodeStyle@DW@CHU4965862@DW@0|0|1|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@CHU4965862@DW@0|0|1|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@CHU4965862@DW@0|0|1|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@CHU4965862@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@CHU4965862@DW@0|0|1|0@DW@width@DW@46px@DX@genericSetNodeStyle@DW@CHU4965862@DW@0|0|1|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@CHU4965862@DW@0|0|1|0@DW@margin-left@DW@10px@DX@genericRemoveNodeStyle@DW@CHU4965862@DW@0|0|1|0@DW@right@DX@genericSetNodeStyle@DW@KGJ4965854@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@KGJ4965854@DW@0|0@DW@right@DW@0@DX@genericRemoveNodeStyle@DW@KGJ4965854@DW@0|0@DW@margin-left@DX@genericRemoveNodeStyle@DW@KGJ4965854@DW@0|0@DW@width@DX@genericSetNodeStyle@DW@KGJ4965854@DW@0|0@DW@height@DW@30px@DX@genericSetNodeStyle@DW@KGJ4965854@DW@0|0@DW@margin-top@DW@-15px@DX@genericSetNodeStyle@DW@KGJ4965854@DW@0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@KGJ4965854@DW@0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@KGJ4965854@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@KGJ4965854@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@KGJ4965854@DW@0|0|0@DW@height@DW@30px@DX@genericSetNodeStyle@DW@KGJ4965854@DW@0|0|0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@KGJ4965854@DW@0|0|0@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@KGJ4965854@DW@0|0|0@DW@width@DX@genericSetNodeStyle@DW@KGJ4965854@DW@0|0|0|0@DW@height@DW@27px@DX@genericSetNodeStyle@DW@KGJ4965854@DW@0|0|0|0@DW@top@DW@49.999%@DX@genericSetNodeStyle@DW@KGJ4965854@DW@0|0|0|0@DW@margin-top@DW@-12px@DX@genericRemoveNodeStyle@DW@KGJ4965854@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@KGJ4965854@DW@0|0|0|0@DW@width@DW@27px@DX@genericSetNodeStyle@DW@KGJ4965854@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@KGJ4965854@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericRemoveNodeStyle@DW@KGJ4965854@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@ACH4965855@DW@0|0@DW@width@DW@24px@DX@genericRemoveNodeStyle@DW@ACH4965855@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@ACH4965855@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@ACH4965855@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@ACH4965855@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@ACH4965855@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@ACH4965855@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@ACH4965855@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@ACH4965855@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@ACH4965855@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@ACH4965855@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@ACH4965855@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@ACH4965855@DW@0|0|0@DW@width@DW@24px@DX@genericSetNodeStyle@DW@ACH4965855@DW@0|0|0|0@DW@height@DW@16px@DX@genericSetNodeStyle@DW@ACH4965855@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@ACH4965855@DW@0|0|0|0@DW@margin-top@DW@-8px@DX@genericRemoveNodeStyle@DW@ACH4965855@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@ACH4965855@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@ACH4965855@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@ACH4965855@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@ACH4965855@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@ACH4965855@DW@0|0|0|0@DW@width@DX@setStyle@DW@MGO4965855@DW@padding-top@DW@0px@DX@genericSetNodeStyle@DW@VUQ4965855@DW@0|0@DW@width@DW@38px@DX@genericRemoveNodeStyle@DW@VUQ4965855@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@VUQ4965855@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@VUQ4965855@DW@0|0@DW@height@DW@38px@DX@genericRemoveNodeStyle@DW@VUQ4965855@DW@0|0@DW@bottom@DX@genericSetNodeStyle@DW@VUQ4965855@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@VUQ4965855@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@VUQ4965855@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@VUQ4965855@DW@0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@VUQ4965855@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@VUQ4965855@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@VUQ4965855@DW@0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@VUQ4965855@DW@0|0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@VUQ4965855@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@VUQ4965855@DW@0|0|0|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@VUQ4965855@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@VUQ4965855@DW@0|0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@VUQ4965855@DW@0|0|0|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@VUQ4965855@DW@0|0|0|0@DW@margin-left@DW@-19px@DX@genericRemoveNodeStyle@DW@VUQ4965855@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@TXS4965862@DW@0|0@DW@width@DW@76px@DX@genericRemoveNodeStyle@DW@TXS4965862@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@TXS4965862@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@TXS4965862@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@TXS4965862@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@TXS4965862@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@TXS4965862@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@TXS4965862@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@TXS4965862@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@TXS4965862@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@TXS4965862@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@TXS4965862@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@TXS4965862@DW@0|0|0@DW@width@DW@0px@DX@genericSetNodeStyle@DW@TXS4965862@DW@0|0|0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@TXS4965862@DW@0|0|0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@TXS4965862@DW@0|0|0|0@DW@margin-top@DW@0px@DX@genericSetNodeStyle@DW@TXS4965862@DW@0|0|0|0@DW@margin-bottom@DW@0px@DX@genericRemoveNodeStyle@DW@TXS4965862@DW@0|0|0|0@DW@height@DX@genericSetNodeStyle@DW@TXS4965862@DW@0|0|0|0@DW@width@DW@1px@DX@genericSetNodeStyle@DW@TXS4965862@DW@0|0|0|0@DW@left@DW@49.999%@DX@genericSetNodeStyle@DW@TXS4965862@DW@0|0|0|0@DW@margin-left@DW@-2px@DX@genericRemoveNodeStyle@DW@TXS4965862@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@TXS4965862@DW@0|0|1@DW@top@DW@0px@DX@genericSetNodeStyle@DW@TXS4965862@DW@0|0|1@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@TXS4965862@DW@0|0|1@DW@height@DX@genericSetNodeStyle@DW@TXS4965862@DW@0|0|1@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@TXS4965862@DW@0|0|1@DW@right@DX@genericSetNodeStyle@DW@TXS4965862@DW@0|0|1@DW@width@DW@76px@DX@genericSetNodeStyle@DW@TXS4965862@DW@0|0|1|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@TXS4965862@DW@0|0|1|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@TXS4965862@DW@0|0|1|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@TXS4965862@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@TXS4965862@DW@0|0|1|0@DW@width@DW@46px@DX@genericSetNodeStyle@DW@TXS4965862@DW@0|0|1|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@TXS4965862@DW@0|0|1|0@DW@margin-left@DW@10px@DX@genericRemoveNodeStyle@DW@TXS4965862@DW@0|0|1|0@DW@right@DX@genericSetNodeStyle@DW@KTQ4965855@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@KTQ4965855@DW@0|0@DW@right@DW@0@DX@genericRemoveNodeStyle@DW@KTQ4965855@DW@0|0@DW@margin-left@DX@genericRemoveNodeStyle@DW@KTQ4965855@DW@0|0@DW@width@DX@genericSetNodeStyle@DW@KTQ4965855@DW@0|0@DW@height@DW@30px@DX@genericSetNodeStyle@DW@KTQ4965855@DW@0|0@DW@margin-top@DW@-15px@DX@genericSetNodeStyle@DW@KTQ4965855@DW@0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@KTQ4965855@DW@0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@KTQ4965855@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@KTQ4965855@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@KTQ4965855@DW@0|0|0@DW@height@DW@30px@DX@genericSetNodeStyle@DW@KTQ4965855@DW@0|0|0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@KTQ4965855@DW@0|0|0@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@KTQ4965855@DW@0|0|0@DW@width@DX@genericSetNodeStyle@DW@KTQ4965855@DW@0|0|0|0@DW@height@DW@27px@DX@genericSetNodeStyle@DW@KTQ4965855@DW@0|0|0|0@DW@top@DW@49.999%@DX@genericSetNodeStyle@DW@KTQ4965855@DW@0|0|0|0@DW@margin-top@DW@-12px@DX@genericRemoveNodeStyle@DW@KTQ4965855@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@KTQ4965855@DW@0|0|0|0@DW@width@DW@27px@DX@genericSetNodeStyle@DW@KTQ4965855@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@KTQ4965855@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericRemoveNodeStyle@DW@KTQ4965855@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@WKV4965856@DW@0|0@DW@width@DW@24px@DX@genericRemoveNodeStyle@DW@WKV4965856@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@WKV4965856@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@WKV4965856@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@WKV4965856@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@WKV4965856@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@WKV4965856@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@WKV4965856@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@WKV4965856@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@WKV4965856@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@WKV4965856@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@WKV4965856@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@WKV4965856@DW@0|0|0@DW@width@DW@24px@DX@genericSetNodeStyle@DW@WKV4965856@DW@0|0|0|0@DW@height@DW@16px@DX@genericSetNodeStyle@DW@WKV4965856@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@WKV4965856@DW@0|0|0|0@DW@margin-top@DW@-8px@DX@genericRemoveNodeStyle@DW@WKV4965856@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@WKV4965856@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@WKV4965856@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@WKV4965856@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@WKV4965856@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@WKV4965856@DW@0|0|0|0@DW@width@DX@setStyle@DW@HVQ4965856@DW@padding-top@DW@0px@DX@genericSetNodeStyle@DW@DYM4965856@DW@0|0@DW@width@DW@38px@DX@genericRemoveNodeStyle@DW@DYM4965856@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@DYM4965856@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@DYM4965856@DW@0|0@DW@height@DW@38px@DX@genericRemoveNodeStyle@DW@DYM4965856@DW@0|0@DW@bottom@DX@genericSetNodeStyle@DW@DYM4965856@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@DYM4965856@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@DYM4965856@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@DYM4965856@DW@0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@DYM4965856@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@DYM4965856@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@DYM4965856@DW@0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@DYM4965856@DW@0|0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@DYM4965856@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@DYM4965856@DW@0|0|0|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@DYM4965856@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@DYM4965856@DW@0|0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@DYM4965856@DW@0|0|0|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@DYM4965856@DW@0|0|0|0@DW@margin-left@DW@-19px@DX@genericRemoveNodeStyle@DW@DYM4965856@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@NCG4965862@DW@0|0@DW@width@DW@76px@DX@genericRemoveNodeStyle@DW@NCG4965862@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@NCG4965862@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@NCG4965862@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@NCG4965862@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@NCG4965862@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@NCG4965862@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@NCG4965862@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@NCG4965862@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@NCG4965862@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@NCG4965862@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@NCG4965862@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@NCG4965862@DW@0|0|0@DW@width@DW@0px@DX@genericSetNodeStyle@DW@NCG4965862@DW@0|0|0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@NCG4965862@DW@0|0|0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@NCG4965862@DW@0|0|0|0@DW@margin-top@DW@0px@DX@genericSetNodeStyle@DW@NCG4965862@DW@0|0|0|0@DW@margin-bottom@DW@0px@DX@genericRemoveNodeStyle@DW@NCG4965862@DW@0|0|0|0@DW@height@DX@genericSetNodeStyle@DW@NCG4965862@DW@0|0|0|0@DW@width@DW@1px@DX@genericSetNodeStyle@DW@NCG4965862@DW@0|0|0|0@DW@left@DW@49.999%@DX@genericSetNodeStyle@DW@NCG4965862@DW@0|0|0|0@DW@margin-left@DW@-2px@DX@genericRemoveNodeStyle@DW@NCG4965862@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@NCG4965862@DW@0|0|1@DW@top@DW@0px@DX@genericSetNodeStyle@DW@NCG4965862@DW@0|0|1@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@NCG4965862@DW@0|0|1@DW@height@DX@genericSetNodeStyle@DW@NCG4965862@DW@0|0|1@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@NCG4965862@DW@0|0|1@DW@right@DX@genericSetNodeStyle@DW@NCG4965862@DW@0|0|1@DW@width@DW@76px@DX@genericSetNodeStyle@DW@NCG4965862@DW@0|0|1|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@NCG4965862@DW@0|0|1|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@NCG4965862@DW@0|0|1|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@NCG4965862@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@NCG4965862@DW@0|0|1|0@DW@width@DW@46px@DX@genericSetNodeStyle@DW@NCG4965862@DW@0|0|1|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@NCG4965862@DW@0|0|1|0@DW@margin-left@DW@10px@DX@genericRemoveNodeStyle@DW@NCG4965862@DW@0|0|1|0@DW@right@DX@genericSetNodeStyle@DW@MJB4965856@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@MJB4965856@DW@0|0@DW@right@DW@0@DX@genericRemoveNodeStyle@DW@MJB4965856@DW@0|0@DW@margin-left@DX@genericRemoveNodeStyle@DW@MJB4965856@DW@0|0@DW@width@DX@genericSetNodeStyle@DW@MJB4965856@DW@0|0@DW@height@DW@30px@DX@genericSetNodeStyle@DW@MJB4965856@DW@0|0@DW@margin-top@DW@-15px@DX@genericSetNodeStyle@DW@MJB4965856@DW@0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@MJB4965856@DW@0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@MJB4965856@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@MJB4965856@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@MJB4965856@DW@0|0|0@DW@height@DW@30px@DX@genericSetNodeStyle@DW@MJB4965856@DW@0|0|0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@MJB4965856@DW@0|0|0@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@MJB4965856@DW@0|0|0@DW@width@DX@genericSetNodeStyle@DW@MJB4965856@DW@0|0|0|0@DW@height@DW@27px@DX@genericSetNodeStyle@DW@MJB4965856@DW@0|0|0|0@DW@top@DW@49.999%@DX@genericSetNodeStyle@DW@MJB4965856@DW@0|0|0|0@DW@margin-top@DW@-12px@DX@genericRemoveNodeStyle@DW@MJB4965856@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@MJB4965856@DW@0|0|0|0@DW@width@DW@27px@DX@genericSetNodeStyle@DW@MJB4965856@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@MJB4965856@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericRemoveNodeStyle@DW@MJB4965856@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@WSD4965856@DW@0|0@DW@width@DW@24px@DX@genericRemoveNodeStyle@DW@WSD4965856@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@WSD4965856@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@WSD4965856@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@WSD4965856@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@WSD4965856@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@WSD4965856@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@WSD4965856@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@WSD4965856@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@WSD4965856@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@WSD4965856@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@WSD4965856@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@WSD4965856@DW@0|0|0@DW@width@DW@24px@DX@genericSetNodeStyle@DW@WSD4965856@DW@0|0|0|0@DW@height@DW@16px@DX@genericSetNodeStyle@DW@WSD4965856@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@WSD4965856@DW@0|0|0|0@DW@margin-top@DW@-8px@DX@genericRemoveNodeStyle@DW@WSD4965856@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@WSD4965856@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@WSD4965856@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@WSD4965856@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@WSD4965856@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@WSD4965856@DW@0|0|0|0@DW@width@DX@setStyle@DW@HAR4965857@DW@padding-top@DW@0px@DX@genericSetNodeStyle@DW@CJB4965857@DW@0|0@DW@width@DW@38px@DX@genericRemoveNodeStyle@DW@CJB4965857@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@CJB4965857@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@CJB4965857@DW@0|0@DW@height@DW@38px@DX@genericRemoveNodeStyle@DW@CJB4965857@DW@0|0@DW@bottom@DX@genericSetNodeStyle@DW@CJB4965857@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@CJB4965857@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@CJB4965857@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@CJB4965857@DW@0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@CJB4965857@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@CJB4965857@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@CJB4965857@DW@0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@CJB4965857@DW@0|0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@CJB4965857@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@CJB4965857@DW@0|0|0|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@CJB4965857@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@CJB4965857@DW@0|0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@CJB4965857@DW@0|0|0|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@CJB4965857@DW@0|0|0|0@DW@margin-left@DW@-19px@DX@genericRemoveNodeStyle@DW@CJB4965857@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@KUF4965862@DW@0|0@DW@width@DW@76px@DX@genericRemoveNodeStyle@DW@KUF4965862@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@KUF4965862@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@KUF4965862@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@KUF4965862@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@KUF4965862@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@KUF4965862@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@KUF4965862@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@KUF4965862@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@KUF4965862@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@KUF4965862@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@KUF4965862@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@KUF4965862@DW@0|0|0@DW@width@DW@0px@DX@genericSetNodeStyle@DW@KUF4965862@DW@0|0|0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@KUF4965862@DW@0|0|0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@KUF4965862@DW@0|0|0|0@DW@margin-top@DW@0px@DX@genericSetNodeStyle@DW@KUF4965862@DW@0|0|0|0@DW@margin-bottom@DW@0px@DX@genericRemoveNodeStyle@DW@KUF4965862@DW@0|0|0|0@DW@height@DX@genericSetNodeStyle@DW@KUF4965862@DW@0|0|0|0@DW@width@DW@1px@DX@genericSetNodeStyle@DW@KUF4965862@DW@0|0|0|0@DW@left@DW@49.999%@DX@genericSetNodeStyle@DW@KUF4965862@DW@0|0|0|0@DW@margin-left@DW@-2px@DX@genericRemoveNodeStyle@DW@KUF4965862@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@KUF4965862@DW@0|0|1@DW@top@DW@0px@DX@genericSetNodeStyle@DW@KUF4965862@DW@0|0|1@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@KUF4965862@DW@0|0|1@DW@height@DX@genericSetNodeStyle@DW@KUF4965862@DW@0|0|1@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@KUF4965862@DW@0|0|1@DW@right@DX@genericSetNodeStyle@DW@KUF4965862@DW@0|0|1@DW@width@DW@76px@DX@genericSetNodeStyle@DW@KUF4965862@DW@0|0|1|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@KUF4965862@DW@0|0|1|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@KUF4965862@DW@0|0|1|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@KUF4965862@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@KUF4965862@DW@0|0|1|0@DW@width@DW@46px@DX@genericSetNodeStyle@DW@KUF4965862@DW@0|0|1|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@KUF4965862@DW@0|0|1|0@DW@margin-left@DW@10px@DX@genericRemoveNodeStyle@DW@KUF4965862@DW@0|0|1|0@DW@right@DX@genericSetNodeStyle@DW@PHT4965857@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@PHT4965857@DW@0|0@DW@right@DW@0@DX@genericRemoveNodeStyle@DW@PHT4965857@DW@0|0@DW@margin-left@DX@genericRemoveNodeStyle@DW@PHT4965857@DW@0|0@DW@width@DX@genericSetNodeStyle@DW@PHT4965857@DW@0|0@DW@height@DW@30px@DX@genericSetNodeStyle@DW@PHT4965857@DW@0|0@DW@margin-top@DW@-15px@DX@genericSetNodeStyle@DW@PHT4965857@DW@0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@PHT4965857@DW@0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@PHT4965857@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@PHT4965857@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@PHT4965857@DW@0|0|0@DW@height@DW@30px@DX@genericSetNodeStyle@DW@PHT4965857@DW@0|0|0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@PHT4965857@DW@0|0|0@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@PHT4965857@DW@0|0|0@DW@width@DX@genericSetNodeStyle@DW@PHT4965857@DW@0|0|0|0@DW@height@DW@27px@DX@genericSetNodeStyle@DW@PHT4965857@DW@0|0|0|0@DW@top@DW@49.999%@DX@genericSetNodeStyle@DW@PHT4965857@DW@0|0|0|0@DW@margin-top@DW@-12px@DX@genericRemoveNodeStyle@DW@PHT4965857@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@PHT4965857@DW@0|0|0|0@DW@width@DW@27px@DX@genericSetNodeStyle@DW@PHT4965857@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@PHT4965857@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericRemoveNodeStyle@DW@PHT4965857@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@NVU4965857@DW@0|0@DW@width@DW@24px@DX@genericRemoveNodeStyle@DW@NVU4965857@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@NVU4965857@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@NVU4965857@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@NVU4965857@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@NVU4965857@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@NVU4965857@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@NVU4965857@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@NVU4965857@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@NVU4965857@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@NVU4965857@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@NVU4965857@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@NVU4965857@DW@0|0|0@DW@width@DW@24px@DX@genericSetNodeStyle@DW@NVU4965857@DW@0|0|0|0@DW@height@DW@16px@DX@genericSetNodeStyle@DW@NVU4965857@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@NVU4965857@DW@0|0|0|0@DW@margin-top@DW@-8px@DX@genericRemoveNodeStyle@DW@NVU4965857@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@NVU4965857@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@NVU4965857@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@NVU4965857@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@NVU4965857@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@NVU4965857@DW@0|0|0|0@DW@width@DX@setStyle@DW@CQH4965857@DW@padding-top@DW@0px@DX@genericSetNodeStyle@DW@PRX4965857@DW@0|0@DW@width@DW@38px@DX@genericRemoveNodeStyle@DW@PRX4965857@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@PRX4965857@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@PRX4965857@DW@0|0@DW@height@DW@38px@DX@genericRemoveNodeStyle@DW@PRX4965857@DW@0|0@DW@bottom@DX@genericSetNodeStyle@DW@PRX4965857@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@PRX4965857@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@PRX4965857@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@PRX4965857@DW@0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@PRX4965857@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@PRX4965857@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@PRX4965857@DW@0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@PRX4965857@DW@0|0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@PRX4965857@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@PRX4965857@DW@0|0|0|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@PRX4965857@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@PRX4965857@DW@0|0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@PRX4965857@DW@0|0|0|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@PRX4965857@DW@0|0|0|0@DW@margin-left@DW@-19px@DX@genericRemoveNodeStyle@DW@PRX4965857@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@ISJ4965862@DW@0|0@DW@width@DW@76px@DX@genericRemoveNodeStyle@DW@ISJ4965862@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@ISJ4965862@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@ISJ4965862@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@ISJ4965862@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@ISJ4965862@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@ISJ4965862@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@ISJ4965862@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@ISJ4965862@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@ISJ4965862@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@ISJ4965862@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@ISJ4965862@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@ISJ4965862@DW@0|0|0@DW@width@DW@0px@DX@genericSetNodeStyle@DW@ISJ4965862@DW@0|0|0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@ISJ4965862@DW@0|0|0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@ISJ4965862@DW@0|0|0|0@DW@margin-top@DW@0px@DX@genericSetNodeStyle@DW@ISJ4965862@DW@0|0|0|0@DW@margin-bottom@DW@0px@DX@genericRemoveNodeStyle@DW@ISJ4965862@DW@0|0|0|0@DW@height@DX@genericSetNodeStyle@DW@ISJ4965862@DW@0|0|0|0@DW@width@DW@1px@DX@genericSetNodeStyle@DW@ISJ4965862@DW@0|0|0|0@DW@left@DW@49.999%@DX@genericSetNodeStyle@DW@ISJ4965862@DW@0|0|0|0@DW@margin-left@DW@-2px@DX@genericRemoveNodeStyle@DW@ISJ4965862@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@ISJ4965862@DW@0|0|1@DW@top@DW@0px@DX@genericSetNodeStyle@DW@ISJ4965862@DW@0|0|1@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@ISJ4965862@DW@0|0|1@DW@height@DX@genericSetNodeStyle@DW@ISJ4965862@DW@0|0|1@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@ISJ4965862@DW@0|0|1@DW@right@DX@genericSetNodeStyle@DW@ISJ4965862@DW@0|0|1@DW@width@DW@76px@DX@genericSetNodeStyle@DW@ISJ4965862@DW@0|0|1|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@ISJ4965862@DW@0|0|1|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@ISJ4965862@DW@0|0|1|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@ISJ4965862@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@ISJ4965862@DW@0|0|1|0@DW@width@DW@46px@DX@genericSetNodeStyle@DW@ISJ4965862@DW@0|0|1|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@ISJ4965862@DW@0|0|1|0@DW@margin-left@DW@10px@DX@genericRemoveNodeStyle@DW@ISJ4965862@DW@0|0|1|0@DW@right@DX@genericSetNodeStyle@DW@IVT4965857@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@IVT4965857@DW@0|0@DW@right@DW@0@DX@genericRemoveNodeStyle@DW@IVT4965857@DW@0|0@DW@margin-left@DX@genericRemoveNodeStyle@DW@IVT4965857@DW@0|0@DW@width@DX@genericSetNodeStyle@DW@IVT4965857@DW@0|0@DW@height@DW@30px@DX@genericSetNodeStyle@DW@IVT4965857@DW@0|0@DW@margin-top@DW@-15px@DX@genericSetNodeStyle@DW@IVT4965857@DW@0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@IVT4965857@DW@0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@IVT4965857@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@IVT4965857@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@IVT4965857@DW@0|0|0@DW@height@DW@30px@DX@genericSetNodeStyle@DW@IVT4965857@DW@0|0|0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@IVT4965857@DW@0|0|0@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@IVT4965857@DW@0|0|0@DW@width@DX@genericSetNodeStyle@DW@IVT4965857@DW@0|0|0|0@DW@height@DW@27px@DX@genericSetNodeStyle@DW@IVT4965857@DW@0|0|0|0@DW@top@DW@49.999%@DX@genericSetNodeStyle@DW@IVT4965857@DW@0|0|0|0@DW@margin-top@DW@-12px@DX@genericRemoveNodeStyle@DW@IVT4965857@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@IVT4965857@DW@0|0|0|0@DW@width@DW@27px@DX@genericSetNodeStyle@DW@IVT4965857@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@IVT4965857@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericRemoveNodeStyle@DW@IVT4965857@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@OSV4965858@DW@0|0@DW@width@DW@24px@DX@genericRemoveNodeStyle@DW@OSV4965858@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@OSV4965858@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@OSV4965858@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@OSV4965858@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@OSV4965858@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@OSV4965858@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@OSV4965858@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@OSV4965858@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@OSV4965858@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@OSV4965858@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@OSV4965858@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@OSV4965858@DW@0|0|0@DW@width@DW@24px@DX@genericSetNodeStyle@DW@OSV4965858@DW@0|0|0|0@DW@height@DW@16px@DX@genericSetNodeStyle@DW@OSV4965858@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@OSV4965858@DW@0|0|0|0@DW@margin-top@DW@-8px@DX@genericRemoveNodeStyle@DW@OSV4965858@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@OSV4965858@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@OSV4965858@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@OSV4965858@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@OSV4965858@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@OSV4965858@DW@0|0|0|0@DW@width@DX@setStyle@DW@LLT4965858@DW@padding-top@DW@0px@DX@genericSetNodeStyle@DW@PIR4965858@DW@0|0@DW@width@DW@38px@DX@genericRemoveNodeStyle@DW@PIR4965858@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@PIR4965858@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@PIR4965858@DW@0|0@DW@height@DW@38px@DX@genericRemoveNodeStyle@DW@PIR4965858@DW@0|0@DW@bottom@DX@genericSetNodeStyle@DW@PIR4965858@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@PIR4965858@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@PIR4965858@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@PIR4965858@DW@0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@PIR4965858@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@PIR4965858@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@PIR4965858@DW@0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@PIR4965858@DW@0|0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@PIR4965858@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@PIR4965858@DW@0|0|0|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@PIR4965858@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@PIR4965858@DW@0|0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@PIR4965858@DW@0|0|0|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@PIR4965858@DW@0|0|0|0@DW@margin-left@DW@-19px@DX@genericRemoveNodeStyle@DW@PIR4965858@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@HEG4965862@DW@0|0@DW@width@DW@76px@DX@genericRemoveNodeStyle@DW@HEG4965862@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@HEG4965862@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@HEG4965862@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@HEG4965862@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@HEG4965862@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@HEG4965862@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@HEG4965862@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@HEG4965862@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@HEG4965862@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@HEG4965862@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@HEG4965862@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@HEG4965862@DW@0|0|0@DW@width@DW@0px@DX@genericSetNodeStyle@DW@HEG4965862@DW@0|0|0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@HEG4965862@DW@0|0|0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@HEG4965862@DW@0|0|0|0@DW@margin-top@DW@0px@DX@genericSetNodeStyle@DW@HEG4965862@DW@0|0|0|0@DW@margin-bottom@DW@0px@DX@genericRemoveNodeStyle@DW@HEG4965862@DW@0|0|0|0@DW@height@DX@genericSetNodeStyle@DW@HEG4965862@DW@0|0|0|0@DW@width@DW@1px@DX@genericSetNodeStyle@DW@HEG4965862@DW@0|0|0|0@DW@left@DW@49.999%@DX@genericSetNodeStyle@DW@HEG4965862@DW@0|0|0|0@DW@margin-left@DW@-2px@DX@genericRemoveNodeStyle@DW@HEG4965862@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@HEG4965862@DW@0|0|1@DW@top@DW@0px@DX@genericSetNodeStyle@DW@HEG4965862@DW@0|0|1@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@HEG4965862@DW@0|0|1@DW@height@DX@genericSetNodeStyle@DW@HEG4965862@DW@0|0|1@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@HEG4965862@DW@0|0|1@DW@right@DX@genericSetNodeStyle@DW@HEG4965862@DW@0|0|1@DW@width@DW@76px@DX@genericSetNodeStyle@DW@HEG4965862@DW@0|0|1|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@HEG4965862@DW@0|0|1|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@HEG4965862@DW@0|0|1|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@HEG4965862@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@HEG4965862@DW@0|0|1|0@DW@width@DW@46px@DX@genericSetNodeStyle@DW@HEG4965862@DW@0|0|1|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@HEG4965862@DW@0|0|1|0@DW@margin-left@DW@10px@DX@genericRemoveNodeStyle@DW@HEG4965862@DW@0|0|1|0@DW@right@DX@genericSetNodeStyle@DW@KMR4965858@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@KMR4965858@DW@0|0@DW@right@DW@0@DX@genericRemoveNodeStyle@DW@KMR4965858@DW@0|0@DW@margin-left@DX@genericRemoveNodeStyle@DW@KMR4965858@DW@0|0@DW@width@DX@genericSetNodeStyle@DW@KMR4965858@DW@0|0@DW@height@DW@30px@DX@genericSetNodeStyle@DW@KMR4965858@DW@0|0@DW@margin-top@DW@-15px@DX@genericSetNodeStyle@DW@KMR4965858@DW@0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@KMR4965858@DW@0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@KMR4965858@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@KMR4965858@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@KMR4965858@DW@0|0|0@DW@height@DW@30px@DX@genericSetNodeStyle@DW@KMR4965858@DW@0|0|0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@KMR4965858@DW@0|0|0@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@KMR4965858@DW@0|0|0@DW@width@DX@genericSetNodeStyle@DW@KMR4965858@DW@0|0|0|0@DW@height@DW@27px@DX@genericSetNodeStyle@DW@KMR4965858@DW@0|0|0|0@DW@top@DW@49.999%@DX@genericSetNodeStyle@DW@KMR4965858@DW@0|0|0|0@DW@margin-top@DW@-12px@DX@genericRemoveNodeStyle@DW@KMR4965858@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@KMR4965858@DW@0|0|0|0@DW@width@DW@27px@DX@genericSetNodeStyle@DW@KMR4965858@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@KMR4965858@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericRemoveNodeStyle@DW@KMR4965858@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@XFK4965859@DW@0|0@DW@width@DW@24px@DX@genericRemoveNodeStyle@DW@XFK4965859@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@XFK4965859@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@XFK4965859@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@XFK4965859@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@XFK4965859@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@XFK4965859@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@XFK4965859@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@XFK4965859@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@XFK4965859@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@XFK4965859@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@XFK4965859@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@XFK4965859@DW@0|0|0@DW@width@DW@24px@DX@genericSetNodeStyle@DW@XFK4965859@DW@0|0|0|0@DW@height@DW@16px@DX@genericSetNodeStyle@DW@XFK4965859@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@XFK4965859@DW@0|0|0|0@DW@margin-top@DW@-8px@DX@genericRemoveNodeStyle@DW@XFK4965859@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@XFK4965859@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@XFK4965859@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@XFK4965859@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@XFK4965859@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@XFK4965859@DW@0|0|0|0@DW@width@DX@setStyle@DW@EBP4965859@DW@padding-top@DW@0px@DX@genericSetNodeStyle@DW@VXT4965859@DW@0|0@DW@width@DW@38px@DX@genericRemoveNodeStyle@DW@VXT4965859@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@VXT4965859@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@VXT4965859@DW@0|0@DW@height@DW@38px@DX@genericRemoveNodeStyle@DW@VXT4965859@DW@0|0@DW@bottom@DX@genericSetNodeStyle@DW@VXT4965859@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@VXT4965859@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@VXT4965859@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@VXT4965859@DW@0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@VXT4965859@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@VXT4965859@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@VXT4965859@DW@0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@VXT4965859@DW@0|0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@VXT4965859@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@VXT4965859@DW@0|0|0|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@VXT4965859@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@VXT4965859@DW@0|0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@VXT4965859@DW@0|0|0|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@VXT4965859@DW@0|0|0|0@DW@margin-left@DW@-19px@DX@genericRemoveNodeStyle@DW@VXT4965859@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@OST4965862@DW@0|0@DW@width@DW@76px@DX@genericRemoveNodeStyle@DW@OST4965862@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@OST4965862@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@OST4965862@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@OST4965862@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@OST4965862@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@OST4965862@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@OST4965862@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@OST4965862@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@OST4965862@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@OST4965862@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@OST4965862@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@OST4965862@DW@0|0|0@DW@width@DW@0px@DX@genericSetNodeStyle@DW@OST4965862@DW@0|0|0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@OST4965862@DW@0|0|0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@OST4965862@DW@0|0|0|0@DW@margin-top@DW@0px@DX@genericSetNodeStyle@DW@OST4965862@DW@0|0|0|0@DW@margin-bottom@DW@0px@DX@genericRemoveNodeStyle@DW@OST4965862@DW@0|0|0|0@DW@height@DX@genericSetNodeStyle@DW@OST4965862@DW@0|0|0|0@DW@width@DW@1px@DX@genericSetNodeStyle@DW@OST4965862@DW@0|0|0|0@DW@left@DW@49.999%@DX@genericSetNodeStyle@DW@OST4965862@DW@0|0|0|0@DW@margin-left@DW@-2px@DX@genericRemoveNodeStyle@DW@OST4965862@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@OST4965862@DW@0|0|1@DW@top@DW@0px@DX@genericSetNodeStyle@DW@OST4965862@DW@0|0|1@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@OST4965862@DW@0|0|1@DW@height@DX@genericSetNodeStyle@DW@OST4965862@DW@0|0|1@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@OST4965862@DW@0|0|1@DW@right@DX@genericSetNodeStyle@DW@OST4965862@DW@0|0|1@DW@width@DW@76px@DX@genericSetNodeStyle@DW@OST4965862@DW@0|0|1|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@OST4965862@DW@0|0|1|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@OST4965862@DW@0|0|1|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@OST4965862@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@OST4965862@DW@0|0|1|0@DW@width@DW@46px@DX@genericSetNodeStyle@DW@OST4965862@DW@0|0|1|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@OST4965862@DW@0|0|1|0@DW@margin-left@DW@10px@DX@genericRemoveNodeStyle@DW@OST4965862@DW@0|0|1|0@DW@right@DX@genericSetNodeStyle@DW@YEM4965859@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@YEM4965859@DW@0|0@DW@right@DW@0@DX@genericRemoveNodeStyle@DW@YEM4965859@DW@0|0@DW@margin-left@DX@genericRemoveNodeStyle@DW@YEM4965859@DW@0|0@DW@width@DX@genericSetNodeStyle@DW@YEM4965859@DW@0|0@DW@height@DW@30px@DX@genericSetNodeStyle@DW@YEM4965859@DW@0|0@DW@margin-top@DW@-15px@DX@genericSetNodeStyle@DW@YEM4965859@DW@0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@YEM4965859@DW@0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@YEM4965859@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@YEM4965859@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@YEM4965859@DW@0|0|0@DW@height@DW@30px@DX@genericSetNodeStyle@DW@YEM4965859@DW@0|0|0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@YEM4965859@DW@0|0|0@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@YEM4965859@DW@0|0|0@DW@width@DX@genericSetNodeStyle@DW@YEM4965859@DW@0|0|0|0@DW@height@DW@27px@DX@genericSetNodeStyle@DW@YEM4965859@DW@0|0|0|0@DW@top@DW@49.999%@DX@genericSetNodeStyle@DW@YEM4965859@DW@0|0|0|0@DW@margin-top@DW@-12px@DX@genericRemoveNodeStyle@DW@YEM4965859@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@YEM4965859@DW@0|0|0|0@DW@width@DW@27px@DX@genericSetNodeStyle@DW@YEM4965859@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@YEM4965859@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericRemoveNodeStyle@DW@YEM4965859@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@DPI4965860@DW@0|0@DW@width@DW@24px@DX@genericRemoveNodeStyle@DW@DPI4965860@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@DPI4965860@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@DPI4965860@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@DPI4965860@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@DPI4965860@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@DPI4965860@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@DPI4965860@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@DPI4965860@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@DPI4965860@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@DPI4965860@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@DPI4965860@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@DPI4965860@DW@0|0|0@DW@width@DW@24px@DX@genericSetNodeStyle@DW@DPI4965860@DW@0|0|0|0@DW@height@DW@16px@DX@genericSetNodeStyle@DW@DPI4965860@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@DPI4965860@DW@0|0|0|0@DW@margin-top@DW@-8px@DX@genericRemoveNodeStyle@DW@DPI4965860@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@DPI4965860@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@DPI4965860@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@DPI4965860@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@DPI4965860@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@DPI4965860@DW@0|0|0|0@DW@width@DX@setStyle@DW@GLM4965860@DW@padding-top@DW@0px@DX@genericSetNodeStyle@DW@DSB4965860@DW@0|0@DW@width@DW@38px@DX@genericRemoveNodeStyle@DW@DSB4965860@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@DSB4965860@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@DSB4965860@DW@0|0@DW@height@DW@38px@DX@genericRemoveNodeStyle@DW@DSB4965860@DW@0|0@DW@bottom@DX@genericSetNodeStyle@DW@DSB4965860@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@DSB4965860@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@DSB4965860@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@DSB4965860@DW@0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@DSB4965860@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@DSB4965860@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@DSB4965860@DW@0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@DSB4965860@DW@0|0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@DSB4965860@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@DSB4965860@DW@0|0|0|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@DSB4965860@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@DSB4965860@DW@0|0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@DSB4965860@DW@0|0|0|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@DSB4965860@DW@0|0|0|0@DW@margin-left@DW@-19px@DX@genericRemoveNodeStyle@DW@DSB4965860@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@BUN4965862@DW@0|0@DW@width@DW@76px@DX@genericRemoveNodeStyle@DW@BUN4965862@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@BUN4965862@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@BUN4965862@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@BUN4965862@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@BUN4965862@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@BUN4965862@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@BUN4965862@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@BUN4965862@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@BUN4965862@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@BUN4965862@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@BUN4965862@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@BUN4965862@DW@0|0|0@DW@width@DW@0px@DX@genericSetNodeStyle@DW@BUN4965862@DW@0|0|0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@BUN4965862@DW@0|0|0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@BUN4965862@DW@0|0|0|0@DW@margin-top@DW@0px@DX@genericSetNodeStyle@DW@BUN4965862@DW@0|0|0|0@DW@margin-bottom@DW@0px@DX@genericRemoveNodeStyle@DW@BUN4965862@DW@0|0|0|0@DW@height@DX@genericSetNodeStyle@DW@BUN4965862@DW@0|0|0|0@DW@width@DW@1px@DX@genericSetNodeStyle@DW@BUN4965862@DW@0|0|0|0@DW@left@DW@49.999%@DX@genericSetNodeStyle@DW@BUN4965862@DW@0|0|0|0@DW@margin-left@DW@-2px@DX@genericRemoveNodeStyle@DW@BUN4965862@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@BUN4965862@DW@0|0|1@DW@top@DW@0px@DX@genericSetNodeStyle@DW@BUN4965862@DW@0|0|1@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@BUN4965862@DW@0|0|1@DW@height@DX@genericSetNodeStyle@DW@BUN4965862@DW@0|0|1@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@BUN4965862@DW@0|0|1@DW@right@DX@genericSetNodeStyle@DW@BUN4965862@DW@0|0|1@DW@width@DW@76px@DX@genericSetNodeStyle@DW@BUN4965862@DW@0|0|1|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@BUN4965862@DW@0|0|1|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@BUN4965862@DW@0|0|1|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@BUN4965862@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@BUN4965862@DW@0|0|1|0@DW@width@DW@46px@DX@genericSetNodeStyle@DW@BUN4965862@DW@0|0|1|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@BUN4965862@DW@0|0|1|0@DW@margin-left@DW@10px@DX@genericRemoveNodeStyle@DW@BUN4965862@DW@0|0|1|0@DW@right@DX@genericSetNodeStyle@DW@CWS4965860@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@CWS4965860@DW@0|0@DW@right@DW@0@DX@genericRemoveNodeStyle@DW@CWS4965860@DW@0|0@DW@margin-left@DX@genericRemoveNodeStyle@DW@CWS4965860@DW@0|0@DW@width@DX@genericSetNodeStyle@DW@CWS4965860@DW@0|0@DW@height@DW@30px@DX@genericSetNodeStyle@DW@CWS4965860@DW@0|0@DW@margin-top@DW@-15px@DX@genericSetNodeStyle@DW@CWS4965860@DW@0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@CWS4965860@DW@0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@CWS4965860@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@CWS4965860@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@CWS4965860@DW@0|0|0@DW@height@DW@30px@DX@genericSetNodeStyle@DW@CWS4965860@DW@0|0|0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@CWS4965860@DW@0|0|0@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@CWS4965860@DW@0|0|0@DW@width@DX@genericSetNodeStyle@DW@CWS4965860@DW@0|0|0|0@DW@height@DW@27px@DX@genericSetNodeStyle@DW@CWS4965860@DW@0|0|0|0@DW@top@DW@49.999%@DX@genericSetNodeStyle@DW@CWS4965860@DW@0|0|0|0@DW@margin-top@DW@-12px@DX@genericRemoveNodeStyle@DW@CWS4965860@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@CWS4965860@DW@0|0|0|0@DW@width@DW@27px@DX@genericSetNodeStyle@DW@CWS4965860@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@CWS4965860@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericRemoveNodeStyle@DW@CWS4965860@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@JKB4965860@DW@0|0@DW@width@DW@24px@DX@genericRemoveNodeStyle@DW@JKB4965860@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@JKB4965860@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@JKB4965860@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@JKB4965860@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@JKB4965860@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@JKB4965860@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@JKB4965860@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@JKB4965860@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@JKB4965860@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@JKB4965860@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@JKB4965860@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@JKB4965860@DW@0|0|0@DW@width@DW@24px@DX@genericSetNodeStyle@DW@JKB4965860@DW@0|0|0|0@DW@height@DW@16px@DX@genericSetNodeStyle@DW@JKB4965860@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@JKB4965860@DW@0|0|0|0@DW@margin-top@DW@-8px@DX@genericRemoveNodeStyle@DW@JKB4965860@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@JKB4965860@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@JKB4965860@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@JKB4965860@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@JKB4965860@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@JKB4965860@DW@0|0|0|0@DW@width@DX@setStyle@DW@ELV4965860@DW@padding-top@DW@0px@DX@genericSetNodeStyle@DW@XWU4965860@DW@0|0@DW@width@DW@38px@DX@genericRemoveNodeStyle@DW@XWU4965860@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@XWU4965860@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@XWU4965860@DW@0|0@DW@height@DW@38px@DX@genericRemoveNodeStyle@DW@XWU4965860@DW@0|0@DW@bottom@DX@genericSetNodeStyle@DW@XWU4965860@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@XWU4965860@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@XWU4965860@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@XWU4965860@DW@0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@XWU4965860@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@XWU4965860@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@XWU4965860@DW@0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@XWU4965860@DW@0|0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@XWU4965860@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@XWU4965860@DW@0|0|0|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@XWU4965860@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@XWU4965860@DW@0|0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@XWU4965860@DW@0|0|0|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@XWU4965860@DW@0|0|0|0@DW@margin-left@DW@-19px@DX@genericRemoveNodeStyle@DW@XWU4965860@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@BEA4965862@DW@0|0@DW@width@DW@76px@DX@genericRemoveNodeStyle@DW@BEA4965862@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@BEA4965862@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@BEA4965862@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@BEA4965862@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@BEA4965862@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@BEA4965862@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@BEA4965862@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@BEA4965862@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@BEA4965862@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@BEA4965862@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@BEA4965862@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@BEA4965862@DW@0|0|0@DW@width@DW@0px@DX@genericSetNodeStyle@DW@BEA4965862@DW@0|0|0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@BEA4965862@DW@0|0|0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@BEA4965862@DW@0|0|0|0@DW@margin-top@DW@0px@DX@genericSetNodeStyle@DW@BEA4965862@DW@0|0|0|0@DW@margin-bottom@DW@0px@DX@genericRemoveNodeStyle@DW@BEA4965862@DW@0|0|0|0@DW@height@DX@genericSetNodeStyle@DW@BEA4965862@DW@0|0|0|0@DW@width@DW@1px@DX@genericSetNodeStyle@DW@BEA4965862@DW@0|0|0|0@DW@left@DW@49.999%@DX@genericSetNodeStyle@DW@BEA4965862@DW@0|0|0|0@DW@margin-left@DW@-2px@DX@genericRemoveNodeStyle@DW@BEA4965862@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@BEA4965862@DW@0|0|1@DW@top@DW@0px@DX@genericSetNodeStyle@DW@BEA4965862@DW@0|0|1@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@BEA4965862@DW@0|0|1@DW@height@DX@genericSetNodeStyle@DW@BEA4965862@DW@0|0|1@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@BEA4965862@DW@0|0|1@DW@right@DX@genericSetNodeStyle@DW@BEA4965862@DW@0|0|1@DW@width@DW@76px@DX@genericSetNodeStyle@DW@BEA4965862@DW@0|0|1|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@BEA4965862@DW@0|0|1|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@BEA4965862@DW@0|0|1|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@BEA4965862@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@BEA4965862@DW@0|0|1|0@DW@width@DW@46px@DX@genericSetNodeStyle@DW@BEA4965862@DW@0|0|1|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@BEA4965862@DW@0|0|1|0@DW@margin-left@DW@10px@DX@genericRemoveNodeStyle@DW@BEA4965862@DW@0|0|1|0@DW@right@DX@genericSetNodeStyle@DW@AGG4965860@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@AGG4965860@DW@0|0@DW@right@DW@0@DX@genericRemoveNodeStyle@DW@AGG4965860@DW@0|0@DW@margin-left@DX@genericRemoveNodeStyle@DW@AGG4965860@DW@0|0@DW@width@DX@genericSetNodeStyle@DW@AGG4965860@DW@0|0@DW@height@DW@30px@DX@genericSetNodeStyle@DW@AGG4965860@DW@0|0@DW@margin-top@DW@-15px@DX@genericSetNodeStyle@DW@AGG4965860@DW@0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@AGG4965860@DW@0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@AGG4965860@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@AGG4965860@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@AGG4965860@DW@0|0|0@DW@height@DW@30px@DX@genericSetNodeStyle@DW@AGG4965860@DW@0|0|0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@AGG4965860@DW@0|0|0@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@AGG4965860@DW@0|0|0@DW@width@DX@genericSetNodeStyle@DW@AGG4965860@DW@0|0|0|0@DW@height@DW@27px@DX@genericSetNodeStyle@DW@AGG4965860@DW@0|0|0|0@DW@top@DW@49.999%@DX@genericSetNodeStyle@DW@AGG4965860@DW@0|0|0|0@DW@margin-top@DW@-12px@DX@genericRemoveNodeStyle@DW@AGG4965860@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@AGG4965860@DW@0|0|0|0@DW@width@DW@27px@DX@genericSetNodeStyle@DW@AGG4965860@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@AGG4965860@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericRemoveNodeStyle@DW@AGG4965860@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@MRV4965861@DW@0|0@DW@width@DW@24px@DX@genericRemoveNodeStyle@DW@MRV4965861@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@MRV4965861@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@MRV4965861@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@MRV4965861@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@MRV4965861@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@MRV4965861@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@MRV4965861@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@MRV4965861@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@MRV4965861@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@MRV4965861@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@MRV4965861@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@MRV4965861@DW@0|0|0@DW@width@DW@24px@DX@genericSetNodeStyle@DW@MRV4965861@DW@0|0|0|0@DW@height@DW@16px@DX@genericSetNodeStyle@DW@MRV4965861@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@MRV4965861@DW@0|0|0|0@DW@margin-top@DW@-8px@DX@genericRemoveNodeStyle@DW@MRV4965861@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@MRV4965861@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@MRV4965861@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@MRV4965861@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@MRV4965861@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@MRV4965861@DW@0|0|0|0@DW@width@DX@setStyle@DW@XSQ4965861@DW@padding-top@DW@0px@DX@genericSetNodeStyle@DW@HCP4965861@DW@0|0@DW@width@DW@38px@DX@genericRemoveNodeStyle@DW@HCP4965861@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@HCP4965861@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@HCP4965861@DW@0|0@DW@height@DW@38px@DX@genericRemoveNodeStyle@DW@HCP4965861@DW@0|0@DW@bottom@DX@genericSetNodeStyle@DW@HCP4965861@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@HCP4965861@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@HCP4965861@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@HCP4965861@DW@0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@HCP4965861@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@HCP4965861@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@HCP4965861@DW@0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@HCP4965861@DW@0|0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@HCP4965861@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@HCP4965861@DW@0|0|0|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@HCP4965861@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@HCP4965861@DW@0|0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@HCP4965861@DW@0|0|0|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@HCP4965861@DW@0|0|0|0@DW@margin-left@DW@-19px@DX@genericRemoveNodeStyle@DW@HCP4965861@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@FJS4965862@DW@0|0@DW@width@DW@76px@DX@genericRemoveNodeStyle@DW@FJS4965862@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@FJS4965862@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@FJS4965862@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@FJS4965862@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@FJS4965862@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@FJS4965862@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@FJS4965862@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@FJS4965862@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@FJS4965862@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@FJS4965862@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@FJS4965862@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@FJS4965862@DW@0|0|0@DW@width@DW@0px@DX@genericSetNodeStyle@DW@FJS4965862@DW@0|0|0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@FJS4965862@DW@0|0|0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@FJS4965862@DW@0|0|0|0@DW@margin-top@DW@0px@DX@genericSetNodeStyle@DW@FJS4965862@DW@0|0|0|0@DW@margin-bottom@DW@0px@DX@genericRemoveNodeStyle@DW@FJS4965862@DW@0|0|0|0@DW@height@DX@genericSetNodeStyle@DW@FJS4965862@DW@0|0|0|0@DW@width@DW@1px@DX@genericSetNodeStyle@DW@FJS4965862@DW@0|0|0|0@DW@left@DW@49.999%@DX@genericSetNodeStyle@DW@FJS4965862@DW@0|0|0|0@DW@margin-left@DW@-2px@DX@genericRemoveNodeStyle@DW@FJS4965862@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@FJS4965862@DW@0|0|1@DW@top@DW@0px@DX@genericSetNodeStyle@DW@FJS4965862@DW@0|0|1@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@FJS4965862@DW@0|0|1@DW@height@DX@genericSetNodeStyle@DW@FJS4965862@DW@0|0|1@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@FJS4965862@DW@0|0|1@DW@right@DX@genericSetNodeStyle@DW@FJS4965862@DW@0|0|1@DW@width@DW@76px@DX@genericSetNodeStyle@DW@FJS4965862@DW@0|0|1|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@FJS4965862@DW@0|0|1|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@FJS4965862@DW@0|0|1|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@FJS4965862@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@FJS4965862@DW@0|0|1|0@DW@width@DW@46px@DX@genericSetNodeStyle@DW@FJS4965862@DW@0|0|1|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@FJS4965862@DW@0|0|1|0@DW@margin-left@DW@10px@DX@genericRemoveNodeStyle@DW@FJS4965862@DW@0|0|1|0@DW@right@DX@genericSetNodeStyle@DW@HDD4965861@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@HDD4965861@DW@0|0@DW@right@DW@0@DX@genericRemoveNodeStyle@DW@HDD4965861@DW@0|0@DW@margin-left@DX@genericRemoveNodeStyle@DW@HDD4965861@DW@0|0@DW@width@DX@genericSetNodeStyle@DW@HDD4965861@DW@0|0@DW@height@DW@30px@DX@genericSetNodeStyle@DW@HDD4965861@DW@0|0@DW@margin-top@DW@-15px@DX@genericSetNodeStyle@DW@HDD4965861@DW@0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@HDD4965861@DW@0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@HDD4965861@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@HDD4965861@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@HDD4965861@DW@0|0|0@DW@height@DW@30px@DX@genericSetNodeStyle@DW@HDD4965861@DW@0|0|0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@HDD4965861@DW@0|0|0@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@HDD4965861@DW@0|0|0@DW@width@DX@genericSetNodeStyle@DW@HDD4965861@DW@0|0|0|0@DW@height@DW@27px@DX@genericSetNodeStyle@DW@HDD4965861@DW@0|0|0|0@DW@top@DW@49.999%@DX@genericSetNodeStyle@DW@HDD4965861@DW@0|0|0|0@DW@margin-top@DW@-12px@DX@genericRemoveNodeStyle@DW@HDD4965861@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@HDD4965861@DW@0|0|0|0@DW@width@DW@27px@DX@genericSetNodeStyle@DW@HDD4965861@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@HDD4965861@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericRemoveNodeStyle@DW@HDD4965861@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@HFH4965862@DW@0|0@DW@width@DW@24px@DX@genericRemoveNodeStyle@DW@HFH4965862@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@HFH4965862@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@HFH4965862@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@HFH4965862@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@HFH4965862@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@HFH4965862@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@HFH4965862@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@HFH4965862@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@HFH4965862@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@HFH4965862@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@HFH4965862@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@HFH4965862@DW@0|0|0@DW@width@DW@24px@DX@genericSetNodeStyle@DW@HFH4965862@DW@0|0|0|0@DW@height@DW@16px@DX@genericSetNodeStyle@DW@HFH4965862@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@HFH4965862@DW@0|0|0|0@DW@margin-top@DW@-8px@DX@genericRemoveNodeStyle@DW@HFH4965862@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@HFH4965862@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@HFH4965862@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@HFH4965862@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@HFH4965862@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@HFH4965862@DW@0|0|0|0@DW@width@DX@setStyle@DW@WQY4965862@DW@padding-top@DW@0px@DX@genericSetNodeStyle@DW@PSM4965862@DW@0|0@DW@width@DW@38px@DX@genericRemoveNodeStyle@DW@PSM4965862@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@PSM4965862@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@PSM4965862@DW@0|0@DW@height@DW@38px@DX@genericRemoveNodeStyle@DW@PSM4965862@DW@0|0@DW@bottom@DX@genericSetNodeStyle@DW@PSM4965862@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@PSM4965862@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@PSM4965862@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@PSM4965862@DW@0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@PSM4965862@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@PSM4965862@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@PSM4965862@DW@0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@PSM4965862@DW@0|0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@PSM4965862@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@PSM4965862@DW@0|0|0|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@PSM4965862@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@PSM4965862@DW@0|0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@PSM4965862@DW@0|0|0|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@PSM4965862@DW@0|0|0|0@DW@margin-left@DW@-19px@DX@genericRemoveNodeStyle@DW@PSM4965862@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@DUX4965862@DW@0|0@DW@width@DW@76px@DX@genericRemoveNodeStyle@DW@DUX4965862@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@DUX4965862@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@DUX4965862@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@DUX4965862@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@DUX4965862@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@DUX4965862@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@DUX4965862@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@DUX4965862@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@DUX4965862@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@DUX4965862@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@DUX4965862@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@DUX4965862@DW@0|0|0@DW@width@DW@0px@DX@genericSetNodeStyle@DW@DUX4965862@DW@0|0|0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@DUX4965862@DW@0|0|0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@DUX4965862@DW@0|0|0|0@DW@margin-top@DW@0px@DX@genericSetNodeStyle@DW@DUX4965862@DW@0|0|0|0@DW@margin-bottom@DW@0px@DX@genericRemoveNodeStyle@DW@DUX4965862@DW@0|0|0|0@DW@height@DX@genericSetNodeStyle@DW@DUX4965862@DW@0|0|0|0@DW@width@DW@1px@DX@genericSetNodeStyle@DW@DUX4965862@DW@0|0|0|0@DW@left@DW@49.999%@DX@genericSetNodeStyle@DW@DUX4965862@DW@0|0|0|0@DW@margin-left@DW@-2px@DX@genericRemoveNodeStyle@DW@DUX4965862@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@DUX4965862@DW@0|0|1@DW@top@DW@0px@DX@genericSetNodeStyle@DW@DUX4965862@DW@0|0|1@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@DUX4965862@DW@0|0|1@DW@height@DX@genericSetNodeStyle@DW@DUX4965862@DW@0|0|1@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@DUX4965862@DW@0|0|1@DW@right@DX@genericSetNodeStyle@DW@DUX4965862@DW@0|0|1@DW@width@DW@76px@DX@genericSetNodeStyle@DW@DUX4965862@DW@0|0|1|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@DUX4965862@DW@0|0|1|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@DUX4965862@DW@0|0|1|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@DUX4965862@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@DUX4965862@DW@0|0|1|0@DW@width@DW@46px@DX@genericSetNodeStyle@DW@DUX4965862@DW@0|0|1|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@DUX4965862@DW@0|0|1|0@DW@margin-left@DW@10px@DX@genericRemoveNodeStyle@DW@DUX4965862@DW@0|0|1|0@DW@right@DX@setStyle@DW@WQO4965656@DW@height@DW@697px@DX@setStyle@DW@WQO4965656@DW@width@DW@424px@DX@evaluateJavascript@DW@dwScrollpaneRepaintScrollpaneFadings('MWJ4965656');@DX@evaluateJavascript@DW@dwHelperScrollToStoredPosition('MWJ4965656');@DX@setStyle@DW@CKG4965660@DW@padding-top@DW@0px@DX@setStyle@DW@USD4965660@DW@height@DW@51px@DX@setStyle@DW@USD4965660@DW@width@DW@424px@DX@evaluateJavascript@DW@dwScrollpaneRepaintScrollpaneFadings('IAP4965656');@DX@evaluateJavascript@DW@dwHelperScrollToStoredPosition('IAP4965656');@DX@genericSetNodeStyle@DW@CFQ4965632@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@CFQ4965632@DW@0|0@DW@right@DW@0@DX@genericRemoveNodeStyle@DW@CFQ4965632@DW@0|0@DW@margin-left@DX@genericRemoveNodeStyle@DW@CFQ4965632@DW@0|0@DW@width@DX@genericSetNodeStyle@DW@CFQ4965632@DW@0|0@DW@height@DW@0px@DX@genericSetNodeStyle@DW@CFQ4965632@DW@0|0@DW@margin-top@DW@0px@DX@genericSetNodeStyle@DW@CFQ4965632@DW@0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@CFQ4965632@DW@0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@CFQ4965632@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@CFQ4965632@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@CFQ4965632@DW@0|0|0@DW@height@DW@0px@DX@genericSetNodeStyle@DW@CFQ4965632@DW@0|0|0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@CFQ4965632@DW@0|0|0@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@CFQ4965632@DW@0|0|0@DW@width@DX@genericSetNodeStyle@DW@CFQ4965632@DW@0|0|0|0@DW@height@DW@0px@DX@genericSetNodeStyle@DW@CFQ4965632@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@CFQ4965632@DW@0|0|0|0@DW@margin-top@DW@0px@DX@genericRemoveNodeStyle@DW@CFQ4965632@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@CFQ4965632@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@CFQ4965632@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@CFQ4965632@DW@0|0|0|0@DW@margin-left@DW@16px@DX@genericSetNodeStyle@DW@CFQ4965632@DW@0|0|0|0@DW@margin-right@DW@16px@DX@genericRemoveNodeStyle@DW@CFQ4965632@DW@0|0|0|0@DW@width@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0@DW@width@DW@92px@DX@genericRemoveNodeStyle@DW@UXU4965633@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0@DW@height@DW@48px@DX@genericRemoveNodeStyle@DW@UXU4965633@DW@0|0@DW@bottom@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@UXU4965633@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0|0@DW@height@DW@48px@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@UXU4965633@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0|0@DW@width@DW@46px@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0|0|0@DW@height@DW@48px@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0|0|0@DW@margin-top@DW@-24px@DX@genericRemoveNodeStyle@DW@UXU4965633@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@UXU4965633@DW@0|0|0|0@DW@width@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0|1@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@UXU4965633@DW@0|0|1@DW@bottom@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0|1@DW@height@DW@48px@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0|1@DW@left@DW@46px@DX@genericRemoveNodeStyle@DW@UXU4965633@DW@0|0|1@DW@right@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0|1@DW@width@DW@46px@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0|1|0@DW@height@DW@48px@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0|1|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0|1|0@DW@margin-top@DW@-24px@DX@genericRemoveNodeStyle@DW@UXU4965633@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0|1|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0|1|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0|1|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0|1|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@UXU4965633@DW@0|0|1|0@DW@width@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0@DW@right@DW@0@DX@genericRemoveNodeStyle@DW@UAJ4965633@DW@0|0@DW@margin-left@DX@genericRemoveNodeStyle@DW@UAJ4965633@DW@0|0@DW@width@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@UAJ4965633@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@UAJ4965633@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@UAJ4965633@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|0@DW@height@DW@0px@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|0@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@UAJ4965633@DW@0|0|0@DW@width@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|0|0@DW@height@DW@0px@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|0|0@DW@margin-top@DW@0px@DX@genericRemoveNodeStyle@DW@UAJ4965633@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@UAJ4965633@DW@0|0|0|0@DW@width@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|1@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@UAJ4965633@DW@0|0|1@DW@bottom@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|1@DW@height@DW@1px@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|1@DW@left@DW@0px@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|1@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@UAJ4965633@DW@0|0|1@DW@width@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|1|0@DW@height@DW@1px@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|1|0@DW@top@DW@49.999%@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|1|0@DW@margin-top@DW@0px@DX@genericRemoveNodeStyle@DW@UAJ4965633@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|1|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|1|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|1|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|1|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@UAJ4965633@DW@0|0|1|0@DW@width@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|2@DW@top@DW@1px@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|2@DW@bottom@DW@1px@DX@genericRemoveNodeStyle@DW@UAJ4965633@DW@0|0|2@DW@height@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|2@DW@left@DW@0px@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|2@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@UAJ4965633@DW@0|0|2@DW@width@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|2|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|2|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|2|0@DW@margin-top@DW@0px@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|2|0@DW@margin-bottom@DW@0px@DX@genericRemoveNodeStyle@DW@UAJ4965633@DW@0|0|2|0@DW@height@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|2|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|2|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|2|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|2|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@UAJ4965633@DW@0|0|2|0@DW@width@DX@genericRemoveNodeStyle@DW@UAJ4965633@DW@0|0|3@DW@top@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|3@DW@bottom@DW@0px@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|3@DW@height@DW@1px@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|3@DW@left@DW@0px@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|3@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@UAJ4965633@DW@0|0|3@DW@width@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|3|0@DW@height@DW@1px@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|3|0@DW@top@DW@49.999%@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|3|0@DW@margin-top@DW@0px@DX@genericRemoveNodeStyle@DW@UAJ4965633@DW@0|0|3|0@DW@bottom@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|3|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|3|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|3|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|3|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@UAJ4965633@DW@0|0|3|0@DW@width@DX@genericRemoveNodeStyle@DW@UAJ4965633@DW@0|0|4@DW@top@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|4@DW@bottom@DW@0px@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|4@DW@height@DW@0px@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|4@DW@left@DW@0px@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|4@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@UAJ4965633@DW@0|0|4@DW@width@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|4|0@DW@height@DW@0px@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|4|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|4|0@DW@margin-top@DW@0px@DX@genericRemoveNodeStyle@DW@UAJ4965633@DW@0|0|4|0@DW@top@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|4|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|4|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|4|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|4|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@UAJ4965633@DW@0|0|4|0@DW@width@DX@genericSetNodeStyle@DW@LEE4965633@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@LEE4965633@DW@0|0@DW@right@DW@0@DX@genericRemoveNodeStyle@DW@LEE4965633@DW@0|0@DW@margin-left@DX@genericRemoveNodeStyle@DW@LEE4965633@DW@0|0@DW@width@DX@genericSetNodeStyle@DW@LEE4965633@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@LEE4965633@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@LEE4965633@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@LEE4965633@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@LEE4965633@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@LEE4965633@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@LEE4965633@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@LEE4965633@DW@0|0|0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@LEE4965633@DW@0|0|0@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@LEE4965633@DW@0|0|0@DW@width@DX@genericSetNodeStyle@DW@LEE4965633@DW@0|0|0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@LEE4965633@DW@0|0|0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@LEE4965633@DW@0|0|0|0@DW@margin-top@DW@1px@DX@genericSetNodeStyle@DW@LEE4965633@DW@0|0|0|0@DW@margin-bottom@DW@1px@DX@genericRemoveNodeStyle@DW@LEE4965633@DW@0|0|0|0@DW@height@DX@genericSetNodeStyle@DW@LEE4965633@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@LEE4965633@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@LEE4965633@DW@0|0|0|0@DW@margin-left@DW@1px@DX@genericSetNodeStyle@DW@LEE4965633@DW@0|0|0|0@DW@margin-right@DW@1px@DX@genericRemoveNodeStyle@DW@LEE4965633@DW@0|0|0|0@DW@width@DX@genericSetNodeStyle@DW@RWU4965654@DW@0|0@DW@width@DW@118px@DX@genericSetNodeStyle@DW@RWU4965654@DW@0|0@DW@margin-left@DW@-59px@DX@genericSetNodeStyle@DW@RWU4965654@DW@0|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@RWU4965654@DW@0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@RWU4965654@DW@0|0@DW@height@DW@58px@DX@genericSetNodeStyle@DW@RWU4965654@DW@0|0@DW@margin-top@DW@-29px@DX@genericSetNodeStyle@DW@RWU4965654@DW@0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@RWU4965654@DW@0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@RWU4965654@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@RWU4965654@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@RWU4965654@DW@0|0|0@DW@height@DW@58px@DX@genericSetNodeStyle@DW@RWU4965654@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@RWU4965654@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@RWU4965654@DW@0|0|0@DW@width@DW@118px@DX@genericSetNodeStyle@DW@RWU4965654@DW@0|0|0|0@DW@height@DW@40px@DX@genericSetNodeStyle@DW@RWU4965654@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@RWU4965654@DW@0|0|0|0@DW@margin-top@DW@-13px@DX@genericRemoveNodeStyle@DW@RWU4965654@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@RWU4965654@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@RWU4965654@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@RWU4965654@DW@0|0|0|0@DW@margin-left@DW@2px@DX@genericSetNodeStyle@DW@RWU4965654@DW@0|0|0|0@DW@margin-right@DW@16px@DX@genericRemoveNodeStyle@DW@RWU4965654@DW@0|0|0|0@DW@width@DX@setStyle@DW@BHQ4965633@DW@padding-top@DW@0px@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0@DW@right@DW@0@DX@genericRemoveNodeStyle@DW@WQI4965633@DW@0|0@DW@margin-left@DX@genericRemoveNodeStyle@DW@WQI4965633@DW@0|0@DW@width@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@WQI4965633@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@WQI4965633@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@WQI4965633@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|0@DW@height@DW@0px@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|0@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@WQI4965633@DW@0|0|0@DW@width@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|0|0@DW@height@DW@0px@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|0|0@DW@margin-top@DW@0px@DX@genericRemoveNodeStyle@DW@WQI4965633@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@WQI4965633@DW@0|0|0|0@DW@width@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|1@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@WQI4965633@DW@0|0|1@DW@bottom@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|1@DW@height@DW@1px@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|1@DW@left@DW@0px@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|1@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@WQI4965633@DW@0|0|1@DW@width@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|1|0@DW@height@DW@1px@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|1|0@DW@top@DW@49.999%@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|1|0@DW@margin-top@DW@0px@DX@genericRemoveNodeStyle@DW@WQI4965633@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|1|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|1|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|1|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|1|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@WQI4965633@DW@0|0|1|0@DW@width@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|2@DW@top@DW@1px@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|2@DW@bottom@DW@1px@DX@genericRemoveNodeStyle@DW@WQI4965633@DW@0|0|2@DW@height@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|2@DW@left@DW@0px@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|2@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@WQI4965633@DW@0|0|2@DW@width@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|2|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|2|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|2|0@DW@margin-top@DW@0px@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|2|0@DW@margin-bottom@DW@0px@DX@genericRemoveNodeStyle@DW@WQI4965633@DW@0|0|2|0@DW@height@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|2|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|2|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|2|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|2|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@WQI4965633@DW@0|0|2|0@DW@width@DX@genericRemoveNodeStyle@DW@WQI4965633@DW@0|0|3@DW@top@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|3@DW@bottom@DW@0px@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|3@DW@height@DW@1px@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|3@DW@left@DW@0px@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|3@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@WQI4965633@DW@0|0|3@DW@width@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|3|0@DW@height@DW@1px@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|3|0@DW@top@DW@49.999%@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|3|0@DW@margin-top@DW@0px@DX@genericRemoveNodeStyle@DW@WQI4965633@DW@0|0|3|0@DW@bottom@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|3|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|3|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|3|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|3|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@WQI4965633@DW@0|0|3|0@DW@width@DX@genericRemoveNodeStyle@DW@WQI4965633@DW@0|0|4@DW@top@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|4@DW@bottom@DW@0px@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|4@DW@height@DW@0px@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|4@DW@left@DW@0px@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|4@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@WQI4965633@DW@0|0|4@DW@width@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|4|0@DW@height@DW@0px@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|4|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|4|0@DW@margin-top@DW@0px@DX@genericRemoveNodeStyle@DW@WQI4965633@DW@0|0|4|0@DW@top@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|4|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|4|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|4|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@WQI4965633@DW@0|0|4|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@WQI4965633@DW@0|0|4|0@DW@width@DX@genericSetNodeStyle@DW@RMD4965633@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@RMD4965633@DW@0|0@DW@right@DW@0@DX@genericRemoveNodeStyle@DW@RMD4965633@DW@0|0@DW@margin-left@DX@genericRemoveNodeStyle@DW@RMD4965633@DW@0|0@DW@width@DX@genericSetNodeStyle@DW@RMD4965633@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@RMD4965633@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@RMD4965633@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@RMD4965633@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@RMD4965633@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@RMD4965633@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@RMD4965633@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@RMD4965633@DW@0|0|0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@RMD4965633@DW@0|0|0@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@RMD4965633@DW@0|0|0@DW@width@DX@genericSetNodeStyle@DW@RMD4965633@DW@0|0|0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@RMD4965633@DW@0|0|0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@RMD4965633@DW@0|0|0|0@DW@margin-top@DW@1px@DX@genericSetNodeStyle@DW@RMD4965633@DW@0|0|0|0@DW@margin-bottom@DW@1px@DX@genericRemoveNodeStyle@DW@RMD4965633@DW@0|0|0|0@DW@height@DX@genericSetNodeStyle@DW@RMD4965633@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@RMD4965633@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@RMD4965633@DW@0|0|0|0@DW@margin-left@DW@1px@DX@genericSetNodeStyle@DW@RMD4965633@DW@0|0|0|0@DW@margin-right@DW@1px@DX@genericRemoveNodeStyle@DW@RMD4965633@DW@0|0|0|0@DW@width@DX@setStyle@DW@KMT4965892@DW@padding-top@DW@6px@DX@setStyle@DW@LBE4965892@DW@padding-top@DW@6px@DX@setStyle@DW@FCX4965892@DW@padding-top@DW@6px@DX@setStyle@DW@SLM4965892@DW@padding-top@DW@6px@DX@setStyle@DW@JCF4965892@DW@padding-top@DW@5px@DX@genericSetNodeStyle@DW@NAM4966676@DW@0|0@DW@width@DW@420px@DX@genericSetNodeStyle@DW@NAM4966676@DW@0|0@DW@margin-left@DW@-210px@DX@genericSetNodeStyle@DW@NAM4966676@DW@0|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@NAM4966676@DW@0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@NAM4966676@DW@0|0@DW@height@DW@24px@DX@genericSetNodeStyle@DW@NAM4966676@DW@0|0@DW@margin-top@DW@-12px@DX@genericSetNodeStyle@DW@NAM4966676@DW@0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@NAM4966676@DW@0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@NAM4966676@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@NAM4966676@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@NAM4966676@DW@0|0|0@DW@height@DW@24px@DX@genericSetNodeStyle@DW@NAM4966676@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@NAM4966676@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@NAM4966676@DW@0|0|0@DW@width@DW@75px@DX@genericSetNodeStyle@DW@NAM4966676@DW@0|0|0|0@DW@height@DW@24px@DX@genericSetNodeStyle@DW@NAM4966676@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@NAM4966676@DW@0|0|0|0@DW@margin-top@DW@-12px@DX@genericRemoveNodeStyle@DW@NAM4966676@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@NAM4966676@DW@0|0|0|0@DW@width@DW@75px@DX@genericSetNodeStyle@DW@NAM4966676@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@NAM4966676@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericRemoveNodeStyle@DW@NAM4966676@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@NAM4966676@DW@0|0|1@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@NAM4966676@DW@0|0|1@DW@bottom@DX@genericSetNodeStyle@DW@NAM4966676@DW@0|0|1@DW@height@DW@24px@DX@genericSetNodeStyle@DW@NAM4966676@DW@0|0|1@DW@left@DW@75px@DX@genericRemoveNodeStyle@DW@NAM4966676@DW@0|0|1@DW@right@DX@genericSetNodeStyle@DW@NAM4966676@DW@0|0|1@DW@width@DW@155px@DX@genericSetNodeStyle@DW@NAM4966676@DW@0|0|1|0@DW@height@DW@24px@DX@genericSetNodeStyle@DW@NAM4966676@DW@0|0|1|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@NAM4966676@DW@0|0|1|0@DW@margin-top@DW@-12px@DX@genericRemoveNodeStyle@DW@NAM4966676@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@NAM4966676@DW@0|0|1|0@DW@width@DW@155px@DX@genericSetNodeStyle@DW@NAM4966676@DW@0|0|1|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@NAM4966676@DW@0|0|1|0@DW@margin-left@DW@0px@DX@genericRemoveNodeStyle@DW@NAM4966676@DW@0|0|1|0@DW@right@DX@genericSetNodeStyle@DW@NAM4966676@DW@0|0|2@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@NAM4966676@DW@0|0|2@DW@bottom@DX@genericSetNodeStyle@DW@NAM4966676@DW@0|0|2@DW@height@DW@24px@DX@genericSetNodeStyle@DW@NAM4966676@DW@0|0|2@DW@left@DW@230px@DX@genericRemoveNodeStyle@DW@NAM4966676@DW@0|0|2@DW@right@DX@genericSetNodeStyle@DW@NAM4966676@DW@0|0|2@DW@width@DW@51px@DX@genericSetNodeStyle@DW@NAM4966676@DW@0|0|2|0@DW@height@DW@24px@DX@genericSetNodeStyle@DW@NAM4966676@DW@0|0|2|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@NAM4966676@DW@0|0|2|0@DW@margin-top@DW@-12px@DX@genericRemoveNodeStyle@DW@NAM4966676@DW@0|0|2|0@DW@bottom@DX@genericSetNodeStyle@DW@NAM4966676@DW@0|0|2|0@DW@width@DW@51px@DX@genericSetNodeStyle@DW@NAM4966676@DW@0|0|2|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@NAM4966676@DW@0|0|2|0@DW@margin-left@DW@0px@DX@genericRemoveNodeStyle@DW@NAM4966676@DW@0|0|2|0@DW@right@DX@genericSetNodeStyle@DW@NAM4966676@DW@0|0|3@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@NAM4966676@DW@0|0|3@DW@bottom@DX@genericSetNodeStyle@DW@NAM4966676@DW@0|0|3@DW@height@DW@24px@DX@genericSetNodeStyle@DW@NAM4966676@DW@0|0|3@DW@left@DW@281px@DX@genericRemoveNodeStyle@DW@NAM4966676@DW@0|0|3@DW@right@DX@genericSetNodeStyle@DW@NAM4966676@DW@0|0|3@DW@width@DW@102px@DX@genericSetNodeStyle@DW@NAM4966676@DW@0|0|3|0@DW@height@DW@24px@DX@genericSetNodeStyle@DW@NAM4966676@DW@0|0|3|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@NAM4966676@DW@0|0|3|0@DW@margin-top@DW@-12px@DX@genericRemoveNodeStyle@DW@NAM4966676@DW@0|0|3|0@DW@bottom@DX@genericSetNodeStyle@DW@NAM4966676@DW@0|0|3|0@DW@width@DW@102px@DX@genericSetNodeStyle@DW@NAM4966676@DW@0|0|3|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@NAM4966676@DW@0|0|3|0@DW@margin-left@DW@0px@DX@genericRemoveNodeStyle@DW@NAM4966676@DW@0|0|3|0@DW@right@DX@genericSetNodeStyle@DW@NAM4966676@DW@0|0|4@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@NAM4966676@DW@0|0|4@DW@bottom@DX@genericSetNodeStyle@DW@NAM4966676@DW@0|0|4@DW@height@DW@24px@DX@genericSetNodeStyle@DW@NAM4966676@DW@0|0|4@DW@left@DW@383px@DX@genericRemoveNodeStyle@DW@NAM4966676@DW@0|0|4@DW@right@DX@genericSetNodeStyle@DW@NAM4966676@DW@0|0|4@DW@width@DW@37px@DX@genericSetNodeStyle@DW@NAM4966676@DW@0|0|4|0@DW@height@DW@24px@DX@genericSetNodeStyle@DW@NAM4966676@DW@0|0|4|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@NAM4966676@DW@0|0|4|0@DW@margin-top@DW@-12px@DX@genericRemoveNodeStyle@DW@NAM4966676@DW@0|0|4|0@DW@bottom@DX@genericSetNodeStyle@DW@NAM4966676@DW@0|0|4|0@DW@width@DW@37px@DX@genericSetNodeStyle@DW@NAM4966676@DW@0|0|4|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@NAM4966676@DW@0|0|4|0@DW@margin-left@DW@0px@DX@genericRemoveNodeStyle@DW@NAM4966676@DW@0|0|4|0@DW@right@DX@genericSetNodeStyle@DW@YIP4965875@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@YIP4965875@DW@0|0@DW@right@DW@0@DX@genericRemoveNodeStyle@DW@YIP4965875@DW@0|0@DW@margin-left@DX@genericRemoveNodeStyle@DW@YIP4965875@DW@0|0@DW@width@DX@genericSetNodeStyle@DW@YIP4965875@DW@0|0@DW@height@DW@24px@DX@genericRemoveNodeStyle@DW@YIP4965875@DW@0|0@DW@bottom@DX@genericSetNodeStyle@DW@YIP4965875@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@YIP4965875@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@YIP4965875@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@YIP4965875@DW@0|0|0@DW@height@DW@24px@DX@genericSetNodeStyle@DW@YIP4965875@DW@0|0|0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@YIP4965875@DW@0|0|0@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@YIP4965875@DW@0|0|0@DW@width@DX@genericSetNodeStyle@DW@YIP4965875@DW@0|0|0|0@DW@height@DW@24px@DX@genericSetNodeStyle@DW@YIP4965875@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@YIP4965875@DW@0|0|0|0@DW@margin-top@DW@-12px@DX@genericRemoveNodeStyle@DW@YIP4965875@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@YIP4965875@DW@0|0|0|0@DW@width@DW@420px@DX@genericSetNodeStyle@DW@YIP4965875@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@YIP4965875@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericRemoveNodeStyle@DW@YIP4965875@DW@0|0|0|0@DW@left@DX@genericSetNodeStyle@DW@WLV4965875@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@WLV4965875@DW@0|0@DW@right@DW@0@DX@genericRemoveNodeStyle@DW@WLV4965875@DW@0|0@DW@margin-left@DX@genericRemoveNodeStyle@DW@WLV4965875@DW@0|0@DW@width@DX@genericSetNodeStyle@DW@WLV4965875@DW@0|0@DW@height@DW@24px@DX@genericSetNodeStyle@DW@WLV4965875@DW@0|0@DW@margin-top@DW@-12px@DX@genericSetNodeStyle@DW@WLV4965875@DW@0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@WLV4965875@DW@0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@WLV4965875@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@WLV4965875@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@WLV4965875@DW@0|0|0@DW@height@DW@24px@DX@genericSetNodeStyle@DW@WLV4965875@DW@0|0|0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@WLV4965875@DW@0|0|0@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@WLV4965875@DW@0|0|0@DW@width@DX@genericSetNodeStyle@DW@WLV4965875@DW@0|0|0|0@DW@height@DW@24px@DX@genericSetNodeStyle@DW@WLV4965875@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@WLV4965875@DW@0|0|0|0@DW@margin-top@DW@-12px@DX@genericRemoveNodeStyle@DW@WLV4965875@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@WLV4965875@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@WLV4965875@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@WLV4965875@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@WLV4965875@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@WLV4965875@DW@0|0|0|0@DW@width@DX@evaluateJavascript@DW@dwFrameworkMeasureTextSize('Open Sans,Segoe UI,Verdana,Tahoma,Arial,sans-serif,Arial Unicode MS,Helvetica,Lucida Grande,Geneva,Sans-Serif', '10px', 'normal', 'normal', ['7A924D7A367A489B9B7517AFAA3E2BDA', 'Terms\\u00A0and\\u00A0Conditions\\u00A0of\\u00A0Use\\u00A0|', '4BD51939C3544986924D0DC077222567', 'Right\\u00A0of\\u00A0Withdrawal', '98DF0B858FEE47E8A1BDB7C11F0EF7A4', 'Privacy\\u00A0|', '7CD92CD4877944A1B286A106CA4EE8FF', 'Legal\\u00A0notice\\u00A0|']);@DX@evaluateJavascript@DW@dwFrameworkSendTextSizes('TWM4965563', 'TWM4965563');@DX@setChildThreadCount@DW@2"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": -1,
          "_transferSize": 22827,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:12.200Z",
        "time": 113.65299997851253,
        "timings": {
          "blocked": 1.4770000327378512,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0.4179999999999999,
          "wait": 110.55599998996406,
          "receive": 1.2019999558106065,
          "_blocked_queueing": 0.6770000327378511,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_connectionId": "1726423",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "script",
          "stack": {
            "callFrames": [
              {
                "functionName": "dwAjaxToServer",
                "scriptId": "117",
                "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                "lineNumber": 16016,
                "columnNumber": 12
              },
              {
                "functionName": "dwAjaxSendUpdates",
                "scriptId": "117",
                "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                "lineNumber": 15812,
                "columnNumber": 8
              },
              {
                "functionName": "dwAjaxDwrFinished",
                "scriptId": "117",
                "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                "lineNumber": 16040,
                "columnNumber": 4
              },
              {
                "functionName": "xmlHttp.onreadystatechange",
                "scriptId": "117",
                "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                "lineNumber": 16002,
                "columnNumber": 16
              }
            ],
            "parent": {
              "description": "XMLHttpRequest.send",
              "callFrames": [
                {
                  "functionName": "dwAjaxToServer",
                  "scriptId": "117",
                  "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                  "lineNumber": 16016,
                  "columnNumber": 12
                },
                {
                  "functionName": "dwAjaxSendUpdates",
                  "scriptId": "117",
                  "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                  "lineNumber": 15812,
                  "columnNumber": 8
                },
                {
                  "functionName": "dwAjaxDwrFinished",
                  "scriptId": "117",
                  "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                  "lineNumber": 16040,
                  "columnNumber": 4
                },
                {
                  "functionName": "xmlHttp.onreadystatechange",
                  "scriptId": "117",
                  "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                  "lineNumber": 16002,
                  "columnNumber": 16
                }
              ],
              "parent": {
                "description": "XMLHttpRequest.send",
                "callFrames": [
                  {
                    "functionName": "dwAjaxToServer",
                    "scriptId": "117",
                    "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                    "lineNumber": 16016,
                    "columnNumber": 12
                  },
                  {
                    "functionName": "dwAjaxSendUpdates",
                    "scriptId": "117",
                    "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                    "lineNumber": 15812,
                    "columnNumber": 8
                  },
                  {
                    "functionName": "dwAjaxAddUpdate",
                    "scriptId": "117",
                    "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                    "lineNumber": 15751,
                    "columnNumber": 8
                  },
                  {
                    "functionName": "dwAjaxDefaultOnResize",
                    "scriptId": "117",
                    "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                    "lineNumber": 17548,
                    "columnNumber": 4
                  },
                  {
                    "functionName": "DwResizeRegistry.notifyControls",
                    "scriptId": "117",
                    "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                    "lineNumber": 13847,
                    "columnNumber": 12
                  },
                  {
                    "functionName": "DwResizeRegistry.updateSizes",
                    "scriptId": "117",
                    "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                    "lineNumber": 13789,
                    "columnNumber": 13
                  },
                  {
                    "functionName": "dwFrameworkInitFrameworkFinished",
                    "scriptId": "117",
                    "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                    "lineNumber": 7290,
                    "columnNumber": 34
                  },
                  {
                    "functionName": "init",
                    "scriptId": "122",
                    "url": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513",
                    "lineNumber": 71,
                    "columnNumber": 2272
                  },
                  {
                    "functionName": "onload",
                    "scriptId": "124",
                    "url": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513#2VF2D59BB6A19D241BF39AB8ED9782EC2676FB7D71DEA3F1B037E8A2D71F8FA91ED584BD081D6809030379CF8994891F65A8986CB38788501DB2F64C48C2D48691EC16B9477F538F011A91C9AA4E9AFEE315C79723E5AA1EB16B15031488FA743A690E2C31409293DC460553BC507C7BD94F7BF98B910BA76F04056FEF1A7BDC375B3BE8AE75D4A926AFE49D7762A6E60476BEBC713FA7FB2B155EB5CCD51A90D291C6798FCFE55699A76410CDE3B0446A5B504D3A8DCABCDDFDC43E28D86EDC81E6B7BFBA9C17998722AD7DC364F9B360B683AAF83000B8EBD51BD302897629C3579B0F4749890DFAEB2362C869E392B5E3FAADBE2D43BCFBC4C3632980B4B3D178D71AEF2EDC4AC0A207E5B628656549B3046DEBFB63331888B0C66897C62E02F0B82D220F96B06850C9AC59B34A7068454EB9B217DACCF224AF08DC573CEF013D5A7451FCDAFD827D8468EB71307DB9C421BE5AB56DD2CE6D2BAE5FFAD443C040E219C275338272C421BE5AB56DD2CE4EF98D6992C4A806A407D72CC44AD536F310827032D1AC056F89419881BF0DD5FCA12A0C1A8645C27C84DE9E0758A61631D52F27C125C1962BEB5B1C502E63A0BD6FF56630359A02627BDDDF793428EB2FA9EF932288B6B1EDF8A369FE8EE7F897DB9E3E3C84DD434F60686263DBEFD8FCCFCDAA59EAFC214F8171A05960530A9E5ABC51215E170F97DB9E3E3C84DD43DEC89585795B3874396402DD57C617A3C55FAE20F8C83C126638D24CBBC9DDDC8C8FA8D1298C97B9BBB92FB6BF271FB48345DDE94A571D0203AF5EEE5F1F2504DB148DE2EFD18A5668F70C371CE81BC89B37ABAF25FA84DACBA72043D96AEA4F298899DF7BA9DE229033D0AC10369C34D8502B5D38A884306870A18576B8D81AEFED8CAFCAE38FB38CDCE50946CE89B85A3E170EFEED9236091324AA21FE5C69BFD3C9875BD8C8EDED07AD10AEF4D84EEA4B9B45BFB90963B7D3C6C577B0F69F905385ABE9EDFFA53913940B31BC4622F515E8079FFB2D51BD6FF56630359A02627BDDDF793428EB2FA9EF932288B6B1EDF8A369FE8EE7F897DB9E3E3C84DD434F60686263DBEFD8FCCFCDAA59EAFC214F8171A05960530A9E5ABC51215E170F97DB9E3E3C84DD43DEC89585795B387440FD0D31E517DED4D161239C4F766D2711E3BB35041F1DDA7CF0863DB9386F606E08741D82FFD013293CC950248C0832FD04E7D3A07AD7B057EC30D755D283A4F515E8079FFB2D513D641BC2AF619F99C2F82A5CD507A9B60068C075906E849BA93A7B904DEB5A243B82214FFADAC952DD79BC627DD9DA3754FF0BE055B41B169E69002C06B4DE79F6C7B0DFBD3A0F522E65D7D9029BAB57CA12C1989BD261A69E69002C06B4DE79C7DC379705A4A84B6638D24CBBC9DDDC20B327CD29F50D15E4AD0A914CE23B089F436871D356837441BEC24302DBDBEC90644A227A6BC2D79DD0FB0244CDB5D164AFEE39E460DE8BE26433895B733653B9EA7E0818E6E95D41C8185567494EE8A5DD1D3D275250FD9A11E3A038EC5B42E9233C1D71C6391368F8A064E4615E43B811320325352C9D7B0496E262C373D04BE9E084FF8E9A3F2E65D7D9029BAB57B5CE2E7DCF0EAE70274DA4EDC454021AAB47E7D7FED1AFAB1FC721FCFD895E4094141E1AD049AA3622BF63BEA0373671EC16B9477F538F011A91C9AA4E9AFEE346D2AB2727781C74481117D634D964C50381183B796E17F213DA5CF05D8352EA7C2C0FF9D1BA7E865443427661C8AD65556FD0C06B132190C1E51CF9D83BACA12D04FBEDDEE8AF2AF6B3D33534177841A0CA7DC92DFEE22317138B4EC17ABBEA0381183B796E17F213DA5CF05D8352EA04056FEF1A7BDC378767B1590C24642445D85C35CE229B547E56B897C73DE385115B9CAB0EFDD59AEE3351CA6A1D79B6440232ECD2F139DBAB47E7D7FED1AFAB1FC721FCFD895E4076B5E6FD416F51F99AF8A113450A88512654A5EFA96698B9FE795E3125D4E185E2262FA8F088B802ACDB74B330B326A93FC34E72FDF43319A016572D59868882154FBE04B0A192C40BC3C01ADFBA2D0FFFF5161B05317F677366F94870710960",
                    "lineNumber": 71,
                    "columnNumber": 3699
                  }
                ]
              }
            }
          }
        },
        "_priority": "High",
        "_resourceType": "xhr",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "POST",
          "url": "https://ekat.festool.de/ekat/ajax",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": ":authority",
              "value": "ekat.festool.de"
            },
            {
              "name": ":method",
              "value": "POST"
            },
            {
              "name": ":path",
              "value": "/ekat/ajax"
            },
            {
              "name": ":scheme",
              "value": "https"
            },
            {
              "name": "accept",
              "value": "*/*"
            },
            {
              "name": "accept-encoding",
              "value": "gzip, deflate, br, zstd"
            },
            {
              "name": "accept-language",
              "value": "en-GB,en-US;q=0.9,en;q=0.8"
            },
            {
              "name": "cache-control",
              "value": "no-cache,no-store,must-revalidate,post-check=0,pre-check=0"
            },
            {
              "name": "content-length",
              "value": "3831"
            },
            {
              "name": "content-type",
              "value": "text/plain; charset=UTF-8"
            },
            {
              "name": "expires",
              "value": "0"
            },
            {
              "name": "origin",
              "value": "https://ekat.festool.de"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "pragma",
              "value": "no-cache"
            },
            {
              "name": "priority",
              "value": "u=1, i"
            },
            {
              "name": "referer",
              "value": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            },
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "sec-fetch-dest",
              "value": "empty"
            },
            {
              "name": "sec-fetch-mode",
              "value": "cors"
            },
            {
              "name": "sec-fetch-site",
              "value": "same-origin"
            },
            {
              "name": "user-agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            }
          ],
          "queryString": [],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 3831,
          "postData": {
            "mimeType": "text/plain; charset=UTF-8",
            "text": "currentBrowserRootWindow@DW@TWM4965563@DW@1388@DW@1140@DX@TWM4965563@DW@TWM4965563@DW@__custom_systemmeasuretextsize@DW@width0=143@DWSUB@height0=15@DWSUB@elemGuid0=7A924D7A367A489B9B7517AFAA3E2BDA@DWSUB@width1=92@DWSUB@height1=15@DWSUB@elemGuid1=4BD51939C3544986924D0DC077222567@DWSUB@width2=41@DWSUB@height2=15@DWSUB@elemGuid2=98DF0B858FEE47E8A1BDB7C11F0EF7A4@DWSUB@width3=64@DWSUB@height3=15@DWSUB@elemGuid3=7CD92CD4877944A1B286A106CA4EE8FF@DW@@DX@RNT4965681@DW@RNT4965681@DW@onresizeEvent@DW@newWidth=140@DWSUB@newHeight=658@DWSUB@relX=0@DWSUB@relY=0@DWSUB@absX=415@DWSUB@absY=73@DWSUB@newWidth=140@DWSUB@newHeight=658@DWSUB@hasVerticalOverflow=false@DWSUB@hasHorizontalOverflow=false@DX@RFB4965940@DW@RFB4965940@DW@onresizeEvent@DW@newWidth=120@DWSUB@newHeight=40@DWSUB@relX=0@DWSUB@relY=0@DWSUB@absX=425@DWSUB@absY=691@DWSUB@newWidth=120@DWSUB@newHeight=40@DWSUB@hasVerticalOverflow=false@DWSUB@hasHorizontalOverflow=false@DX@LAC4965940@DW@LAC4965940@DW@onresizeEvent@DW@newWidth=614@DWSUB@newHeight=687@DWSUB@relX=0@DWSUB@relY=0@DWSUB@absX=415@DWSUB@absY=73@DWSUB@newWidth=614@DWSUB@newHeight=687@DWSUB@hasVerticalOverflow=false@DWSUB@hasHorizontalOverflow=false@DX@HSX4965633@DW@HSX4965633@DW@onresizeEvent@DW@newWidth=616@DWSUB@newHeight=689@DWSUB@relX=0@DWSUB@relY=0@DWSUB@absX=414@DWSUB@absY=72@DWSUB@newWidth=616@DWSUB@newHeight=689@DWSUB@hasVerticalOverflow=false@DWSUB@hasHorizontalOverflow=false@DX@MWJ4965656@DW@MWJ4965656@DW@onresizeEvent@DW@newWidth=614@DWSUB@newHeight=284@DWSUB@relX=0@DWSUB@relY=51@DWSUB@absX=415@DWSUB@absY=830@DWSUB@newWidth=612@DWSUB@newHeight=282@DWSUB@hasVerticalOverflow=true@DWSUB@hasHorizontalOverflow=false@DX@IAP4965656@DW@IAP4965656@DW@onresizeEvent@DW@newWidth=614@DWSUB@newHeight=51@DWSUB@relX=0@DWSUB@relY=0@DWSUB@absX=415@DWSUB@absY=779@DWSUB@newWidth=614@DWSUB@newHeight=51@DWSUB@hasVerticalOverflow=false@DWSUB@hasHorizontalOverflow=false@DX@SPL4965656@DW@SPL4965656@DW@onresizeEvent@DW@newWidth=614@DWSUB@newHeight=335@DWSUB@relX=0@DWSUB@relY=0@DWSUB@absX=415@DWSUB@absY=779@DWSUB@newWidth=614@DWSUB@newHeight=335@DWSUB@hasVerticalOverflow=false@DWSUB@hasHorizontalOverflow=false@DX@NMU4965620@DW@NMU4965620@DW@onresizeEvent@DW@newWidth=614@DWSUB@newHeight=335@DWSUB@relX=0@DWSUB@relY=0@DWSUB@absX=415@DWSUB@absY=779@DWSUB@newWidth=614@DWSUB@newHeight=335@DWSUB@hasVerticalOverflow=false@DWSUB@hasHorizontalOverflow=false@DX@UXU4965633@DW@UXU4965633@DW@onresizeEvent@DW@newWidth=92@DWSUB@newHeight=48@DWSUB@relX=48@DWSUB@relY=0@DWSUB@absX=463@DWSUB@absY=779@DWSUB@newWidth=92@DWSUB@newHeight=48@DWSUB@hasVerticalOverflow=false@DWSUB@hasHorizontalOverflow=false@DX@HMO4965633@DW@HMO4965633@DW@onresizeEvent@DW@newWidth=616@DWSUB@newHeight=339@DWSUB@relX=0@DWSUB@relY=705@DWSUB@absX=414@DWSUB@absY=777@DWSUB@newWidth=616@DWSUB@newHeight=339@DWSUB@hasVerticalOverflow=false@DWSUB@hasHorizontalOverflow=false@DX@LSK4965620@DW@LSK4965620@DW@onresizeEvent@DW@newWidth=616@DWSUB@newHeight=1044@DWSUB@relX=0@DWSUB@relY=48@DWSUB@absX=414@DWSUB@absY=72@DWSUB@newWidth=616@DWSUB@newHeight=1044@DWSUB@hasVerticalOverflow=false@DWSUB@hasHorizontalOverflow=false@DX@GYM4965654@DW@GYM4965654@DW@onresizeEvent@DW@newWidth=316@DWSUB@newHeight=954@DWSUB@relX=0@DWSUB@relY=0@DWSUB@absX=1047@DWSUB@absY=90@DWSUB@newWidth=316@DWSUB@newHeight=954@DWSUB@hasVerticalOverflow=false@DWSUB@hasHorizontalOverflow=false@DX@YAQ4965633@DW@YAQ4965633@DW@onresizeEvent@DW@newWidth=318@DWSUB@newHeight=1092@DWSUB@relX=632@DWSUB@relY=0@DWSUB@absX=1046@DWSUB@absY=24@DWSUB@newWidth=318@DWSUB@newHeight=1092@DWSUB@hasVerticalOverflow=false@DWSUB@hasHorizontalOverflow=false@DX@YIP4965875@DW@YIP4965875@DW@onresizeEvent@DW@newWidth=1356@DWSUB@newHeight=24@DWSUB@relX=4@DWSUB@relY=0@DWSUB@absX=4@DWSUB@absY=1116@DWSUB@newWidth=1356@DWSUB@newHeight=24@DWSUB@hasVerticalOverflow=false@DWSUB@hasHorizontalOverflow=false"
          }
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://ekat.festool.de"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "cache-control",
              "value": "no-cache,no-store,must-revalidate,post-check=0,pre-check=0"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "content-length",
              "value": "18688"
            },
            {
              "name": "content-type",
              "value": "text/html;charset=UTF-8"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 09:09:51 GMT"
            },
            {
              "name": "expires",
              "value": "Thu, 01 Jan 1970 00:00:00 GMT"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "pragma",
              "value": "no-cache"
            },
            {
              "name": "vary",
              "value": "Origin"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "x-robots-tag",
              "value": "noindex"
            }
          ],
          "cookies": [],
          "content": {
            "size": 338830,
            "mimeType": "text/html",
            "text": "evaluateJavascript@DW@dwImageViewerScrollResize('RNT4965681', true);@DX@genericRemoveNode@DW@RFB4965940@DW@0|0@DW@2@DX@genericRemoveNode@DW@RFB4965940@DW@0|0@DW@1@DX@genericRemoveNode@DW@RFB4965940@DW@0|0@DW@0@DX@genericInsertNode@DW@RFB4965940@DW@0|0@DW@0@DW@<div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:40px;text-align:left;height:40px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-20px;right:0;height:40px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><button style=\"cursor:pointer;padding-top:0px;max-height:40px;color:#000000;padding-left:0px;padding-bottom:0px;border-color:transparent;min-height:40px;background-color:transparent;max-width:40px;width:100%;border-width:0px;border-style:solid;text-align:center;padding-right:0px;height:100%;min-width:40px\" type=\"button\" name=\"UON4965940\" class=\"guibutton_enabled brightenOnHoverForGrayComponents brightenAndRemoveShadowOnClick brightenAndRemoveShadowAtInnerImageOnClick cursor_pointer\" id=\"UON4965940\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;JMR4965941\\&quot;&gt;Rotate drawing by 90&lt;\\/div&gt;&#39;, 250, 147, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxButtonOnClick(event, &#39;UON4965940&#39;, &#39;UON4965940&#39;, &#39;&#39;, true, true);dwFrameworkPreventDefaultBehaviour(event);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"width:16px;height:16px\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_rotate_image.png\" alt=\"\" class=\"guibutton_icon\"><span style=\"cursor:pointer;font-weight:inherit;vertical-align:middle;font-size:inherit;font-family:inherit;line-height:inherit;font-style:inherit\" id=\"UON4965940_text\" class=\"cursor_pointer\"></span></button></div></div>@DX@genericInsertNode@DW@RFB4965940@DW@0|0@DW@1@DW@<div style=\"background-color:transparent;top:0px;left:40px;vertical-align:middle;width:40px;text-align:left;height:40px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-20px;right:0;height:40px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><button style=\"cursor:pointer;padding-top:0px;max-height:40px;color:#000000;padding-left:0px;padding-bottom:0px;border-color:transparent;min-height:40px;background-color:transparent;max-width:40px;width:100%;border-width:0px;border-style:solid;text-align:center;padding-right:0px;height:100%;min-width:40px\" type=\"button\" name=\"TXW4965941\" class=\"guibutton_enabled brightenOnHoverForGrayComponents brightenAndRemoveShadowOnClick brightenAndRemoveShadowAtInnerImageOnClick cursor_pointer\" id=\"TXW4965941\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;TOJ4965941\\&quot;&gt;Disable fading of this button bar&lt;\\/div&gt;&#39;, 250, 219, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxButtonOnClick(event, &#39;TXW4965941&#39;, &#39;TXW4965941&#39;, &#39;&#39;, true, true);dwFrameworkPreventDefaultBehaviour(event);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"width:16px;height:16px\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_deactivate_fading_overlay.png\" alt=\"\" class=\"guibutton_icon\"><span style=\"cursor:pointer;font-weight:inherit;vertical-align:middle;font-size:inherit;font-family:inherit;line-height:inherit;font-style:inherit\" id=\"TXW4965941_text\" class=\"cursor_pointer\"></span></button></div></div>@DX@genericInsertNode@DW@RFB4965940@DW@0|0@DW@2@DW@<div style=\"background-color:transparent;top:0px;left:80px;vertical-align:middle;width:40px;text-align:left;height:40px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-20px;right:0;height:40px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><button style=\"cursor:pointer;padding-top:0px;max-height:40px;color:#000000;padding-left:0px;padding-bottom:0px;border-color:transparent;min-height:40px;background-color:transparent;max-width:40px;width:100%;border-width:0px;border-style:solid;text-align:center;padding-right:0px;height:100%;min-width:40px\" type=\"button\" name=\"TXI4965941\" class=\"guibutton_enabled brightenOnHoverForGrayComponents brightenAndRemoveShadowOnClick brightenAndRemoveShadowAtInnerImageOnClick cursor_pointer\" id=\"TXI4965941\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;HCV4965941\\&quot;&gt;Scale image up&lt;\\/div&gt;&#39;, 250, 107, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxButtonOnClick(event, &#39;TXI4965941&#39;, &#39;TXI4965941&#39;, &#39;&#39;, true, true);dwFrameworkPreventDefaultBehaviour(event);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"width:16px;height:16px\" src=\"WEB-RES/resource/resource?id=bi_image_6EA83BB3BFF37828FA6BF2163F5FEE05\" alt=\"\" class=\"guibutton_icon\"><span style=\"cursor:pointer;font-weight:inherit;vertical-align:middle;font-size:inherit;font-family:inherit;line-height:inherit;font-style:inherit\" id=\"TXI4965941_text\" class=\"cursor_pointer\"></span></button></div></div>@DX@genericInsertNode@DW@RFB4965940@DW@0|0@DW@3@DW@<div style=\"background-color:transparent;top:0px;left:120px;vertical-align:middle;width:40px;text-align:left;height:40px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-20px;right:0;height:40px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><button style=\"cursor:default;padding-top:0px;max-height:40px;padding-left:0px;padding-bottom:0px;border-color:transparent;min-height:40px;background-color:transparent;max-width:40px;width:100%;border-width:0px;border-style:solid;text-align:center;padding-right:0px;height:100%;min-width:40px\" type=\"button\" name=\"QCH4965941\" class=\"guibutton_disabled brightenAndRemoveShadowOnClick cursor_default\" disabled=\"disabled\" id=\"QCH4965941\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;WYX4965941\\&quot;&gt;Scale image down&lt;\\/div&gt;&#39;, 250, 126, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxButtonOnClick(event, &#39;QCH4965941&#39;, &#39;QCH4965941&#39;, &#39;&#39;, true, true);dwFrameworkPreventDefaultBehaviour(event);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"width:16px;height:16px\" src=\"WEB-RES/resource/resource?id=bi_image_8D8B172A8BDD872C4C2B297C13817F14\" alt=\"\" class=\"guibutton_icon\"><span style=\"cursor:default;font-weight:inherit;vertical-align:middle;font-size:inherit;font-family:inherit;line-height:inherit;font-style:inherit\" id=\"QCH4965941_text\" class=\"cursor_default\"></span></button></div></div>@DX@genericInsertNode@DW@RFB4965940@DW@0|0@DW@4@DW@<div style=\"background-color:transparent;top:0px;left:160px;vertical-align:middle;width:40px;text-align:left;height:40px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-20px;right:0;height:40px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><button style=\"cursor:default;padding-top:0px;max-height:40px;padding-left:0px;padding-bottom:0px;border-color:transparent;min-height:40px;background-color:transparent;max-width:40px;width:100%;border-width:0px;border-style:solid;text-align:center;padding-right:0px;height:100%;min-width:40px\" type=\"button\" name=\"TPL4965941\" class=\"guibutton_disabled brightenAndRemoveShadowOnClick cursor_default\" disabled=\"disabled\" id=\"TPL4965941\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;EXP4965941\\&quot;&gt;Adjust drawing to window width&lt;\\/div&gt;&#39;, 250, 218, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxButtonOnClick(event, &#39;TPL4965941&#39;, &#39;TPL4965941&#39;, &#39;&#39;, true, true);dwFrameworkPreventDefaultBehaviour(event);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"width:16px;height:16px\" src=\"WEB-RES/resource/resource?id=bi_image_EF98BDF38BC818590016925DE0AD1986\" alt=\"\" class=\"guibutton_icon\"><span style=\"cursor:default;font-weight:inherit;vertical-align:middle;font-size:inherit;font-family:inherit;line-height:inherit;font-style:inherit\" id=\"TPL4965941_text\" class=\"cursor_default\"></span></button></div></div>@DX@genericInsertNode@DW@RFB4965940@DW@0|0@DW@5@DW@<div style=\"background-color:transparent;top:0px;left:200px;vertical-align:middle;width:40px;text-align:left;height:40px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-20px;right:0;height:40px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><button style=\"cursor:pointer;padding-top:0px;max-height:40px;color:#000000;padding-left:0px;padding-bottom:0px;border-color:transparent;min-height:40px;background-color:transparent;max-width:40px;width:100%;border-width:0px;border-style:solid;text-align:center;padding-right:0px;height:100%;min-width:40px\" type=\"button\" name=\"EBQ4965941\" class=\"guibutton_enabled brightenOnHoverForGrayComponents brightenAndRemoveShadowOnClick brightenAndRemoveShadowAtInnerImageOnClick cursor_pointer\" id=\"EBQ4965941\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;LBI4965941\\&quot;&gt;Select section&lt;\\/div&gt;&#39;, 250, 98, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxButtonOnClick(event, &#39;EBQ4965941&#39;, &#39;EBQ4965941&#39;, &#39;&#39;, true, true);dwFrameworkPreventDefaultBehaviour(event);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"width:16px;height:16px\" src=\"WEB-RES/resource/resource?id=bi_image_D217B38C2671F0B5F327052F5618462B\" alt=\"\" class=\"guibutton_icon\"><span style=\"cursor:pointer;font-weight:inherit;vertical-align:middle;font-size:inherit;font-family:inherit;line-height:inherit;font-style:inherit\" id=\"EBQ4965941_text\" class=\"cursor_pointer\"></span></button></div></div>@DX@genericInsertNode@DW@RFB4965940@DW@0|0@DW@6@DW@<div style=\"background-color:transparent;top:0px;left:240px;vertical-align:middle;width:40px;text-align:left;height:40px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-20px;right:0;height:40px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><button style=\"cursor:pointer;padding-top:0px;max-height:40px;color:#000000;padding-left:0px;padding-bottom:0px;border-color:transparent;min-height:40px;background-color:transparent;max-width:40px;width:100%;border-width:0px;border-style:solid;text-align:center;padding-right:0px;height:100%;min-width:40px\" type=\"button\" name=\"AFA4965941\" class=\"guibutton_enabled brightenOnHoverForGrayComponents brightenAndRemoveShadowOnClick brightenAndRemoveShadowAtInnerImageOnClick cursor_pointer\" id=\"AFA4965941\" onmousedown=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwFrameworkDefaultClose(event);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;BOK4965941\\&quot;&gt;Print&lt;\\/div&gt;&#39;, 250, 40, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxButtonOnClick(event, &#39;AFA4965941&#39;, &#39;AFA4965941&#39;, &#39;&#39;, true, false);dwFrameworkPreventDefaultBehaviour(event);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"width:16px;height:16px\" src=\"WEB-RES/resource/resource?id=bi_image_72D0010FEC637C6EB8420C205BD1BB35\" alt=\"\" class=\"guibutton_icon\"><span style=\"cursor:pointer;font-weight:inherit;vertical-align:middle;font-size:inherit;font-family:inherit;line-height:inherit;font-style:inherit\" id=\"AFA4965941_text\" class=\"cursor_pointer\"></span></button></div></div>@DX@setStyle@DW@UON4965940@DW@background-color@DW@#dddddd@DX@removeStyle@DW@UON4965940@DW@background-image@DX@setStyle@DW@UON4965940@DW@background-color@DW@transparent@DX@removeStyle@DW@UON4965940@DW@background-image@DX@setStyle@DW@TXW4965941@DW@background-color@DW@#dddddd@DX@removeStyle@DW@TXW4965941@DW@background-image@DX@setStyle@DW@TXW4965941@DW@background-color@DW@transparent@DX@removeStyle@DW@TXW4965941@DW@background-image@DX@setStyle@DW@TXI4965941@DW@background-color@DW@#dddddd@DX@removeStyle@DW@TXI4965941@DW@background-image@DX@setStyle@DW@TXI4965941@DW@background-color@DW@transparent@DX@removeStyle@DW@TXI4965941@DW@background-image@DX@removeClass@DW@QCH4965941@DW@brightenOnHoverForGrayComponents@DX@removeClass@DW@QCH4965941@DW@brightenAndRemoveShadowAtInnerImageOnClick@DX@removeClass@DW@TPL4965941@DW@brightenOnHoverForGrayComponents@DX@removeClass@DW@TPL4965941@DW@brightenAndRemoveShadowAtInnerImageOnClick@DX@setStyle@DW@EBQ4965941@DW@background-color@DW@#dddddd@DX@removeStyle@DW@EBQ4965941@DW@background-image@DX@setStyle@DW@EBQ4965941@DW@background-color@DW@transparent@DX@removeStyle@DW@EBQ4965941@DW@background-image@DX@setStyle@DW@AFA4965941@DW@background-color@DW@#dddddd@DX@removeStyle@DW@AFA4965941@DW@background-image@DX@setStyle@DW@AFA4965941@DW@background-color@DW@transparent@DX@removeStyle@DW@AFA4965941@DW@background-image@DX@setStyle@DW@KPX4965940_layoutdiv@DW@left@DW@167px@DX@setStyle@DW@KPX4965940_layoutdiv@DW@width@DW@280px@DX@removeStyle@DW@KPX4965940_layoutdiv@DW@right@DX@setStyle@DW@KPX4965940_layoutdiv@DW@top@DW@647px@DX@setStyle@DW@KPX4965940_layoutdiv@DW@height@DW@40px@DX@removeStyle@DW@KPX4965940_layoutdiv@DW@bottom@DX@setStyle@DW@KPX4965940_layoutdiv@DW@z-index@DW@800@DX@setStyle@DW@QII4965958_layoutdiv@DW@left@DW@0px@DX@setStyle@DW@QII4965958_layoutdiv@DW@width@DW@614px@DX@removeStyle@DW@QII4965958_layoutdiv@DW@right@DX@setStyle@DW@QII4965958_layoutdiv@DW@top@DW@647px@DX@setStyle@DW@QII4965958_layoutdiv@DW@height@DW@40px@DX@removeStyle@DW@QII4965958_layoutdiv@DW@bottom@DX@setStyle@DW@QII4965958_layoutdiv@DW@z-index@DW@799@DX@evaluateJavascript@DW@if(document.getElementById('KPX4965940') != null){document.getElementById('KPX4965940').style.visibility='hidden';document.getElementById('KPX4965940').style.opacity='0.0';document.getElementById('KPX4965940').style.transition='0s';}@DX@evaluateJavascript@DW@if(document.getElementById('QII4965958') != null){document.getElementById('QII4965958').style.visibility='hidden';document.getElementById('QII4965958').style.opacity='0.0';document.getElementById('QII4965958').style.transition='0s';}@DX@setStyle@DW@RNT4965681_layoutdiv@DW@left@DW@0px@DX@setStyle@DW@RNT4965681_layoutdiv@DW@width@DW@614px@DX@removeStyle@DW@RNT4965681_layoutdiv@DW@right@DX@setStyle@DW@RNT4965681_layoutdiv@DW@top@DW@0px@DX@setStyle@DW@RNT4965681_layoutdiv@DW@height@DW@687px@DX@removeStyle@DW@RNT4965681_layoutdiv@DW@bottom@DX@removeStyle@DW@RNT4965681_layoutdiv@DW@z-index@DX@setStyle@DW@HRT4965849_layoutdiv@DW@left@DW@76px@DX@setStyle@DW@HRT4965849_layoutdiv@DW@width@DW@34px@DX@removeStyle@DW@HRT4965849_layoutdiv@DW@right@DX@setStyle@DW@HRT4965849_layoutdiv@DW@top@DW@0@DX@setStyle@DW@HRT4965849_layoutdiv@DW@height@DW@100%@DX@removeStyle@DW@HRT4965849_layoutdiv@DW@bottom@DX@setStyle@DW@HRT4965849_layoutdiv@DW@z-index@DW@1@DX@setStyle@DW@TPC4965862_layoutdiv@DW@left@DW@566px@DX@setStyle@DW@TPC4965862_layoutdiv@DW@width@DW@46px@DX@removeStyle@DW@TPC4965862_layoutdiv@DW@right@DX@setStyle@DW@TPC4965862_layoutdiv@DW@top@DW@0@DX@setStyle@DW@TPC4965862_layoutdiv@DW@height@DW@100%@DX@removeStyle@DW@TPC4965862_layoutdiv@DW@bottom@DX@setStyle@DW@TPC4965862_layoutdiv@DW@z-index@DW@1@DX@setStyle@DW@ELK4965850_layoutdiv@DW@left@DW@76px@DX@setStyle@DW@ELK4965850_layoutdiv@DW@width@DW@34px@DX@removeStyle@DW@ELK4965850_layoutdiv@DW@right@DX@setStyle@DW@ELK4965850_layoutdiv@DW@top@DW@0@DX@setStyle@DW@ELK4965850_layoutdiv@DW@height@DW@100%@DX@removeStyle@DW@ELK4965850_layoutdiv@DW@bottom@DX@setStyle@DW@ELK4965850_layoutdiv@DW@z-index@DW@1@DX@setStyle@DW@GNV4965862_layoutdiv@DW@left@DW@566px@DX@setStyle@DW@GNV4965862_layoutdiv@DW@width@DW@46px@DX@removeStyle@DW@GNV4965862_layoutdiv@DW@right@DX@setStyle@DW@GNV4965862_layoutdiv@DW@top@DW@0@DX@setStyle@DW@GNV4965862_layoutdiv@DW@height@DW@100%@DX@removeStyle@DW@GNV4965862_layoutdiv@DW@bottom@DX@setStyle@DW@GNV4965862_layoutdiv@DW@z-index@DW@1@DX@setStyle@DW@ALA4965851_layoutdiv@DW@left@DW@76px@DX@setStyle@DW@ALA4965851_layoutdiv@DW@width@DW@34px@DX@removeStyle@DW@ALA4965851_layoutdiv@DW@right@DX@setStyle@DW@ALA4965851_layoutdiv@DW@top@DW@0@DX@setStyle@DW@ALA4965851_layoutdiv@DW@height@DW@100%@DX@removeStyle@DW@ALA4965851_layoutdiv@DW@bottom@DX@setStyle@DW@ALA4965851_layoutdiv@DW@z-index@DW@1@DX@setStyle@DW@BGF4965862_layoutdiv@DW@left@DW@566px@DX@setStyle@DW@BGF4965862_layoutdiv@DW@width@DW@46px@DX@removeStyle@DW@BGF4965862_layoutdiv@DW@right@DX@setStyle@DW@BGF4965862_layoutdiv@DW@top@DW@0@DX@setStyle@DW@BGF4965862_layoutdiv@DW@height@DW@100%@DX@removeStyle@DW@BGF4965862_layoutdiv@DW@bottom@DX@setStyle@DW@BGF4965862_layoutdiv@DW@z-index@DW@1@DX@setStyle@DW@OYW4965851_layoutdiv@DW@left@DW@76px@DX@setStyle@DW@OYW4965851_layoutdiv@DW@width@DW@34px@DX@removeStyle@DW@OYW4965851_layoutdiv@DW@right@DX@setStyle@DW@OYW4965851_layoutdiv@DW@top@DW@0@DX@setStyle@DW@OYW4965851_layoutdiv@DW@height@DW@100%@DX@removeStyle@DW@OYW4965851_layoutdiv@DW@bottom@DX@setStyle@DW@OYW4965851_layoutdiv@DW@z-index@DW@1@DX@setStyle@DW@TUG4965862_layoutdiv@DW@left@DW@566px@DX@setStyle@DW@TUG4965862_layoutdiv@DW@width@DW@46px@DX@removeStyle@DW@TUG4965862_layoutdiv@DW@right@DX@setStyle@DW@TUG4965862_layoutdiv@DW@top@DW@0@DX@setStyle@DW@TUG4965862_layoutdiv@DW@height@DW@100%@DX@removeStyle@DW@TUG4965862_layoutdiv@DW@bottom@DX@setStyle@DW@TUG4965862_layoutdiv@DW@z-index@DW@1@DX@setStyle@DW@KGJ4965852_layoutdiv@DW@left@DW@76px@DX@setStyle@DW@KGJ4965852_layoutdiv@DW@width@DW@34px@DX@removeStyle@DW@KGJ4965852_layoutdiv@DW@right@DX@setStyle@DW@KGJ4965852_layoutdiv@DW@top@DW@0@DX@setStyle@DW@KGJ4965852_layoutdiv@DW@height@DW@100%@DX@removeStyle@DW@KGJ4965852_layoutdiv@DW@bottom@DX@setStyle@DW@KGJ4965852_layoutdiv@DW@z-index@DW@1@DX@setStyle@DW@TUW4965862_layoutdiv@DW@left@DW@566px@DX@setStyle@DW@TUW4965862_layoutdiv@DW@width@DW@46px@DX@removeStyle@DW@TUW4965862_layoutdiv@DW@right@DX@setStyle@DW@TUW4965862_layoutdiv@DW@top@DW@0@DX@setStyle@DW@TUW4965862_layoutdiv@DW@height@DW@100%@DX@removeStyle@DW@TUW4965862_layoutdiv@DW@bottom@DX@setStyle@DW@TUW4965862_layoutdiv@DW@z-index@DW@1@DX@setStyle@DW@OSN4965853_layoutdiv@DW@left@DW@76px@DX@setStyle@DW@OSN4965853_layoutdiv@DW@width@DW@34px@DX@removeStyle@DW@OSN4965853_layoutdiv@DW@right@DX@setStyle@DW@OSN4965853_layoutdiv@DW@top@DW@0@DX@setStyle@DW@OSN4965853_layoutdiv@DW@height@DW@100%@DX@removeStyle@DW@OSN4965853_layoutdiv@DW@bottom@DX@setStyle@DW@OSN4965853_layoutdiv@DW@z-index@DW@1@DX@setStyle@DW@XLC4965862_layoutdiv@DW@left@DW@566px@DX@setStyle@DW@XLC4965862_layoutdiv@DW@width@DW@46px@DX@removeStyle@DW@XLC4965862_layoutdiv@DW@right@DX@setStyle@DW@XLC4965862_layoutdiv@DW@top@DW@0@DX@setStyle@DW@XLC4965862_layoutdiv@DW@height@DW@100%@DX@removeStyle@DW@XLC4965862_layoutdiv@DW@bottom@DX@setStyle@DW@XLC4965862_layoutdiv@DW@z-index@DW@1@DX@setStyle@DW@OYH4965854_layoutdiv@DW@left@DW@76px@DX@setStyle@DW@OYH4965854_layoutdiv@DW@width@DW@34px@DX@removeStyle@DW@OYH4965854_layoutdiv@DW@right@DX@setStyle@DW@OYH4965854_layoutdiv@DW@top@DW@0@DX@setStyle@DW@OYH4965854_layoutdiv@DW@height@DW@100%@DX@removeStyle@DW@OYH4965854_layoutdiv@DW@bottom@DX@setStyle@DW@OYH4965854_layoutdiv@DW@z-index@DW@1@DX@setStyle@DW@CHU4965862_layoutdiv@DW@left@DW@566px@DX@setStyle@DW@CHU4965862_layoutdiv@DW@width@DW@46px@DX@removeStyle@DW@CHU4965862_layoutdiv@DW@right@DX@setStyle@DW@CHU4965862_layoutdiv@DW@top@DW@0@DX@setStyle@DW@CHU4965862_layoutdiv@DW@height@DW@100%@DX@removeStyle@DW@CHU4965862_layoutdiv@DW@bottom@DX@setStyle@DW@CHU4965862_layoutdiv@DW@z-index@DW@1@DX@setStyle@DW@ACH4965855_layoutdiv@DW@left@DW@76px@DX@setStyle@DW@ACH4965855_layoutdiv@DW@width@DW@34px@DX@removeStyle@DW@ACH4965855_layoutdiv@DW@right@DX@setStyle@DW@ACH4965855_layoutdiv@DW@top@DW@0@DX@setStyle@DW@ACH4965855_layoutdiv@DW@height@DW@100%@DX@removeStyle@DW@ACH4965855_layoutdiv@DW@bottom@DX@setStyle@DW@ACH4965855_layoutdiv@DW@z-index@DW@1@DX@setStyle@DW@TXS4965862_layoutdiv@DW@left@DW@566px@DX@setStyle@DW@TXS4965862_layoutdiv@DW@width@DW@46px@DX@removeStyle@DW@TXS4965862_layoutdiv@DW@right@DX@setStyle@DW@TXS4965862_layoutdiv@DW@top@DW@0@DX@setStyle@DW@TXS4965862_layoutdiv@DW@height@DW@100%@DX@removeStyle@DW@TXS4965862_layoutdiv@DW@bottom@DX@setStyle@DW@TXS4965862_layoutdiv@DW@z-index@DW@1@DX@setStyle@DW@WKV4965856_layoutdiv@DW@left@DW@76px@DX@setStyle@DW@WKV4965856_layoutdiv@DW@width@DW@34px@DX@removeStyle@DW@WKV4965856_layoutdiv@DW@right@DX@setStyle@DW@WKV4965856_layoutdiv@DW@top@DW@0@DX@setStyle@DW@WKV4965856_layoutdiv@DW@height@DW@100%@DX@removeStyle@DW@WKV4965856_layoutdiv@DW@bottom@DX@setStyle@DW@WKV4965856_layoutdiv@DW@z-index@DW@1@DX@setStyle@DW@NCG4965862_layoutdiv@DW@left@DW@566px@DX@setStyle@DW@NCG4965862_layoutdiv@DW@width@DW@46px@DX@removeStyle@DW@NCG4965862_layoutdiv@DW@right@DX@setStyle@DW@NCG4965862_layoutdiv@DW@top@DW@0@DX@setStyle@DW@NCG4965862_layoutdiv@DW@height@DW@100%@DX@removeStyle@DW@NCG4965862_layoutdiv@DW@bottom@DX@setStyle@DW@NCG4965862_layoutdiv@DW@z-index@DW@1@DX@setStyle@DW@WSD4965856_layoutdiv@DW@left@DW@76px@DX@setStyle@DW@WSD4965856_layoutdiv@DW@width@DW@34px@DX@removeStyle@DW@WSD4965856_layoutdiv@DW@right@DX@setStyle@DW@WSD4965856_layoutdiv@DW@top@DW@0@DX@setStyle@DW@WSD4965856_layoutdiv@DW@height@DW@100%@DX@removeStyle@DW@WSD4965856_layoutdiv@DW@bottom@DX@setStyle@DW@WSD4965856_layoutdiv@DW@z-index@DW@1@DX@setStyle@DW@KUF4965862_layoutdiv@DW@left@DW@566px@DX@setStyle@DW@KUF4965862_layoutdiv@DW@width@DW@46px@DX@removeStyle@DW@KUF4965862_layoutdiv@DW@right@DX@setStyle@DW@KUF4965862_layoutdiv@DW@top@DW@0@DX@setStyle@DW@KUF4965862_layoutdiv@DW@height@DW@100%@DX@removeStyle@DW@KUF4965862_layoutdiv@DW@bottom@DX@setStyle@DW@KUF4965862_layoutdiv@DW@z-index@DW@1@DX@setStyle@DW@NVU4965857_layoutdiv@DW@left@DW@76px@DX@setStyle@DW@NVU4965857_layoutdiv@DW@width@DW@34px@DX@removeStyle@DW@NVU4965857_layoutdiv@DW@right@DX@setStyle@DW@NVU4965857_layoutdiv@DW@top@DW@0@DX@setStyle@DW@NVU4965857_layoutdiv@DW@height@DW@100%@DX@removeStyle@DW@NVU4965857_layoutdiv@DW@bottom@DX@setStyle@DW@NVU4965857_layoutdiv@DW@z-index@DW@1@DX@setStyle@DW@ISJ4965862_layoutdiv@DW@left@DW@566px@DX@setStyle@DW@ISJ4965862_layoutdiv@DW@width@DW@46px@DX@removeStyle@DW@ISJ4965862_layoutdiv@DW@right@DX@setStyle@DW@ISJ4965862_layoutdiv@DW@top@DW@0@DX@setStyle@DW@ISJ4965862_layoutdiv@DW@height@DW@100%@DX@removeStyle@DW@ISJ4965862_layoutdiv@DW@bottom@DX@setStyle@DW@ISJ4965862_layoutdiv@DW@z-index@DW@1@DX@setStyle@DW@OSV4965858_layoutdiv@DW@left@DW@76px@DX@setStyle@DW@OSV4965858_layoutdiv@DW@width@DW@34px@DX@removeStyle@DW@OSV4965858_layoutdiv@DW@right@DX@setStyle@DW@OSV4965858_layoutdiv@DW@top@DW@0@DX@setStyle@DW@OSV4965858_layoutdiv@DW@height@DW@100%@DX@removeStyle@DW@OSV4965858_layoutdiv@DW@bottom@DX@setStyle@DW@OSV4965858_layoutdiv@DW@z-index@DW@1@DX@setStyle@DW@HEG4965862_layoutdiv@DW@left@DW@566px@DX@setStyle@DW@HEG4965862_layoutdiv@DW@width@DW@46px@DX@removeStyle@DW@HEG4965862_layoutdiv@DW@right@DX@setStyle@DW@HEG4965862_layoutdiv@DW@top@DW@0@DX@setStyle@DW@HEG4965862_layoutdiv@DW@height@DW@100%@DX@removeStyle@DW@HEG4965862_layoutdiv@DW@bottom@DX@setStyle@DW@HEG4965862_layoutdiv@DW@z-index@DW@1@DX@setStyle@DW@XFK4965859_layoutdiv@DW@left@DW@76px@DX@setStyle@DW@XFK4965859_layoutdiv@DW@width@DW@34px@DX@removeStyle@DW@XFK4965859_layoutdiv@DW@right@DX@setStyle@DW@XFK4965859_layoutdiv@DW@top@DW@0@DX@setStyle@DW@XFK4965859_layoutdiv@DW@height@DW@100%@DX@removeStyle@DW@XFK4965859_layoutdiv@DW@bottom@DX@setStyle@DW@XFK4965859_layoutdiv@DW@z-index@DW@1@DX@setStyle@DW@OST4965862_layoutdiv@DW@left@DW@566px@DX@setStyle@DW@OST4965862_layoutdiv@DW@width@DW@46px@DX@removeStyle@DW@OST4965862_layoutdiv@DW@right@DX@setStyle@DW@OST4965862_layoutdiv@DW@top@DW@0@DX@setStyle@DW@OST4965862_layoutdiv@DW@height@DW@100%@DX@removeStyle@DW@OST4965862_layoutdiv@DW@bottom@DX@setStyle@DW@OST4965862_layoutdiv@DW@z-index@DW@1@DX@setStyle@DW@DPI4965860_layoutdiv@DW@left@DW@76px@DX@setStyle@DW@DPI4965860_layoutdiv@DW@width@DW@34px@DX@removeStyle@DW@DPI4965860_layoutdiv@DW@right@DX@setStyle@DW@DPI4965860_layoutdiv@DW@top@DW@0@DX@setStyle@DW@DPI4965860_layoutdiv@DW@height@DW@100%@DX@removeStyle@DW@DPI4965860_layoutdiv@DW@bottom@DX@setStyle@DW@DPI4965860_layoutdiv@DW@z-index@DW@1@DX@setStyle@DW@BUN4965862_layoutdiv@DW@left@DW@566px@DX@setStyle@DW@BUN4965862_layoutdiv@DW@width@DW@46px@DX@removeStyle@DW@BUN4965862_layoutdiv@DW@right@DX@setStyle@DW@BUN4965862_layoutdiv@DW@top@DW@0@DX@setStyle@DW@BUN4965862_layoutdiv@DW@height@DW@100%@DX@removeStyle@DW@BUN4965862_layoutdiv@DW@bottom@DX@setStyle@DW@BUN4965862_layoutdiv@DW@z-index@DW@1@DX@setStyle@DW@JKB4965860_layoutdiv@DW@left@DW@76px@DX@setStyle@DW@JKB4965860_layoutdiv@DW@width@DW@34px@DX@removeStyle@DW@JKB4965860_layoutdiv@DW@right@DX@setStyle@DW@JKB4965860_layoutdiv@DW@top@DW@0@DX@setStyle@DW@JKB4965860_layoutdiv@DW@height@DW@100%@DX@removeStyle@DW@JKB4965860_layoutdiv@DW@bottom@DX@setStyle@DW@JKB4965860_layoutdiv@DW@z-index@DW@1@DX@setStyle@DW@BEA4965862_layoutdiv@DW@left@DW@566px@DX@setStyle@DW@BEA4965862_layoutdiv@DW@width@DW@46px@DX@removeStyle@DW@BEA4965862_layoutdiv@DW@right@DX@setStyle@DW@BEA4965862_layoutdiv@DW@top@DW@0@DX@setStyle@DW@BEA4965862_layoutdiv@DW@height@DW@100%@DX@removeStyle@DW@BEA4965862_layoutdiv@DW@bottom@DX@setStyle@DW@BEA4965862_layoutdiv@DW@z-index@DW@1@DX@setStyle@DW@MRV4965861_layoutdiv@DW@left@DW@76px@DX@setStyle@DW@MRV4965861_layoutdiv@DW@width@DW@34px@DX@removeStyle@DW@MRV4965861_layoutdiv@DW@right@DX@setStyle@DW@MRV4965861_layoutdiv@DW@top@DW@0@DX@setStyle@DW@MRV4965861_layoutdiv@DW@height@DW@100%@DX@removeStyle@DW@MRV4965861_layoutdiv@DW@bottom@DX@setStyle@DW@MRV4965861_layoutdiv@DW@z-index@DW@1@DX@setStyle@DW@FJS4965862_layoutdiv@DW@left@DW@566px@DX@setStyle@DW@FJS4965862_layoutdiv@DW@width@DW@46px@DX@removeStyle@DW@FJS4965862_layoutdiv@DW@right@DX@setStyle@DW@FJS4965862_layoutdiv@DW@top@DW@0@DX@setStyle@DW@FJS4965862_layoutdiv@DW@height@DW@100%@DX@removeStyle@DW@FJS4965862_layoutdiv@DW@bottom@DX@setStyle@DW@FJS4965862_layoutdiv@DW@z-index@DW@1@DX@setStyle@DW@HFH4965862_layoutdiv@DW@left@DW@76px@DX@setStyle@DW@HFH4965862_layoutdiv@DW@width@DW@34px@DX@removeStyle@DW@HFH4965862_layoutdiv@DW@right@DX@setStyle@DW@HFH4965862_layoutdiv@DW@top@DW@0@DX@setStyle@DW@HFH4965862_layoutdiv@DW@height@DW@100%@DX@removeStyle@DW@HFH4965862_layoutdiv@DW@bottom@DX@setStyle@DW@HFH4965862_layoutdiv@DW@z-index@DW@1@DX@setStyle@DW@DUX4965862_layoutdiv@DW@left@DW@566px@DX@setStyle@DW@DUX4965862_layoutdiv@DW@width@DW@46px@DX@removeStyle@DW@DUX4965862_layoutdiv@DW@right@DX@setStyle@DW@DUX4965862_layoutdiv@DW@top@DW@0@DX@setStyle@DW@DUX4965862_layoutdiv@DW@height@DW@100%@DX@removeStyle@DW@DUX4965862_layoutdiv@DW@bottom@DX@setStyle@DW@DUX4965862_layoutdiv@DW@z-index@DW@1@DX@evaluateJavascript@DW@var timer = DWUTILS_FUNCTION_TIMEOUT_REGISTRY['fixedColumn']; if (timer) clearTimeout(timer); DWUTILS_FUNCTION_TIMEOUT_REGISTRY['fixedColumn'] = setTimeout(function() {dwHelperUpdateNotifyingScrollPanelColumnScrollPosition('MWJ4965656')}, 10)@DX@genericRemoveNode@DW@WQO4965656@DW@0@DW@2@DX@genericRemoveNode@DW@WQO4965656@DW@0@DW@9@DX@genericRemoveNode@DW@WQO4965656@DW@0@DW@13@DX@genericRemoveNode@DW@WQO4965656@DW@0@DW@9@DX@genericRemoveNode@DW@WQO4965656@DW@0@DW@2@DX@genericRemoveNode@DW@WQO4965656@DW@0@DW@8@DX@genericRemoveNode@DW@WQO4965656@DW@0@DW@8@DX@genericRemoveNode@DW@WQO4965656@DW@0@DW@0@DX@genericRemoveNode@DW@WQO4965656@DW@0@DW@5@DX@genericRemoveNode@DW@WQO4965656@DW@0@DW@2@DX@genericRemoveNode@DW@WQO4965656@DW@0@DW@3@DX@genericRemoveNode@DW@WQO4965656@DW@0@DW@3@DX@genericRemoveNode@DW@WQO4965656@DW@0@DW@0@DX@genericRemoveNode@DW@WQO4965656@DW@0@DW@2@DX@genericRemoveNode@DW@WQO4965656@DW@0@DW@2@DX@genericRemoveNode@DW@WQO4965656@DW@0@DW@1@DX@genericRemoveNode@DW@WQO4965656@DW@0@DW@0@DX@genericInsertNode@DW@WQO4965656@DW@0@DW@0@DW@<div style=\"position:absolute;right:0px;top:0px;left:0px;height:41px\" id=\"KKG4965678_layoutdiv\"><div style=\"background-color:#f5f5f5;padding-top:0px;top:0;color:#000000;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel dw-hover-class-foreground-23303030303030 dw-hover-class-background-23643764376437\" id=\"KKG4965678\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;KKG4965678&#39;, &#39;KKG4965678&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"z-index:301;position:absolute;right:0px;left:0px;bottom:0px;height:1px\" id=\"GYJ4966813_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"GYJ4966813\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div><div style=\"z-index:1;top:0px;left:16px;display:table;width:50px;position:absolute;height:100%\" id=\"NNP4965848_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"NNP4965848\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-top:-15px;right:0;top:50%;left:0px;bottom:0;height:30px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;right:0px;text-align:left;height:30px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:49.999%;left:0;width:27px;margin-top:-12px;margin-bottom:0px;margin-right:0px;height:27px\" class=\"guilayoutgridbag_container_padded\"><label style=\"padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"rcheckbox\" id=\"CJP4965848\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;CJP4965848&#39;, &#39;CJP4965848&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" ondblclick=\"try {dwFwPreEv(event,false,this); ;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><input name=\"CJP4965848\" value=\"CJP4965848\" type=\"checkbox\" id=\"CJP4965848_input\" onchange=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxCheckboxOnChange(event, &#39;CJP4965848&#39;, &#39;CJP4965848_input&#39;, &#39;&#39;, false, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);this.blur();this.focus();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><span class=\"checkmark\" id=\"CJP4965848_checkmark\"></span><span class=\"rcheckbox_text\" id=\"CJP4965848_text\"></span></label></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:76px;display:table;width:34px;position:absolute;height:100%\" id=\"HRT4965849_layoutdiv\"><div style=\"background-color:transparent;padding-top:4px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"HRT4965849\"><div style=\"right:0px;top:4px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:24px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:24px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-8px;right:0;height:16px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"width:24px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:8px\" class=\"guiimage\" id=\"MSQ4965849\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;MSQ4965849&#39;, &#39;MSQ4965849&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;SON4965849\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 71, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=bi_image_FCE645C38BE44E45BFFA7E9674945850\" alt=\"\" id=\"MSQ4965849_img\"></div></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:120px;display:table;width:254px;position:absolute;height:100%\" id=\"VAF4965849_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;padding-left:0px;display:table-cell;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel r-table-cell\" id=\"VAF4965849\">Carpentry&nbsp;machines</div></div><div style=\"z-index:1;top:0px;left:566px;display:table;width:46px;position:absolute;height:100%\" id=\"TPC4965862_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;min-height:40px;right:0;padding-right:0px;min-width:56px\" class=\"guipanel r-table-cell\" id=\"TPC4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:76px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:0px;text-align:center\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-2px;top:0;left:49.999%;bottom:0;width:1px;margin-top:0px;margin-bottom:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:#f4f4f4;padding-top:0px;margin:auto;top:0;max-width:1px;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px;min-width:1px\" class=\"guipanel\" id=\"OBG4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div></div><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:76px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:10px;top:50%;left:0;width:46px;margin-top:-19px;margin-bottom:0px;margin-right:20px;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;min-height:30px;right:0;padding-right:8px\" class=\"guipanel r-table-cell\" id=\"LED4965849\"><div style=\"right:8px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:38px;top:0;left:0;height:38px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:38px;text-align:center;height:38px\" class=\"guilayoutgridbag_container\"><div style=\"width:38px;margin-left:-19px;margin-top:-19px;top:50%;left:50%;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;cursor:pointer;padding-top:4px;margin:auto;top:0;left:0;bottom:0;padding-left:4px;padding-bottom:4px;right:0;padding-right:4px\" class=\"guipanel incraseContrastForPartlistIconsOnClick decreaseContrastForPartlistIconsOnHover cursor_pointer\" id=\"EJY4965849\" onmousedown=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnMouseUp(event, &#39;EJY4965849&#39;, &#39;EJY4965849&#39;, &#39;&#39;, true, false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;OIQ4965849\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Goto&amp;nbsp;assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 106, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnClick(event, &#39;EJY4965849&#39;, &#39;EJY4965849&#39;, &#39;&#39;, true, false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div style=\"right:4px;top:4px;left:4px;bottom:4px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"border-radius:2px;background-color:rgba(0,0,0,0.06274509803921569);padding-top:7px;top:0;left:0;bottom:0;padding-left:7px;padding-bottom:7px;right:0;padding-right:7px\" class=\"guipanel\" id=\"IYS4965849\"><div style=\"right:7px;top:7px;left:7px;bottom:7px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"width:16px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:0px\" class=\"guiimage\" id=\"BTH4965849\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_responsive_table_go_down_normal.png\" alt=\"\" id=\"BTH4965849_img\"></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div>@DX@evaluateJavascript@DW@dwDomSetGlobalStyleIfNotExists('.dw-hover-class-background-23643764376437:hover{ background-color: #d7d7d7 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-foreground-23303030303030:hover{ color: #000000 !important;}');\n@DX@genericInsertNode@DW@WQO4965656@DW@0@DW@1@DW@<div style=\"position:absolute;right:0px;top:41px;left:0px;height:41px\" id=\"VRR4965678_layoutdiv\"><div style=\"background-color:#f5f5f5;padding-top:0px;top:0;color:#000000;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel dw-hover-class-foreground-23303030303030 dw-hover-class-background-23643764376437\" id=\"VRR4965678\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;VRR4965678&#39;, &#39;VRR4965678&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"z-index:301;position:absolute;right:0px;left:0px;bottom:0px;height:1px\" id=\"KBK4966815_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"KBK4966815\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div><div style=\"z-index:1;top:0px;left:16px;display:table;width:50px;position:absolute;height:100%\" id=\"YEH4965849_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"YEH4965849\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-top:-15px;right:0;top:50%;left:0px;bottom:0;height:30px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;right:0px;text-align:left;height:30px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:49.999%;left:0;width:27px;margin-top:-12px;margin-bottom:0px;margin-right:0px;height:27px\" class=\"guilayoutgridbag_container_padded\"><label style=\"padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"rcheckbox\" id=\"VWP4965849\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;VWP4965849&#39;, &#39;VWP4965849&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" ondblclick=\"try {dwFwPreEv(event,false,this); ;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><input name=\"VWP4965849\" value=\"VWP4965849\" type=\"checkbox\" id=\"VWP4965849_input\" onchange=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxCheckboxOnChange(event, &#39;VWP4965849&#39;, &#39;VWP4965849_input&#39;, &#39;&#39;, false, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);this.blur();this.focus();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><span class=\"checkmark\" id=\"VWP4965849_checkmark\"></span><span class=\"rcheckbox_text\" id=\"VWP4965849_text\"></span></label></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:76px;display:table;width:34px;position:absolute;height:100%\" id=\"ELK4965850_layoutdiv\"><div style=\"background-color:transparent;padding-top:4px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"ELK4965850\"><div style=\"right:0px;top:4px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:24px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:24px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-8px;right:0;height:16px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"width:24px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:8px\" class=\"guiimage\" id=\"JTC4965850\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;JTC4965850&#39;, &#39;JTC4965850&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;KTV4965850\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 71, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=bi_image_FCE645C38BE44E45BFFA7E9674945850\" alt=\"\" id=\"JTC4965850_img\"></div></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:120px;display:table;width:254px;position:absolute;height:100%\" id=\"ARM4965850_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;padding-left:0px;display:table-cell;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel r-table-cell\" id=\"ARM4965850\">Workplace&nbsp;organisation</div></div><div style=\"z-index:1;top:0px;left:566px;display:table;width:46px;position:absolute;height:100%\" id=\"GNV4965862_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;min-height:40px;right:0;padding-right:0px;min-width:56px\" class=\"guipanel r-table-cell\" id=\"GNV4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:76px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:0px;text-align:center\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-2px;top:0;left:49.999%;bottom:0;width:1px;margin-top:0px;margin-bottom:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:#f4f4f4;padding-top:0px;margin:auto;top:0;max-width:1px;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px;min-width:1px\" class=\"guipanel\" id=\"VOU4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div></div><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:76px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:10px;top:50%;left:0;width:46px;margin-top:-19px;margin-bottom:0px;margin-right:20px;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;min-height:30px;right:0;padding-right:8px\" class=\"guipanel r-table-cell\" id=\"GSL4965850\"><div style=\"right:8px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:38px;top:0;left:0;height:38px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:38px;text-align:center;height:38px\" class=\"guilayoutgridbag_container\"><div style=\"width:38px;margin-left:-19px;margin-top:-19px;top:50%;left:50%;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;cursor:pointer;padding-top:4px;margin:auto;top:0;left:0;bottom:0;padding-left:4px;padding-bottom:4px;right:0;padding-right:4px\" class=\"guipanel incraseContrastForPartlistIconsOnClick decreaseContrastForPartlistIconsOnHover cursor_pointer\" id=\"YPK4965850\" onmousedown=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnMouseUp(event, &#39;YPK4965850&#39;, &#39;YPK4965850&#39;, &#39;&#39;, true, false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;QSR4965850\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Goto&amp;nbsp;assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 106, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnClick(event, &#39;YPK4965850&#39;, &#39;YPK4965850&#39;, &#39;&#39;, true, false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div style=\"right:4px;top:4px;left:4px;bottom:4px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"border-radius:2px;background-color:rgba(0,0,0,0.06274509803921569);padding-top:7px;top:0;left:0;bottom:0;padding-left:7px;padding-bottom:7px;right:0;padding-right:7px\" class=\"guipanel\" id=\"FIU4965850\"><div style=\"right:7px;top:7px;left:7px;bottom:7px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"width:16px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:0px\" class=\"guiimage\" id=\"WXN4965850\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_responsive_table_go_down_normal.png\" alt=\"\" id=\"WXN4965850_img\"></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div>@DX@evaluateJavascript@DW@dwDomSetGlobalStyleIfNotExists('.dw-hover-class-background-23643764376437:hover{ background-color: #d7d7d7 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-foreground-23303030303030:hover{ color: #000000 !important;}');\n@DX@genericInsertNode@DW@WQO4965656@DW@0@DW@2@DW@<div style=\"position:absolute;right:0px;top:82px;left:0px;height:41px\" id=\"XGP4965678_layoutdiv\"><div style=\"background-color:#f5f5f5;padding-top:0px;top:0;color:#000000;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel dw-hover-class-foreground-23303030303030 dw-hover-class-background-23643764376437\" id=\"XGP4965678\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;XGP4965678&#39;, &#39;XGP4965678&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"z-index:301;position:absolute;right:0px;left:0px;bottom:0px;height:1px\" id=\"HOY4966816_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"HOY4966816\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div><div style=\"z-index:1;top:0px;left:16px;display:table;width:50px;position:absolute;height:100%\" id=\"OSY4965850_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"OSY4965850\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-top:-15px;right:0;top:50%;left:0px;bottom:0;height:30px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;right:0px;text-align:left;height:30px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:49.999%;left:0;width:27px;margin-top:-12px;margin-bottom:0px;margin-right:0px;height:27px\" class=\"guilayoutgridbag_container_padded\"><label style=\"padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"rcheckbox\" id=\"DSJ4965850\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;DSJ4965850&#39;, &#39;DSJ4965850&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" ondblclick=\"try {dwFwPreEv(event,false,this); ;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><input name=\"DSJ4965850\" value=\"DSJ4965850\" type=\"checkbox\" id=\"DSJ4965850_input\" onchange=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxCheckboxOnChange(event, &#39;DSJ4965850&#39;, &#39;DSJ4965850_input&#39;, &#39;&#39;, false, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);this.blur();this.focus();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><span class=\"checkmark\" id=\"DSJ4965850_checkmark\"></span><span class=\"rcheckbox_text\" id=\"DSJ4965850_text\"></span></label></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:76px;display:table;width:34px;position:absolute;height:100%\" id=\"ALA4965851_layoutdiv\"><div style=\"background-color:transparent;padding-top:4px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"ALA4965851\"><div style=\"right:0px;top:4px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:24px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:24px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-8px;right:0;height:16px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"width:24px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:8px\" class=\"guiimage\" id=\"JVR4965851\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;JVR4965851&#39;, &#39;JVR4965851&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;KSS4965851\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 71, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=bi_image_FCE645C38BE44E45BFFA7E9674945850\" alt=\"\" id=\"JVR4965851_img\"></div></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:120px;display:table;width:254px;position:absolute;height:100%\" id=\"KRI4965851_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;padding-left:0px;display:table-cell;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel r-table-cell\" id=\"KRI4965851\">Drilling&nbsp;and&nbsp;screwdriving</div></div><div style=\"z-index:1;top:0px;left:566px;display:table;width:46px;position:absolute;height:100%\" id=\"BGF4965862_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;min-height:40px;right:0;padding-right:0px;min-width:56px\" class=\"guipanel r-table-cell\" id=\"BGF4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:76px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:0px;text-align:center\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-2px;top:0;left:49.999%;bottom:0;width:1px;margin-top:0px;margin-bottom:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:#f4f4f4;padding-top:0px;margin:auto;top:0;max-width:1px;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px;min-width:1px\" class=\"guipanel\" id=\"NEL4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div></div><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:76px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:10px;top:50%;left:0;width:46px;margin-top:-19px;margin-bottom:0px;margin-right:20px;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;min-height:30px;right:0;padding-right:8px\" class=\"guipanel r-table-cell\" id=\"EIF4965851\"><div style=\"right:8px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:38px;top:0;left:0;height:38px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:38px;text-align:center;height:38px\" class=\"guilayoutgridbag_container\"><div style=\"width:38px;margin-left:-19px;margin-top:-19px;top:50%;left:50%;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;cursor:pointer;padding-top:4px;margin:auto;top:0;left:0;bottom:0;padding-left:4px;padding-bottom:4px;right:0;padding-right:4px\" class=\"guipanel incraseContrastForPartlistIconsOnClick decreaseContrastForPartlistIconsOnHover cursor_pointer\" id=\"PDW4965851\" onmousedown=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnMouseUp(event, &#39;PDW4965851&#39;, &#39;PDW4965851&#39;, &#39;&#39;, true, false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;AII4965851\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Goto&amp;nbsp;assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 106, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnClick(event, &#39;PDW4965851&#39;, &#39;PDW4965851&#39;, &#39;&#39;, true, false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div style=\"right:4px;top:4px;left:4px;bottom:4px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"border-radius:2px;background-color:rgba(0,0,0,0.06274509803921569);padding-top:7px;top:0;left:0;bottom:0;padding-left:7px;padding-bottom:7px;right:0;padding-right:7px\" class=\"guipanel\" id=\"IDT4965851\"><div style=\"right:7px;top:7px;left:7px;bottom:7px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"width:16px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:0px\" class=\"guiimage\" id=\"IOK4965851\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_responsive_table_go_down_normal.png\" alt=\"\" id=\"IOK4965851_img\"></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div>@DX@evaluateJavascript@DW@dwDomSetGlobalStyleIfNotExists('.dw-hover-class-background-23643764376437:hover{ background-color: #d7d7d7 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-foreground-23303030303030:hover{ color: #000000 !important;}');\n@DX@genericInsertNode@DW@WQO4965656@DW@0@DW@3@DW@<div style=\"position:absolute;right:0px;top:123px;left:0px;height:41px\" id=\"LWF4965678_layoutdiv\"><div style=\"background-color:#f5f5f5;padding-top:0px;top:0;color:#000000;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel dw-hover-class-foreground-23303030303030 dw-hover-class-background-23643764376437\" id=\"LWF4965678\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;LWF4965678&#39;, &#39;LWF4965678&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"z-index:301;position:absolute;right:0px;left:0px;bottom:0px;height:1px\" id=\"GHV4966817_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"GHV4966817\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div><div style=\"z-index:1;top:0px;left:16px;display:table;width:50px;position:absolute;height:100%\" id=\"NBN4965851_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"NBN4965851\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-top:-15px;right:0;top:50%;left:0px;bottom:0;height:30px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;right:0px;text-align:left;height:30px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:49.999%;left:0;width:27px;margin-top:-12px;margin-bottom:0px;margin-right:0px;height:27px\" class=\"guilayoutgridbag_container_padded\"><label style=\"padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"rcheckbox\" id=\"QJS4965851\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;QJS4965851&#39;, &#39;QJS4965851&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" ondblclick=\"try {dwFwPreEv(event,false,this); ;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><input name=\"QJS4965851\" value=\"QJS4965851\" type=\"checkbox\" id=\"QJS4965851_input\" onchange=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxCheckboxOnChange(event, &#39;QJS4965851&#39;, &#39;QJS4965851_input&#39;, &#39;&#39;, false, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);this.blur();this.focus();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><span class=\"checkmark\" id=\"QJS4965851_checkmark\"></span><span class=\"rcheckbox_text\" id=\"QJS4965851_text\"></span></label></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:76px;display:table;width:34px;position:absolute;height:100%\" id=\"OYW4965851_layoutdiv\"><div style=\"background-color:transparent;padding-top:4px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"OYW4965851\"><div style=\"right:0px;top:4px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:24px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:24px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-8px;right:0;height:16px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"width:24px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:8px\" class=\"guiimage\" id=\"GVN4965851\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;GVN4965851&#39;, &#39;GVN4965851&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;YDD4965851\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 71, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=bi_image_FCE645C38BE44E45BFFA7E9674945850\" alt=\"\" id=\"GVN4965851_img\"></div></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:120px;display:table;width:254px;position:absolute;height:100%\" id=\"KDY4965851_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;padding-left:0px;display:table-cell;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel r-table-cell\" id=\"KDY4965851\">CMS&nbsp;-&nbsp;Compact&nbsp;Modul&nbsp;System</div></div><div style=\"z-index:1;top:0px;left:566px;display:table;width:46px;position:absolute;height:100%\" id=\"TUG4965862_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;min-height:40px;right:0;padding-right:0px;min-width:56px\" class=\"guipanel r-table-cell\" id=\"TUG4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:76px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:0px;text-align:center\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-2px;top:0;left:49.999%;bottom:0;width:1px;margin-top:0px;margin-bottom:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:#f4f4f4;padding-top:0px;margin:auto;top:0;max-width:1px;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px;min-width:1px\" class=\"guipanel\" id=\"KKN4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div></div><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:76px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:10px;top:50%;left:0;width:46px;margin-top:-19px;margin-bottom:0px;margin-right:20px;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;min-height:30px;right:0;padding-right:8px\" class=\"guipanel r-table-cell\" id=\"ELQ4965851\"><div style=\"right:8px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:38px;top:0;left:0;height:38px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:38px;text-align:center;height:38px\" class=\"guilayoutgridbag_container\"><div style=\"width:38px;margin-left:-19px;margin-top:-19px;top:50%;left:50%;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;cursor:pointer;padding-top:4px;margin:auto;top:0;left:0;bottom:0;padding-left:4px;padding-bottom:4px;right:0;padding-right:4px\" class=\"guipanel incraseContrastForPartlistIconsOnClick decreaseContrastForPartlistIconsOnHover cursor_pointer\" id=\"MHI4965851\" onmousedown=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnMouseUp(event, &#39;MHI4965851&#39;, &#39;MHI4965851&#39;, &#39;&#39;, true, false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;XWD4965851\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Goto&amp;nbsp;assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 106, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnClick(event, &#39;MHI4965851&#39;, &#39;MHI4965851&#39;, &#39;&#39;, true, false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div style=\"right:4px;top:4px;left:4px;bottom:4px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"border-radius:2px;background-color:rgba(0,0,0,0.06274509803921569);padding-top:7px;top:0;left:0;bottom:0;padding-left:7px;padding-bottom:7px;right:0;padding-right:7px\" class=\"guipanel\" id=\"KSV4965851\"><div style=\"right:7px;top:7px;left:7px;bottom:7px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"width:16px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:0px\" class=\"guiimage\" id=\"TXA4965851\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_responsive_table_go_down_normal.png\" alt=\"\" id=\"TXA4965851_img\"></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div>@DX@evaluateJavascript@DW@dwDomSetGlobalStyleIfNotExists('.dw-hover-class-background-23643764376437:hover{ background-color: #d7d7d7 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-foreground-23303030303030:hover{ color: #000000 !important;}');\n@DX@genericInsertNode@DW@WQO4965656@DW@0@DW@4@DW@<div style=\"position:absolute;right:0px;top:164px;left:0px;height:41px\" id=\"ARL4965678_layoutdiv\"><div style=\"background-color:#f5f5f5;padding-top:0px;top:0;color:#000000;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel dw-hover-class-foreground-23303030303030 dw-hover-class-background-23643764376437\" id=\"ARL4965678\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;ARL4965678&#39;, &#39;ARL4965678&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"z-index:301;position:absolute;right:0px;left:0px;bottom:0px;height:1px\" id=\"LNH4966818_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"LNH4966818\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div><div style=\"z-index:1;top:0px;left:16px;display:table;width:50px;position:absolute;height:100%\" id=\"DTY4965852_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"DTY4965852\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-top:-15px;right:0;top:50%;left:0px;bottom:0;height:30px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;right:0px;text-align:left;height:30px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:49.999%;left:0;width:27px;margin-top:-12px;margin-bottom:0px;margin-right:0px;height:27px\" class=\"guilayoutgridbag_container_padded\"><label style=\"padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"rcheckbox\" id=\"QXH4965852\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;QXH4965852&#39;, &#39;QXH4965852&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" ondblclick=\"try {dwFwPreEv(event,false,this); ;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><input name=\"QXH4965852\" value=\"QXH4965852\" type=\"checkbox\" id=\"QXH4965852_input\" onchange=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxCheckboxOnChange(event, &#39;QXH4965852&#39;, &#39;QXH4965852_input&#39;, &#39;&#39;, false, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);this.blur();this.focus();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><span class=\"checkmark\" id=\"QXH4965852_checkmark\"></span><span class=\"rcheckbox_text\" id=\"QXH4965852_text\"></span></label></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:76px;display:table;width:34px;position:absolute;height:100%\" id=\"KGJ4965852_layoutdiv\"><div style=\"background-color:transparent;padding-top:4px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"KGJ4965852\"><div style=\"right:0px;top:4px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:24px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:24px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-8px;right:0;height:16px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"width:24px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:8px\" class=\"guiimage\" id=\"LEX4965852\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;LEX4965852&#39;, &#39;LEX4965852&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;JSM4965852\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 71, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=bi_image_FCE645C38BE44E45BFFA7E9674945850\" alt=\"\" id=\"LEX4965852_img\"></div></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:120px;display:table;width:254px;position:absolute;height:100%\" id=\"XIQ4965852_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;padding-left:0px;display:table-cell;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel r-table-cell\" id=\"XIQ4965852\">Exoskeletons</div></div><div style=\"z-index:1;top:0px;left:566px;display:table;width:46px;position:absolute;height:100%\" id=\"TUW4965862_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;min-height:40px;right:0;padding-right:0px;min-width:56px\" class=\"guipanel r-table-cell\" id=\"TUW4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:76px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:0px;text-align:center\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-2px;top:0;left:49.999%;bottom:0;width:1px;margin-top:0px;margin-bottom:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:#f4f4f4;padding-top:0px;margin:auto;top:0;max-width:1px;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px;min-width:1px\" class=\"guipanel\" id=\"ILH4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div></div><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:76px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:10px;top:50%;left:0;width:46px;margin-top:-19px;margin-bottom:0px;margin-right:20px;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;min-height:30px;right:0;padding-right:8px\" class=\"guipanel r-table-cell\" id=\"IDS4965852\"><div style=\"right:8px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:38px;top:0;left:0;height:38px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:38px;text-align:center;height:38px\" class=\"guilayoutgridbag_container\"><div style=\"width:38px;margin-left:-19px;margin-top:-19px;top:50%;left:50%;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;cursor:pointer;padding-top:4px;margin:auto;top:0;left:0;bottom:0;padding-left:4px;padding-bottom:4px;right:0;padding-right:4px\" class=\"guipanel incraseContrastForPartlistIconsOnClick decreaseContrastForPartlistIconsOnHover cursor_pointer\" id=\"VVQ4965852\" onmousedown=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnMouseUp(event, &#39;VVQ4965852&#39;, &#39;VVQ4965852&#39;, &#39;&#39;, true, false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;NCP4965852\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Goto&amp;nbsp;assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 106, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnClick(event, &#39;VVQ4965852&#39;, &#39;VVQ4965852&#39;, &#39;&#39;, true, false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div style=\"right:4px;top:4px;left:4px;bottom:4px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"border-radius:2px;background-color:rgba(0,0,0,0.06274509803921569);padding-top:7px;top:0;left:0;bottom:0;padding-left:7px;padding-bottom:7px;right:0;padding-right:7px\" class=\"guipanel\" id=\"VOL4965852\"><div style=\"right:7px;top:7px;left:7px;bottom:7px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"width:16px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:0px\" class=\"guiimage\" id=\"VAA4965852\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_responsive_table_go_down_normal.png\" alt=\"\" id=\"VAA4965852_img\"></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div>@DX@evaluateJavascript@DW@dwDomSetGlobalStyleIfNotExists('.dw-hover-class-background-23643764376437:hover{ background-color: #d7d7d7 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-foreground-23303030303030:hover{ color: #000000 !important;}');\n@DX@genericInsertNode@DW@WQO4965656@DW@0@DW@5@DW@<div style=\"position:absolute;right:0px;top:205px;left:0px;height:41px\" id=\"KFI4965678_layoutdiv\"><div style=\"background-color:#f5f5f5;padding-top:0px;top:0;color:#000000;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel dw-hover-class-foreground-23303030303030 dw-hover-class-background-23643764376437\" id=\"KFI4965678\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;KFI4965678&#39;, &#39;KFI4965678&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"z-index:301;position:absolute;right:0px;left:0px;bottom:0px;height:1px\" id=\"YMI4966819_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"YMI4966819\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div><div style=\"z-index:1;top:0px;left:16px;display:table;width:50px;position:absolute;height:100%\" id=\"OEG4965852_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"OEG4965852\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-top:-15px;right:0;top:50%;left:0px;bottom:0;height:30px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;right:0px;text-align:left;height:30px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:49.999%;left:0;width:27px;margin-top:-12px;margin-bottom:0px;margin-right:0px;height:27px\" class=\"guilayoutgridbag_container_padded\"><label style=\"padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"rcheckbox\" id=\"OAF4965852\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;OAF4965852&#39;, &#39;OAF4965852&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" ondblclick=\"try {dwFwPreEv(event,false,this); ;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><input name=\"OAF4965852\" value=\"OAF4965852\" type=\"checkbox\" id=\"OAF4965852_input\" onchange=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxCheckboxOnChange(event, &#39;OAF4965852&#39;, &#39;OAF4965852_input&#39;, &#39;&#39;, false, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);this.blur();this.focus();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><span class=\"checkmark\" id=\"OAF4965852_checkmark\"></span><span class=\"rcheckbox_text\" id=\"OAF4965852_text\"></span></label></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:76px;display:table;width:34px;position:absolute;height:100%\" id=\"OSN4965853_layoutdiv\"><div style=\"background-color:transparent;padding-top:4px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"OSN4965853\"><div style=\"right:0px;top:4px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:24px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:24px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-8px;right:0;height:16px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"width:24px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:8px\" class=\"guiimage\" id=\"JBG4965853\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;JBG4965853&#39;, &#39;JBG4965853&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;MEM4965853\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 71, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=bi_image_FCE645C38BE44E45BFFA7E9674945850\" alt=\"\" id=\"JBG4965853_img\"></div></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:120px;display:table;width:254px;position:absolute;height:100%\" id=\"ICP4965853_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;padding-left:0px;display:table-cell;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel r-table-cell\" id=\"ICP4965853\">Routing</div></div><div style=\"z-index:1;top:0px;left:566px;display:table;width:46px;position:absolute;height:100%\" id=\"XLC4965862_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;min-height:40px;right:0;padding-right:0px;min-width:56px\" class=\"guipanel r-table-cell\" id=\"XLC4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:76px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:0px;text-align:center\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-2px;top:0;left:49.999%;bottom:0;width:1px;margin-top:0px;margin-bottom:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:#f4f4f4;padding-top:0px;margin:auto;top:0;max-width:1px;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px;min-width:1px\" class=\"guipanel\" id=\"SGO4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div></div><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:76px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:10px;top:50%;left:0;width:46px;margin-top:-19px;margin-bottom:0px;margin-right:20px;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;min-height:30px;right:0;padding-right:8px\" class=\"guipanel r-table-cell\" id=\"OQR4965853\"><div style=\"right:8px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:38px;top:0;left:0;height:38px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:38px;text-align:center;height:38px\" class=\"guilayoutgridbag_container\"><div style=\"width:38px;margin-left:-19px;margin-top:-19px;top:50%;left:50%;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;cursor:pointer;padding-top:4px;margin:auto;top:0;left:0;bottom:0;padding-left:4px;padding-bottom:4px;right:0;padding-right:4px\" class=\"guipanel incraseContrastForPartlistIconsOnClick decreaseContrastForPartlistIconsOnHover cursor_pointer\" id=\"AKF4965853\" onmousedown=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnMouseUp(event, &#39;AKF4965853&#39;, &#39;AKF4965853&#39;, &#39;&#39;, true, false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;MUF4965853\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Goto&amp;nbsp;assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 106, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnClick(event, &#39;AKF4965853&#39;, &#39;AKF4965853&#39;, &#39;&#39;, true, false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div style=\"right:4px;top:4px;left:4px;bottom:4px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"border-radius:2px;background-color:rgba(0,0,0,0.06274509803921569);padding-top:7px;top:0;left:0;bottom:0;padding-left:7px;padding-bottom:7px;right:0;padding-right:7px\" class=\"guipanel\" id=\"JBR4965853\"><div style=\"right:7px;top:7px;left:7px;bottom:7px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"width:16px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:0px\" class=\"guiimage\" id=\"WEL4965853\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_responsive_table_go_down_normal.png\" alt=\"\" id=\"WEL4965853_img\"></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div>@DX@evaluateJavascript@DW@dwDomSetGlobalStyleIfNotExists('.dw-hover-class-background-23643764376437:hover{ background-color: #d7d7d7 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-foreground-23303030303030:hover{ color: #000000 !important;}');\n@DX@genericInsertNode@DW@WQO4965656@DW@0@DW@6@DW@<div style=\"position:absolute;right:0px;top:246px;left:0px;height:41px\" id=\"NOD4965678_layoutdiv\"><div style=\"background-color:#f5f5f5;padding-top:0px;top:0;color:#000000;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel dw-hover-class-foreground-23303030303030 dw-hover-class-background-23643764376437\" id=\"NOD4965678\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;NOD4965678&#39;, &#39;NOD4965678&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"z-index:301;position:absolute;right:0px;left:0px;bottom:0px;height:1px\" id=\"VKG4966821_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"VKG4966821\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div><div style=\"z-index:1;top:0px;left:16px;display:table;width:50px;position:absolute;height:100%\" id=\"BAB4965853_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"BAB4965853\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-top:-15px;right:0;top:50%;left:0px;bottom:0;height:30px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;right:0px;text-align:left;height:30px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:49.999%;left:0;width:27px;margin-top:-12px;margin-bottom:0px;margin-right:0px;height:27px\" class=\"guilayoutgridbag_container_padded\"><label style=\"padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"rcheckbox\" id=\"KMG4965853\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;KMG4965853&#39;, &#39;KMG4965853&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" ondblclick=\"try {dwFwPreEv(event,false,this); ;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><input name=\"KMG4965853\" value=\"KMG4965853\" type=\"checkbox\" id=\"KMG4965853_input\" onchange=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxCheckboxOnChange(event, &#39;KMG4965853&#39;, &#39;KMG4965853_input&#39;, &#39;&#39;, false, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);this.blur();this.focus();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><span class=\"checkmark\" id=\"KMG4965853_checkmark\"></span><span class=\"rcheckbox_text\" id=\"KMG4965853_text\"></span></label></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:76px;display:table;width:34px;position:absolute;height:100%\" id=\"OYH4965854_layoutdiv\"><div style=\"background-color:transparent;padding-top:4px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"OYH4965854\"><div style=\"right:0px;top:4px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:24px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:24px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-8px;right:0;height:16px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"width:24px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:8px\" class=\"guiimage\" id=\"NPB4965854\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;NPB4965854&#39;, &#39;NPB4965854&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;QES4965854\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 71, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=bi_image_FCE645C38BE44E45BFFA7E9674945850\" alt=\"\" id=\"NPB4965854_img\"></div></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:120px;display:table;width:254px;position:absolute;height:100%\" id=\"KTP4965854_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;padding-left:0px;display:table-cell;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel r-table-cell\" id=\"KTP4965854\">Planing</div></div><div style=\"z-index:1;top:0px;left:566px;display:table;width:46px;position:absolute;height:100%\" id=\"CHU4965862_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;min-height:40px;right:0;padding-right:0px;min-width:56px\" class=\"guipanel r-table-cell\" id=\"CHU4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:76px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:0px;text-align:center\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-2px;top:0;left:49.999%;bottom:0;width:1px;margin-top:0px;margin-bottom:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:#f4f4f4;padding-top:0px;margin:auto;top:0;max-width:1px;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px;min-width:1px\" class=\"guipanel\" id=\"LVO4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div></div><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:76px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:10px;top:50%;left:0;width:46px;margin-top:-19px;margin-bottom:0px;margin-right:20px;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;min-height:30px;right:0;padding-right:8px\" class=\"guipanel r-table-cell\" id=\"FND4965854\"><div style=\"right:8px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:38px;top:0;left:0;height:38px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:38px;text-align:center;height:38px\" class=\"guilayoutgridbag_container\"><div style=\"width:38px;margin-left:-19px;margin-top:-19px;top:50%;left:50%;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;cursor:pointer;padding-top:4px;margin:auto;top:0;left:0;bottom:0;padding-left:4px;padding-bottom:4px;right:0;padding-right:4px\" class=\"guipanel incraseContrastForPartlistIconsOnClick decreaseContrastForPartlistIconsOnHover cursor_pointer\" id=\"CUW4965854\" onmousedown=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnMouseUp(event, &#39;CUW4965854&#39;, &#39;CUW4965854&#39;, &#39;&#39;, true, false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;OEU4965854\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Goto&amp;nbsp;assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 106, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnClick(event, &#39;CUW4965854&#39;, &#39;CUW4965854&#39;, &#39;&#39;, true, false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div style=\"right:4px;top:4px;left:4px;bottom:4px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"border-radius:2px;background-color:rgba(0,0,0,0.06274509803921569);padding-top:7px;top:0;left:0;bottom:0;padding-left:7px;padding-bottom:7px;right:0;padding-right:7px\" class=\"guipanel\" id=\"XHL4965854\"><div style=\"right:7px;top:7px;left:7px;bottom:7px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"width:16px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:0px\" class=\"guiimage\" id=\"HST4965854\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_responsive_table_go_down_normal.png\" alt=\"\" id=\"HST4965854_img\"></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div>@DX@evaluateJavascript@DW@dwDomSetGlobalStyleIfNotExists('.dw-hover-class-background-23643764376437:hover{ background-color: #d7d7d7 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-foreground-23303030303030:hover{ color: #000000 !important;}');\n@DX@genericInsertNode@DW@WQO4965656@DW@0@DW@7@DW@<div style=\"position:absolute;right:0px;top:287px;left:0px;height:41px\" id=\"EER4965678_layoutdiv\"><div style=\"background-color:#f5f5f5;padding-top:0px;top:0;color:#000000;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel dw-hover-class-foreground-23303030303030 dw-hover-class-background-23643764376437\" id=\"EER4965678\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;EER4965678&#39;, &#39;EER4965678&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"z-index:301;position:absolute;right:0px;left:0px;bottom:0px;height:1px\" id=\"NEQ4966822_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"NEQ4966822\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div><div style=\"z-index:1;top:0px;left:16px;display:table;width:50px;position:absolute;height:100%\" id=\"KGJ4965854_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"KGJ4965854\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-top:-15px;right:0;top:50%;left:0px;bottom:0;height:30px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;right:0px;text-align:left;height:30px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:49.999%;left:0;width:27px;margin-top:-12px;margin-bottom:0px;margin-right:0px;height:27px\" class=\"guilayoutgridbag_container_padded\"><label style=\"padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"rcheckbox\" id=\"QTD4965854\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;QTD4965854&#39;, &#39;QTD4965854&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" ondblclick=\"try {dwFwPreEv(event,false,this); ;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><input name=\"QTD4965854\" value=\"QTD4965854\" type=\"checkbox\" id=\"QTD4965854_input\" onchange=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxCheckboxOnChange(event, &#39;QTD4965854&#39;, &#39;QTD4965854_input&#39;, &#39;&#39;, false, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);this.blur();this.focus();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><span class=\"checkmark\" id=\"QTD4965854_checkmark\"></span><span class=\"rcheckbox_text\" id=\"QTD4965854_text\"></span></label></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:76px;display:table;width:34px;position:absolute;height:100%\" id=\"ACH4965855_layoutdiv\"><div style=\"background-color:transparent;padding-top:4px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"ACH4965855\"><div style=\"right:0px;top:4px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:24px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:24px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-8px;right:0;height:16px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"width:24px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:8px\" class=\"guiimage\" id=\"JRK4965855\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;JRK4965855&#39;, &#39;JRK4965855&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;KUU4965855\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 71, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=bi_image_FCE645C38BE44E45BFFA7E9674945850\" alt=\"\" id=\"JRK4965855_img\"></div></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:120px;display:table;width:254px;position:absolute;height:100%\" id=\"MGO4965855_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;padding-left:0px;display:table-cell;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel r-table-cell\" id=\"MGO4965855\">Edge&nbsp;trimming</div></div><div style=\"z-index:1;top:0px;left:566px;display:table;width:46px;position:absolute;height:100%\" id=\"TXS4965862_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;min-height:40px;right:0;padding-right:0px;min-width:56px\" class=\"guipanel r-table-cell\" id=\"TXS4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:76px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:0px;text-align:center\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-2px;top:0;left:49.999%;bottom:0;width:1px;margin-top:0px;margin-bottom:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:#f4f4f4;padding-top:0px;margin:auto;top:0;max-width:1px;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px;min-width:1px\" class=\"guipanel\" id=\"KWF4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div></div><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:76px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:10px;top:50%;left:0;width:46px;margin-top:-19px;margin-bottom:0px;margin-right:20px;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;min-height:30px;right:0;padding-right:8px\" class=\"guipanel r-table-cell\" id=\"VUQ4965855\"><div style=\"right:8px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:38px;top:0;left:0;height:38px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:38px;text-align:center;height:38px\" class=\"guilayoutgridbag_container\"><div style=\"width:38px;margin-left:-19px;margin-top:-19px;top:50%;left:50%;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;cursor:pointer;padding-top:4px;margin:auto;top:0;left:0;bottom:0;padding-left:4px;padding-bottom:4px;right:0;padding-right:4px\" class=\"guipanel incraseContrastForPartlistIconsOnClick decreaseContrastForPartlistIconsOnHover cursor_pointer\" id=\"BIU4965855\" onmousedown=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnMouseUp(event, &#39;BIU4965855&#39;, &#39;BIU4965855&#39;, &#39;&#39;, true, false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;ETK4965855\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Goto&amp;nbsp;assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 106, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnClick(event, &#39;BIU4965855&#39;, &#39;BIU4965855&#39;, &#39;&#39;, true, false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div style=\"right:4px;top:4px;left:4px;bottom:4px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"border-radius:2px;background-color:rgba(0,0,0,0.06274509803921569);padding-top:7px;top:0;left:0;bottom:0;padding-left:7px;padding-bottom:7px;right:0;padding-right:7px\" class=\"guipanel\" id=\"BFD4965855\"><div style=\"right:7px;top:7px;left:7px;bottom:7px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"width:16px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:0px\" class=\"guiimage\" id=\"QMI4965855\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_responsive_table_go_down_normal.png\" alt=\"\" id=\"QMI4965855_img\"></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div>@DX@evaluateJavascript@DW@dwDomSetGlobalStyleIfNotExists('.dw-hover-class-background-23643764376437:hover{ background-color: #d7d7d7 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-foreground-23303030303030:hover{ color: #000000 !important;}');\n@DX@genericInsertNode@DW@WQO4965656@DW@0@DW@8@DW@<div style=\"position:absolute;right:0px;top:328px;left:0px;height:41px\" id=\"SRA4965678_layoutdiv\"><div style=\"background-color:#f5f5f5;padding-top:0px;top:0;color:#000000;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel dw-hover-class-foreground-23303030303030 dw-hover-class-background-23643764376437\" id=\"SRA4965678\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;SRA4965678&#39;, &#39;SRA4965678&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"z-index:301;position:absolute;right:0px;left:0px;bottom:0px;height:1px\" id=\"ATW4966823_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"ATW4966823\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div><div style=\"z-index:1;top:0px;left:16px;display:table;width:50px;position:absolute;height:100%\" id=\"KTQ4965855_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"KTQ4965855\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-top:-15px;right:0;top:50%;left:0px;bottom:0;height:30px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;right:0px;text-align:left;height:30px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:49.999%;left:0;width:27px;margin-top:-12px;margin-bottom:0px;margin-right:0px;height:27px\" class=\"guilayoutgridbag_container_padded\"><label style=\"padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"rcheckbox\" id=\"XLX4965855\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;XLX4965855&#39;, &#39;XLX4965855&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" ondblclick=\"try {dwFwPreEv(event,false,this); ;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><input name=\"XLX4965855\" value=\"XLX4965855\" type=\"checkbox\" id=\"XLX4965855_input\" onchange=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxCheckboxOnChange(event, &#39;XLX4965855&#39;, &#39;XLX4965855_input&#39;, &#39;&#39;, false, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);this.blur();this.focus();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><span class=\"checkmark\" id=\"XLX4965855_checkmark\"></span><span class=\"rcheckbox_text\" id=\"XLX4965855_text\"></span></label></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:76px;display:table;width:34px;position:absolute;height:100%\" id=\"WKV4965856_layoutdiv\"><div style=\"background-color:transparent;padding-top:4px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"WKV4965856\"><div style=\"right:0px;top:4px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:24px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:24px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-8px;right:0;height:16px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"width:24px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:8px\" class=\"guiimage\" id=\"SSL4965856\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;SSL4965856&#39;, &#39;SSL4965856&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;SVK4965856\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 71, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=bi_image_FCE645C38BE44E45BFFA7E9674945850\" alt=\"\" id=\"SSL4965856_img\"></div></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:120px;display:table;width:254px;position:absolute;height:100%\" id=\"HVQ4965856_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;padding-left:0px;display:table-cell;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel r-table-cell\" id=\"HVQ4965856\">Charger</div></div><div style=\"z-index:1;top:0px;left:566px;display:table;width:46px;position:absolute;height:100%\" id=\"NCG4965862_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;min-height:40px;right:0;padding-right:0px;min-width:56px\" class=\"guipanel r-table-cell\" id=\"NCG4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:76px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:0px;text-align:center\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-2px;top:0;left:49.999%;bottom:0;width:1px;margin-top:0px;margin-bottom:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:#f4f4f4;padding-top:0px;margin:auto;top:0;max-width:1px;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px;min-width:1px\" class=\"guipanel\" id=\"OOF4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div></div><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:76px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:10px;top:50%;left:0;width:46px;margin-top:-19px;margin-bottom:0px;margin-right:20px;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;min-height:30px;right:0;padding-right:8px\" class=\"guipanel r-table-cell\" id=\"DYM4965856\"><div style=\"right:8px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:38px;top:0;left:0;height:38px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:38px;text-align:center;height:38px\" class=\"guilayoutgridbag_container\"><div style=\"width:38px;margin-left:-19px;margin-top:-19px;top:50%;left:50%;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;cursor:pointer;padding-top:4px;margin:auto;top:0;left:0;bottom:0;padding-left:4px;padding-bottom:4px;right:0;padding-right:4px\" class=\"guipanel incraseContrastForPartlistIconsOnClick decreaseContrastForPartlistIconsOnHover cursor_pointer\" id=\"UCU4965856\" onmousedown=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnMouseUp(event, &#39;UCU4965856&#39;, &#39;UCU4965856&#39;, &#39;&#39;, true, false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;OLM4965856\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Goto&amp;nbsp;assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 106, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnClick(event, &#39;UCU4965856&#39;, &#39;UCU4965856&#39;, &#39;&#39;, true, false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div style=\"right:4px;top:4px;left:4px;bottom:4px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"border-radius:2px;background-color:rgba(0,0,0,0.06274509803921569);padding-top:7px;top:0;left:0;bottom:0;padding-left:7px;padding-bottom:7px;right:0;padding-right:7px\" class=\"guipanel\" id=\"OGI4965856\"><div style=\"right:7px;top:7px;left:7px;bottom:7px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"width:16px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:0px\" class=\"guiimage\" id=\"BNQ4965856\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_responsive_table_go_down_normal.png\" alt=\"\" id=\"BNQ4965856_img\"></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div>@DX@evaluateJavascript@DW@dwDomSetGlobalStyleIfNotExists('.dw-hover-class-background-23643764376437:hover{ background-color: #d7d7d7 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-foreground-23303030303030:hover{ color: #000000 !important;}');\n@DX@genericInsertNode@DW@WQO4965656@DW@0@DW@9@DW@<div style=\"position:absolute;right:0px;top:369px;left:0px;height:41px\" id=\"FLG4965678_layoutdiv\"><div style=\"background-color:#f5f5f5;padding-top:0px;top:0;color:#000000;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel dw-hover-class-foreground-23303030303030 dw-hover-class-background-23643764376437\" id=\"FLG4965678\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;FLG4965678&#39;, &#39;FLG4965678&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"z-index:301;position:absolute;right:0px;left:0px;bottom:0px;height:1px\" id=\"YRY4966825_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"YRY4966825\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div><div style=\"z-index:1;top:0px;left:16px;display:table;width:50px;position:absolute;height:100%\" id=\"MJB4965856_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"MJB4965856\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-top:-15px;right:0;top:50%;left:0px;bottom:0;height:30px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;right:0px;text-align:left;height:30px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:49.999%;left:0;width:27px;margin-top:-12px;margin-bottom:0px;margin-right:0px;height:27px\" class=\"guilayoutgridbag_container_padded\"><label style=\"padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"rcheckbox\" id=\"EWA4965856\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;EWA4965856&#39;, &#39;EWA4965856&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" ondblclick=\"try {dwFwPreEv(event,false,this); ;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><input name=\"EWA4965856\" value=\"EWA4965856\" type=\"checkbox\" id=\"EWA4965856_input\" onchange=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxCheckboxOnChange(event, &#39;EWA4965856&#39;, &#39;EWA4965856_input&#39;, &#39;&#39;, false, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);this.blur();this.focus();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><span class=\"checkmark\" id=\"EWA4965856_checkmark\"></span><span class=\"rcheckbox_text\" id=\"EWA4965856_text\"></span></label></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:76px;display:table;width:34px;position:absolute;height:100%\" id=\"WSD4965856_layoutdiv\"><div style=\"background-color:transparent;padding-top:4px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"WSD4965856\"><div style=\"right:0px;top:4px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:24px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:24px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-8px;right:0;height:16px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"width:24px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:8px\" class=\"guiimage\" id=\"FIP4965856\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;FIP4965856&#39;, &#39;FIP4965856&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;WYY4965856\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 71, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=bi_image_FCE645C38BE44E45BFFA7E9674945850\" alt=\"\" id=\"FIP4965856_img\"></div></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:120px;display:table;width:254px;position:absolute;height:100%\" id=\"HAR4965857_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;padding-left:0px;display:table-cell;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel r-table-cell\" id=\"HAR4965857\">Machining&nbsp;surfaces</div></div><div style=\"z-index:1;top:0px;left:566px;display:table;width:46px;position:absolute;height:100%\" id=\"KUF4965862_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;min-height:40px;right:0;padding-right:0px;min-width:56px\" class=\"guipanel r-table-cell\" id=\"KUF4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:76px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:0px;text-align:center\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-2px;top:0;left:49.999%;bottom:0;width:1px;margin-top:0px;margin-bottom:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:#f4f4f4;padding-top:0px;margin:auto;top:0;max-width:1px;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px;min-width:1px\" class=\"guipanel\" id=\"CAA4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div></div><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:76px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:10px;top:50%;left:0;width:46px;margin-top:-19px;margin-bottom:0px;margin-right:20px;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;min-height:30px;right:0;padding-right:8px\" class=\"guipanel r-table-cell\" id=\"CJB4965857\"><div style=\"right:8px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:38px;top:0;left:0;height:38px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:38px;text-align:center;height:38px\" class=\"guilayoutgridbag_container\"><div style=\"width:38px;margin-left:-19px;margin-top:-19px;top:50%;left:50%;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;cursor:pointer;padding-top:4px;margin:auto;top:0;left:0;bottom:0;padding-left:4px;padding-bottom:4px;right:0;padding-right:4px\" class=\"guipanel incraseContrastForPartlistIconsOnClick decreaseContrastForPartlistIconsOnHover cursor_pointer\" id=\"NQE4965857\" onmousedown=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnMouseUp(event, &#39;NQE4965857&#39;, &#39;NQE4965857&#39;, &#39;&#39;, true, false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;TLS4965857\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Goto&amp;nbsp;assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 106, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnClick(event, &#39;NQE4965857&#39;, &#39;NQE4965857&#39;, &#39;&#39;, true, false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div style=\"right:4px;top:4px;left:4px;bottom:4px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"border-radius:2px;background-color:rgba(0,0,0,0.06274509803921569);padding-top:7px;top:0;left:0;bottom:0;padding-left:7px;padding-bottom:7px;right:0;padding-right:7px\" class=\"guipanel\" id=\"WJH4965857\"><div style=\"right:7px;top:7px;left:7px;bottom:7px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"width:16px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:0px\" class=\"guiimage\" id=\"LXN4965857\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_responsive_table_go_down_normal.png\" alt=\"\" id=\"LXN4965857_img\"></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div>@DX@evaluateJavascript@DW@dwDomSetGlobalStyleIfNotExists('.dw-hover-class-background-23643764376437:hover{ background-color: #d7d7d7 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-foreground-23303030303030:hover{ color: #000000 !important;}');\n@DX@genericInsertNode@DW@WQO4965656@DW@0@DW@10@DW@<div style=\"position:absolute;right:0px;top:410px;left:0px;height:41px\" id=\"DUX4965678_layoutdiv\"><div style=\"background-color:#f5f5f5;padding-top:0px;top:0;color:#000000;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel dw-hover-class-foreground-23303030303030 dw-hover-class-background-23643764376437\" id=\"DUX4965678\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;DUX4965678&#39;, &#39;DUX4965678&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"z-index:301;position:absolute;right:0px;left:0px;bottom:0px;height:1px\" id=\"EMP4966826_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"EMP4966826\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div><div style=\"z-index:1;top:0px;left:16px;display:table;width:50px;position:absolute;height:100%\" id=\"PHT4965857_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"PHT4965857\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-top:-15px;right:0;top:50%;left:0px;bottom:0;height:30px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;right:0px;text-align:left;height:30px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:49.999%;left:0;width:27px;margin-top:-12px;margin-bottom:0px;margin-right:0px;height:27px\" class=\"guilayoutgridbag_container_padded\"><label style=\"padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"rcheckbox\" id=\"IRR4965857\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;IRR4965857&#39;, &#39;IRR4965857&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" ondblclick=\"try {dwFwPreEv(event,false,this); ;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><input name=\"IRR4965857\" value=\"IRR4965857\" type=\"checkbox\" id=\"IRR4965857_input\" onchange=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxCheckboxOnChange(event, &#39;IRR4965857&#39;, &#39;IRR4965857_input&#39;, &#39;&#39;, false, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);this.blur();this.focus();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><span class=\"checkmark\" id=\"IRR4965857_checkmark\"></span><span class=\"rcheckbox_text\" id=\"IRR4965857_text\"></span></label></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:76px;display:table;width:34px;position:absolute;height:100%\" id=\"NVU4965857_layoutdiv\"><div style=\"background-color:transparent;padding-top:4px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"NVU4965857\"><div style=\"right:0px;top:4px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:24px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:24px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-8px;right:0;height:16px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"width:24px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:8px\" class=\"guiimage\" id=\"SOV4965857\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;SOV4965857&#39;, &#39;SOV4965857&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;IYV4965857\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 71, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=bi_image_FCE645C38BE44E45BFFA7E9674945850\" alt=\"\" id=\"SOV4965857_img\"></div></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:120px;display:table;width:254px;position:absolute;height:100%\" id=\"CQH4965857_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;padding-left:0px;display:table-cell;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel r-table-cell\" id=\"CQH4965857\">Oscillators</div></div><div style=\"z-index:1;top:0px;left:566px;display:table;width:46px;position:absolute;height:100%\" id=\"ISJ4965862_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;min-height:40px;right:0;padding-right:0px;min-width:56px\" class=\"guipanel r-table-cell\" id=\"ISJ4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:76px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:0px;text-align:center\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-2px;top:0;left:49.999%;bottom:0;width:1px;margin-top:0px;margin-bottom:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:#f4f4f4;padding-top:0px;margin:auto;top:0;max-width:1px;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px;min-width:1px\" class=\"guipanel\" id=\"KQO4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div></div><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:76px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:10px;top:50%;left:0;width:46px;margin-top:-19px;margin-bottom:0px;margin-right:20px;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;min-height:30px;right:0;padding-right:8px\" class=\"guipanel r-table-cell\" id=\"PRX4965857\"><div style=\"right:8px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:38px;top:0;left:0;height:38px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:38px;text-align:center;height:38px\" class=\"guilayoutgridbag_container\"><div style=\"width:38px;margin-left:-19px;margin-top:-19px;top:50%;left:50%;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;cursor:pointer;padding-top:4px;margin:auto;top:0;left:0;bottom:0;padding-left:4px;padding-bottom:4px;right:0;padding-right:4px\" class=\"guipanel incraseContrastForPartlistIconsOnClick decreaseContrastForPartlistIconsOnHover cursor_pointer\" id=\"AIF4965857\" onmousedown=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnMouseUp(event, &#39;AIF4965857&#39;, &#39;AIF4965857&#39;, &#39;&#39;, true, false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;DVE4965857\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Goto&amp;nbsp;assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 106, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnClick(event, &#39;AIF4965857&#39;, &#39;AIF4965857&#39;, &#39;&#39;, true, false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div style=\"right:4px;top:4px;left:4px;bottom:4px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"border-radius:2px;background-color:rgba(0,0,0,0.06274509803921569);padding-top:7px;top:0;left:0;bottom:0;padding-left:7px;padding-bottom:7px;right:0;padding-right:7px\" class=\"guipanel\" id=\"GII4965857\"><div style=\"right:7px;top:7px;left:7px;bottom:7px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"width:16px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:0px\" class=\"guiimage\" id=\"TIW4965857\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_responsive_table_go_down_normal.png\" alt=\"\" id=\"TIW4965857_img\"></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div>@DX@evaluateJavascript@DW@dwDomSetGlobalStyleIfNotExists('.dw-hover-class-background-23643764376437:hover{ background-color: #d7d7d7 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-foreground-23303030303030:hover{ color: #000000 !important;}');\n@DX@genericInsertNode@DW@WQO4965656@DW@0@DW@11@DW@<div style=\"position:absolute;right:0px;top:451px;left:0px;height:41px\" id=\"TQY4965678_layoutdiv\"><div style=\"background-color:#f5f5f5;padding-top:0px;top:0;color:#000000;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel dw-hover-class-foreground-23303030303030 dw-hover-class-background-23643764376437\" id=\"TQY4965678\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;TQY4965678&#39;, &#39;TQY4965678&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"z-index:301;position:absolute;right:0px;left:0px;bottom:0px;height:1px\" id=\"HLH4966827_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"HLH4966827\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div><div style=\"z-index:1;top:0px;left:16px;display:table;width:50px;position:absolute;height:100%\" id=\"IVT4965857_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"IVT4965857\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-top:-15px;right:0;top:50%;left:0px;bottom:0;height:30px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;right:0px;text-align:left;height:30px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:49.999%;left:0;width:27px;margin-top:-12px;margin-bottom:0px;margin-right:0px;height:27px\" class=\"guilayoutgridbag_container_padded\"><label style=\"padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"rcheckbox\" id=\"LAW4965857\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;LAW4965857&#39;, &#39;LAW4965857&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" ondblclick=\"try {dwFwPreEv(event,false,this); ;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><input name=\"LAW4965857\" value=\"LAW4965857\" type=\"checkbox\" id=\"LAW4965857_input\" onchange=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxCheckboxOnChange(event, &#39;LAW4965857&#39;, &#39;LAW4965857_input&#39;, &#39;&#39;, false, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);this.blur();this.focus();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><span class=\"checkmark\" id=\"LAW4965857_checkmark\"></span><span class=\"rcheckbox_text\" id=\"LAW4965857_text\"></span></label></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:76px;display:table;width:34px;position:absolute;height:100%\" id=\"OSV4965858_layoutdiv\"><div style=\"background-color:transparent;padding-top:4px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"OSV4965858\"><div style=\"right:0px;top:4px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:24px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:24px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-8px;right:0;height:16px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"width:24px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:8px\" class=\"guiimage\" id=\"IUI4965858\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;IUI4965858&#39;, &#39;IUI4965858&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;UWU4965858\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 71, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=bi_image_FCE645C38BE44E45BFFA7E9674945850\" alt=\"\" id=\"IUI4965858_img\"></div></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:120px;display:table;width:254px;position:absolute;height:100%\" id=\"LLT4965858_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;padding-left:0px;display:table-cell;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel r-table-cell\" id=\"LLT4965858\">Saws</div></div><div style=\"z-index:1;top:0px;left:566px;display:table;width:46px;position:absolute;height:100%\" id=\"HEG4965862_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;min-height:40px;right:0;padding-right:0px;min-width:56px\" class=\"guipanel r-table-cell\" id=\"HEG4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:76px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:0px;text-align:center\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-2px;top:0;left:49.999%;bottom:0;width:1px;margin-top:0px;margin-bottom:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:#f4f4f4;padding-top:0px;margin:auto;top:0;max-width:1px;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px;min-width:1px\" class=\"guipanel\" id=\"GCS4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div></div><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:76px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:10px;top:50%;left:0;width:46px;margin-top:-19px;margin-bottom:0px;margin-right:20px;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;min-height:30px;right:0;padding-right:8px\" class=\"guipanel r-table-cell\" id=\"PIR4965858\"><div style=\"right:8px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:38px;top:0;left:0;height:38px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:38px;text-align:center;height:38px\" class=\"guilayoutgridbag_container\"><div style=\"width:38px;margin-left:-19px;margin-top:-19px;top:50%;left:50%;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;cursor:pointer;padding-top:4px;margin:auto;top:0;left:0;bottom:0;padding-left:4px;padding-bottom:4px;right:0;padding-right:4px\" class=\"guipanel incraseContrastForPartlistIconsOnClick decreaseContrastForPartlistIconsOnHover cursor_pointer\" id=\"BDP4965858\" onmousedown=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnMouseUp(event, &#39;BDP4965858&#39;, &#39;BDP4965858&#39;, &#39;&#39;, true, false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;FPT4965858\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Goto&amp;nbsp;assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 106, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnClick(event, &#39;BDP4965858&#39;, &#39;BDP4965858&#39;, &#39;&#39;, true, false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div style=\"right:4px;top:4px;left:4px;bottom:4px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"border-radius:2px;background-color:rgba(0,0,0,0.06274509803921569);padding-top:7px;top:0;left:0;bottom:0;padding-left:7px;padding-bottom:7px;right:0;padding-right:7px\" class=\"guipanel\" id=\"EHK4965858\"><div style=\"right:7px;top:7px;left:7px;bottom:7px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"width:16px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:0px\" class=\"guiimage\" id=\"PBF4965858\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_responsive_table_go_down_normal.png\" alt=\"\" id=\"PBF4965858_img\"></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div>@DX@evaluateJavascript@DW@dwDomSetGlobalStyleIfNotExists('.dw-hover-class-background-23643764376437:hover{ background-color: #d7d7d7 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-foreground-23303030303030:hover{ color: #000000 !important;}');\n@DX@genericInsertNode@DW@WQO4965656@DW@0@DW@12@DW@<div style=\"position:absolute;right:0px;top:492px;left:0px;height:41px\" id=\"PIS4965678_layoutdiv\"><div style=\"background-color:#f5f5f5;padding-top:0px;top:0;color:#000000;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel dw-hover-class-foreground-23303030303030 dw-hover-class-background-23643764376437\" id=\"PIS4965678\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;PIS4965678&#39;, &#39;PIS4965678&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"z-index:301;position:absolute;right:0px;left:0px;bottom:0px;height:1px\" id=\"MNB4966829_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"MNB4966829\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div><div style=\"z-index:1;top:0px;left:16px;display:table;width:50px;position:absolute;height:100%\" id=\"KMR4965858_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"KMR4965858\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-top:-15px;right:0;top:50%;left:0px;bottom:0;height:30px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;right:0px;text-align:left;height:30px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:49.999%;left:0;width:27px;margin-top:-12px;margin-bottom:0px;margin-right:0px;height:27px\" class=\"guilayoutgridbag_container_padded\"><label style=\"padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"rcheckbox\" id=\"YTM4965858\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;YTM4965858&#39;, &#39;YTM4965858&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" ondblclick=\"try {dwFwPreEv(event,false,this); ;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><input name=\"YTM4965858\" value=\"YTM4965858\" type=\"checkbox\" id=\"YTM4965858_input\" onchange=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxCheckboxOnChange(event, &#39;YTM4965858&#39;, &#39;YTM4965858_input&#39;, &#39;&#39;, false, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);this.blur();this.focus();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><span class=\"checkmark\" id=\"YTM4965858_checkmark\"></span><span class=\"rcheckbox_text\" id=\"YTM4965858_text\"></span></label></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:76px;display:table;width:34px;position:absolute;height:100%\" id=\"XFK4965859_layoutdiv\"><div style=\"background-color:transparent;padding-top:4px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"XFK4965859\"><div style=\"right:0px;top:4px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:24px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:24px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-8px;right:0;height:16px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"width:24px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:8px\" class=\"guiimage\" id=\"RYF4965859\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;RYF4965859&#39;, &#39;RYF4965859&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;CGJ4965859\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 71, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=bi_image_FCE645C38BE44E45BFFA7E9674945850\" alt=\"\" id=\"RYF4965859_img\"></div></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:120px;display:table;width:254px;position:absolute;height:100%\" id=\"EBP4965859_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;padding-left:0px;display:table-cell;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel r-table-cell\" id=\"EBP4965859\">Dust&nbsp;extraction</div></div><div style=\"z-index:1;top:0px;left:566px;display:table;width:46px;position:absolute;height:100%\" id=\"OST4965862_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;min-height:40px;right:0;padding-right:0px;min-width:56px\" class=\"guipanel r-table-cell\" id=\"OST4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:76px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:0px;text-align:center\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-2px;top:0;left:49.999%;bottom:0;width:1px;margin-top:0px;margin-bottom:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:#f4f4f4;padding-top:0px;margin:auto;top:0;max-width:1px;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px;min-width:1px\" class=\"guipanel\" id=\"QXB4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div></div><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:76px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:10px;top:50%;left:0;width:46px;margin-top:-19px;margin-bottom:0px;margin-right:20px;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;min-height:30px;right:0;padding-right:8px\" class=\"guipanel r-table-cell\" id=\"VXT4965859\"><div style=\"right:8px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:38px;top:0;left:0;height:38px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:38px;text-align:center;height:38px\" class=\"guilayoutgridbag_container\"><div style=\"width:38px;margin-left:-19px;margin-top:-19px;top:50%;left:50%;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;cursor:pointer;padding-top:4px;margin:auto;top:0;left:0;bottom:0;padding-left:4px;padding-bottom:4px;right:0;padding-right:4px\" class=\"guipanel incraseContrastForPartlistIconsOnClick decreaseContrastForPartlistIconsOnHover cursor_pointer\" id=\"ADU4965859\" onmousedown=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnMouseUp(event, &#39;ADU4965859&#39;, &#39;ADU4965859&#39;, &#39;&#39;, true, false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;TGH4965859\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Goto&amp;nbsp;assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 106, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnClick(event, &#39;ADU4965859&#39;, &#39;ADU4965859&#39;, &#39;&#39;, true, false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div style=\"right:4px;top:4px;left:4px;bottom:4px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"border-radius:2px;background-color:rgba(0,0,0,0.06274509803921569);padding-top:7px;top:0;left:0;bottom:0;padding-left:7px;padding-bottom:7px;right:0;padding-right:7px\" class=\"guipanel\" id=\"FQU4965859\"><div style=\"right:7px;top:7px;left:7px;bottom:7px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"width:16px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:0px\" class=\"guiimage\" id=\"FON4965859\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_responsive_table_go_down_normal.png\" alt=\"\" id=\"FON4965859_img\"></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div>@DX@evaluateJavascript@DW@dwDomSetGlobalStyleIfNotExists('.dw-hover-class-background-23643764376437:hover{ background-color: #d7d7d7 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-foreground-23303030303030:hover{ color: #000000 !important;}');\n@DX@genericInsertNode@DW@WQO4965656@DW@0@DW@13@DW@<div style=\"position:absolute;right:0px;top:533px;left:0px;height:41px\" id=\"HQN4965678_layoutdiv\"><div style=\"background-color:#f5f5f5;padding-top:0px;top:0;color:#000000;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel dw-hover-class-foreground-23303030303030 dw-hover-class-background-23643764376437\" id=\"HQN4965678\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;HQN4965678&#39;, &#39;HQN4965678&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"z-index:301;position:absolute;right:0px;left:0px;bottom:0px;height:1px\" id=\"OAE4966830_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"OAE4966830\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div><div style=\"z-index:1;top:0px;left:16px;display:table;width:50px;position:absolute;height:100%\" id=\"YEM4965859_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"YEM4965859\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-top:-15px;right:0;top:50%;left:0px;bottom:0;height:30px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;right:0px;text-align:left;height:30px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:49.999%;left:0;width:27px;margin-top:-12px;margin-bottom:0px;margin-right:0px;height:27px\" class=\"guilayoutgridbag_container_padded\"><label style=\"padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"rcheckbox\" id=\"MXV4965859\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;MXV4965859&#39;, &#39;MXV4965859&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" ondblclick=\"try {dwFwPreEv(event,false,this); ;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><input name=\"MXV4965859\" value=\"MXV4965859\" type=\"checkbox\" id=\"MXV4965859_input\" onchange=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxCheckboxOnChange(event, &#39;MXV4965859&#39;, &#39;MXV4965859_input&#39;, &#39;&#39;, false, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);this.blur();this.focus();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><span class=\"checkmark\" id=\"MXV4965859_checkmark\"></span><span class=\"rcheckbox_text\" id=\"MXV4965859_text\"></span></label></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:76px;display:table;width:34px;position:absolute;height:100%\" id=\"DPI4965860_layoutdiv\"><div style=\"background-color:transparent;padding-top:4px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"DPI4965860\"><div style=\"right:0px;top:4px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:24px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:24px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-8px;right:0;height:16px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"width:24px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:8px\" class=\"guiimage\" id=\"LKL4965860\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;LKL4965860&#39;, &#39;LKL4965860&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;EAJ4965860\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 71, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=bi_image_FCE645C38BE44E45BFFA7E9674945850\" alt=\"\" id=\"LKL4965860_img\"></div></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:120px;display:table;width:254px;position:absolute;height:100%\" id=\"GLM4965860_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;padding-left:0px;display:table-cell;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel r-table-cell\" id=\"GLM4965860\">Basis-Plus&nbsp;system</div></div><div style=\"z-index:1;top:0px;left:566px;display:table;width:46px;position:absolute;height:100%\" id=\"BUN4965862_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;min-height:40px;right:0;padding-right:0px;min-width:56px\" class=\"guipanel r-table-cell\" id=\"BUN4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:76px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:0px;text-align:center\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-2px;top:0;left:49.999%;bottom:0;width:1px;margin-top:0px;margin-bottom:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:#f4f4f4;padding-top:0px;margin:auto;top:0;max-width:1px;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px;min-width:1px\" class=\"guipanel\" id=\"BHF4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div></div><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:76px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:10px;top:50%;left:0;width:46px;margin-top:-19px;margin-bottom:0px;margin-right:20px;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;min-height:30px;right:0;padding-right:8px\" class=\"guipanel r-table-cell\" id=\"DSB4965860\"><div style=\"right:8px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:38px;top:0;left:0;height:38px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:38px;text-align:center;height:38px\" class=\"guilayoutgridbag_container\"><div style=\"width:38px;margin-left:-19px;margin-top:-19px;top:50%;left:50%;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;cursor:pointer;padding-top:4px;margin:auto;top:0;left:0;bottom:0;padding-left:4px;padding-bottom:4px;right:0;padding-right:4px\" class=\"guipanel incraseContrastForPartlistIconsOnClick decreaseContrastForPartlistIconsOnHover cursor_pointer\" id=\"LRS4965860\" onmousedown=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnMouseUp(event, &#39;LRS4965860&#39;, &#39;LRS4965860&#39;, &#39;&#39;, true, false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;DNV4965860\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Goto&amp;nbsp;assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 106, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnClick(event, &#39;LRS4965860&#39;, &#39;LRS4965860&#39;, &#39;&#39;, true, false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div style=\"right:4px;top:4px;left:4px;bottom:4px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"border-radius:2px;background-color:rgba(0,0,0,0.06274509803921569);padding-top:7px;top:0;left:0;bottom:0;padding-left:7px;padding-bottom:7px;right:0;padding-right:7px\" class=\"guipanel\" id=\"RKD4965860\"><div style=\"right:7px;top:7px;left:7px;bottom:7px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"width:16px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:0px\" class=\"guiimage\" id=\"BUO4965860\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_responsive_table_go_down_normal.png\" alt=\"\" id=\"BUO4965860_img\"></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div>@DX@evaluateJavascript@DW@dwDomSetGlobalStyleIfNotExists('.dw-hover-class-background-23643764376437:hover{ background-color: #d7d7d7 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-foreground-23303030303030:hover{ color: #000000 !important;}');\n@DX@genericInsertNode@DW@WQO4965656@DW@0@DW@14@DW@<div style=\"position:absolute;right:0px;top:574px;left:0px;height:41px\" id=\"UWU4965678_layoutdiv\"><div style=\"background-color:#f5f5f5;padding-top:0px;top:0;color:#000000;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel dw-hover-class-foreground-23303030303030 dw-hover-class-background-23643764376437\" id=\"UWU4965678\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;UWU4965678&#39;, &#39;UWU4965678&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"z-index:301;position:absolute;right:0px;left:0px;bottom:0px;height:1px\" id=\"BJX4966831_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"BJX4966831\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div><div style=\"z-index:1;top:0px;left:16px;display:table;width:50px;position:absolute;height:100%\" id=\"CWS4965860_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"CWS4965860\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-top:-15px;right:0;top:50%;left:0px;bottom:0;height:30px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;right:0px;text-align:left;height:30px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:49.999%;left:0;width:27px;margin-top:-12px;margin-bottom:0px;margin-right:0px;height:27px\" class=\"guilayoutgridbag_container_padded\"><label style=\"padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"rcheckbox\" id=\"VBV4965860\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;VBV4965860&#39;, &#39;VBV4965860&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" ondblclick=\"try {dwFwPreEv(event,false,this); ;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><input name=\"VBV4965860\" value=\"VBV4965860\" type=\"checkbox\" id=\"VBV4965860_input\" onchange=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxCheckboxOnChange(event, &#39;VBV4965860&#39;, &#39;VBV4965860_input&#39;, &#39;&#39;, false, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);this.blur();this.focus();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><span class=\"checkmark\" id=\"VBV4965860_checkmark\"></span><span class=\"rcheckbox_text\" id=\"VBV4965860_text\"></span></label></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:76px;display:table;width:34px;position:absolute;height:100%\" id=\"JKB4965860_layoutdiv\"><div style=\"background-color:transparent;padding-top:4px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"JKB4965860\"><div style=\"right:0px;top:4px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:24px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:24px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-8px;right:0;height:16px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"width:24px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:8px\" class=\"guiimage\" id=\"KMI4965860\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;KMI4965860&#39;, &#39;KMI4965860&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;FUY4965860\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 71, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=bi_image_FCE645C38BE44E45BFFA7E9674945850\" alt=\"\" id=\"KMI4965860_img\"></div></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:120px;display:table;width:254px;position:absolute;height:100%\" id=\"ELV4965860_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;padding-left:0px;display:table-cell;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel r-table-cell\" id=\"ELV4965860\">Cutting</div></div><div style=\"z-index:1;top:0px;left:566px;display:table;width:46px;position:absolute;height:100%\" id=\"BEA4965862_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;min-height:40px;right:0;padding-right:0px;min-width:56px\" class=\"guipanel r-table-cell\" id=\"BEA4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:76px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:0px;text-align:center\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-2px;top:0;left:49.999%;bottom:0;width:1px;margin-top:0px;margin-bottom:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:#f4f4f4;padding-top:0px;margin:auto;top:0;max-width:1px;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px;min-width:1px\" class=\"guipanel\" id=\"FXG4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div></div><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:76px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:10px;top:50%;left:0;width:46px;margin-top:-19px;margin-bottom:0px;margin-right:20px;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;min-height:30px;right:0;padding-right:8px\" class=\"guipanel r-table-cell\" id=\"XWU4965860\"><div style=\"right:8px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:38px;top:0;left:0;height:38px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:38px;text-align:center;height:38px\" class=\"guilayoutgridbag_container\"><div style=\"width:38px;margin-left:-19px;margin-top:-19px;top:50%;left:50%;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;cursor:pointer;padding-top:4px;margin:auto;top:0;left:0;bottom:0;padding-left:4px;padding-bottom:4px;right:0;padding-right:4px\" class=\"guipanel incraseContrastForPartlistIconsOnClick decreaseContrastForPartlistIconsOnHover cursor_pointer\" id=\"PYG4965860\" onmousedown=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnMouseUp(event, &#39;PYG4965860&#39;, &#39;PYG4965860&#39;, &#39;&#39;, true, false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;HCD4965860\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Goto&amp;nbsp;assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 106, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnClick(event, &#39;PYG4965860&#39;, &#39;PYG4965860&#39;, &#39;&#39;, true, false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div style=\"right:4px;top:4px;left:4px;bottom:4px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"border-radius:2px;background-color:rgba(0,0,0,0.06274509803921569);padding-top:7px;top:0;left:0;bottom:0;padding-left:7px;padding-bottom:7px;right:0;padding-right:7px\" class=\"guipanel\" id=\"PPJ4965860\"><div style=\"right:7px;top:7px;left:7px;bottom:7px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"width:16px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:0px\" class=\"guiimage\" id=\"JEY4965860\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_responsive_table_go_down_normal.png\" alt=\"\" id=\"JEY4965860_img\"></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div>@DX@evaluateJavascript@DW@dwDomSetGlobalStyleIfNotExists('.dw-hover-class-background-23643764376437:hover{ background-color: #d7d7d7 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-foreground-23303030303030:hover{ color: #000000 !important;}');\n@DX@genericInsertNode@DW@WQO4965656@DW@0@DW@15@DW@<div style=\"position:absolute;right:0px;top:615px;left:0px;height:41px\" id=\"CWQ4965678_layoutdiv\"><div style=\"background-color:#f5f5f5;padding-top:0px;top:0;color:#000000;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel dw-hover-class-foreground-23303030303030 dw-hover-class-background-23643764376437\" id=\"CWQ4965678\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;CWQ4965678&#39;, &#39;CWQ4965678&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"z-index:301;position:absolute;right:0px;left:0px;bottom:0px;height:1px\" id=\"RLF4966832_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"RLF4966832\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div><div style=\"z-index:1;top:0px;left:16px;display:table;width:50px;position:absolute;height:100%\" id=\"AGG4965860_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"AGG4965860\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-top:-15px;right:0;top:50%;left:0px;bottom:0;height:30px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;right:0px;text-align:left;height:30px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:49.999%;left:0;width:27px;margin-top:-12px;margin-bottom:0px;margin-right:0px;height:27px\" class=\"guilayoutgridbag_container_padded\"><label style=\"padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"rcheckbox\" id=\"VTE4965860\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;VTE4965860&#39;, &#39;VTE4965860&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" ondblclick=\"try {dwFwPreEv(event,false,this); ;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><input name=\"VTE4965860\" value=\"VTE4965860\" type=\"checkbox\" id=\"VTE4965860_input\" onchange=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxCheckboxOnChange(event, &#39;VTE4965860&#39;, &#39;VTE4965860_input&#39;, &#39;&#39;, false, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);this.blur();this.focus();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><span class=\"checkmark\" id=\"VTE4965860_checkmark\"></span><span class=\"rcheckbox_text\" id=\"VTE4965860_text\"></span></label></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:76px;display:table;width:34px;position:absolute;height:100%\" id=\"MRV4965861_layoutdiv\"><div style=\"background-color:transparent;padding-top:4px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"MRV4965861\"><div style=\"right:0px;top:4px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:24px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:24px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-8px;right:0;height:16px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"width:24px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:8px\" class=\"guiimage\" id=\"DIV4965861\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;DIV4965861&#39;, &#39;DIV4965861&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;BJT4965861\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 71, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=bi_image_FCE645C38BE44E45BFFA7E9674945850\" alt=\"\" id=\"DIV4965861_img\"></div></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:120px;display:table;width:254px;position:absolute;height:100%\" id=\"XSQ4965861_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;padding-left:0px;display:table-cell;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel r-table-cell\" id=\"XSQ4965861\">Drywall&nbsp;construction&nbsp;and&nbsp;renovation</div></div><div style=\"z-index:1;top:0px;left:566px;display:table;width:46px;position:absolute;height:100%\" id=\"FJS4965862_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;min-height:40px;right:0;padding-right:0px;min-width:56px\" class=\"guipanel r-table-cell\" id=\"FJS4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:76px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:0px;text-align:center\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-2px;top:0;left:49.999%;bottom:0;width:1px;margin-top:0px;margin-bottom:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:#f4f4f4;padding-top:0px;margin:auto;top:0;max-width:1px;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px;min-width:1px\" class=\"guipanel\" id=\"IFG4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div></div><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:76px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:10px;top:50%;left:0;width:46px;margin-top:-19px;margin-bottom:0px;margin-right:20px;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;min-height:30px;right:0;padding-right:8px\" class=\"guipanel r-table-cell\" id=\"HCP4965861\"><div style=\"right:8px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:38px;top:0;left:0;height:38px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:38px;text-align:center;height:38px\" class=\"guilayoutgridbag_container\"><div style=\"width:38px;margin-left:-19px;margin-top:-19px;top:50%;left:50%;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;cursor:pointer;padding-top:4px;margin:auto;top:0;left:0;bottom:0;padding-left:4px;padding-bottom:4px;right:0;padding-right:4px\" class=\"guipanel incraseContrastForPartlistIconsOnClick decreaseContrastForPartlistIconsOnHover cursor_pointer\" id=\"MDS4965861\" onmousedown=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnMouseUp(event, &#39;MDS4965861&#39;, &#39;MDS4965861&#39;, &#39;&#39;, true, false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;DMX4965861\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Goto&amp;nbsp;assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 106, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnClick(event, &#39;MDS4965861&#39;, &#39;MDS4965861&#39;, &#39;&#39;, true, false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div style=\"right:4px;top:4px;left:4px;bottom:4px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"border-radius:2px;background-color:rgba(0,0,0,0.06274509803921569);padding-top:7px;top:0;left:0;bottom:0;padding-left:7px;padding-bottom:7px;right:0;padding-right:7px\" class=\"guipanel\" id=\"XBG4965861\"><div style=\"right:7px;top:7px;left:7px;bottom:7px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"width:16px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:0px\" class=\"guiimage\" id=\"BDE4965861\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_responsive_table_go_down_normal.png\" alt=\"\" id=\"BDE4965861_img\"></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div>@DX@evaluateJavascript@DW@dwDomSetGlobalStyleIfNotExists('.dw-hover-class-background-23643764376437:hover{ background-color: #d7d7d7 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-foreground-23303030303030:hover{ color: #000000 !important;}');\n@DX@genericInsertNode@DW@WQO4965656@DW@0@DW@16@DW@<div style=\"position:absolute;right:0px;top:656px;left:0px;height:41px\" id=\"GGI4965678_layoutdiv\"><div style=\"background-color:#f5f5f5;padding-top:0px;top:0;color:#000000;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel dw-hover-class-foreground-23303030303030 dw-hover-class-background-23643764376437\" id=\"GGI4965678\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;GGI4965678&#39;, &#39;GGI4965678&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div class=\"guilayoutabsolute\"><div style=\"z-index:301;position:absolute;right:0px;left:0px;bottom:0px;height:1px\" id=\"LRI4966833_layoutdiv\"><div style=\"background-color:#f4f4f4;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"LRI4966833\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div><div style=\"z-index:1;top:0px;left:16px;display:table;width:50px;position:absolute;height:100%\" id=\"HDD4965861_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"HDD4965861\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-top:-15px;right:0;top:50%;left:0px;bottom:0;height:30px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;right:0px;text-align:left;height:30px\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:49.999%;left:0;width:27px;margin-top:-12px;margin-bottom:0px;margin-right:0px;height:27px\" class=\"guilayoutgridbag_container_padded\"><label style=\"padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"rcheckbox\" id=\"GTL4965861\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;GTL4965861&#39;, &#39;GTL4965861&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" ondblclick=\"try {dwFwPreEv(event,false,this); ;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><input name=\"GTL4965861\" value=\"GTL4965861\" type=\"checkbox\" id=\"GTL4965861_input\" onchange=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxCheckboxOnChange(event, &#39;GTL4965861&#39;, &#39;GTL4965861_input&#39;, &#39;&#39;, false, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);this.blur();this.focus();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><span class=\"checkmark\" id=\"GTL4965861_checkmark\"></span><span class=\"rcheckbox_text\" id=\"GTL4965861_text\"></span></label></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:76px;display:table;width:34px;position:absolute;height:100%\" id=\"HFH4965862_layoutdiv\"><div style=\"background-color:transparent;padding-top:4px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel r-table-cell\" id=\"HFH4965862\"><div style=\"right:0px;top:4px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:24px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:24px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:0px;top:50%;left:0;margin-top:-8px;right:0;height:16px;margin-right:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"width:24px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:8px\" class=\"guiimage\" id=\"JNL4965862\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseUp(event, &#39;JNL4965862&#39;, &#39;JNL4965862&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;KAP4965862\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 71, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=bi_image_FCE645C38BE44E45BFFA7E9674945850\" alt=\"\" id=\"JNL4965862_img\"></div></div></div></div></div></div></div><div style=\"z-index:1;top:0px;left:120px;display:table;width:254px;position:absolute;height:100%\" id=\"WQY4965862_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;padding-left:0px;display:table-cell;width:100%;padding-bottom:0px;padding-right:0px;height:100%\" class=\"guilabel r-table-cell\" id=\"WQY4965862\">Joining&nbsp;&ndash;&nbsp;DOMINO&nbsp;joining&nbsp;system</div></div><div style=\"z-index:1;top:0px;left:566px;display:table;width:46px;position:absolute;height:100%\" id=\"DUX4965862_layoutdiv\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;display:table-cell;padding-bottom:0px;min-height:40px;right:0;padding-right:0px;min-width:56px\" class=\"guipanel r-table-cell\" id=\"DUX4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:76px;top:0;left:0;bottom:0\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:0px;text-align:center\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:-2px;top:0;left:49.999%;bottom:0;width:1px;margin-top:0px;margin-bottom:0px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:#f4f4f4;padding-top:0px;margin:auto;top:0;max-width:1px;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px;min-width:1px\" class=\"guipanel\" id=\"OTU4965862\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutflow\"><div style=\"margin-left:0px\" class=\"guilayoutflow_center\"></div></div></div></div></div><div style=\"background-color:transparent;top:0px;left:0px;bottom:0px;vertical-align:middle;width:76px;text-align:left\" class=\"guilayoutgridbag_container\"><div style=\"margin-left:10px;top:50%;left:0;width:46px;margin-top:-19px;margin-bottom:0px;margin-right:20px;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;min-height:30px;right:0;padding-right:8px\" class=\"guipanel r-table-cell\" id=\"PSM4965862\"><div style=\"right:8px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"width:38px;top:0;left:0;height:38px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:38px;text-align:center;height:38px\" class=\"guilayoutgridbag_container\"><div style=\"width:38px;margin-left:-19px;margin-top:-19px;top:50%;left:50%;height:38px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;cursor:pointer;padding-top:4px;margin:auto;top:0;left:0;bottom:0;padding-left:4px;padding-bottom:4px;right:0;padding-right:4px\" class=\"guipanel incraseContrastForPartlistIconsOnClick decreaseContrastForPartlistIconsOnHover cursor_pointer\" id=\"UMR4965862\" onmousedown=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseleave=\"try {dwFwPreEv(event,true,this);dwTooltip_hideTooltips();;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseup=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnMouseUp(event, &#39;UMR4965862&#39;, &#39;UMR4965862&#39;, &#39;&#39;, true, false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseover=\"try {dwFwPreEv(event,true,this);dwTooltip_delayShowTooltip(event, &#39;&lt;div style=\\&quot;padding-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px\\&quot; class=\\&quot;guilabel\\&quot; id=\\&quot;QVT4965862\\&quot;&gt;&lt;span style=\\&quot;color:#575757\\&quot;&gt;Goto&amp;nbsp;assembly&lt;\\/span&gt;&lt;\\/div&gt;&#39;, 250, 106, 28, this);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,false);dwAjaxDefaultOnClick(event, &#39;UMR4965862&#39;, &#39;UMR4965862&#39;, &#39;&#39;, true, false);dwFwAsync(event,false);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><div style=\"right:4px;top:4px;left:4px;bottom:4px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"border-radius:2px;background-color:rgba(0,0,0,0.06274509803921569);padding-top:7px;top:0;left:0;bottom:0;padding-left:7px;padding-bottom:7px;right:0;padding-right:7px\" class=\"guipanel\" id=\"BSF4965862\"><div style=\"right:7px;top:7px;left:7px;bottom:7px\" class=\"guilayoutborder\"><div style=\"height:0px\" class=\"guilayoutborder_north\"></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_west\"></div><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutborder_center\"><div style=\"width:16px;padding-top:0px;padding-bottom:0px;height:16px;padding-left:0px;padding-right:0px\" class=\"guiimage\" id=\"BAE4965862\"><img style=\"position:absolute\" src=\"WEB-RES/resource/resource?id=class_image_de.docware.framework.modules.gui.design.a_defaultimages_responsive_table_go_down_normal.png\" alt=\"\" id=\"BAE4965862_img\"></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div><div style=\"top:0px;width:0px;bottom:0px\" class=\"guilayoutborder_east\"></div><div style=\"height:0px\" class=\"guilayoutborder_south\"></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div>@DX@evaluateJavascript@DW@dwDomSetGlobalStyleIfNotExists('.dw-hover-class-background-23643764376437:hover{ background-color: #d7d7d7 !important;}');\ndwDomSetGlobalStyleIfNotExists('.dw-hover-class-foreground-23303030303030:hover{ color: #000000 !important;}');\n@DX@evaluateJavascript@DW@var timer = DWUTILS_FUNCTION_TIMEOUT_REGISTRY['fixedColumn']; if (timer) clearTimeout(timer); DWUTILS_FUNCTION_TIMEOUT_REGISTRY['fixedColumn'] = setTimeout(function() {dwHelperUpdateNotifyingScrollPanelColumnScrollPosition('MWJ4965656')}, 10)@DX@evaluateJavascript@DW@var timer = DWUTILS_FUNCTION_TIMEOUT_REGISTRY['fixedColumn']; if (timer) clearTimeout(timer); DWUTILS_FUNCTION_TIMEOUT_REGISTRY['fixedColumn'] = setTimeout(function() {dwHelperUpdateNotifyingScrollPanelColumnScrollPosition('MWJ4965656')}, 10)@DX@setStyle@DW@UXU4965633_layoutdiv@DW@left@DW@522px@DX@setStyle@DW@UXU4965633_layoutdiv@DW@width@DW@92px@DX@removeStyle@DW@UXU4965633_layoutdiv@DW@right@DX@setStyle@DW@UXU4965633_layoutdiv@DW@top@DW@0px@DX@setStyle@DW@UXU4965633_layoutdiv@DW@height@DW@48px@DX@removeStyle@DW@UXU4965633_layoutdiv@DW@bottom@DX@setStyle@DW@UXU4965633_layoutdiv@DW@z-index@DW@300@DX@genericRemoveNode@DW@YIP4965875@DW@0|0@DW@0@DX@genericInsertNode@DW@YIP4965875@DW@0|0@DW@0@DW@<div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;right:0px;text-align:right;height:24px\" class=\"guilayoutgridbag_container\"><div style=\"width:414px;margin-top:-12px;right:0;top:50%;height:24px\" class=\"guilayoutgridbag_container_padded\"><div style=\"background-color:transparent;padding-top:0px;top:0;left:0;bottom:0;padding-left:0px;padding-bottom:0px;right:0;padding-right:0px\" class=\"guipanel\" id=\"AYR4966835\"><div style=\"right:0px;top:0px;left:0px;bottom:0px\" class=\"guilayoutgridbag\"><div style=\"margin-left:-207px;top:50%;left:50%;bottom:0;width:414px;margin-top:-12px;right:0;height:24px\" class=\"guilayoutgridbag_centered\"><div style=\"background-color:transparent;top:0px;left:0px;vertical-align:middle;width:73px;text-align:left;height:24px\" class=\"guilayoutgridbag_container\"><div style=\"width:73px;margin-top:-12px;top:50%;left:0;height:24px\" class=\"guilayoutgridbag_container_padded\"><div style=\"cursor:pointer;padding-top:6px;max-height:24px;padding-left:4px;padding-bottom:0px;font-size:10px;min-height:24px;line-height:11px;background-color:#efefef;width:100%;font-family:Open Sans,Segoe UI,Verdana,Tahoma,Arial,sans-serif,Arial Unicode MS,Helvetica,Lucida Grande,Geneva,Sans-Serif;padding-right:4px;height:100%\" class=\"guilabel cursor_pointer\" id=\"KMT4965892\" onmouseleave=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseLeave(event, &#39;KMT4965892&#39;, &#39;KMT4965892&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseenter=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseEnter(event, &#39;KMT4965892&#39;, &#39;KMT4965892&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnClick(event, &#39;KMT4965892&#39;, &#39;KMT4965892&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\">Legal notice |</div></div></div><div style=\"background-color:transparent;top:0px;left:73px;vertical-align:middle;width:152px;text-align:left;height:24px\" class=\"guilayoutgridbag_container\"><div style=\"width:152px;margin-top:-12px;top:50%;left:0;height:24px\" class=\"guilayoutgridbag_container_padded\"><div style=\"cursor:pointer;padding-top:6px;max-height:24px;padding-left:4px;padding-bottom:0px;font-size:10px;min-height:24px;line-height:11px;background-color:#efefef;width:100%;font-family:Open Sans,Segoe UI,Verdana,Tahoma,Arial,sans-serif,Arial Unicode MS,Helvetica,Lucida Grande,Geneva,Sans-Serif;padding-right:4px;height:100%\" class=\"guilabel cursor_pointer\" id=\"LBE4965892\" onmouseleave=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseLeave(event, &#39;LBE4965892&#39;, &#39;LBE4965892&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseenter=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseEnter(event, &#39;LBE4965892&#39;, &#39;LBE4965892&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnClick(event, &#39;LBE4965892&#39;, &#39;LBE4965892&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\">Terms and Conditions of Use |</div></div></div><div style=\"background-color:transparent;top:0px;left:225px;vertical-align:middle;width:50px;text-align:left;height:24px\" class=\"guilayoutgridbag_container\"><div style=\"width:50px;margin-top:-12px;top:50%;left:0;height:24px\" class=\"guilayoutgridbag_container_padded\"><div style=\"cursor:pointer;padding-top:6px;max-height:24px;padding-left:4px;padding-bottom:0px;font-size:10px;min-height:24px;line-height:11px;background-color:#efefef;width:100%;font-family:Open Sans,Segoe UI,Verdana,Tahoma,Arial,sans-serif,Arial Unicode MS,Helvetica,Lucida Grande,Geneva,Sans-Serif;padding-right:4px;height:100%\" class=\"guilabel cursor_pointer\" id=\"FCX4965892\" onmouseleave=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseLeave(event, &#39;FCX4965892&#39;, &#39;FCX4965892&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseenter=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseEnter(event, &#39;FCX4965892&#39;, &#39;FCX4965892&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnClick(event, &#39;FCX4965892&#39;, &#39;FCX4965892&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\">Privacy |</div></div></div><div style=\"background-color:transparent;top:0px;left:275px;vertical-align:middle;width:101px;text-align:left;height:24px\" class=\"guilayoutgridbag_container\"><div style=\"width:101px;margin-top:-12px;top:50%;left:0;height:24px\" class=\"guilayoutgridbag_container_padded\"><div style=\"cursor:pointer;padding-top:6px;max-height:24px;padding-left:4px;padding-bottom:0px;font-size:10px;min-height:24px;line-height:11px;background-color:#efefef;width:100%;font-family:Open Sans,Segoe UI,Verdana,Tahoma,Arial,sans-serif,Arial Unicode MS,Helvetica,Lucida Grande,Geneva,Sans-Serif;padding-right:4px;height:100%\" class=\"guilabel cursor_pointer\" id=\"SLM4965892\" onmouseleave=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseLeave(event, &#39;SLM4965892&#39;, &#39;SLM4965892&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseenter=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseEnter(event, &#39;SLM4965892&#39;, &#39;SLM4965892&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnClick(event, &#39;SLM4965892&#39;, &#39;SLM4965892&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\">Right of Withdrawal</div></div></div><div style=\"background-color:transparent;top:0px;left:376px;vertical-align:middle;width:38px;text-align:left;height:24px\" class=\"guilayoutgridbag_container\"><div style=\"width:37px;margin-top:-12px;top:50%;left:0;height:24px\" class=\"guilayoutgridbag_container_padded\"><div style=\"cursor:pointer;padding-top:5px;max-height:24px;padding-left:4px;padding-bottom:0px;font-size:10px;min-height:24px;line-height:11px;background-color:#efefef;width:100%;font-family:Open Sans,Segoe UI,Verdana,Tahoma,Arial,sans-serif,Arial Unicode MS,Helvetica,Lucida Grande,Geneva,Sans-Serif;padding-right:4px;height:100%\" class=\"guilabel cursor_pointer\" id=\"JCF4965892\" onmouseleave=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseLeave(event, &#39;JCF4965892&#39;, &#39;JCF4965892&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onmouseenter=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnMouseEnter(event, &#39;JCF4965892&#39;, &#39;JCF4965892&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\" onclick=\"try {dwFwPreEv(event,false,this);dwFwAsync(event,true);dwAjaxDefaultOnClick(event, &#39;JCF4965892&#39;, &#39;JCF4965892&#39;, &#39;&#39;, true, true);;dwFwPostEv(event)}catch(ex){try{dwFwExH(ex);}catch(ex2){}}\"><img style=\"width:25px;vertical-align:middle;cursor:pointer;height:16px\" src=\"WEB-RES/resource/resource?id=ba_image_class_image_de.docware.framework.modules.config.common.Language_flags_en_64.png_image_png_subtype_unknown_25x25_false_false_2913F50F5EE40913B5284D285DA43967\" alt=\"\" id=\"JCF4965892_img\" class=\"cursor_pointer\"></div></div></div></div></div></div></div></div>@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0@DW@width@DW@280px@DX@genericRemoveNodeStyle@DW@RFB4965940@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0@DW@height@DW@40px@DX@genericRemoveNodeStyle@DW@RFB4965940@DW@0|0@DW@bottom@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@RFB4965940@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|0@DW@height@DW@40px@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@RFB4965940@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|0@DW@width@DW@40px@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|0|0@DW@height@DW@40px@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|0|0@DW@margin-top@DW@-20px@DX@genericRemoveNodeStyle@DW@RFB4965940@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@RFB4965940@DW@0|0|0|0@DW@width@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|1@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@RFB4965940@DW@0|0|1@DW@bottom@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|1@DW@height@DW@40px@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|1@DW@left@DW@40px@DX@genericRemoveNodeStyle@DW@RFB4965940@DW@0|0|1@DW@right@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|1@DW@width@DW@40px@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|1|0@DW@height@DW@40px@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|1|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|1|0@DW@margin-top@DW@-20px@DX@genericRemoveNodeStyle@DW@RFB4965940@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|1|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|1|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|1|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|1|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@RFB4965940@DW@0|0|1|0@DW@width@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|2@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@RFB4965940@DW@0|0|2@DW@bottom@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|2@DW@height@DW@40px@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|2@DW@left@DW@80px@DX@genericRemoveNodeStyle@DW@RFB4965940@DW@0|0|2@DW@right@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|2@DW@width@DW@40px@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|2|0@DW@height@DW@40px@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|2|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|2|0@DW@margin-top@DW@-20px@DX@genericRemoveNodeStyle@DW@RFB4965940@DW@0|0|2|0@DW@bottom@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|2|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|2|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|2|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|2|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@RFB4965940@DW@0|0|2|0@DW@width@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|3@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@RFB4965940@DW@0|0|3@DW@bottom@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|3@DW@height@DW@40px@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|3@DW@left@DW@120px@DX@genericRemoveNodeStyle@DW@RFB4965940@DW@0|0|3@DW@right@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|3@DW@width@DW@40px@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|3|0@DW@height@DW@40px@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|3|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|3|0@DW@margin-top@DW@-20px@DX@genericRemoveNodeStyle@DW@RFB4965940@DW@0|0|3|0@DW@bottom@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|3|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|3|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|3|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|3|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@RFB4965940@DW@0|0|3|0@DW@width@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|4@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@RFB4965940@DW@0|0|4@DW@bottom@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|4@DW@height@DW@40px@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|4@DW@left@DW@160px@DX@genericRemoveNodeStyle@DW@RFB4965940@DW@0|0|4@DW@right@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|4@DW@width@DW@40px@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|4|0@DW@height@DW@40px@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|4|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|4|0@DW@margin-top@DW@-20px@DX@genericRemoveNodeStyle@DW@RFB4965940@DW@0|0|4|0@DW@bottom@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|4|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|4|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|4|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|4|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@RFB4965940@DW@0|0|4|0@DW@width@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|5@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@RFB4965940@DW@0|0|5@DW@bottom@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|5@DW@height@DW@40px@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|5@DW@left@DW@200px@DX@genericRemoveNodeStyle@DW@RFB4965940@DW@0|0|5@DW@right@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|5@DW@width@DW@40px@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|5|0@DW@height@DW@40px@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|5|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|5|0@DW@margin-top@DW@-20px@DX@genericRemoveNodeStyle@DW@RFB4965940@DW@0|0|5|0@DW@bottom@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|5|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|5|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|5|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|5|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@RFB4965940@DW@0|0|5|0@DW@width@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|6@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@RFB4965940@DW@0|0|6@DW@bottom@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|6@DW@height@DW@40px@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|6@DW@left@DW@240px@DX@genericRemoveNodeStyle@DW@RFB4965940@DW@0|0|6@DW@right@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|6@DW@width@DW@40px@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|6|0@DW@height@DW@40px@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|6|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|6|0@DW@margin-top@DW@-20px@DX@genericRemoveNodeStyle@DW@RFB4965940@DW@0|0|6|0@DW@bottom@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|6|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|6|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|6|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@RFB4965940@DW@0|0|6|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@RFB4965940@DW@0|0|6|0@DW@width@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0@DW@right@DW@0@DX@genericRemoveNodeStyle@DW@GOL4965941@DW@0|0@DW@margin-left@DX@genericRemoveNodeStyle@DW@GOL4965941@DW@0|0@DW@width@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0@DW@height@DW@20px@DX@genericRemoveNodeStyle@DW@GOL4965941@DW@0|0@DW@bottom@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@GOL4965941@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|0@DW@height@DW@20px@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@GOL4965941@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|0@DW@width@DW@20px@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|0|0@DW@height@DW@20px@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|0|0@DW@margin-top@DW@-10px@DX@genericRemoveNodeStyle@DW@GOL4965941@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|0|0@DW@width@DW@20px@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericRemoveNodeStyle@DW@GOL4965941@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|1@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@GOL4965941@DW@0|0|1@DW@bottom@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|1@DW@height@DW@20px@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|1@DW@left@DW@20px@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|1@DW@right@DW@20px@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|1@DW@width@DW@0px@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|1|0@DW@height@DW@0px@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|1|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|1|0@DW@margin-top@DW@3px@DX@genericRemoveNodeStyle@DW@GOL4965941@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|1|0@DW@width@DW@0px@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|1|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|1|0@DW@margin-left@DW@0px@DX@genericRemoveNodeStyle@DW@GOL4965941@DW@0|0|1|0@DW@right@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|2@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@GOL4965941@DW@0|0|2@DW@bottom@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|2@DW@height@DW@20px@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|2@DW@left@DW@20px@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|2@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@GOL4965941@DW@0|0|2@DW@width@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|2|0@DW@height@DW@20px@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|2|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|2|0@DW@margin-top@DW@-10px@DX@genericRemoveNodeStyle@DW@GOL4965941@DW@0|0|2|0@DW@bottom@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|2|0@DW@width@DW@20px@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|2|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@GOL4965941@DW@0|0|2|0@DW@margin-left@DW@0px@DX@genericRemoveNodeStyle@DW@GOL4965941@DW@0|0|2|0@DW@left@DX@genericSetNodeStyle@DW@KPX4965940@DW@0|0@DW@width@DW@280px@DX@genericRemoveNodeStyle@DW@KPX4965940@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@KPX4965940@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@KPX4965940@DW@0|0@DW@height@DW@40px@DX@genericRemoveNodeStyle@DW@KPX4965940@DW@0|0@DW@bottom@DX@genericSetNodeStyle@DW@KPX4965940@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@KPX4965940@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@KPX4965940@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@KPX4965940@DW@0|0|0@DW@height@DW@40px@DX@genericSetNodeStyle@DW@KPX4965940@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@KPX4965940@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@KPX4965940@DW@0|0|0@DW@width@DW@280px@DX@genericSetNodeStyle@DW@KPX4965940@DW@0|0|0|0@DW@height@DW@40px@DX@genericSetNodeStyle@DW@KPX4965940@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@KPX4965940@DW@0|0|0|0@DW@margin-top@DW@-20px@DX@genericRemoveNodeStyle@DW@KPX4965940@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@KPX4965940@DW@0|0|0|0@DW@width@DW@280px@DX@genericSetNodeStyle@DW@KPX4965940@DW@0|0|0|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@KPX4965940@DW@0|0|0|0@DW@margin-left@DW@-140px@DX@genericRemoveNodeStyle@DW@KPX4965940@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@KPX4965940@DW@0|0|1@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@KPX4965940@DW@0|0|1@DW@bottom@DX@genericSetNodeStyle@DW@KPX4965940@DW@0|0|1@DW@height@DW@40px@DX@genericSetNodeStyle@DW@KPX4965940@DW@0|0|1@DW@left@DW@280px@DX@genericRemoveNodeStyle@DW@KPX4965940@DW@0|0|1@DW@right@DX@genericSetNodeStyle@DW@KPX4965940@DW@0|0|1@DW@width@DW@0px@DX@genericSetNodeStyle@DW@KPX4965940@DW@0|0|1|0@DW@height@DW@0px@DX@genericSetNodeStyle@DW@KPX4965940@DW@0|0|1|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@KPX4965940@DW@0|0|1|0@DW@margin-top@DW@0px@DX@genericRemoveNodeStyle@DW@KPX4965940@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@KPX4965940@DW@0|0|1|0@DW@width@DW@0px@DX@genericSetNodeStyle@DW@KPX4965940@DW@0|0|1|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@KPX4965940@DW@0|0|1|0@DW@margin-left@DW@0px@DX@genericRemoveNodeStyle@DW@KPX4965940@DW@0|0|1|0@DW@right@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0@DW@right@DW@0@DX@genericRemoveNodeStyle@DW@IUQ4965633@DW@0|0@DW@margin-left@DX@genericRemoveNodeStyle@DW@IUQ4965633@DW@0|0@DW@width@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@IUQ4965633@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@IUQ4965633@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@IUQ4965633@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|0@DW@height@DW@0px@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|0@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@IUQ4965633@DW@0|0|0@DW@width@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|0|0@DW@height@DW@0px@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|0|0@DW@margin-top@DW@0px@DX@genericRemoveNodeStyle@DW@IUQ4965633@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@IUQ4965633@DW@0|0|0|0@DW@width@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|1@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@IUQ4965633@DW@0|0|1@DW@bottom@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|1@DW@height@DW@0px@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|1@DW@left@DW@0px@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|1@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@IUQ4965633@DW@0|0|1@DW@width@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|1|0@DW@height@DW@0px@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|1|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|1|0@DW@margin-top@DW@0px@DX@genericRemoveNodeStyle@DW@IUQ4965633@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|1|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|1|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|1|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|1|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@IUQ4965633@DW@0|0|1|0@DW@width@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|2@DW@top@DW@0px@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|2@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@IUQ4965633@DW@0|0|2@DW@height@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|2@DW@left@DW@0px@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|2@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@IUQ4965633@DW@0|0|2@DW@width@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|2|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|2|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|2|0@DW@margin-top@DW@0px@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|2|0@DW@margin-bottom@DW@0px@DX@genericRemoveNodeStyle@DW@IUQ4965633@DW@0|0|2|0@DW@height@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|2|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|2|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|2|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|2|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@IUQ4965633@DW@0|0|2|0@DW@width@DX@genericRemoveNodeStyle@DW@IUQ4965633@DW@0|0|3@DW@top@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|3@DW@bottom@DW@0px@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|3@DW@height@DW@0px@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|3@DW@left@DW@0px@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|3@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@IUQ4965633@DW@0|0|3@DW@width@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|3|0@DW@height@DW@0px@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|3|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|3|0@DW@margin-top@DW@0px@DX@genericRemoveNodeStyle@DW@IUQ4965633@DW@0|0|3|0@DW@bottom@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|3|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|3|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|3|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|3|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@IUQ4965633@DW@0|0|3|0@DW@width@DX@genericRemoveNodeStyle@DW@IUQ4965633@DW@0|0|4@DW@top@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|4@DW@bottom@DW@0px@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|4@DW@height@DW@0px@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|4@DW@left@DW@0px@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|4@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@IUQ4965633@DW@0|0|4@DW@width@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|4|0@DW@height@DW@0px@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|4|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|4|0@DW@margin-top@DW@0px@DX@genericRemoveNodeStyle@DW@IUQ4965633@DW@0|0|4|0@DW@top@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|4|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|4|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|4|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@IUQ4965633@DW@0|0|4|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@IUQ4965633@DW@0|0|4|0@DW@width@DX@genericSetNodeStyle@DW@ARV4965633@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@ARV4965633@DW@0|0@DW@right@DW@0@DX@genericRemoveNodeStyle@DW@ARV4965633@DW@0|0@DW@margin-left@DX@genericRemoveNodeStyle@DW@ARV4965633@DW@0|0@DW@width@DX@genericSetNodeStyle@DW@ARV4965633@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@ARV4965633@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@ARV4965633@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@ARV4965633@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@ARV4965633@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@ARV4965633@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@ARV4965633@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@ARV4965633@DW@0|0|0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@ARV4965633@DW@0|0|0@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@ARV4965633@DW@0|0|0@DW@width@DX@genericSetNodeStyle@DW@ARV4965633@DW@0|0|0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@ARV4965633@DW@0|0|0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@ARV4965633@DW@0|0|0|0@DW@margin-top@DW@1px@DX@genericSetNodeStyle@DW@ARV4965633@DW@0|0|0|0@DW@margin-bottom@DW@1px@DX@genericRemoveNodeStyle@DW@ARV4965633@DW@0|0|0|0@DW@height@DX@genericSetNodeStyle@DW@ARV4965633@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@ARV4965633@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@ARV4965633@DW@0|0|0|0@DW@margin-left@DW@1px@DX@genericSetNodeStyle@DW@ARV4965633@DW@0|0|0|0@DW@margin-right@DW@1px@DX@genericRemoveNodeStyle@DW@ARV4965633@DW@0|0|0|0@DW@width@DX@genericSetNodeStyle@DW@HRT4965849@DW@0|0@DW@width@DW@24px@DX@genericRemoveNodeStyle@DW@HRT4965849@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@HRT4965849@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@HRT4965849@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@HRT4965849@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@HRT4965849@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@HRT4965849@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@HRT4965849@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@HRT4965849@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@HRT4965849@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@HRT4965849@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@HRT4965849@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@HRT4965849@DW@0|0|0@DW@width@DW@24px@DX@genericSetNodeStyle@DW@HRT4965849@DW@0|0|0|0@DW@height@DW@16px@DX@genericSetNodeStyle@DW@HRT4965849@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@HRT4965849@DW@0|0|0|0@DW@margin-top@DW@-8px@DX@genericRemoveNodeStyle@DW@HRT4965849@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@HRT4965849@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@HRT4965849@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@HRT4965849@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@HRT4965849@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@HRT4965849@DW@0|0|0|0@DW@width@DX@genericSetNodeStyle@DW@LED4965849@DW@0|0@DW@width@DW@38px@DX@genericRemoveNodeStyle@DW@LED4965849@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@LED4965849@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@LED4965849@DW@0|0@DW@height@DW@38px@DX@genericRemoveNodeStyle@DW@LED4965849@DW@0|0@DW@bottom@DX@genericSetNodeStyle@DW@LED4965849@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@LED4965849@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@LED4965849@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@LED4965849@DW@0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@LED4965849@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@LED4965849@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@LED4965849@DW@0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@LED4965849@DW@0|0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@LED4965849@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@LED4965849@DW@0|0|0|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@LED4965849@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@LED4965849@DW@0|0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@LED4965849@DW@0|0|0|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@LED4965849@DW@0|0|0|0@DW@margin-left@DW@-19px@DX@genericRemoveNodeStyle@DW@LED4965849@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@TPC4965862@DW@0|0@DW@width@DW@76px@DX@genericRemoveNodeStyle@DW@TPC4965862@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@TPC4965862@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@TPC4965862@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@TPC4965862@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@TPC4965862@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@TPC4965862@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@TPC4965862@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@TPC4965862@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@TPC4965862@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@TPC4965862@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@TPC4965862@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@TPC4965862@DW@0|0|0@DW@width@DW@0px@DX@genericSetNodeStyle@DW@TPC4965862@DW@0|0|0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@TPC4965862@DW@0|0|0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@TPC4965862@DW@0|0|0|0@DW@margin-top@DW@0px@DX@genericSetNodeStyle@DW@TPC4965862@DW@0|0|0|0@DW@margin-bottom@DW@0px@DX@genericRemoveNodeStyle@DW@TPC4965862@DW@0|0|0|0@DW@height@DX@genericSetNodeStyle@DW@TPC4965862@DW@0|0|0|0@DW@width@DW@1px@DX@genericSetNodeStyle@DW@TPC4965862@DW@0|0|0|0@DW@left@DW@49.999%@DX@genericSetNodeStyle@DW@TPC4965862@DW@0|0|0|0@DW@margin-left@DW@-2px@DX@genericRemoveNodeStyle@DW@TPC4965862@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@TPC4965862@DW@0|0|1@DW@top@DW@0px@DX@genericSetNodeStyle@DW@TPC4965862@DW@0|0|1@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@TPC4965862@DW@0|0|1@DW@height@DX@genericSetNodeStyle@DW@TPC4965862@DW@0|0|1@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@TPC4965862@DW@0|0|1@DW@right@DX@genericSetNodeStyle@DW@TPC4965862@DW@0|0|1@DW@width@DW@76px@DX@genericSetNodeStyle@DW@TPC4965862@DW@0|0|1|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@TPC4965862@DW@0|0|1|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@TPC4965862@DW@0|0|1|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@TPC4965862@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@TPC4965862@DW@0|0|1|0@DW@width@DW@46px@DX@genericSetNodeStyle@DW@TPC4965862@DW@0|0|1|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@TPC4965862@DW@0|0|1|0@DW@margin-left@DW@10px@DX@genericRemoveNodeStyle@DW@TPC4965862@DW@0|0|1|0@DW@right@DX@genericSetNodeStyle@DW@ELK4965850@DW@0|0@DW@width@DW@24px@DX@genericRemoveNodeStyle@DW@ELK4965850@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@ELK4965850@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@ELK4965850@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@ELK4965850@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@ELK4965850@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@ELK4965850@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@ELK4965850@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@ELK4965850@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@ELK4965850@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@ELK4965850@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@ELK4965850@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@ELK4965850@DW@0|0|0@DW@width@DW@24px@DX@genericSetNodeStyle@DW@ELK4965850@DW@0|0|0|0@DW@height@DW@16px@DX@genericSetNodeStyle@DW@ELK4965850@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@ELK4965850@DW@0|0|0|0@DW@margin-top@DW@-8px@DX@genericRemoveNodeStyle@DW@ELK4965850@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@ELK4965850@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@ELK4965850@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@ELK4965850@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@ELK4965850@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@ELK4965850@DW@0|0|0|0@DW@width@DX@genericSetNodeStyle@DW@GSL4965850@DW@0|0@DW@width@DW@38px@DX@genericRemoveNodeStyle@DW@GSL4965850@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@GSL4965850@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@GSL4965850@DW@0|0@DW@height@DW@38px@DX@genericRemoveNodeStyle@DW@GSL4965850@DW@0|0@DW@bottom@DX@genericSetNodeStyle@DW@GSL4965850@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@GSL4965850@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@GSL4965850@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@GSL4965850@DW@0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@GSL4965850@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@GSL4965850@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@GSL4965850@DW@0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@GSL4965850@DW@0|0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@GSL4965850@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@GSL4965850@DW@0|0|0|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@GSL4965850@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@GSL4965850@DW@0|0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@GSL4965850@DW@0|0|0|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@GSL4965850@DW@0|0|0|0@DW@margin-left@DW@-19px@DX@genericRemoveNodeStyle@DW@GSL4965850@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@GNV4965862@DW@0|0@DW@width@DW@76px@DX@genericRemoveNodeStyle@DW@GNV4965862@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@GNV4965862@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@GNV4965862@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@GNV4965862@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@GNV4965862@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@GNV4965862@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@GNV4965862@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@GNV4965862@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@GNV4965862@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@GNV4965862@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@GNV4965862@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@GNV4965862@DW@0|0|0@DW@width@DW@0px@DX@genericSetNodeStyle@DW@GNV4965862@DW@0|0|0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@GNV4965862@DW@0|0|0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@GNV4965862@DW@0|0|0|0@DW@margin-top@DW@0px@DX@genericSetNodeStyle@DW@GNV4965862@DW@0|0|0|0@DW@margin-bottom@DW@0px@DX@genericRemoveNodeStyle@DW@GNV4965862@DW@0|0|0|0@DW@height@DX@genericSetNodeStyle@DW@GNV4965862@DW@0|0|0|0@DW@width@DW@1px@DX@genericSetNodeStyle@DW@GNV4965862@DW@0|0|0|0@DW@left@DW@49.999%@DX@genericSetNodeStyle@DW@GNV4965862@DW@0|0|0|0@DW@margin-left@DW@-2px@DX@genericRemoveNodeStyle@DW@GNV4965862@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@GNV4965862@DW@0|0|1@DW@top@DW@0px@DX@genericSetNodeStyle@DW@GNV4965862@DW@0|0|1@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@GNV4965862@DW@0|0|1@DW@height@DX@genericSetNodeStyle@DW@GNV4965862@DW@0|0|1@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@GNV4965862@DW@0|0|1@DW@right@DX@genericSetNodeStyle@DW@GNV4965862@DW@0|0|1@DW@width@DW@76px@DX@genericSetNodeStyle@DW@GNV4965862@DW@0|0|1|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@GNV4965862@DW@0|0|1|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@GNV4965862@DW@0|0|1|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@GNV4965862@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@GNV4965862@DW@0|0|1|0@DW@width@DW@46px@DX@genericSetNodeStyle@DW@GNV4965862@DW@0|0|1|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@GNV4965862@DW@0|0|1|0@DW@margin-left@DW@10px@DX@genericRemoveNodeStyle@DW@GNV4965862@DW@0|0|1|0@DW@right@DX@genericSetNodeStyle@DW@ALA4965851@DW@0|0@DW@width@DW@24px@DX@genericRemoveNodeStyle@DW@ALA4965851@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@ALA4965851@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@ALA4965851@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@ALA4965851@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@ALA4965851@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@ALA4965851@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@ALA4965851@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@ALA4965851@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@ALA4965851@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@ALA4965851@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@ALA4965851@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@ALA4965851@DW@0|0|0@DW@width@DW@24px@DX@genericSetNodeStyle@DW@ALA4965851@DW@0|0|0|0@DW@height@DW@16px@DX@genericSetNodeStyle@DW@ALA4965851@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@ALA4965851@DW@0|0|0|0@DW@margin-top@DW@-8px@DX@genericRemoveNodeStyle@DW@ALA4965851@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@ALA4965851@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@ALA4965851@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@ALA4965851@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@ALA4965851@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@ALA4965851@DW@0|0|0|0@DW@width@DX@genericSetNodeStyle@DW@EIF4965851@DW@0|0@DW@width@DW@38px@DX@genericRemoveNodeStyle@DW@EIF4965851@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@EIF4965851@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@EIF4965851@DW@0|0@DW@height@DW@38px@DX@genericRemoveNodeStyle@DW@EIF4965851@DW@0|0@DW@bottom@DX@genericSetNodeStyle@DW@EIF4965851@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@EIF4965851@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@EIF4965851@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@EIF4965851@DW@0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@EIF4965851@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@EIF4965851@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@EIF4965851@DW@0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@EIF4965851@DW@0|0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@EIF4965851@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@EIF4965851@DW@0|0|0|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@EIF4965851@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@EIF4965851@DW@0|0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@EIF4965851@DW@0|0|0|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@EIF4965851@DW@0|0|0|0@DW@margin-left@DW@-19px@DX@genericRemoveNodeStyle@DW@EIF4965851@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@BGF4965862@DW@0|0@DW@width@DW@76px@DX@genericRemoveNodeStyle@DW@BGF4965862@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@BGF4965862@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@BGF4965862@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@BGF4965862@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@BGF4965862@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@BGF4965862@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@BGF4965862@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@BGF4965862@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@BGF4965862@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@BGF4965862@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@BGF4965862@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@BGF4965862@DW@0|0|0@DW@width@DW@0px@DX@genericSetNodeStyle@DW@BGF4965862@DW@0|0|0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@BGF4965862@DW@0|0|0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@BGF4965862@DW@0|0|0|0@DW@margin-top@DW@0px@DX@genericSetNodeStyle@DW@BGF4965862@DW@0|0|0|0@DW@margin-bottom@DW@0px@DX@genericRemoveNodeStyle@DW@BGF4965862@DW@0|0|0|0@DW@height@DX@genericSetNodeStyle@DW@BGF4965862@DW@0|0|0|0@DW@width@DW@1px@DX@genericSetNodeStyle@DW@BGF4965862@DW@0|0|0|0@DW@left@DW@49.999%@DX@genericSetNodeStyle@DW@BGF4965862@DW@0|0|0|0@DW@margin-left@DW@-2px@DX@genericRemoveNodeStyle@DW@BGF4965862@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@BGF4965862@DW@0|0|1@DW@top@DW@0px@DX@genericSetNodeStyle@DW@BGF4965862@DW@0|0|1@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@BGF4965862@DW@0|0|1@DW@height@DX@genericSetNodeStyle@DW@BGF4965862@DW@0|0|1@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@BGF4965862@DW@0|0|1@DW@right@DX@genericSetNodeStyle@DW@BGF4965862@DW@0|0|1@DW@width@DW@76px@DX@genericSetNodeStyle@DW@BGF4965862@DW@0|0|1|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@BGF4965862@DW@0|0|1|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@BGF4965862@DW@0|0|1|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@BGF4965862@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@BGF4965862@DW@0|0|1|0@DW@width@DW@46px@DX@genericSetNodeStyle@DW@BGF4965862@DW@0|0|1|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@BGF4965862@DW@0|0|1|0@DW@margin-left@DW@10px@DX@genericRemoveNodeStyle@DW@BGF4965862@DW@0|0|1|0@DW@right@DX@genericSetNodeStyle@DW@OYW4965851@DW@0|0@DW@width@DW@24px@DX@genericRemoveNodeStyle@DW@OYW4965851@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@OYW4965851@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@OYW4965851@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@OYW4965851@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@OYW4965851@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@OYW4965851@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@OYW4965851@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@OYW4965851@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@OYW4965851@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@OYW4965851@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@OYW4965851@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@OYW4965851@DW@0|0|0@DW@width@DW@24px@DX@genericSetNodeStyle@DW@OYW4965851@DW@0|0|0|0@DW@height@DW@16px@DX@genericSetNodeStyle@DW@OYW4965851@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@OYW4965851@DW@0|0|0|0@DW@margin-top@DW@-8px@DX@genericRemoveNodeStyle@DW@OYW4965851@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@OYW4965851@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@OYW4965851@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@OYW4965851@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@OYW4965851@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@OYW4965851@DW@0|0|0|0@DW@width@DX@genericSetNodeStyle@DW@ELQ4965851@DW@0|0@DW@width@DW@38px@DX@genericRemoveNodeStyle@DW@ELQ4965851@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@ELQ4965851@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@ELQ4965851@DW@0|0@DW@height@DW@38px@DX@genericRemoveNodeStyle@DW@ELQ4965851@DW@0|0@DW@bottom@DX@genericSetNodeStyle@DW@ELQ4965851@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@ELQ4965851@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@ELQ4965851@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@ELQ4965851@DW@0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@ELQ4965851@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@ELQ4965851@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@ELQ4965851@DW@0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@ELQ4965851@DW@0|0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@ELQ4965851@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@ELQ4965851@DW@0|0|0|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@ELQ4965851@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@ELQ4965851@DW@0|0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@ELQ4965851@DW@0|0|0|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@ELQ4965851@DW@0|0|0|0@DW@margin-left@DW@-19px@DX@genericRemoveNodeStyle@DW@ELQ4965851@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@TUG4965862@DW@0|0@DW@width@DW@76px@DX@genericRemoveNodeStyle@DW@TUG4965862@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@TUG4965862@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@TUG4965862@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@TUG4965862@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@TUG4965862@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@TUG4965862@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@TUG4965862@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@TUG4965862@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@TUG4965862@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@TUG4965862@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@TUG4965862@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@TUG4965862@DW@0|0|0@DW@width@DW@0px@DX@genericSetNodeStyle@DW@TUG4965862@DW@0|0|0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@TUG4965862@DW@0|0|0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@TUG4965862@DW@0|0|0|0@DW@margin-top@DW@0px@DX@genericSetNodeStyle@DW@TUG4965862@DW@0|0|0|0@DW@margin-bottom@DW@0px@DX@genericRemoveNodeStyle@DW@TUG4965862@DW@0|0|0|0@DW@height@DX@genericSetNodeStyle@DW@TUG4965862@DW@0|0|0|0@DW@width@DW@1px@DX@genericSetNodeStyle@DW@TUG4965862@DW@0|0|0|0@DW@left@DW@49.999%@DX@genericSetNodeStyle@DW@TUG4965862@DW@0|0|0|0@DW@margin-left@DW@-2px@DX@genericRemoveNodeStyle@DW@TUG4965862@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@TUG4965862@DW@0|0|1@DW@top@DW@0px@DX@genericSetNodeStyle@DW@TUG4965862@DW@0|0|1@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@TUG4965862@DW@0|0|1@DW@height@DX@genericSetNodeStyle@DW@TUG4965862@DW@0|0|1@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@TUG4965862@DW@0|0|1@DW@right@DX@genericSetNodeStyle@DW@TUG4965862@DW@0|0|1@DW@width@DW@76px@DX@genericSetNodeStyle@DW@TUG4965862@DW@0|0|1|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@TUG4965862@DW@0|0|1|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@TUG4965862@DW@0|0|1|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@TUG4965862@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@TUG4965862@DW@0|0|1|0@DW@width@DW@46px@DX@genericSetNodeStyle@DW@TUG4965862@DW@0|0|1|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@TUG4965862@DW@0|0|1|0@DW@margin-left@DW@10px@DX@genericRemoveNodeStyle@DW@TUG4965862@DW@0|0|1|0@DW@right@DX@genericSetNodeStyle@DW@KGJ4965852@DW@0|0@DW@width@DW@24px@DX@genericRemoveNodeStyle@DW@KGJ4965852@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@KGJ4965852@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@KGJ4965852@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@KGJ4965852@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@KGJ4965852@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@KGJ4965852@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@KGJ4965852@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@KGJ4965852@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@KGJ4965852@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@KGJ4965852@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@KGJ4965852@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@KGJ4965852@DW@0|0|0@DW@width@DW@24px@DX@genericSetNodeStyle@DW@KGJ4965852@DW@0|0|0|0@DW@height@DW@16px@DX@genericSetNodeStyle@DW@KGJ4965852@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@KGJ4965852@DW@0|0|0|0@DW@margin-top@DW@-8px@DX@genericRemoveNodeStyle@DW@KGJ4965852@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@KGJ4965852@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@KGJ4965852@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@KGJ4965852@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@KGJ4965852@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@KGJ4965852@DW@0|0|0|0@DW@width@DX@genericSetNodeStyle@DW@IDS4965852@DW@0|0@DW@width@DW@38px@DX@genericRemoveNodeStyle@DW@IDS4965852@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@IDS4965852@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@IDS4965852@DW@0|0@DW@height@DW@38px@DX@genericRemoveNodeStyle@DW@IDS4965852@DW@0|0@DW@bottom@DX@genericSetNodeStyle@DW@IDS4965852@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@IDS4965852@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@IDS4965852@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@IDS4965852@DW@0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@IDS4965852@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@IDS4965852@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@IDS4965852@DW@0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@IDS4965852@DW@0|0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@IDS4965852@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@IDS4965852@DW@0|0|0|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@IDS4965852@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@IDS4965852@DW@0|0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@IDS4965852@DW@0|0|0|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@IDS4965852@DW@0|0|0|0@DW@margin-left@DW@-19px@DX@genericRemoveNodeStyle@DW@IDS4965852@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@TUW4965862@DW@0|0@DW@width@DW@76px@DX@genericRemoveNodeStyle@DW@TUW4965862@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@TUW4965862@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@TUW4965862@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@TUW4965862@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@TUW4965862@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@TUW4965862@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@TUW4965862@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@TUW4965862@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@TUW4965862@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@TUW4965862@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@TUW4965862@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@TUW4965862@DW@0|0|0@DW@width@DW@0px@DX@genericSetNodeStyle@DW@TUW4965862@DW@0|0|0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@TUW4965862@DW@0|0|0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@TUW4965862@DW@0|0|0|0@DW@margin-top@DW@0px@DX@genericSetNodeStyle@DW@TUW4965862@DW@0|0|0|0@DW@margin-bottom@DW@0px@DX@genericRemoveNodeStyle@DW@TUW4965862@DW@0|0|0|0@DW@height@DX@genericSetNodeStyle@DW@TUW4965862@DW@0|0|0|0@DW@width@DW@1px@DX@genericSetNodeStyle@DW@TUW4965862@DW@0|0|0|0@DW@left@DW@49.999%@DX@genericSetNodeStyle@DW@TUW4965862@DW@0|0|0|0@DW@margin-left@DW@-2px@DX@genericRemoveNodeStyle@DW@TUW4965862@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@TUW4965862@DW@0|0|1@DW@top@DW@0px@DX@genericSetNodeStyle@DW@TUW4965862@DW@0|0|1@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@TUW4965862@DW@0|0|1@DW@height@DX@genericSetNodeStyle@DW@TUW4965862@DW@0|0|1@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@TUW4965862@DW@0|0|1@DW@right@DX@genericSetNodeStyle@DW@TUW4965862@DW@0|0|1@DW@width@DW@76px@DX@genericSetNodeStyle@DW@TUW4965862@DW@0|0|1|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@TUW4965862@DW@0|0|1|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@TUW4965862@DW@0|0|1|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@TUW4965862@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@TUW4965862@DW@0|0|1|0@DW@width@DW@46px@DX@genericSetNodeStyle@DW@TUW4965862@DW@0|0|1|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@TUW4965862@DW@0|0|1|0@DW@margin-left@DW@10px@DX@genericRemoveNodeStyle@DW@TUW4965862@DW@0|0|1|0@DW@right@DX@genericSetNodeStyle@DW@OSN4965853@DW@0|0@DW@width@DW@24px@DX@genericRemoveNodeStyle@DW@OSN4965853@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@OSN4965853@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@OSN4965853@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@OSN4965853@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@OSN4965853@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@OSN4965853@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@OSN4965853@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@OSN4965853@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@OSN4965853@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@OSN4965853@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@OSN4965853@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@OSN4965853@DW@0|0|0@DW@width@DW@24px@DX@genericSetNodeStyle@DW@OSN4965853@DW@0|0|0|0@DW@height@DW@16px@DX@genericSetNodeStyle@DW@OSN4965853@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@OSN4965853@DW@0|0|0|0@DW@margin-top@DW@-8px@DX@genericRemoveNodeStyle@DW@OSN4965853@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@OSN4965853@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@OSN4965853@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@OSN4965853@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@OSN4965853@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@OSN4965853@DW@0|0|0|0@DW@width@DX@genericSetNodeStyle@DW@OQR4965853@DW@0|0@DW@width@DW@38px@DX@genericRemoveNodeStyle@DW@OQR4965853@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@OQR4965853@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@OQR4965853@DW@0|0@DW@height@DW@38px@DX@genericRemoveNodeStyle@DW@OQR4965853@DW@0|0@DW@bottom@DX@genericSetNodeStyle@DW@OQR4965853@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@OQR4965853@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@OQR4965853@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@OQR4965853@DW@0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@OQR4965853@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@OQR4965853@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@OQR4965853@DW@0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@OQR4965853@DW@0|0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@OQR4965853@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@OQR4965853@DW@0|0|0|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@OQR4965853@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@OQR4965853@DW@0|0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@OQR4965853@DW@0|0|0|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@OQR4965853@DW@0|0|0|0@DW@margin-left@DW@-19px@DX@genericRemoveNodeStyle@DW@OQR4965853@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@XLC4965862@DW@0|0@DW@width@DW@76px@DX@genericRemoveNodeStyle@DW@XLC4965862@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@XLC4965862@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@XLC4965862@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@XLC4965862@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@XLC4965862@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@XLC4965862@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@XLC4965862@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@XLC4965862@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@XLC4965862@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@XLC4965862@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@XLC4965862@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@XLC4965862@DW@0|0|0@DW@width@DW@0px@DX@genericSetNodeStyle@DW@XLC4965862@DW@0|0|0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@XLC4965862@DW@0|0|0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@XLC4965862@DW@0|0|0|0@DW@margin-top@DW@0px@DX@genericSetNodeStyle@DW@XLC4965862@DW@0|0|0|0@DW@margin-bottom@DW@0px@DX@genericRemoveNodeStyle@DW@XLC4965862@DW@0|0|0|0@DW@height@DX@genericSetNodeStyle@DW@XLC4965862@DW@0|0|0|0@DW@width@DW@1px@DX@genericSetNodeStyle@DW@XLC4965862@DW@0|0|0|0@DW@left@DW@49.999%@DX@genericSetNodeStyle@DW@XLC4965862@DW@0|0|0|0@DW@margin-left@DW@-2px@DX@genericRemoveNodeStyle@DW@XLC4965862@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@XLC4965862@DW@0|0|1@DW@top@DW@0px@DX@genericSetNodeStyle@DW@XLC4965862@DW@0|0|1@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@XLC4965862@DW@0|0|1@DW@height@DX@genericSetNodeStyle@DW@XLC4965862@DW@0|0|1@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@XLC4965862@DW@0|0|1@DW@right@DX@genericSetNodeStyle@DW@XLC4965862@DW@0|0|1@DW@width@DW@76px@DX@genericSetNodeStyle@DW@XLC4965862@DW@0|0|1|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@XLC4965862@DW@0|0|1|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@XLC4965862@DW@0|0|1|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@XLC4965862@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@XLC4965862@DW@0|0|1|0@DW@width@DW@46px@DX@genericSetNodeStyle@DW@XLC4965862@DW@0|0|1|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@XLC4965862@DW@0|0|1|0@DW@margin-left@DW@10px@DX@genericRemoveNodeStyle@DW@XLC4965862@DW@0|0|1|0@DW@right@DX@genericSetNodeStyle@DW@OYH4965854@DW@0|0@DW@width@DW@24px@DX@genericRemoveNodeStyle@DW@OYH4965854@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@OYH4965854@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@OYH4965854@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@OYH4965854@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@OYH4965854@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@OYH4965854@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@OYH4965854@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@OYH4965854@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@OYH4965854@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@OYH4965854@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@OYH4965854@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@OYH4965854@DW@0|0|0@DW@width@DW@24px@DX@genericSetNodeStyle@DW@OYH4965854@DW@0|0|0|0@DW@height@DW@16px@DX@genericSetNodeStyle@DW@OYH4965854@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@OYH4965854@DW@0|0|0|0@DW@margin-top@DW@-8px@DX@genericRemoveNodeStyle@DW@OYH4965854@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@OYH4965854@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@OYH4965854@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@OYH4965854@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@OYH4965854@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@OYH4965854@DW@0|0|0|0@DW@width@DX@genericSetNodeStyle@DW@FND4965854@DW@0|0@DW@width@DW@38px@DX@genericRemoveNodeStyle@DW@FND4965854@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@FND4965854@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@FND4965854@DW@0|0@DW@height@DW@38px@DX@genericRemoveNodeStyle@DW@FND4965854@DW@0|0@DW@bottom@DX@genericSetNodeStyle@DW@FND4965854@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@FND4965854@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@FND4965854@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@FND4965854@DW@0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@FND4965854@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@FND4965854@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@FND4965854@DW@0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@FND4965854@DW@0|0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@FND4965854@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@FND4965854@DW@0|0|0|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@FND4965854@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@FND4965854@DW@0|0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@FND4965854@DW@0|0|0|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@FND4965854@DW@0|0|0|0@DW@margin-left@DW@-19px@DX@genericRemoveNodeStyle@DW@FND4965854@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@CHU4965862@DW@0|0@DW@width@DW@76px@DX@genericRemoveNodeStyle@DW@CHU4965862@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@CHU4965862@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@CHU4965862@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@CHU4965862@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@CHU4965862@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@CHU4965862@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@CHU4965862@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@CHU4965862@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@CHU4965862@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@CHU4965862@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@CHU4965862@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@CHU4965862@DW@0|0|0@DW@width@DW@0px@DX@genericSetNodeStyle@DW@CHU4965862@DW@0|0|0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@CHU4965862@DW@0|0|0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@CHU4965862@DW@0|0|0|0@DW@margin-top@DW@0px@DX@genericSetNodeStyle@DW@CHU4965862@DW@0|0|0|0@DW@margin-bottom@DW@0px@DX@genericRemoveNodeStyle@DW@CHU4965862@DW@0|0|0|0@DW@height@DX@genericSetNodeStyle@DW@CHU4965862@DW@0|0|0|0@DW@width@DW@1px@DX@genericSetNodeStyle@DW@CHU4965862@DW@0|0|0|0@DW@left@DW@49.999%@DX@genericSetNodeStyle@DW@CHU4965862@DW@0|0|0|0@DW@margin-left@DW@-2px@DX@genericRemoveNodeStyle@DW@CHU4965862@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@CHU4965862@DW@0|0|1@DW@top@DW@0px@DX@genericSetNodeStyle@DW@CHU4965862@DW@0|0|1@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@CHU4965862@DW@0|0|1@DW@height@DX@genericSetNodeStyle@DW@CHU4965862@DW@0|0|1@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@CHU4965862@DW@0|0|1@DW@right@DX@genericSetNodeStyle@DW@CHU4965862@DW@0|0|1@DW@width@DW@76px@DX@genericSetNodeStyle@DW@CHU4965862@DW@0|0|1|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@CHU4965862@DW@0|0|1|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@CHU4965862@DW@0|0|1|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@CHU4965862@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@CHU4965862@DW@0|0|1|0@DW@width@DW@46px@DX@genericSetNodeStyle@DW@CHU4965862@DW@0|0|1|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@CHU4965862@DW@0|0|1|0@DW@margin-left@DW@10px@DX@genericRemoveNodeStyle@DW@CHU4965862@DW@0|0|1|0@DW@right@DX@genericSetNodeStyle@DW@ACH4965855@DW@0|0@DW@width@DW@24px@DX@genericRemoveNodeStyle@DW@ACH4965855@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@ACH4965855@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@ACH4965855@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@ACH4965855@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@ACH4965855@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@ACH4965855@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@ACH4965855@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@ACH4965855@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@ACH4965855@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@ACH4965855@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@ACH4965855@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@ACH4965855@DW@0|0|0@DW@width@DW@24px@DX@genericSetNodeStyle@DW@ACH4965855@DW@0|0|0|0@DW@height@DW@16px@DX@genericSetNodeStyle@DW@ACH4965855@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@ACH4965855@DW@0|0|0|0@DW@margin-top@DW@-8px@DX@genericRemoveNodeStyle@DW@ACH4965855@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@ACH4965855@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@ACH4965855@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@ACH4965855@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@ACH4965855@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@ACH4965855@DW@0|0|0|0@DW@width@DX@genericSetNodeStyle@DW@VUQ4965855@DW@0|0@DW@width@DW@38px@DX@genericRemoveNodeStyle@DW@VUQ4965855@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@VUQ4965855@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@VUQ4965855@DW@0|0@DW@height@DW@38px@DX@genericRemoveNodeStyle@DW@VUQ4965855@DW@0|0@DW@bottom@DX@genericSetNodeStyle@DW@VUQ4965855@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@VUQ4965855@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@VUQ4965855@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@VUQ4965855@DW@0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@VUQ4965855@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@VUQ4965855@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@VUQ4965855@DW@0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@VUQ4965855@DW@0|0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@VUQ4965855@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@VUQ4965855@DW@0|0|0|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@VUQ4965855@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@VUQ4965855@DW@0|0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@VUQ4965855@DW@0|0|0|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@VUQ4965855@DW@0|0|0|0@DW@margin-left@DW@-19px@DX@genericRemoveNodeStyle@DW@VUQ4965855@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@TXS4965862@DW@0|0@DW@width@DW@76px@DX@genericRemoveNodeStyle@DW@TXS4965862@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@TXS4965862@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@TXS4965862@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@TXS4965862@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@TXS4965862@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@TXS4965862@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@TXS4965862@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@TXS4965862@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@TXS4965862@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@TXS4965862@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@TXS4965862@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@TXS4965862@DW@0|0|0@DW@width@DW@0px@DX@genericSetNodeStyle@DW@TXS4965862@DW@0|0|0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@TXS4965862@DW@0|0|0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@TXS4965862@DW@0|0|0|0@DW@margin-top@DW@0px@DX@genericSetNodeStyle@DW@TXS4965862@DW@0|0|0|0@DW@margin-bottom@DW@0px@DX@genericRemoveNodeStyle@DW@TXS4965862@DW@0|0|0|0@DW@height@DX@genericSetNodeStyle@DW@TXS4965862@DW@0|0|0|0@DW@width@DW@1px@DX@genericSetNodeStyle@DW@TXS4965862@DW@0|0|0|0@DW@left@DW@49.999%@DX@genericSetNodeStyle@DW@TXS4965862@DW@0|0|0|0@DW@margin-left@DW@-2px@DX@genericRemoveNodeStyle@DW@TXS4965862@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@TXS4965862@DW@0|0|1@DW@top@DW@0px@DX@genericSetNodeStyle@DW@TXS4965862@DW@0|0|1@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@TXS4965862@DW@0|0|1@DW@height@DX@genericSetNodeStyle@DW@TXS4965862@DW@0|0|1@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@TXS4965862@DW@0|0|1@DW@right@DX@genericSetNodeStyle@DW@TXS4965862@DW@0|0|1@DW@width@DW@76px@DX@genericSetNodeStyle@DW@TXS4965862@DW@0|0|1|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@TXS4965862@DW@0|0|1|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@TXS4965862@DW@0|0|1|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@TXS4965862@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@TXS4965862@DW@0|0|1|0@DW@width@DW@46px@DX@genericSetNodeStyle@DW@TXS4965862@DW@0|0|1|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@TXS4965862@DW@0|0|1|0@DW@margin-left@DW@10px@DX@genericRemoveNodeStyle@DW@TXS4965862@DW@0|0|1|0@DW@right@DX@genericSetNodeStyle@DW@WKV4965856@DW@0|0@DW@width@DW@24px@DX@genericRemoveNodeStyle@DW@WKV4965856@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@WKV4965856@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@WKV4965856@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@WKV4965856@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@WKV4965856@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@WKV4965856@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@WKV4965856@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@WKV4965856@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@WKV4965856@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@WKV4965856@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@WKV4965856@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@WKV4965856@DW@0|0|0@DW@width@DW@24px@DX@genericSetNodeStyle@DW@WKV4965856@DW@0|0|0|0@DW@height@DW@16px@DX@genericSetNodeStyle@DW@WKV4965856@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@WKV4965856@DW@0|0|0|0@DW@margin-top@DW@-8px@DX@genericRemoveNodeStyle@DW@WKV4965856@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@WKV4965856@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@WKV4965856@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@WKV4965856@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@WKV4965856@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@WKV4965856@DW@0|0|0|0@DW@width@DX@genericSetNodeStyle@DW@DYM4965856@DW@0|0@DW@width@DW@38px@DX@genericRemoveNodeStyle@DW@DYM4965856@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@DYM4965856@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@DYM4965856@DW@0|0@DW@height@DW@38px@DX@genericRemoveNodeStyle@DW@DYM4965856@DW@0|0@DW@bottom@DX@genericSetNodeStyle@DW@DYM4965856@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@DYM4965856@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@DYM4965856@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@DYM4965856@DW@0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@DYM4965856@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@DYM4965856@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@DYM4965856@DW@0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@DYM4965856@DW@0|0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@DYM4965856@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@DYM4965856@DW@0|0|0|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@DYM4965856@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@DYM4965856@DW@0|0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@DYM4965856@DW@0|0|0|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@DYM4965856@DW@0|0|0|0@DW@margin-left@DW@-19px@DX@genericRemoveNodeStyle@DW@DYM4965856@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@NCG4965862@DW@0|0@DW@width@DW@76px@DX@genericRemoveNodeStyle@DW@NCG4965862@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@NCG4965862@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@NCG4965862@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@NCG4965862@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@NCG4965862@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@NCG4965862@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@NCG4965862@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@NCG4965862@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@NCG4965862@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@NCG4965862@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@NCG4965862@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@NCG4965862@DW@0|0|0@DW@width@DW@0px@DX@genericSetNodeStyle@DW@NCG4965862@DW@0|0|0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@NCG4965862@DW@0|0|0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@NCG4965862@DW@0|0|0|0@DW@margin-top@DW@0px@DX@genericSetNodeStyle@DW@NCG4965862@DW@0|0|0|0@DW@margin-bottom@DW@0px@DX@genericRemoveNodeStyle@DW@NCG4965862@DW@0|0|0|0@DW@height@DX@genericSetNodeStyle@DW@NCG4965862@DW@0|0|0|0@DW@width@DW@1px@DX@genericSetNodeStyle@DW@NCG4965862@DW@0|0|0|0@DW@left@DW@49.999%@DX@genericSetNodeStyle@DW@NCG4965862@DW@0|0|0|0@DW@margin-left@DW@-2px@DX@genericRemoveNodeStyle@DW@NCG4965862@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@NCG4965862@DW@0|0|1@DW@top@DW@0px@DX@genericSetNodeStyle@DW@NCG4965862@DW@0|0|1@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@NCG4965862@DW@0|0|1@DW@height@DX@genericSetNodeStyle@DW@NCG4965862@DW@0|0|1@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@NCG4965862@DW@0|0|1@DW@right@DX@genericSetNodeStyle@DW@NCG4965862@DW@0|0|1@DW@width@DW@76px@DX@genericSetNodeStyle@DW@NCG4965862@DW@0|0|1|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@NCG4965862@DW@0|0|1|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@NCG4965862@DW@0|0|1|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@NCG4965862@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@NCG4965862@DW@0|0|1|0@DW@width@DW@46px@DX@genericSetNodeStyle@DW@NCG4965862@DW@0|0|1|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@NCG4965862@DW@0|0|1|0@DW@margin-left@DW@10px@DX@genericRemoveNodeStyle@DW@NCG4965862@DW@0|0|1|0@DW@right@DX@genericSetNodeStyle@DW@WSD4965856@DW@0|0@DW@width@DW@24px@DX@genericRemoveNodeStyle@DW@WSD4965856@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@WSD4965856@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@WSD4965856@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@WSD4965856@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@WSD4965856@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@WSD4965856@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@WSD4965856@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@WSD4965856@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@WSD4965856@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@WSD4965856@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@WSD4965856@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@WSD4965856@DW@0|0|0@DW@width@DW@24px@DX@genericSetNodeStyle@DW@WSD4965856@DW@0|0|0|0@DW@height@DW@16px@DX@genericSetNodeStyle@DW@WSD4965856@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@WSD4965856@DW@0|0|0|0@DW@margin-top@DW@-8px@DX@genericRemoveNodeStyle@DW@WSD4965856@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@WSD4965856@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@WSD4965856@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@WSD4965856@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@WSD4965856@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@WSD4965856@DW@0|0|0|0@DW@width@DX@genericSetNodeStyle@DW@CJB4965857@DW@0|0@DW@width@DW@38px@DX@genericRemoveNodeStyle@DW@CJB4965857@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@CJB4965857@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@CJB4965857@DW@0|0@DW@height@DW@38px@DX@genericRemoveNodeStyle@DW@CJB4965857@DW@0|0@DW@bottom@DX@genericSetNodeStyle@DW@CJB4965857@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@CJB4965857@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@CJB4965857@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@CJB4965857@DW@0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@CJB4965857@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@CJB4965857@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@CJB4965857@DW@0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@CJB4965857@DW@0|0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@CJB4965857@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@CJB4965857@DW@0|0|0|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@CJB4965857@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@CJB4965857@DW@0|0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@CJB4965857@DW@0|0|0|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@CJB4965857@DW@0|0|0|0@DW@margin-left@DW@-19px@DX@genericRemoveNodeStyle@DW@CJB4965857@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@KUF4965862@DW@0|0@DW@width@DW@76px@DX@genericRemoveNodeStyle@DW@KUF4965862@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@KUF4965862@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@KUF4965862@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@KUF4965862@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@KUF4965862@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@KUF4965862@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@KUF4965862@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@KUF4965862@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@KUF4965862@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@KUF4965862@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@KUF4965862@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@KUF4965862@DW@0|0|0@DW@width@DW@0px@DX@genericSetNodeStyle@DW@KUF4965862@DW@0|0|0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@KUF4965862@DW@0|0|0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@KUF4965862@DW@0|0|0|0@DW@margin-top@DW@0px@DX@genericSetNodeStyle@DW@KUF4965862@DW@0|0|0|0@DW@margin-bottom@DW@0px@DX@genericRemoveNodeStyle@DW@KUF4965862@DW@0|0|0|0@DW@height@DX@genericSetNodeStyle@DW@KUF4965862@DW@0|0|0|0@DW@width@DW@1px@DX@genericSetNodeStyle@DW@KUF4965862@DW@0|0|0|0@DW@left@DW@49.999%@DX@genericSetNodeStyle@DW@KUF4965862@DW@0|0|0|0@DW@margin-left@DW@-2px@DX@genericRemoveNodeStyle@DW@KUF4965862@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@KUF4965862@DW@0|0|1@DW@top@DW@0px@DX@genericSetNodeStyle@DW@KUF4965862@DW@0|0|1@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@KUF4965862@DW@0|0|1@DW@height@DX@genericSetNodeStyle@DW@KUF4965862@DW@0|0|1@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@KUF4965862@DW@0|0|1@DW@right@DX@genericSetNodeStyle@DW@KUF4965862@DW@0|0|1@DW@width@DW@76px@DX@genericSetNodeStyle@DW@KUF4965862@DW@0|0|1|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@KUF4965862@DW@0|0|1|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@KUF4965862@DW@0|0|1|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@KUF4965862@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@KUF4965862@DW@0|0|1|0@DW@width@DW@46px@DX@genericSetNodeStyle@DW@KUF4965862@DW@0|0|1|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@KUF4965862@DW@0|0|1|0@DW@margin-left@DW@10px@DX@genericRemoveNodeStyle@DW@KUF4965862@DW@0|0|1|0@DW@right@DX@genericSetNodeStyle@DW@NVU4965857@DW@0|0@DW@width@DW@24px@DX@genericRemoveNodeStyle@DW@NVU4965857@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@NVU4965857@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@NVU4965857@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@NVU4965857@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@NVU4965857@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@NVU4965857@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@NVU4965857@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@NVU4965857@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@NVU4965857@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@NVU4965857@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@NVU4965857@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@NVU4965857@DW@0|0|0@DW@width@DW@24px@DX@genericSetNodeStyle@DW@NVU4965857@DW@0|0|0|0@DW@height@DW@16px@DX@genericSetNodeStyle@DW@NVU4965857@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@NVU4965857@DW@0|0|0|0@DW@margin-top@DW@-8px@DX@genericRemoveNodeStyle@DW@NVU4965857@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@NVU4965857@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@NVU4965857@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@NVU4965857@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@NVU4965857@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@NVU4965857@DW@0|0|0|0@DW@width@DX@genericSetNodeStyle@DW@PRX4965857@DW@0|0@DW@width@DW@38px@DX@genericRemoveNodeStyle@DW@PRX4965857@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@PRX4965857@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@PRX4965857@DW@0|0@DW@height@DW@38px@DX@genericRemoveNodeStyle@DW@PRX4965857@DW@0|0@DW@bottom@DX@genericSetNodeStyle@DW@PRX4965857@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@PRX4965857@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@PRX4965857@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@PRX4965857@DW@0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@PRX4965857@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@PRX4965857@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@PRX4965857@DW@0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@PRX4965857@DW@0|0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@PRX4965857@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@PRX4965857@DW@0|0|0|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@PRX4965857@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@PRX4965857@DW@0|0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@PRX4965857@DW@0|0|0|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@PRX4965857@DW@0|0|0|0@DW@margin-left@DW@-19px@DX@genericRemoveNodeStyle@DW@PRX4965857@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@ISJ4965862@DW@0|0@DW@width@DW@76px@DX@genericRemoveNodeStyle@DW@ISJ4965862@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@ISJ4965862@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@ISJ4965862@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@ISJ4965862@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@ISJ4965862@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@ISJ4965862@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@ISJ4965862@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@ISJ4965862@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@ISJ4965862@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@ISJ4965862@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@ISJ4965862@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@ISJ4965862@DW@0|0|0@DW@width@DW@0px@DX@genericSetNodeStyle@DW@ISJ4965862@DW@0|0|0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@ISJ4965862@DW@0|0|0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@ISJ4965862@DW@0|0|0|0@DW@margin-top@DW@0px@DX@genericSetNodeStyle@DW@ISJ4965862@DW@0|0|0|0@DW@margin-bottom@DW@0px@DX@genericRemoveNodeStyle@DW@ISJ4965862@DW@0|0|0|0@DW@height@DX@genericSetNodeStyle@DW@ISJ4965862@DW@0|0|0|0@DW@width@DW@1px@DX@genericSetNodeStyle@DW@ISJ4965862@DW@0|0|0|0@DW@left@DW@49.999%@DX@genericSetNodeStyle@DW@ISJ4965862@DW@0|0|0|0@DW@margin-left@DW@-2px@DX@genericRemoveNodeStyle@DW@ISJ4965862@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@ISJ4965862@DW@0|0|1@DW@top@DW@0px@DX@genericSetNodeStyle@DW@ISJ4965862@DW@0|0|1@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@ISJ4965862@DW@0|0|1@DW@height@DX@genericSetNodeStyle@DW@ISJ4965862@DW@0|0|1@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@ISJ4965862@DW@0|0|1@DW@right@DX@genericSetNodeStyle@DW@ISJ4965862@DW@0|0|1@DW@width@DW@76px@DX@genericSetNodeStyle@DW@ISJ4965862@DW@0|0|1|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@ISJ4965862@DW@0|0|1|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@ISJ4965862@DW@0|0|1|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@ISJ4965862@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@ISJ4965862@DW@0|0|1|0@DW@width@DW@46px@DX@genericSetNodeStyle@DW@ISJ4965862@DW@0|0|1|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@ISJ4965862@DW@0|0|1|0@DW@margin-left@DW@10px@DX@genericRemoveNodeStyle@DW@ISJ4965862@DW@0|0|1|0@DW@right@DX@genericSetNodeStyle@DW@OSV4965858@DW@0|0@DW@width@DW@24px@DX@genericRemoveNodeStyle@DW@OSV4965858@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@OSV4965858@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@OSV4965858@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@OSV4965858@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@OSV4965858@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@OSV4965858@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@OSV4965858@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@OSV4965858@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@OSV4965858@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@OSV4965858@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@OSV4965858@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@OSV4965858@DW@0|0|0@DW@width@DW@24px@DX@genericSetNodeStyle@DW@OSV4965858@DW@0|0|0|0@DW@height@DW@16px@DX@genericSetNodeStyle@DW@OSV4965858@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@OSV4965858@DW@0|0|0|0@DW@margin-top@DW@-8px@DX@genericRemoveNodeStyle@DW@OSV4965858@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@OSV4965858@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@OSV4965858@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@OSV4965858@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@OSV4965858@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@OSV4965858@DW@0|0|0|0@DW@width@DX@genericSetNodeStyle@DW@PIR4965858@DW@0|0@DW@width@DW@38px@DX@genericRemoveNodeStyle@DW@PIR4965858@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@PIR4965858@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@PIR4965858@DW@0|0@DW@height@DW@38px@DX@genericRemoveNodeStyle@DW@PIR4965858@DW@0|0@DW@bottom@DX@genericSetNodeStyle@DW@PIR4965858@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@PIR4965858@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@PIR4965858@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@PIR4965858@DW@0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@PIR4965858@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@PIR4965858@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@PIR4965858@DW@0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@PIR4965858@DW@0|0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@PIR4965858@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@PIR4965858@DW@0|0|0|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@PIR4965858@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@PIR4965858@DW@0|0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@PIR4965858@DW@0|0|0|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@PIR4965858@DW@0|0|0|0@DW@margin-left@DW@-19px@DX@genericRemoveNodeStyle@DW@PIR4965858@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@HEG4965862@DW@0|0@DW@width@DW@76px@DX@genericRemoveNodeStyle@DW@HEG4965862@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@HEG4965862@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@HEG4965862@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@HEG4965862@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@HEG4965862@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@HEG4965862@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@HEG4965862@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@HEG4965862@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@HEG4965862@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@HEG4965862@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@HEG4965862@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@HEG4965862@DW@0|0|0@DW@width@DW@0px@DX@genericSetNodeStyle@DW@HEG4965862@DW@0|0|0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@HEG4965862@DW@0|0|0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@HEG4965862@DW@0|0|0|0@DW@margin-top@DW@0px@DX@genericSetNodeStyle@DW@HEG4965862@DW@0|0|0|0@DW@margin-bottom@DW@0px@DX@genericRemoveNodeStyle@DW@HEG4965862@DW@0|0|0|0@DW@height@DX@genericSetNodeStyle@DW@HEG4965862@DW@0|0|0|0@DW@width@DW@1px@DX@genericSetNodeStyle@DW@HEG4965862@DW@0|0|0|0@DW@left@DW@49.999%@DX@genericSetNodeStyle@DW@HEG4965862@DW@0|0|0|0@DW@margin-left@DW@-2px@DX@genericRemoveNodeStyle@DW@HEG4965862@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@HEG4965862@DW@0|0|1@DW@top@DW@0px@DX@genericSetNodeStyle@DW@HEG4965862@DW@0|0|1@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@HEG4965862@DW@0|0|1@DW@height@DX@genericSetNodeStyle@DW@HEG4965862@DW@0|0|1@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@HEG4965862@DW@0|0|1@DW@right@DX@genericSetNodeStyle@DW@HEG4965862@DW@0|0|1@DW@width@DW@76px@DX@genericSetNodeStyle@DW@HEG4965862@DW@0|0|1|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@HEG4965862@DW@0|0|1|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@HEG4965862@DW@0|0|1|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@HEG4965862@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@HEG4965862@DW@0|0|1|0@DW@width@DW@46px@DX@genericSetNodeStyle@DW@HEG4965862@DW@0|0|1|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@HEG4965862@DW@0|0|1|0@DW@margin-left@DW@10px@DX@genericRemoveNodeStyle@DW@HEG4965862@DW@0|0|1|0@DW@right@DX@genericSetNodeStyle@DW@XFK4965859@DW@0|0@DW@width@DW@24px@DX@genericRemoveNodeStyle@DW@XFK4965859@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@XFK4965859@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@XFK4965859@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@XFK4965859@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@XFK4965859@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@XFK4965859@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@XFK4965859@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@XFK4965859@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@XFK4965859@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@XFK4965859@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@XFK4965859@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@XFK4965859@DW@0|0|0@DW@width@DW@24px@DX@genericSetNodeStyle@DW@XFK4965859@DW@0|0|0|0@DW@height@DW@16px@DX@genericSetNodeStyle@DW@XFK4965859@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@XFK4965859@DW@0|0|0|0@DW@margin-top@DW@-8px@DX@genericRemoveNodeStyle@DW@XFK4965859@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@XFK4965859@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@XFK4965859@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@XFK4965859@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@XFK4965859@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@XFK4965859@DW@0|0|0|0@DW@width@DX@genericSetNodeStyle@DW@VXT4965859@DW@0|0@DW@width@DW@38px@DX@genericRemoveNodeStyle@DW@VXT4965859@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@VXT4965859@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@VXT4965859@DW@0|0@DW@height@DW@38px@DX@genericRemoveNodeStyle@DW@VXT4965859@DW@0|0@DW@bottom@DX@genericSetNodeStyle@DW@VXT4965859@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@VXT4965859@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@VXT4965859@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@VXT4965859@DW@0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@VXT4965859@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@VXT4965859@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@VXT4965859@DW@0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@VXT4965859@DW@0|0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@VXT4965859@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@VXT4965859@DW@0|0|0|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@VXT4965859@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@VXT4965859@DW@0|0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@VXT4965859@DW@0|0|0|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@VXT4965859@DW@0|0|0|0@DW@margin-left@DW@-19px@DX@genericRemoveNodeStyle@DW@VXT4965859@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@OST4965862@DW@0|0@DW@width@DW@76px@DX@genericRemoveNodeStyle@DW@OST4965862@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@OST4965862@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@OST4965862@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@OST4965862@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@OST4965862@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@OST4965862@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@OST4965862@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@OST4965862@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@OST4965862@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@OST4965862@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@OST4965862@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@OST4965862@DW@0|0|0@DW@width@DW@0px@DX@genericSetNodeStyle@DW@OST4965862@DW@0|0|0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@OST4965862@DW@0|0|0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@OST4965862@DW@0|0|0|0@DW@margin-top@DW@0px@DX@genericSetNodeStyle@DW@OST4965862@DW@0|0|0|0@DW@margin-bottom@DW@0px@DX@genericRemoveNodeStyle@DW@OST4965862@DW@0|0|0|0@DW@height@DX@genericSetNodeStyle@DW@OST4965862@DW@0|0|0|0@DW@width@DW@1px@DX@genericSetNodeStyle@DW@OST4965862@DW@0|0|0|0@DW@left@DW@49.999%@DX@genericSetNodeStyle@DW@OST4965862@DW@0|0|0|0@DW@margin-left@DW@-2px@DX@genericRemoveNodeStyle@DW@OST4965862@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@OST4965862@DW@0|0|1@DW@top@DW@0px@DX@genericSetNodeStyle@DW@OST4965862@DW@0|0|1@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@OST4965862@DW@0|0|1@DW@height@DX@genericSetNodeStyle@DW@OST4965862@DW@0|0|1@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@OST4965862@DW@0|0|1@DW@right@DX@genericSetNodeStyle@DW@OST4965862@DW@0|0|1@DW@width@DW@76px@DX@genericSetNodeStyle@DW@OST4965862@DW@0|0|1|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@OST4965862@DW@0|0|1|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@OST4965862@DW@0|0|1|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@OST4965862@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@OST4965862@DW@0|0|1|0@DW@width@DW@46px@DX@genericSetNodeStyle@DW@OST4965862@DW@0|0|1|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@OST4965862@DW@0|0|1|0@DW@margin-left@DW@10px@DX@genericRemoveNodeStyle@DW@OST4965862@DW@0|0|1|0@DW@right@DX@genericSetNodeStyle@DW@DPI4965860@DW@0|0@DW@width@DW@24px@DX@genericRemoveNodeStyle@DW@DPI4965860@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@DPI4965860@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@DPI4965860@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@DPI4965860@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@DPI4965860@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@DPI4965860@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@DPI4965860@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@DPI4965860@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@DPI4965860@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@DPI4965860@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@DPI4965860@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@DPI4965860@DW@0|0|0@DW@width@DW@24px@DX@genericSetNodeStyle@DW@DPI4965860@DW@0|0|0|0@DW@height@DW@16px@DX@genericSetNodeStyle@DW@DPI4965860@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@DPI4965860@DW@0|0|0|0@DW@margin-top@DW@-8px@DX@genericRemoveNodeStyle@DW@DPI4965860@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@DPI4965860@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@DPI4965860@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@DPI4965860@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@DPI4965860@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@DPI4965860@DW@0|0|0|0@DW@width@DX@genericSetNodeStyle@DW@DSB4965860@DW@0|0@DW@width@DW@38px@DX@genericRemoveNodeStyle@DW@DSB4965860@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@DSB4965860@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@DSB4965860@DW@0|0@DW@height@DW@38px@DX@genericRemoveNodeStyle@DW@DSB4965860@DW@0|0@DW@bottom@DX@genericSetNodeStyle@DW@DSB4965860@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@DSB4965860@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@DSB4965860@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@DSB4965860@DW@0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@DSB4965860@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@DSB4965860@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@DSB4965860@DW@0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@DSB4965860@DW@0|0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@DSB4965860@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@DSB4965860@DW@0|0|0|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@DSB4965860@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@DSB4965860@DW@0|0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@DSB4965860@DW@0|0|0|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@DSB4965860@DW@0|0|0|0@DW@margin-left@DW@-19px@DX@genericRemoveNodeStyle@DW@DSB4965860@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@BUN4965862@DW@0|0@DW@width@DW@76px@DX@genericRemoveNodeStyle@DW@BUN4965862@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@BUN4965862@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@BUN4965862@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@BUN4965862@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@BUN4965862@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@BUN4965862@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@BUN4965862@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@BUN4965862@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@BUN4965862@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@BUN4965862@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@BUN4965862@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@BUN4965862@DW@0|0|0@DW@width@DW@0px@DX@genericSetNodeStyle@DW@BUN4965862@DW@0|0|0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@BUN4965862@DW@0|0|0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@BUN4965862@DW@0|0|0|0@DW@margin-top@DW@0px@DX@genericSetNodeStyle@DW@BUN4965862@DW@0|0|0|0@DW@margin-bottom@DW@0px@DX@genericRemoveNodeStyle@DW@BUN4965862@DW@0|0|0|0@DW@height@DX@genericSetNodeStyle@DW@BUN4965862@DW@0|0|0|0@DW@width@DW@1px@DX@genericSetNodeStyle@DW@BUN4965862@DW@0|0|0|0@DW@left@DW@49.999%@DX@genericSetNodeStyle@DW@BUN4965862@DW@0|0|0|0@DW@margin-left@DW@-2px@DX@genericRemoveNodeStyle@DW@BUN4965862@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@BUN4965862@DW@0|0|1@DW@top@DW@0px@DX@genericSetNodeStyle@DW@BUN4965862@DW@0|0|1@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@BUN4965862@DW@0|0|1@DW@height@DX@genericSetNodeStyle@DW@BUN4965862@DW@0|0|1@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@BUN4965862@DW@0|0|1@DW@right@DX@genericSetNodeStyle@DW@BUN4965862@DW@0|0|1@DW@width@DW@76px@DX@genericSetNodeStyle@DW@BUN4965862@DW@0|0|1|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@BUN4965862@DW@0|0|1|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@BUN4965862@DW@0|0|1|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@BUN4965862@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@BUN4965862@DW@0|0|1|0@DW@width@DW@46px@DX@genericSetNodeStyle@DW@BUN4965862@DW@0|0|1|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@BUN4965862@DW@0|0|1|0@DW@margin-left@DW@10px@DX@genericRemoveNodeStyle@DW@BUN4965862@DW@0|0|1|0@DW@right@DX@genericSetNodeStyle@DW@JKB4965860@DW@0|0@DW@width@DW@24px@DX@genericRemoveNodeStyle@DW@JKB4965860@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@JKB4965860@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@JKB4965860@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@JKB4965860@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@JKB4965860@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@JKB4965860@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@JKB4965860@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@JKB4965860@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@JKB4965860@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@JKB4965860@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@JKB4965860@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@JKB4965860@DW@0|0|0@DW@width@DW@24px@DX@genericSetNodeStyle@DW@JKB4965860@DW@0|0|0|0@DW@height@DW@16px@DX@genericSetNodeStyle@DW@JKB4965860@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@JKB4965860@DW@0|0|0|0@DW@margin-top@DW@-8px@DX@genericRemoveNodeStyle@DW@JKB4965860@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@JKB4965860@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@JKB4965860@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@JKB4965860@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@JKB4965860@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@JKB4965860@DW@0|0|0|0@DW@width@DX@genericSetNodeStyle@DW@XWU4965860@DW@0|0@DW@width@DW@38px@DX@genericRemoveNodeStyle@DW@XWU4965860@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@XWU4965860@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@XWU4965860@DW@0|0@DW@height@DW@38px@DX@genericRemoveNodeStyle@DW@XWU4965860@DW@0|0@DW@bottom@DX@genericSetNodeStyle@DW@XWU4965860@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@XWU4965860@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@XWU4965860@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@XWU4965860@DW@0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@XWU4965860@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@XWU4965860@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@XWU4965860@DW@0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@XWU4965860@DW@0|0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@XWU4965860@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@XWU4965860@DW@0|0|0|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@XWU4965860@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@XWU4965860@DW@0|0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@XWU4965860@DW@0|0|0|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@XWU4965860@DW@0|0|0|0@DW@margin-left@DW@-19px@DX@genericRemoveNodeStyle@DW@XWU4965860@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@BEA4965862@DW@0|0@DW@width@DW@76px@DX@genericRemoveNodeStyle@DW@BEA4965862@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@BEA4965862@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@BEA4965862@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@BEA4965862@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@BEA4965862@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@BEA4965862@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@BEA4965862@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@BEA4965862@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@BEA4965862@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@BEA4965862@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@BEA4965862@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@BEA4965862@DW@0|0|0@DW@width@DW@0px@DX@genericSetNodeStyle@DW@BEA4965862@DW@0|0|0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@BEA4965862@DW@0|0|0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@BEA4965862@DW@0|0|0|0@DW@margin-top@DW@0px@DX@genericSetNodeStyle@DW@BEA4965862@DW@0|0|0|0@DW@margin-bottom@DW@0px@DX@genericRemoveNodeStyle@DW@BEA4965862@DW@0|0|0|0@DW@height@DX@genericSetNodeStyle@DW@BEA4965862@DW@0|0|0|0@DW@width@DW@1px@DX@genericSetNodeStyle@DW@BEA4965862@DW@0|0|0|0@DW@left@DW@49.999%@DX@genericSetNodeStyle@DW@BEA4965862@DW@0|0|0|0@DW@margin-left@DW@-2px@DX@genericRemoveNodeStyle@DW@BEA4965862@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@BEA4965862@DW@0|0|1@DW@top@DW@0px@DX@genericSetNodeStyle@DW@BEA4965862@DW@0|0|1@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@BEA4965862@DW@0|0|1@DW@height@DX@genericSetNodeStyle@DW@BEA4965862@DW@0|0|1@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@BEA4965862@DW@0|0|1@DW@right@DX@genericSetNodeStyle@DW@BEA4965862@DW@0|0|1@DW@width@DW@76px@DX@genericSetNodeStyle@DW@BEA4965862@DW@0|0|1|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@BEA4965862@DW@0|0|1|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@BEA4965862@DW@0|0|1|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@BEA4965862@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@BEA4965862@DW@0|0|1|0@DW@width@DW@46px@DX@genericSetNodeStyle@DW@BEA4965862@DW@0|0|1|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@BEA4965862@DW@0|0|1|0@DW@margin-left@DW@10px@DX@genericRemoveNodeStyle@DW@BEA4965862@DW@0|0|1|0@DW@right@DX@genericSetNodeStyle@DW@MRV4965861@DW@0|0@DW@width@DW@24px@DX@genericRemoveNodeStyle@DW@MRV4965861@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@MRV4965861@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@MRV4965861@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@MRV4965861@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@MRV4965861@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@MRV4965861@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@MRV4965861@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@MRV4965861@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@MRV4965861@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@MRV4965861@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@MRV4965861@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@MRV4965861@DW@0|0|0@DW@width@DW@24px@DX@genericSetNodeStyle@DW@MRV4965861@DW@0|0|0|0@DW@height@DW@16px@DX@genericSetNodeStyle@DW@MRV4965861@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@MRV4965861@DW@0|0|0|0@DW@margin-top@DW@-8px@DX@genericRemoveNodeStyle@DW@MRV4965861@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@MRV4965861@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@MRV4965861@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@MRV4965861@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@MRV4965861@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@MRV4965861@DW@0|0|0|0@DW@width@DX@genericSetNodeStyle@DW@HCP4965861@DW@0|0@DW@width@DW@38px@DX@genericRemoveNodeStyle@DW@HCP4965861@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@HCP4965861@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@HCP4965861@DW@0|0@DW@height@DW@38px@DX@genericRemoveNodeStyle@DW@HCP4965861@DW@0|0@DW@bottom@DX@genericSetNodeStyle@DW@HCP4965861@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@HCP4965861@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@HCP4965861@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@HCP4965861@DW@0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@HCP4965861@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@HCP4965861@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@HCP4965861@DW@0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@HCP4965861@DW@0|0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@HCP4965861@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@HCP4965861@DW@0|0|0|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@HCP4965861@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@HCP4965861@DW@0|0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@HCP4965861@DW@0|0|0|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@HCP4965861@DW@0|0|0|0@DW@margin-left@DW@-19px@DX@genericRemoveNodeStyle@DW@HCP4965861@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@FJS4965862@DW@0|0@DW@width@DW@76px@DX@genericRemoveNodeStyle@DW@FJS4965862@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@FJS4965862@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@FJS4965862@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@FJS4965862@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@FJS4965862@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@FJS4965862@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@FJS4965862@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@FJS4965862@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@FJS4965862@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@FJS4965862@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@FJS4965862@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@FJS4965862@DW@0|0|0@DW@width@DW@0px@DX@genericSetNodeStyle@DW@FJS4965862@DW@0|0|0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@FJS4965862@DW@0|0|0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@FJS4965862@DW@0|0|0|0@DW@margin-top@DW@0px@DX@genericSetNodeStyle@DW@FJS4965862@DW@0|0|0|0@DW@margin-bottom@DW@0px@DX@genericRemoveNodeStyle@DW@FJS4965862@DW@0|0|0|0@DW@height@DX@genericSetNodeStyle@DW@FJS4965862@DW@0|0|0|0@DW@width@DW@1px@DX@genericSetNodeStyle@DW@FJS4965862@DW@0|0|0|0@DW@left@DW@49.999%@DX@genericSetNodeStyle@DW@FJS4965862@DW@0|0|0|0@DW@margin-left@DW@-2px@DX@genericRemoveNodeStyle@DW@FJS4965862@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@FJS4965862@DW@0|0|1@DW@top@DW@0px@DX@genericSetNodeStyle@DW@FJS4965862@DW@0|0|1@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@FJS4965862@DW@0|0|1@DW@height@DX@genericSetNodeStyle@DW@FJS4965862@DW@0|0|1@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@FJS4965862@DW@0|0|1@DW@right@DX@genericSetNodeStyle@DW@FJS4965862@DW@0|0|1@DW@width@DW@76px@DX@genericSetNodeStyle@DW@FJS4965862@DW@0|0|1|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@FJS4965862@DW@0|0|1|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@FJS4965862@DW@0|0|1|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@FJS4965862@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@FJS4965862@DW@0|0|1|0@DW@width@DW@46px@DX@genericSetNodeStyle@DW@FJS4965862@DW@0|0|1|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@FJS4965862@DW@0|0|1|0@DW@margin-left@DW@10px@DX@genericRemoveNodeStyle@DW@FJS4965862@DW@0|0|1|0@DW@right@DX@genericSetNodeStyle@DW@HFH4965862@DW@0|0@DW@width@DW@24px@DX@genericRemoveNodeStyle@DW@HFH4965862@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@HFH4965862@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@HFH4965862@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@HFH4965862@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@HFH4965862@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@HFH4965862@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@HFH4965862@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@HFH4965862@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@HFH4965862@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@HFH4965862@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@HFH4965862@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@HFH4965862@DW@0|0|0@DW@width@DW@24px@DX@genericSetNodeStyle@DW@HFH4965862@DW@0|0|0|0@DW@height@DW@16px@DX@genericSetNodeStyle@DW@HFH4965862@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@HFH4965862@DW@0|0|0|0@DW@margin-top@DW@-8px@DX@genericRemoveNodeStyle@DW@HFH4965862@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@HFH4965862@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@HFH4965862@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@HFH4965862@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@HFH4965862@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@HFH4965862@DW@0|0|0|0@DW@width@DX@genericSetNodeStyle@DW@PSM4965862@DW@0|0@DW@width@DW@38px@DX@genericRemoveNodeStyle@DW@PSM4965862@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@PSM4965862@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@PSM4965862@DW@0|0@DW@height@DW@38px@DX@genericRemoveNodeStyle@DW@PSM4965862@DW@0|0@DW@bottom@DX@genericSetNodeStyle@DW@PSM4965862@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@PSM4965862@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@PSM4965862@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@PSM4965862@DW@0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@PSM4965862@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@PSM4965862@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@PSM4965862@DW@0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@PSM4965862@DW@0|0|0|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@PSM4965862@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@PSM4965862@DW@0|0|0|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@PSM4965862@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@PSM4965862@DW@0|0|0|0@DW@width@DW@38px@DX@genericSetNodeStyle@DW@PSM4965862@DW@0|0|0|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@PSM4965862@DW@0|0|0|0@DW@margin-left@DW@-19px@DX@genericRemoveNodeStyle@DW@PSM4965862@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@DUX4965862@DW@0|0@DW@width@DW@76px@DX@genericRemoveNodeStyle@DW@DUX4965862@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@DUX4965862@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@DUX4965862@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@DUX4965862@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@DUX4965862@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@DUX4965862@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@DUX4965862@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@DUX4965862@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@DUX4965862@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@DUX4965862@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@DUX4965862@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@DUX4965862@DW@0|0|0@DW@width@DW@0px@DX@genericSetNodeStyle@DW@DUX4965862@DW@0|0|0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@DUX4965862@DW@0|0|0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@DUX4965862@DW@0|0|0|0@DW@margin-top@DW@0px@DX@genericSetNodeStyle@DW@DUX4965862@DW@0|0|0|0@DW@margin-bottom@DW@0px@DX@genericRemoveNodeStyle@DW@DUX4965862@DW@0|0|0|0@DW@height@DX@genericSetNodeStyle@DW@DUX4965862@DW@0|0|0|0@DW@width@DW@1px@DX@genericSetNodeStyle@DW@DUX4965862@DW@0|0|0|0@DW@left@DW@49.999%@DX@genericSetNodeStyle@DW@DUX4965862@DW@0|0|0|0@DW@margin-left@DW@-2px@DX@genericRemoveNodeStyle@DW@DUX4965862@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@DUX4965862@DW@0|0|1@DW@top@DW@0px@DX@genericSetNodeStyle@DW@DUX4965862@DW@0|0|1@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@DUX4965862@DW@0|0|1@DW@height@DX@genericSetNodeStyle@DW@DUX4965862@DW@0|0|1@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@DUX4965862@DW@0|0|1@DW@right@DX@genericSetNodeStyle@DW@DUX4965862@DW@0|0|1@DW@width@DW@76px@DX@genericSetNodeStyle@DW@DUX4965862@DW@0|0|1|0@DW@height@DW@38px@DX@genericSetNodeStyle@DW@DUX4965862@DW@0|0|1|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@DUX4965862@DW@0|0|1|0@DW@margin-top@DW@-19px@DX@genericRemoveNodeStyle@DW@DUX4965862@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@DUX4965862@DW@0|0|1|0@DW@width@DW@46px@DX@genericSetNodeStyle@DW@DUX4965862@DW@0|0|1|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@DUX4965862@DW@0|0|1|0@DW@margin-left@DW@10px@DX@genericRemoveNodeStyle@DW@DUX4965862@DW@0|0|1|0@DW@right@DX@setStyle@DW@WQO4965656@DW@height@DW@697px@DX@setStyle@DW@WQO4965656@DW@width@DW@612px@DX@evaluateJavascript@DW@dwScrollpaneRepaintScrollpaneFadings('MWJ4965656');@DX@evaluateJavascript@DW@dwHelperScrollToStoredPosition('MWJ4965656');@DX@setStyle@DW@USD4965660@DW@height@DW@51px@DX@setStyle@DW@USD4965660@DW@width@DW@424px@DX@evaluateJavascript@DW@dwScrollpaneRepaintScrollpaneFadings('IAP4965656');@DX@evaluateJavascript@DW@dwHelperScrollToStoredPosition('IAP4965656');@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0@DW@width@DW@92px@DX@genericRemoveNodeStyle@DW@UXU4965633@DW@0|0@DW@right@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0@DW@height@DW@48px@DX@genericRemoveNodeStyle@DW@UXU4965633@DW@0|0@DW@bottom@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@UXU4965633@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0|0@DW@height@DW@48px@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@UXU4965633@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0|0@DW@width@DW@46px@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0|0|0@DW@height@DW@48px@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0|0|0@DW@margin-top@DW@-24px@DX@genericRemoveNodeStyle@DW@UXU4965633@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@UXU4965633@DW@0|0|0|0@DW@width@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0|1@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@UXU4965633@DW@0|0|1@DW@bottom@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0|1@DW@height@DW@48px@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0|1@DW@left@DW@46px@DX@genericRemoveNodeStyle@DW@UXU4965633@DW@0|0|1@DW@right@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0|1@DW@width@DW@46px@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0|1|0@DW@height@DW@48px@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0|1|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0|1|0@DW@margin-top@DW@-24px@DX@genericRemoveNodeStyle@DW@UXU4965633@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0|1|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0|1|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0|1|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@UXU4965633@DW@0|0|1|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@UXU4965633@DW@0|0|1|0@DW@width@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0@DW@right@DW@0@DX@genericRemoveNodeStyle@DW@UAJ4965633@DW@0|0@DW@margin-left@DX@genericRemoveNodeStyle@DW@UAJ4965633@DW@0|0@DW@width@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@UAJ4965633@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@UAJ4965633@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@UAJ4965633@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|0@DW@height@DW@0px@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|0@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@UAJ4965633@DW@0|0|0@DW@width@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|0|0@DW@height@DW@0px@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|0|0@DW@margin-top@DW@0px@DX@genericRemoveNodeStyle@DW@UAJ4965633@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@UAJ4965633@DW@0|0|0|0@DW@width@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|1@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@UAJ4965633@DW@0|0|1@DW@bottom@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|1@DW@height@DW@1px@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|1@DW@left@DW@0px@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|1@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@UAJ4965633@DW@0|0|1@DW@width@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|1|0@DW@height@DW@1px@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|1|0@DW@top@DW@49.999%@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|1|0@DW@margin-top@DW@0px@DX@genericRemoveNodeStyle@DW@UAJ4965633@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|1|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|1|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|1|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|1|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@UAJ4965633@DW@0|0|1|0@DW@width@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|2@DW@top@DW@1px@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|2@DW@bottom@DW@1px@DX@genericRemoveNodeStyle@DW@UAJ4965633@DW@0|0|2@DW@height@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|2@DW@left@DW@0px@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|2@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@UAJ4965633@DW@0|0|2@DW@width@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|2|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|2|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|2|0@DW@margin-top@DW@0px@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|2|0@DW@margin-bottom@DW@0px@DX@genericRemoveNodeStyle@DW@UAJ4965633@DW@0|0|2|0@DW@height@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|2|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|2|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|2|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|2|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@UAJ4965633@DW@0|0|2|0@DW@width@DX@genericRemoveNodeStyle@DW@UAJ4965633@DW@0|0|3@DW@top@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|3@DW@bottom@DW@0px@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|3@DW@height@DW@1px@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|3@DW@left@DW@0px@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|3@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@UAJ4965633@DW@0|0|3@DW@width@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|3|0@DW@height@DW@1px@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|3|0@DW@top@DW@49.999%@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|3|0@DW@margin-top@DW@0px@DX@genericRemoveNodeStyle@DW@UAJ4965633@DW@0|0|3|0@DW@bottom@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|3|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|3|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|3|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|3|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@UAJ4965633@DW@0|0|3|0@DW@width@DX@genericRemoveNodeStyle@DW@UAJ4965633@DW@0|0|4@DW@top@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|4@DW@bottom@DW@0px@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|4@DW@height@DW@0px@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|4@DW@left@DW@0px@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|4@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@UAJ4965633@DW@0|0|4@DW@width@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|4|0@DW@height@DW@0px@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|4|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|4|0@DW@margin-top@DW@0px@DX@genericRemoveNodeStyle@DW@UAJ4965633@DW@0|0|4|0@DW@top@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|4|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|4|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|4|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@UAJ4965633@DW@0|0|4|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@UAJ4965633@DW@0|0|4|0@DW@width@DX@genericSetNodeStyle@DW@LEE4965633@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@LEE4965633@DW@0|0@DW@right@DW@0@DX@genericRemoveNodeStyle@DW@LEE4965633@DW@0|0@DW@margin-left@DX@genericRemoveNodeStyle@DW@LEE4965633@DW@0|0@DW@width@DX@genericSetNodeStyle@DW@LEE4965633@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@LEE4965633@DW@0|0@DW@bottom@DW@0@DX@genericRemoveNodeStyle@DW@LEE4965633@DW@0|0@DW@margin-top@DX@genericRemoveNodeStyle@DW@LEE4965633@DW@0|0@DW@height@DX@genericSetNodeStyle@DW@LEE4965633@DW@0|0|0@DW@top@DW@0px@DX@genericSetNodeStyle@DW@LEE4965633@DW@0|0|0@DW@bottom@DW@0px@DX@genericRemoveNodeStyle@DW@LEE4965633@DW@0|0|0@DW@height@DX@genericSetNodeStyle@DW@LEE4965633@DW@0|0|0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@LEE4965633@DW@0|0|0@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@LEE4965633@DW@0|0|0@DW@width@DX@genericSetNodeStyle@DW@LEE4965633@DW@0|0|0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@LEE4965633@DW@0|0|0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@LEE4965633@DW@0|0|0|0@DW@margin-top@DW@1px@DX@genericSetNodeStyle@DW@LEE4965633@DW@0|0|0|0@DW@margin-bottom@DW@1px@DX@genericRemoveNodeStyle@DW@LEE4965633@DW@0|0|0|0@DW@height@DX@genericSetNodeStyle@DW@LEE4965633@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@LEE4965633@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@LEE4965633@DW@0|0|0|0@DW@margin-left@DW@1px@DX@genericSetNodeStyle@DW@LEE4965633@DW@0|0|0|0@DW@margin-right@DW@1px@DX@genericRemoveNodeStyle@DW@LEE4965633@DW@0|0|0|0@DW@width@DX@setStyle@DW@KMT4965892@DW@padding-top@DW@6px@DX@setStyle@DW@LBE4965892@DW@padding-top@DW@6px@DX@setStyle@DW@FCX4965892@DW@padding-top@DW@6px@DX@setStyle@DW@SLM4965892@DW@padding-top@DW@6px@DX@genericSetNodeStyle@DW@AYR4966835@DW@0|0@DW@width@DW@414px@DX@genericSetNodeStyle@DW@AYR4966835@DW@0|0@DW@margin-left@DW@-207px@DX@genericSetNodeStyle@DW@AYR4966835@DW@0|0@DW@left@DW@50%@DX@genericSetNodeStyle@DW@AYR4966835@DW@0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@AYR4966835@DW@0|0@DW@height@DW@24px@DX@genericSetNodeStyle@DW@AYR4966835@DW@0|0@DW@margin-top@DW@-12px@DX@genericSetNodeStyle@DW@AYR4966835@DW@0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@AYR4966835@DW@0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@AYR4966835@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@AYR4966835@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@AYR4966835@DW@0|0|0@DW@height@DW@24px@DX@genericSetNodeStyle@DW@AYR4966835@DW@0|0|0@DW@left@DW@0px@DX@genericRemoveNodeStyle@DW@AYR4966835@DW@0|0|0@DW@right@DX@genericSetNodeStyle@DW@AYR4966835@DW@0|0|0@DW@width@DW@73px@DX@genericSetNodeStyle@DW@AYR4966835@DW@0|0|0|0@DW@height@DW@24px@DX@genericSetNodeStyle@DW@AYR4966835@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@AYR4966835@DW@0|0|0|0@DW@margin-top@DW@-12px@DX@genericRemoveNodeStyle@DW@AYR4966835@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@AYR4966835@DW@0|0|0|0@DW@width@DW@73px@DX@genericSetNodeStyle@DW@AYR4966835@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@AYR4966835@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericRemoveNodeStyle@DW@AYR4966835@DW@0|0|0|0@DW@right@DX@genericSetNodeStyle@DW@AYR4966835@DW@0|0|1@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@AYR4966835@DW@0|0|1@DW@bottom@DX@genericSetNodeStyle@DW@AYR4966835@DW@0|0|1@DW@height@DW@24px@DX@genericSetNodeStyle@DW@AYR4966835@DW@0|0|1@DW@left@DW@73px@DX@genericRemoveNodeStyle@DW@AYR4966835@DW@0|0|1@DW@right@DX@genericSetNodeStyle@DW@AYR4966835@DW@0|0|1@DW@width@DW@152px@DX@genericSetNodeStyle@DW@AYR4966835@DW@0|0|1|0@DW@height@DW@24px@DX@genericSetNodeStyle@DW@AYR4966835@DW@0|0|1|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@AYR4966835@DW@0|0|1|0@DW@margin-top@DW@-12px@DX@genericRemoveNodeStyle@DW@AYR4966835@DW@0|0|1|0@DW@bottom@DX@genericSetNodeStyle@DW@AYR4966835@DW@0|0|1|0@DW@width@DW@152px@DX@genericSetNodeStyle@DW@AYR4966835@DW@0|0|1|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@AYR4966835@DW@0|0|1|0@DW@margin-left@DW@0px@DX@genericRemoveNodeStyle@DW@AYR4966835@DW@0|0|1|0@DW@right@DX@genericSetNodeStyle@DW@AYR4966835@DW@0|0|2@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@AYR4966835@DW@0|0|2@DW@bottom@DX@genericSetNodeStyle@DW@AYR4966835@DW@0|0|2@DW@height@DW@24px@DX@genericSetNodeStyle@DW@AYR4966835@DW@0|0|2@DW@left@DW@225px@DX@genericRemoveNodeStyle@DW@AYR4966835@DW@0|0|2@DW@right@DX@genericSetNodeStyle@DW@AYR4966835@DW@0|0|2@DW@width@DW@50px@DX@genericSetNodeStyle@DW@AYR4966835@DW@0|0|2|0@DW@height@DW@24px@DX@genericSetNodeStyle@DW@AYR4966835@DW@0|0|2|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@AYR4966835@DW@0|0|2|0@DW@margin-top@DW@-12px@DX@genericRemoveNodeStyle@DW@AYR4966835@DW@0|0|2|0@DW@bottom@DX@genericSetNodeStyle@DW@AYR4966835@DW@0|0|2|0@DW@width@DW@50px@DX@genericSetNodeStyle@DW@AYR4966835@DW@0|0|2|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@AYR4966835@DW@0|0|2|0@DW@margin-left@DW@0px@DX@genericRemoveNodeStyle@DW@AYR4966835@DW@0|0|2|0@DW@right@DX@genericSetNodeStyle@DW@AYR4966835@DW@0|0|3@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@AYR4966835@DW@0|0|3@DW@bottom@DX@genericSetNodeStyle@DW@AYR4966835@DW@0|0|3@DW@height@DW@24px@DX@genericSetNodeStyle@DW@AYR4966835@DW@0|0|3@DW@left@DW@275px@DX@genericRemoveNodeStyle@DW@AYR4966835@DW@0|0|3@DW@right@DX@genericSetNodeStyle@DW@AYR4966835@DW@0|0|3@DW@width@DW@101px@DX@genericSetNodeStyle@DW@AYR4966835@DW@0|0|3|0@DW@height@DW@24px@DX@genericSetNodeStyle@DW@AYR4966835@DW@0|0|3|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@AYR4966835@DW@0|0|3|0@DW@margin-top@DW@-12px@DX@genericRemoveNodeStyle@DW@AYR4966835@DW@0|0|3|0@DW@bottom@DX@genericSetNodeStyle@DW@AYR4966835@DW@0|0|3|0@DW@width@DW@101px@DX@genericSetNodeStyle@DW@AYR4966835@DW@0|0|3|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@AYR4966835@DW@0|0|3|0@DW@margin-left@DW@0px@DX@genericRemoveNodeStyle@DW@AYR4966835@DW@0|0|3|0@DW@right@DX@genericSetNodeStyle@DW@AYR4966835@DW@0|0|4@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@AYR4966835@DW@0|0|4@DW@bottom@DX@genericSetNodeStyle@DW@AYR4966835@DW@0|0|4@DW@height@DW@24px@DX@genericSetNodeStyle@DW@AYR4966835@DW@0|0|4@DW@left@DW@376px@DX@genericRemoveNodeStyle@DW@AYR4966835@DW@0|0|4@DW@right@DX@genericSetNodeStyle@DW@AYR4966835@DW@0|0|4@DW@width@DW@38px@DX@genericSetNodeStyle@DW@AYR4966835@DW@0|0|4|0@DW@height@DW@24px@DX@genericSetNodeStyle@DW@AYR4966835@DW@0|0|4|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@AYR4966835@DW@0|0|4|0@DW@margin-top@DW@-12px@DX@genericRemoveNodeStyle@DW@AYR4966835@DW@0|0|4|0@DW@bottom@DX@genericSetNodeStyle@DW@AYR4966835@DW@0|0|4|0@DW@width@DW@37px@DX@genericSetNodeStyle@DW@AYR4966835@DW@0|0|4|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@AYR4966835@DW@0|0|4|0@DW@margin-left@DW@0px@DX@genericRemoveNodeStyle@DW@AYR4966835@DW@0|0|4|0@DW@right@DX@genericSetNodeStyle@DW@YIP4965875@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@YIP4965875@DW@0|0@DW@right@DW@0@DX@genericRemoveNodeStyle@DW@YIP4965875@DW@0|0@DW@margin-left@DX@genericRemoveNodeStyle@DW@YIP4965875@DW@0|0@DW@width@DX@genericSetNodeStyle@DW@YIP4965875@DW@0|0@DW@height@DW@24px@DX@genericRemoveNodeStyle@DW@YIP4965875@DW@0|0@DW@bottom@DX@genericSetNodeStyle@DW@YIP4965875@DW@0|0@DW@top@DW@0@DX@genericSetNodeStyle@DW@YIP4965875@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@YIP4965875@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@YIP4965875@DW@0|0|0@DW@height@DW@24px@DX@genericSetNodeStyle@DW@YIP4965875@DW@0|0|0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@YIP4965875@DW@0|0|0@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@YIP4965875@DW@0|0|0@DW@width@DX@genericSetNodeStyle@DW@YIP4965875@DW@0|0|0|0@DW@height@DW@24px@DX@genericSetNodeStyle@DW@YIP4965875@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@YIP4965875@DW@0|0|0|0@DW@margin-top@DW@-12px@DX@genericRemoveNodeStyle@DW@YIP4965875@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@YIP4965875@DW@0|0|0|0@DW@width@DW@414px@DX@genericSetNodeStyle@DW@YIP4965875@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@YIP4965875@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericRemoveNodeStyle@DW@YIP4965875@DW@0|0|0|0@DW@left@DX@genericSetNodeStyle@DW@WLV4965875@DW@0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@WLV4965875@DW@0|0@DW@right@DW@0@DX@genericRemoveNodeStyle@DW@WLV4965875@DW@0|0@DW@margin-left@DX@genericRemoveNodeStyle@DW@WLV4965875@DW@0|0@DW@width@DX@genericSetNodeStyle@DW@WLV4965875@DW@0|0@DW@height@DW@24px@DX@genericSetNodeStyle@DW@WLV4965875@DW@0|0@DW@margin-top@DW@-12px@DX@genericSetNodeStyle@DW@WLV4965875@DW@0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@WLV4965875@DW@0|0@DW@bottom@DW@0@DX@genericSetNodeStyle@DW@WLV4965875@DW@0|0|0@DW@top@DW@0px@DX@genericRemoveNodeStyle@DW@WLV4965875@DW@0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@WLV4965875@DW@0|0|0@DW@height@DW@24px@DX@genericSetNodeStyle@DW@WLV4965875@DW@0|0|0@DW@left@DW@0px@DX@genericSetNodeStyle@DW@WLV4965875@DW@0|0|0@DW@right@DW@0px@DX@genericRemoveNodeStyle@DW@WLV4965875@DW@0|0|0@DW@width@DX@genericSetNodeStyle@DW@WLV4965875@DW@0|0|0|0@DW@height@DW@24px@DX@genericSetNodeStyle@DW@WLV4965875@DW@0|0|0|0@DW@top@DW@50%@DX@genericSetNodeStyle@DW@WLV4965875@DW@0|0|0|0@DW@margin-top@DW@-12px@DX@genericRemoveNodeStyle@DW@WLV4965875@DW@0|0|0|0@DW@bottom@DX@genericSetNodeStyle@DW@WLV4965875@DW@0|0|0|0@DW@left@DW@0@DX@genericSetNodeStyle@DW@WLV4965875@DW@0|0|0|0@DW@right@DW@0@DX@genericSetNodeStyle@DW@WLV4965875@DW@0|0|0|0@DW@margin-left@DW@0px@DX@genericSetNodeStyle@DW@WLV4965875@DW@0|0|0|0@DW@margin-right@DW@0px@DX@genericRemoveNodeStyle@DW@WLV4965875@DW@0|0|0|0@DW@width@DX@setChildThreadCount@DW@2"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": -1,
          "_transferSize": 18769,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:12.361Z",
        "time": 106.09100002329797,
        "timings": {
          "blocked": 1.2510000674352049,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0.33699999999999997,
          "wait": 103.03499995365739,
          "receive": 1.4680000022053719,
          "_blocked_queueing": 0.758000067435205,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_connectionId": "1726423",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "script",
          "stack": {
            "callFrames": [],
            "parent": {
              "description": "Image",
              "callFrames": [
                {
                  "functionName": "dwDomParseStringToNodes",
                  "scriptId": "117",
                  "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                  "lineNumber": 2929,
                  "columnNumber": 27
                },
                {
                  "functionName": "dwDomAppendChild",
                  "scriptId": "117",
                  "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                  "lineNumber": 3013,
                  "columnNumber": 22
                },
                {
                  "functionName": "dwDomInsertChild",
                  "scriptId": "117",
                  "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                  "lineNumber": 3062,
                  "columnNumber": 8
                },
                {
                  "functionName": "dwAjaxGenericInsertNode",
                  "scriptId": "117",
                  "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                  "lineNumber": 17009,
                  "columnNumber": 4
                },
                {
                  "functionName": "dwAjaxGotUpdate",
                  "scriptId": "117",
                  "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                  "lineNumber": 16403,
                  "columnNumber": 20
                },
                {
                  "functionName": "xmlHttp.onreadystatechange",
                  "scriptId": "117",
                  "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                  "lineNumber": 15926,
                  "columnNumber": 24
                }
              ],
              "parent": {
                "description": "XMLHttpRequest.send",
                "callFrames": [
                  {
                    "functionName": "dwAjaxToServer",
                    "scriptId": "117",
                    "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                    "lineNumber": 16016,
                    "columnNumber": 12
                  },
                  {
                    "functionName": "dwAjaxSendUpdates",
                    "scriptId": "117",
                    "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                    "lineNumber": 15812,
                    "columnNumber": 8
                  },
                  {
                    "functionName": "dwAjaxDwrFinished",
                    "scriptId": "117",
                    "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                    "lineNumber": 16040,
                    "columnNumber": 4
                  },
                  {
                    "functionName": "xmlHttp.onreadystatechange",
                    "scriptId": "117",
                    "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                    "lineNumber": 16002,
                    "columnNumber": 16
                  }
                ],
                "parent": {
                  "description": "XMLHttpRequest.send",
                  "callFrames": [
                    {
                      "functionName": "dwAjaxToServer",
                      "scriptId": "117",
                      "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                      "lineNumber": 16016,
                      "columnNumber": 12
                    },
                    {
                      "functionName": "dwAjaxSendUpdates",
                      "scriptId": "117",
                      "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                      "lineNumber": 15812,
                      "columnNumber": 8
                    },
                    {
                      "functionName": "dwAjaxAddUpdate",
                      "scriptId": "117",
                      "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                      "lineNumber": 15751,
                      "columnNumber": 8
                    },
                    {
                      "functionName": "dwAjaxDefaultOnResize",
                      "scriptId": "117",
                      "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                      "lineNumber": 17548,
                      "columnNumber": 4
                    },
                    {
                      "functionName": "DwResizeRegistry.notifyControls",
                      "scriptId": "117",
                      "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                      "lineNumber": 13847,
                      "columnNumber": 12
                    },
                    {
                      "functionName": "DwResizeRegistry.updateSizes",
                      "scriptId": "117",
                      "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                      "lineNumber": 13789,
                      "columnNumber": 13
                    },
                    {
                      "functionName": "dwFrameworkInitFrameworkFinished",
                      "scriptId": "117",
                      "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                      "lineNumber": 7290,
                      "columnNumber": 34
                    },
                    {
                      "functionName": "init",
                      "scriptId": "122",
                      "url": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513",
                      "lineNumber": 71,
                      "columnNumber": 2272
                    },
                    {
                      "functionName": "onload",
                      "scriptId": "124",
                      "url": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513#2VF2D59BB6A19D241BF39AB8ED9782EC2676FB7D71DEA3F1B037E8A2D71F8FA91ED584BD081D6809030379CF8994891F65A8986CB38788501DB2F64C48C2D48691EC16B9477F538F011A91C9AA4E9AFEE315C79723E5AA1EB16B15031488FA743A690E2C31409293DC460553BC507C7BD94F7BF98B910BA76F04056FEF1A7BDC375B3BE8AE75D4A926AFE49D7762A6E60476BEBC713FA7FB2B155EB5CCD51A90D291C6798FCFE55699A76410CDE3B0446A5B504D3A8DCABCDDFDC43E28D86EDC81E6B7BFBA9C17998722AD7DC364F9B360B683AAF83000B8EBD51BD302897629C3579B0F4749890DFAEB2362C869E392B5E3FAADBE2D43BCFBC4C3632980B4B3D178D71AEF2EDC4AC0A207E5B628656549B3046DEBFB63331888B0C66897C62E02F0B82D220F96B06850C9AC59B34A7068454EB9B217DACCF224AF08DC573CEF013D5A7451FCDAFD827D8468EB71307DB9C421BE5AB56DD2CE6D2BAE5FFAD443C040E219C275338272C421BE5AB56DD2CE4EF98D6992C4A806A407D72CC44AD536F310827032D1AC056F89419881BF0DD5FCA12A0C1A8645C27C84DE9E0758A61631D52F27C125C1962BEB5B1C502E63A0BD6FF56630359A02627BDDDF793428EB2FA9EF932288B6B1EDF8A369FE8EE7F897DB9E3E3C84DD434F60686263DBEFD8FCCFCDAA59EAFC214F8171A05960530A9E5ABC51215E170F97DB9E3E3C84DD43DEC89585795B3874396402DD57C617A3C55FAE20F8C83C126638D24CBBC9DDDC8C8FA8D1298C97B9BBB92FB6BF271FB48345DDE94A571D0203AF5EEE5F1F2504DB148DE2EFD18A5668F70C371CE81BC89B37ABAF25FA84DACBA72043D96AEA4F298899DF7BA9DE229033D0AC10369C34D8502B5D38A884306870A18576B8D81AEFED8CAFCAE38FB38CDCE50946CE89B85A3E170EFEED9236091324AA21FE5C69BFD3C9875BD8C8EDED07AD10AEF4D84EEA4B9B45BFB90963B7D3C6C577B0F69F905385ABE9EDFFA53913940B31BC4622F515E8079FFB2D51BD6FF56630359A02627BDDDF793428EB2FA9EF932288B6B1EDF8A369FE8EE7F897DB9E3E3C84DD434F60686263DBEFD8FCCFCDAA59EAFC214F8171A05960530A9E5ABC51215E170F97DB9E3E3C84DD43DEC89585795B387440FD0D31E517DED4D161239C4F766D2711E3BB35041F1DDA7CF0863DB9386F606E08741D82FFD013293CC950248C0832FD04E7D3A07AD7B057EC30D755D283A4F515E8079FFB2D513D641BC2AF619F99C2F82A5CD507A9B60068C075906E849BA93A7B904DEB5A243B82214FFADAC952DD79BC627DD9DA3754FF0BE055B41B169E69002C06B4DE79F6C7B0DFBD3A0F522E65D7D9029BAB57CA12C1989BD261A69E69002C06B4DE79C7DC379705A4A84B6638D24CBBC9DDDC20B327CD29F50D15E4AD0A914CE23B089F436871D356837441BEC24302DBDBEC90644A227A6BC2D79DD0FB0244CDB5D164AFEE39E460DE8BE26433895B733653B9EA7E0818E6E95D41C8185567494EE8A5DD1D3D275250FD9A11E3A038EC5B42E9233C1D71C6391368F8A064E4615E43B811320325352C9D7B0496E262C373D04BE9E084FF8E9A3F2E65D7D9029BAB57B5CE2E7DCF0EAE70274DA4EDC454021AAB47E7D7FED1AFAB1FC721FCFD895E4094141E1AD049AA3622BF63BEA0373671EC16B9477F538F011A91C9AA4E9AFEE346D2AB2727781C74481117D634D964C50381183B796E17F213DA5CF05D8352EA7C2C0FF9D1BA7E865443427661C8AD65556FD0C06B132190C1E51CF9D83BACA12D04FBEDDEE8AF2AF6B3D33534177841A0CA7DC92DFEE22317138B4EC17ABBEA0381183B796E17F213DA5CF05D8352EA04056FEF1A7BDC378767B1590C24642445D85C35CE229B547E56B897C73DE385115B9CAB0EFDD59AEE3351CA6A1D79B6440232ECD2F139DBAB47E7D7FED1AFAB1FC721FCFD895E4076B5E6FD416F51F99AF8A113450A88512654A5EFA96698B9FE795E3125D4E185E2262FA8F088B802ACDB74B330B326A93FC34E72FDF43319A016572D59868882154FBE04B0A192C40BC3C01ADFBA2D0FFFF5161B05317F677366F94870710960",
                      "lineNumber": 71,
                      "columnNumber": 3699
                    }
                  ]
                }
              }
            }
          }
        },
        "_priority": "Low",
        "_resourceType": "image",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/ekat/WEB-RES/resource/resource?id=ba_image_class_image_de.docware.framework.modules.config.common.Language_flags_en_64.png_image_png_subtype_unknown_25x25_false_false_2913F50F5EE40913B5284D285DA43967",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "Referer",
              "value": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513"
            },
            {
              "name": "User-Agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            }
          ],
          "queryString": [
            {
              "name": "id",
              "value": "ba_image_class_image_de.docware.framework.modules.config.common.Language_flags_en_64.png_image_png_subtype_unknown_25x25_false_false_2913F50F5EE40913B5284D285DA43967"
            }
          ],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "x-robots-tag",
              "value": "noindex"
            },
            {
              "name": "cache-control",
              "value": "public"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "pragma",
              "value": "cache"
            },
            {
              "name": "etag",
              "value": "W/\"947-1787214493511\""
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "expires",
              "value": "Thu, 20 Aug 2026 10:28:13 GMT"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "content-length",
              "value": "970"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 08:28:13 GMT"
            },
            {
              "name": "content-type",
              "value": "image/png"
            },
            {
              "name": "last-modified",
              "value": "Thu, 20 Aug 2026 07:47:13 GMT"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            }
          ],
          "cookies": [],
          "content": {
            "size": 947,
            "mimeType": "image/png",
            "text": "iVBORw0KGgoAAAANSUhEUgAAABkAAAAQCAIAAABshEP8AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAw1JREFUOMtjfNbUJ1GV/+3X38qe3dOXnvrz9x8DElgxIcxkwcTPB47z2lmcTy0KzV2BLMvCzJQRZVrM8eRj/3TJqlym72yclxXMvsxaOLHK4+WJ8tgAA2YmRgZCgJmJMdZf/1qmYurcBrZfP/Qen+VKimVKvszOPanz7YKVD1OK+f78WNgV1FftycrCjMcgVhbmnny71j8Xf82aLze1XbIq7+WH777pS5kOnLyvUnaw1CSewcPtpn3g47yabH/tn9fqW4tcmBjRHcjEyNicafMglMtlQh2PpYnW5f3/bK190pdKWnYdOHmfmUHInoGB4faDtxtufHEuCOfatvXDhh289hZ2TroiglyCfJzi547/evCEXV7mnYWNuYpA0KGV385cVFwwkdfF7tj5x+4Ji85cfgqxifHKrVfINkuL83J//fT342dWGQkmbm4GBoZ7YamQsFdeM+fnvYeM7Oys0hIMDAwfP/94+vIzSlQIr1+NzP/BwPAD1V8/HzxhYGD4+fDJi+5paF4WRuUynhfRJhhrRAImahnEwMDAIlGahV/Fu9Wbfz14zCYvIxTmR8Cst4GhyHxpcV5+Xg4GBobfT1/8//mTXUn+6+nzvx48ZpeXES/NYmBg+Pf16+8nL5j5eb9y86GHvY7XZAhLXkpgaV+Iloro93OXHqaXscrLbHWKkFP9pgdTunnfzUfPPmRFmzNxcTxILPj3/ceLtJzkWRcePvuAEl5eDmrnNmVaGcp+WLXpXmQmv5fzCuuwoomHf/3+C7f21++/+c3bOmYeYpWVVlo5k1NPS6Kt6UCWppeDGtQsB3PF58fLtsyMZjp89Jqu45fjZ/YUNCms/lY7/ci////RQuTf///VfXvYtRqnbrwqO6lF/eB6hh27us8svNNl72CuyLR5ZrS4AOfztkmPsivZ0hKrWfRLJh76/ecvA27w+8/fotbt8WXrPrFwyM/pFU4I/5pXPlf3J9O3eYsvyRr/YuOYndygNf3+4o0X//77z0AI/P33f/GGC+IWnfltO3jS4nUfnOL89R0AwvRFat7WmOMAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4zNqnn4iUAAAAASUVORK5CYII=",
            "encoding": "base64"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": 0,
          "_transferSize": 0,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:12.362Z",
        "time": 3.196000005118549,
        "timings": {
          "blocked": 2.4439999486654997,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0,
          "wait": 0.2789999472573399,
          "receive": 0.47300010919570923,
          "_blocked_queueing": 0.8799999486654997,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_fromCache": "disk",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "script",
          "stack": {
            "callFrames": [
              {
                "functionName": "dwAjaxToServer",
                "scriptId": "117",
                "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                "lineNumber": 16016,
                "columnNumber": 12
              },
              {
                "functionName": "dwAjaxSendUpdates",
                "scriptId": "117",
                "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                "lineNumber": 15812,
                "columnNumber": 8
              },
              {
                "functionName": "dwAjaxDwrFinished",
                "scriptId": "117",
                "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                "lineNumber": 16040,
                "columnNumber": 4
              },
              {
                "functionName": "xmlHttp.onreadystatechange",
                "scriptId": "117",
                "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                "lineNumber": 16002,
                "columnNumber": 16
              }
            ],
            "parent": {
              "description": "XMLHttpRequest.send",
              "callFrames": [
                {
                  "functionName": "dwAjaxToServer",
                  "scriptId": "117",
                  "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                  "lineNumber": 16016,
                  "columnNumber": 12
                },
                {
                  "functionName": "dwAjaxSendUpdates",
                  "scriptId": "117",
                  "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                  "lineNumber": 15812,
                  "columnNumber": 8
                },
                {
                  "functionName": "dwAjaxDwrFinished",
                  "scriptId": "117",
                  "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                  "lineNumber": 16040,
                  "columnNumber": 4
                },
                {
                  "functionName": "xmlHttp.onreadystatechange",
                  "scriptId": "117",
                  "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                  "lineNumber": 16002,
                  "columnNumber": 16
                }
              ],
              "parent": {
                "description": "XMLHttpRequest.send",
                "callFrames": [
                  {
                    "functionName": "dwAjaxToServer",
                    "scriptId": "117",
                    "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                    "lineNumber": 16016,
                    "columnNumber": 12
                  },
                  {
                    "functionName": "dwAjaxSendUpdates",
                    "scriptId": "117",
                    "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                    "lineNumber": 15812,
                    "columnNumber": 8
                  },
                  {
                    "functionName": "dwAjaxDwrFinished",
                    "scriptId": "117",
                    "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                    "lineNumber": 16040,
                    "columnNumber": 4
                  },
                  {
                    "functionName": "xmlHttp.onreadystatechange",
                    "scriptId": "117",
                    "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                    "lineNumber": 16002,
                    "columnNumber": 16
                  }
                ],
                "parent": {
                  "description": "XMLHttpRequest.send",
                  "callFrames": [
                    {
                      "functionName": "dwAjaxToServer",
                      "scriptId": "117",
                      "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                      "lineNumber": 16016,
                      "columnNumber": 12
                    },
                    {
                      "functionName": "dwAjaxSendUpdates",
                      "scriptId": "117",
                      "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                      "lineNumber": 15812,
                      "columnNumber": 8
                    },
                    {
                      "functionName": "dwAjaxAddUpdate",
                      "scriptId": "117",
                      "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                      "lineNumber": 15751,
                      "columnNumber": 8
                    },
                    {
                      "functionName": "dwAjaxDefaultOnResize",
                      "scriptId": "117",
                      "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                      "lineNumber": 17548,
                      "columnNumber": 4
                    },
                    {
                      "functionName": "DwResizeRegistry.notifyControls",
                      "scriptId": "117",
                      "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                      "lineNumber": 13847,
                      "columnNumber": 12
                    },
                    {
                      "functionName": "DwResizeRegistry.updateSizes",
                      "scriptId": "117",
                      "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                      "lineNumber": 13789,
                      "columnNumber": 13
                    },
                    {
                      "functionName": "dwFrameworkInitFrameworkFinished",
                      "scriptId": "117",
                      "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                      "lineNumber": 7290,
                      "columnNumber": 34
                    },
                    {
                      "functionName": "init",
                      "scriptId": "122",
                      "url": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513",
                      "lineNumber": 71,
                      "columnNumber": 2272
                    },
                    {
                      "functionName": "onload",
                      "scriptId": "124",
                      "url": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513#2VF2D59BB6A19D241BF39AB8ED9782EC2676FB7D71DEA3F1B037E8A2D71F8FA91ED584BD081D6809030379CF8994891F65A8986CB38788501DB2F64C48C2D48691EC16B9477F538F011A91C9AA4E9AFEE315C79723E5AA1EB16B15031488FA743A690E2C31409293DC460553BC507C7BD94F7BF98B910BA76F04056FEF1A7BDC375B3BE8AE75D4A926AFE49D7762A6E60476BEBC713FA7FB2B155EB5CCD51A90D291C6798FCFE55699A76410CDE3B0446A5B504D3A8DCABCDDFDC43E28D86EDC81E6B7BFBA9C17998722AD7DC364F9B360B683AAF83000B8EBD51BD302897629C3579B0F4749890DFAEB2362C869E392B5E3FAADBE2D43BCFBC4C3632980B4B3D178D71AEF2EDC4AC0A207E5B628656549B3046DEBFB63331888B0C66897C62E02F0B82D220F96B06850C9AC59B34A7068454EB9B217DACCF224AF08DC573CEF013D5A7451FCDAFD827D8468EB71307DB9C421BE5AB56DD2CE6D2BAE5FFAD443C040E219C275338272C421BE5AB56DD2CE4EF98D6992C4A806A407D72CC44AD536F310827032D1AC056F89419881BF0DD5FCA12A0C1A8645C27C84DE9E0758A61631D52F27C125C1962BEB5B1C502E63A0BD6FF56630359A02627BDDDF793428EB2FA9EF932288B6B1EDF8A369FE8EE7F897DB9E3E3C84DD434F60686263DBEFD8FCCFCDAA59EAFC214F8171A05960530A9E5ABC51215E170F97DB9E3E3C84DD43DEC89585795B3874396402DD57C617A3C55FAE20F8C83C126638D24CBBC9DDDC8C8FA8D1298C97B9BBB92FB6BF271FB48345DDE94A571D0203AF5EEE5F1F2504DB148DE2EFD18A5668F70C371CE81BC89B37ABAF25FA84DACBA72043D96AEA4F298899DF7BA9DE229033D0AC10369C34D8502B5D38A884306870A18576B8D81AEFED8CAFCAE38FB38CDCE50946CE89B85A3E170EFEED9236091324AA21FE5C69BFD3C9875BD8C8EDED07AD10AEF4D84EEA4B9B45BFB90963B7D3C6C577B0F69F905385ABE9EDFFA53913940B31BC4622F515E8079FFB2D51BD6FF56630359A02627BDDDF793428EB2FA9EF932288B6B1EDF8A369FE8EE7F897DB9E3E3C84DD434F60686263DBEFD8FCCFCDAA59EAFC214F8171A05960530A9E5ABC51215E170F97DB9E3E3C84DD43DEC89585795B387440FD0D31E517DED4D161239C4F766D2711E3BB35041F1DDA7CF0863DB9386F606E08741D82FFD013293CC950248C0832FD04E7D3A07AD7B057EC30D755D283A4F515E8079FFB2D513D641BC2AF619F99C2F82A5CD507A9B60068C075906E849BA93A7B904DEB5A243B82214FFADAC952DD79BC627DD9DA3754FF0BE055B41B169E69002C06B4DE79F6C7B0DFBD3A0F522E65D7D9029BAB57CA12C1989BD261A69E69002C06B4DE79C7DC379705A4A84B6638D24CBBC9DDDC20B327CD29F50D15E4AD0A914CE23B089F436871D356837441BEC24302DBDBEC90644A227A6BC2D79DD0FB0244CDB5D164AFEE39E460DE8BE26433895B733653B9EA7E0818E6E95D41C8185567494EE8A5DD1D3D275250FD9A11E3A038EC5B42E9233C1D71C6391368F8A064E4615E43B811320325352C9D7B0496E262C373D04BE9E084FF8E9A3F2E65D7D9029BAB57B5CE2E7DCF0EAE70274DA4EDC454021AAB47E7D7FED1AFAB1FC721FCFD895E4094141E1AD049AA3622BF63BEA0373671EC16B9477F538F011A91C9AA4E9AFEE346D2AB2727781C74481117D634D964C50381183B796E17F213DA5CF05D8352EA7C2C0FF9D1BA7E865443427661C8AD65556FD0C06B132190C1E51CF9D83BACA12D04FBEDDEE8AF2AF6B3D33534177841A0CA7DC92DFEE22317138B4EC17ABBEA0381183B796E17F213DA5CF05D8352EA04056FEF1A7BDC378767B1590C24642445D85C35CE229B547E56B897C73DE385115B9CAB0EFDD59AEE3351CA6A1D79B6440232ECD2F139DBAB47E7D7FED1AFAB1FC721FCFD895E4076B5E6FD416F51F99AF8A113450A88512654A5EFA96698B9FE795E3125D4E185E2262FA8F088B802ACDB74B330B326A93FC34E72FDF43319A016572D59868882154FBE04B0A192C40BC3C01ADFBA2D0FFFF5161B05317F677366F94870710960",
                      "lineNumber": 71,
                      "columnNumber": 3699
                    }
                  ]
                }
              }
            }
          }
        },
        "_priority": "High",
        "_resourceType": "xhr",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "POST",
          "url": "https://ekat.festool.de/ekat/ajax",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": ":authority",
              "value": "ekat.festool.de"
            },
            {
              "name": ":method",
              "value": "POST"
            },
            {
              "name": ":path",
              "value": "/ekat/ajax"
            },
            {
              "name": ":scheme",
              "value": "https"
            },
            {
              "name": "accept",
              "value": "*/*"
            },
            {
              "name": "accept-encoding",
              "value": "gzip, deflate, br, zstd"
            },
            {
              "name": "accept-language",
              "value": "en-GB,en-US;q=0.9,en;q=0.8"
            },
            {
              "name": "cache-control",
              "value": "no-cache,no-store,must-revalidate,post-check=0,pre-check=0"
            },
            {
              "name": "content-length",
              "value": "535"
            },
            {
              "name": "content-type",
              "value": "text/plain; charset=UTF-8"
            },
            {
              "name": "expires",
              "value": "0"
            },
            {
              "name": "origin",
              "value": "https://ekat.festool.de"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "pragma",
              "value": "no-cache"
            },
            {
              "name": "priority",
              "value": "u=1, i"
            },
            {
              "name": "referer",
              "value": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            },
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "sec-fetch-dest",
              "value": "empty"
            },
            {
              "name": "sec-fetch-mode",
              "value": "cors"
            },
            {
              "name": "sec-fetch-site",
              "value": "same-origin"
            },
            {
              "name": "user-agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            }
          ],
          "queryString": [],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 535,
          "postData": {
            "mimeType": "text/plain; charset=UTF-8",
            "text": "currentBrowserRootWindow@DW@TWM4965563@DW@1388@DW@1140@DX@RNT4965681@DW@RNT4965681@DW@onresizeEvent@DW@newWidth=614@DWSUB@newHeight=687@DWSUB@relX=0@DWSUB@relY=0@DWSUB@absX=415@DWSUB@absY=73@DWSUB@newWidth=614@DWSUB@newHeight=687@DWSUB@hasVerticalOverflow=false@DWSUB@hasHorizontalOverflow=false@DX@RFB4965940@DW@RFB4965940@DW@onresizeEvent@DW@newWidth=280@DWSUB@newHeight=40@DWSUB@relX=0@DWSUB@relY=0@DWSUB@absX=582@DWSUB@absY=720@DWSUB@newWidth=280@DWSUB@newHeight=40@DWSUB@hasVerticalOverflow=false@DWSUB@hasHorizontalOverflow=false"
          }
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://ekat.festool.de"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "cache-control",
              "value": "no-cache,no-store,must-revalidate,post-check=0,pre-check=0"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "content-length",
              "value": "113"
            },
            {
              "name": "content-type",
              "value": "text/html;charset=UTF-8"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 09:09:52 GMT"
            },
            {
              "name": "expires",
              "value": "Thu, 01 Jan 1970 00:00:00 GMT"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "pragma",
              "value": "no-cache"
            },
            {
              "name": "vary",
              "value": "Origin"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "x-robots-tag",
              "value": "noindex"
            }
          ],
          "cookies": [],
          "content": {
            "size": 96,
            "mimeType": "text/html",
            "text": "evaluateJavascript@DW@dwImageViewerScrollResize('RNT4965681', true);@DX@setChildThreadCount@DW@1"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": -1,
          "_transferSize": 183,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:12.493Z",
        "time": 47.33700002543628,
        "timings": {
          "blocked": 1.9500000063627958,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0.3640000000000001,
          "wait": 44.47999995893985,
          "receive": 0.543000060133636,
          "_blocked_queueing": 0.8570000063627958,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_connectionId": "1726423",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "script",
          "stack": {
            "callFrames": [],
            "parent": {
              "description": "Image",
              "callFrames": [
                {
                  "functionName": "tile.onload",
                  "scriptId": "117",
                  "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                  "lineNumber": 10661,
                  "columnNumber": 25
                }
              ]
            }
          }
        },
        "_priority": "Low",
        "_resourceType": "image",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/ekat/WEB-RES/resource/resource?id=ba_image_EXPL_EKAT-START_2019.JPG__D1AA088F89B0FB8090187E6C0A94DB42&tileX=0&tileY=0&imgW=864&imgH=415&inctrans=true",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "Referer",
              "value": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513"
            },
            {
              "name": "User-Agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            }
          ],
          "queryString": [
            {
              "name": "id",
              "value": "ba_image_EXPL_EKAT-START_2019.JPG__D1AA088F89B0FB8090187E6C0A94DB42"
            },
            {
              "name": "tileX",
              "value": "0"
            },
            {
              "name": "tileY",
              "value": "0"
            },
            {
              "name": "imgW",
              "value": "864"
            },
            {
              "name": "imgH",
              "value": "415"
            },
            {
              "name": "inctrans",
              "value": "true"
            }
          ],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "x-robots-tag",
              "value": "noindex"
            },
            {
              "name": "cache-control",
              "value": "public"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "pragma",
              "value": "cache"
            },
            {
              "name": "etag",
              "value": "W/\"140449-1787215440289\""
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "expires",
              "value": "Thu, 20 Aug 2026 10:44:00 GMT"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "content-length",
              "value": "139555"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 08:43:59 GMT"
            },
            {
              "name": "content-type",
              "value": "image/png"
            },
            {
              "name": "last-modified",
              "value": "Thu, 20 Aug 2026 07:47:14 GMT"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            }
          ],
          "cookies": [],
          "content": {
            "size": 140449,
            "mimeType": "image/png",
            "text": "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",
            "encoding": "base64"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": 0,
          "_transferSize": 0,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:12.530Z",
        "time": 3.557999967597425,
        "timings": {
          "blocked": 1.1759999445825815,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0,
          "wait": 0.3630000161752105,
          "receive": 2.019000006839633,
          "_blocked_queueing": 0.6959999445825815,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_fromCache": "disk",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "script",
          "stack": {
            "callFrames": [],
            "parent": {
              "description": "Image",
              "callFrames": [
                {
                  "functionName": "tile.onload",
                  "scriptId": "117",
                  "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                  "lineNumber": 10661,
                  "columnNumber": 25
                }
              ]
            }
          }
        },
        "_priority": "Low",
        "_resourceType": "image",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/ekat/WEB-RES/resource/resource?id=ba_image_EXPL_EKAT-START_2019.JPG__D1AA088F89B0FB8090187E6C0A94DB42&tileX=1&tileY=0&imgW=864&imgH=415&inctrans=true",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "Referer",
              "value": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513"
            },
            {
              "name": "User-Agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            }
          ],
          "queryString": [
            {
              "name": "id",
              "value": "ba_image_EXPL_EKAT-START_2019.JPG__D1AA088F89B0FB8090187E6C0A94DB42"
            },
            {
              "name": "tileX",
              "value": "1"
            },
            {
              "name": "tileY",
              "value": "0"
            },
            {
              "name": "imgW",
              "value": "864"
            },
            {
              "name": "imgH",
              "value": "415"
            },
            {
              "name": "inctrans",
              "value": "true"
            }
          ],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "x-robots-tag",
              "value": "noindex"
            },
            {
              "name": "cache-control",
              "value": "public"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "pragma",
              "value": "cache"
            },
            {
              "name": "etag",
              "value": "W/\"71604-1787215440289\""
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "expires",
              "value": "Thu, 20 Aug 2026 10:44:00 GMT"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "content-length",
              "value": "70722"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 08:43:59 GMT"
            },
            {
              "name": "content-type",
              "value": "image/png"
            },
            {
              "name": "last-modified",
              "value": "Thu, 20 Aug 2026 07:47:14 GMT"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            }
          ],
          "cookies": [],
          "content": {
            "size": 71604,
            "mimeType": "image/png",
            "text": "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",
            "encoding": "base64"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": 0,
          "_transferSize": 0,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:12.530Z",
        "time": 2.8799999272450805,
        "timings": {
          "blocked": 1.0039999478012325,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0,
          "wait": 0.3649999990612268,
          "receive": 1.5109999803826213,
          "_blocked_queueing": 0.7269999478012323,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_fromCache": "disk",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "script",
          "stack": {
            "callFrames": [
              {
                "functionName": "dwAjaxToServer",
                "scriptId": "117",
                "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                "lineNumber": 16016,
                "columnNumber": 12
              },
              {
                "functionName": "dwAjaxSendUpdates",
                "scriptId": "117",
                "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                "lineNumber": 15812,
                "columnNumber": 8
              },
              {
                "functionName": "dwAjaxDwrFinished",
                "scriptId": "117",
                "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                "lineNumber": 16040,
                "columnNumber": 4
              },
              {
                "functionName": "xmlHttp.onreadystatechange",
                "scriptId": "117",
                "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                "lineNumber": 16002,
                "columnNumber": 16
              }
            ],
            "parent": {
              "description": "XMLHttpRequest.send",
              "callFrames": [
                {
                  "functionName": "dwAjaxToServer",
                  "scriptId": "117",
                  "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                  "lineNumber": 16016,
                  "columnNumber": 12
                },
                {
                  "functionName": "dwAjaxSendUpdates",
                  "scriptId": "117",
                  "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                  "lineNumber": 15812,
                  "columnNumber": 8
                },
                {
                  "functionName": "dwAjaxDwrFinished",
                  "scriptId": "117",
                  "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                  "lineNumber": 16040,
                  "columnNumber": 4
                },
                {
                  "functionName": "xmlHttp.onreadystatechange",
                  "scriptId": "117",
                  "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                  "lineNumber": 16002,
                  "columnNumber": 16
                }
              ],
              "parent": {
                "description": "XMLHttpRequest.send",
                "callFrames": [
                  {
                    "functionName": "dwAjaxToServer",
                    "scriptId": "117",
                    "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                    "lineNumber": 16016,
                    "columnNumber": 12
                  },
                  {
                    "functionName": "dwAjaxSendUpdates",
                    "scriptId": "117",
                    "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                    "lineNumber": 15812,
                    "columnNumber": 8
                  },
                  {
                    "functionName": "dwAjaxDwrFinished",
                    "scriptId": "117",
                    "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                    "lineNumber": 16040,
                    "columnNumber": 4
                  },
                  {
                    "functionName": "xmlHttp.onreadystatechange",
                    "scriptId": "117",
                    "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                    "lineNumber": 16002,
                    "columnNumber": 16
                  }
                ],
                "parent": {
                  "description": "XMLHttpRequest.send",
                  "callFrames": [
                    {
                      "functionName": "dwAjaxToServer",
                      "scriptId": "117",
                      "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                      "lineNumber": 16016,
                      "columnNumber": 12
                    },
                    {
                      "functionName": "dwAjaxSendUpdates",
                      "scriptId": "117",
                      "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                      "lineNumber": 15812,
                      "columnNumber": 8
                    },
                    {
                      "functionName": "dwAjaxDwrFinished",
                      "scriptId": "117",
                      "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                      "lineNumber": 16040,
                      "columnNumber": 4
                    },
                    {
                      "functionName": "xmlHttp.onreadystatechange",
                      "scriptId": "117",
                      "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                      "lineNumber": 16002,
                      "columnNumber": 16
                    }
                  ],
                  "parent": {
                    "description": "XMLHttpRequest.send",
                    "callFrames": [
                      {
                        "functionName": "dwAjaxToServer",
                        "scriptId": "117",
                        "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                        "lineNumber": 16016,
                        "columnNumber": 12
                      },
                      {
                        "functionName": "dwAjaxSendUpdates",
                        "scriptId": "117",
                        "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                        "lineNumber": 15812,
                        "columnNumber": 8
                      },
                      {
                        "functionName": "dwAjaxAddUpdate",
                        "scriptId": "117",
                        "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                        "lineNumber": 15751,
                        "columnNumber": 8
                      },
                      {
                        "functionName": "dwAjaxDefaultOnResize",
                        "scriptId": "117",
                        "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                        "lineNumber": 17548,
                        "columnNumber": 4
                      },
                      {
                        "functionName": "DwResizeRegistry.notifyControls",
                        "scriptId": "117",
                        "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                        "lineNumber": 13847,
                        "columnNumber": 12
                      },
                      {
                        "functionName": "DwResizeRegistry.updateSizes",
                        "scriptId": "117",
                        "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                        "lineNumber": 13789,
                        "columnNumber": 13
                      },
                      {
                        "functionName": "dwFrameworkInitFrameworkFinished",
                        "scriptId": "117",
                        "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                        "lineNumber": 7290,
                        "columnNumber": 34
                      },
                      {
                        "functionName": "init",
                        "scriptId": "122",
                        "url": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513",
                        "lineNumber": 71,
                        "columnNumber": 2272
                      },
                      {
                        "functionName": "onload",
                        "scriptId": "124",
                        "url": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513#2VF2D59BB6A19D241BF39AB8ED9782EC2676FB7D71DEA3F1B037E8A2D71F8FA91ED584BD081D6809030379CF8994891F65A8986CB38788501DB2F64C48C2D48691EC16B9477F538F011A91C9AA4E9AFEE315C79723E5AA1EB16B15031488FA743A690E2C31409293DC460553BC507C7BD94F7BF98B910BA76F04056FEF1A7BDC375B3BE8AE75D4A926AFE49D7762A6E60476BEBC713FA7FB2B155EB5CCD51A90D291C6798FCFE55699A76410CDE3B0446A5B504D3A8DCABCDDFDC43E28D86EDC81E6B7BFBA9C17998722AD7DC364F9B360B683AAF83000B8EBD51BD302897629C3579B0F4749890DFAEB2362C869E392B5E3FAADBE2D43BCFBC4C3632980B4B3D178D71AEF2EDC4AC0A207E5B628656549B3046DEBFB63331888B0C66897C62E02F0B82D220F96B06850C9AC59B34A7068454EB9B217DACCF224AF08DC573CEF013D5A7451FCDAFD827D8468EB71307DB9C421BE5AB56DD2CE6D2BAE5FFAD443C040E219C275338272C421BE5AB56DD2CE4EF98D6992C4A806A407D72CC44AD536F310827032D1AC056F89419881BF0DD5FCA12A0C1A8645C27C84DE9E0758A61631D52F27C125C1962BEB5B1C502E63A0BD6FF56630359A02627BDDDF793428EB2FA9EF932288B6B1EDF8A369FE8EE7F897DB9E3E3C84DD434F60686263DBEFD8FCCFCDAA59EAFC214F8171A05960530A9E5ABC51215E170F97DB9E3E3C84DD43DEC89585795B3874396402DD57C617A3C55FAE20F8C83C126638D24CBBC9DDDC8C8FA8D1298C97B9BBB92FB6BF271FB48345DDE94A571D0203AF5EEE5F1F2504DB148DE2EFD18A5668F70C371CE81BC89B37ABAF25FA84DACBA72043D96AEA4F298899DF7BA9DE229033D0AC10369C34D8502B5D38A884306870A18576B8D81AEFED8CAFCAE38FB38CDCE50946CE89B85A3E170EFEED9236091324AA21FE5C69BFD3C9875BD8C8EDED07AD10AEF4D84EEA4B9B45BFB90963B7D3C6C577B0F69F905385ABE9EDFFA53913940B31BC4622F515E8079FFB2D51BD6FF56630359A02627BDDDF793428EB2FA9EF932288B6B1EDF8A369FE8EE7F897DB9E3E3C84DD434F60686263DBEFD8FCCFCDAA59EAFC214F8171A05960530A9E5ABC51215E170F97DB9E3E3C84DD43DEC89585795B387440FD0D31E517DED4D161239C4F766D2711E3BB35041F1DDA7CF0863DB9386F606E08741D82FFD013293CC950248C0832FD04E7D3A07AD7B057EC30D755D283A4F515E8079FFB2D513D641BC2AF619F99C2F82A5CD507A9B60068C075906E849BA93A7B904DEB5A243B82214FFADAC952DD79BC627DD9DA3754FF0BE055B41B169E69002C06B4DE79F6C7B0DFBD3A0F522E65D7D9029BAB57CA12C1989BD261A69E69002C06B4DE79C7DC379705A4A84B6638D24CBBC9DDDC20B327CD29F50D15E4AD0A914CE23B089F436871D356837441BEC24302DBDBEC90644A227A6BC2D79DD0FB0244CDB5D164AFEE39E460DE8BE26433895B733653B9EA7E0818E6E95D41C8185567494EE8A5DD1D3D275250FD9A11E3A038EC5B42E9233C1D71C6391368F8A064E4615E43B811320325352C9D7B0496E262C373D04BE9E084FF8E9A3F2E65D7D9029BAB57B5CE2E7DCF0EAE70274DA4EDC454021AAB47E7D7FED1AFAB1FC721FCFD895E4094141E1AD049AA3622BF63BEA0373671EC16B9477F538F011A91C9AA4E9AFEE346D2AB2727781C74481117D634D964C50381183B796E17F213DA5CF05D8352EA7C2C0FF9D1BA7E865443427661C8AD65556FD0C06B132190C1E51CF9D83BACA12D04FBEDDEE8AF2AF6B3D33534177841A0CA7DC92DFEE22317138B4EC17ABBEA0381183B796E17F213DA5CF05D8352EA04056FEF1A7BDC378767B1590C24642445D85C35CE229B547E56B897C73DE385115B9CAB0EFDD59AEE3351CA6A1D79B6440232ECD2F139DBAB47E7D7FED1AFAB1FC721FCFD895E4076B5E6FD416F51F99AF8A113450A88512654A5EFA96698B9FE795E3125D4E185E2262FA8F088B802ACDB74B330B326A93FC34E72FDF43319A016572D59868882154FBE04B0A192C40BC3C01ADFBA2D0FFFF5161B05317F677366F94870710960",
                        "lineNumber": 71,
                        "columnNumber": 3699
                      }
                    ]
                  }
                }
              }
            }
          }
        },
        "_priority": "High",
        "_resourceType": "xhr",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "POST",
          "url": "https://ekat.festool.de/ekat/ajax",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": ":authority",
              "value": "ekat.festool.de"
            },
            {
              "name": ":method",
              "value": "POST"
            },
            {
              "name": ":path",
              "value": "/ekat/ajax"
            },
            {
              "name": ":scheme",
              "value": "https"
            },
            {
              "name": "accept",
              "value": "*/*"
            },
            {
              "name": "accept-encoding",
              "value": "gzip, deflate, br, zstd"
            },
            {
              "name": "accept-language",
              "value": "en-GB,en-US;q=0.9,en;q=0.8"
            },
            {
              "name": "cache-control",
              "value": "no-cache,no-store,must-revalidate,post-check=0,pre-check=0"
            },
            {
              "name": "content-length",
              "value": "162"
            },
            {
              "name": "content-type",
              "value": "text/plain; charset=UTF-8"
            },
            {
              "name": "expires",
              "value": "0"
            },
            {
              "name": "origin",
              "value": "https://ekat.festool.de"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "pragma",
              "value": "no-cache"
            },
            {
              "name": "priority",
              "value": "u=1, i"
            },
            {
              "name": "referer",
              "value": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            },
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "sec-fetch-dest",
              "value": "empty"
            },
            {
              "name": "sec-fetch-mode",
              "value": "cors"
            },
            {
              "name": "sec-fetch-site",
              "value": "same-origin"
            },
            {
              "name": "user-agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            }
          ],
          "queryString": [],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 162,
          "postData": {
            "mimeType": "text/plain; charset=UTF-8",
            "text": "currentBrowserRootWindow@DW@TWM4965563@DW@1388@DW@1140@DX@RNT4965681@DW@RNT4965681@DW@__custom_scrollbarVisibilityChanged@DW@horizontal=false@DWSUB@vertical=false"
          }
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://ekat.festool.de"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "cache-control",
              "value": "no-cache,no-store,must-revalidate,post-check=0,pre-check=0"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "content-length",
              "value": "44"
            },
            {
              "name": "content-type",
              "value": "text/html;charset=UTF-8"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 09:09:52 GMT"
            },
            {
              "name": "expires",
              "value": "Thu, 01 Jan 1970 00:00:00 GMT"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "pragma",
              "value": "no-cache"
            },
            {
              "name": "vary",
              "value": "Origin"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "x-robots-tag",
              "value": "noindex"
            }
          ],
          "cookies": [],
          "content": {
            "size": 24,
            "mimeType": "text/html",
            "text": "setChildThreadCount@DW@1"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": -1,
          "_transferSize": 114,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:12.542Z",
        "time": 47.20100003760308,
        "timings": {
          "blocked": 1.2110000522062183,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0.38399999999999995,
          "wait": 44.985000029824675,
          "receive": 0.6209999555721879,
          "_blocked_queueing": 0.7560000522062182,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_connectionId": "1726423",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "script",
          "stack": {
            "callFrames": [
              {
                "functionName": "dwAjaxToServer",
                "scriptId": "117",
                "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                "lineNumber": 16016,
                "columnNumber": 12
              },
              {
                "functionName": "dwAjaxSendUpdates",
                "scriptId": "117",
                "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                "lineNumber": 15812,
                "columnNumber": 8
              },
              {
                "functionName": "dwAjaxAddUpdate",
                "scriptId": "117",
                "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                "lineNumber": 15751,
                "columnNumber": 8
              },
              {
                "functionName": "dwImageViewerSetNormalizedZoom_immediately",
                "scriptId": "117",
                "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                "lineNumber": 9977,
                "columnNumber": 8
              },
              {
                "functionName": "",
                "scriptId": "117",
                "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                "lineNumber": 10215,
                "columnNumber": 8
              }
            ],
            "parent": {
              "description": "setTimeout",
              "callFrames": [
                {
                  "functionName": "dwImageViewerScrollResize",
                  "scriptId": "117",
                  "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                  "lineNumber": 10214,
                  "columnNumber": 4
                },
                {
                  "functionName": "eval",
                  "scriptId": "209",
                  "url": "",
                  "lineNumber": 0,
                  "columnNumber": 0
                },
                {
                  "functionName": "dwUtilsEvaluateJavascript",
                  "scriptId": "117",
                  "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                  "lineNumber": 1778,
                  "columnNumber": 8
                },
                {
                  "functionName": "dwAjaxGotUpdate",
                  "scriptId": "117",
                  "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                  "lineNumber": 16102,
                  "columnNumber": 16
                },
                {
                  "functionName": "xmlHttp.onreadystatechange",
                  "scriptId": "117",
                  "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                  "lineNumber": 15926,
                  "columnNumber": 24
                }
              ],
              "parent": {
                "description": "XMLHttpRequest.send",
                "callFrames": [
                  {
                    "functionName": "dwAjaxToServer",
                    "scriptId": "117",
                    "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                    "lineNumber": 16016,
                    "columnNumber": 12
                  },
                  {
                    "functionName": "dwAjaxSendUpdates",
                    "scriptId": "117",
                    "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                    "lineNumber": 15812,
                    "columnNumber": 8
                  },
                  {
                    "functionName": "dwAjaxDwrFinished",
                    "scriptId": "117",
                    "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                    "lineNumber": 16040,
                    "columnNumber": 4
                  },
                  {
                    "functionName": "xmlHttp.onreadystatechange",
                    "scriptId": "117",
                    "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                    "lineNumber": 16002,
                    "columnNumber": 16
                  }
                ],
                "parent": {
                  "description": "XMLHttpRequest.send",
                  "callFrames": [
                    {
                      "functionName": "dwAjaxToServer",
                      "scriptId": "117",
                      "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                      "lineNumber": 16016,
                      "columnNumber": 12
                    },
                    {
                      "functionName": "dwAjaxSendUpdates",
                      "scriptId": "117",
                      "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                      "lineNumber": 15812,
                      "columnNumber": 8
                    },
                    {
                      "functionName": "dwAjaxDwrFinished",
                      "scriptId": "117",
                      "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                      "lineNumber": 16040,
                      "columnNumber": 4
                    },
                    {
                      "functionName": "xmlHttp.onreadystatechange",
                      "scriptId": "117",
                      "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                      "lineNumber": 16002,
                      "columnNumber": 16
                    }
                  ],
                  "parent": {
                    "description": "XMLHttpRequest.send",
                    "callFrames": [
                      {
                        "functionName": "dwAjaxToServer",
                        "scriptId": "117",
                        "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                        "lineNumber": 16016,
                        "columnNumber": 12
                      },
                      {
                        "functionName": "dwAjaxSendUpdates",
                        "scriptId": "117",
                        "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                        "lineNumber": 15812,
                        "columnNumber": 8
                      },
                      {
                        "functionName": "dwAjaxDwrFinished",
                        "scriptId": "117",
                        "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                        "lineNumber": 16040,
                        "columnNumber": 4
                      },
                      {
                        "functionName": "xmlHttp.onreadystatechange",
                        "scriptId": "117",
                        "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                        "lineNumber": 16002,
                        "columnNumber": 16
                      }
                    ],
                    "parent": {
                      "description": "XMLHttpRequest.send",
                      "callFrames": [
                        {
                          "functionName": "dwAjaxToServer",
                          "scriptId": "117",
                          "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                          "lineNumber": 16016,
                          "columnNumber": 12
                        },
                        {
                          "functionName": "dwAjaxSendUpdates",
                          "scriptId": "117",
                          "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                          "lineNumber": 15812,
                          "columnNumber": 8
                        },
                        {
                          "functionName": "dwAjaxAddUpdate",
                          "scriptId": "117",
                          "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                          "lineNumber": 15751,
                          "columnNumber": 8
                        },
                        {
                          "functionName": "dwAjaxDefaultOnResize",
                          "scriptId": "117",
                          "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                          "lineNumber": 17548,
                          "columnNumber": 4
                        },
                        {
                          "functionName": "DwResizeRegistry.notifyControls",
                          "scriptId": "117",
                          "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                          "lineNumber": 13847,
                          "columnNumber": 12
                        },
                        {
                          "functionName": "DwResizeRegistry.updateSizes",
                          "scriptId": "117",
                          "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                          "lineNumber": 13789,
                          "columnNumber": 13
                        },
                        {
                          "functionName": "dwFrameworkInitFrameworkFinished",
                          "scriptId": "117",
                          "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                          "lineNumber": 7290,
                          "columnNumber": 34
                        },
                        {
                          "functionName": "init",
                          "scriptId": "122",
                          "url": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513",
                          "lineNumber": 71,
                          "columnNumber": 2272
                        },
                        {
                          "functionName": "onload",
                          "scriptId": "124",
                          "url": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513#2VF2D59BB6A19D241BF39AB8ED9782EC2676FB7D71DEA3F1B037E8A2D71F8FA91ED584BD081D6809030379CF8994891F65A8986CB38788501DB2F64C48C2D48691EC16B9477F538F011A91C9AA4E9AFEE315C79723E5AA1EB16B15031488FA743A690E2C31409293DC460553BC507C7BD94F7BF98B910BA76F04056FEF1A7BDC375B3BE8AE75D4A926AFE49D7762A6E60476BEBC713FA7FB2B155EB5CCD51A90D291C6798FCFE55699A76410CDE3B0446A5B504D3A8DCABCDDFDC43E28D86EDC81E6B7BFBA9C17998722AD7DC364F9B360B683AAF83000B8EBD51BD302897629C3579B0F4749890DFAEB2362C869E392B5E3FAADBE2D43BCFBC4C3632980B4B3D178D71AEF2EDC4AC0A207E5B628656549B3046DEBFB63331888B0C66897C62E02F0B82D220F96B06850C9AC59B34A7068454EB9B217DACCF224AF08DC573CEF013D5A7451FCDAFD827D8468EB71307DB9C421BE5AB56DD2CE6D2BAE5FFAD443C040E219C275338272C421BE5AB56DD2CE4EF98D6992C4A806A407D72CC44AD536F310827032D1AC056F89419881BF0DD5FCA12A0C1A8645C27C84DE9E0758A61631D52F27C125C1962BEB5B1C502E63A0BD6FF56630359A02627BDDDF793428EB2FA9EF932288B6B1EDF8A369FE8EE7F897DB9E3E3C84DD434F60686263DBEFD8FCCFCDAA59EAFC214F8171A05960530A9E5ABC51215E170F97DB9E3E3C84DD43DEC89585795B3874396402DD57C617A3C55FAE20F8C83C126638D24CBBC9DDDC8C8FA8D1298C97B9BBB92FB6BF271FB48345DDE94A571D0203AF5EEE5F1F2504DB148DE2EFD18A5668F70C371CE81BC89B37ABAF25FA84DACBA72043D96AEA4F298899DF7BA9DE229033D0AC10369C34D8502B5D38A884306870A18576B8D81AEFED8CAFCAE38FB38CDCE50946CE89B85A3E170EFEED9236091324AA21FE5C69BFD3C9875BD8C8EDED07AD10AEF4D84EEA4B9B45BFB90963B7D3C6C577B0F69F905385ABE9EDFFA53913940B31BC4622F515E8079FFB2D51BD6FF56630359A02627BDDDF793428EB2FA9EF932288B6B1EDF8A369FE8EE7F897DB9E3E3C84DD434F60686263DBEFD8FCCFCDAA59EAFC214F8171A05960530A9E5ABC51215E170F97DB9E3E3C84DD43DEC89585795B387440FD0D31E517DED4D161239C4F766D2711E3BB35041F1DDA7CF0863DB9386F606E08741D82FFD013293CC950248C0832FD04E7D3A07AD7B057EC30D755D283A4F515E8079FFB2D513D641BC2AF619F99C2F82A5CD507A9B60068C075906E849BA93A7B904DEB5A243B82214FFADAC952DD79BC627DD9DA3754FF0BE055B41B169E69002C06B4DE79F6C7B0DFBD3A0F522E65D7D9029BAB57CA12C1989BD261A69E69002C06B4DE79C7DC379705A4A84B6638D24CBBC9DDDC20B327CD29F50D15E4AD0A914CE23B089F436871D356837441BEC24302DBDBEC90644A227A6BC2D79DD0FB0244CDB5D164AFEE39E460DE8BE26433895B733653B9EA7E0818E6E95D41C8185567494EE8A5DD1D3D275250FD9A11E3A038EC5B42E9233C1D71C6391368F8A064E4615E43B811320325352C9D7B0496E262C373D04BE9E084FF8E9A3F2E65D7D9029BAB57B5CE2E7DCF0EAE70274DA4EDC454021AAB47E7D7FED1AFAB1FC721FCFD895E4094141E1AD049AA3622BF63BEA0373671EC16B9477F538F011A91C9AA4E9AFEE346D2AB2727781C74481117D634D964C50381183B796E17F213DA5CF05D8352EA7C2C0FF9D1BA7E865443427661C8AD65556FD0C06B132190C1E51CF9D83BACA12D04FBEDDEE8AF2AF6B3D33534177841A0CA7DC92DFEE22317138B4EC17ABBEA0381183B796E17F213DA5CF05D8352EA04056FEF1A7BDC378767B1590C24642445D85C35CE229B547E56B897C73DE385115B9CAB0EFDD59AEE3351CA6A1D79B6440232ECD2F139DBAB47E7D7FED1AFAB1FC721FCFD895E4076B5E6FD416F51F99AF8A113450A88512654A5EFA96698B9FE795E3125D4E185E2262FA8F088B802ACDB74B330B326A93FC34E72FDF43319A016572D59868882154FBE04B0A192C40BC3C01ADFBA2D0FFFF5161B05317F677366F94870710960",
                          "lineNumber": 71,
                          "columnNumber": 3699
                        }
                      ]
                    }
                  }
                }
              }
            }
          }
        },
        "_priority": "High",
        "_resourceType": "xhr",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "POST",
          "url": "https://ekat.festool.de/ekat/ajax",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": ":authority",
              "value": "ekat.festool.de"
            },
            {
              "name": ":method",
              "value": "POST"
            },
            {
              "name": ":path",
              "value": "/ekat/ajax"
            },
            {
              "name": ":scheme",
              "value": "https"
            },
            {
              "name": "accept",
              "value": "*/*"
            },
            {
              "name": "accept-encoding",
              "value": "gzip, deflate, br, zstd"
            },
            {
              "name": "accept-language",
              "value": "en-GB,en-US;q=0.9,en;q=0.8"
            },
            {
              "name": "cache-control",
              "value": "no-cache,no-store,must-revalidate,post-check=0,pre-check=0"
            },
            {
              "name": "content-length",
              "value": "162"
            },
            {
              "name": "content-type",
              "value": "text/plain; charset=UTF-8"
            },
            {
              "name": "expires",
              "value": "0"
            },
            {
              "name": "origin",
              "value": "https://ekat.festool.de"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "pragma",
              "value": "no-cache"
            },
            {
              "name": "priority",
              "value": "u=1, i"
            },
            {
              "name": "referer",
              "value": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            },
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "sec-fetch-dest",
              "value": "empty"
            },
            {
              "name": "sec-fetch-mode",
              "value": "cors"
            },
            {
              "name": "sec-fetch-site",
              "value": "same-origin"
            },
            {
              "name": "user-agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            }
          ],
          "queryString": [],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 162,
          "postData": {
            "mimeType": "text/plain; charset=UTF-8",
            "text": "currentBrowserRootWindow@DW@TWM4965563@DW@1388@DW@1140@DX@RNT4965681@DW@RNT4965681@DW@__custom_scrollbarVisibilityChanged@DW@horizontal=false@DWSUB@vertical=false"
          }
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://ekat.festool.de"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "cache-control",
              "value": "no-cache,no-store,must-revalidate,post-check=0,pre-check=0"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "content-length",
              "value": "199"
            },
            {
              "name": "content-type",
              "value": "text/html;charset=UTF-8"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 09:09:52 GMT"
            },
            {
              "name": "expires",
              "value": "Thu, 01 Jan 1970 00:00:00 GMT"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "pragma",
              "value": "no-cache"
            },
            {
              "name": "vary",
              "value": "Origin"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "x-robots-tag",
              "value": "noindex"
            }
          ],
          "cookies": [],
          "content": {
            "size": 218,
            "mimeType": "text/html",
            "text": "evaluateJavascript@DW@dwUtilsLoadUrlInInvisibleTarget('https://ekat.festool.de/login/WEB-API/updateSessionTimer', 'GET', '', 'AUTO', false, false, '', null, 'debug', 'UPDATE_SESSION_TIMER');@DX@setChildThreadCount@DW@1"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": -1,
          "_transferSize": 270,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:12.607Z",
        "time": 45.51199998240918,
        "timings": {
          "blocked": 1.0710000469461083,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0.47100000000000003,
          "wait": 43.20600005517155,
          "receive": 0.7639998802915215,
          "_blocked_queueing": 0.6330000469461083,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_connectionId": "1726423",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "script",
          "stack": {
            "callFrames": [
              {
                "functionName": "dwUtilsLoadUrlInInvisibleTarget",
                "scriptId": "117",
                "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                "lineNumber": 2213,
                "columnNumber": 16
              },
              {
                "functionName": "eval",
                "scriptId": "210",
                "url": "",
                "lineNumber": 0,
                "columnNumber": 0
              },
              {
                "functionName": "dwUtilsEvaluateJavascript",
                "scriptId": "117",
                "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                "lineNumber": 1778,
                "columnNumber": 8
              },
              {
                "functionName": "dwAjaxGotUpdate",
                "scriptId": "117",
                "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                "lineNumber": 16102,
                "columnNumber": 16
              },
              {
                "functionName": "xmlHttp.onreadystatechange",
                "scriptId": "117",
                "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                "lineNumber": 15926,
                "columnNumber": 24
              }
            ],
            "parent": {
              "description": "XMLHttpRequest.send",
              "callFrames": [
                {
                  "functionName": "dwAjaxToServer",
                  "scriptId": "117",
                  "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                  "lineNumber": 16016,
                  "columnNumber": 12
                },
                {
                  "functionName": "dwAjaxSendUpdates",
                  "scriptId": "117",
                  "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                  "lineNumber": 15812,
                  "columnNumber": 8
                },
                {
                  "functionName": "dwAjaxAddUpdate",
                  "scriptId": "117",
                  "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                  "lineNumber": 15751,
                  "columnNumber": 8
                },
                {
                  "functionName": "dwImageViewerSetNormalizedZoom_immediately",
                  "scriptId": "117",
                  "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                  "lineNumber": 9977,
                  "columnNumber": 8
                },
                {
                  "functionName": "",
                  "scriptId": "117",
                  "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                  "lineNumber": 10215,
                  "columnNumber": 8
                }
              ],
              "parent": {
                "description": "setTimeout",
                "callFrames": [
                  {
                    "functionName": "dwImageViewerScrollResize",
                    "scriptId": "117",
                    "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                    "lineNumber": 10214,
                    "columnNumber": 4
                  },
                  {
                    "functionName": "eval",
                    "scriptId": "209",
                    "url": "",
                    "lineNumber": 0,
                    "columnNumber": 0
                  },
                  {
                    "functionName": "dwUtilsEvaluateJavascript",
                    "scriptId": "117",
                    "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                    "lineNumber": 1778,
                    "columnNumber": 8
                  },
                  {
                    "functionName": "dwAjaxGotUpdate",
                    "scriptId": "117",
                    "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                    "lineNumber": 16102,
                    "columnNumber": 16
                  },
                  {
                    "functionName": "xmlHttp.onreadystatechange",
                    "scriptId": "117",
                    "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                    "lineNumber": 15926,
                    "columnNumber": 24
                  }
                ],
                "parent": {
                  "description": "XMLHttpRequest.send",
                  "callFrames": [
                    {
                      "functionName": "dwAjaxToServer",
                      "scriptId": "117",
                      "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                      "lineNumber": 16016,
                      "columnNumber": 12
                    },
                    {
                      "functionName": "dwAjaxSendUpdates",
                      "scriptId": "117",
                      "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                      "lineNumber": 15812,
                      "columnNumber": 8
                    },
                    {
                      "functionName": "dwAjaxDwrFinished",
                      "scriptId": "117",
                      "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                      "lineNumber": 16040,
                      "columnNumber": 4
                    },
                    {
                      "functionName": "xmlHttp.onreadystatechange",
                      "scriptId": "117",
                      "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                      "lineNumber": 16002,
                      "columnNumber": 16
                    }
                  ],
                  "parent": {
                    "description": "XMLHttpRequest.send",
                    "callFrames": [
                      {
                        "functionName": "dwAjaxToServer",
                        "scriptId": "117",
                        "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                        "lineNumber": 16016,
                        "columnNumber": 12
                      },
                      {
                        "functionName": "dwAjaxSendUpdates",
                        "scriptId": "117",
                        "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                        "lineNumber": 15812,
                        "columnNumber": 8
                      },
                      {
                        "functionName": "dwAjaxDwrFinished",
                        "scriptId": "117",
                        "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                        "lineNumber": 16040,
                        "columnNumber": 4
                      },
                      {
                        "functionName": "xmlHttp.onreadystatechange",
                        "scriptId": "117",
                        "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                        "lineNumber": 16002,
                        "columnNumber": 16
                      }
                    ],
                    "parent": {
                      "description": "XMLHttpRequest.send",
                      "callFrames": [
                        {
                          "functionName": "dwAjaxToServer",
                          "scriptId": "117",
                          "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                          "lineNumber": 16016,
                          "columnNumber": 12
                        },
                        {
                          "functionName": "dwAjaxSendUpdates",
                          "scriptId": "117",
                          "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                          "lineNumber": 15812,
                          "columnNumber": 8
                        },
                        {
                          "functionName": "dwAjaxDwrFinished",
                          "scriptId": "117",
                          "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                          "lineNumber": 16040,
                          "columnNumber": 4
                        },
                        {
                          "functionName": "xmlHttp.onreadystatechange",
                          "scriptId": "117",
                          "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                          "lineNumber": 16002,
                          "columnNumber": 16
                        }
                      ],
                      "parent": {
                        "description": "XMLHttpRequest.send",
                        "callFrames": [
                          {
                            "functionName": "dwAjaxToServer",
                            "scriptId": "117",
                            "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                            "lineNumber": 16016,
                            "columnNumber": 12
                          },
                          {
                            "functionName": "dwAjaxSendUpdates",
                            "scriptId": "117",
                            "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                            "lineNumber": 15812,
                            "columnNumber": 8
                          },
                          {
                            "functionName": "dwAjaxAddUpdate",
                            "scriptId": "117",
                            "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                            "lineNumber": 15751,
                            "columnNumber": 8
                          },
                          {
                            "functionName": "dwAjaxDefaultOnResize",
                            "scriptId": "117",
                            "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                            "lineNumber": 17548,
                            "columnNumber": 4
                          },
                          {
                            "functionName": "DwResizeRegistry.notifyControls",
                            "scriptId": "117",
                            "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                            "lineNumber": 13847,
                            "columnNumber": 12
                          },
                          {
                            "functionName": "DwResizeRegistry.updateSizes",
                            "scriptId": "117",
                            "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                            "lineNumber": 13789,
                            "columnNumber": 13
                          },
                          {
                            "functionName": "dwFrameworkInitFrameworkFinished",
                            "scriptId": "117",
                            "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                            "lineNumber": 7290,
                            "columnNumber": 34
                          },
                          {
                            "functionName": "init",
                            "scriptId": "122",
                            "url": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513",
                            "lineNumber": 71,
                            "columnNumber": 2272
                          },
                          {
                            "functionName": "onload",
                            "scriptId": "124",
                            "url": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513#2VF2D59BB6A19D241BF39AB8ED9782EC2676FB7D71DEA3F1B037E8A2D71F8FA91ED584BD081D6809030379CF8994891F65A8986CB38788501DB2F64C48C2D48691EC16B9477F538F011A91C9AA4E9AFEE315C79723E5AA1EB16B15031488FA743A690E2C31409293DC460553BC507C7BD94F7BF98B910BA76F04056FEF1A7BDC375B3BE8AE75D4A926AFE49D7762A6E60476BEBC713FA7FB2B155EB5CCD51A90D291C6798FCFE55699A76410CDE3B0446A5B504D3A8DCABCDDFDC43E28D86EDC81E6B7BFBA9C17998722AD7DC364F9B360B683AAF83000B8EBD51BD302897629C3579B0F4749890DFAEB2362C869E392B5E3FAADBE2D43BCFBC4C3632980B4B3D178D71AEF2EDC4AC0A207E5B628656549B3046DEBFB63331888B0C66897C62E02F0B82D220F96B06850C9AC59B34A7068454EB9B217DACCF224AF08DC573CEF013D5A7451FCDAFD827D8468EB71307DB9C421BE5AB56DD2CE6D2BAE5FFAD443C040E219C275338272C421BE5AB56DD2CE4EF98D6992C4A806A407D72CC44AD536F310827032D1AC056F89419881BF0DD5FCA12A0C1A8645C27C84DE9E0758A61631D52F27C125C1962BEB5B1C502E63A0BD6FF56630359A02627BDDDF793428EB2FA9EF932288B6B1EDF8A369FE8EE7F897DB9E3E3C84DD434F60686263DBEFD8FCCFCDAA59EAFC214F8171A05960530A9E5ABC51215E170F97DB9E3E3C84DD43DEC89585795B3874396402DD57C617A3C55FAE20F8C83C126638D24CBBC9DDDC8C8FA8D1298C97B9BBB92FB6BF271FB48345DDE94A571D0203AF5EEE5F1F2504DB148DE2EFD18A5668F70C371CE81BC89B37ABAF25FA84DACBA72043D96AEA4F298899DF7BA9DE229033D0AC10369C34D8502B5D38A884306870A18576B8D81AEFED8CAFCAE38FB38CDCE50946CE89B85A3E170EFEED9236091324AA21FE5C69BFD3C9875BD8C8EDED07AD10AEF4D84EEA4B9B45BFB90963B7D3C6C577B0F69F905385ABE9EDFFA53913940B31BC4622F515E8079FFB2D51BD6FF56630359A02627BDDDF793428EB2FA9EF932288B6B1EDF8A369FE8EE7F897DB9E3E3C84DD434F60686263DBEFD8FCCFCDAA59EAFC214F8171A05960530A9E5ABC51215E170F97DB9E3E3C84DD43DEC89585795B387440FD0D31E517DED4D161239C4F766D2711E3BB35041F1DDA7CF0863DB9386F606E08741D82FFD013293CC950248C0832FD04E7D3A07AD7B057EC30D755D283A4F515E8079FFB2D513D641BC2AF619F99C2F82A5CD507A9B60068C075906E849BA93A7B904DEB5A243B82214FFADAC952DD79BC627DD9DA3754FF0BE055B41B169E69002C06B4DE79F6C7B0DFBD3A0F522E65D7D9029BAB57CA12C1989BD261A69E69002C06B4DE79C7DC379705A4A84B6638D24CBBC9DDDC20B327CD29F50D15E4AD0A914CE23B089F436871D356837441BEC24302DBDBEC90644A227A6BC2D79DD0FB0244CDB5D164AFEE39E460DE8BE26433895B733653B9EA7E0818E6E95D41C8185567494EE8A5DD1D3D275250FD9A11E3A038EC5B42E9233C1D71C6391368F8A064E4615E43B811320325352C9D7B0496E262C373D04BE9E084FF8E9A3F2E65D7D9029BAB57B5CE2E7DCF0EAE70274DA4EDC454021AAB47E7D7FED1AFAB1FC721FCFD895E4094141E1AD049AA3622BF63BEA0373671EC16B9477F538F011A91C9AA4E9AFEE346D2AB2727781C74481117D634D964C50381183B796E17F213DA5CF05D8352EA7C2C0FF9D1BA7E865443427661C8AD65556FD0C06B132190C1E51CF9D83BACA12D04FBEDDEE8AF2AF6B3D33534177841A0CA7DC92DFEE22317138B4EC17ABBEA0381183B796E17F213DA5CF05D8352EA04056FEF1A7BDC378767B1590C24642445D85C35CE229B547E56B897C73DE385115B9CAB0EFDD59AEE3351CA6A1D79B6440232ECD2F139DBAB47E7D7FED1AFAB1FC721FCFD895E4076B5E6FD416F51F99AF8A113450A88512654A5EFA96698B9FE795E3125D4E185E2262FA8F088B802ACDB74B330B326A93FC34E72FDF43319A016572D59868882154FBE04B0A192C40BC3C01ADFBA2D0FFFF5161B05317F677366F94870710960",
                            "lineNumber": 71,
                            "columnNumber": 3699
                          }
                        ]
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "_priority": "High",
        "_resourceType": "xhr",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "GET",
          "url": "https://ekat.festool.de/login/WEB-API/updateSessionTimer",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": ":authority",
              "value": "ekat.festool.de"
            },
            {
              "name": ":method",
              "value": "GET"
            },
            {
              "name": ":path",
              "value": "/login/WEB-API/updateSessionTimer"
            },
            {
              "name": ":scheme",
              "value": "https"
            },
            {
              "name": "accept",
              "value": "*/*"
            },
            {
              "name": "accept-encoding",
              "value": "gzip, deflate, br, zstd"
            },
            {
              "name": "accept-language",
              "value": "en-GB,en-US;q=0.9,en;q=0.8"
            },
            {
              "name": "cache-control",
              "value": "no-cache,no-store,must-revalidate,post-check=0,pre-check=0"
            },
            {
              "name": "content-type",
              "value": "application/x-www-form-urlencoded;charset=UTF-8"
            },
            {
              "name": "expires",
              "value": "0"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "pragma",
              "value": "no-cache"
            },
            {
              "name": "priority",
              "value": "u=1, i"
            },
            {
              "name": "referer",
              "value": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            },
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "sec-fetch-dest",
              "value": "empty"
            },
            {
              "name": "sec-fetch-mode",
              "value": "cors"
            },
            {
              "name": "sec-fetch-site",
              "value": "same-origin"
            },
            {
              "name": "user-agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            }
          ],
          "queryString": [],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "accept-ranges",
              "value": "bytes"
            },
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "cache-control",
              "value": "no-cache,no-store,must-revalidate,post-check=0,pre-check=0"
            },
            {
              "name": "content-length",
              "value": "0"
            },
            {
              "name": "content-type",
              "value": "text/html;charset=utf-8"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 09:09:52 GMT"
            },
            {
              "name": "expires",
              "value": "Thu, 01 Jan 1970 00:00:00 GMT"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "pragma",
              "value": "no-cache"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "x-robots-tag",
              "value": "noindex"
            }
          ],
          "cookies": [],
          "content": {
            "size": 0,
            "mimeType": "text/html",
            "text": ""
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": -1,
          "_transferSize": 79,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:12.654Z",
        "time": 47.95999999623746,
        "timings": {
          "blocked": 1.7670000261440872,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0.2470000000000001,
          "wait": 45.36799999269843,
          "receive": 0.5779999773949385,
          "_blocked_queueing": 0.7220000261440873,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_connectionId": "1726423",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "script",
          "stack": {
            "callFrames": [
              {
                "functionName": "dwAjaxToServer",
                "scriptId": "117",
                "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                "lineNumber": 16016,
                "columnNumber": 12
              },
              {
                "functionName": "dwAjaxSendUpdates",
                "scriptId": "117",
                "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                "lineNumber": 15812,
                "columnNumber": 8
              },
              {
                "functionName": "dwAjaxAddUpdate",
                "scriptId": "117",
                "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                "lineNumber": 15751,
                "columnNumber": 8
              },
              {
                "functionName": "dwAjaxInvisibleUriLoaded",
                "scriptId": "117",
                "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                "lineNumber": 17776,
                "columnNumber": 4
              },
              {
                "functionName": "",
                "scriptId": "117",
                "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                "lineNumber": 2208,
                "columnNumber": 24
              }
            ],
            "parent": {
              "description": "XMLHttpRequest.send",
              "callFrames": [
                {
                  "functionName": "dwUtilsLoadUrlInInvisibleTarget",
                  "scriptId": "117",
                  "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                  "lineNumber": 2213,
                  "columnNumber": 16
                },
                {
                  "functionName": "eval",
                  "scriptId": "210",
                  "url": "",
                  "lineNumber": 0,
                  "columnNumber": 0
                },
                {
                  "functionName": "dwUtilsEvaluateJavascript",
                  "scriptId": "117",
                  "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                  "lineNumber": 1778,
                  "columnNumber": 8
                },
                {
                  "functionName": "dwAjaxGotUpdate",
                  "scriptId": "117",
                  "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                  "lineNumber": 16102,
                  "columnNumber": 16
                },
                {
                  "functionName": "xmlHttp.onreadystatechange",
                  "scriptId": "117",
                  "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                  "lineNumber": 15926,
                  "columnNumber": 24
                }
              ],
              "parent": {
                "description": "XMLHttpRequest.send",
                "callFrames": [
                  {
                    "functionName": "dwAjaxToServer",
                    "scriptId": "117",
                    "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                    "lineNumber": 16016,
                    "columnNumber": 12
                  },
                  {
                    "functionName": "dwAjaxSendUpdates",
                    "scriptId": "117",
                    "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                    "lineNumber": 15812,
                    "columnNumber": 8
                  },
                  {
                    "functionName": "dwAjaxAddUpdate",
                    "scriptId": "117",
                    "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                    "lineNumber": 15751,
                    "columnNumber": 8
                  },
                  {
                    "functionName": "dwImageViewerSetNormalizedZoom_immediately",
                    "scriptId": "117",
                    "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                    "lineNumber": 9977,
                    "columnNumber": 8
                  },
                  {
                    "functionName": "",
                    "scriptId": "117",
                    "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                    "lineNumber": 10215,
                    "columnNumber": 8
                  }
                ],
                "parent": {
                  "description": "setTimeout",
                  "callFrames": [
                    {
                      "functionName": "dwImageViewerScrollResize",
                      "scriptId": "117",
                      "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                      "lineNumber": 10214,
                      "columnNumber": 4
                    },
                    {
                      "functionName": "eval",
                      "scriptId": "209",
                      "url": "",
                      "lineNumber": 0,
                      "columnNumber": 0
                    },
                    {
                      "functionName": "dwUtilsEvaluateJavascript",
                      "scriptId": "117",
                      "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                      "lineNumber": 1778,
                      "columnNumber": 8
                    },
                    {
                      "functionName": "dwAjaxGotUpdate",
                      "scriptId": "117",
                      "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                      "lineNumber": 16102,
                      "columnNumber": 16
                    },
                    {
                      "functionName": "xmlHttp.onreadystatechange",
                      "scriptId": "117",
                      "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                      "lineNumber": 15926,
                      "columnNumber": 24
                    }
                  ],
                  "parent": {
                    "description": "XMLHttpRequest.send",
                    "callFrames": [
                      {
                        "functionName": "dwAjaxToServer",
                        "scriptId": "117",
                        "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                        "lineNumber": 16016,
                        "columnNumber": 12
                      },
                      {
                        "functionName": "dwAjaxSendUpdates",
                        "scriptId": "117",
                        "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                        "lineNumber": 15812,
                        "columnNumber": 8
                      },
                      {
                        "functionName": "dwAjaxDwrFinished",
                        "scriptId": "117",
                        "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                        "lineNumber": 16040,
                        "columnNumber": 4
                      },
                      {
                        "functionName": "xmlHttp.onreadystatechange",
                        "scriptId": "117",
                        "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                        "lineNumber": 16002,
                        "columnNumber": 16
                      }
                    ],
                    "parent": {
                      "description": "XMLHttpRequest.send",
                      "callFrames": [
                        {
                          "functionName": "dwAjaxToServer",
                          "scriptId": "117",
                          "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                          "lineNumber": 16016,
                          "columnNumber": 12
                        },
                        {
                          "functionName": "dwAjaxSendUpdates",
                          "scriptId": "117",
                          "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                          "lineNumber": 15812,
                          "columnNumber": 8
                        },
                        {
                          "functionName": "dwAjaxDwrFinished",
                          "scriptId": "117",
                          "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                          "lineNumber": 16040,
                          "columnNumber": 4
                        },
                        {
                          "functionName": "xmlHttp.onreadystatechange",
                          "scriptId": "117",
                          "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                          "lineNumber": 16002,
                          "columnNumber": 16
                        }
                      ],
                      "parent": {
                        "description": "XMLHttpRequest.send",
                        "callFrames": [
                          {
                            "functionName": "dwAjaxToServer",
                            "scriptId": "117",
                            "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                            "lineNumber": 16016,
                            "columnNumber": 12
                          },
                          {
                            "functionName": "dwAjaxSendUpdates",
                            "scriptId": "117",
                            "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                            "lineNumber": 15812,
                            "columnNumber": 8
                          },
                          {
                            "functionName": "dwAjaxDwrFinished",
                            "scriptId": "117",
                            "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                            "lineNumber": 16040,
                            "columnNumber": 4
                          },
                          {
                            "functionName": "xmlHttp.onreadystatechange",
                            "scriptId": "117",
                            "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                            "lineNumber": 16002,
                            "columnNumber": 16
                          }
                        ],
                        "parent": {
                          "description": "XMLHttpRequest.send",
                          "callFrames": [
                            {
                              "functionName": "dwAjaxToServer",
                              "scriptId": "117",
                              "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                              "lineNumber": 16016,
                              "columnNumber": 12
                            },
                            {
                              "functionName": "dwAjaxSendUpdates",
                              "scriptId": "117",
                              "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                              "lineNumber": 15812,
                              "columnNumber": 8
                            },
                            {
                              "functionName": "dwAjaxAddUpdate",
                              "scriptId": "117",
                              "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                              "lineNumber": 15751,
                              "columnNumber": 8
                            },
                            {
                              "functionName": "dwAjaxDefaultOnResize",
                              "scriptId": "117",
                              "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                              "lineNumber": 17548,
                              "columnNumber": 4
                            },
                            {
                              "functionName": "DwResizeRegistry.notifyControls",
                              "scriptId": "117",
                              "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                              "lineNumber": 13847,
                              "columnNumber": 12
                            },
                            {
                              "functionName": "DwResizeRegistry.updateSizes",
                              "scriptId": "117",
                              "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                              "lineNumber": 13789,
                              "columnNumber": 13
                            },
                            {
                              "functionName": "dwFrameworkInitFrameworkFinished",
                              "scriptId": "117",
                              "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                              "lineNumber": 7290,
                              "columnNumber": 34
                            },
                            {
                              "functionName": "init",
                              "scriptId": "122",
                              "url": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513",
                              "lineNumber": 71,
                              "columnNumber": 2272
                            },
                            {
                              "functionName": "onload",
                              "scriptId": "124",
                              "url": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513#2VF2D59BB6A19D241BF39AB8ED9782EC2676FB7D71DEA3F1B037E8A2D71F8FA91ED584BD081D6809030379CF8994891F65A8986CB38788501DB2F64C48C2D48691EC16B9477F538F011A91C9AA4E9AFEE315C79723E5AA1EB16B15031488FA743A690E2C31409293DC460553BC507C7BD94F7BF98B910BA76F04056FEF1A7BDC375B3BE8AE75D4A926AFE49D7762A6E60476BEBC713FA7FB2B155EB5CCD51A90D291C6798FCFE55699A76410CDE3B0446A5B504D3A8DCABCDDFDC43E28D86EDC81E6B7BFBA9C17998722AD7DC364F9B360B683AAF83000B8EBD51BD302897629C3579B0F4749890DFAEB2362C869E392B5E3FAADBE2D43BCFBC4C3632980B4B3D178D71AEF2EDC4AC0A207E5B628656549B3046DEBFB63331888B0C66897C62E02F0B82D220F96B06850C9AC59B34A7068454EB9B217DACCF224AF08DC573CEF013D5A7451FCDAFD827D8468EB71307DB9C421BE5AB56DD2CE6D2BAE5FFAD443C040E219C275338272C421BE5AB56DD2CE4EF98D6992C4A806A407D72CC44AD536F310827032D1AC056F89419881BF0DD5FCA12A0C1A8645C27C84DE9E0758A61631D52F27C125C1962BEB5B1C502E63A0BD6FF56630359A02627BDDDF793428EB2FA9EF932288B6B1EDF8A369FE8EE7F897DB9E3E3C84DD434F60686263DBEFD8FCCFCDAA59EAFC214F8171A05960530A9E5ABC51215E170F97DB9E3E3C84DD43DEC89585795B3874396402DD57C617A3C55FAE20F8C83C126638D24CBBC9DDDC8C8FA8D1298C97B9BBB92FB6BF271FB48345DDE94A571D0203AF5EEE5F1F2504DB148DE2EFD18A5668F70C371CE81BC89B37ABAF25FA84DACBA72043D96AEA4F298899DF7BA9DE229033D0AC10369C34D8502B5D38A884306870A18576B8D81AEFED8CAFCAE38FB38CDCE50946CE89B85A3E170EFEED9236091324AA21FE5C69BFD3C9875BD8C8EDED07AD10AEF4D84EEA4B9B45BFB90963B7D3C6C577B0F69F905385ABE9EDFFA53913940B31BC4622F515E8079FFB2D51BD6FF56630359A02627BDDDF793428EB2FA9EF932288B6B1EDF8A369FE8EE7F897DB9E3E3C84DD434F60686263DBEFD8FCCFCDAA59EAFC214F8171A05960530A9E5ABC51215E170F97DB9E3E3C84DD43DEC89585795B387440FD0D31E517DED4D161239C4F766D2711E3BB35041F1DDA7CF0863DB9386F606E08741D82FFD013293CC950248C0832FD04E7D3A07AD7B057EC30D755D283A4F515E8079FFB2D513D641BC2AF619F99C2F82A5CD507A9B60068C075906E849BA93A7B904DEB5A243B82214FFADAC952DD79BC627DD9DA3754FF0BE055B41B169E69002C06B4DE79F6C7B0DFBD3A0F522E65D7D9029BAB57CA12C1989BD261A69E69002C06B4DE79C7DC379705A4A84B6638D24CBBC9DDDC20B327CD29F50D15E4AD0A914CE23B089F436871D356837441BEC24302DBDBEC90644A227A6BC2D79DD0FB0244CDB5D164AFEE39E460DE8BE26433895B733653B9EA7E0818E6E95D41C8185567494EE8A5DD1D3D275250FD9A11E3A038EC5B42E9233C1D71C6391368F8A064E4615E43B811320325352C9D7B0496E262C373D04BE9E084FF8E9A3F2E65D7D9029BAB57B5CE2E7DCF0EAE70274DA4EDC454021AAB47E7D7FED1AFAB1FC721FCFD895E4094141E1AD049AA3622BF63BEA0373671EC16B9477F538F011A91C9AA4E9AFEE346D2AB2727781C74481117D634D964C50381183B796E17F213DA5CF05D8352EA7C2C0FF9D1BA7E865443427661C8AD65556FD0C06B132190C1E51CF9D83BACA12D04FBEDDEE8AF2AF6B3D33534177841A0CA7DC92DFEE22317138B4EC17ABBEA0381183B796E17F213DA5CF05D8352EA04056FEF1A7BDC378767B1590C24642445D85C35CE229B547E56B897C73DE385115B9CAB0EFDD59AEE3351CA6A1D79B6440232ECD2F139DBAB47E7D7FED1AFAB1FC721FCFD895E4076B5E6FD416F51F99AF8A113450A88512654A5EFA96698B9FE795E3125D4E185E2262FA8F088B802ACDB74B330B326A93FC34E72FDF43319A016572D59868882154FBE04B0A192C40BC3C01ADFBA2D0FFFF5161B05317F677366F94870710960",
                              "lineNumber": 71,
                              "columnNumber": 3699
                            }
                          ]
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "_priority": "High",
        "_resourceType": "xhr",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "POST",
          "url": "https://ekat.festool.de/ekat/ajax",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": ":authority",
              "value": "ekat.festool.de"
            },
            {
              "name": ":method",
              "value": "POST"
            },
            {
              "name": ":path",
              "value": "/ekat/ajax"
            },
            {
              "name": ":scheme",
              "value": "https"
            },
            {
              "name": "accept",
              "value": "*/*"
            },
            {
              "name": "accept-encoding",
              "value": "gzip, deflate, br, zstd"
            },
            {
              "name": "accept-language",
              "value": "en-GB,en-US;q=0.9,en;q=0.8"
            },
            {
              "name": "cache-control",
              "value": "no-cache,no-store,must-revalidate,post-check=0,pre-check=0"
            },
            {
              "name": "content-length",
              "value": "231"
            },
            {
              "name": "content-type",
              "value": "text/plain; charset=UTF-8"
            },
            {
              "name": "expires",
              "value": "0"
            },
            {
              "name": "origin",
              "value": "https://ekat.festool.de"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "pragma",
              "value": "no-cache"
            },
            {
              "name": "priority",
              "value": "u=1, i"
            },
            {
              "name": "referer",
              "value": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            },
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "sec-fetch-dest",
              "value": "empty"
            },
            {
              "name": "sec-fetch-mode",
              "value": "cors"
            },
            {
              "name": "sec-fetch-site",
              "value": "same-origin"
            },
            {
              "name": "user-agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            }
          ],
          "queryString": [],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 231,
          "postData": {
            "mimeType": "text/plain; charset=UTF-8",
            "text": "currentBrowserRootWindow@DW@TWM4965563@DW@1388@DW@1140@DX@TWM4965563@DW@TWM4965563@DW@invisibleUriLoadedEvent@DW@uri=https%3A%2F%2Fekat.festool.de%2Flogin%2FWEB-API%2FupdateSessionTimer@DWSUB@success=true@DWSUB@__INT_statuscode=200"
          }
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://ekat.festool.de"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "cache-control",
              "value": "no-cache,no-store,must-revalidate,post-check=0,pre-check=0"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "content-length",
              "value": "44"
            },
            {
              "name": "content-type",
              "value": "text/html;charset=UTF-8"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 09:09:52 GMT"
            },
            {
              "name": "expires",
              "value": "Thu, 01 Jan 1970 00:00:00 GMT"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "pragma",
              "value": "no-cache"
            },
            {
              "name": "vary",
              "value": "Origin"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "x-robots-tag",
              "value": "noindex"
            }
          ],
          "cookies": [],
          "content": {
            "size": 24,
            "mimeType": "text/html",
            "text": "setChildThreadCount@DW@1"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": -1,
          "_transferSize": 111,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:12.704Z",
        "time": 49.06800005119294,
        "timings": {
          "blocked": 1.1580000598207116,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0.31099999999999994,
          "wait": 47.12900002143532,
          "receive": 0.4699999699369073,
          "_blocked_queueing": 0.7570000598207116,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_connectionId": "1726423",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "script",
          "stack": {
            "callFrames": [
              {
                "functionName": "dwAjaxToServer",
                "scriptId": "117",
                "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                "lineNumber": 16016,
                "columnNumber": 12
              },
              {
                "functionName": "dwAjaxSendUpdates",
                "scriptId": "117",
                "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                "lineNumber": 15812,
                "columnNumber": 8
              },
              {
                "functionName": "dwFrameworkPing",
                "scriptId": "117",
                "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                "lineNumber": 7823,
                "columnNumber": 12
              }
            ],
            "parent": {
              "description": "setInterval",
              "callFrames": [
                {
                  "functionName": "dwFrameworkInitFramework",
                  "scriptId": "117",
                  "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                  "lineNumber": 7239,
                  "columnNumber": 27
                },
                {
                  "functionName": "init",
                  "scriptId": "122",
                  "url": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513",
                  "lineNumber": 1,
                  "columnNumber": 2081
                },
                {
                  "functionName": "onload",
                  "scriptId": "124",
                  "url": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513#2VF2D59BB6A19D241BF39AB8ED9782EC2676FB7D71DEA3F1B037E8A2D71F8FA91ED584BD081D6809030379CF8994891F65A8986CB38788501DB2F64C48C2D48691EC16B9477F538F011A91C9AA4E9AFEE315C79723E5AA1EB16B15031488FA743A690E2C31409293DC460553BC507C7BD94F7BF98B910BA76F04056FEF1A7BDC375B3BE8AE75D4A926AFE49D7762A6E60476BEBC713FA7FB2B155EB5CCD51A90D291C6798FCFE55699A76410CDE3B0446A5B504D3A8DCABCDDFDC43E28D86EDC81E6B7BFBA9C17998722AD7DC364F9B360B683AAF83000B8EBD51BD302897629C3579B0F4749890DFAEB2362C869E392B5E3FAADBE2D43BCFBC4C3632980B4B3D178D71AEF2EDC4AC0A207E5B628656549B3046DEBFB63331888B0C66897C62E02F0B82D220F96B06850C9AC59B34A7068454EB9B217DACCF224AF08DC573CEF013D5A7451FCDAFD827D8468EB71307DB9C421BE5AB56DD2CE6D2BAE5FFAD443C040E219C275338272C421BE5AB56DD2CE4EF98D6992C4A806A407D72CC44AD536F310827032D1AC056F89419881BF0DD5FCA12A0C1A8645C27C84DE9E0758A61631D52F27C125C1962BEB5B1C502E63A0BD6FF56630359A02627BDDDF793428EB2FA9EF932288B6B1EDF8A369FE8EE7F897DB9E3E3C84DD434F60686263DBEFD8FCCFCDAA59EAFC214F8171A05960530A9E5ABC51215E170F97DB9E3E3C84DD43DEC89585795B3874396402DD57C617A3C55FAE20F8C83C126638D24CBBC9DDDC8C8FA8D1298C97B9BBB92FB6BF271FB48345DDE94A571D0203AF5EEE5F1F2504DB148DE2EFD18A5668F70C371CE81BC89B37ABAF25FA84DACBA72043D96AEA4F298899DF7BA9DE229033D0AC10369C34D8502B5D38A884306870A18576B8D81AEFED8CAFCAE38FB38CDCE50946CE89B85A3E170EFEED9236091324AA21FE5C69BFD3C9875BD8C8EDED07AD10AEF4D84EEA4B9B45BFB90963B7D3C6C577B0F69F905385ABE9EDFFA53913940B31BC4622F515E8079FFB2D51BD6FF56630359A02627BDDDF793428EB2FA9EF932288B6B1EDF8A369FE8EE7F897DB9E3E3C84DD434F60686263DBEFD8FCCFCDAA59EAFC214F8171A05960530A9E5ABC51215E170F97DB9E3E3C84DD43DEC89585795B387440FD0D31E517DED4D161239C4F766D2711E3BB35041F1DDA7CF0863DB9386F606E08741D82FFD013293CC950248C0832FD04E7D3A07AD7B057EC30D755D283A4F515E8079FFB2D513D641BC2AF619F99C2F82A5CD507A9B60068C075906E849BA93A7B904DEB5A243B82214FFADAC952DD79BC627DD9DA3754FF0BE055B41B169E69002C06B4DE79F6C7B0DFBD3A0F522E65D7D9029BAB57CA12C1989BD261A69E69002C06B4DE79C7DC379705A4A84B6638D24CBBC9DDDC20B327CD29F50D15E4AD0A914CE23B089F436871D356837441BEC24302DBDBEC90644A227A6BC2D79DD0FB0244CDB5D164AFEE39E460DE8BE26433895B733653B9EA7E0818E6E95D41C8185567494EE8A5DD1D3D275250FD9A11E3A038EC5B42E9233C1D71C6391368F8A064E4615E43B811320325352C9D7B0496E262C373D04BE9E084FF8E9A3F2E65D7D9029BAB57B5CE2E7DCF0EAE70274DA4EDC454021AAB47E7D7FED1AFAB1FC721FCFD895E4094141E1AD049AA3622BF63BEA0373671EC16B9477F538F011A91C9AA4E9AFEE346D2AB2727781C74481117D634D964C50381183B796E17F213DA5CF05D8352EA7C2C0FF9D1BA7E865443427661C8AD65556FD0C06B132190C1E51CF9D83BACA12D04FBEDDEE8AF2AF6B3D33534177841A0CA7DC92DFEE22317138B4EC17ABBEA0381183B796E17F213DA5CF05D8352EA04056FEF1A7BDC378767B1590C24642445D85C35CE229B547E56B897C73DE385115B9CAB0EFDD59AEE3351CA6A1D79B6440232ECD2F139DBAB47E7D7FED1AFAB1FC721FCFD895E4076B5E6FD416F51F99AF8A113450A88512654A5EFA96698B9FE795E3125D4E185E2262FA8F088B802ACDB74B330B326A93FC34E72FDF43319A016572D59868882154FBE04B0A192C40BC3C01ADFBA2D0FFFF5161B05317F677366F94870710960",
                  "lineNumber": 71,
                  "columnNumber": 3699
                }
              ]
            }
          }
        },
        "_priority": "High",
        "_resourceType": "xhr",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "POST",
          "url": "https://ekat.festool.de/ekat/ajax",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": ":authority",
              "value": "ekat.festool.de"
            },
            {
              "name": ":method",
              "value": "POST"
            },
            {
              "name": ":path",
              "value": "/ekat/ajax"
            },
            {
              "name": ":scheme",
              "value": "https"
            },
            {
              "name": "accept",
              "value": "*/*"
            },
            {
              "name": "accept-encoding",
              "value": "gzip, deflate, br, zstd"
            },
            {
              "name": "accept-language",
              "value": "en-GB,en-US;q=0.9,en;q=0.8"
            },
            {
              "name": "cache-control",
              "value": "no-cache,no-store,must-revalidate,post-check=0,pre-check=0"
            },
            {
              "name": "content-length",
              "value": "62"
            },
            {
              "name": "content-type",
              "value": "text/plain; charset=UTF-8"
            },
            {
              "name": "expires",
              "value": "0"
            },
            {
              "name": "origin",
              "value": "https://ekat.festool.de"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "pragma",
              "value": "no-cache"
            },
            {
              "name": "priority",
              "value": "u=1, i"
            },
            {
              "name": "referer",
              "value": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            },
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "sec-fetch-dest",
              "value": "empty"
            },
            {
              "name": "sec-fetch-mode",
              "value": "cors"
            },
            {
              "name": "sec-fetch-site",
              "value": "same-origin"
            },
            {
              "name": "user-agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            }
          ],
          "queryString": [],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 62,
          "postData": {
            "mimeType": "text/plain; charset=UTF-8",
            "text": "currentBrowserRootWindow@DW@TWM4965563@DW@1388@DW@1140@DX@ping"
          }
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://ekat.festool.de"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "cache-control",
              "value": "no-cache,no-store,must-revalidate,post-check=0,pre-check=0"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "content-length",
              "value": "44"
            },
            {
              "name": "content-type",
              "value": "text/html;charset=UTF-8"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 09:09:52 GMT"
            },
            {
              "name": "expires",
              "value": "Thu, 01 Jan 1970 00:00:00 GMT"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "pragma",
              "value": "no-cache"
            },
            {
              "name": "vary",
              "value": "Origin"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "x-robots-tag",
              "value": "noindex"
            }
          ],
          "cookies": [],
          "content": {
            "size": 24,
            "mimeType": "text/html",
            "text": "setChildThreadCount@DW@1"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": -1,
          "_transferSize": 111,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:13.064Z",
        "time": 43.22900006081909,
        "timings": {
          "blocked": 1.4310000401958822,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0.28700000000000003,
          "wait": 41.03800002784282,
          "receive": 0.4729999927803874,
          "_blocked_queueing": 0.7850000401958823,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_connectionId": "1726423",
        "pageref": "page_1"
      },
      {
        "_initiator": {
          "type": "script",
          "stack": {
            "callFrames": [
              {
                "functionName": "dwAjaxToServer",
                "scriptId": "117",
                "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                "lineNumber": 16016,
                "columnNumber": 12
              },
              {
                "functionName": "dwAjaxSendUpdates",
                "scriptId": "117",
                "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                "lineNumber": 15812,
                "columnNumber": 8
              },
              {
                "functionName": "dwFrameworkPing",
                "scriptId": "117",
                "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                "lineNumber": 7823,
                "columnNumber": 12
              }
            ],
            "parent": {
              "description": "setInterval",
              "callFrames": [
                {
                  "functionName": "dwFrameworkInitFramework",
                  "scriptId": "117",
                  "url": "https://ekat.festool.de/ekat/WEB-RES/js/base.js_javaviewer_7.26.1.11.js",
                  "lineNumber": 7239,
                  "columnNumber": 27
                },
                {
                  "functionName": "init",
                  "scriptId": "122",
                  "url": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513",
                  "lineNumber": 1,
                  "columnNumber": 2081
                },
                {
                  "functionName": "onload",
                  "scriptId": "124",
                  "url": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513#2VF2D59BB6A19D241BF39AB8ED9782EC2676FB7D71DEA3F1B037E8A2D71F8FA91ED584BD081D6809030379CF8994891F65A8986CB38788501DB2F64C48C2D48691EC16B9477F538F011A91C9AA4E9AFEE315C79723E5AA1EB16B15031488FA743A690E2C31409293DC460553BC507C7BD94F7BF98B910BA76F04056FEF1A7BDC375B3BE8AE75D4A926AFE49D7762A6E60476BEBC713FA7FB2B155EB5CCD51A90D291C6798FCFE55699A76410CDE3B0446A5B504D3A8DCABCDDFDC43E28D86EDC81E6B7BFBA9C17998722AD7DC364F9B360B683AAF83000B8EBD51BD302897629C3579B0F4749890DFAEB2362C869E392B5E3FAADBE2D43BCFBC4C3632980B4B3D178D71AEF2EDC4AC0A207E5B628656549B3046DEBFB63331888B0C66897C62E02F0B82D220F96B06850C9AC59B34A7068454EB9B217DACCF224AF08DC573CEF013D5A7451FCDAFD827D8468EB71307DB9C421BE5AB56DD2CE6D2BAE5FFAD443C040E219C275338272C421BE5AB56DD2CE4EF98D6992C4A806A407D72CC44AD536F310827032D1AC056F89419881BF0DD5FCA12A0C1A8645C27C84DE9E0758A61631D52F27C125C1962BEB5B1C502E63A0BD6FF56630359A02627BDDDF793428EB2FA9EF932288B6B1EDF8A369FE8EE7F897DB9E3E3C84DD434F60686263DBEFD8FCCFCDAA59EAFC214F8171A05960530A9E5ABC51215E170F97DB9E3E3C84DD43DEC89585795B3874396402DD57C617A3C55FAE20F8C83C126638D24CBBC9DDDC8C8FA8D1298C97B9BBB92FB6BF271FB48345DDE94A571D0203AF5EEE5F1F2504DB148DE2EFD18A5668F70C371CE81BC89B37ABAF25FA84DACBA72043D96AEA4F298899DF7BA9DE229033D0AC10369C34D8502B5D38A884306870A18576B8D81AEFED8CAFCAE38FB38CDCE50946CE89B85A3E170EFEED9236091324AA21FE5C69BFD3C9875BD8C8EDED07AD10AEF4D84EEA4B9B45BFB90963B7D3C6C577B0F69F905385ABE9EDFFA53913940B31BC4622F515E8079FFB2D51BD6FF56630359A02627BDDDF793428EB2FA9EF932288B6B1EDF8A369FE8EE7F897DB9E3E3C84DD434F60686263DBEFD8FCCFCDAA59EAFC214F8171A05960530A9E5ABC51215E170F97DB9E3E3C84DD43DEC89585795B387440FD0D31E517DED4D161239C4F766D2711E3BB35041F1DDA7CF0863DB9386F606E08741D82FFD013293CC950248C0832FD04E7D3A07AD7B057EC30D755D283A4F515E8079FFB2D513D641BC2AF619F99C2F82A5CD507A9B60068C075906E849BA93A7B904DEB5A243B82214FFADAC952DD79BC627DD9DA3754FF0BE055B41B169E69002C06B4DE79F6C7B0DFBD3A0F522E65D7D9029BAB57CA12C1989BD261A69E69002C06B4DE79C7DC379705A4A84B6638D24CBBC9DDDC20B327CD29F50D15E4AD0A914CE23B089F436871D356837441BEC24302DBDBEC90644A227A6BC2D79DD0FB0244CDB5D164AFEE39E460DE8BE26433895B733653B9EA7E0818E6E95D41C8185567494EE8A5DD1D3D275250FD9A11E3A038EC5B42E9233C1D71C6391368F8A064E4615E43B811320325352C9D7B0496E262C373D04BE9E084FF8E9A3F2E65D7D9029BAB57B5CE2E7DCF0EAE70274DA4EDC454021AAB47E7D7FED1AFAB1FC721FCFD895E4094141E1AD049AA3622BF63BEA0373671EC16B9477F538F011A91C9AA4E9AFEE346D2AB2727781C74481117D634D964C50381183B796E17F213DA5CF05D8352EA7C2C0FF9D1BA7E865443427661C8AD65556FD0C06B132190C1E51CF9D83BACA12D04FBEDDEE8AF2AF6B3D33534177841A0CA7DC92DFEE22317138B4EC17ABBEA0381183B796E17F213DA5CF05D8352EA04056FEF1A7BDC378767B1590C24642445D85C35CE229B547E56B897C73DE385115B9CAB0EFDD59AEE3351CA6A1D79B6440232ECD2F139DBAB47E7D7FED1AFAB1FC721FCFD895E4076B5E6FD416F51F99AF8A113450A88512654A5EFA96698B9FE795E3125D4E185E2262FA8F088B802ACDB74B330B326A93FC34E72FDF43319A016572D59868882154FBE04B0A192C40BC3C01ADFBA2D0FFFF5161B05317F677366F94870710960",
                  "lineNumber": 71,
                  "columnNumber": 3699
                }
              ]
            }
          }
        },
        "_priority": "High",
        "_resourceType": "xhr",
        "cache": {},
        "connection": "443",
        "request": {
          "method": "POST",
          "url": "https://ekat.festool.de/ekat/ajax",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": ":authority",
              "value": "ekat.festool.de"
            },
            {
              "name": ":method",
              "value": "POST"
            },
            {
              "name": ":path",
              "value": "/ekat/ajax"
            },
            {
              "name": ":scheme",
              "value": "https"
            },
            {
              "name": "accept",
              "value": "*/*"
            },
            {
              "name": "accept-encoding",
              "value": "gzip, deflate, br, zstd"
            },
            {
              "name": "accept-language",
              "value": "en-GB,en-US;q=0.9,en;q=0.8"
            },
            {
              "name": "cache-control",
              "value": "no-cache,no-store,must-revalidate,post-check=0,pre-check=0"
            },
            {
              "name": "content-length",
              "value": "62"
            },
            {
              "name": "content-type",
              "value": "text/plain; charset=UTF-8"
            },
            {
              "name": "expires",
              "value": "0"
            },
            {
              "name": "origin",
              "value": "https://ekat.festool.de"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "pragma",
              "value": "no-cache"
            },
            {
              "name": "priority",
              "value": "u=1, i"
            },
            {
              "name": "referer",
              "value": "https://ekat.festool.de/ekat/app?__bk_&__windowid=TWM4965563&__rid=AQW1787216991513"
            },
            {
              "name": "sec-ch-ua",
              "value": "\"Not=A?Brand\";v=\"99\", \"Google Chrome\";v=\"151\", \"Chromium\";v=\"151\""
            },
            {
              "name": "sec-ch-ua-mobile",
              "value": "?1"
            },
            {
              "name": "sec-ch-ua-platform",
              "value": "\"Android\""
            },
            {
              "name": "sec-fetch-dest",
              "value": "empty"
            },
            {
              "name": "sec-fetch-mode",
              "value": "cors"
            },
            {
              "name": "sec-fetch-site",
              "value": "same-origin"
            },
            {
              "name": "user-agent",
              "value": "Mozilla/5.0 (Linux; Android 15; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Mobile Safari/537.36"
            }
          ],
          "queryString": [],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 62,
          "postData": {
            "mimeType": "text/plain; charset=UTF-8",
            "text": "currentBrowserRootWindow@DW@TWM4965563@DW@1388@DW@1140@DX@ping"
          }
        },
        "response": {
          "status": 200,
          "statusText": "",
          "httpVersion": "http/2.0",
          "headers": [
            {
              "name": "access-control-allow-headers",
              "value": "Content-Type"
            },
            {
              "name": "access-control-allow-methods",
              "value": "POST, GET, OPTIONS, DELETE"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://ekat.festool.de"
            },
            {
              "name": "access-control-allow-origin",
              "value": "https://api.festool.io"
            },
            {
              "name": "cache-control",
              "value": "no-cache,no-store,must-revalidate,post-check=0,pre-check=0"
            },
            {
              "name": "content-encoding",
              "value": "gzip"
            },
            {
              "name": "content-length",
              "value": "44"
            },
            {
              "name": "content-type",
              "value": "text/html;charset=UTF-8"
            },
            {
              "name": "date",
              "value": "Thu, 20 Aug 2026 09:09:53 GMT"
            },
            {
              "name": "expires",
              "value": "Thu, 01 Jan 1970 00:00:00 GMT"
            },
            {
              "name": "p3p",
              "value": "CP=\"CAO PSA OUR\""
            },
            {
              "name": "pragma",
              "value": "no-cache"
            },
            {
              "name": "vary",
              "value": "Origin"
            },
            {
              "name": "x-powered-by",
              "value": "ARR/3.0"
            },
            {
              "name": "x-robots-tag",
              "value": "noindex"
            }
          ],
          "cookies": [],
          "content": {
            "size": 24,
            "mimeType": "text/html",
            "text": "setChildThreadCount@DW@0"
          },
          "redirectURL": "",
          "headersSize": -1,
          "bodySize": -1,
          "_transferSize": 111,
          "_error": null,
          "_fetchedViaServiceWorker": false
        },
        "serverIPAddress": "91.217.131.135",
        "startedDateTime": "2026-08-20T09:09:14.051Z",
        "time": 47.94499999843538,
        "timings": {
          "blocked": 1.0799999239370228,
          "dns": -1,
          "ssl": -1,
          "connect": -1,
          "send": 0.42799999999999994,
          "wait": 45.84399998288602,
          "receive": 0.593000091612339,
          "_blocked_queueing": 0.6779999239370227,
          "_workerStart": -1,
          "_workerReady": -1,
          "_workerFetchStart": -1,
          "_workerRespondWithSettled": -1
        },
        "_connectionId": "1726423",
        "pageref": "page_1"
      }
    ]
  }
}